UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 6.9 kB
{ "version": 3, "sources": ["../../../../src/icon/components/custom-inserter/index.js"], "sourcesContent": ["import { __ } from '@wordpress/i18n';\nimport { Modal, SearchControl, Spinner } from '@wordpress/components';\nimport { Stack, Tabs } from '@wordpress/ui';\nimport { useState, useMemo } from '@wordpress/element';\nimport { useDebounce } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreDataStore } from '@wordpress/core-data';\nimport IconGrid from './icon-grid';\nimport { normalizeSearchInput } from '../../../utils/search-patterns';\n\nexport default function CustomInserterModal( { onClose, value, onChange } ) {\n\tconst [ searchInput, setSearchInput ] = useState( '' );\n\tconst [ currentCollection, setCurrentCollection ] = useState( null );\n\n\tconst debouncedSetSearchInput = useDebounce( setSearchInput, 300 );\n\n\tconst collections = useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreDataStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'iconCollection'\n\t\t\t),\n\t\t[]\n\t);\n\n\t// Default to the collection the selected icon belongs to, otherwise the\n\t// first collection.\n\tconst selectedCollection = value?.split( '/' )[ 0 ];\n\tconst collectionSlug =\n\t\tcurrentCollection ??\n\t\t( collections?.some( ( { slug } ) => slug === selectedCollection )\n\t\t\t? selectedCollection\n\t\t\t: collections?.[ 0 ]?.slug ) ??\n\t\tnull;\n\n\tconst { icons, hasResolvedIcons } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( collectionSlug === null ) {\n\t\t\t\treturn { icons: null, hasResolvedIcons: false };\n\t\t\t}\n\t\t\tconst query =\n\t\t\t\tcollectionSlug === '' ? {} : { collection: collectionSlug };\n\t\t\tconst { getEntityRecords, hasFinishedResolution } =\n\t\t\t\tselect( coreDataStore );\n\t\t\treturn {\n\t\t\t\ticons: getEntityRecords( 'root', 'icon', query ),\n\t\t\t\thasResolvedIcons: hasFinishedResolution( 'getEntityRecords', [\n\t\t\t\t\t'root',\n\t\t\t\t\t'icon',\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ collectionSlug ]\n\t);\n\n\tconst filteredIcons = useMemo( () => {\n\t\tif ( ! icons ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( searchInput ) {\n\t\t\tconst input = normalizeSearchInput( searchInput );\n\t\t\treturn icons.filter( ( icon ) => {\n\t\t\t\tconst iconName = normalizeSearchInput( icon.name );\n\t\t\t\tconst iconLabel = normalizeSearchInput( icon.label );\n\n\t\t\t\treturn (\n\t\t\t\t\ticonName.includes( input ) || iconLabel.includes( input )\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn icons;\n\t}, [ searchInput, icons ] );\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"wp-block-icon__inserter-modal\"\n\t\t\ttitle={ __( 'Icon library' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t\tisFullScreen\n\t\t>\n\t\t\t<Tabs.Root\n\t\t\t\tclassName=\"wp-block-icon__inserter\"\n\t\t\t\torientation=\"vertical\"\n\t\t\t\tvalue={ collectionSlug }\n\t\t\t\tonValueChange={ setCurrentCollection }\n\t\t\t>\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\tgap=\"lg\"\n\t\t\t\t\tclassName=\"wp-block-icon__inserter-sidebar\"\n\t\t\t\t>\n\t\t\t\t\t<SearchControl\n\t\t\t\t\t\tvalue={ searchInput }\n\t\t\t\t\t\tonChange={ debouncedSetSearchInput }\n\t\t\t\t\t/>\n\t\t\t\t\t<Tabs.List>\n\t\t\t\t\t\t<Tabs.Tab value=\"\">{ __( 'All' ) }</Tabs.Tab>\n\t\t\t\t\t\t{ collections?.map( ( collection ) => (\n\t\t\t\t\t\t\t<Tabs.Tab\n\t\t\t\t\t\t\t\tkey={ collection.slug }\n\t\t\t\t\t\t\t\tvalue={ collection.slug }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ collection.label }\n\t\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</Tabs.List>\n\t\t\t\t</Stack>\n\t\t\t\t{ [ { slug: '' }, ...( collections ?? [] ) ].map(\n\t\t\t\t\t( collection ) => (\n\t\t\t\t\t\t<Tabs.Panel\n\t\t\t\t\t\t\ttabIndex={ -1 }\n\t\t\t\t\t\t\tkey={ collection.slug }\n\t\t\t\t\t\t\tvalue={ collection.slug }\n\t\t\t\t\t\t\tclassName=\"wp-block-icon__inserter-panel\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ ! hasResolvedIcons ? (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"wp-block-icon__inserter-loading\"\n\t\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\t\taria-label={ __( 'Loading…' ) }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<IconGrid\n\t\t\t\t\t\t\t\t\ticons={ filteredIcons }\n\t\t\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Tabs.Panel>\n\t\t\t\t\t)\n\t\t\t\t) }\n\t\t\t</Tabs.Root>\n\t\t</Modal>\n\t);\n}\n"], "mappings": "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", "names": [] }