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

Update: Set property to change one property accept all lodash paths. #25159

Conversation

jorgefilipecosta
Copy link
Member

When trying to address #25145 (comment), I noticed our setProperty global styles methods do not accept every lodash path but only string paths.
Previously we discovered that using string paths is slow and we have a lint rule that disallows string paths on lodash e.g: get ( object, 'a.b' ) is not accepted by our lint rules.
I guess we should use array paths like the rest of the codebase using array paths would also allow us to use the global mappings that are in an array format.

The setProperty method allows changing multiple properties, each property is a key in the object, we can not use keys that are arrays. So this PR changes setProperty to change a single property at a time.

How has this been tested?

I verified the global styles sidebar continues to work.

@jorgefilipecosta jorgefilipecosta added the Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json label Sep 8, 2020
@github-actions
Copy link

github-actions bot commented Sep 8, 2020

Size Change: +246 B (0%)

Total Size: 1.2 MB

Filename Size Change
build/a11y/index.js 1.14 kB +1 B
build/block-directory/index.js 8.5 kB -1 B
build/block-editor/index.js 128 kB +4 B (0%)
build/block-library/editor-rtl.css 8.68 kB +43 B (0%)
build/block-library/editor.css 8.68 kB +44 B (0%)
build/block-library/index.js 139 kB +274 B (0%)
build/blocks/index.js 47.7 kB +1 B
build/components/index.js 200 kB -61 B (0%)
build/data/index.js 8.54 kB -2 B (0%)
build/edit-post/index.js 305 kB +3 B (0%)
build/edit-site/index.js 19.3 kB -65 B (0%)
build/edit-widgets/index.js 12.1 kB +2 B (0%)
build/editor/index.js 45.6 kB +2 B (0%)
build/format-library/index.js 7.72 kB +2 B (0%)
build/redux-routine/index.js 2.85 kB -2 B (0%)
build/url/index.js 4.06 kB +1 B
ℹ️ View Unchanged
Filename Size Change
build/annotations/index.js 3.67 kB 0 B
build/api-fetch/index.js 3.41 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/style-rtl.css 953 B 0 B
build/block-directory/style.css 952 B 0 B
build/block-editor/style-rtl.css 11.1 kB 0 B
build/block-editor/style.css 11.1 kB 0 B
build/block-library/style-rtl.css 7.59 kB 0 B
build/block-library/style.css 7.58 kB 0 B
build/block-library/theme-rtl.css 754 B 0 B
build/block-library/theme.css 754 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/components/style-rtl.css 15.5 kB 0 B
build/components/style.css 15.5 kB 0 B
build/compose/index.js 9.68 kB 0 B
build/core-data/index.js 12.3 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 4.48 kB 0 B
build/edit-navigation/index.js 11.7 kB 0 B
build/edit-navigation/style-rtl.css 1.16 kB 0 B
build/edit-navigation/style.css 1.16 kB 0 B
build/edit-post/style-rtl.css 6.26 kB 0 B
build/edit-post/style.css 6.25 kB 0 B
build/edit-site/style-rtl.css 3.06 kB 0 B
build/edit-site/style.css 3.06 kB 0 B
build/edit-widgets/style-rtl.css 2.46 kB 0 B
build/edit-widgets/style.css 2.45 kB 0 B
build/editor/editor-styles-rtl.css 492 B 0 B
build/editor/editor-styles.css 493 B 0 B
build/editor/style-rtl.css 3.81 kB 0 B
build/editor/style.css 3.81 kB 0 B
build/element/index.js 4.64 kB 0 B
build/escape-html/index.js 733 B 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 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 711 B 0 B
build/keyboard-shortcuts/index.js 2.52 kB 0 B
build/keycodes/index.js 1.95 kB 0 B
build/list-reusable-blocks/index.js 3.12 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.32 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 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.56 kB 0 B
build/primitives/index.js 1.41 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/rich-text/index.js 13.9 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@jorgefilipecosta jorgefilipecosta force-pushed the update/setProperty-to-change-one-property-and-accept-all-lodash-paths branch from 5240b97 to c35c544 Compare September 8, 2020 16:25
@jorgefilipecosta
Copy link
Member Author

This PR seems to fix the custom gradient problem, so I enabled them again.

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 so great to see that I went ahead and pushed a couple of minor tweaks, so we can expedite this and merge as soon as CI gives us a 🟢

To be honest, I tried this same approach and it didn't work (obviously it wasn't the same, otherwise it will work). I didn't like the promise trick to coordinate gradient/background setters but failed to make it work without it (the two consecutive setters will interrupt each other and the gradients panel didn't work). I'm very happy to see this fixed!

@oandregal
Copy link
Member

Previously we discovered that using string paths is slow and we have a lint rule that disallows string paths on lodash e.g: get ( object, 'a.b' ) is not accepted by our lint rules.

This is a surprise to me. We do use string paths in a few places at the moment and there's no rule for this (although there was one a couple of years ago, but can't find when/why it was removed). The comment about adding the rule reported that the performance gains were minimal. I'm not too opinionated about one form or another, but if committing to one makes things consistent through the codebase, I'm game for that change.

@jorgefilipecosta jorgefilipecosta merged commit dd252e2 into master Sep 9, 2020
@jorgefilipecosta jorgefilipecosta deleted the update/setProperty-to-change-one-property-and-accept-all-lodash-paths branch September 9, 2020 09:14
@github-actions github-actions bot added this to the Gutenberg 9.0 milestone Sep 9, 2020
@jorgefilipecosta
Copy link
Member Author

This is a surprise to me. We do use string paths in a few places at the moment and there's no rule for this (although there was one a couple of years ago, but can't find when/why it was removed). The comment about adding the rule reported that the performance gains were minimal.

I was not aware the rule was removed and I thought we still did not use string paths. Anyway, the change made does not block string paths, it makes it possible to use any path format, while before only string paths worked.

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
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants