@wordpress/edit-post 7.24.1 → 7.26.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 (267) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +1 -1
  3. package/build/components/browser-url/index.js +3 -2
  4. package/build/components/browser-url/index.js.map +1 -1
  5. package/build/components/header/index.js +35 -33
  6. package/build/components/header/index.js.map +1 -1
  7. package/build/components/header/mode-switcher/index.js +1 -1
  8. package/build/components/header/mode-switcher/index.js.map +1 -1
  9. package/build/components/header/more-menu/index.js +2 -1
  10. package/build/components/header/more-menu/index.js.map +1 -1
  11. package/build/components/header/writing-menu/index.js +22 -18
  12. package/build/components/header/writing-menu/index.js.map +1 -1
  13. package/build/components/keyboard-shortcuts/index.js +1 -20
  14. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  15. package/build/components/layout/index.js +45 -38
  16. package/build/components/layout/index.js.map +1 -1
  17. package/build/components/layout/index.native.js +3 -1
  18. package/build/components/layout/index.native.js.map +1 -1
  19. package/build/components/meta-boxes/meta-box-visibility.js +2 -6
  20. package/build/components/meta-boxes/meta-box-visibility.js.map +1 -1
  21. package/build/components/preferences-modal/index.js +87 -54
  22. package/build/components/preferences-modal/index.js.map +1 -1
  23. package/build/components/preferences-modal/options/enable-feature.js +23 -23
  24. package/build/components/preferences-modal/options/enable-feature.js.map +1 -1
  25. package/build/components/preferences-modal/options/enable-panel.js +3 -6
  26. package/build/components/preferences-modal/options/enable-panel.js.map +1 -1
  27. package/build/components/sidebar/plugin-document-setting-panel/index.js +3 -3
  28. package/build/components/sidebar/plugin-document-setting-panel/index.js.map +1 -1
  29. package/build/components/sidebar/plugin-sidebar/index.js +2 -10
  30. package/build/components/sidebar/plugin-sidebar/index.js.map +1 -1
  31. package/build/components/sidebar/post-status/index.js +3 -5
  32. package/build/components/sidebar/post-status/index.js.map +1 -1
  33. package/build/components/sidebar/settings-header/index.js +17 -43
  34. package/build/components/sidebar/settings-header/index.js.map +1 -1
  35. package/build/components/sidebar/settings-sidebar/index.js +80 -26
  36. package/build/components/sidebar/settings-sidebar/index.js.map +1 -1
  37. package/build/components/start-page-options/index.js +3 -3
  38. package/build/components/start-page-options/index.js.map +1 -1
  39. package/build/components/visual-editor/index.js +20 -257
  40. package/build/components/visual-editor/index.js.map +1 -1
  41. package/build/components/welcome-guide/index.js +6 -3
  42. package/build/components/welcome-guide/index.js.map +1 -1
  43. package/build/editor.js +20 -30
  44. package/build/editor.js.map +1 -1
  45. package/build/editor.native.js +3 -11
  46. package/build/editor.native.js.map +1 -1
  47. package/build/hooks/commands/use-common-commands.js +16 -12
  48. package/build/hooks/commands/use-common-commands.js.map +1 -1
  49. package/build/hooks/use-post-history.js +79 -0
  50. package/build/hooks/use-post-history.js.map +1 -0
  51. package/build/index.js +24 -20
  52. package/build/index.js.map +1 -1
  53. package/build/index.native.js +7 -1
  54. package/build/index.native.js.map +1 -1
  55. package/build/plugins/welcome-guide-menu-item/index.js +2 -6
  56. package/build/plugins/welcome-guide-menu-item/index.js.map +1 -1
  57. package/build/store/actions.js +94 -112
  58. package/build/store/actions.js.map +1 -1
  59. package/build/store/reducer.js +1 -95
  60. package/build/store/reducer.js.map +1 -1
  61. package/build/store/selectors.js +86 -48
  62. package/build/store/selectors.js.map +1 -1
  63. package/build-module/components/browser-url/index.js +3 -2
  64. package/build-module/components/browser-url/index.js.map +1 -1
  65. package/build-module/components/header/index.js +37 -35
  66. package/build-module/components/header/index.js.map +1 -1
  67. package/build-module/components/header/mode-switcher/index.js +1 -1
  68. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  69. package/build-module/components/header/more-menu/index.js +2 -1
  70. package/build-module/components/header/more-menu/index.js.map +1 -1
  71. package/build-module/components/header/writing-menu/index.js +23 -19
  72. package/build-module/components/header/writing-menu/index.js.map +1 -1
  73. package/build-module/components/keyboard-shortcuts/index.js +1 -20
  74. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  75. package/build-module/components/layout/index.js +46 -38
  76. package/build-module/components/layout/index.js.map +1 -1
  77. package/build-module/components/layout/index.native.js +4 -2
  78. package/build-module/components/layout/index.native.js.map +1 -1
  79. package/build-module/components/meta-boxes/meta-box-visibility.js +2 -6
  80. package/build-module/components/meta-boxes/meta-box-visibility.js.map +1 -1
  81. package/build-module/components/preferences-modal/index.js +87 -54
  82. package/build-module/components/preferences-modal/index.js.map +1 -1
  83. package/build-module/components/preferences-modal/options/enable-feature.js +22 -23
  84. package/build-module/components/preferences-modal/options/enable-feature.js.map +1 -1
  85. package/build-module/components/preferences-modal/options/enable-panel.js +3 -7
  86. package/build-module/components/preferences-modal/options/enable-panel.js.map +1 -1
  87. package/build-module/components/sidebar/plugin-document-setting-panel/index.js +3 -3
  88. package/build-module/components/sidebar/plugin-document-setting-panel/index.js.map +1 -1
  89. package/build-module/components/sidebar/plugin-sidebar/index.js +2 -10
  90. package/build-module/components/sidebar/plugin-sidebar/index.js.map +1 -1
  91. package/build-module/components/sidebar/post-status/index.js +4 -6
  92. package/build-module/components/sidebar/post-status/index.js.map +1 -1
  93. package/build-module/components/sidebar/settings-header/index.js +20 -46
  94. package/build-module/components/sidebar/settings-header/index.js.map +1 -1
  95. package/build-module/components/sidebar/settings-sidebar/index.js +80 -27
  96. package/build-module/components/sidebar/settings-sidebar/index.js.map +1 -1
  97. package/build-module/components/start-page-options/index.js +3 -3
  98. package/build-module/components/start-page-options/index.js.map +1 -1
  99. package/build-module/components/visual-editor/index.js +24 -261
  100. package/build-module/components/visual-editor/index.js.map +1 -1
  101. package/build-module/components/welcome-guide/index.js +6 -3
  102. package/build-module/components/welcome-guide/index.js.map +1 -1
  103. package/build-module/editor.js +20 -30
  104. package/build-module/editor.js.map +1 -1
  105. package/build-module/editor.native.js +3 -11
  106. package/build-module/editor.native.js.map +1 -1
  107. package/build-module/hooks/commands/use-common-commands.js +16 -12
  108. package/build-module/hooks/commands/use-common-commands.js.map +1 -1
  109. package/build-module/hooks/use-post-history.js +73 -0
  110. package/build-module/hooks/use-post-history.js.map +1 -0
  111. package/build-module/index.js +19 -12
  112. package/build-module/index.js.map +1 -1
  113. package/build-module/index.native.js +7 -1
  114. package/build-module/index.native.js.map +1 -1
  115. package/build-module/plugins/welcome-guide-menu-item/index.js +2 -6
  116. package/build-module/plugins/welcome-guide-menu-item/index.js.map +1 -1
  117. package/build-module/store/actions.js +86 -105
  118. package/build-module/store/actions.js.map +1 -1
  119. package/build-module/store/reducer.js +1 -92
  120. package/build-module/store/reducer.js.map +1 -1
  121. package/build-module/store/selectors.js +76 -38
  122. package/build-module/store/selectors.js.map +1 -1
  123. package/build-style/style-rtl.css +65 -473
  124. package/build-style/style.css +65 -473
  125. package/package.json +32 -32
  126. package/src/components/browser-url/index.js +4 -2
  127. package/src/components/header/index.js +45 -46
  128. package/src/components/header/mode-switcher/index.js +2 -1
  129. package/src/components/header/more-menu/index.js +1 -0
  130. package/src/components/header/style.scss +63 -37
  131. package/src/components/header/writing-menu/index.js +24 -24
  132. package/src/components/keyboard-shortcut-help-modal/test/index.js +0 -15
  133. package/src/components/keyboard-shortcuts/index.js +1 -23
  134. package/src/components/layout/index.js +31 -39
  135. package/src/components/layout/index.native.js +9 -1
  136. package/src/components/meta-boxes/meta-box-visibility.js +2 -8
  137. package/src/components/preferences-modal/index.js +128 -97
  138. package/src/components/preferences-modal/options/enable-feature.js +26 -21
  139. package/src/components/preferences-modal/options/enable-panel.js +3 -7
  140. package/src/components/preferences-modal/test/__snapshots__/meta-boxes-section.js.snap +187 -175
  141. package/src/components/preferences-modal/test/index.js +1 -52
  142. package/src/components/sidebar/plugin-document-setting-panel/index.js +3 -3
  143. package/src/components/sidebar/plugin-sidebar/index.js +1 -9
  144. package/src/components/sidebar/post-status/index.js +5 -5
  145. package/src/components/sidebar/settings-header/index.js +19 -71
  146. package/src/components/sidebar/settings-sidebar/index.js +125 -60
  147. package/src/components/sidebar/style.scss +4 -12
  148. package/src/components/start-page-options/index.js +3 -3
  149. package/src/components/text-editor/style.scss +0 -6
  150. package/src/components/visual-editor/index.js +26 -359
  151. package/src/components/visual-editor/style.scss +0 -15
  152. package/src/components/welcome-guide/index.js +4 -2
  153. package/src/editor.js +36 -35
  154. package/src/editor.native.js +2 -23
  155. package/src/hooks/commands/use-common-commands.js +14 -16
  156. package/src/hooks/use-post-history.js +73 -0
  157. package/src/index.js +24 -13
  158. package/src/index.native.js +8 -1
  159. package/src/plugins/welcome-guide-menu-item/index.js +3 -6
  160. package/src/store/actions.js +80 -131
  161. package/src/store/reducer.js +0 -93
  162. package/src/store/selectors.js +97 -55
  163. package/src/store/test/actions.js +10 -131
  164. package/src/store/test/reducer.js +1 -108
  165. package/src/store/test/selectors.js +0 -50
  166. package/src/style.scss +1 -8
  167. package/src/test/__snapshots__/editor.native.js.snap +21 -0
  168. package/src/test/editor.native.js +107 -56
  169. package/build/components/device-preview/index.js +0 -72
  170. package/build/components/device-preview/index.js.map +0 -1
  171. package/build/components/header/document-actions/index.js +0 -82
  172. package/build/components/header/document-actions/index.js.map +0 -1
  173. package/build/components/header/header-toolbar/index.js +0 -156
  174. package/build/components/header/header-toolbar/index.js.map +0 -1
  175. package/build/components/secondary-sidebar/inserter-sidebar.js +0 -73
  176. package/build/components/secondary-sidebar/inserter-sidebar.js.map +0 -1
  177. package/build/components/secondary-sidebar/list-view-outline.js +0 -112
  178. package/build/components/secondary-sidebar/list-view-outline.js.map +0 -1
  179. package/build/components/secondary-sidebar/list-view-sidebar.js +0 -148
  180. package/build/components/secondary-sidebar/list-view-sidebar.js.map +0 -1
  181. package/build/components/sidebar/discussion-panel/index.js +0 -59
  182. package/build/components/sidebar/discussion-panel/index.js.map +0 -1
  183. package/build/components/sidebar/featured-image/index.js +0 -70
  184. package/build/components/sidebar/featured-image/index.js.map +0 -1
  185. package/build/components/sidebar/last-revision/index.js +0 -21
  186. package/build/components/sidebar/last-revision/index.js.map +0 -1
  187. package/build/components/sidebar/page-attributes/index.js +0 -65
  188. package/build/components/sidebar/page-attributes/index.js.map +0 -1
  189. package/build/components/sidebar/plugin-post-excerpt/index.js +0 -72
  190. package/build/components/sidebar/plugin-post-excerpt/index.js.map +0 -1
  191. package/build/components/sidebar/post-excerpt/index.js +0 -54
  192. package/build/components/sidebar/post-excerpt/index.js.map +0 -1
  193. package/build/components/sidebar/post-taxonomies/index.js +0 -30
  194. package/build/components/sidebar/post-taxonomies/index.js.map +0 -1
  195. package/build/components/sidebar/post-taxonomies/taxonomy-panel.js +0 -56
  196. package/build/components/sidebar/post-taxonomies/taxonomy-panel.js.map +0 -1
  197. package/build/components/sidebar/post-template/create-modal.js +0 -99
  198. package/build/components/sidebar/post-template/create-modal.js.map +0 -1
  199. package/build/components/sidebar/post-template/form.js +0 -110
  200. package/build/components/sidebar/post-template/form.js.map +0 -1
  201. package/build/components/sidebar/post-template/index.js +0 -106
  202. package/build/components/sidebar/post-template/index.js.map +0 -1
  203. package/build/components/view-link/index.js +0 -53
  204. package/build/components/view-link/index.js.map +0 -1
  205. package/build-module/components/device-preview/index.js +0 -65
  206. package/build-module/components/device-preview/index.js.map +0 -1
  207. package/build-module/components/header/document-actions/index.js +0 -74
  208. package/build-module/components/header/document-actions/index.js.map +0 -1
  209. package/build-module/components/header/header-toolbar/index.js +0 -148
  210. package/build-module/components/header/header-toolbar/index.js.map +0 -1
  211. package/build-module/components/secondary-sidebar/inserter-sidebar.js +0 -66
  212. package/build-module/components/secondary-sidebar/inserter-sidebar.js.map +0 -1
  213. package/build-module/components/secondary-sidebar/list-view-outline.js +0 -105
  214. package/build-module/components/secondary-sidebar/list-view-outline.js.map +0 -1
  215. package/build-module/components/secondary-sidebar/list-view-sidebar.js +0 -140
  216. package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +0 -1
  217. package/build-module/components/sidebar/discussion-panel/index.js +0 -52
  218. package/build-module/components/sidebar/discussion-panel/index.js.map +0 -1
  219. package/build-module/components/sidebar/featured-image/index.js +0 -63
  220. package/build-module/components/sidebar/featured-image/index.js.map +0 -1
  221. package/build-module/components/sidebar/last-revision/index.js +0 -13
  222. package/build-module/components/sidebar/last-revision/index.js.map +0 -1
  223. package/build-module/components/sidebar/page-attributes/index.js +0 -57
  224. package/build-module/components/sidebar/page-attributes/index.js.map +0 -1
  225. package/build-module/components/sidebar/plugin-post-excerpt/index.js +0 -64
  226. package/build-module/components/sidebar/plugin-post-excerpt/index.js.map +0 -1
  227. package/build-module/components/sidebar/post-excerpt/index.js +0 -47
  228. package/build-module/components/sidebar/post-excerpt/index.js.map +0 -1
  229. package/build-module/components/sidebar/post-taxonomies/index.js +0 -21
  230. package/build-module/components/sidebar/post-taxonomies/index.js.map +0 -1
  231. package/build-module/components/sidebar/post-taxonomies/taxonomy-panel.js +0 -48
  232. package/build-module/components/sidebar/post-taxonomies/taxonomy-panel.js.map +0 -1
  233. package/build-module/components/sidebar/post-template/create-modal.js +0 -92
  234. package/build-module/components/sidebar/post-template/create-modal.js.map +0 -1
  235. package/build-module/components/sidebar/post-template/form.js +0 -102
  236. package/build-module/components/sidebar/post-template/form.js.map +0 -1
  237. package/build-module/components/sidebar/post-template/index.js +0 -98
  238. package/build-module/components/sidebar/post-template/index.js.map +0 -1
  239. package/build-module/components/view-link/index.js +0 -46
  240. package/build-module/components/view-link/index.js.map +0 -1
  241. package/src/components/device-preview/index.js +0 -73
  242. package/src/components/header/document-actions/index.js +0 -82
  243. package/src/components/header/document-actions/style.scss +0 -64
  244. package/src/components/header/header-toolbar/index.js +0 -182
  245. package/src/components/header/header-toolbar/style.scss +0 -114
  246. package/src/components/keyboard-shortcut-help-modal/test/__snapshots__/index.js.snap +0 -929
  247. package/src/components/secondary-sidebar/inserter-sidebar.js +0 -71
  248. package/src/components/secondary-sidebar/list-view-outline.js +0 -98
  249. package/src/components/secondary-sidebar/list-view-sidebar.js +0 -170
  250. package/src/components/secondary-sidebar/style.scss +0 -120
  251. package/src/components/sidebar/discussion-panel/index.js +0 -62
  252. package/src/components/sidebar/featured-image/index.js +0 -67
  253. package/src/components/sidebar/last-revision/index.js +0 -17
  254. package/src/components/sidebar/last-revision/style.scss +0 -10
  255. package/src/components/sidebar/page-attributes/index.js +0 -65
  256. package/src/components/sidebar/plugin-post-excerpt/index.js +0 -61
  257. package/src/components/sidebar/plugin-post-excerpt/test/index.js +0 -36
  258. package/src/components/sidebar/post-excerpt/index.js +0 -59
  259. package/src/components/sidebar/post-taxonomies/index.js +0 -30
  260. package/src/components/sidebar/post-taxonomies/taxonomy-panel.js +0 -48
  261. package/src/components/sidebar/post-template/create-modal.js +0 -140
  262. package/src/components/sidebar/post-template/form.js +0 -141
  263. package/src/components/sidebar/post-template/index.js +0 -120
  264. package/src/components/sidebar/post-template/style.scss +0 -22
  265. package/src/components/sidebar/settings-header/style.scss +0 -74
  266. package/src/components/sidebar/template/style.scss +0 -35
  267. package/src/components/view-link/index.js +0 -48
@@ -1,61 +0,0 @@
1
- /**
2
- * Defines as extensibility slot for the Excerpt panel.
3
- */
4
-
5
- /**
6
- * WordPress dependencies
7
- */
8
- import { createSlotFill, PanelRow } from '@wordpress/components';
9
-
10
- const { Fill, Slot } = createSlotFill( 'PluginPostExcerpt' );
11
-
12
- /**
13
- * Renders a post excerpt panel in the post sidebar.
14
- *
15
- * @param {Object} props Component properties.
16
- * @param {string} [props.className] An optional class name added to the row.
17
- * @param {Element} props.children Children to be rendered.
18
- *
19
- * @example
20
- * ```js
21
- * // Using ES5 syntax
22
- * var __ = wp.i18n.__;
23
- * var PluginPostExcerpt = wp.editPost.PluginPostExcerpt;
24
- *
25
- * function MyPluginPostExcerpt() {
26
- * return React.createElement(
27
- * PluginPostExcerpt,
28
- * {
29
- * className: 'my-plugin-post-excerpt',
30
- * },
31
- * __( 'Post excerpt custom content' )
32
- * )
33
- * }
34
- * ```
35
- *
36
- * @example
37
- * ```jsx
38
- * // Using ESNext syntax
39
- * import { __ } from '@wordpress/i18n';
40
- * import { PluginPostExcerpt } from '@wordpress/edit-post';
41
- *
42
- * const MyPluginPostExcerpt = () => (
43
- * <PluginPostExcerpt className="my-plugin-post-excerpt">
44
- * { __( 'Post excerpt custom content' ) }
45
- * </PluginPostExcerpt>
46
- * );
47
- * ```
48
- *
49
- * @return {Component} The component to be rendered.
50
- */
51
- const PluginPostExcerpt = ( { children, className } ) => {
52
- return (
53
- <Fill>
54
- <PanelRow className={ className }>{ children }</PanelRow>
55
- </Fill>
56
- );
57
- };
58
-
59
- PluginPostExcerpt.Slot = Slot;
60
-
61
- export default PluginPostExcerpt;
@@ -1,36 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { render, screen } from '@testing-library/react';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { SlotFillProvider } from '@wordpress/components';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import PluginPostExcerptPanel from '../';
15
-
16
- describe( 'PluginPostExcerptPanel', () => {
17
- test( 'renders fill properly', () => {
18
- render(
19
- <SlotFillProvider>
20
- <PluginPostExcerptPanel className="my-plugin-post-excerpt-custom-content">
21
- Post Excerpt - Custom content
22
- </PluginPostExcerptPanel>
23
- <div role="tabpanel">
24
- <PluginPostExcerptPanel.Slot />
25
- </div>
26
- </SlotFillProvider>
27
- );
28
-
29
- expect( screen.getByRole( 'tabpanel' ) ).toHaveTextContent(
30
- 'Post Excerpt - Custom content'
31
- );
32
- expect(
33
- screen.getByText( 'Post Excerpt - Custom content' )
34
- ).toHaveClass( 'my-plugin-post-excerpt-custom-content' );
35
- } );
36
- } );
@@ -1,59 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { PanelBody } from '@wordpress/components';
6
- import {
7
- PostExcerpt as PostExcerptForm,
8
- PostExcerptCheck,
9
- } from '@wordpress/editor';
10
- import { useDispatch, useSelect } from '@wordpress/data';
11
-
12
- /**
13
- * Internal dependencies
14
- */
15
- import { store as editPostStore } from '../../../store';
16
- import PluginPostExcerpt from '../plugin-post-excerpt';
17
-
18
- /**
19
- * Module Constants
20
- */
21
- const PANEL_NAME = 'post-excerpt';
22
-
23
- export default function PostExcerpt() {
24
- const { isOpened, isEnabled } = useSelect( ( select ) => {
25
- const { isEditorPanelOpened, isEditorPanelEnabled } =
26
- select( editPostStore );
27
-
28
- return {
29
- isOpened: isEditorPanelOpened( PANEL_NAME ),
30
- isEnabled: isEditorPanelEnabled( PANEL_NAME ),
31
- };
32
- }, [] );
33
-
34
- const { toggleEditorPanelOpened } = useDispatch( editPostStore );
35
- const toggleExcerptPanel = () => toggleEditorPanelOpened( PANEL_NAME );
36
-
37
- if ( ! isEnabled ) {
38
- return null;
39
- }
40
-
41
- return (
42
- <PostExcerptCheck>
43
- <PanelBody
44
- title={ __( 'Excerpt' ) }
45
- opened={ isOpened }
46
- onToggle={ toggleExcerptPanel }
47
- >
48
- <PluginPostExcerpt.Slot>
49
- { ( fills ) => (
50
- <>
51
- <PostExcerptForm />
52
- { fills }
53
- </>
54
- ) }
55
- </PluginPostExcerpt.Slot>
56
- </PanelBody>
57
- </PostExcerptCheck>
58
- );
59
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import {
5
- PostTaxonomies as PostTaxonomiesForm,
6
- PostTaxonomiesCheck,
7
- } from '@wordpress/editor';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import TaxonomyPanel from './taxonomy-panel';
13
-
14
- function PostTaxonomies() {
15
- return (
16
- <PostTaxonomiesCheck>
17
- <PostTaxonomiesForm
18
- taxonomyWrapper={ ( content, taxonomy ) => {
19
- return (
20
- <TaxonomyPanel taxonomy={ taxonomy }>
21
- { content }
22
- </TaxonomyPanel>
23
- );
24
- } }
25
- />
26
- </PostTaxonomiesCheck>
27
- );
28
- }
29
-
30
- export default PostTaxonomies;
@@ -1,48 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { PanelBody } from '@wordpress/components';
5
- import { useSelect, useDispatch } from '@wordpress/data';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import { store as editPostStore } from '../../../store';
11
-
12
- function TaxonomyPanel( { taxonomy, children } ) {
13
- const slug = taxonomy?.slug;
14
- const panelName = slug ? `taxonomy-panel-${ slug }` : '';
15
- const { isEnabled, isOpened } = useSelect(
16
- ( select ) => {
17
- const { isEditorPanelEnabled, isEditorPanelOpened } =
18
- select( editPostStore );
19
- return {
20
- isEnabled: slug ? isEditorPanelEnabled( panelName ) : false,
21
- isOpened: slug ? isEditorPanelOpened( panelName ) : false,
22
- };
23
- },
24
- [ panelName, slug ]
25
- );
26
- const { toggleEditorPanelOpened } = useDispatch( editPostStore );
27
-
28
- if ( ! isEnabled ) {
29
- return null;
30
- }
31
-
32
- const taxonomyMenuName = taxonomy?.labels?.menu_name;
33
- if ( ! taxonomyMenuName ) {
34
- return null;
35
- }
36
-
37
- return (
38
- <PanelBody
39
- title={ taxonomyMenuName }
40
- opened={ isOpened }
41
- onToggle={ () => toggleEditorPanelOpened( panelName ) }
42
- >
43
- { children }
44
- </PanelBody>
45
- );
46
- }
47
-
48
- export default TaxonomyPanel;
@@ -1,140 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { useSelect, useDispatch } from '@wordpress/data';
5
- import { store as editorStore } from '@wordpress/editor';
6
- import { useState } from '@wordpress/element';
7
- import { serialize, createBlock } from '@wordpress/blocks';
8
- import {
9
- Modal,
10
- TextControl,
11
- Button,
12
- __experimentalHStack as HStack,
13
- __experimentalVStack as VStack,
14
- } from '@wordpress/components';
15
- import { __ } from '@wordpress/i18n';
16
- import { cleanForSlug } from '@wordpress/url';
17
-
18
- /**
19
- * Internal dependencies
20
- */
21
- import { store as editPostStore } from '../../../store';
22
-
23
- const DEFAULT_TITLE = __( 'Custom Template' );
24
-
25
- export default function PostTemplateCreateModal( { onClose } ) {
26
- const defaultBlockTemplate = useSelect(
27
- ( select ) =>
28
- select( editorStore ).getEditorSettings().defaultBlockTemplate,
29
- []
30
- );
31
-
32
- const { __unstableCreateTemplate, __unstableSwitchToTemplateMode } =
33
- useDispatch( editPostStore );
34
-
35
- const [ title, setTitle ] = useState( '' );
36
-
37
- const [ isBusy, setIsBusy ] = useState( false );
38
-
39
- const cancel = () => {
40
- setTitle( '' );
41
- onClose();
42
- };
43
-
44
- const submit = async ( event ) => {
45
- event.preventDefault();
46
-
47
- if ( isBusy ) {
48
- return;
49
- }
50
-
51
- setIsBusy( true );
52
-
53
- const newTemplateContent =
54
- defaultBlockTemplate ??
55
- serialize( [
56
- createBlock(
57
- 'core/group',
58
- {
59
- tagName: 'header',
60
- layout: { inherit: true },
61
- },
62
- [
63
- createBlock( 'core/site-title' ),
64
- createBlock( 'core/site-tagline' ),
65
- ]
66
- ),
67
- createBlock( 'core/separator' ),
68
- createBlock(
69
- 'core/group',
70
- {
71
- tagName: 'main',
72
- },
73
- [
74
- createBlock(
75
- 'core/group',
76
- {
77
- layout: { inherit: true },
78
- },
79
- [ createBlock( 'core/post-title' ) ]
80
- ),
81
- createBlock( 'core/post-content', {
82
- layout: { inherit: true },
83
- } ),
84
- ]
85
- ),
86
- ] );
87
-
88
- await __unstableCreateTemplate( {
89
- slug: cleanForSlug( title || DEFAULT_TITLE ),
90
- content: newTemplateContent,
91
- title: title || DEFAULT_TITLE,
92
- } );
93
-
94
- setIsBusy( false );
95
- cancel();
96
-
97
- __unstableSwitchToTemplateMode( true );
98
- };
99
-
100
- return (
101
- <Modal
102
- title={ __( 'Create custom template' ) }
103
- onRequestClose={ cancel }
104
- className="edit-post-post-template__create-modal"
105
- >
106
- <form
107
- className="edit-post-post-template__create-form"
108
- onSubmit={ submit }
109
- >
110
- <VStack spacing="3">
111
- <TextControl
112
- __nextHasNoMarginBottom
113
- label={ __( 'Name' ) }
114
- value={ title }
115
- onChange={ setTitle }
116
- placeholder={ DEFAULT_TITLE }
117
- disabled={ isBusy }
118
- help={ __(
119
- 'Describe the template, e.g. "Post with sidebar". A custom template can be manually applied to any post or page.'
120
- ) }
121
- />
122
- <HStack justify="right">
123
- <Button variant="tertiary" onClick={ cancel }>
124
- { __( 'Cancel' ) }
125
- </Button>
126
-
127
- <Button
128
- variant="primary"
129
- type="submit"
130
- isBusy={ isBusy }
131
- aria-disabled={ isBusy }
132
- >
133
- { __( 'Create' ) }
134
- </Button>
135
- </HStack>
136
- </VStack>
137
- </form>
138
- </Modal>
139
- );
140
- }
@@ -1,141 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { useState, useMemo } from '@wordpress/element';
5
- import { __experimentalInspectorPopoverHeader as InspectorPopoverHeader } from '@wordpress/block-editor';
6
- import { __ } from '@wordpress/i18n';
7
- import { addTemplate } from '@wordpress/icons';
8
- import { Notice, SelectControl, Button } from '@wordpress/components';
9
- import { useSelect, useDispatch } from '@wordpress/data';
10
- import { store as editorStore } from '@wordpress/editor';
11
- import { store as coreStore } from '@wordpress/core-data';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import { store as editPostStore } from '../../../store';
17
- import PostTemplateCreateModal from './create-modal';
18
-
19
- export default function PostTemplateForm( { onClose } ) {
20
- const {
21
- isPostsPage,
22
- availableTemplates,
23
- fetchedTemplates,
24
- selectedTemplateSlug,
25
- canCreate,
26
- canEdit,
27
- } = useSelect( ( select ) => {
28
- const { canUser, getEntityRecord, getEntityRecords } =
29
- select( coreStore );
30
- const editorSettings = select( editorStore ).getEditorSettings();
31
- const siteSettings = canUser( 'read', 'settings' )
32
- ? getEntityRecord( 'root', 'site' )
33
- : undefined;
34
- const _isPostsPage =
35
- select( editorStore ).getCurrentPostId() ===
36
- siteSettings?.page_for_posts;
37
- const canCreateTemplates = canUser( 'create', 'templates' );
38
-
39
- return {
40
- isPostsPage: _isPostsPage,
41
- availableTemplates: editorSettings.availableTemplates,
42
- fetchedTemplates: canCreateTemplates
43
- ? getEntityRecords( 'postType', 'wp_template', {
44
- post_type: select( editorStore ).getCurrentPostType(),
45
- per_page: -1,
46
- } )
47
- : undefined,
48
- selectedTemplateSlug:
49
- select( editorStore ).getEditedPostAttribute( 'template' ),
50
- canCreate:
51
- canCreateTemplates &&
52
- ! _isPostsPage &&
53
- editorSettings.supportsTemplateMode,
54
- canEdit:
55
- canCreateTemplates &&
56
- editorSettings.supportsTemplateMode &&
57
- !! select( editPostStore ).getEditedPostTemplate(),
58
- };
59
- }, [] );
60
-
61
- const options = useMemo(
62
- () =>
63
- Object.entries( {
64
- ...availableTemplates,
65
- ...Object.fromEntries(
66
- ( fetchedTemplates ?? [] ).map( ( { slug, title } ) => [
67
- slug,
68
- title.rendered,
69
- ] )
70
- ),
71
- } ).map( ( [ slug, title ] ) => ( { value: slug, label: title } ) ),
72
- [ availableTemplates, fetchedTemplates ]
73
- );
74
-
75
- const selectedOption =
76
- options.find( ( option ) => option.value === selectedTemplateSlug ) ??
77
- options.find( ( option ) => ! option.value ); // The default option has '' value.
78
-
79
- const { editPost } = useDispatch( editorStore );
80
- const { __unstableSwitchToTemplateMode } = useDispatch( editPostStore );
81
-
82
- const [ isCreateModalOpen, setIsCreateModalOpen ] = useState( false );
83
-
84
- return (
85
- <div className="edit-post-post-template__form">
86
- <InspectorPopoverHeader
87
- title={ __( 'Template' ) }
88
- help={ __(
89
- 'Templates define the way content is displayed when viewing your site.'
90
- ) }
91
- actions={
92
- canCreate
93
- ? [
94
- {
95
- icon: addTemplate,
96
- label: __( 'Add template' ),
97
- onClick: () => setIsCreateModalOpen( true ),
98
- },
99
- ]
100
- : []
101
- }
102
- onClose={ onClose }
103
- />
104
- { isPostsPage ? (
105
- <Notice
106
- className="edit-post-post-template__notice"
107
- status="warning"
108
- isDismissible={ false }
109
- >
110
- { __( 'The posts page template cannot be changed.' ) }
111
- </Notice>
112
- ) : (
113
- <SelectControl
114
- __nextHasNoMarginBottom
115
- hideLabelFromVision
116
- label={ __( 'Template' ) }
117
- value={ selectedOption?.value ?? '' }
118
- options={ options }
119
- onChange={ ( slug ) =>
120
- editPost( { template: slug || '' } )
121
- }
122
- />
123
- ) }
124
- { canEdit && (
125
- <p>
126
- <Button
127
- variant="link"
128
- onClick={ () => __unstableSwitchToTemplateMode() }
129
- >
130
- { __( 'Edit template' ) }
131
- </Button>
132
- </p>
133
- ) }
134
- { isCreateModalOpen && (
135
- <PostTemplateCreateModal
136
- onClose={ () => setIsCreateModalOpen( false ) }
137
- />
138
- ) }
139
- </div>
140
- );
141
- }
@@ -1,120 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { useState, useMemo } from '@wordpress/element';
5
- import { Dropdown, Button } from '@wordpress/components';
6
- import { __, sprintf } from '@wordpress/i18n';
7
- import { useSelect } from '@wordpress/data';
8
- import {
9
- store as editorStore,
10
- privateApis as editorPrivateApis,
11
- } from '@wordpress/editor';
12
- import { store as coreStore } from '@wordpress/core-data';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import PostTemplateForm from './form';
18
- import { store as editPostStore } from '../../../store';
19
- import { unlock } from '../../../lock-unlock';
20
-
21
- const { PostPanelRow } = unlock( editorPrivateApis );
22
-
23
- export default function PostTemplate() {
24
- // Use internal state instead of a ref to make sure that the component
25
- // re-renders when the popover's anchor updates.
26
- const [ popoverAnchor, setPopoverAnchor ] = useState( null );
27
- // Memoize popoverProps to avoid returning a new object every time.
28
- const popoverProps = useMemo(
29
- () => ( { anchor: popoverAnchor, placement: 'bottom-end' } ),
30
- [ popoverAnchor ]
31
- );
32
-
33
- const isVisible = useSelect( ( select ) => {
34
- const postTypeSlug = select( editorStore ).getCurrentPostType();
35
- const postType = select( coreStore ).getPostType( postTypeSlug );
36
- if ( ! postType?.viewable ) {
37
- return false;
38
- }
39
-
40
- const settings = select( editorStore ).getEditorSettings();
41
- const hasTemplates =
42
- !! settings.availableTemplates &&
43
- Object.keys( settings.availableTemplates ).length > 0;
44
- if ( hasTemplates ) {
45
- return true;
46
- }
47
-
48
- if ( ! settings.supportsTemplateMode ) {
49
- return false;
50
- }
51
-
52
- const canCreateTemplates =
53
- select( coreStore ).canUser( 'create', 'templates' ) ?? false;
54
- return canCreateTemplates;
55
- }, [] );
56
-
57
- if ( ! isVisible ) {
58
- return null;
59
- }
60
-
61
- return (
62
- <PostPanelRow label={ __( 'Template' ) } ref={ setPopoverAnchor }>
63
- <Dropdown
64
- popoverProps={ popoverProps }
65
- contentClassName="edit-post-post-template__dialog"
66
- focusOnMount
67
- renderToggle={ ( { isOpen, onToggle } ) => (
68
- <PostTemplateToggle
69
- isOpen={ isOpen }
70
- onClick={ onToggle }
71
- />
72
- ) }
73
- renderContent={ ( { onClose } ) => (
74
- <PostTemplateForm onClose={ onClose } />
75
- ) }
76
- />
77
- </PostPanelRow>
78
- );
79
- }
80
-
81
- function PostTemplateToggle( { isOpen, onClick } ) {
82
- const templateTitle = useSelect( ( select ) => {
83
- const templateSlug =
84
- select( editorStore ).getEditedPostAttribute( 'template' );
85
-
86
- const { supportsTemplateMode, availableTemplates } =
87
- select( editorStore ).getEditorSettings();
88
- if ( ! supportsTemplateMode && availableTemplates[ templateSlug ] ) {
89
- return availableTemplates[ templateSlug ];
90
- }
91
- const template =
92
- select( coreStore ).canUser( 'create', 'templates' ) &&
93
- select( editPostStore ).getEditedPostTemplate();
94
- return (
95
- template?.title ||
96
- template?.slug ||
97
- availableTemplates?.[ templateSlug ]
98
- );
99
- }, [] );
100
-
101
- return (
102
- <Button
103
- className="edit-post-post-template__toggle"
104
- variant="tertiary"
105
- aria-expanded={ isOpen }
106
- aria-label={
107
- templateTitle
108
- ? sprintf(
109
- // translators: %s: Name of the currently selected template.
110
- __( 'Select template: %s' ),
111
- templateTitle
112
- )
113
- : __( 'Select template' )
114
- }
115
- onClick={ onClick }
116
- >
117
- { templateTitle ?? __( 'Default template' ) }
118
- </Button>
119
- );
120
- }
@@ -1,22 +0,0 @@
1
- .components-button.edit-post-post-template__toggle {
2
- display: inline-block;
3
- width: 100%;
4
- overflow: hidden;
5
- text-overflow: ellipsis;
6
- }
7
-
8
- .edit-post-post-template__dialog {
9
- z-index: z-index(".edit-post-post-template__dialog");
10
- }
11
-
12
- .edit-post-post-template__form {
13
- // sidebar width - popover padding - form margin
14
- min-width: $sidebar-width - $grid-unit-20 - $grid-unit-20;
15
- margin: $grid-unit-10;
16
- }
17
-
18
- .edit-post-post-template__create-form {
19
- @include break-medium() {
20
- width: $grid-unit * 40;
21
- }
22
- }