@wordpress/editor 13.13.0 → 13.15.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.
Files changed (115) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/entities-saved-states/entity-record-item.js +3 -37
  3. package/build/components/entities-saved-states/entity-record-item.js.map +1 -1
  4. package/build/components/entities-saved-states/entity-type-list.js +2 -4
  5. package/build/components/entities-saved-states/entity-type-list.js.map +1 -1
  6. package/build/components/entities-saved-states/index.js +0 -1
  7. package/build/components/entities-saved-states/index.js.map +1 -1
  8. package/build/components/global-keyboard-shortcuts/{save-shortcut.js → index.js} +13 -25
  9. package/build/components/global-keyboard-shortcuts/index.js.map +1 -0
  10. package/build/components/index.js +32 -19
  11. package/build/components/index.js.map +1 -1
  12. package/build/components/media-categories/index.js +1 -22
  13. package/build/components/media-categories/index.js.map +1 -1
  14. package/build/components/post-preview-button/index.js +62 -157
  15. package/build/components/post-preview-button/index.js.map +1 -1
  16. package/build/components/post-publish-button/index.js +4 -9
  17. package/build/components/post-publish-button/index.js.map +1 -1
  18. package/build/components/post-publish-button/label.js +2 -4
  19. package/build/components/post-publish-button/label.js.map +1 -1
  20. package/build/components/post-publish-panel/index.js +3 -4
  21. package/build/components/post-publish-panel/index.js.map +1 -1
  22. package/build/components/post-saved-state/index.js +2 -5
  23. package/build/components/post-saved-state/index.js.map +1 -1
  24. package/build/components/post-schedule/label.js +4 -4
  25. package/build/components/post-schedule/label.js.map +1 -1
  26. package/build/components/post-switch-to-draft-button/index.js +3 -5
  27. package/build/components/post-switch-to-draft-button/index.js.map +1 -1
  28. package/build/components/post-sync-status/index.js +82 -22
  29. package/build/components/post-sync-status/index.js.map +1 -1
  30. package/build/components/post-text-editor/index.js +51 -58
  31. package/build/components/post-text-editor/index.js.map +1 -1
  32. package/build/components/provider/use-block-editor-settings.js +1 -1
  33. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  34. package/build/store/actions.js +37 -3
  35. package/build/store/actions.js.map +1 -1
  36. package/build/store/selectors.js +53 -61
  37. package/build/store/selectors.js.map +1 -1
  38. package/build-module/components/entities-saved-states/entity-record-item.js +6 -40
  39. package/build-module/components/entities-saved-states/entity-record-item.js.map +1 -1
  40. package/build-module/components/entities-saved-states/entity-type-list.js +2 -4
  41. package/build-module/components/entities-saved-states/entity-type-list.js.map +1 -1
  42. package/build-module/components/entities-saved-states/index.js +0 -1
  43. package/build-module/components/entities-saved-states/index.js.map +1 -1
  44. package/build-module/components/global-keyboard-shortcuts/{save-shortcut.js → index.js} +12 -23
  45. package/build-module/components/global-keyboard-shortcuts/index.js.map +1 -0
  46. package/build-module/components/index.js +9 -4
  47. package/build-module/components/index.js.map +1 -1
  48. package/build-module/components/media-categories/index.js +1 -22
  49. package/build-module/components/media-categories/index.js.map +1 -1
  50. package/build-module/components/post-preview-button/index.js +63 -149
  51. package/build-module/components/post-preview-button/index.js.map +1 -1
  52. package/build-module/components/post-publish-button/index.js +4 -9
  53. package/build-module/components/post-publish-button/index.js.map +1 -1
  54. package/build-module/components/post-publish-button/label.js +2 -4
  55. package/build-module/components/post-publish-button/label.js.map +1 -1
  56. package/build-module/components/post-publish-panel/index.js +3 -4
  57. package/build-module/components/post-publish-panel/index.js.map +1 -1
  58. package/build-module/components/post-saved-state/index.js +2 -5
  59. package/build-module/components/post-saved-state/index.js.map +1 -1
  60. package/build-module/components/post-schedule/label.js +4 -4
  61. package/build-module/components/post-schedule/label.js.map +1 -1
  62. package/build-module/components/post-switch-to-draft-button/index.js +5 -7
  63. package/build-module/components/post-switch-to-draft-button/index.js.map +1 -1
  64. package/build-module/components/post-sync-status/index.js +81 -24
  65. package/build-module/components/post-sync-status/index.js.map +1 -1
  66. package/build-module/components/post-text-editor/index.js +48 -56
  67. package/build-module/components/post-text-editor/index.js.map +1 -1
  68. package/build-module/components/provider/use-block-editor-settings.js +1 -1
  69. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  70. package/build-module/store/actions.js +31 -1
  71. package/build-module/store/actions.js.map +1 -1
  72. package/build-module/store/selectors.js +46 -55
  73. package/build-module/store/selectors.js.map +1 -1
  74. package/build-style/style-rtl.css +4 -22
  75. package/build-style/style.css +4 -22
  76. package/package.json +30 -30
  77. package/src/components/entities-saved-states/entity-record-item.js +3 -61
  78. package/src/components/entities-saved-states/entity-type-list.js +0 -2
  79. package/src/components/entities-saved-states/index.js +0 -1
  80. package/src/components/entities-saved-states/style.scss +0 -15
  81. package/src/components/global-keyboard-shortcuts/index.js +49 -0
  82. package/src/components/index.js +12 -3
  83. package/src/components/media-categories/index.js +1 -21
  84. package/src/components/post-preview-button/index.js +73 -156
  85. package/src/components/post-preview-button/test/index.js +94 -158
  86. package/src/components/post-publish-button/index.js +2 -7
  87. package/src/components/post-publish-button/label.js +2 -2
  88. package/src/components/post-publish-button/test/index.js +0 -10
  89. package/src/components/post-publish-panel/index.js +3 -4
  90. package/src/components/post-saved-state/index.js +2 -5
  91. package/src/components/post-schedule/label.js +4 -4
  92. package/src/components/post-switch-to-draft-button/index.js +3 -4
  93. package/src/components/post-sync-status/index.js +100 -27
  94. package/src/components/post-sync-status/style.scss +2 -2
  95. package/src/components/post-text-editor/index.js +34 -57
  96. package/src/components/post-title/style.native.scss +5 -5
  97. package/src/components/post-trash/style.scss +2 -2
  98. package/src/components/provider/use-block-editor-settings.js +1 -0
  99. package/src/store/actions.js +34 -2
  100. package/src/store/selectors.js +45 -41
  101. package/src/store/test/selectors.js +36 -25
  102. package/build/components/global-keyboard-shortcuts/save-shortcut.js.map +0 -1
  103. package/build/components/global-keyboard-shortcuts/text-editor-shortcuts.js +0 -22
  104. package/build/components/global-keyboard-shortcuts/text-editor-shortcuts.js.map +0 -1
  105. package/build/components/global-keyboard-shortcuts/visual-editor-shortcuts.js +0 -45
  106. package/build/components/global-keyboard-shortcuts/visual-editor-shortcuts.js.map +0 -1
  107. package/build-module/components/global-keyboard-shortcuts/save-shortcut.js.map +0 -1
  108. package/build-module/components/global-keyboard-shortcuts/text-editor-shortcuts.js +0 -12
  109. package/build-module/components/global-keyboard-shortcuts/text-editor-shortcuts.js.map +0 -1
  110. package/build-module/components/global-keyboard-shortcuts/visual-editor-shortcuts.js +0 -32
  111. package/build-module/components/global-keyboard-shortcuts/visual-editor-shortcuts.js.map +0 -1
  112. package/src/components/global-keyboard-shortcuts/save-shortcut.js +0 -55
  113. package/src/components/global-keyboard-shortcuts/text-editor-shortcuts.js +0 -8
  114. package/src/components/global-keyboard-shortcuts/visual-editor-shortcuts.js +0 -29
  115. package/src/components/post-text-editor/test/index.js +0 -156
@@ -1,56 +1,113 @@
1
- import { createElement } from "@wordpress/element";
1
+ import { createElement, Fragment } from "@wordpress/element";
2
2
 
3
3
  /**
4
4
  * WordPress dependencies
5
5
  */
6
6
  import { useSelect, useDispatch } from '@wordpress/data';
7
7
  import { __ } from '@wordpress/i18n';
8
- import { ToggleControl, PanelRow } from '@wordpress/components';
8
+ import { PanelRow, Modal, Button, __experimentalHStack as HStack, __experimentalVStack as VStack, ToggleControl } from '@wordpress/components';
9
+ import { useEffect, useState } from '@wordpress/element';
10
+ import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
9
11
  /**
10
12
  * Internal dependencies
11
13
  */
12
14
 
13
15
  import { store as editorStore } from '../../store';
16
+ import { unlock } from '../../lock-unlock';
14
17
  export default function PostSyncStatus() {
15
18
  const {
16
- editPost
17
- } = useDispatch(editorStore);
18
- const {
19
- meta,
20
- postType
19
+ syncStatus,
20
+ postType,
21
+ meta
21
22
  } = useSelect(select => {
22
23
  const {
23
24
  getEditedPostAttribute
24
25
  } = select(editorStore);
25
26
  return {
27
+ syncStatus: getEditedPostAttribute('wp_pattern_sync_status'),
26
28
  meta: getEditedPostAttribute('meta'),
27
29
  postType: getEditedPostAttribute('type')
28
30
  };
29
- }, []);
31
+ });
30
32
 
31
33
  if (postType !== 'wp_block') {
32
34
  return null;
33
- }
35
+ } // When the post is first created, the top level wp_pattern_sync_status is not set so get meta value instead.
34
36
 
35
- const onUpdateSync = syncStatus => editPost({
36
- meta: { ...meta,
37
- wp_block: syncStatus === 'unsynced' ? {
38
- sync_status: syncStatus
39
- } : null
40
- }
41
- });
42
37
 
43
- const syncStatus = meta?.wp_block?.sync_status;
44
- const isFullySynced = !syncStatus;
38
+ const currentSyncStatus = meta?.wp_pattern_sync_status === 'unsynced' ? 'unsynced' : syncStatus;
45
39
  return createElement(PanelRow, {
46
40
  className: "edit-post-sync-status"
47
- }, createElement("span", null, __('Syncing')), createElement(ToggleControl, {
48
- __nextHasNoMarginBottom: true,
49
- label: isFullySynced ? __('Fully synced') : __('Not synced'),
50
- checked: isFullySynced,
41
+ }, createElement("span", null, __('Sync status')), createElement("div", null, currentSyncStatus === 'unsynced' ? __('Not synced') : __('Fully synced')));
42
+ }
43
+ export function PostSyncStatusModal() {
44
+ const {
45
+ editPost
46
+ } = useDispatch(editorStore);
47
+ const [isModalOpen, setIsModalOpen] = useState(false);
48
+ const [syncType, setSyncType] = useState(undefined);
49
+ const {
50
+ postType,
51
+ isNewPost
52
+ } = useSelect(select => {
53
+ const {
54
+ getEditedPostAttribute,
55
+ isCleanNewPost
56
+ } = select(editorStore);
57
+ return {
58
+ postType: getEditedPostAttribute('type'),
59
+ isNewPost: isCleanNewPost()
60
+ };
61
+ }, []);
62
+ useEffect(() => {
63
+ if (isNewPost && postType === 'wp_block') {
64
+ setIsModalOpen(true);
65
+ } // We only want the modal to open when the page is first loaded.
66
+ // eslint-disable-next-line react-hooks/exhaustive-deps
67
+
68
+ }, []);
69
+
70
+ const setSyncStatus = () => {
71
+ editPost({
72
+ meta: {
73
+ wp_pattern_sync_status: syncType
74
+ }
75
+ });
76
+ };
77
+
78
+ if (postType !== 'wp_block' || !isNewPost) {
79
+ return null;
80
+ }
81
+
82
+ const {
83
+ ReusableBlocksRenameHint
84
+ } = unlock(blockEditorPrivateApis);
85
+ return createElement(Fragment, null, isModalOpen && createElement(Modal, {
86
+ title: __('Set pattern sync status'),
87
+ onRequestClose: () => {
88
+ setIsModalOpen(false);
89
+ },
90
+ overlayClassName: "reusable-blocks-menu-items__convert-modal"
91
+ }, createElement("form", {
92
+ onSubmit: event => {
93
+ event.preventDefault();
94
+ setIsModalOpen(false);
95
+ setSyncStatus();
96
+ }
97
+ }, createElement(VStack, {
98
+ spacing: "5"
99
+ }, createElement(ReusableBlocksRenameHint, null), createElement(ToggleControl, {
100
+ label: __('Synced'),
101
+ help: __('Editing the pattern will update it anywhere it is used.'),
102
+ checked: !syncType,
51
103
  onChange: () => {
52
- onUpdateSync(syncStatus === 'unsynced' ? 'fully' : 'unsynced');
104
+ setSyncType(!syncType ? 'unsynced' : undefined);
53
105
  }
54
- }));
106
+ }), createElement(HStack, {
107
+ justify: "right"
108
+ }, createElement(Button, {
109
+ variant: "primary",
110
+ type: "submit"
111
+ }, __('Create')))))));
55
112
  }
56
113
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/post-sync-status/index.js"],"names":["useSelect","useDispatch","__","ToggleControl","PanelRow","store","editorStore","PostSyncStatus","editPost","meta","postType","select","getEditedPostAttribute","onUpdateSync","syncStatus","wp_block","sync_status","isFullySynced"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,aAAT,EAAwBC,QAAxB,QAAwC,uBAAxC;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,WAAlB,QAAqC,aAArC;AAEA,eAAe,SAASC,cAAT,GAA0B;AACxC,QAAM;AAAEC,IAAAA;AAAF,MAAeP,WAAW,CAAEK,WAAF,CAAhC;AACA,QAAM;AAAEG,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAqBV,SAAS,CAAIW,MAAF,IAAc;AACnD,UAAM;AAAEC,MAAAA;AAAF,QAA6BD,MAAM,CAAEL,WAAF,CAAzC;AACA,WAAO;AACNG,MAAAA,IAAI,EAAEG,sBAAsB,CAAE,MAAF,CADtB;AAENF,MAAAA,QAAQ,EAAEE,sBAAsB,CAAE,MAAF;AAF1B,KAAP;AAIA,GANmC,EAMjC,EANiC,CAApC;;AAOA,MAAKF,QAAQ,KAAK,UAAlB,EAA+B;AAC9B,WAAO,IAAP;AACA;;AACD,QAAMG,YAAY,GAAKC,UAAF,IACpBN,QAAQ,CAAE;AACTC,IAAAA,IAAI,EAAE,EACL,GAAGA,IADE;AAELM,MAAAA,QAAQ,EACPD,UAAU,KAAK,UAAf,GACG;AAAEE,QAAAA,WAAW,EAAEF;AAAf,OADH,GAEG;AALC;AADG,GAAF,CADT;;AAUA,QAAMA,UAAU,GAAGL,IAAI,EAAEM,QAAN,EAAgBC,WAAnC;AACA,QAAMC,aAAa,GAAG,CAAEH,UAAxB;AAEA,SACC,cAAC,QAAD;AAAU,IAAA,SAAS,EAAC;AAApB,KACC,4BAAQZ,EAAE,CAAE,SAAF,CAAV,CADD,EAEC,cAAC,aAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EACJe,aAAa,GAAGf,EAAE,CAAE,cAAF,CAAL,GAA0BA,EAAE,CAAE,YAAF,CAH3C;AAKC,IAAA,OAAO,EAAGe,aALX;AAMC,IAAA,QAAQ,EAAG,MAAM;AAChBJ,MAAAA,YAAY,CACXC,UAAU,KAAK,UAAf,GAA4B,OAA5B,GAAsC,UAD3B,CAAZ;AAGA;AAVF,IAFD,CADD;AAiBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { ToggleControl, PanelRow } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nexport default function PostSyncStatus() {\n\tconst { editPost } = useDispatch( editorStore );\n\tconst { meta, postType } = useSelect( ( select ) => {\n\t\tconst { getEditedPostAttribute } = select( editorStore );\n\t\treturn {\n\t\t\tmeta: getEditedPostAttribute( 'meta' ),\n\t\t\tpostType: getEditedPostAttribute( 'type' ),\n\t\t};\n\t}, [] );\n\tif ( postType !== 'wp_block' ) {\n\t\treturn null;\n\t}\n\tconst onUpdateSync = ( syncStatus ) =>\n\t\teditPost( {\n\t\t\tmeta: {\n\t\t\t\t...meta,\n\t\t\t\twp_block:\n\t\t\t\t\tsyncStatus === 'unsynced'\n\t\t\t\t\t\t? { sync_status: syncStatus }\n\t\t\t\t\t\t: null,\n\t\t\t},\n\t\t} );\n\tconst syncStatus = meta?.wp_block?.sync_status;\n\tconst isFullySynced = ! syncStatus;\n\n\treturn (\n\t\t<PanelRow className=\"edit-post-sync-status\">\n\t\t\t<span>{ __( 'Syncing' ) }</span>\n\t\t\t<ToggleControl\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\tlabel={\n\t\t\t\t\tisFullySynced ? __( 'Fully synced' ) : __( 'Not synced' )\n\t\t\t\t}\n\t\t\t\tchecked={ isFullySynced }\n\t\t\t\tonChange={ () => {\n\t\t\t\t\tonUpdateSync(\n\t\t\t\t\t\tsyncStatus === 'unsynced' ? 'fully' : 'unsynced'\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PanelRow>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-sync-status/index.js"],"names":["useSelect","useDispatch","__","PanelRow","Modal","Button","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","useEffect","useState","privateApis","blockEditorPrivateApis","store","editorStore","unlock","PostSyncStatus","syncStatus","postType","meta","select","getEditedPostAttribute","currentSyncStatus","wp_pattern_sync_status","PostSyncStatusModal","editPost","isModalOpen","setIsModalOpen","syncType","setSyncType","undefined","isNewPost","isCleanNewPost","setSyncStatus","ReusableBlocksRenameHint","event","preventDefault"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tPanelRow,\n\tModal,\n\tButton,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { useEffect, useState } from '@wordpress/element';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport default function PostSyncStatus() {\n\tconst { syncStatus, postType, meta } = useSelect( ( select ) => {\n\t\tconst { getEditedPostAttribute } = select( editorStore );\n\t\treturn {\n\t\t\tsyncStatus: getEditedPostAttribute( 'wp_pattern_sync_status' ),\n\t\t\tmeta: getEditedPostAttribute( 'meta' ),\n\t\t\tpostType: getEditedPostAttribute( 'type' ),\n\t\t};\n\t} );\n\n\tif ( postType !== 'wp_block' ) {\n\t\treturn null;\n\t}\n\t// When the post is first created, the top level wp_pattern_sync_status is not set so get meta value instead.\n\tconst currentSyncStatus =\n\t\tmeta?.wp_pattern_sync_status === 'unsynced' ? 'unsynced' : syncStatus;\n\n\treturn (\n\t\t<PanelRow className=\"edit-post-sync-status\">\n\t\t\t<span>{ __( 'Sync status' ) }</span>\n\t\t\t<div>\n\t\t\t\t{ currentSyncStatus === 'unsynced'\n\t\t\t\t\t? __( 'Not synced' )\n\t\t\t\t\t: __( 'Fully synced' ) }\n\t\t\t</div>\n\t\t</PanelRow>\n\t);\n}\n\nexport function PostSyncStatusModal() {\n\tconst { editPost } = useDispatch( editorStore );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst [ syncType, setSyncType ] = useState( undefined );\n\n\tconst { postType, isNewPost } = useSelect( ( select ) => {\n\t\tconst { getEditedPostAttribute, isCleanNewPost } =\n\t\t\tselect( editorStore );\n\t\treturn {\n\t\t\tpostType: getEditedPostAttribute( 'type' ),\n\t\t\tisNewPost: isCleanNewPost(),\n\t\t};\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( isNewPost && postType === 'wp_block' ) {\n\t\t\tsetIsModalOpen( true );\n\t\t}\n\t\t// We only want the modal to open when the page is first loaded.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [] );\n\n\tconst setSyncStatus = () => {\n\t\teditPost( {\n\t\t\tmeta: {\n\t\t\t\twp_pattern_sync_status: syncType,\n\t\t\t},\n\t\t} );\n\t};\n\n\tif ( postType !== 'wp_block' || ! isNewPost ) {\n\t\treturn null;\n\t}\n\tconst { ReusableBlocksRenameHint } = unlock( blockEditorPrivateApis );\n\treturn (\n\t\t<>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Set pattern sync status' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tsetSyncStatus();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Editing the pattern will update it anywhere it is used.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t! syncType ? 'unsynced' : undefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -9,8 +9,9 @@ import Textarea from 'react-autosize-textarea';
9
9
  */
10
10
 
11
11
  import { __ } from '@wordpress/i18n';
12
- import { useEffect, useState, useRef } from '@wordpress/element';
13
- import { parse } from '@wordpress/blocks';
12
+ import { store as coreStore } from '@wordpress/core-data';
13
+ import { useMemo } from '@wordpress/element';
14
+ import { __unstableSerializeAndClean } from '@wordpress/blocks';
14
15
  import { useDispatch, useSelect } from '@wordpress/data';
15
16
  import { useInstanceId } from '@wordpress/compose';
16
17
  import { VisuallyHidden } from '@wordpress/components';
@@ -20,65 +21,51 @@ import { VisuallyHidden } from '@wordpress/components';
20
21
 
21
22
  import { store as editorStore } from '../../store';
22
23
  export default function PostTextEditor() {
23
- const postContent = useSelect(select => select(editorStore).getEditedPostContent(), []);
24
- const {
25
- editPost,
26
- resetEditorBlocks
27
- } = useDispatch(editorStore);
28
- const [value, setValue] = useState(postContent);
29
- const [isDirty, setIsDirty] = useState(false);
30
24
  const instanceId = useInstanceId(PostTextEditor);
31
- const valueRef = useRef();
32
-
33
- if (!isDirty && value !== postContent) {
34
- setValue(postContent);
35
- }
36
- /**
37
- * Handles a textarea change event to notify the onChange prop callback and
38
- * reflect the new value in the component's own state. This marks the start
39
- * of the user's edits, if not already changed, preventing future props
40
- * changes to value from replacing the rendered value. This is expected to
41
- * be followed by a reset to dirty state via `stopEditing`.
42
- *
43
- * @see stopEditing
44
- *
45
- * @param {Event} event Change event.
46
- */
25
+ const {
26
+ content,
27
+ blocks,
28
+ type,
29
+ id
30
+ } = useSelect(select => {
31
+ const {
32
+ getEditedEntityRecord
33
+ } = select(coreStore);
34
+ const {
35
+ getCurrentPostType,
36
+ getCurrentPostId
37
+ } = select(editorStore);
47
38
 
39
+ const _type = getCurrentPostType();
48
40
 
49
- const onChange = event => {
50
- const newValue = event.target.value;
51
- editPost({
52
- content: newValue
53
- });
54
- setValue(newValue);
55
- setIsDirty(true);
56
- valueRef.current = newValue;
57
- };
58
- /**
59
- * Function called when the user has completed their edits, responsible for
60
- * ensuring that changes, if made, are surfaced to the onPersist prop
61
- * callback and resetting dirty state.
62
- */
41
+ const _id = getCurrentPostId();
63
42
 
43
+ const editedRecord = getEditedEntityRecord('postType', _type, _id);
44
+ return {
45
+ content: editedRecord?.content,
46
+ blocks: editedRecord?.blocks,
47
+ type: _type,
48
+ id: _id
49
+ };
50
+ }, []);
51
+ const {
52
+ editEntityRecord
53
+ } = useDispatch(coreStore); // Replicates the logic found in getEditedPostContent().
64
54
 
65
- const stopEditing = () => {
66
- if (isDirty) {
67
- const blocks = parse(value);
68
- resetEditorBlocks(blocks);
69
- setIsDirty(false);
55
+ const value = useMemo(() => {
56
+ if (content instanceof Function) {
57
+ return content({
58
+ blocks
59
+ });
60
+ } else if (blocks) {
61
+ // If we have parsed blocks already, they should be our source of truth.
62
+ // Parsing applies block deprecations and legacy block conversions that
63
+ // unparsed content will not have.
64
+ return __unstableSerializeAndClean(blocks);
70
65
  }
71
- }; // Ensure changes aren't lost when component unmounts.
72
-
73
66
 
74
- useEffect(() => {
75
- return () => {
76
- if (valueRef.current) {
77
- const blocks = parse(valueRef.current);
78
- resetEditorBlocks(blocks);
79
- }
80
- };
81
- }, []);
67
+ return content;
68
+ }, [content, blocks]);
82
69
  return createElement(Fragment, null, createElement(VisuallyHidden, {
83
70
  as: "label",
84
71
  htmlFor: `post-content-${instanceId}`
@@ -86,8 +73,13 @@ export default function PostTextEditor() {
86
73
  autoComplete: "off",
87
74
  dir: "auto",
88
75
  value: value,
89
- onChange: onChange,
90
- onBlur: stopEditing,
76
+ onChange: event => {
77
+ editEntityRecord('postType', type, id, {
78
+ content: event.target.value,
79
+ blocks: undefined,
80
+ selection: undefined
81
+ });
82
+ },
91
83
  className: "editor-post-text-editor",
92
84
  id: `post-content-${instanceId}`,
93
85
  placeholder: __('Start writing with text or HTML')
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/post-text-editor/index.js"],"names":["Textarea","__","useEffect","useState","useRef","parse","useDispatch","useSelect","useInstanceId","VisuallyHidden","store","editorStore","PostTextEditor","postContent","select","getEditedPostContent","editPost","resetEditorBlocks","value","setValue","isDirty","setIsDirty","instanceId","valueRef","onChange","event","newValue","target","content","current","stopEditing","blocks"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,QAAP,MAAqB,yBAArB;AAEA;AACA;AACA;;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,SAAT,EAAoBC,QAApB,EAA8BC,MAA9B,QAA4C,oBAA5C;AACA,SAASC,KAAT,QAAsB,mBAAtB;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,aAAT,QAA8B,oBAA9B;AACA,SAASC,cAAT,QAA+B,uBAA/B;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,WAAlB,QAAqC,aAArC;AAEA,eAAe,SAASC,cAAT,GAA0B;AACxC,QAAMC,WAAW,GAAGN,SAAS,CAC1BO,MAAF,IAAcA,MAAM,CAAEH,WAAF,CAAN,CAAsBI,oBAAtB,EADc,EAE5B,EAF4B,CAA7B;AAKA,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAkCX,WAAW,CAAEK,WAAF,CAAnD;AAEA,QAAM,CAAEO,KAAF,EAASC,QAAT,IAAsBhB,QAAQ,CAAEU,WAAF,CAApC;AACA,QAAM,CAAEO,OAAF,EAAWC,UAAX,IAA0BlB,QAAQ,CAAE,KAAF,CAAxC;AACA,QAAMmB,UAAU,GAAGd,aAAa,CAAEI,cAAF,CAAhC;AACA,QAAMW,QAAQ,GAAGnB,MAAM,EAAvB;;AAEA,MAAK,CAAEgB,OAAF,IAAaF,KAAK,KAAKL,WAA5B,EAA0C;AACzCM,IAAAA,QAAQ,CAAEN,WAAF,CAAR;AACA;AAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,QAAMW,QAAQ,GAAKC,KAAF,IAAa;AAC7B,UAAMC,QAAQ,GAAGD,KAAK,CAACE,MAAN,CAAaT,KAA9B;AACAF,IAAAA,QAAQ,CAAE;AAAEY,MAAAA,OAAO,EAAEF;AAAX,KAAF,CAAR;AACAP,IAAAA,QAAQ,CAAEO,QAAF,CAAR;AACAL,IAAAA,UAAU,CAAE,IAAF,CAAV;AACAE,IAAAA,QAAQ,CAACM,OAAT,GAAmBH,QAAnB;AACA,GAND;AAQA;AACD;AACA;AACA;AACA;;;AACC,QAAMI,WAAW,GAAG,MAAM;AACzB,QAAKV,OAAL,EAAe;AACd,YAAMW,MAAM,GAAG1B,KAAK,CAAEa,KAAF,CAApB;AACAD,MAAAA,iBAAiB,CAAEc,MAAF,CAAjB;AACAV,MAAAA,UAAU,CAAE,KAAF,CAAV;AACA;AACD,GAND,CAzCwC,CAiDxC;;;AACAnB,EAAAA,SAAS,CAAE,MAAM;AAChB,WAAO,MAAM;AACZ,UAAKqB,QAAQ,CAACM,OAAd,EAAwB;AACvB,cAAME,MAAM,GAAG1B,KAAK,CAAEkB,QAAQ,CAACM,OAAX,CAApB;AACAZ,QAAAA,iBAAiB,CAAEc,MAAF,CAAjB;AACA;AACD,KALD;AAMA,GAPQ,EAON,EAPM,CAAT;AASA,SACC,8BACC,cAAC,cAAD;AACC,IAAA,EAAE,EAAC,OADJ;AAEC,IAAA,OAAO,EAAI,gBAAgBT,UAAY;AAFxC,KAIGrB,EAAE,CAAE,mBAAF,CAJL,CADD,EAOC,cAAC,QAAD;AACC,IAAA,YAAY,EAAC,KADd;AAEC,IAAA,GAAG,EAAC,MAFL;AAGC,IAAA,KAAK,EAAGiB,KAHT;AAIC,IAAA,QAAQ,EAAGM,QAJZ;AAKC,IAAA,MAAM,EAAGM,WALV;AAMC,IAAA,SAAS,EAAC,yBANX;AAOC,IAAA,EAAE,EAAI,gBAAgBR,UAAY,EAPnC;AAQC,IAAA,WAAW,EAAGrB,EAAE,CAAE,iCAAF;AARjB,IAPD,CADD;AAoBA","sourcesContent":["/**\n * External dependencies\n */\nimport Textarea from 'react-autosize-textarea';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, useState, useRef } from '@wordpress/element';\nimport { parse } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\nimport { VisuallyHidden } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nexport default function PostTextEditor() {\n\tconst postContent = useSelect(\n\t\t( select ) => select( editorStore ).getEditedPostContent(),\n\t\t[]\n\t);\n\n\tconst { editPost, resetEditorBlocks } = useDispatch( editorStore );\n\n\tconst [ value, setValue ] = useState( postContent );\n\tconst [ isDirty, setIsDirty ] = useState( false );\n\tconst instanceId = useInstanceId( PostTextEditor );\n\tconst valueRef = useRef();\n\n\tif ( ! isDirty && value !== postContent ) {\n\t\tsetValue( postContent );\n\t}\n\n\t/**\n\t * Handles a textarea change event to notify the onChange prop callback and\n\t * reflect the new value in the component's own state. This marks the start\n\t * of the user's edits, if not already changed, preventing future props\n\t * changes to value from replacing the rendered value. This is expected to\n\t * be followed by a reset to dirty state via `stopEditing`.\n\t *\n\t * @see stopEditing\n\t *\n\t * @param {Event} event Change event.\n\t */\n\tconst onChange = ( event ) => {\n\t\tconst newValue = event.target.value;\n\t\teditPost( { content: newValue } );\n\t\tsetValue( newValue );\n\t\tsetIsDirty( true );\n\t\tvalueRef.current = newValue;\n\t};\n\n\t/**\n\t * Function called when the user has completed their edits, responsible for\n\t * ensuring that changes, if made, are surfaced to the onPersist prop\n\t * callback and resetting dirty state.\n\t */\n\tconst stopEditing = () => {\n\t\tif ( isDirty ) {\n\t\t\tconst blocks = parse( value );\n\t\t\tresetEditorBlocks( blocks );\n\t\t\tsetIsDirty( false );\n\t\t}\n\t};\n\n\t// Ensure changes aren't lost when component unmounts.\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tif ( valueRef.current ) {\n\t\t\t\tconst blocks = parse( valueRef.current );\n\t\t\t\tresetEditorBlocks( blocks );\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t<>\n\t\t\t<VisuallyHidden\n\t\t\t\tas=\"label\"\n\t\t\t\thtmlFor={ `post-content-${ instanceId }` }\n\t\t\t>\n\t\t\t\t{ __( 'Type text or HTML' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t<Textarea\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tdir=\"auto\"\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonBlur={ stopEditing }\n\t\t\t\tclassName=\"editor-post-text-editor\"\n\t\t\t\tid={ `post-content-${ instanceId }` }\n\t\t\t\tplaceholder={ __( 'Start writing with text or HTML' ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-text-editor/index.js"],"names":["Textarea","__","store","coreStore","useMemo","__unstableSerializeAndClean","useDispatch","useSelect","useInstanceId","VisuallyHidden","editorStore","PostTextEditor","instanceId","content","blocks","type","id","select","getEditedEntityRecord","getCurrentPostType","getCurrentPostId","_type","_id","editedRecord","editEntityRecord","value","Function","event","target","undefined","selection"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,QAAP,MAAqB,yBAArB;AAEA;AACA;AACA;;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,KAAK,IAAIC,SAAlB,QAAmC,sBAAnC;AACA,SAASC,OAAT,QAAwB,oBAAxB;AACA,SAASC,2BAAT,QAA4C,mBAA5C;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,aAAT,QAA8B,oBAA9B;AACA,SAASC,cAAT,QAA+B,uBAA/B;AAEA;AACA;AACA;;AACA,SAASP,KAAK,IAAIQ,WAAlB,QAAqC,aAArC;AAEA,eAAe,SAASC,cAAT,GAA0B;AACxC,QAAMC,UAAU,GAAGJ,aAAa,CAAEG,cAAF,CAAhC;AACA,QAAM;AAAEE,IAAAA,OAAF;AAAWC,IAAAA,MAAX;AAAmBC,IAAAA,IAAnB;AAAyBC,IAAAA;AAAzB,MAAgCT,SAAS,CAAIU,MAAF,IAAc;AAC9D,UAAM;AAAEC,MAAAA;AAAF,QAA4BD,MAAM,CAAEd,SAAF,CAAxC;AACA,UAAM;AAAEgB,MAAAA,kBAAF;AAAsBC,MAAAA;AAAtB,QAA2CH,MAAM,CAAEP,WAAF,CAAvD;;AACA,UAAMW,KAAK,GAAGF,kBAAkB,EAAhC;;AACA,UAAMG,GAAG,GAAGF,gBAAgB,EAA5B;;AACA,UAAMG,YAAY,GAAGL,qBAAqB,CAAE,UAAF,EAAcG,KAAd,EAAqBC,GAArB,CAA1C;AAEA,WAAO;AACNT,MAAAA,OAAO,EAAEU,YAAY,EAAEV,OADjB;AAENC,MAAAA,MAAM,EAAES,YAAY,EAAET,MAFhB;AAGNC,MAAAA,IAAI,EAAEM,KAHA;AAINL,MAAAA,EAAE,EAAEM;AAJE,KAAP;AAMA,GAb8C,EAa5C,EAb4C,CAA/C;AAcA,QAAM;AAAEE,IAAAA;AAAF,MAAuBlB,WAAW,CAAEH,SAAF,CAAxC,CAhBwC,CAiBxC;;AACA,QAAMsB,KAAK,GAAGrB,OAAO,CAAE,MAAM;AAC5B,QAAKS,OAAO,YAAYa,QAAxB,EAAmC;AAClC,aAAOb,OAAO,CAAE;AAAEC,QAAAA;AAAF,OAAF,CAAd;AACA,KAFD,MAEO,IAAKA,MAAL,EAAc;AACpB;AACA;AACA;AACA,aAAOT,2BAA2B,CAAES,MAAF,CAAlC;AACA;;AACD,WAAOD,OAAP;AACA,GAVoB,EAUlB,CAAEA,OAAF,EAAWC,MAAX,CAVkB,CAArB;AAYA,SACC,8BACC,cAAC,cAAD;AACC,IAAA,EAAE,EAAC,OADJ;AAEC,IAAA,OAAO,EAAI,gBAAgBF,UAAY;AAFxC,KAIGX,EAAE,CAAE,mBAAF,CAJL,CADD,EAOC,cAAC,QAAD;AACC,IAAA,YAAY,EAAC,KADd;AAEC,IAAA,GAAG,EAAC,MAFL;AAGC,IAAA,KAAK,EAAGwB,KAHT;AAIC,IAAA,QAAQ,EAAKE,KAAF,IAAa;AACvBH,MAAAA,gBAAgB,CAAE,UAAF,EAAcT,IAAd,EAAoBC,EAApB,EAAwB;AACvCH,QAAAA,OAAO,EAAEc,KAAK,CAACC,MAAN,CAAaH,KADiB;AAEvCX,QAAAA,MAAM,EAAEe,SAF+B;AAGvCC,QAAAA,SAAS,EAAED;AAH4B,OAAxB,CAAhB;AAKA,KAVF;AAWC,IAAA,SAAS,EAAC,yBAXX;AAYC,IAAA,EAAE,EAAI,gBAAgBjB,UAAY,EAZnC;AAaC,IAAA,WAAW,EAAGX,EAAE,CAAE,iCAAF;AAbjB,IAPD,CADD;AAyBA","sourcesContent":["/**\n * External dependencies\n */\nimport Textarea from 'react-autosize-textarea';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useMemo } from '@wordpress/element';\nimport { __unstableSerializeAndClean } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\nimport { VisuallyHidden } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nexport default function PostTextEditor() {\n\tconst instanceId = useInstanceId( PostTextEditor );\n\tconst { content, blocks, type, id } = useSelect( ( select ) => {\n\t\tconst { getEditedEntityRecord } = select( coreStore );\n\t\tconst { getCurrentPostType, getCurrentPostId } = select( editorStore );\n\t\tconst _type = getCurrentPostType();\n\t\tconst _id = getCurrentPostId();\n\t\tconst editedRecord = getEditedEntityRecord( 'postType', _type, _id );\n\n\t\treturn {\n\t\t\tcontent: editedRecord?.content,\n\t\t\tblocks: editedRecord?.blocks,\n\t\t\ttype: _type,\n\t\t\tid: _id,\n\t\t};\n\t}, [] );\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\t// Replicates the logic found in getEditedPostContent().\n\tconst value = useMemo( () => {\n\t\tif ( content instanceof Function ) {\n\t\t\treturn content( { blocks } );\n\t\t} else if ( blocks ) {\n\t\t\t// If we have parsed blocks already, they should be our source of truth.\n\t\t\t// Parsing applies block deprecations and legacy block conversions that\n\t\t\t// unparsed content will not have.\n\t\t\treturn __unstableSerializeAndClean( blocks );\n\t\t}\n\t\treturn content;\n\t}, [ content, blocks ] );\n\n\treturn (\n\t\t<>\n\t\t\t<VisuallyHidden\n\t\t\t\tas=\"label\"\n\t\t\t\thtmlFor={ `post-content-${ instanceId }` }\n\t\t\t>\n\t\t\t\t{ __( 'Type text or HTML' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t<Textarea\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tdir=\"auto\"\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ ( event ) => {\n\t\t\t\t\teditEntityRecord( 'postType', type, id, {\n\t\t\t\t\t\tcontent: event.target.value,\n\t\t\t\t\t\tblocks: undefined,\n\t\t\t\t\t\tselection: undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tclassName=\"editor-post-text-editor\"\n\t\t\t\tid={ `post-content-${ instanceId }` }\n\t\t\t\tplaceholder={ __( 'Start writing with text or HTML' ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
@@ -13,7 +13,7 @@ import inserterMediaCategories from '../media-categories';
13
13
  import { mediaUpload } from '../../utils';
14
14
  import { store as editorStore } from '../../store';
15
15
  const EMPTY_BLOCKS_LIST = [];
16
- const BLOCK_EDITOR_SETTINGS = ['__experimentalBlockDirectory', '__experimentalDiscussionSettings', '__experimentalFeatures', '__experimentalGlobalStylesBaseStyles', '__experimentalPreferredStyleVariations', '__experimentalSetIsInserterOpened', '__unstableGalleryWithImageBlocks', 'alignWide', 'allowedBlockTypes', 'blockInspectorTabs', 'allowedMimeTypes', 'bodyPlaceholder', 'canLockBlocks', 'capabilities', 'clearBlockSelection', 'codeEditingEnabled', 'colors', 'disableCustomColors', 'disableCustomFontSizes', 'disableCustomSpacingSizes', 'disableCustomGradients', 'disableLayoutStyles', 'enableCustomLineHeight', 'enableCustomSpacing', 'enableCustomUnits', 'enableOpenverseMediaCategory', 'focusMode', 'fontSizes', 'gradients', 'generateAnchors', 'hasFixedToolbar', 'hasInlineToolbar', 'isDistractionFree', 'imageDefaultSize', 'imageDimensions', 'imageEditing', 'imageSizes', 'isRTL', 'keepCaretInsideBlock', 'locale', 'maxWidth', 'onUpdateDefaultBlockStyles', 'postContentAttributes', 'postsPerPage', 'readOnly', 'styles', 'template', 'templateLock', 'titlePlaceholder', 'supportsLayout', 'widgetTypesToHideFromLegacyWidgetBlock', '__unstableHasCustomAppender', '__unstableIsPreviewMode', '__unstableResolvedAssets', '__unstableIsBlockBasedTheme', 'behaviors'];
16
+ const BLOCK_EDITOR_SETTINGS = ['__experimentalBlockDirectory', '__experimentalDiscussionSettings', '__experimentalFeatures', '__experimentalGlobalStylesBaseStyles', '__experimentalPreferredStyleVariations', '__experimentalSetIsInserterOpened', '__unstableGalleryWithImageBlocks', 'alignWide', 'allowedBlockTypes', 'blockInspectorTabs', 'allowedMimeTypes', 'bodyPlaceholder', 'canLockBlocks', 'capabilities', 'clearBlockSelection', 'codeEditingEnabled', 'colors', 'disableCustomColors', 'disableCustomFontSizes', 'disableCustomSpacingSizes', 'disableCustomGradients', 'disableLayoutStyles', 'enableCustomLineHeight', 'enableCustomSpacing', 'enableCustomUnits', 'enableOpenverseMediaCategory', 'focusMode', 'distractionFree', 'fontSizes', 'gradients', 'generateAnchors', 'hasFixedToolbar', 'hasInlineToolbar', 'isDistractionFree', 'imageDefaultSize', 'imageDimensions', 'imageEditing', 'imageSizes', 'isRTL', 'keepCaretInsideBlock', 'locale', 'maxWidth', 'onUpdateDefaultBlockStyles', 'postContentAttributes', 'postsPerPage', 'readOnly', 'styles', 'template', 'templateLock', 'titlePlaceholder', 'supportsLayout', 'widgetTypesToHideFromLegacyWidgetBlock', '__unstableHasCustomAppender', '__unstableIsPreviewMode', '__unstableResolvedAssets', '__unstableIsBlockBasedTheme', 'behaviors'];
17
17
  /**
18
18
  * React hook used to compute the block editor settings to use for the post editor.
19
19
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/provider/use-block-editor-settings.js"],"names":["Platform","useMemo","useDispatch","useSelect","store","coreStore","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalFetchUrlData","fetchUrlData","__","inserterMediaCategories","mediaUpload","editorStore","EMPTY_BLOCKS_LIST","BLOCK_EDITOR_SETTINGS","useBlockEditorSettings","settings","hasTemplate","reusableBlocks","hasUploadPermissions","canUseUnfilteredHTML","userCanCreatePages","pageOnFront","postType","select","canUserUseUnfilteredHTML","getCurrentPostType","isWeb","OS","canUser","getEntityRecord","siteSettings","undefined","getEntityRecords","per_page","page_on_front","settingsBlockPatterns","__experimentalAdditionalBlockPatterns","__experimentalBlockPatterns","settingsBlockPatternCategories","__experimentalAdditionalBlockPatternCategories","__experimentalBlockPatternCategories","restBlockPatterns","restBlockPatternCategories","getBlockPatterns","getBlockPatternCategories","blockPatterns","filter","x","index","arr","findIndex","y","name","postTypes","Array","isArray","includes","blockPatternCategories","undo","saveEntityRecord","createPageEntity","options","Promise","reject","message","Object","fromEntries","entries","key","__experimentalReusableBlocks","search","searchOptions","__experimentalFetchRichUrlData","__experimentalCanUserUseUnfilteredHTML","__experimentalUndo","outlineMode","__experimentalCreatePageEntity","__experimentalUserCanCreatePages","__experimentalPreferPatternsOnRoot"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Platform, useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tstore as coreStore,\n\t__experimentalFetchLinkSuggestions as fetchLinkSuggestions,\n\t__experimentalFetchUrlData as fetchUrlData,\n} from '@wordpress/core-data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport inserterMediaCategories from '../media-categories';\nimport { mediaUpload } from '../../utils';\nimport { store as editorStore } from '../../store';\n\nconst EMPTY_BLOCKS_LIST = [];\n\nconst BLOCK_EDITOR_SETTINGS = [\n\t'__experimentalBlockDirectory',\n\t'__experimentalDiscussionSettings',\n\t'__experimentalFeatures',\n\t'__experimentalGlobalStylesBaseStyles',\n\t'__experimentalPreferredStyleVariations',\n\t'__experimentalSetIsInserterOpened',\n\t'__unstableGalleryWithImageBlocks',\n\t'alignWide',\n\t'allowedBlockTypes',\n\t'blockInspectorTabs',\n\t'allowedMimeTypes',\n\t'bodyPlaceholder',\n\t'canLockBlocks',\n\t'capabilities',\n\t'clearBlockSelection',\n\t'codeEditingEnabled',\n\t'colors',\n\t'disableCustomColors',\n\t'disableCustomFontSizes',\n\t'disableCustomSpacingSizes',\n\t'disableCustomGradients',\n\t'disableLayoutStyles',\n\t'enableCustomLineHeight',\n\t'enableCustomSpacing',\n\t'enableCustomUnits',\n\t'enableOpenverseMediaCategory',\n\t'focusMode',\n\t'fontSizes',\n\t'gradients',\n\t'generateAnchors',\n\t'hasFixedToolbar',\n\t'hasInlineToolbar',\n\t'isDistractionFree',\n\t'imageDefaultSize',\n\t'imageDimensions',\n\t'imageEditing',\n\t'imageSizes',\n\t'isRTL',\n\t'keepCaretInsideBlock',\n\t'locale',\n\t'maxWidth',\n\t'onUpdateDefaultBlockStyles',\n\t'postContentAttributes',\n\t'postsPerPage',\n\t'readOnly',\n\t'styles',\n\t'template',\n\t'templateLock',\n\t'titlePlaceholder',\n\t'supportsLayout',\n\t'widgetTypesToHideFromLegacyWidgetBlock',\n\t'__unstableHasCustomAppender',\n\t'__unstableIsPreviewMode',\n\t'__unstableResolvedAssets',\n\t'__unstableIsBlockBasedTheme',\n\t'behaviors',\n];\n\n/**\n * React hook used to compute the block editor settings to use for the post editor.\n *\n * @param {Object} settings EditorProvider settings prop.\n * @param {boolean} hasTemplate Whether template mode is enabled.\n *\n * @return {Object} Block Editor Settings.\n */\nfunction useBlockEditorSettings( settings, hasTemplate ) {\n\tconst {\n\t\treusableBlocks,\n\t\thasUploadPermissions,\n\t\tcanUseUnfilteredHTML,\n\t\tuserCanCreatePages,\n\t\tpageOnFront,\n\t\tpostType,\n\t} = useSelect( ( select ) => {\n\t\tconst { canUserUseUnfilteredHTML, getCurrentPostType } =\n\t\t\tselect( editorStore );\n\t\tconst isWeb = Platform.OS === 'web';\n\t\tconst { canUser, getEntityRecord } = select( coreStore );\n\n\t\tconst siteSettings = canUser( 'read', 'settings' )\n\t\t\t? getEntityRecord( 'root', 'site' )\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\tcanUseUnfilteredHTML: canUserUseUnfilteredHTML(),\n\t\t\treusableBlocks: isWeb\n\t\t\t\t? select( coreStore ).getEntityRecords(\n\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t'wp_block',\n\t\t\t\t\t\t{ per_page: -1 }\n\t\t\t\t )\n\t\t\t\t: EMPTY_BLOCKS_LIST, // Reusable blocks are fetched in the native version of this hook.\n\t\t\thasUploadPermissions: canUser( 'create', 'media' ) ?? true,\n\t\t\tuserCanCreatePages: canUser( 'create', 'pages' ),\n\t\t\tpageOnFront: siteSettings?.page_on_front,\n\t\t\tpostType: getCurrentPostType(),\n\t\t};\n\t}, [] );\n\n\tconst settingsBlockPatterns =\n\t\tsettings.__experimentalAdditionalBlockPatterns ?? // WP 6.0\n\t\tsettings.__experimentalBlockPatterns; // WP 5.9\n\tconst settingsBlockPatternCategories =\n\t\tsettings.__experimentalAdditionalBlockPatternCategories ?? // WP 6.0\n\t\tsettings.__experimentalBlockPatternCategories; // WP 5.9\n\n\tconst { restBlockPatterns, restBlockPatternCategories } = useSelect(\n\t\t( select ) => ( {\n\t\t\trestBlockPatterns: select( coreStore ).getBlockPatterns(),\n\t\t\trestBlockPatternCategories:\n\t\t\t\tselect( coreStore ).getBlockPatternCategories(),\n\t\t} ),\n\t\t[]\n\t);\n\n\tconst blockPatterns = useMemo(\n\t\t() =>\n\t\t\t[\n\t\t\t\t...( settingsBlockPatterns || [] ),\n\t\t\t\t...( restBlockPatterns || [] ),\n\t\t\t]\n\t\t\t\t.filter(\n\t\t\t\t\t( x, index, arr ) =>\n\t\t\t\t\t\tindex === arr.findIndex( ( y ) => x.name === y.name )\n\t\t\t\t)\n\t\t\t\t.filter( ( { postTypes } ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t! postTypes ||\n\t\t\t\t\t\t( Array.isArray( postTypes ) &&\n\t\t\t\t\t\t\tpostTypes.includes( postType ) )\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t[ settingsBlockPatterns, restBlockPatterns, postType ]\n\t);\n\n\tconst blockPatternCategories = useMemo(\n\t\t() =>\n\t\t\t[\n\t\t\t\t...( settingsBlockPatternCategories || [] ),\n\t\t\t\t...( restBlockPatternCategories || [] ),\n\t\t\t].filter(\n\t\t\t\t( x, index, arr ) =>\n\t\t\t\t\tindex === arr.findIndex( ( y ) => x.name === y.name )\n\t\t\t),\n\t\t[ settingsBlockPatternCategories, restBlockPatternCategories ]\n\t);\n\n\tconst { undo } = useDispatch( editorStore );\n\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\t/**\n\t * Creates a Post entity.\n\t * This is utilised by the Link UI to allow for on-the-fly creation of Posts/Pages.\n\t *\n\t * @param {Object} options parameters for the post being created. These mirror those used on 3rd param of saveEntityRecord.\n\t * @return {Object} the post type object that was created.\n\t */\n\tconst createPageEntity = ( options ) => {\n\t\tif ( ! userCanCreatePages ) {\n\t\t\treturn Promise.reject( {\n\t\t\t\tmessage: __( 'You do not have permission to create Pages.' ),\n\t\t\t} );\n\t\t}\n\t\treturn saveEntityRecord( 'postType', 'page', options );\n\t};\n\n\treturn useMemo(\n\t\t() => ( {\n\t\t\t...Object.fromEntries(\n\t\t\t\tObject.entries( settings ).filter( ( [ key ] ) =>\n\t\t\t\t\tBLOCK_EDITOR_SETTINGS.includes( key )\n\t\t\t\t)\n\t\t\t),\n\t\t\tmediaUpload: hasUploadPermissions ? mediaUpload : undefined,\n\t\t\t__experimentalReusableBlocks: reusableBlocks,\n\t\t\t__experimentalBlockPatterns: blockPatterns,\n\t\t\t__experimentalBlockPatternCategories: blockPatternCategories,\n\t\t\t__experimentalFetchLinkSuggestions: ( search, searchOptions ) =>\n\t\t\t\tfetchLinkSuggestions( search, searchOptions, settings ),\n\t\t\tinserterMediaCategories,\n\t\t\t__experimentalFetchRichUrlData: fetchUrlData,\n\t\t\t__experimentalCanUserUseUnfilteredHTML: canUseUnfilteredHTML,\n\t\t\t__experimentalUndo: undo,\n\t\t\toutlineMode: hasTemplate,\n\t\t\t__experimentalCreatePageEntity: createPageEntity,\n\t\t\t__experimentalUserCanCreatePages: userCanCreatePages,\n\t\t\tpageOnFront,\n\t\t\t__experimentalPreferPatternsOnRoot: hasTemplate,\n\t\t} ),\n\t\t[\n\t\t\tsettings,\n\t\t\thasUploadPermissions,\n\t\t\treusableBlocks,\n\t\t\tblockPatterns,\n\t\t\tblockPatternCategories,\n\t\t\tcanUseUnfilteredHTML,\n\t\t\tundo,\n\t\t\thasTemplate,\n\t\t\tuserCanCreatePages,\n\t\t\tpageOnFront,\n\t\t]\n\t);\n}\n\nexport default useBlockEditorSettings;\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/provider/use-block-editor-settings.js"],"names":["Platform","useMemo","useDispatch","useSelect","store","coreStore","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalFetchUrlData","fetchUrlData","__","inserterMediaCategories","mediaUpload","editorStore","EMPTY_BLOCKS_LIST","BLOCK_EDITOR_SETTINGS","useBlockEditorSettings","settings","hasTemplate","reusableBlocks","hasUploadPermissions","canUseUnfilteredHTML","userCanCreatePages","pageOnFront","postType","select","canUserUseUnfilteredHTML","getCurrentPostType","isWeb","OS","canUser","getEntityRecord","siteSettings","undefined","getEntityRecords","per_page","page_on_front","settingsBlockPatterns","__experimentalAdditionalBlockPatterns","__experimentalBlockPatterns","settingsBlockPatternCategories","__experimentalAdditionalBlockPatternCategories","__experimentalBlockPatternCategories","restBlockPatterns","restBlockPatternCategories","getBlockPatterns","getBlockPatternCategories","blockPatterns","filter","x","index","arr","findIndex","y","name","postTypes","Array","isArray","includes","blockPatternCategories","undo","saveEntityRecord","createPageEntity","options","Promise","reject","message","Object","fromEntries","entries","key","__experimentalReusableBlocks","search","searchOptions","__experimentalFetchRichUrlData","__experimentalCanUserUseUnfilteredHTML","__experimentalUndo","outlineMode","__experimentalCreatePageEntity","__experimentalUserCanCreatePages","__experimentalPreferPatternsOnRoot"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Platform, useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tstore as coreStore,\n\t__experimentalFetchLinkSuggestions as fetchLinkSuggestions,\n\t__experimentalFetchUrlData as fetchUrlData,\n} from '@wordpress/core-data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport inserterMediaCategories from '../media-categories';\nimport { mediaUpload } from '../../utils';\nimport { store as editorStore } from '../../store';\n\nconst EMPTY_BLOCKS_LIST = [];\n\nconst BLOCK_EDITOR_SETTINGS = [\n\t'__experimentalBlockDirectory',\n\t'__experimentalDiscussionSettings',\n\t'__experimentalFeatures',\n\t'__experimentalGlobalStylesBaseStyles',\n\t'__experimentalPreferredStyleVariations',\n\t'__experimentalSetIsInserterOpened',\n\t'__unstableGalleryWithImageBlocks',\n\t'alignWide',\n\t'allowedBlockTypes',\n\t'blockInspectorTabs',\n\t'allowedMimeTypes',\n\t'bodyPlaceholder',\n\t'canLockBlocks',\n\t'capabilities',\n\t'clearBlockSelection',\n\t'codeEditingEnabled',\n\t'colors',\n\t'disableCustomColors',\n\t'disableCustomFontSizes',\n\t'disableCustomSpacingSizes',\n\t'disableCustomGradients',\n\t'disableLayoutStyles',\n\t'enableCustomLineHeight',\n\t'enableCustomSpacing',\n\t'enableCustomUnits',\n\t'enableOpenverseMediaCategory',\n\t'focusMode',\n\t'distractionFree',\n\t'fontSizes',\n\t'gradients',\n\t'generateAnchors',\n\t'hasFixedToolbar',\n\t'hasInlineToolbar',\n\t'isDistractionFree',\n\t'imageDefaultSize',\n\t'imageDimensions',\n\t'imageEditing',\n\t'imageSizes',\n\t'isRTL',\n\t'keepCaretInsideBlock',\n\t'locale',\n\t'maxWidth',\n\t'onUpdateDefaultBlockStyles',\n\t'postContentAttributes',\n\t'postsPerPage',\n\t'readOnly',\n\t'styles',\n\t'template',\n\t'templateLock',\n\t'titlePlaceholder',\n\t'supportsLayout',\n\t'widgetTypesToHideFromLegacyWidgetBlock',\n\t'__unstableHasCustomAppender',\n\t'__unstableIsPreviewMode',\n\t'__unstableResolvedAssets',\n\t'__unstableIsBlockBasedTheme',\n\t'behaviors',\n];\n\n/**\n * React hook used to compute the block editor settings to use for the post editor.\n *\n * @param {Object} settings EditorProvider settings prop.\n * @param {boolean} hasTemplate Whether template mode is enabled.\n *\n * @return {Object} Block Editor Settings.\n */\nfunction useBlockEditorSettings( settings, hasTemplate ) {\n\tconst {\n\t\treusableBlocks,\n\t\thasUploadPermissions,\n\t\tcanUseUnfilteredHTML,\n\t\tuserCanCreatePages,\n\t\tpageOnFront,\n\t\tpostType,\n\t} = useSelect( ( select ) => {\n\t\tconst { canUserUseUnfilteredHTML, getCurrentPostType } =\n\t\t\tselect( editorStore );\n\t\tconst isWeb = Platform.OS === 'web';\n\t\tconst { canUser, getEntityRecord } = select( coreStore );\n\n\t\tconst siteSettings = canUser( 'read', 'settings' )\n\t\t\t? getEntityRecord( 'root', 'site' )\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\tcanUseUnfilteredHTML: canUserUseUnfilteredHTML(),\n\t\t\treusableBlocks: isWeb\n\t\t\t\t? select( coreStore ).getEntityRecords(\n\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t'wp_block',\n\t\t\t\t\t\t{ per_page: -1 }\n\t\t\t\t )\n\t\t\t\t: EMPTY_BLOCKS_LIST, // Reusable blocks are fetched in the native version of this hook.\n\t\t\thasUploadPermissions: canUser( 'create', 'media' ) ?? true,\n\t\t\tuserCanCreatePages: canUser( 'create', 'pages' ),\n\t\t\tpageOnFront: siteSettings?.page_on_front,\n\t\t\tpostType: getCurrentPostType(),\n\t\t};\n\t}, [] );\n\n\tconst settingsBlockPatterns =\n\t\tsettings.__experimentalAdditionalBlockPatterns ?? // WP 6.0\n\t\tsettings.__experimentalBlockPatterns; // WP 5.9\n\tconst settingsBlockPatternCategories =\n\t\tsettings.__experimentalAdditionalBlockPatternCategories ?? // WP 6.0\n\t\tsettings.__experimentalBlockPatternCategories; // WP 5.9\n\n\tconst { restBlockPatterns, restBlockPatternCategories } = useSelect(\n\t\t( select ) => ( {\n\t\t\trestBlockPatterns: select( coreStore ).getBlockPatterns(),\n\t\t\trestBlockPatternCategories:\n\t\t\t\tselect( coreStore ).getBlockPatternCategories(),\n\t\t} ),\n\t\t[]\n\t);\n\n\tconst blockPatterns = useMemo(\n\t\t() =>\n\t\t\t[\n\t\t\t\t...( settingsBlockPatterns || [] ),\n\t\t\t\t...( restBlockPatterns || [] ),\n\t\t\t]\n\t\t\t\t.filter(\n\t\t\t\t\t( x, index, arr ) =>\n\t\t\t\t\t\tindex === arr.findIndex( ( y ) => x.name === y.name )\n\t\t\t\t)\n\t\t\t\t.filter( ( { postTypes } ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t! postTypes ||\n\t\t\t\t\t\t( Array.isArray( postTypes ) &&\n\t\t\t\t\t\t\tpostTypes.includes( postType ) )\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t[ settingsBlockPatterns, restBlockPatterns, postType ]\n\t);\n\n\tconst blockPatternCategories = useMemo(\n\t\t() =>\n\t\t\t[\n\t\t\t\t...( settingsBlockPatternCategories || [] ),\n\t\t\t\t...( restBlockPatternCategories || [] ),\n\t\t\t].filter(\n\t\t\t\t( x, index, arr ) =>\n\t\t\t\t\tindex === arr.findIndex( ( y ) => x.name === y.name )\n\t\t\t),\n\t\t[ settingsBlockPatternCategories, restBlockPatternCategories ]\n\t);\n\n\tconst { undo } = useDispatch( editorStore );\n\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\t/**\n\t * Creates a Post entity.\n\t * This is utilised by the Link UI to allow for on-the-fly creation of Posts/Pages.\n\t *\n\t * @param {Object} options parameters for the post being created. These mirror those used on 3rd param of saveEntityRecord.\n\t * @return {Object} the post type object that was created.\n\t */\n\tconst createPageEntity = ( options ) => {\n\t\tif ( ! userCanCreatePages ) {\n\t\t\treturn Promise.reject( {\n\t\t\t\tmessage: __( 'You do not have permission to create Pages.' ),\n\t\t\t} );\n\t\t}\n\t\treturn saveEntityRecord( 'postType', 'page', options );\n\t};\n\n\treturn useMemo(\n\t\t() => ( {\n\t\t\t...Object.fromEntries(\n\t\t\t\tObject.entries( settings ).filter( ( [ key ] ) =>\n\t\t\t\t\tBLOCK_EDITOR_SETTINGS.includes( key )\n\t\t\t\t)\n\t\t\t),\n\t\t\tmediaUpload: hasUploadPermissions ? mediaUpload : undefined,\n\t\t\t__experimentalReusableBlocks: reusableBlocks,\n\t\t\t__experimentalBlockPatterns: blockPatterns,\n\t\t\t__experimentalBlockPatternCategories: blockPatternCategories,\n\t\t\t__experimentalFetchLinkSuggestions: ( search, searchOptions ) =>\n\t\t\t\tfetchLinkSuggestions( search, searchOptions, settings ),\n\t\t\tinserterMediaCategories,\n\t\t\t__experimentalFetchRichUrlData: fetchUrlData,\n\t\t\t__experimentalCanUserUseUnfilteredHTML: canUseUnfilteredHTML,\n\t\t\t__experimentalUndo: undo,\n\t\t\toutlineMode: hasTemplate,\n\t\t\t__experimentalCreatePageEntity: createPageEntity,\n\t\t\t__experimentalUserCanCreatePages: userCanCreatePages,\n\t\t\tpageOnFront,\n\t\t\t__experimentalPreferPatternsOnRoot: hasTemplate,\n\t\t} ),\n\t\t[\n\t\t\tsettings,\n\t\t\thasUploadPermissions,\n\t\t\treusableBlocks,\n\t\t\tblockPatterns,\n\t\t\tblockPatternCategories,\n\t\t\tcanUseUnfilteredHTML,\n\t\t\tundo,\n\t\t\thasTemplate,\n\t\t\tuserCanCreatePages,\n\t\t\tpageOnFront,\n\t\t]\n\t);\n}\n\nexport default useBlockEditorSettings;\n"]}
@@ -7,6 +7,7 @@ import { parse, synchronizeBlocksWithTemplate, __unstableSerializeAndClean } fro
7
7
  import { store as noticesStore } from '@wordpress/notices';
8
8
  import { store as coreStore } from '@wordpress/core-data';
9
9
  import { store as blockEditorStore } from '@wordpress/block-editor';
10
+ import { applyFilters } from '@wordpress/hooks';
10
11
  import { store as preferencesStore } from '@wordpress/preferences';
11
12
  /**
12
13
  * Internal dependencies
@@ -173,11 +174,18 @@ export const savePost = (options = {}) => async ({
173
174
  options
174
175
  });
175
176
  await registry.dispatch(coreStore).saveEntityRecord('postType', previousRecord.type, edits, options);
177
+ let error = registry.select(coreStore).getLastEntitySaveError('postType', previousRecord.type, previousRecord.id);
178
+
179
+ if (!error) {
180
+ await applyFilters('editor.__unstableSavePost', Promise.resolve(), options).catch(err => {
181
+ error = err;
182
+ });
183
+ }
184
+
176
185
  dispatch({
177
186
  type: 'REQUEST_POST_UPDATE_FINISH',
178
187
  options
179
188
  });
180
- const error = registry.select(coreStore).getLastEntitySaveError('postType', previousRecord.type, previousRecord.id);
181
189
 
182
190
  if (error) {
183
191
  const args = getNotificationArgumentsForSaveFail({
@@ -292,6 +300,28 @@ export const autosave = ({
292
300
  });
293
301
  }
294
302
  };
303
+ export const __unstableSaveForPreview = ({
304
+ forceIsAutosaveable
305
+ }) => async ({
306
+ select,
307
+ dispatch
308
+ }) => {
309
+ if ((forceIsAutosaveable || select.isEditedPostAutosaveable()) && !select.isPostLocked()) {
310
+ const isDraft = ['draft', 'auto-draft'].includes(select.getEditedPostAttribute('status'));
311
+
312
+ if (isDraft) {
313
+ await dispatch.savePost({
314
+ isPreview: true
315
+ });
316
+ } else {
317
+ await dispatch.autosave({
318
+ isPreview: true
319
+ });
320
+ }
321
+ }
322
+
323
+ return select.getEditedPostPreviewLink();
324
+ };
295
325
  /**
296
326
  * Action that restores last popped state in undo history.
297
327
  */