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

feat: add auto-focussing via URLSearchParam to content-manager #17613

Merged
merged 1 commit into from
Aug 22, 2023

Conversation

joshuaellis
Copy link
Member

@joshuaellis joshuaellis commented Aug 8, 2023

What does it do?

  • Adds new useFocusInputField hook exposed via the helper-plugin
  • Utilises new useFocusInputField hook to auto-focus in the content-manager in GenericInputs
  • Utilises new useFocusInputField hook to auto-focus relation fields in the content-manager
  • Tweaks WYSIWG to be able to auto-focus
  • Updates custom-fields to accept and utilise their forwarded ref
  • Automatically opens RepeatableComponent if the field we want is located inside

Why is it needed?

  • Makes visual editing better

How to test it?

  • Automated testing
    OR
  • Go to a kitchen-sink entry
  • add field=<name> as a query param e.g. short_text or timestamp or custom_field
  • to test dynamic zones you need to have them created and saved
  • then add their "path" e.g. cats.0.categories
  • to test repeatable components you need to have them created and saved
  • then add their "path" e.g. repeatable_compo.1. name

Related issue(s)/PR(s)

@joshuaellis joshuaellis added source: core:content-manager Source is core/content-manager package flag: don't merge This PR should not be merged at the moment pr: feature This PR adds a new feature labels Aug 8, 2023
@joshuaellis joshuaellis self-assigned this Aug 8, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Aug 8, 2023

Size Change: +427 B (0%)

Total Size: 1.52 MB

Filename Size Change
packages/core/admin/build/content-manager.********.chunk.js 63.7 kB +204 B (0%)
packages/core/admin/build/main.********.js 584 kB +119 B (0%)
packages/core/helper-plugin/build/helper-plugin.esm.js 25.3 kB +60 B (0%)
packages/core/helper-plugin/build/helper-plugin.js 23.3 kB +48 B (0%)
ℹ️ View Unchanged
Filename Size Change
packages/core/admin/build/Admin_homePage.********.chunk.js 8.43 kB 0 B
packages/core/admin/build/Admin_InternalErrorPage.********.chunk.js 494 B 0 B
packages/core/admin/build/Admin_marketplace.********.chunk.js 8.29 kB 0 B
packages/core/admin/build/Admin_pluginsPage.********.chunk.js 1.17 kB 0 B
packages/core/admin/build/Admin_profilePage.********.chunk.js 3.45 kB 0 B
packages/core/admin/build/Admin_settingsPage.********.chunk.js 8.84 kB 0 B
packages/core/admin/build/admin-app.********.chunk.js 19.4 kB 0 B
packages/core/admin/build/Admin-authenticatedApp.********.chunk.js 8.27 kB +1 B (0%)
packages/core/admin/build/admin-edit-roles-page.********.chunk.js 16.3 kB 0 B
packages/core/admin/build/admin-edit-users.********.chunk.js 4.02 kB 0 B
packages/core/admin/build/admin-roles-list.********.chunk.js 3.09 kB 0 B
packages/core/admin/build/admin-users.********.chunk.js 5.77 kB 0 B
packages/core/admin/build/api-tokens-create-page.********.chunk.js 258 B 0 B
packages/core/admin/build/api-tokens-edit-page.********.chunk.js 257 B 0 B
packages/core/admin/build/api-tokens-list-page.********.chunk.js 2.79 kB 0 B
packages/core/admin/build/ar-json.********.chunk.js 19.6 kB 0 B
packages/core/admin/build/audit-logs-settings-page.********.chunk.js 4.05 kB 0 B
packages/core/admin/build/bb3108f7fd1e6179bde1.svg 352 B 0 B
packages/core/admin/build/bb4d0d527bdfb161bc5a.svg 2.33 kB 0 B
packages/core/admin/build/ca-json.********.chunk.js 13 kB 0 B
packages/core/admin/build/content-type-builder-list-view.********.chunk.js 7.17 kB 0 B
packages/core/admin/build/content-type-builder-translation-ar-json.********.chunk.js 1.37 kB 0 B
packages/core/admin/build/content-type-builder-translation-cs-json.********.chunk.js 2.89 kB 0 B
packages/core/admin/build/content-type-builder-translation-de-json.********.chunk.js 4.21 kB 0 B
packages/core/admin/build/content-type-builder-translation-dk-json.********.chunk.js 3.76 kB 0 B
packages/core/admin/build/content-type-builder-translation-en-json.********.chunk.js 4.12 kB 0 B
packages/core/admin/build/content-type-builder-translation-es-json.********.chunk.js 3.98 kB 0 B
packages/core/admin/build/content-type-builder-translation-fr-json.********.chunk.js 1.68 kB 0 B
packages/core/admin/build/content-type-builder-translation-id-json.********.chunk.js 3.35 kB 0 B
packages/core/admin/build/content-type-builder-translation-it-json.********.chunk.js 3.48 kB 0 B
packages/core/admin/build/content-type-builder-translation-ja-json.********.chunk.js 1.23 kB 0 B
packages/core/admin/build/content-type-builder-translation-ko-json.********.chunk.js 4.38 kB 0 B
packages/core/admin/build/content-type-builder-translation-ms-json.********.chunk.js 3.29 kB 0 B
packages/core/admin/build/content-type-builder-translation-nl-json.********.chunk.js 3.31 kB 0 B
packages/core/admin/build/content-type-builder-translation-pl-json.********.chunk.js 4.17 kB 0 B
packages/core/admin/build/content-type-builder-translation-pt-BR-json.********.chunk.js 4.18 kB 0 B
packages/core/admin/build/content-type-builder-translation-pt-json.********.chunk.js 1.1 kB 0 B
packages/core/admin/build/content-type-builder-translation-ru-json.********.chunk.js 4.7 kB 0 B
packages/core/admin/build/content-type-builder-translation-sk-json.********.chunk.js 3.75 kB 0 B
packages/core/admin/build/content-type-builder-translation-sv-json.********.chunk.js 4.19 kB 0 B
packages/core/admin/build/content-type-builder-translation-th-json.********.chunk.js 4.37 kB 0 B
packages/core/admin/build/content-type-builder-translation-tr-json.********.chunk.js 3.85 kB 0 B
packages/core/admin/build/content-type-builder-translation-uk-json.********.chunk.js 4.38 kB 0 B
packages/core/admin/build/content-type-builder-translation-zh-Hans-json.********.chunk.js 3.51 kB 0 B
packages/core/admin/build/content-type-builder-translation-zh-json.********.chunk.js 4.51 kB 0 B
packages/core/admin/build/content-type-builder.********.chunk.js 30.9 kB 0 B
packages/core/admin/build/cs-json.********.chunk.js 5.88 kB 0 B
packages/core/admin/build/de-json.********.chunk.js 12.8 kB 0 B
packages/core/admin/build/dk-json.********.chunk.js 10.5 kB 0 B
packages/core/admin/build/email-settings-page.********.chunk.js 3.32 kB 0 B
packages/core/admin/build/email-translation-ar-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-cs-json.********.chunk.js 121 B 0 B
packages/core/admin/build/email-translation-de-json.********.chunk.js 120 B 0 B
packages/core/admin/build/email-translation-dk-json.********.chunk.js 616 B 0 B
packages/core/admin/build/email-translation-en-json.********.chunk.js 610 B 0 B
packages/core/admin/build/email-translation-es-json.********.chunk.js 675 B 0 B
packages/core/admin/build/email-translation-fr-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-id-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-it-json.********.chunk.js 118 B 0 B
packages/core/admin/build/email-translation-ja-json.********.chunk.js 787 B 0 B
packages/core/admin/build/email-translation-ko-json.********.chunk.js 758 B 0 B
packages/core/admin/build/email-translation-ms-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-nl-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-pl-json.********.chunk.js 660 B 0 B
packages/core/admin/build/email-translation-pt-BR-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-pt-json.********.chunk.js 668 B 0 B
packages/core/admin/build/email-translation-ru-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-sk-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-th-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-tr-json.********.chunk.js 687 B 0 B
packages/core/admin/build/email-translation-uk-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-vi-json.********.chunk.js 122 B 0 B
packages/core/admin/build/email-translation-zh-Hans-json.********.chunk.js 473 B 0 B
packages/core/admin/build/email-translation-zh-json.********.chunk.js 730 B 0 B
packages/core/admin/build/en-json.********.chunk.js 15.6 kB 0 B
packages/core/admin/build/es-json.********.chunk.js 14.2 kB 0 B
packages/core/admin/build/eu-json.********.chunk.js 14.2 kB 0 B
packages/core/admin/build/fr-json.********.chunk.js 12.6 kB 0 B
packages/core/admin/build/gu-json.********.chunk.js 14.2 kB 0 B
packages/core/admin/build/he-json.********.chunk.js 6.48 kB 0 B
packages/core/admin/build/hi-json.********.chunk.js 16.4 kB 0 B
packages/core/admin/build/highlight.js.********.chunk.js 842 B 0 B
packages/core/admin/build/hu-json.********.chunk.js 15.4 kB 0 B
packages/core/admin/build/i18n-settings-page.********.chunk.js 4.94 kB 0 B
packages/core/admin/build/i18n-translation-de-json.********.chunk.js 1.62 kB 0 B
packages/core/admin/build/i18n-translation-dk-json.********.chunk.js 1.62 kB 0 B
packages/core/admin/build/i18n-translation-en-json.********.chunk.js 1.57 kB 0 B
packages/core/admin/build/i18n-translation-es-json.********.chunk.js 1.68 kB 0 B
packages/core/admin/build/i18n-translation-fr-json.********.chunk.js 1.73 kB 0 B
packages/core/admin/build/i18n-translation-ko-json.********.chunk.js 1.86 kB 0 B
packages/core/admin/build/i18n-translation-pl-json.********.chunk.js 1.8 kB 0 B
packages/core/admin/build/i18n-translation-ru-json.********.chunk.js 2.39 kB 0 B
packages/core/admin/build/i18n-translation-tr-json.********.chunk.js 1.7 kB 0 B
packages/core/admin/build/i18n-translation-zh-Hans-json.********.chunk.js 1.64 kB 0 B
packages/core/admin/build/i18n-translation-zh-json.********.chunk.js 1.73 kB 0 B
packages/core/admin/build/id-json.********.chunk.js 7.46 kB 0 B
packages/core/admin/build/index.html 262 B -2 B (-1%)
packages/core/admin/build/it-json.********.chunk.js 7.93 kB 0 B
packages/core/admin/build/ja-json.********.chunk.js 12.3 kB 0 B
packages/core/admin/build/ko-json.********.chunk.js 11.6 kB 0 B
packages/core/admin/build/ml-json.********.chunk.js 17.3 kB 0 B
packages/core/admin/build/ms-json.********.chunk.js 6.16 kB 0 B
packages/core/admin/build/nl-json.********.chunk.js 14.4 kB 0 B
packages/core/admin/build/no-json.********.chunk.js 5.48 kB 0 B
packages/core/admin/build/pl-json.********.chunk.js 13.2 kB 0 B
packages/core/admin/build/pt-BR-json.********.chunk.js 13.9 kB 0 B
packages/core/admin/build/pt-json.********.chunk.js 5.71 kB 0 B
packages/core/admin/build/review-workflows-settings-create-view.********.chunk.js 2.08 kB 0 B
packages/core/admin/build/review-workflows-settings-edit-view.********.chunk.js 2.27 kB 0 B
packages/core/admin/build/review-workflows-settings-list-view.********.chunk.js 4.8 kB 0 B
packages/core/admin/build/ru-json.********.chunk.js 21.6 kB 0 B
packages/core/admin/build/runtime~main.********.js 4.96 kB -3 B (0%)
packages/core/admin/build/sa-json.********.chunk.js 16.9 kB 0 B
packages/core/admin/build/sk-json.********.chunk.js 11.8 kB 0 B
packages/core/admin/build/sso-settings-page.********.chunk.js 1.92 kB 0 B
packages/core/admin/build/sv-json.********.chunk.js 14.1 kB 0 B
packages/core/admin/build/th-json.********.chunk.js 9.01 kB 0 B
packages/core/admin/build/tr-json.********.chunk.js 13.8 kB 0 B
packages/core/admin/build/transfer-tokens-create-page.********.chunk.js 259 B 0 B
packages/core/admin/build/transfer-tokens-edit-page.********.chunk.js 260 B 0 B
packages/core/admin/build/transfer-tokens-list-page.********.chunk.js 2.98 kB 0 B
packages/core/admin/build/uk-json.********.chunk.js 7.71 kB 0 B
packages/core/admin/build/Upload_ConfigureTheView.********.chunk.js 1.74 kB 0 B
packages/core/admin/build/upload-settings.********.chunk.js 3.08 kB 0 B
packages/core/admin/build/upload-translation-ca-json.********.chunk.js 2.48 kB 0 B
packages/core/admin/build/upload-translation-de-json.********.chunk.js 2.19 kB 0 B
packages/core/admin/build/upload-translation-dk-json.********.chunk.js 1.96 kB 0 B
packages/core/admin/build/upload-translation-en-json.********.chunk.js 2.58 kB 0 B
packages/core/admin/build/upload-translation-es-json.********.chunk.js 2.45 kB 0 B
packages/core/admin/build/upload-translation-fr-json.********.chunk.js 2.86 kB 0 B
packages/core/admin/build/upload-translation-he-json.********.chunk.js 1.84 kB 0 B
packages/core/admin/build/upload-translation-it-json.********.chunk.js 1.56 kB 0 B
packages/core/admin/build/upload-translation-ja-json.********.chunk.js 1.92 kB 0 B
packages/core/admin/build/upload-translation-ko-json.********.chunk.js 2.5 kB 0 B
packages/core/admin/build/upload-translation-ms-json.********.chunk.js 1.41 kB 0 B
packages/core/admin/build/upload-translation-pl-json.********.chunk.js 2.19 kB 0 B
packages/core/admin/build/upload-translation-pt-BR-json.********.chunk.js 1.61 kB 0 B
packages/core/admin/build/upload-translation-pt-json.********.chunk.js 1.61 kB 0 B
packages/core/admin/build/upload-translation-ru-json.********.chunk.js 2.02 kB 0 B
packages/core/admin/build/upload-translation-sk-json.********.chunk.js 2.58 kB 0 B
packages/core/admin/build/upload-translation-th-json.********.chunk.js 1.99 kB 0 B
packages/core/admin/build/upload-translation-tr-json.********.chunk.js 2.35 kB 0 B
packages/core/admin/build/upload-translation-uk-json.********.chunk.js 1.96 kB 0 B
packages/core/admin/build/upload-translation-zh-Hans-json.********.chunk.js 3.12 kB 0 B
packages/core/admin/build/upload-translation-zh-json.********.chunk.js 2.65 kB 0 B
packages/core/admin/build/upload.********.chunk.js 8.04 kB 0 B
packages/core/admin/build/users-advanced-settings-page.********.chunk.js 3.37 kB 0 B
packages/core/admin/build/users-email-settings-page.********.chunk.js 3.45 kB 0 B
packages/core/admin/build/users-permissions-translation-ar-json.********.chunk.js 1.51 kB 0 B
packages/core/admin/build/users-permissions-translation-cs-json.********.chunk.js 1.46 kB 0 B
packages/core/admin/build/users-permissions-translation-de-json.********.chunk.js 1.58 kB 0 B
packages/core/admin/build/users-permissions-translation-dk-json.********.chunk.js 1.92 kB 0 B
packages/core/admin/build/users-permissions-translation-en-json.********.chunk.js 1.81 kB 0 B
packages/core/admin/build/users-permissions-translation-es-json.********.chunk.js 2.05 kB 0 B
packages/core/admin/build/users-permissions-translation-fr-json.********.chunk.js 1.41 kB 0 B
packages/core/admin/build/users-permissions-translation-id-json.********.chunk.js 1.49 kB 0 B
packages/core/admin/build/users-permissions-translation-it-json.********.chunk.js 1.57 kB 0 B
packages/core/admin/build/users-permissions-translation-ja-json.********.chunk.js 1.53 kB 0 B
packages/core/admin/build/users-permissions-translation-ko-json.********.chunk.js 2.23 kB 0 B
packages/core/admin/build/users-permissions-translation-ms-json.********.chunk.js 1.27 kB 0 B
packages/core/admin/build/users-permissions-translation-nl-json.********.chunk.js 1.32 kB 0 B
packages/core/admin/build/users-permissions-translation-pl-json.********.chunk.js 2.11 kB 0 B
packages/core/admin/build/users-permissions-translation-pt-BR-json.********.chunk.js 1.21 kB 0 B
packages/core/admin/build/users-permissions-translation-pt-json.********.chunk.js 1.3 kB 0 B
packages/core/admin/build/users-permissions-translation-ru-json.********.chunk.js 2.75 kB 0 B
packages/core/admin/build/users-permissions-translation-sk-json.********.chunk.js 1.38 kB 0 B
packages/core/admin/build/users-permissions-translation-sv-json.********.chunk.js 2.01 kB 0 B
packages/core/admin/build/users-permissions-translation-th-json.********.chunk.js 2.01 kB 0 B
packages/core/admin/build/users-permissions-translation-tr-json.********.chunk.js 2.07 kB 0 B
packages/core/admin/build/users-permissions-translation-uk-json.********.chunk.js 1.75 kB 0 B
packages/core/admin/build/users-permissions-translation-vi-json.********.chunk.js 1.51 kB 0 B
packages/core/admin/build/users-permissions-translation-zh-Hans-json.********.chunk.js 2.19 kB 0 B
packages/core/admin/build/users-permissions-translation-zh-json.********.chunk.js 2.1 kB 0 B
packages/core/admin/build/users-providers-settings-page.********.chunk.js 4.54 kB 0 B
packages/core/admin/build/users-roles-settings-page.********.chunk.js 6.79 kB 0 B
packages/core/admin/build/vi-json.********.chunk.js 5.98 kB 0 B
packages/core/admin/build/webhook-edit-page.********.chunk.js 5.59 kB 0 B
packages/core/admin/build/webhook-list-page.********.chunk.js 3.14 kB 0 B
packages/core/admin/build/zh-Hans-json.********.chunk.js 17.1 kB 0 B
packages/core/admin/build/zh-json.********.chunk.js 15.2 kB 0 B

compressed-size-action

@joshuaellis joshuaellis force-pushed the feature/focus-fields-with-field-query branch from 6967872 to 4ad315c Compare August 9, 2023 08:09
@joshuaellis joshuaellis removed the flag: don't merge This PR should not be merged at the moment label Aug 9, 2023
@joshuaellis joshuaellis marked this pull request as ready for review August 9, 2023 09:12
@joshuaellis joshuaellis added the flag: documentation This PR requires a documentation update label Aug 9, 2023
Copy link
Contributor

@gu-stav gu-stav left a comment

Choose a reason for hiding this comment

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

Very nice hook and refactoring! 🚀 Could you maybe document a few field params that might work to be able to do QA?

@joshuaellis
Copy link
Member Author

I've updated the description for the PR if you want to do some manual QA.

@gu-stav
Copy link
Contributor

gu-stav commented Aug 9, 2023

I've done some manual QA:

  • couldn't find a way to set the focus into a component-field that is part of a dynamic zone
  • media fields don't receive a focus (but I am not sure inline editing works with media fields yet?)

All other fields work really well 🚀

@joshuaellis
Copy link
Member Author

media fields don't receive a focus (but I am not sure inline editing works with media fields yet?)

the field receives focus, the issue is the field imo. You either have it filled or not filled, in the case of not filled the button to add elements is nested deeply inside the field but if it's filled the first action is the one that gets focus (when you tab through the page) this inconsistency is difficult to deal with to be honest.

IMHO it's a design issue that needs a rethink, e.g. could the whole field always be "seen" as a button so you can focus the whole thing and pressing enter lets you change the image etc.

So for now, we focus the field and the first time you press tab will pass you to the correct piece – but also, I don't think it's part of visual editing yet because it's not a serialisable primitive (i'd have to check this with Alex)

couldn't find a way to set the focus into a component-field that is part of a dynamic zone

Really? I've just tried it and it works, this is my path dynamiczone.0.repeat_relation.0.categories where I added a repeatable component to an already existing dynamic zone component – is this what you mean?

@joshuaellis joshuaellis force-pushed the feature/focus-fields-with-field-query branch 2 times, most recently from 0b87583 to f78dedd Compare August 10, 2023 08:12
jhoward1994
jhoward1994 previously approved these changes Aug 10, 2023
Copy link
Contributor

@jhoward1994 jhoward1994 left a comment

Choose a reason for hiding this comment

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

Very cool, this works well for me!

@joshuaellis joshuaellis added this to the 4.13.0 milestone Aug 10, 2023
@joshuaellis joshuaellis added the flag: don't merge This PR should not be merged at the moment label Aug 10, 2023
@joshuaellis joshuaellis force-pushed the feature/focus-fields-with-field-query branch from f78dedd to b6e4158 Compare August 16, 2023 13:42
feat: add fieldRef to fields in GenericInput

refactor: custom inputs to be focussed

docs: add documentation for useFieldInputFocus hook

feat: work with CM specific components

feat: auto-open repeatable components

feat: make wyiwyg editor focusable

chore: fix other test suites

test: add generic input tests for auto-focussing

chore: add comment for not supported

Update packages/core/admin/admin/src/content-manager/components/RepeatableComponent/index.js

Co-Authored-By: Gustav Hansen <gustav.hansen@strapi.io>
@joshuaellis joshuaellis force-pushed the feature/focus-fields-with-field-query branch from b6e4158 to 113b53b Compare August 16, 2023 13:43
@joshuaellis
Copy link
Member Author

sorry @jhoward1994 i had to rebase 🙏🏼

@joshuaellis joshuaellis merged commit dc02df8 into main Aug 22, 2023
30 of 31 checks passed
@gu-stav gu-stav deleted the feature/focus-fields-with-field-query branch August 22, 2023 11:21
@alexandrebodin alexandrebodin modified the milestones: 4.13.0, 4.13.1 Aug 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pr: feature This PR adds a new feature source: core:content-manager Source is core/content-manager package
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants