{"version":3,"file":"index.js","names":["useModal","getTranslation","toWords","React","useEffect","useMemo","useState","DefaultBlockImage","useConfig","useTranslation","Drawer","ThumbnailCard","ItemSearch","baseClass","getItemLabel","item","i18n","labels","singular","toLowerCase","label","slug","getItemSlug","getItemImageInfo","imageAltText","imageURL","undefined","getItemDisplayLabel","ItemsDrawer","props","addRowIndex","drawerSlug","items","onItemClick","searchPlaceholder","title","searchTerm","setSearchTerm","filteredItems","setFilteredItems","closeModal","isModalOpen","t","config","itemGroups","groups","_none","forEach","admin","group","Object","hasOwn","push","searchTermToUse","matchingItems","reduce","matchedItems","_item","blocksMap","itemLabel","includes","finalTitle","_jsxs","_jsx","placeholder","className","entries","map","groupLabel","groupItems","length","filter","Boolean","join","index","displayLabel","alignLabel","onClick","thumbnail","alt","src"],"sources":["../../../src/elements/ItemsDrawer/index.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient } from '@payloadcms/translations'\nimport type { ClientBlock, ClientWidget, Labels } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { toWords } from 'payload/shared'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { DefaultBlockImage } from '../../graphics/DefaultBlockImage/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { ThumbnailCard } from '../ThumbnailCard/index.js'\nimport './index.scss'\nimport { ItemSearch } from './ItemSearch/index.js'\n\nexport type DrawerItem = ClientBlock | ClientWidget\n\nexport type ItemsDrawerProps = {\n readonly addRowIndex?: number\n readonly drawerSlug: string\n readonly items: (DrawerItem | string)[]\n readonly labels?: Labels\n readonly onItemClick: (item: DrawerItem, index?: number) => Promise | void\n readonly searchPlaceholder?: string\n readonly title?: string\n}\n\nconst baseClass = 'items-drawer'\n\nconst getItemLabel = (item: DrawerItem, i18n: I18nClient): string => {\n // Handle ClientBlock\n if ('labels' in item && item.labels?.singular) {\n if (typeof item.labels.singular === 'string') {\n return item.labels.singular.toLowerCase()\n }\n if (typeof item.labels.singular === 'object') {\n return getTranslation(item.labels.singular, i18n).toLowerCase()\n }\n }\n\n // Handle ClientWidget with label (already resolved from function on server)\n if ('label' in item && item.label) {\n if (typeof item.label === 'string') {\n return item.label.toLowerCase()\n }\n if (typeof item.label === 'object') {\n return getTranslation(item.label, i18n).toLowerCase()\n }\n }\n\n // Fallback to slug\n if ('slug' in item) {\n return toWords(item.slug).toLowerCase()\n }\n\n return ''\n}\n\nconst getItemSlug = (item: DrawerItem): string => {\n return item.slug\n}\n\nconst getItemImageInfo = (item: DrawerItem) => {\n if ('imageURL' in item) {\n return {\n imageAltText: item.imageAltText,\n imageURL: item.imageURL,\n }\n }\n return { imageAltText: undefined, imageURL: undefined }\n}\n\nconst getItemDisplayLabel = (item: DrawerItem, i18n: I18nClient): string => {\n // Handle ClientBlock\n if ('labels' in item && item.labels?.singular) {\n return getTranslation(item.labels.singular, i18n)\n }\n\n // Handle ClientWidget with label (already resolved from function on server)\n if ('label' in item && item.label) {\n if (typeof item.label === 'string') {\n return item.label\n }\n if (typeof item.label === 'object') {\n return getTranslation(item.label, i18n)\n }\n }\n\n // Fallback to slug - convert to human-readable label\n return toWords(item.slug)\n}\n\nexport const ItemsDrawer: React.FC = (props) => {\n const { addRowIndex, drawerSlug, items, labels, onItemClick, searchPlaceholder, title } = props\n\n const [searchTerm, setSearchTerm] = useState('')\n const [filteredItems, setFilteredItems] = useState(items)\n const { closeModal, isModalOpen } = useModal()\n const { i18n, t } = useTranslation()\n const { config } = useConfig()\n\n const itemGroups = useMemo(() => {\n const groups: Record = {\n _none: [],\n }\n filteredItems.forEach((item) => {\n if (typeof item === 'object' && 'admin' in item && item.admin?.group) {\n const group = item.admin.group\n const label = typeof group === 'string' ? group : getTranslation(group, i18n)\n\n if (Object.hasOwn(groups, label)) {\n groups[label].push(item)\n } else {\n groups[label] = [item]\n }\n } else {\n groups._none.push(item)\n }\n })\n return groups\n }, [filteredItems, i18n])\n\n useEffect(() => {\n if (!isModalOpen(drawerSlug)) {\n setSearchTerm('')\n }\n }, [isModalOpen, drawerSlug])\n\n useEffect(() => {\n const searchTermToUse = searchTerm.toLowerCase()\n\n const matchingItems = items?.reduce((matchedItems, _item) => {\n let item: DrawerItem\n\n if (typeof _item === 'string') {\n // Handle string references (for blocks)\n item = config.blocksMap?.[_item] as DrawerItem\n } else {\n item = _item\n }\n\n if (item) {\n const itemLabel = getItemLabel(item, i18n)\n if (itemLabel.includes(searchTermToUse)) {\n matchedItems.push(item)\n }\n }\n return matchedItems\n }, [] as DrawerItem[])\n\n setFilteredItems(matchingItems || [])\n }, [searchTerm, items, i18n, config.blocksMap])\n\n const finalTitle =\n title ||\n (labels\n ? t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })\n : t('fields:addNew'))\n\n return (\n \n \n
\n
    \n {Object.entries(itemGroups).map(([groupLabel, groupItems]) =>\n !groupItems.length ? null : (\n \n {groupLabel !== '_none' && (\n

    {groupLabel}

    \n )}\n
      \n {groupItems.map((_item, index) => {\n const item =\n typeof _item === 'string' ? (config.blocksMap?.[_item] as DrawerItem) : _item\n\n if (!item) {\n return null\n }\n\n const { imageAltText, imageURL } = getItemImageInfo(item)\n const displayLabel = getItemDisplayLabel(item, i18n)\n\n return (\n
    • \n {\n void onItemClick(item, addRowIndex)\n closeModal(drawerSlug)\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":[]}