@wordpress/block-editor
Version:
8 lines (7 loc) • 10.5 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/inserter/search-results.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect } from '@wordpress/element';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { VisuallyHidden } from '@wordpress/components';\nimport { useDebounce, useAsyncList } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport BlockPatternsList from '../block-patterns-list';\nimport __unstableInserterMenuExtension from '../inserter-menu-extension';\nimport InserterPanel from './panel';\nimport InserterNoResults from './no-results';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport usePatternsState from './hooks/use-patterns-state';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport { searchBlockItems, searchItems } from './search-items';\nimport InserterListbox from '../inserter-listbox';\nimport { orderBy } from '../../utils/sorting';\nimport { orderInserterBlockItems } from '../../utils/order-inserter-block-items';\nimport { store as blockEditorStore } from '../../store';\n\nconst INITIAL_INSERTER_RESULTS = 9;\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation and rerendering the component.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nfunction InserterSearchResults( {\n\tfilterValue,\n\tonSelect,\n\tonHover,\n\tonHoverPattern,\n\trootClientId,\n\tclientId,\n\tisAppender,\n\t__experimentalInsertionIndex,\n\tmaxBlockPatterns,\n\tmaxBlockTypes,\n\tshowBlockDirectory = false,\n\tisDraggable = true,\n\tshouldFocusBlock = true,\n\tprioritizePatterns,\n\tselectBlockOnInsert,\n\tisQuick,\n} ) {\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\n\tconst { prioritizedBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst blockListSettings =\n\t\t\t\tselect( blockEditorStore ).getBlockListSettings( rootClientId );\n\n\t\t\treturn {\n\t\t\t\tprioritizedBlocks:\n\t\t\t\t\tblockListSettings?.prioritizedInserterBlocks || EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\tonSelect,\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\tinsertionIndex: __experimentalInsertionIndex,\n\t\tshouldFocusBlock,\n\t\tselectBlockOnInsert,\n\t} );\n\tconst [\n\t\tblockTypes,\n\t\tblockTypeCategories,\n\t\tblockTypeCollections,\n\t\tonSelectBlockType,\n\t] = useBlockTypesState( destinationRootClientId, onInsertBlocks, isQuick );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId,\n\t\tundefined,\n\t\tisQuick\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tif ( maxBlockPatterns === 0 ) {\n\t\t\treturn [];\n\t\t}\n\t\tconst results = searchItems( patterns, filterValue );\n\t\treturn maxBlockPatterns !== undefined\n\t\t\t? results.slice( 0, maxBlockPatterns )\n\t\t\t: results;\n\t}, [ filterValue, patterns, maxBlockPatterns ] );\n\n\tlet maxBlockTypesToShow = maxBlockTypes;\n\tif ( prioritizePatterns && filteredBlockPatterns.length > 2 ) {\n\t\tmaxBlockTypesToShow = 0;\n\t}\n\n\tconst filteredBlockTypes = useMemo( () => {\n\t\tif ( maxBlockTypesToShow === 0 ) {\n\t\t\treturn [];\n\t\t}\n\t\tconst nonPatternBlockTypes = blockTypes.filter(\n\t\t\t( blockType ) => blockType.name !== 'core/block'\n\t\t);\n\t\tlet orderedItems = orderBy( nonPatternBlockTypes, 'frecency', 'desc' );\n\n\t\tif ( ! filterValue && prioritizedBlocks.length ) {\n\t\t\torderedItems = orderInserterBlockItems(\n\t\t\t\torderedItems,\n\t\t\t\tprioritizedBlocks\n\t\t\t);\n\t\t}\n\n\t\tconst results = searchBlockItems(\n\t\t\torderedItems,\n\t\t\tblockTypeCategories,\n\t\t\tblockTypeCollections,\n\t\t\tfilterValue\n\t\t);\n\n\t\treturn maxBlockTypesToShow !== undefined\n\t\t\t? results.slice( 0, maxBlockTypesToShow )\n\t\t\t: results;\n\t}, [\n\t\tfilterValue,\n\t\tblockTypes,\n\t\tblockTypeCategories,\n\t\tblockTypeCollections,\n\t\tmaxBlockTypesToShow,\n\t\tprioritizedBlocks,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! filterValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockTypes.length + 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}, [\n\t\tfilterValue,\n\t\tdebouncedSpeak,\n\t\tfilteredBlockTypes,\n\t\tfilteredBlockPatterns,\n\t] );\n\n\tconst currentShownBlockTypes = useAsyncList( filteredBlockTypes, {\n\t\tstep: INITIAL_INSERTER_RESULTS,\n\t} );\n\n\tconst hasItems =\n\t\tfilteredBlockTypes.length > 0 || filteredBlockPatterns.length > 0;\n\n\tconst blocksUI = !! filteredBlockTypes.length && (\n\t\t<InserterPanel\n\t\t\ttitle={ <VisuallyHidden>{ __( 'Blocks' ) }</VisuallyHidden> }\n\t\t>\n\t\t\t<BlockTypesList\n\t\t\t\titems={ currentShownBlockTypes }\n\t\t\t\tonSelect={ onSelectBlockType }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ __( 'Blocks' ) }\n\t\t\t\tisDraggable={ isDraggable }\n\t\t\t/>\n\t\t</InserterPanel>\n\t);\n\n\tconst patternsUI = !! filteredBlockPatterns.length && (\n\t\t<InserterPanel\n\t\t\ttitle={\n\t\t\t\t<VisuallyHidden>{ __( 'Block patterns' ) }</VisuallyHidden>\n\t\t\t}\n\t\t>\n\t\t\t<div className=\"block-editor-inserter__quick-inserter-patterns\">\n\t\t\t\t<BlockPatternsList\n\t\t\t\t\tblockPatterns={ filteredBlockPatterns }\n\t\t\t\t\tonClickPattern={ onClickPattern }\n\t\t\t\t\tonHover={ onHoverPattern }\n\t\t\t\t\tisDraggable={ isDraggable }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</InserterPanel>\n\t);\n\n\treturn (\n\t\t<InserterListbox>\n\t\t\t{ ! showBlockDirectory && ! hasItems && <InserterNoResults /> }\n\n\t\t\t{ prioritizePatterns ? patternsUI : blocksUI }\n\n\t\t\t{ !! filteredBlockTypes.length &&\n\t\t\t\t!! filteredBlockPatterns.length && (\n\t\t\t\t\t<div className=\"block-editor-inserter__quick-inserter-separator\" />\n\t\t\t\t) }\n\n\t\t\t{ prioritizePatterns ? blocksUI : patternsUI }\n\n\t\t\t{ showBlockDirectory && (\n\t\t\t\t<__unstableInserterMenuExtension.Slot\n\t\t\t\t\tfillProps={ {\n\t\t\t\t\t\tonSelect: onSelectBlockType,\n\t\t\t\t\t\tonHover,\n\t\t\t\t\t\tfilterValue,\n\t\t\t\t\t\thasItems,\n\t\t\t\t\t\trootClientId: destinationRootClientId,\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ ( fills ) => {\n\t\t\t\t\t\tif ( fills.length ) {\n\t\t\t\t\t\t\treturn fills;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( ! hasItems ) {\n\t\t\t\t\t\t\treturn <InserterNoResults />;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} }\n\t\t\t\t</__unstableInserterMenuExtension.Slot>\n\t\t\t) }\n\t\t</InserterListbox>\n\t);\n}\n\nexport default InserterSearchResults;\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAmC;AACnC,kBAAgC;AAChC,wBAA+B;AAC/B,qBAA0C;AAC1C,kBAAsB;AACtB,kBAA0B;AAK1B,8BAA2B;AAC3B,iCAA8B;AAC9B,qCAA4C;AAC5C,mBAA0B;AAC1B,wBAA8B;AAC9B,iCAA8B;AAC9B,gCAA6B;AAC7B,mCAA+B;AAC/B,0BAA8C;AAC9C,8BAA4B;AAC5B,qBAAwB;AACxB,wCAAwC;AACxC,mBAA0C;AAgJ/B;AA9IX,IAAM,2BAA2B;AAOjC,IAAM,cAAc,CAAC;AAErB,SAAS,sBAAuB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,qBAAiB,4BAAa,mBAAO,GAAI;AAE/C,QAAM,EAAE,kBAAkB,QAAI;AAAA,IAC7B,CAAE,WAAY;AACb,YAAM,oBACL,OAAQ,aAAAA,KAAiB,EAAE,qBAAsB,YAAa;AAE/D,aAAO;AAAA,QACN,mBACC,mBAAmB,6BAA6B;AAAA,MAClD;AAAA,IACD;AAAA,IACA,CAAE,YAAa;AAAA,EAChB;AAEA,QAAM,CAAE,yBAAyB,cAAe,QAAI,2BAAAC,SAAmB;AAAA,IACtE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,EACD,CAAE;AACF,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,QAAI,6BAAAC,SAAoB,yBAAyB,gBAAgB,OAAQ;AACzE,QAAM,CAAE,UAAU,EAAE,cAAe,QAAI,0BAAAC;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,QAAM,4BAAwB,wBAAS,MAAM;AAC5C,QAAK,qBAAqB,GAAI;AAC7B,aAAO,CAAC;AAAA,IACT;AACA,UAAM,cAAU,iCAAa,UAAU,WAAY;AACnD,WAAO,qBAAqB,SACzB,QAAQ,MAAO,GAAG,gBAAiB,IACnC;AAAA,EACJ,GAAG,CAAE,aAAa,UAAU,gBAAiB,CAAE;AAE/C,MAAI,sBAAsB;AAC1B,MAAK,sBAAsB,sBAAsB,SAAS,GAAI;AAC7D,0BAAsB;AAAA,EACvB;AAEA,QAAM,yBAAqB,wBAAS,MAAM;AACzC,QAAK,wBAAwB,GAAI;AAChC,aAAO,CAAC;AAAA,IACT;AACA,UAAM,uBAAuB,WAAW;AAAA,MACvC,CAAE,cAAe,UAAU,SAAS;AAAA,IACrC;AACA,QAAI,mBAAe,wBAAS,sBAAsB,YAAY,MAAO;AAErE,QAAK,CAAE,eAAe,kBAAkB,QAAS;AAChD,yBAAe;AAAA,QACd;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAEA,UAAM,cAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAEA,WAAO,wBAAwB,SAC5B,QAAQ,MAAO,GAAG,mBAAoB,IACtC;AAAA,EACJ,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AAGF,gCAAW,MAAM;AAChB,QAAK,CAAE,aAAc;AACpB;AAAA,IACD;AACA,UAAM,QAAQ,mBAAmB,SAAS,sBAAsB;AAChE,UAAM,0BAAsB;AAAA;AAAA,UAE3B,gBAAI,oBAAoB,qBAAqB,KAAM;AAAA,MACnD;AAAA,IACD;AACA,mBAAgB,mBAAoB;AAAA,EACrC,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AAEF,QAAM,6BAAyB,6BAAc,oBAAoB;AAAA,IAChE,MAAM;AAAA,EACP,CAAE;AAEF,QAAM,WACL,mBAAmB,SAAS,KAAK,sBAAsB,SAAS;AAEjE,QAAM,WAAW,CAAC,CAAE,mBAAmB,UACtC;AAAA,IAAC,aAAAC;AAAA,IAAA;AAAA,MACA,OAAQ,4CAAC,oCAAiB,8BAAI,QAAS,GAAG;AAAA,MAE1C;AAAA,QAAC,wBAAAC;AAAA,QAAA;AAAA,UACA,OAAQ;AAAA,UACR,UAAW;AAAA,UACX;AAAA,UACA,WAAQ,gBAAI,QAAS;AAAA,UACrB;AAAA;AAAA,MACD;AAAA;AAAA,EACD;AAGD,QAAM,aAAa,CAAC,CAAE,sBAAsB,UAC3C;AAAA,IAAC,aAAAD;AAAA,IAAA;AAAA,MACA,OACC,4CAAC,oCAAiB,8BAAI,gBAAiB,GAAG;AAAA,MAG3C,sDAAC,SAAI,WAAU,kDACd;AAAA,QAAC,2BAAAE;AAAA,QAAA;AAAA,UACA,eAAgB;AAAA,UAChB;AAAA,UACA,SAAU;AAAA,UACV;AAAA;AAAA,MACD,GACD;AAAA;AAAA,EACD;AAGD,SACC,6CAAC,wBAAAC,SAAA,EACE;AAAA,KAAE,sBAAsB,CAAE,YAAY,4CAAC,kBAAAC,SAAA,EAAkB;AAAA,IAEzD,qBAAqB,aAAa;AAAA,IAElC,CAAC,CAAE,mBAAmB,UACvB,CAAC,CAAE,sBAAsB,UACxB,4CAAC,SAAI,WAAU,mDAAkD;AAAA,IAGjE,qBAAqB,WAAW;AAAA,IAEhC,sBACD;AAAA,MAAC,+BAAAC,QAAgC;AAAA,MAAhC;AAAA,QACA,WAAY;AAAA,UACX,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc;AAAA,QACf;AAAA,QAEE,WAAE,UAAW;AACd,cAAK,MAAM,QAAS;AACnB,mBAAO;AAAA,UACR;AACA,cAAK,CAAE,UAAW;AACjB,mBAAO,4CAAC,kBAAAD,SAAA,EAAkB;AAAA,UAC3B;AACA,iBAAO;AAAA,QACR;AAAA;AAAA,IACD;AAAA,KAEF;AAEF;AAEA,IAAO,yBAAQ;",
"names": ["blockEditorStore", "useInsertionPoint", "useBlockTypesState", "usePatternsState", "InserterPanel", "BlockTypesList", "BlockPatternsList", "InserterListbox", "InserterNoResults", "__unstableInserterMenuExtension"]
}