|
2 | 2 | * WordPress dependencies
|
3 | 3 | */
|
4 | 4 | import { Modal } from '@wordpress/components';
|
5 |
| -import { useState } from '@wordpress/element'; |
| 5 | +import { useState, useEffect } from '@wordpress/element'; |
6 | 6 | import { __ } from '@wordpress/i18n';
|
| 7 | +import { useSelect } from '@wordpress/data'; |
| 8 | +import { usePrevious } from '@wordpress/compose'; |
7 | 9 |
|
8 | 10 | /**
|
9 | 11 | * Internal dependencies
|
10 | 12 | */
|
11 | 13 | import PatternExplorerSidebar from './sidebar';
|
12 | 14 | import PatternList from './patterns-list';
|
| 15 | +import { usePatternsCategories } from '../block-patterns-tab'; |
| 16 | +import { store as blockEditorStore } from '../../../store'; |
13 | 17 |
|
14 |
| -function PatternsExplorer( { initialCategory, patternCategories } ) { |
15 |
| - const [ filterValue, setFilterValue ] = useState( '' ); |
| 18 | +function PatternsExplorer( { initialCategory, rootClientId } ) { |
| 19 | + const [ searchValue, setSearchValue ] = useState( '' ); |
| 20 | + const [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' ); |
| 21 | + const patternSyncFilter = useSelect( ( select ) => { |
| 22 | + const { getSettings } = select( blockEditorStore ); |
| 23 | + const settings = getSettings(); |
| 24 | + return settings.patternsSyncFilter || 'all'; |
| 25 | + }, [] ); |
16 | 26 | const [ selectedCategory, setSelectedCategory ] = useState(
|
17 | 27 | initialCategory?.name
|
18 | 28 | );
|
| 29 | + |
| 30 | + const previousSyncFilter = usePrevious( patternSyncFilter ); |
| 31 | + |
| 32 | + // If the sync filter changes, we need to select the "All" category to avoid |
| 33 | + // showing a confusing no results screen. |
| 34 | + useEffect( () => { |
| 35 | + if ( patternSyncFilter && patternSyncFilter !== previousSyncFilter ) { |
| 36 | + setSelectedCategory( initialCategory?.name ); |
| 37 | + } |
| 38 | + }, [ |
| 39 | + patternSyncFilter, |
| 40 | + previousSyncFilter, |
| 41 | + patternSourceFilter, |
| 42 | + initialCategory?.name, |
| 43 | + ] ); |
| 44 | + |
| 45 | + const patternCategories = usePatternsCategories( |
| 46 | + rootClientId, |
| 47 | + patternSourceFilter, |
| 48 | + patternSyncFilter |
| 49 | + ); |
| 50 | + |
19 | 51 | return (
|
20 | 52 | <div className="block-editor-block-patterns-explorer">
|
21 | 53 | <PatternExplorerSidebar
|
22 | 54 | selectedCategory={ selectedCategory }
|
23 | 55 | patternCategories={ patternCategories }
|
24 | 56 | onClickCategory={ setSelectedCategory }
|
25 |
| - filterValue={ filterValue } |
26 |
| - setFilterValue={ setFilterValue } |
| 57 | + searchValue={ searchValue } |
| 58 | + setSearchValue={ setSearchValue } |
| 59 | + patternSourceFilter={ patternSourceFilter } |
| 60 | + setPatternSourceFilter={ setPatternSourceFilter } |
27 | 61 | />
|
28 | 62 | <PatternList
|
29 |
| - filterValue={ filterValue } |
| 63 | + searchValue={ searchValue } |
30 | 64 | selectedCategory={ selectedCategory }
|
31 | 65 | patternCategories={ patternCategories }
|
| 66 | + patternSourceFilter={ patternSourceFilter } |
| 67 | + patternSyncFilter={ patternSyncFilter } |
32 | 68 | />
|
33 | 69 | </div>
|
34 | 70 | );
|
|
0 commit comments