@wordpress/block-editor
Version:
8 lines (7 loc) • 6.34 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/block-manager/index.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tSearchControl,\n\tCheckboxControl,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport { useDebounce } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport BlockManagerCategory from './category';\n\n/**\n * Provides a list of blocks with checkboxes.\n *\n * @param {Object} props Props.\n * @param {Array} props.blockTypes An array of blocks.\n * @param {Array} props.selectedBlockTypes An array of selected blocks.\n * @param {Function} props.onChange Function to be called when the selected blocks change.\n * @param {boolean} props.showSelectAll Whether to show the select all checkbox.\n */\nexport default function BlockManager( {\n\tblockTypes,\n\tselectedBlockTypes,\n\tonChange,\n\tshowSelectAll = true,\n} ) {\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst { categories, isMatchingSearchTerm } = useSelect( ( select ) => {\n\t\treturn {\n\t\t\tcategories: select( blocksStore ).getCategories(),\n\t\t\tisMatchingSearchTerm: select( blocksStore ).isMatchingSearchTerm,\n\t\t};\n\t}, [] );\n\n\tconst filteredBlockTypes = blockTypes.filter( ( blockType ) => {\n\t\treturn ! search || isMatchingSearchTerm( blockType, search );\n\t} );\n\n\tconst isIndeterminate =\n\t\tselectedBlockTypes.length > 0 &&\n\t\tselectedBlockTypes.length !== blockTypes.length;\n\n\tconst isAllChecked =\n\t\tblockTypes.length > 0 &&\n\t\tselectedBlockTypes.length === blockTypes.length;\n\n\t// Announce search results on change\n\tuseEffect( () => {\n\t\tif ( ! search ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockTypes.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}, [ filteredBlockTypes?.length, search, debouncedSpeak ] );\n\n\treturn (\n\t\t<VStack className=\"block-editor-block-manager__content\" spacing={ 4 }>\n\t\t\t<SearchControl\n\t\t\t\tlabel={ __( 'Search for a block' ) }\n\t\t\t\tplaceholder={ __( 'Search for a block' ) }\n\t\t\t\tvalue={ search }\n\t\t\t\tonChange={ ( nextSearch ) => setSearch( nextSearch ) }\n\t\t\t\tclassName=\"block-editor-block-manager__search\"\n\t\t\t/>\n\t\t\t{ showSelectAll && (\n\t\t\t\t<CheckboxControl\n\t\t\t\t\tclassName=\"block-editor-block-manager__select-all\"\n\t\t\t\t\tlabel={ __( 'Select all' ) }\n\t\t\t\t\tchecked={ isAllChecked }\n\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\tif ( isAllChecked ) {\n\t\t\t\t\t\t\tonChange( [] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonChange( blockTypes );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tindeterminate={ isIndeterminate }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t<div\n\t\t\t\ttabIndex=\"0\"\n\t\t\t\trole=\"region\"\n\t\t\t\taria-label={ __( 'Available block types' ) }\n\t\t\t\tclassName=\"block-editor-block-manager__results\"\n\t\t\t>\n\t\t\t\t{ filteredBlockTypes.length === 0 && (\n\t\t\t\t\t<p className=\"block-editor-block-manager__no-results\">\n\t\t\t\t\t\t{ __( 'No blocks found.' ) }\n\t\t\t\t\t</p>\n\t\t\t\t) }\n\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t<BlockManagerCategory\n\t\t\t\t\t\tkey={ category.slug }\n\t\t\t\t\t\ttitle={ category.title }\n\t\t\t\t\t\tblockTypes={ filteredBlockTypes.filter(\n\t\t\t\t\t\t\t( blockType ) =>\n\t\t\t\t\t\t\t\tblockType.category === category.slug\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tselectedBlockTypes={ selectedBlockTypes }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t\t<BlockManagerCategory\n\t\t\t\t\ttitle={ __( 'Uncategorized' ) }\n\t\t\t\t\tblockTypes={ filteredBlockTypes.filter(\n\t\t\t\t\t\t( { category } ) => ! category\n\t\t\t\t\t) }\n\t\t\t\t\tselectedBlockTypes={ selectedBlockTypes }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</VStack>\n\t);\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAAqC;AACrC,kBAA0B;AAC1B,wBAIO;AACP,kBAAgC;AAChC,qBAAoC;AACpC,qBAA4B;AAC5B,kBAAsB;AAKtB,sBAAiC;AAsD9B;AA3CY,SAAR,aAA+B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AACjB,GAAI;AACH,QAAM,qBAAiB,4BAAa,mBAAO,GAAI;AAC/C,QAAM,CAAE,QAAQ,SAAU,QAAI,yBAAU,EAAG;AAC3C,QAAM,EAAE,YAAY,qBAAqB,QAAI,uBAAW,CAAE,WAAY;AACrE,WAAO;AAAA,MACN,YAAY,OAAQ,cAAAA,KAAY,EAAE,cAAc;AAAA,MAChD,sBAAsB,OAAQ,cAAAA,KAAY,EAAE;AAAA,IAC7C;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,qBAAqB,WAAW,OAAQ,CAAE,cAAe;AAC9D,WAAO,CAAE,UAAU,qBAAsB,WAAW,MAAO;AAAA,EAC5D,CAAE;AAEF,QAAM,kBACL,mBAAmB,SAAS,KAC5B,mBAAmB,WAAW,WAAW;AAE1C,QAAM,eACL,WAAW,SAAS,KACpB,mBAAmB,WAAW,WAAW;AAG1C,gCAAW,MAAM;AAChB,QAAK,CAAE,QAAS;AACf;AAAA,IACD;AACA,UAAM,QAAQ,mBAAmB;AACjC,UAAM,0BAAsB;AAAA;AAAA,UAE3B,gBAAI,oBAAoB,qBAAqB,KAAM;AAAA,MACnD;AAAA,IACD;AACA,mBAAgB,mBAAoB;AAAA,EACrC,GAAG,CAAE,oBAAoB,QAAQ,QAAQ,cAAe,CAAE;AAE1D,SACC,6CAAC,kBAAAC,sBAAA,EAAO,WAAU,uCAAsC,SAAU,GACjE;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAQ,gBAAI,oBAAqB;AAAA,QACjC,iBAAc,gBAAI,oBAAqB;AAAA,QACvC,OAAQ;AAAA,QACR,UAAW,CAAE,eAAgB,UAAW,UAAW;AAAA,QACnD,WAAU;AAAA;AAAA,IACX;AAAA,IACE,iBACD;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,WAAQ,gBAAI,YAAa;AAAA,QACzB,SAAU;AAAA,QACV,UAAW,MAAM;AAChB,cAAK,cAAe;AACnB,qBAAU,CAAC,CAAE;AAAA,UACd,OAAO;AACN,qBAAU,UAAW;AAAA,UACtB;AAAA,QACD;AAAA,QACA,eAAgB;AAAA;AAAA,IACjB;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACA,UAAS;AAAA,QACT,MAAK;AAAA,QACL,kBAAa,gBAAI,uBAAwB;AAAA,QACzC,WAAU;AAAA,QAER;AAAA,6BAAmB,WAAW,KAC/B,4CAAC,OAAE,WAAU,0CACV,8BAAI,kBAAmB,GAC1B;AAAA,UAEC,WAAW,IAAK,CAAE,aACnB;AAAA,YAAC,gBAAAC;AAAA,YAAA;AAAA,cAEA,OAAQ,SAAS;AAAA,cACjB,YAAa,mBAAmB;AAAA,gBAC/B,CAAE,cACD,UAAU,aAAa,SAAS;AAAA,cAClC;AAAA,cACA;AAAA,cACA;AAAA;AAAA,YAPM,SAAS;AAAA,UAQhB,CACC;AAAA,UACF;AAAA,YAAC,gBAAAA;AAAA,YAAA;AAAA,cACA,WAAQ,gBAAI,eAAgB;AAAA,cAC5B,YAAa,mBAAmB;AAAA,gBAC/B,CAAE,EAAE,SAAS,MAAO,CAAE;AAAA,cACvB;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACD;AAAA;AAAA;AAAA,IACD;AAAA,KACD;AAEF;",
"names": ["blocksStore", "VStack", "BlockManagerCategory"]
}