@wordpress/editor 13.15.0 → 13.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/build/components/autocompleters/index.js +0 -2
- package/build/components/autocompleters/index.js.map +1 -1
- package/build/components/autocompleters/user.js +2 -9
- package/build/components/autocompleters/user.js.map +1 -1
- package/build/components/autosave-monitor/index.js +0 -24
- package/build/components/autosave-monitor/index.js.map +1 -1
- package/build/components/character-count/index.js +1 -4
- package/build/components/character-count/index.js.map +1 -1
- package/build/components/deprecated.js +1 -11
- package/build/components/deprecated.js.map +1 -1
- package/build/components/deprecated.native.js +0 -1
- package/build/components/deprecated.native.js.map +1 -1
- package/build/components/document-outline/check.js +1 -7
- package/build/components/document-outline/check.js.map +1 -1
- package/build/components/document-outline/index.js +7 -24
- package/build/components/document-outline/index.js.map +1 -1
- package/build/components/document-outline/item.js +1 -5
- package/build/components/document-outline/item.js.map +1 -1
- package/build/components/editor-help/add-blocks.native.js +1 -8
- package/build/components/editor-help/add-blocks.native.js.map +1 -1
- package/build/components/editor-help/customize-blocks.native.js +1 -8
- package/build/components/editor-help/customize-blocks.native.js.map +1 -1
- package/build/components/editor-help/help-detail-navigation-screen.native.js +5 -13
- package/build/components/editor-help/help-detail-navigation-screen.native.js.map +1 -1
- package/build/components/editor-help/help-get-support-button.native.js +1 -7
- package/build/components/editor-help/help-get-support-button.native.js.map +1 -1
- package/build/components/editor-help/help-section-title.native.js +1 -7
- package/build/components/editor-help/help-section-title.native.js.map +1 -1
- package/build/components/editor-help/help-topic-row.native.js +1 -8
- package/build/components/editor-help/help-topic-row.native.js.map +1 -1
- package/build/components/editor-help/icon-move-blocks.native.js +0 -4
- package/build/components/editor-help/icon-move-blocks.native.js.map +1 -1
- package/build/components/editor-help/index.native.js +8 -29
- package/build/components/editor-help/index.native.js.map +1 -1
- package/build/components/editor-help/intro-to-blocks.native.js +1 -9
- package/build/components/editor-help/intro-to-blocks.native.js.map +1 -1
- package/build/components/editor-help/move-blocks.native.js +1 -8
- package/build/components/editor-help/move-blocks.native.js.map +1 -1
- package/build/components/editor-help/remove-blocks.native.js +1 -8
- package/build/components/editor-help/remove-blocks.native.js.map +1 -1
- package/build/components/editor-help/view-sections.native.js +1 -12
- package/build/components/editor-help/view-sections.native.js.map +1 -1
- package/build/components/editor-history/redo.js +6 -14
- package/build/components/editor-history/redo.js.map +1 -1
- package/build/components/editor-history/undo.js +6 -14
- package/build/components/editor-history/undo.js.map +1 -1
- package/build/components/editor-notices/index.js +1 -10
- package/build/components/editor-notices/index.js.map +1 -1
- package/build/components/editor-snackbars/index.js +1 -5
- package/build/components/editor-snackbars/index.js.map +1 -1
- package/build/components/entities-saved-states/entity-record-item.js +3 -10
- package/build/components/entities-saved-states/entity-record-item.js.map +1 -1
- package/build/components/entities-saved-states/entity-type-list.js +3 -15
- package/build/components/entities-saved-states/entity-type-list.js.map +1 -1
- package/build/components/entities-saved-states/hooks/use-is-dirty.js +5 -14
- package/build/components/entities-saved-states/hooks/use-is-dirty.js.map +1 -1
- package/build/components/entities-saved-states/index.js +8 -27
- package/build/components/entities-saved-states/index.js.map +1 -1
- package/build/components/error-boundary/index.js +1 -18
- package/build/components/error-boundary/index.js.map +1 -1
- package/build/components/global-keyboard-shortcuts/index.js +5 -9
- package/build/components/global-keyboard-shortcuts/index.js.map +1 -1
- package/build/components/global-keyboard-shortcuts/register-shortcuts.js +1 -8
- package/build/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
- package/build/components/index.js +4 -76
- package/build/components/index.js.map +1 -1
- package/build/components/index.native.js +0 -9
- package/build/components/index.native.js.map +1 -1
- package/build/components/local-autosave-monitor/index.js +6 -31
- package/build/components/local-autosave-monitor/index.js.map +1 -1
- package/build/components/media-categories/index.js +30 -45
- package/build/components/media-categories/index.js.map +1 -1
- package/build/components/page-attributes/check.js +3 -7
- package/build/components/page-attributes/check.js.map +1 -1
- package/build/components/page-attributes/order.js +17 -42
- package/build/components/page-attributes/order.js.map +1 -1
- package/build/components/page-attributes/parent.js +8 -34
- package/build/components/page-attributes/parent.js.map +1 -1
- package/build/components/post-author/check.js +1 -11
- package/build/components/post-author/check.js.map +1 -1
- package/build/components/post-author/combobox.js +7 -23
- package/build/components/post-author/combobox.js.map +1 -1
- package/build/components/post-author/constants.js +0 -1
- package/build/components/post-author/constants.js.map +1 -1
- package/build/components/post-author/index.js +1 -12
- package/build/components/post-author/index.js.map +1 -1
- package/build/components/post-author/select.js +1 -12
- package/build/components/post-author/select.js.map +1 -1
- package/build/components/post-comments/index.js +11 -23
- package/build/components/post-comments/index.js.map +1 -1
- package/build/components/post-excerpt/check.js +6 -8
- package/build/components/post-excerpt/check.js.map +1 -1
- package/build/components/post-excerpt/index.js +10 -27
- package/build/components/post-excerpt/index.js.map +1 -1
- package/build/components/post-featured-image/check.js +6 -9
- package/build/components/post-featured-image/check.js.map +1 -1
- package/build/components/post-featured-image/index.js +13 -42
- package/build/components/post-featured-image/index.js.map +1 -1
- package/build/components/post-format/check.js +9 -18
- package/build/components/post-format/check.js.map +1 -1
- package/build/components/post-format/index.js +2 -20
- package/build/components/post-format/index.js.map +1 -1
- package/build/components/post-last-revision/check.js +15 -22
- package/build/components/post-last-revision/check.js.map +1 -1
- package/build/components/post-last-revision/index.js +17 -28
- package/build/components/post-last-revision/index.js.map +1 -1
- package/build/components/post-locked-modal/index.js +8 -28
- package/build/components/post-locked-modal/index.js.map +1 -1
- package/build/components/post-pending-status/check.js +16 -24
- package/build/components/post-pending-status/check.js.map +1 -1
- package/build/components/post-pending-status/index.js +10 -28
- package/build/components/post-pending-status/index.js.map +1 -1
- package/build/components/post-pingbacks/index.js +11 -23
- package/build/components/post-pingbacks/index.js.map +1 -1
- package/build/components/post-preview-button/index.js +11 -22
- package/build/components/post-preview-button/index.js.map +1 -1
- package/build/components/post-publish-button/index.js +6 -32
- package/build/components/post-publish-button/index.js.map +1 -1
- package/build/components/post-publish-button/label.js +1 -10
- package/build/components/post-publish-button/label.js.map +1 -1
- package/build/components/post-publish-panel/index.js +1 -22
- package/build/components/post-publish-panel/index.js.map +1 -1
- package/build/components/post-publish-panel/maybe-category-panel.js +4 -14
- package/build/components/post-publish-panel/maybe-category-panel.js.map +1 -1
- package/build/components/post-publish-panel/maybe-post-format-panel.js +2 -18
- package/build/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
- package/build/components/post-publish-panel/maybe-tags-panel.js +2 -17
- package/build/components/post-publish-panel/maybe-tags-panel.js.map +1 -1
- package/build/components/post-publish-panel/maybe-upload-media.js +1 -18
- package/build/components/post-publish-panel/maybe-upload-media.js.map +1 -1
- package/build/components/post-publish-panel/postpublish.js +3 -27
- package/build/components/post-publish-panel/postpublish.js.map +1 -1
- package/build/components/post-publish-panel/prepublish.js +1 -26
- package/build/components/post-publish-panel/prepublish.js.map +1 -1
- package/build/components/post-saved-state/index.js +12 -29
- package/build/components/post-saved-state/index.js.map +1 -1
- package/build/components/post-schedule/check.js +1 -8
- package/build/components/post-schedule/check.js.map +1 -1
- package/build/components/post-schedule/index.js +7 -13
- package/build/components/post-schedule/index.js.map +1 -1
- package/build/components/post-schedule/label.js +18 -29
- package/build/components/post-schedule/label.js.map +1 -1
- package/build/components/post-slug/check.js +1 -4
- package/build/components/post-slug/check.js.map +1 -1
- package/build/components/post-slug/index.js +1 -19
- package/build/components/post-slug/index.js.map +1 -1
- package/build/components/post-sticky/check.js +1 -8
- package/build/components/post-sticky/check.js.map +1 -1
- package/build/components/post-sticky/index.js +1 -12
- package/build/components/post-sticky/index.js.map +1 -1
- package/build/components/post-switch-to-draft-button/index.js +1 -14
- package/build/components/post-switch-to-draft-button/index.js.map +1 -1
- package/build/components/post-sync-status/index.js +5 -18
- package/build/components/post-sync-status/index.js.map +1 -1
- package/build/components/post-taxonomies/check.js +1 -9
- package/build/components/post-taxonomies/check.js.map +1 -1
- package/build/components/post-taxonomies/flat-term-selector.js +15 -50
- package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
- package/build/components/post-taxonomies/hierarchical-term-selector.js +27 -79
- package/build/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
- package/build/components/post-taxonomies/index.js +3 -13
- package/build/components/post-taxonomies/index.js.map +1 -1
- package/build/components/post-taxonomies/most-used-terms.js +1 -9
- package/build/components/post-taxonomies/most-used-terms.js.map +1 -1
- package/build/components/post-template/index.js +1 -11
- package/build/components/post-template/index.js.map +1 -1
- package/build/components/post-text-editor/index.js +3 -17
- package/build/components/post-text-editor/index.js.map +1 -1
- package/build/components/post-title/index.js +14 -46
- package/build/components/post-title/index.js.map +1 -1
- package/build/components/post-title/index.native.js +7 -44
- package/build/components/post-title/index.native.js.map +1 -1
- package/build/components/post-trash/check.js +1 -7
- package/build/components/post-trash/check.js.map +1 -1
- package/build/components/post-trash/index.js +1 -8
- package/build/components/post-trash/index.js.map +1 -1
- package/build/components/post-type-support-check/index.js +10 -23
- package/build/components/post-type-support-check/index.js.map +1 -1
- package/build/components/post-url/check.js +1 -12
- package/build/components/post-url/check.js.map +1 -1
- package/build/components/post-url/index.js +3 -15
- package/build/components/post-url/index.js.map +1 -1
- package/build/components/post-url/label.js +1 -5
- package/build/components/post-url/label.js.map +1 -1
- package/build/components/post-visibility/check.js +1 -7
- package/build/components/post-visibility/check.js.map +1 -1
- package/build/components/post-visibility/index.js +1 -17
- package/build/components/post-visibility/index.js.map +1 -1
- package/build/components/post-visibility/label.js +1 -5
- package/build/components/post-visibility/label.js.map +1 -1
- package/build/components/post-visibility/utils.js +1 -2
- package/build/components/post-visibility/utils.js.map +1 -1
- package/build/components/provider/index.js +13 -27
- package/build/components/provider/index.js.map +1 -1
- package/build/components/provider/index.native.js +18 -70
- package/build/components/provider/index.native.js.map +1 -1
- package/build/components/provider/use-block-editor-settings.js +9 -20
- package/build/components/provider/use-block-editor-settings.js.map +1 -1
- package/build/components/provider/use-block-editor-settings.native.js +5 -11
- package/build/components/provider/use-block-editor-settings.native.js.map +1 -1
- package/build/components/provider/with-registry-provider.js +5 -12
- package/build/components/provider/with-registry-provider.js.map +1 -1
- package/build/components/table-of-contents/index.js +4 -14
- package/build/components/table-of-contents/index.js.map +1 -1
- package/build/components/table-of-contents/panel.js +1 -13
- package/build/components/table-of-contents/panel.js.map +1 -1
- package/build/components/template-validation-notice/index.js +3 -12
- package/build/components/template-validation-notice/index.js.map +1 -1
- package/build/components/theme-support-check/index.js +3 -12
- package/build/components/theme-support-check/index.js.map +1 -1
- package/build/components/time-to-read/index.js +2 -10
- package/build/components/time-to-read/index.js.map +1 -1
- package/build/components/unsaved-changes-warning/index.js +21 -35
- package/build/components/unsaved-changes-warning/index.js.map +1 -1
- package/build/components/word-count/index.js +2 -7
- package/build/components/word-count/index.js.map +1 -1
- package/build/hooks/custom-sources-backwards-compatibility.js +8 -42
- package/build/hooks/custom-sources-backwards-compatibility.js.map +1 -1
- package/build/hooks/default-autocompleters.js +3 -4
- package/build/hooks/default-autocompleters.js.map +1 -1
- package/build/hooks/index.js +0 -1
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/index.native.js.map +1 -1
- package/build/index.js +0 -9
- package/build/index.js.map +1 -1
- package/build/index.native.js +0 -11
- package/build/index.native.js.map +1 -1
- package/build/lock-unlock.js +1 -2
- package/build/lock-unlock.js.map +1 -1
- package/build/private-apis.js +1 -4
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +61 -130
- package/build/store/actions.js.map +1 -1
- package/build/store/actions.native.js +1 -8
- package/build/store/actions.native.js.map +1 -1
- package/build/store/constants.js +1 -2
- package/build/store/constants.js.map +1 -1
- package/build/store/defaults.js +2 -3
- package/build/store/defaults.js.map +1 -1
- package/build/store/index.js +3 -11
- package/build/store/index.js.map +1 -1
- package/build/store/local-autosave.js +0 -4
- package/build/store/local-autosave.js.map +1 -1
- package/build/store/reducer.js +19 -49
- package/build/store/reducer.js.map +1 -1
- package/build/store/reducer.native.js +3 -17
- package/build/store/reducer.native.js.map +1 -1
- package/build/store/selectors.js +170 -296
- package/build/store/selectors.js.map +1 -1
- package/build/store/selectors.native.js +4 -11
- package/build/store/selectors.native.js.map +1 -1
- package/build/store/utils/notice-builder.js +13 -24
- package/build/store/utils/notice-builder.js.map +1 -1
- package/build/utils/get-template-part-icon.js +0 -3
- package/build/utils/get-template-part-icon.js.map +1 -1
- package/build/utils/index.js +0 -4
- package/build/utils/index.js.map +1 -1
- package/build/utils/index.native.js +0 -2
- package/build/utils/index.native.js.map +1 -1
- package/build/utils/media-upload/index.js +2 -6
- package/build/utils/media-upload/index.js.map +1 -1
- package/build/utils/media-upload/index.native.js +0 -1
- package/build/utils/media-upload/index.native.js.map +1 -1
- package/build/utils/terms.js +8 -18
- package/build/utils/terms.js.map +1 -1
- package/build/utils/url.js +0 -4
- package/build/utils/url.js.map +1 -1
- package/build-module/components/autocompleters/index.js.map +1 -1
- package/build-module/components/autocompleters/user.js +2 -5
- package/build-module/components/autocompleters/user.js.map +1 -1
- package/build-module/components/autosave-monitor/index.js +2 -17
- package/build-module/components/autosave-monitor/index.js.map +1 -1
- package/build-module/components/character-count/index.js +1 -1
- package/build-module/components/character-count/index.js.map +1 -1
- package/build-module/components/deprecated.js +0 -4
- package/build-module/components/deprecated.js.map +1 -1
- package/build-module/components/deprecated.native.js +0 -1
- package/build-module/components/deprecated.native.js.map +1 -1
- package/build-module/components/document-outline/check.js +0 -4
- package/build-module/components/document-outline/check.js.map +1 -1
- package/build-module/components/document-outline/index.js +9 -13
- package/build-module/components/document-outline/index.js.map +1 -1
- package/build-module/components/document-outline/item.js +0 -3
- package/build-module/components/document-outline/item.js.map +1 -1
- package/build-module/components/editor-help/add-blocks.native.js +2 -5
- package/build-module/components/editor-help/add-blocks.native.js.map +1 -1
- package/build-module/components/editor-help/customize-blocks.native.js +2 -5
- package/build-module/components/editor-help/customize-blocks.native.js.map +1 -1
- package/build-module/components/editor-help/help-detail-navigation-screen.native.js +6 -8
- package/build-module/components/editor-help/help-detail-navigation-screen.native.js.map +1 -1
- package/build-module/components/editor-help/help-get-support-button.native.js +2 -5
- package/build-module/components/editor-help/help-get-support-button.native.js.map +1 -1
- package/build-module/components/editor-help/help-section-title.native.js +2 -5
- package/build-module/components/editor-help/help-section-title.native.js.map +1 -1
- package/build-module/components/editor-help/help-topic-row.native.js +1 -6
- package/build-module/components/editor-help/help-topic-row.native.js.map +1 -1
- package/build-module/components/editor-help/icon-move-blocks.native.js +0 -1
- package/build-module/components/editor-help/icon-move-blocks.native.js.map +1 -1
- package/build-module/components/editor-help/index.native.js +9 -9
- package/build-module/components/editor-help/index.native.js.map +1 -1
- package/build-module/components/editor-help/intro-to-blocks.native.js +2 -5
- package/build-module/components/editor-help/intro-to-blocks.native.js.map +1 -1
- package/build-module/components/editor-help/move-blocks.native.js +2 -5
- package/build-module/components/editor-help/move-blocks.native.js.map +1 -1
- package/build-module/components/editor-help/remove-blocks.native.js +2 -5
- package/build-module/components/editor-help/remove-blocks.native.js.map +1 -1
- package/build-module/components/editor-help/view-sections.native.js +2 -4
- package/build-module/components/editor-help/view-sections.native.js.map +1 -1
- package/build-module/components/editor-history/redo.js +6 -8
- package/build-module/components/editor-history/redo.js.map +1 -1
- package/build-module/components/editor-history/undo.js +6 -8
- package/build-module/components/editor-history/undo.js.map +1 -1
- package/build-module/components/editor-notices/index.js +1 -2
- package/build-module/components/editor-notices/index.js.map +1 -1
- package/build-module/components/editor-snackbars/index.js +0 -1
- package/build-module/components/editor-snackbars/index.js.map +1 -1
- package/build-module/components/entities-saved-states/entity-record-item.js +3 -4
- package/build-module/components/entities-saved-states/entity-record-item.js.map +1 -1
- package/build-module/components/entities-saved-states/entity-type-list.js +3 -10
- package/build-module/components/entities-saved-states/entity-type-list.js.map +1 -1
- package/build-module/components/entities-saved-states/hooks/use-is-dirty.js +4 -7
- package/build-module/components/entities-saved-states/hooks/use-is-dirty.js.map +1 -1
- package/build-module/components/entities-saved-states/index.js +8 -16
- package/build-module/components/entities-saved-states/index.js.map +1 -1
- package/build-module/components/error-boundary/index.js +1 -12
- package/build-module/components/error-boundary/index.js.map +1 -1
- package/build-module/components/global-keyboard-shortcuts/index.js +5 -6
- package/build-module/components/global-keyboard-shortcuts/index.js.map +1 -1
- package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js +0 -3
- package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
- package/build-module/components/index.js +6 -3
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/index.native.js +4 -2
- package/build-module/components/index.native.js.map +1 -1
- package/build-module/components/local-autosave-monitor/index.js +6 -21
- package/build-module/components/local-autosave-monitor/index.js.map +1 -1
- package/build-module/components/media-categories/index.js +31 -41
- package/build-module/components/media-categories/index.js.map +1 -1
- package/build-module/components/page-attributes/check.js +3 -3
- package/build-module/components/page-attributes/check.js.map +1 -1
- package/build-module/components/page-attributes/order.js +17 -31
- package/build-module/components/page-attributes/order.js.map +1 -1
- package/build-module/components/page-attributes/parent.js +9 -23
- package/build-module/components/page-attributes/parent.js.map +1 -1
- package/build-module/components/post-author/check.js +1 -5
- package/build-module/components/post-author/check.js.map +1 -1
- package/build-module/components/post-author/combobox.js +7 -16
- package/build-module/components/post-author/combobox.js.map +1 -1
- package/build-module/components/post-author/constants.js +0 -1
- package/build-module/components/post-author/constants.js.map +1 -1
- package/build-module/components/post-author/index.js +1 -6
- package/build-module/components/post-author/index.js.map +1 -1
- package/build-module/components/post-author/select.js +1 -6
- package/build-module/components/post-author/select.js.map +1 -1
- package/build-module/components/post-comments/index.js +12 -19
- package/build-module/components/post-comments/index.js.map +1 -1
- package/build-module/components/post-excerpt/check.js +5 -6
- package/build-module/components/post-excerpt/check.js.map +1 -1
- package/build-module/components/post-excerpt/index.js +11 -23
- package/build-module/components/post-excerpt/index.js.map +1 -1
- package/build-module/components/post-featured-image/check.js +5 -6
- package/build-module/components/post-featured-image/check.js.map +1 -1
- package/build-module/components/post-featured-image/index.js +13 -31
- package/build-module/components/post-featured-image/index.js.map +1 -1
- package/build-module/components/post-format/check.js +10 -15
- package/build-module/components/post-format/check.js.map +1 -1
- package/build-module/components/post-format/index.js +4 -12
- package/build-module/components/post-format/index.js.map +1 -1
- package/build-module/components/post-last-revision/check.js +17 -17
- package/build-module/components/post-last-revision/check.js.map +1 -1
- package/build-module/components/post-last-revision/index.js +18 -21
- package/build-module/components/post-last-revision/index.js.map +1 -1
- package/build-module/components/post-locked-modal/index.js +8 -22
- package/build-module/components/post-locked-modal/index.js.map +1 -1
- package/build-module/components/post-pending-status/check.js +17 -20
- package/build-module/components/post-pending-status/check.js.map +1 -1
- package/build-module/components/post-pending-status/index.js +11 -20
- package/build-module/components/post-pending-status/index.js.map +1 -1
- package/build-module/components/post-pingbacks/index.js +12 -19
- package/build-module/components/post-pingbacks/index.js.map +1 -1
- package/build-module/components/post-preview-button/index.js +11 -17
- package/build-module/components/post-preview-button/index.js.map +1 -1
- package/build-module/components/post-publish-button/index.js +7 -23
- package/build-module/components/post-publish-button/index.js.map +1 -1
- package/build-module/components/post-publish-button/label.js +1 -4
- package/build-module/components/post-publish-button/label.js.map +1 -1
- package/build-module/components/post-publish-panel/index.js +1 -8
- package/build-module/components/post-publish-panel/index.js.map +1 -1
- package/build-module/components/post-publish-panel/maybe-category-panel.js +4 -8
- package/build-module/components/post-publish-panel/maybe-category-panel.js.map +1 -1
- package/build-module/components/post-publish-panel/maybe-post-format-panel.js +2 -12
- package/build-module/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
- package/build-module/components/post-publish-panel/maybe-tags-panel.js +2 -9
- package/build-module/components/post-publish-panel/maybe-tags-panel.js.map +1 -1
- package/build-module/components/post-publish-panel/maybe-upload-media.js +1 -12
- package/build-module/components/post-publish-panel/maybe-upload-media.js.map +1 -1
- package/build-module/components/post-publish-panel/postpublish.js +3 -16
- package/build-module/components/post-publish-panel/postpublish.js.map +1 -1
- package/build-module/components/post-publish-panel/prepublish.js +1 -10
- package/build-module/components/post-publish-panel/prepublish.js.map +1 -1
- package/build-module/components/post-saved-state/index.js +15 -23
- package/build-module/components/post-saved-state/index.js.map +1 -1
- package/build-module/components/post-schedule/check.js +1 -3
- package/build-module/components/post-schedule/check.js.map +1 -1
- package/build-module/components/post-schedule/index.js +8 -8
- package/build-module/components/post-schedule/index.js.map +1 -1
- package/build-module/components/post-schedule/label.js +18 -22
- package/build-module/components/post-schedule/label.js.map +1 -1
- package/build-module/components/post-slug/check.js +0 -1
- package/build-module/components/post-slug/check.js.map +1 -1
- package/build-module/components/post-slug/index.js +1 -8
- package/build-module/components/post-slug/index.js.map +1 -1
- package/build-module/components/post-sticky/check.js +1 -3
- package/build-module/components/post-sticky/check.js.map +1 -1
- package/build-module/components/post-sticky/index.js +1 -3
- package/build-module/components/post-sticky/index.js.map +1 -1
- package/build-module/components/post-switch-to-draft-button/index.js +1 -9
- package/build-module/components/post-switch-to-draft-button/index.js.map +1 -1
- package/build-module/components/post-sync-status/index.js +5 -11
- package/build-module/components/post-sync-status/index.js.map +1 -1
- package/build-module/components/post-taxonomies/check.js +1 -3
- package/build-module/components/post-taxonomies/check.js.map +1 -1
- package/build-module/components/post-taxonomies/flat-term-selector.js +17 -39
- package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
- package/build-module/components/post-taxonomies/hierarchical-term-selector.js +29 -66
- package/build-module/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
- package/build-module/components/post-taxonomies/index.js +3 -5
- package/build-module/components/post-taxonomies/index.js.map +1 -1
- package/build-module/components/post-taxonomies/most-used-terms.js +1 -4
- package/build-module/components/post-taxonomies/most-used-terms.js.map +1 -1
- package/build-module/components/post-template/index.js +1 -5
- package/build-module/components/post-template/index.js.map +1 -1
- package/build-module/components/post-text-editor/index.js +4 -9
- package/build-module/components/post-text-editor/index.js.map +1 -1
- package/build-module/components/post-title/index.js +17 -35
- package/build-module/components/post-title/index.js.map +1 -1
- package/build-module/components/post-title/index.native.js +8 -33
- package/build-module/components/post-title/index.native.js.map +1 -1
- package/build-module/components/post-trash/check.js +1 -4
- package/build-module/components/post-trash/check.js.map +1 -1
- package/build-module/components/post-trash/index.js +1 -4
- package/build-module/components/post-trash/index.js.map +1 -1
- package/build-module/components/post-type-support-check/index.js +14 -20
- package/build-module/components/post-type-support-check/index.js.map +1 -1
- package/build-module/components/post-url/check.js +1 -9
- package/build-module/components/post-url/check.js.map +1 -1
- package/build-module/components/post-url/index.js +3 -8
- package/build-module/components/post-url/index.js.map +1 -1
- package/build-module/components/post-url/label.js +1 -1
- package/build-module/components/post-url/label.js.map +1 -1
- package/build-module/components/post-visibility/check.js +1 -2
- package/build-module/components/post-visibility/check.js.map +1 -1
- package/build-module/components/post-visibility/index.js +1 -10
- package/build-module/components/post-visibility/index.js.map +1 -1
- package/build-module/components/post-visibility/label.js +1 -1
- package/build-module/components/post-visibility/label.js.map +1 -1
- package/build-module/components/post-visibility/utils.js.map +1 -1
- package/build-module/components/provider/index.js +13 -14
- package/build-module/components/provider/index.js.map +1 -1
- package/build-module/components/provider/index.native.js +21 -52
- package/build-module/components/provider/index.native.js.map +1 -1
- package/build-module/components/provider/use-block-editor-settings.js +9 -12
- package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
- package/build-module/components/provider/use-block-editor-settings.native.js +5 -5
- package/build-module/components/provider/use-block-editor-settings.native.js.map +1 -1
- package/build-module/components/provider/with-registry-provider.js +5 -8
- package/build-module/components/provider/with-registry-provider.js.map +1 -1
- package/build-module/components/table-of-contents/index.js +4 -7
- package/build-module/components/table-of-contents/index.js.map +1 -1
- package/build-module/components/table-of-contents/panel.js +1 -5
- package/build-module/components/table-of-contents/panel.js.map +1 -1
- package/build-module/components/template-validation-notice/index.js +2 -6
- package/build-module/components/template-validation-notice/index.js.map +1 -1
- package/build-module/components/theme-support-check/index.js +3 -7
- package/build-module/components/theme-support-check/index.js.map +1 -1
- package/build-module/components/time-to-read/index.js +4 -7
- package/build-module/components/time-to-read/index.js.map +1 -1
- package/build-module/components/unsaved-changes-warning/index.js +22 -31
- package/build-module/components/unsaved-changes-warning/index.js.map +1 -1
- package/build-module/components/word-count/index.js +2 -4
- package/build-module/components/word-count/index.js.map +1 -1
- package/build-module/hooks/custom-sources-backwards-compatibility.js +11 -39
- package/build-module/hooks/custom-sources-backwards-compatibility.js.map +1 -1
- package/build-module/hooks/default-autocompleters.js +3 -4
- package/build-module/hooks/default-autocompleters.js.map +1 -1
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/index.native.js.map +1 -1
- package/build-module/index.js +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/index.native.js +1 -1
- package/build-module/index.native.js.map +1 -1
- package/build-module/lock-unlock.js.map +1 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +63 -85
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/actions.native.js +2 -2
- package/build-module/store/actions.native.js.map +1 -1
- package/build-module/store/constants.js +1 -1
- package/build-module/store/constants.js.map +1 -1
- package/build-module/store/defaults.js +3 -2
- package/build-module/store/defaults.js.map +1 -1
- package/build-module/store/index.js +5 -4
- package/build-module/store/index.js.map +1 -1
- package/build-module/store/local-autosave.js +0 -1
- package/build-module/store/local-autosave.js.map +1 -1
- package/build-module/store/reducer.js +21 -33
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/reducer.native.js +4 -10
- package/build-module/store/reducer.native.js.map +1 -1
- package/build-module/store/selectors.js +173 -223
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/store/selectors.native.js +6 -8
- package/build-module/store/selectors.native.js.map +1 -1
- package/build-module/store/utils/notice-builder.js +15 -21
- package/build-module/store/utils/notice-builder.js.map +1 -1
- package/build-module/utils/get-template-part-icon.js +0 -2
- package/build-module/utils/get-template-part-icon.js.map +1 -1
- package/build-module/utils/index.js.map +1 -1
- package/build-module/utils/index.native.js.map +1 -1
- package/build-module/utils/media-upload/index.js +2 -4
- package/build-module/utils/media-upload/index.js.map +1 -1
- package/build-module/utils/media-upload/index.native.js.map +1 -1
- package/build-module/utils/terms.js +9 -11
- package/build-module/utils/terms.js.map +1 -1
- package/build-module/utils/url.js +1 -1
- package/build-module/utils/url.js.map +1 -1
- package/build-style/style-rtl.css +10 -17
- package/build-style/style.css +10 -17
- package/package.json +32 -31
- package/src/components/editor-help/index.native.js +1 -1
- package/src/components/editor-help/style.scss +5 -0
- package/src/components/page-attributes/order.js +15 -23
- package/src/components/page-attributes/test/order.js +46 -15
- package/src/components/post-author/test/check.js +18 -12
- package/src/components/post-comments/index.js +11 -17
- package/src/components/post-excerpt/check.js +6 -2
- package/src/components/post-excerpt/index.js +10 -16
- package/src/components/post-featured-image/check.js +4 -2
- package/src/components/post-format/check.js +16 -11
- package/src/components/post-last-revision/check.js +12 -14
- package/src/components/post-last-revision/index.js +12 -10
- package/src/components/post-last-revision/test/check.js +28 -16
- package/src/components/post-pending-status/check.js +13 -19
- package/src/components/post-pending-status/index.js +9 -14
- package/src/components/post-pending-status/test/check.js +32 -10
- package/src/components/post-pingbacks/index.js +11 -15
- package/src/components/post-publish-panel/style.scss +12 -25
- package/src/components/post-sync-status/style.scss +4 -1
- package/src/components/post-type-support-check/index.js +8 -10
- package/src/components/post-type-support-check/test/index.js +36 -20
- package/src/components/provider/index.js +3 -2
- package/src/components/unsaved-changes-warning/index.js +22 -27
- package/src/hooks/custom-sources-backwards-compatibility.js +1 -25
- package/src/store/actions.js +1 -1
- package/src/store/selectors.js +2 -2
- package/src/store/test/selectors.js +13 -13
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* WordPress dependencies
|
|
5
4
|
*/
|
|
@@ -10,43 +9,39 @@ import { useSelect, useDispatch } from '@wordpress/data';
|
|
|
10
9
|
import { store as coreStore } from '@wordpress/core-data';
|
|
11
10
|
import { useDebounce } from '@wordpress/compose';
|
|
12
11
|
import { speak } from '@wordpress/a11y';
|
|
12
|
+
|
|
13
13
|
/**
|
|
14
14
|
* Internal dependencies
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
16
|
import { store as editorStore } from '../../store';
|
|
18
17
|
import { unescapeString, unescapeTerm } from '../../utils/terms';
|
|
19
18
|
import MostUsedTerms from './most-used-terms';
|
|
19
|
+
|
|
20
20
|
/**
|
|
21
21
|
* Shared reference to an empty array for cases where it is important to avoid
|
|
22
22
|
* returning a new array reference on every invocation.
|
|
23
23
|
*
|
|
24
24
|
* @type {Array<any>}
|
|
25
25
|
*/
|
|
26
|
-
|
|
27
26
|
const EMPTY_ARRAY = [];
|
|
27
|
+
|
|
28
28
|
/**
|
|
29
29
|
* Module constants
|
|
30
30
|
*/
|
|
31
|
-
|
|
32
31
|
const MAX_TERMS_SUGGESTIONS = 20;
|
|
33
32
|
const DEFAULT_QUERY = {
|
|
34
33
|
per_page: MAX_TERMS_SUGGESTIONS,
|
|
35
34
|
_fields: 'id,name',
|
|
36
35
|
context: 'view'
|
|
37
36
|
};
|
|
38
|
-
|
|
39
37
|
const isSameTermName = (termA, termB) => unescapeString(termA).toLowerCase() === unescapeString(termB).toLowerCase();
|
|
40
|
-
|
|
41
38
|
const termNamesToIds = (names, terms) => {
|
|
42
39
|
return names.map(termName => terms.find(term => isSameTermName(term.name, termName)).id);
|
|
43
40
|
};
|
|
44
|
-
|
|
45
41
|
export function FlatTermSelector({
|
|
46
42
|
slug
|
|
47
43
|
}) {
|
|
48
44
|
var _taxonomy$labels$add_, _taxonomy$labels$sing2;
|
|
49
|
-
|
|
50
45
|
const [values, setValues] = useState([]);
|
|
51
46
|
const [search, setSearch] = useState('');
|
|
52
47
|
const debouncedSearch = useDebounce(setSearch, 500);
|
|
@@ -59,7 +54,6 @@ export function FlatTermSelector({
|
|
|
59
54
|
hasResolvedTerms
|
|
60
55
|
} = useSelect(select => {
|
|
61
56
|
var _post$_links, _post$_links2;
|
|
62
|
-
|
|
63
57
|
const {
|
|
64
58
|
getCurrentPost,
|
|
65
59
|
getEditedPostAttribute
|
|
@@ -70,12 +64,10 @@ export function FlatTermSelector({
|
|
|
70
64
|
hasFinishedResolution
|
|
71
65
|
} = select(coreStore);
|
|
72
66
|
const post = getCurrentPost();
|
|
73
|
-
|
|
74
67
|
const _taxonomy = getTaxonomy(slug);
|
|
75
|
-
|
|
76
68
|
const _termIds = _taxonomy ? getEditedPostAttribute(_taxonomy.rest_base) : EMPTY_ARRAY;
|
|
77
|
-
|
|
78
|
-
|
|
69
|
+
const query = {
|
|
70
|
+
...DEFAULT_QUERY,
|
|
79
71
|
include: _termIds.join(','),
|
|
80
72
|
per_page: -1
|
|
81
73
|
};
|
|
@@ -95,14 +87,16 @@ export function FlatTermSelector({
|
|
|
95
87
|
getEntityRecords
|
|
96
88
|
} = select(coreStore);
|
|
97
89
|
return {
|
|
98
|
-
searchResults: !!search ? getEntityRecords('taxonomy', slug, {
|
|
90
|
+
searchResults: !!search ? getEntityRecords('taxonomy', slug, {
|
|
91
|
+
...DEFAULT_QUERY,
|
|
99
92
|
search
|
|
100
93
|
}) : EMPTY_ARRAY
|
|
101
94
|
};
|
|
102
|
-
}, [search, slug]);
|
|
95
|
+
}, [search, slug]);
|
|
96
|
+
|
|
97
|
+
// Update terms state only after the selectors are resolved.
|
|
103
98
|
// We're using this to avoid terms temporarily disappearing on slow networks
|
|
104
99
|
// while core data makes REST API requests.
|
|
105
|
-
|
|
106
100
|
useEffect(() => {
|
|
107
101
|
if (hasResolvedTerms) {
|
|
108
102
|
const newValues = (terms !== null && terms !== void 0 ? terms : []).map(term => unescapeString(term.name));
|
|
@@ -118,11 +112,9 @@ export function FlatTermSelector({
|
|
|
118
112
|
const {
|
|
119
113
|
saveEntityRecord
|
|
120
114
|
} = useDispatch(coreStore);
|
|
121
|
-
|
|
122
115
|
if (!hasAssignAction) {
|
|
123
116
|
return null;
|
|
124
117
|
}
|
|
125
|
-
|
|
126
118
|
async function findOrCreateTerm(term) {
|
|
127
119
|
try {
|
|
128
120
|
const newTerm = await saveEntityRecord('taxonomy', slug, term, {
|
|
@@ -133,42 +125,36 @@ export function FlatTermSelector({
|
|
|
133
125
|
if (error.code !== 'term_exists') {
|
|
134
126
|
throw error;
|
|
135
127
|
}
|
|
136
|
-
|
|
137
128
|
return {
|
|
138
129
|
id: error.data.term_id,
|
|
139
130
|
name: term.name
|
|
140
131
|
};
|
|
141
132
|
}
|
|
142
133
|
}
|
|
143
|
-
|
|
144
134
|
function onUpdateTerms(newTermIds) {
|
|
145
135
|
editPost({
|
|
146
136
|
[taxonomy.rest_base]: newTermIds
|
|
147
137
|
});
|
|
148
138
|
}
|
|
149
|
-
|
|
150
139
|
function onChange(termNames) {
|
|
151
140
|
const availableTerms = [...(terms !== null && terms !== void 0 ? terms : []), ...(searchResults !== null && searchResults !== void 0 ? searchResults : [])];
|
|
152
141
|
const uniqueTerms = termNames.reduce((acc, name) => {
|
|
153
142
|
if (!acc.some(n => n.toLowerCase() === name.toLowerCase())) {
|
|
154
143
|
acc.push(name);
|
|
155
144
|
}
|
|
156
|
-
|
|
157
145
|
return acc;
|
|
158
146
|
}, []);
|
|
159
|
-
const newTermNames = uniqueTerms.filter(termName => !availableTerms.find(term => isSameTermName(term.name, termName)));
|
|
160
|
-
// The selector will always re-fetch terms later.
|
|
147
|
+
const newTermNames = uniqueTerms.filter(termName => !availableTerms.find(term => isSameTermName(term.name, termName)));
|
|
161
148
|
|
|
149
|
+
// Optimistically update term values.
|
|
150
|
+
// The selector will always re-fetch terms later.
|
|
162
151
|
setValues(uniqueTerms);
|
|
163
|
-
|
|
164
152
|
if (newTermNames.length === 0) {
|
|
165
153
|
return onUpdateTerms(termNamesToIds(uniqueTerms, availableTerms));
|
|
166
154
|
}
|
|
167
|
-
|
|
168
155
|
if (!hasCreateAction) {
|
|
169
156
|
return;
|
|
170
157
|
}
|
|
171
|
-
|
|
172
158
|
Promise.all(newTermNames.map(termName => findOrCreateTerm({
|
|
173
159
|
name: termName
|
|
174
160
|
}))).then(newTerms => {
|
|
@@ -176,33 +162,25 @@ export function FlatTermSelector({
|
|
|
176
162
|
return onUpdateTerms(termNamesToIds(uniqueTerms, newAvailableTerms));
|
|
177
163
|
});
|
|
178
164
|
}
|
|
179
|
-
|
|
180
165
|
function appendTerm(newTerm) {
|
|
181
166
|
var _taxonomy$labels$sing;
|
|
182
|
-
|
|
183
167
|
if (termIds.includes(newTerm.id)) {
|
|
184
168
|
return;
|
|
185
169
|
}
|
|
186
|
-
|
|
187
170
|
const newTermIds = [...termIds, newTerm.id];
|
|
188
171
|
const defaultName = slug === 'post_tag' ? __('Tag') : __('Term');
|
|
189
|
-
const termAddedMessage = sprintf(
|
|
190
|
-
/* translators: %s: term name. */
|
|
172
|
+
const termAddedMessage = sprintf( /* translators: %s: term name. */
|
|
191
173
|
_x('%s added', 'term'), (_taxonomy$labels$sing = taxonomy?.labels?.singular_name) !== null && _taxonomy$labels$sing !== void 0 ? _taxonomy$labels$sing : defaultName);
|
|
192
174
|
speak(termAddedMessage, 'assertive');
|
|
193
175
|
onUpdateTerms(newTermIds);
|
|
194
176
|
}
|
|
195
|
-
|
|
196
177
|
const newTermLabel = (_taxonomy$labels$add_ = taxonomy?.labels?.add_new_item) !== null && _taxonomy$labels$add_ !== void 0 ? _taxonomy$labels$add_ : slug === 'post_tag' ? __('Add new tag') : __('Add new Term');
|
|
197
178
|
const singularName = (_taxonomy$labels$sing2 = taxonomy?.labels?.singular_name) !== null && _taxonomy$labels$sing2 !== void 0 ? _taxonomy$labels$sing2 : slug === 'post_tag' ? __('Tag') : __('Term');
|
|
198
|
-
const termAddedLabel = sprintf(
|
|
199
|
-
/* translators: %s: term name. */
|
|
179
|
+
const termAddedLabel = sprintf( /* translators: %s: term name. */
|
|
200
180
|
_x('%s added', 'term'), singularName);
|
|
201
|
-
const termRemovedLabel = sprintf(
|
|
202
|
-
/* translators: %s: term name. */
|
|
181
|
+
const termRemovedLabel = sprintf( /* translators: %s: term name. */
|
|
203
182
|
_x('%s removed', 'term'), singularName);
|
|
204
|
-
const removeTermLabel = sprintf(
|
|
205
|
-
/* translators: %s: term name. */
|
|
183
|
+
const removeTermLabel = sprintf( /* translators: %s: term name. */
|
|
206
184
|
_x('Remove %s', 'term'), singularName);
|
|
207
185
|
return createElement(Fragment, null, createElement(FormTokenField, {
|
|
208
186
|
value: values,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/post-taxonomies/flat-term-selector.js"],"names":["__","_x","sprintf","useEffect","useMemo","useState","FormTokenField","withFilters","useSelect","useDispatch","store","coreStore","useDebounce","speak","editorStore","unescapeString","unescapeTerm","MostUsedTerms","EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","find","term","name","id","FlatTermSelector","slug","values","setValues","search","setSearch","debouncedSearch","termIds","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","getCurrentPost","getEditedPostAttribute","getEntityRecords","getTaxonomy","hasFinishedResolution","post","_taxonomy","_termIds","rest_base","query","include","join","_links","length","searchResults","newValues","suggestions","editPost","saveEntityRecord","findOrCreateTerm","newTerm","throwOnError","error","code","data","term_id","onUpdateTerms","newTermIds","onChange","termNames","availableTerms","uniqueTerms","reduce","acc","some","n","push","newTermNames","filter","Promise","all","then","newTerms","newAvailableTerms","concat","appendTerm","includes","defaultName","termAddedMessage","labels","singular_name","newTermLabel","add_new_item","singularName","termAddedLabel","termRemovedLabel","removeTermLabel","added","removed","remove"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useEffect, useMemo, useState } from '@wordpress/element';\nimport { FormTokenField, withFilters } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDebounce } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unescapeString, unescapeTerm } from '../../utils/terms';\nimport MostUsedTerms from './most-used-terms';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array<any>}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Module constants\n */\nconst MAX_TERMS_SUGGESTIONS = 20;\nconst DEFAULT_QUERY = {\n\tper_page: MAX_TERMS_SUGGESTIONS,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nconst isSameTermName = ( termA, termB ) =>\n\tunescapeString( termA ).toLowerCase() ===\n\tunescapeString( termB ).toLowerCase();\n\nconst termNamesToIds = ( names, terms ) => {\n\treturn names.map(\n\t\t( termName ) =>\n\t\t\tterms.find( ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\nexport function FlatTermSelector( { slug } ) {\n\tconst [ values, setValues ] = useState( [] );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst debouncedSearch = useDebounce( setSearch, 500 );\n\n\tconst {\n\t\tterms,\n\t\ttermIds,\n\t\ttaxonomy,\n\t\thasAssignAction,\n\t\thasCreateAction,\n\t\thasResolvedTerms,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCurrentPost, getEditedPostAttribute } =\n\t\t\t\tselect( editorStore );\n\t\t\tconst { getEntityRecords, getTaxonomy, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst post = getCurrentPost();\n\t\t\tconst _taxonomy = getTaxonomy( slug );\n\t\t\tconst _termIds = _taxonomy\n\t\t\t\t? getEditedPostAttribute( _taxonomy.rest_base )\n\t\t\t\t: EMPTY_ARRAY;\n\n\t\t\tconst query = {\n\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\tinclude: _termIds.join( ',' ),\n\t\t\t\tper_page: -1,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\thasCreateAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\ttaxonomy: _taxonomy,\n\t\t\t\ttermIds: _termIds,\n\t\t\t\tterms: _termIds.length\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, query )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t\thasResolvedTerms: hasFinishedResolution( 'getEntityRecords', [\n\t\t\t\t\t'taxonomy',\n\t\t\t\t\tslug,\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ slug ]\n\t);\n\n\tconst { searchResults } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\n\t\t\treturn {\n\t\t\t\tsearchResults: !! search\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, {\n\t\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\t\tsearch,\n\t\t\t\t\t } )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ search, slug ]\n\t);\n\n\t// Update terms state only after the selectors are resolved.\n\t// We're using this to avoid terms temporarily disappearing on slow networks\n\t// while core data makes REST API requests.\n\tuseEffect( () => {\n\t\tif ( hasResolvedTerms ) {\n\t\t\tconst newValues = ( terms ?? [] ).map( ( term ) =>\n\t\t\t\tunescapeString( term.name )\n\t\t\t);\n\n\t\t\tsetValues( newValues );\n\t\t}\n\t}, [ terms, hasResolvedTerms ] );\n\n\tconst suggestions = useMemo( () => {\n\t\treturn ( searchResults ?? [] ).map( ( term ) =>\n\t\t\tunescapeString( term.name )\n\t\t);\n\t}, [ searchResults ] );\n\n\tconst { editPost } = useDispatch( editorStore );\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\n\t}\n\n\tasync function findOrCreateTerm( term ) {\n\t\ttry {\n\t\t\tconst newTerm = await saveEntityRecord( 'taxonomy', slug, term, {\n\t\t\t\tthrowOnError: true,\n\t\t\t} );\n\t\t\treturn unescapeTerm( newTerm );\n\t\t} catch ( error ) {\n\t\t\tif ( error.code !== 'term_exists' ) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: error.data.term_id,\n\t\t\t\tname: term.name,\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction onUpdateTerms( newTermIds ) {\n\t\teditPost( { [ taxonomy.rest_base ]: newTermIds } );\n\t}\n\n\tfunction onChange( termNames ) {\n\t\tconst availableTerms = [\n\t\t\t...( terms ?? [] ),\n\t\t\t...( searchResults ?? [] ),\n\t\t];\n\t\tconst uniqueTerms = termNames.reduce( ( acc, name ) => {\n\t\t\tif (\n\t\t\t\t! acc.some( ( n ) => n.toLowerCase() === name.toLowerCase() )\n\t\t\t) {\n\t\t\t\tacc.push( name );\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, [] );\n\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! availableTerms.find( ( term ) =>\n\t\t\t\t\tisSameTermName( term.name, termName )\n\t\t\t\t)\n\t\t);\n\n\t\t// Optimistically update term values.\n\t\t// The selector will always re-fetch terms later.\n\t\tsetValues( uniqueTerms );\n\n\t\tif ( newTermNames.length === 0 ) {\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, availableTerms )\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasCreateAction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.all(\n\t\t\tnewTermNames.map( ( termName ) =>\n\t\t\t\tfindOrCreateTerm( { name: termName } )\n\t\t\t)\n\t\t).then( ( newTerms ) => {\n\t\t\tconst newAvailableTerms = availableTerms.concat( newTerms );\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, newAvailableTerms )\n\t\t\t);\n\t\t} );\n\t}\n\n\tfunction appendTerm( newTerm ) {\n\t\tif ( termIds.includes( newTerm.id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newTermIds = [ ...termIds, newTerm.id ];\n\t\tconst defaultName = slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' );\n\t\tconst termAddedMessage = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\ttaxonomy?.labels?.singular_name ?? defaultName\n\t\t);\n\n\t\tspeak( termAddedMessage, 'assertive' );\n\t\tonUpdateTerms( newTermIds );\n\t}\n\n\tconst newTermLabel =\n\t\ttaxonomy?.labels?.add_new_item ??\n\t\t( slug === 'post_tag' ? __( 'Add new tag' ) : __( 'Add new Term' ) );\n\tconst singularName =\n\t\ttaxonomy?.labels?.singular_name ??\n\t\t( slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' ) );\n\tconst termAddedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s added', 'term' ),\n\t\tsingularName\n\t);\n\tconst termRemovedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s removed', 'term' ),\n\t\tsingularName\n\t);\n\tconst removeTermLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( 'Remove %s', 'term' ),\n\t\tsingularName\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<FormTokenField\n\t\t\t\tvalue={ values }\n\t\t\t\tsuggestions={ suggestions }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\tmaxSuggestions={ MAX_TERMS_SUGGESTIONS }\n\t\t\t\tlabel={ newTermLabel }\n\t\t\t\tmessages={ {\n\t\t\t\t\tadded: termAddedLabel,\n\t\t\t\t\tremoved: termRemovedLabel,\n\t\t\t\t\tremove: removeTermLabel,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<MostUsedTerms taxonomy={ taxonomy } onSelect={ appendTerm } />\n\t\t</>\n\t);\n}\n\nexport default withFilters( 'editor.PostTaxonomyType' )( FlatTermSelector );\n"]}
|
|
1
|
+
{"version":3,"names":["__","_x","sprintf","useEffect","useMemo","useState","FormTokenField","withFilters","useSelect","useDispatch","store","coreStore","useDebounce","speak","editorStore","unescapeString","unescapeTerm","MostUsedTerms","EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","find","term","name","id","FlatTermSelector","slug","_taxonomy$labels$add_","_taxonomy$labels$sing2","values","setValues","search","setSearch","debouncedSearch","termIds","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","_post$_links","_post$_links2","getCurrentPost","getEditedPostAttribute","getEntityRecords","getTaxonomy","hasFinishedResolution","post","_taxonomy","_termIds","rest_base","query","include","join","_links","length","searchResults","newValues","suggestions","editPost","saveEntityRecord","findOrCreateTerm","newTerm","throwOnError","error","code","data","term_id","onUpdateTerms","newTermIds","onChange","termNames","availableTerms","uniqueTerms","reduce","acc","some","n","push","newTermNames","filter","Promise","all","then","newTerms","newAvailableTerms","concat","appendTerm","_taxonomy$labels$sing","includes","defaultName","termAddedMessage","labels","singular_name","newTermLabel","add_new_item","singularName","termAddedLabel","termRemovedLabel","removeTermLabel","createElement","Fragment","value","onInputChange","maxSuggestions","label","messages","added","removed","remove","onSelect"],"sources":["@wordpress/editor/src/components/post-taxonomies/flat-term-selector.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useEffect, useMemo, useState } from '@wordpress/element';\nimport { FormTokenField, withFilters } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDebounce } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unescapeString, unescapeTerm } from '../../utils/terms';\nimport MostUsedTerms from './most-used-terms';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array<any>}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Module constants\n */\nconst MAX_TERMS_SUGGESTIONS = 20;\nconst DEFAULT_QUERY = {\n\tper_page: MAX_TERMS_SUGGESTIONS,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nconst isSameTermName = ( termA, termB ) =>\n\tunescapeString( termA ).toLowerCase() ===\n\tunescapeString( termB ).toLowerCase();\n\nconst termNamesToIds = ( names, terms ) => {\n\treturn names.map(\n\t\t( termName ) =>\n\t\t\tterms.find( ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\nexport function FlatTermSelector( { slug } ) {\n\tconst [ values, setValues ] = useState( [] );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst debouncedSearch = useDebounce( setSearch, 500 );\n\n\tconst {\n\t\tterms,\n\t\ttermIds,\n\t\ttaxonomy,\n\t\thasAssignAction,\n\t\thasCreateAction,\n\t\thasResolvedTerms,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCurrentPost, getEditedPostAttribute } =\n\t\t\t\tselect( editorStore );\n\t\t\tconst { getEntityRecords, getTaxonomy, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst post = getCurrentPost();\n\t\t\tconst _taxonomy = getTaxonomy( slug );\n\t\t\tconst _termIds = _taxonomy\n\t\t\t\t? getEditedPostAttribute( _taxonomy.rest_base )\n\t\t\t\t: EMPTY_ARRAY;\n\n\t\t\tconst query = {\n\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\tinclude: _termIds.join( ',' ),\n\t\t\t\tper_page: -1,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\thasCreateAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\ttaxonomy: _taxonomy,\n\t\t\t\ttermIds: _termIds,\n\t\t\t\tterms: _termIds.length\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, query )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t\thasResolvedTerms: hasFinishedResolution( 'getEntityRecords', [\n\t\t\t\t\t'taxonomy',\n\t\t\t\t\tslug,\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ slug ]\n\t);\n\n\tconst { searchResults } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\n\t\t\treturn {\n\t\t\t\tsearchResults: !! search\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, {\n\t\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\t\tsearch,\n\t\t\t\t\t } )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ search, slug ]\n\t);\n\n\t// Update terms state only after the selectors are resolved.\n\t// We're using this to avoid terms temporarily disappearing on slow networks\n\t// while core data makes REST API requests.\n\tuseEffect( () => {\n\t\tif ( hasResolvedTerms ) {\n\t\t\tconst newValues = ( terms ?? [] ).map( ( term ) =>\n\t\t\t\tunescapeString( term.name )\n\t\t\t);\n\n\t\t\tsetValues( newValues );\n\t\t}\n\t}, [ terms, hasResolvedTerms ] );\n\n\tconst suggestions = useMemo( () => {\n\t\treturn ( searchResults ?? [] ).map( ( term ) =>\n\t\t\tunescapeString( term.name )\n\t\t);\n\t}, [ searchResults ] );\n\n\tconst { editPost } = useDispatch( editorStore );\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\n\t}\n\n\tasync function findOrCreateTerm( term ) {\n\t\ttry {\n\t\t\tconst newTerm = await saveEntityRecord( 'taxonomy', slug, term, {\n\t\t\t\tthrowOnError: true,\n\t\t\t} );\n\t\t\treturn unescapeTerm( newTerm );\n\t\t} catch ( error ) {\n\t\t\tif ( error.code !== 'term_exists' ) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: error.data.term_id,\n\t\t\t\tname: term.name,\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction onUpdateTerms( newTermIds ) {\n\t\teditPost( { [ taxonomy.rest_base ]: newTermIds } );\n\t}\n\n\tfunction onChange( termNames ) {\n\t\tconst availableTerms = [\n\t\t\t...( terms ?? [] ),\n\t\t\t...( searchResults ?? [] ),\n\t\t];\n\t\tconst uniqueTerms = termNames.reduce( ( acc, name ) => {\n\t\t\tif (\n\t\t\t\t! acc.some( ( n ) => n.toLowerCase() === name.toLowerCase() )\n\t\t\t) {\n\t\t\t\tacc.push( name );\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, [] );\n\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! availableTerms.find( ( term ) =>\n\t\t\t\t\tisSameTermName( term.name, termName )\n\t\t\t\t)\n\t\t);\n\n\t\t// Optimistically update term values.\n\t\t// The selector will always re-fetch terms later.\n\t\tsetValues( uniqueTerms );\n\n\t\tif ( newTermNames.length === 0 ) {\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, availableTerms )\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasCreateAction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.all(\n\t\t\tnewTermNames.map( ( termName ) =>\n\t\t\t\tfindOrCreateTerm( { name: termName } )\n\t\t\t)\n\t\t).then( ( newTerms ) => {\n\t\t\tconst newAvailableTerms = availableTerms.concat( newTerms );\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, newAvailableTerms )\n\t\t\t);\n\t\t} );\n\t}\n\n\tfunction appendTerm( newTerm ) {\n\t\tif ( termIds.includes( newTerm.id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newTermIds = [ ...termIds, newTerm.id ];\n\t\tconst defaultName = slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' );\n\t\tconst termAddedMessage = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\ttaxonomy?.labels?.singular_name ?? defaultName\n\t\t);\n\n\t\tspeak( termAddedMessage, 'assertive' );\n\t\tonUpdateTerms( newTermIds );\n\t}\n\n\tconst newTermLabel =\n\t\ttaxonomy?.labels?.add_new_item ??\n\t\t( slug === 'post_tag' ? __( 'Add new tag' ) : __( 'Add new Term' ) );\n\tconst singularName =\n\t\ttaxonomy?.labels?.singular_name ??\n\t\t( slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' ) );\n\tconst termAddedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s added', 'term' ),\n\t\tsingularName\n\t);\n\tconst termRemovedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s removed', 'term' ),\n\t\tsingularName\n\t);\n\tconst removeTermLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( 'Remove %s', 'term' ),\n\t\tsingularName\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<FormTokenField\n\t\t\t\tvalue={ values }\n\t\t\t\tsuggestions={ suggestions }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\tmaxSuggestions={ MAX_TERMS_SUGGESTIONS }\n\t\t\t\tlabel={ newTermLabel }\n\t\t\t\tmessages={ {\n\t\t\t\t\tadded: termAddedLabel,\n\t\t\t\t\tremoved: termRemovedLabel,\n\t\t\t\t\tremove: removeTermLabel,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<MostUsedTerms taxonomy={ taxonomy } onSelect={ appendTerm } />\n\t\t</>\n\t);\n}\n\nexport default withFilters( 'editor.PostTaxonomyType' )( FlatTermSelector );\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { createElement } from "@wordpress/element";
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* WordPress dependencies
|
|
5
4
|
*/
|
|
@@ -11,16 +10,16 @@ import { useDebounce } from '@wordpress/compose';
|
|
|
11
10
|
import { store as coreStore } from '@wordpress/core-data';
|
|
12
11
|
import { speak } from '@wordpress/a11y';
|
|
13
12
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
13
|
+
|
|
14
14
|
/**
|
|
15
15
|
* Internal dependencies
|
|
16
16
|
*/
|
|
17
|
-
|
|
18
17
|
import { buildTermsTree } from '../../utils/terms';
|
|
19
18
|
import { store as editorStore } from '../../store';
|
|
19
|
+
|
|
20
20
|
/**
|
|
21
21
|
* Module Constants
|
|
22
22
|
*/
|
|
23
|
-
|
|
24
23
|
const DEFAULT_QUERY = {
|
|
25
24
|
per_page: -1,
|
|
26
25
|
orderby: 'name',
|
|
@@ -30,6 +29,7 @@ const DEFAULT_QUERY = {
|
|
|
30
29
|
};
|
|
31
30
|
const MIN_TERMS_COUNT_FOR_FILTER = 8;
|
|
32
31
|
const EMPTY_ARRAY = [];
|
|
32
|
+
|
|
33
33
|
/**
|
|
34
34
|
* Sort Terms by Selected.
|
|
35
35
|
*
|
|
@@ -38,43 +38,35 @@ const EMPTY_ARRAY = [];
|
|
|
38
38
|
*
|
|
39
39
|
* @return {Object[]} Sorted array of terms.
|
|
40
40
|
*/
|
|
41
|
-
|
|
42
41
|
export function sortBySelected(termsTree, terms) {
|
|
43
42
|
const treeHasSelection = termTree => {
|
|
44
43
|
if (terms.indexOf(termTree.id) !== -1) {
|
|
45
44
|
return true;
|
|
46
45
|
}
|
|
47
|
-
|
|
48
46
|
if (undefined === termTree.children) {
|
|
49
47
|
return false;
|
|
50
48
|
}
|
|
51
|
-
|
|
52
49
|
return termTree.children.map(treeHasSelection).filter(child => child).length > 0;
|
|
53
50
|
};
|
|
54
|
-
|
|
55
51
|
const termOrChildIsSelected = (termA, termB) => {
|
|
56
52
|
const termASelected = treeHasSelection(termA);
|
|
57
53
|
const termBSelected = treeHasSelection(termB);
|
|
58
|
-
|
|
59
54
|
if (termASelected === termBSelected) {
|
|
60
55
|
return 0;
|
|
61
56
|
}
|
|
62
|
-
|
|
63
57
|
if (termASelected && !termBSelected) {
|
|
64
58
|
return -1;
|
|
65
59
|
}
|
|
66
|
-
|
|
67
60
|
if (!termASelected && termBSelected) {
|
|
68
61
|
return 1;
|
|
69
62
|
}
|
|
70
|
-
|
|
71
63
|
return 0;
|
|
72
64
|
};
|
|
73
|
-
|
|
74
65
|
const newTermTree = [...termsTree];
|
|
75
66
|
newTermTree.sort(termOrChildIsSelected);
|
|
76
67
|
return newTermTree;
|
|
77
68
|
}
|
|
69
|
+
|
|
78
70
|
/**
|
|
79
71
|
* Find term by parent id or name.
|
|
80
72
|
*
|
|
@@ -83,48 +75,49 @@ export function sortBySelected(termsTree, terms) {
|
|
|
83
75
|
* @param {string} name Term name.
|
|
84
76
|
* @return {Object} Term object.
|
|
85
77
|
*/
|
|
86
|
-
|
|
87
78
|
export function findTerm(terms, parent, name) {
|
|
88
79
|
return terms.find(term => {
|
|
89
80
|
return (!term.parent && !parent || parseInt(term.parent) === parseInt(parent)) && term.name.toLowerCase() === name.toLowerCase();
|
|
90
81
|
});
|
|
91
82
|
}
|
|
83
|
+
|
|
92
84
|
/**
|
|
93
85
|
* Get filter matcher function.
|
|
94
86
|
*
|
|
95
87
|
* @param {string} filterValue Filter value.
|
|
96
88
|
* @return {(function(Object): (Object|boolean))} Matcher function.
|
|
97
89
|
*/
|
|
98
|
-
|
|
99
90
|
export function getFilterMatcher(filterValue) {
|
|
100
91
|
const matchTermsForFilter = originalTerm => {
|
|
101
92
|
if ('' === filterValue) {
|
|
102
93
|
return originalTerm;
|
|
103
|
-
}
|
|
104
|
-
// don't want to modify the original term.
|
|
94
|
+
}
|
|
105
95
|
|
|
96
|
+
// Shallow clone, because we'll be filtering the term's children and
|
|
97
|
+
// don't want to modify the original term.
|
|
98
|
+
const term = {
|
|
99
|
+
...originalTerm
|
|
100
|
+
};
|
|
106
101
|
|
|
107
|
-
|
|
108
|
-
}; // Map and filter the children, recursive so we deal with grandchildren
|
|
102
|
+
// Map and filter the children, recursive so we deal with grandchildren
|
|
109
103
|
// and any deeper levels.
|
|
110
|
-
|
|
111
104
|
if (term.children.length > 0) {
|
|
112
105
|
term.children = term.children.map(matchTermsForFilter).filter(child => child);
|
|
113
|
-
}
|
|
114
|
-
// (i.e. some child matched at some point in the tree) then return it.
|
|
115
|
-
|
|
106
|
+
}
|
|
116
107
|
|
|
108
|
+
// If the term's name contains the filterValue, or it has children
|
|
109
|
+
// (i.e. some child matched at some point in the tree) then return it.
|
|
117
110
|
if (-1 !== term.name.toLowerCase().indexOf(filterValue.toLowerCase()) || term.children.length > 0) {
|
|
118
111
|
return term;
|
|
119
|
-
}
|
|
120
|
-
// to have false values filtered out.
|
|
121
|
-
|
|
112
|
+
}
|
|
122
113
|
|
|
114
|
+
// Otherwise, return false. After mapping, the list of terms will need
|
|
115
|
+
// to have false values filtered out.
|
|
123
116
|
return false;
|
|
124
117
|
};
|
|
125
|
-
|
|
126
118
|
return matchTermsForFilter;
|
|
127
119
|
}
|
|
120
|
+
|
|
128
121
|
/**
|
|
129
122
|
* Hierarchical term selector.
|
|
130
123
|
*
|
|
@@ -132,18 +125,15 @@ export function getFilterMatcher(filterValue) {
|
|
|
132
125
|
* @param {string} props.slug Taxonomy slug.
|
|
133
126
|
* @return {WPElement} Hierarchical term selector component.
|
|
134
127
|
*/
|
|
135
|
-
|
|
136
128
|
export function HierarchicalTermSelector({
|
|
137
129
|
slug
|
|
138
130
|
}) {
|
|
139
131
|
var _taxonomy$labels$sear, _taxonomy$name;
|
|
140
|
-
|
|
141
132
|
const [adding, setAdding] = useState(false);
|
|
142
133
|
const [formName, setFormName] = useState('');
|
|
143
134
|
/**
|
|
144
135
|
* @type {[number|'', Function]}
|
|
145
136
|
*/
|
|
146
|
-
|
|
147
137
|
const [formParent, setFormParent] = useState('');
|
|
148
138
|
const [showForm, setShowForm] = useState(false);
|
|
149
139
|
const [filterValue, setFilterValue] = useState('');
|
|
@@ -158,7 +148,6 @@ export function HierarchicalTermSelector({
|
|
|
158
148
|
taxonomy
|
|
159
149
|
} = useSelect(select => {
|
|
160
150
|
var _post$_links, _post$_links2;
|
|
161
|
-
|
|
162
151
|
const {
|
|
163
152
|
getCurrentPost,
|
|
164
153
|
getEditedPostAttribute
|
|
@@ -168,9 +157,7 @@ export function HierarchicalTermSelector({
|
|
|
168
157
|
getEntityRecords,
|
|
169
158
|
isResolving
|
|
170
159
|
} = select(coreStore);
|
|
171
|
-
|
|
172
160
|
const _taxonomy = getTaxonomy(slug);
|
|
173
|
-
|
|
174
161
|
const post = getCurrentPost();
|
|
175
162
|
return {
|
|
176
163
|
hasCreateAction: _taxonomy ? (_post$_links = post._links?.['wp:action-create-' + _taxonomy.rest_base]) !== null && _post$_links !== void 0 ? _post$_links : false : false,
|
|
@@ -187,98 +174,85 @@ export function HierarchicalTermSelector({
|
|
|
187
174
|
const {
|
|
188
175
|
saveEntityRecord
|
|
189
176
|
} = useDispatch(coreStore);
|
|
190
|
-
const availableTermsTree = useMemo(() => sortBySelected(buildTermsTree(availableTerms), terms),
|
|
177
|
+
const availableTermsTree = useMemo(() => sortBySelected(buildTermsTree(availableTerms), terms),
|
|
178
|
+
// Remove `terms` from the dependency list to avoid reordering every time
|
|
191
179
|
// checking or unchecking a term.
|
|
192
180
|
[availableTerms]);
|
|
193
|
-
|
|
194
181
|
if (!hasAssignAction) {
|
|
195
182
|
return null;
|
|
196
183
|
}
|
|
184
|
+
|
|
197
185
|
/**
|
|
198
186
|
* Append new term.
|
|
199
187
|
*
|
|
200
188
|
* @param {Object} term Term object.
|
|
201
189
|
* @return {Promise} A promise that resolves to save term object.
|
|
202
190
|
*/
|
|
203
|
-
|
|
204
|
-
|
|
205
191
|
const addTerm = term => {
|
|
206
192
|
return saveEntityRecord('taxonomy', slug, term);
|
|
207
193
|
};
|
|
194
|
+
|
|
208
195
|
/**
|
|
209
196
|
* Update terms for post.
|
|
210
197
|
*
|
|
211
198
|
* @param {number[]} termIds Term ids.
|
|
212
199
|
*/
|
|
213
|
-
|
|
214
|
-
|
|
215
200
|
const onUpdateTerms = termIds => {
|
|
216
201
|
editPost({
|
|
217
202
|
[taxonomy.rest_base]: termIds
|
|
218
203
|
});
|
|
219
204
|
};
|
|
205
|
+
|
|
220
206
|
/**
|
|
221
207
|
* Handler for checking term.
|
|
222
208
|
*
|
|
223
209
|
* @param {number} termId
|
|
224
210
|
*/
|
|
225
|
-
|
|
226
|
-
|
|
227
211
|
const onChange = termId => {
|
|
228
212
|
const hasTerm = terms.includes(termId);
|
|
229
213
|
const newTerms = hasTerm ? terms.filter(id => id !== termId) : [...terms, termId];
|
|
230
214
|
onUpdateTerms(newTerms);
|
|
231
215
|
};
|
|
232
|
-
|
|
233
216
|
const onChangeFormName = value => {
|
|
234
217
|
setFormName(value);
|
|
235
218
|
};
|
|
219
|
+
|
|
236
220
|
/**
|
|
237
221
|
* Handler for changing form parent.
|
|
238
222
|
*
|
|
239
223
|
* @param {number|''} parentId Parent post id.
|
|
240
224
|
*/
|
|
241
|
-
|
|
242
|
-
|
|
243
225
|
const onChangeFormParent = parentId => {
|
|
244
226
|
setFormParent(parentId);
|
|
245
227
|
};
|
|
246
|
-
|
|
247
228
|
const onToggleForm = () => {
|
|
248
229
|
setShowForm(!showForm);
|
|
249
230
|
};
|
|
250
|
-
|
|
251
231
|
const onAddTerm = async event => {
|
|
252
232
|
var _taxonomy$labels$sing;
|
|
253
|
-
|
|
254
233
|
event.preventDefault();
|
|
255
|
-
|
|
256
234
|
if (formName === '' || adding) {
|
|
257
235
|
return;
|
|
258
|
-
}
|
|
259
|
-
|
|
236
|
+
}
|
|
260
237
|
|
|
238
|
+
// Check if the term we are adding already exists.
|
|
261
239
|
const existingTerm = findTerm(availableTerms, formParent, formName);
|
|
262
|
-
|
|
263
240
|
if (existingTerm) {
|
|
264
241
|
// If the term we are adding exists but is not selected select it.
|
|
265
242
|
if (!terms.some(term => term === existingTerm.id)) {
|
|
266
243
|
onUpdateTerms([...terms, existingTerm.id]);
|
|
267
244
|
}
|
|
268
|
-
|
|
269
245
|
setFormName('');
|
|
270
246
|
setFormParent('');
|
|
271
247
|
return;
|
|
272
248
|
}
|
|
273
|
-
|
|
274
249
|
setAdding(true);
|
|
275
250
|
const newTerm = await addTerm({
|
|
276
251
|
name: formName,
|
|
277
252
|
parent: formParent ? formParent : undefined
|
|
278
253
|
});
|
|
279
254
|
const defaultName = slug === 'category' ? __('Category') : __('Term');
|
|
280
|
-
const termAddedMessage = sprintf(
|
|
281
|
-
/* translators: %s: taxonomy name */
|
|
255
|
+
const termAddedMessage = sprintf( /* translators: %s: taxonomy name */
|
|
282
256
|
_x('%s added', 'term'), (_taxonomy$labels$sing = taxonomy?.labels?.singular_name) !== null && _taxonomy$labels$sing !== void 0 ? _taxonomy$labels$sing : defaultName);
|
|
283
257
|
speak(termAddedMessage, 'assertive');
|
|
284
258
|
setAdding(false);
|
|
@@ -286,33 +260,25 @@ export function HierarchicalTermSelector({
|
|
|
286
260
|
setFormParent('');
|
|
287
261
|
onUpdateTerms([...terms, newTerm.id]);
|
|
288
262
|
};
|
|
289
|
-
|
|
290
263
|
const setFilter = value => {
|
|
291
264
|
const newFilteredTermsTree = availableTermsTree.map(getFilterMatcher(value)).filter(term => term);
|
|
292
|
-
|
|
293
265
|
const getResultCount = termsTree => {
|
|
294
266
|
let count = 0;
|
|
295
|
-
|
|
296
267
|
for (let i = 0; i < termsTree.length; i++) {
|
|
297
268
|
count++;
|
|
298
|
-
|
|
299
269
|
if (undefined !== termsTree[i].children) {
|
|
300
270
|
count += getResultCount(termsTree[i].children);
|
|
301
271
|
}
|
|
302
272
|
}
|
|
303
|
-
|
|
304
273
|
return count;
|
|
305
274
|
};
|
|
306
|
-
|
|
307
275
|
setFilterValue(value);
|
|
308
276
|
setFilteredTermsTree(newFilteredTermsTree);
|
|
309
277
|
const resultCount = getResultCount(newFilteredTermsTree);
|
|
310
|
-
const resultsFoundMessage = sprintf(
|
|
311
|
-
/* translators: %d: number of results */
|
|
278
|
+
const resultsFoundMessage = sprintf( /* translators: %d: number of results */
|
|
312
279
|
_n('%d result found.', '%d results found.', resultCount), resultCount);
|
|
313
280
|
debouncedSpeak(resultsFoundMessage, 'assertive');
|
|
314
281
|
};
|
|
315
|
-
|
|
316
282
|
const renderTerms = renderedTerms => {
|
|
317
283
|
return renderedTerms.map(term => {
|
|
318
284
|
return createElement("div", {
|
|
@@ -331,13 +297,10 @@ export function HierarchicalTermSelector({
|
|
|
331
297
|
}, renderTerms(term.children)));
|
|
332
298
|
});
|
|
333
299
|
};
|
|
334
|
-
|
|
335
300
|
const labelWithFallback = (labelProperty, fallbackIsCategory, fallbackIsNotCategory) => {
|
|
336
301
|
var _taxonomy$labels$labe;
|
|
337
|
-
|
|
338
302
|
return (_taxonomy$labels$labe = taxonomy?.labels?.[labelProperty]) !== null && _taxonomy$labels$labe !== void 0 ? _taxonomy$labels$labe : slug === 'category' ? fallbackIsCategory : fallbackIsNotCategory;
|
|
339
303
|
};
|
|
340
|
-
|
|
341
304
|
const newTermButtonLabel = labelWithFallback('add_new_item', __('Add new category'), __('Add new term'));
|
|
342
305
|
const newTermLabel = labelWithFallback('new_item_name', __('Add new category'), __('Add new term'));
|
|
343
306
|
const parentSelectLabel = labelWithFallback('parent_item', __('Parent Category'), __('Parent Term'));
|