UNPKG

@wordpress/block-editor

Version:
8 lines (7 loc) 7.74 kB
{ "version": 3, "sources": ["../../../../src/components/inserter/block-patterns-explorer/pattern-list.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect, useRef, useState } from '@wordpress/element';\nimport { _n, sprintf } from '@wordpress/i18n';\nimport { useDebounce } from '@wordpress/compose';\nimport { __experimentalHeading as Heading } from '@wordpress/components';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport BlockPatternsList from '../../block-patterns-list';\nimport useInsertionPoint from '../hooks/use-insertion-point';\nimport usePatternsState from '../hooks/use-patterns-state';\nimport InserterListbox from '../../inserter-listbox';\nimport { searchItems } from '../search-items';\nimport BlockPatternsPaging from '../../block-patterns-paging';\nimport usePatternsPaging from '../hooks/use-patterns-paging';\nimport {\n\tINSERTER_PATTERN_TYPES,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n\tstarterPatternsCategory,\n} from '../block-patterns-tab/utils';\n\nfunction PatternsListHeader( { filterValue, filteredBlockPatternsLength } ) {\n\tif ( ! filterValue ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Heading\n\t\t\tlevel={ 2 }\n\t\t\tlineHeight=\"48px\"\n\t\t\tclassName=\"block-editor-block-patterns-explorer__search-results-count\"\n\t\t>\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %d: number of patterns. */\n\t\t\t\t_n(\n\t\t\t\t\t'%d pattern found',\n\t\t\t\t\t'%d patterns found',\n\t\t\t\t\tfilteredBlockPatternsLength\n\t\t\t\t),\n\t\t\t\tfilteredBlockPatternsLength\n\t\t\t) }\n\t\t</Heading>\n\t);\n}\n\nfunction PatternList( {\n\tsearchValue,\n\tselectedCategory,\n\tpatternCategories,\n\trootClientId,\n\tonModalClose,\n} ) {\n\tconst container = useRef();\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\trootClientId,\n\t\tshouldFocusBlock: true,\n\t} );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId,\n\t\tselectedCategory\n\t);\n\n\tconst registeredPatternCategories = useMemo(\n\t\t() =>\n\t\t\tpatternCategories.map(\n\t\t\t\t( patternCategory ) => patternCategory.name\n\t\t\t),\n\t\t[ patternCategories ]\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tconst filteredPatterns = patterns.filter( ( pattern ) => {\n\t\t\tif ( selectedCategory === allPatternsCategory.name ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === myPatternsCategory.name &&\n\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === starterPatternsCategory.name &&\n\t\t\t\tpattern.blockTypes?.includes( 'core/post-content' )\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif ( selectedCategory === 'uncategorized' ) {\n\t\t\t\tconst hasKnownCategory =\n\t\t\t\t\tpattern.categories?.some( ( category ) =>\n\t\t\t\t\t\tregisteredPatternCategories.includes( category )\n\t\t\t\t\t) ?? false;\n\n\t\t\t\treturn ! pattern.categories?.length || ! hasKnownCategory;\n\t\t\t}\n\n\t\t\treturn pattern.categories?.includes( selectedCategory );\n\t\t} );\n\n\t\tif ( ! searchValue ) {\n\t\t\treturn filteredPatterns;\n\t\t}\n\n\t\treturn searchItems( filteredPatterns, searchValue );\n\t}, [\n\t\tsearchValue,\n\t\tpatterns,\n\t\tselectedCategory,\n\t\tregisteredPatternCategories,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! searchValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockPatterns.length;\n\t\tconst resultsFoundMessage = sprintf(\n\t\t\t/* translators: %d: number of results. */\n\t\t\t_n( '%d result found.', '%d results found.', count ),\n\t\t\tcount\n\t\t);\n\t\tdebouncedSpeak( resultsFoundMessage );\n\t}, [ searchValue, debouncedSpeak, filteredBlockPatterns.length ] );\n\n\tconst pagingProps = usePatternsPaging(\n\t\tfilteredBlockPatterns,\n\t\tselectedCategory,\n\t\tcontainer\n\t);\n\n\t// Reset page when search value changes.\n\tconst [ previousSearchValue, setPreviousSearchValue ] =\n\t\tuseState( searchValue );\n\tif ( searchValue !== previousSearchValue ) {\n\t\tsetPreviousSearchValue( searchValue );\n\t\tpagingProps.changePage( 1 );\n\t}\n\n\tconst hasItems = !! filteredBlockPatterns?.length;\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-editor-block-patterns-explorer__list\"\n\t\t\tref={ container }\n\t\t>\n\t\t\t<PatternsListHeader\n\t\t\t\tfilterValue={ searchValue }\n\t\t\t\tfilteredBlockPatternsLength={ filteredBlockPatterns.length }\n\t\t\t/>\n\n\t\t\t<InserterListbox>\n\t\t\t\t{ hasItems && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\t\tblockPatterns={ pagingProps.categoryPatterns }\n\t\t\t\t\t\t\tonClickPattern={ ( pattern, blocks ) => {\n\t\t\t\t\t\t\t\tonClickPattern( pattern, blocks );\n\t\t\t\t\t\t\t\tonModalClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisDraggable={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockPatternsPaging { ...pagingProps } />\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</InserterListbox>\n\t\t</div>\n\t);\n}\n\nexport default PatternList;\n"], "mappings": "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", "names": ["Heading", "useInsertionPoint", "usePatternsState", "usePatternsPaging", "InserterListbox", "BlockPatternsList", "BlockPatternsPaging"] }