@wordpress/edit-site 5.12.7 → 5.12.8

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 (102) hide show
  1. package/build/components/block-editor/editor-canvas.js +1 -1
  2. package/build/components/block-editor/editor-canvas.js.map +1 -1
  3. package/build/components/create-pattern-modal/index.js +7 -3
  4. package/build/components/create-pattern-modal/index.js.map +1 -1
  5. package/build/components/page-patterns/duplicate-menu-item.js +163 -0
  6. package/build/components/page-patterns/duplicate-menu-item.js.map +1 -0
  7. package/build/components/page-patterns/grid-item.js +83 -59
  8. package/build/components/page-patterns/grid-item.js.map +1 -1
  9. package/build/components/page-patterns/grid.js +21 -13
  10. package/build/components/page-patterns/grid.js.map +1 -1
  11. package/build/components/page-patterns/header.js +69 -0
  12. package/build/components/page-patterns/header.js.map +1 -0
  13. package/build/components/page-patterns/index.js +3 -1
  14. package/build/components/page-patterns/index.js.map +1 -1
  15. package/build/components/page-patterns/patterns-list.js +67 -27
  16. package/build/components/page-patterns/patterns-list.js.map +1 -1
  17. package/build/components/page-patterns/rename-menu-item.js +109 -0
  18. package/build/components/page-patterns/rename-menu-item.js.map +1 -0
  19. package/build/components/page-patterns/use-patterns.js +99 -118
  20. package/build/components/page-patterns/use-patterns.js.map +1 -1
  21. package/build/components/sidebar-navigation-screen/index.js +1 -1
  22. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  23. package/build/components/sidebar-navigation-screen-page/status-label.js +1 -34
  24. package/build/components/sidebar-navigation-screen-page/status-label.js.map +1 -1
  25. package/build/components/sidebar-navigation-screen-patterns/index.js +2 -2
  26. package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  27. package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js +9 -5
  28. package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +1 -1
  29. package/build/components/site-hub/index.js +1 -1
  30. package/build/components/site-hub/index.js.map +1 -1
  31. package/build/components/template-actions/index.js +3 -1
  32. package/build/components/template-actions/index.js.map +1 -1
  33. package/build/components/template-actions/rename-menu-item.js +9 -6
  34. package/build/components/template-actions/rename-menu-item.js.map +1 -1
  35. package/build/hooks/push-changes-to-global-styles/index.js +3 -1
  36. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  37. package/build/utils/use-activate-theme.js +1 -1
  38. package/build/utils/use-activate-theme.js.map +1 -1
  39. package/build-module/components/block-editor/editor-canvas.js +1 -1
  40. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  41. package/build-module/components/create-pattern-modal/index.js +6 -3
  42. package/build-module/components/create-pattern-modal/index.js.map +1 -1
  43. package/build-module/components/page-patterns/duplicate-menu-item.js +147 -0
  44. package/build-module/components/page-patterns/duplicate-menu-item.js.map +1 -0
  45. package/build-module/components/page-patterns/grid-item.js +84 -65
  46. package/build-module/components/page-patterns/grid-item.js.map +1 -1
  47. package/build-module/components/page-patterns/grid.js +22 -15
  48. package/build-module/components/page-patterns/grid.js.map +1 -1
  49. package/build-module/components/page-patterns/header.js +54 -0
  50. package/build-module/components/page-patterns/header.js.map +1 -0
  51. package/build-module/components/page-patterns/index.js +3 -1
  52. package/build-module/components/page-patterns/index.js.map +1 -1
  53. package/build-module/components/page-patterns/patterns-list.js +70 -31
  54. package/build-module/components/page-patterns/patterns-list.js.map +1 -1
  55. package/build-module/components/page-patterns/rename-menu-item.js +97 -0
  56. package/build-module/components/page-patterns/rename-menu-item.js.map +1 -0
  57. package/build-module/components/page-patterns/use-patterns.js +100 -119
  58. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  59. package/build-module/components/sidebar-navigation-screen/index.js +1 -1
  60. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  61. package/build-module/components/sidebar-navigation-screen-page/status-label.js +1 -32
  62. package/build-module/components/sidebar-navigation-screen-page/status-label.js.map +1 -1
  63. package/build-module/components/sidebar-navigation-screen-patterns/index.js +2 -2
  64. package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  65. package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js +9 -5
  66. package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +1 -1
  67. package/build-module/components/site-hub/index.js +1 -1
  68. package/build-module/components/site-hub/index.js.map +1 -1
  69. package/build-module/components/template-actions/index.js +2 -1
  70. package/build-module/components/template-actions/index.js.map +1 -1
  71. package/build-module/components/template-actions/rename-menu-item.js +8 -6
  72. package/build-module/components/template-actions/rename-menu-item.js.map +1 -1
  73. package/build-module/hooks/push-changes-to-global-styles/index.js +4 -2
  74. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  75. package/build-module/utils/use-activate-theme.js +1 -1
  76. package/build-module/utils/use-activate-theme.js.map +1 -1
  77. package/build-style/style-rtl.css +103 -45
  78. package/build-style/style.css +103 -45
  79. package/package.json +14 -14
  80. package/src/components/block-editor/editor-canvas.js +1 -1
  81. package/src/components/create-pattern-modal/index.js +5 -2
  82. package/src/components/header-edit-mode/document-actions/style.scss +4 -0
  83. package/src/components/page-patterns/duplicate-menu-item.js +196 -0
  84. package/src/components/page-patterns/grid-item.js +187 -137
  85. package/src/components/page-patterns/grid.js +35 -22
  86. package/src/components/page-patterns/header.js +69 -0
  87. package/src/components/page-patterns/index.js +6 -1
  88. package/src/components/page-patterns/patterns-list.js +89 -47
  89. package/src/components/page-patterns/rename-menu-item.js +115 -0
  90. package/src/components/page-patterns/style.scss +86 -26
  91. package/src/components/page-patterns/use-patterns.js +96 -167
  92. package/src/components/sidebar-navigation-screen/index.js +1 -1
  93. package/src/components/sidebar-navigation-screen-page/status-label.js +1 -35
  94. package/src/components/sidebar-navigation-screen-patterns/index.js +0 -6
  95. package/src/components/sidebar-navigation-screen-patterns/style.scss +0 -3
  96. package/src/components/sidebar-navigation-screen-patterns/use-my-patterns.js +7 -6
  97. package/src/components/site-hub/index.js +1 -1
  98. package/src/components/template-actions/index.js +2 -1
  99. package/src/components/template-actions/rename-menu-item.js +8 -6
  100. package/src/hooks/push-changes-to-global-styles/index.js +8 -1
  101. package/src/style.scss +10 -12
  102. package/src/utils/use-activate-theme.js +1 -1
@@ -1,27 +1,40 @@
1
- import { createElement, Fragment } from "@wordpress/element";
1
+ import { createElement } from "@wordpress/element";
2
2
 
3
3
  /**
4
4
  * WordPress dependencies
5
5
  */
6
- import { SearchControl, __experimentalHeading as Heading, __experimentalText as Text, __experimentalVStack as VStack, Flex, FlexBlock } from '@wordpress/components';
6
+ import { useState, useDeferredValue, useId } from '@wordpress/element';
7
+ import { SearchControl, __experimentalVStack as VStack, Flex, FlexBlock, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, __experimentalHeading as Heading, __experimentalText as Text } from '@wordpress/components';
7
8
  import { __, isRTL } from '@wordpress/i18n';
8
- import { symbol, chevronLeft, chevronRight } from '@wordpress/icons';
9
+ import { chevronLeft, chevronRight } from '@wordpress/icons';
9
10
  import { privateApis as routerPrivateApis } from '@wordpress/router';
10
- import { useViewportMatch } from '@wordpress/compose';
11
+ import { useViewportMatch, useAsyncList } from '@wordpress/compose';
11
12
  /**
12
13
  * Internal dependencies
13
14
  */
14
15
 
16
+ import PatternsHeader from './header';
15
17
  import Grid from './grid';
16
18
  import NoPatterns from './no-patterns';
17
19
  import usePatterns from './use-patterns';
18
20
  import SidebarButton from '../sidebar-button';
19
21
  import useDebouncedInput from '../../utils/use-debounced-input';
20
22
  import { unlock } from '../../lock-unlock';
23
+ import { SYNC_TYPES, USER_PATTERN_CATEGORY } from './utils';
21
24
  const {
22
25
  useLocation,
23
26
  useHistory
24
27
  } = unlock(routerPrivateApis);
28
+ const SYNC_FILTERS = {
29
+ all: __('All'),
30
+ [SYNC_TYPES.full]: __('Synced'),
31
+ [SYNC_TYPES.unsynced]: __('Standard')
32
+ };
33
+ const SYNC_DESCRIPTIONS = {
34
+ all: '',
35
+ [SYNC_TYPES.full]: __('Patterns that are kept in sync across the site.'),
36
+ [SYNC_TYPES.unsynced]: __('Patterns that can be changed freely without affecting the site.')
37
+ };
25
38
  export default function PatternsList({
26
39
  categoryId,
27
40
  type
@@ -30,15 +43,34 @@ export default function PatternsList({
30
43
  const history = useHistory();
31
44
  const isMobileViewport = useViewportMatch('medium', '<');
32
45
  const [filterValue, setFilterValue, delayedFilterValue] = useDebouncedInput('');
33
- const [patterns, isResolving] = usePatterns(type, categoryId, delayedFilterValue);
46
+ const deferredFilterValue = useDeferredValue(delayedFilterValue);
47
+ const [syncFilter, setSyncFilter] = useState('all');
48
+ const deferredSyncedFilter = useDeferredValue(syncFilter);
34
49
  const {
35
- syncedPatterns,
36
- unsyncedPatterns
37
- } = patterns;
38
- const hasPatterns = !!syncedPatterns.length || !!unsyncedPatterns.length;
50
+ patterns,
51
+ isResolving
52
+ } = usePatterns(type, categoryId, {
53
+ search: deferredFilterValue,
54
+ syncStatus: deferredSyncedFilter === 'all' ? undefined : deferredSyncedFilter
55
+ });
56
+ const id = useId();
57
+ const titleId = `${id}-title`;
58
+ const descriptionId = `${id}-description`;
59
+ const hasPatterns = patterns.length;
60
+ const title = SYNC_FILTERS[syncFilter];
61
+ const description = SYNC_DESCRIPTIONS[syncFilter];
62
+ const shownPatterns = useAsyncList(patterns);
39
63
  return createElement(VStack, {
40
64
  spacing: 6
41
- }, createElement(Flex, null, isMobileViewport && createElement(SidebarButton, {
65
+ }, createElement(PatternsHeader, {
66
+ categoryId: categoryId,
67
+ type: type,
68
+ titleId: titleId,
69
+ descriptionId: descriptionId
70
+ }), createElement(Flex, {
71
+ alignment: "stretch",
72
+ wrap: true
73
+ }, isMobileViewport && createElement(SidebarButton, {
42
74
  icon: isRTL() ? chevronRight : chevronLeft,
43
75
  label: __('Back'),
44
76
  onClick: () => {
@@ -52,36 +84,43 @@ export default function PatternsList({
52
84
  });
53
85
  }
54
86
  }
55
- }), createElement(FlexBlock, null, createElement(SearchControl, {
87
+ }), createElement(FlexBlock, {
88
+ className: "edit-site-patterns__search-block"
89
+ }, createElement(SearchControl, {
56
90
  className: "edit-site-patterns__search",
57
91
  onChange: value => setFilterValue(value),
58
92
  placeholder: __('Search patterns'),
59
93
  label: __('Search patterns'),
60
94
  value: filterValue,
61
95
  __nextHasNoMarginBottom: true
62
- }))), isResolving && __('Loading'), !isResolving && !!syncedPatterns.length && createElement(Fragment, null, createElement(VStack, {
63
- className: "edit-site-patterns__section-header"
64
- }, createElement(Heading, {
65
- level: 4
66
- }, __('Synced')), createElement(Text, {
67
- variant: "muted",
68
- as: "p"
69
- }, __('Patterns that are kept in sync across the site'))), createElement(Grid, {
70
- icon: symbol,
71
- categoryId: categoryId,
72
- label: __('Synced'),
73
- items: syncedPatterns
74
- })), !isResolving && !!unsyncedPatterns.length && createElement(Fragment, null, createElement(VStack, {
96
+ })), categoryId === USER_PATTERN_CATEGORY && createElement(ToggleGroupControl, {
97
+ className: "edit-site-patterns__sync-status-filter",
98
+ hideLabelFromVision: true,
99
+ label: __('Filter by sync status'),
100
+ value: syncFilter,
101
+ isBlock: true,
102
+ onChange: value => setSyncFilter(value),
103
+ __nextHasNoMarginBottom: true
104
+ }, Object.entries(SYNC_FILTERS).map(([key, label]) => createElement(ToggleGroupControlOption, {
105
+ className: "edit-site-patterns__sync-status-filter-option",
106
+ key: key,
107
+ value: key,
108
+ label: label
109
+ })))), syncFilter !== 'all' && createElement(VStack, {
75
110
  className: "edit-site-patterns__section-header"
76
111
  }, createElement(Heading, {
77
- level: 4
78
- }, __('Standard')), createElement(Text, {
112
+ as: "h3",
113
+ level: 4,
114
+ id: titleId
115
+ }, title), description ? createElement(Text, {
79
116
  variant: "muted",
80
- as: "p"
81
- }, __('Patterns that can be changed freely without affecting the site'))), createElement(Grid, {
117
+ as: "p",
118
+ id: descriptionId
119
+ }, description) : null), hasPatterns && createElement(Grid, {
82
120
  categoryId: categoryId,
83
- label: __('Standard patterns'),
84
- items: unsyncedPatterns
85
- })), !isResolving && !hasPatterns && createElement(NoPatterns, null));
121
+ items: shownPatterns,
122
+ "aria-labelledby": titleId,
123
+ "aria-describedby": descriptionId
124
+ }), !isResolving && !hasPatterns && createElement(NoPatterns, null));
86
125
  }
87
126
  //# sourceMappingURL=patterns-list.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/patterns-list.js"],"names":["SearchControl","__experimentalHeading","Heading","__experimentalText","Text","__experimentalVStack","VStack","Flex","FlexBlock","__","isRTL","symbol","chevronLeft","chevronRight","privateApis","routerPrivateApis","useViewportMatch","Grid","NoPatterns","usePatterns","SidebarButton","useDebouncedInput","unlock","useLocation","useHistory","PatternsList","categoryId","type","location","history","isMobileViewport","filterValue","setFilterValue","delayedFilterValue","patterns","isResolving","syncedPatterns","unsyncedPatterns","hasPatterns","length","state","backPath","back","push","path","value"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\n\nimport {\n\tSearchControl,\n\t__experimentalHeading as Heading,\n\t__experimentalText as Text,\n\t__experimentalVStack as VStack,\n\tFlex,\n\tFlexBlock,\n} from '@wordpress/components';\nimport { __, isRTL } from '@wordpress/i18n';\nimport { symbol, chevronLeft, chevronRight } from '@wordpress/icons';\nimport { privateApis as routerPrivateApis } from '@wordpress/router';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport Grid from './grid';\nimport NoPatterns from './no-patterns';\nimport usePatterns from './use-patterns';\nimport SidebarButton from '../sidebar-button';\nimport useDebouncedInput from '../../utils/use-debounced-input';\nimport { unlock } from '../../lock-unlock';\n\nconst { useLocation, useHistory } = unlock( routerPrivateApis );\n\nexport default function PatternsList( { categoryId, type } ) {\n\tconst location = useLocation();\n\tconst history = useHistory();\n\tconst isMobileViewport = useViewportMatch( 'medium', '<' );\n\tconst [ filterValue, setFilterValue, delayedFilterValue ] =\n\t\tuseDebouncedInput( '' );\n\n\tconst [ patterns, isResolving ] = usePatterns(\n\t\ttype,\n\t\tcategoryId,\n\t\tdelayedFilterValue\n\t);\n\n\tconst { syncedPatterns, unsyncedPatterns } = patterns;\n\tconst hasPatterns = !! syncedPatterns.length || !! unsyncedPatterns.length;\n\n\treturn (\n\t\t<VStack spacing={ 6 }>\n\t\t\t<Flex>\n\t\t\t\t{ isMobileViewport && (\n\t\t\t\t\t<SidebarButton\n\t\t\t\t\t\ticon={ isRTL() ? chevronRight : chevronLeft }\n\t\t\t\t\t\tlabel={ __( 'Back' ) }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t// Go back in history if we came from the Patterns page.\n\t\t\t\t\t\t\t// Otherwise push a stack onto the history.\n\t\t\t\t\t\t\tif ( location.state?.backPath === '/patterns' ) {\n\t\t\t\t\t\t\t\thistory.back();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thistory.push( { path: '/patterns' } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t<FlexBlock>\n\t\t\t\t\t<SearchControl\n\t\t\t\t\t\tclassName=\"edit-site-patterns__search\"\n\t\t\t\t\t\tonChange={ ( value ) => setFilterValue( value ) }\n\t\t\t\t\t\tplaceholder={ __( 'Search patterns' ) }\n\t\t\t\t\t\tlabel={ __( 'Search patterns' ) }\n\t\t\t\t\t\tvalue={ filterValue }\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t/>\n\t\t\t\t</FlexBlock>\n\t\t\t</Flex>\n\t\t\t{ isResolving && __( 'Loading' ) }\n\t\t\t{ ! isResolving && !! syncedPatterns.length && (\n\t\t\t\t<>\n\t\t\t\t\t<VStack className=\"edit-site-patterns__section-header\">\n\t\t\t\t\t\t<Heading level={ 4 }>{ __( 'Synced' ) }</Heading>\n\t\t\t\t\t\t<Text variant=\"muted\" as=\"p\">\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Patterns that are kept in sync across the site'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</VStack>\n\t\t\t\t\t<Grid\n\t\t\t\t\t\ticon={ symbol }\n\t\t\t\t\t\tcategoryId={ categoryId }\n\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\titems={ syncedPatterns }\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t{ ! isResolving && !! unsyncedPatterns.length && (\n\t\t\t\t<>\n\t\t\t\t\t<VStack className=\"edit-site-patterns__section-header\">\n\t\t\t\t\t\t<Heading level={ 4 }>{ __( 'Standard' ) }</Heading>\n\t\t\t\t\t\t<Text variant=\"muted\" as=\"p\">\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Patterns that can be changed freely without affecting the site'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</VStack>\n\t\t\t\t\t<Grid\n\t\t\t\t\t\tcategoryId={ categoryId }\n\t\t\t\t\t\tlabel={ __( 'Standard patterns' ) }\n\t\t\t\t\t\titems={ unsyncedPatterns }\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t{ ! isResolving && ! hasPatterns && <NoPatterns /> }\n\t\t</VStack>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/patterns-list.js"],"names":["useState","useDeferredValue","useId","SearchControl","__experimentalVStack","VStack","Flex","FlexBlock","__experimentalToggleGroupControl","ToggleGroupControl","__experimentalToggleGroupControlOption","ToggleGroupControlOption","__experimentalHeading","Heading","__experimentalText","Text","__","isRTL","chevronLeft","chevronRight","privateApis","routerPrivateApis","useViewportMatch","useAsyncList","PatternsHeader","Grid","NoPatterns","usePatterns","SidebarButton","useDebouncedInput","unlock","SYNC_TYPES","USER_PATTERN_CATEGORY","useLocation","useHistory","SYNC_FILTERS","all","full","unsynced","SYNC_DESCRIPTIONS","PatternsList","categoryId","type","location","history","isMobileViewport","filterValue","setFilterValue","delayedFilterValue","deferredFilterValue","syncFilter","setSyncFilter","deferredSyncedFilter","patterns","isResolving","search","syncStatus","undefined","id","titleId","descriptionId","hasPatterns","length","title","description","shownPatterns","state","backPath","back","push","path","value","Object","entries","map","key","label"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useDeferredValue, useId } from '@wordpress/element';\nimport {\n\tSearchControl,\n\t__experimentalVStack as VStack,\n\tFlex,\n\tFlexBlock,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalHeading as Heading,\n\t__experimentalText as Text,\n} from '@wordpress/components';\nimport { __, isRTL } from '@wordpress/i18n';\nimport { chevronLeft, chevronRight } from '@wordpress/icons';\nimport { privateApis as routerPrivateApis } from '@wordpress/router';\nimport { useViewportMatch, useAsyncList } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport PatternsHeader from './header';\nimport Grid from './grid';\nimport NoPatterns from './no-patterns';\nimport usePatterns from './use-patterns';\nimport SidebarButton from '../sidebar-button';\nimport useDebouncedInput from '../../utils/use-debounced-input';\nimport { unlock } from '../../lock-unlock';\nimport { SYNC_TYPES, USER_PATTERN_CATEGORY } from './utils';\n\nconst { useLocation, useHistory } = unlock( routerPrivateApis );\n\nconst SYNC_FILTERS = {\n\tall: __( 'All' ),\n\t[ SYNC_TYPES.full ]: __( 'Synced' ),\n\t[ SYNC_TYPES.unsynced ]: __( 'Standard' ),\n};\n\nconst SYNC_DESCRIPTIONS = {\n\tall: '',\n\t[ SYNC_TYPES.full ]: __(\n\t\t'Patterns that are kept in sync across the site.'\n\t),\n\t[ SYNC_TYPES.unsynced ]: __(\n\t\t'Patterns that can be changed freely without affecting the site.'\n\t),\n};\n\nexport default function PatternsList( { categoryId, type } ) {\n\tconst location = useLocation();\n\tconst history = useHistory();\n\tconst isMobileViewport = useViewportMatch( 'medium', '<' );\n\tconst [ filterValue, setFilterValue, delayedFilterValue ] =\n\t\tuseDebouncedInput( '' );\n\tconst deferredFilterValue = useDeferredValue( delayedFilterValue );\n\n\tconst [ syncFilter, setSyncFilter ] = useState( 'all' );\n\tconst deferredSyncedFilter = useDeferredValue( syncFilter );\n\tconst { patterns, isResolving } = usePatterns( type, categoryId, {\n\t\tsearch: deferredFilterValue,\n\t\tsyncStatus:\n\t\t\tdeferredSyncedFilter === 'all' ? undefined : deferredSyncedFilter,\n\t} );\n\n\tconst id = useId();\n\tconst titleId = `${ id }-title`;\n\tconst descriptionId = `${ id }-description`;\n\n\tconst hasPatterns = patterns.length;\n\tconst title = SYNC_FILTERS[ syncFilter ];\n\tconst description = SYNC_DESCRIPTIONS[ syncFilter ];\n\tconst shownPatterns = useAsyncList( patterns );\n\n\treturn (\n\t\t<VStack spacing={ 6 }>\n\t\t\t<PatternsHeader\n\t\t\t\tcategoryId={ categoryId }\n\t\t\t\ttype={ type }\n\t\t\t\ttitleId={ titleId }\n\t\t\t\tdescriptionId={ descriptionId }\n\t\t\t/>\n\n\t\t\t<Flex alignment=\"stretch\" wrap>\n\t\t\t\t{ isMobileViewport && (\n\t\t\t\t\t<SidebarButton\n\t\t\t\t\t\ticon={ isRTL() ? chevronRight : chevronLeft }\n\t\t\t\t\t\tlabel={ __( 'Back' ) }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t// Go back in history if we came from the Patterns page.\n\t\t\t\t\t\t\t// Otherwise push a stack onto the history.\n\t\t\t\t\t\t\tif ( location.state?.backPath === '/patterns' ) {\n\t\t\t\t\t\t\t\thistory.back();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thistory.push( { path: '/patterns' } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t<FlexBlock className=\"edit-site-patterns__search-block\">\n\t\t\t\t\t<SearchControl\n\t\t\t\t\t\tclassName=\"edit-site-patterns__search\"\n\t\t\t\t\t\tonChange={ ( value ) => setFilterValue( value ) }\n\t\t\t\t\t\tplaceholder={ __( 'Search patterns' ) }\n\t\t\t\t\t\tlabel={ __( 'Search patterns' ) }\n\t\t\t\t\t\tvalue={ filterValue }\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t/>\n\t\t\t\t</FlexBlock>\n\t\t\t\t{ categoryId === USER_PATTERN_CATEGORY && (\n\t\t\t\t\t<ToggleGroupControl\n\t\t\t\t\t\tclassName=\"edit-site-patterns__sync-status-filter\"\n\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\tlabel={ __( 'Filter by sync status' ) }\n\t\t\t\t\t\tvalue={ syncFilter }\n\t\t\t\t\t\tisBlock\n\t\t\t\t\t\tonChange={ ( value ) => setSyncFilter( value ) }\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t>\n\t\t\t\t\t\t{ Object.entries( SYNC_FILTERS ).map(\n\t\t\t\t\t\t\t( [ key, label ] ) => (\n\t\t\t\t\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\t\t\t\t\tclassName=\"edit-site-patterns__sync-status-filter-option\"\n\t\t\t\t\t\t\t\t\tkey={ key }\n\t\t\t\t\t\t\t\t\tvalue={ key }\n\t\t\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) }\n\t\t\t\t\t</ToggleGroupControl>\n\t\t\t\t) }\n\t\t\t</Flex>\n\t\t\t{ syncFilter !== 'all' && (\n\t\t\t\t<VStack className=\"edit-site-patterns__section-header\">\n\t\t\t\t\t<Heading as=\"h3\" level={ 4 } id={ titleId }>\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</Heading>\n\t\t\t\t\t{ description ? (\n\t\t\t\t\t\t<Text variant=\"muted\" as=\"p\" id={ descriptionId }>\n\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : null }\n\t\t\t\t</VStack>\n\t\t\t) }\n\t\t\t{ hasPatterns && (\n\t\t\t\t<Grid\n\t\t\t\t\tcategoryId={ categoryId }\n\t\t\t\t\titems={ shownPatterns }\n\t\t\t\t\taria-labelledby={ titleId }\n\t\t\t\t\taria-describedby={ descriptionId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! isResolving && ! hasPatterns && <NoPatterns /> }\n\t\t</VStack>\n\t);\n}\n"]}
@@ -0,0 +1,97 @@
1
+ import { createElement, Fragment } from "@wordpress/element";
2
+
3
+ /**
4
+ * WordPress dependencies
5
+ */
6
+ import { Button, MenuItem, Modal, TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack } from '@wordpress/components';
7
+ import { store as coreStore } from '@wordpress/core-data';
8
+ import { useDispatch } from '@wordpress/data';
9
+ import { useState } from '@wordpress/element';
10
+ import { __ } from '@wordpress/i18n';
11
+ import { store as noticesStore } from '@wordpress/notices';
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+
16
+ import { TEMPLATE_PARTS } from './utils';
17
+ export default function RenameMenuItem({
18
+ item,
19
+ onClose
20
+ }) {
21
+ const [title, setTitle] = useState(() => item.title);
22
+ const [isModalOpen, setIsModalOpen] = useState(false);
23
+ const {
24
+ editEntityRecord,
25
+ saveEditedEntityRecord
26
+ } = useDispatch(coreStore);
27
+ const {
28
+ createSuccessNotice,
29
+ createErrorNotice
30
+ } = useDispatch(noticesStore);
31
+
32
+ if (item.type === TEMPLATE_PARTS && !item.isCustom) {
33
+ return null;
34
+ }
35
+
36
+ async function onRename(event) {
37
+ event.preventDefault();
38
+
39
+ try {
40
+ await editEntityRecord('postType', item.type, item.id, {
41
+ title
42
+ }); // Update state before saving rerenders the list.
43
+
44
+ setTitle('');
45
+ setIsModalOpen(false);
46
+ onClose(); // Persist edited entity.
47
+
48
+ await saveEditedEntityRecord('postType', item.type, item.id, {
49
+ throwOnError: true
50
+ });
51
+ createSuccessNotice(__('Entity renamed.'), {
52
+ type: 'snackbar'
53
+ });
54
+ } catch (error) {
55
+ const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : __('An error occurred while renaming the entity.');
56
+ createErrorNotice(errorMessage, {
57
+ type: 'snackbar'
58
+ });
59
+ }
60
+ }
61
+
62
+ return createElement(Fragment, null, createElement(MenuItem, {
63
+ onClick: () => {
64
+ setIsModalOpen(true);
65
+ setTitle(item.title);
66
+ }
67
+ }, __('Rename')), isModalOpen && createElement(Modal, {
68
+ title: __('Rename'),
69
+ onRequestClose: () => {
70
+ setIsModalOpen(false);
71
+ onClose();
72
+ },
73
+ overlayClassName: "edit-site-list__rename_modal"
74
+ }, createElement("form", {
75
+ onSubmit: onRename
76
+ }, createElement(VStack, {
77
+ spacing: "5"
78
+ }, createElement(TextControl, {
79
+ __nextHasNoMarginBottom: true,
80
+ label: __('Name'),
81
+ value: title,
82
+ onChange: setTitle,
83
+ required: true
84
+ }), createElement(HStack, {
85
+ justify: "right"
86
+ }, createElement(Button, {
87
+ variant: "tertiary",
88
+ onClick: () => {
89
+ setIsModalOpen(false);
90
+ onClose();
91
+ }
92
+ }, __('Cancel')), createElement(Button, {
93
+ variant: "primary",
94
+ type: "submit"
95
+ }, __('Save')))))));
96
+ }
97
+ //# sourceMappingURL=rename-menu-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/rename-menu-item.js"],"names":["Button","MenuItem","Modal","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","store","coreStore","useDispatch","useState","__","noticesStore","TEMPLATE_PARTS","RenameMenuItem","item","onClose","title","setTitle","isModalOpen","setIsModalOpen","editEntityRecord","saveEditedEntityRecord","createSuccessNotice","createErrorNotice","type","isCustom","onRename","event","preventDefault","id","throwOnError","error","errorMessage","message","code"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tMenuItem,\n\tModal,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDispatch } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { TEMPLATE_PARTS } from './utils';\n\nexport default function RenameMenuItem( { item, onClose } ) {\n\tconst [ title, setTitle ] = useState( () => item.title );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\n\tconst { editEntityRecord, saveEditedEntityRecord } =\n\t\tuseDispatch( coreStore );\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tif ( item.type === TEMPLATE_PARTS && ! item.isCustom ) {\n\t\treturn null;\n\t}\n\n\tasync function onRename( event ) {\n\t\tevent.preventDefault();\n\n\t\ttry {\n\t\t\tawait editEntityRecord( 'postType', item.type, item.id, { title } );\n\n\t\t\t// Update state before saving rerenders the list.\n\t\t\tsetTitle( '' );\n\t\t\tsetIsModalOpen( false );\n\t\t\tonClose();\n\n\t\t\t// Persist edited entity.\n\t\t\tawait saveEditedEntityRecord( 'postType', item.type, item.id, {\n\t\t\t\tthrowOnError: true,\n\t\t\t} );\n\n\t\t\tcreateSuccessNotice( __( 'Entity renamed.' ), {\n\t\t\t\ttype: 'snackbar',\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: __( 'An error occurred while renaming the entity.' );\n\n\t\t\tcreateErrorNotice( errorMessage, { type: 'snackbar' } );\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tsetIsModalOpen( true );\n\t\t\t\t\tsetTitle( item.title );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Rename' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Rename' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"edit-site-list__rename_modal\"\n\t\t\t\t>\n\t\t\t\t\t<form onSubmit={ onRename }>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\tonClose();\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{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -4,12 +4,12 @@
4
4
  import { parse } from '@wordpress/blocks';
5
5
  import { useSelect } from '@wordpress/data';
6
6
  import { store as coreStore } from '@wordpress/core-data';
7
- import { useMemo } from '@wordpress/element';
7
+ import { decodeEntities } from '@wordpress/html-entities';
8
8
  /**
9
9
  * Internal dependencies
10
10
  */
11
11
 
12
- import { CORE_PATTERN_SOURCES, PATTERNS, SYNC_TYPES, TEMPLATE_PARTS, USER_PATTERNS, USER_PATTERN_CATEGORY, filterOutDuplicatesByName } from './utils';
12
+ import { CORE_PATTERN_SOURCES, PATTERNS, SYNC_TYPES, TEMPLATE_PARTS, USER_PATTERNS, filterOutDuplicatesByName } from './utils';
13
13
  import { unlock } from '../../lock-unlock';
14
14
  import { searchItems } from './search-items';
15
15
  import { store as editSiteStore } from '../../store';
@@ -21,84 +21,68 @@ const templatePartToPattern = templatePart => ({
21
21
  blocks: parse(templatePart.content.raw),
22
22
  categories: [templatePart.area],
23
23
  description: templatePart.description || '',
24
+ isCustom: templatePart.source === 'custom',
24
25
  keywords: templatePart.keywords || [],
26
+ id: createTemplatePartId(templatePart.theme, templatePart.slug),
25
27
  name: createTemplatePartId(templatePart.theme, templatePart.slug),
26
- title: templatePart.title.rendered,
28
+ title: decodeEntities(templatePart.title.rendered),
27
29
  type: templatePart.type,
28
30
  templatePart
29
31
  });
30
32
 
31
33
  const templatePartHasCategory = (item, category) => item.templatePart.area === category;
32
34
 
33
- const useTemplatePartsAsPatterns = (categoryId, postType = TEMPLATE_PARTS, filterValue = '') => {
34
- const {
35
- templateParts,
36
- isResolving
37
- } = useSelect(select => {
38
- if (postType !== TEMPLATE_PARTS) {
39
- return {
40
- templateParts: EMPTY_PATTERN_LIST,
41
- isResolving: false
42
- };
43
- }
44
-
45
- const {
46
- getEntityRecords,
47
- isResolving: _isResolving
48
- } = select(coreStore);
49
- const query = {
50
- per_page: -1
51
- };
52
- const rawTemplateParts = getEntityRecords('postType', postType, query);
53
- const partsAsPatterns = rawTemplateParts?.map(templatePart => templatePartToPattern(templatePart));
54
- return {
55
- templateParts: partsAsPatterns,
56
- isResolving: _isResolving('getEntityRecords', ['postType', 'wp_template_part', query])
57
- };
58
- }, [postType]);
59
- const filteredTemplateParts = useMemo(() => {
60
- if (!templateParts) {
61
- return EMPTY_PATTERN_LIST;
62
- }
35
+ const selectTemplatePartsAsPatterns = (select, {
36
+ categoryId,
37
+ search = ''
38
+ } = {}) => {
39
+ var _getEntityRecords;
63
40
 
64
- return searchItems(templateParts, filterValue, {
65
- categoryId,
66
- hasCategory: templatePartHasCategory
67
- });
68
- }, [templateParts, filterValue, categoryId]);
41
+ const {
42
+ getEntityRecords,
43
+ getIsResolving
44
+ } = select(coreStore);
45
+ const query = {
46
+ per_page: -1
47
+ };
48
+ const rawTemplateParts = (_getEntityRecords = getEntityRecords('postType', TEMPLATE_PARTS, query)) !== null && _getEntityRecords !== void 0 ? _getEntityRecords : EMPTY_PATTERN_LIST;
49
+ const templateParts = rawTemplateParts.map(templatePart => templatePartToPattern(templatePart));
50
+ const isResolving = getIsResolving('getEntityRecords', ['postType', 'wp_template_part', query]);
51
+ const patterns = searchItems(templateParts, search, {
52
+ categoryId,
53
+ hasCategory: templatePartHasCategory
54
+ });
69
55
  return {
70
- templateParts: filteredTemplateParts,
56
+ patterns,
71
57
  isResolving
72
58
  };
73
59
  };
74
60
 
75
- const useThemePatterns = (categoryId, postType = PATTERNS, filterValue = '') => {
76
- const blockPatterns = useSelect(select => {
77
- var _settings$__experimen;
61
+ const selectThemePatterns = (select, {
62
+ categoryId,
63
+ search = ''
64
+ } = {}) => {
65
+ var _settings$__experimen;
78
66
 
79
- const {
80
- getSettings
81
- } = unlock(select(editSiteStore));
82
- const settings = getSettings();
83
- return (_settings$__experimen = settings.__experimentalAdditionalBlockPatterns) !== null && _settings$__experimen !== void 0 ? _settings$__experimen : settings.__experimentalBlockPatterns;
84
- });
85
- const restBlockPatterns = useSelect(select => select(coreStore).getBlockPatterns());
86
- const patterns = useMemo(() => [...(blockPatterns || []), ...(restBlockPatterns || [])].filter(pattern => !CORE_PATTERN_SOURCES.includes(pattern.source)).filter(filterOutDuplicatesByName).map(pattern => ({ ...pattern,
67
+ const {
68
+ getSettings
69
+ } = unlock(select(editSiteStore));
70
+ const settings = getSettings();
71
+ const blockPatterns = (_settings$__experimen = settings.__experimentalAdditionalBlockPatterns) !== null && _settings$__experimen !== void 0 ? _settings$__experimen : settings.__experimentalBlockPatterns;
72
+ const restBlockPatterns = select(coreStore).getBlockPatterns();
73
+ let patterns = [...(blockPatterns || []), ...(restBlockPatterns || [])].filter(pattern => !CORE_PATTERN_SOURCES.includes(pattern.source)).filter(filterOutDuplicatesByName).map(pattern => ({ ...pattern,
87
74
  keywords: pattern.keywords || [],
88
75
  type: 'pattern',
89
76
  blocks: parse(pattern.content)
90
- })), [blockPatterns, restBlockPatterns]);
91
- const filteredPatterns = useMemo(() => {
92
- if (postType !== PATTERNS) {
93
- return EMPTY_PATTERN_LIST;
94
- }
95
-
96
- return searchItems(patterns, filterValue, {
97
- categoryId,
98
- hasCategory: (item, currentCategory) => item.categories?.includes(currentCategory)
99
- });
100
- }, [patterns, filterValue, categoryId, postType]);
101
- return filteredPatterns;
77
+ }));
78
+ patterns = searchItems(patterns, search, {
79
+ categoryId,
80
+ hasCategory: (item, currentCategory) => item.categories?.includes(currentCategory)
81
+ });
82
+ return {
83
+ patterns,
84
+ isResolving: false
85
+ };
102
86
  };
103
87
 
104
88
  const reusableBlockToPattern = reusableBlock => ({
@@ -112,67 +96,64 @@ const reusableBlockToPattern = reusableBlock => ({
112
96
  reusableBlock
113
97
  });
114
98
 
115
- const useUserPatterns = (categoryId, categoryType = PATTERNS, filterValue = '') => {
116
- const postType = categoryType === PATTERNS ? USER_PATTERNS : categoryType;
117
- const unfilteredPatterns = useSelect(select => {
118
- if (postType !== USER_PATTERNS || categoryId !== USER_PATTERN_CATEGORY) {
119
- return EMPTY_PATTERN_LIST;
120
- }
121
-
122
- const {
123
- getEntityRecords
124
- } = select(coreStore);
125
- const records = getEntityRecords('postType', postType, {
126
- per_page: -1
127
- });
128
-
129
- if (!records) {
130
- return EMPTY_PATTERN_LIST;
131
- }
132
-
133
- return records.map(record => reusableBlockToPattern(record));
134
- }, [postType, categoryId]);
135
- const filteredPatterns = useMemo(() => {
136
- if (!unfilteredPatterns.length) {
137
- return EMPTY_PATTERN_LIST;
138
- }
139
-
140
- return searchItems(unfilteredPatterns, filterValue, {
141
- // We exit user pattern retrieval early if we aren't in the
142
- // catch-all category for user created patterns, so it has
143
- // to be in the category.
144
- hasCategory: () => true
145
- });
146
- }, [unfilteredPatterns, filterValue]);
147
- const patterns = {
148
- syncedPatterns: [],
149
- unsyncedPatterns: []
99
+ const selectUserPatterns = (select, {
100
+ search = '',
101
+ syncStatus
102
+ } = {}) => {
103
+ const {
104
+ getEntityRecords,
105
+ getIsResolving
106
+ } = select(coreStore);
107
+ const query = {
108
+ per_page: -1
150
109
  };
151
- filteredPatterns.forEach(pattern => {
152
- if (pattern.syncStatus === SYNC_TYPES.full) {
153
- patterns.syncedPatterns.push(pattern);
154
- } else {
155
- patterns.unsyncedPatterns.push(pattern);
156
- }
110
+ const records = getEntityRecords('postType', USER_PATTERNS, query);
111
+ let patterns = records ? records.map(record => reusableBlockToPattern(record)) : EMPTY_PATTERN_LIST;
112
+ const isResolving = getIsResolving('getEntityRecords', ['postType', USER_PATTERNS, query]);
113
+
114
+ if (syncStatus) {
115
+ patterns = patterns.filter(pattern => pattern.syncStatus === syncStatus);
116
+ }
117
+
118
+ patterns = searchItems(patterns, search, {
119
+ // We exit user pattern retrieval early if we aren't in the
120
+ // catch-all category for user created patterns, so it has
121
+ // to be in the category.
122
+ hasCategory: () => true
157
123
  });
158
- return patterns;
159
- };
160
-
161
- export const usePatterns = (categoryType, categoryId, filterValue) => {
162
- const blockPatterns = useThemePatterns(categoryId, categoryType, filterValue);
163
- const {
164
- syncedPatterns = [],
165
- unsyncedPatterns = []
166
- } = useUserPatterns(categoryId, categoryType, filterValue);
167
- const {
168
- templateParts,
124
+ return {
125
+ patterns,
169
126
  isResolving
170
- } = useTemplatePartsAsPatterns(categoryId, categoryType, filterValue);
171
- const patterns = {
172
- syncedPatterns: [...templateParts, ...syncedPatterns],
173
- unsyncedPatterns: [...blockPatterns, ...unsyncedPatterns]
174
127
  };
175
- return [patterns, isResolving];
128
+ };
129
+
130
+ export const usePatterns = (categoryType, categoryId, {
131
+ search = '',
132
+ syncStatus
133
+ }) => {
134
+ return useSelect(select => {
135
+ if (categoryType === TEMPLATE_PARTS) {
136
+ return selectTemplatePartsAsPatterns(select, {
137
+ categoryId,
138
+ search
139
+ });
140
+ } else if (categoryType === PATTERNS) {
141
+ return selectThemePatterns(select, {
142
+ categoryId,
143
+ search
144
+ });
145
+ } else if (categoryType === USER_PATTERNS) {
146
+ return selectUserPatterns(select, {
147
+ search,
148
+ syncStatus
149
+ });
150
+ }
151
+
152
+ return {
153
+ patterns: EMPTY_PATTERN_LIST,
154
+ isResolving: false
155
+ };
156
+ }, [categoryId, categoryType, search, syncStatus]);
176
157
  };
177
158
  export default usePatterns;
178
159
  //# sourceMappingURL=use-patterns.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/use-patterns.js"],"names":["parse","useSelect","store","coreStore","useMemo","CORE_PATTERN_SOURCES","PATTERNS","SYNC_TYPES","TEMPLATE_PARTS","USER_PATTERNS","USER_PATTERN_CATEGORY","filterOutDuplicatesByName","unlock","searchItems","editSiteStore","EMPTY_PATTERN_LIST","createTemplatePartId","theme","slug","templatePartToPattern","templatePart","blocks","content","raw","categories","area","description","keywords","name","title","rendered","type","templatePartHasCategory","item","category","useTemplatePartsAsPatterns","categoryId","postType","filterValue","templateParts","isResolving","select","getEntityRecords","_isResolving","query","per_page","rawTemplateParts","partsAsPatterns","map","filteredTemplateParts","hasCategory","useThemePatterns","blockPatterns","getSettings","settings","__experimentalAdditionalBlockPatterns","__experimentalBlockPatterns","restBlockPatterns","getBlockPatterns","patterns","filter","pattern","includes","source","filteredPatterns","currentCategory","reusableBlockToPattern","reusableBlock","wp_pattern","id","syncStatus","wp_pattern_sync_status","full","useUserPatterns","categoryType","unfilteredPatterns","records","record","length","syncedPatterns","unsyncedPatterns","forEach","push","usePatterns"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { parse } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tCORE_PATTERN_SOURCES,\n\tPATTERNS,\n\tSYNC_TYPES,\n\tTEMPLATE_PARTS,\n\tUSER_PATTERNS,\n\tUSER_PATTERN_CATEGORY,\n\tfilterOutDuplicatesByName,\n} from './utils';\nimport { unlock } from '../../lock-unlock';\nimport { searchItems } from './search-items';\nimport { store as editSiteStore } from '../../store';\n\nconst EMPTY_PATTERN_LIST = [];\n\nconst createTemplatePartId = ( theme, slug ) =>\n\ttheme && slug ? theme + '//' + slug : null;\n\nconst templatePartToPattern = ( templatePart ) => ( {\n\tblocks: parse( templatePart.content.raw ),\n\tcategories: [ templatePart.area ],\n\tdescription: templatePart.description || '',\n\tkeywords: templatePart.keywords || [],\n\tname: createTemplatePartId( templatePart.theme, templatePart.slug ),\n\ttitle: templatePart.title.rendered,\n\ttype: templatePart.type,\n\ttemplatePart,\n} );\n\nconst templatePartHasCategory = ( item, category ) =>\n\titem.templatePart.area === category;\n\nconst useTemplatePartsAsPatterns = (\n\tcategoryId,\n\tpostType = TEMPLATE_PARTS,\n\tfilterValue = ''\n) => {\n\tconst { templateParts, isResolving } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( postType !== TEMPLATE_PARTS ) {\n\t\t\t\treturn {\n\t\t\t\t\ttemplateParts: EMPTY_PATTERN_LIST,\n\t\t\t\t\tisResolving: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { getEntityRecords, isResolving: _isResolving } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst query = { per_page: -1 };\n\t\t\tconst rawTemplateParts = getEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\tquery\n\t\t\t);\n\t\t\tconst partsAsPatterns = rawTemplateParts?.map( ( templatePart ) =>\n\t\t\t\ttemplatePartToPattern( templatePart )\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ttemplateParts: partsAsPatterns,\n\t\t\t\tisResolving: _isResolving( 'getEntityRecords', [\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_template_part',\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ postType ]\n\t);\n\n\tconst filteredTemplateParts = useMemo( () => {\n\t\tif ( ! templateParts ) {\n\t\t\treturn EMPTY_PATTERN_LIST;\n\t\t}\n\n\t\treturn searchItems( templateParts, filterValue, {\n\t\t\tcategoryId,\n\t\t\thasCategory: templatePartHasCategory,\n\t\t} );\n\t}, [ templateParts, filterValue, categoryId ] );\n\n\treturn { templateParts: filteredTemplateParts, isResolving };\n};\n\nconst useThemePatterns = (\n\tcategoryId,\n\tpostType = PATTERNS,\n\tfilterValue = ''\n) => {\n\tconst blockPatterns = useSelect( ( select ) => {\n\t\tconst { getSettings } = unlock( select( editSiteStore ) );\n\t\tconst settings = getSettings();\n\t\treturn (\n\t\t\tsettings.__experimentalAdditionalBlockPatterns ??\n\t\t\tsettings.__experimentalBlockPatterns\n\t\t);\n\t} );\n\n\tconst restBlockPatterns = useSelect( ( select ) =>\n\t\tselect( coreStore ).getBlockPatterns()\n\t);\n\n\tconst patterns = useMemo(\n\t\t() =>\n\t\t\t[ ...( blockPatterns || [] ), ...( restBlockPatterns || [] ) ]\n\t\t\t\t.filter(\n\t\t\t\t\t( pattern ) =>\n\t\t\t\t\t\t! CORE_PATTERN_SOURCES.includes( pattern.source )\n\t\t\t\t)\n\t\t\t\t.filter( filterOutDuplicatesByName )\n\t\t\t\t.map( ( pattern ) => ( {\n\t\t\t\t\t...pattern,\n\t\t\t\t\tkeywords: pattern.keywords || [],\n\t\t\t\t\ttype: 'pattern',\n\t\t\t\t\tblocks: parse( pattern.content ),\n\t\t\t\t} ) ),\n\t\t[ blockPatterns, restBlockPatterns ]\n\t);\n\n\tconst filteredPatterns = useMemo( () => {\n\t\tif ( postType !== PATTERNS ) {\n\t\t\treturn EMPTY_PATTERN_LIST;\n\t\t}\n\n\t\treturn searchItems( patterns, filterValue, {\n\t\t\tcategoryId,\n\t\t\thasCategory: ( item, currentCategory ) =>\n\t\t\t\titem.categories?.includes( currentCategory ),\n\t\t} );\n\t}, [ patterns, filterValue, categoryId, postType ] );\n\n\treturn filteredPatterns;\n};\n\nconst reusableBlockToPattern = ( reusableBlock ) => ( {\n\tblocks: parse( reusableBlock.content.raw ),\n\tcategories: reusableBlock.wp_pattern,\n\tid: reusableBlock.id,\n\tname: reusableBlock.slug,\n\tsyncStatus: reusableBlock.wp_pattern_sync_status || SYNC_TYPES.full,\n\ttitle: reusableBlock.title.raw,\n\ttype: reusableBlock.type,\n\treusableBlock,\n} );\n\nconst useUserPatterns = (\n\tcategoryId,\n\tcategoryType = PATTERNS,\n\tfilterValue = ''\n) => {\n\tconst postType = categoryType === PATTERNS ? USER_PATTERNS : categoryType;\n\tconst unfilteredPatterns = useSelect(\n\t\t( select ) => {\n\t\t\tif (\n\t\t\t\tpostType !== USER_PATTERNS ||\n\t\t\t\tcategoryId !== USER_PATTERN_CATEGORY\n\t\t\t) {\n\t\t\t\treturn EMPTY_PATTERN_LIST;\n\t\t\t}\n\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\t\t\tconst records = getEntityRecords( 'postType', postType, {\n\t\t\t\tper_page: -1,\n\t\t\t} );\n\n\t\t\tif ( ! records ) {\n\t\t\t\treturn EMPTY_PATTERN_LIST;\n\t\t\t}\n\n\t\t\treturn records.map( ( record ) =>\n\t\t\t\treusableBlockToPattern( record )\n\t\t\t);\n\t\t},\n\t\t[ postType, categoryId ]\n\t);\n\n\tconst filteredPatterns = useMemo( () => {\n\t\tif ( ! unfilteredPatterns.length ) {\n\t\t\treturn EMPTY_PATTERN_LIST;\n\t\t}\n\n\t\treturn searchItems( unfilteredPatterns, filterValue, {\n\t\t\t// We exit user pattern retrieval early if we aren't in the\n\t\t\t// catch-all category for user created patterns, so it has\n\t\t\t// to be in the category.\n\t\t\thasCategory: () => true,\n\t\t} );\n\t}, [ unfilteredPatterns, filterValue ] );\n\n\tconst patterns = { syncedPatterns: [], unsyncedPatterns: [] };\n\n\tfilteredPatterns.forEach( ( pattern ) => {\n\t\tif ( pattern.syncStatus === SYNC_TYPES.full ) {\n\t\t\tpatterns.syncedPatterns.push( pattern );\n\t\t} else {\n\t\t\tpatterns.unsyncedPatterns.push( pattern );\n\t\t}\n\t} );\n\n\treturn patterns;\n};\n\nexport const usePatterns = ( categoryType, categoryId, filterValue ) => {\n\tconst blockPatterns = useThemePatterns(\n\t\tcategoryId,\n\t\tcategoryType,\n\t\tfilterValue\n\t);\n\n\tconst { syncedPatterns = [], unsyncedPatterns = [] } = useUserPatterns(\n\t\tcategoryId,\n\t\tcategoryType,\n\t\tfilterValue\n\t);\n\n\tconst { templateParts, isResolving } = useTemplatePartsAsPatterns(\n\t\tcategoryId,\n\t\tcategoryType,\n\t\tfilterValue\n\t);\n\n\tconst patterns = {\n\t\tsyncedPatterns: [ ...templateParts, ...syncedPatterns ],\n\t\tunsyncedPatterns: [ ...blockPatterns, ...unsyncedPatterns ],\n\t};\n\n\treturn [ patterns, isResolving ];\n};\n\nexport default usePatterns;\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/use-patterns.js"],"names":["parse","useSelect","store","coreStore","decodeEntities","CORE_PATTERN_SOURCES","PATTERNS","SYNC_TYPES","TEMPLATE_PARTS","USER_PATTERNS","filterOutDuplicatesByName","unlock","searchItems","editSiteStore","EMPTY_PATTERN_LIST","createTemplatePartId","theme","slug","templatePartToPattern","templatePart","blocks","content","raw","categories","area","description","isCustom","source","keywords","id","name","title","rendered","type","templatePartHasCategory","item","category","selectTemplatePartsAsPatterns","select","categoryId","search","getEntityRecords","getIsResolving","query","per_page","rawTemplateParts","templateParts","map","isResolving","patterns","hasCategory","selectThemePatterns","getSettings","settings","blockPatterns","__experimentalAdditionalBlockPatterns","__experimentalBlockPatterns","restBlockPatterns","getBlockPatterns","filter","pattern","includes","currentCategory","reusableBlockToPattern","reusableBlock","wp_pattern","syncStatus","wp_pattern_sync_status","full","selectUserPatterns","records","record","usePatterns","categoryType"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { parse } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\n\n/**\n * Internal dependencies\n */\nimport {\n\tCORE_PATTERN_SOURCES,\n\tPATTERNS,\n\tSYNC_TYPES,\n\tTEMPLATE_PARTS,\n\tUSER_PATTERNS,\n\tfilterOutDuplicatesByName,\n} from './utils';\nimport { unlock } from '../../lock-unlock';\nimport { searchItems } from './search-items';\nimport { store as editSiteStore } from '../../store';\n\nconst EMPTY_PATTERN_LIST = [];\n\nconst createTemplatePartId = ( theme, slug ) =>\n\ttheme && slug ? theme + '//' + slug : null;\n\nconst templatePartToPattern = ( templatePart ) => ( {\n\tblocks: parse( templatePart.content.raw ),\n\tcategories: [ templatePart.area ],\n\tdescription: templatePart.description || '',\n\tisCustom: templatePart.source === 'custom',\n\tkeywords: templatePart.keywords || [],\n\tid: createTemplatePartId( templatePart.theme, templatePart.slug ),\n\tname: createTemplatePartId( templatePart.theme, templatePart.slug ),\n\ttitle: decodeEntities( templatePart.title.rendered ),\n\ttype: templatePart.type,\n\ttemplatePart,\n} );\n\nconst templatePartHasCategory = ( item, category ) =>\n\titem.templatePart.area === category;\n\nconst selectTemplatePartsAsPatterns = (\n\tselect,\n\t{ categoryId, search = '' } = {}\n) => {\n\tconst { getEntityRecords, getIsResolving } = select( coreStore );\n\tconst query = { per_page: -1 };\n\tconst rawTemplateParts =\n\t\tgetEntityRecords( 'postType', TEMPLATE_PARTS, query ) ??\n\t\tEMPTY_PATTERN_LIST;\n\tconst templateParts = rawTemplateParts.map( ( templatePart ) =>\n\t\ttemplatePartToPattern( templatePart )\n\t);\n\n\tconst isResolving = getIsResolving( 'getEntityRecords', [\n\t\t'postType',\n\t\t'wp_template_part',\n\t\tquery,\n\t] );\n\n\tconst patterns = searchItems( templateParts, search, {\n\t\tcategoryId,\n\t\thasCategory: templatePartHasCategory,\n\t} );\n\n\treturn { patterns, isResolving };\n};\n\nconst selectThemePatterns = ( select, { categoryId, search = '' } = {} ) => {\n\tconst { getSettings } = unlock( select( editSiteStore ) );\n\tconst settings = getSettings();\n\tconst blockPatterns =\n\t\tsettings.__experimentalAdditionalBlockPatterns ??\n\t\tsettings.__experimentalBlockPatterns;\n\n\tconst restBlockPatterns = select( coreStore ).getBlockPatterns();\n\n\tlet patterns = [\n\t\t...( blockPatterns || [] ),\n\t\t...( restBlockPatterns || [] ),\n\t]\n\t\t.filter(\n\t\t\t( pattern ) => ! CORE_PATTERN_SOURCES.includes( pattern.source )\n\t\t)\n\t\t.filter( filterOutDuplicatesByName )\n\t\t.map( ( pattern ) => ( {\n\t\t\t...pattern,\n\t\t\tkeywords: pattern.keywords || [],\n\t\t\ttype: 'pattern',\n\t\t\tblocks: parse( pattern.content ),\n\t\t} ) );\n\n\tpatterns = searchItems( patterns, search, {\n\t\tcategoryId,\n\t\thasCategory: ( item, currentCategory ) =>\n\t\t\titem.categories?.includes( currentCategory ),\n\t} );\n\n\treturn { patterns, isResolving: false };\n};\n\nconst reusableBlockToPattern = ( reusableBlock ) => ( {\n\tblocks: parse( reusableBlock.content.raw ),\n\tcategories: reusableBlock.wp_pattern,\n\tid: reusableBlock.id,\n\tname: reusableBlock.slug,\n\tsyncStatus: reusableBlock.wp_pattern_sync_status || SYNC_TYPES.full,\n\ttitle: reusableBlock.title.raw,\n\ttype: reusableBlock.type,\n\treusableBlock,\n} );\n\nconst selectUserPatterns = ( select, { search = '', syncStatus } = {} ) => {\n\tconst { getEntityRecords, getIsResolving } = select( coreStore );\n\n\tconst query = { per_page: -1 };\n\tconst records = getEntityRecords( 'postType', USER_PATTERNS, query );\n\n\tlet patterns = records\n\t\t? records.map( ( record ) => reusableBlockToPattern( record ) )\n\t\t: EMPTY_PATTERN_LIST;\n\tconst isResolving = getIsResolving( 'getEntityRecords', [\n\t\t'postType',\n\t\tUSER_PATTERNS,\n\t\tquery,\n\t] );\n\n\tif ( syncStatus ) {\n\t\tpatterns = patterns.filter(\n\t\t\t( pattern ) => pattern.syncStatus === syncStatus\n\t\t);\n\t}\n\n\tpatterns = searchItems( patterns, search, {\n\t\t// We exit user pattern retrieval early if we aren't in the\n\t\t// catch-all category for user created patterns, so it has\n\t\t// to be in the category.\n\t\thasCategory: () => true,\n\t} );\n\n\treturn { patterns, isResolving };\n};\n\nexport const usePatterns = (\n\tcategoryType,\n\tcategoryId,\n\t{ search = '', syncStatus }\n) => {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( categoryType === TEMPLATE_PARTS ) {\n\t\t\t\treturn selectTemplatePartsAsPatterns( select, {\n\t\t\t\t\tcategoryId,\n\t\t\t\t\tsearch,\n\t\t\t\t} );\n\t\t\t} else if ( categoryType === PATTERNS ) {\n\t\t\t\treturn selectThemePatterns( select, { categoryId, search } );\n\t\t\t} else if ( categoryType === USER_PATTERNS ) {\n\t\t\t\treturn selectUserPatterns( select, { search, syncStatus } );\n\t\t\t}\n\t\t\treturn { patterns: EMPTY_PATTERN_LIST, isResolving: false };\n\t\t},\n\t\t[ categoryId, categoryType, search, syncStatus ]\n\t);\n};\n\nexport default usePatterns;\n"]}