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

Design updates to the Publish popover (DateTimePicker) #41097

Merged
merged 9 commits into from
May 27, 2022

Conversation

noisysocks
Copy link
Member

@noisysocks noisysocks commented May 17, 2022

What?

Implements the new design for the Publish popover (DateTimePicker) that's in #39082.

Since we're changing most of the CSS anyway, I've taken this opportunity to convert most of DateTimePicker to use existing WordPress components and Emotion styling.

Why?

Part of #39082.

How?

  • Updates the design of DateTimePicker, DatePicker and TimePicker.
  • Changes DateTimePicker, DatePicker and TimePicker to use existing WordPress components and Emotion styling where it makes sense to do so.
    • I kept all of the react-dates theming as CSS. Emotion doesn't really add much here since we have to use CSS selectors anyway.
  • Re-organises DateTimePicker folder structure to be more consistent with newer components.
    • Each sub-component in date-time now has its own folder.
  • Allows removal of Reset button and Help functionality from DateTimePicker.
    • The new design does not have this.
    • This is implemented using a __next prop. We should eventually make this the default.
  • Adds PublishDateTimePicker to block-editor.
    • This exposes a specialised DateTimePicker that is used for changing a post publish date.
    • Basically it just adds the Publish heading.

Testing Instructions

  1. Create a post.
  2. Open the post settings sidebar.
  3. Change the Publish date.4.

Also play with the DateTimePicker storybook in npm run storybook:dev.

There are existing unit tests for DateTimePicker which hopefully I didn't break.

Screenshots or screencast

English Arabic
Screen Shot 2022-05-19 at 18 03 10 Screen Shot 2022-05-19 at 18 02 22

@noisysocks noisysocks added [Type] Enhancement A suggestion for improvement. [Feature] Document Settings Document settings experience [Package] Components /packages/components labels May 17, 2022
@github-actions
Copy link

github-actions bot commented May 17, 2022

Size Change: +352 B (0%)

Total Size: 1.24 MB

Filename Size Change
build/block-editor/index.min.js 151 kB +285 B (0%)
build/block-editor/style-rtl.css 14.6 kB +61 B (0%)
build/block-editor/style.css 14.6 kB +60 B (0%)
build/block-library/index.min.js 181 kB +16 B (0%)
build/components/index.min.js 228 kB +1.11 kB (0%)
build/components/style-rtl.css 13.9 kB -584 B (-4%)
build/components/style.css 13.9 kB -587 B (-4%)
build/edit-post/index.min.js 30.4 kB -1 B (0%)
build/editor/index.min.js 38.5 kB -11 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
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.51 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/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 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-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 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-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 95 B
build/block-library/blocks/comments/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 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 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 333 B
build/block-library/blocks/group/editor.css 333 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 76 B
build/block-library/blocks/heading/style.css 76 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 738 B
build/block-library/blocks/image/editor.css 737 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 463 B
build/block-library/blocks/latest-posts/style.css 462 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 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 115 B
build/block-library/blocks/navigation-link/style.css 115 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.95 kB
build/block-library/blocks/navigation/style.css 1.94 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 395 B
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 260 B
build/block-library/blocks/paragraph/style.css 260 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/editor-rtl.css 69 B
build/block-library/blocks/post-comments-form/editor.css 69 B
build/block-library/blocks/post-comments-form/style-rtl.css 495 B
build/block-library/blocks/post-comments-form/style.css 495 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-comments/style-rtl.css 628 B
build/block-library/blocks/post-comments/style.css 628 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 370 B
build/block-library/blocks/pullquote/style.css 370 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 369 B
build/block-library/blocks/query/editor.css 369 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 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 146 B
build/block-library/blocks/separator/editor.css 146 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 194 B
build/block-library/blocks/separator/theme.css 194 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 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 192 B
build/block-library/blocks/site-logo/style.css 192 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 504 B
build/block-library/blocks/table/editor.css 504 B
build/block-library/blocks/table/style-rtl.css 625 B
build/block-library/blocks/table/style.css 625 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 149 B
build/block-library/blocks/template-part/editor.css 149 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 561 B
build/block-library/blocks/video/editor.css 563 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 993 B
build/block-library/common.css 990 B
build/block-library/editor-rtl.css 10.2 kB
build/block-library/editor.css 10.3 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 11.6 kB
build/block-library/style.css 11.6 kB
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 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 47.1 kB
build/compose/index.min.js 11.7 kB
build/core-data/index.min.js 14.6 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.4 kB
build/customize-widgets/style.css 1.4 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 7.98 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.69 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 4.05 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/style-rtl.css 7.08 kB
build/edit-post/style.css 7.08 kB
build/edit-site/index.min.js 47.9 kB
build/edit-site/style-rtl.css 7.73 kB
build/edit-site/style.css 7.71 kB
build/edit-widgets/index.min.js 16.4 kB
build/edit-widgets/style-rtl.css 4.4 kB
build/edit-widgets/style.css 4.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.7 kB
build/element/index.min.js 4.3 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 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.9 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.1 kB
build/nux/style-rtl.css 744 B
build/nux/style.css 741 B
build/plugins/index.min.js 1.98 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.32 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 628 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.2 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/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.2 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

@noisysocks
Copy link
Member Author

I've still got some tasks remaining before we can merge this (see description) but I'm happy with the broad strokes and think this is ready for a first round of review.

@andrewserong
Copy link
Contributor

Thanks for the ping @noisysocks, I think I'll run out of time today to take a closer look, but I'm looking forward to getting stuck into review 🤓

At first glance, the design's looking really nice in the editor 👍

One thing I noticed is that if you click on the AM / PM buttons it closes the popover, unlike the other buttons in the popover. Not sure if focus is being moved somewhere?

@noisysocks
Copy link
Member Author

One thing I noticed is that if you click on the AM / PM buttons it closes the popover, unlike the other buttons in the popover. Not sure if focus is being moved somewhere?

👍 I made it so that the popover remains open. The alternative is that we auto-close it after a date is selected but I don't like that because then it makes it hard to select a date and a time. Also we have an X now.

@javierarce
Copy link
Contributor

This is looking great! I just have just one comment:

When you have scheduled another post we show a small blue dot under the day number. But if you hover over the day or select it, the dot disappears. I propose changing the color of the dot so it's always visible. That would mean white for when the day is selected or selected and hovered.

Screen.Recording.2022-05-18.at.12.31.26.mov

Then I noticed a weird reload the first time you select a day from a different month. I guess this is not related to this PR, but I just wanted to mention it anyway in case it's helpful.

Screen.Recording.2022-05-18.at.12.24.05.mov

? Math.min( max, Math.max( min, value ) )
: roundClamp( value, min, max, stepOverride ?? baseStep );
return number.toString().padStart( pad, '0' );
Copy link
Contributor

Choose a reason for hiding this comment

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

The 0 padding looks like a useful feature!

From a quick glance, it looks like this changes the implicit return type for constrainValue from a number to a string. Would it be worth splitting out this change (and the change to SelectControl) into a separate PR(s)? Since NumberControl is fairly widely used, and can receive a state reducer, it might be worth us pinging a few folks on the change in isolation to get a few more eyes on the potential implications (I've been tripped up trying to make changes to NumberControl before 😄).

Copy link
Contributor

Choose a reason for hiding this comment

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

Now that I think of it, the conversion to string might not be such a problem (and could be desired). I see from @ciampo's earlier NumberControl PR to refactor to TypeScript (#38753) it proposes introducing an ensureString function that gets used in the reducer, so the change here might be useful for that, too.

Copy link
Member Author

@noisysocks noisysocks May 19, 2022

Choose a reason for hiding this comment

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

Sure, I can split this out!

Changing the return type to string is intentional. If you look at the typings for the reducer state in SelectControl you'll see that value is supposed to be a string.

Copy link
Contributor

Choose a reason for hiding this comment

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

Great, thanks for confirming!

Copy link
Contributor

@ciampo ciampo May 19, 2022

Choose a reason for hiding this comment

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

I took NumberControl for a spin and played around with the new pad property, and found a few instances where it behaved unexpectedly (for example, the 0 padding is not added when typing a value and blurring the input field).

number-control-padding.mp4

Considering that InputControl (and consequently NumberControl) is undergoing a few changes / fixes, and that NumberControl isn't typed yet, my recommendation for now is to add this feature directly to TimePicker if possible (and consider porting it to NumberControl once those fixes/improvements are applied).

Copy link
Contributor

Choose a reason for hiding this comment

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

my recommendation for now is to add this feature directly to TimePicker if possible (and consider porting it to NumberControl once those fixes/improvements are applied).

That sounds like a good idea to me, too.

@noisysocks noisysocks force-pushed the update/date-time-picker-design branch from 3f24700 to 6731934 Compare May 19, 2022 05:33
@noisysocks
Copy link
Member Author

When you have scheduled another post we show a small blue dot under the day number. But if you hover over the day or select it, the dot disappears. I propose changing the color of the dot so it's always visible. That would mean white for when the day is selected or selected and hovered.

Good thinking! I've done this.

Then I noticed a weird reload the first time you select a day from a different month. I guess this is not related to this PR, but I just wanted to mention it anyway in case it's helpful.

Let's look into this separately. It happens because of react-dates/react-dates#1320 which is fixed but not yet released.

@noisysocks noisysocks marked this pull request as ready for review May 19, 2022 08:06
@noisysocks
Copy link
Member Author

noisysocks commented May 19, 2022

OK, happy with this now 🙂 I fixed unit tests, tweaked some of the margins, fixed some issues with RTL languages, and tested everything in multiple browsers.

I'll split out some of the @wordpress/components stuff into a separate PR for ease of review tomorrow, but don't let that stop you from giving this a whirl!

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 @noisysocks for working on this, it's looking great!


I've left most of my feedback via inline comments, but I'll add a few more points here:

Re-organises DateTimePicker folder structure to be more consistent with newer components.
Each sub-component in date-time now has its own folder.

Thank you for improving the folder structure! Ideally, to follow the latest guidelines, there would be more changes required (e.g. splitting each component into a hook and component files, adding READMES for each subcomponent...), but those changes can definitely wait and be applied at a later point as a follow-up.

Also, we normally keep only one stories folder per component family, instead of having a stories folder in each subcomponent's folder — would you mind applying those changes?

Removes Reset button and Help functionality from DateTimePicker.
The new design does not have this.
This maybe is a breaking change. We can phase this in using a prop if we feel that it's too much of a change to impose on third parties.

For the sake of these changes, I would keep it around. We can look into adding a soft deprecation warning about it, and remove it later down the road (e.g. after WordPress 6.2 gets released)

I'll split out some of the @wordpress/components stuff into a separate PR for ease of review tomorrow, but don't let that stop you from giving this a whirl!

That would be awesome — I can see a few PRs can could be splintered off:

  • updating @types/react-dates's version
  • updating moment's version
  • changes to NumberControl (if any)
  • changes to SelectControl
  • changes to DateTimePicker
  • remaining updated in the block-editor and edit-site packages

But again — we can keep these changes together in the same PR for now, for the sake of iterating quicker and have a first few rounds of reviews

packages/components/src/select-control/types.ts Outdated Show resolved Hide resolved
packages/components/package.json Outdated Show resolved Hide resolved
packages/components/src/date-time/date/index.tsx Outdated Show resolved Hide resolved
packages/components/src/number-control/test/index.js Outdated Show resolved Hide resolved
packages/components/src/date-time/time/test/index.tsx Outdated Show resolved Hide resolved
packages/components/src/date-time/date/styles.ts Outdated Show resolved Hide resolved
@noisysocks
Copy link
Member Author

noisysocks commented May 20, 2022

Thanks for the reviews! I've addressed all the feedback. I'll split the PR up on Monday.

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! I left a few more replies to your comments

Thanks for the reviews! I've addressed all the feedback. I'll split the PR up on Monday.

Awesome! I haven't had the time to look at all of your latest changes in details (like, for example, the opt-out flag for the reset button), but i'll make sure I do in each split PR

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.

I recommend setting GitHub to only show the second commit in this PR with Hide whitespace checked so that the diff is less noisy.

Thank you for committing your changes in a reviewer-friendly way!

Some of the e2e failures are legitimate, probably because some classnames have been removed, I'll take a look at them tomorrow 🙂

Good point. In the meantime I had another look at the changes and left a few more inline comments around.

@@ -1,9 +1,6 @@
/**
* External dependencies
*/
// Needed to initialise the default datepicker styles.
// See: https://github.com/airbnb/react-dates#initialize
import 'react-dates/initialize';
Copy link
Contributor

Choose a reason for hiding this comment

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

For ease of review, noting that this line has been moved to packages/components/src/date-time/date/index.tsx

packages/components/src/date-time/time/styles.ts Outdated Show resolved Hide resolved
packages/components/src/date-time/time/styles.ts Outdated Show resolved Hide resolved
@noisysocks noisysocks force-pushed the update/date-time-picker-design branch from b87608b to cdcc28c Compare May 26, 2022 02:13
@noisysocks
Copy link
Member Author

noisysocks commented May 26, 2022

OK, tests fixed! I want to keep the e2e changes minimal here so I did not switch away from using CSS selectors, even though that's not really ideal. It would be good to update datepicker.test.js to use Playwright / ARIA selectors in a future PR.

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.

Apart from a couple of minor comments, code changes LGTM 🚀

Given the size of this PR, I'd feel better if another pair of 👀 also took a look

Comment on lines +43 to +52
since: '13.4',
version: '14.6', // Six months of plugin releases.
hint:
'Set the `__nextRemoveHelpButton` prop to `true` to remove this warning and opt in to the new behaviour, which will become the default in a future version.',
} );
}
if ( ! __nextRemoveResetButton ) {
deprecated( 'Reset button in wp.components.DateTimePicker', {
since: '13.4',
version: '14.6', // Six months of plugin releases.
Copy link
Contributor

Choose a reason for hiding this comment

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

Interesting. I believe that I always used the WordPress version (and not the Gutenberg plugin version) when working on components. Would be interesting to see which approach is the expected one!

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've always seen and used the Gutenberg version... it's an interesting question because the code ends up both in the plugin and Core... hmmm! 🤔

Copy link
Contributor

Choose a reason for hiding this comment

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

At least the version numbers in Gutenberg are way ahead of core, so it's easy to tell them apart 😁

Comment on lines -18 to -23
const year = await getInputValue( '[aria-label="Year"]' );
const month = await getInputValue( '[aria-label="Month"]' );
const monthLabel = await getSelectedOptionLabel( '[aria-label="Month"]' );
const day = await getInputValue( '[aria-label="Day"]' );
const hours = await getInputValue( '[aria-label="Hours"]' );
const minutes = await getInputValue( '[aria-label="Minutes"]' );
Copy link
Contributor

Choose a reason for hiding this comment

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

Just wondering if it wouldn't be a good thing to add these aria-labels in our code (unless those inputs are already labelled in an accessible way)

Copy link
Member Author

Choose a reason for hiding this comment

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

The inputs are labelled, but it's done using <label for=""> which you can't target using a CSS selector. I thought about using puppeteer-testing-library here so that we can do this properly but I think it's too great of a change for this PR.

Copy link
Contributor

Choose a reason for hiding this comment

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

Agreed!

- Updates the design of DateTimePicker, DatePicker and TimePicker.
- Converts CSS in DateTimePicker, DatePicker and TimePicker to Emotion
  where it makes sense to do so.
- Allows removal of Reset button and Help functionality from
  DateTimePicker.
- Adds PublishDateTimePicker to block-editor. This exposes a
  specialised DateTimePicker that is good for choosing a post publish
  date.
@noisysocks noisysocks force-pushed the update/date-time-picker-design branch from c79f127 to d93ff2b Compare May 27, 2022 01:17
Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

Great work @noisysocks, this is feeling very polished to me while testing in the editor and Storybook, and the code change looks solid. Nice work moving the zero padding to a state reducer, too, that looks like a good and logical way to handle the padding behaviour for now.

LGTM! 🎉

Copy link
Member

@ramonjd ramonjd 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 working as described for me. I tested in the post editor and in storybook.

The label additions come through on MacOS Voice Over.

Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

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

Nice work wrangling all of this @noisysocks 🙇

✅ Storybook examples are functioning well
✅ Works great in the editor
✅ All unit tests and e2es are passing locally

LGTM! 🚢


/**
* Internal dependencies
*/
import { getMomentDate } from './utils';
import type { DatePickerDayProps, DatePickerProps } from './types';
import type { DatePickerDayProps, DatePickerProps } from '../types';
import { Day, NavPrevButton, NavNextButton } from './styles';

const TIMEZONELESS_FORMAT = 'YYYY-MM-DDTHH:mm:ss';
const ARIAL_LABEL_TIME_FORMAT = 'dddd, LL';
Copy link
Member

@ramonjd ramonjd May 27, 2022

Choose a reason for hiding this comment

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

Not necessary for this PR (it's in trunk) I noticed that the aria-label on the day component outputs symbols.

Screen Shot 2022-05-27 at 11 17 15 am

Not sure if the problem is in moment(). It's something to do with the locale aware format LL

This works

const ARIAL_LABEL_TIME_FORMAT = 'dddd, MMMM DD, YYYY'; // Monday, May 09, 2022

But it's not locale aware I presume so it might need some further 👀

Copy link
Member Author

Choose a reason for hiding this comment

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

Oh interesting, good catch. We probably should use our own dateFormat function that's in @wordpress/date here:

const dayAriaLabel = moment( day ).format( ARIAL_LABEL_TIME_FORMAT );

I'll turn your comment into an issue.

Copy link
Member Author

Choose a reason for hiding this comment

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

@noisysocks noisysocks merged commit 43d9c82 into trunk May 27, 2022
@noisysocks noisysocks deleted the update/date-time-picker-design branch May 27, 2022 02:04
@github-actions github-actions bot added this to the Gutenberg 13.4 milestone May 27, 2022
@noisysocks
Copy link
Member Author

Thanks everyone, big love ❤️

youknowriad pushed a commit that referenced this pull request Jun 3, 2022
* Re-organise date-time dir to have component subdirs

* Update design of DateTimePicker and convert to Emotion

- Updates the design of DateTimePicker, DatePicker and TimePicker.
- Converts CSS in DateTimePicker, DatePicker and TimePicker to Emotion
  where it makes sense to do so.
- Allows removal of Reset button and Help functionality from
  DateTimePicker.
- Adds PublishDateTimePicker to block-editor. This exposes a
  specialised DateTimePicker that is good for choosing a post publish
  date.

* Add deprecated warning for when __nextRemoveHelpButton and __nextRemoveResetButton are not given

* Target component instead of classname

* Use space() instead of hardcoded widths

* Update CSS selectors used in E2E tests

* Update changelog

* Update scheduling e2e test

* Use relative URLs in README.md
@femkreations femkreations added the Needs User Documentation Needs new user documentation label Sep 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Document Settings Document settings experience Needs User Documentation Needs new user documentation [Package] Components /packages/components [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants