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

Block Directory: Uninstall unused block types #22918

Merged
merged 5 commits into from
Jun 11, 2020

Conversation

ryelle
Copy link
Contributor

@ryelle ryelle commented Jun 4, 2020

Description

This pulls the rest of #22452 out, which uninstalls any block plugins that were installed from the block directory but not used in this post. See conversation in #22307 for more robust ideas, but this gets the work started with a basic implementation.

The new AutoBlockUninstaller component looks through the list of installed blocks (saved in state, getInstalledBlockTypes) and filters out any that are not used in the current post. On save, if the post is not published, it loops through this unused block list, and removes those plugins & unregisters the blocks.

The uninstall action is run on every save (except autosaves). The original intent was to be run only on publish, but I think this works better — if you save a draft without using Block A, it gets uninstalled. If you want to use that block after all, you can reinstall it. This approach also avoids leaving plugins in a half-installed state, where abandoned drafts are keeping some plugins installed-but-invisible.

Unfortunately someone can still use the plugin in another post concurrently with this one, otherwise the whole persistence issue would be solved 😆

How has this been tested?

Install a few blocks from the block directory, and use some in your post. Before saving, open the plugins list in a new tab (or list via wp-cli). All those plugins are installed. Save your post, it should save correctly, no errors. Reload the plugins list, the blocks that weren't used should be removed.

If there was an error uninstalling, it will display a notice in the editor.

Types of changes

New feature (non-breaking change which adds functionality)

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.

@ryelle ryelle added the [Feature] Block Directory Related to the Block Directory, a repository of block plugins label Jun 4, 2020
@ryelle ryelle self-assigned this Jun 4, 2020
@github-actions
Copy link

github-actions bot commented Jun 4, 2020

Size Change: +451 B (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-directory/index.js 7.22 kB +449 B (6%) 🔍
build/core-data/index.js 11.4 kB -2 B (0%)
build/data-controls/index.js 1.29 kB +3 B (0%)
build/edit-navigation/index.js 8.25 kB +1 B
build/edit-post/index.js 303 kB +1 B
build/edit-site/index.js 15.5 kB -2 B (0%)
build/editor/index.js 44.8 kB -1 B
build/list-reusable-blocks/index.js 3.12 kB +1 B
build/server-side-render/index.js 2.69 kB +1 B
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/style-rtl.css 892 B 0 B
build/block-directory/style.css 892 B 0 B
build/block-editor/index.js 106 kB 0 B
build/block-editor/style-rtl.css 11.4 kB 0 B
build/block-editor/style.css 11.4 kB 0 B
build/block-library/editor-rtl.css 7.87 kB 0 B
build/block-library/editor.css 7.87 kB 0 B
build/block-library/index.js 127 kB 0 B
build/block-library/style-rtl.css 7.72 kB 0 B
build/block-library/style.css 7.72 kB 0 B
build/block-library/theme-rtl.css 684 B 0 B
build/block-library/theme.css 686 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/index.js 194 kB 0 B
build/components/style-rtl.css 19.5 kB 0 B
build/components/style.css 19.5 kB 0 B
build/compose/index.js 9.31 kB 0 B
build/data/index.js 8.45 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 771 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 3.17 kB 0 B
build/edit-navigation/style-rtl.css 918 B 0 B
build/edit-navigation/style.css 919 B 0 B
build/edit-post/style-rtl.css 5.6 kB 0 B
build/edit-post/style.css 5.6 kB 0 B
build/edit-site/style-rtl.css 2.96 kB 0 B
build/edit-site/style.css 2.96 kB 0 B
build/edit-widgets/index.js 9.34 kB 0 B
build/edit-widgets/style-rtl.css 2.4 kB 0 B
build/edit-widgets/style.css 2.4 kB 0 B
build/editor/editor-styles-rtl.css 425 B 0 B
build/editor/editor-styles.css 428 B 0 B
build/editor/style-rtl.css 4.26 kB 0 B
build/editor/style.css 4.27 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.72 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 621 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 711 B 0 B
build/keyboard-shortcuts/index.js 2.51 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 5.3 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.41 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 14.8 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@StevenDufresne
Copy link
Contributor

What about the PrePublish bar showing the blocks when they are not used in the document? Not sure if that's on purpose.

Blocks in sidebar

@ryelle
Copy link
Contributor Author

ryelle commented Jun 5, 2020

What about the PrePublish bar showing the blocks when they are not used in the document?

Good catch, I'll update that.

@ryelle
Copy link
Contributor Author

ryelle commented Jun 5, 2020

@StevenDufresne The pre-publish panel should work correctly now. You can even watch blocks get added & removed from the list by opening the panel, and adding/removing installed blocks to your post. Once saved, the blocks not on the list will get uninstalled. I've also added tests for all this logic (in selectors & for hasBlockType).

Copy link
Contributor

@StevenDufresne StevenDufresne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@StevenDufresne The pre-publish panel should work correctly now. You can even watch blocks get added & removed from the list by opening the panel, and adding/removing installed blocks to your post. Once saved, the blocks not on the list will get uninstalled. I've also added tests for all this logic (in selectors & for hasBlockType).

Yep, it's functioning well. 👍

I think the uninstall error handling will need another pass.

I also want to bubble up this experience that I reference in #22149

Notice how the sidebar changes dramatically because the block is no longer installed.

State flip

StevenDufresne and others added 5 commits June 8, 2020 14:11
This pulls `hasBlockType` out of the block uninstaller, and moves the logic into selectors so we can re-use it for the "blocks to install" list in pre-publish panel.
@ryelle ryelle force-pushed the try/block-directory-auto-uninstall branch from 681be29 to 081b48d Compare June 8, 2020 18:37
Copy link
Contributor

@StevenDufresne StevenDufresne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! Good job 🏆. Nice to have this back in.

@ryelle ryelle merged commit a0112fd into master Jun 11, 2020
@ryelle ryelle deleted the try/block-directory-auto-uninstall branch June 11, 2020 14:55
@github-actions github-actions bot added this to the Gutenberg 8.4 milestone Jun 11, 2020
This was referenced Jun 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Block Directory Related to the Block Directory, a repository of block plugins
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants