@wordpress/block-editor 12.10.0 → 12.10.2
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.
- package/build/components/block-patterns-list/index.js +10 -5
- package/build/components/block-patterns-list/index.js.map +1 -1
- package/build/components/block-patterns-paging/index.js +4 -2
- package/build/components/block-patterns-paging/index.js.map +1 -1
- package/build/components/inserter/block-patterns-explorer/patterns-list.js +21 -32
- package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
- package/build/components/inserter/block-patterns-explorer/sidebar.js +0 -15
- package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
- package/build/components/inserter/block-patterns-filter.js +137 -0
- package/build/components/inserter/block-patterns-filter.js.map +1 -0
- package/build/components/inserter/block-patterns-tab.js +77 -37
- package/build/components/inserter/block-patterns-tab.js.map +1 -1
- package/build/components/inserter/hooks/use-patterns-paging.js +4 -0
- package/build/components/inserter/hooks/use-patterns-paging.js.map +1 -1
- package/build/components/inserter/search-results.js +1 -1
- package/build/components/inserter/search-results.js.map +1 -1
- package/build/components/inspector-controls-tabs/styles-tab.js +1 -1
- package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
- package/build/hooks/background.js +28 -23
- package/build/hooks/background.js.map +1 -1
- package/build/hooks/block-rename-ui.js +2 -1
- package/build/hooks/block-rename-ui.js.map +1 -1
- package/build/store/private-selectors.js +2 -3
- package/build/store/private-selectors.js.map +1 -1
- package/build-module/components/block-patterns-list/index.js +11 -6
- package/build-module/components/block-patterns-list/index.js.map +1 -1
- package/build-module/components/block-patterns-paging/index.js +4 -2
- package/build-module/components/block-patterns-paging/index.js.map +1 -1
- package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +23 -34
- package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
- package/build-module/components/inserter/block-patterns-explorer/sidebar.js +0 -14
- package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
- package/build-module/components/inserter/block-patterns-filter.js +128 -0
- package/build-module/components/inserter/block-patterns-filter.js.map +1 -0
- package/build-module/components/inserter/block-patterns-tab.js +75 -35
- package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
- package/build-module/components/inserter/hooks/use-patterns-paging.js +5 -1
- package/build-module/components/inserter/hooks/use-patterns-paging.js.map +1 -1
- package/build-module/components/inserter/search-results.js +1 -1
- package/build-module/components/inserter/search-results.js.map +1 -1
- package/build-module/components/inspector-controls-tabs/styles-tab.js +1 -1
- package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
- package/build-module/hooks/background.js +30 -25
- package/build-module/hooks/background.js.map +1 -1
- package/build-module/hooks/block-rename-ui.js +2 -1
- package/build-module/hooks/block-rename-ui.js.map +1 -1
- package/build-module/store/private-selectors.js +2 -3
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-style/style-rtl.css +54 -26
- package/build-style/style.css +54 -26
- package/package.json +32 -32
- package/src/components/block-patterns-list/index.js +19 -12
- package/src/components/block-patterns-paging/index.js +58 -55
- package/src/components/block-patterns-paging/style.scss +16 -13
- package/src/components/inserter/block-patterns-explorer/patterns-list.js +34 -76
- package/src/components/inserter/block-patterns-explorer/sidebar.js +0 -15
- package/src/components/inserter/block-patterns-filter.js +183 -0
- package/src/components/inserter/block-patterns-tab.js +106 -58
- package/src/components/inserter/hooks/use-patterns-paging.js +12 -1
- package/src/components/inserter/search-results.js +1 -1
- package/src/components/inserter/style.scss +14 -5
- package/src/components/inspector-controls-tabs/styles-tab.js +1 -1
- package/src/hooks/background.js +57 -46
- package/src/hooks/background.scss +36 -18
- package/src/hooks/block-rename-ui.js +1 -0
- package/src/store/private-selectors.js +7 -3
- package/build/components/inserter/block-patterns-source-filter.js +0 -54
- package/build/components/inserter/block-patterns-source-filter.js.map +0 -1
- package/build/components/inserter/block-patterns-sync-filter.js +0 -46
- package/build/components/inserter/block-patterns-sync-filter.js.map +0 -1
- package/build-module/components/inserter/block-patterns-source-filter.js +0 -44
- package/build-module/components/inserter/block-patterns-source-filter.js.map +0 -1
- package/build-module/components/inserter/block-patterns-sync-filter.js +0 -38
- package/build-module/components/inserter/block-patterns-sync-filter.js.map +0 -1
- package/src/components/inserter/block-patterns-source-filter.js +0 -40
- package/src/components/inserter/block-patterns-sync-filter.js +0 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Button","SearchControl","__","
|
|
1
|
+
{"version":3,"names":["Button","SearchControl","__","PatternCategoriesList","selectedCategory","patternCategories","onClickCategory","baseClassName","createElement","className","map","name","label","key","isPressed","onClick","PatternsExplorerSearch","searchValue","setSearchValue","__nextHasNoMarginBottom","onChange","value","placeholder","PatternExplorerSidebar"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-explorer/sidebar.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Button, SearchControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nfunction PatternCategoriesList( {\n\tselectedCategory,\n\tpatternCategories,\n\tonClickCategory,\n} ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__sidebar';\n\treturn (\n\t\t<div className={ `${ baseClassName }__categories-list` }>\n\t\t\t{ patternCategories.map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey={ name }\n\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\tclassName={ `${ baseClassName }__categories-list__item` }\n\t\t\t\t\t\tisPressed={ selectedCategory === name }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonClickCategory( name );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</div>\n\t);\n}\n\nfunction PatternsExplorerSearch( { searchValue, setSearchValue } ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__search';\n\treturn (\n\t\t<div className={ baseClassName }>\n\t\t\t<SearchControl\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\tonChange={ setSearchValue }\n\t\t\t\tvalue={ searchValue }\n\t\t\t\tlabel={ __( 'Search for patterns' ) }\n\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction PatternExplorerSidebar( {\n\tselectedCategory,\n\tpatternCategories,\n\tonClickCategory,\n\tsearchValue,\n\tsetSearchValue,\n} ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__sidebar';\n\treturn (\n\t\t<div className={ baseClassName }>\n\t\t\t<PatternsExplorerSearch\n\t\t\t\tsearchValue={ searchValue }\n\t\t\t\tsetSearchValue={ setSearchValue }\n\t\t\t/>\n\t\t\t{ ! searchValue && (\n\t\t\t\t<PatternCategoriesList\n\t\t\t\t\tselectedCategory={ selectedCategory }\n\t\t\t\t\tpatternCategories={ patternCategories }\n\t\t\t\t\tonClickCategory={ onClickCategory }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nexport default PatternExplorerSidebar;\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,MAAM,EAAEC,aAAa,QAAQ,uBAAuB;AAC7D,SAASC,EAAE,QAAQ,iBAAiB;AAEpC,SAASC,qBAAqBA,CAAE;EAC/BC,gBAAgB;EAChBC,iBAAiB;EACjBC;AACD,CAAC,EAAG;EACH,MAAMC,aAAa,GAAG,+CAA+C;EACrE,OACCC,aAAA;IAAKC,SAAS,EAAI,GAAGF,aAAe;EAAoB,GACrDF,iBAAiB,CAACK,GAAG,CAAE,CAAE;IAAEC,IAAI;IAAEC;EAAM,CAAC,KAAM;IAC/C,OACCJ,aAAA,CAACR,MAAM;MACNa,GAAG,EAAGF,IAAM;MACZC,KAAK,EAAGA,KAAO;MACfH,SAAS,EAAI,GAAGF,aAAe,yBAA0B;MACzDO,SAAS,EAAGV,gBAAgB,KAAKO,IAAM;MACvCI,OAAO,EAAGA,CAAA,KAAM;QACfT,eAAe,CAAEK,IAAK,CAAC;MACxB;IAAG,GAEDC,KACK,CAAC;EAEX,CAAE,CACE,CAAC;AAER;AAEA,SAASI,sBAAsBA,CAAE;EAAEC,WAAW;EAAEC;AAAe,CAAC,EAAG;EAClE,MAAMX,aAAa,GAAG,8CAA8C;EACpE,OACCC,aAAA;IAAKC,SAAS,EAAGF;EAAe,GAC/BC,aAAA,CAACP,aAAa;IACbkB,uBAAuB;IACvBC,QAAQ,EAAGF,cAAgB;IAC3BG,KAAK,EAAGJ,WAAa;IACrBL,KAAK,EAAGV,EAAE,CAAE,qBAAsB,CAAG;IACrCoB,WAAW,EAAGpB,EAAE,CAAE,QAAS;EAAG,CAC9B,CACG,CAAC;AAER;AAEA,SAASqB,sBAAsBA,CAAE;EAChCnB,gBAAgB;EAChBC,iBAAiB;EACjBC,eAAe;EACfW,WAAW;EACXC;AACD,CAAC,EAAG;EACH,MAAMX,aAAa,GAAG,+CAA+C;EACrE,OACCC,aAAA;IAAKC,SAAS,EAAGF;EAAe,GAC/BC,aAAA,CAACQ,sBAAsB;IACtBC,WAAW,EAAGA,WAAa;IAC3BC,cAAc,EAAGA;EAAgB,CACjC,CAAC,EACA,CAAED,WAAW,IACdT,aAAA,CAACL,qBAAqB;IACrBC,gBAAgB,EAAGA,gBAAkB;IACrCC,iBAAiB,EAAGA,iBAAmB;IACvCC,eAAe,EAAGA;EAAiB,CACnC,CAEE,CAAC;AAER;AAEA,eAAeiB,sBAAsB"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
+
/**
|
|
3
|
+
* WordPress dependencies
|
|
4
|
+
*/
|
|
5
|
+
import { SVG, Path, DropdownMenu, MenuGroup, MenuItemsChoice } from '@wordpress/components';
|
|
6
|
+
import { __ } from '@wordpress/i18n';
|
|
7
|
+
import { Icon } from '@wordpress/icons';
|
|
8
|
+
import { useMemo } from '@wordpress/element';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Internal dependencies
|
|
12
|
+
*/
|
|
13
|
+
import { myPatternsCategory } from './block-patterns-tab';
|
|
14
|
+
export const PATTERN_TYPES = {
|
|
15
|
+
all: 'all',
|
|
16
|
+
synced: 'synced',
|
|
17
|
+
unsynced: 'unsynced',
|
|
18
|
+
user: 'user',
|
|
19
|
+
theme: 'theme',
|
|
20
|
+
directory: 'directory'
|
|
21
|
+
};
|
|
22
|
+
export const SYNC_TYPES = {
|
|
23
|
+
all: 'all',
|
|
24
|
+
full: 'fully',
|
|
25
|
+
unsynced: 'unsynced'
|
|
26
|
+
};
|
|
27
|
+
const getShouldDisableSyncFilter = sourceFilter => sourceFilter !== PATTERN_TYPES.all && sourceFilter !== PATTERN_TYPES.user;
|
|
28
|
+
const getShouldDisableNonUserSources = category => {
|
|
29
|
+
return category.name === myPatternsCategory.name;
|
|
30
|
+
};
|
|
31
|
+
export function BlockPatternsSyncFilter({
|
|
32
|
+
setPatternSyncFilter,
|
|
33
|
+
setPatternSourceFilter,
|
|
34
|
+
patternSyncFilter,
|
|
35
|
+
patternSourceFilter,
|
|
36
|
+
scrollContainerRef,
|
|
37
|
+
category
|
|
38
|
+
}) {
|
|
39
|
+
// If the category is `myPatterns` then we need to set the source filter to `user`, but
|
|
40
|
+
// we do this by deriving from props rather than calling setPatternSourceFilter otherwise
|
|
41
|
+
// the user may be confused when switching to another category if the haven't explicity set
|
|
42
|
+
// this filter themselves.
|
|
43
|
+
const currentPatternSourceFilter = category.name === myPatternsCategory.name ? PATTERN_TYPES.user : patternSourceFilter;
|
|
44
|
+
|
|
45
|
+
// We need to disable the sync filter option if the source filter is not 'all' or 'user'
|
|
46
|
+
// otherwise applying them will just result in no patterns being shown.
|
|
47
|
+
const shouldDisableSyncFilter = getShouldDisableSyncFilter(currentPatternSourceFilter);
|
|
48
|
+
|
|
49
|
+
// We also need to disable the directory and theme source filter options if the category
|
|
50
|
+
// is `myPatterns` otherwise applying them will also just result in no patterns being shown.
|
|
51
|
+
const shouldDisableNonUserSources = getShouldDisableNonUserSources(category);
|
|
52
|
+
const patternSyncMenuOptions = useMemo(() => [{
|
|
53
|
+
value: SYNC_TYPES.all,
|
|
54
|
+
label: __('All')
|
|
55
|
+
}, {
|
|
56
|
+
value: SYNC_TYPES.full,
|
|
57
|
+
label: __('Synced'),
|
|
58
|
+
info: __('Updated everywhere'),
|
|
59
|
+
disabled: shouldDisableSyncFilter
|
|
60
|
+
}, {
|
|
61
|
+
value: SYNC_TYPES.unsynced,
|
|
62
|
+
label: __('Standard'),
|
|
63
|
+
info: __('Edit freely'),
|
|
64
|
+
disabled: shouldDisableSyncFilter
|
|
65
|
+
}], [shouldDisableSyncFilter]);
|
|
66
|
+
const patternSourceMenuOptions = useMemo(() => [{
|
|
67
|
+
value: PATTERN_TYPES.all,
|
|
68
|
+
label: __('All'),
|
|
69
|
+
disabled: shouldDisableNonUserSources
|
|
70
|
+
}, {
|
|
71
|
+
value: PATTERN_TYPES.directory,
|
|
72
|
+
label: __('Directory'),
|
|
73
|
+
info: __('Pattern directory & core'),
|
|
74
|
+
disabled: shouldDisableNonUserSources
|
|
75
|
+
}, {
|
|
76
|
+
value: PATTERN_TYPES.theme,
|
|
77
|
+
label: __('Theme'),
|
|
78
|
+
info: __('Bundled with the theme'),
|
|
79
|
+
disabled: shouldDisableNonUserSources
|
|
80
|
+
}, {
|
|
81
|
+
value: PATTERN_TYPES.user,
|
|
82
|
+
label: __('User'),
|
|
83
|
+
info: __('Custom created')
|
|
84
|
+
}], [shouldDisableNonUserSources]);
|
|
85
|
+
function handleSetSourceFilterChange(newSourceFilter) {
|
|
86
|
+
setPatternSourceFilter(newSourceFilter);
|
|
87
|
+
if (getShouldDisableSyncFilter(newSourceFilter)) {
|
|
88
|
+
setPatternSyncFilter(SYNC_TYPES.all);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return createElement(Fragment, null, createElement(DropdownMenu, {
|
|
92
|
+
popoverProps: {
|
|
93
|
+
placement: 'right-end'
|
|
94
|
+
},
|
|
95
|
+
label: "Filter patterns",
|
|
96
|
+
icon: createElement(Icon, {
|
|
97
|
+
icon: createElement(SVG, {
|
|
98
|
+
width: "24",
|
|
99
|
+
height: "24",
|
|
100
|
+
viewBox: "0 0 24 24",
|
|
101
|
+
fill: "none",
|
|
102
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
103
|
+
}, createElement(Path, {
|
|
104
|
+
d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z",
|
|
105
|
+
fill: "#1E1E1E"
|
|
106
|
+
}))
|
|
107
|
+
})
|
|
108
|
+
}, () => createElement(Fragment, null, createElement(MenuGroup, {
|
|
109
|
+
label: __('Author')
|
|
110
|
+
}, createElement(MenuItemsChoice, {
|
|
111
|
+
choices: patternSourceMenuOptions,
|
|
112
|
+
onSelect: value => {
|
|
113
|
+
handleSetSourceFilterChange(value);
|
|
114
|
+
scrollContainerRef.current?.scrollTo(0, 0);
|
|
115
|
+
},
|
|
116
|
+
value: currentPatternSourceFilter
|
|
117
|
+
})), createElement(MenuGroup, {
|
|
118
|
+
label: __('Type')
|
|
119
|
+
}, createElement(MenuItemsChoice, {
|
|
120
|
+
choices: patternSyncMenuOptions,
|
|
121
|
+
onSelect: value => {
|
|
122
|
+
setPatternSyncFilter(value);
|
|
123
|
+
scrollContainerRef.current?.scrollTo(0, 0);
|
|
124
|
+
},
|
|
125
|
+
value: patternSyncFilter
|
|
126
|
+
})))));
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=block-patterns-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SVG","Path","DropdownMenu","MenuGroup","MenuItemsChoice","__","Icon","useMemo","myPatternsCategory","PATTERN_TYPES","all","synced","unsynced","user","theme","directory","SYNC_TYPES","full","getShouldDisableSyncFilter","sourceFilter","getShouldDisableNonUserSources","category","name","BlockPatternsSyncFilter","setPatternSyncFilter","setPatternSourceFilter","patternSyncFilter","patternSourceFilter","scrollContainerRef","currentPatternSourceFilter","shouldDisableSyncFilter","shouldDisableNonUserSources","patternSyncMenuOptions","value","label","info","disabled","patternSourceMenuOptions","handleSetSourceFilterChange","newSourceFilter","createElement","Fragment","popoverProps","placement","icon","width","height","viewBox","fill","xmlns","d","choices","onSelect","current","scrollTo"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-filter.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tSVG,\n\tPath,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItemsChoice,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { Icon } from '@wordpress/icons';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { myPatternsCategory } from './block-patterns-tab';\n\nexport const PATTERN_TYPES = {\n\tall: 'all',\n\tsynced: 'synced',\n\tunsynced: 'unsynced',\n\tuser: 'user',\n\ttheme: 'theme',\n\tdirectory: 'directory',\n};\n\nexport const SYNC_TYPES = {\n\tall: 'all',\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n\nconst getShouldDisableSyncFilter = ( sourceFilter ) =>\n\tsourceFilter !== PATTERN_TYPES.all && sourceFilter !== PATTERN_TYPES.user;\n\nconst getShouldDisableNonUserSources = ( category ) => {\n\treturn category.name === myPatternsCategory.name;\n};\n\nexport function BlockPatternsSyncFilter( {\n\tsetPatternSyncFilter,\n\tsetPatternSourceFilter,\n\tpatternSyncFilter,\n\tpatternSourceFilter,\n\tscrollContainerRef,\n\tcategory,\n} ) {\n\t// If the category is `myPatterns` then we need to set the source filter to `user`, but\n\t// we do this by deriving from props rather than calling setPatternSourceFilter otherwise\n\t// the user may be confused when switching to another category if the haven't explicity set\n\t// this filter themselves.\n\tconst currentPatternSourceFilter =\n\t\tcategory.name === myPatternsCategory.name\n\t\t\t? PATTERN_TYPES.user\n\t\t\t: patternSourceFilter;\n\n\t// We need to disable the sync filter option if the source filter is not 'all' or 'user'\n\t// otherwise applying them will just result in no patterns being shown.\n\tconst shouldDisableSyncFilter = getShouldDisableSyncFilter(\n\t\tcurrentPatternSourceFilter\n\t);\n\n\t// We also need to disable the directory and theme source filter options if the category\n\t// is `myPatterns` otherwise applying them will also just result in no patterns being shown.\n\tconst shouldDisableNonUserSources =\n\t\tgetShouldDisableNonUserSources( category );\n\n\tconst patternSyncMenuOptions = useMemo(\n\t\t() => [\n\t\t\t{ value: SYNC_TYPES.all, label: __( 'All' ) },\n\t\t\t{\n\t\t\t\tvalue: SYNC_TYPES.full,\n\t\t\t\tlabel: __( 'Synced' ),\n\t\t\t\tinfo: __( 'Updated everywhere' ),\n\t\t\t\tdisabled: shouldDisableSyncFilter,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: SYNC_TYPES.unsynced,\n\t\t\t\tlabel: __( 'Standard' ),\n\t\t\t\tinfo: __( 'Edit freely' ),\n\t\t\t\tdisabled: shouldDisableSyncFilter,\n\t\t\t},\n\t\t],\n\t\t[ shouldDisableSyncFilter ]\n\t);\n\n\tconst patternSourceMenuOptions = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tvalue: PATTERN_TYPES.all,\n\t\t\t\tlabel: __( 'All' ),\n\t\t\t\tdisabled: shouldDisableNonUserSources,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: PATTERN_TYPES.directory,\n\t\t\t\tlabel: __( 'Directory' ),\n\t\t\t\tinfo: __( 'Pattern directory & core' ),\n\t\t\t\tdisabled: shouldDisableNonUserSources,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: PATTERN_TYPES.theme,\n\t\t\t\tlabel: __( 'Theme' ),\n\t\t\t\tinfo: __( 'Bundled with the theme' ),\n\t\t\t\tdisabled: shouldDisableNonUserSources,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: PATTERN_TYPES.user,\n\t\t\t\tlabel: __( 'User' ),\n\t\t\t\tinfo: __( 'Custom created' ),\n\t\t\t},\n\t\t],\n\t\t[ shouldDisableNonUserSources ]\n\t);\n\n\tfunction handleSetSourceFilterChange( newSourceFilter ) {\n\t\tsetPatternSourceFilter( newSourceFilter );\n\t\tif ( getShouldDisableSyncFilter( newSourceFilter ) ) {\n\t\t\tsetPatternSyncFilter( SYNC_TYPES.all );\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<DropdownMenu\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tplacement: 'right-end',\n\t\t\t\t} }\n\t\t\t\tlabel=\"Filter patterns\"\n\t\t\t\ticon={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t<SVG\n\t\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\t\td=\"M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z\"\n\t\t\t\t\t\t\t\t\tfill=\"#1E1E1E\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</SVG>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ () => (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<MenuGroup label={ __( 'Author' ) }>\n\t\t\t\t\t\t\t<MenuItemsChoice\n\t\t\t\t\t\t\t\tchoices={ patternSourceMenuOptions }\n\t\t\t\t\t\t\t\tonSelect={ ( value ) => {\n\t\t\t\t\t\t\t\t\thandleSetSourceFilterChange( value );\n\t\t\t\t\t\t\t\t\tscrollContainerRef.current?.scrollTo(\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\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\tvalue={ currentPatternSourceFilter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t<MenuGroup label={ __( 'Type' ) }>\n\t\t\t\t\t\t\t<MenuItemsChoice\n\t\t\t\t\t\t\t\tchoices={ patternSyncMenuOptions }\n\t\t\t\t\t\t\t\tonSelect={ ( value ) => {\n\t\t\t\t\t\t\t\t\tsetPatternSyncFilter( value );\n\t\t\t\t\t\t\t\t\tscrollContainerRef.current?.scrollTo(\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\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\tvalue={ patternSyncFilter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</DropdownMenu>\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { createElement, Fragment } from "@wordpress/element";
|
|
|
5
5
|
import { useMemo, useState, useCallback, useRef, useEffect } from '@wordpress/element';
|
|
6
6
|
import { _x, __, _n, isRTL, sprintf } from '@wordpress/i18n';
|
|
7
7
|
import { useViewportMatch } from '@wordpress/compose';
|
|
8
|
-
import { __experimentalItemGroup as ItemGroup, __experimentalItem as Item, __experimentalHStack as HStack, FlexBlock, Button } from '@wordpress/components';
|
|
8
|
+
import { __experimentalItemGroup as ItemGroup, __experimentalItem as Item, __experimentalHStack as HStack, __experimentalVStack as VStack, __experimentalHeading as Heading, __experimentalText as Text, FlexBlock, Button } from '@wordpress/components';
|
|
9
9
|
import { Icon, chevronRight, chevronLeft } from '@wordpress/icons';
|
|
10
10
|
import { focus } from '@wordpress/dom';
|
|
11
11
|
import { speak } from '@wordpress/a11y';
|
|
@@ -17,26 +17,44 @@ import usePatternsState from './hooks/use-patterns-state';
|
|
|
17
17
|
import BlockPatternList from '../block-patterns-list';
|
|
18
18
|
import PatternsExplorerModal from './block-patterns-explorer/explorer';
|
|
19
19
|
import MobileTabNavigation from './mobile-tab-navigation';
|
|
20
|
-
import BlockPatternsPaging from '../block-patterns-paging';
|
|
21
20
|
import usePatternsPaging from './hooks/use-patterns-paging';
|
|
22
|
-
import {
|
|
23
|
-
import { BlockPatternsSyncFilter, SYNC_TYPES } from './block-patterns-sync-filter';
|
|
21
|
+
import { BlockPatternsSyncFilter, SYNC_TYPES, PATTERN_TYPES } from './block-patterns-filter';
|
|
24
22
|
const noop = () => {};
|
|
25
23
|
export const allPatternsCategory = {
|
|
26
24
|
name: 'allPatterns',
|
|
27
|
-
label: __('All
|
|
25
|
+
label: __('All patterns')
|
|
26
|
+
};
|
|
27
|
+
export const myPatternsCategory = {
|
|
28
|
+
name: 'myPatterns',
|
|
29
|
+
label: __('My patterns')
|
|
28
30
|
};
|
|
29
31
|
export function isPatternFiltered(pattern, sourceFilter, syncFilter) {
|
|
30
|
-
|
|
32
|
+
const isUserPattern = pattern.name.startsWith('core/block');
|
|
33
|
+
const isDirectoryPattern = pattern.source === 'core' || pattern.source?.startsWith('pattern-directory');
|
|
34
|
+
|
|
35
|
+
// If theme source selected, filter out user created patterns and those from
|
|
36
|
+
// the core patterns directory.
|
|
37
|
+
if (sourceFilter === PATTERN_TYPES.theme && (isUserPattern || isDirectoryPattern)) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// If the directory source is selected, filter out user created patterns
|
|
42
|
+
// and those bundled with the theme.
|
|
43
|
+
if (sourceFilter === PATTERN_TYPES.directory && (isUserPattern || !isDirectoryPattern)) {
|
|
31
44
|
return true;
|
|
32
45
|
}
|
|
46
|
+
|
|
47
|
+
// If user source selected, filter out theme patterns. Any pattern without
|
|
48
|
+
// an id wasn't created by a user.
|
|
33
49
|
if (sourceFilter === PATTERN_TYPES.user && !pattern.id) {
|
|
34
50
|
return true;
|
|
35
51
|
}
|
|
36
|
-
|
|
52
|
+
|
|
53
|
+
// Filter by sync status.
|
|
54
|
+
if (syncFilter === SYNC_TYPES.full && pattern.syncStatus !== '') {
|
|
37
55
|
return true;
|
|
38
56
|
}
|
|
39
|
-
if (
|
|
57
|
+
if (syncFilter === SYNC_TYPES.unsynced && pattern.syncStatus !== 'unsynced' && isUserPattern) {
|
|
40
58
|
return true;
|
|
41
59
|
}
|
|
42
60
|
return false;
|
|
@@ -60,6 +78,9 @@ export function usePatternsCategories(rootClientId, sourceFilter = 'all') {
|
|
|
60
78
|
label: _x('Uncategorized')
|
|
61
79
|
});
|
|
62
80
|
}
|
|
81
|
+
if (filteredPatterns.some(pattern => pattern.id)) {
|
|
82
|
+
categories.unshift(myPatternsCategory);
|
|
83
|
+
}
|
|
63
84
|
if (filteredPatterns.length > 0) {
|
|
64
85
|
categories.unshift({
|
|
65
86
|
name: allPatternsCategory.name,
|
|
@@ -92,6 +113,7 @@ export function BlockPatternsCategoryDialog({
|
|
|
92
113
|
ref: container,
|
|
93
114
|
className: "block-editor-inserter__patterns-category-dialog"
|
|
94
115
|
}, createElement(BlockPatternsCategoryPanel, {
|
|
116
|
+
key: category.name,
|
|
95
117
|
rootClientId: rootClientId,
|
|
96
118
|
onInsert: onInsert,
|
|
97
119
|
onHover: onHover,
|
|
@@ -105,21 +127,24 @@ export function BlockPatternsCategoryPanel({
|
|
|
105
127
|
onInsert,
|
|
106
128
|
onHover = noop,
|
|
107
129
|
category,
|
|
108
|
-
showTitlesAsTooltip
|
|
109
|
-
patternFilter
|
|
130
|
+
showTitlesAsTooltip
|
|
110
131
|
}) {
|
|
111
132
|
const [allPatterns,, onClickPattern] = usePatternsState(onInsert, rootClientId);
|
|
112
133
|
const [patternSyncFilter, setPatternSyncFilter] = useState('all');
|
|
113
|
-
const
|
|
114
|
-
const
|
|
134
|
+
const [patternSourceFilter, setPatternSourceFilter] = useState('all');
|
|
135
|
+
const availableCategories = usePatternsCategories(rootClientId, patternSourceFilter);
|
|
136
|
+
const scrollContainerRef = useRef();
|
|
115
137
|
const currentCategoryPatterns = useMemo(() => allPatterns.filter(pattern => {
|
|
116
138
|
var _pattern$categories$f;
|
|
117
|
-
if (isPatternFiltered(pattern,
|
|
139
|
+
if (isPatternFiltered(pattern, patternSourceFilter, patternSyncFilter)) {
|
|
118
140
|
return false;
|
|
119
141
|
}
|
|
120
142
|
if (category.name === allPatternsCategory.name) {
|
|
121
143
|
return true;
|
|
122
144
|
}
|
|
145
|
+
if (category.name === myPatternsCategory.name && pattern.id) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
123
148
|
if (category.name !== 'uncategorized') {
|
|
124
149
|
return pattern.categories?.includes(category.name);
|
|
125
150
|
}
|
|
@@ -128,21 +153,43 @@ export function BlockPatternsCategoryPanel({
|
|
|
128
153
|
// or with no available category.
|
|
129
154
|
const availablePatternCategories = (_pattern$categories$f = pattern.categories?.filter(cat => availableCategories.find(availableCategory => availableCategory.name === cat))) !== null && _pattern$categories$f !== void 0 ? _pattern$categories$f : [];
|
|
130
155
|
return availablePatternCategories.length === 0;
|
|
131
|
-
}), [allPatterns, availableCategories, category.name,
|
|
132
|
-
const pagingProps = usePatternsPaging(currentCategoryPatterns, category,
|
|
156
|
+
}), [allPatterns, availableCategories, category.name, patternSourceFilter, patternSyncFilter]);
|
|
157
|
+
const pagingProps = usePatternsPaging(currentCategoryPatterns, category, scrollContainerRef);
|
|
158
|
+
const {
|
|
159
|
+
changePage
|
|
160
|
+
} = pagingProps;
|
|
133
161
|
|
|
134
162
|
// Hide block pattern preview on unmount.
|
|
135
163
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
136
164
|
useEffect(() => () => onHover(null), []);
|
|
165
|
+
const onSetPatternSyncFilter = useCallback(value => {
|
|
166
|
+
setPatternSyncFilter(value);
|
|
167
|
+
changePage(1);
|
|
168
|
+
}, [setPatternSyncFilter, changePage]);
|
|
169
|
+
const onSetPatternSourceFilter = useCallback(value => {
|
|
170
|
+
setPatternSourceFilter(value);
|
|
171
|
+
changePage(1);
|
|
172
|
+
}, [setPatternSourceFilter, changePage]);
|
|
137
173
|
return createElement("div", {
|
|
138
|
-
className: "block-editor-inserter__patterns-category-panel"
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
className: "block-editor-inserter__patterns-category-panel-
|
|
142
|
-
},
|
|
174
|
+
className: "block-editor-inserter__patterns-category-panel"
|
|
175
|
+
}, createElement(VStack, {
|
|
176
|
+
spacing: 2,
|
|
177
|
+
className: "block-editor-inserter__patterns-category-panel-header"
|
|
178
|
+
}, createElement(HStack, null, createElement(FlexBlock, null, createElement(Heading, {
|
|
179
|
+
level: 4,
|
|
180
|
+
as: "div"
|
|
181
|
+
}, category.label)), createElement(BlockPatternsSyncFilter, {
|
|
143
182
|
patternSyncFilter: patternSyncFilter,
|
|
144
|
-
|
|
145
|
-
|
|
183
|
+
patternSourceFilter: patternSourceFilter,
|
|
184
|
+
setPatternSyncFilter: onSetPatternSyncFilter,
|
|
185
|
+
setPatternSourceFilter: onSetPatternSourceFilter,
|
|
186
|
+
scrollContainerRef: scrollContainerRef,
|
|
187
|
+
category: category
|
|
188
|
+
})), category.description && createElement(Text, null, category.description), !currentCategoryPatterns.length && createElement(Text, {
|
|
189
|
+
variant: "muted",
|
|
190
|
+
className: "block-editor-inserter__patterns-category-no-results"
|
|
191
|
+
}, __('No results found'))), currentCategoryPatterns.length > 0 && createElement(BlockPatternList, {
|
|
192
|
+
ref: scrollContainerRef,
|
|
146
193
|
shownPatterns: pagingProps.categoryPatternsAsyncList,
|
|
147
194
|
blockPatterns: pagingProps.categoryPatterns,
|
|
148
195
|
onClickPattern: onClickPattern,
|
|
@@ -152,9 +199,8 @@ export function BlockPatternsCategoryPanel({
|
|
|
152
199
|
category: category.name,
|
|
153
200
|
isDraggable: true,
|
|
154
201
|
showTitlesAsTooltip: showTitlesAsTooltip,
|
|
155
|
-
patternFilter:
|
|
156
|
-
|
|
157
|
-
...pagingProps
|
|
202
|
+
patternFilter: patternSourceFilter,
|
|
203
|
+
pagingProps: pagingProps
|
|
158
204
|
}));
|
|
159
205
|
}
|
|
160
206
|
function BlockPatternsTabs({
|
|
@@ -164,8 +210,7 @@ function BlockPatternsTabs({
|
|
|
164
210
|
rootClientId
|
|
165
211
|
}) {
|
|
166
212
|
const [showPatternsExplorer, setShowPatternsExplorer] = useState(false);
|
|
167
|
-
const
|
|
168
|
-
const categories = usePatternsCategories(rootClientId, patternSourceFilter);
|
|
213
|
+
const categories = usePatternsCategories(rootClientId);
|
|
169
214
|
const initialCategory = selectedCategory || categories[0];
|
|
170
215
|
const isMobile = useViewportMatch('medium', '<');
|
|
171
216
|
return createElement(Fragment, null, !isMobile && createElement("div", {
|
|
@@ -173,18 +218,12 @@ function BlockPatternsTabs({
|
|
|
173
218
|
}, createElement("nav", {
|
|
174
219
|
"aria-label": __('Block pattern categories'),
|
|
175
220
|
className: "block-editor-inserter__block-patterns-tabs"
|
|
176
|
-
}, createElement(
|
|
177
|
-
value: patternSourceFilter,
|
|
178
|
-
onChange: value => {
|
|
179
|
-
setPatternSourceFilter(value);
|
|
180
|
-
onSelectCategory(allPatternsCategory, value);
|
|
181
|
-
}
|
|
182
|
-
}), createElement(ItemGroup, {
|
|
221
|
+
}, createElement(ItemGroup, {
|
|
183
222
|
role: "list"
|
|
184
223
|
}, categories.map(category => createElement(Item, {
|
|
185
224
|
role: "listitem",
|
|
186
225
|
key: category.name,
|
|
187
|
-
onClick: () => onSelectCategory(category
|
|
226
|
+
onClick: () => onSelectCategory(category),
|
|
188
227
|
className: category === selectedCategory ? 'block-editor-inserter__patterns-category block-editor-inserter__patterns-selected-category' : 'block-editor-inserter__patterns-category',
|
|
189
228
|
"aria-label": category.label,
|
|
190
229
|
"aria-current": category === selectedCategory ? 'true' : undefined
|
|
@@ -199,6 +238,7 @@ function BlockPatternsTabs({
|
|
|
199
238
|
}, __('Explore all patterns')))))), isMobile && createElement(MobileTabNavigation, {
|
|
200
239
|
categories: categories
|
|
201
240
|
}, category => createElement(BlockPatternsCategoryPanel, {
|
|
241
|
+
key: category.name,
|
|
202
242
|
onInsert: onInsert,
|
|
203
243
|
rootClientId: rootClientId,
|
|
204
244
|
category: category,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","useState","useCallback","useRef","useEffect","_x","__","_n","isRTL","sprintf","useViewportMatch","__experimentalItemGroup","ItemGroup","__experimentalItem","Item","__experimentalHStack","HStack","FlexBlock","Button","Icon","chevronRight","chevronLeft","focus","speak","usePatternsState","BlockPatternList","PatternsExplorerModal","MobileTabNavigation","BlockPatternsPaging","usePatternsPaging","PATTERN_TYPES","default","BlockPatternsSourceFilter","BlockPatternsSyncFilter","SYNC_TYPES","noop","allPatternsCategory","name","label","isPatternFiltered","pattern","sourceFilter","syncFilter","theme","startsWith","user","id","full","syncStatus","unsynced","usePatternsCategories","rootClientId","patterns","allCategories","undefined","filteredPatterns","filter","hasRegisteredCategory","categories","length","some","cat","category","populatedCategories","includes","sort","a","b","localeCompare","find","push","unshift","BlockPatternsCategoryDialog","onInsert","onHover","showTitlesAsTooltip","patternFilter","container","timeout","setTimeout","firstTabbable","tabbable","current","clearTimeout","createElement","ref","className","BlockPatternsCategoryPanel","allPatterns","onClickPattern","patternSyncFilter","setPatternSyncFilter","availableCategories","currentCategoryPatterns","_pattern$categories$f","availablePatternCategories","availableCategory","pagingProps","description","shownPatterns","categoryPatternsAsyncList","blockPatterns","categoryPatterns","orientation","isDraggable","numPages","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","patternSourceFilter","setPatternSourceFilter","initialCategory","isMobile","Fragment","value","onChange","role","map","key","onClick","icon","variant","patternCategories","onModalClose"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-tab.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { _x, __, _n, isRTL, sprintf } from '@wordpress/i18n';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\tFlexBlock,\n\tButton,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\nimport { focus } from '@wordpress/dom';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from './hooks/use-patterns-state';\nimport BlockPatternList from '../block-patterns-list';\nimport PatternsExplorerModal from './block-patterns-explorer/explorer';\nimport MobileTabNavigation from './mobile-tab-navigation';\nimport BlockPatternsPaging from '../block-patterns-paging';\nimport usePatternsPaging from './hooks/use-patterns-paging';\nimport {\n\tPATTERN_TYPES,\n\tdefault as BlockPatternsSourceFilter,\n} from './block-patterns-source-filter';\nimport {\n\tBlockPatternsSyncFilter,\n\tSYNC_TYPES,\n} from './block-patterns-sync-filter';\n\nconst noop = () => {};\n\nexport const allPatternsCategory = {\n\tname: 'allPatterns',\n\tlabel: __( 'All categories' ),\n};\n\nexport function isPatternFiltered( pattern, sourceFilter, syncFilter ) {\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.theme &&\n\t\tpattern.name.startsWith( 'core/block' )\n\t) {\n\t\treturn true;\n\t}\n\tif ( sourceFilter === PATTERN_TYPES.user && ! pattern.id ) {\n\t\treturn true;\n\t}\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.user &&\n\t\tsyncFilter === SYNC_TYPES.full &&\n\t\tpattern.syncStatus !== ''\n\t) {\n\t\treturn true;\n\t}\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.user &&\n\t\tsyncFilter === SYNC_TYPES.unsynced &&\n\t\tpattern.syncStatus !== 'unsynced'\n\t) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport function usePatternsCategories( rootClientId, sourceFilter = 'all' ) {\n\tconst [ patterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst filteredPatterns = useMemo(\n\t\t() =>\n\t\t\tsourceFilter === 'all'\n\t\t\t\t? patterns\n\t\t\t\t: patterns.filter(\n\t\t\t\t\t\t( pattern ) =>\n\t\t\t\t\t\t\t! isPatternFiltered( pattern, sourceFilter )\n\t\t\t\t ),\n\t\t[ sourceFilter, patterns ]\n\t);\n\n\tconst hasRegisteredCategory = useCallback(\n\t\t( pattern ) => {\n\t\t\tif ( ! pattern.categories || ! pattern.categories.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn pattern.categories.some( ( cat ) =>\n\t\t\t\tallCategories.some( ( category ) => category.name === cat )\n\t\t\t);\n\t\t},\n\t\t[ allCategories ]\n\t);\n\n\t// Remove any empty categories.\n\tconst populatedCategories = useMemo( () => {\n\t\tconst categories = allCategories\n\t\t\t.filter( ( category ) =>\n\t\t\t\tfilteredPatterns.some( ( pattern ) =>\n\t\t\t\t\tpattern.categories?.includes( category.name )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.sort( ( a, b ) => a.label.localeCompare( b.label ) );\n\n\t\tif (\n\t\t\tfilteredPatterns.some(\n\t\t\t\t( pattern ) => ! hasRegisteredCategory( pattern )\n\t\t\t) &&\n\t\t\t! categories.find(\n\t\t\t\t( category ) => category.name === 'uncategorized'\n\t\t\t)\n\t\t) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'uncategorized',\n\t\t\t\tlabel: _x( 'Uncategorized' ),\n\t\t\t} );\n\t\t}\n\t\tif ( filteredPatterns.length > 0 ) {\n\t\t\tcategories.unshift( {\n\t\t\t\tname: allPatternsCategory.name,\n\t\t\t\tlabel: allPatternsCategory.label,\n\t\t\t} );\n\t\t}\n\t\tspeak(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %d: number of categories . */\n\t\t\t\t_n(\n\t\t\t\t\t'%d category button displayed.',\n\t\t\t\t\t'%d category buttons displayed.',\n\t\t\t\t\tcategories.length\n\t\t\t\t),\n\t\t\t\tcategories.length\n\t\t\t)\n\t\t);\n\t\treturn categories;\n\t}, [ allCategories, filteredPatterns, hasRegisteredCategory ] );\n\n\treturn populatedCategories;\n}\n\nexport function BlockPatternsCategoryDialog( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n\tpatternFilter,\n} ) {\n\tconst container = useRef();\n\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tconst [ firstTabbable ] = focus.tabbable.find( container.current );\n\t\t\tfirstTabbable?.focus();\n\t\t} );\n\t\treturn () => clearTimeout( timeout );\n\t}, [ category ] );\n\n\treturn (\n\t\t<div\n\t\t\tref={ container }\n\t\t\tclassName=\"block-editor-inserter__patterns-category-dialog\"\n\t\t>\n\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tcategory={ category }\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t\tpatternFilter={ patternFilter }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nexport function BlockPatternsCategoryPanel( {\n\trootClientId,\n\tonInsert,\n\tonHover = noop,\n\tcategory,\n\tshowTitlesAsTooltip,\n\tpatternFilter,\n} ) {\n\tconst [ allPatterns, , onClickPattern ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId\n\t);\n\tconst [ patternSyncFilter, setPatternSyncFilter ] = useState( 'all' );\n\n\tconst availableCategories = usePatternsCategories(\n\t\trootClientId,\n\t\tpatternFilter\n\t);\n\tconst container = useRef();\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif (\n\t\t\t\t\tisPatternFiltered(\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tpatternFilter,\n\t\t\t\t\t\tpatternSyncFilter\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( category.name === allPatternsCategory.name ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif ( category.name !== 'uncategorized' ) {\n\t\t\t\t\treturn pattern.categories?.includes( category.name );\n\t\t\t\t}\n\n\t\t\t\t// The uncategorized category should show all the patterns without any category\n\t\t\t\t// or with no available category.\n\t\t\t\tconst availablePatternCategories =\n\t\t\t\t\tpattern.categories?.filter( ( cat ) =>\n\t\t\t\t\t\tavailableCategories.find(\n\t\t\t\t\t\t\t( availableCategory ) =>\n\t\t\t\t\t\t\t\tavailableCategory.name === cat\n\t\t\t\t\t\t)\n\t\t\t\t\t) ?? [];\n\n\t\t\t\treturn availablePatternCategories.length === 0;\n\t\t\t} ),\n\t\t[\n\t\t\tallPatterns,\n\t\t\tavailableCategories,\n\t\t\tcategory.name,\n\t\t\tpatternFilter,\n\t\t\tpatternSyncFilter,\n\t\t]\n\t);\n\n\tconst pagingProps = usePatternsPaging(\n\t\tcurrentCategoryPatterns,\n\t\tcategory,\n\t\tcontainer\n\t);\n\n\t// Hide block pattern preview on unmount.\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tuseEffect( () => () => onHover( null ), [] );\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-editor-inserter__patterns-category-panel\"\n\t\t\tref={ container }\n\t\t>\n\t\t\t<div className=\"block-editor-inserter__patterns-category-panel-title\">\n\t\t\t\t{ category.label }\n\t\t\t</div>\n\t\t\t<p>{ category.description }</p>\n\t\t\t{ patternFilter === PATTERN_TYPES.user && (\n\t\t\t\t<BlockPatternsSyncFilter\n\t\t\t\t\tpatternSyncFilter={ patternSyncFilter }\n\t\t\t\t\tsetPatternSyncFilter={ setPatternSyncFilter }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! currentCategoryPatterns.length && (\n\t\t\t\t<div>{ __( 'No results found' ) }</div>\n\t\t\t) }\n\t\t\t{ currentCategoryPatterns.length > 0 && (\n\t\t\t\t<BlockPatternList\n\t\t\t\t\tshownPatterns={ pagingProps.categoryPatternsAsyncList }\n\t\t\t\t\tblockPatterns={ pagingProps.categoryPatterns }\n\t\t\t\t\tonClickPattern={ onClickPattern }\n\t\t\t\t\tonHover={ onHover }\n\t\t\t\t\tlabel={ category.label }\n\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\tcategory={ category.name }\n\t\t\t\t\tisDraggable\n\t\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t\t\tpatternFilter={ patternFilter }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ pagingProps.numPages > 1 && (\n\t\t\t\t<BlockPatternsPaging { ...pagingProps } />\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nfunction BlockPatternsTabs( {\n\tonSelectCategory,\n\tselectedCategory,\n\tonInsert,\n\trootClientId,\n} ) {\n\tconst [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );\n\tconst [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' );\n\n\tconst categories = usePatternsCategories(\n\t\trootClientId,\n\t\tpatternSourceFilter\n\t);\n\n\tconst initialCategory = selectedCategory || categories[ 0 ];\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t<div className=\"block-editor-inserter__block-patterns-tabs-container\">\n\t\t\t\t\t<nav\n\t\t\t\t\t\taria-label={ __( 'Block pattern categories' ) }\n\t\t\t\t\t\tclassName=\"block-editor-inserter__block-patterns-tabs\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<BlockPatternsSourceFilter\n\t\t\t\t\t\t\tvalue={ patternSourceFilter }\n\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\tsetPatternSourceFilter( value );\n\t\t\t\t\t\t\t\tonSelectCategory( allPatternsCategory, value );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<ItemGroup role=\"list\">\n\t\t\t\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonSelectCategory(\n\t\t\t\t\t\t\t\t\t\t\tcategory,\n\t\t\t\t\t\t\t\t\t\t\tpatternSourceFilter\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'block-editor-inserter__patterns-category block-editor-inserter__patterns-selected-category'\n\t\t\t\t\t\t\t\t\t\t\t: 'block-editor-inserter__patterns-category'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-label={ category.label }\n\t\t\t\t\t\t\t\t\taria-current={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'true'\n\t\t\t\t\t\t\t\t\t\t\t: undefined\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<HStack>\n\t\t\t\t\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tisRTL()\n\t\t\t\t\t\t\t\t\t\t\t\t\t? chevronLeft\n\t\t\t\t\t\t\t\t\t\t\t\t\t: chevronRight\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t<div role=\"listitem\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__patterns-explore-button\"\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tsetShowPatternsExplorer( true )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Explore all patterns' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t</nav>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t<MobileTabNavigation categories={ categories }>\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t\t\tshowTitlesAsTooltip={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</MobileTabNavigation>\n\t\t\t) }\n\t\t\t{ showPatternsExplorer && (\n\t\t\t\t<PatternsExplorerModal\n\t\t\t\t\tinitialCategory={ initialCategory }\n\t\t\t\t\tpatternCategories={ categories }\n\t\t\t\t\tonModalClose={ () => setShowPatternsExplorer( false ) }\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default BlockPatternsTabs;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useMemo","useState","useCallback","useRef","useEffect","_x","__","_n","isRTL","sprintf","useViewportMatch","__experimentalItemGroup","ItemGroup","__experimentalItem","Item","__experimentalHStack","HStack","__experimentalVStack","VStack","__experimentalHeading","Heading","__experimentalText","Text","FlexBlock","Button","Icon","chevronRight","chevronLeft","focus","speak","usePatternsState","BlockPatternList","PatternsExplorerModal","MobileTabNavigation","usePatternsPaging","BlockPatternsSyncFilter","SYNC_TYPES","PATTERN_TYPES","noop","allPatternsCategory","name","label","myPatternsCategory","isPatternFiltered","pattern","sourceFilter","syncFilter","isUserPattern","startsWith","isDirectoryPattern","source","theme","directory","user","id","full","syncStatus","unsynced","usePatternsCategories","rootClientId","patterns","allCategories","undefined","filteredPatterns","filter","hasRegisteredCategory","categories","length","some","cat","category","populatedCategories","includes","sort","a","b","localeCompare","find","push","unshift","BlockPatternsCategoryDialog","onInsert","onHover","showTitlesAsTooltip","patternFilter","container","timeout","setTimeout","firstTabbable","tabbable","current","clearTimeout","createElement","ref","className","BlockPatternsCategoryPanel","key","allPatterns","onClickPattern","patternSyncFilter","setPatternSyncFilter","patternSourceFilter","setPatternSourceFilter","availableCategories","scrollContainerRef","currentCategoryPatterns","_pattern$categories$f","availablePatternCategories","availableCategory","pagingProps","changePage","onSetPatternSyncFilter","value","onSetPatternSourceFilter","spacing","level","as","description","variant","shownPatterns","categoryPatternsAsyncList","blockPatterns","categoryPatterns","orientation","isDraggable","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","initialCategory","isMobile","Fragment","role","map","onClick","icon","patternCategories","onModalClose"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-tab.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { _x, __, _n, isRTL, sprintf } from '@wordpress/i18n';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalHeading as Heading,\n\t__experimentalText as Text,\n\tFlexBlock,\n\tButton,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\nimport { focus } from '@wordpress/dom';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from './hooks/use-patterns-state';\nimport BlockPatternList from '../block-patterns-list';\nimport PatternsExplorerModal from './block-patterns-explorer/explorer';\nimport MobileTabNavigation from './mobile-tab-navigation';\nimport usePatternsPaging from './hooks/use-patterns-paging';\nimport {\n\tBlockPatternsSyncFilter,\n\tSYNC_TYPES,\n\tPATTERN_TYPES,\n} from './block-patterns-filter';\n\nconst noop = () => {};\n\nexport const allPatternsCategory = {\n\tname: 'allPatterns',\n\tlabel: __( 'All patterns' ),\n};\n\nexport const myPatternsCategory = {\n\tname: 'myPatterns',\n\tlabel: __( 'My patterns' ),\n};\n\nexport function isPatternFiltered( pattern, sourceFilter, syncFilter ) {\n\tconst isUserPattern = pattern.name.startsWith( 'core/block' );\n\tconst isDirectoryPattern =\n\t\tpattern.source === 'core' ||\n\t\tpattern.source?.startsWith( 'pattern-directory' );\n\n\t// If theme source selected, filter out user created patterns and those from\n\t// the core patterns directory.\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.theme &&\n\t\t( isUserPattern || isDirectoryPattern )\n\t) {\n\t\treturn true;\n\t}\n\n\t// If the directory source is selected, filter out user created patterns\n\t// and those bundled with the theme.\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.directory &&\n\t\t( isUserPattern || ! isDirectoryPattern )\n\t) {\n\t\treturn true;\n\t}\n\n\t// If user source selected, filter out theme patterns. Any pattern without\n\t// an id wasn't created by a user.\n\tif ( sourceFilter === PATTERN_TYPES.user && ! pattern.id ) {\n\t\treturn true;\n\t}\n\n\t// Filter by sync status.\n\tif ( syncFilter === SYNC_TYPES.full && pattern.syncStatus !== '' ) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tsyncFilter === SYNC_TYPES.unsynced &&\n\t\tpattern.syncStatus !== 'unsynced' &&\n\t\tisUserPattern\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function usePatternsCategories( rootClientId, sourceFilter = 'all' ) {\n\tconst [ patterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst filteredPatterns = useMemo(\n\t\t() =>\n\t\t\tsourceFilter === 'all'\n\t\t\t\t? patterns\n\t\t\t\t: patterns.filter(\n\t\t\t\t\t\t( pattern ) =>\n\t\t\t\t\t\t\t! isPatternFiltered( pattern, sourceFilter )\n\t\t\t\t ),\n\t\t[ sourceFilter, patterns ]\n\t);\n\n\tconst hasRegisteredCategory = useCallback(\n\t\t( pattern ) => {\n\t\t\tif ( ! pattern.categories || ! pattern.categories.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn pattern.categories.some( ( cat ) =>\n\t\t\t\tallCategories.some( ( category ) => category.name === cat )\n\t\t\t);\n\t\t},\n\t\t[ allCategories ]\n\t);\n\n\t// Remove any empty categories.\n\tconst populatedCategories = useMemo( () => {\n\t\tconst categories = allCategories\n\t\t\t.filter( ( category ) =>\n\t\t\t\tfilteredPatterns.some( ( pattern ) =>\n\t\t\t\t\tpattern.categories?.includes( category.name )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.sort( ( a, b ) => a.label.localeCompare( b.label ) );\n\n\t\tif (\n\t\t\tfilteredPatterns.some(\n\t\t\t\t( pattern ) => ! hasRegisteredCategory( pattern )\n\t\t\t) &&\n\t\t\t! categories.find(\n\t\t\t\t( category ) => category.name === 'uncategorized'\n\t\t\t)\n\t\t) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'uncategorized',\n\t\t\t\tlabel: _x( 'Uncategorized' ),\n\t\t\t} );\n\t\t}\n\t\tif ( filteredPatterns.some( ( pattern ) => pattern.id ) ) {\n\t\t\tcategories.unshift( myPatternsCategory );\n\t\t}\n\t\tif ( filteredPatterns.length > 0 ) {\n\t\t\tcategories.unshift( {\n\t\t\t\tname: allPatternsCategory.name,\n\t\t\t\tlabel: allPatternsCategory.label,\n\t\t\t} );\n\t\t}\n\t\tspeak(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %d: number of categories . */\n\t\t\t\t_n(\n\t\t\t\t\t'%d category button displayed.',\n\t\t\t\t\t'%d category buttons displayed.',\n\t\t\t\t\tcategories.length\n\t\t\t\t),\n\t\t\t\tcategories.length\n\t\t\t)\n\t\t);\n\t\treturn categories;\n\t}, [ allCategories, filteredPatterns, hasRegisteredCategory ] );\n\n\treturn populatedCategories;\n}\n\nexport function BlockPatternsCategoryDialog( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n\tpatternFilter,\n} ) {\n\tconst container = useRef();\n\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tconst [ firstTabbable ] = focus.tabbable.find( container.current );\n\t\t\tfirstTabbable?.focus();\n\t\t} );\n\t\treturn () => clearTimeout( timeout );\n\t}, [ category ] );\n\n\treturn (\n\t\t<div\n\t\t\tref={ container }\n\t\t\tclassName=\"block-editor-inserter__patterns-category-dialog\"\n\t\t>\n\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\tkey={ category.name }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tcategory={ category }\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t\tpatternFilter={ patternFilter }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nexport function BlockPatternsCategoryPanel( {\n\trootClientId,\n\tonInsert,\n\tonHover = noop,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst [ allPatterns, , onClickPattern ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId\n\t);\n\tconst [ patternSyncFilter, setPatternSyncFilter ] = useState( 'all' );\n\tconst [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' );\n\n\tconst availableCategories = usePatternsCategories(\n\t\trootClientId,\n\t\tpatternSourceFilter\n\t);\n\tconst scrollContainerRef = useRef();\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif (\n\t\t\t\t\tisPatternFiltered(\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tpatternSourceFilter,\n\t\t\t\t\t\tpatternSyncFilter\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( category.name === allPatternsCategory.name ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif ( category.name === myPatternsCategory.name && pattern.id ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif ( category.name !== 'uncategorized' ) {\n\t\t\t\t\treturn pattern.categories?.includes( category.name );\n\t\t\t\t}\n\n\t\t\t\t// The uncategorized category should show all the patterns without any category\n\t\t\t\t// or with no available category.\n\t\t\t\tconst availablePatternCategories =\n\t\t\t\t\tpattern.categories?.filter( ( cat ) =>\n\t\t\t\t\t\tavailableCategories.find(\n\t\t\t\t\t\t\t( availableCategory ) =>\n\t\t\t\t\t\t\t\tavailableCategory.name === cat\n\t\t\t\t\t\t)\n\t\t\t\t\t) ?? [];\n\n\t\t\t\treturn availablePatternCategories.length === 0;\n\t\t\t} ),\n\t\t[\n\t\t\tallPatterns,\n\t\t\tavailableCategories,\n\t\t\tcategory.name,\n\t\t\tpatternSourceFilter,\n\t\t\tpatternSyncFilter,\n\t\t]\n\t);\n\n\tconst pagingProps = usePatternsPaging(\n\t\tcurrentCategoryPatterns,\n\t\tcategory,\n\t\tscrollContainerRef\n\t);\n\tconst { changePage } = pagingProps;\n\n\t// Hide block pattern preview on unmount.\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tuseEffect( () => () => onHover( null ), [] );\n\n\tconst onSetPatternSyncFilter = useCallback(\n\t\t( value ) => {\n\t\t\tsetPatternSyncFilter( value );\n\t\t\tchangePage( 1 );\n\t\t},\n\t\t[ setPatternSyncFilter, changePage ]\n\t);\n\tconst onSetPatternSourceFilter = useCallback(\n\t\t( value ) => {\n\t\t\tsetPatternSourceFilter( value );\n\t\t\tchangePage( 1 );\n\t\t},\n\t\t[ setPatternSourceFilter, changePage ]\n\t);\n\n\treturn (\n\t\t<div className=\"block-editor-inserter__patterns-category-panel\">\n\t\t\t<VStack\n\t\t\t\tspacing={ 2 }\n\t\t\t\tclassName=\"block-editor-inserter__patterns-category-panel-header\"\n\t\t\t>\n\t\t\t\t<HStack>\n\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t<Heading level={ 4 } as=\"div\">\n\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t</Heading>\n\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t<BlockPatternsSyncFilter\n\t\t\t\t\t\tpatternSyncFilter={ patternSyncFilter }\n\t\t\t\t\t\tpatternSourceFilter={ patternSourceFilter }\n\t\t\t\t\t\tsetPatternSyncFilter={ onSetPatternSyncFilter }\n\t\t\t\t\t\tsetPatternSourceFilter={ onSetPatternSourceFilter }\n\t\t\t\t\t\tscrollContainerRef={ scrollContainerRef }\n\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t/>\n\t\t\t\t</HStack>\n\t\t\t\t{ category.description && (\n\t\t\t\t\t<Text>{ category.description }</Text>\n\t\t\t\t) }\n\t\t\t\t{ ! currentCategoryPatterns.length && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvariant=\"muted\"\n\t\t\t\t\t\tclassName=\"block-editor-inserter__patterns-category-no-results\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'No results found' ) }\n\t\t\t\t\t</Text>\n\t\t\t\t) }\n\t\t\t</VStack>\n\n\t\t\t{ currentCategoryPatterns.length > 0 && (\n\t\t\t\t<BlockPatternList\n\t\t\t\t\tref={ scrollContainerRef }\n\t\t\t\t\tshownPatterns={ pagingProps.categoryPatternsAsyncList }\n\t\t\t\t\tblockPatterns={ pagingProps.categoryPatterns }\n\t\t\t\t\tonClickPattern={ onClickPattern }\n\t\t\t\t\tonHover={ onHover }\n\t\t\t\t\tlabel={ category.label }\n\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\tcategory={ category.name }\n\t\t\t\t\tisDraggable\n\t\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t\t\tpatternFilter={ patternSourceFilter }\n\t\t\t\t\tpagingProps={ pagingProps }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nfunction BlockPatternsTabs( {\n\tonSelectCategory,\n\tselectedCategory,\n\tonInsert,\n\trootClientId,\n} ) {\n\tconst [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );\n\n\tconst categories = usePatternsCategories( rootClientId );\n\n\tconst initialCategory = selectedCategory || categories[ 0 ];\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t<div className=\"block-editor-inserter__block-patterns-tabs-container\">\n\t\t\t\t\t<nav\n\t\t\t\t\t\taria-label={ __( 'Block pattern categories' ) }\n\t\t\t\t\t\tclassName=\"block-editor-inserter__block-patterns-tabs\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ItemGroup role=\"list\">\n\t\t\t\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonSelectCategory( category )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'block-editor-inserter__patterns-category block-editor-inserter__patterns-selected-category'\n\t\t\t\t\t\t\t\t\t\t\t: 'block-editor-inserter__patterns-category'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-label={ category.label }\n\t\t\t\t\t\t\t\t\taria-current={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'true'\n\t\t\t\t\t\t\t\t\t\t\t: undefined\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<HStack>\n\t\t\t\t\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tisRTL()\n\t\t\t\t\t\t\t\t\t\t\t\t\t? chevronLeft\n\t\t\t\t\t\t\t\t\t\t\t\t\t: chevronRight\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t<div role=\"listitem\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__patterns-explore-button\"\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tsetShowPatternsExplorer( true )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Explore all patterns' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t</nav>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t<MobileTabNavigation categories={ categories }>\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t\t\tshowTitlesAsTooltip={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</MobileTabNavigation>\n\t\t\t) }\n\t\t\t{ showPatternsExplorer && (\n\t\t\t\t<PatternsExplorerModal\n\t\t\t\t\tinitialCategory={ initialCategory }\n\t\t\t\t\tpatternCategories={ categories }\n\t\t\t\t\tonModalClose={ () => setShowPatternsExplorer( false ) }\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default BlockPatternsTabs;\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { useMemo, useState } from '@wordpress/element';
|
|
4
|
+
import { useMemo, useState, useEffect } from '@wordpress/element';
|
|
5
5
|
import { useAsyncList, usePrevious } from '@wordpress/compose';
|
|
6
6
|
import { getScrollContainer } from '@wordpress/dom';
|
|
7
7
|
const PAGE_SIZE = 20;
|
|
@@ -38,6 +38,10 @@ export default function usePatternsPaging(currentCategoryPatterns, currentCatego
|
|
|
38
38
|
scrollContainer?.scrollTo(0, 0);
|
|
39
39
|
setCurrentPage(page);
|
|
40
40
|
};
|
|
41
|
+
useEffect(function scrollToTopOnCategoryChange() {
|
|
42
|
+
const scrollContainer = getScrollContainer(scrollContainerRef?.current);
|
|
43
|
+
scrollContainer?.scrollTo(0, 0);
|
|
44
|
+
}, [currentCategory, scrollContainerRef]);
|
|
41
45
|
return {
|
|
42
46
|
totalItems,
|
|
43
47
|
categoryPatterns,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","useState","useAsyncList","usePrevious","getScrollContainer","PAGE_SIZE","INITIAL_INSERTER_RESULTS","usePatternsPaging","currentCategoryPatterns","currentCategory","scrollContainerRef","currentFilter","currentPage","setCurrentPage","previousCategory","previousFilter","totalItems","length","pageIndex","categoryPatterns","slice","categoryPatternsAsyncList","step","numPages","Math","ceil","changePage","page","scrollContainer","current","scrollTo"],"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-paging.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, useState } from '@wordpress/element';\nimport { useAsyncList, usePrevious } from '@wordpress/compose';\nimport { getScrollContainer } from '@wordpress/dom';\n\nconst PAGE_SIZE = 20;\nconst INITIAL_INSERTER_RESULTS = 5;\n\n/**\n * Supplies values needed to page the patterns list client side.\n *\n * @param {Array} currentCategoryPatterns An array of the current patterns to display.\n * @param {string} currentCategory The currently selected category.\n * @param {Object} scrollContainerRef Ref of container to to find scroll container for when moving between pages.\n * @param {string} currentFilter The currently search filter.\n *\n * @return {Object} Returns the relevant paging values. (totalItems, categoryPatternsList, numPages, changePage, currentPage)\n */\nexport default function usePatternsPaging(\n\tcurrentCategoryPatterns,\n\tcurrentCategory,\n\tscrollContainerRef,\n\tcurrentFilter = ''\n) {\n\tconst [ currentPage, setCurrentPage ] = useState( 1 );\n\tconst previousCategory = usePrevious( currentCategory );\n\tconst previousFilter = usePrevious( currentFilter );\n\tif (\n\t\t( previousCategory !== currentCategory ||\n\t\t\tpreviousFilter !== currentFilter ) &&\n\t\tcurrentPage !== 1\n\t) {\n\t\tsetCurrentPage( 1 );\n\t}\n\tconst totalItems = currentCategoryPatterns.length;\n\tconst pageIndex = currentPage - 1;\n\tconst categoryPatterns = useMemo( () => {\n\t\treturn currentCategoryPatterns.slice(\n\t\t\tpageIndex * PAGE_SIZE,\n\t\t\tpageIndex * PAGE_SIZE + PAGE_SIZE\n\t\t);\n\t}, [ pageIndex, currentCategoryPatterns ] );\n\tconst categoryPatternsAsyncList = useAsyncList( categoryPatterns, {\n\t\tstep: INITIAL_INSERTER_RESULTS,\n\t} );\n\tconst numPages = Math.ceil( currentCategoryPatterns.length / PAGE_SIZE );\n\tconst changePage = ( page ) => {\n\t\tconst scrollContainer = getScrollContainer(\n\t\t\tscrollContainerRef?.current\n\t\t);\n\t\tscrollContainer?.scrollTo( 0, 0 );\n\n\t\tsetCurrentPage( page );\n\t};\n\treturn {\n\t\ttotalItems,\n\t\tcategoryPatterns,\n\t\tcategoryPatternsAsyncList,\n\t\tnumPages,\n\t\tchangePage,\n\t\tcurrentPage,\n\t};\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,EAAEC,QAAQ,QAAQ,oBAAoB;
|
|
1
|
+
{"version":3,"names":["useMemo","useState","useEffect","useAsyncList","usePrevious","getScrollContainer","PAGE_SIZE","INITIAL_INSERTER_RESULTS","usePatternsPaging","currentCategoryPatterns","currentCategory","scrollContainerRef","currentFilter","currentPage","setCurrentPage","previousCategory","previousFilter","totalItems","length","pageIndex","categoryPatterns","slice","categoryPatternsAsyncList","step","numPages","Math","ceil","changePage","page","scrollContainer","current","scrollTo","scrollToTopOnCategoryChange"],"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-paging.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, useState, useEffect } from '@wordpress/element';\nimport { useAsyncList, usePrevious } from '@wordpress/compose';\nimport { getScrollContainer } from '@wordpress/dom';\n\nconst PAGE_SIZE = 20;\nconst INITIAL_INSERTER_RESULTS = 5;\n\n/**\n * Supplies values needed to page the patterns list client side.\n *\n * @param {Array} currentCategoryPatterns An array of the current patterns to display.\n * @param {string} currentCategory The currently selected category.\n * @param {Object} scrollContainerRef Ref of container to to find scroll container for when moving between pages.\n * @param {string} currentFilter The currently search filter.\n *\n * @return {Object} Returns the relevant paging values. (totalItems, categoryPatternsList, numPages, changePage, currentPage)\n */\nexport default function usePatternsPaging(\n\tcurrentCategoryPatterns,\n\tcurrentCategory,\n\tscrollContainerRef,\n\tcurrentFilter = ''\n) {\n\tconst [ currentPage, setCurrentPage ] = useState( 1 );\n\tconst previousCategory = usePrevious( currentCategory );\n\tconst previousFilter = usePrevious( currentFilter );\n\tif (\n\t\t( previousCategory !== currentCategory ||\n\t\t\tpreviousFilter !== currentFilter ) &&\n\t\tcurrentPage !== 1\n\t) {\n\t\tsetCurrentPage( 1 );\n\t}\n\tconst totalItems = currentCategoryPatterns.length;\n\tconst pageIndex = currentPage - 1;\n\tconst categoryPatterns = useMemo( () => {\n\t\treturn currentCategoryPatterns.slice(\n\t\t\tpageIndex * PAGE_SIZE,\n\t\t\tpageIndex * PAGE_SIZE + PAGE_SIZE\n\t\t);\n\t}, [ pageIndex, currentCategoryPatterns ] );\n\tconst categoryPatternsAsyncList = useAsyncList( categoryPatterns, {\n\t\tstep: INITIAL_INSERTER_RESULTS,\n\t} );\n\tconst numPages = Math.ceil( currentCategoryPatterns.length / PAGE_SIZE );\n\tconst changePage = ( page ) => {\n\t\tconst scrollContainer = getScrollContainer(\n\t\t\tscrollContainerRef?.current\n\t\t);\n\t\tscrollContainer?.scrollTo( 0, 0 );\n\n\t\tsetCurrentPage( page );\n\t};\n\n\tuseEffect(\n\t\tfunction scrollToTopOnCategoryChange() {\n\t\t\tconst scrollContainer = getScrollContainer(\n\t\t\t\tscrollContainerRef?.current\n\t\t\t);\n\t\t\tscrollContainer?.scrollTo( 0, 0 );\n\t\t},\n\t\t[ currentCategory, scrollContainerRef ]\n\t);\n\n\treturn {\n\t\ttotalItems,\n\t\tcategoryPatterns,\n\t\tcategoryPatternsAsyncList,\n\t\tnumPages,\n\t\tchangePage,\n\t\tcurrentPage,\n\t};\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,oBAAoB;AACjE,SAASC,YAAY,EAAEC,WAAW,QAAQ,oBAAoB;AAC9D,SAASC,kBAAkB,QAAQ,gBAAgB;AAEnD,MAAMC,SAAS,GAAG,EAAE;AACpB,MAAMC,wBAAwB,GAAG,CAAC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,iBAAiBA,CACxCC,uBAAuB,EACvBC,eAAe,EACfC,kBAAkB,EAClBC,aAAa,GAAG,EAAE,EACjB;EACD,MAAM,CAAEC,WAAW,EAAEC,cAAc,CAAE,GAAGb,QAAQ,CAAE,CAAE,CAAC;EACrD,MAAMc,gBAAgB,GAAGX,WAAW,CAAEM,eAAgB,CAAC;EACvD,MAAMM,cAAc,GAAGZ,WAAW,CAAEQ,aAAc,CAAC;EACnD,IACC,CAAEG,gBAAgB,KAAKL,eAAe,IACrCM,cAAc,KAAKJ,aAAa,KACjCC,WAAW,KAAK,CAAC,EAChB;IACDC,cAAc,CAAE,CAAE,CAAC;EACpB;EACA,MAAMG,UAAU,GAAGR,uBAAuB,CAACS,MAAM;EACjD,MAAMC,SAAS,GAAGN,WAAW,GAAG,CAAC;EACjC,MAAMO,gBAAgB,GAAGpB,OAAO,CAAE,MAAM;IACvC,OAAOS,uBAAuB,CAACY,KAAK,CACnCF,SAAS,GAAGb,SAAS,EACrBa,SAAS,GAAGb,SAAS,GAAGA,SACzB,CAAC;EACF,CAAC,EAAE,CAAEa,SAAS,EAAEV,uBAAuB,CAAG,CAAC;EAC3C,MAAMa,yBAAyB,GAAGnB,YAAY,CAAEiB,gBAAgB,EAAE;IACjEG,IAAI,EAAEhB;EACP,CAAE,CAAC;EACH,MAAMiB,QAAQ,GAAGC,IAAI,CAACC,IAAI,CAAEjB,uBAAuB,CAACS,MAAM,GAAGZ,SAAU,CAAC;EACxE,MAAMqB,UAAU,GAAKC,IAAI,IAAM;IAC9B,MAAMC,eAAe,GAAGxB,kBAAkB,CACzCM,kBAAkB,EAAEmB,OACrB,CAAC;IACDD,eAAe,EAAEE,QAAQ,CAAE,CAAC,EAAE,CAAE,CAAC;IAEjCjB,cAAc,CAAEc,IAAK,CAAC;EACvB,CAAC;EAED1B,SAAS,CACR,SAAS8B,2BAA2BA,CAAA,EAAG;IACtC,MAAMH,eAAe,GAAGxB,kBAAkB,CACzCM,kBAAkB,EAAEmB,OACrB,CAAC;IACDD,eAAe,EAAEE,QAAQ,CAAE,CAAC,EAAE,CAAE,CAAC;EAClC,CAAC,EACD,CAAErB,eAAe,EAAEC,kBAAkB,CACtC,CAAC;EAED,OAAO;IACNM,UAAU;IACVG,gBAAgB;IAChBE,yBAAyB;IACzBE,QAAQ;IACRG,UAAU;IACVd;EACD,CAAC;AACF"}
|
|
@@ -119,7 +119,7 @@ function InserterSearchResults({
|
|
|
119
119
|
isDraggable: isDraggable
|
|
120
120
|
}));
|
|
121
121
|
const patternsUI = !!filteredBlockPatterns.length && createElement(InserterPanel, {
|
|
122
|
-
title: createElement(VisuallyHidden, null, __('Block
|
|
122
|
+
title: createElement(VisuallyHidden, null, __('Block patterns'))
|
|
123
123
|
}, createElement("div", {
|
|
124
124
|
className: "block-editor-inserter__quick-inserter-patterns"
|
|
125
125
|
}, createElement(BlockPatternsList, {
|