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

Edit: Pass editor features dynamically #25795

Merged
merged 5 commits into from
Oct 16, 2020

Conversation

jorgefilipecosta
Copy link
Member

@jorgefilipecosta jorgefilipecosta commented Oct 2, 2020

This PR applies a change that dynamically passes the block editor features to the edit-site.
The user can change these features now, so we need to compute them dynamically.
This PR is a follow-up to #25711, and with it, after the user changes the color palette, the change is immediately reflected on the block editor, and we can see the colors available changed.

@jorgefilipecosta jorgefilipecosta added [Type] Enhancement A suggestion for improvement. Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json labels Oct 2, 2020
@github-actions
Copy link

github-actions bot commented Oct 2, 2020

Size Change: +574 B (0%)

Total Size: 1.19 MB

Filename Size Change
build/block-directory/index.js 8.6 kB -1 B
build/block-editor/index.js 130 kB -6 B (0%)
build/block-editor/style-rtl.css 11 kB +8 B (0%)
build/block-editor/style.css 10.9 kB +8 B (0%)
build/block-library/index.js 142 kB +91 B (0%)
build/block-serialization-default-parser/index.js 1.77 kB -3 B (0%)
build/blocks/index.js 47.6 kB -2 B (0%)
build/components/index.js 169 kB +73 B (0%)
build/core-data/index.js 12.1 kB +26 B (0%)
build/data/index.js 8.63 kB -2 B (0%)
build/edit-post/index.js 306 kB +1 B
build/edit-site/index.js 21.6 kB +281 B (1%)
build/edit-site/style-rtl.css 3.8 kB -10 B (0%)
build/edit-site/style.css 3.81 kB -12 B (0%)
build/edit-widgets/index.js 21.6 kB +1 B
build/editor/index.js 42.6 kB +109 B (0%)
build/primitives/index.js 1.35 kB +11 B (0%)
build/redux-routine/index.js 2.85 kB +1 B
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.54 kB 0 B
build/api-fetch/index.js 3.35 kB 0 B
build/autop/index.js 2.72 kB 0 B
build/blob/index.js 668 B 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-library/editor-rtl.css 8.65 kB 0 B
build/block-library/editor.css 8.65 kB 0 B
build/block-library/style-rtl.css 7.71 kB 0 B
build/block-library/style.css 7.71 kB 0 B
build/block-library/theme-rtl.css 741 B 0 B
build/block-library/theme.css 741 B 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/components/style-rtl.css 15.4 kB 0 B
build/components/style.css 15.4 kB 0 B
build/compose/index.js 9.63 kB 0 B
build/data-controls/index.js 684 B 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 4.43 kB 0 B
build/edit-navigation/index.js 10.6 kB 0 B
build/edit-navigation/style-rtl.css 868 B 0 B
build/edit-navigation/style.css 871 B 0 B
build/edit-post/style-rtl.css 6.37 kB 0 B
build/edit-post/style.css 6.35 kB 0 B
build/edit-widgets/style-rtl.css 3.09 kB 0 B
build/edit-widgets/style.css 3.09 kB 0 B
build/editor/editor-styles-rtl.css 480 B 0 B
build/editor/editor-styles.css 482 B 0 B
build/editor/style-rtl.css 3.85 kB 0 B
build/editor/style.css 3.84 kB 0 B
build/element/index.js 4.45 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.49 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 1.74 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.54 kB 0 B
build/is-shallow-equal/index.js 709 B 0 B
build/keyboard-shortcuts/index.js 2.39 kB 0 B
build/keycodes/index.js 1.85 kB 0 B
build/list-reusable-blocks/index.js 3.02 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.12 kB 0 B
build/notices/index.js 1.69 kB 0 B
build/nux/index.js 3.27 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.44 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/reusable-blocks/index.js 3.04 kB 0 B
build/rich-text/index.js 13 kB 0 B
build/server-side-render/index.js 2.6 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.24 kB 0 B
build/url/index.js 4.07 kB 0 B
build/viewport/index.js 1.75 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

Base automatically changed from add/color-palette-edit-functionality-to-global-styles to master October 7, 2020 14:41
@jorgefilipecosta jorgefilipecosta force-pushed the update/pass-editor-features-dynamically branch 2 times, most recently from 94668b5 to d9622aa Compare October 14, 2020 14:23
@oandregal
Copy link
Member

What's the advantage of doing this over using the existing settings already processed and stored in select('core/block-editor').getSettings().__experimentalSettings?

@jorgefilipecosta
Copy link
Member Author

What's the advantage of doing this over using the existing settings already processed and stored in select('core/block-editor').getSettings().__experimentalSettings?

Hi @nosolosw,

The user can change the settings eg: change the color palette so we need to merge the user settings with theme settings and pass these settings to the blockeditor.

select('core/block-editor').getSettings().__experimentalSettings just returns the settings at the time the server processed them it is not aware of the changes the user did to the settings.

@oandregal
Copy link
Member

Ah, just reviewed the other PR and now I understand how this whole thing is tied together 👍

@oandregal
Copy link
Member

So, as I understand this, we want to update the __experimentalSettings upon user changes, which is a value stored in the core/edit-site. What if we created an effect in the global styles provider that updated the values in the store (no need to update settings per-component, any component that uses the store will be notified)?

@jorgefilipecosta jorgefilipecosta force-pushed the update/pass-editor-features-dynamically branch from d9622aa to 72dbefe Compare October 15, 2020 14:46
@jorgefilipecosta jorgefilipecosta force-pushed the update/pass-editor-features-dynamically branch from 72dbefe to aa89774 Compare October 15, 2020 14:52
@jorgefilipecosta
Copy link
Member Author

So, as I understand this, we want to update the __experimentalSettings upon user changes, which is a value stored in the core/edit-site. What if we created an effect in the global styles provider that updated the values in the store (no need to update settings per-component, any component that uses the store will be notified)?

Hi @nosolosw,
I applied your suggestion.

// Deep clone from base data.
//
// We don't use cloneDeep from lodash here
// because we know the data is JSON compatible,
// see https://github.com/lodash/lodash/issues/1984
const mergedTree = JSON.parse( JSON.stringify( baseData ) );

const styleKeys = [ 'typography', 'color' ];
const styleKeys = [ 'typography', 'color', 'custom', 'spacing' ];
Copy link
Member

Choose a reason for hiding this comment

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

custom and spacing are not valid style keys, they are only relevant for settings. We probably need to port the normalize block schema (and its function) from the (server).

Copy link
Member Author

Choose a reason for hiding this comment

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

I renamed the variable to validMergeKeys so it can contain keys valid for style and settings. I think ideally we should update the function to no even need to rely on this hardcoded data.

Copy link
Member Author

Choose a reason for hiding this comment

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

But for now, it seems in an acceptable solution following a similar approach to what we had.

Copy link
Member

@oandregal oandregal Oct 16, 2020

Choose a reason for hiding this comment

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

Hey, I hope you don't mind, but I submitted a commit at 6652d28 with a simple fix for this (it can be improved in subsequent PRs).

Copy link
Member Author

Choose a reason for hiding this comment

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

Thank you for the enhancements :)

@jorgefilipecosta jorgefilipecosta force-pushed the update/pass-editor-features-dynamically branch from 8a6b1b5 to 8d1789a Compare October 15, 2020 21:25
@oandregal
Copy link
Member

Pushed 701a6a2 to protect against a WSOD when baseStyles are undefined.

Copy link
Member

@oandregal oandregal left a comment

Choose a reason for hiding this comment

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

This is ready to land!

@oandregal oandregal merged commit eed44e8 into master Oct 16, 2020
@oandregal oandregal deleted the update/pass-editor-features-dynamically branch October 16, 2020 09:44
@github-actions github-actions bot added this to the Gutenberg 9.2 milestone Oct 16, 2020
Comment on lines +127 to +129
const settings = useSelect( ( select ) =>
select( 'core/edit-site' ).getSettings()
);
Copy link
Member

Choose a reason for hiding this comment

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

This useSelect call is missing a dependency array.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants