@wordpress/edit-site 6.3.0 → 6.4.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 (221) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/add-new-pattern/index.js +8 -2
  3. package/build/components/add-new-pattern/index.js.map +1 -1
  4. package/build/components/add-new-template/index.js +3 -1
  5. package/build/components/add-new-template/index.js.map +1 -1
  6. package/build/components/block-editor/use-site-editor-settings.js +1 -82
  7. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  8. package/build/components/global-styles/block-preview-panel.js +14 -5
  9. package/build/components/global-styles/block-preview-panel.js.map +1 -1
  10. package/build/components/global-styles/font-families.js +42 -23
  11. package/build/components/global-styles/font-families.js.map +1 -1
  12. package/build/components/global-styles/font-library-modal/index.js +4 -4
  13. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  14. package/build/components/global-styles/font-library-modal/installed-fonts.js +58 -10
  15. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  16. package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +39 -0
  17. package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
  18. package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +39 -0
  19. package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
  20. package/build/components/global-styles/font-sizes/font-size-preview.js +44 -0
  21. package/build/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
  22. package/build/components/global-styles/font-sizes/font-size.js +213 -0
  23. package/build/components/global-styles/font-sizes/font-size.js.map +1 -0
  24. package/build/components/global-styles/font-sizes/font-sizes-count.js +50 -0
  25. package/build/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
  26. package/build/components/global-styles/font-sizes/font-sizes.js +163 -0
  27. package/build/components/global-styles/font-sizes/font-sizes.js.map +1 -0
  28. package/build/components/global-styles/font-sizes/rename-font-size-dialog.js +67 -0
  29. package/build/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
  30. package/build/components/global-styles/screen-block.js +10 -8
  31. package/build/components/global-styles/screen-block.js.map +1 -1
  32. package/build/components/global-styles/screen-style-variations.js +2 -2
  33. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  34. package/build/components/global-styles/screen-typography.js +3 -2
  35. package/build/components/global-styles/screen-typography.js.map +1 -1
  36. package/build/components/global-styles/size-control/index.js +85 -0
  37. package/build/components/global-styles/size-control/index.js.map +1 -0
  38. package/build/components/global-styles/style-variations-container.js +3 -0
  39. package/build/components/global-styles/style-variations-container.js.map +1 -1
  40. package/build/components/global-styles/ui.js +8 -0
  41. package/build/components/global-styles/ui.js.map +1 -1
  42. package/build/components/global-styles/variations/variations-color.js.map +1 -1
  43. package/build/components/global-styles/variations/variations-typography.js +1 -1
  44. package/build/components/global-styles/variations/variations-typography.js.map +1 -1
  45. package/build/components/layout/index.js +6 -0
  46. package/build/components/layout/index.js.map +1 -1
  47. package/build/components/layout/router.js +14 -6
  48. package/build/components/layout/router.js.map +1 -1
  49. package/build/components/page-patterns/header.js +1 -1
  50. package/build/components/page-patterns/header.js.map +1 -1
  51. package/build/components/page-patterns/index.js +23 -11
  52. package/build/components/page-patterns/index.js.map +1 -1
  53. package/build/components/page-templates/index.js +41 -34
  54. package/build/components/page-templates/index.js.map +1 -1
  55. package/build/components/post-edit/index.js +105 -0
  56. package/build/components/post-edit/index.js.map +1 -0
  57. package/build/components/post-fields/index.js +314 -0
  58. package/build/components/post-fields/index.js.map +1 -0
  59. package/build/components/post-list/index.js +281 -0
  60. package/build/components/post-list/index.js.map +1 -0
  61. package/build/components/posts-app/router.js +3 -3
  62. package/build/components/posts-app/router.js.map +1 -1
  63. package/build/components/sidebar-dataviews/default-views.js +22 -10
  64. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  65. package/build/components/sidebar-dataviews/index.js +40 -1
  66. package/build/components/sidebar-dataviews/index.js.map +1 -1
  67. package/build/components/sidebar-navigation-screen-global-styles/content.js +64 -0
  68. package/build/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
  69. package/build/components/sidebar-navigation-screen-global-styles/index.js +2 -47
  70. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  71. package/build/hooks/push-changes-to-global-styles/index.js +1 -1
  72. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  73. package/build/index.js +5 -1
  74. package/build/index.js.map +1 -1
  75. package/build/store/selectors.js +34 -6
  76. package/build/store/selectors.js.map +1 -1
  77. package/build/utils/get-filtered-template-parts.js +64 -0
  78. package/build/utils/get-filtered-template-parts.js.map +1 -0
  79. package/build-module/components/add-new-pattern/index.js +8 -2
  80. package/build-module/components/add-new-pattern/index.js.map +1 -1
  81. package/build-module/components/add-new-template/index.js +3 -1
  82. package/build-module/components/add-new-template/index.js.map +1 -1
  83. package/build-module/components/block-editor/use-site-editor-settings.js +1 -82
  84. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  85. package/build-module/components/global-styles/block-preview-panel.js +14 -5
  86. package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
  87. package/build-module/components/global-styles/font-families.js +44 -25
  88. package/build-module/components/global-styles/font-families.js.map +1 -1
  89. package/build-module/components/global-styles/font-library-modal/index.js +4 -4
  90. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  91. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +61 -13
  92. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  93. package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +32 -0
  94. package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
  95. package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +32 -0
  96. package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
  97. package/build-module/components/global-styles/font-sizes/font-size-preview.js +37 -0
  98. package/build-module/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
  99. package/build-module/components/global-styles/font-sizes/font-size.js +207 -0
  100. package/build-module/components/global-styles/font-sizes/font-size.js.map +1 -0
  101. package/build-module/components/global-styles/font-sizes/font-sizes-count.js +43 -0
  102. package/build-module/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
  103. package/build-module/components/global-styles/font-sizes/font-sizes.js +157 -0
  104. package/build-module/components/global-styles/font-sizes/font-sizes.js.map +1 -0
  105. package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js +61 -0
  106. package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
  107. package/build-module/components/global-styles/screen-block.js +10 -8
  108. package/build-module/components/global-styles/screen-block.js.map +1 -1
  109. package/build-module/components/global-styles/screen-style-variations.js +2 -2
  110. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  111. package/build-module/components/global-styles/screen-typography.js +3 -2
  112. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  113. package/build-module/components/global-styles/size-control/index.js +79 -0
  114. package/build-module/components/global-styles/size-control/index.js.map +1 -0
  115. package/build-module/components/global-styles/style-variations-container.js +3 -0
  116. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  117. package/build-module/components/global-styles/ui.js +8 -0
  118. package/build-module/components/global-styles/ui.js.map +1 -1
  119. package/build-module/components/global-styles/variations/variations-color.js +1 -1
  120. package/build-module/components/global-styles/variations/variations-color.js.map +1 -1
  121. package/build-module/components/global-styles/variations/variations-typography.js +1 -2
  122. package/build-module/components/global-styles/variations/variations-typography.js.map +1 -1
  123. package/build-module/components/layout/index.js +6 -0
  124. package/build-module/components/layout/index.js.map +1 -1
  125. package/build-module/components/layout/router.js +14 -6
  126. package/build-module/components/layout/router.js.map +1 -1
  127. package/build-module/components/page-patterns/header.js +1 -1
  128. package/build-module/components/page-patterns/header.js.map +1 -1
  129. package/build-module/components/page-patterns/index.js +23 -11
  130. package/build-module/components/page-patterns/index.js.map +1 -1
  131. package/build-module/components/page-templates/index.js +43 -37
  132. package/build-module/components/page-templates/index.js.map +1 -1
  133. package/build-module/components/post-edit/index.js +98 -0
  134. package/build-module/components/post-edit/index.js.map +1 -0
  135. package/build-module/components/post-fields/index.js +306 -0
  136. package/build-module/components/post-fields/index.js.map +1 -0
  137. package/build-module/components/post-list/index.js +275 -0
  138. package/build-module/components/post-list/index.js.map +1 -0
  139. package/build-module/components/posts-app/router.js +3 -3
  140. package/build-module/components/posts-app/router.js.map +1 -1
  141. package/build-module/components/sidebar-dataviews/default-views.js +21 -9
  142. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  143. package/build-module/components/sidebar-dataviews/index.js +42 -3
  144. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  145. package/build-module/components/sidebar-navigation-screen-global-styles/content.js +57 -0
  146. package/build-module/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
  147. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +2 -47
  148. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  149. package/build-module/hooks/push-changes-to-global-styles/index.js +1 -1
  150. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  151. package/build-module/index.js +5 -1
  152. package/build-module/index.js.map +1 -1
  153. package/build-module/store/selectors.js +35 -7
  154. package/build-module/store/selectors.js.map +1 -1
  155. package/build-module/utils/get-filtered-template-parts.js +57 -0
  156. package/build-module/utils/get-filtered-template-parts.js.map +1 -0
  157. package/build-style/posts-rtl.css +581 -503
  158. package/build-style/posts.css +581 -503
  159. package/build-style/style-rtl.css +621 -519
  160. package/build-style/style.css +621 -519
  161. package/package.json +41 -41
  162. package/src/components/add-new-pattern/index.js +8 -2
  163. package/src/components/add-new-template/index.js +4 -1
  164. package/src/components/add-new-template/style.scss +4 -6
  165. package/src/components/block-editor/use-site-editor-settings.js +15 -111
  166. package/src/components/global-styles/block-preview-panel.js +22 -9
  167. package/src/components/global-styles/font-families.js +66 -31
  168. package/src/components/global-styles/font-library-modal/index.js +4 -2
  169. package/src/components/global-styles/font-library-modal/installed-fonts.js +92 -11
  170. package/src/components/global-styles/font-library-modal/style.scss +9 -0
  171. package/src/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +43 -0
  172. package/src/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +37 -0
  173. package/src/components/global-styles/font-sizes/font-size-preview.js +43 -0
  174. package/src/components/global-styles/font-sizes/font-size.js +250 -0
  175. package/src/components/global-styles/font-sizes/font-sizes-count.js +40 -0
  176. package/src/components/global-styles/font-sizes/font-sizes.js +263 -0
  177. package/src/components/global-styles/font-sizes/rename-font-size-dialog.js +70 -0
  178. package/src/components/global-styles/screen-block.js +12 -14
  179. package/src/components/global-styles/screen-style-variations.js +2 -2
  180. package/src/components/global-styles/screen-typography.js +3 -2
  181. package/src/components/global-styles/size-control/index.js +86 -0
  182. package/src/components/global-styles/style-variations-container.js +4 -0
  183. package/src/components/global-styles/style.scss +13 -3
  184. package/src/components/global-styles/ui.js +10 -0
  185. package/src/components/global-styles/variations/variations-color.js +1 -1
  186. package/src/components/global-styles/variations/variations-typography.js +1 -2
  187. package/src/components/layout/index.js +11 -0
  188. package/src/components/layout/router.js +13 -5
  189. package/src/components/layout/style.scss +26 -8
  190. package/src/components/page-patterns/header.js +1 -1
  191. package/src/components/page-patterns/index.js +15 -8
  192. package/src/components/page-templates/index.js +51 -46
  193. package/src/components/page-templates/style.scss +5 -3
  194. package/src/components/post-edit/index.js +96 -0
  195. package/src/components/post-edit/style.scss +9 -0
  196. package/src/components/post-fields/index.js +345 -0
  197. package/src/components/post-list/index.js +326 -0
  198. package/src/components/{posts-app → post-list}/style.scss +12 -9
  199. package/src/components/posts-app/router.js +3 -3
  200. package/src/components/sidebar-dataviews/default-views.js +21 -9
  201. package/src/components/sidebar-dataviews/index.js +36 -1
  202. package/src/components/sidebar-navigation-screen-global-styles/content.js +55 -0
  203. package/src/components/sidebar-navigation-screen-global-styles/index.js +1 -55
  204. package/src/hooks/push-changes-to-global-styles/index.js +1 -1
  205. package/src/index.js +7 -1
  206. package/src/posts.scss +1 -1
  207. package/src/store/selectors.js +53 -14
  208. package/src/store/test/selectors.js +1 -26
  209. package/src/style.scss +2 -1
  210. package/src/utils/get-filtered-template-parts.js +61 -0
  211. package/src/utils/test/get-filtered-template-parts.js +127 -0
  212. package/build/components/global-styles/screen-background.js +0 -36
  213. package/build/components/global-styles/screen-background.js.map +0 -1
  214. package/build/components/posts-app/posts-list.js +0 -568
  215. package/build/components/posts-app/posts-list.js.map +0 -1
  216. package/build-module/components/global-styles/screen-background.js +0 -30
  217. package/build-module/components/global-styles/screen-background.js.map +0 -1
  218. package/build-module/components/posts-app/posts-list.js +0 -560
  219. package/build-module/components/posts-app/posts-list.js.map +0 -1
  220. package/src/components/global-styles/screen-background.js +0 -29
  221. package/src/components/posts-app/posts-list.js +0 -651
@@ -1,30 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import BackgroundPanel from './background-panel';
11
- import ScreenHeader from './header';
12
- import { unlock } from '../../lock-unlock';
13
- import { jsx as _jsx } from "react/jsx-runtime";
14
- import { Fragment as _Fragment } from "react/jsx-runtime";
15
- import { jsxs as _jsxs } from "react/jsx-runtime";
16
- const {
17
- useHasBackgroundPanel,
18
- useGlobalSetting
19
- } = unlock(blockEditorPrivateApis);
20
- function ScreenBackground() {
21
- const [settings] = useGlobalSetting('');
22
- const hasBackgroundPanel = useHasBackgroundPanel(settings);
23
- return /*#__PURE__*/_jsxs(_Fragment, {
24
- children: [/*#__PURE__*/_jsx(ScreenHeader, {
25
- title: __('Background image')
26
- }), hasBackgroundPanel && /*#__PURE__*/_jsx(BackgroundPanel, {})]
27
- });
28
- }
29
- export default ScreenBackground;
30
- //# sourceMappingURL=screen-background.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["__","privateApis","blockEditorPrivateApis","BackgroundPanel","ScreenHeader","unlock","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","useHasBackgroundPanel","useGlobalSetting","ScreenBackground","settings","hasBackgroundPanel","children","title"],"sources":["@wordpress/edit-site/src/components/global-styles/screen-background.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport BackgroundPanel from './background-panel';\nimport ScreenHeader from './header';\nimport { unlock } from '../../lock-unlock';\n\nconst { useHasBackgroundPanel, useGlobalSetting } = unlock(\n\tblockEditorPrivateApis\n);\n\nfunction ScreenBackground() {\n\tconst [ settings ] = useGlobalSetting( '' );\n\tconst hasBackgroundPanel = useHasBackgroundPanel( settings );\n\treturn (\n\t\t<>\n\t\t\t<ScreenHeader title={ __( 'Background image' ) } />\n\t\t\t{ hasBackgroundPanel && <BackgroundPanel /> }\n\t\t</>\n\t);\n}\n\nexport default ScreenBackground;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AACpC,SAASC,WAAW,IAAIC,sBAAsB,QAAQ,yBAAyB;;AAE/E;AACA;AACA;AACA,OAAOC,eAAe,MAAM,oBAAoB;AAChD,OAAOC,YAAY,MAAM,UAAU;AACnC,SAASC,MAAM,QAAQ,mBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAE3C,MAAM;EAAEC,qBAAqB;EAAEC;AAAiB,CAAC,GAAGR,MAAM,CACzDH,sBACD,CAAC;AAED,SAASY,gBAAgBA,CAAA,EAAG;EAC3B,MAAM,CAAEC,QAAQ,CAAE,GAAGF,gBAAgB,CAAE,EAAG,CAAC;EAC3C,MAAMG,kBAAkB,GAAGJ,qBAAqB,CAAEG,QAAS,CAAC;EAC5D,oBACCJ,KAAA,CAAAF,SAAA;IAAAQ,QAAA,gBACCV,IAAA,CAACH,YAAY;MAACc,KAAK,EAAGlB,EAAE,CAAE,kBAAmB;IAAG,CAAE,CAAC,EACjDgB,kBAAkB,iBAAIT,IAAA,CAACJ,eAAe,IAAE,CAAC;EAAA,CAC1C,CAAC;AAEL;AAEA,eAAeW,gBAAgB","ignoreList":[]}
@@ -1,560 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { Button, __experimentalHStack as HStack, Icon } from '@wordpress/components';
10
- import { __, sprintf } from '@wordpress/i18n';
11
- import { useEntityRecords, store as coreStore } from '@wordpress/core-data';
12
- import { decodeEntities } from '@wordpress/html-entities';
13
- import { createInterpolateElement, useState, useMemo, useCallback, useEffect } from '@wordpress/element';
14
- import { dateI18n, getDate, getSettings } from '@wordpress/date';
15
- import { privateApis as routerPrivateApis } from '@wordpress/router';
16
- import { useSelect, useDispatch } from '@wordpress/data';
17
- import { DataViews } from '@wordpress/dataviews';
18
- import { privateApis as editorPrivateApis } from '@wordpress/editor';
19
- import { trash, drafts, published, scheduled, pending, notAllowed, commentAuthorAvatar as authorIcon } from '@wordpress/icons';
20
-
21
- /**
22
- * Internal dependencies
23
- */
24
- import Page from '../page';
25
- import { default as Link, useLink } from '../routes/link';
26
- import { useDefaultViews, DEFAULT_CONFIG_PER_VIEW_TYPE } from '../sidebar-dataviews/default-views';
27
- import { LAYOUT_GRID, LAYOUT_TABLE, LAYOUT_LIST, OPERATOR_IS_ANY, OPERATOR_IS_NONE } from '../../utils/constants';
28
- import AddNewPostModal from '../add-new-post';
29
- import Media from '../media';
30
- import { unlock } from '../../lock-unlock';
31
- import { useEditPostAction } from '../dataviews-actions';
32
- import { usePrevious } from '@wordpress/compose';
33
- import { jsx as _jsx } from "react/jsx-runtime";
34
- import { jsxs as _jsxs } from "react/jsx-runtime";
35
- import { Fragment as _Fragment } from "react/jsx-runtime";
36
- const {
37
- usePostActions
38
- } = unlock(editorPrivateApis);
39
- const {
40
- useLocation,
41
- useHistory
42
- } = unlock(routerPrivateApis);
43
- const EMPTY_ARRAY = [];
44
- const getFormattedDate = dateToDisplay => dateI18n(getSettings().formats.datetimeAbbreviated, getDate(dateToDisplay));
45
- function useView(postType) {
46
- const {
47
- params: {
48
- activeView = 'all',
49
- isCustom = 'false',
50
- layout
51
- }
52
- } = useLocation();
53
- const history = useHistory();
54
- const DEFAULT_VIEWS = useDefaultViews({
55
- postType
56
- });
57
- const selectedDefaultView = useMemo(() => {
58
- const defaultView = isCustom === 'false' && DEFAULT_VIEWS[postType].find(({
59
- slug
60
- }) => slug === activeView)?.view;
61
- if (isCustom === 'false' && layout) {
62
- return {
63
- ...defaultView,
64
- type: layout,
65
- layout: {
66
- ...(DEFAULT_CONFIG_PER_VIEW_TYPE[layout] || {})
67
- }
68
- };
69
- }
70
- return defaultView;
71
- }, [isCustom, activeView, layout, postType, DEFAULT_VIEWS]);
72
- const [view, setView] = useState(selectedDefaultView);
73
- useEffect(() => {
74
- if (selectedDefaultView) {
75
- setView(selectedDefaultView);
76
- }
77
- }, [selectedDefaultView]);
78
- const editedViewRecord = useSelect(select => {
79
- if (isCustom !== 'true') {
80
- return;
81
- }
82
- const {
83
- getEditedEntityRecord
84
- } = select(coreStore);
85
- const dataviewRecord = getEditedEntityRecord('postType', 'wp_dataviews', Number(activeView));
86
- return dataviewRecord;
87
- }, [activeView, isCustom]);
88
- const {
89
- editEntityRecord
90
- } = useDispatch(coreStore);
91
- const customView = useMemo(() => {
92
- const storedView = editedViewRecord?.content && JSON.parse(editedViewRecord?.content);
93
- if (!storedView) {
94
- return storedView;
95
- }
96
- return {
97
- ...storedView,
98
- layout: {
99
- ...(DEFAULT_CONFIG_PER_VIEW_TYPE[storedView?.type] || {})
100
- }
101
- };
102
- }, [editedViewRecord?.content]);
103
- const setCustomView = useCallback(viewToSet => {
104
- editEntityRecord('postType', 'wp_dataviews', editedViewRecord?.id, {
105
- content: JSON.stringify(viewToSet)
106
- });
107
- }, [editEntityRecord, editedViewRecord?.id]);
108
- const setDefaultViewAndUpdateUrl = useCallback(viewToSet => {
109
- if (viewToSet.type !== view?.type) {
110
- const {
111
- params
112
- } = history.getLocationWithParams();
113
- history.push({
114
- ...params,
115
- layout: viewToSet.type
116
- });
117
- }
118
- setView(viewToSet);
119
- }, [history, view?.type]);
120
- if (isCustom === 'false') {
121
- return [view, setDefaultViewAndUpdateUrl];
122
- } else if (isCustom === 'true' && customView) {
123
- return [customView, setCustomView];
124
- }
125
- // Loading state where no the view was not found on custom views or default views.
126
- return [DEFAULT_VIEWS[postType][0].view, setDefaultViewAndUpdateUrl];
127
- }
128
-
129
- // See https://github.com/WordPress/gutenberg/issues/55886
130
- // We do not support custom statutes at the moment.
131
- const STATUSES = [{
132
- value: 'draft',
133
- label: __('Draft'),
134
- icon: drafts
135
- }, {
136
- value: 'future',
137
- label: __('Scheduled'),
138
- icon: scheduled
139
- }, {
140
- value: 'pending',
141
- label: __('Pending Review'),
142
- icon: pending
143
- }, {
144
- value: 'private',
145
- label: __('Private'),
146
- icon: notAllowed
147
- }, {
148
- value: 'publish',
149
- label: __('Published'),
150
- icon: published
151
- }, {
152
- value: 'trash',
153
- label: __('Trash'),
154
- icon: trash
155
- }];
156
- const DEFAULT_STATUSES = 'draft,future,pending,private,publish'; // All but 'trash'.
157
-
158
- function FeaturedImage({
159
- item,
160
- viewType
161
- }) {
162
- const isDisabled = item.status === 'trash';
163
- const {
164
- onClick
165
- } = useLink({
166
- postId: item.id,
167
- postType: item.type,
168
- canvas: 'edit'
169
- });
170
- const hasMedia = !!item.featured_media;
171
- const size = viewType === LAYOUT_GRID ? ['large', 'full', 'medium', 'thumbnail'] : ['thumbnail', 'medium', 'large', 'full'];
172
- const media = hasMedia ? /*#__PURE__*/_jsx(Media, {
173
- className: "posts-list-page__featured-image",
174
- id: item.featured_media,
175
- size: size
176
- }) : null;
177
- const renderButton = viewType !== LAYOUT_LIST && !isDisabled;
178
- return /*#__PURE__*/_jsx("div", {
179
- className: `posts-list-page__featured-image-wrapper is-layout-${viewType}`,
180
- children: renderButton ? /*#__PURE__*/_jsx("button", {
181
- className: "posts-list-page-preview-field__button",
182
- type: "button",
183
- onClick: onClick,
184
- "aria-label": item.title?.rendered || __('(no title)'),
185
- children: media
186
- }) : media
187
- });
188
- }
189
- function getItemId(item) {
190
- return item.id.toString();
191
- }
192
- function PostStatusField({
193
- item
194
- }) {
195
- const status = STATUSES.find(({
196
- value
197
- }) => value === item.status);
198
- const label = status?.label || item.status;
199
- const icon = status?.icon;
200
- return /*#__PURE__*/_jsxs(HStack, {
201
- alignment: "left",
202
- spacing: 1,
203
- children: [icon && /*#__PURE__*/_jsx("div", {
204
- className: "posts-list-page-post-author-field__icon-container",
205
- children: /*#__PURE__*/_jsx(Icon, {
206
- icon: icon
207
- })
208
- }), /*#__PURE__*/_jsx("span", {
209
- children: label
210
- })]
211
- });
212
- }
213
- function PostAuthorField({
214
- item,
215
- viewType
216
- }) {
217
- const {
218
- text,
219
- icon,
220
- imageUrl
221
- } = useSelect(select => {
222
- const {
223
- getUser
224
- } = select(coreStore);
225
- const user = getUser(item.author);
226
- return {
227
- icon: authorIcon,
228
- imageUrl: user?.avatar_urls?.[48],
229
- text: user?.name
230
- };
231
- }, [item]);
232
- const withAuthorImage = viewType !== LAYOUT_LIST && imageUrl;
233
- const withAuthorIcon = viewType !== LAYOUT_LIST && !imageUrl;
234
- const [isImageLoaded, setIsImageLoaded] = useState(false);
235
- return /*#__PURE__*/_jsxs(HStack, {
236
- alignment: "left",
237
- spacing: 1,
238
- children: [withAuthorImage && /*#__PURE__*/_jsx("div", {
239
- className: clsx('page-templates-author-field__avatar', {
240
- 'is-loaded': isImageLoaded
241
- }),
242
- children: /*#__PURE__*/_jsx("img", {
243
- onLoad: () => setIsImageLoaded(true),
244
- alt: __('Author avatar'),
245
- src: imageUrl
246
- })
247
- }), withAuthorIcon && /*#__PURE__*/_jsx("div", {
248
- className: "page-templates-author-field__icon",
249
- children: /*#__PURE__*/_jsx(Icon, {
250
- icon: icon
251
- })
252
- }), /*#__PURE__*/_jsx("span", {
253
- className: "page-templates-author-field__name",
254
- children: text
255
- })]
256
- });
257
- }
258
- export default function PostsList({
259
- postType
260
- }) {
261
- var _records$map, _usePrevious;
262
- const [view, setView] = useView(postType);
263
- const history = useHistory();
264
- const {
265
- params: {
266
- postId
267
- }
268
- } = useLocation();
269
- const [selection, setSelection] = useState([postId]);
270
- const onSelectionChange = useCallback(items => {
271
- var _params$isCustom;
272
- const {
273
- params
274
- } = history.getLocationWithParams();
275
- if (((_params$isCustom = params.isCustom) !== null && _params$isCustom !== void 0 ? _params$isCustom : 'false') === 'false' && view?.type === LAYOUT_LIST) {
276
- history.push({
277
- ...params,
278
- postId: items.length === 1 ? items[0].id : undefined
279
- });
280
- }
281
- }, [history, view?.type]);
282
- const queryArgs = useMemo(() => {
283
- const filters = {};
284
- view.filters.forEach(filter => {
285
- if (filter.field === 'status' && filter.operator === OPERATOR_IS_ANY) {
286
- filters.status = filter.value;
287
- }
288
- if (filter.field === 'author' && filter.operator === OPERATOR_IS_ANY) {
289
- filters.author = filter.value;
290
- } else if (filter.field === 'author' && filter.operator === OPERATOR_IS_NONE) {
291
- filters.author_exclude = filter.value;
292
- }
293
- });
294
- // We want to provide a different default item for the status filter
295
- // than the REST API provides.
296
- if (!filters.status || filters.status === '') {
297
- filters.status = DEFAULT_STATUSES;
298
- }
299
- return {
300
- per_page: view.perPage,
301
- page: view.page,
302
- _embed: 'author',
303
- order: view.sort?.direction,
304
- orderby: view.sort?.field,
305
- search: view.search,
306
- ...filters
307
- };
308
- }, [view]);
309
- const {
310
- records,
311
- isResolving: isLoadingMainEntities,
312
- totalItems,
313
- totalPages
314
- } = useEntityRecords('postType', postType, queryArgs);
315
- const ids = (_records$map = records?.map(record => getItemId(record))) !== null && _records$map !== void 0 ? _records$map : [];
316
- const prevIds = (_usePrevious = usePrevious(ids)) !== null && _usePrevious !== void 0 ? _usePrevious : [];
317
- const deletedIds = prevIds.filter(id => !ids.includes(id));
318
- const postIdWasDeleted = deletedIds.includes(postId);
319
- useEffect(() => {
320
- if (postIdWasDeleted) {
321
- history.push({
322
- ...history.getLocationWithParams().params,
323
- postId: undefined
324
- });
325
- }
326
- }, [postIdWasDeleted, history]);
327
- const {
328
- records: authors,
329
- isResolving: isLoadingAuthors
330
- } = useEntityRecords('root', 'user', {
331
- per_page: -1
332
- });
333
- const paginationInfo = useMemo(() => ({
334
- totalItems,
335
- totalPages
336
- }), [totalItems, totalPages]);
337
- const {
338
- frontPageId,
339
- postsPageId,
340
- labels,
341
- canCreateRecord
342
- } = useSelect(select => {
343
- const {
344
- getEntityRecord,
345
- getPostType,
346
- canUser
347
- } = select(coreStore);
348
- const siteSettings = getEntityRecord('root', 'site');
349
- const postTypeObject = getPostType(postType);
350
- return {
351
- frontPageId: siteSettings?.page_on_front,
352
- postsPageId: siteSettings?.page_for_posts,
353
- labels: getPostType(postType)?.labels,
354
- canCreateRecord: canUser('create', postTypeObject?.rest_base || 'posts')
355
- };
356
- }, [postType]);
357
-
358
- // TODO: this should be abstracted into a hook similar to `usePostActions`.
359
- const fields = useMemo(() => [{
360
- id: 'featured-image',
361
- header: __('Featured Image'),
362
- getValue: ({
363
- item
364
- }) => item.featured_media,
365
- render: ({
366
- item
367
- }) => /*#__PURE__*/_jsx(FeaturedImage, {
368
- item: item,
369
- viewType: view.type
370
- }),
371
- enableSorting: false,
372
- width: '1%'
373
- }, {
374
- header: __('Title'),
375
- id: 'title',
376
- getValue: ({
377
- item
378
- }) => item.title?.rendered,
379
- render: ({
380
- item
381
- }) => {
382
- const addLink = [LAYOUT_TABLE, LAYOUT_GRID].includes(view.type) && item.status !== 'trash';
383
- const title = addLink ? /*#__PURE__*/_jsx(Link, {
384
- params: {
385
- postId: item.id,
386
- postType: item.type,
387
- canvas: 'edit'
388
- },
389
- children: decodeEntities(item.title?.rendered) || __('(no title)')
390
- }) : /*#__PURE__*/_jsx("span", {
391
- children: decodeEntities(item.title?.rendered) || __('(no title)')
392
- });
393
- let suffix = '';
394
- if (item.id === frontPageId) {
395
- suffix = /*#__PURE__*/_jsx("span", {
396
- className: "posts-list-page-title-badge",
397
- children: __('Front Page')
398
- });
399
- } else if (item.id === postsPageId) {
400
- suffix = /*#__PURE__*/_jsx("span", {
401
- className: "posts-list-page-title-badge",
402
- children: __('Posts Page')
403
- });
404
- }
405
- return /*#__PURE__*/_jsxs(HStack, {
406
- className: "posts-list-page-title",
407
- alignment: "center",
408
- justify: "flex-start",
409
- children: [title, suffix]
410
- });
411
- },
412
- maxWidth: 300,
413
- enableHiding: false
414
- }, {
415
- header: __('Author'),
416
- id: 'author',
417
- getValue: ({
418
- item
419
- }) => item._embedded?.author[0]?.name,
420
- elements: authors?.map(({
421
- id,
422
- name
423
- }) => ({
424
- value: id,
425
- label: name
426
- })) || [],
427
- render: ({
428
- item
429
- }) => {
430
- return /*#__PURE__*/_jsx(PostAuthorField, {
431
- viewType: view.type,
432
- item: item
433
- });
434
- }
435
- }, {
436
- header: __('Status'),
437
- id: 'status',
438
- getValue: ({
439
- item
440
- }) => {
441
- var _STATUSES$find$label;
442
- return (_STATUSES$find$label = STATUSES.find(({
443
- value
444
- }) => value === item.status)?.label) !== null && _STATUSES$find$label !== void 0 ? _STATUSES$find$label : item.status;
445
- },
446
- elements: STATUSES,
447
- render: PostStatusField,
448
- enableSorting: false,
449
- filterBy: {
450
- operators: [OPERATOR_IS_ANY]
451
- }
452
- }, {
453
- header: __('Date'),
454
- id: 'date',
455
- render: ({
456
- item
457
- }) => {
458
- const isDraftOrPrivate = ['draft', 'private'].includes(item.status);
459
- if (isDraftOrPrivate) {
460
- return createInterpolateElement(sprintf( /* translators: %s: page creation date */
461
- __('<span>Modified: <time>%s</time></span>'), getFormattedDate(item.date)), {
462
- span: /*#__PURE__*/_jsx("span", {}),
463
- time: /*#__PURE__*/_jsx("time", {})
464
- });
465
- }
466
- const isScheduled = item.status === 'future';
467
- if (isScheduled) {
468
- return createInterpolateElement(sprintf( /* translators: %s: page creation date */
469
- __('<span>Scheduled: <time>%s</time></span>'), getFormattedDate(item.date)), {
470
- span: /*#__PURE__*/_jsx("span", {}),
471
- time: /*#__PURE__*/_jsx("time", {})
472
- });
473
- }
474
-
475
- // Pending & Published posts show the modified date if it's newer.
476
- const dateToDisplay = getDate(item.modified) > getDate(item.date) ? item.modified : item.date;
477
- const isPending = item.status === 'pending';
478
- if (isPending) {
479
- return createInterpolateElement(sprintf( /* translators: %s: the newest of created or modified date for the page */
480
- __('<span>Modified: <time>%s</time></span>'), getFormattedDate(dateToDisplay)), {
481
- span: /*#__PURE__*/_jsx("span", {}),
482
- time: /*#__PURE__*/_jsx("time", {})
483
- });
484
- }
485
- const isPublished = item.status === 'publish';
486
- if (isPublished) {
487
- return createInterpolateElement(sprintf( /* translators: %s: the newest of created or modified date for the page */
488
- __('<span>Published: <time>%s</time></span>'), getFormattedDate(dateToDisplay)), {
489
- span: /*#__PURE__*/_jsx("span", {}),
490
- time: /*#__PURE__*/_jsx("time", {})
491
- });
492
- }
493
-
494
- // Unknow status.
495
- return /*#__PURE__*/_jsx("time", {
496
- children: getFormattedDate(item.date)
497
- });
498
- }
499
- }], [authors, view.type, frontPageId, postsPageId]);
500
- const postTypeActions = usePostActions({
501
- postType,
502
- context: 'list'
503
- });
504
- const editAction = useEditPostAction();
505
- const actions = useMemo(() => [editAction, ...postTypeActions], [postTypeActions, editAction]);
506
- const onChangeView = useCallback(newView => {
507
- if (newView.type !== view.type) {
508
- newView = {
509
- ...newView,
510
- layout: {
511
- ...DEFAULT_CONFIG_PER_VIEW_TYPE[newView.type]
512
- }
513
- };
514
- }
515
- setView(newView);
516
- }, [view.type, setView]);
517
- const [showAddPostModal, setShowAddPostModal] = useState(false);
518
- const openModal = () => setShowAddPostModal(true);
519
- const closeModal = () => setShowAddPostModal(false);
520
- const handleNewPage = ({
521
- type,
522
- id
523
- }) => {
524
- history.push({
525
- postId: id,
526
- postType: type,
527
- canvas: 'edit'
528
- });
529
- closeModal();
530
- };
531
- return /*#__PURE__*/_jsx(Page, {
532
- title: labels?.name,
533
- actions: labels?.add_new_item && canCreateRecord && /*#__PURE__*/_jsxs(_Fragment, {
534
- children: [/*#__PURE__*/_jsx(Button, {
535
- variant: "primary",
536
- onClick: openModal,
537
- __next40pxDefaultSize: true,
538
- children: labels.add_new_item
539
- }), showAddPostModal && /*#__PURE__*/_jsx(AddNewPostModal, {
540
- postType: postType,
541
- onSave: handleNewPage,
542
- onClose: closeModal
543
- })]
544
- }),
545
- children: /*#__PURE__*/_jsx(DataViews, {
546
- paginationInfo: paginationInfo,
547
- fields: fields,
548
- actions: actions,
549
- data: records || EMPTY_ARRAY,
550
- isLoading: isLoadingMainEntities || isLoadingAuthors,
551
- view: view,
552
- onChangeView: onChangeView,
553
- selection: selection,
554
- setSelection: setSelection,
555
- onSelectionChange: onSelectionChange,
556
- getItemId: getItemId
557
- })
558
- });
559
- }
560
- //# sourceMappingURL=posts-list.js.map