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

Enable ability to create Pages from the inline Link UI #35083

Merged
merged 8 commits into from
Sep 30, 2021

Conversation

getdave
Copy link
Contributor

@getdave getdave commented Sep 23, 2021

Description

In #19775 we added the ability to create entities (Posts/Pages) from within the Link UI interface.

As we learnt in #26317 the feature is not enabled within the "inline" link UI which is the link interface used when you add a link to a paragraph of text.

This PR enables page creation from within the link ui within the Post Editor only.

Please note: this PR does not attempt to address any visual updates to the "Create button", although I'm happy to tackle that in a follow up.

Screen Shot 2021-09-23 at 12 54 47

Closes #26317

How has this been tested?

Test with Admin user

  • Check you are an Admin level user.
  • Create Post - add text.
  • Select some text and click the icon to add a link.
  • Type in some random words for a page you'd like to create (eg: This is a nice little page).
  • See option appear in search suggestions for Create page.
  • Click.
  • See page created as a draft.
  • Click the link you just added and see the page has been created.

Test with low perms user

  • Create a new User and make them a lower permission user (Contributor) which doesn't have permissions to create posts or pages.
  • Switch to/Login as that user.
  • Create Post - add text.
  • Select some text and click the icon to add a link.
  • Type in some random words for a page you'd like to create (eg: This is a nice little page).
  • See no option to Create - this is not available unless you have the appropriate permissions.

Screenshots

Screen.Capture.on.2021-09-23.at.12-46-17.mov

Types of changes

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).

@getdave getdave self-assigned this Sep 23, 2021
@getdave getdave added [Feature] Link Editing Link components (LinkControl, URLInput) and integrations (RichText link formatting) [Type] Enhancement A suggestion for improvement. labels Sep 23, 2021
@@ -117,6 +159,9 @@ function useBlockEditorSettings( settings, hasTemplate ) {
__experimentalCanUserUseUnfilteredHTML: canUseUnfilteredHTML,
__experimentalUndo: undo,
outlineMode: hasTemplate,
__experimentalCreateEntity: createEntity,
__experimentalUserCanCreate:
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Is it appropriate to expose this property? Would __experimentalUserCanCreateEntities be a better name?

@github-actions
Copy link

github-actions bot commented Sep 23, 2021

Size Change: -1.1 kB (0%)

Total Size: 1.06 MB

Filename Size Change
build/api-fetch/index.min.js 2.21 kB +20 B (+1%)
build/block-editor/index.min.js 134 kB +83 B (0%)
build/block-editor/style-rtl.css 13.9 kB +40 B (0%)
build/block-editor/style.css 13.9 kB +38 B (0%)
build/block-library/blocks/gallery/editor-rtl.css 977 B -6 B (-1%)
build/block-library/blocks/gallery/editor.css 982 B -6 B (-1%)
build/block-library/editor-rtl.css 9.76 kB -2 B (0%)
build/block-library/editor.css 9.75 kB -2 B (0%)
build/block-library/index.min.js 146 kB -1.2 kB (-1%)
build/block-library/reset-rtl.css 536 B +9 B (+2%)
build/block-library/reset.css 536 B +9 B (+2%)
build/blocks/index.min.js 45.7 kB -1.28 kB (-3%)
build/components/index.min.js 210 kB +114 B (0%)
build/components/style-rtl.css 15.9 kB +76 B (0%)
build/components/style.css 15.9 kB +76 B (0%)
build/customize-widgets/index.min.js 11.1 kB -13 B (0%)
build/edit-navigation/index.min.js 15.3 kB -153 B (-1%)
build/edit-navigation/style-rtl.css 3.71 kB +12 B (0%)
build/edit-navigation/style.css 3.7 kB +12 B (0%)
build/edit-post/index.min.js 29 kB +22 B (0%)
build/edit-post/style-rtl.css 7.19 kB +12 B (0%)
build/edit-post/style.css 7.18 kB +11 B (0%)
build/edit-site/index.min.js 28.4 kB +649 B (+2%)
build/edit-site/style-rtl.css 5.36 kB +147 B (+3%)
build/edit-site/style.css 5.36 kB +149 B (+3%)
build/edit-widgets/index.min.js 15.7 kB -316 B (-2%)
build/edit-widgets/style-rtl.css 4.1 kB +10 B (0%)
build/edit-widgets/style.css 4.1 kB +9 B (0%)
build/editor/index.min.js 37.5 kB +92 B (0%)
build/editor/style.css 3.75 kB +1 B (0%)
build/format-library/index.min.js 5.59 kB +251 B (+5%) 🔍
build/media-utils/index.min.js 2.92 kB +40 B (+1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 931 B
build/admin-manifest/index.min.js 1.09 kB
build/annotations/index.min.js 2.7 kB
build/autop/index.min.js 2.08 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.19 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 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 474 B
build/block-library/blocks/button/editor.css 474 B
build/block-library/blocks/button/style-rtl.css 600 B
build/block-library/blocks/button/style.css 600 B
build/block-library/blocks/buttons/editor-rtl.css 315 B
build/block-library/blocks/buttons/editor.css 315 B
build/block-library/blocks/buttons/style-rtl.css 370 B
build/block-library/blocks/buttons/style.css 370 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 131 B
build/block-library/blocks/code/theme.css 131 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 497 B
build/block-library/blocks/columns/style.css 496 B
build/block-library/blocks/cover/editor-rtl.css 666 B
build/block-library/blocks/cover/editor.css 670 B
build/block-library/blocks/cover/style-rtl.css 1.23 kB
build/block-library/blocks/cover/style.css 1.23 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/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.59 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/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 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 728 B
build/block-library/blocks/image/editor.css 728 B
build/block-library/blocks/image/style-rtl.css 482 B
build/block-library/blocks/image/style.css 487 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 488 B
build/block-library/blocks/media-text/style.css 485 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 568 B
build/block-library/blocks/navigation-link/editor.css 570 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 300 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/style-rtl.css 195 B
build/block-library/blocks/navigation-submenu/style.css 195 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.72 kB
build/block-library/blocks/navigation/editor.css 1.72 kB
build/block-library/blocks/navigation/style-rtl.css 1.48 kB
build/block-library/blocks/navigation/style.css 1.47 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 198 B
build/block-library/blocks/page-list/style.css 198 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/editor-rtl.css 210 B
build/block-library/blocks/post-author/editor.css 210 B
build/block-library/blocks/post-author/style-rtl.css 182 B
build/block-library/blocks/post-author/style.css 181 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 B
build/block-library/blocks/post-content/editor-rtl.css 138 B
build/block-library/blocks/post-content/editor.css 138 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 398 B
build/block-library/blocks/post-featured-image/editor.css 398 B
build/block-library/blocks/post-featured-image/style-rtl.css 143 B
build/block-library/blocks/post-featured-image/style.css 143 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 378 B
build/block-library/blocks/post-template/style.css 379 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 60 B
build/block-library/blocks/post-title/style.css 60 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-title/editor-rtl.css 85 B
build/block-library/blocks/query-title/editor.css 85 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 220 B
build/block-library/blocks/quote/theme.css 222 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 374 B
build/block-library/blocks/search/style.css 375 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 250 B
build/block-library/blocks/separator/style.css 250 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 462 B
build/block-library/blocks/site-logo/editor.css 464 B
build/block-library/blocks/site-logo/style-rtl.css 153 B
build/block-library/blocks/site-logo/style.css 153 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 165 B
build/block-library/blocks/social-link/editor.css 165 B
build/block-library/blocks/social-links/editor-rtl.css 812 B
build/block-library/blocks/social-links/editor.css 811 B
build/block-library/blocks/social-links/style-rtl.css 1.3 kB
build/block-library/blocks/social-links/style.css 1.3 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 636 B
build/block-library/blocks/template-part/editor.css 635 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/term-description/editor-rtl.css 90 B
build/block-library/blocks/term-description/editor.css 90 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 853 B
build/block-library/common.css 849 B
build/block-library/style-rtl.css 10.3 kB
build/block-library/style.css 10.3 kB
build/block-library/theme-rtl.css 665 B
build/block-library/theme.css 669 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/compose/index.min.js 10.3 kB
build/core-data/index.min.js 12.3 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 614 B
build/data/index.min.js 7.1 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 428 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.45 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/editor/style-rtl.css 3.76 kB
build/element/index.min.js 3.17 kB
build/escape-html/index.min.js 517 B
build/format-library/style-rtl.css 668 B
build/format-library/style.css 670 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.6 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.72 kB
build/keycodes/index.min.js 1.3 kB
build/list-reusable-blocks/index.min.js 1.85 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/notices/index.min.js 845 B
build/nux/index.min.js 2.03 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.83 kB
build/primitives/index.min.js 921 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.63 kB
build/reusable-blocks/index.min.js 2.28 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.6 kB
build/server-side-render/index.min.js 1.5 kB
build/shortcode/index.min.js 1.48 kB
build/token-list/index.min.js 562 B
build/url/index.min.js 1.74 kB
build/viewport/index.min.js 1.02 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.11 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

@getdave getdave marked this pull request as ready for review September 23, 2021 11:56
@getdave
Copy link
Contributor Author

getdave commented Sep 23, 2021

I'd like a confidence check here regarding the new __experimental properties I'm exposing on the editor settings interface.

Copy link
Member

@fabiankaegy fabiankaegy left a comment

Choose a reason for hiding this comment

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

I checked this out locally and first of all I love this feature already!

Screen Shot 2021-09-23 at 14 17 11

It seems the text isn't quite lined up with the icon.

And I am not able to figure out how it determines wether it should create a new Page or a new Post 🤔 (my assumption would be that it always creates Pages but from the Code I see that there is an allow list for the two post types )

@Mamaduka
Copy link
Member

Mamaduka commented Sep 23, 2021

Tested and works well.

I noticed that newly created pages don't use "pretty permalinks."
CleanShot 2021-09-23 at 16 25 54

I'm also curious about @fabiankaegy's last question.

@getdave
Copy link
Contributor Author

getdave commented Sep 23, 2021

And I am not able to figure out how it determines wether it should create a new Page or a new Post 🤔 (my assumption would be that it always creates Pages but from the Code I see that there is an allow list for the two post types )

Yeh actually that's a good point. I was just about to make a change to that code but I got hit by a headache and had to stop for a bit.

I think we'll just default to Pages as the UI would need some work to allow us to be able to choose on the fly. If we want to make this more "fancy" in the future we can do that in a followup.

@getdave
Copy link
Contributor Author

getdave commented Sep 23, 2021

It seems the text isn't quite lined up with the icon.

✅ Fixed. There was a erroneous bottom margin.

@getdave
Copy link
Contributor Author

getdave commented Sep 23, 2021

I noticed that newly created pages don't use "pretty permalinks."

@Mamaduka this is because the pages are created as drafts and therefore don't have pretty permalinks. Annoyingly due to the way the link data is persisted to the HTML using the format API the value isn't dynamic so it will always remain as the "ugly" permalink even after the Page is published.

However, thanks to Rich Previews, if the editor is able to make a request to retrieve details about the Page (which it cannot do on wp-env localhost so you won't see it) then the title in the preview will get replaced with the actual title of the page.

@Mamaduka
Copy link
Member

Thanks for the explanation, Dave.

@getdave
Copy link
Contributor Author

getdave commented Sep 23, 2021

Dave, I would love to get more eyes on this PR before merging.

I agree. That's my main area of concern. This seems inordinately difficult, but then again I'm very used to having this level of indirection having worked on:

  • fetching link suggestions
  • fetching rich previews

Both employ a similar mechanic for exposing WordPress specific APIs to non-WP specific packages.

@getdave
Copy link
Contributor Author

getdave commented Sep 23, 2021

@gziolo How do you feel about the addition of the two __experimental settings to allow us to create pages and also check the user has permission?

The reason I'm having to expose on the editor package is because these are WP specific APIs. The format API (which is where the LinkControl for inline links resides) is a non-WP specific package. Therefore I've used this method as there's prior art with:

  • __experimentalFetchLinkSuggestions
  • __experimentalFetchUrlData

If there are other feasible patterns that would simplify this then I'm keen to learn about them.

@javierarce
Copy link
Contributor

I tested this PR too for both types of users, and it works fine 🚀

Please note: this PR does not attempt to address any visual updates to the "Create button", although I'm happy to tackle that in a follow up.

The only thing I would change visually is the hover background of the items because the gray we are using (#ddd) is quite dark. This is not related to this PR and happens on the whole component.

I'll open a follow-up ticket.

@getdave getdave added the Needs Technical Feedback Needs testing from a developer perspective. label Sep 24, 2021
@adamziel
Copy link
Contributor

I noticed the Link UI disappears once the page is created. I noticed it feels like my changes were not applied. In the Navigation Link block the UI stays open – can we have the same behavior here?

@getdave
Copy link
Contributor Author

getdave commented Sep 28, 2021

I noticed the Link UI disappears once the page is created. I noticed it feels like my changes were not applied. In the Navigation Link block the UI stays open – can we have the same behavior here?

I think so. It's always been the way the feature works, but it should be possible to remain open...

@adamziel
Copy link
Contributor

adamziel commented Sep 28, 2021

I think so. It's always been the way the feature works, but it should be possible to remain open...

Ah I see! If I click any other link, it closes the popup too. So:

  • Creating a new page from the link UI popup closes the popup
  • Creating a new page from the navigation link popup keeps the popup open

Sounds like a larger consistency consideration. I wonder what would be a good way to approach this 🤔 CC @javierarce

@getdave getdave requested a review from adamziel September 28, 2021 13:37
@getdave
Copy link
Contributor Author

getdave commented Sep 29, 2021

So @adamziel how do you feel about this one now?

I appreciate there are concerns about auto-closing but that's probably something to tackle in follow ups.

If you want we can de-activate the functionality for now on RichText and Nav and just ship the underlying code. Then we can continue to iterate on "auto close" in a smaller separate PR without exposing this feature.

@javierarce
Copy link
Contributor

Sounds like a larger consistency consideration. I wonder what would be a good way to approach this 🤔 CC @javierarce

It's true that the page creation happens very fast and the first time it might not be clear what has happened, but at the end of the process, we end up with an underlined text.

And it's also true that creating a page from the nav block doesn't close the popup, but if you add items that already exist, the popup gets closed.

I would keep the auto-close for now, and as @getdave mentioned discuss it in a follow-up.

@adamziel
Copy link
Contributor

adamziel commented Sep 29, 2021

Alright, let's move forward with this one 👍

@@ -125,6 +148,9 @@ function useBlockEditorSettings( settings, hasTemplate ) {
canUseUnfilteredHTML,
undo,
hasTemplate,

userCanCreatePages,
createPageEntity,
Copy link
Contributor

Choose a reason for hiding this comment

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

This PR introduced a really bad degradation in terms of typing performance. I think this change here has been reverted though in a more recent PR so the degradation is gone but we should be careful with block editor settings. It shouldn't become a basket for any config. https://codehealth.vercel.app

Copy link
Contributor Author

@getdave getdave Oct 7, 2021

Choose a reason for hiding this comment

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

Yes it did. Apologies for that.

Specifically the dependencies we introduced to the useMemo hook that caused the entire memoized object to be recomputed on each render because the references were always different.

It was resolved and it's good that we have tooling to help catch such scenarios. I assume we are to be encouraged to keep an eye on https://codehealth.vercel.app/?

It shouldn't become a basket for any config

I agree and that was considered before we placed it here.

Copy link
Contributor

Choose a reason for hiding this comment

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

It was resolved and it's good that we have tooling to help catch such scenarios. I assume we are to be encouraged to keep an eye on https://codehealth.vercel.app/?

yeah, while not 100% precise, it's a good indicator to give us hints :)

Copy link
Contributor

Choose a reason for hiding this comment

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

From eyeballing, it seems like the problem rooted in the fact that createPageEntity was a different function every time this function ran, therefore useMemo was re-ran on every re-render and possibly triggered another re-render.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes that's right.

Specifically the dependencies we introduced to the useMemo hook that caused the entire memoized object to be recomputed on each render because the references were always different.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Link Editing Link components (LinkControl, URLInput) and integrations (RichText link formatting) Needs Technical Feedback Needs testing from a developer perspective. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Enable page & post creation via the "Add Link" interface
7 participants