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

[Widgets editor] Disallow multiple instances of reference widgets #26148

Merged
merged 5 commits into from Oct 19, 2020

Conversation

adamziel
Copy link
Contributor

@adamziel adamziel commented Oct 15, 2020

Description

This PR fixes #25494 by:

  • Showing an error message if such reference widget already exists in another widget area
  • Removing duplicates from submitted API requests

This PR only affects the frontend and does not change the actual API handlers.

How has this been tested?

  1. Add the following code to gutenberg.php: https://gist.github.com/adamziel/526436b4cc9bc82a7221c77e00137ae1
  2. Go to widgets editor
  3. Add a marquee widget
  4. Add another marquee widget
  5. Confirm you see the same message as on the screenshots below
  6. Add another legacy widget, could be by just copying&pasting the marquee and renaming it to e.g. "Calendar"
  7. Repeat steps 3-5, confirm the error allows you to switch to a Calendar widget
  8. Click save while the duplicates are still in the editor, confirm only one instance of each reference widget got saved

Screenshots

Zrzut ekranu 2020-10-15 o 13 02 03

Zrzut ekranu 2020-10-15 o 13 02 14

Types of changes

Bug fix (non-breaking change which fixes an issue)

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@adamziel adamziel added [Feature] Widgets Screen The block-based screen that replaced widgets.php. [Block] Legacy Widget Affects the Legacy Widget Block - used for displaying Classic Widgets [Package] Edit Widgets /packages/edit-widgets labels Oct 15, 2020
@adamziel adamziel self-assigned this Oct 15, 2020
@adamziel adamziel added this to PRs in progress in Block-based Widgets Editor via automation Oct 15, 2020
@github-actions
Copy link

github-actions bot commented Oct 15, 2020

Size Change: +384 B (0%)

Total Size: 1.19 MB

Filename Size Change
build/edit-widgets/index.js 22.3 kB +384 B (1%)
ℹ️ 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/index.js 8.61 kB 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/index.js 130 kB 0 B
build/block-editor/style-rtl.css 11 kB 0 B
build/block-editor/style.css 10.9 kB 0 B
build/block-library/editor-rtl.css 8.93 kB 0 B
build/block-library/editor.css 8.93 kB 0 B
build/block-library/index.js 144 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-default-parser/index.js 1.77 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 47.6 kB 0 B
build/components/index.js 170 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/core-data/index.js 12.1 kB 0 B
build/data-controls/index.js 683 B 0 B
build/data/index.js 8.63 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 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/index.js 306 kB 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-site/index.js 21.6 kB 0 B
build/edit-site/style-rtl.css 3.8 kB 0 B
build/edit-site/style.css 3.81 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/index.js 42.5 kB 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.38 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/primitives/index.js 1.35 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/reusable-blocks/index.js 3.06 kB 0 B
build/rich-text/index.js 13 kB 0 B
build/server-side-render/index.js 2.61 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.06 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

@talldan talldan force-pushed the update/prevent-multiple-reference-widgets branch from 22cdf5b to 76459f1 Compare October 19, 2020 06:07
Copy link
Contributor

@talldan talldan left a comment

Choose a reason for hiding this comment

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

I rebased, resolved merge conflicts, and push three fairly basic commits that are either bug fixes or code quality.

This looks good to me. There might be more we can do in the future like removing the 'duplicate' option for reference widgets, but I think we can push those things out to separate PRs as they're more debatable.

);

// Filter out used reference widgets
return filter( visible, ( widget, referenceWidgetName ) => {
Copy link
Contributor

Choose a reason for hiding this comment

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

Using filter here was converting the value from an object to an array, which caused an issue when mapping the options for the select control, as key is supposed to be the widget name instead of a number.

I've changed it to use the pickBy above in 76459f1.

However, I don't think an object should be used for SelectControl values, as it'll give unpredictable results in terms of ordering.

icon={ <BlockIcon icon={ brush } /> }
label={ __( 'Duplicate Widget' ) }
>
<p className="components-placeholder__error">
Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm, this classname doesn't really seem to do much. I see the styles are defined in the placeholder styles, but I think it must be legacy given the lack of any notable styling. I'd expect some red text or something.

Ideally there would be a PlaceholderError component or an error prop on the placeholder that renders this. The pattern of using another component's classname like this is discouraged. Some more info:
https://github.com/WordPress/gutenberg/blob/master/docs/contributors/coding-guidelines.md#naming

I've switched this to use the instructions prop (in cb5df71), which makes it look pretty much the same, but without the code quality issues.

@talldan talldan merged commit 9595803 into master Oct 19, 2020
Block-based Widgets Editor automation moved this from PRs in progress to Done Oct 19, 2020
@talldan talldan deleted the update/prevent-multiple-reference-widgets branch October 19, 2020 07:05
@github-actions github-actions bot added this to the Gutenberg 9.2 milestone Oct 19, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Legacy Widget Affects the Legacy Widget Block - used for displaying Classic Widgets [Feature] Widgets Screen The block-based screen that replaced widgets.php. [Package] Edit Widgets /packages/edit-widgets
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

Widgets editor - prevent creation of multiple reference widgets
2 participants