payload-nested-docs-page-tree 1.6.6 → 1.6.8
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/components/PageTreeListView.client.js +14 -6
- package/dist/components/PageTreeListView.client.js.map +1 -1
- package/dist/components/PageTreeListView.server.js +9 -2
- package/dist/components/PageTreeListView.server.js.map +1 -1
- package/dist/utilities/childValidationErrors.js +8 -2
- package/dist/utilities/childValidationErrors.js.map +1 -1
- package/package.json +1 -1
|
@@ -1257,6 +1257,19 @@ export default function PageTreeListViewClient({ badgeConfig, badgesLinks, canMo
|
|
|
1257
1257
|
props.beforeActions,
|
|
1258
1258
|
props.collectionSlug
|
|
1259
1259
|
]);
|
|
1260
|
+
// ListQueryProvider writes this prop back to the URL whenever its identity
|
|
1261
|
+
// changes, so a new object on every render would undo column and filter edits.
|
|
1262
|
+
const listQuery = React.useMemo(()=>({
|
|
1263
|
+
...query,
|
|
1264
|
+
limit: currentLimit,
|
|
1265
|
+
page: displayedPaginatedData.page,
|
|
1266
|
+
sort: currentSort
|
|
1267
|
+
}), [
|
|
1268
|
+
currentLimit,
|
|
1269
|
+
currentSort,
|
|
1270
|
+
displayedPaginatedData.page,
|
|
1271
|
+
query
|
|
1272
|
+
]);
|
|
1260
1273
|
return /*#__PURE__*/ _jsx("div", {
|
|
1261
1274
|
className: styles.root,
|
|
1262
1275
|
children: /*#__PURE__*/ _jsx(PageTreeProvider, {
|
|
@@ -1266,12 +1279,7 @@ export default function PageTreeListViewClient({ badgeConfig, badgesLinks, canMo
|
|
|
1266
1279
|
data: displayedPaginatedData,
|
|
1267
1280
|
modifySearchParams: true,
|
|
1268
1281
|
orderableFieldName: orderableFieldName,
|
|
1269
|
-
query:
|
|
1270
|
-
...query,
|
|
1271
|
-
limit: currentLimit,
|
|
1272
|
-
page: displayedPaginatedData.page,
|
|
1273
|
-
sort: currentSort
|
|
1274
|
-
},
|
|
1282
|
+
query: listQuery,
|
|
1275
1283
|
children: /*#__PURE__*/ _jsx(DefaultListView, {
|
|
1276
1284
|
...props,
|
|
1277
1285
|
beforeActions: beforeActions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeListView.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Column, ListQuery, ListViewClientProps, PaginatedDocs } from 'payload'\n\nimport {\n DndContext,\n type DragEndEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n PointerSensor,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n type SortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable'\nimport {\n DefaultListView,\n ListQueryProvider,\n Pill,\n SelectAll,\n SelectRow,\n SortHeader,\n toast,\n useAuth,\n useConfig,\n useLocale,\n usePreferences,\n useTranslation,\n useWindowInfo,\n} from '@payloadcms/ui'\nimport { useRouter, useSearchParams } from 'next/navigation'\nimport React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type {\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginResolvedBadgeConfig,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport {\n buildInsertDropTargets,\n getDropTargetParentDoc,\n type PageTreeDropTarget,\n} from '../utilities/dropTargets.js'\nimport {\n CANCEL_DRAG_MESSAGE,\n getDropValidation,\n type PageTreeDropValidation,\n} from '../utilities/moveValidation.js'\nimport {\n buildDocSlugPath,\n buildPageTreeDocs,\n buildProspectiveDocSlugPath,\n getDocDisplayLabel,\n getVisibleTreeDocs,\n type PageTreeDoc,\n} from '../utilities/pageTree.js'\nimport { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js'\nimport { PageTreeProvider, PageTreeRowDndProvider } from './PageTreeContext.js'\nimport styles from './PageTreeListView.module.css'\nimport { PageTreeStatusBadge } from './PageTreeStatusBadge.js'\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\n\ntype PageTreeListViewClientProps = {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n canMoveDocs: boolean\n columnState: Column[]\n homeIndicatorEnabled: boolean\n orderableFieldName?: string\n parentFieldSlug: string\n query: ListQuery\n /** Server tree order, which indexes each column's renderedCells. */\n renderedRowIDs: string[]\n sourceDocs: PageTreeSourceDoc[]\n useAsTitle: string\n} & Omit<ListViewClientProps, 'columnState' | 'Table'>\n\ntype SelectableRowData = React.ComponentProps<typeof SelectRow>['rowData']\ntype PageTreeDragType = 'move' | 'order'\n\ntype PageTreeDragData = {\n dragType?: PageTreeDragType\n parentID?: null | string\n rowID?: string\n}\n\ntype PageTreeSortableTransform = ReturnType<typeof useSortable>['transform']\n\ntype PageTreeReorderRequestBody = {\n docsToMove: string[]\n frontendOrder?: PageTreeReorderFrontendOrder\n newKeyWillBe: 'greater' | 'less'\n orderableFieldName: string\n target: {\n id: string\n key: null | string\n }\n}\n\ntype PageTreeReorderFrontendOrder = {\n activeSlug: null | string\n after: PageTreeReorderFrontendOrderEntry[]\n before: PageTreeReorderFrontendOrderEntry[]\n moveFromIndex: number\n moveToIndex: number\n newAfterRowSlug: null | string\n newBeforeRowSlug: null | string\n sort: null | string\n targetSlug: null | string\n}\n\ntype PageTreeReorderFrontendOrderEntry = {\n index: number\n orderKey: null | string\n slug: null | string\n}\n\ntype PageTreeIndexRange = {\n end: number\n start: number\n}\n\ntype PageTreeRangeRect = {\n bottom: number\n height: number\n top: number\n}\n\nconst SILENT_MOVE_MESSAGES = new Set([CANCEL_DRAG_MESSAGE])\nconst ALREADY_ROOT_MESSAGE = 'This page is already in root level.'\n\nfunction getParentMovePreferenceKey(collectionSlug: string): string {\n return `payload-nested-docs-page-tree:${collectionSlug}:parentMoveHandle`\n}\n\nfunction getRowDropID(rowID: string): string {\n return `page-drop:${rowID}`\n}\n\nfunction getSortableRowID(rowID: string): string {\n return `page-sort:${rowID}`\n}\n\nfunction getDiagnosticString(value: unknown): null | string {\n return typeof value === 'string' && value.length > 0 ? value : null\n}\n\nfunction getPageTreeDragData(value: unknown): PageTreeDragData {\n if (!value || typeof value !== 'object') {\n return {}\n }\n\n const data = value as Record<string, unknown>\n const dragType = data.dragType === 'move' || data.dragType === 'order' ? data.dragType : undefined\n const parentID =\n data.parentID === null || typeof data.parentID === 'string' ? data.parentID : undefined\n const rowID = typeof data.rowID === 'string' ? data.rowID : undefined\n\n return {\n dragType,\n parentID,\n rowID,\n }\n}\n\nfunction getSortableTransform(transform: PageTreeSortableTransform): string | undefined {\n if (!transform) {\n return undefined\n }\n\n const scaleX = transform.scaleX ?? 1\n const scaleY = transform.scaleY ?? 1\n\n return `translate3d(${transform.x}px, ${transform.y}px, 0) scaleX(${scaleX}) scaleY(${scaleY})`\n}\n\nfunction getVisibleSubtreeIndexRange(docs: PageTreeDoc[], rootIndex: number): null | PageTreeIndexRange {\n const rootDoc = docs[rootIndex]\n\n if (!rootDoc) {\n return null\n }\n\n let end = rootIndex\n\n for (let index = rootIndex + 1; index < docs.length; index += 1) {\n if (!docs[index]?.__pageTreeAncestorIDs.includes(rootDoc.__pageTreeID)) {\n break\n }\n\n end = index\n }\n\n return {\n end,\n start: rootIndex,\n }\n}\n\nfunction getRangeRect(args: {\n activeNodeRect: Parameters<SortingStrategy>[0]['activeNodeRect']\n activeRange: PageTreeIndexRange\n range: PageTreeIndexRange\n rects: Parameters<SortingStrategy>[0]['rects']\n}): null | PageTreeRangeRect {\n const { activeNodeRect, activeRange, range, rects } = args\n const firstRect =\n rects[range.start] ?? (range.start === activeRange.start ? activeNodeRect : undefined)\n const lastRect = rects[range.end] ?? (range.end === activeRange.end ? activeNodeRect : undefined)\n\n if (!firstRect || !lastRect) {\n return null\n }\n\n return {\n bottom: lastRect.top + lastRect.height,\n height: lastRect.top + lastRect.height - firstRect.top,\n top: firstRect.top,\n }\n}\n\nfunction isIndexInRange(index: number, range: PageTreeIndexRange): boolean {\n return index >= range.start && index <= range.end\n}\n\nfunction buildPageTreeSortingStrategy(docs: PageTreeDoc[]): SortingStrategy {\n return ({ activeIndex, activeNodeRect, index, overIndex, rects }) => {\n const activeRange = getVisibleSubtreeIndexRange(docs, activeIndex)\n const overRange = getVisibleSubtreeIndexRange(docs, overIndex)\n\n if (!activeRange || !overRange || activeRange.start === overRange.start) {\n return null\n }\n\n const activeRect = getRangeRect({\n activeNodeRect,\n activeRange,\n range: activeRange,\n rects,\n })\n const overRect = getRangeRect({\n activeNodeRect,\n activeRange,\n range: overRange,\n rects,\n })\n\n if (!activeRect || !overRect) {\n return null\n }\n\n if (isIndexInRange(index, activeRange)) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y:\n activeRange.start < overRange.start\n ? overRect.bottom - activeRect.bottom\n : overRect.top - activeRect.top,\n }\n }\n\n if (activeRange.start < overRange.start && index > activeRange.end && index <= overRange.end) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: -activeRect.height,\n }\n }\n\n if (activeRange.start > overRange.start && index >= overRange.start && index < activeRange.start) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: activeRect.height,\n }\n }\n\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: 0,\n }\n }\n}\n\nfunction buildPaginatedData(\n docs: PageTreeDoc[],\n limit: number,\n requestedPage: number,\n): PaginatedDocs {\n const totalDocs = docs.length\n const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1\n const page = Math.min(Math.max(requestedPage, 1), totalPages)\n const startIndex = (page - 1) * limit\n const pageDocs = docs.slice(startIndex, startIndex + limit)\n\n return {\n docs: pageDocs,\n hasNextPage: page < totalPages,\n hasPrevPage: page > 1,\n limit,\n nextPage: page < totalPages ? page + 1 : null,\n page,\n pagingCounter: totalDocs === 0 ? 0 : startIndex + 1,\n prevPage: page > 1 ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter((entry) => typeof entry === 'string' && entry.length > 0)\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction normalizePositiveInt(value: null | string, fallback: number): number {\n if (typeof value !== 'string') {\n return fallback\n }\n\n const parsedValue = Number.parseInt(value, 10)\n return Number.isNaN(parsedValue) || parsedValue <= 0 ? fallback : parsedValue\n}\n\nfunction isOrderableSortActive(args: { orderableFieldName?: string; sort?: string }): boolean {\n const { orderableFieldName, sort } = args\n\n return Boolean(\n orderableFieldName && (sort === orderableFieldName || sort === `-${orderableFieldName}`),\n )\n}\n\nfunction ensureUseAsTitleColumn(columnState: Column[], useAsTitle: string): Column[] {\n return columnState.map((column) =>\n column.accessor === useAsTitle\n ? {\n ...column,\n active: true,\n }\n : column,\n )\n}\n\nfunction sliceColumnState(\n columnState: Column[],\n docs: PageTreeDoc[],\n renderedCellIndexByDocID: ReadonlyMap<string, number>,\n): Column[] {\n return columnState.map((column) => ({\n ...column,\n renderedCells: docs.map((doc) => {\n const renderedCellIndex =\n renderedCellIndexByDocID.get(doc.__pageTreeID) ?? doc.__pageTreeOrderIndex\n\n return column.renderedCells?.[renderedCellIndex] ?? null\n }),\n }))\n}\n\nfunction getSelectableRowData(doc: PageTreeDoc): SelectableRowData {\n const record = doc as Record<string, unknown>\n\n return {\n // Payload's selection Map preserves numeric IDs despite SelectRow's string-only type.\n id: (doc.id ?? doc.__pageTreeID) as SelectableRowData['id'],\n _isLocked: Boolean(record._isLocked),\n _userEditing: record._userEditing as SelectableRowData['_userEditing'],\n }\n}\n\nfunction shouldSilenceMoveMessage(message?: string): boolean {\n return typeof message === 'string' && SILENT_MOVE_MESSAGES.has(message)\n}\n\nfunction getVisibleSubtreeRowIDs(docs: PageTreeDoc[], rowID: string): string[] {\n const rootIndex = docs.findIndex((doc) => doc.__pageTreeID === rowID)\n\n if (rootIndex < 0) {\n return []\n }\n\n const rowIDs = [rowID]\n\n for (const doc of docs.slice(rootIndex + 1)) {\n if (!doc.__pageTreeAncestorIDs.includes(rowID)) {\n break\n }\n\n rowIDs.push(doc.__pageTreeID)\n }\n\n return rowIDs\n}\n\nfunction buildOptimisticOrderRowIDs(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n targetRowID: string\n}): null | string[] {\n const { activeRowID, docs, targetRowID } = args\n\n if (activeRowID === targetRowID) {\n return null\n }\n\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\n\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\n return null\n }\n\n const activeBlockIDs = getVisibleSubtreeRowIDs(docs, activeRowID)\n const targetBlockIDs = getVisibleSubtreeRowIDs(docs, targetRowID)\n\n if (\n activeBlockIDs.length === 0 ||\n targetBlockIDs.length === 0 ||\n targetBlockIDs.includes(activeRowID)\n ) {\n return null\n }\n\n const currentRowIDs = docs.map((doc) => doc.__pageTreeID)\n\n if (activeBlockIDs.length === 1 && targetBlockIDs.length === 1) {\n const activeIndex = currentRowIDs.indexOf(activeRowID)\n const targetIndex = currentRowIDs.indexOf(targetRowID)\n\n return activeIndex < 0 || targetIndex < 0\n ? null\n : arrayMove(currentRowIDs, activeIndex, targetIndex)\n }\n\n const remainingRowIDs = currentRowIDs.filter((rowID) => !activeBlockIDs.includes(rowID))\n const activeIndex = currentRowIDs.indexOf(activeRowID)\n const targetIndex = currentRowIDs.indexOf(targetRowID)\n const targetAnchorID =\n activeIndex < targetIndex ? targetBlockIDs[targetBlockIDs.length - 1] : targetBlockIDs[0]\n\n if (!targetAnchorID) {\n return null\n }\n\n const targetAnchorIndex = remainingRowIDs.indexOf(targetAnchorID)\n\n if (targetAnchorIndex < 0) {\n return null\n }\n\n const insertIndex = activeIndex < targetIndex ? targetAnchorIndex + 1 : targetAnchorIndex\n\n return [\n ...remainingRowIDs.slice(0, insertIndex),\n ...activeBlockIDs,\n ...remainingRowIDs.slice(insertIndex),\n ]\n}\n\nfunction buildReorderRequestBody(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n orderableFieldName?: string\n sort?: string\n targetRowID: string\n}): null | PageTreeReorderRequestBody {\n const { activeRowID, docs, orderableFieldName, sort, targetRowID } = args\n\n if (!orderableFieldName || (sort !== orderableFieldName && sort !== `-${orderableFieldName}`)) {\n return null\n }\n\n if (activeRowID === targetRowID) {\n return null\n }\n\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\n\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\n return null\n }\n\n const siblingDocs = docs.filter(\n (doc) => doc.__pageTreeParentID === activeDoc.__pageTreeParentID,\n )\n const moveFromIndex = siblingDocs.findIndex((doc) => doc.__pageTreeID === activeRowID)\n const moveToIndex = siblingDocs.findIndex((doc) => doc.__pageTreeID === targetRowID)\n\n if (moveFromIndex < 0 || moveToIndex < 0 || moveFromIndex === moveToIndex) {\n return null\n }\n\n const newBeforeRow =\n moveToIndex > moveFromIndex ? siblingDocs[moveToIndex] : siblingDocs[moveToIndex - 1]\n const newAfterRow =\n moveToIndex > moveFromIndex ? siblingDocs[moveToIndex + 1] : siblingDocs[moveToIndex]\n const target = newBeforeRow ?? newAfterRow\n\n if (!target) {\n return null\n }\n\n const getFrontendOrderEntry = (\n doc: PageTreeDoc,\n index: number,\n ): PageTreeReorderFrontendOrderEntry => {\n const orderKey = doc[orderableFieldName]\n\n return {\n slug: getDiagnosticString(doc.slug),\n index,\n orderKey: typeof orderKey === 'string' && orderKey.length > 0 ? orderKey : null,\n }\n }\n const siblingDocsAfter = [...siblingDocs]\n const [movedSiblingDoc] = siblingDocsAfter.splice(moveFromIndex, 1)\n\n if (!movedSiblingDoc) {\n return null\n }\n\n siblingDocsAfter.splice(moveToIndex, 0, movedSiblingDoc)\n\n const targetKey = target[orderableFieldName]\n const newKeyWillBe =\n (newBeforeRow && sort === orderableFieldName) ||\n (!newBeforeRow && sort === `-${orderableFieldName}`)\n ? 'greater'\n : 'less'\n\n return {\n docsToMove: [activeRowID],\n frontendOrder: {\n activeSlug: getDiagnosticString(activeDoc.slug),\n after: siblingDocsAfter.map(getFrontendOrderEntry),\n before: siblingDocs.map(getFrontendOrderEntry),\n moveFromIndex,\n moveToIndex,\n newAfterRowSlug: newAfterRow ? getDiagnosticString(newAfterRow.slug) : null,\n newBeforeRowSlug: newBeforeRow ? getDiagnosticString(newBeforeRow.slug) : null,\n sort: sort ?? null,\n targetSlug: getDiagnosticString(targetDoc.slug),\n },\n newKeyWillBe,\n orderableFieldName,\n target: {\n id: target.__pageTreeID,\n key: typeof targetKey === 'string' && targetKey.length > 0 ? targetKey : null,\n },\n }\n}\n\nfunction orderDocsByRowIDs(docs: PageTreeDoc[], orderRowIDs: null | string[]): PageTreeDoc[] {\n if (!orderRowIDs) {\n return docs\n }\n\n const docsByID = new Map(docs.map((doc) => [doc.__pageTreeID, doc]))\n const orderedDocs = orderRowIDs.flatMap((rowID) => {\n const doc = docsByID.get(rowID)\n\n return doc ? [doc] : []\n })\n\n return orderedDocs.length === docs.length ? orderedDocs : docs\n}\n\nfunction getDropTargetValidation(args: {\n activeDoc: PageTreeDoc\n docsByID: ReadonlyMap<string, PageTreeDoc>\n dropTarget: PageTreeDropTarget\n}): PageTreeDropValidation {\n const { activeDoc, docsByID, dropTarget } = args\n\n if (dropTarget.dropType === 'row') {\n return getDropValidation({\n activeDoc,\n targetDoc: docsByID.get(dropTarget.rowID) ?? undefined,\n })\n }\n\n if (dropTarget.parentID === null) {\n if (activeDoc.__pageTreeParentID === null) {\n return {\n isValid: false,\n message: ALREADY_ROOT_MESSAGE,\n parentID: null,\n }\n }\n\n return {\n isValid: true,\n parentID: null,\n }\n }\n\n const targetDoc = docsByID.get(dropTarget.parentID)\n\n if (!targetDoc) {\n return {\n isValid: false,\n message: 'Could not resolve drop target.',\n parentID: dropTarget.parentID,\n }\n }\n\n if (targetDoc.__pageTreeID === activeDoc.__pageTreeID) {\n return {\n isValid: false,\n message: CANCEL_DRAG_MESSAGE,\n parentID: targetDoc.__pageTreeID,\n }\n }\n\n if (targetDoc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)) {\n return {\n isValid: false,\n message: 'A document cannot be moved under one of its descendants.',\n parentID: targetDoc.__pageTreeID,\n }\n }\n\n return {\n isValid: true,\n parentID: targetDoc.__pageTreeID,\n }\n}\n\nfunction renderStatusBadge(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug: string\n doc: PageTreeDoc\n index: number\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n}): React.ReactNode {\n const { badgeConfig, badgesLinks, collectionSlug, doc, index } = args\n return (\n <PageTreeStatusBadge\n badgeConfig={badgeConfig}\n badgesLinks={badgesLinks}\n collectionSlug={collectionSlug}\n doc={doc}\n key={doc.__pageTreeID ?? index}\n />\n )\n}\n\nfunction ParentMoveToggle({\n collectionSlug,\n enabled,\n onToggle,\n}: {\n collectionSlug: string\n enabled: boolean\n onToggle: () => void\n}) {\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n const [mobileActions, setMobileActions] = React.useState<Element | null>(null)\n const setMobileMount = React.useCallback((node: HTMLSpanElement | null) => {\n setMobileActions(\n node?.closest('.collection-list')?.querySelector('.search-bar__actions') ?? null,\n )\n }, [])\n const toggle = (\n <Pill\n aria-checked={enabled}\n aria-label={`${enabled ? 'Hide' : 'Show'} edit hierarchy handles`}\n className=\"pages-hierarchy-parent-move-toggle\"\n id={`pages-hierarchy-parent-move-toggle-${collectionSlug}`}\n onClick={onToggle}\n pillStyle={enabled ? 'dark' : 'light'}\n size=\"small\"\n >\n Edit Hierarchy\n </Pill>\n )\n\n if (smallBreak) {\n return (\n <>\n <span hidden ref={setMobileMount} />\n {mobileActions ? createPortal(toggle, mobileActions) : null}\n </>\n )\n }\n\n return toggle\n}\n\nfunction buildTableColumns(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug: string\n columnState: Column[]\n docs: PageTreeDoc[]\n enableRowSelections?: boolean\n homeIndicatorEnabled: boolean\n orderableFieldName?: string\n parentFieldSlug: string\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n useAsTitle: string\n}): Column[] {\n const {\n badgeConfig,\n badgesLinks,\n collectionSlug,\n columnState,\n docs,\n enableRowSelections,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n t,\n useAsTitle,\n } = args\n const columnsToUse = columnState.map((column) => {\n if (column.accessor === useAsTitle) {\n return {\n ...column,\n active: true,\n renderedCells: docs.map((doc, index) => (\n <PageTreeTitleCell\n doc={doc}\n homeIndicatorEnabled={homeIndicatorEnabled}\n key={doc.__pageTreeID ?? index}\n >\n {column.renderedCells?.[index] ?? getDocDisplayLabel(doc)}\n </PageTreeTitleCell>\n )),\n }\n }\n\n if (column.accessor === '_status') {\n return {\n ...column,\n renderedCells: docs.map((doc, index) =>\n renderStatusBadge({\n badgeConfig,\n badgesLinks,\n collectionSlug,\n doc,\n index,\n t,\n }),\n ),\n }\n }\n\n if (column.accessor === parentFieldSlug) {\n return {\n ...column,\n renderedCells: docs.map((doc, index) =>\n doc.__pageTreeParentID !== null ? (\n (column.renderedCells?.[index] ?? null)\n ) : (\n <span className=\"pages-hierarchy-empty-cell\" key={doc.__pageTreeID ?? index}>\n -\n </span>\n ),\n ),\n }\n }\n\n return column\n })\n\n if (enableRowSelections) {\n columnsToUse.unshift({\n accessor: '_select',\n active: true,\n field: { hidden: true } as Column['field'],\n Heading: <SelectAll />,\n renderedCells: docs.map((doc, index) => (\n <SelectRow key={doc.__pageTreeID ?? index} rowData={getSelectableRowData(doc)} />\n )),\n })\n }\n\n if (orderableFieldName) {\n const orderableColumn = {\n accessor: '_pageTreeOrderSort',\n active: true,\n field: { hidden: true } as Column['field'],\n Heading: <SortHeader />,\n renderedCells: docs.map((doc, index) => (\n <span\n aria-hidden=\"true\"\n className=\"pages-hierarchy-order-sort-spacer\"\n key={doc.__pageTreeID ?? index}\n />\n )),\n } satisfies Column\n const selectColumnIndex = columnsToUse.findIndex((column) => column.accessor === '_select')\n\n columnsToUse.splice(selectColumnIndex >= 0 ? selectColumnIndex + 1 : 0, 0, orderableColumn)\n }\n\n return columnsToUse\n}\n\nfunction HierarchyInsertRow({\n activeColumnsCount,\n activeDragRowID,\n activeDropTargetID,\n dropTarget,\n dropValidation,\n isMovePending,\n}: {\n activeColumnsCount: number\n activeDragRowID: null | string\n activeDropTargetID: null | string\n dropTarget: Extract<PageTreeDropTarget, { dropType: 'insert' }>\n dropValidation?: PageTreeDropValidation\n isMovePending: boolean\n}) {\n const { isOver, setNodeRef } = useDroppable({\n id: dropTarget.dropID,\n data: dropTarget,\n disabled: isMovePending,\n })\n const hasActiveDrag = Boolean(activeDragRowID)\n const showInsertLine = isOver && activeDropTargetID === dropTarget.dropID\n\n return (\n <tr\n className=\"pages-hierarchy-insert-row\"\n data-drag-over={showInsertLine ? 'true' : 'false'}\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\n data-page-tree-insert=\"true\"\n >\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <td colSpan={activeColumnsCount}>\n <div\n className=\"pages-hierarchy-insert-row__target\"\n data-insert-depth={dropTarget.depth}\n ref={setNodeRef}\n />\n </td>\n </tr>\n )\n}\n\nfunction HierarchyTableRow({\n activeColumns,\n activeDragRowID,\n activeDragType,\n canReorderRows,\n doc,\n dropValidation,\n insertAfterDropID,\n insertBeforeDropID,\n isMovePending,\n rowIndex,\n titleCellAccessor,\n}: {\n activeColumns: Column[]\n activeDragRowID: null | string\n activeDragType: null | PageTreeDragType\n canReorderRows: boolean\n doc: PageTreeDoc\n dropValidation?: PageTreeDropValidation\n insertAfterDropID: null | string\n insertBeforeDropID: null | string\n isMovePending: boolean\n rowIndex: number\n titleCellAccessor: string\n}) {\n const { isOver, setNodeRef } = useDroppable({\n id: getRowDropID(doc.__pageTreeID),\n data: {\n dropType: 'row',\n insertAfterDropID,\n insertBeforeDropID,\n rowID: doc.__pageTreeID,\n } satisfies Extract<PageTreeDropTarget, { dropType: 'row' }>,\n disabled: isMovePending,\n })\n const sortable = useSortable({\n id: getSortableRowID(doc.__pageTreeID),\n data: {\n dragType: 'order',\n parentID: doc.__pageTreeParentID,\n rowID: doc.__pageTreeID,\n } satisfies PageTreeDragData,\n disabled: !canReorderRows || isMovePending || activeDragType === 'move',\n })\n const hasActiveMoveDrag = activeDragType === 'move' && Boolean(activeDragRowID)\n const isActiveDragRow = activeDragRowID === doc.__pageTreeID\n const setRowRef = React.useCallback(\n (element: HTMLTableRowElement | null) => {\n setNodeRef(element)\n sortable.setNodeRef(element)\n },\n [setNodeRef, sortable],\n )\n const rowDndValue = React.useMemo(\n () => ({\n isOrderDragging: sortable.isDragging,\n orderHandleAttributes: sortable.attributes,\n orderHandleListeners: sortable.listeners,\n orderHandleRef: sortable.setActivatorNodeRef,\n }),\n [sortable.attributes, sortable.isDragging, sortable.listeners, sortable.setActivatorNodeRef],\n )\n const sortableStyle = React.useMemo(\n () =>\n ({\n position: sortable.isDragging ? 'relative' : undefined,\n transform: getSortableTransform(sortable.transform),\n transition: activeDragType === 'order' ? sortable.transition : undefined,\n zIndex: sortable.isDragging ? 1 : undefined,\n }) as React.CSSProperties,\n [activeDragType, sortable.isDragging, sortable.transform, sortable.transition],\n )\n\n return (\n <tr\n className={`row-${rowIndex + 1}`}\n data-drag-over={activeDragType === 'move' && isOver ? 'true' : 'false'}\n data-drop-valid={hasActiveMoveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\n data-id={doc.id}\n data-is-drag-source={activeDragType === 'move' && isActiveDragRow ? 'true' : 'false'}\n data-is-order-drag-source={sortable.isDragging ? 'true' : 'false'}\n data-page-tree-row=\"true\"\n ref={setRowRef}\n style={sortableStyle}\n >\n <PageTreeRowDndProvider value={rowDndValue}>\n {activeColumns.map((column, columnIndex) => {\n const { accessor } = column\n\n return (\n <td\n className={`cell-${accessor.replace(/\\./g, '__')}`}\n data-page-tree-title-cell={accessor === titleCellAccessor ? 'true' : undefined}\n key={columnIndex}\n >\n {column.renderedCells?.[rowIndex] ?? null}\n </td>\n )\n })}\n </PageTreeRowDndProvider>\n </tr>\n )\n}\n\nfunction HierarchyTable({\n activeDragRowID,\n activeDragType,\n activeDropTarget,\n allDocsByID,\n canReorderRows,\n columns,\n data,\n isMovePending,\n titleCellAccessor,\n}: {\n activeDragRowID: null | string\n activeDragType: null | PageTreeDragType\n activeDropTarget: null | PageTreeDropTarget\n allDocsByID: ReadonlyMap<string, PageTreeDoc>\n canReorderRows: boolean\n columns: Column[]\n data: PageTreeDoc[]\n isMovePending: boolean\n titleCellAccessor: string\n}) {\n const activeColumns = React.useMemo(() => columns.filter((column) => column?.active), [columns])\n const sortableItems = React.useMemo(\n () => data.map((doc) => getSortableRowID(doc.__pageTreeID)),\n [data],\n )\n const sortingStrategy = React.useMemo(() => buildPageTreeSortingStrategy(data), [data])\n const insertDropTargets = React.useMemo(() => buildInsertDropTargets(data), [data])\n const insertDropTargetsByReferenceRowID = React.useMemo(\n () => new Map(insertDropTargets.map((dropTarget) => [dropTarget.referenceRowID, dropTarget])),\n [insertDropTargets],\n )\n const activeDropTargetID =\n activeDropTarget?.dropType === 'insert' ? activeDropTarget.dropID : null\n const activeDoc =\n activeDragType === 'move' && activeDragRowID ? (allDocsByID.get(activeDragRowID) ?? null) : null\n const rowDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\n\n return new Map(\n data.map((doc) => [\n doc.__pageTreeID,\n getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget: {\n dropType: 'row',\n insertAfterDropID: null,\n insertBeforeDropID: null,\n rowID: doc.__pageTreeID,\n },\n }),\n ]),\n )\n }, [activeDoc, allDocsByID, data])\n const insertDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\n\n return new Map(\n insertDropTargets.map((dropTarget) => [\n dropTarget.dropID,\n getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget,\n }),\n ]),\n )\n }, [activeDoc, allDocsByID, insertDropTargets])\n\n if (activeColumns.length === 0) {\n return <div>No columns selected</div>\n }\n\n return (\n <div\n className={[\n 'table-wrap pages-hierarchy-table',\n activeDoc ? 'pages-hierarchy-table--dragging' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"table table--appearance-default\">\n <table cellPadding=\"0\" cellSpacing=\"0\">\n <thead>\n <tr>\n {activeColumns.map((column, index) => (\n <th\n data-page-tree-title-cell={\n column.accessor === titleCellAccessor ? 'true' : undefined\n }\n id={`heading-${column.accessor.replace(/\\./g, '__')}`}\n key={index}\n >\n {column.Heading}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n <SortableContext items={sortableItems} strategy={sortingStrategy}>\n {data.map((doc, rowIndex) => {\n const rootInsertBeforeDropTarget =\n doc.__pageTreeParentID === null\n ? insertDropTargetsByReferenceRowID.get(doc.__pageTreeID)\n : undefined\n const rootInsertTargetIndex =\n rootInsertBeforeDropTarget !== undefined\n ? insertDropTargets.indexOf(rootInsertBeforeDropTarget)\n : -1\n const rootInsertAfterDropTarget =\n rootInsertTargetIndex >= 0\n ? insertDropTargets[rootInsertTargetIndex + 1]\n : undefined\n const isTrailingRootInsert =\n rootInsertAfterDropTarget === insertDropTargets[insertDropTargets.length - 1]\n const nextVisibleDoc = data[rowIndex + 1]\n const hasVisibleDescendantAfter =\n nextVisibleDoc?.__pageTreeAncestorIDs.includes(doc.__pageTreeID) ?? false\n\n return (\n <React.Fragment key={doc.__pageTreeID}>\n {rootInsertBeforeDropTarget ? (\n <HierarchyInsertRow\n activeColumnsCount={activeColumns.length}\n activeDragRowID={activeDoc ? activeDragRowID : null}\n activeDropTargetID={activeDropTargetID}\n dropTarget={rootInsertBeforeDropTarget}\n dropValidation={insertDropValidationByID.get(\n rootInsertBeforeDropTarget.dropID,\n )}\n isMovePending={isMovePending}\n key={rootInsertBeforeDropTarget.dropID}\n />\n ) : null}\n <HierarchyTableRow\n activeColumns={activeColumns}\n activeDragRowID={activeDragRowID}\n activeDragType={activeDragType}\n canReorderRows={canReorderRows}\n doc={doc}\n dropValidation={rowDropValidationByID.get(doc.__pageTreeID)}\n insertAfterDropID={\n hasVisibleDescendantAfter || isTrailingRootInsert\n ? null\n : (rootInsertAfterDropTarget?.dropID ?? null)\n }\n insertBeforeDropID={rootInsertBeforeDropTarget?.dropID ?? null}\n isMovePending={isMovePending}\n rowIndex={rowIndex}\n titleCellAccessor={titleCellAccessor}\n />\n </React.Fragment>\n )\n })}\n </SortableContext>\n </tbody>\n </table>\n </div>\n </div>\n )\n}\n\nexport default function PageTreeListViewClient({\n badgeConfig,\n badgesLinks,\n canMoveDocs,\n columnState,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n query,\n renderedRowIDs,\n sourceDocs,\n useAsTitle,\n ...props\n}: PageTreeListViewClientProps) {\n const dndContextID = React.useId()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { config } = useConfig()\n const { user } = useAuth()\n const locale = useLocale()\n const { i18n } = useTranslation()\n const [activeDragRowID, setActiveDragRowID] = React.useState<null | string>(null)\n const [activeDragType, setActiveDragType] = React.useState<null | PageTreeDragType>(null)\n const [activeDropTarget, setActiveDropTarget] = React.useState<null | PageTreeDropTarget>(null)\n const expandedStorageKey =\n user?.id == null\n ? null\n : `payload-page-tree:expanded:${encodeURIComponent(props.collectionSlug)}:${encodeURIComponent(user.collection)}:${encodeURIComponent(String(user.id))}`\n const [expansion, setExpansion] = React.useState<{\n ids: null | Set<string>\n storageKey: null | string\n }>(() => ({ ids: null, storageKey: null }))\n const [optimisticOrderRowIDs, setOptimisticOrderRowIDs] = React.useState<null | string[]>(null)\n const [parentMoveEnabled, setParentMoveEnabled] = React.useState(false)\n const [pendingMoveRowID, setPendingMoveRowID] = React.useState<null | string>(null)\n const { getPreference, setPreference } = usePreferences()\n const parentMovePreferenceKey = React.useMemo(\n () => getParentMovePreferenceKey(props.collectionSlug),\n [props.collectionSlug],\n )\n\n React.useEffect(() => {\n let ids: null | Set<string> = null\n\n if (expandedStorageKey) {\n try {\n const stored: unknown = JSON.parse(window.localStorage.getItem(expandedStorageKey) ?? 'null')\n if (Array.isArray(stored) && stored.every((id) => typeof id === 'string')) {\n ids = new Set(stored)\n }\n } catch {\n // Missing, invalid, or unavailable storage leaves the tree expanded.\n }\n }\n\n setExpansion({ ids, storageKey: expandedStorageKey })\n }, [expandedStorageKey])\n\n React.useEffect(() => {\n // Do not overwrite a new user's saved state before it has been restored.\n if (!expandedStorageKey || expansion.storageKey !== expandedStorageKey || !expansion.ids) {\n return\n }\n\n try {\n window.localStorage.setItem(expandedStorageKey, JSON.stringify([...expansion.ids]))\n } catch {\n // Toggling still works when storage is blocked or full.\n }\n }, [expandedStorageKey, expansion])\n\n const handleParentMoveToggle = React.useCallback(() => {\n setParentMoveEnabled((currentValue) => {\n const nextValue = !currentValue\n\n void setPreference(parentMovePreferenceKey, nextValue)\n\n return nextValue\n })\n }, [parentMovePreferenceKey, setPreference])\n const currentSort = React.useMemo(() => {\n const searchParamSort = searchParams.getAll('sort')\n\n if (searchParamSort.length > 0) {\n return normalizeSort(searchParamSort)\n }\n\n return normalizeSort(query.sort as string | string[] | undefined)\n }, [query.sort, searchParams])\n const canReorderRows =\n canMoveDocs && isOrderableSortActive({ orderableFieldName, sort: currentSort })\n const currentLimit = React.useMemo(\n () =>\n normalizePositiveInt(\n searchParams.get('limit'),\n typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10,\n ),\n [query.limit, searchParams],\n )\n const currentRequestedPage = React.useMemo(\n () =>\n normalizePositiveInt(\n searchParams.get('page'),\n typeof query.page === 'number' && query.page > 0 ? query.page : 1,\n ),\n [query.page, searchParams],\n )\n const liveAllDocs = React.useMemo(\n () =>\n buildPageTreeDocs(sourceDocs, {\n parentFieldSlug,\n sort: currentSort,\n }),\n [currentSort, parentFieldSlug, sourceDocs],\n )\n const toggleRow = React.useCallback(\n (rowID: string) => {\n setExpansion((currentState) => {\n const nextState = new Set(\n (currentState.storageKey === expandedStorageKey ? currentState.ids : null) ??\n liveAllDocs.filter((doc) => doc.__pageTreeHasChildren).map((doc) => doc.__pageTreeID),\n )\n\n if (nextState.has(rowID)) {\n nextState.delete(rowID)\n } else {\n nextState.add(rowID)\n }\n\n return { ids: nextState, storageKey: expandedStorageKey }\n })\n },\n [expandedStorageKey, liveAllDocs],\n )\n const collapsedIDs = React.useMemo(\n () =>\n new Set(\n liveAllDocs\n .filter(\n (doc) =>\n doc.__pageTreeHasChildren &&\n expansion.storageKey === expandedStorageKey &&\n expansion.ids !== null &&\n !expansion.ids.has(doc.__pageTreeID),\n )\n .map((doc) => doc.__pageTreeID),\n ),\n [expandedStorageKey, expansion, liveAllDocs],\n )\n const dragResetKey = React.useMemo(\n () => JSON.stringify([props.collectionSlug, props.viewType, searchParams.toString()]),\n [props.collectionSlug, props.viewType, searchParams],\n )\n const hierarchyValue = React.useMemo(\n () => ({\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n parentMoveEnabled,\n pendingMoveRowID,\n toggleRow,\n }),\n [activeDragRowID, canMoveDocs, collapsedIDs, parentMoveEnabled, pendingMoveRowID, toggleRow],\n )\n\n React.useEffect(() => {\n let isMounted = true\n\n void getPreference<boolean>(parentMovePreferenceKey).then((storedValue) => {\n if (isMounted) {\n setParentMoveEnabled(storedValue === true)\n }\n })\n\n return () => {\n isMounted = false\n }\n }, [getPreference, parentMovePreferenceKey])\n\n React.useEffect(() => {\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n setOptimisticOrderRowIDs(null)\n }, [dragResetKey])\n\n const visibleDocs = React.useMemo(\n () => getVisibleTreeDocs(liveAllDocs, collapsedIDs),\n [liveAllDocs, collapsedIDs],\n )\n const paginatedData = React.useMemo(\n () => buildPaginatedData(visibleDocs, currentLimit, currentRequestedPage),\n [currentLimit, currentRequestedPage, visibleDocs],\n )\n const paginatedDocs = paginatedData.docs as PageTreeDoc[]\n const paginatedServerOrderKey = React.useMemo(\n () => paginatedDocs.map((doc) => doc.__pageTreeID).join('\\0'),\n [paginatedDocs],\n )\n const displayedPaginatedDocs = React.useMemo(\n () => orderDocsByRowIDs(paginatedDocs, optimisticOrderRowIDs),\n [optimisticOrderRowIDs, paginatedDocs],\n )\n const displayedPaginatedData = React.useMemo(\n () => ({\n ...paginatedData,\n docs: displayedPaginatedDocs,\n }),\n [displayedPaginatedDocs, paginatedData],\n )\n\n React.useEffect(() => {\n setOptimisticOrderRowIDs(null)\n }, [paginatedServerOrderKey])\n\n const allDocsByID = React.useMemo(\n () => new Map(liveAllDocs.map((doc) => [doc.__pageTreeID, doc])),\n [liveAllDocs],\n )\n const paginatedDocsByID = React.useMemo(\n () => new Map(displayedPaginatedDocs.map((doc) => [doc.__pageTreeID, doc])),\n [displayedPaginatedDocs],\n )\n const renderedCellIndexByDocID = React.useMemo(\n () => new Map(renderedRowIDs.map((id, index) => [id, index])),\n [renderedRowIDs],\n )\n const normalizedColumnState = React.useMemo(\n () => ensureUseAsTitleColumn(columnState, useAsTitle),\n [columnState, useAsTitle],\n )\n const paginatedColumnState = React.useMemo(\n () => sliceColumnState(normalizedColumnState, displayedPaginatedDocs, renderedCellIndexByDocID),\n [displayedPaginatedDocs, normalizedColumnState, renderedCellIndexByDocID],\n )\n const tableColumns = React.useMemo(\n () =>\n buildTableColumns({\n badgeConfig,\n badgesLinks,\n collectionSlug: props.collectionSlug,\n columnState: paginatedColumnState,\n docs: displayedPaginatedDocs,\n enableRowSelections: props.enableRowSelections,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n t: i18n.t,\n useAsTitle,\n }),\n [\n paginatedColumnState,\n displayedPaginatedDocs,\n badgeConfig,\n badgesLinks,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n props.collectionSlug,\n props.enableRowSelections,\n i18n.t,\n useAsTitle,\n ],\n )\n const activeDragDoc = activeDragRowID ? (paginatedDocsByID.get(activeDragRowID) ?? null) : null\n const activeDragPreviewPath = React.useMemo(() => {\n if (!activeDragDoc || activeDragType !== 'move') {\n return null\n }\n\n if (!activeDropTarget) {\n return buildDocSlugPath({\n doc: activeDragDoc,\n docsByID: allDocsByID,\n })\n }\n\n const targetDoc = getDropTargetParentDoc({\n docsByID: allDocsByID,\n dropTarget: activeDropTarget,\n })\n const dropValidation = getDropTargetValidation({\n activeDoc: activeDragDoc,\n docsByID: allDocsByID,\n dropTarget: activeDropTarget,\n })\n\n if (!dropValidation.isValid) {\n return buildDocSlugPath({\n doc: activeDragDoc,\n docsByID: allDocsByID,\n })\n }\n\n return buildProspectiveDocSlugPath({\n activeDoc: activeDragDoc,\n docsByID: allDocsByID,\n targetDoc: targetDoc ?? undefined,\n })\n }, [activeDragDoc, activeDragType, activeDropTarget, allDocsByID])\n const isMovePending = pendingMoveRowID !== null\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 2,\n },\n }),\n )\n const handleDragCancel = React.useCallback(() => {\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n }, [])\n const handleDragStart = React.useCallback(\n (event: DragStartEvent) => {\n if (!canMoveDocs || isMovePending) {\n return\n }\n\n const dragData = getPageTreeDragData(event.active.data.current)\n const { dragType, rowID } = dragData\n\n if (\n typeof rowID === 'string' &&\n dragType &&\n paginatedDocsByID.has(rowID) &&\n (dragType !== 'order' || canReorderRows)\n ) {\n setActiveDragRowID(rowID)\n setActiveDragType(dragType)\n setActiveDropTarget(null)\n }\n },\n [canMoveDocs, canReorderRows, isMovePending, paginatedDocsByID],\n )\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\n const dragData = getPageTreeDragData(event.active.data.current)\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\n\n if (dragData.dragType === 'order') {\n setActiveDropTarget(null)\n return\n }\n\n if (dragData.dragType !== 'move' || !overData) {\n setActiveDropTarget(null)\n return\n }\n\n if (overData.dropType === 'insert') {\n setActiveDropTarget(overData)\n return\n }\n\n if (overData.dropType === 'row') {\n setActiveDropTarget(overData)\n return\n }\n\n setActiveDropTarget(null)\n }, [])\n const handleDragEnd = React.useCallback(\n async (event: DragEndEvent) => {\n const dragData = getPageTreeDragData(event.active.data.current)\n const { dragType, rowID } = dragData\n const activeDoc = typeof rowID === 'string' ? (paginatedDocsByID.get(rowID) ?? null) : null\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\n const overDragData = getPageTreeDragData(event.over?.data.current)\n\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n\n if (dragType === 'order') {\n if (typeof rowID === 'string' && typeof overDragData.rowID === 'string') {\n const nextOrderRowIDs = buildOptimisticOrderRowIDs({\n activeRowID: rowID,\n docs: displayedPaginatedDocs,\n targetRowID: overDragData.rowID,\n })\n const reorderRequestBody = buildReorderRequestBody({\n activeRowID: rowID,\n docs: displayedPaginatedDocs,\n orderableFieldName,\n sort: currentSort,\n targetRowID: overDragData.rowID,\n })\n\n if (!nextOrderRowIDs || !reorderRequestBody) {\n return\n }\n\n const apiRoute = config.routes.api\n const params = new URLSearchParams()\n\n if (locale?.code) {\n params.set('locale', locale.code)\n }\n\n setOptimisticOrderRowIDs(nextOrderRowIDs)\n setPendingMoveRowID(rowID)\n\n try {\n const response = await fetch(\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/reorder${\n params.size > 0 ? `?${params.toString()}` : ''\n }`,\n {\n body: JSON.stringify(reorderRequestBody),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n const result = (await response.json().catch(() => null)) as {\n message?: string\n } | null\n\n if (!response.ok) {\n setOptimisticOrderRowIDs(null)\n toast.error(result?.message ?? 'Could not reorder document.')\n return\n }\n\n if (result?.message === 'initial migration') {\n setOptimisticOrderRowIDs(null)\n }\n\n React.startTransition(() => {\n router.refresh()\n })\n } catch (error) {\n const message =\n error instanceof Error && error.message\n ? error.message\n : 'Could not reorder document.'\n\n setOptimisticOrderRowIDs(null)\n toast.error(message)\n } finally {\n setPendingMoveRowID(null)\n }\n }\n\n return\n }\n\n if (dragType !== 'move' || typeof rowID !== 'string' || !activeDoc || !overData) {\n return\n }\n\n const dropValidation = getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget: overData,\n })\n\n if (!dropValidation.isValid) {\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\n toast.error(dropValidation.message ?? 'Could not move document.')\n }\n\n return\n }\n\n if (\n overData.dropType === 'insert' &&\n activeDoc.__pageTreeParentID === dropValidation.parentID\n ) {\n return\n }\n\n const apiRoute = config.routes.api\n const params = new URLSearchParams()\n\n if (locale?.code) {\n params.set('locale', locale.code)\n }\n\n setPendingMoveRowID(rowID)\n\n try {\n const response = await fetch(\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/move${\n params.size > 0 ? `?${params.toString()}` : ''\n }`,\n {\n body: JSON.stringify({\n parentID: dropValidation.parentID,\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n const result = (await response.json().catch(() => null)) as {\n message?: string\n } | null\n\n if (!response.ok) {\n if (shouldSilenceMoveMessage(result?.message)) {\n return\n }\n\n toast.error(result?.message ?? 'Could not move document.')\n return\n }\n\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\n React.startTransition(() => {\n router.refresh()\n })\n } catch (error) {\n const message =\n error instanceof Error && error.message ? error.message : 'Could not move document.'\n\n toast.error(message)\n } finally {\n setPendingMoveRowID(null)\n }\n },\n [\n allDocsByID,\n config.routes.api,\n currentSort,\n displayedPaginatedDocs,\n i18n.language,\n locale?.code,\n orderableFieldName,\n paginatedDocsByID,\n props.collectionSlug,\n router,\n ],\n )\n const handleDragEndSync = React.useCallback(\n (event: DragEndEvent) => {\n void handleDragEnd(event)\n },\n [handleDragEnd],\n )\n\n const tableNode = React.useMemo(\n () => (\n <DndContext\n collisionDetection={pageTreeCollisionDetectionStrategy}\n id={dndContextID}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEndSync}\n onDragOver={handleDragOver}\n onDragStart={handleDragStart}\n sensors={sensors}\n >\n <HierarchyTable\n activeDragRowID={activeDragRowID}\n activeDragType={activeDragType}\n activeDropTarget={activeDropTarget}\n allDocsByID={allDocsByID}\n canReorderRows={canReorderRows}\n columns={tableColumns}\n data={displayedPaginatedDocs}\n isMovePending={isMovePending}\n titleCellAccessor={useAsTitle}\n />\n <DragOverlay dropAnimation={null} style={{ cursor: 'grabbing' }}>\n {activeDragPreviewPath ? (\n <div className=\"pages-hierarchy-drag-overlay\">{activeDragPreviewPath}</div>\n ) : null}\n </DragOverlay>\n </DndContext>\n ),\n [\n activeDragPreviewPath,\n activeDragRowID,\n activeDragType,\n activeDropTarget,\n allDocsByID,\n canReorderRows,\n displayedPaginatedDocs,\n dndContextID,\n handleDragCancel,\n handleDragEndSync,\n handleDragOver,\n handleDragStart,\n isMovePending,\n sensors,\n tableColumns,\n useAsTitle,\n ],\n )\n const beforeActions = React.useMemo(() => {\n const actions = props.beforeActions ? [...props.beforeActions] : []\n\n if (canMoveDocs) {\n actions.unshift(\n <ParentMoveToggle\n collectionSlug={props.collectionSlug}\n enabled={parentMoveEnabled}\n key=\"parent-move-toggle\"\n onToggle={handleParentMoveToggle}\n />,\n )\n }\n\n return actions.length > 0 ? actions : undefined\n }, [\n canMoveDocs,\n handleParentMoveToggle,\n parentMoveEnabled,\n props.beforeActions,\n props.collectionSlug,\n ])\n\n return (\n <div className={styles.root}>\n <PageTreeProvider value={hierarchyValue}>\n <ListQueryProvider\n collectionSlug={props.collectionSlug}\n data={displayedPaginatedData}\n modifySearchParams\n orderableFieldName={orderableFieldName}\n query={{\n ...query,\n limit: currentLimit,\n page: displayedPaginatedData.page,\n sort: currentSort,\n }}\n >\n <DefaultListView\n {...props}\n beforeActions={beforeActions}\n columnState={paginatedColumnState}\n Table={tableNode}\n />\n </ListQueryProvider>\n </PageTreeProvider>\n </div>\n )\n}\n"],"names":["DndContext","DragOverlay","PointerSensor","useDroppable","useSensor","useSensors","arrayMove","SortableContext","useSortable","DefaultListView","ListQueryProvider","Pill","SelectAll","SelectRow","SortHeader","toast","useAuth","useConfig","useLocale","usePreferences","useTranslation","useWindowInfo","useRouter","useSearchParams","React","createPortal","buildInsertDropTargets","getDropTargetParentDoc","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","PageTreeProvider","PageTreeRowDndProvider","styles","PageTreeStatusBadge","PageTreeTitleCell","SILENT_MOVE_MESSAGES","Set","ALREADY_ROOT_MESSAGE","getParentMovePreferenceKey","collectionSlug","getRowDropID","rowID","getSortableRowID","getDiagnosticString","value","length","getPageTreeDragData","data","dragType","undefined","parentID","getSortableTransform","transform","scaleX","scaleY","x","y","getVisibleSubtreeIndexRange","docs","rootIndex","rootDoc","end","index","__pageTreeAncestorIDs","includes","__pageTreeID","start","getRangeRect","args","activeNodeRect","activeRange","range","rects","firstRect","lastRect","bottom","top","height","isIndexInRange","buildPageTreeSortingStrategy","activeIndex","overIndex","overRange","activeRect","overRect","buildPaginatedData","limit","requestedPage","totalDocs","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","slice","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","filter","entry","join","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","isOrderableSortActive","orderableFieldName","sort","Boolean","ensureUseAsTitleColumn","columnState","useAsTitle","map","column","accessor","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","doc","renderedCellIndex","get","__pageTreeOrderIndex","getSelectableRowData","record","id","_isLocked","_userEditing","shouldSilenceMoveMessage","message","has","getVisibleSubtreeRowIDs","findIndex","rowIDs","push","buildOptimisticOrderRowIDs","activeRowID","targetRowID","activeDoc","find","targetDoc","__pageTreeParentID","activeBlockIDs","targetBlockIDs","currentRowIDs","indexOf","targetIndex","remainingRowIDs","targetAnchorID","targetAnchorIndex","insertIndex","buildReorderRequestBody","siblingDocs","moveFromIndex","moveToIndex","newBeforeRow","newAfterRow","target","getFrontendOrderEntry","orderKey","slug","siblingDocsAfter","movedSiblingDoc","splice","targetKey","newKeyWillBe","docsToMove","frontendOrder","activeSlug","after","before","newAfterRowSlug","newBeforeRowSlug","targetSlug","key","orderDocsByRowIDs","orderRowIDs","docsByID","Map","orderedDocs","flatMap","getDropTargetValidation","dropTarget","dropType","isValid","renderStatusBadge","badgeConfig","badgesLinks","ParentMoveToggle","enabled","onToggle","breakpoints","s","smallBreak","mobileActions","setMobileActions","useState","setMobileMount","useCallback","node","closest","querySelector","toggle","aria-checked","aria-label","className","onClick","pillStyle","size","span","hidden","ref","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","t","columnsToUse","unshift","field","Heading","rowData","orderableColumn","aria-hidden","selectColumnIndex","HierarchyInsertRow","activeColumnsCount","activeDragRowID","activeDropTargetID","dropValidation","isMovePending","isOver","setNodeRef","dropID","disabled","hasActiveDrag","showInsertLine","tr","data-drag-over","data-drop-valid","data-page-tree-insert","td","colSpan","div","data-insert-depth","depth","HierarchyTableRow","activeColumns","activeDragType","canReorderRows","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","sortable","hasActiveMoveDrag","isActiveDragRow","setRowRef","element","rowDndValue","useMemo","isOrderDragging","isDragging","orderHandleAttributes","attributes","orderHandleListeners","listeners","orderHandleRef","setActivatorNodeRef","sortableStyle","position","transition","zIndex","data-id","data-is-drag-source","data-is-order-drag-source","data-page-tree-row","style","columnIndex","replace","data-page-tree-title-cell","HierarchyTable","activeDropTarget","allDocsByID","columns","sortableItems","sortingStrategy","insertDropTargets","insertDropTargetsByReferenceRowID","referenceRowID","rowDropValidationByID","insertDropValidationByID","table","cellPadding","cellSpacing","thead","th","tbody","items","strategy","rootInsertBeforeDropTarget","rootInsertTargetIndex","rootInsertAfterDropTarget","isTrailingRootInsert","nextVisibleDoc","hasVisibleDescendantAfter","Fragment","PageTreeListViewClient","canMoveDocs","query","renderedRowIDs","sourceDocs","props","dndContextID","useId","router","searchParams","config","user","locale","i18n","setActiveDragRowID","setActiveDragType","setActiveDropTarget","expandedStorageKey","encodeURIComponent","collection","String","expansion","setExpansion","ids","storageKey","optimisticOrderRowIDs","setOptimisticOrderRowIDs","parentMoveEnabled","setParentMoveEnabled","pendingMoveRowID","setPendingMoveRowID","getPreference","setPreference","parentMovePreferenceKey","useEffect","stored","JSON","parse","window","localStorage","getItem","every","setItem","stringify","handleParentMoveToggle","currentValue","nextValue","currentSort","searchParamSort","getAll","currentLimit","currentRequestedPage","liveAllDocs","toggleRow","currentState","nextState","__pageTreeHasChildren","delete","add","collapsedIDs","dragResetKey","viewType","toString","hierarchyValue","isMounted","then","storedValue","visibleDocs","paginatedData","paginatedDocs","paginatedServerOrderKey","displayedPaginatedDocs","displayedPaginatedData","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","sensors","activationConstraint","distance","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","overDragData","nextOrderRowIDs","reorderRequestBody","apiRoute","routes","api","params","URLSearchParams","code","set","response","fetch","body","credentials","headers","language","method","result","json","catch","ok","error","startTransition","refresh","Error","success","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","beforeActions","actions","root","modifySearchParams","Table"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeListView.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Column, ListQuery, ListViewClientProps, PaginatedDocs } from 'payload'\n\nimport {\n DndContext,\n type DragEndEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n PointerSensor,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n type SortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable'\nimport {\n DefaultListView,\n ListQueryProvider,\n Pill,\n SelectAll,\n SelectRow,\n SortHeader,\n toast,\n useAuth,\n useConfig,\n useLocale,\n usePreferences,\n useTranslation,\n useWindowInfo,\n} from '@payloadcms/ui'\nimport { useRouter, useSearchParams } from 'next/navigation'\nimport React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type {\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginResolvedBadgeConfig,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport {\n buildInsertDropTargets,\n getDropTargetParentDoc,\n type PageTreeDropTarget,\n} from '../utilities/dropTargets.js'\nimport {\n CANCEL_DRAG_MESSAGE,\n getDropValidation,\n type PageTreeDropValidation,\n} from '../utilities/moveValidation.js'\nimport {\n buildDocSlugPath,\n buildPageTreeDocs,\n buildProspectiveDocSlugPath,\n getDocDisplayLabel,\n getVisibleTreeDocs,\n type PageTreeDoc,\n} from '../utilities/pageTree.js'\nimport { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js'\nimport { PageTreeProvider, PageTreeRowDndProvider } from './PageTreeContext.js'\nimport styles from './PageTreeListView.module.css'\nimport { PageTreeStatusBadge } from './PageTreeStatusBadge.js'\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\n\ntype PageTreeListViewClientProps = {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n canMoveDocs: boolean\n columnState: Column[]\n homeIndicatorEnabled: boolean\n orderableFieldName?: string\n parentFieldSlug: string\n query: ListQuery\n /** Server tree order, which indexes each column's renderedCells. */\n renderedRowIDs: string[]\n sourceDocs: PageTreeSourceDoc[]\n useAsTitle: string\n} & Omit<ListViewClientProps, 'columnState' | 'Table'>\n\ntype SelectableRowData = React.ComponentProps<typeof SelectRow>['rowData']\ntype PageTreeDragType = 'move' | 'order'\n\ntype PageTreeDragData = {\n dragType?: PageTreeDragType\n parentID?: null | string\n rowID?: string\n}\n\ntype PageTreeSortableTransform = ReturnType<typeof useSortable>['transform']\n\ntype PageTreeReorderRequestBody = {\n docsToMove: string[]\n frontendOrder?: PageTreeReorderFrontendOrder\n newKeyWillBe: 'greater' | 'less'\n orderableFieldName: string\n target: {\n id: string\n key: null | string\n }\n}\n\ntype PageTreeReorderFrontendOrder = {\n activeSlug: null | string\n after: PageTreeReorderFrontendOrderEntry[]\n before: PageTreeReorderFrontendOrderEntry[]\n moveFromIndex: number\n moveToIndex: number\n newAfterRowSlug: null | string\n newBeforeRowSlug: null | string\n sort: null | string\n targetSlug: null | string\n}\n\ntype PageTreeReorderFrontendOrderEntry = {\n index: number\n orderKey: null | string\n slug: null | string\n}\n\ntype PageTreeIndexRange = {\n end: number\n start: number\n}\n\ntype PageTreeRangeRect = {\n bottom: number\n height: number\n top: number\n}\n\nconst SILENT_MOVE_MESSAGES = new Set([CANCEL_DRAG_MESSAGE])\nconst ALREADY_ROOT_MESSAGE = 'This page is already in root level.'\n\nfunction getParentMovePreferenceKey(collectionSlug: string): string {\n return `payload-nested-docs-page-tree:${collectionSlug}:parentMoveHandle`\n}\n\nfunction getRowDropID(rowID: string): string {\n return `page-drop:${rowID}`\n}\n\nfunction getSortableRowID(rowID: string): string {\n return `page-sort:${rowID}`\n}\n\nfunction getDiagnosticString(value: unknown): null | string {\n return typeof value === 'string' && value.length > 0 ? value : null\n}\n\nfunction getPageTreeDragData(value: unknown): PageTreeDragData {\n if (!value || typeof value !== 'object') {\n return {}\n }\n\n const data = value as Record<string, unknown>\n const dragType = data.dragType === 'move' || data.dragType === 'order' ? data.dragType : undefined\n const parentID =\n data.parentID === null || typeof data.parentID === 'string' ? data.parentID : undefined\n const rowID = typeof data.rowID === 'string' ? data.rowID : undefined\n\n return {\n dragType,\n parentID,\n rowID,\n }\n}\n\nfunction getSortableTransform(transform: PageTreeSortableTransform): string | undefined {\n if (!transform) {\n return undefined\n }\n\n const scaleX = transform.scaleX ?? 1\n const scaleY = transform.scaleY ?? 1\n\n return `translate3d(${transform.x}px, ${transform.y}px, 0) scaleX(${scaleX}) scaleY(${scaleY})`\n}\n\nfunction getVisibleSubtreeIndexRange(docs: PageTreeDoc[], rootIndex: number): null | PageTreeIndexRange {\n const rootDoc = docs[rootIndex]\n\n if (!rootDoc) {\n return null\n }\n\n let end = rootIndex\n\n for (let index = rootIndex + 1; index < docs.length; index += 1) {\n if (!docs[index]?.__pageTreeAncestorIDs.includes(rootDoc.__pageTreeID)) {\n break\n }\n\n end = index\n }\n\n return {\n end,\n start: rootIndex,\n }\n}\n\nfunction getRangeRect(args: {\n activeNodeRect: Parameters<SortingStrategy>[0]['activeNodeRect']\n activeRange: PageTreeIndexRange\n range: PageTreeIndexRange\n rects: Parameters<SortingStrategy>[0]['rects']\n}): null | PageTreeRangeRect {\n const { activeNodeRect, activeRange, range, rects } = args\n const firstRect =\n rects[range.start] ?? (range.start === activeRange.start ? activeNodeRect : undefined)\n const lastRect = rects[range.end] ?? (range.end === activeRange.end ? activeNodeRect : undefined)\n\n if (!firstRect || !lastRect) {\n return null\n }\n\n return {\n bottom: lastRect.top + lastRect.height,\n height: lastRect.top + lastRect.height - firstRect.top,\n top: firstRect.top,\n }\n}\n\nfunction isIndexInRange(index: number, range: PageTreeIndexRange): boolean {\n return index >= range.start && index <= range.end\n}\n\nfunction buildPageTreeSortingStrategy(docs: PageTreeDoc[]): SortingStrategy {\n return ({ activeIndex, activeNodeRect, index, overIndex, rects }) => {\n const activeRange = getVisibleSubtreeIndexRange(docs, activeIndex)\n const overRange = getVisibleSubtreeIndexRange(docs, overIndex)\n\n if (!activeRange || !overRange || activeRange.start === overRange.start) {\n return null\n }\n\n const activeRect = getRangeRect({\n activeNodeRect,\n activeRange,\n range: activeRange,\n rects,\n })\n const overRect = getRangeRect({\n activeNodeRect,\n activeRange,\n range: overRange,\n rects,\n })\n\n if (!activeRect || !overRect) {\n return null\n }\n\n if (isIndexInRange(index, activeRange)) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y:\n activeRange.start < overRange.start\n ? overRect.bottom - activeRect.bottom\n : overRect.top - activeRect.top,\n }\n }\n\n if (activeRange.start < overRange.start && index > activeRange.end && index <= overRange.end) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: -activeRect.height,\n }\n }\n\n if (activeRange.start > overRange.start && index >= overRange.start && index < activeRange.start) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: activeRect.height,\n }\n }\n\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: 0,\n }\n }\n}\n\nfunction buildPaginatedData(\n docs: PageTreeDoc[],\n limit: number,\n requestedPage: number,\n): PaginatedDocs {\n const totalDocs = docs.length\n const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1\n const page = Math.min(Math.max(requestedPage, 1), totalPages)\n const startIndex = (page - 1) * limit\n const pageDocs = docs.slice(startIndex, startIndex + limit)\n\n return {\n docs: pageDocs,\n hasNextPage: page < totalPages,\n hasPrevPage: page > 1,\n limit,\n nextPage: page < totalPages ? page + 1 : null,\n page,\n pagingCounter: totalDocs === 0 ? 0 : startIndex + 1,\n prevPage: page > 1 ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter((entry) => typeof entry === 'string' && entry.length > 0)\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction normalizePositiveInt(value: null | string, fallback: number): number {\n if (typeof value !== 'string') {\n return fallback\n }\n\n const parsedValue = Number.parseInt(value, 10)\n return Number.isNaN(parsedValue) || parsedValue <= 0 ? fallback : parsedValue\n}\n\nfunction isOrderableSortActive(args: { orderableFieldName?: string; sort?: string }): boolean {\n const { orderableFieldName, sort } = args\n\n return Boolean(\n orderableFieldName && (sort === orderableFieldName || sort === `-${orderableFieldName}`),\n )\n}\n\nfunction ensureUseAsTitleColumn(columnState: Column[], useAsTitle: string): Column[] {\n return columnState.map((column) =>\n column.accessor === useAsTitle\n ? {\n ...column,\n active: true,\n }\n : column,\n )\n}\n\nfunction sliceColumnState(\n columnState: Column[],\n docs: PageTreeDoc[],\n renderedCellIndexByDocID: ReadonlyMap<string, number>,\n): Column[] {\n return columnState.map((column) => ({\n ...column,\n renderedCells: docs.map((doc) => {\n const renderedCellIndex =\n renderedCellIndexByDocID.get(doc.__pageTreeID) ?? doc.__pageTreeOrderIndex\n\n return column.renderedCells?.[renderedCellIndex] ?? null\n }),\n }))\n}\n\nfunction getSelectableRowData(doc: PageTreeDoc): SelectableRowData {\n const record = doc as Record<string, unknown>\n\n return {\n // Payload's selection Map preserves numeric IDs despite SelectRow's string-only type.\n id: (doc.id ?? doc.__pageTreeID) as SelectableRowData['id'],\n _isLocked: Boolean(record._isLocked),\n _userEditing: record._userEditing as SelectableRowData['_userEditing'],\n }\n}\n\nfunction shouldSilenceMoveMessage(message?: string): boolean {\n return typeof message === 'string' && SILENT_MOVE_MESSAGES.has(message)\n}\n\nfunction getVisibleSubtreeRowIDs(docs: PageTreeDoc[], rowID: string): string[] {\n const rootIndex = docs.findIndex((doc) => doc.__pageTreeID === rowID)\n\n if (rootIndex < 0) {\n return []\n }\n\n const rowIDs = [rowID]\n\n for (const doc of docs.slice(rootIndex + 1)) {\n if (!doc.__pageTreeAncestorIDs.includes(rowID)) {\n break\n }\n\n rowIDs.push(doc.__pageTreeID)\n }\n\n return rowIDs\n}\n\nfunction buildOptimisticOrderRowIDs(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n targetRowID: string\n}): null | string[] {\n const { activeRowID, docs, targetRowID } = args\n\n if (activeRowID === targetRowID) {\n return null\n }\n\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\n\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\n return null\n }\n\n const activeBlockIDs = getVisibleSubtreeRowIDs(docs, activeRowID)\n const targetBlockIDs = getVisibleSubtreeRowIDs(docs, targetRowID)\n\n if (\n activeBlockIDs.length === 0 ||\n targetBlockIDs.length === 0 ||\n targetBlockIDs.includes(activeRowID)\n ) {\n return null\n }\n\n const currentRowIDs = docs.map((doc) => doc.__pageTreeID)\n\n if (activeBlockIDs.length === 1 && targetBlockIDs.length === 1) {\n const activeIndex = currentRowIDs.indexOf(activeRowID)\n const targetIndex = currentRowIDs.indexOf(targetRowID)\n\n return activeIndex < 0 || targetIndex < 0\n ? null\n : arrayMove(currentRowIDs, activeIndex, targetIndex)\n }\n\n const remainingRowIDs = currentRowIDs.filter((rowID) => !activeBlockIDs.includes(rowID))\n const activeIndex = currentRowIDs.indexOf(activeRowID)\n const targetIndex = currentRowIDs.indexOf(targetRowID)\n const targetAnchorID =\n activeIndex < targetIndex ? targetBlockIDs[targetBlockIDs.length - 1] : targetBlockIDs[0]\n\n if (!targetAnchorID) {\n return null\n }\n\n const targetAnchorIndex = remainingRowIDs.indexOf(targetAnchorID)\n\n if (targetAnchorIndex < 0) {\n return null\n }\n\n const insertIndex = activeIndex < targetIndex ? targetAnchorIndex + 1 : targetAnchorIndex\n\n return [\n ...remainingRowIDs.slice(0, insertIndex),\n ...activeBlockIDs,\n ...remainingRowIDs.slice(insertIndex),\n ]\n}\n\nfunction buildReorderRequestBody(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n orderableFieldName?: string\n sort?: string\n targetRowID: string\n}): null | PageTreeReorderRequestBody {\n const { activeRowID, docs, orderableFieldName, sort, targetRowID } = args\n\n if (!orderableFieldName || (sort !== orderableFieldName && sort !== `-${orderableFieldName}`)) {\n return null\n }\n\n if (activeRowID === targetRowID) {\n return null\n }\n\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\n\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\n return null\n }\n\n const siblingDocs = docs.filter(\n (doc) => doc.__pageTreeParentID === activeDoc.__pageTreeParentID,\n )\n const moveFromIndex = siblingDocs.findIndex((doc) => doc.__pageTreeID === activeRowID)\n const moveToIndex = siblingDocs.findIndex((doc) => doc.__pageTreeID === targetRowID)\n\n if (moveFromIndex < 0 || moveToIndex < 0 || moveFromIndex === moveToIndex) {\n return null\n }\n\n const newBeforeRow =\n moveToIndex > moveFromIndex ? siblingDocs[moveToIndex] : siblingDocs[moveToIndex - 1]\n const newAfterRow =\n moveToIndex > moveFromIndex ? siblingDocs[moveToIndex + 1] : siblingDocs[moveToIndex]\n const target = newBeforeRow ?? newAfterRow\n\n if (!target) {\n return null\n }\n\n const getFrontendOrderEntry = (\n doc: PageTreeDoc,\n index: number,\n ): PageTreeReorderFrontendOrderEntry => {\n const orderKey = doc[orderableFieldName]\n\n return {\n slug: getDiagnosticString(doc.slug),\n index,\n orderKey: typeof orderKey === 'string' && orderKey.length > 0 ? orderKey : null,\n }\n }\n const siblingDocsAfter = [...siblingDocs]\n const [movedSiblingDoc] = siblingDocsAfter.splice(moveFromIndex, 1)\n\n if (!movedSiblingDoc) {\n return null\n }\n\n siblingDocsAfter.splice(moveToIndex, 0, movedSiblingDoc)\n\n const targetKey = target[orderableFieldName]\n const newKeyWillBe =\n (newBeforeRow && sort === orderableFieldName) ||\n (!newBeforeRow && sort === `-${orderableFieldName}`)\n ? 'greater'\n : 'less'\n\n return {\n docsToMove: [activeRowID],\n frontendOrder: {\n activeSlug: getDiagnosticString(activeDoc.slug),\n after: siblingDocsAfter.map(getFrontendOrderEntry),\n before: siblingDocs.map(getFrontendOrderEntry),\n moveFromIndex,\n moveToIndex,\n newAfterRowSlug: newAfterRow ? getDiagnosticString(newAfterRow.slug) : null,\n newBeforeRowSlug: newBeforeRow ? getDiagnosticString(newBeforeRow.slug) : null,\n sort: sort ?? null,\n targetSlug: getDiagnosticString(targetDoc.slug),\n },\n newKeyWillBe,\n orderableFieldName,\n target: {\n id: target.__pageTreeID,\n key: typeof targetKey === 'string' && targetKey.length > 0 ? targetKey : null,\n },\n }\n}\n\nfunction orderDocsByRowIDs(docs: PageTreeDoc[], orderRowIDs: null | string[]): PageTreeDoc[] {\n if (!orderRowIDs) {\n return docs\n }\n\n const docsByID = new Map(docs.map((doc) => [doc.__pageTreeID, doc]))\n const orderedDocs = orderRowIDs.flatMap((rowID) => {\n const doc = docsByID.get(rowID)\n\n return doc ? [doc] : []\n })\n\n return orderedDocs.length === docs.length ? orderedDocs : docs\n}\n\nfunction getDropTargetValidation(args: {\n activeDoc: PageTreeDoc\n docsByID: ReadonlyMap<string, PageTreeDoc>\n dropTarget: PageTreeDropTarget\n}): PageTreeDropValidation {\n const { activeDoc, docsByID, dropTarget } = args\n\n if (dropTarget.dropType === 'row') {\n return getDropValidation({\n activeDoc,\n targetDoc: docsByID.get(dropTarget.rowID) ?? undefined,\n })\n }\n\n if (dropTarget.parentID === null) {\n if (activeDoc.__pageTreeParentID === null) {\n return {\n isValid: false,\n message: ALREADY_ROOT_MESSAGE,\n parentID: null,\n }\n }\n\n return {\n isValid: true,\n parentID: null,\n }\n }\n\n const targetDoc = docsByID.get(dropTarget.parentID)\n\n if (!targetDoc) {\n return {\n isValid: false,\n message: 'Could not resolve drop target.',\n parentID: dropTarget.parentID,\n }\n }\n\n if (targetDoc.__pageTreeID === activeDoc.__pageTreeID) {\n return {\n isValid: false,\n message: CANCEL_DRAG_MESSAGE,\n parentID: targetDoc.__pageTreeID,\n }\n }\n\n if (targetDoc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)) {\n return {\n isValid: false,\n message: 'A document cannot be moved under one of its descendants.',\n parentID: targetDoc.__pageTreeID,\n }\n }\n\n return {\n isValid: true,\n parentID: targetDoc.__pageTreeID,\n }\n}\n\nfunction renderStatusBadge(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug: string\n doc: PageTreeDoc\n index: number\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n}): React.ReactNode {\n const { badgeConfig, badgesLinks, collectionSlug, doc, index } = args\n return (\n <PageTreeStatusBadge\n badgeConfig={badgeConfig}\n badgesLinks={badgesLinks}\n collectionSlug={collectionSlug}\n doc={doc}\n key={doc.__pageTreeID ?? index}\n />\n )\n}\n\nfunction ParentMoveToggle({\n collectionSlug,\n enabled,\n onToggle,\n}: {\n collectionSlug: string\n enabled: boolean\n onToggle: () => void\n}) {\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n const [mobileActions, setMobileActions] = React.useState<Element | null>(null)\n const setMobileMount = React.useCallback((node: HTMLSpanElement | null) => {\n setMobileActions(\n node?.closest('.collection-list')?.querySelector('.search-bar__actions') ?? null,\n )\n }, [])\n const toggle = (\n <Pill\n aria-checked={enabled}\n aria-label={`${enabled ? 'Hide' : 'Show'} edit hierarchy handles`}\n className=\"pages-hierarchy-parent-move-toggle\"\n id={`pages-hierarchy-parent-move-toggle-${collectionSlug}`}\n onClick={onToggle}\n pillStyle={enabled ? 'dark' : 'light'}\n size=\"small\"\n >\n Edit Hierarchy\n </Pill>\n )\n\n if (smallBreak) {\n return (\n <>\n <span hidden ref={setMobileMount} />\n {mobileActions ? createPortal(toggle, mobileActions) : null}\n </>\n )\n }\n\n return toggle\n}\n\nfunction buildTableColumns(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug: string\n columnState: Column[]\n docs: PageTreeDoc[]\n enableRowSelections?: boolean\n homeIndicatorEnabled: boolean\n orderableFieldName?: string\n parentFieldSlug: string\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n useAsTitle: string\n}): Column[] {\n const {\n badgeConfig,\n badgesLinks,\n collectionSlug,\n columnState,\n docs,\n enableRowSelections,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n t,\n useAsTitle,\n } = args\n const columnsToUse = columnState.map((column) => {\n if (column.accessor === useAsTitle) {\n return {\n ...column,\n active: true,\n renderedCells: docs.map((doc, index) => (\n <PageTreeTitleCell\n doc={doc}\n homeIndicatorEnabled={homeIndicatorEnabled}\n key={doc.__pageTreeID ?? index}\n >\n {column.renderedCells?.[index] ?? getDocDisplayLabel(doc)}\n </PageTreeTitleCell>\n )),\n }\n }\n\n if (column.accessor === '_status') {\n return {\n ...column,\n renderedCells: docs.map((doc, index) =>\n renderStatusBadge({\n badgeConfig,\n badgesLinks,\n collectionSlug,\n doc,\n index,\n t,\n }),\n ),\n }\n }\n\n if (column.accessor === parentFieldSlug) {\n return {\n ...column,\n renderedCells: docs.map((doc, index) =>\n doc.__pageTreeParentID !== null ? (\n (column.renderedCells?.[index] ?? null)\n ) : (\n <span className=\"pages-hierarchy-empty-cell\" key={doc.__pageTreeID ?? index}>\n -\n </span>\n ),\n ),\n }\n }\n\n return column\n })\n\n if (enableRowSelections) {\n columnsToUse.unshift({\n accessor: '_select',\n active: true,\n field: { hidden: true } as Column['field'],\n Heading: <SelectAll />,\n renderedCells: docs.map((doc, index) => (\n <SelectRow key={doc.__pageTreeID ?? index} rowData={getSelectableRowData(doc)} />\n )),\n })\n }\n\n if (orderableFieldName) {\n const orderableColumn = {\n accessor: '_pageTreeOrderSort',\n active: true,\n field: { hidden: true } as Column['field'],\n Heading: <SortHeader />,\n renderedCells: docs.map((doc, index) => (\n <span\n aria-hidden=\"true\"\n className=\"pages-hierarchy-order-sort-spacer\"\n key={doc.__pageTreeID ?? index}\n />\n )),\n } satisfies Column\n const selectColumnIndex = columnsToUse.findIndex((column) => column.accessor === '_select')\n\n columnsToUse.splice(selectColumnIndex >= 0 ? selectColumnIndex + 1 : 0, 0, orderableColumn)\n }\n\n return columnsToUse\n}\n\nfunction HierarchyInsertRow({\n activeColumnsCount,\n activeDragRowID,\n activeDropTargetID,\n dropTarget,\n dropValidation,\n isMovePending,\n}: {\n activeColumnsCount: number\n activeDragRowID: null | string\n activeDropTargetID: null | string\n dropTarget: Extract<PageTreeDropTarget, { dropType: 'insert' }>\n dropValidation?: PageTreeDropValidation\n isMovePending: boolean\n}) {\n const { isOver, setNodeRef } = useDroppable({\n id: dropTarget.dropID,\n data: dropTarget,\n disabled: isMovePending,\n })\n const hasActiveDrag = Boolean(activeDragRowID)\n const showInsertLine = isOver && activeDropTargetID === dropTarget.dropID\n\n return (\n <tr\n className=\"pages-hierarchy-insert-row\"\n data-drag-over={showInsertLine ? 'true' : 'false'}\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\n data-page-tree-insert=\"true\"\n >\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <td colSpan={activeColumnsCount}>\n <div\n className=\"pages-hierarchy-insert-row__target\"\n data-insert-depth={dropTarget.depth}\n ref={setNodeRef}\n />\n </td>\n </tr>\n )\n}\n\nfunction HierarchyTableRow({\n activeColumns,\n activeDragRowID,\n activeDragType,\n canReorderRows,\n doc,\n dropValidation,\n insertAfterDropID,\n insertBeforeDropID,\n isMovePending,\n rowIndex,\n titleCellAccessor,\n}: {\n activeColumns: Column[]\n activeDragRowID: null | string\n activeDragType: null | PageTreeDragType\n canReorderRows: boolean\n doc: PageTreeDoc\n dropValidation?: PageTreeDropValidation\n insertAfterDropID: null | string\n insertBeforeDropID: null | string\n isMovePending: boolean\n rowIndex: number\n titleCellAccessor: string\n}) {\n const { isOver, setNodeRef } = useDroppable({\n id: getRowDropID(doc.__pageTreeID),\n data: {\n dropType: 'row',\n insertAfterDropID,\n insertBeforeDropID,\n rowID: doc.__pageTreeID,\n } satisfies Extract<PageTreeDropTarget, { dropType: 'row' }>,\n disabled: isMovePending,\n })\n const sortable = useSortable({\n id: getSortableRowID(doc.__pageTreeID),\n data: {\n dragType: 'order',\n parentID: doc.__pageTreeParentID,\n rowID: doc.__pageTreeID,\n } satisfies PageTreeDragData,\n disabled: !canReorderRows || isMovePending || activeDragType === 'move',\n })\n const hasActiveMoveDrag = activeDragType === 'move' && Boolean(activeDragRowID)\n const isActiveDragRow = activeDragRowID === doc.__pageTreeID\n const setRowRef = React.useCallback(\n (element: HTMLTableRowElement | null) => {\n setNodeRef(element)\n sortable.setNodeRef(element)\n },\n [setNodeRef, sortable],\n )\n const rowDndValue = React.useMemo(\n () => ({\n isOrderDragging: sortable.isDragging,\n orderHandleAttributes: sortable.attributes,\n orderHandleListeners: sortable.listeners,\n orderHandleRef: sortable.setActivatorNodeRef,\n }),\n [sortable.attributes, sortable.isDragging, sortable.listeners, sortable.setActivatorNodeRef],\n )\n const sortableStyle = React.useMemo(\n () =>\n ({\n position: sortable.isDragging ? 'relative' : undefined,\n transform: getSortableTransform(sortable.transform),\n transition: activeDragType === 'order' ? sortable.transition : undefined,\n zIndex: sortable.isDragging ? 1 : undefined,\n }) as React.CSSProperties,\n [activeDragType, sortable.isDragging, sortable.transform, sortable.transition],\n )\n\n return (\n <tr\n className={`row-${rowIndex + 1}`}\n data-drag-over={activeDragType === 'move' && isOver ? 'true' : 'false'}\n data-drop-valid={hasActiveMoveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\n data-id={doc.id}\n data-is-drag-source={activeDragType === 'move' && isActiveDragRow ? 'true' : 'false'}\n data-is-order-drag-source={sortable.isDragging ? 'true' : 'false'}\n data-page-tree-row=\"true\"\n ref={setRowRef}\n style={sortableStyle}\n >\n <PageTreeRowDndProvider value={rowDndValue}>\n {activeColumns.map((column, columnIndex) => {\n const { accessor } = column\n\n return (\n <td\n className={`cell-${accessor.replace(/\\./g, '__')}`}\n data-page-tree-title-cell={accessor === titleCellAccessor ? 'true' : undefined}\n key={columnIndex}\n >\n {column.renderedCells?.[rowIndex] ?? null}\n </td>\n )\n })}\n </PageTreeRowDndProvider>\n </tr>\n )\n}\n\nfunction HierarchyTable({\n activeDragRowID,\n activeDragType,\n activeDropTarget,\n allDocsByID,\n canReorderRows,\n columns,\n data,\n isMovePending,\n titleCellAccessor,\n}: {\n activeDragRowID: null | string\n activeDragType: null | PageTreeDragType\n activeDropTarget: null | PageTreeDropTarget\n allDocsByID: ReadonlyMap<string, PageTreeDoc>\n canReorderRows: boolean\n columns: Column[]\n data: PageTreeDoc[]\n isMovePending: boolean\n titleCellAccessor: string\n}) {\n const activeColumns = React.useMemo(() => columns.filter((column) => column?.active), [columns])\n const sortableItems = React.useMemo(\n () => data.map((doc) => getSortableRowID(doc.__pageTreeID)),\n [data],\n )\n const sortingStrategy = React.useMemo(() => buildPageTreeSortingStrategy(data), [data])\n const insertDropTargets = React.useMemo(() => buildInsertDropTargets(data), [data])\n const insertDropTargetsByReferenceRowID = React.useMemo(\n () => new Map(insertDropTargets.map((dropTarget) => [dropTarget.referenceRowID, dropTarget])),\n [insertDropTargets],\n )\n const activeDropTargetID =\n activeDropTarget?.dropType === 'insert' ? activeDropTarget.dropID : null\n const activeDoc =\n activeDragType === 'move' && activeDragRowID ? (allDocsByID.get(activeDragRowID) ?? null) : null\n const rowDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\n\n return new Map(\n data.map((doc) => [\n doc.__pageTreeID,\n getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget: {\n dropType: 'row',\n insertAfterDropID: null,\n insertBeforeDropID: null,\n rowID: doc.__pageTreeID,\n },\n }),\n ]),\n )\n }, [activeDoc, allDocsByID, data])\n const insertDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\n\n return new Map(\n insertDropTargets.map((dropTarget) => [\n dropTarget.dropID,\n getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget,\n }),\n ]),\n )\n }, [activeDoc, allDocsByID, insertDropTargets])\n\n if (activeColumns.length === 0) {\n return <div>No columns selected</div>\n }\n\n return (\n <div\n className={[\n 'table-wrap pages-hierarchy-table',\n activeDoc ? 'pages-hierarchy-table--dragging' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"table table--appearance-default\">\n <table cellPadding=\"0\" cellSpacing=\"0\">\n <thead>\n <tr>\n {activeColumns.map((column, index) => (\n <th\n data-page-tree-title-cell={\n column.accessor === titleCellAccessor ? 'true' : undefined\n }\n id={`heading-${column.accessor.replace(/\\./g, '__')}`}\n key={index}\n >\n {column.Heading}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n <SortableContext items={sortableItems} strategy={sortingStrategy}>\n {data.map((doc, rowIndex) => {\n const rootInsertBeforeDropTarget =\n doc.__pageTreeParentID === null\n ? insertDropTargetsByReferenceRowID.get(doc.__pageTreeID)\n : undefined\n const rootInsertTargetIndex =\n rootInsertBeforeDropTarget !== undefined\n ? insertDropTargets.indexOf(rootInsertBeforeDropTarget)\n : -1\n const rootInsertAfterDropTarget =\n rootInsertTargetIndex >= 0\n ? insertDropTargets[rootInsertTargetIndex + 1]\n : undefined\n const isTrailingRootInsert =\n rootInsertAfterDropTarget === insertDropTargets[insertDropTargets.length - 1]\n const nextVisibleDoc = data[rowIndex + 1]\n const hasVisibleDescendantAfter =\n nextVisibleDoc?.__pageTreeAncestorIDs.includes(doc.__pageTreeID) ?? false\n\n return (\n <React.Fragment key={doc.__pageTreeID}>\n {rootInsertBeforeDropTarget ? (\n <HierarchyInsertRow\n activeColumnsCount={activeColumns.length}\n activeDragRowID={activeDoc ? activeDragRowID : null}\n activeDropTargetID={activeDropTargetID}\n dropTarget={rootInsertBeforeDropTarget}\n dropValidation={insertDropValidationByID.get(\n rootInsertBeforeDropTarget.dropID,\n )}\n isMovePending={isMovePending}\n key={rootInsertBeforeDropTarget.dropID}\n />\n ) : null}\n <HierarchyTableRow\n activeColumns={activeColumns}\n activeDragRowID={activeDragRowID}\n activeDragType={activeDragType}\n canReorderRows={canReorderRows}\n doc={doc}\n dropValidation={rowDropValidationByID.get(doc.__pageTreeID)}\n insertAfterDropID={\n hasVisibleDescendantAfter || isTrailingRootInsert\n ? null\n : (rootInsertAfterDropTarget?.dropID ?? null)\n }\n insertBeforeDropID={rootInsertBeforeDropTarget?.dropID ?? null}\n isMovePending={isMovePending}\n rowIndex={rowIndex}\n titleCellAccessor={titleCellAccessor}\n />\n </React.Fragment>\n )\n })}\n </SortableContext>\n </tbody>\n </table>\n </div>\n </div>\n )\n}\n\nexport default function PageTreeListViewClient({\n badgeConfig,\n badgesLinks,\n canMoveDocs,\n columnState,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n query,\n renderedRowIDs,\n sourceDocs,\n useAsTitle,\n ...props\n}: PageTreeListViewClientProps) {\n const dndContextID = React.useId()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { config } = useConfig()\n const { user } = useAuth()\n const locale = useLocale()\n const { i18n } = useTranslation()\n const [activeDragRowID, setActiveDragRowID] = React.useState<null | string>(null)\n const [activeDragType, setActiveDragType] = React.useState<null | PageTreeDragType>(null)\n const [activeDropTarget, setActiveDropTarget] = React.useState<null | PageTreeDropTarget>(null)\n const expandedStorageKey =\n user?.id == null\n ? null\n : `payload-page-tree:expanded:${encodeURIComponent(props.collectionSlug)}:${encodeURIComponent(user.collection)}:${encodeURIComponent(String(user.id))}`\n const [expansion, setExpansion] = React.useState<{\n ids: null | Set<string>\n storageKey: null | string\n }>(() => ({ ids: null, storageKey: null }))\n const [optimisticOrderRowIDs, setOptimisticOrderRowIDs] = React.useState<null | string[]>(null)\n const [parentMoveEnabled, setParentMoveEnabled] = React.useState(false)\n const [pendingMoveRowID, setPendingMoveRowID] = React.useState<null | string>(null)\n const { getPreference, setPreference } = usePreferences()\n const parentMovePreferenceKey = React.useMemo(\n () => getParentMovePreferenceKey(props.collectionSlug),\n [props.collectionSlug],\n )\n\n React.useEffect(() => {\n let ids: null | Set<string> = null\n\n if (expandedStorageKey) {\n try {\n const stored: unknown = JSON.parse(window.localStorage.getItem(expandedStorageKey) ?? 'null')\n if (Array.isArray(stored) && stored.every((id) => typeof id === 'string')) {\n ids = new Set(stored)\n }\n } catch {\n // Missing, invalid, or unavailable storage leaves the tree expanded.\n }\n }\n\n setExpansion({ ids, storageKey: expandedStorageKey })\n }, [expandedStorageKey])\n\n React.useEffect(() => {\n // Do not overwrite a new user's saved state before it has been restored.\n if (!expandedStorageKey || expansion.storageKey !== expandedStorageKey || !expansion.ids) {\n return\n }\n\n try {\n window.localStorage.setItem(expandedStorageKey, JSON.stringify([...expansion.ids]))\n } catch {\n // Toggling still works when storage is blocked or full.\n }\n }, [expandedStorageKey, expansion])\n\n const handleParentMoveToggle = React.useCallback(() => {\n setParentMoveEnabled((currentValue) => {\n const nextValue = !currentValue\n\n void setPreference(parentMovePreferenceKey, nextValue)\n\n return nextValue\n })\n }, [parentMovePreferenceKey, setPreference])\n const currentSort = React.useMemo(() => {\n const searchParamSort = searchParams.getAll('sort')\n\n if (searchParamSort.length > 0) {\n return normalizeSort(searchParamSort)\n }\n\n return normalizeSort(query.sort as string | string[] | undefined)\n }, [query.sort, searchParams])\n const canReorderRows =\n canMoveDocs && isOrderableSortActive({ orderableFieldName, sort: currentSort })\n const currentLimit = React.useMemo(\n () =>\n normalizePositiveInt(\n searchParams.get('limit'),\n typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10,\n ),\n [query.limit, searchParams],\n )\n const currentRequestedPage = React.useMemo(\n () =>\n normalizePositiveInt(\n searchParams.get('page'),\n typeof query.page === 'number' && query.page > 0 ? query.page : 1,\n ),\n [query.page, searchParams],\n )\n const liveAllDocs = React.useMemo(\n () =>\n buildPageTreeDocs(sourceDocs, {\n parentFieldSlug,\n sort: currentSort,\n }),\n [currentSort, parentFieldSlug, sourceDocs],\n )\n const toggleRow = React.useCallback(\n (rowID: string) => {\n setExpansion((currentState) => {\n const nextState = new Set(\n (currentState.storageKey === expandedStorageKey ? currentState.ids : null) ??\n liveAllDocs.filter((doc) => doc.__pageTreeHasChildren).map((doc) => doc.__pageTreeID),\n )\n\n if (nextState.has(rowID)) {\n nextState.delete(rowID)\n } else {\n nextState.add(rowID)\n }\n\n return { ids: nextState, storageKey: expandedStorageKey }\n })\n },\n [expandedStorageKey, liveAllDocs],\n )\n const collapsedIDs = React.useMemo(\n () =>\n new Set(\n liveAllDocs\n .filter(\n (doc) =>\n doc.__pageTreeHasChildren &&\n expansion.storageKey === expandedStorageKey &&\n expansion.ids !== null &&\n !expansion.ids.has(doc.__pageTreeID),\n )\n .map((doc) => doc.__pageTreeID),\n ),\n [expandedStorageKey, expansion, liveAllDocs],\n )\n const dragResetKey = React.useMemo(\n () => JSON.stringify([props.collectionSlug, props.viewType, searchParams.toString()]),\n [props.collectionSlug, props.viewType, searchParams],\n )\n const hierarchyValue = React.useMemo(\n () => ({\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n parentMoveEnabled,\n pendingMoveRowID,\n toggleRow,\n }),\n [activeDragRowID, canMoveDocs, collapsedIDs, parentMoveEnabled, pendingMoveRowID, toggleRow],\n )\n\n React.useEffect(() => {\n let isMounted = true\n\n void getPreference<boolean>(parentMovePreferenceKey).then((storedValue) => {\n if (isMounted) {\n setParentMoveEnabled(storedValue === true)\n }\n })\n\n return () => {\n isMounted = false\n }\n }, [getPreference, parentMovePreferenceKey])\n\n React.useEffect(() => {\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n setOptimisticOrderRowIDs(null)\n }, [dragResetKey])\n\n const visibleDocs = React.useMemo(\n () => getVisibleTreeDocs(liveAllDocs, collapsedIDs),\n [liveAllDocs, collapsedIDs],\n )\n const paginatedData = React.useMemo(\n () => buildPaginatedData(visibleDocs, currentLimit, currentRequestedPage),\n [currentLimit, currentRequestedPage, visibleDocs],\n )\n const paginatedDocs = paginatedData.docs as PageTreeDoc[]\n const paginatedServerOrderKey = React.useMemo(\n () => paginatedDocs.map((doc) => doc.__pageTreeID).join('\\0'),\n [paginatedDocs],\n )\n const displayedPaginatedDocs = React.useMemo(\n () => orderDocsByRowIDs(paginatedDocs, optimisticOrderRowIDs),\n [optimisticOrderRowIDs, paginatedDocs],\n )\n const displayedPaginatedData = React.useMemo(\n () => ({\n ...paginatedData,\n docs: displayedPaginatedDocs,\n }),\n [displayedPaginatedDocs, paginatedData],\n )\n\n React.useEffect(() => {\n setOptimisticOrderRowIDs(null)\n }, [paginatedServerOrderKey])\n\n const allDocsByID = React.useMemo(\n () => new Map(liveAllDocs.map((doc) => [doc.__pageTreeID, doc])),\n [liveAllDocs],\n )\n const paginatedDocsByID = React.useMemo(\n () => new Map(displayedPaginatedDocs.map((doc) => [doc.__pageTreeID, doc])),\n [displayedPaginatedDocs],\n )\n const renderedCellIndexByDocID = React.useMemo(\n () => new Map(renderedRowIDs.map((id, index) => [id, index])),\n [renderedRowIDs],\n )\n const normalizedColumnState = React.useMemo(\n () => ensureUseAsTitleColumn(columnState, useAsTitle),\n [columnState, useAsTitle],\n )\n const paginatedColumnState = React.useMemo(\n () => sliceColumnState(normalizedColumnState, displayedPaginatedDocs, renderedCellIndexByDocID),\n [displayedPaginatedDocs, normalizedColumnState, renderedCellIndexByDocID],\n )\n const tableColumns = React.useMemo(\n () =>\n buildTableColumns({\n badgeConfig,\n badgesLinks,\n collectionSlug: props.collectionSlug,\n columnState: paginatedColumnState,\n docs: displayedPaginatedDocs,\n enableRowSelections: props.enableRowSelections,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n t: i18n.t,\n useAsTitle,\n }),\n [\n paginatedColumnState,\n displayedPaginatedDocs,\n badgeConfig,\n badgesLinks,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n props.collectionSlug,\n props.enableRowSelections,\n i18n.t,\n useAsTitle,\n ],\n )\n const activeDragDoc = activeDragRowID ? (paginatedDocsByID.get(activeDragRowID) ?? null) : null\n const activeDragPreviewPath = React.useMemo(() => {\n if (!activeDragDoc || activeDragType !== 'move') {\n return null\n }\n\n if (!activeDropTarget) {\n return buildDocSlugPath({\n doc: activeDragDoc,\n docsByID: allDocsByID,\n })\n }\n\n const targetDoc = getDropTargetParentDoc({\n docsByID: allDocsByID,\n dropTarget: activeDropTarget,\n })\n const dropValidation = getDropTargetValidation({\n activeDoc: activeDragDoc,\n docsByID: allDocsByID,\n dropTarget: activeDropTarget,\n })\n\n if (!dropValidation.isValid) {\n return buildDocSlugPath({\n doc: activeDragDoc,\n docsByID: allDocsByID,\n })\n }\n\n return buildProspectiveDocSlugPath({\n activeDoc: activeDragDoc,\n docsByID: allDocsByID,\n targetDoc: targetDoc ?? undefined,\n })\n }, [activeDragDoc, activeDragType, activeDropTarget, allDocsByID])\n const isMovePending = pendingMoveRowID !== null\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 2,\n },\n }),\n )\n const handleDragCancel = React.useCallback(() => {\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n }, [])\n const handleDragStart = React.useCallback(\n (event: DragStartEvent) => {\n if (!canMoveDocs || isMovePending) {\n return\n }\n\n const dragData = getPageTreeDragData(event.active.data.current)\n const { dragType, rowID } = dragData\n\n if (\n typeof rowID === 'string' &&\n dragType &&\n paginatedDocsByID.has(rowID) &&\n (dragType !== 'order' || canReorderRows)\n ) {\n setActiveDragRowID(rowID)\n setActiveDragType(dragType)\n setActiveDropTarget(null)\n }\n },\n [canMoveDocs, canReorderRows, isMovePending, paginatedDocsByID],\n )\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\n const dragData = getPageTreeDragData(event.active.data.current)\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\n\n if (dragData.dragType === 'order') {\n setActiveDropTarget(null)\n return\n }\n\n if (dragData.dragType !== 'move' || !overData) {\n setActiveDropTarget(null)\n return\n }\n\n if (overData.dropType === 'insert') {\n setActiveDropTarget(overData)\n return\n }\n\n if (overData.dropType === 'row') {\n setActiveDropTarget(overData)\n return\n }\n\n setActiveDropTarget(null)\n }, [])\n const handleDragEnd = React.useCallback(\n async (event: DragEndEvent) => {\n const dragData = getPageTreeDragData(event.active.data.current)\n const { dragType, rowID } = dragData\n const activeDoc = typeof rowID === 'string' ? (paginatedDocsByID.get(rowID) ?? null) : null\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\n const overDragData = getPageTreeDragData(event.over?.data.current)\n\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n\n if (dragType === 'order') {\n if (typeof rowID === 'string' && typeof overDragData.rowID === 'string') {\n const nextOrderRowIDs = buildOptimisticOrderRowIDs({\n activeRowID: rowID,\n docs: displayedPaginatedDocs,\n targetRowID: overDragData.rowID,\n })\n const reorderRequestBody = buildReorderRequestBody({\n activeRowID: rowID,\n docs: displayedPaginatedDocs,\n orderableFieldName,\n sort: currentSort,\n targetRowID: overDragData.rowID,\n })\n\n if (!nextOrderRowIDs || !reorderRequestBody) {\n return\n }\n\n const apiRoute = config.routes.api\n const params = new URLSearchParams()\n\n if (locale?.code) {\n params.set('locale', locale.code)\n }\n\n setOptimisticOrderRowIDs(nextOrderRowIDs)\n setPendingMoveRowID(rowID)\n\n try {\n const response = await fetch(\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/reorder${\n params.size > 0 ? `?${params.toString()}` : ''\n }`,\n {\n body: JSON.stringify(reorderRequestBody),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n const result = (await response.json().catch(() => null)) as {\n message?: string\n } | null\n\n if (!response.ok) {\n setOptimisticOrderRowIDs(null)\n toast.error(result?.message ?? 'Could not reorder document.')\n return\n }\n\n if (result?.message === 'initial migration') {\n setOptimisticOrderRowIDs(null)\n }\n\n React.startTransition(() => {\n router.refresh()\n })\n } catch (error) {\n const message =\n error instanceof Error && error.message\n ? error.message\n : 'Could not reorder document.'\n\n setOptimisticOrderRowIDs(null)\n toast.error(message)\n } finally {\n setPendingMoveRowID(null)\n }\n }\n\n return\n }\n\n if (dragType !== 'move' || typeof rowID !== 'string' || !activeDoc || !overData) {\n return\n }\n\n const dropValidation = getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget: overData,\n })\n\n if (!dropValidation.isValid) {\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\n toast.error(dropValidation.message ?? 'Could not move document.')\n }\n\n return\n }\n\n if (\n overData.dropType === 'insert' &&\n activeDoc.__pageTreeParentID === dropValidation.parentID\n ) {\n return\n }\n\n const apiRoute = config.routes.api\n const params = new URLSearchParams()\n\n if (locale?.code) {\n params.set('locale', locale.code)\n }\n\n setPendingMoveRowID(rowID)\n\n try {\n const response = await fetch(\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/move${\n params.size > 0 ? `?${params.toString()}` : ''\n }`,\n {\n body: JSON.stringify({\n parentID: dropValidation.parentID,\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n const result = (await response.json().catch(() => null)) as {\n message?: string\n } | null\n\n if (!response.ok) {\n if (shouldSilenceMoveMessage(result?.message)) {\n return\n }\n\n toast.error(result?.message ?? 'Could not move document.')\n return\n }\n\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\n React.startTransition(() => {\n router.refresh()\n })\n } catch (error) {\n const message =\n error instanceof Error && error.message ? error.message : 'Could not move document.'\n\n toast.error(message)\n } finally {\n setPendingMoveRowID(null)\n }\n },\n [\n allDocsByID,\n config.routes.api,\n currentSort,\n displayedPaginatedDocs,\n i18n.language,\n locale?.code,\n orderableFieldName,\n paginatedDocsByID,\n props.collectionSlug,\n router,\n ],\n )\n const handleDragEndSync = React.useCallback(\n (event: DragEndEvent) => {\n void handleDragEnd(event)\n },\n [handleDragEnd],\n )\n\n const tableNode = React.useMemo(\n () => (\n <DndContext\n collisionDetection={pageTreeCollisionDetectionStrategy}\n id={dndContextID}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEndSync}\n onDragOver={handleDragOver}\n onDragStart={handleDragStart}\n sensors={sensors}\n >\n <HierarchyTable\n activeDragRowID={activeDragRowID}\n activeDragType={activeDragType}\n activeDropTarget={activeDropTarget}\n allDocsByID={allDocsByID}\n canReorderRows={canReorderRows}\n columns={tableColumns}\n data={displayedPaginatedDocs}\n isMovePending={isMovePending}\n titleCellAccessor={useAsTitle}\n />\n <DragOverlay dropAnimation={null} style={{ cursor: 'grabbing' }}>\n {activeDragPreviewPath ? (\n <div className=\"pages-hierarchy-drag-overlay\">{activeDragPreviewPath}</div>\n ) : null}\n </DragOverlay>\n </DndContext>\n ),\n [\n activeDragPreviewPath,\n activeDragRowID,\n activeDragType,\n activeDropTarget,\n allDocsByID,\n canReorderRows,\n displayedPaginatedDocs,\n dndContextID,\n handleDragCancel,\n handleDragEndSync,\n handleDragOver,\n handleDragStart,\n isMovePending,\n sensors,\n tableColumns,\n useAsTitle,\n ],\n )\n const beforeActions = React.useMemo(() => {\n const actions = props.beforeActions ? [...props.beforeActions] : []\n\n if (canMoveDocs) {\n actions.unshift(\n <ParentMoveToggle\n collectionSlug={props.collectionSlug}\n enabled={parentMoveEnabled}\n key=\"parent-move-toggle\"\n onToggle={handleParentMoveToggle}\n />,\n )\n }\n\n return actions.length > 0 ? actions : undefined\n }, [\n canMoveDocs,\n handleParentMoveToggle,\n parentMoveEnabled,\n props.beforeActions,\n props.collectionSlug,\n ])\n\n // ListQueryProvider writes this prop back to the URL whenever its identity\n // changes, so a new object on every render would undo column and filter edits.\n const listQuery = React.useMemo(\n () => ({\n ...query,\n limit: currentLimit,\n page: displayedPaginatedData.page,\n sort: currentSort,\n }),\n [currentLimit, currentSort, displayedPaginatedData.page, query],\n )\n\n return (\n <div className={styles.root}>\n <PageTreeProvider value={hierarchyValue}>\n <ListQueryProvider\n collectionSlug={props.collectionSlug}\n data={displayedPaginatedData}\n modifySearchParams\n orderableFieldName={orderableFieldName}\n query={listQuery}\n >\n <DefaultListView\n {...props}\n beforeActions={beforeActions}\n columnState={paginatedColumnState}\n Table={tableNode}\n />\n </ListQueryProvider>\n </PageTreeProvider>\n </div>\n )\n}\n"],"names":["DndContext","DragOverlay","PointerSensor","useDroppable","useSensor","useSensors","arrayMove","SortableContext","useSortable","DefaultListView","ListQueryProvider","Pill","SelectAll","SelectRow","SortHeader","toast","useAuth","useConfig","useLocale","usePreferences","useTranslation","useWindowInfo","useRouter","useSearchParams","React","createPortal","buildInsertDropTargets","getDropTargetParentDoc","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","PageTreeProvider","PageTreeRowDndProvider","styles","PageTreeStatusBadge","PageTreeTitleCell","SILENT_MOVE_MESSAGES","Set","ALREADY_ROOT_MESSAGE","getParentMovePreferenceKey","collectionSlug","getRowDropID","rowID","getSortableRowID","getDiagnosticString","value","length","getPageTreeDragData","data","dragType","undefined","parentID","getSortableTransform","transform","scaleX","scaleY","x","y","getVisibleSubtreeIndexRange","docs","rootIndex","rootDoc","end","index","__pageTreeAncestorIDs","includes","__pageTreeID","start","getRangeRect","args","activeNodeRect","activeRange","range","rects","firstRect","lastRect","bottom","top","height","isIndexInRange","buildPageTreeSortingStrategy","activeIndex","overIndex","overRange","activeRect","overRect","buildPaginatedData","limit","requestedPage","totalDocs","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","slice","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","filter","entry","join","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","isOrderableSortActive","orderableFieldName","sort","Boolean","ensureUseAsTitleColumn","columnState","useAsTitle","map","column","accessor","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","doc","renderedCellIndex","get","__pageTreeOrderIndex","getSelectableRowData","record","id","_isLocked","_userEditing","shouldSilenceMoveMessage","message","has","getVisibleSubtreeRowIDs","findIndex","rowIDs","push","buildOptimisticOrderRowIDs","activeRowID","targetRowID","activeDoc","find","targetDoc","__pageTreeParentID","activeBlockIDs","targetBlockIDs","currentRowIDs","indexOf","targetIndex","remainingRowIDs","targetAnchorID","targetAnchorIndex","insertIndex","buildReorderRequestBody","siblingDocs","moveFromIndex","moveToIndex","newBeforeRow","newAfterRow","target","getFrontendOrderEntry","orderKey","slug","siblingDocsAfter","movedSiblingDoc","splice","targetKey","newKeyWillBe","docsToMove","frontendOrder","activeSlug","after","before","newAfterRowSlug","newBeforeRowSlug","targetSlug","key","orderDocsByRowIDs","orderRowIDs","docsByID","Map","orderedDocs","flatMap","getDropTargetValidation","dropTarget","dropType","isValid","renderStatusBadge","badgeConfig","badgesLinks","ParentMoveToggle","enabled","onToggle","breakpoints","s","smallBreak","mobileActions","setMobileActions","useState","setMobileMount","useCallback","node","closest","querySelector","toggle","aria-checked","aria-label","className","onClick","pillStyle","size","span","hidden","ref","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","t","columnsToUse","unshift","field","Heading","rowData","orderableColumn","aria-hidden","selectColumnIndex","HierarchyInsertRow","activeColumnsCount","activeDragRowID","activeDropTargetID","dropValidation","isMovePending","isOver","setNodeRef","dropID","disabled","hasActiveDrag","showInsertLine","tr","data-drag-over","data-drop-valid","data-page-tree-insert","td","colSpan","div","data-insert-depth","depth","HierarchyTableRow","activeColumns","activeDragType","canReorderRows","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","sortable","hasActiveMoveDrag","isActiveDragRow","setRowRef","element","rowDndValue","useMemo","isOrderDragging","isDragging","orderHandleAttributes","attributes","orderHandleListeners","listeners","orderHandleRef","setActivatorNodeRef","sortableStyle","position","transition","zIndex","data-id","data-is-drag-source","data-is-order-drag-source","data-page-tree-row","style","columnIndex","replace","data-page-tree-title-cell","HierarchyTable","activeDropTarget","allDocsByID","columns","sortableItems","sortingStrategy","insertDropTargets","insertDropTargetsByReferenceRowID","referenceRowID","rowDropValidationByID","insertDropValidationByID","table","cellPadding","cellSpacing","thead","th","tbody","items","strategy","rootInsertBeforeDropTarget","rootInsertTargetIndex","rootInsertAfterDropTarget","isTrailingRootInsert","nextVisibleDoc","hasVisibleDescendantAfter","Fragment","PageTreeListViewClient","canMoveDocs","query","renderedRowIDs","sourceDocs","props","dndContextID","useId","router","searchParams","config","user","locale","i18n","setActiveDragRowID","setActiveDragType","setActiveDropTarget","expandedStorageKey","encodeURIComponent","collection","String","expansion","setExpansion","ids","storageKey","optimisticOrderRowIDs","setOptimisticOrderRowIDs","parentMoveEnabled","setParentMoveEnabled","pendingMoveRowID","setPendingMoveRowID","getPreference","setPreference","parentMovePreferenceKey","useEffect","stored","JSON","parse","window","localStorage","getItem","every","setItem","stringify","handleParentMoveToggle","currentValue","nextValue","currentSort","searchParamSort","getAll","currentLimit","currentRequestedPage","liveAllDocs","toggleRow","currentState","nextState","__pageTreeHasChildren","delete","add","collapsedIDs","dragResetKey","viewType","toString","hierarchyValue","isMounted","then","storedValue","visibleDocs","paginatedData","paginatedDocs","paginatedServerOrderKey","displayedPaginatedDocs","displayedPaginatedData","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","sensors","activationConstraint","distance","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","overDragData","nextOrderRowIDs","reorderRequestBody","apiRoute","routes","api","params","URLSearchParams","code","set","response","fetch","body","credentials","headers","language","method","result","json","catch","ok","error","startTransition","refresh","Error","success","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","beforeActions","actions","listQuery","root","modifySearchParams","Table"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { getColumns, renderTable } from '@payloadcms/ui/rsc';
|
|
|
3
3
|
import { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig';
|
|
4
4
|
import { headers } from 'next/headers.js';
|
|
5
5
|
import { createLocalReq, extractJWT } from 'payload';
|
|
6
|
-
import { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere } from 'payload/shared';
|
|
6
|
+
import { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere, transformColumnsToSearchParams } from 'payload/shared';
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js';
|
|
9
9
|
import { getPageTreeListSelect } from '../utilities/listSelect.js';
|
|
@@ -454,7 +454,14 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
454
454
|
homeIndicatorEnabled: pageTreeConfig.homeIndicator.enabled,
|
|
455
455
|
orderableFieldName: orderableFieldName,
|
|
456
456
|
parentFieldSlug: pageTreeConfig.parentFieldSlug,
|
|
457
|
-
query:
|
|
457
|
+
query: {
|
|
458
|
+
...effectiveQuery,
|
|
459
|
+
// ListQueryProvider syncs this back to the URL, so it must describe the
|
|
460
|
+
// rendered columns in URL form, not the raw preference objects. Without
|
|
461
|
+
// saved or URL columns it stays empty, like Payload's list view, so the
|
|
462
|
+
// next query change doesn't pin the default columns into preferences.
|
|
463
|
+
columns: query.columns ? transformColumnsToSearchParams(columnPreferences) : undefined
|
|
464
|
+
},
|
|
458
465
|
renderedRowIDs: orderedDocs.map((doc)=>doc.__pageTreeID),
|
|
459
466
|
sourceDocs: treeSourceDocs,
|
|
460
467
|
useAsTitle: props.collectionConfig.admin.useAsTitle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\n ColumnPreference,\n ListQuery,\n ListViewClientProps,\n PaginatedDocs,\n Params,\n} from 'payload'\n\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\nimport { headers } from 'next/headers.js'\nimport { createLocalReq, extractJWT } from 'payload'\nimport {\n applyLocaleFiltering,\n combineWhereConstraints,\n mergeListSearchAndWhere,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginBadgesLinks, PageTreeSourceDoc } from '../types.js'\n\nimport { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js'\nimport { getPageTreeListSelect } from '../utilities/listSelect.js'\nimport { withPageTreeLocaleStatuses } from '../utilities/localeStatus.js'\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\nimport PageTreeListViewClient from './PageTreeListView.client.js'\n\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\ntype ServerListViewProps = Record<string, any>\n\nfunction isNumericSegment(segment: string): boolean {\n return /^\\d+$/.test(segment)\n}\n\nfunction getKeySegments(key: string): string[] {\n const matches = key.match(/[^[\\]]+/g)\n return matches ? matches.filter(Boolean) : [key]\n}\n\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\n const segments = getKeySegments(key)\n\n if (segments.length === 0) {\n return\n }\n\n let current: Record<string, unknown> | unknown[] = target\n\n for (let index = 0; index < segments.length; index += 1) {\n const segment = segments[index]\n const isLastSegment = index === segments.length - 1\n const nextSegment = segments[index + 1]\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\n ? []\n : {}\n\n if (isLastSegment) {\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n current[arrayIndex] = value\n } else {\n const existingValue = current[segment]\n\n if (existingValue === undefined) {\n current[segment] = value\n } else if (Array.isArray(existingValue)) {\n existingValue.push(value)\n } else {\n current[segment] = [existingValue, value]\n }\n }\n\n return\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n const existingValue = current[arrayIndex]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[arrayIndex] = nextContainer\n }\n\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\n continue\n }\n\n const existingValue = current[segment]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[segment] = nextContainer\n }\n\n current = current[segment] as Record<string, unknown> | unknown[]\n }\n}\n\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\n const parsed: ParsedQuery = {}\n\n for (const [key, value] of Object.entries(searchParams ?? {})) {\n if (Array.isArray(value)) {\n for (const entry of value) {\n if (typeof entry === 'string') {\n setNestedValue(parsed, key, entry)\n }\n }\n } else if (typeof value === 'string') {\n setNestedValue(parsed, key, value)\n }\n }\n\n for (const key of ['columns', 'queryByGroup']) {\n if (typeof parsed[key] === 'string') {\n try {\n parsed[key] = JSON.parse(parsed[key])\n } catch {\n // Leave invalid persisted values untouched and let Payload ignore them.\n }\n }\n }\n\n const sanitized: ParsedQuery = { ...parsed }\n\n for (const [key, value] of Object.entries(sanitized)) {\n if (\n key === 'columns' &&\n ((typeof value === 'string' && value === '[]') ||\n (Array.isArray(value) && value.length === 0))\n ) {\n delete sanitized[key]\n continue\n }\n\n if (\n key === 'where' &&\n typeof value === 'object' &&\n value !== null &&\n !Object.keys(value).length\n ) {\n delete sanitized[key]\n continue\n }\n\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\n const parsedValue = Number.parseInt(value, 10)\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\n }\n\n if (key === 'page' && value === 0) {\n delete sanitized[key]\n continue\n }\n\n if (value === '') {\n delete sanitized[key]\n }\n }\n\n return sanitized\n}\n\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\n return incomingValue === undefined ? fallbackValue : incomingValue\n}\n\nfunction normalizeLimit(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizePage(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizeSearch(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction normalizeSort(value: unknown): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter(\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\n )\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\n return collectionConfig.orderable === true\n ? '_order'\n : typeof collectionConfig.orderable === 'string'\n ? collectionConfig.orderable\n : undefined\n}\n\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\n}\n\nfunction getEffectiveTreeSort(args: {\n defaultSort?: string\n orderableFieldName?: string\n sort?: string\n}): string | undefined {\n const { defaultSort, orderableFieldName, sort } = args\n\n if (sort) {\n return sort\n }\n\n if (\n orderableFieldName &&\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\n ) {\n return defaultSort\n }\n\n return undefined\n}\n\nfunction normalizeWhere(value: unknown): any {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n return undefined\n}\n\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\n const parsedSearchQuery = parseSearchParams(props.searchParams)\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\n const mergedQuery = {\n ...preferenceQuery,\n ...parsedSearchQuery,\n } as ParsedQuery\n\n return {\n ...mergedQuery,\n limit: normalizeLimit(\n getQueryValue(mergedQuery.limit, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page, props.data.page),\n props.data.page,\n ),\n search: normalizeSearch(mergedQuery.search),\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\n where: normalizeWhere(mergedQuery.where),\n }\n}\n\nfunction getBaseFilterArgs(\n props: ServerListViewProps,\n req: any,\n query: ListQuery,\n locale?: string,\n) {\n return {\n limit: 0,\n locale,\n page: 1,\n req,\n sort:\n normalizeSort(query.sort) ??\n (typeof props.collectionConfig.defaultSort === 'string'\n ? props.collectionConfig.defaultSort\n : 'id'),\n }\n}\n\nasync function getDocsWithDisplayStatus(args: {\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n breadcrumbsFieldSlug: string\n collectionConfig: ServerListViewProps['collectionConfig']\n collectionSlug: string\n docs: PageTreeSourceDoc[]\n fastMode?: boolean\n locale?: string\n payload: any\n req: any\n user: unknown\n}): Promise<PageTreeSourceDoc[]> {\n const {\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n collectionSlug,\n docs,\n fastMode,\n locale,\n payload,\n req,\n user,\n } = args\n\n const docIDs = docs\n .map((doc) => doc.id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (docIDs.length === 0) {\n return docs\n }\n\n const currentResult = collectionConfig.versions?.drafts\n ? await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: false,\n fallbackLocale: false,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n select:\n !fastMode || typeof badgesLinks?.liveURL === 'function'\n ? undefined\n : {\n id: true,\n _status: true,\n ...(badgesLinks?.liveURL ? { [breadcrumbsFieldSlug]: true } : {}),\n },\n user,\n where: {\n id: {\n in: docIDs,\n },\n },\n } as never)\n : { docs }\n\n const currentByID = new Map<string, PageTreeSourceDoc>(\n currentResult.docs.map((doc: PageTreeSourceDoc) => [String(doc.id), doc]),\n )\n const displayDocs = withPageTreeDisplayStatuses({\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\n draftDocs: docs,\n })\n const token = badgesLinks && collectionConfig.admin.preview ? extractJWT(req) : null\n\n return Promise.all(\n displayDocs.map(async (doc) => {\n const cleanDoc = { ...doc }\n delete cleanDoc.__pageTreeStatusLinks\n const links = await resolvePageTreeBadgeLinks({\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n draftDoc: cleanDoc,\n publishedDoc: currentByID.get(String(doc.id)),\n req,\n token,\n })\n return { ...cleanDoc, __pageTreeStatusLinks: links }\n }),\n )\n}\n\nasync function getListClientConfig({\n collectionSlug,\n i18n,\n payload,\n req,\n user,\n}: {\n collectionSlug: string\n i18n: unknown\n payload: any\n req: any\n user: unknown\n}): Promise<{\n clientCollectionConfig: any\n clientConfig: any\n}> {\n const clientConfig = getClientConfig({\n config: payload.config,\n i18n: i18n as never,\n importMap: payload.importMap,\n user: (user ?? true) as never,\n } as never)\n\n await applyLocaleFiltering({\n clientConfig,\n config: payload.config,\n req,\n } as never)\n\n const clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n if (!clientCollectionConfig) {\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\n }\n\n return {\n clientCollectionConfig,\n clientConfig,\n }\n}\n\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\n\n if (!pageTreeConfig) {\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\n }\n\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\n }\n\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\n const defaultSort = getDefaultSort(props.collectionConfig)\n const effectiveSort = getEffectiveTreeSort({\n defaultSort,\n orderableFieldName,\n sort: normalizeSort(query.sort),\n })\n const effectiveQuery = {\n ...query,\n sort: effectiveSort,\n }\n const locale = props.locale?.code\n const requestHeaders = await headers()\n const host =\n requestHeaders.get('x-forwarded-host')?.split(',')[0]?.trim() ||\n requestHeaders.get('host') ||\n 'localhost'\n const protocol =\n requestHeaders.get('x-forwarded-proto')?.split(',')[0]?.trim() === 'https' ? 'https' : 'http'\n const requestURL = new URL(props.payload.config.serverURL || `${protocol}://${host}`)\n requestURL.pathname = `${props.payload.config.routes?.admin || '/admin'}/collections/${props.collectionSlug}`\n const req = await createLocalReq(\n {\n fallbackLocale: false,\n locale,\n req: {\n headers: requestHeaders,\n i18n: props.i18n,\n locale,\n payload: props.payload,\n query: effectiveQuery,\n url: requestURL.href,\n user: props.user,\n },\n user: props.user,\n },\n props.payload,\n )\n\n const baseFilter =\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\n const baseFilterConstraint = baseFilter\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\n : undefined\n const mergedWhere = combineWhereConstraints([\n mergeListSearchAndWhere({\n collectionConfig: props.collectionConfig,\n search: normalizeSearch(query.search),\n where: normalizeWhere(query.where),\n } as never),\n baseFilterConstraint ?? undefined,\n ])\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\n\n const fullResult = await props.payload.find({\n collection: props.collectionSlug,\n depth: 0,\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\n fallbackLocale: false,\n includeLockStatus: true,\n select:\n pageTreeConfig.fastMode && !pageTreeConfig.badgesLinks\n ? getPageTreeListSelect({\n columns: props.columnState,\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n orderableFieldName,\n sort: effectiveSort,\n })\n : undefined,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n sort: normalizeSort(query.sort) ?? defaultSort,\n user: props.user,\n where,\n } as never)\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\n collectionSlug: props.collectionSlug,\n i18n: props.i18n,\n payload: props.payload,\n req,\n user: props.user,\n })\n const statusLocales =\n pageTreeConfig.badges.locales &&\n props.collectionConfig.versions?.drafts?.localizeStatus &&\n clientConfig.localization\n ? clientConfig.localization.locales.map(({ code }: { code: string }) => code)\n : []\n const treeSourceDocs = statusLocales.length\n ? await withPageTreeLocaleStatuses({\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n fastMode: pageTreeConfig.fastMode,\n localeBadgeStatus: pageTreeConfig.localeBadgeStatus,\n localeBadgeVisibility: pageTreeConfig.localeBadgeVisibility,\n locales: statusLocales,\n payload: props.payload,\n req,\n })\n : await getDocsWithDisplayStatus({\n fastMode: pageTreeConfig.fastMode,\n badgesLinks: pageTreeConfig.badgesLinks,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n locale,\n payload: props.payload,\n req,\n user: props.user,\n })\n\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n sort: effectiveSort,\n })\n const orderedData: PaginatedDocs = {\n docs: orderedDocs,\n hasNextPage: false,\n hasPrevPage: false,\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\n nextPage: null,\n page: 1,\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\n prevPage: null,\n totalDocs: orderedDocs.length,\n totalPages: 1,\n }\n\n const columnPreferences: ColumnPreference[] = (\n props.columnState as Array<{\n accessor: string\n active: boolean\n }>\n ).map(({ accessor, active }) => ({\n accessor,\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\n }))\n const columns = getColumns({\n clientConfig,\n collectionConfig: clientCollectionConfig,\n collectionSlug: props.collectionSlug,\n columns: columnPreferences,\n i18n: props.i18n,\n permissions: props.permissions,\n } as never)\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\n const renderedTable = renderTable({\n clientCollectionConfig,\n clientConfig,\n collectionConfig: props.collectionConfig,\n columns,\n data: orderedData,\n enableRowSelections: Boolean(props.enableRowSelections),\n fieldPermissions,\n i18n: props.i18n,\n orderableFieldName: orderableFieldName ?? '',\n payload: props.payload,\n query: effectiveQuery,\n req,\n tableAppearance: 'default',\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n viewType: props.viewType,\n } as never)\n const clientProps: Omit<ListViewClientProps, 'columnState' | 'Table'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n beforeActions: props.beforeActions,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n collectionSlug: props.collectionSlug,\n Description: props.Description,\n disableBulkDelete: props.disableBulkDelete,\n disableBulkEdit: props.disableBulkEdit,\n disableQueryPresets: props.disableQueryPresets,\n enableRowSelections: props.enableRowSelections,\n hasCreatePermission: props.hasCreatePermission,\n hasDeletePermission: props.hasDeletePermission,\n hasTrashPermission: props.hasTrashPermission,\n listMenuItems: props.listMenuItems,\n listPreferences: props.listPreferences,\n newDocumentURL: props.newDocumentURL,\n preferenceKey: props.preferenceKey,\n queryPreset: props.queryPreset,\n queryPresetPermissions: props.queryPresetPermissions,\n renderedFilters: props.renderedFilters,\n resolvedFilterOptions: props.resolvedFilterOptions,\n viewType: props.viewType,\n }\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\n const badgesLinks = pageTreeConfig.badgesLinks ? { ...pageTreeConfig.badgesLinks } : undefined\n if (typeof badgesLinks?.liveURL === 'function') {\n delete badgesLinks.liveURL\n }\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n badgeConfig={pageTreeConfig.badges}\n badgesLinks={badgesLinks}\n canMoveDocs={canMoveDocs}\n columnState={renderedTable.columnState}\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\n orderableFieldName={orderableFieldName}\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\n query={effectiveQuery}\n renderedRowIDs={orderedDocs.map((doc) => doc.__pageTreeID)}\n sourceDocs={treeSourceDocs}\n useAsTitle={props.collectionConfig.admin.useAsTitle}\n />\n )\n}\n\nexport default NestedDocsPageTreeListView\n"],"names":["getColumns","renderTable","getClientConfig","headers","createLocalReq","extractJWT","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","React","resolvePageTreeBadgeLinks","getPageTreeListSelect","withPageTreeLocaleStatuses","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","PageTreeListViewClient","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","badgesLinks","breadcrumbsFieldSlug","collectionSlug","docs","fastMode","payload","user","docIDs","map","doc","id","currentResult","versions","drafts","find","collection","depth","draft","fallbackLocale","overrideAccess","pagination","select","liveURL","_status","in","currentByID","Map","String","displayDocs","currentDocs","draftDocs","token","admin","preview","Promise","all","cleanDoc","__pageTreeStatusLinks","links","draftDoc","publishedDoc","get","getListClientConfig","i18n","clientConfig","config","importMap","clientCollectionConfig","collections","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","requestHeaders","host","split","trim","protocol","requestURL","URL","serverURL","pathname","routes","url","href","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","includeLockStatus","columns","columnState","parentFieldSlug","statusLocales","badges","locales","localizeStatus","localization","treeSourceDocs","localeBadgeStatus","localeBadgeVisibility","orderedDocs","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","accessor","active","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","beforeActions","BeforeList","BeforeListTable","Description","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","badgeConfig","homeIndicatorEnabled","homeIndicator","enabled","renderedRowIDs","__pageTreeID","sourceDocs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\n ColumnPreference,\n ListQuery,\n ListViewClientProps,\n PaginatedDocs,\n Params,\n} from 'payload'\n\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\nimport { headers } from 'next/headers.js'\nimport { createLocalReq, extractJWT } from 'payload'\nimport {\n applyLocaleFiltering,\n combineWhereConstraints,\n mergeListSearchAndWhere,\n transformColumnsToSearchParams,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginBadgesLinks, PageTreeSourceDoc } from '../types.js'\n\nimport { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js'\nimport { getPageTreeListSelect } from '../utilities/listSelect.js'\nimport { withPageTreeLocaleStatuses } from '../utilities/localeStatus.js'\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\nimport PageTreeListViewClient from './PageTreeListView.client.js'\n\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\ntype ServerListViewProps = Record<string, any>\n\nfunction isNumericSegment(segment: string): boolean {\n return /^\\d+$/.test(segment)\n}\n\nfunction getKeySegments(key: string): string[] {\n const matches = key.match(/[^[\\]]+/g)\n return matches ? matches.filter(Boolean) : [key]\n}\n\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\n const segments = getKeySegments(key)\n\n if (segments.length === 0) {\n return\n }\n\n let current: Record<string, unknown> | unknown[] = target\n\n for (let index = 0; index < segments.length; index += 1) {\n const segment = segments[index]\n const isLastSegment = index === segments.length - 1\n const nextSegment = segments[index + 1]\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\n ? []\n : {}\n\n if (isLastSegment) {\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n current[arrayIndex] = value\n } else {\n const existingValue = current[segment]\n\n if (existingValue === undefined) {\n current[segment] = value\n } else if (Array.isArray(existingValue)) {\n existingValue.push(value)\n } else {\n current[segment] = [existingValue, value]\n }\n }\n\n return\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n const existingValue = current[arrayIndex]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[arrayIndex] = nextContainer\n }\n\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\n continue\n }\n\n const existingValue = current[segment]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[segment] = nextContainer\n }\n\n current = current[segment] as Record<string, unknown> | unknown[]\n }\n}\n\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\n const parsed: ParsedQuery = {}\n\n for (const [key, value] of Object.entries(searchParams ?? {})) {\n if (Array.isArray(value)) {\n for (const entry of value) {\n if (typeof entry === 'string') {\n setNestedValue(parsed, key, entry)\n }\n }\n } else if (typeof value === 'string') {\n setNestedValue(parsed, key, value)\n }\n }\n\n for (const key of ['columns', 'queryByGroup']) {\n if (typeof parsed[key] === 'string') {\n try {\n parsed[key] = JSON.parse(parsed[key])\n } catch {\n // Leave invalid persisted values untouched and let Payload ignore them.\n }\n }\n }\n\n const sanitized: ParsedQuery = { ...parsed }\n\n for (const [key, value] of Object.entries(sanitized)) {\n if (\n key === 'columns' &&\n ((typeof value === 'string' && value === '[]') ||\n (Array.isArray(value) && value.length === 0))\n ) {\n delete sanitized[key]\n continue\n }\n\n if (\n key === 'where' &&\n typeof value === 'object' &&\n value !== null &&\n !Object.keys(value).length\n ) {\n delete sanitized[key]\n continue\n }\n\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\n const parsedValue = Number.parseInt(value, 10)\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\n }\n\n if (key === 'page' && value === 0) {\n delete sanitized[key]\n continue\n }\n\n if (value === '') {\n delete sanitized[key]\n }\n }\n\n return sanitized\n}\n\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\n return incomingValue === undefined ? fallbackValue : incomingValue\n}\n\nfunction normalizeLimit(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizePage(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizeSearch(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction normalizeSort(value: unknown): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter(\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\n )\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\n return collectionConfig.orderable === true\n ? '_order'\n : typeof collectionConfig.orderable === 'string'\n ? collectionConfig.orderable\n : undefined\n}\n\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\n}\n\nfunction getEffectiveTreeSort(args: {\n defaultSort?: string\n orderableFieldName?: string\n sort?: string\n}): string | undefined {\n const { defaultSort, orderableFieldName, sort } = args\n\n if (sort) {\n return sort\n }\n\n if (\n orderableFieldName &&\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\n ) {\n return defaultSort\n }\n\n return undefined\n}\n\nfunction normalizeWhere(value: unknown): any {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n return undefined\n}\n\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\n const parsedSearchQuery = parseSearchParams(props.searchParams)\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\n const mergedQuery = {\n ...preferenceQuery,\n ...parsedSearchQuery,\n } as ParsedQuery\n\n return {\n ...mergedQuery,\n limit: normalizeLimit(\n getQueryValue(mergedQuery.limit, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page, props.data.page),\n props.data.page,\n ),\n search: normalizeSearch(mergedQuery.search),\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\n where: normalizeWhere(mergedQuery.where),\n }\n}\n\nfunction getBaseFilterArgs(\n props: ServerListViewProps,\n req: any,\n query: ListQuery,\n locale?: string,\n) {\n return {\n limit: 0,\n locale,\n page: 1,\n req,\n sort:\n normalizeSort(query.sort) ??\n (typeof props.collectionConfig.defaultSort === 'string'\n ? props.collectionConfig.defaultSort\n : 'id'),\n }\n}\n\nasync function getDocsWithDisplayStatus(args: {\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n breadcrumbsFieldSlug: string\n collectionConfig: ServerListViewProps['collectionConfig']\n collectionSlug: string\n docs: PageTreeSourceDoc[]\n fastMode?: boolean\n locale?: string\n payload: any\n req: any\n user: unknown\n}): Promise<PageTreeSourceDoc[]> {\n const {\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n collectionSlug,\n docs,\n fastMode,\n locale,\n payload,\n req,\n user,\n } = args\n\n const docIDs = docs\n .map((doc) => doc.id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (docIDs.length === 0) {\n return docs\n }\n\n const currentResult = collectionConfig.versions?.drafts\n ? await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: false,\n fallbackLocale: false,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n select:\n !fastMode || typeof badgesLinks?.liveURL === 'function'\n ? undefined\n : {\n id: true,\n _status: true,\n ...(badgesLinks?.liveURL ? { [breadcrumbsFieldSlug]: true } : {}),\n },\n user,\n where: {\n id: {\n in: docIDs,\n },\n },\n } as never)\n : { docs }\n\n const currentByID = new Map<string, PageTreeSourceDoc>(\n currentResult.docs.map((doc: PageTreeSourceDoc) => [String(doc.id), doc]),\n )\n const displayDocs = withPageTreeDisplayStatuses({\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\n draftDocs: docs,\n })\n const token = badgesLinks && collectionConfig.admin.preview ? extractJWT(req) : null\n\n return Promise.all(\n displayDocs.map(async (doc) => {\n const cleanDoc = { ...doc }\n delete cleanDoc.__pageTreeStatusLinks\n const links = await resolvePageTreeBadgeLinks({\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n draftDoc: cleanDoc,\n publishedDoc: currentByID.get(String(doc.id)),\n req,\n token,\n })\n return { ...cleanDoc, __pageTreeStatusLinks: links }\n }),\n )\n}\n\nasync function getListClientConfig({\n collectionSlug,\n i18n,\n payload,\n req,\n user,\n}: {\n collectionSlug: string\n i18n: unknown\n payload: any\n req: any\n user: unknown\n}): Promise<{\n clientCollectionConfig: any\n clientConfig: any\n}> {\n const clientConfig = getClientConfig({\n config: payload.config,\n i18n: i18n as never,\n importMap: payload.importMap,\n user: (user ?? true) as never,\n } as never)\n\n await applyLocaleFiltering({\n clientConfig,\n config: payload.config,\n req,\n } as never)\n\n const clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n if (!clientCollectionConfig) {\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\n }\n\n return {\n clientCollectionConfig,\n clientConfig,\n }\n}\n\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\n\n if (!pageTreeConfig) {\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\n }\n\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\n }\n\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\n const defaultSort = getDefaultSort(props.collectionConfig)\n const effectiveSort = getEffectiveTreeSort({\n defaultSort,\n orderableFieldName,\n sort: normalizeSort(query.sort),\n })\n const effectiveQuery = {\n ...query,\n sort: effectiveSort,\n }\n const locale = props.locale?.code\n const requestHeaders = await headers()\n const host =\n requestHeaders.get('x-forwarded-host')?.split(',')[0]?.trim() ||\n requestHeaders.get('host') ||\n 'localhost'\n const protocol =\n requestHeaders.get('x-forwarded-proto')?.split(',')[0]?.trim() === 'https' ? 'https' : 'http'\n const requestURL = new URL(props.payload.config.serverURL || `${protocol}://${host}`)\n requestURL.pathname = `${props.payload.config.routes?.admin || '/admin'}/collections/${props.collectionSlug}`\n const req = await createLocalReq(\n {\n fallbackLocale: false,\n locale,\n req: {\n headers: requestHeaders,\n i18n: props.i18n,\n locale,\n payload: props.payload,\n query: effectiveQuery,\n url: requestURL.href,\n user: props.user,\n },\n user: props.user,\n },\n props.payload,\n )\n\n const baseFilter =\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\n const baseFilterConstraint = baseFilter\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\n : undefined\n const mergedWhere = combineWhereConstraints([\n mergeListSearchAndWhere({\n collectionConfig: props.collectionConfig,\n search: normalizeSearch(query.search),\n where: normalizeWhere(query.where),\n } as never),\n baseFilterConstraint ?? undefined,\n ])\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\n\n const fullResult = await props.payload.find({\n collection: props.collectionSlug,\n depth: 0,\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\n fallbackLocale: false,\n includeLockStatus: true,\n select:\n pageTreeConfig.fastMode && !pageTreeConfig.badgesLinks\n ? getPageTreeListSelect({\n columns: props.columnState,\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n orderableFieldName,\n sort: effectiveSort,\n })\n : undefined,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n sort: normalizeSort(query.sort) ?? defaultSort,\n user: props.user,\n where,\n } as never)\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\n collectionSlug: props.collectionSlug,\n i18n: props.i18n,\n payload: props.payload,\n req,\n user: props.user,\n })\n const statusLocales =\n pageTreeConfig.badges.locales &&\n props.collectionConfig.versions?.drafts?.localizeStatus &&\n clientConfig.localization\n ? clientConfig.localization.locales.map(({ code }: { code: string }) => code)\n : []\n const treeSourceDocs = statusLocales.length\n ? await withPageTreeLocaleStatuses({\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n fastMode: pageTreeConfig.fastMode,\n localeBadgeStatus: pageTreeConfig.localeBadgeStatus,\n localeBadgeVisibility: pageTreeConfig.localeBadgeVisibility,\n locales: statusLocales,\n payload: props.payload,\n req,\n })\n : await getDocsWithDisplayStatus({\n fastMode: pageTreeConfig.fastMode,\n badgesLinks: pageTreeConfig.badgesLinks,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n locale,\n payload: props.payload,\n req,\n user: props.user,\n })\n\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n sort: effectiveSort,\n })\n const orderedData: PaginatedDocs = {\n docs: orderedDocs,\n hasNextPage: false,\n hasPrevPage: false,\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\n nextPage: null,\n page: 1,\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\n prevPage: null,\n totalDocs: orderedDocs.length,\n totalPages: 1,\n }\n\n const columnPreferences: ColumnPreference[] = (\n props.columnState as Array<{\n accessor: string\n active: boolean\n }>\n ).map(({ accessor, active }) => ({\n accessor,\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\n }))\n const columns = getColumns({\n clientConfig,\n collectionConfig: clientCollectionConfig,\n collectionSlug: props.collectionSlug,\n columns: columnPreferences,\n i18n: props.i18n,\n permissions: props.permissions,\n } as never)\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\n const renderedTable = renderTable({\n clientCollectionConfig,\n clientConfig,\n collectionConfig: props.collectionConfig,\n columns,\n data: orderedData,\n enableRowSelections: Boolean(props.enableRowSelections),\n fieldPermissions,\n i18n: props.i18n,\n orderableFieldName: orderableFieldName ?? '',\n payload: props.payload,\n query: effectiveQuery,\n req,\n tableAppearance: 'default',\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n viewType: props.viewType,\n } as never)\n const clientProps: Omit<ListViewClientProps, 'columnState' | 'Table'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n beforeActions: props.beforeActions,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n collectionSlug: props.collectionSlug,\n Description: props.Description,\n disableBulkDelete: props.disableBulkDelete,\n disableBulkEdit: props.disableBulkEdit,\n disableQueryPresets: props.disableQueryPresets,\n enableRowSelections: props.enableRowSelections,\n hasCreatePermission: props.hasCreatePermission,\n hasDeletePermission: props.hasDeletePermission,\n hasTrashPermission: props.hasTrashPermission,\n listMenuItems: props.listMenuItems,\n listPreferences: props.listPreferences,\n newDocumentURL: props.newDocumentURL,\n preferenceKey: props.preferenceKey,\n queryPreset: props.queryPreset,\n queryPresetPermissions: props.queryPresetPermissions,\n renderedFilters: props.renderedFilters,\n resolvedFilterOptions: props.resolvedFilterOptions,\n viewType: props.viewType,\n }\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\n const badgesLinks = pageTreeConfig.badgesLinks ? { ...pageTreeConfig.badgesLinks } : undefined\n if (typeof badgesLinks?.liveURL === 'function') {\n delete badgesLinks.liveURL\n }\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n badgeConfig={pageTreeConfig.badges}\n badgesLinks={badgesLinks}\n canMoveDocs={canMoveDocs}\n columnState={renderedTable.columnState}\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\n orderableFieldName={orderableFieldName}\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\n query={{\n ...effectiveQuery,\n // ListQueryProvider syncs this back to the URL, so it must describe the\n // rendered columns in URL form, not the raw preference objects. Without\n // saved or URL columns it stays empty, like Payload's list view, so the\n // next query change doesn't pin the default columns into preferences.\n columns: query.columns ? transformColumnsToSearchParams(columnPreferences) : undefined,\n }}\n renderedRowIDs={orderedDocs.map((doc) => doc.__pageTreeID)}\n sourceDocs={treeSourceDocs}\n useAsTitle={props.collectionConfig.admin.useAsTitle}\n />\n )\n}\n\nexport default NestedDocsPageTreeListView\n"],"names":["getColumns","renderTable","getClientConfig","headers","createLocalReq","extractJWT","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","transformColumnsToSearchParams","React","resolvePageTreeBadgeLinks","getPageTreeListSelect","withPageTreeLocaleStatuses","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","PageTreeListViewClient","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","badgesLinks","breadcrumbsFieldSlug","collectionSlug","docs","fastMode","payload","user","docIDs","map","doc","id","currentResult","versions","drafts","find","collection","depth","draft","fallbackLocale","overrideAccess","pagination","select","liveURL","_status","in","currentByID","Map","String","displayDocs","currentDocs","draftDocs","token","admin","preview","Promise","all","cleanDoc","__pageTreeStatusLinks","links","draftDoc","publishedDoc","get","getListClientConfig","i18n","clientConfig","config","importMap","clientCollectionConfig","collections","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","requestHeaders","host","split","trim","protocol","requestURL","URL","serverURL","pathname","routes","url","href","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","includeLockStatus","columns","columnState","parentFieldSlug","statusLocales","badges","locales","localizeStatus","localization","treeSourceDocs","localeBadgeStatus","localeBadgeVisibility","orderedDocs","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","accessor","active","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","beforeActions","BeforeList","BeforeListTable","Description","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","badgeConfig","homeIndicatorEnabled","homeIndicator","enabled","renderedRowIDs","__pageTreeID","sourceDocs"],"mappings":"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"}
|
|
@@ -34,9 +34,15 @@ const childErrors = new WeakMap();
|
|
|
34
34
|
return property === 'update' ? update : Reflect.get(target, property, receiver);
|
|
35
35
|
}
|
|
36
36
|
});
|
|
37
|
+
// REST and admin requests are real Request objects, whose getters and
|
|
38
|
+
// methods throw "Illegal invocation" unless called on the Request itself.
|
|
37
39
|
const req = new Proxy(args.req, {
|
|
38
|
-
get (target, property
|
|
39
|
-
|
|
40
|
+
get (target, property) {
|
|
41
|
+
if (property === 'payload') {
|
|
42
|
+
return payload;
|
|
43
|
+
}
|
|
44
|
+
const value = Reflect.get(target, property);
|
|
45
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
40
46
|
}
|
|
41
47
|
});
|
|
42
48
|
scopedRequests.add(req);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/childValidationErrors.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, Payload, PayloadRequest } from 'payload'\n\nimport { APIError, ValidationError } from 'payload'\n\nconst nestedDocsError = 'Could not publish or save changes: One or more children are invalid.'\nconst scopedRequests = new WeakSet<PayloadRequest>()\nconst childErrors = new WeakMap<ValidationError, string>()\n\n/**\n * Nested Docs catches child validation failures and replaces their details with\n * a generic APIError. Observe only this hook's Local API calls, leaving the\n * shared Payload instance and the original transaction-bearing request intact.\n */\nexport function withChildValidationErrors(\n hook: CollectionAfterChangeHook,\n collectionSlug: string,\n titleField: string,\n): CollectionAfterChangeHook {\n return async (args) => {\n let childError: undefined | ValidationError\n const nested = scopedRequests.has(args.req)\n const update = (async (options: Parameters<Payload['update']>[0]) => {\n try {\n return await args.req.payload.update(options)\n } catch (error) {\n if (\n error instanceof ValidationError &&\n error.data.errors.length &&\n options.collection === collectionSlug &&\n options.id != null &&\n String(options.id) !== String(args.doc.id)\n ) {\n childError = error\n if (!childErrors.has(error)) {\n // Older Nested Docs versions pass populateBreadcrumbs' promise.\n const data = await Promise.resolve(options.data)\n const title = data?.[titleField]\n const name = typeof title === 'string' && title.trim() ? ` \"${title}\"` : ''\n const locale = options.locale ?? args.req.locale\n const fields = error.data.errors\n .map(\n (field) =>\n `${typeof field.label === 'string' ? field.label : field.path}: ${field.message}`,\n )\n .join('\\n')\n childErrors.set(\n error,\n `Could not publish or save changes: child page${name} (ID: ${String(options.id)}${locale ? `, locale: ${locale}` : ''}) is invalid.\\n${fields}`,\n )\n }\n }\n throw error\n }\n }) as Payload['update']\n const payload = new Proxy(args.req.payload, {\n get(target, property, receiver) {\n return property === 'update' ? update : Reflect.get(target, property, receiver)\n },\n })\n const req = new Proxy(args.req, {\n get(target, property
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/childValidationErrors.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, Payload, PayloadRequest } from 'payload'\n\nimport { APIError, ValidationError } from 'payload'\n\nconst nestedDocsError = 'Could not publish or save changes: One or more children are invalid.'\nconst scopedRequests = new WeakSet<PayloadRequest>()\nconst childErrors = new WeakMap<ValidationError, string>()\n\n/**\n * Nested Docs catches child validation failures and replaces their details with\n * a generic APIError. Observe only this hook's Local API calls, leaving the\n * shared Payload instance and the original transaction-bearing request intact.\n */\nexport function withChildValidationErrors(\n hook: CollectionAfterChangeHook,\n collectionSlug: string,\n titleField: string,\n): CollectionAfterChangeHook {\n return async (args) => {\n let childError: undefined | ValidationError\n const nested = scopedRequests.has(args.req)\n const update = (async (options: Parameters<Payload['update']>[0]) => {\n try {\n return await args.req.payload.update(options)\n } catch (error) {\n if (\n error instanceof ValidationError &&\n error.data.errors.length &&\n options.collection === collectionSlug &&\n options.id != null &&\n String(options.id) !== String(args.doc.id)\n ) {\n childError = error\n if (!childErrors.has(error)) {\n // Older Nested Docs versions pass populateBreadcrumbs' promise.\n const data = await Promise.resolve(options.data)\n const title = data?.[titleField]\n const name = typeof title === 'string' && title.trim() ? ` \"${title}\"` : ''\n const locale = options.locale ?? args.req.locale\n const fields = error.data.errors\n .map(\n (field) =>\n `${typeof field.label === 'string' ? field.label : field.path}: ${field.message}`,\n )\n .join('\\n')\n childErrors.set(\n error,\n `Could not publish or save changes: child page${name} (ID: ${String(options.id)}${locale ? `, locale: ${locale}` : ''}) is invalid.\\n${fields}`,\n )\n }\n }\n throw error\n }\n }) as Payload['update']\n const payload = new Proxy(args.req.payload, {\n get(target, property, receiver) {\n return property === 'update' ? update : Reflect.get(target, property, receiver)\n },\n })\n // REST and admin requests are real Request objects, whose getters and\n // methods throw \"Illegal invocation\" unless called on the Request itself.\n const req = new Proxy(args.req, {\n get(target, property) {\n if (property === 'payload') {\n return payload\n }\n const value: unknown = Reflect.get(target, property)\n return typeof value === 'function' ? value.bind(target) : value\n },\n })\n scopedRequests.add(req)\n try {\n return await hook({ ...args, req })\n } catch (error) {\n if (!nested && error instanceof ValidationError) {\n const message = childErrors.get(error)\n if (message) {\n throw new APIError(message, 400)\n }\n }\n if (childError && error instanceof Error && error.message === nestedDocsError) {\n // Ancestor Nested Docs hooks only propagate ValidationErrors. Convert\n // at the outermost hook so child paths never mark the parent's fields.\n if (nested) {\n throw childError\n }\n throw new APIError(childErrors.get(childError)!, 400)\n }\n throw error\n } finally {\n scopedRequests.delete(req)\n }\n }\n}\n"],"names":["APIError","ValidationError","nestedDocsError","scopedRequests","WeakSet","childErrors","WeakMap","withChildValidationErrors","hook","collectionSlug","titleField","args","childError","nested","has","req","update","options","payload","error","data","errors","length","collection","id","String","doc","Promise","resolve","title","name","trim","locale","fields","map","field","label","path","message","join","set","Proxy","get","target","property","receiver","Reflect","value","bind","add","Error","delete"],"mappings":"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"}
|