@wordpress/editor 14.11.0 → 14.12.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 (165) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +0 -8
  3. package/build/components/collab-sidebar/add-comment.js +5 -6
  4. package/build/components/collab-sidebar/add-comment.js.map +1 -1
  5. package/build/components/collab-sidebar/index.js +75 -73
  6. package/build/components/collab-sidebar/index.js.map +1 -1
  7. package/build/components/commands/index.js +142 -34
  8. package/build/components/commands/index.js.map +1 -1
  9. package/build/components/create-template-part-modal/index.js +1 -0
  10. package/build/components/create-template-part-modal/index.js.map +1 -1
  11. package/build/components/document-bar/index.js +9 -3
  12. package/build/components/document-bar/index.js.map +1 -1
  13. package/build/components/document-tools/index.js +8 -4
  14. package/build/components/document-tools/index.js.map +1 -1
  15. package/build/components/editor-interface/index.js +1 -2
  16. package/build/components/editor-interface/index.js.map +1 -1
  17. package/build/components/global-styles-provider/index.js +20 -8
  18. package/build/components/global-styles-provider/index.js.map +1 -1
  19. package/build/components/header/index.js +10 -12
  20. package/build/components/header/index.js.map +1 -1
  21. package/build/components/more-menu/index.js +9 -7
  22. package/build/components/more-menu/index.js.map +1 -1
  23. package/build/components/post-taxonomies/flat-term-selector.js +10 -8
  24. package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
  25. package/build/components/post-template/swap-template-button.js +0 -3
  26. package/build/components/post-template/swap-template-button.js.map +1 -1
  27. package/build/components/post-transform-panel/index.js +0 -3
  28. package/build/components/post-transform-panel/index.js.map +1 -1
  29. package/build/components/preferences-modal/index.js +26 -22
  30. package/build/components/preferences-modal/index.js.map +1 -1
  31. package/build/components/preview-dropdown/index.js +23 -4
  32. package/build/components/preview-dropdown/index.js.map +1 -1
  33. package/build/components/provider/use-block-editor-settings.js +10 -9
  34. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  35. package/build/components/sidebar/post-summary.js +2 -2
  36. package/build/components/sidebar/post-summary.js.map +1 -1
  37. package/build/components/start-page-options/index.js +0 -3
  38. package/build/components/start-page-options/index.js.map +1 -1
  39. package/build/components/start-template-options/index.js +0 -3
  40. package/build/components/start-template-options/index.js.map +1 -1
  41. package/build/components/visual-editor/index.js +5 -2
  42. package/build/components/visual-editor/index.js.map +1 -1
  43. package/build/store/actions.js +65 -16
  44. package/build/store/actions.js.map +1 -1
  45. package/build/store/constants.js +0 -2
  46. package/build/store/constants.js.map +1 -1
  47. package/build/store/index.js +0 -4
  48. package/build/store/index.js.map +1 -1
  49. package/build/store/selectors.js +2 -2
  50. package/build/store/selectors.js.map +1 -1
  51. package/build-module/components/collab-sidebar/add-comment.js +5 -6
  52. package/build-module/components/collab-sidebar/add-comment.js.map +1 -1
  53. package/build-module/components/collab-sidebar/index.js +76 -74
  54. package/build-module/components/collab-sidebar/index.js.map +1 -1
  55. package/build-module/components/commands/index.js +145 -38
  56. package/build-module/components/commands/index.js.map +1 -1
  57. package/build-module/components/create-template-part-modal/index.js +1 -0
  58. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  59. package/build-module/components/document-bar/index.js +10 -4
  60. package/build-module/components/document-bar/index.js.map +1 -1
  61. package/build-module/components/document-tools/index.js +8 -4
  62. package/build-module/components/document-tools/index.js.map +1 -1
  63. package/build-module/components/editor-interface/index.js +1 -2
  64. package/build-module/components/editor-interface/index.js.map +1 -1
  65. package/build-module/components/global-styles-provider/index.js +20 -8
  66. package/build-module/components/global-styles-provider/index.js.map +1 -1
  67. package/build-module/components/header/index.js +10 -12
  68. package/build-module/components/header/index.js.map +1 -1
  69. package/build-module/components/more-menu/index.js +9 -7
  70. package/build-module/components/more-menu/index.js.map +1 -1
  71. package/build-module/components/post-taxonomies/flat-term-selector.js +10 -8
  72. package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
  73. package/build-module/components/post-template/swap-template-button.js +0 -3
  74. package/build-module/components/post-template/swap-template-button.js.map +1 -1
  75. package/build-module/components/post-transform-panel/index.js +0 -3
  76. package/build-module/components/post-transform-panel/index.js.map +1 -1
  77. package/build-module/components/preferences-modal/index.js +26 -22
  78. package/build-module/components/preferences-modal/index.js.map +1 -1
  79. package/build-module/components/preview-dropdown/index.js +24 -5
  80. package/build-module/components/preview-dropdown/index.js.map +1 -1
  81. package/build-module/components/provider/use-block-editor-settings.js +11 -10
  82. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  83. package/build-module/components/sidebar/post-summary.js +2 -2
  84. package/build-module/components/sidebar/post-summary.js.map +1 -1
  85. package/build-module/components/start-page-options/index.js +0 -3
  86. package/build-module/components/start-page-options/index.js.map +1 -1
  87. package/build-module/components/start-template-options/index.js +0 -3
  88. package/build-module/components/start-template-options/index.js.map +1 -1
  89. package/build-module/components/visual-editor/index.js +5 -2
  90. package/build-module/components/visual-editor/index.js.map +1 -1
  91. package/build-module/store/actions.js +61 -14
  92. package/build-module/store/actions.js.map +1 -1
  93. package/build-module/store/constants.js +0 -2
  94. package/build-module/store/constants.js.map +1 -1
  95. package/build-module/store/index.js +0 -4
  96. package/build-module/store/index.js.map +1 -1
  97. package/build-module/store/selectors.js +2 -2
  98. package/build-module/store/selectors.js.map +1 -1
  99. package/build-style/style-rtl.css +22 -6
  100. package/build-style/style.css +22 -6
  101. package/build-types/components/collab-sidebar/add-comment.d.ts.map +1 -1
  102. package/build-types/components/collab-sidebar/index.d.ts.map +1 -1
  103. package/build-types/components/commands/index.d.ts.map +1 -1
  104. package/build-types/components/create-template-part-modal/index.d.ts.map +1 -1
  105. package/build-types/components/document-bar/index.d.ts.map +1 -1
  106. package/build-types/components/document-tools/index.d.ts.map +1 -1
  107. package/build-types/components/editor-interface/index.d.ts.map +1 -1
  108. package/build-types/components/global-styles-provider/index.d.ts.map +1 -1
  109. package/build-types/components/header/index.d.ts +1 -2
  110. package/build-types/components/header/index.d.ts.map +1 -1
  111. package/build-types/components/more-menu/index.d.ts.map +1 -1
  112. package/build-types/components/post-taxonomies/flat-term-selector.d.ts.map +1 -1
  113. package/build-types/components/post-template/hooks.d.ts +2 -2
  114. package/build-types/components/post-template/swap-template-button.d.ts.map +1 -1
  115. package/build-types/components/post-transform-panel/index.d.ts.map +1 -1
  116. package/build-types/components/preferences-modal/index.d.ts.map +1 -1
  117. package/build-types/components/preview-dropdown/index.d.ts.map +1 -1
  118. package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
  119. package/build-types/components/start-page-options/index.d.ts.map +1 -1
  120. package/build-types/components/start-template-options/index.d.ts.map +1 -1
  121. package/build-types/components/visual-editor/index.d.ts.map +1 -1
  122. package/build-types/dataviews/store/reducer.d.ts +5 -2
  123. package/build-types/dataviews/store/reducer.d.ts.map +1 -1
  124. package/build-types/lock-unlock.d.ts +2 -2
  125. package/build-types/store/actions.d.ts +9 -1
  126. package/build-types/store/actions.d.ts.map +1 -1
  127. package/build-types/store/constants.d.ts +0 -2
  128. package/build-types/store/constants.d.ts.map +1 -1
  129. package/build-types/store/index.d.ts +9 -11
  130. package/build-types/store/index.d.ts.map +1 -1
  131. package/build-types/store/reducer.d.ts +24 -4
  132. package/build-types/store/reducer.d.ts.map +1 -1
  133. package/build-types/store/selectors.d.ts +3 -3
  134. package/build-types/store/selectors.d.ts.map +1 -1
  135. package/package.json +4 -3
  136. package/src/components/collab-sidebar/add-comment.js +17 -20
  137. package/src/components/collab-sidebar/index.js +79 -88
  138. package/src/components/commands/index.js +390 -270
  139. package/src/components/create-template-part-modal/index.js +1 -0
  140. package/src/components/document-bar/index.js +10 -1
  141. package/src/components/document-bar/style.scss +13 -0
  142. package/src/components/document-tools/index.js +7 -1
  143. package/src/components/editor-interface/index.js +0 -1
  144. package/src/components/global-styles-provider/index.js +20 -8
  145. package/src/components/header/index.js +18 -10
  146. package/src/components/more-menu/index.js +12 -7
  147. package/src/components/plugin-post-publish-panel/test/__snapshots__/index.js.snap +1 -1
  148. package/src/components/post-taxonomies/flat-term-selector.js +8 -8
  149. package/src/components/post-template/swap-template-button.js +0 -3
  150. package/src/components/post-transform-panel/index.js +0 -3
  151. package/src/components/preferences-modal/index.js +26 -19
  152. package/src/components/preferences-modal/test/index.js +1 -1
  153. package/src/components/preview-dropdown/index.js +45 -16
  154. package/src/components/provider/use-block-editor-settings.js +10 -9
  155. package/src/components/sidebar/post-summary.js +1 -1
  156. package/src/components/sidebar/style.scss +1 -3
  157. package/src/components/start-page-options/index.js +0 -3
  158. package/src/components/start-template-options/index.js +0 -3
  159. package/src/components/visual-editor/index.js +7 -1
  160. package/src/components/visual-editor/style.scss +11 -0
  161. package/src/store/actions.js +110 -33
  162. package/src/store/constants.ts +0 -2
  163. package/src/store/index.js +0 -4
  164. package/src/store/selectors.js +2 -2
  165. package/tsconfig.tsbuildinfo +1 -1
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { useSelect, useDispatch, resolveSelect } from '@wordpress/data';
6
- import { useState, useEffect, useMemo } from '@wordpress/element';
6
+ import { useState, useMemo } from '@wordpress/element';
7
7
  import { comment as commentIcon } from '@wordpress/icons';
8
8
  import { addFilter } from '@wordpress/hooks';
9
9
  import { store as noticesStore } from '@wordpress/notices';
@@ -22,7 +22,6 @@ import { store as editorStore } from '../../store';
22
22
  import AddCommentButton from './comment-button';
23
23
  import AddCommentToolbarButton from './comment-button-toolbar';
24
24
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
25
- const threadsEmptyArray = [];
26
25
  const isBlockCommentExperimentEnabled = window?.__experimentalEnableBlockComment;
27
26
  const modifyBlockCommentAttributes = settings => {
28
27
  if (!settings.attributes.blockCommentId) {
@@ -38,11 +37,10 @@ const modifyBlockCommentAttributes = settings => {
38
37
 
39
38
  // Apply the filter to all core blocks
40
39
  addFilter('blocks.registerBlockType', 'block-comment/modify-core-block-attributes', modifyBlockCommentAttributes);
41
-
42
- /**
43
- * Renders the Collab sidebar.
44
- */
45
- export default function CollabSidebar() {
40
+ function CollabSidebarContent({
41
+ showCommentBoard,
42
+ setShowCommentBoard
43
+ }) {
46
44
  const {
47
45
  createNotice
48
46
  } = useDispatch(noticesStore);
@@ -54,49 +52,27 @@ export default function CollabSidebar() {
54
52
  getEntityRecord
55
53
  } = resolveSelect(coreStore);
56
54
  const {
57
- enableComplementaryArea
58
- } = useDispatch(interfaceStore);
59
- const [blockCommentID, setBlockCommentID] = useState(null);
60
- const [showCommentBoard, setShowCommentBoard] = useState(false);
61
- const {
62
- postId
55
+ postId,
56
+ threads
63
57
  } = useSelect(select => {
64
- return {
65
- postId: select(editorStore).getCurrentPostId()
66
- };
67
- }, []);
68
- const postStatus = useSelect(select => {
69
- const post = select(editorStore).getCurrentPost();
70
- return {
71
- postStatus: post?.status
72
- };
73
- }, []);
74
- const threads = useSelect(select => {
75
- if (!postId) {
76
- return threadsEmptyArray;
77
- }
78
58
  const {
79
- getEntityRecords
80
- } = select(coreStore);
81
- const data = getEntityRecords('root', 'comment', {
82
- post: postId,
59
+ getCurrentPostId
60
+ } = select(editorStore);
61
+ const _postId = getCurrentPostId();
62
+ const data = !!_postId ? select(coreStore).getEntityRecords('root', 'comment', {
63
+ post: _postId,
83
64
  type: 'block_comment',
84
65
  status: 'any',
85
66
  per_page: 100
86
- });
87
- return data || threadsEmptyArray;
88
- }, [postId]);
89
- const clientId = useSelect(select => {
90
- const {
91
- getSelectedBlockClientId
92
- } = select(blockEditorStore);
93
- return getSelectedBlockClientId();
67
+ }) : null;
68
+ return {
69
+ postId: _postId,
70
+ threads: data
71
+ };
94
72
  }, []);
95
- const blockDetails = useSelect(select => {
96
- return clientId ? select(blockEditorStore).getBlock(clientId) : null;
97
- }, [clientId]);
98
-
99
- // Get the dispatch functions to save the comment and update the block attributes.
73
+ const {
74
+ getSelectedBlockClientId
75
+ } = useSelect(blockEditorStore);
100
76
  const {
101
77
  updateBlockAttributes
102
78
  } = useDispatch(blockEditorStore);
@@ -106,7 +82,7 @@ export default function CollabSidebar() {
106
82
  // Create a compare to store the references to all objects by id
107
83
  const compare = {};
108
84
  const result = [];
109
- const filteredComments = threads.filter(comment => comment.status !== 'trash');
85
+ const filteredComments = (threads !== null && threads !== void 0 ? threads : []).filter(comment => comment.status !== 'trash');
110
86
 
111
87
  // Initialize each object with an empty `reply` array
112
88
  filteredComments.forEach(item => {
@@ -128,10 +104,6 @@ export default function CollabSidebar() {
128
104
  });
129
105
  return result;
130
106
  }, [threads]);
131
- const openCollabBoard = () => {
132
- setShowCommentBoard(true);
133
- enableComplementaryArea('core', 'edit-post/collab-sidebar');
134
- };
135
107
 
136
108
  // Function to save the comment.
137
109
  const addNewComment = async (comment, parentCommentId) => {
@@ -153,7 +125,7 @@ export default function CollabSidebar() {
153
125
  if (savedRecord) {
154
126
  // If it's a main comment, update the block attributes with the comment id.
155
127
  if (!parentCommentId) {
156
- updateBlockAttributes(clientId, {
128
+ updateBlockAttributes(getSelectedBlockClientId(), {
157
129
  blockCommentId: savedRecord?.id
158
130
  });
159
131
  }
@@ -211,7 +183,7 @@ export default function CollabSidebar() {
211
183
  const childComment = await getEntityRecord('root', 'comment', commentId);
212
184
  await deleteEntityRecord('root', 'comment', commentId);
213
185
  if (childComment && !childComment.parent) {
214
- updateBlockAttributes(clientId, {
186
+ updateBlockAttributes(getSelectedBlockClientId(), {
215
187
  blockCommentId: undefined
216
188
  });
217
189
  }
@@ -222,20 +194,61 @@ export default function CollabSidebar() {
222
194
  isDismissible: true
223
195
  });
224
196
  };
225
- useEffect(() => {
226
- if (blockDetails) {
227
- setBlockCommentID(blockDetails?.attributes.blockCommentId);
228
- }
229
- }, [postId, clientId]);
197
+ return /*#__PURE__*/_jsxs("div", {
198
+ className: "editor-collab-sidebar-panel",
199
+ children: [/*#__PURE__*/_jsx(AddComment, {
200
+ onSubmit: addNewComment,
201
+ showCommentBoard: showCommentBoard,
202
+ setShowCommentBoard: setShowCommentBoard
203
+ }), /*#__PURE__*/_jsx(Comments, {
204
+ threads: resultComments,
205
+ onEditComment: onEditComment,
206
+ onAddReply: addNewComment,
207
+ onCommentDelete: onCommentDelete,
208
+ onCommentResolve: onCommentResolve
209
+ })]
210
+ });
211
+ }
212
+
213
+ /**
214
+ * Renders the Collab sidebar.
215
+ */
216
+ export default function CollabSidebar() {
217
+ const [showCommentBoard, setShowCommentBoard] = useState(false);
218
+ const {
219
+ enableComplementaryArea
220
+ } = useDispatch(interfaceStore);
221
+ const {
222
+ postStatus
223
+ } = useSelect(select => {
224
+ return {
225
+ postStatus: select(editorStore).getEditedPostAttribute('status')
226
+ };
227
+ }, []);
228
+ const {
229
+ blockCommentId
230
+ } = useSelect(select => {
231
+ const {
232
+ getBlockAttributes,
233
+ getSelectedBlockClientId
234
+ } = select(blockEditorStore);
235
+ const _clientId = getSelectedBlockClientId();
236
+ return {
237
+ blockCommentId: _clientId ? getBlockAttributes(_clientId)?.blockCommentId : null
238
+ };
239
+ }, []);
240
+ const openCollabBoard = () => {
241
+ setShowCommentBoard(true);
242
+ enableComplementaryArea('core', 'edit-post/collab-sidebar');
243
+ };
230
244
 
231
245
  // Check if the experimental flag is enabled.
232
- if (!isBlockCommentExperimentEnabled || postStatus.postStatus === 'publish') {
246
+ if (!isBlockCommentExperimentEnabled || postStatus === 'publish') {
233
247
  return null; // or maybe return some message indicating no threads are available.
234
248
  }
249
+ const AddCommentComponent = blockCommentId ? AddCommentToolbarButton : AddCommentButton;
235
250
  return /*#__PURE__*/_jsxs(_Fragment, {
236
- children: [!blockCommentID && /*#__PURE__*/_jsx(AddCommentButton, {
237
- onClick: openCollabBoard
238
- }), blockCommentID > 0 && /*#__PURE__*/_jsx(AddCommentToolbarButton, {
251
+ children: [/*#__PURE__*/_jsx(AddCommentComponent, {
239
252
  onClick: openCollabBoard
240
253
  }), /*#__PURE__*/_jsx(PluginSidebar, {
241
254
  identifier: collabSidebarName
@@ -243,20 +256,9 @@ export default function CollabSidebar() {
243
256
  ,
244
257
  title: __('Comments'),
245
258
  icon: commentIcon,
246
- children: /*#__PURE__*/_jsxs("div", {
247
- className: "editor-collab-sidebar-panel",
248
- children: [/*#__PURE__*/_jsx(AddComment, {
249
- threads: resultComments,
250
- onSubmit: addNewComment,
251
- showCommentBoard: showCommentBoard,
252
- setShowCommentBoard: setShowCommentBoard
253
- }), /*#__PURE__*/_jsx(Comments, {
254
- threads: resultComments,
255
- onEditComment: onEditComment,
256
- onAddReply: addNewComment,
257
- onCommentDelete: onCommentDelete,
258
- onCommentResolve: onCommentResolve
259
- })]
259
+ children: /*#__PURE__*/_jsx(CollabSidebarContent, {
260
+ showCommentBoard: showCommentBoard,
261
+ setShowCommentBoard: setShowCommentBoard
260
262
  })
261
263
  })]
262
264
  });
@@ -1 +1 @@
1
- {"version":3,"names":["__","useSelect","useDispatch","resolveSelect","useState","useEffect","useMemo","comment","commentIcon","addFilter","store","noticesStore","coreStore","blockEditorStore","interfaceStore","PluginSidebar","collabSidebarName","Comments","AddComment","editorStore","AddCommentButton","AddCommentToolbarButton","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","threadsEmptyArray","isBlockCommentExperimentEnabled","window","__experimentalEnableBlockComment","modifyBlockCommentAttributes","settings","attributes","blockCommentId","type","CollabSidebar","createNotice","saveEntityRecord","deleteEntityRecord","getEntityRecord","enableComplementaryArea","blockCommentID","setBlockCommentID","showCommentBoard","setShowCommentBoard","postId","select","getCurrentPostId","postStatus","post","getCurrentPost","status","threads","getEntityRecords","data","per_page","clientId","getSelectedBlockClientId","blockDetails","getBlock","updateBlockAttributes","resultComments","compare","result","filteredComments","filter","forEach","item","id","reply","parent","push","openCollabBoard","addNewComment","parentCommentId","args","content","comment_type","comment_approved","updatedArgs","savedRecord","isDismissible","onError","onCommentResolve","commentId","onEditComment","onCommentDelete","childComment","undefined","children","onClick","identifier","title","icon","className","onSubmit","onAddReply"],"sources":["@wordpress/editor/src/components/collab-sidebar/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch, resolveSelect } from '@wordpress/data';\nimport { useState, useEffect, useMemo } from '@wordpress/element';\nimport { comment as commentIcon } from '@wordpress/icons';\nimport { addFilter } from '@wordpress/hooks';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { store as interfaceStore } from '@wordpress/interface';\n\n/**\n * Internal dependencies\n */\nimport PluginSidebar from '../plugin-sidebar';\nimport { collabSidebarName } from './constants';\nimport { Comments } from './comments';\nimport { AddComment } from './add-comment';\nimport { store as editorStore } from '../../store';\nimport AddCommentButton from './comment-button';\nimport AddCommentToolbarButton from './comment-button-toolbar';\n\nconst threadsEmptyArray = [];\n\nconst isBlockCommentExperimentEnabled =\n\twindow?.__experimentalEnableBlockComment;\nconst modifyBlockCommentAttributes = ( settings ) => {\n\tif ( ! settings.attributes.blockCommentId ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tblockCommentId: {\n\t\t\t\ttype: 'number',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n};\n\n// Apply the filter to all core blocks\naddFilter(\n\t'blocks.registerBlockType',\n\t'block-comment/modify-core-block-attributes',\n\tmodifyBlockCommentAttributes\n);\n\n/**\n * Renders the Collab sidebar.\n */\nexport default function CollabSidebar() {\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst { saveEntityRecord, deleteEntityRecord } = useDispatch( coreStore );\n\tconst { getEntityRecord } = resolveSelect( coreStore );\n\tconst { enableComplementaryArea } = useDispatch( interfaceStore );\n\tconst [ blockCommentID, setBlockCommentID ] = useState( null );\n\tconst [ showCommentBoard, setShowCommentBoard ] = useState( false );\n\tconst { postId } = useSelect( ( select ) => {\n\t\treturn {\n\t\t\tpostId: select( editorStore ).getCurrentPostId(),\n\t\t};\n\t}, [] );\n\n\tconst postStatus = useSelect( ( select ) => {\n\t\tconst post = select( editorStore ).getCurrentPost();\n\t\treturn { postStatus: post?.status };\n\t}, [] );\n\n\tconst threads = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! postId ) {\n\t\t\t\treturn threadsEmptyArray;\n\t\t\t}\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\t\t\tconst data = getEntityRecords( 'root', 'comment', {\n\t\t\t\tpost: postId,\n\t\t\t\ttype: 'block_comment',\n\t\t\t\tstatus: 'any',\n\t\t\t\tper_page: 100,\n\t\t\t} );\n\t\t\treturn data || threadsEmptyArray;\n\t\t},\n\t\t[ postId ]\n\t);\n\n\tconst clientId = useSelect( ( select ) => {\n\t\tconst { getSelectedBlockClientId } = select( blockEditorStore );\n\t\treturn getSelectedBlockClientId();\n\t}, [] );\n\n\tconst blockDetails = useSelect(\n\t\t( select ) => {\n\t\t\treturn clientId\n\t\t\t\t? select( blockEditorStore ).getBlock( clientId )\n\t\t\t\t: null;\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t// Get the dispatch functions to save the comment and update the block attributes.\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\t// Process comments to build the tree structure\n\tconst resultComments = useMemo( () => {\n\t\t// Create a compare to store the references to all objects by id\n\t\tconst compare = {};\n\t\tconst result = [];\n\n\t\tconst filteredComments = threads.filter(\n\t\t\t( comment ) => comment.status !== 'trash'\n\t\t);\n\n\t\t// Initialize each object with an empty `reply` array\n\t\tfilteredComments.forEach( ( item ) => {\n\t\t\tcompare[ item.id ] = { ...item, reply: [] };\n\t\t} );\n\n\t\t// Iterate over the data to build the tree structure\n\t\tfilteredComments.forEach( ( item ) => {\n\t\t\tif ( item.parent === 0 ) {\n\t\t\t\t// If parent is 0, it's a root item, push it to the result array\n\t\t\t\tresult.push( compare[ item.id ] );\n\t\t\t} else if ( compare[ item.parent ] ) {\n\t\t\t\t// Otherwise, find its parent and push it to the parent's `reply` array\n\t\t\t\tcompare[ item.parent ].reply.push( compare[ item.id ] );\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}, [ threads ] );\n\n\tconst openCollabBoard = () => {\n\t\tsetShowCommentBoard( true );\n\t\tenableComplementaryArea( 'core', 'edit-post/collab-sidebar' );\n\t};\n\n\t// Function to save the comment.\n\tconst addNewComment = async ( comment, parentCommentId ) => {\n\t\tconst args = {\n\t\t\tpost: postId,\n\t\t\tcontent: comment,\n\t\t\tcomment_type: 'block_comment',\n\t\t\tcomment_approved: 0,\n\t\t};\n\n\t\t// Create a new object, conditionally including the parent property\n\t\tconst updatedArgs = {\n\t\t\t...args,\n\t\t\t...( parentCommentId ? { parent: parentCommentId } : {} ),\n\t\t};\n\n\t\tconst savedRecord = await saveEntityRecord(\n\t\t\t'root',\n\t\t\t'comment',\n\t\t\tupdatedArgs\n\t\t);\n\n\t\tif ( savedRecord ) {\n\t\t\t// If it's a main comment, update the block attributes with the comment id.\n\t\t\tif ( ! parentCommentId ) {\n\t\t\t\tupdateBlockAttributes( clientId, {\n\t\t\t\t\tblockCommentId: savedRecord?.id,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tcreateNotice(\n\t\t\t\t'snackbar',\n\t\t\t\tparentCommentId\n\t\t\t\t\t? // translators: Reply added successfully\n\t\t\t\t\t __( 'Reply added successfully.' )\n\t\t\t\t\t: // translators: Comment added successfully\n\t\t\t\t\t __( 'Comment added successfully.' ),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tonError();\n\t\t}\n\t};\n\n\tconst onCommentResolve = async ( commentId ) => {\n\t\tconst savedRecord = await saveEntityRecord( 'root', 'comment', {\n\t\t\tid: commentId,\n\t\t\tstatus: 'approved',\n\t\t} );\n\n\t\tif ( savedRecord ) {\n\t\t\t// translators: Comment resolved successfully\n\t\t\tcreateNotice( 'snackbar', __( 'Comment marked as resolved.' ), {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tisDismissible: true,\n\t\t\t} );\n\t\t} else {\n\t\t\tonError();\n\t\t}\n\t};\n\n\tconst onEditComment = async ( commentId, comment ) => {\n\t\tconst savedRecord = await saveEntityRecord( 'root', 'comment', {\n\t\t\tid: commentId,\n\t\t\tcontent: comment,\n\t\t} );\n\n\t\tif ( savedRecord ) {\n\t\t\tcreateNotice(\n\t\t\t\t'snackbar',\n\t\t\t\t// translators: Comment edited successfully\n\t\t\t\t__( 'Comment edited successfully.' ),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tonError();\n\t\t}\n\t};\n\n\tconst onError = () => {\n\t\tcreateNotice(\n\t\t\t'error',\n\t\t\t// translators: Error message when comment submission fails\n\t\t\t__(\n\t\t\t\t'Something went wrong. Please try publishing the post, or you may have already submitted your comment earlier.'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t}\n\t\t);\n\t};\n\n\tconst onCommentDelete = async ( commentId ) => {\n\t\tconst childComment = await getEntityRecord(\n\t\t\t'root',\n\t\t\t'comment',\n\t\t\tcommentId\n\t\t);\n\t\tawait deleteEntityRecord( 'root', 'comment', commentId );\n\n\t\tif ( childComment && ! childComment.parent ) {\n\t\t\tupdateBlockAttributes( clientId, {\n\t\t\t\tblockCommentId: undefined,\n\t\t\t} );\n\t\t}\n\n\t\tcreateNotice(\n\t\t\t'snackbar',\n\t\t\t// translators: Comment deleted successfully\n\t\t\t__( 'Comment deleted successfully.' ),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tisDismissible: true,\n\t\t\t}\n\t\t);\n\t};\n\n\tuseEffect( () => {\n\t\tif ( blockDetails ) {\n\t\t\tsetBlockCommentID( blockDetails?.attributes.blockCommentId );\n\t\t}\n\t}, [ postId, clientId ] );\n\n\t// Check if the experimental flag is enabled.\n\tif (\n\t\t! isBlockCommentExperimentEnabled ||\n\t\tpostStatus.postStatus === 'publish'\n\t) {\n\t\treturn null; // or maybe return some message indicating no threads are available.\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ ! blockCommentID && (\n\t\t\t\t<AddCommentButton onClick={ openCollabBoard } />\n\t\t\t) }\n\n\t\t\t{ blockCommentID > 0 && (\n\t\t\t\t<AddCommentToolbarButton onClick={ openCollabBoard } />\n\t\t\t) }\n\t\t\t<PluginSidebar\n\t\t\t\tidentifier={ collabSidebarName }\n\t\t\t\t// translators: Comments sidebar title\n\t\t\t\ttitle={ __( 'Comments' ) }\n\t\t\t\ticon={ commentIcon }\n\t\t\t>\n\t\t\t\t<div className=\"editor-collab-sidebar-panel\">\n\t\t\t\t\t<AddComment\n\t\t\t\t\t\tthreads={ resultComments }\n\t\t\t\t\t\tonSubmit={ addNewComment }\n\t\t\t\t\t\tshowCommentBoard={ showCommentBoard }\n\t\t\t\t\t\tsetShowCommentBoard={ setShowCommentBoard }\n\t\t\t\t\t/>\n\t\t\t\t\t<Comments\n\t\t\t\t\t\tthreads={ resultComments }\n\t\t\t\t\t\tonEditComment={ onEditComment }\n\t\t\t\t\t\tonAddReply={ addNewComment }\n\t\t\t\t\t\tonCommentDelete={ onCommentDelete }\n\t\t\t\t\t\tonCommentResolve={ onCommentResolve }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</PluginSidebar>\n\t\t</>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AACpC,SAASC,SAAS,EAAEC,WAAW,EAAEC,aAAa,QAAQ,iBAAiB;AACvE,SAASC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,QAAQ,oBAAoB;AACjE,SAASC,OAAO,IAAIC,WAAW,QAAQ,kBAAkB;AACzD,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,KAAK,IAAIC,YAAY,QAAQ,oBAAoB;AAC1D,SAASD,KAAK,IAAIE,SAAS,QAAQ,sBAAsB;AACzD,SAASF,KAAK,IAAIG,gBAAgB,QAAQ,yBAAyB;AACnE,SAASH,KAAK,IAAII,cAAc,QAAQ,sBAAsB;;AAE9D;AACA;AACA;AACA,OAAOC,aAAa,MAAM,mBAAmB;AAC7C,SAASC,iBAAiB,QAAQ,aAAa;AAC/C,SAASC,QAAQ,QAAQ,YAAY;AACrC,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASR,KAAK,IAAIS,WAAW,QAAQ,aAAa;AAClD,OAAOC,gBAAgB,MAAM,kBAAkB;AAC/C,OAAOC,uBAAuB,MAAM,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAE/D,MAAMC,iBAAiB,GAAG,EAAE;AAE5B,MAAMC,+BAA+B,GACpCC,MAAM,EAAEC,gCAAgC;AACzC,MAAMC,4BAA4B,GAAKC,QAAQ,IAAM;EACpD,IAAK,CAAEA,QAAQ,CAACC,UAAU,CAACC,cAAc,EAAG;IAC3CF,QAAQ,CAACC,UAAU,GAAG;MACrB,GAAGD,QAAQ,CAACC,UAAU;MACtBC,cAAc,EAAE;QACfC,IAAI,EAAE;MACP;IACD,CAAC;EACF;EAEA,OAAOH,QAAQ;AAChB,CAAC;;AAED;AACAxB,SAAS,CACR,0BAA0B,EAC1B,4CAA4C,EAC5CuB,4BACD,CAAC;;AAED;AACA;AACA;AACA,eAAe,SAASK,aAAaA,CAAA,EAAG;EACvC,MAAM;IAAEC;EAAa,CAAC,GAAGpC,WAAW,CAAES,YAAa,CAAC;EACpD,MAAM;IAAE4B,gBAAgB;IAAEC;EAAmB,CAAC,GAAGtC,WAAW,CAAEU,SAAU,CAAC;EACzE,MAAM;IAAE6B;EAAgB,CAAC,GAAGtC,aAAa,CAAES,SAAU,CAAC;EACtD,MAAM;IAAE8B;EAAwB,CAAC,GAAGxC,WAAW,CAAEY,cAAe,CAAC;EACjE,MAAM,CAAE6B,cAAc,EAAEC,iBAAiB,CAAE,GAAGxC,QAAQ,CAAE,IAAK,CAAC;EAC9D,MAAM,CAAEyC,gBAAgB,EAAEC,mBAAmB,CAAE,GAAG1C,QAAQ,CAAE,KAAM,CAAC;EACnE,MAAM;IAAE2C;EAAO,CAAC,GAAG9C,SAAS,CAAI+C,MAAM,IAAM;IAC3C,OAAO;MACND,MAAM,EAAEC,MAAM,CAAE7B,WAAY,CAAC,CAAC8B,gBAAgB,CAAC;IAChD,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAMC,UAAU,GAAGjD,SAAS,CAAI+C,MAAM,IAAM;IAC3C,MAAMG,IAAI,GAAGH,MAAM,CAAE7B,WAAY,CAAC,CAACiC,cAAc,CAAC,CAAC;IACnD,OAAO;MAAEF,UAAU,EAAEC,IAAI,EAAEE;IAAO,CAAC;EACpC,CAAC,EAAE,EAAG,CAAC;EAEP,MAAMC,OAAO,GAAGrD,SAAS,CACtB+C,MAAM,IAAM;IACb,IAAK,CAAED,MAAM,EAAG;MACf,OAAOnB,iBAAiB;IACzB;IACA,MAAM;MAAE2B;IAAiB,CAAC,GAAGP,MAAM,CAAEpC,SAAU,CAAC;IAChD,MAAM4C,IAAI,GAAGD,gBAAgB,CAAE,MAAM,EAAE,SAAS,EAAE;MACjDJ,IAAI,EAAEJ,MAAM;MACZX,IAAI,EAAE,eAAe;MACrBiB,MAAM,EAAE,KAAK;MACbI,QAAQ,EAAE;IACX,CAAE,CAAC;IACH,OAAOD,IAAI,IAAI5B,iBAAiB;EACjC,CAAC,EACD,CAAEmB,MAAM,CACT,CAAC;EAED,MAAMW,QAAQ,GAAGzD,SAAS,CAAI+C,MAAM,IAAM;IACzC,MAAM;MAAEW;IAAyB,CAAC,GAAGX,MAAM,CAAEnC,gBAAiB,CAAC;IAC/D,OAAO8C,wBAAwB,CAAC,CAAC;EAClC,CAAC,EAAE,EAAG,CAAC;EAEP,MAAMC,YAAY,GAAG3D,SAAS,CAC3B+C,MAAM,IAAM;IACb,OAAOU,QAAQ,GACZV,MAAM,CAAEnC,gBAAiB,CAAC,CAACgD,QAAQ,CAAEH,QAAS,CAAC,GAC/C,IAAI;EACR,CAAC,EACD,CAAEA,QAAQ,CACX,CAAC;;EAED;EACA,MAAM;IAAEI;EAAsB,CAAC,GAAG5D,WAAW,CAAEW,gBAAiB,CAAC;;EAEjE;EACA,MAAMkD,cAAc,GAAGzD,OAAO,CAAE,MAAM;IACrC;IACA,MAAM0D,OAAO,GAAG,CAAC,CAAC;IAClB,MAAMC,MAAM,GAAG,EAAE;IAEjB,MAAMC,gBAAgB,GAAGZ,OAAO,CAACa,MAAM,CACpC5D,OAAO,IAAMA,OAAO,CAAC8C,MAAM,KAAK,OACnC,CAAC;;IAED;IACAa,gBAAgB,CAACE,OAAO,CAAIC,IAAI,IAAM;MACrCL,OAAO,CAAEK,IAAI,CAACC,EAAE,CAAE,GAAG;QAAE,GAAGD,IAAI;QAAEE,KAAK,EAAE;MAAG,CAAC;IAC5C,CAAE,CAAC;;IAEH;IACAL,gBAAgB,CAACE,OAAO,CAAIC,IAAI,IAAM;MACrC,IAAKA,IAAI,CAACG,MAAM,KAAK,CAAC,EAAG;QACxB;QACAP,MAAM,CAACQ,IAAI,CAAET,OAAO,CAAEK,IAAI,CAACC,EAAE,CAAG,CAAC;MAClC,CAAC,MAAM,IAAKN,OAAO,CAAEK,IAAI,CAACG,MAAM,CAAE,EAAG;QACpC;QACAR,OAAO,CAAEK,IAAI,CAACG,MAAM,CAAE,CAACD,KAAK,CAACE,IAAI,CAAET,OAAO,CAAEK,IAAI,CAACC,EAAE,CAAG,CAAC;MACxD;IACD,CAAE,CAAC;IAEH,OAAOL,MAAM;EACd,CAAC,EAAE,CAAEX,OAAO,CAAG,CAAC;EAEhB,MAAMoB,eAAe,GAAGA,CAAA,KAAM;IAC7B5B,mBAAmB,CAAE,IAAK,CAAC;IAC3BJ,uBAAuB,CAAE,MAAM,EAAE,0BAA2B,CAAC;EAC9D,CAAC;;EAED;EACA,MAAMiC,aAAa,GAAG,MAAAA,CAAQpE,OAAO,EAAEqE,eAAe,KAAM;IAC3D,MAAMC,IAAI,GAAG;MACZ1B,IAAI,EAAEJ,MAAM;MACZ+B,OAAO,EAAEvE,OAAO;MAChBwE,YAAY,EAAE,eAAe;MAC7BC,gBAAgB,EAAE;IACnB,CAAC;;IAED;IACA,MAAMC,WAAW,GAAG;MACnB,GAAGJ,IAAI;MACP,IAAKD,eAAe,GAAG;QAAEJ,MAAM,EAAEI;MAAgB,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,MAAMM,WAAW,GAAG,MAAM3C,gBAAgB,CACzC,MAAM,EACN,SAAS,EACT0C,WACD,CAAC;IAED,IAAKC,WAAW,EAAG;MAClB;MACA,IAAK,CAAEN,eAAe,EAAG;QACxBd,qBAAqB,CAAEJ,QAAQ,EAAE;UAChCvB,cAAc,EAAE+C,WAAW,EAAEZ;QAC9B,CAAE,CAAC;MACJ;MAEAhC,YAAY,CACX,UAAU,EACVsC,eAAe;MACZ;MACA5E,EAAE,CAAE,2BAA4B,CAAC;MACjC;MACAA,EAAE,CAAE,6BAA8B,CAAC,EACtC;QACCoC,IAAI,EAAE,UAAU;QAChB+C,aAAa,EAAE;MAChB,CACD,CAAC;IACF,CAAC,MAAM;MACNC,OAAO,CAAC,CAAC;IACV;EACD,CAAC;EAED,MAAMC,gBAAgB,GAAG,MAAQC,SAAS,IAAM;IAC/C,MAAMJ,WAAW,GAAG,MAAM3C,gBAAgB,CAAE,MAAM,EAAE,SAAS,EAAE;MAC9D+B,EAAE,EAAEgB,SAAS;MACbjC,MAAM,EAAE;IACT,CAAE,CAAC;IAEH,IAAK6B,WAAW,EAAG;MAClB;MACA5C,YAAY,CAAE,UAAU,EAAEtC,EAAE,CAAE,6BAA8B,CAAC,EAAE;QAC9DoC,IAAI,EAAE,UAAU;QAChB+C,aAAa,EAAE;MAChB,CAAE,CAAC;IACJ,CAAC,MAAM;MACNC,OAAO,CAAC,CAAC;IACV;EACD,CAAC;EAED,MAAMG,aAAa,GAAG,MAAAA,CAAQD,SAAS,EAAE/E,OAAO,KAAM;IACrD,MAAM2E,WAAW,GAAG,MAAM3C,gBAAgB,CAAE,MAAM,EAAE,SAAS,EAAE;MAC9D+B,EAAE,EAAEgB,SAAS;MACbR,OAAO,EAAEvE;IACV,CAAE,CAAC;IAEH,IAAK2E,WAAW,EAAG;MAClB5C,YAAY,CACX,UAAU;MACV;MACAtC,EAAE,CAAE,8BAA+B,CAAC,EACpC;QACCoC,IAAI,EAAE,UAAU;QAChB+C,aAAa,EAAE;MAChB,CACD,CAAC;IACF,CAAC,MAAM;MACNC,OAAO,CAAC,CAAC;IACV;EACD,CAAC;EAED,MAAMA,OAAO,GAAGA,CAAA,KAAM;IACrB9C,YAAY,CACX,OAAO;IACP;IACAtC,EAAE,CACD,+GACD,CAAC,EACD;MACCmF,aAAa,EAAE;IAChB,CACD,CAAC;EACF,CAAC;EAED,MAAMK,eAAe,GAAG,MAAQF,SAAS,IAAM;IAC9C,MAAMG,YAAY,GAAG,MAAMhD,eAAe,CACzC,MAAM,EACN,SAAS,EACT6C,SACD,CAAC;IACD,MAAM9C,kBAAkB,CAAE,MAAM,EAAE,SAAS,EAAE8C,SAAU,CAAC;IAExD,IAAKG,YAAY,IAAI,CAAEA,YAAY,CAACjB,MAAM,EAAG;MAC5CV,qBAAqB,CAAEJ,QAAQ,EAAE;QAChCvB,cAAc,EAAEuD;MACjB,CAAE,CAAC;IACJ;IAEApD,YAAY,CACX,UAAU;IACV;IACAtC,EAAE,CAAE,+BAAgC,CAAC,EACrC;MACCoC,IAAI,EAAE,UAAU;MAChB+C,aAAa,EAAE;IAChB,CACD,CAAC;EACF,CAAC;EAED9E,SAAS,CAAE,MAAM;IAChB,IAAKuD,YAAY,EAAG;MACnBhB,iBAAiB,CAAEgB,YAAY,EAAE1B,UAAU,CAACC,cAAe,CAAC;IAC7D;EACD,CAAC,EAAE,CAAEY,MAAM,EAAEW,QAAQ,CAAG,CAAC;;EAEzB;EACA,IACC,CAAE7B,+BAA+B,IACjCqB,UAAU,CAACA,UAAU,KAAK,SAAS,EAClC;IACD,OAAO,IAAI,CAAC,CAAC;EACd;EAEA,oBACCzB,KAAA,CAAAE,SAAA;IAAAgE,QAAA,GACG,CAAEhD,cAAc,iBACjBpB,IAAA,CAACH,gBAAgB;MAACwE,OAAO,EAAGlB;IAAiB,CAAE,CAC/C,EAEC/B,cAAc,GAAG,CAAC,iBACnBpB,IAAA,CAACF,uBAAuB;MAACuE,OAAO,EAAGlB;IAAiB,CAAE,CACtD,eACDnD,IAAA,CAACR,aAAa;MACb8E,UAAU,EAAG7E;MACb;MAAA;MACA8E,KAAK,EAAG9F,EAAE,CAAE,UAAW,CAAG;MAC1B+F,IAAI,EAAGvF,WAAa;MAAAmF,QAAA,eAEpBlE,KAAA;QAAKuE,SAAS,EAAC,6BAA6B;QAAAL,QAAA,gBAC3CpE,IAAA,CAACL,UAAU;UACVoC,OAAO,EAAGS,cAAgB;UAC1BkC,QAAQ,EAAGtB,aAAe;UAC1B9B,gBAAgB,EAAGA,gBAAkB;UACrCC,mBAAmB,EAAGA;QAAqB,CAC3C,CAAC,eACFvB,IAAA,CAACN,QAAQ;UACRqC,OAAO,EAAGS,cAAgB;UAC1BwB,aAAa,EAAGA,aAAe;UAC/BW,UAAU,EAAGvB,aAAe;UAC5Ba,eAAe,EAAGA,eAAiB;UACnCH,gBAAgB,EAAGA;QAAkB,CACrC,CAAC;MAAA,CACE;IAAC,CACQ,CAAC;EAAA,CACf,CAAC;AAEL","ignoreList":[]}
1
+ {"version":3,"names":["__","useSelect","useDispatch","resolveSelect","useState","useMemo","comment","commentIcon","addFilter","store","noticesStore","coreStore","blockEditorStore","interfaceStore","PluginSidebar","collabSidebarName","Comments","AddComment","editorStore","AddCommentButton","AddCommentToolbarButton","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","isBlockCommentExperimentEnabled","window","__experimentalEnableBlockComment","modifyBlockCommentAttributes","settings","attributes","blockCommentId","type","CollabSidebarContent","showCommentBoard","setShowCommentBoard","createNotice","saveEntityRecord","deleteEntityRecord","getEntityRecord","postId","threads","select","getCurrentPostId","_postId","data","getEntityRecords","post","status","per_page","getSelectedBlockClientId","updateBlockAttributes","resultComments","compare","result","filteredComments","filter","forEach","item","id","reply","parent","push","addNewComment","parentCommentId","args","content","comment_type","comment_approved","updatedArgs","savedRecord","isDismissible","onError","onCommentResolve","commentId","onEditComment","onCommentDelete","childComment","undefined","className","children","onSubmit","onAddReply","CollabSidebar","enableComplementaryArea","postStatus","getEditedPostAttribute","getBlockAttributes","_clientId","openCollabBoard","AddCommentComponent","onClick","identifier","title","icon"],"sources":["@wordpress/editor/src/components/collab-sidebar/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch, resolveSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\nimport { comment as commentIcon } from '@wordpress/icons';\nimport { addFilter } from '@wordpress/hooks';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { store as interfaceStore } from '@wordpress/interface';\n\n/**\n * Internal dependencies\n */\nimport PluginSidebar from '../plugin-sidebar';\nimport { collabSidebarName } from './constants';\nimport { Comments } from './comments';\nimport { AddComment } from './add-comment';\nimport { store as editorStore } from '../../store';\nimport AddCommentButton from './comment-button';\nimport AddCommentToolbarButton from './comment-button-toolbar';\n\nconst isBlockCommentExperimentEnabled =\n\twindow?.__experimentalEnableBlockComment;\nconst modifyBlockCommentAttributes = ( settings ) => {\n\tif ( ! settings.attributes.blockCommentId ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tblockCommentId: {\n\t\t\t\ttype: 'number',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n};\n\n// Apply the filter to all core blocks\naddFilter(\n\t'blocks.registerBlockType',\n\t'block-comment/modify-core-block-attributes',\n\tmodifyBlockCommentAttributes\n);\n\nfunction CollabSidebarContent( { showCommentBoard, setShowCommentBoard } ) {\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst { saveEntityRecord, deleteEntityRecord } = useDispatch( coreStore );\n\tconst { getEntityRecord } = resolveSelect( coreStore );\n\n\tconst { postId, threads } = useSelect( ( select ) => {\n\t\tconst { getCurrentPostId } = select( editorStore );\n\t\tconst _postId = getCurrentPostId();\n\t\tconst data = !! _postId\n\t\t\t? select( coreStore ).getEntityRecords( 'root', 'comment', {\n\t\t\t\t\tpost: _postId,\n\t\t\t\t\ttype: 'block_comment',\n\t\t\t\t\tstatus: 'any',\n\t\t\t\t\tper_page: 100,\n\t\t\t } )\n\t\t\t: null;\n\n\t\treturn {\n\t\t\tpostId: _postId,\n\t\t\tthreads: data,\n\t\t};\n\t}, [] );\n\n\tconst { getSelectedBlockClientId } = useSelect( blockEditorStore );\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\t// Process comments to build the tree structure\n\tconst resultComments = useMemo( () => {\n\t\t// Create a compare to store the references to all objects by id\n\t\tconst compare = {};\n\t\tconst result = [];\n\n\t\tconst filteredComments = ( threads ?? [] ).filter(\n\t\t\t( comment ) => comment.status !== 'trash'\n\t\t);\n\n\t\t// Initialize each object with an empty `reply` array\n\t\tfilteredComments.forEach( ( item ) => {\n\t\t\tcompare[ item.id ] = { ...item, reply: [] };\n\t\t} );\n\n\t\t// Iterate over the data to build the tree structure\n\t\tfilteredComments.forEach( ( item ) => {\n\t\t\tif ( item.parent === 0 ) {\n\t\t\t\t// If parent is 0, it's a root item, push it to the result array\n\t\t\t\tresult.push( compare[ item.id ] );\n\t\t\t} else if ( compare[ item.parent ] ) {\n\t\t\t\t// Otherwise, find its parent and push it to the parent's `reply` array\n\t\t\t\tcompare[ item.parent ].reply.push( compare[ item.id ] );\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}, [ threads ] );\n\n\t// Function to save the comment.\n\tconst addNewComment = async ( comment, parentCommentId ) => {\n\t\tconst args = {\n\t\t\tpost: postId,\n\t\t\tcontent: comment,\n\t\t\tcomment_type: 'block_comment',\n\t\t\tcomment_approved: 0,\n\t\t};\n\n\t\t// Create a new object, conditionally including the parent property\n\t\tconst updatedArgs = {\n\t\t\t...args,\n\t\t\t...( parentCommentId ? { parent: parentCommentId } : {} ),\n\t\t};\n\n\t\tconst savedRecord = await saveEntityRecord(\n\t\t\t'root',\n\t\t\t'comment',\n\t\t\tupdatedArgs\n\t\t);\n\n\t\tif ( savedRecord ) {\n\t\t\t// If it's a main comment, update the block attributes with the comment id.\n\t\t\tif ( ! parentCommentId ) {\n\t\t\t\tupdateBlockAttributes( getSelectedBlockClientId(), {\n\t\t\t\t\tblockCommentId: savedRecord?.id,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tcreateNotice(\n\t\t\t\t'snackbar',\n\t\t\t\tparentCommentId\n\t\t\t\t\t? // translators: Reply added successfully\n\t\t\t\t\t __( 'Reply added successfully.' )\n\t\t\t\t\t: // translators: Comment added successfully\n\t\t\t\t\t __( 'Comment added successfully.' ),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tonError();\n\t\t}\n\t};\n\n\tconst onCommentResolve = async ( commentId ) => {\n\t\tconst savedRecord = await saveEntityRecord( 'root', 'comment', {\n\t\t\tid: commentId,\n\t\t\tstatus: 'approved',\n\t\t} );\n\n\t\tif ( savedRecord ) {\n\t\t\t// translators: Comment resolved successfully\n\t\t\tcreateNotice( 'snackbar', __( 'Comment marked as resolved.' ), {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tisDismissible: true,\n\t\t\t} );\n\t\t} else {\n\t\t\tonError();\n\t\t}\n\t};\n\n\tconst onEditComment = async ( commentId, comment ) => {\n\t\tconst savedRecord = await saveEntityRecord( 'root', 'comment', {\n\t\t\tid: commentId,\n\t\t\tcontent: comment,\n\t\t} );\n\n\t\tif ( savedRecord ) {\n\t\t\tcreateNotice(\n\t\t\t\t'snackbar',\n\t\t\t\t// translators: Comment edited successfully\n\t\t\t\t__( 'Comment edited successfully.' ),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tisDismissible: true,\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tonError();\n\t\t}\n\t};\n\n\tconst onError = () => {\n\t\tcreateNotice(\n\t\t\t'error',\n\t\t\t// translators: Error message when comment submission fails\n\t\t\t__(\n\t\t\t\t'Something went wrong. Please try publishing the post, or you may have already submitted your comment earlier.'\n\t\t\t),\n\t\t\t{\n\t\t\t\tisDismissible: true,\n\t\t\t}\n\t\t);\n\t};\n\n\tconst onCommentDelete = async ( commentId ) => {\n\t\tconst childComment = await getEntityRecord(\n\t\t\t'root',\n\t\t\t'comment',\n\t\t\tcommentId\n\t\t);\n\t\tawait deleteEntityRecord( 'root', 'comment', commentId );\n\n\t\tif ( childComment && ! childComment.parent ) {\n\t\t\tupdateBlockAttributes( getSelectedBlockClientId(), {\n\t\t\t\tblockCommentId: undefined,\n\t\t\t} );\n\t\t}\n\n\t\tcreateNotice(\n\t\t\t'snackbar',\n\t\t\t// translators: Comment deleted successfully\n\t\t\t__( 'Comment deleted successfully.' ),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tisDismissible: true,\n\t\t\t}\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className=\"editor-collab-sidebar-panel\">\n\t\t\t<AddComment\n\t\t\t\tonSubmit={ addNewComment }\n\t\t\t\tshowCommentBoard={ showCommentBoard }\n\t\t\t\tsetShowCommentBoard={ setShowCommentBoard }\n\t\t\t/>\n\t\t\t<Comments\n\t\t\t\tthreads={ resultComments }\n\t\t\t\tonEditComment={ onEditComment }\n\t\t\t\tonAddReply={ addNewComment }\n\t\t\t\tonCommentDelete={ onCommentDelete }\n\t\t\t\tonCommentResolve={ onCommentResolve }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\n/**\n * Renders the Collab sidebar.\n */\nexport default function CollabSidebar() {\n\tconst [ showCommentBoard, setShowCommentBoard ] = useState( false );\n\tconst { enableComplementaryArea } = useDispatch( interfaceStore );\n\n\tconst { postStatus } = useSelect( ( select ) => {\n\t\treturn {\n\t\t\tpostStatus:\n\t\t\t\tselect( editorStore ).getEditedPostAttribute( 'status' ),\n\t\t};\n\t}, [] );\n\n\tconst { blockCommentId } = useSelect( ( select ) => {\n\t\tconst { getBlockAttributes, getSelectedBlockClientId } =\n\t\t\tselect( blockEditorStore );\n\t\tconst _clientId = getSelectedBlockClientId();\n\n\t\treturn {\n\t\t\tblockCommentId: _clientId\n\t\t\t\t? getBlockAttributes( _clientId )?.blockCommentId\n\t\t\t\t: null,\n\t\t};\n\t}, [] );\n\n\tconst openCollabBoard = () => {\n\t\tsetShowCommentBoard( true );\n\t\tenableComplementaryArea( 'core', 'edit-post/collab-sidebar' );\n\t};\n\n\t// Check if the experimental flag is enabled.\n\tif ( ! isBlockCommentExperimentEnabled || postStatus === 'publish' ) {\n\t\treturn null; // or maybe return some message indicating no threads are available.\n\t}\n\n\tconst AddCommentComponent = blockCommentId\n\t\t? AddCommentToolbarButton\n\t\t: AddCommentButton;\n\n\treturn (\n\t\t<>\n\t\t\t<AddCommentComponent onClick={ openCollabBoard } />\n\t\t\t<PluginSidebar\n\t\t\t\tidentifier={ collabSidebarName }\n\t\t\t\t// translators: Comments sidebar title\n\t\t\t\ttitle={ __( 'Comments' ) }\n\t\t\t\ticon={ commentIcon }\n\t\t\t>\n\t\t\t\t<CollabSidebarContent\n\t\t\t\t\tshowCommentBoard={ showCommentBoard }\n\t\t\t\t\tsetShowCommentBoard={ setShowCommentBoard }\n\t\t\t\t/>\n\t\t\t</PluginSidebar>\n\t\t</>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AACpC,SAASC,SAAS,EAAEC,WAAW,EAAEC,aAAa,QAAQ,iBAAiB;AACvE,SAASC,QAAQ,EAAEC,OAAO,QAAQ,oBAAoB;AACtD,SAASC,OAAO,IAAIC,WAAW,QAAQ,kBAAkB;AACzD,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,KAAK,IAAIC,YAAY,QAAQ,oBAAoB;AAC1D,SAASD,KAAK,IAAIE,SAAS,QAAQ,sBAAsB;AACzD,SAASF,KAAK,IAAIG,gBAAgB,QAAQ,yBAAyB;AACnE,SAASH,KAAK,IAAII,cAAc,QAAQ,sBAAsB;;AAE9D;AACA;AACA;AACA,OAAOC,aAAa,MAAM,mBAAmB;AAC7C,SAASC,iBAAiB,QAAQ,aAAa;AAC/C,SAASC,QAAQ,QAAQ,YAAY;AACrC,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASR,KAAK,IAAIS,WAAW,QAAQ,aAAa;AAClD,OAAOC,gBAAgB,MAAM,kBAAkB;AAC/C,OAAOC,uBAAuB,MAAM,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAE/D,MAAMC,+BAA+B,GACpCC,MAAM,EAAEC,gCAAgC;AACzC,MAAMC,4BAA4B,GAAKC,QAAQ,IAAM;EACpD,IAAK,CAAEA,QAAQ,CAACC,UAAU,CAACC,cAAc,EAAG;IAC3CF,QAAQ,CAACC,UAAU,GAAG;MACrB,GAAGD,QAAQ,CAACC,UAAU;MACtBC,cAAc,EAAE;QACfC,IAAI,EAAE;MACP;IACD,CAAC;EACF;EAEA,OAAOH,QAAQ;AAChB,CAAC;;AAED;AACAvB,SAAS,CACR,0BAA0B,EAC1B,4CAA4C,EAC5CsB,4BACD,CAAC;AAED,SAASK,oBAAoBA,CAAE;EAAEC,gBAAgB;EAAEC;AAAoB,CAAC,EAAG;EAC1E,MAAM;IAAEC;EAAa,CAAC,GAAGpC,WAAW,CAAEQ,YAAa,CAAC;EACpD,MAAM;IAAE6B,gBAAgB;IAAEC;EAAmB,CAAC,GAAGtC,WAAW,CAAES,SAAU,CAAC;EACzE,MAAM;IAAE8B;EAAgB,CAAC,GAAGtC,aAAa,CAAEQ,SAAU,CAAC;EAEtD,MAAM;IAAE+B,MAAM;IAAEC;EAAQ,CAAC,GAAG1C,SAAS,CAAI2C,MAAM,IAAM;IACpD,MAAM;MAAEC;IAAiB,CAAC,GAAGD,MAAM,CAAE1B,WAAY,CAAC;IAClD,MAAM4B,OAAO,GAAGD,gBAAgB,CAAC,CAAC;IAClC,MAAME,IAAI,GAAG,CAAC,CAAED,OAAO,GACpBF,MAAM,CAAEjC,SAAU,CAAC,CAACqC,gBAAgB,CAAE,MAAM,EAAE,SAAS,EAAE;MACzDC,IAAI,EAAEH,OAAO;MACbZ,IAAI,EAAE,eAAe;MACrBgB,MAAM,EAAE,KAAK;MACbC,QAAQ,EAAE;IACV,CAAE,CAAC,GACH,IAAI;IAEP,OAAO;MACNT,MAAM,EAAEI,OAAO;MACfH,OAAO,EAAEI;IACV,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAM;IAAEK;EAAyB,CAAC,GAAGnD,SAAS,CAAEW,gBAAiB,CAAC;EAClE,MAAM;IAAEyC;EAAsB,CAAC,GAAGnD,WAAW,CAAEU,gBAAiB,CAAC;;EAEjE;EACA,MAAM0C,cAAc,GAAGjD,OAAO,CAAE,MAAM;IACrC;IACA,MAAMkD,OAAO,GAAG,CAAC,CAAC;IAClB,MAAMC,MAAM,GAAG,EAAE;IAEjB,MAAMC,gBAAgB,GAAG,CAAEd,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE,EAAGe,MAAM,CAC9CpD,OAAO,IAAMA,OAAO,CAAC4C,MAAM,KAAK,OACnC,CAAC;;IAED;IACAO,gBAAgB,CAACE,OAAO,CAAIC,IAAI,IAAM;MACrCL,OAAO,CAAEK,IAAI,CAACC,EAAE,CAAE,GAAG;QAAE,GAAGD,IAAI;QAAEE,KAAK,EAAE;MAAG,CAAC;IAC5C,CAAE,CAAC;;IAEH;IACAL,gBAAgB,CAACE,OAAO,CAAIC,IAAI,IAAM;MACrC,IAAKA,IAAI,CAACG,MAAM,KAAK,CAAC,EAAG;QACxB;QACAP,MAAM,CAACQ,IAAI,CAAET,OAAO,CAAEK,IAAI,CAACC,EAAE,CAAG,CAAC;MAClC,CAAC,MAAM,IAAKN,OAAO,CAAEK,IAAI,CAACG,MAAM,CAAE,EAAG;QACpC;QACAR,OAAO,CAAEK,IAAI,CAACG,MAAM,CAAE,CAACD,KAAK,CAACE,IAAI,CAAET,OAAO,CAAEK,IAAI,CAACC,EAAE,CAAG,CAAC;MACxD;IACD,CAAE,CAAC;IAEH,OAAOL,MAAM;EACd,CAAC,EAAE,CAAEb,OAAO,CAAG,CAAC;;EAEhB;EACA,MAAMsB,aAAa,GAAG,MAAAA,CAAQ3D,OAAO,EAAE4D,eAAe,KAAM;IAC3D,MAAMC,IAAI,GAAG;MACZlB,IAAI,EAAEP,MAAM;MACZ0B,OAAO,EAAE9D,OAAO;MAChB+D,YAAY,EAAE,eAAe;MAC7BC,gBAAgB,EAAE;IACnB,CAAC;;IAED;IACA,MAAMC,WAAW,GAAG;MACnB,GAAGJ,IAAI;MACP,IAAKD,eAAe,GAAG;QAAEH,MAAM,EAAEG;MAAgB,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,MAAMM,WAAW,GAAG,MAAMjC,gBAAgB,CACzC,MAAM,EACN,SAAS,EACTgC,WACD,CAAC;IAED,IAAKC,WAAW,EAAG;MAClB;MACA,IAAK,CAAEN,eAAe,EAAG;QACxBb,qBAAqB,CAAED,wBAAwB,CAAC,CAAC,EAAE;UAClDnB,cAAc,EAAEuC,WAAW,EAAEX;QAC9B,CAAE,CAAC;MACJ;MAEAvB,YAAY,CACX,UAAU,EACV4B,eAAe;MACZ;MACAlE,EAAE,CAAE,2BAA4B,CAAC;MACjC;MACAA,EAAE,CAAE,6BAA8B,CAAC,EACtC;QACCkC,IAAI,EAAE,UAAU;QAChBuC,aAAa,EAAE;MAChB,CACD,CAAC;IACF,CAAC,MAAM;MACNC,OAAO,CAAC,CAAC;IACV;EACD,CAAC;EAED,MAAMC,gBAAgB,GAAG,MAAQC,SAAS,IAAM;IAC/C,MAAMJ,WAAW,GAAG,MAAMjC,gBAAgB,CAAE,MAAM,EAAE,SAAS,EAAE;MAC9DsB,EAAE,EAAEe,SAAS;MACb1B,MAAM,EAAE;IACT,CAAE,CAAC;IAEH,IAAKsB,WAAW,EAAG;MAClB;MACAlC,YAAY,CAAE,UAAU,EAAEtC,EAAE,CAAE,6BAA8B,CAAC,EAAE;QAC9DkC,IAAI,EAAE,UAAU;QAChBuC,aAAa,EAAE;MAChB,CAAE,CAAC;IACJ,CAAC,MAAM;MACNC,OAAO,CAAC,CAAC;IACV;EACD,CAAC;EAED,MAAMG,aAAa,GAAG,MAAAA,CAAQD,SAAS,EAAEtE,OAAO,KAAM;IACrD,MAAMkE,WAAW,GAAG,MAAMjC,gBAAgB,CAAE,MAAM,EAAE,SAAS,EAAE;MAC9DsB,EAAE,EAAEe,SAAS;MACbR,OAAO,EAAE9D;IACV,CAAE,CAAC;IAEH,IAAKkE,WAAW,EAAG;MAClBlC,YAAY,CACX,UAAU;MACV;MACAtC,EAAE,CAAE,8BAA+B,CAAC,EACpC;QACCkC,IAAI,EAAE,UAAU;QAChBuC,aAAa,EAAE;MAChB,CACD,CAAC;IACF,CAAC,MAAM;MACNC,OAAO,CAAC,CAAC;IACV;EACD,CAAC;EAED,MAAMA,OAAO,GAAGA,CAAA,KAAM;IACrBpC,YAAY,CACX,OAAO;IACP;IACAtC,EAAE,CACD,+GACD,CAAC,EACD;MACCyE,aAAa,EAAE;IAChB,CACD,CAAC;EACF,CAAC;EAED,MAAMK,eAAe,GAAG,MAAQF,SAAS,IAAM;IAC9C,MAAMG,YAAY,GAAG,MAAMtC,eAAe,CACzC,MAAM,EACN,SAAS,EACTmC,SACD,CAAC;IACD,MAAMpC,kBAAkB,CAAE,MAAM,EAAE,SAAS,EAAEoC,SAAU,CAAC;IAExD,IAAKG,YAAY,IAAI,CAAEA,YAAY,CAAChB,MAAM,EAAG;MAC5CV,qBAAqB,CAAED,wBAAwB,CAAC,CAAC,EAAE;QAClDnB,cAAc,EAAE+C;MACjB,CAAE,CAAC;IACJ;IAEA1C,YAAY,CACX,UAAU;IACV;IACAtC,EAAE,CAAE,+BAAgC,CAAC,EACrC;MACCkC,IAAI,EAAE,UAAU;MAChBuC,aAAa,EAAE;IAChB,CACD,CAAC;EACF,CAAC;EAED,oBACCjD,KAAA;IAAKyD,SAAS,EAAC,6BAA6B;IAAAC,QAAA,gBAC3C5D,IAAA,CAACL,UAAU;MACVkE,QAAQ,EAAGlB,aAAe;MAC1B7B,gBAAgB,EAAGA,gBAAkB;MACrCC,mBAAmB,EAAGA;IAAqB,CAC3C,CAAC,eACFf,IAAA,CAACN,QAAQ;MACR2B,OAAO,EAAGW,cAAgB;MAC1BuB,aAAa,EAAGA,aAAe;MAC/BO,UAAU,EAAGnB,aAAe;MAC5Ba,eAAe,EAAGA,eAAiB;MACnCH,gBAAgB,EAAGA;IAAkB,CACrC,CAAC;EAAA,CACE,CAAC;AAER;;AAEA;AACA;AACA;AACA,eAAe,SAASU,aAAaA,CAAA,EAAG;EACvC,MAAM,CAAEjD,gBAAgB,EAAEC,mBAAmB,CAAE,GAAGjC,QAAQ,CAAE,KAAM,CAAC;EACnE,MAAM;IAAEkF;EAAwB,CAAC,GAAGpF,WAAW,CAAEW,cAAe,CAAC;EAEjE,MAAM;IAAE0E;EAAW,CAAC,GAAGtF,SAAS,CAAI2C,MAAM,IAAM;IAC/C,OAAO;MACN2C,UAAU,EACT3C,MAAM,CAAE1B,WAAY,CAAC,CAACsE,sBAAsB,CAAE,QAAS;IACzD,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAM;IAAEvD;EAAe,CAAC,GAAGhC,SAAS,CAAI2C,MAAM,IAAM;IACnD,MAAM;MAAE6C,kBAAkB;MAAErC;IAAyB,CAAC,GACrDR,MAAM,CAAEhC,gBAAiB,CAAC;IAC3B,MAAM8E,SAAS,GAAGtC,wBAAwB,CAAC,CAAC;IAE5C,OAAO;MACNnB,cAAc,EAAEyD,SAAS,GACtBD,kBAAkB,CAAEC,SAAU,CAAC,EAAEzD,cAAc,GAC/C;IACJ,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAM0D,eAAe,GAAGA,CAAA,KAAM;IAC7BtD,mBAAmB,CAAE,IAAK,CAAC;IAC3BiD,uBAAuB,CAAE,MAAM,EAAE,0BAA2B,CAAC;EAC9D,CAAC;;EAED;EACA,IAAK,CAAE3D,+BAA+B,IAAI4D,UAAU,KAAK,SAAS,EAAG;IACpE,OAAO,IAAI,CAAC,CAAC;EACd;EAEA,MAAMK,mBAAmB,GAAG3D,cAAc,GACvCb,uBAAuB,GACvBD,gBAAgB;EAEnB,oBACCK,KAAA,CAAAE,SAAA;IAAAwD,QAAA,gBACC5D,IAAA,CAACsE,mBAAmB;MAACC,OAAO,EAAGF;IAAiB,CAAE,CAAC,eACnDrE,IAAA,CAACR,aAAa;MACbgF,UAAU,EAAG/E;MACb;MAAA;MACAgF,KAAK,EAAG/F,EAAE,CAAE,UAAW,CAAG;MAC1BgG,IAAI,EAAGzF,WAAa;MAAA2E,QAAA,eAEpB5D,IAAA,CAACa,oBAAoB;QACpBC,gBAAgB,EAAGA,gBAAkB;QACrCC,mBAAmB,EAAGA;MAAqB,CAC3C;IAAC,CACY,CAAC;EAAA,CACf,CAAC;AAEL","ignoreList":[]}
@@ -2,29 +2,31 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
- import { __, isRTL } from '@wordpress/i18n';
6
- import { blockDefault, code, drawerLeft, drawerRight, edit, formatListBullets, listView, external, keyboard, symbol } from '@wordpress/icons';
5
+ import { __, isRTL, sprintf } from '@wordpress/i18n';
6
+ import { blockDefault, code, drawerLeft, drawerRight, edit, formatListBullets, listView, external, keyboard, symbol, page, layout, rotateRight, rotateLeft } from '@wordpress/icons';
7
7
  import { useCommandLoader } from '@wordpress/commands';
8
8
  import { store as preferencesStore } from '@wordpress/preferences';
9
9
  import { store as noticesStore } from '@wordpress/notices';
10
10
  import { store as blockEditorStore } from '@wordpress/block-editor';
11
- import { store as coreStore } from '@wordpress/core-data';
11
+ import { store as coreStore, useEntityRecord } from '@wordpress/core-data';
12
12
  import { store as interfaceStore } from '@wordpress/interface';
13
+ import { decodeEntities } from '@wordpress/html-entities';
13
14
 
14
15
  /**
15
16
  * Internal dependencies
16
17
  */
18
+ import { unlock } from '../../lock-unlock';
17
19
  import { store as editorStore } from '../../store';
18
- import { PATTERN_POST_TYPE } from '../../store/constants';
20
+ import { PATTERN_POST_TYPE, TEMPLATE_PART_POST_TYPE, TEMPLATE_POST_TYPE } from '../../store/constants';
19
21
  import { modalName as patternRenameModalName } from '../pattern-rename-modal';
20
22
  import { modalName as patternDuplicateModalName } from '../pattern-duplicate-modal';
21
- function useEditorCommandLoader() {
23
+ import isTemplateRevertable from '../../store/utils/is-template-revertable';
24
+ const getEditorCommandLoader = () => function useEditorCommandLoader() {
22
25
  const {
23
26
  editorMode,
24
27
  isListViewOpen,
25
28
  showBlockBreadcrumbs,
26
29
  isDistractionFree,
27
- isTopToolbar,
28
30
  isFocusMode,
29
31
  isPreviewMode,
30
32
  isViewable,
@@ -53,7 +55,6 @@ function useEditorCommandLoader() {
53
55
  showBlockBreadcrumbs: get('core', 'showBlockBreadcrumbs'),
54
56
  isDistractionFree: get('core', 'distractionFree'),
55
57
  isFocusMode: get('core', 'focusMode'),
56
- isTopToolbar: get('core', 'fixedToolbar'),
57
58
  isPreviewMode: getSettings().isPreviewMode,
58
59
  isViewable: (_getPostType$viewable = getPostType(getCurrentPostType())?.viewable) !== null && _getPostType$viewable !== void 0 ? _getPostType$viewable : false,
59
60
  isCodeEditingEnabled: getEditorSettings().codeEditingEnabled,
@@ -74,7 +75,9 @@ function useEditorCommandLoader() {
74
75
  __unstableSaveForPreview,
75
76
  setIsListViewOpened,
76
77
  switchEditorMode,
77
- toggleDistractionFree
78
+ toggleDistractionFree,
79
+ toggleSpotlightMode,
80
+ toggleTopToolbar
78
81
  } = useDispatch(editorStore);
79
82
  const {
80
83
  openModal,
@@ -129,18 +132,8 @@ function useEditorCommandLoader() {
129
132
  callback: ({
130
133
  close
131
134
  }) => {
132
- toggle('core', 'focusMode');
135
+ toggleSpotlightMode();
133
136
  close();
134
- createInfoNotice(isFocusMode ? __('Spotlight off.') : __('Spotlight on.'), {
135
- id: 'core/editor/toggle-spotlight-mode/notice',
136
- type: 'snackbar',
137
- actions: [{
138
- label: __('Undo'),
139
- onClick: () => {
140
- toggle('core', 'focusMode');
141
- }
142
- }]
143
- });
144
137
  }
145
138
  });
146
139
  commands.push({
@@ -164,21 +157,8 @@ function useEditorCommandLoader() {
164
157
  callback: ({
165
158
  close
166
159
  }) => {
167
- toggle('core', 'fixedToolbar');
168
- if (isDistractionFree) {
169
- toggleDistractionFree();
170
- }
160
+ toggleTopToolbar();
171
161
  close();
172
- createInfoNotice(isTopToolbar ? __('Top toolbar off.') : __('Top toolbar on.'), {
173
- id: 'core/editor/toggle-top-toolbar/notice',
174
- type: 'snackbar',
175
- actions: [{
176
- label: __('Undo'),
177
- onClick: () => {
178
- toggle('core', 'fixedToolbar');
179
- }
180
- }]
181
- });
182
162
  }
183
163
  });
184
164
  if (allowSwitchEditorMode) {
@@ -274,8 +254,8 @@ function useEditorCommandLoader() {
274
254
  commands,
275
255
  isLoading: false
276
256
  };
277
- }
278
- function useEditedEntityContextualCommands() {
257
+ };
258
+ const getEditedEntityContextualCommands = () => function useEditedEntityContextualCommands() {
279
259
  const {
280
260
  postType
281
261
  } = useSelect(select => {
@@ -318,16 +298,143 @@ function useEditedEntityContextualCommands() {
318
298
  isLoading: false,
319
299
  commands
320
300
  };
321
- }
301
+ };
302
+ const getPageContentFocusCommands = () => function usePageContentFocusCommands() {
303
+ const {
304
+ onNavigateToEntityRecord,
305
+ goBack,
306
+ templateId,
307
+ isPreviewMode
308
+ } = useSelect(select => {
309
+ const {
310
+ getRenderingMode,
311
+ getEditorSettings: _getEditorSettings,
312
+ getCurrentTemplateId
313
+ } = unlock(select(editorStore));
314
+ const editorSettings = _getEditorSettings();
315
+ return {
316
+ isTemplateHidden: getRenderingMode() === 'post-only',
317
+ onNavigateToEntityRecord: editorSettings.onNavigateToEntityRecord,
318
+ getEditorSettings: _getEditorSettings,
319
+ goBack: editorSettings.onNavigateToPreviousEntityRecord,
320
+ templateId: getCurrentTemplateId(),
321
+ isPreviewMode: editorSettings.isPreviewMode
322
+ };
323
+ }, []);
324
+ const {
325
+ editedRecord: template,
326
+ hasResolved
327
+ } = useEntityRecord('postType', 'wp_template', templateId);
328
+ if (isPreviewMode) {
329
+ return {
330
+ isLoading: false,
331
+ commands: []
332
+ };
333
+ }
334
+ const commands = [];
335
+ if (templateId && hasResolved) {
336
+ commands.push({
337
+ name: 'core/switch-to-template-focus',
338
+ label: sprintf(/* translators: %s: template title */
339
+ __('Edit template: %s'), decodeEntities(template.title)),
340
+ icon: layout,
341
+ callback: ({
342
+ close
343
+ }) => {
344
+ onNavigateToEntityRecord({
345
+ postId: templateId,
346
+ postType: 'wp_template'
347
+ });
348
+ close();
349
+ }
350
+ });
351
+ }
352
+ if (!!goBack) {
353
+ commands.push({
354
+ name: 'core/switch-to-previous-entity',
355
+ label: __('Go back'),
356
+ icon: page,
357
+ callback: ({
358
+ close
359
+ }) => {
360
+ goBack();
361
+ close();
362
+ }
363
+ });
364
+ }
365
+ return {
366
+ isLoading: false,
367
+ commands
368
+ };
369
+ };
370
+ const getManipulateDocumentCommands = () => function useManipulateDocumentCommands() {
371
+ const {
372
+ postType,
373
+ postId
374
+ } = useSelect(select => {
375
+ const {
376
+ getCurrentPostId,
377
+ getCurrentPostType
378
+ } = select(editorStore);
379
+ return {
380
+ postType: getCurrentPostType(),
381
+ postId: getCurrentPostId()
382
+ };
383
+ }, []);
384
+ const {
385
+ editedRecord: template,
386
+ hasResolved
387
+ } = useEntityRecord('postType', postType, postId);
388
+ // eslint-disable-next-line @wordpress/no-unused-vars-before-return
389
+ const {
390
+ revertTemplate
391
+ } = unlock(useDispatch(editorStore));
392
+ if (!hasResolved || ![TEMPLATE_PART_POST_TYPE, TEMPLATE_POST_TYPE].includes(postType)) {
393
+ return {
394
+ isLoading: true,
395
+ commands: []
396
+ };
397
+ }
398
+ const commands = [];
399
+ if (isTemplateRevertable(template)) {
400
+ const label = template.type === TEMPLATE_POST_TYPE ? sprintf(/* translators: %s: template title */
401
+ __('Reset template: %s'), decodeEntities(template.title)) : sprintf(/* translators: %s: template part title */
402
+ __('Reset template part: %s'), decodeEntities(template.title));
403
+ commands.push({
404
+ name: 'core/reset-template',
405
+ label,
406
+ icon: isRTL() ? rotateRight : rotateLeft,
407
+ callback: ({
408
+ close
409
+ }) => {
410
+ revertTemplate(template);
411
+ close();
412
+ }
413
+ });
414
+ }
415
+ return {
416
+ isLoading: !hasResolved,
417
+ commands
418
+ };
419
+ };
322
420
  export default function useCommands() {
323
421
  useCommandLoader({
324
422
  name: 'core/editor/edit-ui',
325
- hook: useEditorCommandLoader
423
+ hook: getEditorCommandLoader()
326
424
  });
327
425
  useCommandLoader({
328
426
  name: 'core/editor/contextual-commands',
329
- hook: useEditedEntityContextualCommands,
427
+ hook: getEditedEntityContextualCommands(),
428
+ context: 'entity-edit'
429
+ });
430
+ useCommandLoader({
431
+ name: 'core/editor/page-content-focus',
432
+ hook: getPageContentFocusCommands(),
330
433
  context: 'entity-edit'
331
434
  });
435
+ useCommandLoader({
436
+ name: 'core/edit-site/manipulate-document',
437
+ hook: getManipulateDocumentCommands()
438
+ });
332
439
  }
333
440
  //# sourceMappingURL=index.js.map