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

Introduce new PluginTemplateSettingPanel slot #50257

Merged
merged 2 commits into from
May 3, 2023

Conversation

ntsekouras
Copy link
Contributor

@ntsekouras ntsekouras commented May 2, 2023

What?

This PR introduces a new slot in the Template Sidebar below the main information like the Template Card.

Should we add this slot in block-editor package in order to be reused when we edit a template? 🤔 This could apply to TemplateCard, etc.. Currently there is a mismatch between site and post editors.

Testing Instructions

Code example:

import { MyTemplateSettingTest } from '@wordpress/edit-site';
const MyTemplateSettingTest = () => (
	<PluginTemplateSettingPanel>
		<p>Hello, World!</p>
	</PluginTemplateSettingPanel>
);

Render the above component somewhere in your code.

Example screenshot

Screenshot 2023-05-15 at 2 03 31 PM

@ntsekouras ntsekouras added [Feature] Extensibility The ability to extend blocks or the editing experience [Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") labels May 2, 2023
@ntsekouras ntsekouras self-assigned this May 2, 2023
@github-actions
Copy link

github-actions bot commented May 2, 2023

Size Change: +152 B (0%)

Total Size: 1.37 MB

Filename Size Change
build/block-editor/index.min.js 202 kB -11 B (0%)
build/block-library/blocks/cover/style-rtl.css 1.62 kB +5 B (0%)
build/block-library/blocks/cover/style.css 1.61 kB +6 B (0%)
build/block-library/blocks/search/editor-rtl.css 178 B +13 B (+8%) 🔍
build/block-library/blocks/search/editor.css 178 B +13 B (+8%) 🔍
build/block-library/editor-rtl.css 11.9 kB +5 B (0%)
build/block-library/editor.css 11.8 kB +4 B (0%)
build/block-library/style-rtl.css 12.8 kB +8 B (0%)
build/block-library/style.css 12.8 kB +6 B (0%)
build/edit-site/index.min.js 63.3 kB +103 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.78 kB
build/api-fetch/index.min.js 2.33 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 483 B
build/block-directory/index.min.js 7.2 kB
build/block-directory/style-rtl.css 1.05 kB
build/block-directory/style.css 1.05 kB
build/block-editor/content-rtl.css 4.17 kB
build/block-editor/content.css 4.16 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/style-rtl.css 15.3 kB
build/block-editor/style.css 15.3 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 91 B
build/block-library/blocks/avatar/style.css 91 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 628 B
build/block-library/blocks/button/style.css 627 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 409 B
build/block-library/blocks/columns/style.css 409 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/details-summary/editor-rtl.css 65 B
build/block-library/blocks/details-summary/editor.css 65 B
build/block-library/blocks/details-summary/style-rtl.css 61 B
build/block-library/blocks/details-summary/style.css 61 B
build/block-library/blocks/details/style-rtl.css 54 B
build/block-library/blocks/details/style.css 54 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 269 B
build/block-library/blocks/file/style.css 270 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 984 B
build/block-library/blocks/gallery/editor.css 988 B
build/block-library/blocks/gallery/style-rtl.css 1.55 kB
build/block-library/blocks/gallery/style.css 1.55 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 652 B
build/block-library/blocks/image/style.css 652 B
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 716 B
build/block-library/blocks/navigation-link/editor.css 715 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.13 kB
build/block-library/blocks/navigation/editor.css 2.14 kB
build/block-library/blocks/navigation/style-rtl.css 2.22 kB
build/block-library/blocks/navigation/style.css 2.21 kB
build/block-library/blocks/navigation/view-modal.min.js 2.81 kB
build/block-library/blocks/navigation/view.min.js 447 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 501 B
build/block-library/blocks/post-comments-form/style.css 501 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 322 B
build/block-library/blocks/post-featured-image/style.css 322 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 281 B
build/block-library/blocks/post-template/style.css 281 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 450 B
build/block-library/blocks/query/editor.css 449 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/style-rtl.css 434 B
build/block-library/blocks/search/style.css 432 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 756 B
build/block-library/blocks/site-logo/editor.css 756 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 651 B
build/block-library/blocks/table/style.css 650 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 179 B
build/block-library/blocks/video/style.css 179 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.12 kB
build/block-library/common.css 1.12 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 204 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 698 B
build/block-library/theme.css 703 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 51.1 kB
build/commands/index.min.js 14.8 kB
build/commands/style-rtl.css 807 B
build/commands/style.css 804 B
build/components/index.min.js 210 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.8 kB
build/compose/index.min.js 12.4 kB
build/core-commands/index.min.js 1.84 kB
build/core-data/index.min.js 16.3 kB
build/customize-widgets/index.min.js 12.2 kB
build/customize-widgets/style-rtl.css 1.41 kB
build/customize-widgets/style.css 1.41 kB
build/data-controls/index.min.js 718 B
build/data/index.min.js 8.68 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.76 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 35.3 kB
build/edit-post/style-rtl.css 7.84 kB
build/edit-post/style.css 7.83 kB
build/edit-site/style-rtl.css 10.2 kB
build/edit-site/style.css 10.2 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.56 kB
build/edit-widgets/style.css 4.56 kB
build/editor/index.min.js 46.1 kB
build/editor/style-rtl.css 3.48 kB
build/editor/style.css 3.47 kB
build/element/index.min.js 4.95 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.26 kB
build/format-library/style-rtl.css 557 B
build/format-library/style.css 556 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.79 kB
build/keycodes/index.min.js 1.94 kB
build/list-reusable-blocks/index.min.js 2.14 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.99 kB
build/notices/index.min.js 977 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.35 kB
build/primitives/index.min.js 960 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 952 B
build/react-i18n/index.min.js 702 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.75 kB
build/reusable-blocks/index.min.js 2.26 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 11.1 kB
build/router/index.min.js 1.77 kB
build/server-side-render/index.min.js 2.09 kB
build/shortcode/index.min.js 1.52 kB
build/style-engine/index.min.js 1.55 kB
build/token-list/index.min.js 650 B
build/url/index.min.js 3.74 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 1.09 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.3 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

Comment on lines +82 to +87
<PanelRow
header={ __( 'Editing history' ) }
className="edit-site-template-revisions"
>
<LastRevision />
</PanelRow>
Copy link
Contributor

Choose a reason for hiding this comment

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

This is new to this PR. Did it slip in accidentally from another PR or was it intentional? I didn't see it mentioned in the PR discussion so thought I'd ask :)

Copy link
Contributor

@nerrad nerrad May 2, 2023

Choose a reason for hiding this comment

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

Oh nvm, I see it was moved here from template-card/index.js.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh.. I forgot to comment about it, thanks! Yes, I just moved it outside of TemplateCard component because I think it shouldn't be a part of that component.

@carolinan
Copy link
Contributor

Always yes to reducing mismatch 😄

Copy link
Member

@Mamaduka Mamaduka left a comment

Choose a reason for hiding this comment

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

Currently there is a mismatch between site and post editors.

I assume this is why we're introducing the new slot :)

The PluginDocumentSettingPanel also handles rendering the PanelBody wrapper. Do you know if this is something we also want to match here?

Personally, I like devs explicitly handling the rendering of panels, but we might want to mention it somewhere in the docs.

Should we add this slot in block-editor package in order to be reused when we edit a template?

Maybe not at the moment.

Similar slots are usually contained in the editors. Moving the PluginDocumentSettingPanel.Slot into the block-editor package and reusing it here might cause features meant for the post editor to leak into the templates.

Co-authored-by: George Mamadashvili <georgemamadashvili@gmail.com>
@ntsekouras
Copy link
Contributor Author

Thanks for reviewing George!

I assume this is why we're introducing the new slot :)

Yes.

The PluginDocumentSettingPanel also handles rendering the PanelBody wrapper. Do you know if this is something we also want to match here?

I don't think so. Consumers should be responsible of adding and styling their components accordingly.

@ntsekouras ntsekouras merged commit aba9415 into trunk May 3, 2023
@ntsekouras ntsekouras deleted the add/plugin-template-setting-panel branch May 3, 2023 08:50
@github-actions github-actions bot added this to the Gutenberg 15.8 milestone May 3, 2023
@mcsf
Copy link
Contributor

mcsf commented May 15, 2023

Would be good to add a screenshot to this PR for future reference of what part of the UI it concerns. Should it also be marked for dev note?

@ntsekouras ntsekouras added the Needs Dev Note Requires a developer note for a major WordPress release cycle label May 15, 2023
@gigitux
Copy link
Contributor

gigitux commented May 16, 2023

Hey, @ntsekouras, we are using PluginTemplateSettingPanel in WC Blocks to show a button on the Site Editor. This is the PR woocommerce/woocommerce-blocks#9386, and this is the logic for adding the button on the site editor.

We noticed that importing the PluginTemplateSettingPanel, some redux stores are initialized, and this leads to issues that we fixed with a follow-up PR: woocommerce/woocommerce-blocks#9468.

Even with the fix that I shared above when the PluginTemplateSettingPanel is imported and the user visits the post/page editor, this error raises in the console:

 Store "core/interface" is already registered.

image

I suggest moving the component to another path so that when the developer imports it, no side-effect runs. What do you think?

@youknowriad
Copy link
Contributor

@gigitux it seems you might be "bundling" the edit-site dependency which duplicates some JS packages, no?

@gigitux
Copy link
Contributor

gigitux commented May 16, 2023

We use the package `@wordpress/dependency-extraction-webpack-plugin' to extract the @WordPress dependecies. (source code)

I will investigate more, and I will let you know!

@nefeline
Copy link
Contributor

nefeline commented Jul 24, 2023

Hi there @ntsekouras ! We are still facing issues with the usage of PluginTemplateSettingPanel within WooCommerce Blocks, and I was hoping you could help us out with some ideas on how to circumvent these limitations:

In addition to the error @gigitux mentioned over here that is still ongoing, there's also a conflict with the core's navigation block recently uncovered: whenever you add the Navigation block to any post while having a component importing from '@wordpress/edit-site';, which is a requirement for the usage of PluginTemplateSettingPanel (example of implementation over here), the following error is triggered:

edit-site.js?ver=9410ee7f59a6a9b2aa87:3578 Uncaught TypeError: Cannot destructure property 'params' of 'navigation_menu_edit_useLocation(...)' as it is undefined.

Screenshot 2023-07-24 at 17 49 01

We have been trying to circumvent this in different ways. In order to isolate the changes to the relevant template we tried:

  • Conditionally loading '@wordpress/edit-site' via PHP;
  • Dynamic import to load the module on-demand, at runtime, instead of statically at the beginning.

But no luck so far. Since we are following the recommended steps for adding information in the site editor’s Template sidebar, would it make sense to address this limitation on GB?

Thanks in advance!

@ntsekouras
Copy link
Contributor Author

In addition to the error @gigitux #50257 (comment) that is still ongoing, there's also a conflict with the core's navigation block recently uncovered:

Yeah, it seems we have more side effects if we add the edit-site package in the post editor, and we could have more similar filters like the one in Navigation block.

I'm not an expert in the bundling tools, but it seems to me that the edit-site shouldn't be bundled when in post editor and secondly maybe displaying block information in this specific slot might not be the best. I'm not sure if we have more extension points in the block inspector sidebar(if we don't, we should), but it feels it should be a better fit there.

The specific slot is for plugins in edit site and it display information under the template card, which would be more fitting for template and site editing related actions.

I'll cc @gziolo and @jsnajdr if they have some input regarding the bundling.

@jsnajdr
Copy link
Member

jsnajdr commented Jul 26, 2023

When a plugin script imports something from a package, like Woo Blocks' templates/revert-button does:

import { PluginTemplateSettingPanel } from '@wordpress/edit-site';

Then that package becomes the plugin script's dependency. Not only the package imports are turned into externalized references like wp.editSite.PluginTemplateSettingPanel, which is desired, but also the edit-site script is enqueued and executed. And that's undesired -- in an app like edit-post or edit-widgets, we don't want to load another app like edit-site. They will conflict with each other, there is a lot of static initialization code that registers data stores etc.

Because edit-site or edit-post are not merely library packages that export some useful slots for plugins, they are apps.

The same problem will arise when a plugin is loaded into the edit-site environment and will reference some slot (like PluginPostPublishPanel) from edit-post. Here again, the Post Editor app will be loaded into the Site Editor app.

A good solution for this is that the plugin makes sure that scripts that reference the edit-site package are enqueued only in the Site Editor and scripts that reference edit-post are enqueued only in Post Editor.

Woo Blocks doesn't do this -- the offending edit-site import is happening inside the assets/js/index.js module, and that module is being bundled into a shared wc-blocks script (here) which is a dependency of just about everything else.

Instead, Woo Blocks should build templates/revert-button as a separate script. It's an independent standalone plugin. And then enqueue it only in the Site Editor, nowhere else. That should happen in PHP code, somewhere in AssetsController.php.

@nefeline
Copy link
Contributor

Thank you so much @jsnajdr and @ntsekouras for your prompt feedback and for sharing all these details! Inspired by your input, the following solution was proposed for this problem: woocommerce/woocommerce-blocks#10388

@youknowriad
Copy link
Contributor

I just stumbled on this Slot, I think this should have been just the PluginDocumentSettingPanel but expanded to the template sidebar (both in post and site editors). In other words, plugin authors already discriminate using postType in PluginDocumentSettingPanel if they want to do post type specific panels. It should have been the same for this one.

That said, there's potentially a path forward where the implementation of PluginTemplateSettingPanel internally is just PluginDocumentSettingPanel + an additional condition on post type.

@ntsekouras
Copy link
Contributor Author

ntsekouras commented Mar 26, 2024

That said, there's potentially a path forward where the implementation of PluginTemplateSettingPanel internally is just PluginDocumentSettingPanel + an additional condition on post type.

That's a good thought, although I'm not really sure how would we proceed and keep backwards compatibility, since PluginDocumentSettingPanel relies on registerPlugin. Currently PluginTemplateSettingPanel consumers just use the slot without any additional APIs.

Besides the above, I observed now that at some point where we introduced the PagePanels and TemplatePanel we register this slot for both, which should only be rendered for templates. I'll open a PR for that for now..

@Mamaduka
Copy link
Member

Using registerPlugin isn't a hard requirement for the PluginDocumentSettingPanel SlotFill. It's just a registration method we recommend for third-party consumers.

@ntsekouras
Copy link
Contributor Author

Using registerPlugin isn't a hard requirement for the PluginDocumentSettingPanel SlotFill. It's just a registration method we recommend for third-party consumers.

Hm.. I thought I tried that in code.. Let me try again 😄

@ntsekouras
Copy link
Contributor Author

As @Mamaduka pointed out registerPlugin is optional, but the issue here for me is:
PluginDocumentSettingPanel checks if the panel is opened, which is false by default and that results in not showing the contents. The other difference is that this slot didn't render the PanelBody whereas PluginDocumentSettingPanel does.

It's not clear for me what would be the best path forward. I'll have to think more about it, but any suggestions are welcome.

@youknowriad
Copy link
Contributor

Maybe the best path is just to soft deprecate this one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Extensibility The ability to extend blocks or the editing experience [Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") Needs Dev Note Requires a developer note for a major WordPress release cycle
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants