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

Components: Add experimental ConfirmDialog #34153

Merged
merged 92 commits into from
Nov 25, 2021
Merged

Conversation

fullofcaffeine
Copy link
Member

@fullofcaffeine fullofcaffeine commented Aug 19, 2021

Description

Requires #36831 to be merged first — some build errors are expected until that PR gets merged, and this PR gets updated to include those changes

Add the experimental ConfirmDialog component.

The goal is to use this component to replace the usage of the native sync confirm that is bound to be deprecated at some point (see related issues for more info).

How has this been tested?

Automated tests and storybook

  • All tests pass
  • Run storybook locally, find the ConfirmDialog component, and verify stories.

Change post visibility to private

This is here to test the confirm in a real-world scenario, and will be removed before this PR is merged.

  • Create a new post;
  • Try changing the visibility of a post.

Screen[cast,shot]

Peek.2021-10-07.18-57.mp4

I misspelled "privately" in the screencast above as "privetely". This has been fixed in the code.

Types of changes

New feature

TODO

  • Test a11y aspects (test with a screen-reader and double-check accessibility standards).
  • Allow the message prop to accept JSX as per @jsnajdr's suggestion here.
  • Discuss the style of the Modal title (see screenshot or screencast above). It doesn't look very nice with long texts: it could use some additional vertical line spacing and perhaps be centered?
  • Discuss the "uncontrolled mode" - the feature that allows the component to be used standalone without the parent controlling it (see README for more details). Is it worth keeping it? Are we even going to use it in practice considering we'll probably use a wrapper singleton component later (to be implemented in a follow-up PR) at the app top-level to implement the Confirm in the editor?
  • Discuss the "multiple instances" scenario. Being async, it's possible. Is it important to handle at the component level? Or can we delegate it to a wrapper component at the App top level? More details here.
  • Discuss semantics of closing the dialog vs canceling. Right now, clicking the x icon, Cancel, pressing Escape, or clicking the overlay will close the dialog AND call the onCancel callback. I think this is correct UX-wise, except that we might not want to close/cancel upon clicking the overlay, as one could argue this is fragile as the user could easily misclick and close + cancel by accident. I do think that closing has a 1:1 relationship with canceling, though, so that if the dialog is closed this effectively means not confirming which means canceling.

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).
  • Remove the changes in the PostVisibility component. They are there only to exemplify a real-world usage of the component.

Related to: #33937 and #16583.

@github-actions
Copy link

github-actions bot commented Aug 19, 2021

Size Change: +177 B (0%)

Total Size: 1.1 MB

Filename Size Change
build/components/index.min.js 214 kB +177 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 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-editor/index.min.js 139 kB
build/block-editor/style-rtl.css 14.4 kB
build/block-editor/style.css 14.4 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 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 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 470 B
build/block-library/blocks/button/editor.css 470 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 291 B
build/block-library/blocks/buttons/editor.css 291 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 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 134 B
build/block-library/blocks/code/theme.css 134 B
build/block-library/blocks/columns/editor-rtl.css 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 503 B
build/block-library/blocks/columns/style.css 502 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.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 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 322 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 976 B
build/block-library/blocks/gallery/editor.css 980 B
build/block-library/blocks/gallery/style-rtl.css 1.62 kB
build/block-library/blocks/gallery/style.css 1.62 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 507 B
build/block-library/blocks/image/style.css 511 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 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 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 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.89 kB
build/block-library/blocks/navigation/editor.css 1.89 kB
build/block-library/blocks/navigation/style-rtl.css 1.66 kB
build/block-library/blocks/navigation/style.css 1.65 kB
build/block-library/blocks/navigation/view.min.js 2.74 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 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 172 B
build/block-library/blocks/page-list/style.css 172 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 444 B
build/block-library/blocks/post-comments-form/style.css 444 B
build/block-library/blocks/post-comments/style-rtl.css 492 B
build/block-library/blocks/post-comments/style.css 493 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 391 B
build/block-library/blocks/post-template/style.css 392 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 378 B
build/block-library/blocks/pullquote/style.css 378 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 262 B
build/block-library/blocks/query-pagination/editor.css 255 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 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 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 245 B
build/block-library/blocks/separator/style.css 245 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 772 B
build/block-library/blocks/site-logo/editor.css 772 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 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 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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 569 B
build/block-library/blocks/video/editor.css 570 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 815 B
build/block-library/common.css 812 B
build/block-library/editor-rtl.css 9.81 kB
build/block-library/editor.css 9.81 kB
build/block-library/index.min.js 162 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 10.5 kB
build/block-library/style.css 10.5 kB
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 677 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.3 kB
build/components/style-rtl.css 15.3 kB
build/components/style.css 15.3 kB
build/compose/index.min.js 10.9 kB
build/core-data/index.min.js 13.2 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.47 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.1 kB
build/edit-post/style.css 7.09 kB
build/edit-site/index.min.js 32.1 kB
build/edit-site/style-rtl.css 6.35 kB
build/edit-site/style.css 6.34 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.8 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.57 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.86 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.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@fullofcaffeine fullofcaffeine force-pushed the replace/confirm-et-al branch 5 times, most recently from fd6a6a5 to 48fafb3 Compare August 20, 2021 19:29
Copy link
Member

@jsnajdr jsnajdr left a comment

Choose a reason for hiding this comment

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

The way how the react-confirm library works is that when confirm is called, it creates a new container div in document.body, renders the dialog there as a completely independent React tree, and after the confirmation is done, removes the UI including the container and resolves the promise.

One of the consequences is that the useContextSystem hook will see an empty ComponentContext, not the context for the rest of the app. It's the same with any other context provider. Is that OK for us?

packages/components/src/confirm/component.tsx Outdated Show resolved Hide resolved
packages/components/src/confirm/styles.ts Outdated Show resolved Hide resolved
packages/components/src/confirm/hook.ts Outdated Show resolved Hide resolved
packages/components/src/confirm/component.tsx Outdated Show resolved Hide resolved
packages/components/src/confirm/types.ts Outdated Show resolved Hide resolved
@ciampo ciampo self-requested a review August 24, 2021 13:59
Copy link
Contributor

@ciampo ciampo left a comment

Choose a reason for hiding this comment

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

Thank you for working on this, @fullofcaffeine !

On top of a few inline comments, here's the rest of my initial feedback:

Accessibility

I haven't done a full accessibility audit, but I already noticed that this component is currently not handling keyboard focus.

I guess this is one more reason for considering using an existing component for the Modal dialog functionality.

Splitting in multiple PRs

Ideally, a PR that focuses on a component should only include code strictly related to the component.

In this case, it would be better if the changes in packages/editor/src/components/post-visibility/index.js (and any other similar changes) would be applied in a separate PR.

I'm fine with keeping those code changes for now (for ease of testing/review), but they should be removed before merging

Finally, it'd be great to have @diegohaz also take a look at this PR.

packages/components/src/confirm/types.ts Outdated Show resolved Hide resolved
packages/components/src/confirm/component.tsx Outdated Show resolved Hide resolved
packages/components/package.json Outdated Show resolved Hide resolved
packages/components/src/confirm/README.md Outdated Show resolved Hide resolved
packages/components/src/confirm/README.md Outdated Show resolved Hide resolved
packages/components/src/confirm/component.tsx Outdated Show resolved Hide resolved
packages/components/src/confirm/component.tsx Outdated Show resolved Hide resolved
packages/components/src/confirm/component.tsx Outdated Show resolved Hide resolved
packages/components/src/confirm/hook.ts Outdated Show resolved Hide resolved
packages/components/src/confirm/types.ts Outdated Show resolved Hide resolved
@ciampo ciampo requested a review from diegohaz August 24, 2021 16:37
@fullofcaffeine
Copy link
Member Author

fullofcaffeine commented Aug 24, 2021

One of the consequences is that the useContextSystem hook will see an empty ComponentContext, not the context for the rest of the app. It's the same with any other context provider. Is that OK for us?

Yeah, I'm aware of that. I don't fully understand what the ComponentContext context is used for yet, so I'll pass the question over to @ciampo.

On the plus side, this allows us to keep the API very close to the native confirm: effectively an isolated dialog that can be called as a single async function call and returns a boolean value. This would make it trivial to replace the current usages in the code, as the way to consume would pretty much be the same: no other components need to be rendered anywhere in the existing tree, no hooks in the consumer to track state, just plug and play (call the function, check the return value, and apply side-effects accordingly).

EDIT: Also, see my reply here: #34153 (comment).

EDIT2: The confirm function could be a temporary and intermediate step. We could eventually get rid of the isolated rendering approach after we refactor all consumers to use the component inline.

@fullofcaffeine
Copy link
Member Author

fullofcaffeine commented Aug 25, 2021

I've changed the implementation to use the Modal component, and it's now much simpler, thanks for the suggestion, @ciampo! However, there's some styling adjustment to be done (see the title overflowing in the screenshot below), and I saw some z-index corner cases. I'll continue tomorrow.

Screenshot from 2021-08-24 21-04-18

@@ -67,7 +67,7 @@ describe( 'Confirm', () => {
expect( onConfirm ).toHaveBeenCalled();
} );

it( 'should not render if closed by clicking `Cancel`, and the `onConfirm` callback should be called', async () => {
it( 'should not render if closed by clicking `Cancel`, and the `onCancel` callback should be called', async () => {
Copy link
Member Author

Choose a reason for hiding this comment

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

Thanks!

@@ -73,13 +73,16 @@ function ConfirmDialog(
[ handleEvent, onConfirm ]
);

const cancelLabel = __( 'Cancel' );
const confirmLabel = __( 'OK' );
Copy link
Member Author

Choose a reason for hiding this comment

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

👍🏻

Copy link
Contributor

@ciampo ciampo left a comment

Choose a reason for hiding this comment

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

Alright:

@fullofcaffeine and @jasmussen, this PR is ready to be merged in my opinion — it would be great if you could also give it a final sanity check

@jasmussen
Copy link
Contributor

What's a good way to test this? In a quick checkout, it appears that changing the post visibility invokes the classic ok/cancel confirm dialog.

If you have a screenshot of the dialog, we can check the metrics are right.

@ciampo
Copy link
Contributor

ciampo commented Nov 25, 2021

What's a good way to test this? In a quick checkout, it appears that changing the post visibility invokes the classic ok/cancel confirm dialog.

Yes, you're correct — in the end, this PR only introduces the new ConfirmDialog component, but doesn't replace any usages of the "classic" dialog yet (that should be done in a separate PR).

Because of that, we could also work on any improvements/tweaks in follow-up PRs (as far as they are not blockers)

If you have a screenshot of the dialog, we can check the metrics are right.

Sure, the best way to test the new component is in Storybook. Here's what it currently looks like:

confirm-dialog.mp4

@jasmussen
Copy link
Contributor

Nice, thanks for the video. I think that looks good, definitely good enough to land. I suspect there are some margins and tweaks we can follow up on, looks like there's some trailing uneven spacing between paragraph and button row that might be solved by a stacking layout, but nothing that need block this. 👍 👍

@ciampo
Copy link
Contributor

ciampo commented Nov 25, 2021

Nice, thanks for the video. I think that looks good, definitely good enough to land. I suspect there are some margins and tweaks we can follow up on, looks like there's some trailing uneven spacing between paragraph and button row that might be solved by a stacking layout, but nothing that need block this. 👍 👍

Thank you!

@fullofcaffeine , could give it a final look as well? Feel free to merge in case everything looks good on your end :)

Regarding next steps, I guess they could be:

With each of these points to be carried out in separate issues/PRs as a follow-up. What do you think, Marcelo?

@jasmussen
Copy link
Contributor

Apply small tweaks (margins/spacing)

Just to clarify, this could potentially be some complexity that's handled by components themselves in a nice way. I was inspired by this stacked box principle, for example.

@fullofcaffeine
Copy link
Member Author

fullofcaffeine commented Nov 25, 2021

With each of these points to be carried out in separate issues/PRs as a follow-up. What do you think, Marcelo?

Sounds good! Thank you for all the help and good vibes here, it was lots of fun working on this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Component System WordPress component system
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants