@wordpress/edit-site 5.20.1 → 5.21.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 (231) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/actions/trash-post.js +48 -0
  3. package/build/components/actions/trash-post.js.map +1 -0
  4. package/build/components/add-new-template/add-custom-template-modal-content.js +17 -13
  5. package/build/components/add-new-template/add-custom-template-modal-content.js.map +1 -1
  6. package/build/components/block-editor/resize-handle.js +2 -1
  7. package/build/components/block-editor/resize-handle.js.map +1 -1
  8. package/build/components/create-template-part-modal/index.js +10 -6
  9. package/build/components/create-template-part-modal/index.js.map +1 -1
  10. package/build/components/dataviews/dataviews.js +41 -32
  11. package/build/components/dataviews/dataviews.js.map +1 -1
  12. package/build/components/dataviews/field-actions.js +30 -0
  13. package/build/components/dataviews/field-actions.js.map +1 -0
  14. package/build/components/dataviews/filters.js +61 -0
  15. package/build/components/dataviews/filters.js.map +1 -0
  16. package/build/components/dataviews/in-filter.js +51 -0
  17. package/build/components/dataviews/in-filter.js.map +1 -0
  18. package/build/components/dataviews/index.js +0 -7
  19. package/build/components/dataviews/index.js.map +1 -1
  20. package/build/components/dataviews/pagination.js +75 -27
  21. package/build/components/dataviews/pagination.js.map +1 -1
  22. package/build/components/dataviews/text-filter.js +18 -12
  23. package/build/components/dataviews/text-filter.js.map +1 -1
  24. package/build/components/dataviews/view-actions.js +94 -56
  25. package/build/components/dataviews/view-actions.js.map +1 -1
  26. package/build/components/dataviews/view-grid.js +59 -0
  27. package/build/components/dataviews/view-grid.js.map +1 -0
  28. package/build/components/dataviews/view-list.js +283 -0
  29. package/build/components/dataviews/view-list.js.map +1 -0
  30. package/build/components/editor/index.js +2 -1
  31. package/build/components/editor/index.js.map +1 -1
  32. package/build/components/global-styles/font-library-modal/context.js +16 -10
  33. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  34. package/build/components/global-styles/font-library-modal/font-collection.js +20 -6
  35. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  36. package/build/components/global-styles/screen-block.js +1 -2
  37. package/build/components/global-styles/screen-block.js.map +1 -1
  38. package/build/components/global-styles/screen-root.js +1 -2
  39. package/build/components/global-styles/screen-root.js.map +1 -1
  40. package/build/components/global-styles/ui.js +3 -4
  41. package/build/components/global-styles/ui.js.map +1 -1
  42. package/build/components/layout/index.js +10 -2
  43. package/build/components/layout/index.js.map +1 -1
  44. package/build/components/media/index.js +34 -0
  45. package/build/components/media/index.js.map +1 -0
  46. package/build/components/page-actions/index.js +0 -2
  47. package/build/components/page-actions/index.js.map +1 -1
  48. package/build/components/page-pages/index.js +153 -107
  49. package/build/components/page-pages/index.js.map +1 -1
  50. package/build/components/page-patterns/delete-category-menu-item.js +89 -0
  51. package/build/components/page-patterns/delete-category-menu-item.js.map +1 -0
  52. package/build/components/page-patterns/duplicate-menu-item.js +52 -131
  53. package/build/components/page-patterns/duplicate-menu-item.js.map +1 -1
  54. package/build/components/page-patterns/grid-item.js +1 -0
  55. package/build/components/page-patterns/grid-item.js.map +1 -1
  56. package/build/components/page-patterns/header.js +25 -3
  57. package/build/components/page-patterns/header.js.map +1 -1
  58. package/build/components/page-patterns/rename-category-menu-item.js +49 -0
  59. package/build/components/page-patterns/rename-category-menu-item.js.map +1 -0
  60. package/build/components/page-patterns/rename-menu-item.js +1 -1
  61. package/build/components/page-patterns/rename-menu-item.js.map +1 -1
  62. package/build/components/page-patterns/use-patterns.js +1 -0
  63. package/build/components/page-patterns/use-patterns.js.map +1 -1
  64. package/build/components/pattern-modal/duplicate.js +65 -0
  65. package/build/components/pattern-modal/duplicate.js.map +1 -0
  66. package/build/components/pattern-modal/index.js +24 -0
  67. package/build/components/pattern-modal/index.js.map +1 -0
  68. package/build/components/pattern-modal/rename.js +42 -0
  69. package/build/components/pattern-modal/rename.js.map +1 -0
  70. package/build/components/sidebar-edit-mode/template-panel/last-revision.js +3 -0
  71. package/build/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
  72. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +2 -2
  73. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js.map +1 -1
  74. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +2 -3
  75. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  76. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +29 -0
  77. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js.map +1 -0
  78. package/build/components/sidebar-navigation-screen-template/home-template-details.js +12 -1
  79. package/build/components/sidebar-navigation-screen-template/home-template-details.js.map +1 -1
  80. package/build/hooks/commands/use-common-commands.js +1 -2
  81. package/build/hooks/commands/use-common-commands.js.map +1 -1
  82. package/build/hooks/commands/use-edit-mode-commands.js +49 -0
  83. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -1
  84. package/build/lock-unlock.js +1 -1
  85. package/build/lock-unlock.js.map +1 -1
  86. package/build/store/selectors.js +4 -5
  87. package/build/store/selectors.js.map +1 -1
  88. package/build-module/components/actions/trash-post.js +41 -0
  89. package/build-module/components/actions/trash-post.js.map +1 -0
  90. package/build-module/components/add-new-template/add-custom-template-modal-content.js +16 -12
  91. package/build-module/components/add-new-template/add-custom-template-modal-content.js.map +1 -1
  92. package/build-module/components/block-editor/resize-handle.js +2 -1
  93. package/build-module/components/block-editor/resize-handle.js.map +1 -1
  94. package/build-module/components/create-template-part-modal/index.js +10 -6
  95. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  96. package/build-module/components/dataviews/dataviews.js +40 -31
  97. package/build-module/components/dataviews/dataviews.js.map +1 -1
  98. package/build-module/components/dataviews/field-actions.js +22 -0
  99. package/build-module/components/dataviews/field-actions.js.map +1 -0
  100. package/build-module/components/dataviews/filters.js +53 -0
  101. package/build-module/components/dataviews/filters.js.map +1 -0
  102. package/build-module/components/dataviews/in-filter.js +43 -0
  103. package/build-module/components/dataviews/in-filter.js.map +1 -0
  104. package/build-module/components/dataviews/index.js +0 -1
  105. package/build-module/components/dataviews/index.js.map +1 -1
  106. package/build-module/components/dataviews/pagination.js +74 -28
  107. package/build-module/components/dataviews/pagination.js.map +1 -1
  108. package/build-module/components/dataviews/text-filter.js +19 -13
  109. package/build-module/components/dataviews/text-filter.js.map +1 -1
  110. package/build-module/components/dataviews/view-actions.js +95 -54
  111. package/build-module/components/dataviews/view-actions.js.map +1 -1
  112. package/build-module/components/dataviews/view-grid.js +51 -0
  113. package/build-module/components/dataviews/view-grid.js.map +1 -0
  114. package/build-module/components/dataviews/view-list.js +274 -0
  115. package/build-module/components/dataviews/view-list.js.map +1 -0
  116. package/build-module/components/editor/index.js +2 -1
  117. package/build-module/components/editor/index.js.map +1 -1
  118. package/build-module/components/global-styles/font-library-modal/context.js +16 -10
  119. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  120. package/build-module/components/global-styles/font-library-modal/font-collection.js +20 -6
  121. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  122. package/build-module/components/global-styles/screen-block.js +1 -2
  123. package/build-module/components/global-styles/screen-block.js.map +1 -1
  124. package/build-module/components/global-styles/screen-root.js +1 -2
  125. package/build-module/components/global-styles/screen-root.js.map +1 -1
  126. package/build-module/components/global-styles/ui.js +3 -4
  127. package/build-module/components/global-styles/ui.js.map +1 -1
  128. package/build-module/components/layout/index.js +11 -3
  129. package/build-module/components/layout/index.js.map +1 -1
  130. package/build-module/components/media/index.js +26 -0
  131. package/build-module/components/media/index.js.map +1 -0
  132. package/build-module/components/page-actions/index.js +0 -2
  133. package/build-module/components/page-actions/index.js.map +1 -1
  134. package/build-module/components/page-pages/index.js +156 -110
  135. package/build-module/components/page-pages/index.js.map +1 -1
  136. package/build-module/components/page-patterns/delete-category-menu-item.js +82 -0
  137. package/build-module/components/page-patterns/delete-category-menu-item.js.map +1 -0
  138. package/build-module/components/page-patterns/duplicate-menu-item.js +54 -133
  139. package/build-module/components/page-patterns/duplicate-menu-item.js.map +1 -1
  140. package/build-module/components/page-patterns/grid-item.js +1 -0
  141. package/build-module/components/page-patterns/grid-item.js.map +1 -1
  142. package/build-module/components/page-patterns/header.js +26 -4
  143. package/build-module/components/page-patterns/header.js.map +1 -1
  144. package/build-module/components/page-patterns/rename-category-menu-item.js +42 -0
  145. package/build-module/components/page-patterns/rename-category-menu-item.js.map +1 -0
  146. package/build-module/components/page-patterns/rename-menu-item.js +1 -1
  147. package/build-module/components/page-patterns/rename-menu-item.js.map +1 -1
  148. package/build-module/components/page-patterns/use-patterns.js +1 -0
  149. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  150. package/build-module/components/pattern-modal/duplicate.js +57 -0
  151. package/build-module/components/pattern-modal/duplicate.js.map +1 -0
  152. package/build-module/components/pattern-modal/index.js +14 -0
  153. package/build-module/components/pattern-modal/index.js.map +1 -0
  154. package/build-module/components/pattern-modal/rename.js +34 -0
  155. package/build-module/components/pattern-modal/rename.js.map +1 -0
  156. package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js +3 -0
  157. package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
  158. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +2 -2
  159. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js.map +1 -1
  160. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +2 -3
  161. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  162. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +22 -0
  163. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js.map +1 -0
  164. package/build-module/components/sidebar-navigation-screen-template/home-template-details.js +12 -1
  165. package/build-module/components/sidebar-navigation-screen-template/home-template-details.js.map +1 -1
  166. package/build-module/hooks/commands/use-common-commands.js +1 -2
  167. package/build-module/hooks/commands/use-common-commands.js.map +1 -1
  168. package/build-module/hooks/commands/use-edit-mode-commands.js +50 -1
  169. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -1
  170. package/build-module/lock-unlock.js +1 -1
  171. package/build-module/lock-unlock.js.map +1 -1
  172. package/build-module/store/selectors.js +4 -5
  173. package/build-module/store/selectors.js.map +1 -1
  174. package/build-style/style-rtl.css +42 -9
  175. package/build-style/style.css +42 -9
  176. package/package.json +40 -40
  177. package/src/components/actions/trash-post.js +55 -0
  178. package/src/components/add-new-template/add-custom-template-modal-content.js +22 -17
  179. package/src/components/block-editor/resize-handle.js +1 -0
  180. package/src/components/create-template-part-modal/index.js +9 -5
  181. package/src/components/dataviews/README.md +107 -0
  182. package/src/components/dataviews/dataviews.js +44 -33
  183. package/src/components/dataviews/field-actions.js +28 -0
  184. package/src/components/dataviews/filters.js +57 -0
  185. package/src/components/dataviews/in-filter.js +47 -0
  186. package/src/components/dataviews/index.js +0 -1
  187. package/src/components/dataviews/pagination.js +71 -29
  188. package/src/components/dataviews/style.scss +11 -1
  189. package/src/components/dataviews/text-filter.js +19 -15
  190. package/src/components/dataviews/view-actions.js +108 -63
  191. package/src/components/dataviews/view-grid.js +60 -0
  192. package/src/components/dataviews/view-list.js +348 -0
  193. package/src/components/editor/index.js +2 -0
  194. package/src/components/global-styles/font-library-modal/context.js +17 -11
  195. package/src/components/global-styles/font-library-modal/font-collection.js +18 -10
  196. package/src/components/global-styles/screen-block.js +1 -2
  197. package/src/components/global-styles/screen-root.js +1 -2
  198. package/src/components/global-styles/style.scss +16 -4
  199. package/src/components/global-styles/ui.js +1 -2
  200. package/src/components/layout/index.js +12 -4
  201. package/src/components/media/index.js +25 -0
  202. package/src/components/page-actions/index.js +1 -7
  203. package/src/components/page-pages/index.js +156 -108
  204. package/src/components/page-pages/style.scss +3 -0
  205. package/src/components/page-patterns/delete-category-menu-item.js +104 -0
  206. package/src/components/page-patterns/duplicate-menu-item.js +68 -181
  207. package/src/components/page-patterns/grid-item.js +1 -0
  208. package/src/components/page-patterns/header.js +42 -6
  209. package/src/components/page-patterns/rename-category-menu-item.js +45 -0
  210. package/src/components/page-patterns/rename-menu-item.js +2 -2
  211. package/src/components/page-patterns/style.scss +8 -0
  212. package/src/components/page-patterns/use-patterns.js +5 -0
  213. package/src/components/pattern-modal/duplicate.js +53 -0
  214. package/src/components/pattern-modal/index.js +19 -0
  215. package/src/components/pattern-modal/rename.js +29 -0
  216. package/src/components/sidebar-edit-mode/template-panel/last-revision.js +4 -0
  217. package/src/components/sidebar-navigation-screen/style.scss +17 -5
  218. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +2 -7
  219. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +2 -8
  220. package/src/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +32 -0
  221. package/src/components/sidebar-navigation-screen-template/home-template-details.js +21 -7
  222. package/src/hooks/commands/use-common-commands.js +1 -2
  223. package/src/hooks/commands/use-edit-mode-commands.js +41 -0
  224. package/src/lock-unlock.js +1 -1
  225. package/src/store/selectors.js +9 -10
  226. package/src/style.scss +1 -0
  227. package/build/components/dataviews/list-view.js +0 -89
  228. package/build/components/dataviews/list-view.js.map +0 -1
  229. package/build-module/components/dataviews/list-view.js +0 -80
  230. package/build-module/components/dataviews/list-view.js.map +0 -1
  231. package/src/components/dataviews/list-view.js +0 -106
@@ -2,89 +2,103 @@ import { createElement } from "react";
2
2
  /**
3
3
  * WordPress dependencies
4
4
  */
5
- import apiFetch from '@wordpress/api-fetch';
6
- import { addQueryArgs } from '@wordpress/url';
7
- import { VisuallyHidden, __experimentalHeading as Heading, __experimentalVStack as VStack } from '@wordpress/components';
5
+ import { __experimentalHeading as Heading, __experimentalVStack as VStack } from '@wordpress/components';
8
6
  import { __ } from '@wordpress/i18n';
9
7
  import { useEntityRecords } from '@wordpress/core-data';
10
8
  import { decodeEntities } from '@wordpress/html-entities';
11
- import { useState, useEffect, useMemo } from '@wordpress/element';
9
+ import { useState, useMemo, useCallback } from '@wordpress/element';
10
+ import { dateI18n, getDate, getSettings } from '@wordpress/date';
12
11
 
13
12
  /**
14
13
  * Internal dependencies
15
14
  */
16
15
  import Page from '../page';
17
16
  import Link from '../routes/link';
18
- import PageActions from '../page-actions';
19
- import { DataViews, PAGE_SIZE_VALUES } from '../dataviews';
17
+ import { DataViews } from '../dataviews';
18
+ import useTrashPostAction from '../actions/trash-post';
19
+ import Media from '../media';
20
20
  const EMPTY_ARRAY = [];
21
+ const EMPTY_OBJECT = {};
22
+ const defaultConfigPerViewType = {
23
+ list: {},
24
+ grid: {
25
+ mediaField: 'featured-image'
26
+ }
27
+ };
21
28
  export default function PagePages() {
22
- const [reset, setResetQuery] = useState(v => !v);
23
- const [globalFilter, setGlobalFilter] = useState('');
24
- const [paginationInfo, setPaginationInfo] = useState();
25
- const [{
26
- pageIndex,
27
- pageSize
28
- }, setPagination] = useState({
29
- pageIndex: 0,
30
- pageSize: PAGE_SIZE_VALUES[0]
29
+ const [view, setView] = useState({
30
+ type: 'list',
31
+ filters: {
32
+ search: '',
33
+ status: 'publish, draft'
34
+ },
35
+ page: 1,
36
+ perPage: 5,
37
+ sort: {
38
+ field: 'date',
39
+ direction: 'desc'
40
+ },
41
+ visibleFilters: ['search', 'author', 'status'],
42
+ // All fields are visible by default, so it's
43
+ // better to keep track of the hidden ones.
44
+ hiddenFields: ['date', 'featured-image'],
45
+ layout: {}
31
46
  });
32
47
  // Request post statuses to get the proper labels.
33
- const [postStatuses, setPostStatuses] = useState(EMPTY_ARRAY);
34
- useEffect(() => {
35
- apiFetch({
36
- path: '/wp/v2/statuses'
37
- }).then(setPostStatuses);
38
- }, []);
39
-
40
- // TODO: probably memo other objects passed as state(ex:https://tanstack.com/table/v8/docs/examples/react/pagination-controlled).
41
- const pagination = useMemo(() => ({
42
- pageIndex,
43
- pageSize
44
- }), [pageIndex, pageSize]);
45
- const [sorting, setSorting] = useState([{
46
- order: 'desc',
47
- orderby: 'date'
48
- }]);
48
+ const {
49
+ records: statuses
50
+ } = useEntityRecords('root', 'status');
51
+ const postStatuses = useMemo(() => statuses === null ? EMPTY_OBJECT : Object.fromEntries(statuses.map(({
52
+ slug,
53
+ name
54
+ }) => [slug, name])), [statuses]);
49
55
  const queryArgs = useMemo(() => ({
50
- per_page: pageSize,
51
- page: pageIndex + 1,
52
- // tanstack starts from zero.
56
+ per_page: view.perPage,
57
+ page: view.page,
53
58
  _embed: 'author',
54
- order: sorting[0]?.desc ? 'desc' : 'asc',
55
- orderby: sorting[0]?.id,
56
- search: globalFilter,
57
- status: ['publish', 'draft']
58
- }), [globalFilter, sorting[0]?.id, sorting[0]?.desc, pageSize, pageIndex, reset]);
59
+ order: view.sort?.direction,
60
+ orderby: view.sort?.field,
61
+ ...view.filters
62
+ }), [view]);
59
63
  const {
60
- records,
61
- isResolving: isLoading
64
+ records: pages,
65
+ isResolving: isLoadingPages,
66
+ totalItems,
67
+ totalPages
62
68
  } = useEntityRecords('postType', 'page', queryArgs);
63
- useEffect(() => {
64
- // Make extra request to handle controlled pagination.
65
- apiFetch({
66
- path: addQueryArgs('/wp/v2/pages', {
67
- ...queryArgs,
68
- _fields: 'id'
69
- }),
70
- method: 'HEAD',
71
- parse: false
72
- }).then(res => {
73
- const totalPages = parseInt(res.headers.get('X-WP-TotalPages'));
74
- const totalItems = parseInt(res.headers.get('X-WP-Total'));
75
- setPaginationInfo({
76
- totalPages,
77
- totalItems
78
- });
79
- });
80
- // Status should not make extra request if already did..
81
- }, [globalFilter, pageSize, reset]);
69
+ const {
70
+ records: authors
71
+ } = useEntityRecords('root', 'user', {
72
+ who: 'authors'
73
+ });
74
+ const paginationInfo = useMemo(() => ({
75
+ totalItems,
76
+ totalPages
77
+ }), [totalItems, totalPages]);
82
78
  const fields = useMemo(() => [{
79
+ id: 'featured-image',
80
+ header: __('Featured Image'),
81
+ getValue: ({
82
+ item
83
+ }) => item.featured_media,
84
+ render: ({
85
+ item,
86
+ view: currentView
87
+ }) => !!item.featured_media ? createElement(Media, {
88
+ className: "edit-site-page-pages__featured-image",
89
+ id: item.featured_media,
90
+ size: currentView.type === 'list' ? ['thumbnail', 'medium', 'large', 'full'] : ['large', 'full', 'medium', 'thumbnail']
91
+ }) : null,
92
+ enableSorting: false
93
+ }, {
83
94
  header: __('Title'),
84
95
  id: 'title',
85
- accessorFn: page => page.title?.rendered || page.slug,
86
- cell: props => {
87
- const page = props.row.original;
96
+ getValue: ({
97
+ item
98
+ }) => item.title?.rendered || item.slug,
99
+ render: ({
100
+ item
101
+ }) => {
88
102
  return createElement(VStack, {
89
103
  spacing: 1
90
104
  }, createElement(Heading, {
@@ -92,75 +106,107 @@ export default function PagePages() {
92
106
  level: 5
93
107
  }, createElement(Link, {
94
108
  params: {
95
- postId: page.id,
96
- postType: page.type,
109
+ postId: item.id,
110
+ postType: item.type,
97
111
  canvas: 'edit'
98
112
  }
99
- }, decodeEntities(props.getValue()))));
113
+ }, decodeEntities(item.title?.rendered || item.slug) || __('(no title)'))));
100
114
  },
115
+ filters: [{
116
+ id: 'search',
117
+ type: 'search'
118
+ }],
101
119
  maxWidth: 400,
102
120
  sortingFn: 'alphanumeric',
103
121
  enableHiding: false
104
122
  }, {
105
123
  header: __('Author'),
106
124
  id: 'author',
107
- accessorFn: page => page._embedded?.author[0]?.name,
108
- cell: props => {
109
- const author = props.row.original._embedded?.author[0];
125
+ getValue: ({
126
+ item
127
+ }) => item._embedded?.author[0]?.name,
128
+ render: ({
129
+ item
130
+ }) => {
131
+ const author = item._embedded?.author[0];
110
132
  return createElement("a", {
111
133
  href: `user-edit.php?user_id=${author.id}`
112
134
  }, author.name);
113
- }
135
+ },
136
+ filters: [{
137
+ id: 'author',
138
+ type: 'enumeration'
139
+ }],
140
+ elements: [{
141
+ value: '',
142
+ label: __('All')
143
+ }, ...(authors?.map(({
144
+ id,
145
+ name
146
+ }) => ({
147
+ value: id,
148
+ label: name
149
+ })) || [])]
114
150
  }, {
115
- header: 'Status',
151
+ header: __('Status'),
116
152
  id: 'status',
117
- cell: props => postStatuses[props.row.original.status]?.name
118
- }, {
119
- header: createElement(VisuallyHidden, null, __('Actions')),
120
- id: 'actions',
121
- cell: props => {
122
- const page = props.row.original;
123
- return createElement(PageActions, {
124
- postId: page.id,
125
- onRemove: () => setResetQuery()
126
- });
153
+ getValue: ({
154
+ item
155
+ }) => {
156
+ var _postStatuses$item$st;
157
+ return (_postStatuses$item$st = postStatuses[item.status]) !== null && _postStatuses$item$st !== void 0 ? _postStatuses$item$st : item.status;
127
158
  },
128
- enableHiding: false
129
- }], [postStatuses]);
159
+ filters: [{
160
+ type: 'enumeration',
161
+ id: 'status'
162
+ }],
163
+ elements: [{
164
+ label: __('All'),
165
+ value: 'publish,draft'
166
+ }, ...(postStatuses && Object.entries(postStatuses).filter(([slug]) => ['publish', 'draft'].includes(slug)).map(([slug, name]) => ({
167
+ value: slug,
168
+ label: name
169
+ })) || [])],
170
+ enableSorting: false
171
+ }, {
172
+ header: __('Date'),
173
+ id: 'date',
174
+ getValue: ({
175
+ item
176
+ }) => item.date,
177
+ render: ({
178
+ item
179
+ }) => {
180
+ const formattedDate = dateI18n(getSettings().formats.datetimeAbbreviated, getDate(item.date));
181
+ return createElement("time", null, formattedDate);
182
+ }
183
+ }], [postStatuses, authors]);
184
+ const trashPostAction = useTrashPostAction();
185
+ const actions = useMemo(() => [trashPostAction], [trashPostAction]);
186
+ const onChangeView = useCallback(viewUpdater => {
187
+ let updatedView = typeof viewUpdater === 'function' ? viewUpdater(view) : viewUpdater;
188
+ if (updatedView.type !== view.type) {
189
+ updatedView = {
190
+ ...updatedView,
191
+ layout: {
192
+ ...defaultConfigPerViewType[updatedView.type]
193
+ }
194
+ };
195
+ }
196
+ setView(updatedView);
197
+ }, [view]);
130
198
 
131
199
  // TODO: we need to handle properly `data={ data || EMPTY_ARRAY }` for when `isLoading`.
132
200
  return createElement(Page, {
133
201
  title: __('Pages')
134
202
  }, createElement(DataViews, {
135
203
  paginationInfo: paginationInfo,
136
- data: records || EMPTY_ARRAY,
137
- isLoading: isLoading,
138
204
  fields: fields,
139
- options: {
140
- manualSorting: true,
141
- manualFiltering: true,
142
- manualPagination: true,
143
- enableRowSelection: true,
144
- state: {
145
- sorting,
146
- globalFilter,
147
- pagination
148
- },
149
- pageCount: paginationInfo?.totalPages,
150
- onSortingChange: setSorting,
151
- onGlobalFilterChange: value => {
152
- setGlobalFilter(value);
153
- setPagination({
154
- pageIndex: 0,
155
- pageSize
156
- });
157
- },
158
- // TODO: check these callbacks and maybe reset the query when needed...
159
- onPaginationChange: setPagination,
160
- meta: {
161
- resetQuery: setResetQuery
162
- }
163
- }
205
+ actions: actions,
206
+ data: pages || EMPTY_ARRAY,
207
+ isLoading: isLoadingPages,
208
+ view: view,
209
+ onChangeView: onChangeView
164
210
  }));
165
211
  }
166
212
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["apiFetch","addQueryArgs","VisuallyHidden","__experimentalHeading","Heading","__experimentalVStack","VStack","__","useEntityRecords","decodeEntities","useState","useEffect","useMemo","Page","Link","PageActions","DataViews","PAGE_SIZE_VALUES","EMPTY_ARRAY","PagePages","reset","setResetQuery","v","globalFilter","setGlobalFilter","paginationInfo","setPaginationInfo","pageIndex","pageSize","setPagination","postStatuses","setPostStatuses","path","then","pagination","sorting","setSorting","order","orderby","queryArgs","per_page","page","_embed","desc","id","search","status","records","isResolving","isLoading","_fields","method","parse","res","totalPages","parseInt","headers","get","totalItems","fields","header","accessorFn","title","rendered","slug","cell","props","row","original","createElement","spacing","as","level","params","postId","postType","type","canvas","getValue","maxWidth","sortingFn","enableHiding","_embedded","author","name","href","onRemove","data","options","manualSorting","manualFiltering","manualPagination","enableRowSelection","state","pageCount","onSortingChange","onGlobalFilterChange","value","onPaginationChange","meta","resetQuery"],"sources":["@wordpress/edit-site/src/components/page-pages/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\nimport {\n\tVisuallyHidden,\n\t__experimentalHeading as Heading,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useEntityRecords } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useState, useEffect, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport Page from '../page';\nimport Link from '../routes/link';\nimport PageActions from '../page-actions';\nimport { DataViews, PAGE_SIZE_VALUES } from '../dataviews';\n\nconst EMPTY_ARRAY = [];\n\nexport default function PagePages() {\n\tconst [ reset, setResetQuery ] = useState( ( v ) => ! v );\n\tconst [ globalFilter, setGlobalFilter ] = useState( '' );\n\tconst [ paginationInfo, setPaginationInfo ] = useState();\n\tconst [ { pageIndex, pageSize }, setPagination ] = useState( {\n\t\tpageIndex: 0,\n\t\tpageSize: PAGE_SIZE_VALUES[ 0 ],\n\t} );\n\t// Request post statuses to get the proper labels.\n\tconst [ postStatuses, setPostStatuses ] = useState( EMPTY_ARRAY );\n\tuseEffect( () => {\n\t\tapiFetch( {\n\t\t\tpath: '/wp/v2/statuses',\n\t\t} ).then( setPostStatuses );\n\t}, [] );\n\n\t// TODO: probably memo other objects passed as state(ex:https://tanstack.com/table/v8/docs/examples/react/pagination-controlled).\n\tconst pagination = useMemo(\n\t\t() => ( { pageIndex, pageSize } ),\n\t\t[ pageIndex, pageSize ]\n\t);\n\tconst [ sorting, setSorting ] = useState( [\n\t\t{ order: 'desc', orderby: 'date' },\n\t] );\n\tconst queryArgs = useMemo(\n\t\t() => ( {\n\t\t\tper_page: pageSize,\n\t\t\tpage: pageIndex + 1, // tanstack starts from zero.\n\t\t\t_embed: 'author',\n\t\t\torder: sorting[ 0 ]?.desc ? 'desc' : 'asc',\n\t\t\torderby: sorting[ 0 ]?.id,\n\t\t\tsearch: globalFilter,\n\t\t\tstatus: [ 'publish', 'draft' ],\n\t\t} ),\n\t\t[\n\t\t\tglobalFilter,\n\t\t\tsorting[ 0 ]?.id,\n\t\t\tsorting[ 0 ]?.desc,\n\t\t\tpageSize,\n\t\t\tpageIndex,\n\t\t\treset,\n\t\t]\n\t);\n\tconst { records, isResolving: isLoading } = useEntityRecords(\n\t\t'postType',\n\t\t'page',\n\t\tqueryArgs\n\t);\n\tuseEffect( () => {\n\t\t// Make extra request to handle controlled pagination.\n\t\tapiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/pages', {\n\t\t\t\t...queryArgs,\n\t\t\t\t_fields: 'id',\n\t\t\t} ),\n\t\t\tmethod: 'HEAD',\n\t\t\tparse: false,\n\t\t} ).then( ( res ) => {\n\t\t\tconst totalPages = parseInt( res.headers.get( 'X-WP-TotalPages' ) );\n\t\t\tconst totalItems = parseInt( res.headers.get( 'X-WP-Total' ) );\n\t\t\tsetPaginationInfo( {\n\t\t\t\ttotalPages,\n\t\t\t\ttotalItems,\n\t\t\t} );\n\t\t} );\n\t\t// Status should not make extra request if already did..\n\t}, [ globalFilter, pageSize, reset ] );\n\n\tconst fields = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\theader: __( 'Title' ),\n\t\t\t\tid: 'title',\n\t\t\t\taccessorFn: ( page ) => page.title?.rendered || page.slug,\n\t\t\t\tcell: ( props ) => {\n\t\t\t\t\tconst page = props.row.original;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<VStack spacing={ 1 }>\n\t\t\t\t\t\t\t<Heading as=\"h3\" level={ 5 }>\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tparams={ {\n\t\t\t\t\t\t\t\t\t\tpostId: page.id,\n\t\t\t\t\t\t\t\t\t\tpostType: page.type,\n\t\t\t\t\t\t\t\t\t\tcanvas: 'edit',\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ decodeEntities( props.getValue() ) }\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tmaxWidth: 400,\n\t\t\t\tsortingFn: 'alphanumeric',\n\t\t\t\tenableHiding: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: __( 'Author' ),\n\t\t\t\tid: 'author',\n\t\t\t\taccessorFn: ( page ) => page._embedded?.author[ 0 ]?.name,\n\t\t\t\tcell: ( props ) => {\n\t\t\t\t\tconst author = props.row.original._embedded?.author[ 0 ];\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<a href={ `user-edit.php?user_id=${ author.id }` }>\n\t\t\t\t\t\t\t{ author.name }\n\t\t\t\t\t\t</a>\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: 'Status',\n\t\t\t\tid: 'status',\n\t\t\t\tcell: ( props ) =>\n\t\t\t\t\tpostStatuses[ props.row.original.status ]?.name,\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: <VisuallyHidden>{ __( 'Actions' ) }</VisuallyHidden>,\n\t\t\t\tid: 'actions',\n\t\t\t\tcell: ( props ) => {\n\t\t\t\t\tconst page = props.row.original;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<PageActions\n\t\t\t\t\t\t\tpostId={ page.id }\n\t\t\t\t\t\t\tonRemove={ () => setResetQuery() }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tenableHiding: false,\n\t\t\t},\n\t\t],\n\t\t[ postStatuses ]\n\t);\n\n\t// TODO: we need to handle properly `data={ data || EMPTY_ARRAY }` for when `isLoading`.\n\treturn (\n\t\t<Page title={ __( 'Pages' ) }>\n\t\t\t<DataViews\n\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\tdata={ records || EMPTY_ARRAY }\n\t\t\t\tisLoading={ isLoading }\n\t\t\t\tfields={ fields }\n\t\t\t\toptions={ {\n\t\t\t\t\tmanualSorting: true,\n\t\t\t\t\tmanualFiltering: true,\n\t\t\t\t\tmanualPagination: true,\n\t\t\t\t\tenableRowSelection: true,\n\t\t\t\t\tstate: {\n\t\t\t\t\t\tsorting,\n\t\t\t\t\t\tglobalFilter,\n\t\t\t\t\t\tpagination,\n\t\t\t\t\t},\n\t\t\t\t\tpageCount: paginationInfo?.totalPages,\n\t\t\t\t\tonSortingChange: setSorting,\n\t\t\t\t\tonGlobalFilterChange: ( value ) => {\n\t\t\t\t\t\tsetGlobalFilter( value );\n\t\t\t\t\t\tsetPagination( { pageIndex: 0, pageSize } );\n\t\t\t\t\t},\n\t\t\t\t\t// TODO: check these callbacks and maybe reset the query when needed...\n\t\t\t\t\tonPaginationChange: setPagination,\n\t\t\t\t\tmeta: { resetQuery: setResetQuery },\n\t\t\t\t} }\n\t\t\t/>\n\t\t</Page>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["__experimentalHeading","Heading","__experimentalVStack","VStack","__","useEntityRecords","decodeEntities","useState","useMemo","useCallback","dateI18n","getDate","getSettings","Page","Link","DataViews","useTrashPostAction","Media","EMPTY_ARRAY","EMPTY_OBJECT","defaultConfigPerViewType","list","grid","mediaField","PagePages","view","setView","type","filters","search","status","page","perPage","sort","field","direction","visibleFilters","hiddenFields","layout","records","statuses","postStatuses","Object","fromEntries","map","slug","name","queryArgs","per_page","_embed","order","orderby","pages","isResolving","isLoadingPages","totalItems","totalPages","authors","who","paginationInfo","fields","id","header","getValue","item","featured_media","render","currentView","createElement","className","size","enableSorting","title","rendered","spacing","as","level","params","postId","postType","canvas","maxWidth","sortingFn","enableHiding","_embedded","author","href","elements","value","label","_postStatuses$item$st","entries","filter","includes","date","formattedDate","formats","datetimeAbbreviated","trashPostAction","actions","onChangeView","viewUpdater","updatedView","data","isLoading"],"sources":["@wordpress/edit-site/src/components/page-pages/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalHeading as Heading,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useEntityRecords } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useState, useMemo, useCallback } from '@wordpress/element';\nimport { dateI18n, getDate, getSettings } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport Page from '../page';\nimport Link from '../routes/link';\nimport { DataViews } from '../dataviews';\nimport useTrashPostAction from '../actions/trash-post';\nimport Media from '../media';\n\nconst EMPTY_ARRAY = [];\nconst EMPTY_OBJECT = {};\nconst defaultConfigPerViewType = {\n\tlist: {},\n\tgrid: {\n\t\tmediaField: 'featured-image',\n\t},\n};\n\nexport default function PagePages() {\n\tconst [ view, setView ] = useState( {\n\t\ttype: 'list',\n\t\tfilters: {\n\t\t\tsearch: '',\n\t\t\tstatus: 'publish, draft',\n\t\t},\n\t\tpage: 1,\n\t\tperPage: 5,\n\t\tsort: {\n\t\t\tfield: 'date',\n\t\t\tdirection: 'desc',\n\t\t},\n\t\tvisibleFilters: [ 'search', 'author', 'status' ],\n\t\t// All fields are visible by default, so it's\n\t\t// better to keep track of the hidden ones.\n\t\thiddenFields: [ 'date', 'featured-image' ],\n\t\tlayout: {},\n\t} );\n\t// Request post statuses to get the proper labels.\n\tconst { records: statuses } = useEntityRecords( 'root', 'status' );\n\tconst postStatuses = useMemo(\n\t\t() =>\n\t\t\tstatuses === null\n\t\t\t\t? EMPTY_OBJECT\n\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\tstatuses.map( ( { slug, name } ) => [ slug, name ] )\n\t\t\t\t ),\n\t\t[ statuses ]\n\t);\n\n\tconst queryArgs = useMemo(\n\t\t() => ( {\n\t\t\tper_page: view.perPage,\n\t\t\tpage: view.page,\n\t\t\t_embed: 'author',\n\t\t\torder: view.sort?.direction,\n\t\t\torderby: view.sort?.field,\n\t\t\t...view.filters,\n\t\t} ),\n\t\t[ view ]\n\t);\n\tconst {\n\t\trecords: pages,\n\t\tisResolving: isLoadingPages,\n\t\ttotalItems,\n\t\ttotalPages,\n\t} = useEntityRecords( 'postType', 'page', queryArgs );\n\n\tconst { records: authors } = useEntityRecords( 'root', 'user', {\n\t\twho: 'authors',\n\t} );\n\n\tconst paginationInfo = useMemo(\n\t\t() => ( {\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t} ),\n\t\t[ totalItems, totalPages ]\n\t);\n\n\tconst fields = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'featured-image',\n\t\t\t\theader: __( 'Featured Image' ),\n\t\t\t\tgetValue: ( { item } ) => item.featured_media,\n\t\t\t\trender: ( { item, view: currentView } ) =>\n\t\t\t\t\t!! item.featured_media ? (\n\t\t\t\t\t\t<Media\n\t\t\t\t\t\t\tclassName=\"edit-site-page-pages__featured-image\"\n\t\t\t\t\t\t\tid={ item.featured_media }\n\t\t\t\t\t\t\tsize={\n\t\t\t\t\t\t\t\tcurrentView.type === 'list'\n\t\t\t\t\t\t\t\t\t? [ 'thumbnail', 'medium', 'large', 'full' ]\n\t\t\t\t\t\t\t\t\t: [ 'large', 'full', 'medium', 'thumbnail' ]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null,\n\t\t\t\tenableSorting: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: __( 'Title' ),\n\t\t\t\tid: 'title',\n\t\t\t\tgetValue: ( { item } ) => item.title?.rendered || item.slug,\n\t\t\t\trender: ( { item } ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<VStack spacing={ 1 }>\n\t\t\t\t\t\t\t<Heading as=\"h3\" level={ 5 }>\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tparams={ {\n\t\t\t\t\t\t\t\t\t\tpostId: item.id,\n\t\t\t\t\t\t\t\t\t\tpostType: item.type,\n\t\t\t\t\t\t\t\t\t\tcanvas: 'edit',\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ decodeEntities(\n\t\t\t\t\t\t\t\t\t\titem.title?.rendered || item.slug\n\t\t\t\t\t\t\t\t\t) || __( '(no title)' ) }\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tfilters: [ { id: 'search', type: 'search' } ],\n\t\t\t\tmaxWidth: 400,\n\t\t\t\tsortingFn: 'alphanumeric',\n\t\t\t\tenableHiding: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: __( 'Author' ),\n\t\t\t\tid: 'author',\n\t\t\t\tgetValue: ( { item } ) => item._embedded?.author[ 0 ]?.name,\n\t\t\t\trender: ( { item } ) => {\n\t\t\t\t\tconst author = item._embedded?.author[ 0 ];\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<a href={ `user-edit.php?user_id=${ author.id }` }>\n\t\t\t\t\t\t\t{ author.name }\n\t\t\t\t\t\t</a>\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tfilters: [ { id: 'author', type: 'enumeration' } ],\n\t\t\t\telements: [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: '',\n\t\t\t\t\t\tlabel: __( 'All' ),\n\t\t\t\t\t},\n\t\t\t\t\t...( authors?.map( ( { id, name } ) => ( {\n\t\t\t\t\t\tvalue: id,\n\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t} ) ) || [] ),\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: __( 'Status' ),\n\t\t\t\tid: 'status',\n\t\t\t\tgetValue: ( { item } ) =>\n\t\t\t\t\tpostStatuses[ item.status ] ?? item.status,\n\t\t\t\tfilters: [ { type: 'enumeration', id: 'status' } ],\n\t\t\t\telements: [\n\t\t\t\t\t{ label: __( 'All' ), value: 'publish,draft' },\n\t\t\t\t\t...( ( postStatuses &&\n\t\t\t\t\t\tObject.entries( postStatuses )\n\t\t\t\t\t\t\t.filter( ( [ slug ] ) =>\n\t\t\t\t\t\t\t\t[ 'publish', 'draft' ].includes( slug )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map( ( [ slug, name ] ) => ( {\n\t\t\t\t\t\t\t\tvalue: slug,\n\t\t\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t\t\t} ) ) ) ||\n\t\t\t\t\t\t[] ),\n\t\t\t\t],\n\t\t\t\tenableSorting: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: __( 'Date' ),\n\t\t\t\tid: 'date',\n\t\t\t\tgetValue: ( { item } ) => item.date,\n\t\t\t\trender: ( { item } ) => {\n\t\t\t\t\tconst formattedDate = dateI18n(\n\t\t\t\t\t\tgetSettings().formats.datetimeAbbreviated,\n\t\t\t\t\t\tgetDate( item.date )\n\t\t\t\t\t);\n\t\t\t\t\treturn <time>{ formattedDate }</time>;\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\t[ postStatuses, authors ]\n\t);\n\n\tconst trashPostAction = useTrashPostAction();\n\tconst actions = useMemo( () => [ trashPostAction ], [ trashPostAction ] );\n\tconst onChangeView = useCallback(\n\t\t( viewUpdater ) => {\n\t\t\tlet updatedView =\n\t\t\t\ttypeof viewUpdater === 'function'\n\t\t\t\t\t? viewUpdater( view )\n\t\t\t\t\t: viewUpdater;\n\t\t\tif ( updatedView.type !== view.type ) {\n\t\t\t\tupdatedView = {\n\t\t\t\t\t...updatedView,\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...defaultConfigPerViewType[ updatedView.type ],\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tsetView( updatedView );\n\t\t},\n\t\t[ view ]\n\t);\n\n\t// TODO: we need to handle properly `data={ data || EMPTY_ARRAY }` for when `isLoading`.\n\treturn (\n\t\t<Page title={ __( 'Pages' ) }>\n\t\t\t<DataViews\n\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\tfields={ fields }\n\t\t\t\tactions={ actions }\n\t\t\t\tdata={ pages || EMPTY_ARRAY }\n\t\t\t\tisLoading={ isLoadingPages }\n\t\t\t\tview={ view }\n\t\t\t\tonChangeView={ onChangeView }\n\t\t\t/>\n\t\t</Page>\n\t);\n}\n"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { createElement, Fragment } from "react";
2
+ /**
3
+ * WordPress dependencies
4
+ */
5
+ import { MenuItem, __experimentalConfirmDialog as ConfirmDialog } from '@wordpress/components';
6
+ import { store as coreStore } from '@wordpress/core-data';
7
+ import { useDispatch } from '@wordpress/data';
8
+ import { useState } from '@wordpress/element';
9
+ import { decodeEntities } from '@wordpress/html-entities';
10
+ import { __, sprintf } from '@wordpress/i18n';
11
+ import { store as noticesStore } from '@wordpress/notices';
12
+ import { privateApis as routerPrivateApis } from '@wordpress/router';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import { unlock } from '../../lock-unlock';
18
+ import { PATTERN_TYPES, PATTERN_DEFAULT_CATEGORY } from '../../utils/constants';
19
+ const {
20
+ useHistory
21
+ } = unlock(routerPrivateApis);
22
+ export default function DeleteCategoryMenuItem({
23
+ category,
24
+ onClose
25
+ }) {
26
+ const [isModalOpen, setIsModalOpen] = useState(false);
27
+ const history = useHistory();
28
+ const {
29
+ createSuccessNotice,
30
+ createErrorNotice
31
+ } = useDispatch(noticesStore);
32
+ const {
33
+ deleteEntityRecord,
34
+ invalidateResolution
35
+ } = useDispatch(coreStore);
36
+ const onDelete = async () => {
37
+ try {
38
+ await deleteEntityRecord('taxonomy', 'wp_pattern_category', category.id, {
39
+ force: true
40
+ }, {
41
+ throwOnError: true
42
+ });
43
+
44
+ // Prevent the need to refresh the page to get up-to-date categories
45
+ // and pattern categorization.
46
+ invalidateResolution('getUserPatternCategories');
47
+ invalidateResolution('getEntityRecords', ['postType', PATTERN_TYPES.user, {
48
+ per_page: -1
49
+ }]);
50
+ createSuccessNotice(sprintf( /* translators: The pattern category's name */
51
+ __('"%s" deleted.'), category.label), {
52
+ type: 'snackbar',
53
+ id: 'pattern-category-delete'
54
+ });
55
+ onClose?.();
56
+ history.push({
57
+ path: `/patterns`,
58
+ categoryType: PATTERN_TYPES.theme,
59
+ categoryId: PATTERN_DEFAULT_CATEGORY
60
+ });
61
+ } catch (error) {
62
+ const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : __('An error occurred while deleting the pattern category.');
63
+ createErrorNotice(errorMessage, {
64
+ type: 'snackbar',
65
+ id: 'pattern-category-delete'
66
+ });
67
+ }
68
+ };
69
+ return createElement(Fragment, null, createElement(MenuItem, {
70
+ isDestructive: true,
71
+ onClick: () => setIsModalOpen(true)
72
+ }, __('Delete')), createElement(ConfirmDialog, {
73
+ isOpen: isModalOpen,
74
+ onConfirm: onDelete,
75
+ onCancel: () => setIsModalOpen(false),
76
+ confirmButtonText: __('Delete'),
77
+ className: "edit-site-patterns__delete-modal"
78
+ }, sprintf(
79
+ // translators: %s: The pattern category's name.
80
+ __('Are you sure you want to delete the category "%s"? The patterns will not be deleted.'), decodeEntities(category.label))));
81
+ }
82
+ //# sourceMappingURL=delete-category-menu-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MenuItem","__experimentalConfirmDialog","ConfirmDialog","store","coreStore","useDispatch","useState","decodeEntities","__","sprintf","noticesStore","privateApis","routerPrivateApis","unlock","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","useHistory","DeleteCategoryMenuItem","category","onClose","isModalOpen","setIsModalOpen","history","createSuccessNotice","createErrorNotice","deleteEntityRecord","invalidateResolution","onDelete","id","force","throwOnError","user","per_page","label","type","push","path","categoryType","theme","categoryId","error","errorMessage","message","code","createElement","Fragment","isDestructive","onClick","isOpen","onConfirm","onCancel","confirmButtonText","className"],"sources":["@wordpress/edit-site/src/components/page-patterns/delete-category-menu-item.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tMenuItem,\n\t__experimentalConfirmDialog as ConfirmDialog,\n} from '@wordpress/components';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDispatch } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { privateApis as routerPrivateApis } from '@wordpress/router';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport { PATTERN_TYPES, PATTERN_DEFAULT_CATEGORY } from '../../utils/constants';\n\nconst { useHistory } = unlock( routerPrivateApis );\n\nexport default function DeleteCategoryMenuItem( { category, onClose } ) {\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst history = useHistory();\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { deleteEntityRecord, invalidateResolution } =\n\t\tuseDispatch( coreStore );\n\n\tconst onDelete = async () => {\n\t\ttry {\n\t\t\tawait deleteEntityRecord(\n\t\t\t\t'taxonomy',\n\t\t\t\t'wp_pattern_category',\n\t\t\t\tcategory.id,\n\t\t\t\t{ force: true },\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\t// Prevent the need to refresh the page to get up-to-date categories\n\t\t\t// and pattern categorization.\n\t\t\tinvalidateResolution( 'getUserPatternCategories' );\n\t\t\tinvalidateResolution( 'getEntityRecords', [\n\t\t\t\t'postType',\n\t\t\t\tPATTERN_TYPES.user,\n\t\t\t\t{ per_page: -1 },\n\t\t\t] );\n\n\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: The pattern category's name */\n\t\t\t\t\t__( '\"%s\" deleted.' ),\n\t\t\t\t\tcategory.label\n\t\t\t\t),\n\t\t\t\t{ type: 'snackbar', id: 'pattern-category-delete' }\n\t\t\t);\n\n\t\t\tonClose?.();\n\t\t\thistory.push( {\n\t\t\t\tpath: `/patterns`,\n\t\t\t\tcategoryType: PATTERN_TYPES.theme,\n\t\t\t\tcategoryId: PATTERN_DEFAULT_CATEGORY,\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __(\n\t\t\t\t\t\t\t'An error occurred while deleting the pattern category.'\n\t\t\t\t\t );\n\n\t\t\tcreateErrorNotice( errorMessage, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-category-delete',\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem isDestructive onClick={ () => setIsModalOpen( true ) }>\n\t\t\t\t{ __( 'Delete' ) }\n\t\t\t</MenuItem>\n\t\t\t<ConfirmDialog\n\t\t\t\tisOpen={ isModalOpen }\n\t\t\t\tonConfirm={ onDelete }\n\t\t\t\tonCancel={ () => setIsModalOpen( false ) }\n\t\t\t\tconfirmButtonText={ __( 'Delete' ) }\n\t\t\t\tclassName=\"edit-site-patterns__delete-modal\"\n\t\t\t>\n\t\t\t\t{ sprintf(\n\t\t\t\t\t// translators: %s: The pattern category's name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Are you sure you want to delete the category \"%s\"? The patterns will not be deleted.'\n\t\t\t\t\t),\n\t\t\t\t\tdecodeEntities( category.label )\n\t\t\t\t) }\n\t\t\t</ConfirmDialog>\n\t\t</>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SACCA,QAAQ,EACRC,2BAA2B,IAAIC,aAAa,QACtC,uBAAuB;AAC9B,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;AACzD,SAASC,WAAW,QAAQ,iBAAiB;AAC7C,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASN,KAAK,IAAIO,YAAY,QAAQ,oBAAoB;AAC1D,SAASC,WAAW,IAAIC,iBAAiB,QAAQ,mBAAmB;;AAEpE;AACA;AACA;AACA,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,aAAa,EAAEC,wBAAwB,QAAQ,uBAAuB;AAE/E,MAAM;EAAEC;AAAW,CAAC,GAAGH,MAAM,CAAED,iBAAkB,CAAC;AAElD,eAAe,SAASK,sBAAsBA,CAAE;EAAEC,QAAQ;EAAEC;AAAQ,CAAC,EAAG;EACvE,MAAM,CAAEC,WAAW,EAAEC,cAAc,CAAE,GAAGf,QAAQ,CAAE,KAAM,CAAC;EACzD,MAAMgB,OAAO,GAAGN,UAAU,CAAC,CAAC;EAE5B,MAAM;IAAEO,mBAAmB;IAAEC;EAAkB,CAAC,GAC/CnB,WAAW,CAAEK,YAAa,CAAC;EAC5B,MAAM;IAAEe,kBAAkB;IAAEC;EAAqB,CAAC,GACjDrB,WAAW,CAAED,SAAU,CAAC;EAEzB,MAAMuB,QAAQ,GAAG,MAAAA,CAAA,KAAY;IAC5B,IAAI;MACH,MAAMF,kBAAkB,CACvB,UAAU,EACV,qBAAqB,EACrBP,QAAQ,CAACU,EAAE,EACX;QAAEC,KAAK,EAAE;MAAK,CAAC,EACf;QAAEC,YAAY,EAAE;MAAK,CACtB,CAAC;;MAED;MACA;MACAJ,oBAAoB,CAAE,0BAA2B,CAAC;MAClDA,oBAAoB,CAAE,kBAAkB,EAAE,CACzC,UAAU,EACVZ,aAAa,CAACiB,IAAI,EAClB;QAAEC,QAAQ,EAAE,CAAC;MAAE,CAAC,CACf,CAAC;MAEHT,mBAAmB,CAClBd,OAAO,EACN;MACAD,EAAE,CAAE,eAAgB,CAAC,EACrBU,QAAQ,CAACe,KACV,CAAC,EACD;QAAEC,IAAI,EAAE,UAAU;QAAEN,EAAE,EAAE;MAA0B,CACnD,CAAC;MAEDT,OAAO,GAAG,CAAC;MACXG,OAAO,CAACa,IAAI,CAAE;QACbC,IAAI,EAAG,WAAU;QACjBC,YAAY,EAAEvB,aAAa,CAACwB,KAAK;QACjCC,UAAU,EAAExB;MACb,CAAE,CAAC;IACJ,CAAC,CAAC,OAAQyB,KAAK,EAAG;MACjB,MAAMC,YAAY,GACjBD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACG,IAAI,KAAK,eAAe,GAC5CH,KAAK,CAACE,OAAO,GACblC,EAAE,CACF,wDACA,CAAC;MAELgB,iBAAiB,CAAEiB,YAAY,EAAE;QAChCP,IAAI,EAAE,UAAU;QAChBN,EAAE,EAAE;MACL,CAAE,CAAC;IACJ;EACD,CAAC;EAED,OACCgB,aAAA,CAAAC,QAAA,QACCD,aAAA,CAAC5C,QAAQ;IAAC8C,aAAa;IAACC,OAAO,EAAGA,CAAA,KAAM1B,cAAc,CAAE,IAAK;EAAG,GAC7Db,EAAE,CAAE,QAAS,CACN,CAAC,EACXoC,aAAA,CAAC1C,aAAa;IACb8C,MAAM,EAAG5B,WAAa;IACtB6B,SAAS,EAAGtB,QAAU;IACtBuB,QAAQ,EAAGA,CAAA,KAAM7B,cAAc,CAAE,KAAM,CAAG;IAC1C8B,iBAAiB,EAAG3C,EAAE,CAAE,QAAS,CAAG;IACpC4C,SAAS,EAAC;EAAkC,GAE1C3C,OAAO;EACR;EACAD,EAAE,CACD,sFACD,CAAC,EACDD,cAAc,CAAEW,QAAQ,CAACe,KAAM,CAChC,CACc,CACd,CAAC;AAEL"}