Skip to content

Block Editor: Introduce block locking UI#39183

Merged
Mamaduka merged 18 commits intotrunkfrom
try/block-locking-ui
Mar 15, 2022
Merged

Block Editor: Introduce block locking UI#39183
Mamaduka merged 18 commits intotrunkfrom
try/block-locking-ui

Conversation

@Mamaduka
Copy link
Copy Markdown
Member

@Mamaduka Mamaduka commented Mar 3, 2022

Description

Part of #29864.

PR introduced block locking options modal as described in specs here - #29864 (comment). Users can access it via the Block Settings dropdown menu.

Note: I omitted the "Edit" locking option. It is because it's not supported by API yet, and I think its rollout should be more granular - maybe we can start with Reusable and Template Part blocks.

Questions

  • Lock icon is only visible when block movement is locked. Should I display it for other lock states as well?
  • When parent block has templateLock attribute set, should lock icon appear for child blocks?
  • Do we want to support locking multi-selected blocks? The APIs support this, but I wasn't sure about UI/UX.

Todos

  • Add e2e tests

Testing Instructions

  1. Open a Post or Page.
  2. Insert any block.
  3. Find block lock settings within the ellipses dropdown menu.
  4. Confirm that a block movement or removal can be locked/unlocked.

Screenshots

Block.Locking.UI.mp4

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.
  • I've tested my changes with keyboard and screen readers.
  • 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 (please manually search all *.native.js files for terms that need renaming or removal).
  • I've updated related schemas if appropriate.

@Mamaduka Mamaduka requested a review from ellatrix as a code owner March 3, 2022 10:47
@Mamaduka Mamaduka self-assigned this Mar 3, 2022
@Mamaduka Mamaduka added [Feature] Blocks Overall functionality of blocks [Package] Block editor /packages/block-editor [Type] Feature New feature to highlight in changelogs. labels Mar 3, 2022
@jasmussen
Copy link
Copy Markdown
Contributor

Nice! This is really solid even in this iteration, here's a GIF showing the ellipsis locking method and the lock in the toolbar:
locking

I'd love thoughts on this by @critterverse, I know she's put a lot of thought into the feature. To me this looks great.

One thought is when you select multiple blocks and one of them is locked. We might want to show a "partial lock" icon in the block toolbar. I imagine a lock icon with a minus integrated somehow, just like the checkbox behavior inside.

It also seems like there's some indentation stuff we can polish inside the modal, happy to help there next week. But overall, this is very nice! 👏

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 3, 2022

Size Change: +1.36 kB (0%)

Total Size: 1.16 MB

Filename Size Change
build/block-editor/index.min.js 145 kB +997 B (+1%)
build/block-editor/style-rtl.css 15 kB +171 B (+1%)
build/block-editor/style.css 15 kB +174 B (+1%)
build/block-library/index.min.js 168 kB -3 B (0%)
build/components/index.min.js 217 kB +18 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.24 kB
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.49 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
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 65 B
build/block-library/blocks/archives/style.css 65 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 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 445 B
build/block-library/blocks/button/editor.css 445 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 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 406 B
build/block-library/blocks/columns/style.css 406 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-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 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-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.56 kB
build/block-library/blocks/cover/style.css 1.56 kB
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 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 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 255 B
build/block-library/blocks/file/style.css 255 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 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.61 kB
build/block-library/blocks/gallery/style.css 1.61 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 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 493 B
build/block-library/blocks/media-text/style.css 490 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 708 B
build/block-library/blocks/navigation-link/editor.css 706 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 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-submenu/view.min.js 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.89 kB
build/block-library/blocks/navigation/style.css 1.88 kB
build/block-library/blocks/navigation/view.min.js 2.85 kB
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 363 B
build/block-library/blocks/page-list/editor.css 363 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 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/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 323 B
build/block-library/blocks/post-template/style.css 323 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 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 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 389 B
build/block-library/blocks/pullquote/style.css 388 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 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 201 B
build/block-library/blocks/quote/style.css 201 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 202 B
build/block-library/blocks/rss/editor.css 204 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/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 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 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 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.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 934 B
build/block-library/common.css 932 B
build/block-library/editor-rtl.css 9.96 kB
build/block-library/editor.css 9.96 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 11.4 kB
build/block-library/style.css 11.4 kB
build/block-library/theme-rtl.css 665 B
build/block-library/theme.css 670 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 46.5 kB
build/components/style-rtl.css 15.6 kB
build/components/style.css 15.6 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14.1 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.05 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-navigation/style-rtl.css 4.04 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 29.8 kB
build/edit-post/style-rtl.css 7.07 kB
build/edit-post/style.css 7.07 kB
build/edit-site/index.min.js 43.9 kB
build/edit-site/style-rtl.css 7.44 kB
build/edit-site/style.css 7.42 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.39 kB
build/edit-widgets/style.css 4.39 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.29 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 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.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences/index.min.js 1.2 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 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.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@gziolo
Copy link
Copy Markdown
Member

gziolo commented Mar 3, 2022

This is great. Thank you for working on it 👍🏻

@critterverse
Copy link
Copy Markdown
Contributor

Awesome, thanks for spinning up this PR so quickly @Mamaduka! It’s working great.

A few small things we could update:

  • I think we should display the lock icon when any of the lock states are active (not only for block movement)
  • When trying to lock a block with a custom title, I'm seeing the custom title disappear from the toolbar when the lock icon appears — ideally the lock would appear to the right of the title
  • We can remove this line of text from the modal, “The block can be unlocked any time using "Options" menu in the block toolbar”
  • We can remove some of the separator lines from the modal based on @pablohoneyhoney's feedback — I've updated the Figma to remove the top separator (plus the row + separator lines for the option to lock editing)

(Re: Pablo's note about changing the line height for text in the modal — this may be something we want to look at more universally and could be addressed separately)

One thought is when you select multiple blocks and one of them is locked. We might want to show a "partial lock" icon in the block toolbar. I imagine a lock icon with a minus integrated somehow, just like the checkbox behavior inside.

Love this idea and I’m happy to help create this asset — @jasmussen, can you help us confirm whether the lock icon used in this PR is the most up-to-date version (see this comment for context)? I believe some work was done on this icon recently so just want to make sure I’m using the right one to create the new partial lock version 😁

It also seems like there's some indentation stuff we can polish inside the modal, happy to help there next week.

+1 Also wondering if the block icon and lock icon could be a bit closer together (like the position of the block icon and drag handles) if we have some flexibility there — but I will defer to @jasmussen who is has done a lot of work with block toolbars on the correct spacing!

Copy link
Copy Markdown
Contributor

@alexstine alexstine left a comment

Choose a reason for hiding this comment

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

@Mamaduka Really happy with the accessibility you have included from the start. I haven't given this a full test and likely won't until this is closer, but I like what the code is showing me. Left one note... 👍

@Mamaduka
Copy link
Copy Markdown
Member Author

Mamaduka commented Mar 4, 2022

Thanks for the great feedback, folks!

@critterverse I pushed updates based on your feedback. This is the only remaining item:

When trying to lock a block with a custom title, I'm seeing the custom title disappear from the toolbar when the lock icon appears — ideally the lock would appear to the right of the title

It looks like a separate issue, and I'll create a new PR.

@Mamaduka
Copy link
Copy Markdown
Member Author

Mamaduka commented Mar 4, 2022

@mtias do we want to support locking multi-selected blocks?

@mtias
Copy link
Copy Markdown
Member

mtias commented Mar 4, 2022

@Mamaduka no. We might want to allow a parent block to lock all its children in one go, though.

@Mamaduka
Copy link
Copy Markdown
Member Author

Mamaduka commented Mar 7, 2022

We might want to allow a parent block to lock all its children in one go, though.

This probably should be handled by templateLock. So let's do this as a follow-up.

@Mamaduka Mamaduka force-pushed the try/block-locking-ui branch from 97fce72 to 442b0fd Compare March 15, 2022 06:34
Copy link
Copy Markdown
Contributor

@youknowriad youknowriad 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 looking good. Aside the removal of the exposed components which seems useless to me, the rest of the comments are just small remarks.

I noticed two weird things related to locking (kind of unrelated to this PR):

  • I can still move the block by moving its siblings
  • I can still move the block inside a container by "grouping" it.

I feel both of these should probably be restricted? cc @senadir


.components-modal__frame {
@include break-small() {
max-width: $break-mobile;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is this pattern for defining a max width copied from some place? Maybe we should support defining a width as a prop to avoid recreating the same things over and over in different modals.

Copy link
Copy Markdown
Member Author

@Mamaduka Mamaduka Mar 15, 2022

Choose a reason for hiding this comment

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

It is the new recommended max-width for action modals. It might be a good idea to make it default or, as you suggested, allow setting it via prop.

cc @jasmussen

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Definitely good to absorb in the mechanics of the modal component to streamline the use and avoid arbitrary values.

Copy link
Copy Markdown
Contributor

@ciampo ciampo Mar 15, 2022

Choose a reason for hiding this comment

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

I'm just worried about this introducing a regression for Modal users that needed a different maxwidth`.

@mirka , do you think we could apply our style deprecation strategy for this?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It is the new recommended max-width for action modals

Are there other notable kinds of modals other than "action" modals? Or can we take this statement to mean that this is the new recommended max-width for basically every modal in the codebase?

If it's the latter, we'd probably want to initiate a style deprecation to make this the new default.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We could also treat these as a "compact" variation you opt-in into and leave the default as the almost full-width one

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Even for the template part placeholder modal, I had to tweak the width in a similar way (I copied the code from the preferences modal). I think at the component level we should come up with conventions (props, variations or something like that) that everyone should follow and address all these use-cases.

@Mamaduka
Copy link
Copy Markdown
Member Author

I can still move the block by moving its siblings

I don't think we can avoid this without locking the full content template.

I can still move the block inside a container by "grouping" it.

Maybe we should disable Grouping like we disable transformations when removal is locked.

@senadir
Copy link
Copy Markdown
Contributor

senadir commented Mar 15, 2022

I can still move the block by moving its siblings

That's fine to my use case. I think we have two use cases when it comes to locking movement:

  • Pining to a position.
  • Locking order.

I see movement locking as something useful if you want to keep the order of several blocks the same. You can use the API with a negative value lock.move: false and applying templateLock: "all" to only allow a single block to move.

I can still move the block inside a container by "grouping" it.

I think this falls outside the block scope? I'm not sure if we want to restrict grouping but it might be a good next step?

@youknowriad
Copy link
Copy Markdown
Contributor

I think this falls outside the block scope? I'm not sure if we want to restrict grouping but it might be a good next step?
Maybe we should disable Grouping like we disable transformations when removal is locked.

Grouping is a transformation, so if we disable transformation, we should disable grouping as well IMO

@Mamaduka
Copy link
Copy Markdown
Member Author

Thanks for the feedback and reviews, everyone.

I'm going to merge this.

We can address the remaining small items in follow-up PRs. However, they seem to be more general enhancements than tied to this feature.

@Mamaduka Mamaduka merged commit dfd422a into trunk Mar 15, 2022
@Mamaduka Mamaduka deleted the try/block-locking-ui branch March 15, 2022 12:15
@github-actions github-actions bot added this to the Gutenberg 12.9 milestone Mar 15, 2022
@mtias
Copy link
Copy Markdown
Member

mtias commented Mar 15, 2022

Great work @Mamaduka and @critterverse! I think the next follow up should be ensuring you can disable the ability to lock / unlock globally or per user role.

@senadir
Copy link
Copy Markdown
Contributor

senadir commented Mar 15, 2022

Hey @Mamaduka. Thank you for working on this, but it seems this PR caused a regression, mainly, our use case is no longer working, there's no forced locking, locking is now optional. I'm not sure if Matias' comment above about disabling locking globally is on a block basis or website basis.

Is there a plan to get system locking back in place or not? We currently have a workaround for deleting blocks, but not for reordering them.

locking.mov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Feature] Blocks Overall functionality of blocks [Package] Block editor /packages/block-editor [Type] Feature New feature to highlight in changelogs.

Projects

None yet

Development

Successfully merging this pull request may close these issues.