{"version":3,"file":"index.js","names":["getTranslation","React","Fragment","useEffect","useMemo","useState","ThumbnailCard","DefaultBlockImage","useControllableState","useConfig","useTranslation","BlockSearch","baseClass","getBlockLabel","block","i18n","labels","singular","toLowerCase","BlockSelector","props","blocks","onSelect","searchTerm","searchTermFromProps","setSearchTerm","filteredBlocks","setFilteredBlocks","config","blockGroups","groups","_none","forEach","admin","group","label","Object","hasOwn","push","searchTermToUse","matchingBlocks","reduce","matchedBlocks","_block","blocksMap","blockLabel","includes","_jsxs","_jsx","className","entries","map","groupLabel","groupBlocks","length","filter","Boolean","join","index","slug","imageAltText","imageURL","blockLabels","alignLabel","onClick","thumbnail","alt","src"],"sources":["../../../../src/fields/Blocks/BlockSelector/index.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient } from '@payloadcms/translations'\nimport type { ClientBlock } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useEffect, useMemo, useState } from 'react'\n\nimport { ThumbnailCard } from '../../../elements/ThumbnailCard/index.js'\nimport { DefaultBlockImage } from '../../../graphics/DefaultBlockImage/index.js'\nimport { useControllableState } from '../../../hooks/useControllableState.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { BlockSearch } from './BlockSearch/index.js'\nimport './index.scss'\n\nexport type Props = {\n readonly blocks: (ClientBlock | string)[]\n readonly onSelect?: (blockType: string) => void\n /**\n * Control the search term state externally\n */\n searchTerm?: string\n}\n\nconst baseClass = 'blocks-drawer'\n\nconst getBlockLabel = (block: ClientBlock, i18n: I18nClient) => {\n if (typeof block.labels.singular === 'string') {\n return block.labels.singular.toLowerCase()\n }\n if (typeof block.labels.singular === 'object') {\n return getTranslation(block.labels.singular, i18n).toLowerCase()\n }\n return ''\n}\n\nexport const BlockSelector: React.FC = (props) => {\n const { blocks, onSelect, searchTerm: searchTermFromProps } = props\n\n const [searchTerm, setSearchTerm] = useControllableState(searchTermFromProps ?? '')\n\n const [filteredBlocks, setFilteredBlocks] = useState(blocks)\n const { i18n } = useTranslation()\n const { config } = useConfig()\n\n const blockGroups = useMemo(() => {\n const groups: Record = {\n _none: [],\n }\n\n filteredBlocks.forEach((block) => {\n if (typeof block === 'object' && block.admin?.group) {\n const group = block.admin.group\n const label = typeof group === 'string' ? group : getTranslation(group, i18n)\n\n if (Object.hasOwn(groups, label)) {\n groups[label].push(block)\n } else {\n groups[label] = [block]\n }\n } else {\n groups._none.push(block)\n }\n })\n\n return groups\n }, [filteredBlocks, i18n])\n\n useEffect(() => {\n const searchTermToUse = searchTerm.toLowerCase()\n\n const matchingBlocks = blocks?.reduce((matchedBlocks, _block) => {\n const block = typeof _block === 'string' ? config.blocksMap[_block] : _block\n const blockLabel = getBlockLabel(block, i18n)\n if (blockLabel.includes(searchTermToUse)) {\n matchedBlocks.push(block)\n }\n return matchedBlocks\n }, [])\n\n setFilteredBlocks(matchingBlocks)\n }, [searchTerm, blocks, i18n, config.blocksMap])\n\n return (\n \n \n
\n
    \n {Object.entries(blockGroups).map(([groupLabel, groupBlocks]) =>\n !groupBlocks.length ? null : (\n \n {groupLabel !== '_none' && (\n

    {groupLabel}

    \n )}\n
      \n {groupBlocks.map((_block, index) => {\n const block = typeof _block === 'string' ? config.blocksMap[_block] : _block\n\n const { slug, imageAltText, imageURL, labels: blockLabels } = block\n\n return (\n
    • \n {\n if (typeof onSelect === 'function') {\n onSelect(slug)\n }\n }}\n thumbnail={\n
      \n {imageURL ? (\n {imageAltText}\n ) : (\n \n )}\n
      \n }\n />\n
    • \n )\n })}\n
    \n \n ),\n )}\n
\n
\n
\n )\n}\n"],"mappings":"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","ignoreList":[]}