Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Interactivity API iteration for WordPress 6.7 #63232

Open
10 of 30 tasks
luisherranz opened this issue Jul 8, 2024 · 21 comments
Open
10 of 30 tasks

Interactivity API iteration for WordPress 6.7 #63232

luisherranz opened this issue Jul 8, 2024 · 21 comments
Labels
[Feature] Interactivity API API to add frontend interactivity to blocks. [Type] Iteration Scoped iteration of an effort from a tracking issue or overview issue ideally for a major release.

Comments

@luisherranz
Copy link
Member

luisherranz commented Jul 8, 2024


In WordPress 6.6, work was done to improve warnings integration with Preact DevTools, as well as adding directives for asynchronous event handlers and support for derived state on the server.

In WordPress 6.7, we will continue working on internal improvements to ensure that the Interactivity API's code is as simple and stable as possible and to make the Interactivity API resilient when used asynchronously (e.g., adding directives or stores after initialization). This will pave the way for performance improvements such as directive code splitting or lazy loading of interactive blocks.

In Core blocks, work will begin on the Gallery block lightbox and the Query block's Instant Search.

Apart from the work for WordPress 6.7, investigations will continue, with the most important being the exploration of how to improve assets management in region-based client-side navigation and experimenting with full-page client-side navigation. However, those will be tracked in its own Tracking Issue.

Work is also continuing to improve the documentation with enhancements in the API Reference and new explanatory guides tracked in the Interactivity API documentation's Tracking Issue.


This is the list of initial tasks, although we will edit this post as we progress and discover other things that we need to do.

Enhancements

Core blocks (optional)

Bug fixes

Optional

@luisherranz luisherranz added [Type] Tracking Issue Tactical breakdown of efforts across the codebase and/or tied to Overview issues. [Feature] Interactivity API API to add frontend interactivity to blocks. labels Jul 8, 2024
@gziolo gziolo added [Type] Iteration Scoped iteration of an effort from a tracking issue or overview issue ideally for a major release. and removed [Type] Tracking Issue Tactical breakdown of efforts across the codebase and/or tied to Overview issues. labels Jul 8, 2024
@gziolo gziolo changed the title Tracking Issue: Interactivity API in WP 6.7 Interactivity API iteration for WordPress 6.7 Jul 8, 2024
@adamsilverstein
Copy link
Member

Can you also consider #60522?

@luisherranz
Copy link
Member Author

Can you also consider #60522?

I thought that work was still experimental since it requires using Chrome Canary. But if you think it should be included in WordPress 6.7, sure, we can include it 🙂

@adamsilverstein
Copy link
Member

I thought that work was still experimental since it requires using Chrome Canary. But if you think it should be included in WordPress 6.7, sure, we can include it 🙂

true, it is still experimental and thus maybe not ready for 6.7!

I'm hoping it lands in stable soon and this is a purely debugging related feature. Mostly I don't want the work to fall off the radar and I thought to some degree experimental features where acceptable in Gutenberg since we can always pull them before merging into core.

@luisherranz
Copy link
Member Author

Ok, then let's leave it out of the list of things for WordPress 6.7 but let's keep an eye on including it in future versions once the APIs are stable 🙂

experimental features where acceptable in Gutenberg since we can always pull them before merging into core

Sure, if you want to merge it in Gutenberg to test it out, that's totally fine.

@adamsilverstein
Copy link
Member

Sure, if you want to merge it in Gutenberg to test it out, that's totally fine.

That is indeed exactly what I want to do - in part the goal here is to give the team building the feature (DevTools performance panel extensibility API or "User Timings") feedback about what is useful and what is missing. By testing the feature out in Gutenberg, we can influence how it being built before it lands in stable.

@ajgagnon
Copy link

Any chance of getting a data-wp-if directive included? It would be immensely helpful. Happy to attempt a PR if this is in the scope.

<template data-wp-if="context.open">
    <div>Contents...</div>
</template>

@luisherranz
Copy link
Member Author

Yeah, a data-wp-show directive is on the roadmap indeed.

If you're willing to work on it we'd love to help you out. As far as I remember, the work not only requires the client-side directive implementation, but also an extra function similar to this one for the server-side rendering.

But we can discuss the details in a proper issue or in Slack 🙂

@ajgagnon
Copy link

Sure! I had left a comment there on the original issue here:

#53058 (comment)

It looks like the scope has not been decided yet, so that seems like the first item needed.

@annezazu
Copy link
Contributor

Can someone share an update here as to what's been done thus far and where the work stands?

@luisherranz
Copy link
Member Author

Hey Anne, this is the status of the iteration:

  • Enhancements: We aim to complete all the points listed in enhancements, which have involved a significant and necessary internal refactor of much of the runtime. Additionally, we want to add a couple of new APIs (getServerState and getServerContext). The Lazy loading of interactive blocks is managed by @westonruter, so he should update you on the status.
  • Core blocks: At this point, I cannot say if any of the blocks being worked on will be completed in time for WordPress 6.7. The frontend part regarding interactivity is either complete or nearly complete for most of them. However, they still might get stuck in the Editor UX.
  • Bug fixes: All the important bug fixes have been addressed, and while we will try to complete all the listed ones, the remaining ones are minor.
  • Optional: The items listed here will only be completed if there is time left after working on the rest.

Let me know if this is helpful or if you need more information.

@luisherranz
Copy link
Member Author

@mikachan @madhusudhand, could you give us your estimate on the Gallery, Accordion and Tabs blocks?

@annezazu
Copy link
Contributor

Thank you! I want to get this right for the 6.7 roadmap so I'll remove the Core blocks work for now to be safe until/unless I hear differently.

@sethrubenstein
Copy link
Contributor

@luisherranz Can you share a little bit about what getServerState and what getServerContext will do?

@luisherranz
Copy link
Member Author

Sure! Since it's not possible for the initial server state to overwrite the client state because that approach is not compatible with region-based client-side navigation, we need an API for use cases where, after navigating, you want to inspect the initial state or context of the new page.

So those two functions will return the initial state or context that came from the server and they are reactive, so that initial state or context updates every time there is a client-side navigation. People would normally use them in a data-wp-watch. For example:

<div data-wp-watch="callbacks.updateServerContext">...</div>
store('...', {
  callbacks: {
    updateServerContext() {
      const context = getContext();
      const serverContext = getServerContext();

      // Override some property with the new value that came from the server.
      context.overridableProp = serverContext.overridableProp;
    },
  },
});

That's it! The same for state using getServerState.

@DAreRodz will open a pull request next week, and we appreciate any feedback and assistance testing this new API, that if everything goes well, would make it into WP 6.7 😄

@madhusudhand
Copy link
Contributor

@mikachan @madhusudhand, could you give us your estimate on the Gallery, Accordion and Tabs blocks?

Gallery block is close to getting merged. It is pending with following feedback

  • And moving gallery_id to a shared space - related feedback
  • Accessibility concerns with inert pointed here 🚧

I am looking into the second feedback item. Hopefully it will be resolved this week.

@annezazu
Copy link
Contributor

annezazu commented Sep 3, 2024

Sweet! I'll add the Gallery block back onto the 6.7 roadmap.

@DAreRodz
Copy link
Contributor

DAreRodz commented Sep 9, 2024

Updates

I've added the following bug fixes to the tracking issue:

The first bug was a regression introduced in #62734, and it's merged and ready for the next Gutenberg RC. The second one is a missing piece of logic we forgot to include in #64879. It's ready for review.

The following PR is also ready for review. I've introduced a change that depends on #65135 being merged; the failing test should pass after that.

As the next step, I have to open a PR for getServerContext() and getServerState(), which is currently WIP.

@DAreRodz
Copy link
Contributor

DAreRodz commented Sep 9, 2024

I've just created a draft for the getServerContext() and getServerState() functions.

@michalczaplinski
Copy link
Contributor

I've created a new issue to discuss the getServerState() & getServerContext() APIs: #65243

@madhusudhand
Copy link
Contributor

@annezazu The current approach we took for gallery block is rendering translations on server (because i18n isn't available as script module), which is observed to be complex and is not a good example/practice for the community.
I think we should punt it to 6.8

@annezazu
Copy link
Contributor

Thanks for the update! Agreed. Let’s punt.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Interactivity API API to add frontend interactivity to blocks. [Type] Iteration Scoped iteration of an effort from a tracking issue or overview issue ideally for a major release.
Projects
Status: Definition ✏️
Status: 📋 Iteration/Tracking Issues
Development

No branches or pull requests

9 participants