payload-nested-docs-page-tree 1.2.3 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +136 -47
- package/dist/components/PageTreeContext.d.ts +13 -1
- package/dist/components/PageTreeContext.js +11 -1
- package/dist/components/PageTreeContext.js.map +1 -1
- package/dist/components/PageTreeListView.client.d.ts +3 -4
- package/dist/components/PageTreeListView.client.js +645 -381
- package/dist/components/PageTreeListView.client.js.map +1 -1
- package/dist/components/PageTreeListView.module.css +90 -67
- package/dist/components/PageTreeListView.server.js +18 -28
- package/dist/components/PageTreeListView.server.js.map +1 -1
- package/dist/components/PageTreeTitleCell.js +80 -18
- package/dist/components/PageTreeTitleCell.js.map +1 -1
- package/dist/endpoints/createMovePageEndpoint.d.ts +2 -0
- package/dist/endpoints/createMovePageEndpoint.js +166 -123
- package/dist/endpoints/createMovePageEndpoint.js.map +1 -1
- package/dist/endpoints/createReorderPageEndpoint.d.ts +8 -0
- package/dist/endpoints/createReorderPageEndpoint.js +703 -0
- package/dist/endpoints/createReorderPageEndpoint.js.map +1 -0
- package/dist/endpoints/shared.d.ts +40 -0
- package/dist/endpoints/shared.js +93 -0
- package/dist/endpoints/shared.js.map +1 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/rsc.js.map +1 -1
- package/dist/index.js +105 -26
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/dist/utilities/badgeConfig.js.map +1 -1
- package/dist/utilities/diagnostics.d.ts +42 -0
- package/dist/utilities/diagnostics.js +83 -0
- package/dist/utilities/diagnostics.js.map +1 -0
- package/dist/utilities/dropTargets.d.ts +2 -2
- package/dist/utilities/dropTargets.js +9 -7
- package/dist/utilities/dropTargets.js.map +1 -1
- package/dist/utilities/pageTree.js +4 -6
- package/dist/utilities/pageTree.js.map +1 -1
- package/dist/utilities/pageTreeCollision.d.ts +6 -0
- package/dist/utilities/pageTreeCollision.js +39 -4
- package/dist/utilities/pageTreeCollision.js.map +1 -1
- package/dist/utilities/pageTreeConfig.js.map +1 -1
- package/dist/utilities/status.d.ts +1 -1
- package/dist/utilities/status.js +7 -3
- package/dist/utilities/status.js.map +1 -1
- package/package.json +13 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeListView.client.tsx"],"sourcesContent":["'use client'\r\n\r\nimport type { Column, ListQuery, ListViewClientProps, PaginatedDocs } from 'payload'\r\n\r\nimport {\r\n DndContext,\r\n type DragEndEvent,\r\n type DragOverEvent,\r\n DragOverlay,\r\n type DragStartEvent,\r\n PointerSensor,\r\n useDroppable,\r\n useSensor,\r\n useSensors,\r\n} from '@dnd-kit/core'\r\nimport {\r\n DefaultListView,\r\n ListQueryProvider,\r\n SelectAll,\r\n SelectRow,\r\n SortHeader,\r\n toast,\r\n useConfig,\r\n useLocale,\r\n useTranslation,\r\n} from '@payloadcms/ui'\r\nimport { useRouter, useSearchParams } from 'next/navigation'\r\nimport React from 'react'\r\n\r\nimport {\n pageTreeMoveRequestHeader,\n pageTreeMoveRequestHeaderValue,\n type NestedDocsPageTreePluginResolvedBadgeConfig,\n type PageTreeSourceDoc,\n} from '../types.js'\n\r\nimport {\r\n buildInsertDropTargets,\r\n getDropTargetParentDoc,\r\n getOrderPlacementFromDropTarget,\r\n type PageTreeDropTarget,\r\n type PageTreeOrderPlacement,\r\n} from '../utilities/dropTargets.js'\r\nimport {\r\n CANCEL_DRAG_MESSAGE,\r\n getDropValidation,\r\n type PageTreeDropValidation,\r\n} from '../utilities/moveValidation.js'\r\nimport {\r\n buildDocSlugPath,\r\n buildPageTreeDocs,\r\n buildProspectiveDocSlugPath,\r\n getDocDisplayLabel,\r\n getVisibleTreeDocs,\r\n type PageTreeDoc,\r\n} from '../utilities/pageTree.js'\r\nimport { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js'\r\nimport {\r\n getPageTreeBadgeColor,\r\n getPageTreeBadgeLabel,\r\n getPageTreeDisplayStatus,\r\n type PageTreeDisplayStatus,\r\n} from '../utilities/status.js'\r\nimport { PageTreeProvider } from './PageTreeContext.js'\r\nimport styles from './PageTreeListView.module.css'\r\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\r\n\r\ntype PageTreeListViewClientOwnProps = {\r\n allDocs: PageTreeDoc[]\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n canMoveDocs: boolean\r\n columnState: Column[]\r\n homeIndicatorEnabled: boolean\r\n orderableFieldName?: string\r\n parentFieldSlug: string\r\n query: ListQuery\r\n sourceDocs: PageTreeSourceDoc[]\r\n useAsTitle: string\r\n}\r\n\r\ntype PageTreeListViewClientProps = Omit<ListViewClientProps, 'columnState' | 'Table'> &\r\n PageTreeListViewClientOwnProps\r\n\r\ntype SelectableRowData = React.ComponentProps<typeof SelectRow>['rowData']\r\ntype PageTreeDragData = {\r\n dragType?: 'move'\r\n rowID?: string\r\n}\r\ntype ReorderDirection = 'greater' | 'less'\r\n\r\nconst MANUAL_ORDER_COLUMN_ACCESSOR = '_dragHandle'\r\nconst SILENT_MOVE_MESSAGES = new Set([CANCEL_DRAG_MESSAGE])\r\n\r\nfunction getRowDropID(rowID: string): string {\r\n return `page-drop:${rowID}`\r\n}\r\n\r\nfunction getPageTreeDragData(value: unknown): PageTreeDragData {\r\n return value && typeof value === 'object' ? (value as PageTreeDragData) : {}\r\n}\r\n\r\nfunction getPayloadDocID(doc: PageTreeDoc): number | string | undefined {\r\n return typeof doc.id === 'number' || typeof doc.id === 'string' ? doc.id : undefined\r\n}\r\n\r\nfunction getManualOrderDropValidation(args: {\r\n activeDoc: PageTreeDoc\r\n targetDoc?: PageTreeDoc\r\n}): PageTreeDropValidation {\r\n const { activeDoc, targetDoc } = args\r\n\r\n if (!targetDoc) {\r\n return {\r\n isValid: true,\r\n parentID: null,\r\n }\r\n }\r\n\r\n if (targetDoc.__pageTreeID === activeDoc.__pageTreeID) {\r\n return {\r\n isValid: false,\r\n message: CANCEL_DRAG_MESSAGE,\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n }\r\n\r\n if (targetDoc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)) {\r\n return {\r\n isValid: false,\r\n message: 'A document cannot be moved under one of its descendants.',\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n }\r\n\r\n return {\r\n isValid: true,\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n}\r\n\r\nfunction getDropValidationForMode(args: {\r\n activeDoc: PageTreeDoc\r\n allowSameParent: boolean\r\n targetDoc?: PageTreeDoc\r\n}): PageTreeDropValidation {\r\n const { activeDoc, allowSameParent, targetDoc } = args\r\n\r\n if (allowSameParent) {\r\n return getManualOrderDropValidation({\r\n activeDoc,\r\n targetDoc,\r\n })\r\n }\r\n\r\n return getDropValidation({\r\n activeDoc,\r\n targetDoc,\r\n })\r\n}\r\n\r\nfunction getCurrentOrderPlacement(args: {\r\n activeDoc: PageTreeDoc\r\n docs: PageTreeDoc[]\r\n}): PageTreeOrderPlacement {\r\n const { activeDoc, docs } = args\r\n const activeIndex = docs.findIndex((doc) => doc.__pageTreeID === activeDoc.__pageTreeID)\r\n const movingSubtreeIDs = new Set(\r\n docs\r\n .filter(\r\n (doc) =>\r\n doc.__pageTreeID === activeDoc.__pageTreeID ||\r\n doc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID),\r\n )\r\n .map((doc) => doc.__pageTreeID),\r\n )\r\n const siblingIsNotMoving = (doc: PageTreeDoc) =>\r\n doc.__pageTreeParentID === activeDoc.__pageTreeParentID &&\r\n !movingSubtreeIDs.has(doc.__pageTreeID)\r\n\r\n if (activeIndex < 0) {\r\n return {\r\n nextSiblingID: null,\r\n parentID: activeDoc.__pageTreeParentID,\r\n previousSiblingID: null,\r\n }\r\n }\r\n\r\n return {\r\n nextSiblingID: docs.slice(activeIndex + 1).find(siblingIsNotMoving)?.__pageTreeID ?? null,\r\n parentID: activeDoc.__pageTreeParentID,\r\n previousSiblingID:\r\n docs.slice(0, activeIndex).filter(siblingIsNotMoving).at(-1)?.__pageTreeID ?? null,\r\n }\r\n}\r\n\r\nfunction orderPlacementHasChanged(\r\n currentPlacement: PageTreeOrderPlacement,\r\n nextPlacement: PageTreeOrderPlacement,\r\n): boolean {\r\n return (\r\n currentPlacement.parentID !== nextPlacement.parentID ||\r\n currentPlacement.previousSiblingID !== nextPlacement.previousSiblingID ||\r\n currentPlacement.nextSiblingID !== nextPlacement.nextSiblingID\r\n )\r\n}\r\n\r\nfunction getReorderTargetFromPlacement(args: {\r\n currentSort?: string\r\n docsByID: ReadonlyMap<string, PageTreeDoc>\r\n orderableFieldName: string\r\n placement: PageTreeOrderPlacement\r\n}): {\r\n newKeyWillBe: ReorderDirection\r\n targetDoc: PageTreeDoc\r\n} | null {\r\n const { currentSort, docsByID, orderableFieldName, placement } = args\r\n const targetDocID = placement.previousSiblingID ?? placement.nextSiblingID\r\n\r\n if (!targetDocID) {\r\n return null\r\n }\r\n\r\n const targetDoc = docsByID.get(targetDocID)\r\n\r\n if (!targetDoc) {\r\n return null\r\n }\r\n\r\n return {\r\n newKeyWillBe:\r\n (placement.previousSiblingID !== null && currentSort === orderableFieldName) ||\r\n (placement.previousSiblingID === null && currentSort === `-${orderableFieldName}`)\r\n ? 'greater'\r\n : 'less',\r\n targetDoc,\r\n }\r\n}\r\n\r\nfunction buildPaginatedData(\r\n docs: PageTreeDoc[],\r\n limit: number,\r\n requestedPage: number,\r\n): PaginatedDocs {\r\n const totalDocs = docs.length\r\n const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1\r\n const page = Math.min(Math.max(requestedPage, 1), totalPages)\r\n const startIndex = (page - 1) * limit\r\n const pageDocs = docs.slice(startIndex, startIndex + limit)\r\n\r\n return {\r\n docs: pageDocs,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n limit,\r\n nextPage: page < totalPages ? page + 1 : null,\r\n page,\r\n pagingCounter: totalDocs === 0 ? 0 : startIndex + 1,\r\n prevPage: page > 1 ? page - 1 : null,\r\n totalDocs,\r\n totalPages,\r\n }\r\n}\r\n\r\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\r\n if (Array.isArray(value)) {\r\n const sortValues = value.filter((entry) => typeof entry === 'string' && entry.length > 0)\r\n return sortValues.length > 0 ? sortValues.join(',') : undefined\r\n }\r\n\r\n return typeof value === 'string' && value.length > 0 ? value : undefined\r\n}\r\n\r\nfunction normalizePositiveInt(value: null | string, fallback: number): number {\r\n if (typeof value !== 'string') {\r\n return fallback\r\n }\r\n\r\n const parsedValue = Number.parseInt(value, 10)\r\n return Number.isNaN(parsedValue) || parsedValue <= 0 ? fallback : parsedValue\r\n}\r\n\r\nfunction normalizePageTreeColumnState(columnState: Column[], useAsTitle: string): Column[] {\r\n return columnState\r\n .filter((column) => column.accessor !== MANUAL_ORDER_COLUMN_ACCESSOR)\r\n .map((column) =>\r\n column.accessor === useAsTitle\r\n ? {\r\n ...column,\r\n active: true,\r\n }\r\n : column,\r\n )\r\n}\r\n\r\nfunction sliceColumnState(\r\n columnState: Column[],\r\n docs: PageTreeDoc[],\r\n renderedCellIndexByDocID: ReadonlyMap<string, number>,\r\n): Column[] {\r\n return columnState.map((column) => ({\r\n ...column,\r\n renderedCells: docs.map((doc) => {\r\n const renderedCellIndex =\r\n renderedCellIndexByDocID.get(doc.__pageTreeID) ?? doc.__pageTreeOrderIndex\r\n\r\n return column.renderedCells?.[renderedCellIndex] ?? null\r\n }),\r\n }))\r\n}\r\n\r\nfunction getSelectableRowData(doc: PageTreeDoc): SelectableRowData {\r\n const record = doc as Record<string, unknown>\r\n\r\n return {\r\n id: String(doc.id ?? doc.__pageTreeID),\r\n _isLocked: Boolean(record._isLocked),\r\n _userEditing: record._userEditing as SelectableRowData['_userEditing'],\r\n }\r\n}\r\n\r\nfunction shouldSilenceMoveMessage(message?: string): boolean {\r\n return typeof message === 'string' && SILENT_MOVE_MESSAGES.has(message)\r\n}\r\n\r\nfunction getStatusClassName(\r\n status: PageTreeDisplayStatus,\r\n): 'changed' | 'draft' | 'published' | 'unknown' {\r\n if (status === 'changed' || status === 'draft' || status === 'published') {\r\n return status\r\n }\r\n\r\n return 'unknown'\r\n}\r\n\r\nfunction renderStatusBadge(args: {\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n doc: PageTreeDoc\r\n index: number\r\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\r\n}): React.ReactNode {\r\n const { badgeConfig, doc, index, t } = args\r\n const status = getPageTreeDisplayStatus(doc)\r\n const customColor = getPageTreeBadgeColor({\r\n badgeColors: badgeConfig.colors,\r\n status,\r\n })\r\n const statusClass = getStatusClassName(status)\r\n const style = customColor\r\n ? ({ '--page-tree-badge-base': customColor } as React.CSSProperties)\r\n : undefined\r\n\r\n return (\r\n <span\r\n className={[\r\n 'pages-hierarchy-status-badge',\r\n `pages-hierarchy-status-badge--${statusClass}`,\r\n ].join(' ')}\r\n data-custom-color={customColor ? 'true' : undefined}\r\n key={doc.__pageTreeID ?? index}\r\n style={style}\r\n >\r\n {getPageTreeBadgeLabel({\r\n badgeLabels: badgeConfig.labels,\r\n status,\r\n t,\r\n })}\r\n </span>\r\n )\r\n}\r\n\r\nfunction createManualOrderColumn(docs: PageTreeDoc[]): Column {\r\n return {\r\n accessor: MANUAL_ORDER_COLUMN_ACCESSOR,\r\n active: true,\r\n field: { hidden: true } as Column['field'],\r\n Heading: <SortHeader />,\r\n renderedCells: docs.map(() => null),\r\n }\r\n}\r\n\r\nfunction insertManualOrderColumn(columns: Column[], orderColumn: Column): Column[] {\r\n const selectColumnIndex = columns.findIndex((column) => column.accessor === '_select')\r\n const insertIndex = selectColumnIndex >= 0 ? selectColumnIndex + 1 : 0\r\n\r\n return [\r\n ...columns.slice(0, insertIndex),\r\n orderColumn,\r\n ...columns.slice(insertIndex),\r\n ]\r\n}\r\n\r\nfunction buildTableColumns(args: {\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n columnState: Column[]\r\n docs: PageTreeDoc[]\r\n enableRowSelections?: boolean\r\n homeIndicatorEnabled: boolean\r\n orderableFieldName?: string\r\n parentFieldSlug: string\r\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\r\n useAsTitle: string\r\n}): Column[] {\r\n const {\r\n badgeConfig,\r\n columnState,\r\n docs,\r\n enableRowSelections,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n t,\r\n useAsTitle,\r\n } = args\r\n const columnsToUse = columnState.map((column) => {\r\n if (column.accessor === useAsTitle) {\r\n return {\r\n ...column,\r\n active: true,\r\n renderedCells: docs.map((doc, index) => (\r\n <PageTreeTitleCell\r\n doc={doc}\r\n homeIndicatorEnabled={homeIndicatorEnabled}\r\n key={doc.__pageTreeID ?? index}\r\n >\r\n {column.renderedCells?.[index] ?? getDocDisplayLabel(doc)}\r\n </PageTreeTitleCell>\r\n )),\r\n }\r\n }\r\n\r\n if (column.accessor === '_status') {\r\n return {\r\n ...column,\r\n renderedCells: docs.map((doc, index) =>\r\n renderStatusBadge({\r\n badgeConfig,\r\n doc,\r\n index,\r\n t,\r\n }),\r\n ),\r\n }\r\n }\r\n\r\n if (column.accessor === parentFieldSlug) {\r\n return {\r\n ...column,\r\n renderedCells: docs.map((doc, index) =>\r\n doc.__pageTreeParentID !== null ? (\r\n column.renderedCells?.[index] ?? null\r\n ) : (\r\n <span className=\"pages-hierarchy-empty-cell\" key={doc.__pageTreeID ?? index}>\r\n -\r\n </span>\r\n ),\r\n ),\r\n }\r\n }\r\n\r\n return column\r\n })\r\n\r\n if (enableRowSelections) {\r\n columnsToUse.unshift({\r\n accessor: '_select',\r\n active: true,\r\n field: { hidden: true } as Column['field'],\r\n Heading: <SelectAll />,\r\n renderedCells: docs.map((doc, index) => (\r\n <SelectRow key={doc.__pageTreeID ?? index} rowData={getSelectableRowData(doc)} />\r\n )),\r\n })\r\n }\r\n\r\n if (\r\n orderableFieldName &&\r\n !columnsToUse.some((column) => column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR)\r\n ) {\r\n return insertManualOrderColumn(columnsToUse, createManualOrderColumn(docs))\r\n }\r\n\r\n return columnsToUse\r\n}\r\n\r\nfunction HierarchyInsertRow({\r\n activeColumnsCount,\r\n activeDragRowID,\r\n dropTarget,\r\n dropValidation,\r\n isMovePending,\r\n}: {\r\n activeColumnsCount: number\r\n activeDragRowID: null | string\r\n dropTarget: Extract<PageTreeDropTarget, { dropType: 'insert' }>\r\n dropValidation?: PageTreeDropValidation\r\n isMovePending: boolean\r\n}) {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: dropTarget.dropID,\r\n data: dropTarget,\r\n disabled: isMovePending,\r\n })\r\n const hasActiveDrag = Boolean(activeDragRowID)\r\n\r\n return (\r\n <tr\r\n className=\"pages-hierarchy-insert-row\"\r\n data-drag-over={isOver ? 'true' : 'false'}\r\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\r\n data-page-tree-insert=\"true\"\r\n >\r\n <td colSpan={activeColumnsCount}>\r\n <div\r\n className=\"pages-hierarchy-insert-row__target\"\r\n data-insert-depth={dropTarget.depth}\r\n ref={setNodeRef}\r\n />\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nfunction HierarchyTableRow({\r\n activeColumns,\r\n activeDragRowID,\r\n doc,\r\n dropValidation,\r\n insertAfterDropID,\r\n insertBeforeDropID,\r\n isMovePending,\r\n rowIndex,\r\n titleCellAccessor,\r\n}: {\r\n activeColumns: Column[]\r\n activeDragRowID: null | string\r\n doc: PageTreeDoc\r\n dropValidation?: PageTreeDropValidation\r\n insertAfterDropID: string\r\n insertBeforeDropID: string\r\n isMovePending: boolean\r\n rowIndex: number\r\n titleCellAccessor: string\r\n}) {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: getRowDropID(doc.__pageTreeID),\r\n data: {\r\n dropType: 'row',\r\n insertAfterDropID,\r\n insertBeforeDropID,\r\n rowID: doc.__pageTreeID,\r\n } satisfies Extract<PageTreeDropTarget, { dropType: 'row' }>,\r\n disabled: isMovePending,\r\n })\r\n const hasActiveDrag = Boolean(activeDragRowID)\r\n const isActiveDragRow = activeDragRowID === doc.__pageTreeID\r\n\r\n return (\r\n <tr\r\n className={`row-${rowIndex + 1}`}\r\n data-drag-over={isOver ? 'true' : 'false'}\r\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\r\n data-id={doc.id}\r\n data-is-drag-source={isActiveDragRow ? 'true' : 'false'}\r\n data-page-tree-row=\"true\"\r\n ref={setNodeRef}\r\n >\r\n {activeColumns.map((column, columnIndex) => {\r\n const { accessor } = column\r\n\r\n return (\r\n <td\r\n className={`cell-${accessor.replace(/\\./g, '__')}`}\r\n data-page-tree-manual-order-cell={\r\n accessor === MANUAL_ORDER_COLUMN_ACCESSOR ? 'true' : undefined\r\n }\r\n data-page-tree-title-cell={accessor === titleCellAccessor ? 'true' : undefined}\r\n key={columnIndex}\r\n >\r\n {column.renderedCells?.[rowIndex] ?? null}\r\n </td>\r\n )\r\n })}\r\n </tr>\r\n )\r\n}\r\n\r\nfunction HierarchyTable({\r\n activeDragRowID,\r\n allDocsByID,\r\n allowSameParentDrops,\r\n columns,\r\n data,\r\n isMovePending,\r\n titleCellAccessor,\r\n}: {\r\n activeDragRowID: null | string\r\n allDocsByID: ReadonlyMap<string, PageTreeDoc>\r\n allowSameParentDrops: boolean\r\n columns: Column[]\r\n data: PageTreeDoc[]\r\n isMovePending: boolean\r\n titleCellAccessor: string\r\n}) {\r\n const activeColumns = React.useMemo(\r\n () => columns.filter((column) => column?.active),\r\n [columns],\r\n )\r\n const hasManualOrderColumn = React.useMemo(\r\n () => activeColumns.some((column) => column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR),\r\n [activeColumns],\r\n )\r\n const insertDropTargets = React.useMemo(() => buildInsertDropTargets(data), [data])\r\n const activeDoc = activeDragRowID ? allDocsByID.get(activeDragRowID) ?? null : null\r\n const rowDropValidationByID = React.useMemo(() => {\r\n if (!activeDoc) {\r\n return new Map<string, PageTreeDropValidation>()\r\n }\r\n\r\n return new Map(\r\n data.map((doc) => [\r\n doc.__pageTreeID,\r\n getDropValidationForMode({\r\n activeDoc,\r\n allowSameParent: allowSameParentDrops,\r\n targetDoc: doc,\r\n }),\r\n ]),\r\n )\r\n }, [activeDoc, allowSameParentDrops, data])\r\n const insertDropValidationByID = React.useMemo(() => {\r\n if (!activeDoc) {\r\n return new Map<string, PageTreeDropValidation>()\r\n }\r\n\r\n return new Map(\r\n insertDropTargets.map((dropTarget) => [\r\n dropTarget.dropID,\r\n getDropValidationForMode({\r\n activeDoc,\r\n allowSameParent: allowSameParentDrops,\r\n targetDoc:\r\n dropTarget.parentID === null\r\n ? undefined\r\n : allDocsByID.get(dropTarget.parentID) ?? undefined,\r\n }),\r\n ]),\r\n )\r\n }, [activeDoc, allowSameParentDrops, allDocsByID, insertDropTargets])\r\n\r\n if (activeColumns.length === 0) {\r\n return <div>No columns selected</div>\r\n }\r\n\r\n return (\r\n <div\r\n className={[\r\n 'table-wrap pages-hierarchy-table',\r\n activeDoc ? 'pages-hierarchy-table--dragging' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n data-page-tree-orderable={hasManualOrderColumn ? 'true' : undefined}\r\n >\r\n <div className=\"table table--appearance-default\">\r\n <table cellPadding=\"0\" cellSpacing=\"0\">\r\n <thead>\r\n <tr>\r\n {activeColumns.map((column, index) => (\r\n <th\r\n data-page-tree-manual-order-cell={\r\n column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR ? 'true' : undefined\r\n }\r\n data-page-tree-title-cell={\r\n column.accessor === titleCellAccessor ? 'true' : undefined\r\n }\r\n id={`heading-${column.accessor.replace(/\\./g, '__')}`}\r\n key={index}\r\n >\r\n {column.Heading}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {insertDropTargets[0] ? (\r\n <HierarchyInsertRow\r\n activeColumnsCount={activeColumns.length}\r\n activeDragRowID={activeDragRowID}\r\n dropTarget={insertDropTargets[0]}\r\n dropValidation={insertDropValidationByID.get(insertDropTargets[0].dropID)}\r\n isMovePending={isMovePending}\r\n key={insertDropTargets[0].dropID}\r\n />\r\n ) : null}\r\n {data.map((doc, rowIndex) => (\r\n <React.Fragment key={doc.__pageTreeID}>\r\n <HierarchyTableRow\r\n activeColumns={activeColumns}\r\n activeDragRowID={activeDragRowID}\r\n doc={doc}\r\n dropValidation={rowDropValidationByID.get(doc.__pageTreeID)}\r\n insertAfterDropID={insertDropTargets[rowIndex + 1].dropID}\r\n insertBeforeDropID={insertDropTargets[rowIndex].dropID}\r\n isMovePending={isMovePending}\r\n rowIndex={rowIndex}\r\n titleCellAccessor={titleCellAccessor}\r\n />\r\n {insertDropTargets[rowIndex + 1] ? (\r\n <HierarchyInsertRow\r\n activeColumnsCount={activeColumns.length}\r\n activeDragRowID={activeDragRowID}\r\n dropTarget={insertDropTargets[rowIndex + 1]}\r\n dropValidation={insertDropValidationByID.get(\r\n insertDropTargets[rowIndex + 1].dropID,\r\n )}\r\n isMovePending={isMovePending}\r\n key={insertDropTargets[rowIndex + 1].dropID}\r\n />\r\n ) : null}\r\n </React.Fragment>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default function PageTreeListViewClient({\r\n allDocs,\r\n badgeConfig,\r\n canMoveDocs,\r\n columnState,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n query,\r\n sourceDocs,\r\n useAsTitle,\r\n ...props\r\n}: PageTreeListViewClientProps) {\r\n const router = useRouter()\r\n const searchParams = useSearchParams()\r\n const { config } = useConfig()\r\n const locale = useLocale()\r\n const { i18n } = useTranslation()\r\n const [activeDragRowID, setActiveDragRowID] = React.useState<null | string>(null)\r\n const [activeDropTarget, setActiveDropTarget] = React.useState<null | PageTreeDropTarget>(null)\r\n const [collapsedIDs, setCollapsedIDs] = React.useState<Set<string>>(() => new Set())\r\n const [localSourceDocs, setLocalSourceDocs] = React.useState(sourceDocs)\r\n const [pendingMoveRowID, setPendingMoveRowID] = React.useState<null | string>(null)\r\n\r\n React.useEffect(() => {\r\n setLocalSourceDocs(sourceDocs)\r\n }, [sourceDocs])\r\n\r\n const toggleRow = React.useCallback((rowID: string) => {\r\n setCollapsedIDs((currentState) => {\r\n const nextState = new Set(currentState)\r\n\r\n if (nextState.has(rowID)) {\r\n nextState.delete(rowID)\r\n } else {\r\n nextState.add(rowID)\r\n }\r\n\r\n return nextState\r\n })\r\n }, [])\r\n const currentSort = React.useMemo(() => {\r\n const searchParamSort = searchParams.getAll('sort')\r\n\r\n if (searchParamSort.length > 0) {\r\n return normalizeSort(searchParamSort)\r\n }\r\n\r\n return normalizeSort(query.sort as string | string[] | undefined)\r\n }, [query.sort, searchParams])\r\n const manualOrderIsActive = Boolean(\r\n orderableFieldName &&\r\n (currentSort === orderableFieldName || currentSort === `-${orderableFieldName}`),\r\n )\r\n const currentLimit = React.useMemo(\r\n () =>\r\n normalizePositiveInt(\r\n searchParams.get('limit'),\r\n typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10,\r\n ),\r\n [query.limit, searchParams],\r\n )\r\n const currentRequestedPage = React.useMemo(\r\n () =>\r\n normalizePositiveInt(\r\n searchParams.get('page'),\r\n typeof query.page === 'number' && query.page > 0 ? query.page : 1,\r\n ),\r\n [query.page, searchParams],\r\n )\r\n const liveAllDocs = React.useMemo(\r\n () =>\r\n buildPageTreeDocs(localSourceDocs, {\r\n parentFieldSlug,\r\n sort: currentSort,\r\n }),\r\n [currentSort, localSourceDocs, parentFieldSlug],\r\n )\r\n const collapseResetKey = React.useMemo(\r\n () => JSON.stringify([props.collectionSlug, props.viewType, searchParams.toString()]),\r\n [props.collectionSlug, props.viewType, searchParams],\r\n )\r\n const hierarchyValue = React.useMemo(\r\n () => ({\r\n activeDragRowID,\r\n canMoveDocs,\r\n collapsedIDs,\r\n pendingMoveRowID,\r\n toggleRow,\r\n }),\r\n [activeDragRowID, canMoveDocs, collapsedIDs, pendingMoveRowID, toggleRow],\r\n )\r\n\r\n React.useEffect(() => {\r\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n setCollapsedIDs(new Set())\r\n }, [collapseResetKey])\r\n\r\n const visibleDocs = React.useMemo(\r\n () => getVisibleTreeDocs(liveAllDocs, collapsedIDs),\r\n [liveAllDocs, collapsedIDs],\r\n )\r\n const paginatedData = React.useMemo(\r\n () => buildPaginatedData(visibleDocs, currentLimit, currentRequestedPage),\r\n [currentLimit, currentRequestedPage, visibleDocs],\r\n )\r\n const paginatedDocs = paginatedData.docs as PageTreeDoc[]\r\n const allDocsByID = React.useMemo(\r\n () => new Map(liveAllDocs.map((doc) => [doc.__pageTreeID, doc])),\r\n [liveAllDocs],\r\n )\r\n const paginatedDocsByID = React.useMemo(\r\n () => new Map(paginatedDocs.map((doc) => [doc.__pageTreeID, doc])),\r\n [paginatedDocs],\r\n )\r\n const renderedCellIndexByDocID = React.useMemo(\r\n () => new Map(allDocs.map((doc, index) => [doc.__pageTreeID, index])),\r\n [allDocs],\r\n )\r\n const normalizedColumnState = React.useMemo(\r\n () => normalizePageTreeColumnState(columnState, useAsTitle),\r\n [columnState, useAsTitle],\r\n )\r\n const paginatedColumnState = React.useMemo(\r\n () => sliceColumnState(normalizedColumnState, paginatedDocs, renderedCellIndexByDocID),\r\n [normalizedColumnState, paginatedDocs, renderedCellIndexByDocID],\r\n )\r\n const tableColumns = React.useMemo(\r\n () =>\r\n buildTableColumns({\r\n badgeConfig,\r\n columnState: paginatedColumnState,\r\n docs: paginatedDocs,\r\n enableRowSelections: props.enableRowSelections,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n t: i18n.t,\r\n useAsTitle,\r\n }),\r\n [\r\n paginatedColumnState,\r\n paginatedDocs,\r\n badgeConfig,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n props.enableRowSelections,\r\n i18n.t,\r\n useAsTitle,\r\n ],\r\n )\r\n const activeDragDoc = activeDragRowID ? paginatedDocsByID.get(activeDragRowID) ?? null : null\r\n const activeDragPreviewPath = React.useMemo(() => {\r\n if (!activeDragDoc) {\r\n return null\r\n }\r\n\r\n if (!activeDropTarget) {\r\n return buildDocSlugPath({\r\n doc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n })\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\r\n docsByID: allDocsByID,\r\n dropTarget: activeDropTarget,\r\n })\r\n const dropValidation = getDropValidationForMode({\r\n activeDoc: activeDragDoc,\r\n allowSameParent: manualOrderIsActive,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n return buildDocSlugPath({\r\n doc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n })\r\n }\r\n\r\n return buildProspectiveDocSlugPath({\r\n activeDoc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n }, [activeDragDoc, activeDropTarget, allDocsByID, manualOrderIsActive])\r\n const isMovePending = pendingMoveRowID !== null\r\n const sensors = useSensors(\r\n useSensor(PointerSensor, {\r\n activationConstraint: {\r\n distance: 4,\r\n },\r\n }),\r\n )\r\n const moveDocument = React.useCallback(\r\n async (args: { parentID: null | string; rowID: string }) => {\r\n const { parentID, rowID } = args\r\n const params = new URLSearchParams()\r\n\r\n if (locale?.code) {\r\n params.set('locale', locale.code)\r\n }\r\n\r\n const response = await fetch(\r\n `${config.routes.api}/${props.collectionSlug}/${encodeURIComponent(rowID)}/move${\r\n params.size > 0 ? `?${params.toString()}` : ''\r\n }`,\r\n {\r\n body: JSON.stringify({\r\n parentID,\r\n }),\r\n credentials: 'include',\r\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n [pageTreeMoveRequestHeader]: pageTreeMoveRequestHeaderValue,\n },\n method: 'POST',\n },\n )\r\n const result = (await response.json().catch(() => null)) as\r\n | {\r\n message?: string\r\n }\r\n | null\r\n\r\n if (!response.ok) {\r\n throw new Error(result?.message ?? 'Could not move document.')\r\n }\r\n\r\n return result\r\n },\r\n [config.routes.api, i18n.language, locale?.code, props.collectionSlug],\r\n )\r\n const reorderDocument = React.useCallback(\r\n async (args: {\r\n movedDocID: number | string\r\n newKeyWillBe: ReorderDirection\r\n targetDoc: PageTreeDoc\r\n }) => {\r\n const { movedDocID, newKeyWillBe, targetDoc } = args\r\n const targetID = getPayloadDocID(targetDoc)\r\n\r\n if (!orderableFieldName || targetID === undefined) {\r\n return undefined\r\n }\r\n\r\n const params = new URLSearchParams()\r\n\r\n if (locale?.code) {\r\n params.set('locale', locale.code)\r\n }\r\n\r\n const response = await fetch(\r\n `${config.routes.api}/reorder${params.size > 0 ? `?${params.toString()}` : ''}`,\r\n {\r\n body: JSON.stringify({\r\n collectionSlug: props.collectionSlug,\r\n docsToMove: [movedDocID],\r\n newKeyWillBe,\r\n orderableFieldName,\r\n target: {\r\n id: targetID,\r\n key: targetDoc[orderableFieldName],\r\n },\r\n }),\r\n credentials: 'include',\r\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n [pageTreeMoveRequestHeader]: pageTreeMoveRequestHeaderValue,\n },\n method: 'POST',\n },\n )\r\n const result = (await response.json().catch(() => null)) as\r\n | {\r\n message?: string\r\n orderValues?: unknown[]\r\n }\r\n | null\r\n\r\n if (response.status === 403) {\r\n throw new Error('You do not have permission to reorder these rows')\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n 'Failed to reorder. This can happen if you reorder several rows too quickly. Please try again.',\r\n )\r\n }\r\n\r\n if (result?.message === 'initial migration') {\r\n throw new Error(\r\n 'You have enabled \"orderable\" on a collection with existing documents and this is the first time you have sorted documents. We have run an automatic migration to add an initial order to the documents. Please refresh the page and try again.',\r\n )\r\n }\r\n\r\n return result?.orderValues?.[0]\r\n },\r\n [\r\n config.routes.api,\r\n i18n.language,\r\n locale?.code,\r\n orderableFieldName,\r\n props.collectionSlug,\r\n ],\r\n )\r\n const handleManualOrderMoveEnd = React.useCallback(\r\n async (args: {\r\n activeDoc: PageTreeDoc\r\n dropTarget: PageTreeDropTarget\r\n rowID: string\r\n }) => {\r\n const { activeDoc, dropTarget, rowID } = args\r\n\r\n if (!orderableFieldName) {\r\n return\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\r\n docsByID: allDocsByID,\r\n dropTarget,\r\n })\r\n const dropValidation = getManualOrderDropValidation({\r\n activeDoc,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\r\n toast.error(dropValidation.message ?? 'Could not move document.')\r\n }\r\n\r\n return\r\n }\r\n\r\n const placement = getOrderPlacementFromDropTarget({\r\n activeDoc,\r\n docs: paginatedDocs,\r\n docsByID: allDocsByID,\r\n dropTarget,\r\n })\r\n\r\n if (!placement) {\r\n return\r\n }\r\n\r\n const currentPlacement = getCurrentOrderPlacement({\r\n activeDoc,\r\n docs: paginatedDocs,\r\n })\r\n const parentChanged = activeDoc.__pageTreeParentID !== placement.parentID\r\n const orderChanged = orderPlacementHasChanged(currentPlacement, placement)\r\n const reorderTarget = orderChanged\r\n ? getReorderTargetFromPlacement({\r\n currentSort,\r\n docsByID: allDocsByID,\r\n orderableFieldName,\r\n placement,\r\n })\r\n : null\r\n\r\n if (!parentChanged && !reorderTarget) {\r\n return\r\n }\r\n\r\n const movedDocID = getPayloadDocID(activeDoc)\r\n\r\n if (movedDocID === undefined) {\r\n return\r\n }\r\n\r\n const parentDoc = placement.parentID ? allDocsByID.get(placement.parentID) : undefined\r\n const nextParentValue =\r\n placement.parentID === null\r\n ? null\r\n : parentDoc\r\n ? getPayloadDocID(parentDoc) ?? placement.parentID\r\n : placement.parentID\r\n let parentMoveSucceeded = false\r\n\r\n setPendingMoveRowID(rowID)\r\n\r\n try {\r\n if (parentChanged) {\r\n await moveDocument({\r\n parentID: placement.parentID,\r\n rowID,\r\n })\r\n parentMoveSucceeded = true\r\n }\r\n\r\n const nextOrderValue = reorderTarget\r\n ? await reorderDocument({\r\n movedDocID,\r\n newKeyWillBe: reorderTarget.newKeyWillBe,\r\n targetDoc: reorderTarget.targetDoc,\r\n })\r\n : undefined\r\n\r\n if (parentChanged || typeof nextOrderValue === 'string') {\r\n setLocalSourceDocs((currentDocs) =>\r\n currentDocs.map((doc) =>\r\n String(doc.id ?? '') === String(movedDocID)\r\n ? {\r\n ...doc,\r\n ...(parentChanged\r\n ? {\r\n [parentFieldSlug]: nextParentValue,\r\n }\r\n : {}),\r\n ...(typeof nextOrderValue === 'string'\r\n ? {\r\n [orderableFieldName]: nextOrderValue,\r\n }\r\n : {}),\r\n }\r\n : doc,\r\n ),\r\n )\r\n }\r\n\r\n if (parentChanged) {\r\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\r\n }\r\n\r\n React.startTransition(() => {\r\n router.refresh()\r\n })\r\n } catch (error) {\r\n const message =\r\n error instanceof Error && error.message ? error.message : 'Could not move document.'\r\n\r\n toast.error(\r\n parentMoveSucceeded\r\n ? `Moved \"${getDocDisplayLabel(activeDoc)}\", but could not update its manual order. ${message}`\r\n : message,\r\n )\r\n\r\n if (parentMoveSucceeded) {\r\n React.startTransition(() => {\r\n router.refresh()\r\n })\r\n }\r\n } finally {\r\n setPendingMoveRowID(null)\r\n }\r\n },\r\n [\r\n allDocsByID,\r\n currentSort,\r\n moveDocument,\r\n orderableFieldName,\r\n paginatedDocs,\r\n parentFieldSlug,\r\n reorderDocument,\r\n router,\r\n ],\r\n )\r\n const handleDragCancel = React.useCallback(() => {\r\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n }, [])\r\n const handleDragStart = React.useCallback(\r\n (event: DragStartEvent) => {\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n\r\n if (!canMoveDocs || isMovePending) {\r\n return\r\n }\r\n\r\n const rowID = dragData.rowID\r\n\r\n if (typeof rowID === 'string' && paginatedDocsByID.has(rowID)) {\r\n setActiveDragRowID(rowID)\r\n setActiveDropTarget(null)\r\n }\r\n },\r\n [canMoveDocs, isMovePending, paginatedDocsByID],\r\n )\r\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\r\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\r\n\r\n if (!overData) {\r\n setActiveDropTarget(null)\r\n return\r\n }\r\n\r\n if (overData.dropType === 'insert') {\r\n setActiveDropTarget(overData)\r\n return\r\n }\r\n\r\n if (overData.dropType === 'row') {\r\n setActiveDropTarget(overData)\r\n return\r\n }\r\n\r\n setActiveDropTarget(null)\r\n }, [])\r\n const handleDragEnd = React.useCallback(\r\n async (event: DragEndEvent) => {\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n\r\n const rowID = dragData.rowID\r\n const activeDoc = typeof rowID === 'string' ? paginatedDocsByID.get(rowID) ?? null : null\r\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\r\n\r\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n\r\n if (!rowID || !activeDoc || !overData) {\r\n return\r\n }\r\n\r\n if (manualOrderIsActive && orderableFieldName) {\r\n await handleManualOrderMoveEnd({\r\n activeDoc,\r\n dropTarget: overData,\r\n rowID,\r\n })\r\n return\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\r\n docsByID: allDocsByID,\r\n dropTarget: overData,\r\n })\r\n const dropValidation = getDropValidation({\r\n activeDoc,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\r\n toast.error(dropValidation.message ?? 'Could not move document.')\r\n }\r\n\r\n return\r\n }\r\n\r\n setPendingMoveRowID(rowID)\r\n\r\n try {\r\n await moveDocument({\r\n parentID: dropValidation.parentID,\r\n rowID,\r\n })\r\n\r\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\r\n React.startTransition(() => {\r\n router.refresh()\r\n })\r\n } catch (error) {\r\n const message =\r\n error instanceof Error && error.message ? error.message : 'Could not move document.'\r\n\r\n if (shouldSilenceMoveMessage(message)) {\r\n return\r\n }\r\n\r\n toast.error(message)\r\n } finally {\r\n setPendingMoveRowID(null)\r\n }\r\n },\r\n [\r\n allDocsByID,\r\n handleManualOrderMoveEnd,\r\n manualOrderIsActive,\r\n moveDocument,\r\n orderableFieldName,\r\n paginatedDocsByID,\r\n router,\r\n ],\r\n )\r\n const handleDragEndSync = React.useCallback(\r\n (event: DragEndEvent) => {\r\n void handleDragEnd(event)\r\n },\r\n [handleDragEnd],\r\n )\r\n\r\n const tableNode = React.useMemo(\r\n () => (\r\n <DndContext\r\n collisionDetection={pageTreeCollisionDetectionStrategy}\r\n onDragCancel={handleDragCancel}\r\n onDragEnd={handleDragEndSync}\r\n onDragOver={handleDragOver}\r\n onDragStart={handleDragStart}\r\n sensors={sensors}\r\n >\r\n <HierarchyTable\r\n activeDragRowID={activeDragRowID}\r\n allDocsByID={allDocsByID}\r\n allowSameParentDrops={manualOrderIsActive}\r\n columns={tableColumns}\r\n data={paginatedDocs}\r\n isMovePending={isMovePending}\r\n titleCellAccessor={useAsTitle}\r\n />\r\n <DragOverlay dropAnimation={null} style={{ cursor: 'grabbing' }}>\r\n {activeDragPreviewPath ? (\r\n <div className=\"pages-hierarchy-drag-overlay\">{activeDragPreviewPath}</div>\r\n ) : null}\r\n </DragOverlay>\r\n </DndContext>\r\n ),\r\n [\r\n activeDragPreviewPath,\r\n activeDragRowID,\r\n handleDragCancel,\r\n handleDragEndSync,\r\n handleDragOver,\r\n handleDragStart,\r\n isMovePending,\r\n allDocsByID,\r\n manualOrderIsActive,\r\n paginatedDocs,\r\n sensors,\r\n tableColumns,\r\n useAsTitle,\r\n ],\r\n )\r\n\r\n return (\r\n <div className={styles.root}>\r\n <PageTreeProvider value={hierarchyValue}>\r\n <ListQueryProvider\r\n collectionSlug={props.collectionSlug}\r\n data={paginatedData}\r\n modifySearchParams\r\n orderableFieldName={orderableFieldName}\r\n query={{\r\n ...query,\r\n limit: currentLimit,\r\n page: paginatedData.page,\r\n sort: currentSort,\r\n }}\r\n >\r\n <DefaultListView {...props} columnState={paginatedColumnState} Table={tableNode} />\r\n </ListQueryProvider>\r\n </PageTreeProvider>\r\n </div>\r\n )\r\n}\r\n"],"names":["DndContext","DragOverlay","PointerSensor","useDroppable","useSensor","useSensors","DefaultListView","ListQueryProvider","SelectAll","SelectRow","SortHeader","toast","useConfig","useLocale","useTranslation","useRouter","useSearchParams","React","pageTreeMoveRequestHeader","pageTreeMoveRequestHeaderValue","buildInsertDropTargets","getDropTargetParentDoc","getOrderPlacementFromDropTarget","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","getPageTreeBadgeColor","getPageTreeBadgeLabel","getPageTreeDisplayStatus","PageTreeProvider","styles","PageTreeTitleCell","MANUAL_ORDER_COLUMN_ACCESSOR","SILENT_MOVE_MESSAGES","Set","getRowDropID","rowID","getPageTreeDragData","value","getPayloadDocID","doc","id","undefined","getManualOrderDropValidation","args","activeDoc","targetDoc","isValid","parentID","__pageTreeID","message","__pageTreeAncestorIDs","includes","getDropValidationForMode","allowSameParent","getCurrentOrderPlacement","docs","activeIndex","findIndex","movingSubtreeIDs","filter","map","siblingIsNotMoving","__pageTreeParentID","has","nextSiblingID","previousSiblingID","slice","find","at","orderPlacementHasChanged","currentPlacement","nextPlacement","getReorderTargetFromPlacement","currentSort","docsByID","orderableFieldName","placement","targetDocID","get","newKeyWillBe","buildPaginatedData","limit","requestedPage","totalDocs","length","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","entry","join","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","normalizePageTreeColumnState","columnState","useAsTitle","column","accessor","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","renderedCellIndex","__pageTreeOrderIndex","getSelectableRowData","record","String","_isLocked","Boolean","_userEditing","shouldSilenceMoveMessage","getStatusClassName","status","renderStatusBadge","badgeConfig","index","t","customColor","badgeColors","colors","statusClass","style","span","className","data-custom-color","badgeLabels","labels","createManualOrderColumn","field","hidden","Heading","insertManualOrderColumn","columns","orderColumn","selectColumnIndex","insertIndex","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","columnsToUse","unshift","rowData","some","HierarchyInsertRow","activeColumnsCount","activeDragRowID","dropTarget","dropValidation","isMovePending","isOver","setNodeRef","dropID","data","disabled","hasActiveDrag","tr","data-drag-over","data-drop-valid","data-page-tree-insert","td","colSpan","div","data-insert-depth","depth","ref","HierarchyTableRow","activeColumns","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","dropType","isActiveDragRow","data-id","data-is-drag-source","data-page-tree-row","columnIndex","replace","data-page-tree-manual-order-cell","data-page-tree-title-cell","HierarchyTable","allDocsByID","allowSameParentDrops","useMemo","hasManualOrderColumn","insertDropTargets","rowDropValidationByID","Map","insertDropValidationByID","data-page-tree-orderable","table","cellPadding","cellSpacing","thead","th","tbody","Fragment","PageTreeListViewClient","allDocs","canMoveDocs","query","sourceDocs","props","router","searchParams","config","locale","i18n","setActiveDragRowID","useState","activeDropTarget","setActiveDropTarget","collapsedIDs","setCollapsedIDs","localSourceDocs","setLocalSourceDocs","pendingMoveRowID","setPendingMoveRowID","useEffect","toggleRow","useCallback","currentState","nextState","delete","add","searchParamSort","getAll","sort","manualOrderIsActive","currentLimit","currentRequestedPage","liveAllDocs","collapseResetKey","JSON","stringify","collectionSlug","viewType","toString","hierarchyValue","visibleDocs","paginatedData","paginatedDocs","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","sensors","activationConstraint","distance","moveDocument","params","URLSearchParams","code","set","response","fetch","routes","api","encodeURIComponent","size","body","credentials","headers","language","method","result","json","catch","ok","Error","reorderDocument","movedDocID","targetID","docsToMove","target","key","orderValues","handleManualOrderMoveEnd","error","parentChanged","orderChanged","reorderTarget","parentDoc","nextParentValue","parentMoveSucceeded","nextOrderValue","currentDocs","success","startTransition","refresh","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","root","modifySearchParams","Table"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeListView.client.tsx"],"sourcesContent":["'use client'\r\n\r\nimport type { Column, ListQuery, ListViewClientProps, PaginatedDocs } from 'payload'\r\n\r\nimport {\r\n DndContext,\r\n type DragEndEvent,\r\n type DragOverEvent,\r\n DragOverlay,\r\n type DragStartEvent,\r\n PointerSensor,\r\n useDroppable,\r\n useSensor,\r\n useSensors,\r\n} from '@dnd-kit/core'\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n type SortingStrategy,\r\n useSortable,\r\n} from '@dnd-kit/sortable'\r\nimport {\r\n DefaultListView,\r\n ListQueryProvider,\r\n Pill,\r\n SelectAll,\r\n SelectRow,\r\n SortHeader,\r\n toast,\r\n useConfig,\r\n useLocale,\r\n usePreferences,\r\n useTranslation,\r\n} from '@payloadcms/ui'\r\nimport { useRouter, useSearchParams } from 'next/navigation'\r\nimport React from 'react'\r\n\r\nimport type { NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeSourceDoc } from '../types.js'\r\n\r\nimport {\r\n buildInsertDropTargets,\r\n getDropTargetParentDoc,\r\n type PageTreeDropTarget,\r\n} from '../utilities/dropTargets.js'\r\nimport {\r\n CANCEL_DRAG_MESSAGE,\r\n getDropValidation,\r\n type PageTreeDropValidation,\r\n} from '../utilities/moveValidation.js'\r\nimport {\r\n buildDocSlugPath,\r\n buildPageTreeDocs,\r\n buildProspectiveDocSlugPath,\r\n getDocDisplayLabel,\r\n getVisibleTreeDocs,\r\n type PageTreeDoc,\r\n} from '../utilities/pageTree.js'\r\nimport { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js'\r\nimport {\r\n getPageTreeBadgeColor,\r\n getPageTreeBadgeLabel,\r\n getPageTreeDisplayStatus,\r\n type PageTreeDisplayStatus,\r\n} from '../utilities/status.js'\r\nimport { PageTreeProvider, PageTreeRowDndProvider } from './PageTreeContext.js'\r\nimport styles from './PageTreeListView.module.css'\r\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\r\n\r\ntype PageTreeListViewClientProps = {\r\n allDocs: PageTreeDoc[]\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n canMoveDocs: boolean\r\n columnState: Column[]\r\n homeIndicatorEnabled: boolean\r\n orderableFieldName?: string\r\n parentFieldSlug: string\r\n query: ListQuery\r\n sourceDocs: PageTreeSourceDoc[]\r\n useAsTitle: string\r\n} & Omit<ListViewClientProps, 'columnState' | 'Table'>\r\n\r\ntype SelectableRowData = React.ComponentProps<typeof SelectRow>['rowData']\r\ntype PageTreeDragType = 'move' | 'order'\r\n\r\ntype PageTreeDragData = {\r\n dragType?: PageTreeDragType\r\n parentID?: null | string\r\n rowID?: string\r\n}\r\n\r\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\r\ntype PageTreeRangeRect = {\r\n bottom: number\r\n height: number\r\n top: number\r\n}\r\n\r\nconst SILENT_MOVE_MESSAGES = new Set([CANCEL_DRAG_MESSAGE])\r\nconst ALREADY_ROOT_MESSAGE = 'This page is already in root level.'\r\n\r\nfunction getParentMovePreferenceKey(collectionSlug: string): string {\r\n return `payload-nested-docs-page-tree:${collectionSlug}:parentMoveHandle`\r\n}\r\n\r\nfunction getRowDropID(rowID: string): string {\r\n return `page-drop:${rowID}`\r\n}\r\n\r\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\r\nfunction getPageTreeDragData(value: unknown): PageTreeDragData {\r\n if (!value || typeof value !== 'object') {\r\n return {}\r\n }\r\n\r\n const data = value as Record<string, unknown>\r\n const dragType = data.dragType === 'move' || data.dragType === 'order' ? data.dragType : undefined\r\n const parentID =\r\n data.parentID === null || typeof data.parentID === 'string' ? data.parentID : undefined\r\n const rowID = typeof data.rowID === 'string' ? data.rowID : undefined\r\n\r\n return {\r\n dragType,\r\n parentID,\r\n rowID,\r\n }\r\n}\r\n\r\nfunction getSortableTransform(transform: PageTreeSortableTransform): string | undefined {\r\n if (!transform) {\r\n return undefined\r\n }\r\n\r\n const scaleX = transform.scaleX ?? 1\r\n const scaleY = transform.scaleY ?? 1\r\n\r\n return `translate3d(${transform.x}px, ${transform.y}px, 0) scaleX(${scaleX}) scaleY(${scaleY})`\r\n}\r\n\r\nfunction getVisibleSubtreeIndexRange(docs: PageTreeDoc[], rootIndex: number): null | PageTreeIndexRange {\r\n const rootDoc = docs[rootIndex]\r\n\r\n if (!rootDoc) {\r\n return null\r\n }\r\n\r\n let end = rootIndex\r\n\r\n for (let index = rootIndex + 1; index < docs.length; index += 1) {\r\n if (!docs[index]?.__pageTreeAncestorIDs.includes(rootDoc.__pageTreeID)) {\r\n break\r\n }\r\n\r\n end = index\r\n }\r\n\r\n return {\r\n end,\r\n start: rootIndex,\r\n }\r\n}\r\n\r\nfunction getRangeRect(args: {\r\n activeNodeRect: Parameters<SortingStrategy>[0]['activeNodeRect']\r\n activeRange: PageTreeIndexRange\r\n range: PageTreeIndexRange\r\n rects: Parameters<SortingStrategy>[0]['rects']\r\n}): null | PageTreeRangeRect {\r\n const { activeNodeRect, activeRange, range, rects } = args\r\n const firstRect =\r\n rects[range.start] ?? (range.start === activeRange.start ? activeNodeRect : undefined)\r\n const lastRect = rects[range.end] ?? (range.end === activeRange.end ? activeNodeRect : undefined)\r\n\r\n if (!firstRect || !lastRect) {\r\n return null\r\n }\r\n\r\n return {\r\n bottom: lastRect.top + lastRect.height,\r\n height: lastRect.top + lastRect.height - firstRect.top,\r\n top: firstRect.top,\r\n }\r\n}\r\n\r\nfunction isIndexInRange(index: number, range: PageTreeIndexRange): boolean {\r\n return index >= range.start && index <= range.end\r\n}\r\n\r\nfunction buildPageTreeSortingStrategy(docs: PageTreeDoc[]): SortingStrategy {\r\n return ({ activeIndex, activeNodeRect, index, overIndex, rects }) => {\r\n const activeRange = getVisibleSubtreeIndexRange(docs, activeIndex)\r\n const overRange = getVisibleSubtreeIndexRange(docs, overIndex)\r\n\r\n if (!activeRange || !overRange || activeRange.start === overRange.start) {\r\n return null\r\n }\r\n\r\n const activeRect = getRangeRect({\r\n activeNodeRect,\r\n activeRange,\r\n range: activeRange,\r\n rects,\r\n })\r\n const overRect = getRangeRect({\r\n activeNodeRect,\r\n activeRange,\r\n range: overRange,\r\n rects,\r\n })\r\n\r\n if (!activeRect || !overRect) {\r\n return null\r\n }\r\n\r\n if (isIndexInRange(index, activeRange)) {\r\n return {\r\n scaleX: 1,\r\n scaleY: 1,\r\n x: 0,\r\n y:\r\n activeRange.start < overRange.start\r\n ? overRect.bottom - activeRect.bottom\r\n : overRect.top - activeRect.top,\r\n }\r\n }\r\n\r\n if (activeRange.start < overRange.start && index > activeRange.end && index <= overRange.end) {\r\n return {\r\n scaleX: 1,\r\n scaleY: 1,\r\n x: 0,\r\n y: -activeRect.height,\r\n }\r\n }\r\n\r\n if (activeRange.start > overRange.start && index >= overRange.start && index < activeRange.start) {\r\n return {\r\n scaleX: 1,\r\n scaleY: 1,\r\n x: 0,\r\n y: activeRect.height,\r\n }\r\n }\r\n\r\n return {\r\n scaleX: 1,\r\n scaleY: 1,\r\n x: 0,\r\n y: 0,\r\n }\r\n }\r\n}\r\n\r\nfunction buildPaginatedData(\r\n docs: PageTreeDoc[],\r\n limit: number,\r\n requestedPage: number,\r\n): PaginatedDocs {\r\n const totalDocs = docs.length\r\n const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1\r\n const page = Math.min(Math.max(requestedPage, 1), totalPages)\r\n const startIndex = (page - 1) * limit\r\n const pageDocs = docs.slice(startIndex, startIndex + limit)\r\n\r\n return {\r\n docs: pageDocs,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n limit,\r\n nextPage: page < totalPages ? page + 1 : null,\r\n page,\r\n pagingCounter: totalDocs === 0 ? 0 : startIndex + 1,\r\n prevPage: page > 1 ? page - 1 : null,\r\n totalDocs,\r\n totalPages,\r\n }\r\n}\r\n\r\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\r\n if (Array.isArray(value)) {\r\n const sortValues = value.filter((entry) => typeof entry === 'string' && entry.length > 0)\r\n return sortValues.length > 0 ? sortValues.join(',') : undefined\r\n }\r\n\r\n return typeof value === 'string' && value.length > 0 ? value : undefined\r\n}\r\n\r\nfunction normalizePositiveInt(value: null | string, fallback: number): number {\r\n if (typeof value !== 'string') {\r\n return fallback\r\n }\r\n\r\n const parsedValue = Number.parseInt(value, 10)\r\n return Number.isNaN(parsedValue) || parsedValue <= 0 ? fallback : parsedValue\r\n}\r\n\r\nfunction isOrderableSortActive(args: { orderableFieldName?: string; sort?: string }): boolean {\r\n const { orderableFieldName, sort } = args\r\n\r\n return Boolean(\r\n orderableFieldName && (sort === orderableFieldName || sort === `-${orderableFieldName}`),\r\n )\r\n}\r\n\r\nfunction ensureUseAsTitleColumn(columnState: Column[], useAsTitle: string): Column[] {\r\n return columnState.map((column) =>\r\n column.accessor === useAsTitle\r\n ? {\r\n ...column,\r\n active: true,\r\n }\r\n : column,\r\n )\r\n}\r\n\r\nfunction sliceColumnState(\r\n columnState: Column[],\r\n docs: PageTreeDoc[],\r\n renderedCellIndexByDocID: ReadonlyMap<string, number>,\r\n): Column[] {\r\n return columnState.map((column) => ({\r\n ...column,\r\n renderedCells: docs.map((doc) => {\r\n const renderedCellIndex =\r\n renderedCellIndexByDocID.get(doc.__pageTreeID) ?? doc.__pageTreeOrderIndex\r\n\r\n return column.renderedCells?.[renderedCellIndex] ?? null\r\n }),\r\n }))\r\n}\r\n\r\nfunction getSelectableRowData(doc: PageTreeDoc): SelectableRowData {\r\n const record = doc as Record<string, unknown>\r\n\r\n return {\r\n id: String(doc.id ?? doc.__pageTreeID),\r\n _isLocked: Boolean(record._isLocked),\r\n _userEditing: record._userEditing as SelectableRowData['_userEditing'],\r\n }\r\n}\r\n\r\nfunction shouldSilenceMoveMessage(message?: string): boolean {\r\n return typeof message === 'string' && SILENT_MOVE_MESSAGES.has(message)\r\n}\r\n\r\nfunction getVisibleSubtreeRowIDs(docs: PageTreeDoc[], rowID: string): string[] {\r\n const rootIndex = docs.findIndex((doc) => doc.__pageTreeID === rowID)\r\n\r\n if (rootIndex < 0) {\r\n return []\r\n }\r\n\r\n const rowIDs = [rowID]\r\n\r\n for (const doc of docs.slice(rootIndex + 1)) {\r\n if (!doc.__pageTreeAncestorIDs.includes(rowID)) {\r\n break\r\n }\r\n\r\n rowIDs.push(doc.__pageTreeID)\r\n }\r\n\r\n return rowIDs\r\n}\r\n\r\nfunction buildOptimisticOrderRowIDs(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n targetRowID: string\r\n}): null | string[] {\r\n const { activeRowID, docs, targetRowID } = args\r\n\r\n if (activeRowID === targetRowID) {\r\n return null\r\n }\r\n\r\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\r\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\r\n\r\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\r\n return null\r\n }\r\n\r\n const activeBlockIDs = getVisibleSubtreeRowIDs(docs, activeRowID)\r\n const targetBlockIDs = getVisibleSubtreeRowIDs(docs, targetRowID)\r\n\r\n if (\r\n activeBlockIDs.length === 0 ||\r\n targetBlockIDs.length === 0 ||\r\n targetBlockIDs.includes(activeRowID)\r\n ) {\r\n return null\r\n }\r\n\r\n const currentRowIDs = docs.map((doc) => doc.__pageTreeID)\r\n\r\n if (activeBlockIDs.length === 1 && targetBlockIDs.length === 1) {\r\n const activeIndex = currentRowIDs.indexOf(activeRowID)\r\n const targetIndex = currentRowIDs.indexOf(targetRowID)\r\n\r\n return activeIndex < 0 || targetIndex < 0\r\n ? null\r\n : arrayMove(currentRowIDs, activeIndex, targetIndex)\r\n }\r\n\r\n const remainingRowIDs = currentRowIDs.filter((rowID) => !activeBlockIDs.includes(rowID))\r\n const activeIndex = currentRowIDs.indexOf(activeRowID)\r\n const targetIndex = currentRowIDs.indexOf(targetRowID)\r\n const targetAnchorID =\r\n activeIndex < targetIndex ? targetBlockIDs[targetBlockIDs.length - 1] : targetBlockIDs[0]\r\n\r\n if (!targetAnchorID) {\r\n return null\r\n }\r\n\r\n const targetAnchorIndex = remainingRowIDs.indexOf(targetAnchorID)\r\n\r\n if (targetAnchorIndex < 0) {\r\n return null\r\n }\r\n\r\n const insertIndex = activeIndex < targetIndex ? targetAnchorIndex + 1 : targetAnchorIndex\r\n\r\n return [\r\n ...remainingRowIDs.slice(0, insertIndex),\r\n ...activeBlockIDs,\r\n ...remainingRowIDs.slice(insertIndex),\r\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 }\r\n\r\n const docsByID = new Map(docs.map((doc) => [doc.__pageTreeID, doc]))\r\n const orderedDocs = orderRowIDs.flatMap((rowID) => {\r\n const doc = docsByID.get(rowID)\r\n\r\n return doc ? [doc] : []\r\n })\r\n\r\n return orderedDocs.length === docs.length ? orderedDocs : docs\r\n}\r\n\r\nfunction getDropTargetValidation(args: {\r\n activeDoc: PageTreeDoc\r\n docsByID: ReadonlyMap<string, PageTreeDoc>\r\n dropTarget: PageTreeDropTarget\r\n}): PageTreeDropValidation {\r\n const { activeDoc, docsByID, dropTarget } = args\r\n\r\n if (dropTarget.dropType === 'row') {\r\n return getDropValidation({\r\n activeDoc,\r\n targetDoc: docsByID.get(dropTarget.rowID) ?? undefined,\r\n })\r\n }\r\n\r\n if (dropTarget.parentID === null) {\r\n if (activeDoc.__pageTreeParentID === null) {\r\n return {\r\n isValid: false,\r\n message: ALREADY_ROOT_MESSAGE,\r\n parentID: null,\r\n }\r\n }\r\n\r\n return {\r\n isValid: true,\r\n parentID: null,\r\n }\r\n }\r\n\r\n const targetDoc = docsByID.get(dropTarget.parentID)\r\n\r\n if (!targetDoc) {\r\n return {\r\n isValid: false,\r\n message: 'Could not resolve drop target.',\r\n parentID: dropTarget.parentID,\r\n }\r\n }\r\n\r\n if (targetDoc.__pageTreeID === activeDoc.__pageTreeID) {\r\n return {\r\n isValid: false,\r\n message: CANCEL_DRAG_MESSAGE,\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n }\r\n\r\n if (targetDoc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)) {\r\n return {\r\n isValid: false,\r\n message: 'A document cannot be moved under one of its descendants.',\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n }\r\n\r\n return {\r\n isValid: true,\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n}\r\n\r\nfunction getStatusClassName(\r\n status: PageTreeDisplayStatus,\r\n): 'changed' | 'draft' | 'published' | 'unknown' {\r\n if (status === 'changed' || status === 'draft' || status === 'published') {\r\n return status\r\n }\r\n\r\n return 'unknown'\r\n}\r\n\r\nfunction renderStatusBadge(args: {\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n doc: PageTreeDoc\r\n index: number\r\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\r\n}): React.ReactNode {\r\n const { badgeConfig, doc, index, t } = args\r\n const status = getPageTreeDisplayStatus(doc)\r\n const customColor = getPageTreeBadgeColor({\r\n badgeColors: badgeConfig.colors,\r\n status,\r\n })\r\n const statusClass = getStatusClassName(status)\r\n const style = customColor\r\n ? ({ '--page-tree-badge-base': customColor } as React.CSSProperties)\r\n : undefined\r\n\r\n return (\r\n <span\r\n className={[\r\n 'pages-hierarchy-status-badge',\r\n `pages-hierarchy-status-badge--${statusClass}`,\r\n ].join(' ')}\r\n data-custom-color={customColor ? 'true' : undefined}\r\n key={doc.__pageTreeID ?? index}\r\n style={style}\r\n >\r\n {getPageTreeBadgeLabel({\r\n badgeLabels: badgeConfig.labels,\r\n status,\r\n t,\r\n })}\r\n </span>\r\n )\r\n}\r\n\r\nfunction ParentMoveToggle({\r\n collectionSlug,\r\n enabled,\r\n onToggle,\r\n}: {\r\n collectionSlug: string\r\n enabled: boolean\r\n onToggle: () => void\r\n}) {\r\n return (\r\n <Pill\r\n aria-checked={enabled}\r\n aria-label={`${enabled ? 'Hide' : 'Show'} edit hierarchy handles`}\n className=\"pages-hierarchy-parent-move-toggle\"\r\n id={`pages-hierarchy-parent-move-toggle-${collectionSlug}`}\r\n onClick={onToggle}\r\n pillStyle={enabled ? 'dark' : 'light'}\r\n size=\"small\"\r\n >\r\n Edit Hierarchy\n </Pill>\r\n )\r\n}\r\n\r\nfunction buildTableColumns(args: {\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n columnState: Column[]\r\n docs: PageTreeDoc[]\r\n enableRowSelections?: boolean\r\n homeIndicatorEnabled: boolean\r\n orderableFieldName?: string\r\n parentFieldSlug: string\r\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\r\n useAsTitle: string\r\n}): Column[] {\r\n const {\r\n badgeConfig,\r\n columnState,\r\n docs,\r\n enableRowSelections,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n t,\r\n useAsTitle,\r\n } = args\r\n const columnsToUse = columnState.map((column) => {\r\n if (column.accessor === useAsTitle) {\r\n return {\r\n ...column,\r\n active: true,\r\n renderedCells: docs.map((doc, index) => (\r\n <PageTreeTitleCell\r\n doc={doc}\r\n homeIndicatorEnabled={homeIndicatorEnabled}\r\n key={doc.__pageTreeID ?? index}\r\n >\r\n {column.renderedCells?.[index] ?? getDocDisplayLabel(doc)}\r\n </PageTreeTitleCell>\r\n )),\r\n }\r\n }\r\n\r\n if (column.accessor === '_status') {\r\n return {\r\n ...column,\r\n renderedCells: docs.map((doc, index) =>\r\n renderStatusBadge({\r\n badgeConfig,\r\n doc,\r\n index,\r\n t,\r\n }),\r\n ),\r\n }\r\n }\r\n\r\n if (column.accessor === parentFieldSlug) {\r\n return {\r\n ...column,\r\n renderedCells: docs.map((doc, index) =>\r\n doc.__pageTreeParentID !== null ? (\r\n (column.renderedCells?.[index] ?? null)\r\n ) : (\r\n <span className=\"pages-hierarchy-empty-cell\" key={doc.__pageTreeID ?? index}>\r\n -\r\n </span>\r\n ),\r\n ),\r\n }\r\n }\r\n\r\n return column\r\n })\r\n\r\n if (enableRowSelections) {\r\n columnsToUse.unshift({\r\n accessor: '_select',\r\n active: true,\r\n field: { hidden: true } as Column['field'],\r\n Heading: <SelectAll />,\r\n renderedCells: docs.map((doc, index) => (\r\n <SelectRow key={doc.__pageTreeID ?? index} rowData={getSelectableRowData(doc)} />\r\n )),\r\n })\r\n }\r\n\r\n if (orderableFieldName) {\r\n const orderableColumn = {\r\n accessor: '_pageTreeOrderSort',\r\n active: true,\r\n field: { hidden: true } as Column['field'],\r\n Heading: <SortHeader />,\r\n renderedCells: docs.map((doc, index) => (\r\n <span\r\n aria-hidden=\"true\"\r\n className=\"pages-hierarchy-order-sort-spacer\"\r\n key={doc.__pageTreeID ?? index}\r\n />\r\n )),\r\n } satisfies Column\r\n const selectColumnIndex = columnsToUse.findIndex((column) => column.accessor === '_select')\r\n\r\n columnsToUse.splice(selectColumnIndex >= 0 ? selectColumnIndex + 1 : 0, 0, orderableColumn)\r\n }\r\n\r\n return columnsToUse\r\n}\r\n\r\nfunction HierarchyInsertRow({\r\n activeColumnsCount,\r\n activeDragRowID,\r\n activeDropTargetID,\r\n dropTarget,\r\n dropValidation,\r\n isMovePending,\r\n}: {\r\n activeColumnsCount: number\r\n activeDragRowID: null | string\r\n activeDropTargetID: null | string\r\n dropTarget: Extract<PageTreeDropTarget, { dropType: 'insert' }>\r\n dropValidation?: PageTreeDropValidation\r\n isMovePending: boolean\r\n}) {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: dropTarget.dropID,\r\n data: dropTarget,\r\n disabled: isMovePending,\r\n })\r\n const hasActiveDrag = Boolean(activeDragRowID)\r\n const showInsertLine = isOver && activeDropTargetID === dropTarget.dropID\r\n\r\n return (\r\n <tr\r\n className=\"pages-hierarchy-insert-row\"\r\n data-drag-over={showInsertLine ? 'true' : 'false'}\r\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\r\n data-page-tree-insert=\"true\"\r\n >\r\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\r\n <td colSpan={activeColumnsCount}>\r\n <div\r\n className=\"pages-hierarchy-insert-row__target\"\r\n data-insert-depth={dropTarget.depth}\r\n ref={setNodeRef}\r\n />\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nfunction HierarchyTableRow({\r\n activeColumns,\r\n activeDragRowID,\r\n activeDragType,\r\n canReorderRows,\r\n doc,\r\n dropValidation,\r\n insertAfterDropID,\r\n insertBeforeDropID,\r\n isMovePending,\r\n rowIndex,\r\n titleCellAccessor,\r\n}: {\r\n activeColumns: Column[]\r\n activeDragRowID: null | string\r\n activeDragType: null | PageTreeDragType\r\n canReorderRows: boolean\r\n doc: PageTreeDoc\r\n dropValidation?: PageTreeDropValidation\r\n insertAfterDropID: null | string\r\n insertBeforeDropID: null | string\r\n isMovePending: boolean\r\n rowIndex: number\r\n titleCellAccessor: string\r\n}) {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: getRowDropID(doc.__pageTreeID),\r\n data: {\r\n dropType: 'row',\r\n insertAfterDropID,\r\n insertBeforeDropID,\r\n rowID: doc.__pageTreeID,\r\n } satisfies Extract<PageTreeDropTarget, { dropType: 'row' }>,\r\n disabled: isMovePending,\r\n })\r\n const sortable = useSortable({\r\n id: getSortableRowID(doc.__pageTreeID),\r\n data: {\r\n dragType: 'order',\r\n parentID: doc.__pageTreeParentID,\r\n rowID: doc.__pageTreeID,\r\n } satisfies PageTreeDragData,\r\n disabled: !canReorderRows || isMovePending || activeDragType === 'move',\r\n })\r\n const hasActiveMoveDrag = activeDragType === 'move' && Boolean(activeDragRowID)\r\n const isActiveDragRow = activeDragRowID === doc.__pageTreeID\r\n const setRowRef = React.useCallback(\r\n (element: HTMLTableRowElement | null) => {\r\n setNodeRef(element)\r\n sortable.setNodeRef(element)\r\n },\r\n [setNodeRef, sortable],\r\n )\r\n const rowDndValue = React.useMemo(\r\n () => ({\r\n isOrderDragging: sortable.isDragging,\r\n orderHandleAttributes: sortable.attributes,\r\n orderHandleListeners: sortable.listeners,\r\n orderHandleRef: sortable.setActivatorNodeRef,\r\n }),\r\n [sortable.attributes, sortable.isDragging, sortable.listeners, sortable.setActivatorNodeRef],\r\n )\r\n const sortableStyle = React.useMemo(\r\n () =>\r\n ({\r\n position: sortable.isDragging ? 'relative' : undefined,\r\n transform: getSortableTransform(sortable.transform),\r\n transition: activeDragType === 'order' ? sortable.transition : undefined,\r\n zIndex: sortable.isDragging ? 1 : undefined,\r\n }) as React.CSSProperties,\r\n [activeDragType, sortable.isDragging, sortable.transform, sortable.transition],\r\n )\r\n\r\n return (\r\n <tr\r\n className={`row-${rowIndex + 1}`}\r\n data-drag-over={activeDragType === 'move' && isOver ? 'true' : 'false'}\r\n data-drop-valid={hasActiveMoveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\r\n data-id={doc.id}\r\n data-is-drag-source={activeDragType === 'move' && isActiveDragRow ? 'true' : 'false'}\r\n data-is-order-drag-source={sortable.isDragging ? 'true' : 'false'}\r\n data-page-tree-row=\"true\"\r\n ref={setRowRef}\r\n style={sortableStyle}\r\n >\r\n <PageTreeRowDndProvider value={rowDndValue}>\r\n {activeColumns.map((column, columnIndex) => {\r\n const { accessor } = column\r\n\r\n return (\r\n <td\r\n className={`cell-${accessor.replace(/\\./g, '__')}`}\r\n data-page-tree-title-cell={accessor === titleCellAccessor ? 'true' : undefined}\r\n key={columnIndex}\r\n >\r\n {column.renderedCells?.[rowIndex] ?? null}\r\n </td>\r\n )\r\n })}\r\n </PageTreeRowDndProvider>\r\n </tr>\r\n )\r\n}\r\n\r\nfunction HierarchyTable({\r\n activeDragRowID,\r\n activeDragType,\r\n activeDropTarget,\r\n allDocsByID,\r\n canReorderRows,\r\n columns,\r\n data,\r\n isMovePending,\r\n titleCellAccessor,\r\n}: {\r\n activeDragRowID: null | string\r\n activeDragType: null | PageTreeDragType\r\n activeDropTarget: null | PageTreeDropTarget\r\n allDocsByID: ReadonlyMap<string, PageTreeDoc>\r\n canReorderRows: boolean\r\n columns: Column[]\r\n data: PageTreeDoc[]\r\n isMovePending: boolean\r\n titleCellAccessor: string\r\n}) {\r\n const activeColumns = React.useMemo(() => columns.filter((column) => column?.active), [columns])\r\n const sortableItems = React.useMemo(\r\n () => data.map((doc) => getSortableRowID(doc.__pageTreeID)),\r\n [data],\r\n )\r\n const sortingStrategy = React.useMemo(() => buildPageTreeSortingStrategy(data), [data])\r\n const insertDropTargets = React.useMemo(() => buildInsertDropTargets(data), [data])\r\n const insertDropTargetsByReferenceRowID = React.useMemo(\r\n () => new Map(insertDropTargets.map((dropTarget) => [dropTarget.referenceRowID, dropTarget])),\r\n [insertDropTargets],\r\n )\r\n const activeDropTargetID =\r\n activeDropTarget?.dropType === 'insert' ? activeDropTarget.dropID : null\r\n const activeDoc =\r\n activeDragType === 'move' && activeDragRowID ? (allDocsByID.get(activeDragRowID) ?? null) : null\r\n const rowDropValidationByID = React.useMemo(() => {\r\n if (!activeDoc) {\r\n return new Map<string, PageTreeDropValidation>()\r\n }\r\n\r\n return new Map(\r\n data.map((doc) => [\r\n doc.__pageTreeID,\r\n getDropTargetValidation({\r\n activeDoc,\r\n docsByID: allDocsByID,\r\n dropTarget: {\r\n dropType: 'row',\r\n insertAfterDropID: null,\r\n insertBeforeDropID: null,\r\n rowID: doc.__pageTreeID,\r\n },\r\n }),\r\n ]),\r\n )\r\n }, [activeDoc, allDocsByID, data])\r\n const insertDropValidationByID = React.useMemo(() => {\r\n if (!activeDoc) {\r\n return new Map<string, PageTreeDropValidation>()\r\n }\r\n\r\n return new Map(\r\n insertDropTargets.map((dropTarget) => [\r\n dropTarget.dropID,\r\n getDropTargetValidation({\r\n activeDoc,\r\n docsByID: allDocsByID,\r\n dropTarget,\r\n }),\r\n ]),\r\n )\r\n }, [activeDoc, allDocsByID, insertDropTargets])\r\n\r\n if (activeColumns.length === 0) {\r\n return <div>No columns selected</div>\r\n }\r\n\r\n return (\r\n <div\r\n className={[\r\n 'table-wrap pages-hierarchy-table',\r\n activeDoc ? 'pages-hierarchy-table--dragging' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n <div className=\"table table--appearance-default\">\r\n <table cellPadding=\"0\" cellSpacing=\"0\">\r\n <thead>\r\n <tr>\r\n {activeColumns.map((column, index) => (\r\n <th\r\n data-page-tree-title-cell={\r\n column.accessor === titleCellAccessor ? 'true' : undefined\r\n }\r\n id={`heading-${column.accessor.replace(/\\./g, '__')}`}\r\n key={index}\r\n >\r\n {column.Heading}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <SortableContext items={sortableItems} strategy={sortingStrategy}>\r\n {data.map((doc, rowIndex) => {\r\n const rootInsertBeforeDropTarget =\r\n doc.__pageTreeParentID === null\r\n ? insertDropTargetsByReferenceRowID.get(doc.__pageTreeID)\r\n : undefined\r\n const rootInsertTargetIndex =\r\n rootInsertBeforeDropTarget !== undefined\r\n ? insertDropTargets.indexOf(rootInsertBeforeDropTarget)\r\n : -1\r\n const rootInsertAfterDropTarget =\r\n rootInsertTargetIndex >= 0\r\n ? insertDropTargets[rootInsertTargetIndex + 1]\r\n : undefined\r\n const isTrailingRootInsert =\r\n rootInsertAfterDropTarget === insertDropTargets[insertDropTargets.length - 1]\r\n const nextVisibleDoc = data[rowIndex + 1]\r\n const hasVisibleDescendantAfter =\r\n nextVisibleDoc?.__pageTreeAncestorIDs.includes(doc.__pageTreeID) ?? false\r\n\r\n return (\r\n <React.Fragment key={doc.__pageTreeID}>\r\n {rootInsertBeforeDropTarget ? (\r\n <HierarchyInsertRow\r\n activeColumnsCount={activeColumns.length}\r\n activeDragRowID={activeDoc ? activeDragRowID : null}\r\n activeDropTargetID={activeDropTargetID}\r\n dropTarget={rootInsertBeforeDropTarget}\r\n dropValidation={insertDropValidationByID.get(\r\n rootInsertBeforeDropTarget.dropID,\r\n )}\r\n isMovePending={isMovePending}\r\n key={rootInsertBeforeDropTarget.dropID}\r\n />\r\n ) : null}\r\n <HierarchyTableRow\r\n activeColumns={activeColumns}\r\n activeDragRowID={activeDragRowID}\r\n activeDragType={activeDragType}\r\n canReorderRows={canReorderRows}\r\n doc={doc}\r\n dropValidation={rowDropValidationByID.get(doc.__pageTreeID)}\r\n insertAfterDropID={\r\n hasVisibleDescendantAfter || isTrailingRootInsert\r\n ? null\r\n : (rootInsertAfterDropTarget?.dropID ?? null)\r\n }\r\n insertBeforeDropID={rootInsertBeforeDropTarget?.dropID ?? null}\r\n isMovePending={isMovePending}\r\n rowIndex={rowIndex}\r\n titleCellAccessor={titleCellAccessor}\r\n />\r\n </React.Fragment>\r\n )\r\n })}\r\n </SortableContext>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default function PageTreeListViewClient({\r\n allDocs,\r\n badgeConfig,\r\n canMoveDocs,\r\n columnState,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n query,\r\n sourceDocs,\r\n useAsTitle,\r\n ...props\r\n}: PageTreeListViewClientProps) {\r\n const router = useRouter()\r\n const searchParams = useSearchParams()\r\n const { config } = useConfig()\r\n const locale = useLocale()\r\n const { i18n } = useTranslation()\r\n const [activeDragRowID, setActiveDragRowID] = React.useState<null | string>(null)\r\n const [activeDragType, setActiveDragType] = React.useState<null | PageTreeDragType>(null)\r\n const [activeDropTarget, setActiveDropTarget] = React.useState<null | PageTreeDropTarget>(null)\r\n const [collapsedIDs, setCollapsedIDs] = React.useState<Set<string>>(() => new Set())\r\n const [optimisticOrderRowIDs, setOptimisticOrderRowIDs] = React.useState<null | string[]>(null)\r\n const [parentMoveEnabled, setParentMoveEnabled] = React.useState(false)\r\n const [pendingMoveRowID, setPendingMoveRowID] = React.useState<null | string>(null)\r\n const { getPreference, setPreference } = usePreferences()\r\n const parentMovePreferenceKey = React.useMemo(\r\n () => getParentMovePreferenceKey(props.collectionSlug),\r\n [props.collectionSlug],\r\n )\r\n\r\n const toggleRow = React.useCallback((rowID: string) => {\r\n setCollapsedIDs((currentState) => {\r\n const nextState = new Set(currentState)\r\n\r\n if (nextState.has(rowID)) {\r\n nextState.delete(rowID)\r\n } else {\r\n nextState.add(rowID)\r\n }\r\n\r\n return nextState\r\n })\r\n }, [])\r\n const handleParentMoveToggle = React.useCallback(() => {\r\n setParentMoveEnabled((currentValue) => {\r\n const nextValue = !currentValue\r\n\r\n void setPreference(parentMovePreferenceKey, nextValue)\r\n\r\n return nextValue\r\n })\r\n }, [parentMovePreferenceKey, setPreference])\r\n const currentSort = React.useMemo(() => {\r\n const searchParamSort = searchParams.getAll('sort')\r\n\r\n if (searchParamSort.length > 0) {\r\n return normalizeSort(searchParamSort)\r\n }\r\n\r\n return normalizeSort(query.sort as string | string[] | undefined)\r\n }, [query.sort, searchParams])\r\n const canReorderRows =\r\n canMoveDocs && isOrderableSortActive({ orderableFieldName, sort: currentSort })\r\n const currentLimit = React.useMemo(\r\n () =>\r\n normalizePositiveInt(\r\n searchParams.get('limit'),\r\n typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10,\r\n ),\r\n [query.limit, searchParams],\r\n )\r\n const currentRequestedPage = React.useMemo(\r\n () =>\r\n normalizePositiveInt(\r\n searchParams.get('page'),\r\n typeof query.page === 'number' && query.page > 0 ? query.page : 1,\r\n ),\r\n [query.page, searchParams],\r\n )\r\n const liveAllDocs = React.useMemo(\r\n () =>\r\n buildPageTreeDocs(sourceDocs, {\r\n parentFieldSlug,\r\n sort: currentSort,\r\n }),\r\n [currentSort, parentFieldSlug, sourceDocs],\r\n )\r\n const collapseResetKey = React.useMemo(\r\n () => JSON.stringify([props.collectionSlug, props.viewType, searchParams.toString()]),\r\n [props.collectionSlug, props.viewType, searchParams],\r\n )\r\n const hierarchyValue = React.useMemo(\r\n () => ({\r\n activeDragRowID,\r\n canMoveDocs,\r\n collapsedIDs,\r\n parentMoveEnabled,\r\n pendingMoveRowID,\r\n toggleRow,\r\n }),\r\n [activeDragRowID, canMoveDocs, collapsedIDs, parentMoveEnabled, pendingMoveRowID, toggleRow],\r\n )\r\n\r\n React.useEffect(() => {\r\n let isMounted = true\r\n\r\n void getPreference<boolean>(parentMovePreferenceKey).then((storedValue) => {\r\n if (isMounted) {\r\n setParentMoveEnabled(storedValue === true)\r\n }\r\n })\r\n\r\n return () => {\r\n isMounted = false\r\n }\r\n }, [getPreference, parentMovePreferenceKey])\r\n\r\n React.useEffect(() => {\r\n setActiveDragRowID(null)\r\n setActiveDragType(null)\r\n setActiveDropTarget(null)\r\n setCollapsedIDs(new Set())\r\n setOptimisticOrderRowIDs(null)\r\n }, [collapseResetKey])\r\n\r\n const visibleDocs = React.useMemo(\r\n () => getVisibleTreeDocs(liveAllDocs, collapsedIDs),\r\n [liveAllDocs, collapsedIDs],\r\n )\r\n const paginatedData = React.useMemo(\r\n () => buildPaginatedData(visibleDocs, currentLimit, currentRequestedPage),\r\n [currentLimit, currentRequestedPage, visibleDocs],\r\n )\r\n const paginatedDocs = paginatedData.docs as PageTreeDoc[]\r\n const paginatedServerOrderKey = React.useMemo(\r\n () => paginatedDocs.map((doc) => doc.__pageTreeID).join('\\0'),\r\n [paginatedDocs],\r\n )\r\n const displayedPaginatedDocs = React.useMemo(\r\n () => orderDocsByRowIDs(paginatedDocs, optimisticOrderRowIDs),\r\n [optimisticOrderRowIDs, paginatedDocs],\r\n )\r\n const displayedPaginatedData = React.useMemo(\r\n () => ({\r\n ...paginatedData,\r\n docs: displayedPaginatedDocs,\r\n }),\r\n [displayedPaginatedDocs, paginatedData],\r\n )\r\n\r\n React.useEffect(() => {\r\n setOptimisticOrderRowIDs(null)\r\n }, [paginatedServerOrderKey])\r\n\r\n const allDocsByID = React.useMemo(\r\n () => new Map(liveAllDocs.map((doc) => [doc.__pageTreeID, doc])),\r\n [liveAllDocs],\r\n )\r\n const paginatedDocsByID = React.useMemo(\r\n () => new Map(displayedPaginatedDocs.map((doc) => [doc.__pageTreeID, doc])),\r\n [displayedPaginatedDocs],\r\n )\r\n const renderedCellIndexByDocID = React.useMemo(\r\n () => new Map(allDocs.map((doc, index) => [doc.__pageTreeID, index])),\r\n [allDocs],\r\n )\r\n const normalizedColumnState = React.useMemo(\r\n () => ensureUseAsTitleColumn(columnState, useAsTitle),\r\n [columnState, useAsTitle],\r\n )\r\n const paginatedColumnState = React.useMemo(\r\n () => sliceColumnState(normalizedColumnState, displayedPaginatedDocs, renderedCellIndexByDocID),\r\n [displayedPaginatedDocs, normalizedColumnState, renderedCellIndexByDocID],\r\n )\r\n const tableColumns = React.useMemo(\r\n () =>\r\n buildTableColumns({\r\n badgeConfig,\r\n columnState: paginatedColumnState,\r\n docs: displayedPaginatedDocs,\r\n enableRowSelections: props.enableRowSelections,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n t: i18n.t,\r\n useAsTitle,\r\n }),\r\n [\r\n paginatedColumnState,\r\n displayedPaginatedDocs,\r\n badgeConfig,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n props.enableRowSelections,\r\n i18n.t,\r\n useAsTitle,\r\n ],\r\n )\r\n const activeDragDoc = activeDragRowID ? (paginatedDocsByID.get(activeDragRowID) ?? null) : null\r\n const activeDragPreviewPath = React.useMemo(() => {\r\n if (!activeDragDoc || activeDragType !== 'move') {\r\n return null\r\n }\r\n\r\n if (!activeDropTarget) {\r\n return buildDocSlugPath({\r\n doc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n })\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\r\n docsByID: allDocsByID,\r\n dropTarget: activeDropTarget,\r\n })\r\n const dropValidation = getDropTargetValidation({\r\n activeDoc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n dropTarget: activeDropTarget,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n return buildDocSlugPath({\r\n doc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n })\r\n }\r\n\r\n return buildProspectiveDocSlugPath({\r\n activeDoc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n }, [activeDragDoc, activeDragType, activeDropTarget, allDocsByID])\r\n const isMovePending = pendingMoveRowID !== null\r\n const sensors = useSensors(\r\n useSensor(PointerSensor, {\r\n activationConstraint: {\r\n distance: 2,\r\n },\r\n }),\r\n )\r\n const handleDragCancel = React.useCallback(() => {\r\n setActiveDragRowID(null)\r\n setActiveDragType(null)\r\n setActiveDropTarget(null)\r\n }, [])\r\n const handleDragStart = React.useCallback(\r\n (event: DragStartEvent) => {\r\n if (!canMoveDocs || isMovePending) {\r\n return\r\n }\r\n\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n const { dragType, rowID } = dragData\r\n\r\n if (\r\n typeof rowID === 'string' &&\r\n dragType &&\r\n paginatedDocsByID.has(rowID) &&\r\n (dragType !== 'order' || canReorderRows)\r\n ) {\r\n setActiveDragRowID(rowID)\r\n setActiveDragType(dragType)\r\n setActiveDropTarget(null)\r\n }\r\n },\r\n [canMoveDocs, canReorderRows, isMovePending, paginatedDocsByID],\r\n )\r\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\r\n\r\n if (dragData.dragType === 'order') {\r\n setActiveDropTarget(null)\r\n return\r\n }\r\n\r\n if (dragData.dragType !== 'move' || !overData) {\r\n setActiveDropTarget(null)\r\n return\r\n }\r\n\r\n if (overData.dropType === 'insert') {\r\n setActiveDropTarget(overData)\r\n return\r\n }\r\n\r\n if (overData.dropType === 'row') {\r\n setActiveDropTarget(overData)\r\n return\r\n }\r\n\r\n setActiveDropTarget(null)\r\n }, [])\r\n const handleDragEnd = React.useCallback(\r\n async (event: DragEndEvent) => {\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n const { dragType, rowID } = dragData\r\n const activeDoc = typeof rowID === 'string' ? (paginatedDocsByID.get(rowID) ?? null) : null\r\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\r\n const overDragData = getPageTreeDragData(event.over?.data.current)\r\n\r\n setActiveDragRowID(null)\r\n setActiveDragType(null)\r\n setActiveDropTarget(null)\r\n\r\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 }\r\n\r\n if (dragType !== 'move' || typeof rowID !== 'string' || !activeDoc || !overData) {\r\n return\r\n }\r\n\r\n const dropValidation = getDropTargetValidation({\r\n activeDoc,\r\n docsByID: allDocsByID,\r\n dropTarget: overData,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\r\n toast.error(dropValidation.message ?? 'Could not move document.')\r\n }\r\n\r\n return\r\n }\r\n\r\n if (\r\n overData.dropType === 'insert' &&\r\n activeDoc.__pageTreeParentID === dropValidation.parentID\r\n ) {\r\n return\r\n }\r\n\r\n const apiRoute = config.routes.api\r\n const params = new URLSearchParams()\r\n\r\n if (locale?.code) {\r\n params.set('locale', locale.code)\r\n }\r\n\r\n setPendingMoveRowID(rowID)\r\n\r\n try {\r\n const response = await fetch(\r\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/move${\r\n params.size > 0 ? `?${params.toString()}` : ''\r\n }`,\r\n {\r\n body: JSON.stringify({\r\n parentID: dropValidation.parentID,\r\n }),\r\n credentials: 'include',\r\n headers: {\r\n 'Accept-Language': i18n.language,\r\n 'Content-Type': 'application/json',\r\n },\r\n method: 'POST',\r\n },\r\n )\r\n const result = (await response.json().catch(() => null)) as {\r\n message?: string\r\n } | null\r\n\r\n if (!response.ok) {\r\n if (shouldSilenceMoveMessage(result?.message)) {\r\n return\r\n }\r\n\r\n toast.error(result?.message ?? 'Could not move document.')\r\n return\r\n }\r\n\r\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\r\n React.startTransition(() => {\r\n router.refresh()\r\n })\r\n } catch (error) {\r\n const message =\r\n error instanceof Error && error.message ? error.message : 'Could not move document.'\r\n\r\n toast.error(message)\r\n } finally {\r\n setPendingMoveRowID(null)\r\n }\r\n },\r\n [\r\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 ],\r\n )\r\n const handleDragEndSync = React.useCallback(\r\n (event: DragEndEvent) => {\r\n void handleDragEnd(event)\r\n },\r\n [handleDragEnd],\r\n )\r\n\r\n const tableNode = React.useMemo(\r\n () => (\r\n <DndContext\r\n collisionDetection={pageTreeCollisionDetectionStrategy}\r\n onDragCancel={handleDragCancel}\r\n onDragEnd={handleDragEndSync}\r\n onDragOver={handleDragOver}\r\n onDragStart={handleDragStart}\r\n sensors={sensors}\r\n >\r\n <HierarchyTable\r\n activeDragRowID={activeDragRowID}\r\n activeDragType={activeDragType}\r\n activeDropTarget={activeDropTarget}\r\n allDocsByID={allDocsByID}\r\n canReorderRows={canReorderRows}\r\n columns={tableColumns}\r\n data={displayedPaginatedDocs}\r\n isMovePending={isMovePending}\r\n titleCellAccessor={useAsTitle}\r\n />\r\n <DragOverlay dropAnimation={null} style={{ cursor: 'grabbing' }}>\r\n {activeDragPreviewPath ? (\r\n <div className=\"pages-hierarchy-drag-overlay\">{activeDragPreviewPath}</div>\r\n ) : null}\r\n </DragOverlay>\r\n </DndContext>\r\n ),\r\n [\r\n activeDragPreviewPath,\r\n activeDragRowID,\r\n activeDragType,\r\n activeDropTarget,\r\n allDocsByID,\r\n canReorderRows,\r\n displayedPaginatedDocs,\r\n handleDragCancel,\r\n handleDragEndSync,\r\n handleDragOver,\r\n handleDragStart,\r\n isMovePending,\r\n sensors,\r\n tableColumns,\r\n useAsTitle,\r\n ],\r\n )\r\n const beforeActions = React.useMemo(() => {\r\n const actions = props.beforeActions ? [...props.beforeActions] : []\r\n\r\n if (canMoveDocs) {\r\n actions.unshift(\r\n <ParentMoveToggle\r\n collectionSlug={props.collectionSlug}\r\n enabled={parentMoveEnabled}\r\n key=\"parent-move-toggle\"\r\n onToggle={handleParentMoveToggle}\r\n />,\r\n )\r\n }\r\n\r\n return actions.length > 0 ? actions : undefined\r\n }, [\r\n canMoveDocs,\r\n handleParentMoveToggle,\r\n parentMoveEnabled,\r\n props.beforeActions,\r\n props.collectionSlug,\r\n ])\r\n\r\n return (\r\n <div className={styles.root}>\r\n <PageTreeProvider value={hierarchyValue}>\r\n <ListQueryProvider\r\n collectionSlug={props.collectionSlug}\r\n data={displayedPaginatedData}\r\n modifySearchParams\r\n orderableFieldName={orderableFieldName}\r\n query={{\r\n ...query,\r\n limit: currentLimit,\r\n page: displayedPaginatedData.page,\r\n sort: currentSort,\r\n }}\r\n >\r\n <DefaultListView\r\n {...props}\r\n beforeActions={beforeActions}\r\n columnState={paginatedColumnState}\r\n Table={tableNode}\r\n />\r\n </ListQueryProvider>\r\n </PageTreeProvider>\r\n </div>\r\n )\r\n}\r\n"],"names":["DndContext","DragOverlay","PointerSensor","useDroppable","useSensor","useSensors","arrayMove","SortableContext","useSortable","DefaultListView","ListQueryProvider","Pill","SelectAll","SelectRow","SortHeader","toast","useConfig","useLocale","usePreferences","useTranslation","useRouter","useSearchParams","React","buildInsertDropTargets","getDropTargetParentDoc","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","getPageTreeBadgeColor","getPageTreeBadgeLabel","getPageTreeDisplayStatus","PageTreeProvider","PageTreeRowDndProvider","styles","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","String","_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","getStatusClassName","status","renderStatusBadge","badgeConfig","t","customColor","badgeColors","colors","statusClass","style","span","className","data-custom-color","badgeLabels","labels","ParentMoveToggle","enabled","onToggle","aria-checked","aria-label","onClick","pillStyle","size","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","columnsToUse","unshift","field","hidden","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","ref","HierarchyTableRow","activeColumns","activeDragType","canReorderRows","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","sortable","hasActiveMoveDrag","isActiveDragRow","setRowRef","useCallback","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","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","allDocs","canMoveDocs","query","sourceDocs","props","router","searchParams","config","locale","i18n","setActiveDragRowID","useState","setActiveDragType","setActiveDropTarget","collapsedIDs","setCollapsedIDs","optimisticOrderRowIDs","setOptimisticOrderRowIDs","parentMoveEnabled","setParentMoveEnabled","pendingMoveRowID","setPendingMoveRowID","getPreference","setPreference","parentMovePreferenceKey","toggleRow","currentState","nextState","delete","add","handleParentMoveToggle","currentValue","nextValue","currentSort","searchParamSort","getAll","currentLimit","currentRequestedPage","liveAllDocs","collapseResetKey","JSON","stringify","viewType","toString","hierarchyValue","useEffect","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","encodeURIComponent","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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"}
|