@wordpress/editor 12.10.0 → 12.11.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 +2 -0
- package/build/components/index.js +12 -1
- package/build/components/index.js.map +1 -1
- package/build/components/local-autosave-monitor/index.js +24 -19
- package/build/components/local-autosave-monitor/index.js.map +1 -1
- package/build/components/page-attributes/parent.js +1 -1
- package/build/components/page-attributes/parent.js.map +1 -1
- package/build/components/post-publish-panel/maybe-category-panel.js +5 -5
- package/build/components/post-publish-panel/maybe-category-panel.js.map +1 -1
- package/build/components/post-schedule/label.js +93 -13
- package/build/components/post-schedule/label.js.map +1 -1
- package/build/components/post-taxonomies/flat-term-selector.js +7 -4
- package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
- package/build/components/post-visibility/index.js +3 -1
- package/build/components/post-visibility/index.js.map +1 -1
- package/build/components/provider/index.native.js +0 -1
- package/build/components/provider/index.native.js.map +1 -1
- package/build/store/actions.js +5 -1
- package/build/store/actions.js.map +1 -1
- package/build/store/reducer.js +1 -1
- package/build/store/reducer.js.map +1 -1
- package/build-module/components/index.js +1 -1
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/local-autosave-monitor/index.js +24 -18
- package/build-module/components/local-autosave-monitor/index.js.map +1 -1
- package/build-module/components/page-attributes/parent.js +2 -2
- package/build-module/components/page-attributes/parent.js.map +1 -1
- package/build-module/components/post-publish-panel/maybe-category-panel.js +5 -5
- package/build-module/components/post-publish-panel/maybe-category-panel.js.map +1 -1
- package/build-module/components/post-schedule/label.js +90 -13
- package/build-module/components/post-schedule/label.js.map +1 -1
- package/build-module/components/post-taxonomies/flat-term-selector.js +7 -4
- package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
- package/build-module/components/post-visibility/index.js +4 -2
- package/build-module/components/post-visibility/index.js.map +1 -1
- package/build-module/components/provider/index.native.js +0 -1
- package/build-module/components/provider/index.native.js.map +1 -1
- package/build-module/store/actions.js +5 -1
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/reducer.js +2 -2
- package/build-module/store/reducer.js.map +1 -1
- package/build-style/style-rtl.css +1 -1
- package/build-style/style.css +1 -1
- package/package.json +28 -28
- package/src/components/index.js +4 -1
- package/src/components/local-autosave-monitor/index.js +24 -18
- package/src/components/page-attributes/parent.js +1 -2
- package/src/components/post-publish-panel/maybe-category-panel.js +5 -2
- package/src/components/post-publish-panel/test/__snapshots__/index.js.snap +1 -1
- package/src/components/post-schedule/label.js +111 -17
- package/src/components/post-schedule/test/label.js +127 -15
- package/src/components/post-taxonomies/flat-term-selector.js +5 -4
- package/src/components/post-title/style.scss +1 -1
- package/src/components/post-visibility/index.js +2 -2
- package/src/components/provider/index.native.js +1 -7
- package/src/store/actions.js +3 -1
- package/src/store/reducer.js +2 -2
- package/src/store/test/selectors.js +8 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/index.js"],"names":["default","AutosaveMonitor","DocumentOutline","DocumentOutlineCheck","VisualEditorGlobalKeyboardShortcuts","TextEditorGlobalKeyboardShortcuts","EditorKeyboardShortcutsRegister","EditorHistoryRedo","EditorHistoryUndo","EditorNotices","EditorSnackbars","EntitiesSavedStates","ErrorBoundary","LocalAutosaveMonitor","PageAttributesCheck","PageAttributesOrder","PageAttributesParent","PageTemplate","PostAuthor","PostAuthorCheck","PostComments","PostExcerpt","PostExcerptCheck","PostFeaturedImage","PostFeaturedImageCheck","PostFormat","PostFormatCheck","PostLastRevision","PostLastRevisionCheck","PostLockedModal","PostPendingStatus","PostPendingStatusCheck","PostPingbacks","PostPreviewButton","PostPublishButton","PostPublishButtonLabel","PostPublishPanel","PostSavedState","PostSchedule","PostScheduleCheck","PostScheduleLabel","PostSlug","PostSlugCheck","PostSticky","PostStickyCheck","PostSwitchToDraftButton","PostTaxonomies","PostTaxonomiesFlatTermSelector","PostTaxonomiesHierarchicalTermSelector","PostTaxonomiesCheck","PostTextEditor","PostTitle","PostTrash","PostTrashCheck","PostTypeSupportCheck","PostVisibility","PostVisibilityLabel","PostVisibilityCheck","TableOfContents","ThemeSupportCheck","UnsavedChangesWarning","WordCount","EditorProvider"],"mappings":"AAAA;AACA,cAAc,kBAAd,C,CAEA;;AACA,SAASA,OAAO,IAAIC,eAApB,QAA2C,oBAA3C;AACA,SAASD,OAAO,IAAIE,eAApB,QAA2C,oBAA3C;AACA,SAASF,OAAO,IAAIG,oBAApB,QAAgD,0BAAhD;AACA,SAASH,OAAO,IAAII,mCAApB,QAA+D,qDAA/D;AACA,SAASJ,OAAO,IAAIK,iCAApB,QAA6D,mDAA7D;AACA,SAASL,OAAO,IAAIM,+BAApB,QAA2D,gDAA3D;AACA,SAASN,OAAO,IAAIO,iBAApB,QAA6C,uBAA7C;AACA,SAASP,OAAO,IAAIQ,iBAApB,QAA6C,uBAA7C;AACA,SAASR,OAAO,IAAIS,aAApB,QAAyC,kBAAzC;AACA,SAAST,OAAO,IAAIU,eAApB,QAA2C,oBAA3C;AACA,SAASV,OAAO,IAAIW,mBAApB,QAA+C,yBAA/C;AACA,SAASX,OAAO,IAAIY,aAApB,QAAyC,kBAAzC;AACA,SAASZ,OAAO,IAAIa,oBAApB,QAAgD,0BAAhD;AACA,SAASb,OAAO,IAAIc,mBAApB,QAA+C,yBAA/C;AACA,SAASd,OAAO,IAAIe,mBAApB,QAA+C,yBAA/C;AACA,SAASf,OAAO,IAAIgB,oBAApB,QAAgD,0BAAhD;AACA,SAAShB,OAAO,IAAIiB,YAApB,QAAwC,iBAAxC;AACA,SAASjB,OAAO,IAAIkB,UAApB,QAAsC,eAAtC;AACA,SAASlB,OAAO,IAAImB,eAApB,QAA2C,qBAA3C;AACA,SAASnB,OAAO,IAAIoB,YAApB,QAAwC,iBAAxC;AACA,SAASpB,OAAO,IAAIqB,WAApB,QAAuC,gBAAvC;AACA,SAASrB,OAAO,IAAIsB,gBAApB,QAA4C,sBAA5C;AACA,SAAStB,OAAO,IAAIuB,iBAApB,QAA6C,uBAA7C;AACA,SAASvB,OAAO,IAAIwB,sBAApB,QAAkD,6BAAlD;AACA,SAASxB,OAAO,IAAIyB,UAApB,QAAsC,eAAtC;AACA,SAASzB,OAAO,IAAI0B,eAApB,QAA2C,qBAA3C;AACA,SAAS1B,OAAO,IAAI2B,gBAApB,QAA4C,sBAA5C;AACA,SAAS3B,OAAO,IAAI4B,qBAApB,QAAiD,4BAAjD;AACA,SAAS5B,OAAO,IAAI6B,eAApB,QAA2C,qBAA3C;AACA,SAAS7B,OAAO,IAAI8B,iBAApB,QAA6C,uBAA7C;AACA,SAAS9B,OAAO,IAAI+B,sBAApB,QAAkD,6BAAlD;AACA,SAAS/B,OAAO,IAAIgC,aAApB,QAAyC,kBAAzC;AACA,SAAShC,OAAO,IAAIiC,iBAApB,QAA6C,uBAA7C;AACA,SAASjC,OAAO,IAAIkC,iBAApB,QAA6C,uBAA7C;AACA,SAASlC,OAAO,IAAImC,sBAApB,QAAkD,6BAAlD;AACA,SAASnC,OAAO,IAAIoC,gBAApB,QAA4C,sBAA5C;AACA,SAASpC,OAAO,IAAIqC,cAApB,QAA0C,oBAA1C;AACA,SAASrC,OAAO,IAAIsC,YAApB,QAAwC,iBAAxC;AACA,SAAStC,OAAO,IAAIuC,iBAApB,QAA6C,uBAA7C;AACA,
|
|
1
|
+
{"version":3,"sources":["@wordpress/editor/src/components/index.js"],"names":["default","AutosaveMonitor","DocumentOutline","DocumentOutlineCheck","VisualEditorGlobalKeyboardShortcuts","TextEditorGlobalKeyboardShortcuts","EditorKeyboardShortcutsRegister","EditorHistoryRedo","EditorHistoryUndo","EditorNotices","EditorSnackbars","EntitiesSavedStates","ErrorBoundary","LocalAutosaveMonitor","PageAttributesCheck","PageAttributesOrder","PageAttributesParent","PageTemplate","PostAuthor","PostAuthorCheck","PostComments","PostExcerpt","PostExcerptCheck","PostFeaturedImage","PostFeaturedImageCheck","PostFormat","PostFormatCheck","PostLastRevision","PostLastRevisionCheck","PostLockedModal","PostPendingStatus","PostPendingStatusCheck","PostPingbacks","PostPreviewButton","PostPublishButton","PostPublishButtonLabel","PostPublishPanel","PostSavedState","PostSchedule","PostScheduleCheck","PostScheduleLabel","usePostScheduleLabel","PostSlug","PostSlugCheck","PostSticky","PostStickyCheck","PostSwitchToDraftButton","PostTaxonomies","PostTaxonomiesFlatTermSelector","PostTaxonomiesHierarchicalTermSelector","PostTaxonomiesCheck","PostTextEditor","PostTitle","PostTrash","PostTrashCheck","PostTypeSupportCheck","PostVisibility","PostVisibilityLabel","PostVisibilityCheck","TableOfContents","ThemeSupportCheck","UnsavedChangesWarning","WordCount","EditorProvider"],"mappings":"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","sourcesContent":["// Block Creation Components.\nexport * from './autocompleters';\n\n// Post Related Components.\nexport { default as AutosaveMonitor } from './autosave-monitor';\nexport { default as DocumentOutline } from './document-outline';\nexport { default as DocumentOutlineCheck } from './document-outline/check';\nexport { default as VisualEditorGlobalKeyboardShortcuts } from './global-keyboard-shortcuts/visual-editor-shortcuts';\nexport { default as TextEditorGlobalKeyboardShortcuts } from './global-keyboard-shortcuts/text-editor-shortcuts';\nexport { default as EditorKeyboardShortcutsRegister } from './global-keyboard-shortcuts/register-shortcuts';\nexport { default as EditorHistoryRedo } from './editor-history/redo';\nexport { default as EditorHistoryUndo } from './editor-history/undo';\nexport { default as EditorNotices } from './editor-notices';\nexport { default as EditorSnackbars } from './editor-snackbars';\nexport { default as EntitiesSavedStates } from './entities-saved-states';\nexport { default as ErrorBoundary } from './error-boundary';\nexport { default as LocalAutosaveMonitor } from './local-autosave-monitor';\nexport { default as PageAttributesCheck } from './page-attributes/check';\nexport { default as PageAttributesOrder } from './page-attributes/order';\nexport { default as PageAttributesParent } from './page-attributes/parent';\nexport { default as PageTemplate } from './post-template';\nexport { default as PostAuthor } from './post-author';\nexport { default as PostAuthorCheck } from './post-author/check';\nexport { default as PostComments } from './post-comments';\nexport { default as PostExcerpt } from './post-excerpt';\nexport { default as PostExcerptCheck } from './post-excerpt/check';\nexport { default as PostFeaturedImage } from './post-featured-image';\nexport { default as PostFeaturedImageCheck } from './post-featured-image/check';\nexport { default as PostFormat } from './post-format';\nexport { default as PostFormatCheck } from './post-format/check';\nexport { default as PostLastRevision } from './post-last-revision';\nexport { default as PostLastRevisionCheck } from './post-last-revision/check';\nexport { default as PostLockedModal } from './post-locked-modal';\nexport { default as PostPendingStatus } from './post-pending-status';\nexport { default as PostPendingStatusCheck } from './post-pending-status/check';\nexport { default as PostPingbacks } from './post-pingbacks';\nexport { default as PostPreviewButton } from './post-preview-button';\nexport { default as PostPublishButton } from './post-publish-button';\nexport { default as PostPublishButtonLabel } from './post-publish-button/label';\nexport { default as PostPublishPanel } from './post-publish-panel';\nexport { default as PostSavedState } from './post-saved-state';\nexport { default as PostSchedule } from './post-schedule';\nexport { default as PostScheduleCheck } from './post-schedule/check';\nexport {\n\tdefault as PostScheduleLabel,\n\tusePostScheduleLabel,\n} from './post-schedule/label';\nexport { default as PostSlug } from './post-slug';\nexport { default as PostSlugCheck } from './post-slug/check';\nexport { default as PostSticky } from './post-sticky';\nexport { default as PostStickyCheck } from './post-sticky/check';\nexport { default as PostSwitchToDraftButton } from './post-switch-to-draft-button';\nexport { default as PostTaxonomies } from './post-taxonomies';\nexport { default as PostTaxonomiesFlatTermSelector } from './post-taxonomies/flat-term-selector';\nexport { default as PostTaxonomiesHierarchicalTermSelector } from './post-taxonomies/hierarchical-term-selector';\nexport { default as PostTaxonomiesCheck } from './post-taxonomies/check';\nexport { default as PostTextEditor } from './post-text-editor';\nexport { default as PostTitle } from './post-title';\nexport { default as PostTrash } from './post-trash';\nexport { default as PostTrashCheck } from './post-trash/check';\nexport { default as PostTypeSupportCheck } from './post-type-support-check';\nexport { default as PostVisibility } from './post-visibility';\nexport { default as PostVisibilityLabel } from './post-visibility/label';\nexport { default as PostVisibilityCheck } from './post-visibility/check';\nexport { default as TableOfContents } from './table-of-contents';\nexport { default as ThemeSupportCheck } from './theme-support-check';\nexport { default as UnsavedChangesWarning } from './unsaved-changes-warning';\nexport { default as WordCount } from './word-count';\n\n// State Related Components.\nexport { default as EditorProvider } from './provider';\n\nexport * from './deprecated';\n"]}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import { createElement } from "@wordpress/element";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* External dependencies
|
|
5
|
-
*/
|
|
6
|
-
import { once, uniqueId, omit } from 'lodash';
|
|
7
3
|
/**
|
|
8
4
|
* WordPress dependencies
|
|
9
5
|
*/
|
|
10
|
-
|
|
11
6
|
import { useCallback, useEffect, useRef } from '@wordpress/element';
|
|
12
7
|
import { ifCondition, usePrevious } from '@wordpress/compose';
|
|
13
8
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
@@ -22,29 +17,36 @@ import AutosaveMonitor from '../autosave-monitor';
|
|
|
22
17
|
import { localAutosaveGet, localAutosaveClear } from '../../store/local-autosave';
|
|
23
18
|
import { store as editorStore } from '../../store';
|
|
24
19
|
const requestIdleCallback = window.requestIdleCallback ? window.requestIdleCallback : window.requestAnimationFrame;
|
|
20
|
+
let hasStorageSupport;
|
|
21
|
+
let uniqueId = 0;
|
|
25
22
|
/**
|
|
26
23
|
* Function which returns true if the current environment supports browser
|
|
27
24
|
* sessionStorage, or false otherwise. The result of this function is cached and
|
|
28
25
|
* reused in subsequent invocations.
|
|
29
26
|
*/
|
|
30
27
|
|
|
31
|
-
const hasSessionStorageSupport =
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
const hasSessionStorageSupport = () => {
|
|
29
|
+
if (typeof hasStorageSupport === 'undefined') {
|
|
30
|
+
try {
|
|
31
|
+
// Private Browsing in Safari 10 and earlier will throw an error when
|
|
32
|
+
// attempting to set into sessionStorage. The test here is intentional in
|
|
33
|
+
// causing a thrown error as condition bailing from local autosave.
|
|
34
|
+
window.sessionStorage.setItem('__wpEditorTestSessionStorage', '');
|
|
35
|
+
window.sessionStorage.removeItem('__wpEditorTestSessionStorage');
|
|
36
|
+
hasStorageSupport = true;
|
|
37
|
+
} catch (error) {
|
|
38
|
+
hasStorageSupport = false;
|
|
39
|
+
}
|
|
41
40
|
}
|
|
42
|
-
|
|
41
|
+
|
|
42
|
+
return hasStorageSupport;
|
|
43
|
+
};
|
|
43
44
|
/**
|
|
44
45
|
* Custom hook which manages the creation of a notice prompting the user to
|
|
45
46
|
* restore a local autosave, if one exists.
|
|
46
47
|
*/
|
|
47
48
|
|
|
49
|
+
|
|
48
50
|
function useAutosaveNotice() {
|
|
49
51
|
const {
|
|
50
52
|
postId,
|
|
@@ -108,14 +110,18 @@ function useAutosaveNotice() {
|
|
|
108
110
|
return;
|
|
109
111
|
}
|
|
110
112
|
|
|
111
|
-
const noticeId = uniqueId
|
|
113
|
+
const noticeId = `wpEditorAutosaveRestore${++uniqueId}`;
|
|
112
114
|
createWarningNotice(__('The backup of this post in your browser is different from the version below.'), {
|
|
113
115
|
id: noticeId,
|
|
114
116
|
actions: [{
|
|
115
117
|
label: __('Restore the backup'),
|
|
116
118
|
|
|
117
119
|
onClick() {
|
|
118
|
-
|
|
120
|
+
const {
|
|
121
|
+
content: editsContent,
|
|
122
|
+
...editsWithoutContent
|
|
123
|
+
} = edits;
|
|
124
|
+
editPost(editsWithoutContent);
|
|
119
125
|
resetEditorBlocks(parse(edits.content));
|
|
120
126
|
removeNotice(noticeId);
|
|
121
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/local-autosave-monitor/index.js"],"names":["once","uniqueId","omit","useCallback","useEffect","useRef","ifCondition","usePrevious","useSelect","useDispatch","__","parse","store","noticesStore","AutosaveMonitor","localAutosaveGet","localAutosaveClear","editorStore","requestIdleCallback","window","requestAnimationFrame","hasSessionStorageSupport","sessionStorage","setItem","removeItem","error","useAutosaveNotice","postId","isEditedPostNew","hasRemoteAutosave","select","getCurrentPostId","getEditorSettings","autosave","getEditedPostAttribute","createWarningNotice","removeNotice","editPost","resetEditorBlocks","localAutosave","JSON","post_title","title","content","excerpt","edits","hasDifference","Object","keys","some","key","noticeId","id","actions","label","onClick","useAutosavePurge","isDirty","isAutosaving","didError","isEditedPostDirty","isAutosavingPost","didPostSaveRequestFail","lastIsDirty","lastIsAutosaving","current","wasEditedPostNew","prevPostId","LocalAutosaveMonitor","deferredAutosave","local","localAutosaveInterval"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { once, uniqueId, omit } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useCallback, useEffect, useRef } from '@wordpress/element';\nimport { ifCondition, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { parse } from '@wordpress/blocks';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport AutosaveMonitor from '../autosave-monitor';\nimport {\n\tlocalAutosaveGet,\n\tlocalAutosaveClear,\n} from '../../store/local-autosave';\nimport { store as editorStore } from '../../store';\n\nconst requestIdleCallback = window.requestIdleCallback\n\t? window.requestIdleCallback\n\t: window.requestAnimationFrame;\n\n/**\n * Function which returns true if the current environment supports browser\n * sessionStorage, or false otherwise. The result of this function is cached and\n * reused in subsequent invocations.\n */\nconst hasSessionStorageSupport = once( () => {\n\ttry {\n\t\t// Private Browsing in Safari 10 and earlier will throw an error when\n\t\t// attempting to set into sessionStorage. The test here is intentional in\n\t\t// causing a thrown error as condition bailing from local autosave.\n\t\twindow.sessionStorage.setItem( '__wpEditorTestSessionStorage', '' );\n\t\twindow.sessionStorage.removeItem( '__wpEditorTestSessionStorage' );\n\t\treturn true;\n\t} catch ( error ) {\n\t\treturn false;\n\t}\n} );\n\n/**\n * Custom hook which manages the creation of a notice prompting the user to\n * restore a local autosave, if one exists.\n */\nfunction useAutosaveNotice() {\n\tconst { postId, isEditedPostNew, hasRemoteAutosave } = useSelect(\n\t\t( select ) => ( {\n\t\t\tpostId: select( editorStore ).getCurrentPostId(),\n\t\t\tisEditedPostNew: select( editorStore ).isEditedPostNew(),\n\t\t\thasRemoteAutosave:\n\t\t\t\t!! select( editorStore ).getEditorSettings().autosave,\n\t\t} ),\n\t\t[]\n\t);\n\tconst { getEditedPostAttribute } = useSelect( editorStore );\n\n\tconst { createWarningNotice, removeNotice } = useDispatch( noticesStore );\n\tconst { editPost, resetEditorBlocks } = useDispatch( editorStore );\n\n\tuseEffect( () => {\n\t\tlet localAutosave = localAutosaveGet( postId, isEditedPostNew );\n\t\tif ( ! localAutosave ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tlocalAutosave = JSON.parse( localAutosave );\n\t\t} catch ( error ) {\n\t\t\t// Not usable if it can't be parsed.\n\t\t\treturn;\n\t\t}\n\n\t\tconst { post_title: title, content, excerpt } = localAutosave;\n\t\tconst edits = { title, content, excerpt };\n\n\t\t{\n\t\t\t// Only display a notice if there is a difference between what has been\n\t\t\t// saved and that which is stored in sessionStorage.\n\t\t\tconst hasDifference = Object.keys( edits ).some( ( key ) => {\n\t\t\t\treturn edits[ key ] !== getEditedPostAttribute( key );\n\t\t\t} );\n\n\t\t\tif ( ! hasDifference ) {\n\t\t\t\t// If there is no difference, it can be safely ejected from storage.\n\t\t\t\tlocalAutosaveClear( postId, isEditedPostNew );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif ( hasRemoteAutosave ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst noticeId = uniqueId( 'wpEditorAutosaveRestore' );\n\t\tcreateWarningNotice(\n\t\t\t__(\n\t\t\t\t'The backup of this post in your browser is different from the version below.'\n\t\t\t),\n\t\t\t{\n\t\t\t\tid: noticeId,\n\t\t\t\tactions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: __( 'Restore the backup' ),\n\t\t\t\t\t\tonClick() {\n\t\t\t\t\t\t\teditPost( omit( edits, [ 'content' ] ) );\n\t\t\t\t\t\t\tresetEditorBlocks( parse( edits.content ) );\n\t\t\t\t\t\t\tremoveNotice( noticeId );\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t);\n\t}, [ isEditedPostNew, postId ] );\n}\n\n/**\n * Custom hook which ejects a local autosave after a successful save occurs.\n */\nfunction useAutosavePurge() {\n\tconst { postId, isEditedPostNew, isDirty, isAutosaving, didError } =\n\t\tuseSelect(\n\t\t\t( select ) => ( {\n\t\t\t\tpostId: select( editorStore ).getCurrentPostId(),\n\t\t\t\tisEditedPostNew: select( editorStore ).isEditedPostNew(),\n\t\t\t\tisDirty: select( editorStore ).isEditedPostDirty(),\n\t\t\t\tisAutosaving: select( editorStore ).isAutosavingPost(),\n\t\t\t\tdidError: select( editorStore ).didPostSaveRequestFail(),\n\t\t\t} ),\n\t\t\t[]\n\t\t);\n\n\tconst lastIsDirty = useRef( isDirty );\n\tconst lastIsAutosaving = useRef( isAutosaving );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! didError &&\n\t\t\t( ( lastIsAutosaving.current && ! isAutosaving ) ||\n\t\t\t\t( lastIsDirty.current && ! isDirty ) )\n\t\t) {\n\t\t\tlocalAutosaveClear( postId, isEditedPostNew );\n\t\t}\n\n\t\tlastIsDirty.current = isDirty;\n\t\tlastIsAutosaving.current = isAutosaving;\n\t}, [ isDirty, isAutosaving, didError ] );\n\n\t// Once the isEditedPostNew changes from true to false, let's clear the auto-draft autosave.\n\tconst wasEditedPostNew = usePrevious( isEditedPostNew );\n\tconst prevPostId = usePrevious( postId );\n\tuseEffect( () => {\n\t\tif ( prevPostId === postId && wasEditedPostNew && ! isEditedPostNew ) {\n\t\t\tlocalAutosaveClear( postId, true );\n\t\t}\n\t}, [ isEditedPostNew, postId ] );\n}\n\nfunction LocalAutosaveMonitor() {\n\tconst { autosave } = useDispatch( editorStore );\n\tconst deferredAutosave = useCallback( () => {\n\t\trequestIdleCallback( () => autosave( { local: true } ) );\n\t}, [] );\n\tuseAutosaveNotice();\n\tuseAutosavePurge();\n\n\tconst { localAutosaveInterval } = useSelect(\n\t\t( select ) => ( {\n\t\t\tlocalAutosaveInterval:\n\t\t\t\tselect( editorStore ).getEditorSettings().localAutosaveInterval,\n\t\t} ),\n\t\t[]\n\t);\n\n\treturn (\n\t\t<AutosaveMonitor\n\t\t\tinterval={ localAutosaveInterval }\n\t\t\tautosave={ deferredAutosave }\n\t\t/>\n\t);\n}\n\nexport default ifCondition( hasSessionStorageSupport )( LocalAutosaveMonitor );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/editor/src/components/local-autosave-monitor/index.js"],"names":["useCallback","useEffect","useRef","ifCondition","usePrevious","useSelect","useDispatch","__","parse","store","noticesStore","AutosaveMonitor","localAutosaveGet","localAutosaveClear","editorStore","requestIdleCallback","window","requestAnimationFrame","hasStorageSupport","uniqueId","hasSessionStorageSupport","sessionStorage","setItem","removeItem","error","useAutosaveNotice","postId","isEditedPostNew","hasRemoteAutosave","select","getCurrentPostId","getEditorSettings","autosave","getEditedPostAttribute","createWarningNotice","removeNotice","editPost","resetEditorBlocks","localAutosave","JSON","post_title","title","content","excerpt","edits","hasDifference","Object","keys","some","key","noticeId","id","actions","label","onClick","editsContent","editsWithoutContent","useAutosavePurge","isDirty","isAutosaving","didError","isEditedPostDirty","isAutosavingPost","didPostSaveRequestFail","lastIsDirty","lastIsAutosaving","current","wasEditedPostNew","prevPostId","LocalAutosaveMonitor","deferredAutosave","local","localAutosaveInterval"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useEffect, useRef } from '@wordpress/element';\nimport { ifCondition, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { parse } from '@wordpress/blocks';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport AutosaveMonitor from '../autosave-monitor';\nimport {\n\tlocalAutosaveGet,\n\tlocalAutosaveClear,\n} from '../../store/local-autosave';\nimport { store as editorStore } from '../../store';\n\nconst requestIdleCallback = window.requestIdleCallback\n\t? window.requestIdleCallback\n\t: window.requestAnimationFrame;\n\nlet hasStorageSupport;\nlet uniqueId = 0;\n\n/**\n * Function which returns true if the current environment supports browser\n * sessionStorage, or false otherwise. The result of this function is cached and\n * reused in subsequent invocations.\n */\nconst hasSessionStorageSupport = () => {\n\tif ( typeof hasStorageSupport === 'undefined' ) {\n\t\ttry {\n\t\t\t// Private Browsing in Safari 10 and earlier will throw an error when\n\t\t\t// attempting to set into sessionStorage. The test here is intentional in\n\t\t\t// causing a thrown error as condition bailing from local autosave.\n\t\t\twindow.sessionStorage.setItem( '__wpEditorTestSessionStorage', '' );\n\t\t\twindow.sessionStorage.removeItem( '__wpEditorTestSessionStorage' );\n\t\t\thasStorageSupport = true;\n\t\t} catch ( error ) {\n\t\t\thasStorageSupport = false;\n\t\t}\n\t}\n\n\treturn hasStorageSupport;\n};\n\n/**\n * Custom hook which manages the creation of a notice prompting the user to\n * restore a local autosave, if one exists.\n */\nfunction useAutosaveNotice() {\n\tconst { postId, isEditedPostNew, hasRemoteAutosave } = useSelect(\n\t\t( select ) => ( {\n\t\t\tpostId: select( editorStore ).getCurrentPostId(),\n\t\t\tisEditedPostNew: select( editorStore ).isEditedPostNew(),\n\t\t\thasRemoteAutosave:\n\t\t\t\t!! select( editorStore ).getEditorSettings().autosave,\n\t\t} ),\n\t\t[]\n\t);\n\tconst { getEditedPostAttribute } = useSelect( editorStore );\n\n\tconst { createWarningNotice, removeNotice } = useDispatch( noticesStore );\n\tconst { editPost, resetEditorBlocks } = useDispatch( editorStore );\n\n\tuseEffect( () => {\n\t\tlet localAutosave = localAutosaveGet( postId, isEditedPostNew );\n\t\tif ( ! localAutosave ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tlocalAutosave = JSON.parse( localAutosave );\n\t\t} catch ( error ) {\n\t\t\t// Not usable if it can't be parsed.\n\t\t\treturn;\n\t\t}\n\n\t\tconst { post_title: title, content, excerpt } = localAutosave;\n\t\tconst edits = { title, content, excerpt };\n\n\t\t{\n\t\t\t// Only display a notice if there is a difference between what has been\n\t\t\t// saved and that which is stored in sessionStorage.\n\t\t\tconst hasDifference = Object.keys( edits ).some( ( key ) => {\n\t\t\t\treturn edits[ key ] !== getEditedPostAttribute( key );\n\t\t\t} );\n\n\t\t\tif ( ! hasDifference ) {\n\t\t\t\t// If there is no difference, it can be safely ejected from storage.\n\t\t\t\tlocalAutosaveClear( postId, isEditedPostNew );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif ( hasRemoteAutosave ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst noticeId = `wpEditorAutosaveRestore${ ++uniqueId }`;\n\t\tcreateWarningNotice(\n\t\t\t__(\n\t\t\t\t'The backup of this post in your browser is different from the version below.'\n\t\t\t),\n\t\t\t{\n\t\t\t\tid: noticeId,\n\t\t\t\tactions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: __( 'Restore the backup' ),\n\t\t\t\t\t\tonClick() {\n\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\tcontent: editsContent,\n\t\t\t\t\t\t\t\t...editsWithoutContent\n\t\t\t\t\t\t\t} = edits;\n\t\t\t\t\t\t\teditPost( editsWithoutContent );\n\t\t\t\t\t\t\tresetEditorBlocks( parse( edits.content ) );\n\t\t\t\t\t\t\tremoveNotice( noticeId );\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t);\n\t}, [ isEditedPostNew, postId ] );\n}\n\n/**\n * Custom hook which ejects a local autosave after a successful save occurs.\n */\nfunction useAutosavePurge() {\n\tconst { postId, isEditedPostNew, isDirty, isAutosaving, didError } =\n\t\tuseSelect(\n\t\t\t( select ) => ( {\n\t\t\t\tpostId: select( editorStore ).getCurrentPostId(),\n\t\t\t\tisEditedPostNew: select( editorStore ).isEditedPostNew(),\n\t\t\t\tisDirty: select( editorStore ).isEditedPostDirty(),\n\t\t\t\tisAutosaving: select( editorStore ).isAutosavingPost(),\n\t\t\t\tdidError: select( editorStore ).didPostSaveRequestFail(),\n\t\t\t} ),\n\t\t\t[]\n\t\t);\n\n\tconst lastIsDirty = useRef( isDirty );\n\tconst lastIsAutosaving = useRef( isAutosaving );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! didError &&\n\t\t\t( ( lastIsAutosaving.current && ! isAutosaving ) ||\n\t\t\t\t( lastIsDirty.current && ! isDirty ) )\n\t\t) {\n\t\t\tlocalAutosaveClear( postId, isEditedPostNew );\n\t\t}\n\n\t\tlastIsDirty.current = isDirty;\n\t\tlastIsAutosaving.current = isAutosaving;\n\t}, [ isDirty, isAutosaving, didError ] );\n\n\t// Once the isEditedPostNew changes from true to false, let's clear the auto-draft autosave.\n\tconst wasEditedPostNew = usePrevious( isEditedPostNew );\n\tconst prevPostId = usePrevious( postId );\n\tuseEffect( () => {\n\t\tif ( prevPostId === postId && wasEditedPostNew && ! isEditedPostNew ) {\n\t\t\tlocalAutosaveClear( postId, true );\n\t\t}\n\t}, [ isEditedPostNew, postId ] );\n}\n\nfunction LocalAutosaveMonitor() {\n\tconst { autosave } = useDispatch( editorStore );\n\tconst deferredAutosave = useCallback( () => {\n\t\trequestIdleCallback( () => autosave( { local: true } ) );\n\t}, [] );\n\tuseAutosaveNotice();\n\tuseAutosavePurge();\n\n\tconst { localAutosaveInterval } = useSelect(\n\t\t( select ) => ( {\n\t\t\tlocalAutosaveInterval:\n\t\t\t\tselect( editorStore ).getEditorSettings().localAutosaveInterval,\n\t\t} ),\n\t\t[]\n\t);\n\n\treturn (\n\t\t<AutosaveMonitor\n\t\t\tinterval={ localAutosaveInterval }\n\t\t\tautosave={ deferredAutosave }\n\t\t/>\n\t);\n}\n\nexport default ifCondition( hasSessionStorageSupport )( LocalAutosaveMonitor );\n"]}
|
|
@@ -3,7 +3,7 @@ import { createElement } from "@wordpress/element";
|
|
|
3
3
|
/**
|
|
4
4
|
* External dependencies
|
|
5
5
|
*/
|
|
6
|
-
import { get, unescape as unescapeString, debounce, repeat, find,
|
|
6
|
+
import { get, unescape as unescapeString, debounce, repeat, find, deburr } from 'lodash';
|
|
7
7
|
/**
|
|
8
8
|
* WordPress dependencies
|
|
9
9
|
*/
|
|
@@ -104,7 +104,7 @@ export function PageAttributesParent() {
|
|
|
104
104
|
const priorityB = getItemPriority(b.rawName, fieldValue);
|
|
105
105
|
return priorityA >= priorityB ? 1 : -1;
|
|
106
106
|
});
|
|
107
|
-
return
|
|
107
|
+
return sortedNodes.flat();
|
|
108
108
|
};
|
|
109
109
|
|
|
110
110
|
let tree = pageItems.map(item => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/page-attributes/parent.js"],"names":["get","unescape","unescapeString","debounce","repeat","find","flatten","deburr","__","ComboboxControl","useState","useMemo","useSelect","useDispatch","decodeEntities","store","coreStore","buildTermsTree","editorStore","getTitle","post","title","rendered","id","getItemPriority","name","searchValue","normalizedName","toLowerCase","normalizedSearch","startsWith","length","Infinity","PageAttributesParent","editPost","fieldValue","setFieldValue","parentPost","parentPostId","items","postType","select","getPostType","getEntityRecords","getEntityRecord","getCurrentPostId","getEditedPostAttribute","postTypeSlug","pageId","pType","postId","isHierarchical","query","per_page","exclude","parent_exclude","orderby","order","_fields","search","parentPageLabel","pageItems","parentOptions","getOptionsFromTree","tree","level","mappedNodes","map","treeNode","value","label","rawName","children","sortedNodes","sort","a","b","priorityA","priorityB","item","parent","opts","optsHasParent","unshift","handleKeydown","inputValue","handleChange","selectedPostId"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tget,\n\tunescape as unescapeString,\n\tdebounce,\n\trepeat,\n\tfind,\n\tflatten,\n\tdeburr,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ComboboxControl } from '@wordpress/components';\nimport { useState, useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { buildTermsTree } from '../../utils/terms';\nimport { store as editorStore } from '../../store';\n\nfunction getTitle( post ) {\n\treturn post?.title?.rendered\n\t\t? decodeEntities( post.title.rendered )\n\t\t: `#${ post.id } (${ __( 'no title' ) })`;\n}\n\nexport const getItemPriority = ( name, searchValue ) => {\n\tconst normalizedName = deburr( name ).toLowerCase();\n\tconst normalizedSearch = deburr( searchValue ).toLowerCase();\n\tif ( normalizedName === normalizedSearch ) {\n\t\treturn 0;\n\t}\n\n\tif ( normalizedName.startsWith( normalizedSearch ) ) {\n\t\treturn normalizedName.length;\n\t}\n\n\treturn Infinity;\n};\n\nexport function PageAttributesParent() {\n\tconst { editPost } = useDispatch( editorStore );\n\tconst [ fieldValue, setFieldValue ] = useState( false );\n\tconst { parentPost, parentPostId, items, postType } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getPostType, getEntityRecords, getEntityRecord } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst { getCurrentPostId, getEditedPostAttribute } =\n\t\t\t\tselect( editorStore );\n\t\t\tconst postTypeSlug = getEditedPostAttribute( 'type' );\n\t\t\tconst pageId = getEditedPostAttribute( 'parent' );\n\t\t\tconst pType = getPostType( postTypeSlug );\n\t\t\tconst postId = getCurrentPostId();\n\t\t\tconst isHierarchical = get( pType, [ 'hierarchical' ], false );\n\t\t\tconst query = {\n\t\t\t\tper_page: 100,\n\t\t\t\texclude: postId,\n\t\t\t\tparent_exclude: postId,\n\t\t\t\torderby: 'menu_order',\n\t\t\t\torder: 'asc',\n\t\t\t\t_fields: 'id,title,parent',\n\t\t\t};\n\n\t\t\t// Perform a search when the field is changed.\n\t\t\tif ( !! fieldValue ) {\n\t\t\t\tquery.search = fieldValue;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tparentPostId: pageId,\n\t\t\t\tparentPost: pageId\n\t\t\t\t\t? getEntityRecord( 'postType', postTypeSlug, pageId )\n\t\t\t\t\t: null,\n\t\t\t\titems: isHierarchical\n\t\t\t\t\t? getEntityRecords( 'postType', postTypeSlug, query )\n\t\t\t\t\t: [],\n\t\t\t\tpostType: pType,\n\t\t\t};\n\t\t},\n\t\t[ fieldValue ]\n\t);\n\n\tconst isHierarchical = get( postType, [ 'hierarchical' ], false );\n\tconst parentPageLabel = get( postType, [ 'labels', 'parent_item_colon' ] );\n\tconst pageItems = items || [];\n\n\tconst parentOptions = useMemo( () => {\n\t\tconst getOptionsFromTree = ( tree, level = 0 ) => {\n\t\t\tconst mappedNodes = tree.map( ( treeNode ) => [\n\t\t\t\t{\n\t\t\t\t\tvalue: treeNode.id,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\trepeat( '— ', level ) + unescapeString( treeNode.name ),\n\t\t\t\t\trawName: treeNode.name,\n\t\t\t\t},\n\t\t\t\t...getOptionsFromTree( treeNode.children || [], level + 1 ),\n\t\t\t] );\n\n\t\t\tconst sortedNodes = mappedNodes.sort( ( [ a ], [ b ] ) => {\n\t\t\t\tconst priorityA = getItemPriority( a.rawName, fieldValue );\n\t\t\t\tconst priorityB = getItemPriority( b.rawName, fieldValue );\n\t\t\t\treturn priorityA >= priorityB ? 1 : -1;\n\t\t\t} );\n\n\t\t\treturn flatten( sortedNodes );\n\t\t};\n\n\t\tlet tree = pageItems.map( ( item ) => ( {\n\t\t\tid: item.id,\n\t\t\tparent: item.parent,\n\t\t\tname: getTitle( item ),\n\t\t} ) );\n\n\t\t// Only build a hierarchical tree when not searching.\n\t\tif ( ! fieldValue ) {\n\t\t\ttree = buildTermsTree( tree );\n\t\t}\n\n\t\tconst opts = getOptionsFromTree( tree );\n\n\t\t// Ensure the current parent is in the options list.\n\t\tconst optsHasParent = find(\n\t\t\topts,\n\t\t\t( item ) => item.value === parentPostId\n\t\t);\n\t\tif ( parentPost && ! optsHasParent ) {\n\t\t\topts.unshift( {\n\t\t\t\tvalue: parentPostId,\n\t\t\t\tlabel: getTitle( parentPost ),\n\t\t\t} );\n\t\t}\n\t\treturn opts;\n\t}, [ pageItems, fieldValue ] );\n\n\tif ( ! isHierarchical || ! parentPageLabel ) {\n\t\treturn null;\n\t}\n\t/**\n\t * Handle user input.\n\t *\n\t * @param {string} inputValue The current value of the input field.\n\t */\n\tconst handleKeydown = ( inputValue ) => {\n\t\tsetFieldValue( inputValue );\n\t};\n\n\t/**\n\t * Handle author selection.\n\t *\n\t * @param {Object} selectedPostId The selected Author.\n\t */\n\tconst handleChange = ( selectedPostId ) => {\n\t\teditPost( { parent: selectedPostId } );\n\t};\n\n\treturn (\n\t\t<ComboboxControl\n\t\t\tclassName=\"editor-page-attributes__parent\"\n\t\t\tlabel={ parentPageLabel }\n\t\t\tvalue={ parentPostId }\n\t\t\toptions={ parentOptions }\n\t\t\tonFilterValueChange={ debounce( handleKeydown, 300 ) }\n\t\t\tonChange={ handleChange }\n\t\t/>\n\t);\n}\n\nexport default PageAttributesParent;\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/editor/src/components/page-attributes/parent.js"],"names":["get","unescape","unescapeString","debounce","repeat","find","deburr","__","ComboboxControl","useState","useMemo","useSelect","useDispatch","decodeEntities","store","coreStore","buildTermsTree","editorStore","getTitle","post","title","rendered","id","getItemPriority","name","searchValue","normalizedName","toLowerCase","normalizedSearch","startsWith","length","Infinity","PageAttributesParent","editPost","fieldValue","setFieldValue","parentPost","parentPostId","items","postType","select","getPostType","getEntityRecords","getEntityRecord","getCurrentPostId","getEditedPostAttribute","postTypeSlug","pageId","pType","postId","isHierarchical","query","per_page","exclude","parent_exclude","orderby","order","_fields","search","parentPageLabel","pageItems","parentOptions","getOptionsFromTree","tree","level","mappedNodes","map","treeNode","value","label","rawName","children","sortedNodes","sort","a","b","priorityA","priorityB","flat","item","parent","opts","optsHasParent","unshift","handleKeydown","inputValue","handleChange","selectedPostId"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tget,\n\tunescape as unescapeString,\n\tdebounce,\n\trepeat,\n\tfind,\n\tdeburr,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ComboboxControl } from '@wordpress/components';\nimport { useState, useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { buildTermsTree } from '../../utils/terms';\nimport { store as editorStore } from '../../store';\n\nfunction getTitle( post ) {\n\treturn post?.title?.rendered\n\t\t? decodeEntities( post.title.rendered )\n\t\t: `#${ post.id } (${ __( 'no title' ) })`;\n}\n\nexport const getItemPriority = ( name, searchValue ) => {\n\tconst normalizedName = deburr( name ).toLowerCase();\n\tconst normalizedSearch = deburr( searchValue ).toLowerCase();\n\tif ( normalizedName === normalizedSearch ) {\n\t\treturn 0;\n\t}\n\n\tif ( normalizedName.startsWith( normalizedSearch ) ) {\n\t\treturn normalizedName.length;\n\t}\n\n\treturn Infinity;\n};\n\nexport function PageAttributesParent() {\n\tconst { editPost } = useDispatch( editorStore );\n\tconst [ fieldValue, setFieldValue ] = useState( false );\n\tconst { parentPost, parentPostId, items, postType } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getPostType, getEntityRecords, getEntityRecord } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst { getCurrentPostId, getEditedPostAttribute } =\n\t\t\t\tselect( editorStore );\n\t\t\tconst postTypeSlug = getEditedPostAttribute( 'type' );\n\t\t\tconst pageId = getEditedPostAttribute( 'parent' );\n\t\t\tconst pType = getPostType( postTypeSlug );\n\t\t\tconst postId = getCurrentPostId();\n\t\t\tconst isHierarchical = get( pType, [ 'hierarchical' ], false );\n\t\t\tconst query = {\n\t\t\t\tper_page: 100,\n\t\t\t\texclude: postId,\n\t\t\t\tparent_exclude: postId,\n\t\t\t\torderby: 'menu_order',\n\t\t\t\torder: 'asc',\n\t\t\t\t_fields: 'id,title,parent',\n\t\t\t};\n\n\t\t\t// Perform a search when the field is changed.\n\t\t\tif ( !! fieldValue ) {\n\t\t\t\tquery.search = fieldValue;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tparentPostId: pageId,\n\t\t\t\tparentPost: pageId\n\t\t\t\t\t? getEntityRecord( 'postType', postTypeSlug, pageId )\n\t\t\t\t\t: null,\n\t\t\t\titems: isHierarchical\n\t\t\t\t\t? getEntityRecords( 'postType', postTypeSlug, query )\n\t\t\t\t\t: [],\n\t\t\t\tpostType: pType,\n\t\t\t};\n\t\t},\n\t\t[ fieldValue ]\n\t);\n\n\tconst isHierarchical = get( postType, [ 'hierarchical' ], false );\n\tconst parentPageLabel = get( postType, [ 'labels', 'parent_item_colon' ] );\n\tconst pageItems = items || [];\n\n\tconst parentOptions = useMemo( () => {\n\t\tconst getOptionsFromTree = ( tree, level = 0 ) => {\n\t\t\tconst mappedNodes = tree.map( ( treeNode ) => [\n\t\t\t\t{\n\t\t\t\t\tvalue: treeNode.id,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\trepeat( '— ', level ) + unescapeString( treeNode.name ),\n\t\t\t\t\trawName: treeNode.name,\n\t\t\t\t},\n\t\t\t\t...getOptionsFromTree( treeNode.children || [], level + 1 ),\n\t\t\t] );\n\n\t\t\tconst sortedNodes = mappedNodes.sort( ( [ a ], [ b ] ) => {\n\t\t\t\tconst priorityA = getItemPriority( a.rawName, fieldValue );\n\t\t\t\tconst priorityB = getItemPriority( b.rawName, fieldValue );\n\t\t\t\treturn priorityA >= priorityB ? 1 : -1;\n\t\t\t} );\n\n\t\t\treturn sortedNodes.flat();\n\t\t};\n\n\t\tlet tree = pageItems.map( ( item ) => ( {\n\t\t\tid: item.id,\n\t\t\tparent: item.parent,\n\t\t\tname: getTitle( item ),\n\t\t} ) );\n\n\t\t// Only build a hierarchical tree when not searching.\n\t\tif ( ! fieldValue ) {\n\t\t\ttree = buildTermsTree( tree );\n\t\t}\n\n\t\tconst opts = getOptionsFromTree( tree );\n\n\t\t// Ensure the current parent is in the options list.\n\t\tconst optsHasParent = find(\n\t\t\topts,\n\t\t\t( item ) => item.value === parentPostId\n\t\t);\n\t\tif ( parentPost && ! optsHasParent ) {\n\t\t\topts.unshift( {\n\t\t\t\tvalue: parentPostId,\n\t\t\t\tlabel: getTitle( parentPost ),\n\t\t\t} );\n\t\t}\n\t\treturn opts;\n\t}, [ pageItems, fieldValue ] );\n\n\tif ( ! isHierarchical || ! parentPageLabel ) {\n\t\treturn null;\n\t}\n\t/**\n\t * Handle user input.\n\t *\n\t * @param {string} inputValue The current value of the input field.\n\t */\n\tconst handleKeydown = ( inputValue ) => {\n\t\tsetFieldValue( inputValue );\n\t};\n\n\t/**\n\t * Handle author selection.\n\t *\n\t * @param {Object} selectedPostId The selected Author.\n\t */\n\tconst handleChange = ( selectedPostId ) => {\n\t\teditPost( { parent: selectedPostId } );\n\t};\n\n\treturn (\n\t\t<ComboboxControl\n\t\t\tclassName=\"editor-page-attributes__parent\"\n\t\t\tlabel={ parentPageLabel }\n\t\t\tvalue={ parentPostId }\n\t\t\toptions={ parentOptions }\n\t\t\tonFilterValueChange={ debounce( handleKeydown, 300 ) }\n\t\t\tonChange={ handleChange }\n\t\t/>\n\t);\n}\n\nexport default PageAttributesParent;\n"]}
|
|
@@ -22,14 +22,14 @@ import { store as editorStore } from '../../store';
|
|
|
22
22
|
|
|
23
23
|
function MaybeCategoryPanel() {
|
|
24
24
|
const hasNoCategory = useSelect(select => {
|
|
25
|
-
var _select$getEntityReco;
|
|
25
|
+
var _select$getEntityReco, _select$getEntityReco2;
|
|
26
26
|
|
|
27
27
|
const postType = select(editorStore).getCurrentPostType();
|
|
28
28
|
const categoriesTaxonomy = select(coreStore).getTaxonomy('category');
|
|
29
|
-
const
|
|
30
|
-
const defaultCategory = (_select$
|
|
31
|
-
|
|
32
|
-
})) === null || _select$
|
|
29
|
+
const defaultCategoryId = (_select$getEntityReco = select(coreStore).getEntityRecord('root', 'site')) === null || _select$getEntityReco === void 0 ? void 0 : _select$getEntityReco.default_category;
|
|
30
|
+
const defaultCategory = (_select$getEntityReco2 = select(coreStore).getEntityRecords('taxonomy', 'category', {
|
|
31
|
+
id: defaultCategoryId
|
|
32
|
+
})) === null || _select$getEntityReco2 === void 0 ? void 0 : _select$getEntityReco2[0];
|
|
33
33
|
const postTypeSupportsCategories = categoriesTaxonomy && some(categoriesTaxonomy.types, type => type === postType);
|
|
34
34
|
const categories = categoriesTaxonomy && select(editorStore).getEditedPostAttribute(categoriesTaxonomy.rest_base); // This boolean should return true if everything is loaded
|
|
35
35
|
// ( categoriesTaxonomy, defaultCategory )
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/post-publish-panel/maybe-category-panel.js"],"names":["some","__","useSelect","PanelBody","store","coreStore","useState","useEffect","HierarchicalTermSelector","editorStore","MaybeCategoryPanel","hasNoCategory","select","postType","getCurrentPostType","categoriesTaxonomy","getTaxonomy","
|
|
1
|
+
{"version":3,"sources":["@wordpress/editor/src/components/post-publish-panel/maybe-category-panel.js"],"names":["some","__","useSelect","PanelBody","store","coreStore","useState","useEffect","HierarchicalTermSelector","editorStore","MaybeCategoryPanel","hasNoCategory","select","postType","getCurrentPostType","categoriesTaxonomy","getTaxonomy","defaultCategoryId","getEntityRecord","default_category","defaultCategory","getEntityRecords","id","postTypeSupportsCategories","types","type","categories","getEditedPostAttribute","rest_base","length","shouldShowPanel","setShouldShowPanel","panelBodyTitle"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,IAAT,QAAqB,QAArB;AAEA;AACA;AACA;;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,SAAT,QAA0B,iBAA1B;AACA,SAASC,SAAT,QAA0B,uBAA1B;AACA,SAASC,KAAK,IAAIC,SAAlB,QAAmC,sBAAnC;AACA,SAASC,QAAT,EAAmBC,SAAnB,QAAoC,oBAApC;AAEA;AACA;AACA;;AACA,OAAOC,wBAAP,MAAqC,+CAArC;AACA,SAASJ,KAAK,IAAIK,WAAlB,QAAqC,aAArC;;AAEA,SAASC,kBAAT,GAA8B;AAC7B,QAAMC,aAAa,GAAGT,SAAS,CAAIU,MAAF,IAAc;AAAA;;AAC9C,UAAMC,QAAQ,GAAGD,MAAM,CAAEH,WAAF,CAAN,CAAsBK,kBAAtB,EAAjB;AACA,UAAMC,kBAAkB,GACvBH,MAAM,CAAEP,SAAF,CAAN,CAAoBW,WAApB,CAAiC,UAAjC,CADD;AAEA,UAAMC,iBAAiB,4BAAGL,MAAM,CAAEP,SAAF,CAAN,CAAoBa,eAApB,CACzB,MADyB,EAEzB,MAFyB,CAAH,0DAAG,sBAGvBC,gBAHH;AAIA,UAAMC,eAAe,6BAAGR,MAAM,CAAEP,SAAF,CAAN,CAAoBgB,gBAApB,CACvB,UADuB,EAEvB,UAFuB,EAGvB;AACCC,MAAAA,EAAE,EAAEL;AADL,KAHuB,CAAH,2DAAG,uBAMnB,CANmB,CAAxB;AAOA,UAAMM,0BAA0B,GAC/BR,kBAAkB,IAClBf,IAAI,CAAEe,kBAAkB,CAACS,KAArB,EAA8BC,IAAF,IAAYA,IAAI,KAAKZ,QAAjD,CAFL;AAGA,UAAMa,UAAU,GACfX,kBAAkB,IAClBH,MAAM,CAAEH,WAAF,CAAN,CAAsBkB,sBAAtB,CACCZ,kBAAkB,CAACa,SADpB,CAFD,CAlB8C,CAwB9C;AACA;AACA;;AACA,WACC,CAAC,CAAEb,kBAAH,IACA,CAAC,CAAEK,eADH,IAEAG,0BAFA,KAGE,CAAAG,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEG,MAAZ,MAAuB,CAAvB,IACC,CAAAH,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEG,MAAZ,MAAuB,CAAvB,IACDT,eAAe,CAACE,EAAhB,KAAuBI,UAAU,CAAE,CAAF,CALnC,CADD;AAQA,GAnC8B,EAmC5B,EAnC4B,CAA/B;AAoCA,QAAM,CAAEI,eAAF,EAAmBC,kBAAnB,IAA0CzB,QAAQ,CAAE,KAAF,CAAxD;AACAC,EAAAA,SAAS,CAAE,MAAM;AAChB;AACA;AACA,QAAKI,aAAL,EAAqB;AACpBoB,MAAAA,kBAAkB,CAAE,IAAF,CAAlB;AACA;AACD,GANQ,EAMN,CAAEpB,aAAF,CANM,CAAT;;AAQA,MAAK,CAAEmB,eAAP,EAAyB;AACxB,WAAO,IAAP;AACA;;AAED,QAAME,cAAc,GAAG,CACtB/B,EAAE,CAAE,aAAF,CADoB,EAEtB;AAAM,IAAA,SAAS,EAAC,iCAAhB;AAAkD,IAAA,GAAG,EAAC;AAAtD,KACGA,EAAE,CAAE,mBAAF,CADL,CAFsB,CAAvB;AAOA,SACC,cAAC,SAAD;AAAW,IAAA,WAAW,EAAG,KAAzB;AAAiC,IAAA,KAAK,EAAG+B;AAAzC,KACC,yBACG/B,EAAE,CACH,oHADG,CADL,CADD,EAMC,cAAC,wBAAD;AAA0B,IAAA,IAAI,EAAC;AAA/B,IAND,CADD;AAUA;;AAED,eAAeS,kBAAf","sourcesContent":["/**\n * External dependencies\n */\nimport { some } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { PanelBody } from '@wordpress/components';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport HierarchicalTermSelector from '../post-taxonomies/hierarchical-term-selector';\nimport { store as editorStore } from '../../store';\n\nfunction MaybeCategoryPanel() {\n\tconst hasNoCategory = useSelect( ( select ) => {\n\t\tconst postType = select( editorStore ).getCurrentPostType();\n\t\tconst categoriesTaxonomy =\n\t\t\tselect( coreStore ).getTaxonomy( 'category' );\n\t\tconst defaultCategoryId = select( coreStore ).getEntityRecord(\n\t\t\t'root',\n\t\t\t'site'\n\t\t)?.default_category;\n\t\tconst defaultCategory = select( coreStore ).getEntityRecords(\n\t\t\t'taxonomy',\n\t\t\t'category',\n\t\t\t{\n\t\t\t\tid: defaultCategoryId,\n\t\t\t}\n\t\t)?.[ 0 ];\n\t\tconst postTypeSupportsCategories =\n\t\t\tcategoriesTaxonomy &&\n\t\t\tsome( categoriesTaxonomy.types, ( type ) => type === postType );\n\t\tconst categories =\n\t\t\tcategoriesTaxonomy &&\n\t\t\tselect( editorStore ).getEditedPostAttribute(\n\t\t\t\tcategoriesTaxonomy.rest_base\n\t\t\t);\n\n\t\t// This boolean should return true if everything is loaded\n\t\t// ( categoriesTaxonomy, defaultCategory )\n\t\t// and the post has not been assigned a category different than \"uncategorized\".\n\t\treturn (\n\t\t\t!! categoriesTaxonomy &&\n\t\t\t!! defaultCategory &&\n\t\t\tpostTypeSupportsCategories &&\n\t\t\t( categories?.length === 0 ||\n\t\t\t\t( categories?.length === 1 &&\n\t\t\t\t\tdefaultCategory.id === categories[ 0 ] ) )\n\t\t);\n\t}, [] );\n\tconst [ shouldShowPanel, setShouldShowPanel ] = useState( false );\n\tuseEffect( () => {\n\t\t// We use state to avoid hiding the panel if the user edits the categories\n\t\t// and adds one within the panel itself (while visible).\n\t\tif ( hasNoCategory ) {\n\t\t\tsetShouldShowPanel( true );\n\t\t}\n\t}, [ hasNoCategory ] );\n\n\tif ( ! shouldShowPanel ) {\n\t\treturn null;\n\t}\n\n\tconst panelBodyTitle = [\n\t\t__( 'Suggestion:' ),\n\t\t<span className=\"editor-post-publish-panel__link\" key=\"label\">\n\t\t\t{ __( 'Assign a category' ) }\n\t\t</span>,\n\t];\n\n\treturn (\n\t\t<PanelBody initialOpen={ false } title={ panelBodyTitle }>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'Categories provide a helpful way to group related posts together and to quickly tell readers what a post is about.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<HierarchicalTermSelector slug=\"category\" />\n\t\t</PanelBody>\n\t);\n}\n\nexport default MaybeCategoryPanel;\n"]}
|
|
@@ -1,28 +1,105 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { __ } from '@wordpress/i18n';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { __, _x, sprintf, isRTL } from '@wordpress/i18n';
|
|
5
|
+
import { __experimentalGetSettings, getDate, dateI18n } from '@wordpress/date';
|
|
6
|
+
import { useSelect } from '@wordpress/data';
|
|
7
7
|
/**
|
|
8
8
|
* Internal dependencies
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { store as editorStore } from '../../store';
|
|
12
|
-
export function PostScheduleLabel(
|
|
12
|
+
export default function PostScheduleLabel(props) {
|
|
13
|
+
return usePostScheduleLabel(props);
|
|
14
|
+
}
|
|
15
|
+
export function usePostScheduleLabel(_ref) {
|
|
13
16
|
let {
|
|
17
|
+
full
|
|
18
|
+
} = _ref;
|
|
19
|
+
const {
|
|
14
20
|
date,
|
|
15
21
|
isFloating
|
|
16
|
-
} =
|
|
22
|
+
} = useSelect(select => ({
|
|
23
|
+
date: select(editorStore).getEditedPostAttribute('date'),
|
|
24
|
+
isFloating: select(editorStore).isEditedPostDateFloating()
|
|
25
|
+
}), []);
|
|
26
|
+
return full ? getFullPostScheduleLabel(date) : getPostScheduleLabel(date, {
|
|
27
|
+
isFloating
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export function getFullPostScheduleLabel(dateAttribute) {
|
|
31
|
+
const date = getDate(dateAttribute);
|
|
32
|
+
const timezoneAbbreviation = getTimezoneAbbreviation();
|
|
33
|
+
const formattedDate = dateI18n( // translators: If using a space between 'g:i' and 'a', use a non-breaking sapce.
|
|
34
|
+
_x('F j, Y g:i\xa0a', 'post schedule full date format'), date);
|
|
35
|
+
return isRTL() ? `${timezoneAbbreviation} ${formattedDate}` : `${formattedDate} ${timezoneAbbreviation}`;
|
|
36
|
+
}
|
|
37
|
+
export function getPostScheduleLabel(dateAttribute) {
|
|
38
|
+
let {
|
|
39
|
+
isFloating = false,
|
|
40
|
+
now = new Date()
|
|
41
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
42
|
+
|
|
43
|
+
if (!dateAttribute || isFloating) {
|
|
44
|
+
return __('Immediately');
|
|
45
|
+
} // If the user timezone does not equal the site timezone then using words
|
|
46
|
+
// like 'tomorrow' is confusing, so show the full date.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
if (!isTimezoneSameAsSiteTimezone(now)) {
|
|
50
|
+
return getFullPostScheduleLabel(dateAttribute);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const date = getDate(dateAttribute);
|
|
54
|
+
|
|
55
|
+
if (isSameDay(date, now)) {
|
|
56
|
+
return sprintf( // translators: %s: Time of day the post is scheduled for.
|
|
57
|
+
__('Today at %s'), // translators: If using a space between 'g:i' and 'a', use a non-breaking sapce.
|
|
58
|
+
dateI18n(_x('g:i\xa0a', 'post schedule time format'), date));
|
|
59
|
+
}
|
|
17
60
|
|
|
18
|
-
const
|
|
61
|
+
const tomorrow = new Date(now);
|
|
62
|
+
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
19
63
|
|
|
20
|
-
|
|
64
|
+
if (isSameDay(date, tomorrow)) {
|
|
65
|
+
return sprintf( // translators: %s: Time of day the post is scheduled for.
|
|
66
|
+
__('Tomorrow at %s'), // translators: If using a space between 'g:i' and 'a', use a non-breaking sapce.
|
|
67
|
+
dateI18n(_x('g:i\xa0a', 'post schedule time format'), date));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (date.getFullYear() === now.getFullYear()) {
|
|
71
|
+
return dateI18n( // translators: If using a space between 'g:i' and 'a', use a non-breaking sapce.
|
|
72
|
+
_x('F j g:i\xa0a', 'post schedule date format without year'), date);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return dateI18n( // translators: Use a non-breaking space between 'g:i' and 'a' if appropriate.
|
|
76
|
+
_x('F j, Y g:i\xa0a', 'post schedule full date format'), date);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function getTimezoneAbbreviation() {
|
|
80
|
+
const {
|
|
81
|
+
timezone
|
|
82
|
+
} = __experimentalGetSettings();
|
|
83
|
+
|
|
84
|
+
if (timezone.abbr && isNaN(Number(timezone.abbr))) {
|
|
85
|
+
return timezone.abbr;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const symbol = timezone.offset < 0 ? '' : '+';
|
|
89
|
+
return `UTC${symbol}${timezone.offset}`;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function isTimezoneSameAsSiteTimezone(date) {
|
|
93
|
+
const {
|
|
94
|
+
timezone
|
|
95
|
+
} = __experimentalGetSettings();
|
|
96
|
+
|
|
97
|
+
const siteOffset = Number(timezone.offset);
|
|
98
|
+
const dateOffset = -1 * (date.getTimezoneOffset() / 60);
|
|
99
|
+
return siteOffset === dateOffset;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function isSameDay(left, right) {
|
|
103
|
+
return left.getDate() === right.getDate() && left.getMonth() === right.getMonth() && left.getFullYear() === right.getFullYear();
|
|
21
104
|
}
|
|
22
|
-
export default withSelect(select => {
|
|
23
|
-
return {
|
|
24
|
-
date: select(editorStore).getEditedPostAttribute('date'),
|
|
25
|
-
isFloating: select(editorStore).isEditedPostDateFloating()
|
|
26
|
-
};
|
|
27
|
-
})(PostScheduleLabel);
|
|
28
105
|
//# sourceMappingURL=label.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/post-schedule/label.js"],"names":["__","
|
|
1
|
+
{"version":3,"sources":["@wordpress/editor/src/components/post-schedule/label.js"],"names":["__","_x","sprintf","isRTL","__experimentalGetSettings","getDate","dateI18n","useSelect","store","editorStore","PostScheduleLabel","props","usePostScheduleLabel","full","date","isFloating","select","getEditedPostAttribute","isEditedPostDateFloating","getFullPostScheduleLabel","getPostScheduleLabel","dateAttribute","timezoneAbbreviation","getTimezoneAbbreviation","formattedDate","now","Date","isTimezoneSameAsSiteTimezone","isSameDay","tomorrow","setDate","getFullYear","timezone","abbr","isNaN","Number","symbol","offset","siteOffset","dateOffset","getTimezoneOffset","left","right","getMonth"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf, isRTL } from '@wordpress/i18n';\nimport { __experimentalGetSettings, getDate, dateI18n } from '@wordpress/date';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nexport default function PostScheduleLabel( props ) {\n\treturn usePostScheduleLabel( props );\n}\n\nexport function usePostScheduleLabel( { full } ) {\n\tconst { date, isFloating } = useSelect(\n\t\t( select ) => ( {\n\t\t\tdate: select( editorStore ).getEditedPostAttribute( 'date' ),\n\t\t\tisFloating: select( editorStore ).isEditedPostDateFloating(),\n\t\t} ),\n\t\t[]\n\t);\n\n\treturn full\n\t\t? getFullPostScheduleLabel( date )\n\t\t: getPostScheduleLabel( date, { isFloating } );\n}\n\nexport function getFullPostScheduleLabel( dateAttribute ) {\n\tconst date = getDate( dateAttribute );\n\n\tconst timezoneAbbreviation = getTimezoneAbbreviation();\n\tconst formattedDate = dateI18n(\n\t\t// translators: If using a space between 'g:i' and 'a', use a non-breaking sapce.\n\t\t_x( 'F j, Y g:i\\xa0a', 'post schedule full date format' ),\n\t\tdate\n\t);\n\treturn isRTL()\n\t\t? `${ timezoneAbbreviation } ${ formattedDate }`\n\t\t: `${ formattedDate } ${ timezoneAbbreviation }`;\n}\n\nexport function getPostScheduleLabel(\n\tdateAttribute,\n\t{ isFloating = false, now = new Date() } = {}\n) {\n\tif ( ! dateAttribute || isFloating ) {\n\t\treturn __( 'Immediately' );\n\t}\n\n\t// If the user timezone does not equal the site timezone then using words\n\t// like 'tomorrow' is confusing, so show the full date.\n\tif ( ! isTimezoneSameAsSiteTimezone( now ) ) {\n\t\treturn getFullPostScheduleLabel( dateAttribute );\n\t}\n\n\tconst date = getDate( dateAttribute );\n\n\tif ( isSameDay( date, now ) ) {\n\t\treturn sprintf(\n\t\t\t// translators: %s: Time of day the post is scheduled for.\n\t\t\t__( 'Today at %s' ),\n\t\t\t// translators: If using a space between 'g:i' and 'a', use a non-breaking sapce.\n\t\t\tdateI18n( _x( 'g:i\\xa0a', 'post schedule time format' ), date )\n\t\t);\n\t}\n\n\tconst tomorrow = new Date( now );\n\ttomorrow.setDate( tomorrow.getDate() + 1 );\n\n\tif ( isSameDay( date, tomorrow ) ) {\n\t\treturn sprintf(\n\t\t\t// translators: %s: Time of day the post is scheduled for.\n\t\t\t__( 'Tomorrow at %s' ),\n\t\t\t// translators: If using a space between 'g:i' and 'a', use a non-breaking sapce.\n\t\t\tdateI18n( _x( 'g:i\\xa0a', 'post schedule time format' ), date )\n\t\t);\n\t}\n\n\tif ( date.getFullYear() === now.getFullYear() ) {\n\t\treturn dateI18n(\n\t\t\t// translators: If using a space between 'g:i' and 'a', use a non-breaking sapce.\n\t\t\t_x( 'F j g:i\\xa0a', 'post schedule date format without year' ),\n\t\t\tdate\n\t\t);\n\t}\n\n\treturn dateI18n(\n\t\t// translators: Use a non-breaking space between 'g:i' and 'a' if appropriate.\n\t\t_x( 'F j, Y g:i\\xa0a', 'post schedule full date format' ),\n\t\tdate\n\t);\n}\n\nfunction getTimezoneAbbreviation() {\n\tconst { timezone } = __experimentalGetSettings();\n\n\tif ( timezone.abbr && isNaN( Number( timezone.abbr ) ) ) {\n\t\treturn timezone.abbr;\n\t}\n\n\tconst symbol = timezone.offset < 0 ? '' : '+';\n\treturn `UTC${ symbol }${ timezone.offset }`;\n}\n\nfunction isTimezoneSameAsSiteTimezone( date ) {\n\tconst { timezone } = __experimentalGetSettings();\n\n\tconst siteOffset = Number( timezone.offset );\n\tconst dateOffset = -1 * ( date.getTimezoneOffset() / 60 );\n\treturn siteOffset === dateOffset;\n}\n\nfunction isSameDay( left, right ) {\n\treturn (\n\t\tleft.getDate() === right.getDate() &&\n\t\tleft.getMonth() === right.getMonth() &&\n\t\tleft.getFullYear() === right.getFullYear()\n\t);\n}\n"]}
|
|
@@ -52,10 +52,10 @@ const termNamesToIds = (names, terms) => {
|
|
|
52
52
|
}; // Tries to create a term or fetch it if it already exists.
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
function findOrCreateTerm(termName, restBase) {
|
|
55
|
+
function findOrCreateTerm(termName, restBase, namespace) {
|
|
56
56
|
const escapedTermName = escapeString(termName);
|
|
57
57
|
return apiFetch({
|
|
58
|
-
path:
|
|
58
|
+
path: `/${namespace}/${restBase}`,
|
|
59
59
|
method: 'POST',
|
|
60
60
|
data: {
|
|
61
61
|
name: escapedTermName
|
|
@@ -66,7 +66,7 @@ function findOrCreateTerm(termName, restBase) {
|
|
|
66
66
|
if (errorCode === 'term_exists') {
|
|
67
67
|
// If the terms exist, fetch it instead of creating a new one.
|
|
68
68
|
const addRequest = apiFetch({
|
|
69
|
-
path: addQueryArgs(
|
|
69
|
+
path: addQueryArgs(`/${namespace}/${restBase}`, { ...DEFAULT_QUERY,
|
|
70
70
|
search: escapedTermName
|
|
71
71
|
})
|
|
72
72
|
}).then(unescapeTerms);
|
|
@@ -161,6 +161,8 @@ function FlatTermSelector(_ref) {
|
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
function onChange(termNames) {
|
|
164
|
+
var _taxonomy$rest_namesp;
|
|
165
|
+
|
|
164
166
|
const availableTerms = [...(terms !== null && terms !== void 0 ? terms : []), ...(searchResults !== null && searchResults !== void 0 ? searchResults : [])];
|
|
165
167
|
const uniqueTerms = uniqBy(termNames, term => term.toLowerCase());
|
|
166
168
|
const newTermNames = uniqueTerms.filter(termName => !find(availableTerms, term => isSameTermName(term.name, termName))); // Optimistically update term values.
|
|
@@ -176,7 +178,8 @@ function FlatTermSelector(_ref) {
|
|
|
176
178
|
return;
|
|
177
179
|
}
|
|
178
180
|
|
|
179
|
-
|
|
181
|
+
const namespace = (_taxonomy$rest_namesp = taxonomy === null || taxonomy === void 0 ? void 0 : taxonomy.rest_namespace) !== null && _taxonomy$rest_namesp !== void 0 ? _taxonomy$rest_namesp : 'wp/v2';
|
|
182
|
+
Promise.all(newTermNames.map(termName => findOrCreateTerm(termName, taxonomy.rest_base, namespace))).then(newTerms => {
|
|
180
183
|
const newAvailableTerms = availableTerms.concat(newTerms);
|
|
181
184
|
return onUpdateTerms(termNamesToIds(uniqueTerms, newAvailableTerms));
|
|
182
185
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/post-taxonomies/flat-term-selector.js"],"names":["escape","escapeString","find","get","uniqBy","__","_x","sprintf","useEffect","useMemo","useState","FormTokenField","withFilters","useSelect","useDispatch","store","coreStore","useDebounce","apiFetch","addQueryArgs","speak","editorStore","unescapeString","unescapeTerm","unescapeTerms","MostUsedTerms","EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","orderby","order","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","term","name","id","findOrCreateTerm","restBase","escapedTermName","path","method","data","catch","error","errorCode","code","addRequest","search","then","searchResult","result","Promise","reject","FlatTermSelector","slug","values","setValues","setSearch","debouncedSearch","termIds","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","getCurrentPost","getEditedPostAttribute","getEntityRecords","getTaxonomy","hasFinishedResolution","post","_taxonomy","_termIds","rest_base","query","include","join","length","searchResults","newValues","suggestions","editPost","onUpdateTerms","newTermIds","onChange","termNames","availableTerms","uniqueTerms","newTermNames","filter","all","newTerms","newAvailableTerms","concat","appendTerm","newTerm","includes","termAddedMessage","newTermLabel","singularName","termAddedLabel","termRemovedLabel","removeTermLabel","added","removed","remove"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { escape as escapeString, find, get, uniqBy } from 'lodash';\n\n/**\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 apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unescapeString, unescapeTerm, unescapeTerms } 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\torderby: 'count',\n\torder: 'desc',\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\tfind( terms, ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\n// Tries to create a term or fetch it if it already exists.\nfunction findOrCreateTerm( termName, restBase ) {\n\tconst escapedTermName = escapeString( termName );\n\n\treturn apiFetch( {\n\t\tpath: `/wp/v2/${ restBase }`,\n\t\tmethod: 'POST',\n\t\tdata: { name: escapedTermName },\n\t} )\n\t\t.catch( ( error ) => {\n\t\t\tconst errorCode = error.code;\n\t\t\tif ( errorCode === 'term_exists' ) {\n\t\t\t\t// If the terms exist, fetch it instead of creating a new one.\n\t\t\t\tconst addRequest = apiFetch( {\n\t\t\t\t\tpath: addQueryArgs( `/wp/v2/${ restBase }`, {\n\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\tsearch: escapedTermName,\n\t\t\t\t\t} ),\n\t\t\t\t} ).then( unescapeTerms );\n\n\t\t\t\treturn addRequest.then( ( searchResult ) => {\n\t\t\t\t\treturn find( searchResult, ( result ) =>\n\t\t\t\t\t\tisSameTermName( result.name, termName )\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn Promise.reject( error );\n\t\t} )\n\t\t.then( unescapeTerm );\n}\n\nfunction 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? get(\n\t\t\t\t\t\t\tpost,\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'_links',\n\t\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t )\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? get(\n\t\t\t\t\t\t\tpost,\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'_links',\n\t\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t )\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 ]\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\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\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 = uniqBy( termNames, ( term ) => term.toLowerCase() );\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! find( availableTerms, ( 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( termName, taxonomy.rest_base )\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 termAddedMessage = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\tget(\n\t\t\t\ttaxonomy,\n\t\t\t\t[ 'labels', 'singular_name' ],\n\t\t\t\tslug === 'post_tag' ? __( 'Tag' ) : __( 'Term' )\n\t\t\t)\n\t\t);\n\n\t\tspeak( termAddedMessage, 'assertive' );\n\t\tonUpdateTerms( newTermIds );\n\t}\n\n\tconst newTermLabel = get(\n\t\ttaxonomy,\n\t\t[ 'labels', 'add_new_item' ],\n\t\tslug === 'post_tag' ? __( 'Add new tag' ) : __( 'Add new Term' )\n\t);\n\tconst singularName = get(\n\t\ttaxonomy,\n\t\t[ 'labels', 'singular_name' ],\n\t\tslug === 'post_tag' ? __( 'Tag' ) : __( 'Term' )\n\t);\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,"sources":["@wordpress/editor/src/components/post-taxonomies/flat-term-selector.js"],"names":["escape","escapeString","find","get","uniqBy","__","_x","sprintf","useEffect","useMemo","useState","FormTokenField","withFilters","useSelect","useDispatch","store","coreStore","useDebounce","apiFetch","addQueryArgs","speak","editorStore","unescapeString","unescapeTerm","unescapeTerms","MostUsedTerms","EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","orderby","order","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","term","name","id","findOrCreateTerm","restBase","namespace","escapedTermName","path","method","data","catch","error","errorCode","code","addRequest","search","then","searchResult","result","Promise","reject","FlatTermSelector","slug","values","setValues","setSearch","debouncedSearch","termIds","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","getCurrentPost","getEditedPostAttribute","getEntityRecords","getTaxonomy","hasFinishedResolution","post","_taxonomy","_termIds","rest_base","query","include","join","length","searchResults","newValues","suggestions","editPost","onUpdateTerms","newTermIds","onChange","termNames","availableTerms","uniqueTerms","newTermNames","filter","rest_namespace","all","newTerms","newAvailableTerms","concat","appendTerm","newTerm","includes","termAddedMessage","newTermLabel","singularName","termAddedLabel","termRemovedLabel","removeTermLabel","added","removed","remove"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { escape as escapeString, find, get, uniqBy } from 'lodash';\n\n/**\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 apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unescapeString, unescapeTerm, unescapeTerms } 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\torderby: 'count',\n\torder: 'desc',\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\tfind( terms, ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\n// Tries to create a term or fetch it if it already exists.\nfunction findOrCreateTerm( termName, restBase, namespace ) {\n\tconst escapedTermName = escapeString( termName );\n\n\treturn apiFetch( {\n\t\tpath: `/${ namespace }/${ restBase }`,\n\t\tmethod: 'POST',\n\t\tdata: { name: escapedTermName },\n\t} )\n\t\t.catch( ( error ) => {\n\t\t\tconst errorCode = error.code;\n\t\t\tif ( errorCode === 'term_exists' ) {\n\t\t\t\t// If the terms exist, fetch it instead of creating a new one.\n\t\t\t\tconst addRequest = apiFetch( {\n\t\t\t\t\tpath: addQueryArgs( `/${ namespace }/${ restBase }`, {\n\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\tsearch: escapedTermName,\n\t\t\t\t\t} ),\n\t\t\t\t} ).then( unescapeTerms );\n\n\t\t\t\treturn addRequest.then( ( searchResult ) => {\n\t\t\t\t\treturn find( searchResult, ( result ) =>\n\t\t\t\t\t\tisSameTermName( result.name, termName )\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn Promise.reject( error );\n\t\t} )\n\t\t.then( unescapeTerm );\n}\n\nfunction 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? get(\n\t\t\t\t\t\t\tpost,\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'_links',\n\t\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t )\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? get(\n\t\t\t\t\t\t\tpost,\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'_links',\n\t\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t )\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 ]\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\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\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 = uniqBy( termNames, ( term ) => term.toLowerCase() );\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! find( availableTerms, ( 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\tconst namespace = taxonomy?.rest_namespace ?? 'wp/v2';\n\t\tPromise.all(\n\t\t\tnewTermNames.map( ( termName ) =>\n\t\t\t\tfindOrCreateTerm( termName, taxonomy.rest_base, namespace )\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 termAddedMessage = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\tget(\n\t\t\t\ttaxonomy,\n\t\t\t\t[ 'labels', 'singular_name' ],\n\t\t\t\tslug === 'post_tag' ? __( 'Tag' ) : __( 'Term' )\n\t\t\t)\n\t\t);\n\n\t\tspeak( termAddedMessage, 'assertive' );\n\t\tonUpdateTerms( newTermIds );\n\t}\n\n\tconst newTermLabel = get(\n\t\ttaxonomy,\n\t\t[ 'labels', 'add_new_item' ],\n\t\tslug === 'post_tag' ? __( 'Add new tag' ) : __( 'Add new Term' )\n\t);\n\tconst singularName = get(\n\t\ttaxonomy,\n\t\t[ 'labels', 'singular_name' ],\n\t\tslug === 'post_tag' ? __( 'Tag' ) : __( 'Term' )\n\t);\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"]}
|