@strapi/content-type-builder 5.54.0 → 5.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/hooks/useAIFetch.js +6 -2
- package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs +7 -3
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.js +20 -0
- package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.mjs +18 -0
- package/dist/admin/components/AIChat/hooks/usePrefetchAIToken.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js +83 -59
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +86 -62
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.js +112 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.mjs +110 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.js +159 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.mjs +157 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js +311 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs +309 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.js +379 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.mjs +376 -0
- package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.js +172 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.mjs +166 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useContentTypeBuilderMenu.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.js +62 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.mjs +60 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useFolderActions.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.js +145 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.mjs +143 -0
- package/dist/admin/components/ContentTypeBuilderNav/hooks/useSortableTree.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js +176 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs +169 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js +277 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs +273 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.js +62 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.js.map +1 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.mjs +58 -0
- package/dist/admin/components/ContentTypeBuilderNav/lib/flatModel.mjs.map +1 -0
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js +70 -8
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +70 -8
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/reducer.js +411 -33
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +411 -33
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.js +11 -2
- package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs +11 -2
- package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/contentStructure.js +150 -0
- package/dist/admin/components/DataManager/utils/contentStructure.js.map +1 -0
- package/dist/admin/components/DataManager/utils/contentStructure.mjs +133 -0
- package/dist/admin/components/DataManager/utils/contentStructure.mjs.map +1 -0
- package/dist/admin/components/FolderSelect.js +200 -0
- package/dist/admin/components/FolderSelect.js.map +1 -0
- package/dist/admin/components/FolderSelect.mjs +198 -0
- package/dist/admin/components/FolderSelect.mjs.map +1 -0
- package/dist/admin/components/FormModal/FormModal.js +23 -2
- package/dist/admin/components/FormModal/FormModal.js.map +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs +23 -2
- package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/contentTypeForm.js +15 -18
- package/dist/admin/components/FormModal/contentType/contentTypeForm.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs +15 -18
- package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/reducer.js +6 -0
- package/dist/admin/components/FormModal/reducer.js.map +1 -1
- package/dist/admin/components/FormModal/reducer.mjs +6 -0
- package/dist/admin/components/FormModal/reducer.mjs.map +1 -1
- package/dist/admin/pages/App/index.js +2 -5
- package/dist/admin/pages/App/index.js.map +1 -1
- package/dist/admin/pages/App/index.mjs +2 -5
- package/dist/admin/pages/App/index.mjs.map +1 -1
- package/dist/admin/src/components/AIChat/hooks/usePrefetchAIToken.d.ts +1 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/DeleteFolderDialog.d.ts +16 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNameField.d.ts +12 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.d.ts +14 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/components/FolderNav/SortableTreeRow.d.ts +38 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/{useContentTypeBuilderMenu.d.ts → hooks/useContentTypeBuilderMenu.d.ts} +17 -7
- package/dist/admin/src/components/ContentTypeBuilderNav/hooks/useFolderActions.d.ts +42 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/hooks/useSortableTree.d.ts +53 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/lib/buildFolderTree.d.ts +42 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/lib/dropProjection.d.ts +58 -0
- package/dist/admin/src/components/ContentTypeBuilderNav/lib/flatModel.d.ts +18 -0
- package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +41 -0
- package/dist/admin/src/components/DataManager/reducer.d.ts +105 -1
- package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +5 -1
- package/dist/admin/src/components/DataManager/utils/contentStructure.d.ts +68 -0
- package/dist/admin/src/components/FolderSelect.d.ts +18 -0
- package/dist/admin/src/components/FormModal/contentType/contentTypeForm.d.ts +0 -21
- package/dist/admin/src/components/FormModal/forms/forms.d.ts +0 -10
- package/dist/admin/src/components/FormModal/reducer.d.ts +7 -0
- package/dist/admin/src/utils/folderTelemetry.d.ts +5 -0
- package/dist/admin/translations/en.json.js +23 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +23 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/folderTelemetry.js +19 -0
- package/dist/admin/utils/folderTelemetry.js.map +1 -0
- package/dist/admin/utils/folderTelemetry.mjs +16 -0
- package/dist/admin/utils/folderTelemetry.mjs.map +1 -0
- package/dist/server/controllers/schema.js +1 -1
- package/dist/server/controllers/schema.js.map +1 -1
- package/dist/server/controllers/schema.mjs +1 -1
- package/dist/server/controllers/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/common.js +3 -0
- package/dist/server/controllers/validation/common.js.map +1 -1
- package/dist/server/controllers/validation/common.mjs +3 -1
- package/dist/server/controllers/validation/common.mjs.map +1 -1
- package/dist/server/controllers/validation/content-structure.js +177 -0
- package/dist/server/controllers/validation/content-structure.js.map +1 -0
- package/dist/server/controllers/validation/content-structure.mjs +173 -0
- package/dist/server/controllers/validation/content-structure.mjs.map +1 -0
- package/dist/server/controllers/validation/schema.js +3 -1
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +3 -1
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/register.js +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/content-api.js +4 -4
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/content-api.mjs +4 -4
- package/dist/server/routes/content-api.mjs.map +1 -1
- package/dist/server/services/api-handler.js +37 -4
- package/dist/server/services/api-handler.js.map +1 -1
- package/dist/server/services/api-handler.mjs +36 -5
- package/dist/server/services/api-handler.mjs.map +1 -1
- package/dist/server/services/content-structure.js +174 -0
- package/dist/server/services/content-structure.js.map +1 -0
- package/dist/server/services/content-structure.mjs +172 -0
- package/dist/server/services/content-structure.mjs.map +1 -0
- package/dist/server/services/content-types.js +196 -44
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +195 -45
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/schema-builder/index.js +4 -2
- package/dist/server/services/schema-builder/index.js.map +1 -1
- package/dist/server/services/schema-builder/index.mjs +4 -2
- package/dist/server/services/schema-builder/index.mjs.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.js +16 -16
- package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.mjs +16 -16
- package/dist/server/services/schema-builder/schema-handler.mjs.map +1 -1
- package/dist/server/services/schema-mutation.js +46 -0
- package/dist/server/services/schema-mutation.js.map +1 -0
- package/dist/server/services/schema-mutation.mjs +43 -0
- package/dist/server/services/schema-mutation.mjs.map +1 -0
- package/dist/server/services/schema.js +134 -79
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +135 -80
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/controllers/schema.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/common.d.ts +1 -0
- package/dist/server/src/controllers/validation/common.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-structure.d.ts +56 -0
- package/dist/server/src/controllers/validation/content-structure.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/schema.d.ts +35 -0
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/content-api.d.ts.map +1 -1
- package/dist/server/src/services/api-handler.d.ts +13 -1
- package/dist/server/src/services/api-handler.d.ts.map +1 -1
- package/dist/server/src/services/content-structure.d.ts +37 -0
- package/dist/server/src/services/content-structure.d.ts.map +1 -0
- package/dist/server/src/services/content-types.d.ts +4 -0
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/schema-builder/index.d.ts +3 -1
- package/dist/server/src/services/schema-builder/index.d.ts.map +1 -1
- package/dist/server/src/services/schema-builder/schema-handler.d.ts.map +1 -1
- package/dist/server/src/services/schema-mutation.d.ts +26 -0
- package/dist/server/src/services/schema-mutation.d.ts.map +1 -0
- package/dist/server/src/services/schema.d.ts +1 -0
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/package.json +6 -6
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +0 -157
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +0 -1
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +0 -151
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +0 -1
package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderNavSection.js","sources":["../../../../../../admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\n\nimport { DndContext, DragOverlay } from '@dnd-kit/core';\nimport { SortableContext } from '@dnd-kit/sortable';\nimport { SubNav } from '@strapi/admin/strapi-admin';\nimport { Box, useCollator, useFilter } from '@strapi/design-system';\nimport { File, Folder } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../../utils/getTrad';\nimport { useDataManager } from '../../../DataManager/useDataManager';\nimport {\n getDeleteFolderOnlySiblingNameCollisions,\n isFolderNameTakenBySibling,\n} from '../../../DataManager/utils/contentStructure';\nimport { useFolderActions } from '../../hooks/useFolderActions';\nimport { useSortableTree } from '../../hooks/useSortableTree';\nimport {\n buildSectionTree,\n collectSubtreeContentTypeUids,\n countSubtree,\n filterTree,\n} from '../../lib/buildFolderTree';\nimport { flattenSortableTree } from '../../lib/flatModel';\n\nimport { DeleteFolderDialog } from './DeleteFolderDialog';\nimport { FolderNameField } from './FolderNameField';\nimport { RowOverlay, SortableTreeRow } from './SortableTreeRow';\n\nimport type { DeleteFolderMode } from './DeleteFolderDialog';\nimport type { TreeHandlers } from './SortableTreeRow';\nimport type { SectionKey } from '../../../DataManager/utils/contentStructure';\nimport type { ContentTypeLink, FolderNode, FolderTreeNode } from '../../lib/buildFolderTree';\n\nconst countContentTypes = (nodes: FolderTreeNode[]): number => {\n return nodes.reduce((total, node) => {\n if (node.type === 'folder') {\n return total + countContentTypes(node.children);\n }\n\n return total + 1;\n }, 0);\n};\n\ninterface FolderNavSectionProps {\n onCreateContentType: () => void;\n createTypeLabel: string;\n searchValue: string;\n\n /** Guided-tour section id ('models' | 'singleTypes'). */\n sectionId: string;\n section: SectionKey;\n\n title: string;\n links: ContentTypeLink[];\n}\n\nconst EMPTY_COLLAPSED: Set<string> = new Set(); // Empty set to uncollapse all items while searching\n\nexport const FolderNavSection = ({\n onCreateContentType,\n createTypeLabel,\n searchValue,\n sectionId,\n section,\n title,\n links,\n}: FolderNavSectionProps) => {\n const { contentStructure, contentTypes, isInDevelopmentMode } = useDataManager();\n const { formatMessage, locale } = useIntl();\n const actions = useFolderActions();\n\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set());\n const [editingId, setEditingId] = useState<string | null>(null);\n const [isDrafting, setIsDrafting] = useState(false);\n\n const [deleteTarget, setDeleteTarget] = useState<{\n mode: DeleteFolderMode;\n node: FolderNode;\n } | null>(null);\n\n const { contains } = useFilter(locale, { sensitivity: 'base' });\n const formatter = useCollator(locale, { sensitivity: 'base' });\n\n const sectionData = contentStructure.sections[section];\n const searchActive = searchValue.trim().length > 0;\n const canEdit = Boolean(isInDevelopmentMode);\n\n const deletableContentTypeUids = useMemo(() => {\n return new Set(\n Object.values(contentTypes)\n .filter((contentType) => contentType.uid.startsWith('api::') && !contentType.plugin)\n .map((contentType) => contentType.uid)\n );\n }, [contentTypes]);\n\n const tree = useMemo(() => {\n return buildSectionTree(sectionData, links, (a, b) => formatter.compare(a, b));\n }, [sectionData, links, formatter]);\n\n const effectiveCollapsed = searchActive ? EMPTY_COLLAPSED : collapsed;\n\n const visibleTree = useMemo(() => {\n return searchActive ? filterTree(tree, (text) => contains(text, searchValue)) : tree;\n }, [searchActive, tree, contains, searchValue]);\n\n const flatItems = useMemo(() => {\n return flattenSortableTree(visibleTree, effectiveCollapsed);\n }, [visibleTree, effectiveCollapsed]);\n\n // This hook supplies the CTB contentStructure dnd engine.\n const dnd = useSortableTree({\n disabled: !canEdit || searchActive,\n collapsed: effectiveCollapsed,\n items: flatItems,\n canDrop: (activeNode, target) => {\n if (activeNode.type !== 'folder') {\n return true;\n }\n\n const parentId = target.kind === 'nest' ? target.folderId : target.parentId;\n\n if (\n isFolderNameTakenBySibling(sectionData.groups, parentId, activeNode.name, activeNode.id)\n ) {\n return false;\n }\n\n return true;\n },\n onDrop: (activeNode, target) => {\n const parentId = target.kind === 'nest' ? target.folderId : target.parentId;\n const index = target.kind === 'nest' ? 0 : target.index;\n\n if (activeNode.type === 'folder') {\n actions.moveFolder({\n newParentId: parentId,\n id: activeNode.id,\n section,\n index,\n });\n\n return;\n }\n\n actions.assignContentTypeToFolder({\n targetGroupId: parentId,\n uid: activeNode.uid,\n section,\n index,\n });\n },\n onExpandFolder: (folderId) =>\n setCollapsed((prev) => {\n const next = new Set(prev);\n next.delete(folderId);\n return next;\n }),\n });\n\n const confirmDelete = () => {\n if (!deleteTarget) {\n return;\n }\n\n if (deleteTarget.mode === 'withContent') {\n actions.deleteFolderAndContent({\n contentTypeUids: collectSubtreeContentTypeUids(sectionData, deleteTarget.node.id).filter(\n (uid) => deletableContentTypeUids.has(uid)\n ),\n id: deleteTarget.node.id,\n section,\n });\n } else {\n if (\n getDeleteFolderOnlySiblingNameCollisions(sectionData.groups, deleteTarget.node.id).length >\n 0\n ) {\n return;\n }\n\n actions.deleteFolderOnly({ section, id: deleteTarget.node.id });\n }\n\n setDeleteTarget(null);\n };\n\n const validateFolderName = ({\n excludeId,\n parentId,\n name,\n }: {\n excludeId?: string;\n parentId: string | null;\n name: string;\n }): string | undefined => {\n const folderNameTaken = isFolderNameTakenBySibling(\n sectionData.groups,\n parentId,\n name,\n excludeId\n );\n\n if (folderNameTaken) {\n return formatMessage({\n defaultMessage: 'A folder with this name already exists in this location',\n id: getTrad('nav.folder.name.duplicate'),\n });\n }\n\n return undefined;\n };\n\n const handlers: TreeHandlers = {\n dropTargetId: dnd.dropTargetId,\n dropLine: dnd.dropLine,\n validateFolderName,\n editingId,\n section,\n canEdit,\n\n isCollapsed: (id) => {\n return effectiveCollapsed.has(id);\n },\n // Search forces the tree open; a collapse toggle then can't take effect, so don't present one.\n canToggle: !searchActive,\n onToggle: (id) => {\n setCollapsed((prev) => {\n const next = new Set(prev);\n\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n\n return next;\n });\n },\n // Deferred past the closing menu's focus restoration so the inline input isn't blurred (and consequently auto-committed) the instant it mounts.\n onBeginRename: (id) => {\n setTimeout(() => {\n setIsDrafting(false);\n setEditingId(id);\n }, 0);\n },\n onSubmitRename: (id, name) => {\n actions.renameFolder({ section, id, name });\n setEditingId(null);\n },\n onCancelRename: () => {\n setEditingId(null);\n },\n onDeleteFolder: (node) => {\n setDeleteTarget({ node, mode: 'only' });\n },\n onDeleteFolderAndContent: (node) => {\n setDeleteTarget({ node, mode: 'withContent' });\n },\n };\n\n const sectionLink = {\n label: createTypeLabel,\n // The \"New folder\" option mounts the folder name input input and focuses it. Without this flag enabled, closing the menu would restore focus to the menu icon trigger.\n suppressFocusCaptureOnMenuClose: true,\n menu: [\n { label: createTypeLabel, onSelect: onCreateContentType, startIcon: <File /> },\n {\n label: formatMessage({\n id: getTrad('nav.action.new-folder'),\n defaultMessage: 'New folder',\n }),\n onSelect: () => {\n setEditingId(null);\n setTimeout(() => setIsDrafting(true), 0);\n },\n startIcon: <Folder />,\n },\n ],\n };\n\n const rows = (\n // No extra horizontal padding here — the rows sit directly in the section's\n // list so their left edge lines up with the components SubSections.\n <Box key=\"section-rows\">\n {canEdit && isDrafting && (\n <FolderNameField\n depth={0}\n defaultValue={formatMessage({\n id: getTrad('nav.folder.default-name'),\n defaultMessage: 'New folder',\n })}\n validate={(name) => {\n return validateFolderName({ name, parentId: null });\n }}\n onSubmit={(name) => {\n actions.createFolder({ section, name, parentId: null });\n setIsDrafting(false);\n }}\n onCancel={() => {\n setIsDrafting(false);\n }}\n />\n )}\n <DndContext\n collisionDetection={dnd.collisionDetection}\n onDragCancel={dnd.onDragCancel}\n onDragStart={dnd.onDragStart}\n onDragMove={dnd.onDragMove}\n onDragEnd={dnd.onDragEnd}\n sensors={dnd.sensors}\n >\n <SortableContext\n items={dnd.renderedItems.map((item) => item.id)}\n strategy={dnd.sortingStrategy}\n >\n {dnd.renderedItems.map((item) => {\n return <SortableTreeRow key={item.id} item={item} handlers={handlers} />;\n })}\n </SortableContext>\n <DragOverlay dropAnimation={null}>\n {dnd.activeItem ? <RowOverlay item={dnd.activeItem} /> : null}\n </DragOverlay>\n </DndContext>\n </Box>\n );\n\n return (\n <>\n <SubNav.Section\n badgeLabel={countContentTypes(visibleTree).toString()}\n link={canEdit ? sectionLink : undefined}\n sectionId={sectionId}\n label={title}\n >\n {[rows]}\n </SubNav.Section>\n\n {deleteTarget && (\n <DeleteFolderDialog\n counts={{\n ...countSubtree(sectionData, deleteTarget.node.id, deletableContentTypeUids),\n preservedContentTypes: collectSubtreeContentTypeUids(\n sectionData,\n deleteTarget.node.id\n ).filter((uid) => !deletableContentTypeUids.has(uid)).length,\n }}\n conflictingFolderNames={\n deleteTarget.mode === 'only'\n ? getDeleteFolderOnlySiblingNameCollisions(sectionData.groups, deleteTarget.node.id)\n : []\n }\n folderName={deleteTarget.node.name}\n onConfirm={confirmDelete}\n mode={deleteTarget.mode}\n open\n onOpenChange={(open) => {\n if (!open) {\n setDeleteTarget(null);\n }\n }}\n />\n )}\n </>\n );\n};\n"],"names":["countContentTypes","nodes","reduce","total","node","type","children","EMPTY_COLLAPSED","Set","FolderNavSection","onCreateContentType","createTypeLabel","searchValue","sectionId","section","title","links","contentStructure","contentTypes","isInDevelopmentMode","useDataManager","formatMessage","locale","useIntl","actions","useFolderActions","collapsed","setCollapsed","useState","editingId","setEditingId","isDrafting","setIsDrafting","deleteTarget","setDeleteTarget","contains","useFilter","sensitivity","formatter","useCollator","sectionData","sections","searchActive","trim","length","canEdit","Boolean","deletableContentTypeUids","useMemo","Object","values","filter","contentType","uid","startsWith","plugin","map","tree","buildSectionTree","a","b","compare","effectiveCollapsed","visibleTree","filterTree","text","flatItems","flattenSortableTree","dnd","useSortableTree","disabled","items","canDrop","activeNode","target","parentId","kind","folderId","isFolderNameTakenBySibling","groups","name","id","onDrop","index","moveFolder","newParentId","assignContentTypeToFolder","targetGroupId","onExpandFolder","prev","next","delete","confirmDelete","mode","deleteFolderAndContent","contentTypeUids","collectSubtreeContentTypeUids","has","getDeleteFolderOnlySiblingNameCollisions","deleteFolderOnly","validateFolderName","excludeId","folderNameTaken","defaultMessage","getTrad","undefined","handlers","dropTargetId","dropLine","isCollapsed","canToggle","onToggle","add","onBeginRename","setTimeout","onSubmitRename","renameFolder","onCancelRename","onDeleteFolder","onDeleteFolderAndContent","sectionLink","label","suppressFocusCaptureOnMenuClose","menu","onSelect","startIcon","_jsx","File","Folder","rows","_jsxs","Box","FolderNameField","depth","defaultValue","validate","onSubmit","createFolder","onCancel","DndContext","collisionDetection","onDragCancel","onDragStart","onDragMove","onDragEnd","sensors","SortableContext","renderedItems","item","strategy","sortingStrategy","SortableTreeRow","DragOverlay","dropAnimation","activeItem","RowOverlay","_Fragment","SubNav","Section","badgeLabel","toString","link","DeleteFolderDialog","counts","countSubtree","preservedContentTypes","conflictingFolderNames","folderName","onConfirm","open","onOpenChange"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkCA,MAAMA,oBAAoB,CAACC,KAAAA,GAAAA;AACzB,IAAA,OAAOA,KAAAA,CAAMC,MAAM,CAAC,CAACC,KAAAA,EAAOC,IAAAA,GAAAA;QAC1B,IAAIA,IAAAA,CAAKC,IAAI,KAAK,QAAA,EAAU;YAC1B,OAAOF,KAAAA,GAAQH,iBAAAA,CAAkBI,IAAAA,CAAKE,QAAQ,CAAA;AAChD,QAAA;AAEA,QAAA,OAAOH,KAAAA,GAAQ,CAAA;IACjB,CAAA,EAAG,CAAA,CAAA;AACL,CAAA;AAeA,MAAMI,eAAAA,GAA+B,IAAIC,GAAAA,EAAAA,CAAAA;MAE5BC,gBAAAA,GAAmB,CAAC,EAC/BC,mBAAmB,EACnBC,eAAe,EACfC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,KAAK,EACLC,KAAK,EACiB,GAAA;AACtB,IAAA,MAAM,oBAAEC,kBAAgB,EAAEC,YAAY,EAAEC,mBAAmB,EAAE,GAAGC,6BAAAA,EAAAA;AAChE,IAAA,MAAM,EAAEC,aAAa,EAAEC,MAAM,EAAE,GAAGC,iBAAAA,EAAAA;AAClC,IAAA,MAAMC,OAAAA,GAAUC,iCAAAA,EAAAA;AAEhB,IAAA,MAAM,CAACC,SAAAA,EAAWC,YAAAA,CAAa,GAAGC,eAAsB,IAAIpB,GAAAA,EAAAA,CAAAA;AAC5D,IAAA,MAAM,CAACqB,SAAAA,EAAWC,YAAAA,CAAa,GAAGF,cAAAA,CAAwB,IAAA,CAAA;AAC1D,IAAA,MAAM,CAACG,UAAAA,EAAYC,aAAAA,CAAc,GAAGJ,cAAAA,CAAS,KAAA,CAAA;AAE7C,IAAA,MAAM,CAACK,YAAAA,EAAcC,eAAAA,CAAgB,GAAGN,cAAAA,CAG9B,IAAA,CAAA;AAEV,IAAA,MAAM,EAAEO,QAAQ,EAAE,GAAGC,uBAAUd,MAAAA,EAAQ;QAAEe,WAAAA,EAAa;AAAO,KAAA,CAAA;IAC7D,MAAMC,SAAAA,GAAYC,yBAAYjB,MAAAA,EAAQ;QAAEe,WAAAA,EAAa;AAAO,KAAA,CAAA;AAE5D,IAAA,MAAMG,WAAAA,GAAcvB,kBAAAA,CAAiBwB,QAAQ,CAAC3B,OAAAA,CAAQ;AACtD,IAAA,MAAM4B,YAAAA,GAAe9B,WAAAA,CAAY+B,IAAI,EAAA,CAAGC,MAAM,GAAG,CAAA;AACjD,IAAA,MAAMC,UAAUC,OAAAA,CAAQ3B,mBAAAA,CAAAA;AAExB,IAAA,MAAM4B,2BAA2BC,aAAAA,CAAQ,IAAA;QACvC,OAAO,IAAIxC,GAAAA,CACTyC,MAAAA,CAAOC,MAAM,CAAChC,cACXiC,MAAM,CAAC,CAACC,WAAAA,GAAgBA,WAAAA,CAAYC,GAAG,CAACC,UAAU,CAAC,OAAA,CAAA,IAAY,CAACF,WAAAA,CAAYG,MAAM,CAAA,CAClFC,GAAG,CAAC,CAACJ,WAAAA,GAAgBA,WAAAA,CAAYC,GAAG,CAAA,CAAA;IAE3C,CAAA,EAAG;AAACnC,QAAAA;AAAa,KAAA,CAAA;AAEjB,IAAA,MAAMuC,OAAOT,aAAAA,CAAQ,IAAA;QACnB,OAAOU,gCAAAA,CAAiBlB,aAAaxB,KAAAA,EAAO,CAAC2C,GAAGC,CAAAA,GAAMtB,SAAAA,CAAUuB,OAAO,CAACF,CAAAA,EAAGC,CAAAA,CAAAA,CAAAA;IAC7E,CAAA,EAAG;AAACpB,QAAAA,WAAAA;AAAaxB,QAAAA,KAAAA;AAAOsB,QAAAA;AAAU,KAAA,CAAA;IAElC,MAAMwB,kBAAAA,GAAqBpB,eAAenC,eAAAA,GAAkBmB,SAAAA;AAE5D,IAAA,MAAMqC,cAAcf,aAAAA,CAAQ,IAAA;AAC1B,QAAA,OAAON,eAAesB,0BAAAA,CAAWP,IAAAA,EAAM,CAACQ,IAAAA,GAAS9B,QAAAA,CAAS8B,MAAMrD,WAAAA,CAAAA,CAAAA,GAAgB6C,IAAAA;IAClF,CAAA,EAAG;AAACf,QAAAA,YAAAA;AAAce,QAAAA,IAAAA;AAAMtB,QAAAA,QAAAA;AAAUvB,QAAAA;AAAY,KAAA,CAAA;AAE9C,IAAA,MAAMsD,YAAYlB,aAAAA,CAAQ,IAAA;AACxB,QAAA,OAAOmB,8BAAoBJ,WAAAA,EAAaD,kBAAAA,CAAAA;IAC1C,CAAA,EAAG;AAACC,QAAAA,WAAAA;AAAaD,QAAAA;AAAmB,KAAA,CAAA;;AAGpC,IAAA,MAAMM,MAAMC,+BAAAA,CAAgB;AAC1BC,QAAAA,QAAAA,EAAU,CAACzB,OAAAA,IAAWH,YAAAA;QACtBhB,SAAAA,EAAWoC,kBAAAA;QACXS,KAAAA,EAAOL,SAAAA;AACPM,QAAAA,OAAAA,EAAS,CAACC,UAAAA,EAAYC,MAAAA,GAAAA;YACpB,IAAID,UAAAA,CAAWpE,IAAI,KAAK,QAAA,EAAU;gBAChC,OAAO,IAAA;AACT,YAAA;YAEA,MAAMsE,QAAAA,GAAWD,OAAOE,IAAI,KAAK,SAASF,MAAAA,CAAOG,QAAQ,GAAGH,MAAAA,CAAOC,QAAQ;YAE3E,IACEG,2CAAAA,CAA2BtC,WAAAA,CAAYuC,MAAM,EAAEJ,QAAAA,EAAUF,WAAWO,IAAI,EAAEP,UAAAA,CAAWQ,EAAE,CAAA,EACvF;gBACA,OAAO,KAAA;AACT,YAAA;YAEA,OAAO,IAAA;AACT,QAAA,CAAA;AACAC,QAAAA,MAAAA,EAAQ,CAACT,UAAAA,EAAYC,MAAAA,GAAAA;YACnB,MAAMC,QAAAA,GAAWD,OAAOE,IAAI,KAAK,SAASF,MAAAA,CAAOG,QAAQ,GAAGH,MAAAA,CAAOC,QAAQ;AAC3E,YAAA,MAAMQ,QAAQT,MAAAA,CAAOE,IAAI,KAAK,MAAA,GAAS,CAAA,GAAIF,OAAOS,KAAK;YAEvD,IAAIV,UAAAA,CAAWpE,IAAI,KAAK,QAAA,EAAU;AAChCmB,gBAAAA,OAAAA,CAAQ4D,UAAU,CAAC;oBACjBC,WAAAA,EAAaV,QAAAA;AACbM,oBAAAA,EAAAA,EAAIR,WAAWQ,EAAE;AACjBnE,oBAAAA,OAAAA;AACAqE,oBAAAA;AACF,iBAAA,CAAA;AAEA,gBAAA;AACF,YAAA;AAEA3D,YAAAA,OAAAA,CAAQ8D,yBAAyB,CAAC;gBAChCC,aAAAA,EAAeZ,QAAAA;AACftB,gBAAAA,GAAAA,EAAKoB,WAAWpB,GAAG;AACnBvC,gBAAAA,OAAAA;AACAqE,gBAAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA;QACAK,cAAAA,EAAgB,CAACX,QAAAA,GACflD,YAAAA,CAAa,CAAC8D,IAAAA,GAAAA;gBACZ,MAAMC,IAAAA,GAAO,IAAIlF,GAAAA,CAAIiF,IAAAA,CAAAA;AACrBC,gBAAAA,IAAAA,CAAKC,MAAM,CAACd,QAAAA,CAAAA;gBACZ,OAAOa,IAAAA;AACT,YAAA,CAAA;AACJ,KAAA,CAAA;AAEA,IAAA,MAAME,aAAAA,GAAgB,IAAA;AACpB,QAAA,IAAI,CAAC3D,YAAAA,EAAc;AACjB,YAAA;AACF,QAAA;QAEA,IAAIA,YAAAA,CAAa4D,IAAI,KAAK,aAAA,EAAe;AACvCrE,YAAAA,OAAAA,CAAQsE,sBAAsB,CAAC;AAC7BC,gBAAAA,eAAAA,EAAiBC,6CAAAA,CAA8BxD,WAAAA,EAAaP,YAAAA,CAAa7B,IAAI,CAAC6E,EAAE,CAAA,CAAE9B,MAAM,CACtF,CAACE,GAAAA,GAAQN,wBAAAA,CAAyBkD,GAAG,CAAC5C,GAAAA,CAAAA,CAAAA;gBAExC4B,EAAAA,EAAIhD,YAAAA,CAAa7B,IAAI,CAAC6E,EAAE;AACxBnE,gBAAAA;AACF,aAAA,CAAA;QACF,CAAA,MAAO;YACL,IACEoF,yDAAAA,CAAyC1D,WAAAA,CAAYuC,MAAM,EAAE9C,YAAAA,CAAa7B,IAAI,CAAC6E,EAAE,CAAA,CAAErC,MAAM,GACzF,CAAA,EACA;AACA,gBAAA;AACF,YAAA;AAEApB,YAAAA,OAAAA,CAAQ2E,gBAAgB,CAAC;AAAErF,gBAAAA,OAAAA;gBAASmE,EAAAA,EAAIhD,YAAAA,CAAa7B,IAAI,CAAC6E;AAAG,aAAA,CAAA;AAC/D,QAAA;QAEA/C,eAAAA,CAAgB,IAAA,CAAA;AAClB,IAAA,CAAA;IAEA,MAAMkE,kBAAAA,GAAqB,CAAC,EAC1BC,SAAS,EACT1B,QAAQ,EACRK,IAAI,EAKL,GAAA;AACC,QAAA,MAAMsB,kBAAkBxB,2CAAAA,CACtBtC,WAAAA,CAAYuC,MAAM,EAClBJ,UACAK,IAAAA,EACAqB,SAAAA,CAAAA;AAGF,QAAA,IAAIC,eAAAA,EAAiB;AACnB,YAAA,OAAOjF,aAAAA,CAAc;gBACnBkF,cAAAA,EAAgB,yDAAA;AAChBtB,gBAAAA,EAAAA,EAAIuB,eAAAA,CAAQ,2BAAA;AACd,aAAA,CAAA;AACF,QAAA;QAEA,OAAOC,SAAAA;AACT,IAAA,CAAA;AAEA,IAAA,MAAMC,QAAAA,GAAyB;AAC7BC,QAAAA,YAAAA,EAAcvC,IAAIuC,YAAY;AAC9BC,QAAAA,QAAAA,EAAUxC,IAAIwC,QAAQ;AACtBR,QAAAA,kBAAAA;AACAvE,QAAAA,SAAAA;AACAf,QAAAA,OAAAA;AACA+B,QAAAA,OAAAA;AAEAgE,QAAAA,WAAAA,EAAa,CAAC5B,EAAAA,GAAAA;YACZ,OAAOnB,kBAAAA,CAAmBmC,GAAG,CAAChB,EAAAA,CAAAA;AAChC,QAAA,CAAA;;AAEA6B,QAAAA,SAAAA,EAAW,CAACpE,YAAAA;AACZqE,QAAAA,QAAAA,EAAU,CAAC9B,EAAAA,GAAAA;AACTtD,YAAAA,YAAAA,CAAa,CAAC8D,IAAAA,GAAAA;gBACZ,MAAMC,IAAAA,GAAO,IAAIlF,GAAAA,CAAIiF,IAAAA,CAAAA;gBAErB,IAAIC,IAAAA,CAAKO,GAAG,CAAChB,EAAAA,CAAAA,EAAK;AAChBS,oBAAAA,IAAAA,CAAKC,MAAM,CAACV,EAAAA,CAAAA;gBACd,CAAA,MAAO;AACLS,oBAAAA,IAAAA,CAAKsB,GAAG,CAAC/B,EAAAA,CAAAA;AACX,gBAAA;gBAEA,OAAOS,IAAAA;AACT,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;;AAEAuB,QAAAA,aAAAA,EAAe,CAAChC,EAAAA,GAAAA;YACdiC,UAAAA,CAAW,IAAA;gBACTlF,aAAAA,CAAc,KAAA,CAAA;gBACdF,YAAAA,CAAamD,EAAAA,CAAAA;YACf,CAAA,EAAG,CAAA,CAAA;AACL,QAAA,CAAA;AACAkC,QAAAA,cAAAA,EAAgB,CAAClC,EAAAA,EAAID,IAAAA,GAAAA;AACnBxD,YAAAA,OAAAA,CAAQ4F,YAAY,CAAC;AAAEtG,gBAAAA,OAAAA;AAASmE,gBAAAA,EAAAA;AAAID,gBAAAA;AAAK,aAAA,CAAA;YACzClD,YAAAA,CAAa,IAAA,CAAA;AACf,QAAA,CAAA;QACAuF,cAAAA,EAAgB,IAAA;YACdvF,YAAAA,CAAa,IAAA,CAAA;AACf,QAAA,CAAA;AACAwF,QAAAA,cAAAA,EAAgB,CAAClH,IAAAA,GAAAA;YACf8B,eAAAA,CAAgB;AAAE9B,gBAAAA,IAAAA;gBAAMyF,IAAAA,EAAM;AAAO,aAAA,CAAA;AACvC,QAAA,CAAA;AACA0B,QAAAA,wBAAAA,EAA0B,CAACnH,IAAAA,GAAAA;YACzB8B,eAAAA,CAAgB;AAAE9B,gBAAAA,IAAAA;gBAAMyF,IAAAA,EAAM;AAAc,aAAA,CAAA;AAC9C,QAAA;AACF,KAAA;AAEA,IAAA,MAAM2B,WAAAA,GAAc;QAClBC,KAAAA,EAAO9G,eAAAA;;QAEP+G,+BAAAA,EAAiC,IAAA;QACjCC,IAAAA,EAAM;AACJ,YAAA;gBAAEF,KAAAA,EAAO9G,eAAAA;gBAAiBiH,QAAAA,EAAUlH,mBAAAA;AAAqBmH,gBAAAA,SAAAA,gBAAWC,cAAA,CAACC,UAAAA,EAAAA,EAAAA;AAAQ,aAAA;AAC7E,YAAA;AACEN,gBAAAA,KAAAA,EAAOpG,aAAAA,CAAc;AACnB4D,oBAAAA,EAAAA,EAAIuB,eAAAA,CAAQ,uBAAA,CAAA;oBACZD,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAqB,QAAAA,EAAU,IAAA;oBACR9F,YAAAA,CAAa,IAAA,CAAA;oBACboF,UAAAA,CAAW,IAAMlF,cAAc,IAAA,CAAA,EAAO,CAAA,CAAA;AACxC,gBAAA,CAAA;AACA6F,gBAAAA,SAAAA,gBAAWC,cAAA,CAACE,YAAAA,EAAAA,EAAAA;AACd;AACD;AACH,KAAA;AAEA,IAAA,MAAMC;;kBAGJC,eAAA,CAACC,gBAAAA,EAAAA;;AACEtF,YAAAA,OAAAA,IAAWd,4BACV+F,cAAA,CAACM,+BAAAA,EAAAA;gBACCC,KAAAA,EAAO,CAAA;AACPC,gBAAAA,YAAAA,EAAcjH,aAAAA,CAAc;AAC1B4D,oBAAAA,EAAAA,EAAIuB,eAAAA,CAAQ,yBAAA,CAAA;oBACZD,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AACAgC,gBAAAA,QAAAA,EAAU,CAACvD,IAAAA,GAAAA;AACT,oBAAA,OAAOoB,kBAAAA,CAAmB;AAAEpB,wBAAAA,IAAAA;wBAAML,QAAAA,EAAU;AAAK,qBAAA,CAAA;AACnD,gBAAA,CAAA;AACA6D,gBAAAA,QAAAA,EAAU,CAACxD,IAAAA,GAAAA;AACTxD,oBAAAA,OAAAA,CAAQiH,YAAY,CAAC;AAAE3H,wBAAAA,OAAAA;AAASkE,wBAAAA,IAAAA;wBAAML,QAAAA,EAAU;AAAK,qBAAA,CAAA;oBACrD3C,aAAAA,CAAc,KAAA,CAAA;AAChB,gBAAA,CAAA;gBACA0G,QAAAA,EAAU,IAAA;oBACR1G,aAAAA,CAAc,KAAA,CAAA;AAChB,gBAAA;;0BAGJkG,eAAA,CAACS,eAAAA,EAAAA;AACCC,gBAAAA,kBAAAA,EAAoBxE,IAAIwE,kBAAkB;AAC1CC,gBAAAA,YAAAA,EAAczE,IAAIyE,YAAY;AAC9BC,gBAAAA,WAAAA,EAAa1E,IAAI0E,WAAW;AAC5BC,gBAAAA,UAAAA,EAAY3E,IAAI2E,UAAU;AAC1BC,gBAAAA,SAAAA,EAAW5E,IAAI4E,SAAS;AACxBC,gBAAAA,OAAAA,EAAS7E,IAAI6E,OAAO;;kCAEpBnB,cAAA,CAACoB,wBAAAA,EAAAA;wBACC3E,KAAAA,EAAOH,GAAAA,CAAI+E,aAAa,CAAC3F,GAAG,CAAC,CAAC4F,IAAAA,GAASA,KAAKnE,EAAE,CAAA;AAC9CoE,wBAAAA,QAAAA,EAAUjF,IAAIkF,eAAe;AAE5BlF,wBAAAA,QAAAA,EAAAA,GAAAA,CAAI+E,aAAa,CAAC3F,GAAG,CAAC,CAAC4F,IAAAA,GAAAA;AACtB,4BAAA,qBAAOtB,cAAA,CAACyB,+BAAAA,EAAAA;gCAA8BH,IAAAA,EAAMA,IAAAA;gCAAM1C,QAAAA,EAAUA;AAA/B0C,6BAAAA,EAAAA,IAAAA,CAAKnE,EAAE,CAAA;AACtC,wBAAA,CAAA;;kCAEF6C,cAAA,CAAC0B,gBAAAA,EAAAA;wBAAYC,aAAAA,EAAe,IAAA;kCACzBrF,GAAAA,CAAIsF,UAAU,iBAAG5B,cAAA,CAAC6B,0BAAAA,EAAAA;AAAWP,4BAAAA,IAAAA,EAAMhF,IAAIsF;AAAiB,yBAAA,CAAA,GAAA;;;;;AArCtD,KAAA,EAAA,cAAA,CAAA;IA2CX,qBACExB,eAAA,CAAA0B,mBAAA,EAAA;;AACE,0BAAA9B,cAAA,CAAC+B,mBAAOC,OAAO,EAAA;gBACbC,UAAAA,EAAY/J,iBAAAA,CAAkB+D,aAAaiG,QAAQ,EAAA;AACnDC,gBAAAA,IAAAA,EAAMpH,UAAU2E,WAAAA,GAAcf,SAAAA;gBAC9B5F,SAAAA,EAAWA,SAAAA;gBACX4G,KAAAA,EAAO1G,KAAAA;AAEN,gBAAA,QAAA,EAAA;AAACkH,oBAAAA;AAAK;;AAGRhG,YAAAA,YAAAA,kBACC6F,cAAA,CAACoC,qCAAAA,EAAAA;gBACCC,MAAAA,EAAQ;AACN,oBAAA,GAAGC,6BAAa5H,WAAAA,EAAaP,YAAAA,CAAa7B,IAAI,CAAC6E,EAAE,EAAElC,wBAAAA,CAAyB;AAC5EsH,oBAAAA,qBAAAA,EAAuBrE,8CACrBxD,WAAAA,EACAP,YAAAA,CAAa7B,IAAI,CAAC6E,EAAE,CAAA,CACpB9B,MAAM,CAAC,CAACE,MAAQ,CAACN,wBAAAA,CAAyBkD,GAAG,CAAC5C,MAAMT;AACxD,iBAAA;AACA0H,gBAAAA,sBAAAA,EACErI,YAAAA,CAAa4D,IAAI,KAAK,MAAA,GAClBK,yDAAAA,CAAyC1D,WAAAA,CAAYuC,MAAM,EAAE9C,YAAAA,CAAa7B,IAAI,CAAC6E,EAAE,IACjF,EAAE;gBAERsF,UAAAA,EAAYtI,YAAAA,CAAa7B,IAAI,CAAC4E,IAAI;gBAClCwF,SAAAA,EAAW5E,aAAAA;AACXC,gBAAAA,IAAAA,EAAM5D,aAAa4D,IAAI;gBACvB4E,IAAI,EAAA,IAAA;AACJC,gBAAAA,YAAAA,EAAc,CAACD,IAAAA,GAAAA;AACb,oBAAA,IAAI,CAACA,IAAAA,EAAM;wBACTvI,eAAAA,CAAgB,IAAA,CAAA;AAClB,oBAAA;AACF,gBAAA;;;;AAKV;;;;"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useMemo } from 'react';
|
|
3
|
+
import { DndContext, DragOverlay } from '@dnd-kit/core';
|
|
4
|
+
import { SortableContext } from '@dnd-kit/sortable';
|
|
5
|
+
import { SubNav } from '@strapi/admin/strapi-admin';
|
|
6
|
+
import { useFilter, useCollator, Box } from '@strapi/design-system';
|
|
7
|
+
import { File, Folder } from '@strapi/icons';
|
|
8
|
+
import { useIntl } from 'react-intl';
|
|
9
|
+
import { getTrad } from '../../../../utils/getTrad.mjs';
|
|
10
|
+
import { useDataManager } from '../../../DataManager/useDataManager.mjs';
|
|
11
|
+
import { getDeleteFolderOnlySiblingNameCollisions, isFolderNameTakenBySibling } from '../../../DataManager/utils/contentStructure.mjs';
|
|
12
|
+
import { useFolderActions } from '../../hooks/useFolderActions.mjs';
|
|
13
|
+
import { useSortableTree } from '../../hooks/useSortableTree.mjs';
|
|
14
|
+
import { buildSectionTree, filterTree, collectSubtreeContentTypeUids, countSubtree } from '../../lib/buildFolderTree.mjs';
|
|
15
|
+
import { flattenSortableTree } from '../../lib/flatModel.mjs';
|
|
16
|
+
import { DeleteFolderDialog } from './DeleteFolderDialog.mjs';
|
|
17
|
+
import { FolderNameField } from './FolderNameField.mjs';
|
|
18
|
+
import { SortableTreeRow, RowOverlay } from './SortableTreeRow.mjs';
|
|
19
|
+
|
|
20
|
+
const countContentTypes = (nodes)=>{
|
|
21
|
+
return nodes.reduce((total, node)=>{
|
|
22
|
+
if (node.type === 'folder') {
|
|
23
|
+
return total + countContentTypes(node.children);
|
|
24
|
+
}
|
|
25
|
+
return total + 1;
|
|
26
|
+
}, 0);
|
|
27
|
+
};
|
|
28
|
+
const EMPTY_COLLAPSED = new Set(); // Empty set to uncollapse all items while searching
|
|
29
|
+
const FolderNavSection = ({ onCreateContentType, createTypeLabel, searchValue, sectionId, section, title, links })=>{
|
|
30
|
+
const { contentStructure, contentTypes, isInDevelopmentMode } = useDataManager();
|
|
31
|
+
const { formatMessage, locale } = useIntl();
|
|
32
|
+
const actions = useFolderActions();
|
|
33
|
+
const [collapsed, setCollapsed] = useState(new Set());
|
|
34
|
+
const [editingId, setEditingId] = useState(null);
|
|
35
|
+
const [isDrafting, setIsDrafting] = useState(false);
|
|
36
|
+
const [deleteTarget, setDeleteTarget] = useState(null);
|
|
37
|
+
const { contains } = useFilter(locale, {
|
|
38
|
+
sensitivity: 'base'
|
|
39
|
+
});
|
|
40
|
+
const formatter = useCollator(locale, {
|
|
41
|
+
sensitivity: 'base'
|
|
42
|
+
});
|
|
43
|
+
const sectionData = contentStructure.sections[section];
|
|
44
|
+
const searchActive = searchValue.trim().length > 0;
|
|
45
|
+
const canEdit = Boolean(isInDevelopmentMode);
|
|
46
|
+
const deletableContentTypeUids = useMemo(()=>{
|
|
47
|
+
return new Set(Object.values(contentTypes).filter((contentType)=>contentType.uid.startsWith('api::') && !contentType.plugin).map((contentType)=>contentType.uid));
|
|
48
|
+
}, [
|
|
49
|
+
contentTypes
|
|
50
|
+
]);
|
|
51
|
+
const tree = useMemo(()=>{
|
|
52
|
+
return buildSectionTree(sectionData, links, (a, b)=>formatter.compare(a, b));
|
|
53
|
+
}, [
|
|
54
|
+
sectionData,
|
|
55
|
+
links,
|
|
56
|
+
formatter
|
|
57
|
+
]);
|
|
58
|
+
const effectiveCollapsed = searchActive ? EMPTY_COLLAPSED : collapsed;
|
|
59
|
+
const visibleTree = useMemo(()=>{
|
|
60
|
+
return searchActive ? filterTree(tree, (text)=>contains(text, searchValue)) : tree;
|
|
61
|
+
}, [
|
|
62
|
+
searchActive,
|
|
63
|
+
tree,
|
|
64
|
+
contains,
|
|
65
|
+
searchValue
|
|
66
|
+
]);
|
|
67
|
+
const flatItems = useMemo(()=>{
|
|
68
|
+
return flattenSortableTree(visibleTree, effectiveCollapsed);
|
|
69
|
+
}, [
|
|
70
|
+
visibleTree,
|
|
71
|
+
effectiveCollapsed
|
|
72
|
+
]);
|
|
73
|
+
// This hook supplies the CTB contentStructure dnd engine.
|
|
74
|
+
const dnd = useSortableTree({
|
|
75
|
+
disabled: !canEdit || searchActive,
|
|
76
|
+
collapsed: effectiveCollapsed,
|
|
77
|
+
items: flatItems,
|
|
78
|
+
canDrop: (activeNode, target)=>{
|
|
79
|
+
if (activeNode.type !== 'folder') {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
const parentId = target.kind === 'nest' ? target.folderId : target.parentId;
|
|
83
|
+
if (isFolderNameTakenBySibling(sectionData.groups, parentId, activeNode.name, activeNode.id)) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
},
|
|
88
|
+
onDrop: (activeNode, target)=>{
|
|
89
|
+
const parentId = target.kind === 'nest' ? target.folderId : target.parentId;
|
|
90
|
+
const index = target.kind === 'nest' ? 0 : target.index;
|
|
91
|
+
if (activeNode.type === 'folder') {
|
|
92
|
+
actions.moveFolder({
|
|
93
|
+
newParentId: parentId,
|
|
94
|
+
id: activeNode.id,
|
|
95
|
+
section,
|
|
96
|
+
index
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
actions.assignContentTypeToFolder({
|
|
101
|
+
targetGroupId: parentId,
|
|
102
|
+
uid: activeNode.uid,
|
|
103
|
+
section,
|
|
104
|
+
index
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
onExpandFolder: (folderId)=>setCollapsed((prev)=>{
|
|
108
|
+
const next = new Set(prev);
|
|
109
|
+
next.delete(folderId);
|
|
110
|
+
return next;
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
const confirmDelete = ()=>{
|
|
114
|
+
if (!deleteTarget) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (deleteTarget.mode === 'withContent') {
|
|
118
|
+
actions.deleteFolderAndContent({
|
|
119
|
+
contentTypeUids: collectSubtreeContentTypeUids(sectionData, deleteTarget.node.id).filter((uid)=>deletableContentTypeUids.has(uid)),
|
|
120
|
+
id: deleteTarget.node.id,
|
|
121
|
+
section
|
|
122
|
+
});
|
|
123
|
+
} else {
|
|
124
|
+
if (getDeleteFolderOnlySiblingNameCollisions(sectionData.groups, deleteTarget.node.id).length > 0) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
actions.deleteFolderOnly({
|
|
128
|
+
section,
|
|
129
|
+
id: deleteTarget.node.id
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
setDeleteTarget(null);
|
|
133
|
+
};
|
|
134
|
+
const validateFolderName = ({ excludeId, parentId, name })=>{
|
|
135
|
+
const folderNameTaken = isFolderNameTakenBySibling(sectionData.groups, parentId, name, excludeId);
|
|
136
|
+
if (folderNameTaken) {
|
|
137
|
+
return formatMessage({
|
|
138
|
+
defaultMessage: 'A folder with this name already exists in this location',
|
|
139
|
+
id: getTrad('nav.folder.name.duplicate')
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
143
|
+
};
|
|
144
|
+
const handlers = {
|
|
145
|
+
dropTargetId: dnd.dropTargetId,
|
|
146
|
+
dropLine: dnd.dropLine,
|
|
147
|
+
validateFolderName,
|
|
148
|
+
editingId,
|
|
149
|
+
section,
|
|
150
|
+
canEdit,
|
|
151
|
+
isCollapsed: (id)=>{
|
|
152
|
+
return effectiveCollapsed.has(id);
|
|
153
|
+
},
|
|
154
|
+
// Search forces the tree open; a collapse toggle then can't take effect, so don't present one.
|
|
155
|
+
canToggle: !searchActive,
|
|
156
|
+
onToggle: (id)=>{
|
|
157
|
+
setCollapsed((prev)=>{
|
|
158
|
+
const next = new Set(prev);
|
|
159
|
+
if (next.has(id)) {
|
|
160
|
+
next.delete(id);
|
|
161
|
+
} else {
|
|
162
|
+
next.add(id);
|
|
163
|
+
}
|
|
164
|
+
return next;
|
|
165
|
+
});
|
|
166
|
+
},
|
|
167
|
+
// Deferred past the closing menu's focus restoration so the inline input isn't blurred (and consequently auto-committed) the instant it mounts.
|
|
168
|
+
onBeginRename: (id)=>{
|
|
169
|
+
setTimeout(()=>{
|
|
170
|
+
setIsDrafting(false);
|
|
171
|
+
setEditingId(id);
|
|
172
|
+
}, 0);
|
|
173
|
+
},
|
|
174
|
+
onSubmitRename: (id, name)=>{
|
|
175
|
+
actions.renameFolder({
|
|
176
|
+
section,
|
|
177
|
+
id,
|
|
178
|
+
name
|
|
179
|
+
});
|
|
180
|
+
setEditingId(null);
|
|
181
|
+
},
|
|
182
|
+
onCancelRename: ()=>{
|
|
183
|
+
setEditingId(null);
|
|
184
|
+
},
|
|
185
|
+
onDeleteFolder: (node)=>{
|
|
186
|
+
setDeleteTarget({
|
|
187
|
+
node,
|
|
188
|
+
mode: 'only'
|
|
189
|
+
});
|
|
190
|
+
},
|
|
191
|
+
onDeleteFolderAndContent: (node)=>{
|
|
192
|
+
setDeleteTarget({
|
|
193
|
+
node,
|
|
194
|
+
mode: 'withContent'
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
const sectionLink = {
|
|
199
|
+
label: createTypeLabel,
|
|
200
|
+
// The "New folder" option mounts the folder name input input and focuses it. Without this flag enabled, closing the menu would restore focus to the menu icon trigger.
|
|
201
|
+
suppressFocusCaptureOnMenuClose: true,
|
|
202
|
+
menu: [
|
|
203
|
+
{
|
|
204
|
+
label: createTypeLabel,
|
|
205
|
+
onSelect: onCreateContentType,
|
|
206
|
+
startIcon: /*#__PURE__*/ jsx(File, {})
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
label: formatMessage({
|
|
210
|
+
id: getTrad('nav.action.new-folder'),
|
|
211
|
+
defaultMessage: 'New folder'
|
|
212
|
+
}),
|
|
213
|
+
onSelect: ()=>{
|
|
214
|
+
setEditingId(null);
|
|
215
|
+
setTimeout(()=>setIsDrafting(true), 0);
|
|
216
|
+
},
|
|
217
|
+
startIcon: /*#__PURE__*/ jsx(Folder, {})
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
};
|
|
221
|
+
const rows = // No extra horizontal padding here — the rows sit directly in the section's
|
|
222
|
+
// list so their left edge lines up with the components SubSections.
|
|
223
|
+
/*#__PURE__*/ jsxs(Box, {
|
|
224
|
+
children: [
|
|
225
|
+
canEdit && isDrafting && /*#__PURE__*/ jsx(FolderNameField, {
|
|
226
|
+
depth: 0,
|
|
227
|
+
defaultValue: formatMessage({
|
|
228
|
+
id: getTrad('nav.folder.default-name'),
|
|
229
|
+
defaultMessage: 'New folder'
|
|
230
|
+
}),
|
|
231
|
+
validate: (name)=>{
|
|
232
|
+
return validateFolderName({
|
|
233
|
+
name,
|
|
234
|
+
parentId: null
|
|
235
|
+
});
|
|
236
|
+
},
|
|
237
|
+
onSubmit: (name)=>{
|
|
238
|
+
actions.createFolder({
|
|
239
|
+
section,
|
|
240
|
+
name,
|
|
241
|
+
parentId: null
|
|
242
|
+
});
|
|
243
|
+
setIsDrafting(false);
|
|
244
|
+
},
|
|
245
|
+
onCancel: ()=>{
|
|
246
|
+
setIsDrafting(false);
|
|
247
|
+
}
|
|
248
|
+
}),
|
|
249
|
+
/*#__PURE__*/ jsxs(DndContext, {
|
|
250
|
+
collisionDetection: dnd.collisionDetection,
|
|
251
|
+
onDragCancel: dnd.onDragCancel,
|
|
252
|
+
onDragStart: dnd.onDragStart,
|
|
253
|
+
onDragMove: dnd.onDragMove,
|
|
254
|
+
onDragEnd: dnd.onDragEnd,
|
|
255
|
+
sensors: dnd.sensors,
|
|
256
|
+
children: [
|
|
257
|
+
/*#__PURE__*/ jsx(SortableContext, {
|
|
258
|
+
items: dnd.renderedItems.map((item)=>item.id),
|
|
259
|
+
strategy: dnd.sortingStrategy,
|
|
260
|
+
children: dnd.renderedItems.map((item)=>{
|
|
261
|
+
return /*#__PURE__*/ jsx(SortableTreeRow, {
|
|
262
|
+
item: item,
|
|
263
|
+
handlers: handlers
|
|
264
|
+
}, item.id);
|
|
265
|
+
})
|
|
266
|
+
}),
|
|
267
|
+
/*#__PURE__*/ jsx(DragOverlay, {
|
|
268
|
+
dropAnimation: null,
|
|
269
|
+
children: dnd.activeItem ? /*#__PURE__*/ jsx(RowOverlay, {
|
|
270
|
+
item: dnd.activeItem
|
|
271
|
+
}) : null
|
|
272
|
+
})
|
|
273
|
+
]
|
|
274
|
+
})
|
|
275
|
+
]
|
|
276
|
+
}, "section-rows");
|
|
277
|
+
return /*#__PURE__*/ jsxs(Fragment, {
|
|
278
|
+
children: [
|
|
279
|
+
/*#__PURE__*/ jsx(SubNav.Section, {
|
|
280
|
+
badgeLabel: countContentTypes(visibleTree).toString(),
|
|
281
|
+
link: canEdit ? sectionLink : undefined,
|
|
282
|
+
sectionId: sectionId,
|
|
283
|
+
label: title,
|
|
284
|
+
children: [
|
|
285
|
+
rows
|
|
286
|
+
]
|
|
287
|
+
}),
|
|
288
|
+
deleteTarget && /*#__PURE__*/ jsx(DeleteFolderDialog, {
|
|
289
|
+
counts: {
|
|
290
|
+
...countSubtree(sectionData, deleteTarget.node.id, deletableContentTypeUids),
|
|
291
|
+
preservedContentTypes: collectSubtreeContentTypeUids(sectionData, deleteTarget.node.id).filter((uid)=>!deletableContentTypeUids.has(uid)).length
|
|
292
|
+
},
|
|
293
|
+
conflictingFolderNames: deleteTarget.mode === 'only' ? getDeleteFolderOnlySiblingNameCollisions(sectionData.groups, deleteTarget.node.id) : [],
|
|
294
|
+
folderName: deleteTarget.node.name,
|
|
295
|
+
onConfirm: confirmDelete,
|
|
296
|
+
mode: deleteTarget.mode,
|
|
297
|
+
open: true,
|
|
298
|
+
onOpenChange: (open)=>{
|
|
299
|
+
if (!open) {
|
|
300
|
+
setDeleteTarget(null);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
})
|
|
304
|
+
]
|
|
305
|
+
});
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
export { FolderNavSection };
|
|
309
|
+
//# sourceMappingURL=FolderNavSection.mjs.map
|
package/dist/admin/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderNavSection.mjs","sources":["../../../../../../admin/src/components/ContentTypeBuilderNav/components/FolderNav/FolderNavSection.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\n\nimport { DndContext, DragOverlay } from '@dnd-kit/core';\nimport { SortableContext } from '@dnd-kit/sortable';\nimport { SubNav } from '@strapi/admin/strapi-admin';\nimport { Box, useCollator, useFilter } from '@strapi/design-system';\nimport { File, Folder } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../../utils/getTrad';\nimport { useDataManager } from '../../../DataManager/useDataManager';\nimport {\n getDeleteFolderOnlySiblingNameCollisions,\n isFolderNameTakenBySibling,\n} from '../../../DataManager/utils/contentStructure';\nimport { useFolderActions } from '../../hooks/useFolderActions';\nimport { useSortableTree } from '../../hooks/useSortableTree';\nimport {\n buildSectionTree,\n collectSubtreeContentTypeUids,\n countSubtree,\n filterTree,\n} from '../../lib/buildFolderTree';\nimport { flattenSortableTree } from '../../lib/flatModel';\n\nimport { DeleteFolderDialog } from './DeleteFolderDialog';\nimport { FolderNameField } from './FolderNameField';\nimport { RowOverlay, SortableTreeRow } from './SortableTreeRow';\n\nimport type { DeleteFolderMode } from './DeleteFolderDialog';\nimport type { TreeHandlers } from './SortableTreeRow';\nimport type { SectionKey } from '../../../DataManager/utils/contentStructure';\nimport type { ContentTypeLink, FolderNode, FolderTreeNode } from '../../lib/buildFolderTree';\n\nconst countContentTypes = (nodes: FolderTreeNode[]): number => {\n return nodes.reduce((total, node) => {\n if (node.type === 'folder') {\n return total + countContentTypes(node.children);\n }\n\n return total + 1;\n }, 0);\n};\n\ninterface FolderNavSectionProps {\n onCreateContentType: () => void;\n createTypeLabel: string;\n searchValue: string;\n\n /** Guided-tour section id ('models' | 'singleTypes'). */\n sectionId: string;\n section: SectionKey;\n\n title: string;\n links: ContentTypeLink[];\n}\n\nconst EMPTY_COLLAPSED: Set<string> = new Set(); // Empty set to uncollapse all items while searching\n\nexport const FolderNavSection = ({\n onCreateContentType,\n createTypeLabel,\n searchValue,\n sectionId,\n section,\n title,\n links,\n}: FolderNavSectionProps) => {\n const { contentStructure, contentTypes, isInDevelopmentMode } = useDataManager();\n const { formatMessage, locale } = useIntl();\n const actions = useFolderActions();\n\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set());\n const [editingId, setEditingId] = useState<string | null>(null);\n const [isDrafting, setIsDrafting] = useState(false);\n\n const [deleteTarget, setDeleteTarget] = useState<{\n mode: DeleteFolderMode;\n node: FolderNode;\n } | null>(null);\n\n const { contains } = useFilter(locale, { sensitivity: 'base' });\n const formatter = useCollator(locale, { sensitivity: 'base' });\n\n const sectionData = contentStructure.sections[section];\n const searchActive = searchValue.trim().length > 0;\n const canEdit = Boolean(isInDevelopmentMode);\n\n const deletableContentTypeUids = useMemo(() => {\n return new Set(\n Object.values(contentTypes)\n .filter((contentType) => contentType.uid.startsWith('api::') && !contentType.plugin)\n .map((contentType) => contentType.uid)\n );\n }, [contentTypes]);\n\n const tree = useMemo(() => {\n return buildSectionTree(sectionData, links, (a, b) => formatter.compare(a, b));\n }, [sectionData, links, formatter]);\n\n const effectiveCollapsed = searchActive ? EMPTY_COLLAPSED : collapsed;\n\n const visibleTree = useMemo(() => {\n return searchActive ? filterTree(tree, (text) => contains(text, searchValue)) : tree;\n }, [searchActive, tree, contains, searchValue]);\n\n const flatItems = useMemo(() => {\n return flattenSortableTree(visibleTree, effectiveCollapsed);\n }, [visibleTree, effectiveCollapsed]);\n\n // This hook supplies the CTB contentStructure dnd engine.\n const dnd = useSortableTree({\n disabled: !canEdit || searchActive,\n collapsed: effectiveCollapsed,\n items: flatItems,\n canDrop: (activeNode, target) => {\n if (activeNode.type !== 'folder') {\n return true;\n }\n\n const parentId = target.kind === 'nest' ? target.folderId : target.parentId;\n\n if (\n isFolderNameTakenBySibling(sectionData.groups, parentId, activeNode.name, activeNode.id)\n ) {\n return false;\n }\n\n return true;\n },\n onDrop: (activeNode, target) => {\n const parentId = target.kind === 'nest' ? target.folderId : target.parentId;\n const index = target.kind === 'nest' ? 0 : target.index;\n\n if (activeNode.type === 'folder') {\n actions.moveFolder({\n newParentId: parentId,\n id: activeNode.id,\n section,\n index,\n });\n\n return;\n }\n\n actions.assignContentTypeToFolder({\n targetGroupId: parentId,\n uid: activeNode.uid,\n section,\n index,\n });\n },\n onExpandFolder: (folderId) =>\n setCollapsed((prev) => {\n const next = new Set(prev);\n next.delete(folderId);\n return next;\n }),\n });\n\n const confirmDelete = () => {\n if (!deleteTarget) {\n return;\n }\n\n if (deleteTarget.mode === 'withContent') {\n actions.deleteFolderAndContent({\n contentTypeUids: collectSubtreeContentTypeUids(sectionData, deleteTarget.node.id).filter(\n (uid) => deletableContentTypeUids.has(uid)\n ),\n id: deleteTarget.node.id,\n section,\n });\n } else {\n if (\n getDeleteFolderOnlySiblingNameCollisions(sectionData.groups, deleteTarget.node.id).length >\n 0\n ) {\n return;\n }\n\n actions.deleteFolderOnly({ section, id: deleteTarget.node.id });\n }\n\n setDeleteTarget(null);\n };\n\n const validateFolderName = ({\n excludeId,\n parentId,\n name,\n }: {\n excludeId?: string;\n parentId: string | null;\n name: string;\n }): string | undefined => {\n const folderNameTaken = isFolderNameTakenBySibling(\n sectionData.groups,\n parentId,\n name,\n excludeId\n );\n\n if (folderNameTaken) {\n return formatMessage({\n defaultMessage: 'A folder with this name already exists in this location',\n id: getTrad('nav.folder.name.duplicate'),\n });\n }\n\n return undefined;\n };\n\n const handlers: TreeHandlers = {\n dropTargetId: dnd.dropTargetId,\n dropLine: dnd.dropLine,\n validateFolderName,\n editingId,\n section,\n canEdit,\n\n isCollapsed: (id) => {\n return effectiveCollapsed.has(id);\n },\n // Search forces the tree open; a collapse toggle then can't take effect, so don't present one.\n canToggle: !searchActive,\n onToggle: (id) => {\n setCollapsed((prev) => {\n const next = new Set(prev);\n\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n\n return next;\n });\n },\n // Deferred past the closing menu's focus restoration so the inline input isn't blurred (and consequently auto-committed) the instant it mounts.\n onBeginRename: (id) => {\n setTimeout(() => {\n setIsDrafting(false);\n setEditingId(id);\n }, 0);\n },\n onSubmitRename: (id, name) => {\n actions.renameFolder({ section, id, name });\n setEditingId(null);\n },\n onCancelRename: () => {\n setEditingId(null);\n },\n onDeleteFolder: (node) => {\n setDeleteTarget({ node, mode: 'only' });\n },\n onDeleteFolderAndContent: (node) => {\n setDeleteTarget({ node, mode: 'withContent' });\n },\n };\n\n const sectionLink = {\n label: createTypeLabel,\n // The \"New folder\" option mounts the folder name input input and focuses it. Without this flag enabled, closing the menu would restore focus to the menu icon trigger.\n suppressFocusCaptureOnMenuClose: true,\n menu: [\n { label: createTypeLabel, onSelect: onCreateContentType, startIcon: <File /> },\n {\n label: formatMessage({\n id: getTrad('nav.action.new-folder'),\n defaultMessage: 'New folder',\n }),\n onSelect: () => {\n setEditingId(null);\n setTimeout(() => setIsDrafting(true), 0);\n },\n startIcon: <Folder />,\n },\n ],\n };\n\n const rows = (\n // No extra horizontal padding here — the rows sit directly in the section's\n // list so their left edge lines up with the components SubSections.\n <Box key=\"section-rows\">\n {canEdit && isDrafting && (\n <FolderNameField\n depth={0}\n defaultValue={formatMessage({\n id: getTrad('nav.folder.default-name'),\n defaultMessage: 'New folder',\n })}\n validate={(name) => {\n return validateFolderName({ name, parentId: null });\n }}\n onSubmit={(name) => {\n actions.createFolder({ section, name, parentId: null });\n setIsDrafting(false);\n }}\n onCancel={() => {\n setIsDrafting(false);\n }}\n />\n )}\n <DndContext\n collisionDetection={dnd.collisionDetection}\n onDragCancel={dnd.onDragCancel}\n onDragStart={dnd.onDragStart}\n onDragMove={dnd.onDragMove}\n onDragEnd={dnd.onDragEnd}\n sensors={dnd.sensors}\n >\n <SortableContext\n items={dnd.renderedItems.map((item) => item.id)}\n strategy={dnd.sortingStrategy}\n >\n {dnd.renderedItems.map((item) => {\n return <SortableTreeRow key={item.id} item={item} handlers={handlers} />;\n })}\n </SortableContext>\n <DragOverlay dropAnimation={null}>\n {dnd.activeItem ? <RowOverlay item={dnd.activeItem} /> : null}\n </DragOverlay>\n </DndContext>\n </Box>\n );\n\n return (\n <>\n <SubNav.Section\n badgeLabel={countContentTypes(visibleTree).toString()}\n link={canEdit ? sectionLink : undefined}\n sectionId={sectionId}\n label={title}\n >\n {[rows]}\n </SubNav.Section>\n\n {deleteTarget && (\n <DeleteFolderDialog\n counts={{\n ...countSubtree(sectionData, deleteTarget.node.id, deletableContentTypeUids),\n preservedContentTypes: collectSubtreeContentTypeUids(\n sectionData,\n deleteTarget.node.id\n ).filter((uid) => !deletableContentTypeUids.has(uid)).length,\n }}\n conflictingFolderNames={\n deleteTarget.mode === 'only'\n ? getDeleteFolderOnlySiblingNameCollisions(sectionData.groups, deleteTarget.node.id)\n : []\n }\n folderName={deleteTarget.node.name}\n onConfirm={confirmDelete}\n mode={deleteTarget.mode}\n open\n onOpenChange={(open) => {\n if (!open) {\n setDeleteTarget(null);\n }\n }}\n />\n )}\n </>\n );\n};\n"],"names":["countContentTypes","nodes","reduce","total","node","type","children","EMPTY_COLLAPSED","Set","FolderNavSection","onCreateContentType","createTypeLabel","searchValue","sectionId","section","title","links","contentStructure","contentTypes","isInDevelopmentMode","useDataManager","formatMessage","locale","useIntl","actions","useFolderActions","collapsed","setCollapsed","useState","editingId","setEditingId","isDrafting","setIsDrafting","deleteTarget","setDeleteTarget","contains","useFilter","sensitivity","formatter","useCollator","sectionData","sections","searchActive","trim","length","canEdit","Boolean","deletableContentTypeUids","useMemo","Object","values","filter","contentType","uid","startsWith","plugin","map","tree","buildSectionTree","a","b","compare","effectiveCollapsed","visibleTree","filterTree","text","flatItems","flattenSortableTree","dnd","useSortableTree","disabled","items","canDrop","activeNode","target","parentId","kind","folderId","isFolderNameTakenBySibling","groups","name","id","onDrop","index","moveFolder","newParentId","assignContentTypeToFolder","targetGroupId","onExpandFolder","prev","next","delete","confirmDelete","mode","deleteFolderAndContent","contentTypeUids","collectSubtreeContentTypeUids","has","getDeleteFolderOnlySiblingNameCollisions","deleteFolderOnly","validateFolderName","excludeId","folderNameTaken","defaultMessage","getTrad","undefined","handlers","dropTargetId","dropLine","isCollapsed","canToggle","onToggle","add","onBeginRename","setTimeout","onSubmitRename","renameFolder","onCancelRename","onDeleteFolder","onDeleteFolderAndContent","sectionLink","label","suppressFocusCaptureOnMenuClose","menu","onSelect","startIcon","_jsx","File","Folder","rows","_jsxs","Box","FolderNameField","depth","defaultValue","validate","onSubmit","createFolder","onCancel","DndContext","collisionDetection","onDragCancel","onDragStart","onDragMove","onDragEnd","sensors","SortableContext","renderedItems","item","strategy","sortingStrategy","SortableTreeRow","DragOverlay","dropAnimation","activeItem","RowOverlay","_Fragment","SubNav","Section","badgeLabel","toString","link","DeleteFolderDialog","counts","countSubtree","preservedContentTypes","conflictingFolderNames","folderName","onConfirm","open","onOpenChange"],"mappings":"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"}
|