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

Navigation: use same default implementation of __experimentalFetchLinkSuggestions in post, site, navigation, widget editor #29993

Merged
merged 7 commits into from
Apr 1, 2021

Conversation

gwwar
Copy link
Contributor

@gwwar gwwar commented Mar 18, 2021

Fixes #29396 where only post links were returned in the navigation block in site-editor.

We have multiple implementations of fetchLinkSuggestions for post-editor, site-editor, and navigation-editor. The function was copy pasted, and functionality drifted over time. Many didn't realize that the site-editor implementation existed, as it doesn't appear to have ever supported links other than posts.

This PR moves a default implementation into the block-editor package to avoid any drift in behavior. Please let me know if folks have preferences for moving the function to another package.

This PR moves a default implementation into a new package called @wordpress/wordpress-block-editor-config to avoid any drift in behavior. This package is used to house common settings for WordPress specific block-editors.

This PR moves a default implementation into the core-data package to avoid any drift in behavior

Testing Instructions

Site Editor

To enable the site editor:

  • Checkout this branch
  • Enable the gutenberg plugin
  • Active the TT1 block theme
  • Click on Edit Site in masterbar or in sidebar of wp-admin
  • Add a navigation block by typing /navigation

We can insert links of varying types:

site-editor.mp4

Drafts may be created:

draft.mp4

Post Editor

We can create various links in the post editor:

post-editor.mp4

Navigation Editor

  • Visit /wp-admin/admin.php?page=gutenberg-experiments
  • Check Enable Navigation screen and save
  • Visit /wp-admin/admin.php?page=gutenberg-navigation

We can create various links in the navigation editor

navigation-editor.mp4

Widgets Editor

Screen Shot 2021-03-31 at 12 32 18 PM

  • Visit /wp-admin/admin.php?page=gutenberg-experiments
  • Check Enable Widgets screen in Customizer and save
  • Visit /wp-admin/themes.php?page=gutenberg-widgets

We can create various links in the widgets editor

@github-actions
Copy link

github-actions bot commented Mar 18, 2021

Size Change: -551 B (0%)

Total Size: 1.42 MB

Filename Size Change
build/annotations/index.js 3.78 kB +2 B (0%)
build/api-fetch/index.js 3.42 kB -3 B (0%)
build/autop/index.js 2.82 kB +3 B (0%)
build/block-library/index.js 151 kB +18 B (0%)
build/block-serialization-default-parser/index.js 1.87 kB +3 B (0%)
build/blocks/index.js 48.4 kB -3 B (0%)
build/components/index.js 284 kB +2 B (0%)
build/core-data/index.js 17 kB +427 B (+3%)
build/customize-widgets/index.js 7.25 kB -75 B (-1%)
build/data-controls/index.js 835 B -1 B (0%)
build/data/index.js 8.89 kB +1 B (0%)
build/edit-navigation/index.js 17 kB -322 B (-2%)
build/edit-post/index.js 306 kB -1 B (0%)
build/edit-site/index.js 27.3 kB -123 B (0%)
build/edit-widgets/index.js 15.7 kB +34 B (0%)
build/editor/index.js 42.2 kB -506 B (-1%)
build/keyboard-shortcuts/index.js 2.53 kB -1 B (0%)
build/keycodes/index.js 1.96 kB -1 B (0%)
build/list-reusable-blocks/index.js 3.19 kB -1 B (0%)
build/notices/index.js 1.85 kB +1 B (0%)
build/plugins/index.js 2.95 kB -1 B (0%)
build/primitives/index.js 1.42 kB +1 B (0%)
build/react-i18n/index.js 1.46 kB +2 B (0%)
build/reusable-blocks/index.js 3.79 kB -4 B (0%)
build/rich-text/index.js 13.5 kB -2 B (0%)
build/server-side-render/index.js 2.59 kB -4 B (0%)
build/url/index.js 3.02 kB +2 B (0%)
build/viewport/index.js 1.86 kB +1 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/blob/index.js 664 B 0 B
build/block-directory/index.js 8.63 kB 0 B
build/block-directory/style-rtl.css 1 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-editor/index.js 127 kB 0 B
build/block-editor/style-rtl.css 12.4 kB 0 B
build/block-editor/style.css 12.4 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 551 B 0 B
build/block-library/blocks/button/style.css 551 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 370 B 0 B
build/block-library/blocks/buttons/style.css 370 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 436 B 0 B
build/block-library/blocks/columns/style.css 435 B 0 B
build/block-library/blocks/cover/editor-rtl.css 605 B 0 B
build/block-library/blocks/cover/editor.css 605 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.24 kB 0 B
build/block-library/blocks/cover/style.css 1.24 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 175 B 0 B
build/block-library/blocks/file/editor.css 174 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.11 kB 0 B
build/block-library/blocks/gallery/style.css 1.1 kB 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 476 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/legacy-widget/editor-rtl.css 398 B 0 B
build/block-library/blocks/legacy-widget/editor.css 399 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 597 B 0 B
build/block-library/blocks/navigation-link/editor.css 597 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 957 B 0 B
build/block-library/blocks/navigation-link/style.css 955 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.13 kB 0 B
build/block-library/blocks/navigation/editor.css 1.13 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 204 B 0 B
build/block-library/blocks/navigation/style.css 205 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 170 B 0 B
build/block-library/blocks/page-list/editor.css 170 B 0 B
build/block-library/blocks/page-list/style-rtl.css 167 B 0 B
build/block-library/blocks/page-list/style.css 167 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 83 B 0 B
build/block-library/blocks/query-loop/editor.css 82 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/query/editor-rtl.css 795 B 0 B
build/block-library/blocks/query/editor.css 794 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 165 B 0 B
build/block-library/blocks/search/editor.css 165 B 0 B
build/block-library/blocks/search/style-rtl.css 342 B 0 B
build/block-library/blocks/search/style.css 344 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 201 B 0 B
build/block-library/blocks/site-logo/editor.css 201 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 115 B 0 B
build/block-library/blocks/site-logo/style.css 115 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 776 B 0 B
build/block-library/blocks/social-links/editor.css 776 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.33 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 317 B 0 B
build/block-library/blocks/spacer/editor.css 317 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 402 B 0 B
build/block-library/blocks/table/style.css 402 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 552 B 0 B
build/block-library/blocks/template-part/editor.css 551 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/editor-rtl.css 50 B 0 B
build/block-library/blocks/verse/editor.css 50 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 187 B 0 B
build/block-library/blocks/video/style.css 187 B 0 B
build/block-library/common-rtl.css 1.31 kB 0 B
build/block-library/common.css 1.31 kB 0 B
build/block-library/editor-rtl.css 9.53 kB 0 B
build/block-library/editor.css 9.52 kB 0 B
build/block-library/reset-rtl.css 503 B 0 B
build/block-library/reset.css 504 B 0 B
build/block-library/style-rtl.css 9.25 kB 0 B
build/block-library/style.css 9.25 kB 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/components/style-rtl.css 16.2 kB 0 B
build/components/style.css 16.2 kB 0 B
build/compose/index.js 11.2 kB 0 B
build/customize-widgets/style-rtl.css 676 B 0 B
build/customize-widgets/style.css 677 B 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 787 B 0 B
build/dom-ready/index.js 576 B 0 B
build/dom/index.js 5.08 kB 0 B
build/edit-navigation/style-rtl.css 2.86 kB 0 B
build/edit-navigation/style.css 2.86 kB 0 B
build/edit-post/style-rtl.css 7.13 kB 0 B
build/edit-post/style.css 7.12 kB 0 B
build/edit-site/style-rtl.css 4.58 kB 0 B
build/edit-site/style.css 4.57 kB 0 B
build/edit-widgets/style-rtl.css 2.98 kB 0 B
build/edit-widgets/style.css 2.98 kB 0 B
build/editor/style-rtl.css 3.96 kB 0 B
build/editor/style.css 3.96 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.75 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 2.28 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 4.02 kB 0 B
build/is-shallow-equal/index.js 699 B 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 5.38 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/priority-queue/index.js 791 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@noisysocks
Copy link
Member

Thanks for cleaning up this bit of technical debt!

This PR moves a default implementation into the block-editor package to avoid any drift in behavior. Please let me know if folks have preferences for moving the function to another package.

The problem with having fetchLinkSuggestions live in @wordpress/block-editor is that it relies on using the /wp/v2/search endpoint and @wordpress/block-editor is supposed to be usable in non-WordPress applications.

We had this exact problem with uploadMedia which is a function that is used by several blocks and relies on /wp/v2/media. Ultimately uploadMedia was moved to its own @wordpress/media-utils package.

We could do something similar to that and move fetchLinkSuggestions to a new @wordpress/link-utils package. I do wonder, though, if we'll keep running into this and end up with a dozen different packages containing one function. Maybe functions like uploadMedia and fetchLinkSuggestions ought to belong in a package called @wordpress/wp-admin-utils or something.

cc. @youknowriad

@draganescu
Copy link
Contributor

I vote for something line @wordpress/wp-admin-utils but maybe with an even more generic name, like @wordpress/wp-headless-utils :D

@youknowriad
Copy link
Contributor

I don't like wp-admin-utils :) because I don't like the "utils" name in it which can be a place to put anything :P That said, maybe what we want is more @wordpress/wordpress-block-editor-config or something like that. (The common settings for WP-Admin Block editors)

@gwwar gwwar force-pushed the fix/navigation-link-search branch 2 times, most recently from 7e4b4f9 to e867cff Compare March 20, 2021 02:14
@gwwar gwwar force-pushed the fix/navigation-link-search branch from dcdb114 to 9cfa345 Compare March 23, 2021 02:14
@gwwar
Copy link
Contributor Author

gwwar commented Mar 23, 2021

@youknowriad @draganescu @noisysocks this one is ready for another 👀 on package setup feedback. Were there any other common settings we'd like to pull in, or is it okay that we're adding a single experimental value?

Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

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

This is looking very good for me. Thanks @gwwar

Something I'd love more thoughts about is the name of the package as I'm very bad at naming things. cc @gziolo @mcsf and others.

@youknowriad
Copy link
Contributor

I think there's the uploadMedia handler that could go into this package as well?

@gziolo
Copy link
Member

gziolo commented Mar 23, 2021

I think there's the uploadMedia handler that could go into this package as well?

There is @wordpress/media-utils package already that already contains uploadMedia.

Something I'd love more thoughts about is the name of the package as I'm very bad at naming things.

Does it really need to be another package? I also don't think it's specific to the block editor so the currently proposed name is misleading (more details about editor packages: https://github.com/WordPress/gutenberg/blob/trunk/docs/explanations/architecture/modularity.md#editor-packages). All the screens that consume this functionality depend on @wordpress/editor already so why not expose it from there? Otherwise, we are creating another entry point that needs to be processed by all tools. This functionality is too tied to WordPress so it isn't usable as a standalone package from npm. We already have a few packages that were extracted from @wordpress/editor like:

  • @wordpress/media-utils
  • @wordpress/reusable-blocks
  • @wordpress/server-side-render

The rationale behind that was to be able to reuse the functionality inside the core blocks. Although, now I see that it doesn't apply to @wordpress/media-utils.

@youknowriad
Copy link
Contributor

ll the screens that consume this functionality depend on @wordpress/editor already

Is this true? For me the "editor" package has always been about the "post editor" so it doesn't sound like a great fit for me.

@youknowriad
Copy link
Contributor

@wordpress/media-utils
@wordpress/reusable-blocks

You're right when you say that these two packages have been extracted for the same reason as the link handler. But that reason is not to be able to use them in the block library for me, it's because these are WP specific concepts that are not specific to the post editor.

@gziolo
Copy link
Member

gziolo commented Mar 23, 2021

ll the screens that consume this functionality depend on @wordpress/editor already

Is this true? For me the "editor" package has always been about the "post editor" so it doesn't sound like a great fit for me.

"@wordpress/editor": "file:../editor",

"@wordpress/editor": "file:../editor",

@gwwar
Copy link
Contributor Author

gwwar commented Mar 25, 2021

Should I spin up an alternative PR to sync up the site-editor search implementation, while we 🤔 about where to put common WP block-editor settings?

@youknowriad
Copy link
Contributor

I think we should just make a decision. what do people think about putting this in "@wordpress/core-data". In a way it's our official API to the REST API. Even if this handler is not tied to the store, it might make sense to include there, maybe experimental to start with?

@noisysocks
Copy link
Member

noisysocks commented Mar 26, 2021

It sounds to me like there could be a superset of block-editor which is block-editor but with extra bits of functionality that only make sense within the context of WP Admin: link suggestions, media uploading, reusable blocks, etc.

The dependency tree would then look like this:

|- block-editor
|	|- wordpress-block-editor
|	|	|- editor
|	|	|	|- edit-post
|	|	|- edit-site
|	|	|- edit-navigation
|	|	|- edit-widgets

That said, I'm also fine with putting fetchLinkSuggestions into its own package or placing it in @wordpress/core-data.

@gziolo
Copy link
Member

gziolo commented Mar 26, 2021

To unblock this work you can start with using the @wordpress/core-data package and the experimental API approach. As far as I can tell @wordpress/core-data is used to solve similar issues, some examples:

  • canUser
  • getAuthors
  • getCurrentTheme
  • getEmbedPreview
  • getThemeSupports
  • hasUploadPermissions

@gwwar
Copy link
Contributor Author

gwwar commented Mar 26, 2021

Sounds good I can try @wordpress/core-data to start 👍

@gwwar gwwar force-pushed the fix/navigation-link-search branch from 9cfa345 to 3f37473 Compare March 26, 2021 21:17
@gwwar gwwar requested a review from nerrad as a code owner March 26, 2021 21:17
@gwwar
Copy link
Contributor Author

gwwar commented Mar 26, 2021

✅ This is ready for review. It still feels a bit out of place in core-data but I'll see what y'all think.

No updates to the README for now, since this function is still experimental

Copy link
Member

@noisysocks noisysocks left a comment

Choose a reason for hiding this comment

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

It looks like fetchLinkSuggestions is not hooked up to edit-widgets. (Maybe it never was?)

Screen Shot 2021-03-31 at 11 32 29

Other than that, this is working beautifully! Thanks again for cleaning it up.

* @return { WPFetchLinkSuggestions } Function that fetches link suggestions
*
*/
const createFetchLinkSuggestions = ( {
Copy link
Member

Choose a reason for hiding this comment

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

Why have the higher order createFetchLinkSuggestions and not fetchLinkSuggestions as before? I think fetchLinkSuggestions is an easier API for consumers to understand and use. Also, having a function that accepts a single params object is very flexible in terms of future compatibility.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Mostly to standardize how the editors were calling this. For example, navigation-editor was doing:

settings.__experimentalFetchLinkSuggestions = (
		searchText,
		searchOptions
	) => fetchLinkSuggestions( searchText, searchOptions, settings );

I don't have strong feelings on this one. I can try preferring the simple signature.

*
*/
const createFetchLinkSuggestions = ( {
disablePostFormats = false,
Copy link
Member

Choose a reason for hiding this comment

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

Minor, but I think it's easier to understand options like this when they're framed positively instead of negatively because then you are less likely to end up in situations where there's a double negative. So enablePostFormats instead of disablePostFormats.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This one is an editor setting, happy to update this, but it might be better in a follow up PR to avoid other regressions.

type = undefined,
subtype = undefined,
page = undefined,
perPageArg = undefined,
Copy link
Member

Choose a reason for hiding this comment

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

Looking at the previous fetchLinkSuggestions implementations, it looks like this should be perPage not perPageArg.

Suggested change
perPageArg = undefined,
perPage: perPageArg = undefined,

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good catch, it was used to avoid to avoid redeclaring a const, but I shouldn't have added it to the function signiture. https://github.com/WordPress/gutenberg/pull/29993/files#diff-278a4a275170c4215a2f4e9d5c0c6d831f9328258220a76cda04b8d9f39f01a5L47

);
}

if ( ! disablePostFormats && ( ! type || type === 'post-format' ) ) {
Copy link
Member

Choose a reason for hiding this comment

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

It might be worth taking this opportunity to write some unit tests for this function since it has a bunch of conditional logic that is often error prone and apiFetch is easy to mock.

@gwwar gwwar force-pushed the fix/navigation-link-search branch from 3f37473 to 20209c7 Compare March 31, 2021 19:36
Copy link
Contributor Author

@gwwar gwwar left a comment

Choose a reason for hiding this comment

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

Great catches @noisysocks, esp with the widgets editor!. It had never been wired up before so I didn't think we used navigation links there. 20209c7 should handle most of the noted feedback.

Screen Shot 2021-03-31 at 12 32 18 PM

I'll go back and add some unit tests after lunch 🥪

* @return { WPFetchLinkSuggestions } Function that fetches link suggestions
*
*/
const createFetchLinkSuggestions = ( {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Mostly to standardize how the editors were calling this. For example, navigation-editor was doing:

settings.__experimentalFetchLinkSuggestions = (
		searchText,
		searchOptions
	) => fetchLinkSuggestions( searchText, searchOptions, settings );

I don't have strong feelings on this one. I can try preferring the simple signature.

*
*/
const createFetchLinkSuggestions = ( {
disablePostFormats = false,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This one is an editor setting, happy to update this, but it might be better in a follow up PR to avoid other regressions.

type = undefined,
subtype = undefined,
page = undefined,
perPageArg = undefined,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good catch, it was used to avoid to avoid redeclaring a const, but I shouldn't have added it to the function signiture. https://github.com/WordPress/gutenberg/pull/29993/files#diff-278a4a275170c4215a2f4e9d5c0c6d831f9328258220a76cda04b8d9f39f01a5L47

@gwwar gwwar changed the title Navigation: use same default implementation of __experimentalFetchLinkSuggestions in post, site and navigation editor Navigation: use same default implementation of __experimentalFetchLinkSuggestions in post, site, navigation, widget editor Mar 31, 2021
@gwwar
Copy link
Contributor Author

gwwar commented Mar 31, 2021

✅ Added unit tests. They did catch an error with not specifying an optional argument ✨

Copy link
Member

@noisysocks noisysocks left a comment

Choose a reason for hiding this comment

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

Looks good, thanks for adding tests!

@gwwar
Copy link
Contributor Author

gwwar commented Apr 1, 2021

Thanks for the reviews! I'm going to merge this one, but it shouldn't be an issue to move this elsewhere in a follow up if we find a better package for this.

@gwwar gwwar merged commit dc22fab into trunk Apr 1, 2021
@gwwar gwwar deleted the fix/navigation-link-search branch April 1, 2021 15:34
@github-actions github-actions bot added this to the Gutenberg 10.4 milestone Apr 1, 2021
@gziolo gziolo added [Type] Experimental Experimental feature or API. [Block] Navigation Affects the Navigation Block labels Apr 6, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Navigation Affects the Navigation Block [Type] Experimental Experimental feature or API.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Navigation Page Link - Searches posts instead of pages
7 participants