payload-nested-docs-page-tree 1.6.4 → 1.6.7

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/README.md CHANGED
@@ -10,6 +10,7 @@ Page management tools for Payload admin, built on [`@payloadcms/plugin-nested-do
10
10
  - **Customizable badges** with label and color overrides for light and dark themes.
11
11
  - **Homepage icon** to identify the root `home` page.
12
12
  - **Publishing controls** to stage hierarchy changes or publish eligible moves immediately.
13
+ - **Child validation errors** identify the invalid page, ID, locale, and field messages when a parent save resaves descendants.
13
14
  - **Diagnostics mode** to trace moves, reorders, and published-state changes.
14
15
  - **Native list tools** including sorting, filters, pagination, bulk selection, and row actions.
15
16
 
@@ -1,8 +1,6 @@
1
1
  import type { Column, ListQuery, ListViewClientProps } from 'payload';
2
2
  import type { NestedDocsPageTreePluginBadgesLinks, NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeSourceDoc } from '../types.js';
3
- import { type PageTreeDoc } from '../utilities/pageTree.js';
4
3
  type PageTreeListViewClientProps = {
5
- allDocs: PageTreeDoc[];
6
4
  badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig;
7
5
  badgesLinks?: NestedDocsPageTreePluginBadgesLinks;
8
6
  canMoveDocs: boolean;
@@ -11,8 +9,10 @@ type PageTreeListViewClientProps = {
11
9
  orderableFieldName?: string;
12
10
  parentFieldSlug: string;
13
11
  query: ListQuery;
12
+ /** Server tree order, which indexes each column's renderedCells. */
13
+ renderedRowIDs: string[];
14
14
  sourceDocs: PageTreeSourceDoc[];
15
15
  useAsTitle: string;
16
16
  } & Omit<ListViewClientProps, 'columnState' | 'Table'>;
17
- export default function PageTreeListViewClient({ allDocs, badgeConfig, badgesLinks, canMoveDocs, columnState, homeIndicatorEnabled, orderableFieldName, parentFieldSlug, query, sourceDocs, useAsTitle, ...props }: PageTreeListViewClientProps): import("react/jsx-runtime").JSX.Element;
17
+ export default function PageTreeListViewClient({ badgeConfig, badgesLinks, canMoveDocs, columnState, homeIndicatorEnabled, orderableFieldName, parentFieldSlug, query, renderedRowIDs, sourceDocs, useAsTitle, ...props }: PageTreeListViewClientProps): import("react/jsx-runtime").JSX.Element;
18
18
  export {};
@@ -721,7 +721,7 @@ function HierarchyTable({ activeDragRowID, activeDragType, activeDropTarget, all
721
721
  })
722
722
  });
723
723
  }
724
- export default function PageTreeListViewClient({ allDocs, badgeConfig, badgesLinks, canMoveDocs, columnState, homeIndicatorEnabled, orderableFieldName, parentFieldSlug, query, sourceDocs, useAsTitle, ...props }) {
724
+ export default function PageTreeListViewClient({ badgeConfig, badgesLinks, canMoveDocs, columnState, homeIndicatorEnabled, orderableFieldName, parentFieldSlug, query, renderedRowIDs, sourceDocs, useAsTitle, ...props }) {
725
725
  const dndContextID = React.useId();
726
726
  const router = useRouter();
727
727
  const searchParams = useSearchParams();
@@ -779,23 +779,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, badgesLin
779
779
  expandedStorageKey,
780
780
  expansion
781
781
  ]);
782
- const toggleRow = React.useCallback((rowID)=>{
783
- setExpansion((currentState)=>{
784
- const nextState = new Set((currentState.storageKey === expandedStorageKey ? currentState.ids : null) ?? allDocs.filter((doc)=>doc.__pageTreeHasChildren).map((doc)=>doc.__pageTreeID));
785
- if (nextState.has(rowID)) {
786
- nextState.delete(rowID);
787
- } else {
788
- nextState.add(rowID);
789
- }
790
- return {
791
- ids: nextState,
792
- storageKey: expandedStorageKey
793
- };
794
- });
795
- }, [
796
- allDocs,
797
- expandedStorageKey
798
- ]);
799
782
  const handleParentMoveToggle = React.useCallback(()=>{
800
783
  setParentMoveEnabled((currentValue)=>{
801
784
  const nextValue = !currentValue;
@@ -836,6 +819,23 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, badgesLin
836
819
  parentFieldSlug,
837
820
  sourceDocs
838
821
  ]);
822
+ const toggleRow = React.useCallback((rowID)=>{
823
+ setExpansion((currentState)=>{
824
+ const nextState = new Set((currentState.storageKey === expandedStorageKey ? currentState.ids : null) ?? liveAllDocs.filter((doc)=>doc.__pageTreeHasChildren).map((doc)=>doc.__pageTreeID));
825
+ if (nextState.has(rowID)) {
826
+ nextState.delete(rowID);
827
+ } else {
828
+ nextState.add(rowID);
829
+ }
830
+ return {
831
+ ids: nextState,
832
+ storageKey: expandedStorageKey
833
+ };
834
+ });
835
+ }, [
836
+ expandedStorageKey,
837
+ liveAllDocs
838
+ ]);
839
839
  const collapsedIDs = React.useMemo(()=>new Set(liveAllDocs.filter((doc)=>doc.__pageTreeHasChildren && expansion.storageKey === expandedStorageKey && expansion.ids !== null && !expansion.ids.has(doc.__pageTreeID)).map((doc)=>doc.__pageTreeID)), [
840
840
  expandedStorageKey,
841
841
  expansion,
@@ -928,11 +928,11 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, badgesLin
928
928
  ])), [
929
929
  displayedPaginatedDocs
930
930
  ]);
931
- const renderedCellIndexByDocID = React.useMemo(()=>new Map(allDocs.map((doc, index)=>[
932
- doc.__pageTreeID,
931
+ const renderedCellIndexByDocID = React.useMemo(()=>new Map(renderedRowIDs.map((id, index)=>[
932
+ id,
933
933
  index
934
934
  ])), [
935
- allDocs
935
+ renderedRowIDs
936
936
  ]);
937
937
  const normalizedColumnState = React.useMemo(()=>ensureUseAsTitleColumn(columnState, useAsTitle), [
938
938
  columnState,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/PageTreeListView.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Column, ListQuery, ListViewClientProps, PaginatedDocs } from 'payload'\n\nimport {\n DndContext,\n type DragEndEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n PointerSensor,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n type SortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable'\nimport {\n DefaultListView,\n ListQueryProvider,\n Pill,\n SelectAll,\n SelectRow,\n SortHeader,\n toast,\n useAuth,\n useConfig,\n useLocale,\n usePreferences,\n useTranslation,\n useWindowInfo,\n} from '@payloadcms/ui'\nimport { useRouter, useSearchParams } from 'next/navigation'\nimport React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type {\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginResolvedBadgeConfig,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport {\n buildInsertDropTargets,\n getDropTargetParentDoc,\n type PageTreeDropTarget,\n} from '../utilities/dropTargets.js'\nimport {\n CANCEL_DRAG_MESSAGE,\n getDropValidation,\n type PageTreeDropValidation,\n} from '../utilities/moveValidation.js'\nimport {\n buildDocSlugPath,\n buildPageTreeDocs,\n buildProspectiveDocSlugPath,\n getDocDisplayLabel,\n getVisibleTreeDocs,\n type PageTreeDoc,\n} from '../utilities/pageTree.js'\nimport { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js'\nimport { PageTreeProvider, PageTreeRowDndProvider } from './PageTreeContext.js'\nimport styles from './PageTreeListView.module.css'\nimport { PageTreeStatusBadge } from './PageTreeStatusBadge.js'\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\n\ntype PageTreeListViewClientProps = {\n allDocs: PageTreeDoc[]\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n canMoveDocs: boolean\n columnState: Column[]\n homeIndicatorEnabled: boolean\n orderableFieldName?: string\n parentFieldSlug: string\n query: ListQuery\n sourceDocs: PageTreeSourceDoc[]\n useAsTitle: string\n} & Omit<ListViewClientProps, 'columnState' | 'Table'>\n\ntype SelectableRowData = React.ComponentProps<typeof SelectRow>['rowData']\ntype PageTreeDragType = 'move' | 'order'\n\ntype PageTreeDragData = {\n dragType?: PageTreeDragType\n parentID?: null | string\n rowID?: string\n}\n\ntype PageTreeSortableTransform = ReturnType<typeof useSortable>['transform']\n\ntype PageTreeReorderRequestBody = {\n docsToMove: string[]\n frontendOrder?: PageTreeReorderFrontendOrder\n newKeyWillBe: 'greater' | 'less'\n orderableFieldName: string\n target: {\n id: string\n key: null | string\n }\n}\n\ntype PageTreeReorderFrontendOrder = {\n activeSlug: null | string\n after: PageTreeReorderFrontendOrderEntry[]\n before: PageTreeReorderFrontendOrderEntry[]\n moveFromIndex: number\n moveToIndex: number\n newAfterRowSlug: null | string\n newBeforeRowSlug: null | string\n sort: null | string\n targetSlug: null | string\n}\n\ntype PageTreeReorderFrontendOrderEntry = {\n index: number\n orderKey: null | string\n slug: null | string\n}\n\ntype PageTreeIndexRange = {\n end: number\n start: number\n}\n\ntype PageTreeRangeRect = {\n bottom: number\n height: number\n top: number\n}\n\nconst SILENT_MOVE_MESSAGES = new Set([CANCEL_DRAG_MESSAGE])\nconst ALREADY_ROOT_MESSAGE = 'This page is already in root level.'\n\nfunction getParentMovePreferenceKey(collectionSlug: string): string {\n return `payload-nested-docs-page-tree:${collectionSlug}:parentMoveHandle`\n}\n\nfunction getRowDropID(rowID: string): string {\n return `page-drop:${rowID}`\n}\n\nfunction getSortableRowID(rowID: string): string {\n return `page-sort:${rowID}`\n}\n\nfunction getDiagnosticString(value: unknown): null | string {\n return typeof value === 'string' && value.length > 0 ? value : null\n}\n\nfunction getPageTreeDragData(value: unknown): PageTreeDragData {\n if (!value || typeof value !== 'object') {\n return {}\n }\n\n const data = value as Record<string, unknown>\n const dragType = data.dragType === 'move' || data.dragType === 'order' ? data.dragType : undefined\n const parentID =\n data.parentID === null || typeof data.parentID === 'string' ? data.parentID : undefined\n const rowID = typeof data.rowID === 'string' ? data.rowID : undefined\n\n return {\n dragType,\n parentID,\n rowID,\n }\n}\n\nfunction getSortableTransform(transform: PageTreeSortableTransform): string | undefined {\n if (!transform) {\n return undefined\n }\n\n const scaleX = transform.scaleX ?? 1\n const scaleY = transform.scaleY ?? 1\n\n return `translate3d(${transform.x}px, ${transform.y}px, 0) scaleX(${scaleX}) scaleY(${scaleY})`\n}\n\nfunction getVisibleSubtreeIndexRange(docs: PageTreeDoc[], rootIndex: number): null | PageTreeIndexRange {\n const rootDoc = docs[rootIndex]\n\n if (!rootDoc) {\n return null\n }\n\n let end = rootIndex\n\n for (let index = rootIndex + 1; index < docs.length; index += 1) {\n if (!docs[index]?.__pageTreeAncestorIDs.includes(rootDoc.__pageTreeID)) {\n break\n }\n\n end = index\n }\n\n return {\n end,\n start: rootIndex,\n }\n}\n\nfunction getRangeRect(args: {\n activeNodeRect: Parameters<SortingStrategy>[0]['activeNodeRect']\n activeRange: PageTreeIndexRange\n range: PageTreeIndexRange\n rects: Parameters<SortingStrategy>[0]['rects']\n}): null | PageTreeRangeRect {\n const { activeNodeRect, activeRange, range, rects } = args\n const firstRect =\n rects[range.start] ?? (range.start === activeRange.start ? activeNodeRect : undefined)\n const lastRect = rects[range.end] ?? (range.end === activeRange.end ? activeNodeRect : undefined)\n\n if (!firstRect || !lastRect) {\n return null\n }\n\n return {\n bottom: lastRect.top + lastRect.height,\n height: lastRect.top + lastRect.height - firstRect.top,\n top: firstRect.top,\n }\n}\n\nfunction isIndexInRange(index: number, range: PageTreeIndexRange): boolean {\n return index >= range.start && index <= range.end\n}\n\nfunction buildPageTreeSortingStrategy(docs: PageTreeDoc[]): SortingStrategy {\n return ({ activeIndex, activeNodeRect, index, overIndex, rects }) => {\n const activeRange = getVisibleSubtreeIndexRange(docs, activeIndex)\n const overRange = getVisibleSubtreeIndexRange(docs, overIndex)\n\n if (!activeRange || !overRange || activeRange.start === overRange.start) {\n return null\n }\n\n const activeRect = getRangeRect({\n activeNodeRect,\n activeRange,\n range: activeRange,\n rects,\n })\n const overRect = getRangeRect({\n activeNodeRect,\n activeRange,\n range: overRange,\n rects,\n })\n\n if (!activeRect || !overRect) {\n return null\n }\n\n if (isIndexInRange(index, activeRange)) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y:\n activeRange.start < overRange.start\n ? overRect.bottom - activeRect.bottom\n : overRect.top - activeRect.top,\n }\n }\n\n if (activeRange.start < overRange.start && index > activeRange.end && index <= overRange.end) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: -activeRect.height,\n }\n }\n\n if (activeRange.start > overRange.start && index >= overRange.start && index < activeRange.start) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: activeRect.height,\n }\n }\n\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: 0,\n }\n }\n}\n\nfunction buildPaginatedData(\n docs: PageTreeDoc[],\n limit: number,\n requestedPage: number,\n): PaginatedDocs {\n const totalDocs = docs.length\n const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1\n const page = Math.min(Math.max(requestedPage, 1), totalPages)\n const startIndex = (page - 1) * limit\n const pageDocs = docs.slice(startIndex, startIndex + limit)\n\n return {\n docs: pageDocs,\n hasNextPage: page < totalPages,\n hasPrevPage: page > 1,\n limit,\n nextPage: page < totalPages ? page + 1 : null,\n page,\n pagingCounter: totalDocs === 0 ? 0 : startIndex + 1,\n prevPage: page > 1 ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter((entry) => typeof entry === 'string' && entry.length > 0)\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction normalizePositiveInt(value: null | string, fallback: number): number {\n if (typeof value !== 'string') {\n return fallback\n }\n\n const parsedValue = Number.parseInt(value, 10)\n return Number.isNaN(parsedValue) || parsedValue <= 0 ? fallback : parsedValue\n}\n\nfunction isOrderableSortActive(args: { orderableFieldName?: string; sort?: string }): boolean {\n const { orderableFieldName, sort } = args\n\n return Boolean(\n orderableFieldName && (sort === orderableFieldName || sort === `-${orderableFieldName}`),\n )\n}\n\nfunction ensureUseAsTitleColumn(columnState: Column[], useAsTitle: string): Column[] {\n return columnState.map((column) =>\n column.accessor === useAsTitle\n ? {\n ...column,\n active: true,\n }\n : column,\n )\n}\n\nfunction sliceColumnState(\n columnState: Column[],\n docs: PageTreeDoc[],\n renderedCellIndexByDocID: ReadonlyMap<string, number>,\n): Column[] {\n return columnState.map((column) => ({\n ...column,\n renderedCells: docs.map((doc) => {\n const renderedCellIndex =\n renderedCellIndexByDocID.get(doc.__pageTreeID) ?? doc.__pageTreeOrderIndex\n\n return column.renderedCells?.[renderedCellIndex] ?? null\n }),\n }))\n}\n\nfunction getSelectableRowData(doc: PageTreeDoc): SelectableRowData {\n const record = doc as Record<string, unknown>\n\n return {\n // Payload's selection Map preserves numeric IDs despite SelectRow's string-only type.\n id: (doc.id ?? doc.__pageTreeID) as SelectableRowData['id'],\n _isLocked: Boolean(record._isLocked),\n _userEditing: record._userEditing as SelectableRowData['_userEditing'],\n }\n}\n\nfunction shouldSilenceMoveMessage(message?: string): boolean {\n return typeof message === 'string' && SILENT_MOVE_MESSAGES.has(message)\n}\n\nfunction getVisibleSubtreeRowIDs(docs: PageTreeDoc[], rowID: string): string[] {\n const rootIndex = docs.findIndex((doc) => doc.__pageTreeID === rowID)\n\n if (rootIndex < 0) {\n return []\n }\n\n const rowIDs = [rowID]\n\n for (const doc of docs.slice(rootIndex + 1)) {\n if (!doc.__pageTreeAncestorIDs.includes(rowID)) {\n break\n }\n\n rowIDs.push(doc.__pageTreeID)\n }\n\n return rowIDs\n}\n\nfunction buildOptimisticOrderRowIDs(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n targetRowID: string\n}): null | string[] {\n const { activeRowID, docs, targetRowID } = args\n\n if (activeRowID === targetRowID) {\n return null\n }\n\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\n\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\n return null\n }\n\n const activeBlockIDs = getVisibleSubtreeRowIDs(docs, activeRowID)\n const targetBlockIDs = getVisibleSubtreeRowIDs(docs, targetRowID)\n\n if (\n activeBlockIDs.length === 0 ||\n targetBlockIDs.length === 0 ||\n targetBlockIDs.includes(activeRowID)\n ) {\n return null\n }\n\n const currentRowIDs = docs.map((doc) => doc.__pageTreeID)\n\n if (activeBlockIDs.length === 1 && targetBlockIDs.length === 1) {\n const activeIndex = currentRowIDs.indexOf(activeRowID)\n const targetIndex = currentRowIDs.indexOf(targetRowID)\n\n return activeIndex < 0 || targetIndex < 0\n ? null\n : arrayMove(currentRowIDs, activeIndex, targetIndex)\n }\n\n const remainingRowIDs = currentRowIDs.filter((rowID) => !activeBlockIDs.includes(rowID))\n const activeIndex = currentRowIDs.indexOf(activeRowID)\n const targetIndex = currentRowIDs.indexOf(targetRowID)\n const targetAnchorID =\n activeIndex < targetIndex ? targetBlockIDs[targetBlockIDs.length - 1] : targetBlockIDs[0]\n\n if (!targetAnchorID) {\n return null\n }\n\n const targetAnchorIndex = remainingRowIDs.indexOf(targetAnchorID)\n\n if (targetAnchorIndex < 0) {\n return null\n }\n\n const insertIndex = activeIndex < targetIndex ? targetAnchorIndex + 1 : targetAnchorIndex\n\n return [\n ...remainingRowIDs.slice(0, insertIndex),\n ...activeBlockIDs,\n ...remainingRowIDs.slice(insertIndex),\n ]\n}\n\nfunction buildReorderRequestBody(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n orderableFieldName?: string\n sort?: string\n targetRowID: string\n}): null | PageTreeReorderRequestBody {\n const { activeRowID, docs, orderableFieldName, sort, targetRowID } = args\n\n if (!orderableFieldName || (sort !== orderableFieldName && sort !== `-${orderableFieldName}`)) {\n return null\n }\n\n if (activeRowID === targetRowID) {\n return null\n }\n\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\n\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\n return null\n }\n\n const siblingDocs = docs.filter(\n (doc) => doc.__pageTreeParentID === activeDoc.__pageTreeParentID,\n )\n const moveFromIndex = siblingDocs.findIndex((doc) => doc.__pageTreeID === activeRowID)\n const moveToIndex = siblingDocs.findIndex((doc) => doc.__pageTreeID === targetRowID)\n\n if (moveFromIndex < 0 || moveToIndex < 0 || moveFromIndex === moveToIndex) {\n return null\n }\n\n const newBeforeRow =\n moveToIndex > moveFromIndex ? siblingDocs[moveToIndex] : siblingDocs[moveToIndex - 1]\n const newAfterRow =\n moveToIndex > moveFromIndex ? siblingDocs[moveToIndex + 1] : siblingDocs[moveToIndex]\n const target = newBeforeRow ?? newAfterRow\n\n if (!target) {\n return null\n }\n\n const getFrontendOrderEntry = (\n doc: PageTreeDoc,\n index: number,\n ): PageTreeReorderFrontendOrderEntry => {\n const orderKey = doc[orderableFieldName]\n\n return {\n slug: getDiagnosticString(doc.slug),\n index,\n orderKey: typeof orderKey === 'string' && orderKey.length > 0 ? orderKey : null,\n }\n }\n const siblingDocsAfter = [...siblingDocs]\n const [movedSiblingDoc] = siblingDocsAfter.splice(moveFromIndex, 1)\n\n if (!movedSiblingDoc) {\n return null\n }\n\n siblingDocsAfter.splice(moveToIndex, 0, movedSiblingDoc)\n\n const targetKey = target[orderableFieldName]\n const newKeyWillBe =\n (newBeforeRow && sort === orderableFieldName) ||\n (!newBeforeRow && sort === `-${orderableFieldName}`)\n ? 'greater'\n : 'less'\n\n return {\n docsToMove: [activeRowID],\n frontendOrder: {\n activeSlug: getDiagnosticString(activeDoc.slug),\n after: siblingDocsAfter.map(getFrontendOrderEntry),\n before: siblingDocs.map(getFrontendOrderEntry),\n moveFromIndex,\n moveToIndex,\n newAfterRowSlug: newAfterRow ? getDiagnosticString(newAfterRow.slug) : null,\n newBeforeRowSlug: newBeforeRow ? getDiagnosticString(newBeforeRow.slug) : null,\n sort: sort ?? null,\n targetSlug: getDiagnosticString(targetDoc.slug),\n },\n newKeyWillBe,\n orderableFieldName,\n target: {\n id: target.__pageTreeID,\n key: typeof targetKey === 'string' && targetKey.length > 0 ? targetKey : null,\n },\n }\n}\n\nfunction orderDocsByRowIDs(docs: PageTreeDoc[], orderRowIDs: null | string[]): PageTreeDoc[] {\n if (!orderRowIDs) {\n return docs\n }\n\n const docsByID = new Map(docs.map((doc) => [doc.__pageTreeID, doc]))\n const orderedDocs = orderRowIDs.flatMap((rowID) => {\n const doc = docsByID.get(rowID)\n\n return doc ? [doc] : []\n })\n\n return orderedDocs.length === docs.length ? orderedDocs : docs\n}\n\nfunction getDropTargetValidation(args: {\n activeDoc: PageTreeDoc\n docsByID: ReadonlyMap<string, PageTreeDoc>\n dropTarget: PageTreeDropTarget\n}): PageTreeDropValidation {\n const { activeDoc, docsByID, dropTarget } = args\n\n if (dropTarget.dropType === 'row') {\n return getDropValidation({\n activeDoc,\n targetDoc: docsByID.get(dropTarget.rowID) ?? undefined,\n })\n }\n\n if (dropTarget.parentID === null) {\n if (activeDoc.__pageTreeParentID === null) {\n return {\n isValid: false,\n message: ALREADY_ROOT_MESSAGE,\n parentID: null,\n }\n }\n\n return {\n isValid: true,\n parentID: null,\n }\n }\n\n const targetDoc = docsByID.get(dropTarget.parentID)\n\n if (!targetDoc) {\n return {\n isValid: false,\n message: 'Could not resolve drop target.',\n parentID: dropTarget.parentID,\n }\n }\n\n if (targetDoc.__pageTreeID === activeDoc.__pageTreeID) {\n return {\n isValid: false,\n message: CANCEL_DRAG_MESSAGE,\n parentID: targetDoc.__pageTreeID,\n }\n }\n\n if (targetDoc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)) {\n return {\n isValid: false,\n message: 'A document cannot be moved under one of its descendants.',\n parentID: targetDoc.__pageTreeID,\n }\n }\n\n return {\n isValid: true,\n parentID: targetDoc.__pageTreeID,\n }\n}\n\nfunction renderStatusBadge(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug: string\n doc: PageTreeDoc\n index: number\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n}): React.ReactNode {\n const { badgeConfig, badgesLinks, collectionSlug, doc, index } = args\n return (\n <PageTreeStatusBadge\n badgeConfig={badgeConfig}\n badgesLinks={badgesLinks}\n collectionSlug={collectionSlug}\n doc={doc}\n key={doc.__pageTreeID ?? index}\n />\n )\n}\n\nfunction ParentMoveToggle({\n collectionSlug,\n enabled,\n onToggle,\n}: {\n collectionSlug: string\n enabled: boolean\n onToggle: () => void\n}) {\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n const [mobileActions, setMobileActions] = React.useState<Element | null>(null)\n const setMobileMount = React.useCallback((node: HTMLSpanElement | null) => {\n setMobileActions(\n node?.closest('.collection-list')?.querySelector('.search-bar__actions') ?? null,\n )\n }, [])\n const toggle = (\n <Pill\n aria-checked={enabled}\n aria-label={`${enabled ? 'Hide' : 'Show'} edit hierarchy handles`}\n className=\"pages-hierarchy-parent-move-toggle\"\n id={`pages-hierarchy-parent-move-toggle-${collectionSlug}`}\n onClick={onToggle}\n pillStyle={enabled ? 'dark' : 'light'}\n size=\"small\"\n >\n Edit Hierarchy\n </Pill>\n )\n\n if (smallBreak) {\n return (\n <>\n <span hidden ref={setMobileMount} />\n {mobileActions ? createPortal(toggle, mobileActions) : null}\n </>\n )\n }\n\n return toggle\n}\n\nfunction buildTableColumns(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug: string\n columnState: Column[]\n docs: PageTreeDoc[]\n enableRowSelections?: boolean\n homeIndicatorEnabled: boolean\n orderableFieldName?: string\n parentFieldSlug: string\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n useAsTitle: string\n}): Column[] {\n const {\n badgeConfig,\n badgesLinks,\n collectionSlug,\n columnState,\n docs,\n enableRowSelections,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n t,\n useAsTitle,\n } = args\n const columnsToUse = columnState.map((column) => {\n if (column.accessor === useAsTitle) {\n return {\n ...column,\n active: true,\n renderedCells: docs.map((doc, index) => (\n <PageTreeTitleCell\n doc={doc}\n homeIndicatorEnabled={homeIndicatorEnabled}\n key={doc.__pageTreeID ?? index}\n >\n {column.renderedCells?.[index] ?? getDocDisplayLabel(doc)}\n </PageTreeTitleCell>\n )),\n }\n }\n\n if (column.accessor === '_status') {\n return {\n ...column,\n renderedCells: docs.map((doc, index) =>\n renderStatusBadge({\n badgeConfig,\n badgesLinks,\n collectionSlug,\n doc,\n index,\n t,\n }),\n ),\n }\n }\n\n if (column.accessor === parentFieldSlug) {\n return {\n ...column,\n renderedCells: docs.map((doc, index) =>\n doc.__pageTreeParentID !== null ? (\n (column.renderedCells?.[index] ?? null)\n ) : (\n <span className=\"pages-hierarchy-empty-cell\" key={doc.__pageTreeID ?? index}>\n -\n </span>\n ),\n ),\n }\n }\n\n return column\n })\n\n if (enableRowSelections) {\n columnsToUse.unshift({\n accessor: '_select',\n active: true,\n field: { hidden: true } as Column['field'],\n Heading: <SelectAll />,\n renderedCells: docs.map((doc, index) => (\n <SelectRow key={doc.__pageTreeID ?? index} rowData={getSelectableRowData(doc)} />\n )),\n })\n }\n\n if (orderableFieldName) {\n const orderableColumn = {\n accessor: '_pageTreeOrderSort',\n active: true,\n field: { hidden: true } as Column['field'],\n Heading: <SortHeader />,\n renderedCells: docs.map((doc, index) => (\n <span\n aria-hidden=\"true\"\n className=\"pages-hierarchy-order-sort-spacer\"\n key={doc.__pageTreeID ?? index}\n />\n )),\n } satisfies Column\n const selectColumnIndex = columnsToUse.findIndex((column) => column.accessor === '_select')\n\n columnsToUse.splice(selectColumnIndex >= 0 ? selectColumnIndex + 1 : 0, 0, orderableColumn)\n }\n\n return columnsToUse\n}\n\nfunction HierarchyInsertRow({\n activeColumnsCount,\n activeDragRowID,\n activeDropTargetID,\n dropTarget,\n dropValidation,\n isMovePending,\n}: {\n activeColumnsCount: number\n activeDragRowID: null | string\n activeDropTargetID: null | string\n dropTarget: Extract<PageTreeDropTarget, { dropType: 'insert' }>\n dropValidation?: PageTreeDropValidation\n isMovePending: boolean\n}) {\n const { isOver, setNodeRef } = useDroppable({\n id: dropTarget.dropID,\n data: dropTarget,\n disabled: isMovePending,\n })\n const hasActiveDrag = Boolean(activeDragRowID)\n const showInsertLine = isOver && activeDropTargetID === dropTarget.dropID\n\n return (\n <tr\n className=\"pages-hierarchy-insert-row\"\n data-drag-over={showInsertLine ? 'true' : 'false'}\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\n data-page-tree-insert=\"true\"\n >\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <td colSpan={activeColumnsCount}>\n <div\n className=\"pages-hierarchy-insert-row__target\"\n data-insert-depth={dropTarget.depth}\n ref={setNodeRef}\n />\n </td>\n </tr>\n )\n}\n\nfunction HierarchyTableRow({\n activeColumns,\n activeDragRowID,\n activeDragType,\n canReorderRows,\n doc,\n dropValidation,\n insertAfterDropID,\n insertBeforeDropID,\n isMovePending,\n rowIndex,\n titleCellAccessor,\n}: {\n activeColumns: Column[]\n activeDragRowID: null | string\n activeDragType: null | PageTreeDragType\n canReorderRows: boolean\n doc: PageTreeDoc\n dropValidation?: PageTreeDropValidation\n insertAfterDropID: null | string\n insertBeforeDropID: null | string\n isMovePending: boolean\n rowIndex: number\n titleCellAccessor: string\n}) {\n const { isOver, setNodeRef } = useDroppable({\n id: getRowDropID(doc.__pageTreeID),\n data: {\n dropType: 'row',\n insertAfterDropID,\n insertBeforeDropID,\n rowID: doc.__pageTreeID,\n } satisfies Extract<PageTreeDropTarget, { dropType: 'row' }>,\n disabled: isMovePending,\n })\n const sortable = useSortable({\n id: getSortableRowID(doc.__pageTreeID),\n data: {\n dragType: 'order',\n parentID: doc.__pageTreeParentID,\n rowID: doc.__pageTreeID,\n } satisfies PageTreeDragData,\n disabled: !canReorderRows || isMovePending || activeDragType === 'move',\n })\n const hasActiveMoveDrag = activeDragType === 'move' && Boolean(activeDragRowID)\n const isActiveDragRow = activeDragRowID === doc.__pageTreeID\n const setRowRef = React.useCallback(\n (element: HTMLTableRowElement | null) => {\n setNodeRef(element)\n sortable.setNodeRef(element)\n },\n [setNodeRef, sortable],\n )\n const rowDndValue = React.useMemo(\n () => ({\n isOrderDragging: sortable.isDragging,\n orderHandleAttributes: sortable.attributes,\n orderHandleListeners: sortable.listeners,\n orderHandleRef: sortable.setActivatorNodeRef,\n }),\n [sortable.attributes, sortable.isDragging, sortable.listeners, sortable.setActivatorNodeRef],\n )\n const sortableStyle = React.useMemo(\n () =>\n ({\n position: sortable.isDragging ? 'relative' : undefined,\n transform: getSortableTransform(sortable.transform),\n transition: activeDragType === 'order' ? sortable.transition : undefined,\n zIndex: sortable.isDragging ? 1 : undefined,\n }) as React.CSSProperties,\n [activeDragType, sortable.isDragging, sortable.transform, sortable.transition],\n )\n\n return (\n <tr\n className={`row-${rowIndex + 1}`}\n data-drag-over={activeDragType === 'move' && isOver ? 'true' : 'false'}\n data-drop-valid={hasActiveMoveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\n data-id={doc.id}\n data-is-drag-source={activeDragType === 'move' && isActiveDragRow ? 'true' : 'false'}\n data-is-order-drag-source={sortable.isDragging ? 'true' : 'false'}\n data-page-tree-row=\"true\"\n ref={setRowRef}\n style={sortableStyle}\n >\n <PageTreeRowDndProvider value={rowDndValue}>\n {activeColumns.map((column, columnIndex) => {\n const { accessor } = column\n\n return (\n <td\n className={`cell-${accessor.replace(/\\./g, '__')}`}\n data-page-tree-title-cell={accessor === titleCellAccessor ? 'true' : undefined}\n key={columnIndex}\n >\n {column.renderedCells?.[rowIndex] ?? null}\n </td>\n )\n })}\n </PageTreeRowDndProvider>\n </tr>\n )\n}\n\nfunction HierarchyTable({\n activeDragRowID,\n activeDragType,\n activeDropTarget,\n allDocsByID,\n canReorderRows,\n columns,\n data,\n isMovePending,\n titleCellAccessor,\n}: {\n activeDragRowID: null | string\n activeDragType: null | PageTreeDragType\n activeDropTarget: null | PageTreeDropTarget\n allDocsByID: ReadonlyMap<string, PageTreeDoc>\n canReorderRows: boolean\n columns: Column[]\n data: PageTreeDoc[]\n isMovePending: boolean\n titleCellAccessor: string\n}) {\n const activeColumns = React.useMemo(() => columns.filter((column) => column?.active), [columns])\n const sortableItems = React.useMemo(\n () => data.map((doc) => getSortableRowID(doc.__pageTreeID)),\n [data],\n )\n const sortingStrategy = React.useMemo(() => buildPageTreeSortingStrategy(data), [data])\n const insertDropTargets = React.useMemo(() => buildInsertDropTargets(data), [data])\n const insertDropTargetsByReferenceRowID = React.useMemo(\n () => new Map(insertDropTargets.map((dropTarget) => [dropTarget.referenceRowID, dropTarget])),\n [insertDropTargets],\n )\n const activeDropTargetID =\n activeDropTarget?.dropType === 'insert' ? activeDropTarget.dropID : null\n const activeDoc =\n activeDragType === 'move' && activeDragRowID ? (allDocsByID.get(activeDragRowID) ?? null) : null\n const rowDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\n\n return new Map(\n data.map((doc) => [\n doc.__pageTreeID,\n getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget: {\n dropType: 'row',\n insertAfterDropID: null,\n insertBeforeDropID: null,\n rowID: doc.__pageTreeID,\n },\n }),\n ]),\n )\n }, [activeDoc, allDocsByID, data])\n const insertDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\n\n return new Map(\n insertDropTargets.map((dropTarget) => [\n dropTarget.dropID,\n getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget,\n }),\n ]),\n )\n }, [activeDoc, allDocsByID, insertDropTargets])\n\n if (activeColumns.length === 0) {\n return <div>No columns selected</div>\n }\n\n return (\n <div\n className={[\n 'table-wrap pages-hierarchy-table',\n activeDoc ? 'pages-hierarchy-table--dragging' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"table table--appearance-default\">\n <table cellPadding=\"0\" cellSpacing=\"0\">\n <thead>\n <tr>\n {activeColumns.map((column, index) => (\n <th\n data-page-tree-title-cell={\n column.accessor === titleCellAccessor ? 'true' : undefined\n }\n id={`heading-${column.accessor.replace(/\\./g, '__')}`}\n key={index}\n >\n {column.Heading}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n <SortableContext items={sortableItems} strategy={sortingStrategy}>\n {data.map((doc, rowIndex) => {\n const rootInsertBeforeDropTarget =\n doc.__pageTreeParentID === null\n ? insertDropTargetsByReferenceRowID.get(doc.__pageTreeID)\n : undefined\n const rootInsertTargetIndex =\n rootInsertBeforeDropTarget !== undefined\n ? insertDropTargets.indexOf(rootInsertBeforeDropTarget)\n : -1\n const rootInsertAfterDropTarget =\n rootInsertTargetIndex >= 0\n ? insertDropTargets[rootInsertTargetIndex + 1]\n : undefined\n const isTrailingRootInsert =\n rootInsertAfterDropTarget === insertDropTargets[insertDropTargets.length - 1]\n const nextVisibleDoc = data[rowIndex + 1]\n const hasVisibleDescendantAfter =\n nextVisibleDoc?.__pageTreeAncestorIDs.includes(doc.__pageTreeID) ?? false\n\n return (\n <React.Fragment key={doc.__pageTreeID}>\n {rootInsertBeforeDropTarget ? (\n <HierarchyInsertRow\n activeColumnsCount={activeColumns.length}\n activeDragRowID={activeDoc ? activeDragRowID : null}\n activeDropTargetID={activeDropTargetID}\n dropTarget={rootInsertBeforeDropTarget}\n dropValidation={insertDropValidationByID.get(\n rootInsertBeforeDropTarget.dropID,\n )}\n isMovePending={isMovePending}\n key={rootInsertBeforeDropTarget.dropID}\n />\n ) : null}\n <HierarchyTableRow\n activeColumns={activeColumns}\n activeDragRowID={activeDragRowID}\n activeDragType={activeDragType}\n canReorderRows={canReorderRows}\n doc={doc}\n dropValidation={rowDropValidationByID.get(doc.__pageTreeID)}\n insertAfterDropID={\n hasVisibleDescendantAfter || isTrailingRootInsert\n ? null\n : (rootInsertAfterDropTarget?.dropID ?? null)\n }\n insertBeforeDropID={rootInsertBeforeDropTarget?.dropID ?? null}\n isMovePending={isMovePending}\n rowIndex={rowIndex}\n titleCellAccessor={titleCellAccessor}\n />\n </React.Fragment>\n )\n })}\n </SortableContext>\n </tbody>\n </table>\n </div>\n </div>\n )\n}\n\nexport default function PageTreeListViewClient({\n allDocs,\n badgeConfig,\n badgesLinks,\n canMoveDocs,\n columnState,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n query,\n sourceDocs,\n useAsTitle,\n ...props\n}: PageTreeListViewClientProps) {\n const dndContextID = React.useId()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { config } = useConfig()\n const { user } = useAuth()\n const locale = useLocale()\n const { i18n } = useTranslation()\n const [activeDragRowID, setActiveDragRowID] = React.useState<null | string>(null)\n const [activeDragType, setActiveDragType] = React.useState<null | PageTreeDragType>(null)\n const [activeDropTarget, setActiveDropTarget] = React.useState<null | PageTreeDropTarget>(null)\n const expandedStorageKey =\n user?.id == null\n ? null\n : `payload-page-tree:expanded:${encodeURIComponent(props.collectionSlug)}:${encodeURIComponent(user.collection)}:${encodeURIComponent(String(user.id))}`\n const [expansion, setExpansion] = React.useState<{\n ids: null | Set<string>\n storageKey: null | string\n }>(() => ({ ids: null, storageKey: null }))\n const [optimisticOrderRowIDs, setOptimisticOrderRowIDs] = React.useState<null | string[]>(null)\n const [parentMoveEnabled, setParentMoveEnabled] = React.useState(false)\n const [pendingMoveRowID, setPendingMoveRowID] = React.useState<null | string>(null)\n const { getPreference, setPreference } = usePreferences()\n const parentMovePreferenceKey = React.useMemo(\n () => getParentMovePreferenceKey(props.collectionSlug),\n [props.collectionSlug],\n )\n\n React.useEffect(() => {\n let ids: null | Set<string> = null\n\n if (expandedStorageKey) {\n try {\n const stored: unknown = JSON.parse(window.localStorage.getItem(expandedStorageKey) ?? 'null')\n if (Array.isArray(stored) && stored.every((id) => typeof id === 'string')) {\n ids = new Set(stored)\n }\n } catch {\n // Missing, invalid, or unavailable storage leaves the tree expanded.\n }\n }\n\n setExpansion({ ids, storageKey: expandedStorageKey })\n }, [expandedStorageKey])\n\n React.useEffect(() => {\n // Do not overwrite a new user's saved state before it has been restored.\n if (!expandedStorageKey || expansion.storageKey !== expandedStorageKey || !expansion.ids) {\n return\n }\n\n try {\n window.localStorage.setItem(expandedStorageKey, JSON.stringify([...expansion.ids]))\n } catch {\n // Toggling still works when storage is blocked or full.\n }\n }, [expandedStorageKey, expansion])\n\n const toggleRow = React.useCallback(\n (rowID: string) => {\n setExpansion((currentState) => {\n const nextState = new Set(\n (currentState.storageKey === expandedStorageKey ? currentState.ids : null) ??\n allDocs.filter((doc) => doc.__pageTreeHasChildren).map((doc) => doc.__pageTreeID),\n )\n\n if (nextState.has(rowID)) {\n nextState.delete(rowID)\n } else {\n nextState.add(rowID)\n }\n\n return { ids: nextState, storageKey: expandedStorageKey }\n })\n },\n [allDocs, expandedStorageKey],\n )\n const handleParentMoveToggle = React.useCallback(() => {\n setParentMoveEnabled((currentValue) => {\n const nextValue = !currentValue\n\n void setPreference(parentMovePreferenceKey, nextValue)\n\n return nextValue\n })\n }, [parentMovePreferenceKey, setPreference])\n const currentSort = React.useMemo(() => {\n const searchParamSort = searchParams.getAll('sort')\n\n if (searchParamSort.length > 0) {\n return normalizeSort(searchParamSort)\n }\n\n return normalizeSort(query.sort as string | string[] | undefined)\n }, [query.sort, searchParams])\n const canReorderRows =\n canMoveDocs && isOrderableSortActive({ orderableFieldName, sort: currentSort })\n const currentLimit = React.useMemo(\n () =>\n normalizePositiveInt(\n searchParams.get('limit'),\n typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10,\n ),\n [query.limit, searchParams],\n )\n const currentRequestedPage = React.useMemo(\n () =>\n normalizePositiveInt(\n searchParams.get('page'),\n typeof query.page === 'number' && query.page > 0 ? query.page : 1,\n ),\n [query.page, searchParams],\n )\n const liveAllDocs = React.useMemo(\n () =>\n buildPageTreeDocs(sourceDocs, {\n parentFieldSlug,\n sort: currentSort,\n }),\n [currentSort, parentFieldSlug, sourceDocs],\n )\n const collapsedIDs = React.useMemo(\n () =>\n new Set(\n liveAllDocs\n .filter(\n (doc) =>\n doc.__pageTreeHasChildren &&\n expansion.storageKey === expandedStorageKey &&\n expansion.ids !== null &&\n !expansion.ids.has(doc.__pageTreeID),\n )\n .map((doc) => doc.__pageTreeID),\n ),\n [expandedStorageKey, expansion, liveAllDocs],\n )\n const dragResetKey = React.useMemo(\n () => JSON.stringify([props.collectionSlug, props.viewType, searchParams.toString()]),\n [props.collectionSlug, props.viewType, searchParams],\n )\n const hierarchyValue = React.useMemo(\n () => ({\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n parentMoveEnabled,\n pendingMoveRowID,\n toggleRow,\n }),\n [activeDragRowID, canMoveDocs, collapsedIDs, parentMoveEnabled, pendingMoveRowID, toggleRow],\n )\n\n React.useEffect(() => {\n let isMounted = true\n\n void getPreference<boolean>(parentMovePreferenceKey).then((storedValue) => {\n if (isMounted) {\n setParentMoveEnabled(storedValue === true)\n }\n })\n\n return () => {\n isMounted = false\n }\n }, [getPreference, parentMovePreferenceKey])\n\n React.useEffect(() => {\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n setOptimisticOrderRowIDs(null)\n }, [dragResetKey])\n\n const visibleDocs = React.useMemo(\n () => getVisibleTreeDocs(liveAllDocs, collapsedIDs),\n [liveAllDocs, collapsedIDs],\n )\n const paginatedData = React.useMemo(\n () => buildPaginatedData(visibleDocs, currentLimit, currentRequestedPage),\n [currentLimit, currentRequestedPage, visibleDocs],\n )\n const paginatedDocs = paginatedData.docs as PageTreeDoc[]\n const paginatedServerOrderKey = React.useMemo(\n () => paginatedDocs.map((doc) => doc.__pageTreeID).join('\\0'),\n [paginatedDocs],\n )\n const displayedPaginatedDocs = React.useMemo(\n () => orderDocsByRowIDs(paginatedDocs, optimisticOrderRowIDs),\n [optimisticOrderRowIDs, paginatedDocs],\n )\n const displayedPaginatedData = React.useMemo(\n () => ({\n ...paginatedData,\n docs: displayedPaginatedDocs,\n }),\n [displayedPaginatedDocs, paginatedData],\n )\n\n React.useEffect(() => {\n setOptimisticOrderRowIDs(null)\n }, [paginatedServerOrderKey])\n\n const allDocsByID = React.useMemo(\n () => new Map(liveAllDocs.map((doc) => [doc.__pageTreeID, doc])),\n [liveAllDocs],\n )\n const paginatedDocsByID = React.useMemo(\n () => new Map(displayedPaginatedDocs.map((doc) => [doc.__pageTreeID, doc])),\n [displayedPaginatedDocs],\n )\n const renderedCellIndexByDocID = React.useMemo(\n () => new Map(allDocs.map((doc, index) => [doc.__pageTreeID, index])),\n [allDocs],\n )\n const normalizedColumnState = React.useMemo(\n () => ensureUseAsTitleColumn(columnState, useAsTitle),\n [columnState, useAsTitle],\n )\n const paginatedColumnState = React.useMemo(\n () => sliceColumnState(normalizedColumnState, displayedPaginatedDocs, renderedCellIndexByDocID),\n [displayedPaginatedDocs, normalizedColumnState, renderedCellIndexByDocID],\n )\n const tableColumns = React.useMemo(\n () =>\n buildTableColumns({\n badgeConfig,\n badgesLinks,\n collectionSlug: props.collectionSlug,\n columnState: paginatedColumnState,\n docs: displayedPaginatedDocs,\n enableRowSelections: props.enableRowSelections,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n t: i18n.t,\n useAsTitle,\n }),\n [\n paginatedColumnState,\n displayedPaginatedDocs,\n badgeConfig,\n badgesLinks,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n props.collectionSlug,\n props.enableRowSelections,\n i18n.t,\n useAsTitle,\n ],\n )\n const activeDragDoc = activeDragRowID ? (paginatedDocsByID.get(activeDragRowID) ?? null) : null\n const activeDragPreviewPath = React.useMemo(() => {\n if (!activeDragDoc || activeDragType !== 'move') {\n return null\n }\n\n if (!activeDropTarget) {\n return buildDocSlugPath({\n doc: activeDragDoc,\n docsByID: allDocsByID,\n })\n }\n\n const targetDoc = getDropTargetParentDoc({\n docsByID: allDocsByID,\n dropTarget: activeDropTarget,\n })\n const dropValidation = getDropTargetValidation({\n activeDoc: activeDragDoc,\n docsByID: allDocsByID,\n dropTarget: activeDropTarget,\n })\n\n if (!dropValidation.isValid) {\n return buildDocSlugPath({\n doc: activeDragDoc,\n docsByID: allDocsByID,\n })\n }\n\n return buildProspectiveDocSlugPath({\n activeDoc: activeDragDoc,\n docsByID: allDocsByID,\n targetDoc: targetDoc ?? undefined,\n })\n }, [activeDragDoc, activeDragType, activeDropTarget, allDocsByID])\n const isMovePending = pendingMoveRowID !== null\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 2,\n },\n }),\n )\n const handleDragCancel = React.useCallback(() => {\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n }, [])\n const handleDragStart = React.useCallback(\n (event: DragStartEvent) => {\n if (!canMoveDocs || isMovePending) {\n return\n }\n\n const dragData = getPageTreeDragData(event.active.data.current)\n const { dragType, rowID } = dragData\n\n if (\n typeof rowID === 'string' &&\n dragType &&\n paginatedDocsByID.has(rowID) &&\n (dragType !== 'order' || canReorderRows)\n ) {\n setActiveDragRowID(rowID)\n setActiveDragType(dragType)\n setActiveDropTarget(null)\n }\n },\n [canMoveDocs, canReorderRows, isMovePending, paginatedDocsByID],\n )\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\n const dragData = getPageTreeDragData(event.active.data.current)\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\n\n if (dragData.dragType === 'order') {\n setActiveDropTarget(null)\n return\n }\n\n if (dragData.dragType !== 'move' || !overData) {\n setActiveDropTarget(null)\n return\n }\n\n if (overData.dropType === 'insert') {\n setActiveDropTarget(overData)\n return\n }\n\n if (overData.dropType === 'row') {\n setActiveDropTarget(overData)\n return\n }\n\n setActiveDropTarget(null)\n }, [])\n const handleDragEnd = React.useCallback(\n async (event: DragEndEvent) => {\n const dragData = getPageTreeDragData(event.active.data.current)\n const { dragType, rowID } = dragData\n const activeDoc = typeof rowID === 'string' ? (paginatedDocsByID.get(rowID) ?? null) : null\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\n const overDragData = getPageTreeDragData(event.over?.data.current)\n\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n\n if (dragType === 'order') {\n if (typeof rowID === 'string' && typeof overDragData.rowID === 'string') {\n const nextOrderRowIDs = buildOptimisticOrderRowIDs({\n activeRowID: rowID,\n docs: displayedPaginatedDocs,\n targetRowID: overDragData.rowID,\n })\n const reorderRequestBody = buildReorderRequestBody({\n activeRowID: rowID,\n docs: displayedPaginatedDocs,\n orderableFieldName,\n sort: currentSort,\n targetRowID: overDragData.rowID,\n })\n\n if (!nextOrderRowIDs || !reorderRequestBody) {\n return\n }\n\n const apiRoute = config.routes.api\n const params = new URLSearchParams()\n\n if (locale?.code) {\n params.set('locale', locale.code)\n }\n\n setOptimisticOrderRowIDs(nextOrderRowIDs)\n setPendingMoveRowID(rowID)\n\n try {\n const response = await fetch(\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/reorder${\n params.size > 0 ? `?${params.toString()}` : ''\n }`,\n {\n body: JSON.stringify(reorderRequestBody),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n const result = (await response.json().catch(() => null)) as {\n message?: string\n } | null\n\n if (!response.ok) {\n setOptimisticOrderRowIDs(null)\n toast.error(result?.message ?? 'Could not reorder document.')\n return\n }\n\n if (result?.message === 'initial migration') {\n setOptimisticOrderRowIDs(null)\n }\n\n React.startTransition(() => {\n router.refresh()\n })\n } catch (error) {\n const message =\n error instanceof Error && error.message\n ? error.message\n : 'Could not reorder document.'\n\n setOptimisticOrderRowIDs(null)\n toast.error(message)\n } finally {\n setPendingMoveRowID(null)\n }\n }\n\n return\n }\n\n if (dragType !== 'move' || typeof rowID !== 'string' || !activeDoc || !overData) {\n return\n }\n\n const dropValidation = getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget: overData,\n })\n\n if (!dropValidation.isValid) {\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\n toast.error(dropValidation.message ?? 'Could not move document.')\n }\n\n return\n }\n\n if (\n overData.dropType === 'insert' &&\n activeDoc.__pageTreeParentID === dropValidation.parentID\n ) {\n return\n }\n\n const apiRoute = config.routes.api\n const params = new URLSearchParams()\n\n if (locale?.code) {\n params.set('locale', locale.code)\n }\n\n setPendingMoveRowID(rowID)\n\n try {\n const response = await fetch(\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/move${\n params.size > 0 ? `?${params.toString()}` : ''\n }`,\n {\n body: JSON.stringify({\n parentID: dropValidation.parentID,\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n const result = (await response.json().catch(() => null)) as {\n message?: string\n } | null\n\n if (!response.ok) {\n if (shouldSilenceMoveMessage(result?.message)) {\n return\n }\n\n toast.error(result?.message ?? 'Could not move document.')\n return\n }\n\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\n React.startTransition(() => {\n router.refresh()\n })\n } catch (error) {\n const message =\n error instanceof Error && error.message ? error.message : 'Could not move document.'\n\n toast.error(message)\n } finally {\n setPendingMoveRowID(null)\n }\n },\n [\n allDocsByID,\n config.routes.api,\n currentSort,\n displayedPaginatedDocs,\n i18n.language,\n locale?.code,\n orderableFieldName,\n paginatedDocsByID,\n props.collectionSlug,\n router,\n ],\n )\n const handleDragEndSync = React.useCallback(\n (event: DragEndEvent) => {\n void handleDragEnd(event)\n },\n [handleDragEnd],\n )\n\n const tableNode = React.useMemo(\n () => (\n <DndContext\n collisionDetection={pageTreeCollisionDetectionStrategy}\n id={dndContextID}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEndSync}\n onDragOver={handleDragOver}\n onDragStart={handleDragStart}\n sensors={sensors}\n >\n <HierarchyTable\n activeDragRowID={activeDragRowID}\n activeDragType={activeDragType}\n activeDropTarget={activeDropTarget}\n allDocsByID={allDocsByID}\n canReorderRows={canReorderRows}\n columns={tableColumns}\n data={displayedPaginatedDocs}\n isMovePending={isMovePending}\n titleCellAccessor={useAsTitle}\n />\n <DragOverlay dropAnimation={null} style={{ cursor: 'grabbing' }}>\n {activeDragPreviewPath ? (\n <div className=\"pages-hierarchy-drag-overlay\">{activeDragPreviewPath}</div>\n ) : null}\n </DragOverlay>\n </DndContext>\n ),\n [\n activeDragPreviewPath,\n activeDragRowID,\n activeDragType,\n activeDropTarget,\n allDocsByID,\n canReorderRows,\n displayedPaginatedDocs,\n dndContextID,\n handleDragCancel,\n handleDragEndSync,\n handleDragOver,\n handleDragStart,\n isMovePending,\n sensors,\n tableColumns,\n useAsTitle,\n ],\n )\n const beforeActions = React.useMemo(() => {\n const actions = props.beforeActions ? [...props.beforeActions] : []\n\n if (canMoveDocs) {\n actions.unshift(\n <ParentMoveToggle\n collectionSlug={props.collectionSlug}\n enabled={parentMoveEnabled}\n key=\"parent-move-toggle\"\n onToggle={handleParentMoveToggle}\n />,\n )\n }\n\n return actions.length > 0 ? actions : undefined\n }, [\n canMoveDocs,\n handleParentMoveToggle,\n parentMoveEnabled,\n props.beforeActions,\n props.collectionSlug,\n ])\n\n return (\n <div className={styles.root}>\n <PageTreeProvider value={hierarchyValue}>\n <ListQueryProvider\n collectionSlug={props.collectionSlug}\n data={displayedPaginatedData}\n modifySearchParams\n orderableFieldName={orderableFieldName}\n query={{\n ...query,\n limit: currentLimit,\n page: displayedPaginatedData.page,\n sort: currentSort,\n }}\n >\n <DefaultListView\n {...props}\n beforeActions={beforeActions}\n columnState={paginatedColumnState}\n Table={tableNode}\n />\n </ListQueryProvider>\n </PageTreeProvider>\n </div>\n )\n}\n"],"names":["DndContext","DragOverlay","PointerSensor","useDroppable","useSensor","useSensors","arrayMove","SortableContext","useSortable","DefaultListView","ListQueryProvider","Pill","SelectAll","SelectRow","SortHeader","toast","useAuth","useConfig","useLocale","usePreferences","useTranslation","useWindowInfo","useRouter","useSearchParams","React","createPortal","buildInsertDropTargets","getDropTargetParentDoc","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","PageTreeProvider","PageTreeRowDndProvider","styles","PageTreeStatusBadge","PageTreeTitleCell","SILENT_MOVE_MESSAGES","Set","ALREADY_ROOT_MESSAGE","getParentMovePreferenceKey","collectionSlug","getRowDropID","rowID","getSortableRowID","getDiagnosticString","value","length","getPageTreeDragData","data","dragType","undefined","parentID","getSortableTransform","transform","scaleX","scaleY","x","y","getVisibleSubtreeIndexRange","docs","rootIndex","rootDoc","end","index","__pageTreeAncestorIDs","includes","__pageTreeID","start","getRangeRect","args","activeNodeRect","activeRange","range","rects","firstRect","lastRect","bottom","top","height","isIndexInRange","buildPageTreeSortingStrategy","activeIndex","overIndex","overRange","activeRect","overRect","buildPaginatedData","limit","requestedPage","totalDocs","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","slice","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","filter","entry","join","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","isOrderableSortActive","orderableFieldName","sort","Boolean","ensureUseAsTitleColumn","columnState","useAsTitle","map","column","accessor","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","doc","renderedCellIndex","get","__pageTreeOrderIndex","getSelectableRowData","record","id","_isLocked","_userEditing","shouldSilenceMoveMessage","message","has","getVisibleSubtreeRowIDs","findIndex","rowIDs","push","buildOptimisticOrderRowIDs","activeRowID","targetRowID","activeDoc","find","targetDoc","__pageTreeParentID","activeBlockIDs","targetBlockIDs","currentRowIDs","indexOf","targetIndex","remainingRowIDs","targetAnchorID","targetAnchorIndex","insertIndex","buildReorderRequestBody","siblingDocs","moveFromIndex","moveToIndex","newBeforeRow","newAfterRow","target","getFrontendOrderEntry","orderKey","slug","siblingDocsAfter","movedSiblingDoc","splice","targetKey","newKeyWillBe","docsToMove","frontendOrder","activeSlug","after","before","newAfterRowSlug","newBeforeRowSlug","targetSlug","key","orderDocsByRowIDs","orderRowIDs","docsByID","Map","orderedDocs","flatMap","getDropTargetValidation","dropTarget","dropType","isValid","renderStatusBadge","badgeConfig","badgesLinks","ParentMoveToggle","enabled","onToggle","breakpoints","s","smallBreak","mobileActions","setMobileActions","useState","setMobileMount","useCallback","node","closest","querySelector","toggle","aria-checked","aria-label","className","onClick","pillStyle","size","span","hidden","ref","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","t","columnsToUse","unshift","field","Heading","rowData","orderableColumn","aria-hidden","selectColumnIndex","HierarchyInsertRow","activeColumnsCount","activeDragRowID","activeDropTargetID","dropValidation","isMovePending","isOver","setNodeRef","dropID","disabled","hasActiveDrag","showInsertLine","tr","data-drag-over","data-drop-valid","data-page-tree-insert","td","colSpan","div","data-insert-depth","depth","HierarchyTableRow","activeColumns","activeDragType","canReorderRows","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","sortable","hasActiveMoveDrag","isActiveDragRow","setRowRef","element","rowDndValue","useMemo","isOrderDragging","isDragging","orderHandleAttributes","attributes","orderHandleListeners","listeners","orderHandleRef","setActivatorNodeRef","sortableStyle","position","transition","zIndex","data-id","data-is-drag-source","data-is-order-drag-source","data-page-tree-row","style","columnIndex","replace","data-page-tree-title-cell","HierarchyTable","activeDropTarget","allDocsByID","columns","sortableItems","sortingStrategy","insertDropTargets","insertDropTargetsByReferenceRowID","referenceRowID","rowDropValidationByID","insertDropValidationByID","table","cellPadding","cellSpacing","thead","th","tbody","items","strategy","rootInsertBeforeDropTarget","rootInsertTargetIndex","rootInsertAfterDropTarget","isTrailingRootInsert","nextVisibleDoc","hasVisibleDescendantAfter","Fragment","PageTreeListViewClient","allDocs","canMoveDocs","query","sourceDocs","props","dndContextID","useId","router","searchParams","config","user","locale","i18n","setActiveDragRowID","setActiveDragType","setActiveDropTarget","expandedStorageKey","encodeURIComponent","collection","String","expansion","setExpansion","ids","storageKey","optimisticOrderRowIDs","setOptimisticOrderRowIDs","parentMoveEnabled","setParentMoveEnabled","pendingMoveRowID","setPendingMoveRowID","getPreference","setPreference","parentMovePreferenceKey","useEffect","stored","JSON","parse","window","localStorage","getItem","every","setItem","stringify","toggleRow","currentState","nextState","__pageTreeHasChildren","delete","add","handleParentMoveToggle","currentValue","nextValue","currentSort","searchParamSort","getAll","currentLimit","currentRequestedPage","liveAllDocs","collapsedIDs","dragResetKey","viewType","toString","hierarchyValue","isMounted","then","storedValue","visibleDocs","paginatedData","paginatedDocs","paginatedServerOrderKey","displayedPaginatedDocs","displayedPaginatedData","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","sensors","activationConstraint","distance","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","overDragData","nextOrderRowIDs","reorderRequestBody","apiRoute","routes","api","params","URLSearchParams","code","set","response","fetch","body","credentials","headers","language","method","result","json","catch","ok","error","startTransition","refresh","Error","success","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","beforeActions","actions","root","modifySearchParams","Table"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/components/PageTreeListView.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Column, ListQuery, ListViewClientProps, PaginatedDocs } from 'payload'\n\nimport {\n DndContext,\n type DragEndEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n PointerSensor,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n type SortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable'\nimport {\n DefaultListView,\n ListQueryProvider,\n Pill,\n SelectAll,\n SelectRow,\n SortHeader,\n toast,\n useAuth,\n useConfig,\n useLocale,\n usePreferences,\n useTranslation,\n useWindowInfo,\n} from '@payloadcms/ui'\nimport { useRouter, useSearchParams } from 'next/navigation'\nimport React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type {\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginResolvedBadgeConfig,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport {\n buildInsertDropTargets,\n getDropTargetParentDoc,\n type PageTreeDropTarget,\n} from '../utilities/dropTargets.js'\nimport {\n CANCEL_DRAG_MESSAGE,\n getDropValidation,\n type PageTreeDropValidation,\n} from '../utilities/moveValidation.js'\nimport {\n buildDocSlugPath,\n buildPageTreeDocs,\n buildProspectiveDocSlugPath,\n getDocDisplayLabel,\n getVisibleTreeDocs,\n type PageTreeDoc,\n} from '../utilities/pageTree.js'\nimport { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js'\nimport { PageTreeProvider, PageTreeRowDndProvider } from './PageTreeContext.js'\nimport styles from './PageTreeListView.module.css'\nimport { PageTreeStatusBadge } from './PageTreeStatusBadge.js'\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\n\ntype PageTreeListViewClientProps = {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n canMoveDocs: boolean\n columnState: Column[]\n homeIndicatorEnabled: boolean\n orderableFieldName?: string\n parentFieldSlug: string\n query: ListQuery\n /** Server tree order, which indexes each column's renderedCells. */\n renderedRowIDs: string[]\n sourceDocs: PageTreeSourceDoc[]\n useAsTitle: string\n} & Omit<ListViewClientProps, 'columnState' | 'Table'>\n\ntype SelectableRowData = React.ComponentProps<typeof SelectRow>['rowData']\ntype PageTreeDragType = 'move' | 'order'\n\ntype PageTreeDragData = {\n dragType?: PageTreeDragType\n parentID?: null | string\n rowID?: string\n}\n\ntype PageTreeSortableTransform = ReturnType<typeof useSortable>['transform']\n\ntype PageTreeReorderRequestBody = {\n docsToMove: string[]\n frontendOrder?: PageTreeReorderFrontendOrder\n newKeyWillBe: 'greater' | 'less'\n orderableFieldName: string\n target: {\n id: string\n key: null | string\n }\n}\n\ntype PageTreeReorderFrontendOrder = {\n activeSlug: null | string\n after: PageTreeReorderFrontendOrderEntry[]\n before: PageTreeReorderFrontendOrderEntry[]\n moveFromIndex: number\n moveToIndex: number\n newAfterRowSlug: null | string\n newBeforeRowSlug: null | string\n sort: null | string\n targetSlug: null | string\n}\n\ntype PageTreeReorderFrontendOrderEntry = {\n index: number\n orderKey: null | string\n slug: null | string\n}\n\ntype PageTreeIndexRange = {\n end: number\n start: number\n}\n\ntype PageTreeRangeRect = {\n bottom: number\n height: number\n top: number\n}\n\nconst SILENT_MOVE_MESSAGES = new Set([CANCEL_DRAG_MESSAGE])\nconst ALREADY_ROOT_MESSAGE = 'This page is already in root level.'\n\nfunction getParentMovePreferenceKey(collectionSlug: string): string {\n return `payload-nested-docs-page-tree:${collectionSlug}:parentMoveHandle`\n}\n\nfunction getRowDropID(rowID: string): string {\n return `page-drop:${rowID}`\n}\n\nfunction getSortableRowID(rowID: string): string {\n return `page-sort:${rowID}`\n}\n\nfunction getDiagnosticString(value: unknown): null | string {\n return typeof value === 'string' && value.length > 0 ? value : null\n}\n\nfunction getPageTreeDragData(value: unknown): PageTreeDragData {\n if (!value || typeof value !== 'object') {\n return {}\n }\n\n const data = value as Record<string, unknown>\n const dragType = data.dragType === 'move' || data.dragType === 'order' ? data.dragType : undefined\n const parentID =\n data.parentID === null || typeof data.parentID === 'string' ? data.parentID : undefined\n const rowID = typeof data.rowID === 'string' ? data.rowID : undefined\n\n return {\n dragType,\n parentID,\n rowID,\n }\n}\n\nfunction getSortableTransform(transform: PageTreeSortableTransform): string | undefined {\n if (!transform) {\n return undefined\n }\n\n const scaleX = transform.scaleX ?? 1\n const scaleY = transform.scaleY ?? 1\n\n return `translate3d(${transform.x}px, ${transform.y}px, 0) scaleX(${scaleX}) scaleY(${scaleY})`\n}\n\nfunction getVisibleSubtreeIndexRange(docs: PageTreeDoc[], rootIndex: number): null | PageTreeIndexRange {\n const rootDoc = docs[rootIndex]\n\n if (!rootDoc) {\n return null\n }\n\n let end = rootIndex\n\n for (let index = rootIndex + 1; index < docs.length; index += 1) {\n if (!docs[index]?.__pageTreeAncestorIDs.includes(rootDoc.__pageTreeID)) {\n break\n }\n\n end = index\n }\n\n return {\n end,\n start: rootIndex,\n }\n}\n\nfunction getRangeRect(args: {\n activeNodeRect: Parameters<SortingStrategy>[0]['activeNodeRect']\n activeRange: PageTreeIndexRange\n range: PageTreeIndexRange\n rects: Parameters<SortingStrategy>[0]['rects']\n}): null | PageTreeRangeRect {\n const { activeNodeRect, activeRange, range, rects } = args\n const firstRect =\n rects[range.start] ?? (range.start === activeRange.start ? activeNodeRect : undefined)\n const lastRect = rects[range.end] ?? (range.end === activeRange.end ? activeNodeRect : undefined)\n\n if (!firstRect || !lastRect) {\n return null\n }\n\n return {\n bottom: lastRect.top + lastRect.height,\n height: lastRect.top + lastRect.height - firstRect.top,\n top: firstRect.top,\n }\n}\n\nfunction isIndexInRange(index: number, range: PageTreeIndexRange): boolean {\n return index >= range.start && index <= range.end\n}\n\nfunction buildPageTreeSortingStrategy(docs: PageTreeDoc[]): SortingStrategy {\n return ({ activeIndex, activeNodeRect, index, overIndex, rects }) => {\n const activeRange = getVisibleSubtreeIndexRange(docs, activeIndex)\n const overRange = getVisibleSubtreeIndexRange(docs, overIndex)\n\n if (!activeRange || !overRange || activeRange.start === overRange.start) {\n return null\n }\n\n const activeRect = getRangeRect({\n activeNodeRect,\n activeRange,\n range: activeRange,\n rects,\n })\n const overRect = getRangeRect({\n activeNodeRect,\n activeRange,\n range: overRange,\n rects,\n })\n\n if (!activeRect || !overRect) {\n return null\n }\n\n if (isIndexInRange(index, activeRange)) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y:\n activeRange.start < overRange.start\n ? overRect.bottom - activeRect.bottom\n : overRect.top - activeRect.top,\n }\n }\n\n if (activeRange.start < overRange.start && index > activeRange.end && index <= overRange.end) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: -activeRect.height,\n }\n }\n\n if (activeRange.start > overRange.start && index >= overRange.start && index < activeRange.start) {\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: activeRect.height,\n }\n }\n\n return {\n scaleX: 1,\n scaleY: 1,\n x: 0,\n y: 0,\n }\n }\n}\n\nfunction buildPaginatedData(\n docs: PageTreeDoc[],\n limit: number,\n requestedPage: number,\n): PaginatedDocs {\n const totalDocs = docs.length\n const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1\n const page = Math.min(Math.max(requestedPage, 1), totalPages)\n const startIndex = (page - 1) * limit\n const pageDocs = docs.slice(startIndex, startIndex + limit)\n\n return {\n docs: pageDocs,\n hasNextPage: page < totalPages,\n hasPrevPage: page > 1,\n limit,\n nextPage: page < totalPages ? page + 1 : null,\n page,\n pagingCounter: totalDocs === 0 ? 0 : startIndex + 1,\n prevPage: page > 1 ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter((entry) => typeof entry === 'string' && entry.length > 0)\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction normalizePositiveInt(value: null | string, fallback: number): number {\n if (typeof value !== 'string') {\n return fallback\n }\n\n const parsedValue = Number.parseInt(value, 10)\n return Number.isNaN(parsedValue) || parsedValue <= 0 ? fallback : parsedValue\n}\n\nfunction isOrderableSortActive(args: { orderableFieldName?: string; sort?: string }): boolean {\n const { orderableFieldName, sort } = args\n\n return Boolean(\n orderableFieldName && (sort === orderableFieldName || sort === `-${orderableFieldName}`),\n )\n}\n\nfunction ensureUseAsTitleColumn(columnState: Column[], useAsTitle: string): Column[] {\n return columnState.map((column) =>\n column.accessor === useAsTitle\n ? {\n ...column,\n active: true,\n }\n : column,\n )\n}\n\nfunction sliceColumnState(\n columnState: Column[],\n docs: PageTreeDoc[],\n renderedCellIndexByDocID: ReadonlyMap<string, number>,\n): Column[] {\n return columnState.map((column) => ({\n ...column,\n renderedCells: docs.map((doc) => {\n const renderedCellIndex =\n renderedCellIndexByDocID.get(doc.__pageTreeID) ?? doc.__pageTreeOrderIndex\n\n return column.renderedCells?.[renderedCellIndex] ?? null\n }),\n }))\n}\n\nfunction getSelectableRowData(doc: PageTreeDoc): SelectableRowData {\n const record = doc as Record<string, unknown>\n\n return {\n // Payload's selection Map preserves numeric IDs despite SelectRow's string-only type.\n id: (doc.id ?? doc.__pageTreeID) as SelectableRowData['id'],\n _isLocked: Boolean(record._isLocked),\n _userEditing: record._userEditing as SelectableRowData['_userEditing'],\n }\n}\n\nfunction shouldSilenceMoveMessage(message?: string): boolean {\n return typeof message === 'string' && SILENT_MOVE_MESSAGES.has(message)\n}\n\nfunction getVisibleSubtreeRowIDs(docs: PageTreeDoc[], rowID: string): string[] {\n const rootIndex = docs.findIndex((doc) => doc.__pageTreeID === rowID)\n\n if (rootIndex < 0) {\n return []\n }\n\n const rowIDs = [rowID]\n\n for (const doc of docs.slice(rootIndex + 1)) {\n if (!doc.__pageTreeAncestorIDs.includes(rowID)) {\n break\n }\n\n rowIDs.push(doc.__pageTreeID)\n }\n\n return rowIDs\n}\n\nfunction buildOptimisticOrderRowIDs(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n targetRowID: string\n}): null | string[] {\n const { activeRowID, docs, targetRowID } = args\n\n if (activeRowID === targetRowID) {\n return null\n }\n\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\n\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\n return null\n }\n\n const activeBlockIDs = getVisibleSubtreeRowIDs(docs, activeRowID)\n const targetBlockIDs = getVisibleSubtreeRowIDs(docs, targetRowID)\n\n if (\n activeBlockIDs.length === 0 ||\n targetBlockIDs.length === 0 ||\n targetBlockIDs.includes(activeRowID)\n ) {\n return null\n }\n\n const currentRowIDs = docs.map((doc) => doc.__pageTreeID)\n\n if (activeBlockIDs.length === 1 && targetBlockIDs.length === 1) {\n const activeIndex = currentRowIDs.indexOf(activeRowID)\n const targetIndex = currentRowIDs.indexOf(targetRowID)\n\n return activeIndex < 0 || targetIndex < 0\n ? null\n : arrayMove(currentRowIDs, activeIndex, targetIndex)\n }\n\n const remainingRowIDs = currentRowIDs.filter((rowID) => !activeBlockIDs.includes(rowID))\n const activeIndex = currentRowIDs.indexOf(activeRowID)\n const targetIndex = currentRowIDs.indexOf(targetRowID)\n const targetAnchorID =\n activeIndex < targetIndex ? targetBlockIDs[targetBlockIDs.length - 1] : targetBlockIDs[0]\n\n if (!targetAnchorID) {\n return null\n }\n\n const targetAnchorIndex = remainingRowIDs.indexOf(targetAnchorID)\n\n if (targetAnchorIndex < 0) {\n return null\n }\n\n const insertIndex = activeIndex < targetIndex ? targetAnchorIndex + 1 : targetAnchorIndex\n\n return [\n ...remainingRowIDs.slice(0, insertIndex),\n ...activeBlockIDs,\n ...remainingRowIDs.slice(insertIndex),\n ]\n}\n\nfunction buildReorderRequestBody(args: {\n activeRowID: string\n docs: PageTreeDoc[]\n orderableFieldName?: string\n sort?: string\n targetRowID: string\n}): null | PageTreeReorderRequestBody {\n const { activeRowID, docs, orderableFieldName, sort, targetRowID } = args\n\n if (!orderableFieldName || (sort !== orderableFieldName && sort !== `-${orderableFieldName}`)) {\n return null\n }\n\n if (activeRowID === targetRowID) {\n return null\n }\n\n const activeDoc = docs.find((doc) => doc.__pageTreeID === activeRowID)\n const targetDoc = docs.find((doc) => doc.__pageTreeID === targetRowID)\n\n if (!activeDoc || !targetDoc || activeDoc.__pageTreeParentID !== targetDoc.__pageTreeParentID) {\n return null\n }\n\n const siblingDocs = docs.filter(\n (doc) => doc.__pageTreeParentID === activeDoc.__pageTreeParentID,\n )\n const moveFromIndex = siblingDocs.findIndex((doc) => doc.__pageTreeID === activeRowID)\n const moveToIndex = siblingDocs.findIndex((doc) => doc.__pageTreeID === targetRowID)\n\n if (moveFromIndex < 0 || moveToIndex < 0 || moveFromIndex === moveToIndex) {\n return null\n }\n\n const newBeforeRow =\n moveToIndex > moveFromIndex ? siblingDocs[moveToIndex] : siblingDocs[moveToIndex - 1]\n const newAfterRow =\n moveToIndex > moveFromIndex ? siblingDocs[moveToIndex + 1] : siblingDocs[moveToIndex]\n const target = newBeforeRow ?? newAfterRow\n\n if (!target) {\n return null\n }\n\n const getFrontendOrderEntry = (\n doc: PageTreeDoc,\n index: number,\n ): PageTreeReorderFrontendOrderEntry => {\n const orderKey = doc[orderableFieldName]\n\n return {\n slug: getDiagnosticString(doc.slug),\n index,\n orderKey: typeof orderKey === 'string' && orderKey.length > 0 ? orderKey : null,\n }\n }\n const siblingDocsAfter = [...siblingDocs]\n const [movedSiblingDoc] = siblingDocsAfter.splice(moveFromIndex, 1)\n\n if (!movedSiblingDoc) {\n return null\n }\n\n siblingDocsAfter.splice(moveToIndex, 0, movedSiblingDoc)\n\n const targetKey = target[orderableFieldName]\n const newKeyWillBe =\n (newBeforeRow && sort === orderableFieldName) ||\n (!newBeforeRow && sort === `-${orderableFieldName}`)\n ? 'greater'\n : 'less'\n\n return {\n docsToMove: [activeRowID],\n frontendOrder: {\n activeSlug: getDiagnosticString(activeDoc.slug),\n after: siblingDocsAfter.map(getFrontendOrderEntry),\n before: siblingDocs.map(getFrontendOrderEntry),\n moveFromIndex,\n moveToIndex,\n newAfterRowSlug: newAfterRow ? getDiagnosticString(newAfterRow.slug) : null,\n newBeforeRowSlug: newBeforeRow ? getDiagnosticString(newBeforeRow.slug) : null,\n sort: sort ?? null,\n targetSlug: getDiagnosticString(targetDoc.slug),\n },\n newKeyWillBe,\n orderableFieldName,\n target: {\n id: target.__pageTreeID,\n key: typeof targetKey === 'string' && targetKey.length > 0 ? targetKey : null,\n },\n }\n}\n\nfunction orderDocsByRowIDs(docs: PageTreeDoc[], orderRowIDs: null | string[]): PageTreeDoc[] {\n if (!orderRowIDs) {\n return docs\n }\n\n const docsByID = new Map(docs.map((doc) => [doc.__pageTreeID, doc]))\n const orderedDocs = orderRowIDs.flatMap((rowID) => {\n const doc = docsByID.get(rowID)\n\n return doc ? [doc] : []\n })\n\n return orderedDocs.length === docs.length ? orderedDocs : docs\n}\n\nfunction getDropTargetValidation(args: {\n activeDoc: PageTreeDoc\n docsByID: ReadonlyMap<string, PageTreeDoc>\n dropTarget: PageTreeDropTarget\n}): PageTreeDropValidation {\n const { activeDoc, docsByID, dropTarget } = args\n\n if (dropTarget.dropType === 'row') {\n return getDropValidation({\n activeDoc,\n targetDoc: docsByID.get(dropTarget.rowID) ?? undefined,\n })\n }\n\n if (dropTarget.parentID === null) {\n if (activeDoc.__pageTreeParentID === null) {\n return {\n isValid: false,\n message: ALREADY_ROOT_MESSAGE,\n parentID: null,\n }\n }\n\n return {\n isValid: true,\n parentID: null,\n }\n }\n\n const targetDoc = docsByID.get(dropTarget.parentID)\n\n if (!targetDoc) {\n return {\n isValid: false,\n message: 'Could not resolve drop target.',\n parentID: dropTarget.parentID,\n }\n }\n\n if (targetDoc.__pageTreeID === activeDoc.__pageTreeID) {\n return {\n isValid: false,\n message: CANCEL_DRAG_MESSAGE,\n parentID: targetDoc.__pageTreeID,\n }\n }\n\n if (targetDoc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)) {\n return {\n isValid: false,\n message: 'A document cannot be moved under one of its descendants.',\n parentID: targetDoc.__pageTreeID,\n }\n }\n\n return {\n isValid: true,\n parentID: targetDoc.__pageTreeID,\n }\n}\n\nfunction renderStatusBadge(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug: string\n doc: PageTreeDoc\n index: number\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n}): React.ReactNode {\n const { badgeConfig, badgesLinks, collectionSlug, doc, index } = args\n return (\n <PageTreeStatusBadge\n badgeConfig={badgeConfig}\n badgesLinks={badgesLinks}\n collectionSlug={collectionSlug}\n doc={doc}\n key={doc.__pageTreeID ?? index}\n />\n )\n}\n\nfunction ParentMoveToggle({\n collectionSlug,\n enabled,\n onToggle,\n}: {\n collectionSlug: string\n enabled: boolean\n onToggle: () => void\n}) {\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n const [mobileActions, setMobileActions] = React.useState<Element | null>(null)\n const setMobileMount = React.useCallback((node: HTMLSpanElement | null) => {\n setMobileActions(\n node?.closest('.collection-list')?.querySelector('.search-bar__actions') ?? null,\n )\n }, [])\n const toggle = (\n <Pill\n aria-checked={enabled}\n aria-label={`${enabled ? 'Hide' : 'Show'} edit hierarchy handles`}\n className=\"pages-hierarchy-parent-move-toggle\"\n id={`pages-hierarchy-parent-move-toggle-${collectionSlug}`}\n onClick={onToggle}\n pillStyle={enabled ? 'dark' : 'light'}\n size=\"small\"\n >\n Edit Hierarchy\n </Pill>\n )\n\n if (smallBreak) {\n return (\n <>\n <span hidden ref={setMobileMount} />\n {mobileActions ? createPortal(toggle, mobileActions) : null}\n </>\n )\n }\n\n return toggle\n}\n\nfunction buildTableColumns(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug: string\n columnState: Column[]\n docs: PageTreeDoc[]\n enableRowSelections?: boolean\n homeIndicatorEnabled: boolean\n orderableFieldName?: string\n parentFieldSlug: string\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n useAsTitle: string\n}): Column[] {\n const {\n badgeConfig,\n badgesLinks,\n collectionSlug,\n columnState,\n docs,\n enableRowSelections,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n t,\n useAsTitle,\n } = args\n const columnsToUse = columnState.map((column) => {\n if (column.accessor === useAsTitle) {\n return {\n ...column,\n active: true,\n renderedCells: docs.map((doc, index) => (\n <PageTreeTitleCell\n doc={doc}\n homeIndicatorEnabled={homeIndicatorEnabled}\n key={doc.__pageTreeID ?? index}\n >\n {column.renderedCells?.[index] ?? getDocDisplayLabel(doc)}\n </PageTreeTitleCell>\n )),\n }\n }\n\n if (column.accessor === '_status') {\n return {\n ...column,\n renderedCells: docs.map((doc, index) =>\n renderStatusBadge({\n badgeConfig,\n badgesLinks,\n collectionSlug,\n doc,\n index,\n t,\n }),\n ),\n }\n }\n\n if (column.accessor === parentFieldSlug) {\n return {\n ...column,\n renderedCells: docs.map((doc, index) =>\n doc.__pageTreeParentID !== null ? (\n (column.renderedCells?.[index] ?? null)\n ) : (\n <span className=\"pages-hierarchy-empty-cell\" key={doc.__pageTreeID ?? index}>\n -\n </span>\n ),\n ),\n }\n }\n\n return column\n })\n\n if (enableRowSelections) {\n columnsToUse.unshift({\n accessor: '_select',\n active: true,\n field: { hidden: true } as Column['field'],\n Heading: <SelectAll />,\n renderedCells: docs.map((doc, index) => (\n <SelectRow key={doc.__pageTreeID ?? index} rowData={getSelectableRowData(doc)} />\n )),\n })\n }\n\n if (orderableFieldName) {\n const orderableColumn = {\n accessor: '_pageTreeOrderSort',\n active: true,\n field: { hidden: true } as Column['field'],\n Heading: <SortHeader />,\n renderedCells: docs.map((doc, index) => (\n <span\n aria-hidden=\"true\"\n className=\"pages-hierarchy-order-sort-spacer\"\n key={doc.__pageTreeID ?? index}\n />\n )),\n } satisfies Column\n const selectColumnIndex = columnsToUse.findIndex((column) => column.accessor === '_select')\n\n columnsToUse.splice(selectColumnIndex >= 0 ? selectColumnIndex + 1 : 0, 0, orderableColumn)\n }\n\n return columnsToUse\n}\n\nfunction HierarchyInsertRow({\n activeColumnsCount,\n activeDragRowID,\n activeDropTargetID,\n dropTarget,\n dropValidation,\n isMovePending,\n}: {\n activeColumnsCount: number\n activeDragRowID: null | string\n activeDropTargetID: null | string\n dropTarget: Extract<PageTreeDropTarget, { dropType: 'insert' }>\n dropValidation?: PageTreeDropValidation\n isMovePending: boolean\n}) {\n const { isOver, setNodeRef } = useDroppable({\n id: dropTarget.dropID,\n data: dropTarget,\n disabled: isMovePending,\n })\n const hasActiveDrag = Boolean(activeDragRowID)\n const showInsertLine = isOver && activeDropTargetID === dropTarget.dropID\n\n return (\n <tr\n className=\"pages-hierarchy-insert-row\"\n data-drag-over={showInsertLine ? 'true' : 'false'}\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\n data-page-tree-insert=\"true\"\n >\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <td colSpan={activeColumnsCount}>\n <div\n className=\"pages-hierarchy-insert-row__target\"\n data-insert-depth={dropTarget.depth}\n ref={setNodeRef}\n />\n </td>\n </tr>\n )\n}\n\nfunction HierarchyTableRow({\n activeColumns,\n activeDragRowID,\n activeDragType,\n canReorderRows,\n doc,\n dropValidation,\n insertAfterDropID,\n insertBeforeDropID,\n isMovePending,\n rowIndex,\n titleCellAccessor,\n}: {\n activeColumns: Column[]\n activeDragRowID: null | string\n activeDragType: null | PageTreeDragType\n canReorderRows: boolean\n doc: PageTreeDoc\n dropValidation?: PageTreeDropValidation\n insertAfterDropID: null | string\n insertBeforeDropID: null | string\n isMovePending: boolean\n rowIndex: number\n titleCellAccessor: string\n}) {\n const { isOver, setNodeRef } = useDroppable({\n id: getRowDropID(doc.__pageTreeID),\n data: {\n dropType: 'row',\n insertAfterDropID,\n insertBeforeDropID,\n rowID: doc.__pageTreeID,\n } satisfies Extract<PageTreeDropTarget, { dropType: 'row' }>,\n disabled: isMovePending,\n })\n const sortable = useSortable({\n id: getSortableRowID(doc.__pageTreeID),\n data: {\n dragType: 'order',\n parentID: doc.__pageTreeParentID,\n rowID: doc.__pageTreeID,\n } satisfies PageTreeDragData,\n disabled: !canReorderRows || isMovePending || activeDragType === 'move',\n })\n const hasActiveMoveDrag = activeDragType === 'move' && Boolean(activeDragRowID)\n const isActiveDragRow = activeDragRowID === doc.__pageTreeID\n const setRowRef = React.useCallback(\n (element: HTMLTableRowElement | null) => {\n setNodeRef(element)\n sortable.setNodeRef(element)\n },\n [setNodeRef, sortable],\n )\n const rowDndValue = React.useMemo(\n () => ({\n isOrderDragging: sortable.isDragging,\n orderHandleAttributes: sortable.attributes,\n orderHandleListeners: sortable.listeners,\n orderHandleRef: sortable.setActivatorNodeRef,\n }),\n [sortable.attributes, sortable.isDragging, sortable.listeners, sortable.setActivatorNodeRef],\n )\n const sortableStyle = React.useMemo(\n () =>\n ({\n position: sortable.isDragging ? 'relative' : undefined,\n transform: getSortableTransform(sortable.transform),\n transition: activeDragType === 'order' ? sortable.transition : undefined,\n zIndex: sortable.isDragging ? 1 : undefined,\n }) as React.CSSProperties,\n [activeDragType, sortable.isDragging, sortable.transform, sortable.transition],\n )\n\n return (\n <tr\n className={`row-${rowIndex + 1}`}\n data-drag-over={activeDragType === 'move' && isOver ? 'true' : 'false'}\n data-drop-valid={hasActiveMoveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\n data-id={doc.id}\n data-is-drag-source={activeDragType === 'move' && isActiveDragRow ? 'true' : 'false'}\n data-is-order-drag-source={sortable.isDragging ? 'true' : 'false'}\n data-page-tree-row=\"true\"\n ref={setRowRef}\n style={sortableStyle}\n >\n <PageTreeRowDndProvider value={rowDndValue}>\n {activeColumns.map((column, columnIndex) => {\n const { accessor } = column\n\n return (\n <td\n className={`cell-${accessor.replace(/\\./g, '__')}`}\n data-page-tree-title-cell={accessor === titleCellAccessor ? 'true' : undefined}\n key={columnIndex}\n >\n {column.renderedCells?.[rowIndex] ?? null}\n </td>\n )\n })}\n </PageTreeRowDndProvider>\n </tr>\n )\n}\n\nfunction HierarchyTable({\n activeDragRowID,\n activeDragType,\n activeDropTarget,\n allDocsByID,\n canReorderRows,\n columns,\n data,\n isMovePending,\n titleCellAccessor,\n}: {\n activeDragRowID: null | string\n activeDragType: null | PageTreeDragType\n activeDropTarget: null | PageTreeDropTarget\n allDocsByID: ReadonlyMap<string, PageTreeDoc>\n canReorderRows: boolean\n columns: Column[]\n data: PageTreeDoc[]\n isMovePending: boolean\n titleCellAccessor: string\n}) {\n const activeColumns = React.useMemo(() => columns.filter((column) => column?.active), [columns])\n const sortableItems = React.useMemo(\n () => data.map((doc) => getSortableRowID(doc.__pageTreeID)),\n [data],\n )\n const sortingStrategy = React.useMemo(() => buildPageTreeSortingStrategy(data), [data])\n const insertDropTargets = React.useMemo(() => buildInsertDropTargets(data), [data])\n const insertDropTargetsByReferenceRowID = React.useMemo(\n () => new Map(insertDropTargets.map((dropTarget) => [dropTarget.referenceRowID, dropTarget])),\n [insertDropTargets],\n )\n const activeDropTargetID =\n activeDropTarget?.dropType === 'insert' ? activeDropTarget.dropID : null\n const activeDoc =\n activeDragType === 'move' && activeDragRowID ? (allDocsByID.get(activeDragRowID) ?? null) : null\n const rowDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\n\n return new Map(\n data.map((doc) => [\n doc.__pageTreeID,\n getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget: {\n dropType: 'row',\n insertAfterDropID: null,\n insertBeforeDropID: null,\n rowID: doc.__pageTreeID,\n },\n }),\n ]),\n )\n }, [activeDoc, allDocsByID, data])\n const insertDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\n\n return new Map(\n insertDropTargets.map((dropTarget) => [\n dropTarget.dropID,\n getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget,\n }),\n ]),\n )\n }, [activeDoc, allDocsByID, insertDropTargets])\n\n if (activeColumns.length === 0) {\n return <div>No columns selected</div>\n }\n\n return (\n <div\n className={[\n 'table-wrap pages-hierarchy-table',\n activeDoc ? 'pages-hierarchy-table--dragging' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"table table--appearance-default\">\n <table cellPadding=\"0\" cellSpacing=\"0\">\n <thead>\n <tr>\n {activeColumns.map((column, index) => (\n <th\n data-page-tree-title-cell={\n column.accessor === titleCellAccessor ? 'true' : undefined\n }\n id={`heading-${column.accessor.replace(/\\./g, '__')}`}\n key={index}\n >\n {column.Heading}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n <SortableContext items={sortableItems} strategy={sortingStrategy}>\n {data.map((doc, rowIndex) => {\n const rootInsertBeforeDropTarget =\n doc.__pageTreeParentID === null\n ? insertDropTargetsByReferenceRowID.get(doc.__pageTreeID)\n : undefined\n const rootInsertTargetIndex =\n rootInsertBeforeDropTarget !== undefined\n ? insertDropTargets.indexOf(rootInsertBeforeDropTarget)\n : -1\n const rootInsertAfterDropTarget =\n rootInsertTargetIndex >= 0\n ? insertDropTargets[rootInsertTargetIndex + 1]\n : undefined\n const isTrailingRootInsert =\n rootInsertAfterDropTarget === insertDropTargets[insertDropTargets.length - 1]\n const nextVisibleDoc = data[rowIndex + 1]\n const hasVisibleDescendantAfter =\n nextVisibleDoc?.__pageTreeAncestorIDs.includes(doc.__pageTreeID) ?? false\n\n return (\n <React.Fragment key={doc.__pageTreeID}>\n {rootInsertBeforeDropTarget ? (\n <HierarchyInsertRow\n activeColumnsCount={activeColumns.length}\n activeDragRowID={activeDoc ? activeDragRowID : null}\n activeDropTargetID={activeDropTargetID}\n dropTarget={rootInsertBeforeDropTarget}\n dropValidation={insertDropValidationByID.get(\n rootInsertBeforeDropTarget.dropID,\n )}\n isMovePending={isMovePending}\n key={rootInsertBeforeDropTarget.dropID}\n />\n ) : null}\n <HierarchyTableRow\n activeColumns={activeColumns}\n activeDragRowID={activeDragRowID}\n activeDragType={activeDragType}\n canReorderRows={canReorderRows}\n doc={doc}\n dropValidation={rowDropValidationByID.get(doc.__pageTreeID)}\n insertAfterDropID={\n hasVisibleDescendantAfter || isTrailingRootInsert\n ? null\n : (rootInsertAfterDropTarget?.dropID ?? null)\n }\n insertBeforeDropID={rootInsertBeforeDropTarget?.dropID ?? null}\n isMovePending={isMovePending}\n rowIndex={rowIndex}\n titleCellAccessor={titleCellAccessor}\n />\n </React.Fragment>\n )\n })}\n </SortableContext>\n </tbody>\n </table>\n </div>\n </div>\n )\n}\n\nexport default function PageTreeListViewClient({\n badgeConfig,\n badgesLinks,\n canMoveDocs,\n columnState,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n query,\n renderedRowIDs,\n sourceDocs,\n useAsTitle,\n ...props\n}: PageTreeListViewClientProps) {\n const dndContextID = React.useId()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { config } = useConfig()\n const { user } = useAuth()\n const locale = useLocale()\n const { i18n } = useTranslation()\n const [activeDragRowID, setActiveDragRowID] = React.useState<null | string>(null)\n const [activeDragType, setActiveDragType] = React.useState<null | PageTreeDragType>(null)\n const [activeDropTarget, setActiveDropTarget] = React.useState<null | PageTreeDropTarget>(null)\n const expandedStorageKey =\n user?.id == null\n ? null\n : `payload-page-tree:expanded:${encodeURIComponent(props.collectionSlug)}:${encodeURIComponent(user.collection)}:${encodeURIComponent(String(user.id))}`\n const [expansion, setExpansion] = React.useState<{\n ids: null | Set<string>\n storageKey: null | string\n }>(() => ({ ids: null, storageKey: null }))\n const [optimisticOrderRowIDs, setOptimisticOrderRowIDs] = React.useState<null | string[]>(null)\n const [parentMoveEnabled, setParentMoveEnabled] = React.useState(false)\n const [pendingMoveRowID, setPendingMoveRowID] = React.useState<null | string>(null)\n const { getPreference, setPreference } = usePreferences()\n const parentMovePreferenceKey = React.useMemo(\n () => getParentMovePreferenceKey(props.collectionSlug),\n [props.collectionSlug],\n )\n\n React.useEffect(() => {\n let ids: null | Set<string> = null\n\n if (expandedStorageKey) {\n try {\n const stored: unknown = JSON.parse(window.localStorage.getItem(expandedStorageKey) ?? 'null')\n if (Array.isArray(stored) && stored.every((id) => typeof id === 'string')) {\n ids = new Set(stored)\n }\n } catch {\n // Missing, invalid, or unavailable storage leaves the tree expanded.\n }\n }\n\n setExpansion({ ids, storageKey: expandedStorageKey })\n }, [expandedStorageKey])\n\n React.useEffect(() => {\n // Do not overwrite a new user's saved state before it has been restored.\n if (!expandedStorageKey || expansion.storageKey !== expandedStorageKey || !expansion.ids) {\n return\n }\n\n try {\n window.localStorage.setItem(expandedStorageKey, JSON.stringify([...expansion.ids]))\n } catch {\n // Toggling still works when storage is blocked or full.\n }\n }, [expandedStorageKey, expansion])\n\n const handleParentMoveToggle = React.useCallback(() => {\n setParentMoveEnabled((currentValue) => {\n const nextValue = !currentValue\n\n void setPreference(parentMovePreferenceKey, nextValue)\n\n return nextValue\n })\n }, [parentMovePreferenceKey, setPreference])\n const currentSort = React.useMemo(() => {\n const searchParamSort = searchParams.getAll('sort')\n\n if (searchParamSort.length > 0) {\n return normalizeSort(searchParamSort)\n }\n\n return normalizeSort(query.sort as string | string[] | undefined)\n }, [query.sort, searchParams])\n const canReorderRows =\n canMoveDocs && isOrderableSortActive({ orderableFieldName, sort: currentSort })\n const currentLimit = React.useMemo(\n () =>\n normalizePositiveInt(\n searchParams.get('limit'),\n typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10,\n ),\n [query.limit, searchParams],\n )\n const currentRequestedPage = React.useMemo(\n () =>\n normalizePositiveInt(\n searchParams.get('page'),\n typeof query.page === 'number' && query.page > 0 ? query.page : 1,\n ),\n [query.page, searchParams],\n )\n const liveAllDocs = React.useMemo(\n () =>\n buildPageTreeDocs(sourceDocs, {\n parentFieldSlug,\n sort: currentSort,\n }),\n [currentSort, parentFieldSlug, sourceDocs],\n )\n const toggleRow = React.useCallback(\n (rowID: string) => {\n setExpansion((currentState) => {\n const nextState = new Set(\n (currentState.storageKey === expandedStorageKey ? currentState.ids : null) ??\n liveAllDocs.filter((doc) => doc.__pageTreeHasChildren).map((doc) => doc.__pageTreeID),\n )\n\n if (nextState.has(rowID)) {\n nextState.delete(rowID)\n } else {\n nextState.add(rowID)\n }\n\n return { ids: nextState, storageKey: expandedStorageKey }\n })\n },\n [expandedStorageKey, liveAllDocs],\n )\n const collapsedIDs = React.useMemo(\n () =>\n new Set(\n liveAllDocs\n .filter(\n (doc) =>\n doc.__pageTreeHasChildren &&\n expansion.storageKey === expandedStorageKey &&\n expansion.ids !== null &&\n !expansion.ids.has(doc.__pageTreeID),\n )\n .map((doc) => doc.__pageTreeID),\n ),\n [expandedStorageKey, expansion, liveAllDocs],\n )\n const dragResetKey = React.useMemo(\n () => JSON.stringify([props.collectionSlug, props.viewType, searchParams.toString()]),\n [props.collectionSlug, props.viewType, searchParams],\n )\n const hierarchyValue = React.useMemo(\n () => ({\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n parentMoveEnabled,\n pendingMoveRowID,\n toggleRow,\n }),\n [activeDragRowID, canMoveDocs, collapsedIDs, parentMoveEnabled, pendingMoveRowID, toggleRow],\n )\n\n React.useEffect(() => {\n let isMounted = true\n\n void getPreference<boolean>(parentMovePreferenceKey).then((storedValue) => {\n if (isMounted) {\n setParentMoveEnabled(storedValue === true)\n }\n })\n\n return () => {\n isMounted = false\n }\n }, [getPreference, parentMovePreferenceKey])\n\n React.useEffect(() => {\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n setOptimisticOrderRowIDs(null)\n }, [dragResetKey])\n\n const visibleDocs = React.useMemo(\n () => getVisibleTreeDocs(liveAllDocs, collapsedIDs),\n [liveAllDocs, collapsedIDs],\n )\n const paginatedData = React.useMemo(\n () => buildPaginatedData(visibleDocs, currentLimit, currentRequestedPage),\n [currentLimit, currentRequestedPage, visibleDocs],\n )\n const paginatedDocs = paginatedData.docs as PageTreeDoc[]\n const paginatedServerOrderKey = React.useMemo(\n () => paginatedDocs.map((doc) => doc.__pageTreeID).join('\\0'),\n [paginatedDocs],\n )\n const displayedPaginatedDocs = React.useMemo(\n () => orderDocsByRowIDs(paginatedDocs, optimisticOrderRowIDs),\n [optimisticOrderRowIDs, paginatedDocs],\n )\n const displayedPaginatedData = React.useMemo(\n () => ({\n ...paginatedData,\n docs: displayedPaginatedDocs,\n }),\n [displayedPaginatedDocs, paginatedData],\n )\n\n React.useEffect(() => {\n setOptimisticOrderRowIDs(null)\n }, [paginatedServerOrderKey])\n\n const allDocsByID = React.useMemo(\n () => new Map(liveAllDocs.map((doc) => [doc.__pageTreeID, doc])),\n [liveAllDocs],\n )\n const paginatedDocsByID = React.useMemo(\n () => new Map(displayedPaginatedDocs.map((doc) => [doc.__pageTreeID, doc])),\n [displayedPaginatedDocs],\n )\n const renderedCellIndexByDocID = React.useMemo(\n () => new Map(renderedRowIDs.map((id, index) => [id, index])),\n [renderedRowIDs],\n )\n const normalizedColumnState = React.useMemo(\n () => ensureUseAsTitleColumn(columnState, useAsTitle),\n [columnState, useAsTitle],\n )\n const paginatedColumnState = React.useMemo(\n () => sliceColumnState(normalizedColumnState, displayedPaginatedDocs, renderedCellIndexByDocID),\n [displayedPaginatedDocs, normalizedColumnState, renderedCellIndexByDocID],\n )\n const tableColumns = React.useMemo(\n () =>\n buildTableColumns({\n badgeConfig,\n badgesLinks,\n collectionSlug: props.collectionSlug,\n columnState: paginatedColumnState,\n docs: displayedPaginatedDocs,\n enableRowSelections: props.enableRowSelections,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n t: i18n.t,\n useAsTitle,\n }),\n [\n paginatedColumnState,\n displayedPaginatedDocs,\n badgeConfig,\n badgesLinks,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n props.collectionSlug,\n props.enableRowSelections,\n i18n.t,\n useAsTitle,\n ],\n )\n const activeDragDoc = activeDragRowID ? (paginatedDocsByID.get(activeDragRowID) ?? null) : null\n const activeDragPreviewPath = React.useMemo(() => {\n if (!activeDragDoc || activeDragType !== 'move') {\n return null\n }\n\n if (!activeDropTarget) {\n return buildDocSlugPath({\n doc: activeDragDoc,\n docsByID: allDocsByID,\n })\n }\n\n const targetDoc = getDropTargetParentDoc({\n docsByID: allDocsByID,\n dropTarget: activeDropTarget,\n })\n const dropValidation = getDropTargetValidation({\n activeDoc: activeDragDoc,\n docsByID: allDocsByID,\n dropTarget: activeDropTarget,\n })\n\n if (!dropValidation.isValid) {\n return buildDocSlugPath({\n doc: activeDragDoc,\n docsByID: allDocsByID,\n })\n }\n\n return buildProspectiveDocSlugPath({\n activeDoc: activeDragDoc,\n docsByID: allDocsByID,\n targetDoc: targetDoc ?? undefined,\n })\n }, [activeDragDoc, activeDragType, activeDropTarget, allDocsByID])\n const isMovePending = pendingMoveRowID !== null\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 2,\n },\n }),\n )\n const handleDragCancel = React.useCallback(() => {\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n }, [])\n const handleDragStart = React.useCallback(\n (event: DragStartEvent) => {\n if (!canMoveDocs || isMovePending) {\n return\n }\n\n const dragData = getPageTreeDragData(event.active.data.current)\n const { dragType, rowID } = dragData\n\n if (\n typeof rowID === 'string' &&\n dragType &&\n paginatedDocsByID.has(rowID) &&\n (dragType !== 'order' || canReorderRows)\n ) {\n setActiveDragRowID(rowID)\n setActiveDragType(dragType)\n setActiveDropTarget(null)\n }\n },\n [canMoveDocs, canReorderRows, isMovePending, paginatedDocsByID],\n )\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\n const dragData = getPageTreeDragData(event.active.data.current)\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\n\n if (dragData.dragType === 'order') {\n setActiveDropTarget(null)\n return\n }\n\n if (dragData.dragType !== 'move' || !overData) {\n setActiveDropTarget(null)\n return\n }\n\n if (overData.dropType === 'insert') {\n setActiveDropTarget(overData)\n return\n }\n\n if (overData.dropType === 'row') {\n setActiveDropTarget(overData)\n return\n }\n\n setActiveDropTarget(null)\n }, [])\n const handleDragEnd = React.useCallback(\n async (event: DragEndEvent) => {\n const dragData = getPageTreeDragData(event.active.data.current)\n const { dragType, rowID } = dragData\n const activeDoc = typeof rowID === 'string' ? (paginatedDocsByID.get(rowID) ?? null) : null\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\n const overDragData = getPageTreeDragData(event.over?.data.current)\n\n setActiveDragRowID(null)\n setActiveDragType(null)\n setActiveDropTarget(null)\n\n if (dragType === 'order') {\n if (typeof rowID === 'string' && typeof overDragData.rowID === 'string') {\n const nextOrderRowIDs = buildOptimisticOrderRowIDs({\n activeRowID: rowID,\n docs: displayedPaginatedDocs,\n targetRowID: overDragData.rowID,\n })\n const reorderRequestBody = buildReorderRequestBody({\n activeRowID: rowID,\n docs: displayedPaginatedDocs,\n orderableFieldName,\n sort: currentSort,\n targetRowID: overDragData.rowID,\n })\n\n if (!nextOrderRowIDs || !reorderRequestBody) {\n return\n }\n\n const apiRoute = config.routes.api\n const params = new URLSearchParams()\n\n if (locale?.code) {\n params.set('locale', locale.code)\n }\n\n setOptimisticOrderRowIDs(nextOrderRowIDs)\n setPendingMoveRowID(rowID)\n\n try {\n const response = await fetch(\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/reorder${\n params.size > 0 ? `?${params.toString()}` : ''\n }`,\n {\n body: JSON.stringify(reorderRequestBody),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n const result = (await response.json().catch(() => null)) as {\n message?: string\n } | null\n\n if (!response.ok) {\n setOptimisticOrderRowIDs(null)\n toast.error(result?.message ?? 'Could not reorder document.')\n return\n }\n\n if (result?.message === 'initial migration') {\n setOptimisticOrderRowIDs(null)\n }\n\n React.startTransition(() => {\n router.refresh()\n })\n } catch (error) {\n const message =\n error instanceof Error && error.message\n ? error.message\n : 'Could not reorder document.'\n\n setOptimisticOrderRowIDs(null)\n toast.error(message)\n } finally {\n setPendingMoveRowID(null)\n }\n }\n\n return\n }\n\n if (dragType !== 'move' || typeof rowID !== 'string' || !activeDoc || !overData) {\n return\n }\n\n const dropValidation = getDropTargetValidation({\n activeDoc,\n docsByID: allDocsByID,\n dropTarget: overData,\n })\n\n if (!dropValidation.isValid) {\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\n toast.error(dropValidation.message ?? 'Could not move document.')\n }\n\n return\n }\n\n if (\n overData.dropType === 'insert' &&\n activeDoc.__pageTreeParentID === dropValidation.parentID\n ) {\n return\n }\n\n const apiRoute = config.routes.api\n const params = new URLSearchParams()\n\n if (locale?.code) {\n params.set('locale', locale.code)\n }\n\n setPendingMoveRowID(rowID)\n\n try {\n const response = await fetch(\n `${apiRoute}/${props.collectionSlug}/${encodeURIComponent(rowID)}/move${\n params.size > 0 ? `?${params.toString()}` : ''\n }`,\n {\n body: JSON.stringify({\n parentID: dropValidation.parentID,\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n const result = (await response.json().catch(() => null)) as {\n message?: string\n } | null\n\n if (!response.ok) {\n if (shouldSilenceMoveMessage(result?.message)) {\n return\n }\n\n toast.error(result?.message ?? 'Could not move document.')\n return\n }\n\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\n React.startTransition(() => {\n router.refresh()\n })\n } catch (error) {\n const message =\n error instanceof Error && error.message ? error.message : 'Could not move document.'\n\n toast.error(message)\n } finally {\n setPendingMoveRowID(null)\n }\n },\n [\n allDocsByID,\n config.routes.api,\n currentSort,\n displayedPaginatedDocs,\n i18n.language,\n locale?.code,\n orderableFieldName,\n paginatedDocsByID,\n props.collectionSlug,\n router,\n ],\n )\n const handleDragEndSync = React.useCallback(\n (event: DragEndEvent) => {\n void handleDragEnd(event)\n },\n [handleDragEnd],\n )\n\n const tableNode = React.useMemo(\n () => (\n <DndContext\n collisionDetection={pageTreeCollisionDetectionStrategy}\n id={dndContextID}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEndSync}\n onDragOver={handleDragOver}\n onDragStart={handleDragStart}\n sensors={sensors}\n >\n <HierarchyTable\n activeDragRowID={activeDragRowID}\n activeDragType={activeDragType}\n activeDropTarget={activeDropTarget}\n allDocsByID={allDocsByID}\n canReorderRows={canReorderRows}\n columns={tableColumns}\n data={displayedPaginatedDocs}\n isMovePending={isMovePending}\n titleCellAccessor={useAsTitle}\n />\n <DragOverlay dropAnimation={null} style={{ cursor: 'grabbing' }}>\n {activeDragPreviewPath ? (\n <div className=\"pages-hierarchy-drag-overlay\">{activeDragPreviewPath}</div>\n ) : null}\n </DragOverlay>\n </DndContext>\n ),\n [\n activeDragPreviewPath,\n activeDragRowID,\n activeDragType,\n activeDropTarget,\n allDocsByID,\n canReorderRows,\n displayedPaginatedDocs,\n dndContextID,\n handleDragCancel,\n handleDragEndSync,\n handleDragOver,\n handleDragStart,\n isMovePending,\n sensors,\n tableColumns,\n useAsTitle,\n ],\n )\n const beforeActions = React.useMemo(() => {\n const actions = props.beforeActions ? [...props.beforeActions] : []\n\n if (canMoveDocs) {\n actions.unshift(\n <ParentMoveToggle\n collectionSlug={props.collectionSlug}\n enabled={parentMoveEnabled}\n key=\"parent-move-toggle\"\n onToggle={handleParentMoveToggle}\n />,\n )\n }\n\n return actions.length > 0 ? actions : undefined\n }, [\n canMoveDocs,\n handleParentMoveToggle,\n parentMoveEnabled,\n props.beforeActions,\n props.collectionSlug,\n ])\n\n return (\n <div className={styles.root}>\n <PageTreeProvider value={hierarchyValue}>\n <ListQueryProvider\n collectionSlug={props.collectionSlug}\n data={displayedPaginatedData}\n modifySearchParams\n orderableFieldName={orderableFieldName}\n query={{\n ...query,\n limit: currentLimit,\n page: displayedPaginatedData.page,\n sort: currentSort,\n }}\n >\n <DefaultListView\n {...props}\n beforeActions={beforeActions}\n columnState={paginatedColumnState}\n Table={tableNode}\n />\n </ListQueryProvider>\n </PageTreeProvider>\n </div>\n )\n}\n"],"names":["DndContext","DragOverlay","PointerSensor","useDroppable","useSensor","useSensors","arrayMove","SortableContext","useSortable","DefaultListView","ListQueryProvider","Pill","SelectAll","SelectRow","SortHeader","toast","useAuth","useConfig","useLocale","usePreferences","useTranslation","useWindowInfo","useRouter","useSearchParams","React","createPortal","buildInsertDropTargets","getDropTargetParentDoc","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","PageTreeProvider","PageTreeRowDndProvider","styles","PageTreeStatusBadge","PageTreeTitleCell","SILENT_MOVE_MESSAGES","Set","ALREADY_ROOT_MESSAGE","getParentMovePreferenceKey","collectionSlug","getRowDropID","rowID","getSortableRowID","getDiagnosticString","value","length","getPageTreeDragData","data","dragType","undefined","parentID","getSortableTransform","transform","scaleX","scaleY","x","y","getVisibleSubtreeIndexRange","docs","rootIndex","rootDoc","end","index","__pageTreeAncestorIDs","includes","__pageTreeID","start","getRangeRect","args","activeNodeRect","activeRange","range","rects","firstRect","lastRect","bottom","top","height","isIndexInRange","buildPageTreeSortingStrategy","activeIndex","overIndex","overRange","activeRect","overRect","buildPaginatedData","limit","requestedPage","totalDocs","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","slice","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","filter","entry","join","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","isOrderableSortActive","orderableFieldName","sort","Boolean","ensureUseAsTitleColumn","columnState","useAsTitle","map","column","accessor","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","doc","renderedCellIndex","get","__pageTreeOrderIndex","getSelectableRowData","record","id","_isLocked","_userEditing","shouldSilenceMoveMessage","message","has","getVisibleSubtreeRowIDs","findIndex","rowIDs","push","buildOptimisticOrderRowIDs","activeRowID","targetRowID","activeDoc","find","targetDoc","__pageTreeParentID","activeBlockIDs","targetBlockIDs","currentRowIDs","indexOf","targetIndex","remainingRowIDs","targetAnchorID","targetAnchorIndex","insertIndex","buildReorderRequestBody","siblingDocs","moveFromIndex","moveToIndex","newBeforeRow","newAfterRow","target","getFrontendOrderEntry","orderKey","slug","siblingDocsAfter","movedSiblingDoc","splice","targetKey","newKeyWillBe","docsToMove","frontendOrder","activeSlug","after","before","newAfterRowSlug","newBeforeRowSlug","targetSlug","key","orderDocsByRowIDs","orderRowIDs","docsByID","Map","orderedDocs","flatMap","getDropTargetValidation","dropTarget","dropType","isValid","renderStatusBadge","badgeConfig","badgesLinks","ParentMoveToggle","enabled","onToggle","breakpoints","s","smallBreak","mobileActions","setMobileActions","useState","setMobileMount","useCallback","node","closest","querySelector","toggle","aria-checked","aria-label","className","onClick","pillStyle","size","span","hidden","ref","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","t","columnsToUse","unshift","field","Heading","rowData","orderableColumn","aria-hidden","selectColumnIndex","HierarchyInsertRow","activeColumnsCount","activeDragRowID","activeDropTargetID","dropValidation","isMovePending","isOver","setNodeRef","dropID","disabled","hasActiveDrag","showInsertLine","tr","data-drag-over","data-drop-valid","data-page-tree-insert","td","colSpan","div","data-insert-depth","depth","HierarchyTableRow","activeColumns","activeDragType","canReorderRows","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","sortable","hasActiveMoveDrag","isActiveDragRow","setRowRef","element","rowDndValue","useMemo","isOrderDragging","isDragging","orderHandleAttributes","attributes","orderHandleListeners","listeners","orderHandleRef","setActivatorNodeRef","sortableStyle","position","transition","zIndex","data-id","data-is-drag-source","data-is-order-drag-source","data-page-tree-row","style","columnIndex","replace","data-page-tree-title-cell","HierarchyTable","activeDropTarget","allDocsByID","columns","sortableItems","sortingStrategy","insertDropTargets","insertDropTargetsByReferenceRowID","referenceRowID","rowDropValidationByID","insertDropValidationByID","table","cellPadding","cellSpacing","thead","th","tbody","items","strategy","rootInsertBeforeDropTarget","rootInsertTargetIndex","rootInsertAfterDropTarget","isTrailingRootInsert","nextVisibleDoc","hasVisibleDescendantAfter","Fragment","PageTreeListViewClient","canMoveDocs","query","renderedRowIDs","sourceDocs","props","dndContextID","useId","router","searchParams","config","user","locale","i18n","setActiveDragRowID","setActiveDragType","setActiveDropTarget","expandedStorageKey","encodeURIComponent","collection","String","expansion","setExpansion","ids","storageKey","optimisticOrderRowIDs","setOptimisticOrderRowIDs","parentMoveEnabled","setParentMoveEnabled","pendingMoveRowID","setPendingMoveRowID","getPreference","setPreference","parentMovePreferenceKey","useEffect","stored","JSON","parse","window","localStorage","getItem","every","setItem","stringify","handleParentMoveToggle","currentValue","nextValue","currentSort","searchParamSort","getAll","currentLimit","currentRequestedPage","liveAllDocs","toggleRow","currentState","nextState","__pageTreeHasChildren","delete","add","collapsedIDs","dragResetKey","viewType","toString","hierarchyValue","isMounted","then","storedValue","visibleDocs","paginatedData","paginatedDocs","paginatedServerOrderKey","displayedPaginatedDocs","displayedPaginatedData","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","sensors","activationConstraint","distance","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","overDragData","nextOrderRowIDs","reorderRequestBody","apiRoute","routes","api","params","URLSearchParams","code","set","response","fetch","body","credentials","headers","language","method","result","json","catch","ok","error","startTransition","refresh","Error","success","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","beforeActions","actions","root","modifySearchParams","Table"],"mappings":"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"}
@@ -447,7 +447,6 @@ export async function NestedDocsPageTreeListView(props) {
447
447
  }
448
448
  return /*#__PURE__*/ _jsx(PageTreeListViewClient, {
449
449
  ...clientProps,
450
- allDocs: orderedDocs,
451
450
  badgeConfig: pageTreeConfig.badges,
452
451
  badgesLinks: badgesLinks,
453
452
  canMoveDocs: canMoveDocs,
@@ -456,6 +455,7 @@ export async function NestedDocsPageTreeListView(props) {
456
455
  orderableFieldName: orderableFieldName,
457
456
  parentFieldSlug: pageTreeConfig.parentFieldSlug,
458
457
  query: effectiveQuery,
458
+ renderedRowIDs: orderedDocs.map((doc)=>doc.__pageTreeID),
459
459
  sourceDocs: treeSourceDocs,
460
460
  useAsTitle: props.collectionConfig.admin.useAsTitle
461
461
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\n ColumnPreference,\n ListQuery,\n ListViewClientProps,\n PaginatedDocs,\n Params,\n} from 'payload'\n\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\nimport { headers } from 'next/headers.js'\nimport { createLocalReq, extractJWT } from 'payload'\nimport {\n applyLocaleFiltering,\n combineWhereConstraints,\n mergeListSearchAndWhere,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginBadgesLinks, PageTreeSourceDoc } from '../types.js'\n\nimport { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js'\nimport { getPageTreeListSelect } from '../utilities/listSelect.js'\nimport { withPageTreeLocaleStatuses } from '../utilities/localeStatus.js'\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\nimport PageTreeListViewClient from './PageTreeListView.client.js'\n\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\ntype ServerListViewProps = Record<string, any>\n\nfunction isNumericSegment(segment: string): boolean {\n return /^\\d+$/.test(segment)\n}\n\nfunction getKeySegments(key: string): string[] {\n const matches = key.match(/[^[\\]]+/g)\n return matches ? matches.filter(Boolean) : [key]\n}\n\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\n const segments = getKeySegments(key)\n\n if (segments.length === 0) {\n return\n }\n\n let current: Record<string, unknown> | unknown[] = target\n\n for (let index = 0; index < segments.length; index += 1) {\n const segment = segments[index]\n const isLastSegment = index === segments.length - 1\n const nextSegment = segments[index + 1]\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\n ? []\n : {}\n\n if (isLastSegment) {\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n current[arrayIndex] = value\n } else {\n const existingValue = current[segment]\n\n if (existingValue === undefined) {\n current[segment] = value\n } else if (Array.isArray(existingValue)) {\n existingValue.push(value)\n } else {\n current[segment] = [existingValue, value]\n }\n }\n\n return\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n const existingValue = current[arrayIndex]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[arrayIndex] = nextContainer\n }\n\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\n continue\n }\n\n const existingValue = current[segment]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[segment] = nextContainer\n }\n\n current = current[segment] as Record<string, unknown> | unknown[]\n }\n}\n\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\n const parsed: ParsedQuery = {}\n\n for (const [key, value] of Object.entries(searchParams ?? {})) {\n if (Array.isArray(value)) {\n for (const entry of value) {\n if (typeof entry === 'string') {\n setNestedValue(parsed, key, entry)\n }\n }\n } else if (typeof value === 'string') {\n setNestedValue(parsed, key, value)\n }\n }\n\n for (const key of ['columns', 'queryByGroup']) {\n if (typeof parsed[key] === 'string') {\n try {\n parsed[key] = JSON.parse(parsed[key])\n } catch {\n // Leave invalid persisted values untouched and let Payload ignore them.\n }\n }\n }\n\n const sanitized: ParsedQuery = { ...parsed }\n\n for (const [key, value] of Object.entries(sanitized)) {\n if (\n key === 'columns' &&\n ((typeof value === 'string' && value === '[]') ||\n (Array.isArray(value) && value.length === 0))\n ) {\n delete sanitized[key]\n continue\n }\n\n if (\n key === 'where' &&\n typeof value === 'object' &&\n value !== null &&\n !Object.keys(value).length\n ) {\n delete sanitized[key]\n continue\n }\n\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\n const parsedValue = Number.parseInt(value, 10)\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\n }\n\n if (key === 'page' && value === 0) {\n delete sanitized[key]\n continue\n }\n\n if (value === '') {\n delete sanitized[key]\n }\n }\n\n return sanitized\n}\n\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\n return incomingValue === undefined ? fallbackValue : incomingValue\n}\n\nfunction normalizeLimit(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizePage(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizeSearch(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction normalizeSort(value: unknown): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter(\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\n )\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\n return collectionConfig.orderable === true\n ? '_order'\n : typeof collectionConfig.orderable === 'string'\n ? collectionConfig.orderable\n : undefined\n}\n\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\n}\n\nfunction getEffectiveTreeSort(args: {\n defaultSort?: string\n orderableFieldName?: string\n sort?: string\n}): string | undefined {\n const { defaultSort, orderableFieldName, sort } = args\n\n if (sort) {\n return sort\n }\n\n if (\n orderableFieldName &&\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\n ) {\n return defaultSort\n }\n\n return undefined\n}\n\nfunction normalizeWhere(value: unknown): any {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n return undefined\n}\n\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\n const parsedSearchQuery = parseSearchParams(props.searchParams)\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\n const mergedQuery = {\n ...preferenceQuery,\n ...parsedSearchQuery,\n } as ParsedQuery\n\n return {\n ...mergedQuery,\n limit: normalizeLimit(\n getQueryValue(mergedQuery.limit, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page, props.data.page),\n props.data.page,\n ),\n search: normalizeSearch(mergedQuery.search),\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\n where: normalizeWhere(mergedQuery.where),\n }\n}\n\nfunction getBaseFilterArgs(\n props: ServerListViewProps,\n req: any,\n query: ListQuery,\n locale?: string,\n) {\n return {\n limit: 0,\n locale,\n page: 1,\n req,\n sort:\n normalizeSort(query.sort) ??\n (typeof props.collectionConfig.defaultSort === 'string'\n ? props.collectionConfig.defaultSort\n : 'id'),\n }\n}\n\nasync function getDocsWithDisplayStatus(args: {\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n breadcrumbsFieldSlug: string\n collectionConfig: ServerListViewProps['collectionConfig']\n collectionSlug: string\n docs: PageTreeSourceDoc[]\n fastMode?: boolean\n locale?: string\n payload: any\n req: any\n user: unknown\n}): Promise<PageTreeSourceDoc[]> {\n const {\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n collectionSlug,\n docs,\n fastMode,\n locale,\n payload,\n req,\n user,\n } = args\n\n const docIDs = docs\n .map((doc) => doc.id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (docIDs.length === 0) {\n return docs\n }\n\n const currentResult = collectionConfig.versions?.drafts\n ? await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: false,\n fallbackLocale: false,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n select:\n !fastMode || typeof badgesLinks?.liveURL === 'function'\n ? undefined\n : {\n id: true,\n _status: true,\n ...(badgesLinks?.liveURL ? { [breadcrumbsFieldSlug]: true } : {}),\n },\n user,\n where: {\n id: {\n in: docIDs,\n },\n },\n } as never)\n : { docs }\n\n const currentByID = new Map<string, PageTreeSourceDoc>(\n currentResult.docs.map((doc: PageTreeSourceDoc) => [String(doc.id), doc]),\n )\n const displayDocs = withPageTreeDisplayStatuses({\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\n draftDocs: docs,\n })\n const token = badgesLinks && collectionConfig.admin.preview ? extractJWT(req) : null\n\n return Promise.all(\n displayDocs.map(async (doc) => {\n const cleanDoc = { ...doc }\n delete cleanDoc.__pageTreeStatusLinks\n const links = await resolvePageTreeBadgeLinks({\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n draftDoc: cleanDoc,\n publishedDoc: currentByID.get(String(doc.id)),\n req,\n token,\n })\n return { ...cleanDoc, __pageTreeStatusLinks: links }\n }),\n )\n}\n\nasync function getListClientConfig({\n collectionSlug,\n i18n,\n payload,\n req,\n user,\n}: {\n collectionSlug: string\n i18n: unknown\n payload: any\n req: any\n user: unknown\n}): Promise<{\n clientCollectionConfig: any\n clientConfig: any\n}> {\n const clientConfig = getClientConfig({\n config: payload.config,\n i18n: i18n as never,\n importMap: payload.importMap,\n user: (user ?? true) as never,\n } as never)\n\n await applyLocaleFiltering({\n clientConfig,\n config: payload.config,\n req,\n } as never)\n\n const clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n if (!clientCollectionConfig) {\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\n }\n\n return {\n clientCollectionConfig,\n clientConfig,\n }\n}\n\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\n\n if (!pageTreeConfig) {\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\n }\n\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\n }\n\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\n const defaultSort = getDefaultSort(props.collectionConfig)\n const effectiveSort = getEffectiveTreeSort({\n defaultSort,\n orderableFieldName,\n sort: normalizeSort(query.sort),\n })\n const effectiveQuery = {\n ...query,\n sort: effectiveSort,\n }\n const locale = props.locale?.code\n const requestHeaders = await headers()\n const host =\n requestHeaders.get('x-forwarded-host')?.split(',')[0]?.trim() ||\n requestHeaders.get('host') ||\n 'localhost'\n const protocol =\n requestHeaders.get('x-forwarded-proto')?.split(',')[0]?.trim() === 'https' ? 'https' : 'http'\n const requestURL = new URL(props.payload.config.serverURL || `${protocol}://${host}`)\n requestURL.pathname = `${props.payload.config.routes?.admin || '/admin'}/collections/${props.collectionSlug}`\n const req = await createLocalReq(\n {\n fallbackLocale: false,\n locale,\n req: {\n headers: requestHeaders,\n i18n: props.i18n,\n locale,\n payload: props.payload,\n query: effectiveQuery,\n url: requestURL.href,\n user: props.user,\n },\n user: props.user,\n },\n props.payload,\n )\n\n const baseFilter =\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\n const baseFilterConstraint = baseFilter\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\n : undefined\n const mergedWhere = combineWhereConstraints([\n mergeListSearchAndWhere({\n collectionConfig: props.collectionConfig,\n search: normalizeSearch(query.search),\n where: normalizeWhere(query.where),\n } as never),\n baseFilterConstraint ?? undefined,\n ])\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\n\n const fullResult = await props.payload.find({\n collection: props.collectionSlug,\n depth: 0,\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\n fallbackLocale: false,\n includeLockStatus: true,\n select:\n pageTreeConfig.fastMode && !pageTreeConfig.badgesLinks\n ? getPageTreeListSelect({\n columns: props.columnState,\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n orderableFieldName,\n sort: effectiveSort,\n })\n : undefined,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n sort: normalizeSort(query.sort) ?? defaultSort,\n user: props.user,\n where,\n } as never)\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\n collectionSlug: props.collectionSlug,\n i18n: props.i18n,\n payload: props.payload,\n req,\n user: props.user,\n })\n const statusLocales =\n pageTreeConfig.badges.locales &&\n props.collectionConfig.versions?.drafts?.localizeStatus &&\n clientConfig.localization\n ? clientConfig.localization.locales.map(({ code }: { code: string }) => code)\n : []\n const treeSourceDocs = statusLocales.length\n ? await withPageTreeLocaleStatuses({\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n fastMode: pageTreeConfig.fastMode,\n localeBadgeStatus: pageTreeConfig.localeBadgeStatus,\n localeBadgeVisibility: pageTreeConfig.localeBadgeVisibility,\n locales: statusLocales,\n payload: props.payload,\n req,\n })\n : await getDocsWithDisplayStatus({\n fastMode: pageTreeConfig.fastMode,\n badgesLinks: pageTreeConfig.badgesLinks,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n locale,\n payload: props.payload,\n req,\n user: props.user,\n })\n\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n sort: effectiveSort,\n })\n const orderedData: PaginatedDocs = {\n docs: orderedDocs,\n hasNextPage: false,\n hasPrevPage: false,\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\n nextPage: null,\n page: 1,\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\n prevPage: null,\n totalDocs: orderedDocs.length,\n totalPages: 1,\n }\n\n const columnPreferences: ColumnPreference[] = (\n props.columnState as Array<{\n accessor: string\n active: boolean\n }>\n ).map(({ accessor, active }) => ({\n accessor,\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\n }))\n const columns = getColumns({\n clientConfig,\n collectionConfig: clientCollectionConfig,\n collectionSlug: props.collectionSlug,\n columns: columnPreferences,\n i18n: props.i18n,\n permissions: props.permissions,\n } as never)\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\n const renderedTable = renderTable({\n clientCollectionConfig,\n clientConfig,\n collectionConfig: props.collectionConfig,\n columns,\n data: orderedData,\n enableRowSelections: Boolean(props.enableRowSelections),\n fieldPermissions,\n i18n: props.i18n,\n orderableFieldName: orderableFieldName ?? '',\n payload: props.payload,\n query: effectiveQuery,\n req,\n tableAppearance: 'default',\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n viewType: props.viewType,\n } as never)\n const clientProps: Omit<ListViewClientProps, 'columnState' | 'Table'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n beforeActions: props.beforeActions,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n collectionSlug: props.collectionSlug,\n Description: props.Description,\n disableBulkDelete: props.disableBulkDelete,\n disableBulkEdit: props.disableBulkEdit,\n disableQueryPresets: props.disableQueryPresets,\n enableRowSelections: props.enableRowSelections,\n hasCreatePermission: props.hasCreatePermission,\n hasDeletePermission: props.hasDeletePermission,\n hasTrashPermission: props.hasTrashPermission,\n listMenuItems: props.listMenuItems,\n listPreferences: props.listPreferences,\n newDocumentURL: props.newDocumentURL,\n preferenceKey: props.preferenceKey,\n queryPreset: props.queryPreset,\n queryPresetPermissions: props.queryPresetPermissions,\n renderedFilters: props.renderedFilters,\n resolvedFilterOptions: props.resolvedFilterOptions,\n viewType: props.viewType,\n }\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\n const badgesLinks = pageTreeConfig.badgesLinks ? { ...pageTreeConfig.badgesLinks } : undefined\n if (typeof badgesLinks?.liveURL === 'function') {\n delete badgesLinks.liveURL\n }\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n allDocs={orderedDocs}\n badgeConfig={pageTreeConfig.badges}\n badgesLinks={badgesLinks}\n canMoveDocs={canMoveDocs}\n columnState={renderedTable.columnState}\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\n orderableFieldName={orderableFieldName}\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\n query={effectiveQuery}\n sourceDocs={treeSourceDocs}\n useAsTitle={props.collectionConfig.admin.useAsTitle}\n />\n )\n}\n\nexport default NestedDocsPageTreeListView\n"],"names":["getColumns","renderTable","getClientConfig","headers","createLocalReq","extractJWT","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","React","resolvePageTreeBadgeLinks","getPageTreeListSelect","withPageTreeLocaleStatuses","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","PageTreeListViewClient","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","badgesLinks","breadcrumbsFieldSlug","collectionSlug","docs","fastMode","payload","user","docIDs","map","doc","id","currentResult","versions","drafts","find","collection","depth","draft","fallbackLocale","overrideAccess","pagination","select","liveURL","_status","in","currentByID","Map","String","displayDocs","currentDocs","draftDocs","token","admin","preview","Promise","all","cleanDoc","__pageTreeStatusLinks","links","draftDoc","publishedDoc","get","getListClientConfig","i18n","clientConfig","config","importMap","clientCollectionConfig","collections","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","requestHeaders","host","split","trim","protocol","requestURL","URL","serverURL","pathname","routes","url","href","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","includeLockStatus","columns","columnState","parentFieldSlug","statusLocales","badges","locales","localizeStatus","localization","treeSourceDocs","localeBadgeStatus","localeBadgeVisibility","orderedDocs","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","accessor","active","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","beforeActions","BeforeList","BeforeListTable","Description","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","allDocs","badgeConfig","homeIndicatorEnabled","homeIndicator","enabled","sourceDocs"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\n ColumnPreference,\n ListQuery,\n ListViewClientProps,\n PaginatedDocs,\n Params,\n} from 'payload'\n\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\nimport { headers } from 'next/headers.js'\nimport { createLocalReq, extractJWT } from 'payload'\nimport {\n applyLocaleFiltering,\n combineWhereConstraints,\n mergeListSearchAndWhere,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginBadgesLinks, PageTreeSourceDoc } from '../types.js'\n\nimport { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js'\nimport { getPageTreeListSelect } from '../utilities/listSelect.js'\nimport { withPageTreeLocaleStatuses } from '../utilities/localeStatus.js'\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\nimport PageTreeListViewClient from './PageTreeListView.client.js'\n\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\ntype ServerListViewProps = Record<string, any>\n\nfunction isNumericSegment(segment: string): boolean {\n return /^\\d+$/.test(segment)\n}\n\nfunction getKeySegments(key: string): string[] {\n const matches = key.match(/[^[\\]]+/g)\n return matches ? matches.filter(Boolean) : [key]\n}\n\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\n const segments = getKeySegments(key)\n\n if (segments.length === 0) {\n return\n }\n\n let current: Record<string, unknown> | unknown[] = target\n\n for (let index = 0; index < segments.length; index += 1) {\n const segment = segments[index]\n const isLastSegment = index === segments.length - 1\n const nextSegment = segments[index + 1]\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\n ? []\n : {}\n\n if (isLastSegment) {\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n current[arrayIndex] = value\n } else {\n const existingValue = current[segment]\n\n if (existingValue === undefined) {\n current[segment] = value\n } else if (Array.isArray(existingValue)) {\n existingValue.push(value)\n } else {\n current[segment] = [existingValue, value]\n }\n }\n\n return\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n const existingValue = current[arrayIndex]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[arrayIndex] = nextContainer\n }\n\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\n continue\n }\n\n const existingValue = current[segment]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[segment] = nextContainer\n }\n\n current = current[segment] as Record<string, unknown> | unknown[]\n }\n}\n\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\n const parsed: ParsedQuery = {}\n\n for (const [key, value] of Object.entries(searchParams ?? {})) {\n if (Array.isArray(value)) {\n for (const entry of value) {\n if (typeof entry === 'string') {\n setNestedValue(parsed, key, entry)\n }\n }\n } else if (typeof value === 'string') {\n setNestedValue(parsed, key, value)\n }\n }\n\n for (const key of ['columns', 'queryByGroup']) {\n if (typeof parsed[key] === 'string') {\n try {\n parsed[key] = JSON.parse(parsed[key])\n } catch {\n // Leave invalid persisted values untouched and let Payload ignore them.\n }\n }\n }\n\n const sanitized: ParsedQuery = { ...parsed }\n\n for (const [key, value] of Object.entries(sanitized)) {\n if (\n key === 'columns' &&\n ((typeof value === 'string' && value === '[]') ||\n (Array.isArray(value) && value.length === 0))\n ) {\n delete sanitized[key]\n continue\n }\n\n if (\n key === 'where' &&\n typeof value === 'object' &&\n value !== null &&\n !Object.keys(value).length\n ) {\n delete sanitized[key]\n continue\n }\n\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\n const parsedValue = Number.parseInt(value, 10)\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\n }\n\n if (key === 'page' && value === 0) {\n delete sanitized[key]\n continue\n }\n\n if (value === '') {\n delete sanitized[key]\n }\n }\n\n return sanitized\n}\n\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\n return incomingValue === undefined ? fallbackValue : incomingValue\n}\n\nfunction normalizeLimit(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizePage(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizeSearch(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction normalizeSort(value: unknown): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter(\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\n )\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\n return collectionConfig.orderable === true\n ? '_order'\n : typeof collectionConfig.orderable === 'string'\n ? collectionConfig.orderable\n : undefined\n}\n\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\n}\n\nfunction getEffectiveTreeSort(args: {\n defaultSort?: string\n orderableFieldName?: string\n sort?: string\n}): string | undefined {\n const { defaultSort, orderableFieldName, sort } = args\n\n if (sort) {\n return sort\n }\n\n if (\n orderableFieldName &&\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\n ) {\n return defaultSort\n }\n\n return undefined\n}\n\nfunction normalizeWhere(value: unknown): any {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n return undefined\n}\n\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\n const parsedSearchQuery = parseSearchParams(props.searchParams)\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\n const mergedQuery = {\n ...preferenceQuery,\n ...parsedSearchQuery,\n } as ParsedQuery\n\n return {\n ...mergedQuery,\n limit: normalizeLimit(\n getQueryValue(mergedQuery.limit, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page, props.data.page),\n props.data.page,\n ),\n search: normalizeSearch(mergedQuery.search),\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\n where: normalizeWhere(mergedQuery.where),\n }\n}\n\nfunction getBaseFilterArgs(\n props: ServerListViewProps,\n req: any,\n query: ListQuery,\n locale?: string,\n) {\n return {\n limit: 0,\n locale,\n page: 1,\n req,\n sort:\n normalizeSort(query.sort) ??\n (typeof props.collectionConfig.defaultSort === 'string'\n ? props.collectionConfig.defaultSort\n : 'id'),\n }\n}\n\nasync function getDocsWithDisplayStatus(args: {\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n breadcrumbsFieldSlug: string\n collectionConfig: ServerListViewProps['collectionConfig']\n collectionSlug: string\n docs: PageTreeSourceDoc[]\n fastMode?: boolean\n locale?: string\n payload: any\n req: any\n user: unknown\n}): Promise<PageTreeSourceDoc[]> {\n const {\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n collectionSlug,\n docs,\n fastMode,\n locale,\n payload,\n req,\n user,\n } = args\n\n const docIDs = docs\n .map((doc) => doc.id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (docIDs.length === 0) {\n return docs\n }\n\n const currentResult = collectionConfig.versions?.drafts\n ? await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: false,\n fallbackLocale: false,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n select:\n !fastMode || typeof badgesLinks?.liveURL === 'function'\n ? undefined\n : {\n id: true,\n _status: true,\n ...(badgesLinks?.liveURL ? { [breadcrumbsFieldSlug]: true } : {}),\n },\n user,\n where: {\n id: {\n in: docIDs,\n },\n },\n } as never)\n : { docs }\n\n const currentByID = new Map<string, PageTreeSourceDoc>(\n currentResult.docs.map((doc: PageTreeSourceDoc) => [String(doc.id), doc]),\n )\n const displayDocs = withPageTreeDisplayStatuses({\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\n draftDocs: docs,\n })\n const token = badgesLinks && collectionConfig.admin.preview ? extractJWT(req) : null\n\n return Promise.all(\n displayDocs.map(async (doc) => {\n const cleanDoc = { ...doc }\n delete cleanDoc.__pageTreeStatusLinks\n const links = await resolvePageTreeBadgeLinks({\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n draftDoc: cleanDoc,\n publishedDoc: currentByID.get(String(doc.id)),\n req,\n token,\n })\n return { ...cleanDoc, __pageTreeStatusLinks: links }\n }),\n )\n}\n\nasync function getListClientConfig({\n collectionSlug,\n i18n,\n payload,\n req,\n user,\n}: {\n collectionSlug: string\n i18n: unknown\n payload: any\n req: any\n user: unknown\n}): Promise<{\n clientCollectionConfig: any\n clientConfig: any\n}> {\n const clientConfig = getClientConfig({\n config: payload.config,\n i18n: i18n as never,\n importMap: payload.importMap,\n user: (user ?? true) as never,\n } as never)\n\n await applyLocaleFiltering({\n clientConfig,\n config: payload.config,\n req,\n } as never)\n\n const clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n if (!clientCollectionConfig) {\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\n }\n\n return {\n clientCollectionConfig,\n clientConfig,\n }\n}\n\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\n\n if (!pageTreeConfig) {\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\n }\n\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\n }\n\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\n const defaultSort = getDefaultSort(props.collectionConfig)\n const effectiveSort = getEffectiveTreeSort({\n defaultSort,\n orderableFieldName,\n sort: normalizeSort(query.sort),\n })\n const effectiveQuery = {\n ...query,\n sort: effectiveSort,\n }\n const locale = props.locale?.code\n const requestHeaders = await headers()\n const host =\n requestHeaders.get('x-forwarded-host')?.split(',')[0]?.trim() ||\n requestHeaders.get('host') ||\n 'localhost'\n const protocol =\n requestHeaders.get('x-forwarded-proto')?.split(',')[0]?.trim() === 'https' ? 'https' : 'http'\n const requestURL = new URL(props.payload.config.serverURL || `${protocol}://${host}`)\n requestURL.pathname = `${props.payload.config.routes?.admin || '/admin'}/collections/${props.collectionSlug}`\n const req = await createLocalReq(\n {\n fallbackLocale: false,\n locale,\n req: {\n headers: requestHeaders,\n i18n: props.i18n,\n locale,\n payload: props.payload,\n query: effectiveQuery,\n url: requestURL.href,\n user: props.user,\n },\n user: props.user,\n },\n props.payload,\n )\n\n const baseFilter =\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\n const baseFilterConstraint = baseFilter\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\n : undefined\n const mergedWhere = combineWhereConstraints([\n mergeListSearchAndWhere({\n collectionConfig: props.collectionConfig,\n search: normalizeSearch(query.search),\n where: normalizeWhere(query.where),\n } as never),\n baseFilterConstraint ?? undefined,\n ])\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\n\n const fullResult = await props.payload.find({\n collection: props.collectionSlug,\n depth: 0,\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\n fallbackLocale: false,\n includeLockStatus: true,\n select:\n pageTreeConfig.fastMode && !pageTreeConfig.badgesLinks\n ? getPageTreeListSelect({\n columns: props.columnState,\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n orderableFieldName,\n sort: effectiveSort,\n })\n : undefined,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n sort: normalizeSort(query.sort) ?? defaultSort,\n user: props.user,\n where,\n } as never)\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\n collectionSlug: props.collectionSlug,\n i18n: props.i18n,\n payload: props.payload,\n req,\n user: props.user,\n })\n const statusLocales =\n pageTreeConfig.badges.locales &&\n props.collectionConfig.versions?.drafts?.localizeStatus &&\n clientConfig.localization\n ? clientConfig.localization.locales.map(({ code }: { code: string }) => code)\n : []\n const treeSourceDocs = statusLocales.length\n ? await withPageTreeLocaleStatuses({\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n fastMode: pageTreeConfig.fastMode,\n localeBadgeStatus: pageTreeConfig.localeBadgeStatus,\n localeBadgeVisibility: pageTreeConfig.localeBadgeVisibility,\n locales: statusLocales,\n payload: props.payload,\n req,\n })\n : await getDocsWithDisplayStatus({\n fastMode: pageTreeConfig.fastMode,\n badgesLinks: pageTreeConfig.badgesLinks,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n locale,\n payload: props.payload,\n req,\n user: props.user,\n })\n\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n sort: effectiveSort,\n })\n const orderedData: PaginatedDocs = {\n docs: orderedDocs,\n hasNextPage: false,\n hasPrevPage: false,\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\n nextPage: null,\n page: 1,\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\n prevPage: null,\n totalDocs: orderedDocs.length,\n totalPages: 1,\n }\n\n const columnPreferences: ColumnPreference[] = (\n props.columnState as Array<{\n accessor: string\n active: boolean\n }>\n ).map(({ accessor, active }) => ({\n accessor,\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\n }))\n const columns = getColumns({\n clientConfig,\n collectionConfig: clientCollectionConfig,\n collectionSlug: props.collectionSlug,\n columns: columnPreferences,\n i18n: props.i18n,\n permissions: props.permissions,\n } as never)\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\n const renderedTable = renderTable({\n clientCollectionConfig,\n clientConfig,\n collectionConfig: props.collectionConfig,\n columns,\n data: orderedData,\n enableRowSelections: Boolean(props.enableRowSelections),\n fieldPermissions,\n i18n: props.i18n,\n orderableFieldName: orderableFieldName ?? '',\n payload: props.payload,\n query: effectiveQuery,\n req,\n tableAppearance: 'default',\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n viewType: props.viewType,\n } as never)\n const clientProps: Omit<ListViewClientProps, 'columnState' | 'Table'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n beforeActions: props.beforeActions,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n collectionSlug: props.collectionSlug,\n Description: props.Description,\n disableBulkDelete: props.disableBulkDelete,\n disableBulkEdit: props.disableBulkEdit,\n disableQueryPresets: props.disableQueryPresets,\n enableRowSelections: props.enableRowSelections,\n hasCreatePermission: props.hasCreatePermission,\n hasDeletePermission: props.hasDeletePermission,\n hasTrashPermission: props.hasTrashPermission,\n listMenuItems: props.listMenuItems,\n listPreferences: props.listPreferences,\n newDocumentURL: props.newDocumentURL,\n preferenceKey: props.preferenceKey,\n queryPreset: props.queryPreset,\n queryPresetPermissions: props.queryPresetPermissions,\n renderedFilters: props.renderedFilters,\n resolvedFilterOptions: props.resolvedFilterOptions,\n viewType: props.viewType,\n }\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\n const badgesLinks = pageTreeConfig.badgesLinks ? { ...pageTreeConfig.badgesLinks } : undefined\n if (typeof badgesLinks?.liveURL === 'function') {\n delete badgesLinks.liveURL\n }\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n badgeConfig={pageTreeConfig.badges}\n badgesLinks={badgesLinks}\n canMoveDocs={canMoveDocs}\n columnState={renderedTable.columnState}\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\n orderableFieldName={orderableFieldName}\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\n query={effectiveQuery}\n renderedRowIDs={orderedDocs.map((doc) => doc.__pageTreeID)}\n sourceDocs={treeSourceDocs}\n useAsTitle={props.collectionConfig.admin.useAsTitle}\n />\n )\n}\n\nexport default NestedDocsPageTreeListView\n"],"names":["getColumns","renderTable","getClientConfig","headers","createLocalReq","extractJWT","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","React","resolvePageTreeBadgeLinks","getPageTreeListSelect","withPageTreeLocaleStatuses","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","PageTreeListViewClient","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","badgesLinks","breadcrumbsFieldSlug","collectionSlug","docs","fastMode","payload","user","docIDs","map","doc","id","currentResult","versions","drafts","find","collection","depth","draft","fallbackLocale","overrideAccess","pagination","select","liveURL","_status","in","currentByID","Map","String","displayDocs","currentDocs","draftDocs","token","admin","preview","Promise","all","cleanDoc","__pageTreeStatusLinks","links","draftDoc","publishedDoc","get","getListClientConfig","i18n","clientConfig","config","importMap","clientCollectionConfig","collections","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","requestHeaders","host","split","trim","protocol","requestURL","URL","serverURL","pathname","routes","url","href","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","includeLockStatus","columns","columnState","parentFieldSlug","statusLocales","badges","locales","localizeStatus","localization","treeSourceDocs","localeBadgeStatus","localeBadgeVisibility","orderedDocs","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","accessor","active","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","beforeActions","BeforeList","BeforeListTable","Description","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","badgeConfig","homeIndicatorEnabled","homeIndicator","enabled","renderedRowIDs","__pageTreeID","sourceDocs"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ import { createMovePageEndpoint } from './endpoints/createMovePageEndpoint.js';
2
2
  import { createReorderPageEndpoint } from './endpoints/createReorderPageEndpoint.js';
3
3
  import { nestedDocsPageTreePluginCustomKey, pageTreeWriteContextKey } from './types.js';
4
4
  import { normalizeNestedDocsPageTreePluginBadgeConfig } from './utilities/badgeConfig.js';
5
+ import { withChildValidationErrors } from './utilities/childValidationErrors.js';
5
6
  import { createFlowID, DIAGNOSTICS_FLOW_CONTEXT_KEY, projectField, resolveDiagnostics } from './utilities/diagnostics.js';
6
7
  import { findTopLevelField, mapTopLevelFields } from './utilities/fields.js';
7
8
  const DEFAULT_BREADCRUMBS_FIELD_SLUG = 'breadcrumbs';
@@ -251,12 +252,12 @@ export const nestedDocsPageTreePlugin = (pluginOptions)=>(config)=>{
251
252
  })),
252
253
  hooks: {
253
254
  ...collection.hooks ?? {},
254
- ...diagnosticsAfterChangeHook ? {
255
- afterChange: [
256
- ...collection.hooks?.afterChange ?? [],
255
+ afterChange: collection.hooks?.afterChange?.length || diagnosticsAfterChangeHook ? [
256
+ ...(collection.hooks?.afterChange ?? []).map((hook)=>withChildValidationErrors(hook, collection.slug, collection.admin.useAsTitle)),
257
+ ...diagnosticsAfterChangeHook ? [
257
258
  diagnosticsAfterChangeHook
258
- ]
259
- } : {}
259
+ ] : []
260
+ ] : collection.hooks?.afterChange
260
261
  }
261
262
  };
262
263
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionConfig,\n Config,\n} from 'payload'\n\nimport type {\n NestedDocsPageTreePluginCollectionCustom,\n NestedDocsPageTreePluginConfig,\n} from './types.js'\n\nimport { createMovePageEndpoint } from './endpoints/createMovePageEndpoint.js'\nimport { createReorderPageEndpoint } from './endpoints/createReorderPageEndpoint.js'\nimport { nestedDocsPageTreePluginCustomKey, pageTreeWriteContextKey } from './types.js'\nimport { normalizeNestedDocsPageTreePluginBadgeConfig } from './utilities/badgeConfig.js'\nimport {\n createFlowID,\n type Diagnostics,\n DIAGNOSTICS_FLOW_CONTEXT_KEY,\n projectField,\n resolveDiagnostics,\n} from './utilities/diagnostics.js'\nimport { findTopLevelField, mapTopLevelFields } from './utilities/fields.js'\n\nconst DEFAULT_BREADCRUMBS_FIELD_SLUG = 'breadcrumbs'\nconst DEFAULT_HOME_INDICATOR_COLLECTIONS = ['pages']\nconst DEFAULT_LIMIT = 100\nconst DEFAULT_PARENT_FIELD_SLUG = 'parent'\nconst PAGE_TREE_LIST_VIEW_PATH =\n 'payload-nested-docs-page-tree/rsc#NestedDocsPageTreeListView'\ntype CollectionEndpoint = NonNullable<Exclude<CollectionConfig['endpoints'], false>>[number]\n\n/**\n * When diagnostics are enabled this hook emits a structured event for each\n * page-tree-tagged create/update, including a small before/after diff of the\n * fields most relevant to tree publish/draft regressions.\n */\nfunction createDiagnosticsAfterChangeHook(args: {\n collectionSlug: string\n diagnostics: Diagnostics\n orderableFieldName: null | string\n parentFieldSlug: string\n}): CollectionAfterChangeHook {\n const { collectionSlug, diagnostics, orderableFieldName, parentFieldSlug } = args\n const snapshotFields: string[] = ['_status', parentFieldSlug]\n\n if (orderableFieldName) {\n snapshotFields.push(orderableFieldName)\n }\n\n return ({ doc, operation, previousDoc, req }) => {\n if (!diagnostics.enabled) {\n return doc\n }\n\n if (operation !== 'update' && operation !== 'create') {\n return doc\n }\n\n // Gated on the write flag, not the deploy opt-out flag: a published move\n // withholds the latter, and that is the case most worth tracing.\n if (!req.context?.[pageTreeWriteContextKey]) {\n return doc\n }\n\n const docID = (doc as Record<string, unknown>)?.id\n\n if (typeof docID !== 'string' && typeof docID !== 'number') {\n return doc\n }\n\n const flow =\n (req.context?.[DIAGNOSTICS_FLOW_CONTEXT_KEY] as string | undefined) ??\n createFlowID('page-tree-change')\n const before: Record<string, unknown> = {}\n const after: Record<string, unknown> = {}\n const changed: string[] = []\n\n for (const field of snapshotFields) {\n const beforeValue = projectField((previousDoc as Record<string, unknown> | undefined)?.[field])\n const afterValue = projectField((doc as Record<string, unknown>)?.[field])\n\n before[field] = beforeValue\n after[field] = afterValue\n\n if (JSON.stringify(beforeValue) !== JSON.stringify(afterValue)) {\n changed.push(field)\n }\n }\n\n diagnostics.log({\n collection: collectionSlug,\n data: {\n after,\n before,\n changed,\n docID: String(docID),\n operation,\n },\n flow,\n level: 'info',\n message: `${operation} on ${collectionSlug}#${String(docID)}`,\n source: 'page-tree-change:after',\n })\n\n const beforeStatus = (previousDoc as Record<string, unknown> | undefined)?._status\n const afterStatus = (doc as Record<string, unknown>)?._status\n\n if (beforeStatus === 'published' && afterStatus !== 'published') {\n diagnostics.log({\n collection: collectionSlug,\n data: {\n afterStatus,\n beforeStatus,\n docID: String(docID),\n },\n flow,\n level: 'warn',\n message: `Published doc was demoted to \"${typeof afterStatus === 'string' ? afterStatus : JSON.stringify(afterStatus ?? 'missing')}\" by a page-tree operation. Inspect the move-endpoint:enter/ok snapshots in flow ${flow} to confirm whether the main row was touched.`,\n source: 'page-tree-change:status-flip',\n })\n }\n\n return doc\n }\n}\n\nfunction getCollectionEndpoints(collection: CollectionConfig): CollectionEndpoint[] {\n return Array.isArray(collection.endpoints) ? [...collection.endpoints] : []\n}\n\nfunction patchBreadcrumbField<TField extends CollectionConfig['fields'][number]>(args: {\n breadcrumbsFieldSlug: string\n field: TField\n hideBreadcrumbs: boolean\n}): TField {\n const { breadcrumbsFieldSlug, field, hideBreadcrumbs } = args\n\n if (!('name' in field) || field.name !== breadcrumbsFieldSlug) {\n return field\n }\n\n return {\n ...field,\n admin: {\n ...(field.admin ?? {}),\n hidden: hideBreadcrumbs,\n },\n } as TField\n}\n\nfunction validateTargetCollection(args: {\n breadcrumbsFieldSlug: string\n collection: CollectionConfig\n parentFieldSlug: string\n}) {\n const { breadcrumbsFieldSlug, collection, parentFieldSlug } = args\n\n if (typeof collection.admin?.useAsTitle !== 'string' || collection.admin.useAsTitle.includes('.')) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to define a top-level admin.useAsTitle field.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, collection.admin.useAsTitle)) {\n throw new Error(\n `payload-nested-docs-page-tree could not find the useAsTitle field \"${collection.admin.useAsTitle}\" on \"${collection.slug}\". Fields inside tabs, rows, collapsibles, and unnamed groups are supported; fields inside a named tab or named group are not top-level.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, parentFieldSlug)) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to already define the nested docs parent field \"${parentFieldSlug}\". Register @payloadcms/plugin-nested-docs before payload-nested-docs-page-tree.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, breadcrumbsFieldSlug)) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to already define the nested docs breadcrumbs field \"${breadcrumbsFieldSlug}\". Register @payloadcms/plugin-nested-docs before payload-nested-docs-page-tree.`,\n )\n }\n\n const existingListView = collection.admin?.components?.views?.list?.Component\n\n if (existingListView && existingListView !== PAGE_TREE_LIST_VIEW_PATH) {\n throw new Error(\n `payload-nested-docs-page-tree cannot own the \"${collection.slug}\" list view because the collection already defines a custom admin.components.views.list.Component.`,\n )\n }\n\n const existingMoveEndpoint = getCollectionEndpoints(collection).find(\n (endpoint) => endpoint.path === '/:id/move',\n )\n const existingReorderEndpoint = getCollectionEndpoints(collection).find(\n (endpoint) => endpoint.path === '/:id/reorder',\n )\n\n if (existingMoveEndpoint) {\n throw new Error(\n `payload-nested-docs-page-tree cannot add the move endpoint to \"${collection.slug}\" because the collection already defines POST /:id/move.`,\n )\n }\n\n if (existingReorderEndpoint) {\n throw new Error(\n `payload-nested-docs-page-tree cannot add the reorder endpoint to \"${collection.slug}\" because the collection already defines POST /:id/reorder.`,\n )\n }\n}\n\nfunction buildCollectionCustom(args: {\n badges: NestedDocsPageTreePluginCollectionCustom['badges']\n badgesLinks?: NestedDocsPageTreePluginConfig['badgesLinks']\n breadcrumbsFieldSlug: string\n defaultLimit: number\n fastMode: boolean\n hideBreadcrumbs: boolean\n homeIndicator: NestedDocsPageTreePluginCollectionCustom['homeIndicator']\n localeBadgeStatus?: NestedDocsPageTreePluginConfig['localeBadgeStatus']\n localeBadgeVisibility?: NestedDocsPageTreePluginConfig['localeBadgeVisibility']\n parentFieldSlug: string\n}): NestedDocsPageTreePluginCollectionCustom {\n const {\n badges,\n badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator,\n localeBadgeStatus,\n localeBadgeVisibility,\n parentFieldSlug,\n } = args\n\n return {\n badges,\n badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator,\n localeBadgeStatus,\n localeBadgeVisibility,\n parentFieldSlug,\n }\n}\n\nfunction getHomeIndicatorCollectionSlugs(\n homeIndicator: NestedDocsPageTreePluginConfig['homeIndicator'],\n): Set<string> {\n if (homeIndicator === false) {\n return new Set()\n }\n\n return new Set(homeIndicator?.collections ?? DEFAULT_HOME_INDICATOR_COLLECTIONS)\n}\n\nexport type {\n NestedDocsPageTreePluginBadgeConfig,\n NestedDocsPageTreePluginBadgeMap,\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginBadgeStatus,\n NestedDocsPageTreePluginConfig,\n NestedDocsPageTreePluginHomeIndicatorConfig,\n PageTreeLiveURL,\n PageTreeMoveContext,\n} from './types.js'\n\nexport { pageTreeMoveContextKey } from './types.js'\n\nexport const nestedDocsPageTreePlugin =\n (pluginOptions: NestedDocsPageTreePluginConfig) =>\n (config: Config): Config => {\n if (!pluginOptions.collections?.length) {\n throw new Error('payload-nested-docs-page-tree requires at least one collection slug.')\n }\n\n if (pluginOptions.disabled) {\n return config\n }\n\n const breadcrumbsFieldSlug =\n pluginOptions.breadcrumbsFieldSlug ?? DEFAULT_BREADCRUMBS_FIELD_SLUG\n const fastMode = pluginOptions.fastMode === true\n const defaultLimit = pluginOptions.defaultLimit ?? DEFAULT_LIMIT\n const hideBreadcrumbs = pluginOptions.hideBreadcrumbs ?? true\n const parentFieldSlug = pluginOptions.parentFieldSlug ?? DEFAULT_PARENT_FIELD_SLUG\n const publishOnMove = pluginOptions.publishOnMove ?? false\n const badges = normalizeNestedDocsPageTreePluginBadgeConfig(pluginOptions.badges)\n const diagnostics = resolveDiagnostics(pluginOptions.diagnostics)\n const homeIndicatorCollectionSlugs = getHomeIndicatorCollectionSlugs(\n pluginOptions.homeIndicator,\n )\n const targetedCollectionSlugs = new Set<string>(pluginOptions.collections)\n\n if (!config.collections?.length) {\n throw new Error('payload-nested-docs-page-tree could not find any collections to patch.')\n }\n\n const foundCollectionSlugs = new Set<string>()\n const nextCollections = config.collections.map((collection) => {\n if (!targetedCollectionSlugs.has(collection.slug)) {\n return collection\n }\n\n foundCollectionSlugs.add(collection.slug)\n validateTargetCollection({\n breadcrumbsFieldSlug,\n collection,\n parentFieldSlug,\n })\n const orderableFieldName =\n typeof collection.orderable === 'string'\n ? collection.orderable\n : collection.orderable\n ? '_order'\n : null\n const diagnosticsAfterChangeHook = diagnostics.enabled\n ? createDiagnosticsAfterChangeHook({\n collectionSlug: collection.slug,\n diagnostics,\n orderableFieldName,\n parentFieldSlug,\n })\n : null\n\n return {\n ...collection,\n admin: {\n ...(collection.admin ?? {}),\n components: {\n ...(collection.admin?.components ?? {}),\n views: {\n ...(collection.admin?.components?.views ?? {}),\n list: {\n ...(collection.admin?.components?.views?.list ?? {}),\n Component: PAGE_TREE_LIST_VIEW_PATH,\n },\n },\n },\n pagination: {\n ...(collection.admin?.pagination ?? {}),\n defaultLimit:\n collection.admin?.pagination?.defaultLimit === undefined\n ? defaultLimit\n : collection.admin.pagination.defaultLimit,\n },\n },\n custom: {\n ...(collection.custom ?? {}),\n [nestedDocsPageTreePluginCustomKey]: buildCollectionCustom({\n badges,\n badgesLinks: pluginOptions.badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator: {\n enabled: homeIndicatorCollectionSlugs.has(collection.slug),\n },\n localeBadgeStatus: pluginOptions.localeBadgeStatus,\n localeBadgeVisibility: pluginOptions.localeBadgeVisibility,\n parentFieldSlug,\n }),\n },\n endpoints: [\n ...getCollectionEndpoints(collection),\n createMovePageEndpoint({\n collectionSlug: collection.slug,\n diagnostics,\n parentFieldSlug,\n publishOnMove,\n }),\n ...(orderableFieldName\n ? [\n createReorderPageEndpoint({\n collectionSlug: collection.slug,\n diagnostics,\n orderableFieldName,\n parentFieldSlug,\n }),\n ]\n : []),\n ],\n fields: mapTopLevelFields(collection.fields, (field) =>\n patchBreadcrumbField({\n breadcrumbsFieldSlug,\n field,\n hideBreadcrumbs,\n }),\n ),\n hooks: {\n ...(collection.hooks ?? {}),\n ...(diagnosticsAfterChangeHook\n ? {\n afterChange: [\n ...(collection.hooks?.afterChange ?? []),\n diagnosticsAfterChangeHook,\n ],\n }\n : {}),\n },\n }\n })\n\n const missingCollections = pluginOptions.collections.filter(\n (collectionSlug) => !foundCollectionSlugs.has(collectionSlug),\n )\n\n if (missingCollections.length > 0) {\n throw new Error(\n `payload-nested-docs-page-tree could not find the following collections: ${missingCollections.join(', ')}`,\n )\n }\n\n return {\n ...config,\n collections: nextCollections,\n }\n }\n"],"names":["createMovePageEndpoint","createReorderPageEndpoint","nestedDocsPageTreePluginCustomKey","pageTreeWriteContextKey","normalizeNestedDocsPageTreePluginBadgeConfig","createFlowID","DIAGNOSTICS_FLOW_CONTEXT_KEY","projectField","resolveDiagnostics","findTopLevelField","mapTopLevelFields","DEFAULT_BREADCRUMBS_FIELD_SLUG","DEFAULT_HOME_INDICATOR_COLLECTIONS","DEFAULT_LIMIT","DEFAULT_PARENT_FIELD_SLUG","PAGE_TREE_LIST_VIEW_PATH","createDiagnosticsAfterChangeHook","args","collectionSlug","diagnostics","orderableFieldName","parentFieldSlug","snapshotFields","push","doc","operation","previousDoc","req","enabled","context","docID","id","flow","before","after","changed","field","beforeValue","afterValue","JSON","stringify","log","collection","data","String","level","message","source","beforeStatus","_status","afterStatus","getCollectionEndpoints","Array","isArray","endpoints","patchBreadcrumbField","breadcrumbsFieldSlug","hideBreadcrumbs","name","admin","hidden","validateTargetCollection","useAsTitle","includes","Error","slug","fields","existingListView","components","views","list","Component","existingMoveEndpoint","find","endpoint","path","existingReorderEndpoint","buildCollectionCustom","badges","badgesLinks","defaultLimit","fastMode","homeIndicator","localeBadgeStatus","localeBadgeVisibility","getHomeIndicatorCollectionSlugs","Set","collections","pageTreeMoveContextKey","nestedDocsPageTreePlugin","pluginOptions","config","length","disabled","publishOnMove","homeIndicatorCollectionSlugs","targetedCollectionSlugs","foundCollectionSlugs","nextCollections","map","has","add","orderable","diagnosticsAfterChangeHook","pagination","undefined","custom","hooks","afterChange","missingCollections","filter","join"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionConfig,\n Config,\n} from 'payload'\n\nimport type {\n NestedDocsPageTreePluginCollectionCustom,\n NestedDocsPageTreePluginConfig,\n} from './types.js'\n\nimport { createMovePageEndpoint } from './endpoints/createMovePageEndpoint.js'\nimport { createReorderPageEndpoint } from './endpoints/createReorderPageEndpoint.js'\nimport { nestedDocsPageTreePluginCustomKey, pageTreeWriteContextKey } from './types.js'\nimport { normalizeNestedDocsPageTreePluginBadgeConfig } from './utilities/badgeConfig.js'\nimport { withChildValidationErrors } from './utilities/childValidationErrors.js'\nimport {\n createFlowID,\n type Diagnostics,\n DIAGNOSTICS_FLOW_CONTEXT_KEY,\n projectField,\n resolveDiagnostics,\n} from './utilities/diagnostics.js'\nimport { findTopLevelField, mapTopLevelFields } from './utilities/fields.js'\n\nconst DEFAULT_BREADCRUMBS_FIELD_SLUG = 'breadcrumbs'\nconst DEFAULT_HOME_INDICATOR_COLLECTIONS = ['pages']\nconst DEFAULT_LIMIT = 100\nconst DEFAULT_PARENT_FIELD_SLUG = 'parent'\nconst PAGE_TREE_LIST_VIEW_PATH =\n 'payload-nested-docs-page-tree/rsc#NestedDocsPageTreeListView'\ntype CollectionEndpoint = NonNullable<Exclude<CollectionConfig['endpoints'], false>>[number]\n\n/**\n * When diagnostics are enabled this hook emits a structured event for each\n * page-tree-tagged create/update, including a small before/after diff of the\n * fields most relevant to tree publish/draft regressions.\n */\nfunction createDiagnosticsAfterChangeHook(args: {\n collectionSlug: string\n diagnostics: Diagnostics\n orderableFieldName: null | string\n parentFieldSlug: string\n}): CollectionAfterChangeHook {\n const { collectionSlug, diagnostics, orderableFieldName, parentFieldSlug } = args\n const snapshotFields: string[] = ['_status', parentFieldSlug]\n\n if (orderableFieldName) {\n snapshotFields.push(orderableFieldName)\n }\n\n return ({ doc, operation, previousDoc, req }) => {\n if (!diagnostics.enabled) {\n return doc\n }\n\n if (operation !== 'update' && operation !== 'create') {\n return doc\n }\n\n // Gated on the write flag, not the deploy opt-out flag: a published move\n // withholds the latter, and that is the case most worth tracing.\n if (!req.context?.[pageTreeWriteContextKey]) {\n return doc\n }\n\n const docID = (doc as Record<string, unknown>)?.id\n\n if (typeof docID !== 'string' && typeof docID !== 'number') {\n return doc\n }\n\n const flow =\n (req.context?.[DIAGNOSTICS_FLOW_CONTEXT_KEY] as string | undefined) ??\n createFlowID('page-tree-change')\n const before: Record<string, unknown> = {}\n const after: Record<string, unknown> = {}\n const changed: string[] = []\n\n for (const field of snapshotFields) {\n const beforeValue = projectField((previousDoc as Record<string, unknown> | undefined)?.[field])\n const afterValue = projectField((doc as Record<string, unknown>)?.[field])\n\n before[field] = beforeValue\n after[field] = afterValue\n\n if (JSON.stringify(beforeValue) !== JSON.stringify(afterValue)) {\n changed.push(field)\n }\n }\n\n diagnostics.log({\n collection: collectionSlug,\n data: {\n after,\n before,\n changed,\n docID: String(docID),\n operation,\n },\n flow,\n level: 'info',\n message: `${operation} on ${collectionSlug}#${String(docID)}`,\n source: 'page-tree-change:after',\n })\n\n const beforeStatus = (previousDoc as Record<string, unknown> | undefined)?._status\n const afterStatus = (doc as Record<string, unknown>)?._status\n\n if (beforeStatus === 'published' && afterStatus !== 'published') {\n diagnostics.log({\n collection: collectionSlug,\n data: {\n afterStatus,\n beforeStatus,\n docID: String(docID),\n },\n flow,\n level: 'warn',\n message: `Published doc was demoted to \"${typeof afterStatus === 'string' ? afterStatus : JSON.stringify(afterStatus ?? 'missing')}\" by a page-tree operation. Inspect the move-endpoint:enter/ok snapshots in flow ${flow} to confirm whether the main row was touched.`,\n source: 'page-tree-change:status-flip',\n })\n }\n\n return doc\n }\n}\n\nfunction getCollectionEndpoints(collection: CollectionConfig): CollectionEndpoint[] {\n return Array.isArray(collection.endpoints) ? [...collection.endpoints] : []\n}\n\nfunction patchBreadcrumbField<TField extends CollectionConfig['fields'][number]>(args: {\n breadcrumbsFieldSlug: string\n field: TField\n hideBreadcrumbs: boolean\n}): TField {\n const { breadcrumbsFieldSlug, field, hideBreadcrumbs } = args\n\n if (!('name' in field) || field.name !== breadcrumbsFieldSlug) {\n return field\n }\n\n return {\n ...field,\n admin: {\n ...(field.admin ?? {}),\n hidden: hideBreadcrumbs,\n },\n } as TField\n}\n\nfunction validateTargetCollection(args: {\n breadcrumbsFieldSlug: string\n collection: CollectionConfig\n parentFieldSlug: string\n}) {\n const { breadcrumbsFieldSlug, collection, parentFieldSlug } = args\n\n if (typeof collection.admin?.useAsTitle !== 'string' || collection.admin.useAsTitle.includes('.')) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to define a top-level admin.useAsTitle field.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, collection.admin.useAsTitle)) {\n throw new Error(\n `payload-nested-docs-page-tree could not find the useAsTitle field \"${collection.admin.useAsTitle}\" on \"${collection.slug}\". Fields inside tabs, rows, collapsibles, and unnamed groups are supported; fields inside a named tab or named group are not top-level.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, parentFieldSlug)) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to already define the nested docs parent field \"${parentFieldSlug}\". Register @payloadcms/plugin-nested-docs before payload-nested-docs-page-tree.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, breadcrumbsFieldSlug)) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to already define the nested docs breadcrumbs field \"${breadcrumbsFieldSlug}\". Register @payloadcms/plugin-nested-docs before payload-nested-docs-page-tree.`,\n )\n }\n\n const existingListView = collection.admin?.components?.views?.list?.Component\n\n if (existingListView && existingListView !== PAGE_TREE_LIST_VIEW_PATH) {\n throw new Error(\n `payload-nested-docs-page-tree cannot own the \"${collection.slug}\" list view because the collection already defines a custom admin.components.views.list.Component.`,\n )\n }\n\n const existingMoveEndpoint = getCollectionEndpoints(collection).find(\n (endpoint) => endpoint.path === '/:id/move',\n )\n const existingReorderEndpoint = getCollectionEndpoints(collection).find(\n (endpoint) => endpoint.path === '/:id/reorder',\n )\n\n if (existingMoveEndpoint) {\n throw new Error(\n `payload-nested-docs-page-tree cannot add the move endpoint to \"${collection.slug}\" because the collection already defines POST /:id/move.`,\n )\n }\n\n if (existingReorderEndpoint) {\n throw new Error(\n `payload-nested-docs-page-tree cannot add the reorder endpoint to \"${collection.slug}\" because the collection already defines POST /:id/reorder.`,\n )\n }\n}\n\nfunction buildCollectionCustom(args: {\n badges: NestedDocsPageTreePluginCollectionCustom['badges']\n badgesLinks?: NestedDocsPageTreePluginConfig['badgesLinks']\n breadcrumbsFieldSlug: string\n defaultLimit: number\n fastMode: boolean\n hideBreadcrumbs: boolean\n homeIndicator: NestedDocsPageTreePluginCollectionCustom['homeIndicator']\n localeBadgeStatus?: NestedDocsPageTreePluginConfig['localeBadgeStatus']\n localeBadgeVisibility?: NestedDocsPageTreePluginConfig['localeBadgeVisibility']\n parentFieldSlug: string\n}): NestedDocsPageTreePluginCollectionCustom {\n const {\n badges,\n badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator,\n localeBadgeStatus,\n localeBadgeVisibility,\n parentFieldSlug,\n } = args\n\n return {\n badges,\n badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator,\n localeBadgeStatus,\n localeBadgeVisibility,\n parentFieldSlug,\n }\n}\n\nfunction getHomeIndicatorCollectionSlugs(\n homeIndicator: NestedDocsPageTreePluginConfig['homeIndicator'],\n): Set<string> {\n if (homeIndicator === false) {\n return new Set()\n }\n\n return new Set(homeIndicator?.collections ?? DEFAULT_HOME_INDICATOR_COLLECTIONS)\n}\n\nexport type {\n NestedDocsPageTreePluginBadgeConfig,\n NestedDocsPageTreePluginBadgeMap,\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginBadgeStatus,\n NestedDocsPageTreePluginConfig,\n NestedDocsPageTreePluginHomeIndicatorConfig,\n PageTreeLiveURL,\n PageTreeMoveContext,\n} from './types.js'\n\nexport { pageTreeMoveContextKey } from './types.js'\n\nexport const nestedDocsPageTreePlugin =\n (pluginOptions: NestedDocsPageTreePluginConfig) =>\n (config: Config): Config => {\n if (!pluginOptions.collections?.length) {\n throw new Error('payload-nested-docs-page-tree requires at least one collection slug.')\n }\n\n if (pluginOptions.disabled) {\n return config\n }\n\n const breadcrumbsFieldSlug =\n pluginOptions.breadcrumbsFieldSlug ?? DEFAULT_BREADCRUMBS_FIELD_SLUG\n const fastMode = pluginOptions.fastMode === true\n const defaultLimit = pluginOptions.defaultLimit ?? DEFAULT_LIMIT\n const hideBreadcrumbs = pluginOptions.hideBreadcrumbs ?? true\n const parentFieldSlug = pluginOptions.parentFieldSlug ?? DEFAULT_PARENT_FIELD_SLUG\n const publishOnMove = pluginOptions.publishOnMove ?? false\n const badges = normalizeNestedDocsPageTreePluginBadgeConfig(pluginOptions.badges)\n const diagnostics = resolveDiagnostics(pluginOptions.diagnostics)\n const homeIndicatorCollectionSlugs = getHomeIndicatorCollectionSlugs(\n pluginOptions.homeIndicator,\n )\n const targetedCollectionSlugs = new Set<string>(pluginOptions.collections)\n\n if (!config.collections?.length) {\n throw new Error('payload-nested-docs-page-tree could not find any collections to patch.')\n }\n\n const foundCollectionSlugs = new Set<string>()\n const nextCollections = config.collections.map((collection) => {\n if (!targetedCollectionSlugs.has(collection.slug)) {\n return collection\n }\n\n foundCollectionSlugs.add(collection.slug)\n validateTargetCollection({\n breadcrumbsFieldSlug,\n collection,\n parentFieldSlug,\n })\n const orderableFieldName =\n typeof collection.orderable === 'string'\n ? collection.orderable\n : collection.orderable\n ? '_order'\n : null\n const diagnosticsAfterChangeHook = diagnostics.enabled\n ? createDiagnosticsAfterChangeHook({\n collectionSlug: collection.slug,\n diagnostics,\n orderableFieldName,\n parentFieldSlug,\n })\n : null\n\n return {\n ...collection,\n admin: {\n ...(collection.admin ?? {}),\n components: {\n ...(collection.admin?.components ?? {}),\n views: {\n ...(collection.admin?.components?.views ?? {}),\n list: {\n ...(collection.admin?.components?.views?.list ?? {}),\n Component: PAGE_TREE_LIST_VIEW_PATH,\n },\n },\n },\n pagination: {\n ...(collection.admin?.pagination ?? {}),\n defaultLimit:\n collection.admin?.pagination?.defaultLimit === undefined\n ? defaultLimit\n : collection.admin.pagination.defaultLimit,\n },\n },\n custom: {\n ...(collection.custom ?? {}),\n [nestedDocsPageTreePluginCustomKey]: buildCollectionCustom({\n badges,\n badgesLinks: pluginOptions.badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator: {\n enabled: homeIndicatorCollectionSlugs.has(collection.slug),\n },\n localeBadgeStatus: pluginOptions.localeBadgeStatus,\n localeBadgeVisibility: pluginOptions.localeBadgeVisibility,\n parentFieldSlug,\n }),\n },\n endpoints: [\n ...getCollectionEndpoints(collection),\n createMovePageEndpoint({\n collectionSlug: collection.slug,\n diagnostics,\n parentFieldSlug,\n publishOnMove,\n }),\n ...(orderableFieldName\n ? [\n createReorderPageEndpoint({\n collectionSlug: collection.slug,\n diagnostics,\n orderableFieldName,\n parentFieldSlug,\n }),\n ]\n : []),\n ],\n fields: mapTopLevelFields(collection.fields, (field) =>\n patchBreadcrumbField({\n breadcrumbsFieldSlug,\n field,\n hideBreadcrumbs,\n }),\n ),\n hooks: {\n ...(collection.hooks ?? {}),\n afterChange: collection.hooks?.afterChange?.length || diagnosticsAfterChangeHook ? [\n ...(collection.hooks?.afterChange ?? []).map((hook) =>\n withChildValidationErrors(hook, collection.slug, collection.admin!.useAsTitle!),\n ),\n ...(diagnosticsAfterChangeHook ? [diagnosticsAfterChangeHook] : []),\n ] : collection.hooks?.afterChange,\n },\n }\n })\n\n const missingCollections = pluginOptions.collections.filter(\n (collectionSlug) => !foundCollectionSlugs.has(collectionSlug),\n )\n\n if (missingCollections.length > 0) {\n throw new Error(\n `payload-nested-docs-page-tree could not find the following collections: ${missingCollections.join(', ')}`,\n )\n }\n\n return {\n ...config,\n collections: nextCollections,\n }\n }\n"],"names":["createMovePageEndpoint","createReorderPageEndpoint","nestedDocsPageTreePluginCustomKey","pageTreeWriteContextKey","normalizeNestedDocsPageTreePluginBadgeConfig","withChildValidationErrors","createFlowID","DIAGNOSTICS_FLOW_CONTEXT_KEY","projectField","resolveDiagnostics","findTopLevelField","mapTopLevelFields","DEFAULT_BREADCRUMBS_FIELD_SLUG","DEFAULT_HOME_INDICATOR_COLLECTIONS","DEFAULT_LIMIT","DEFAULT_PARENT_FIELD_SLUG","PAGE_TREE_LIST_VIEW_PATH","createDiagnosticsAfterChangeHook","args","collectionSlug","diagnostics","orderableFieldName","parentFieldSlug","snapshotFields","push","doc","operation","previousDoc","req","enabled","context","docID","id","flow","before","after","changed","field","beforeValue","afterValue","JSON","stringify","log","collection","data","String","level","message","source","beforeStatus","_status","afterStatus","getCollectionEndpoints","Array","isArray","endpoints","patchBreadcrumbField","breadcrumbsFieldSlug","hideBreadcrumbs","name","admin","hidden","validateTargetCollection","useAsTitle","includes","Error","slug","fields","existingListView","components","views","list","Component","existingMoveEndpoint","find","endpoint","path","existingReorderEndpoint","buildCollectionCustom","badges","badgesLinks","defaultLimit","fastMode","homeIndicator","localeBadgeStatus","localeBadgeVisibility","getHomeIndicatorCollectionSlugs","Set","collections","pageTreeMoveContextKey","nestedDocsPageTreePlugin","pluginOptions","config","length","disabled","publishOnMove","homeIndicatorCollectionSlugs","targetedCollectionSlugs","foundCollectionSlugs","nextCollections","map","has","add","orderable","diagnosticsAfterChangeHook","pagination","undefined","custom","hooks","afterChange","hook","missingCollections","filter","join"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CollectionAfterChangeHook } from 'payload';
2
+ /**
3
+ * Nested Docs catches child validation failures and replaces their details with
4
+ * a generic APIError. Observe only this hook's Local API calls, leaving the
5
+ * shared Payload instance and the original transaction-bearing request intact.
6
+ */
7
+ export declare function withChildValidationErrors(hook: CollectionAfterChangeHook, collectionSlug: string, titleField: string): CollectionAfterChangeHook;
@@ -0,0 +1,70 @@
1
+ import { APIError, ValidationError } from 'payload';
2
+ const nestedDocsError = 'Could not publish or save changes: One or more children are invalid.';
3
+ const scopedRequests = new WeakSet();
4
+ const childErrors = new WeakMap();
5
+ /**
6
+ * Nested Docs catches child validation failures and replaces their details with
7
+ * a generic APIError. Observe only this hook's Local API calls, leaving the
8
+ * shared Payload instance and the original transaction-bearing request intact.
9
+ */ export function withChildValidationErrors(hook, collectionSlug, titleField) {
10
+ return async (args)=>{
11
+ let childError;
12
+ const nested = scopedRequests.has(args.req);
13
+ const update = async (options)=>{
14
+ try {
15
+ return await args.req.payload.update(options);
16
+ } catch (error) {
17
+ if (error instanceof ValidationError && error.data.errors.length && options.collection === collectionSlug && options.id != null && String(options.id) !== String(args.doc.id)) {
18
+ childError = error;
19
+ if (!childErrors.has(error)) {
20
+ // Older Nested Docs versions pass populateBreadcrumbs' promise.
21
+ const data = await Promise.resolve(options.data);
22
+ const title = data?.[titleField];
23
+ const name = typeof title === 'string' && title.trim() ? ` "${title}"` : '';
24
+ const locale = options.locale ?? args.req.locale;
25
+ const fields = error.data.errors.map((field)=>`${typeof field.label === 'string' ? field.label : field.path}: ${field.message}`).join('\n');
26
+ childErrors.set(error, `Could not publish or save changes: child page${name} (ID: ${String(options.id)}${locale ? `, locale: ${locale}` : ''}) is invalid.\n${fields}`);
27
+ }
28
+ }
29
+ throw error;
30
+ }
31
+ };
32
+ const payload = new Proxy(args.req.payload, {
33
+ get (target, property, receiver) {
34
+ return property === 'update' ? update : Reflect.get(target, property, receiver);
35
+ }
36
+ });
37
+ const req = new Proxy(args.req, {
38
+ get (target, property, receiver) {
39
+ return property === 'payload' ? payload : Reflect.get(target, property, receiver);
40
+ }
41
+ });
42
+ scopedRequests.add(req);
43
+ try {
44
+ return await hook({
45
+ ...args,
46
+ req
47
+ });
48
+ } catch (error) {
49
+ if (!nested && error instanceof ValidationError) {
50
+ const message = childErrors.get(error);
51
+ if (message) {
52
+ throw new APIError(message, 400);
53
+ }
54
+ }
55
+ if (childError && error instanceof Error && error.message === nestedDocsError) {
56
+ // Ancestor Nested Docs hooks only propagate ValidationErrors. Convert
57
+ // at the outermost hook so child paths never mark the parent's fields.
58
+ if (nested) {
59
+ throw childError;
60
+ }
61
+ throw new APIError(childErrors.get(childError), 400);
62
+ }
63
+ throw error;
64
+ } finally{
65
+ scopedRequests.delete(req);
66
+ }
67
+ };
68
+ }
69
+
70
+ //# sourceMappingURL=childValidationErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/childValidationErrors.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, Payload, PayloadRequest } from 'payload'\n\nimport { APIError, ValidationError } from 'payload'\n\nconst nestedDocsError = 'Could not publish or save changes: One or more children are invalid.'\nconst scopedRequests = new WeakSet<PayloadRequest>()\nconst childErrors = new WeakMap<ValidationError, string>()\n\n/**\n * Nested Docs catches child validation failures and replaces their details with\n * a generic APIError. Observe only this hook's Local API calls, leaving the\n * shared Payload instance and the original transaction-bearing request intact.\n */\nexport function withChildValidationErrors(\n hook: CollectionAfterChangeHook,\n collectionSlug: string,\n titleField: string,\n): CollectionAfterChangeHook {\n return async (args) => {\n let childError: undefined | ValidationError\n const nested = scopedRequests.has(args.req)\n const update = (async (options: Parameters<Payload['update']>[0]) => {\n try {\n return await args.req.payload.update(options)\n } catch (error) {\n if (\n error instanceof ValidationError &&\n error.data.errors.length &&\n options.collection === collectionSlug &&\n options.id != null &&\n String(options.id) !== String(args.doc.id)\n ) {\n childError = error\n if (!childErrors.has(error)) {\n // Older Nested Docs versions pass populateBreadcrumbs' promise.\n const data = await Promise.resolve(options.data)\n const title = data?.[titleField]\n const name = typeof title === 'string' && title.trim() ? ` \"${title}\"` : ''\n const locale = options.locale ?? args.req.locale\n const fields = error.data.errors\n .map(\n (field) =>\n `${typeof field.label === 'string' ? field.label : field.path}: ${field.message}`,\n )\n .join('\\n')\n childErrors.set(\n error,\n `Could not publish or save changes: child page${name} (ID: ${String(options.id)}${locale ? `, locale: ${locale}` : ''}) is invalid.\\n${fields}`,\n )\n }\n }\n throw error\n }\n }) as Payload['update']\n const payload = new Proxy(args.req.payload, {\n get(target, property, receiver) {\n return property === 'update' ? update : Reflect.get(target, property, receiver)\n },\n })\n const req = new Proxy(args.req, {\n get(target, property, receiver) {\n return property === 'payload' ? payload : Reflect.get(target, property, receiver)\n },\n })\n scopedRequests.add(req)\n try {\n return await hook({ ...args, req })\n } catch (error) {\n if (!nested && error instanceof ValidationError) {\n const message = childErrors.get(error)\n if (message) {\n throw new APIError(message, 400)\n }\n }\n if (childError && error instanceof Error && error.message === nestedDocsError) {\n // Ancestor Nested Docs hooks only propagate ValidationErrors. Convert\n // at the outermost hook so child paths never mark the parent's fields.\n if (nested) {\n throw childError\n }\n throw new APIError(childErrors.get(childError)!, 400)\n }\n throw error\n } finally {\n scopedRequests.delete(req)\n }\n }\n}\n"],"names":["APIError","ValidationError","nestedDocsError","scopedRequests","WeakSet","childErrors","WeakMap","withChildValidationErrors","hook","collectionSlug","titleField","args","childError","nested","has","req","update","options","payload","error","data","errors","length","collection","id","String","doc","Promise","resolve","title","name","trim","locale","fields","map","field","label","path","message","join","set","Proxy","get","target","property","receiver","Reflect","add","Error","delete"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload-nested-docs-page-tree",
3
- "version": "1.6.4",
3
+ "version": "1.6.7",
4
4
  "description": "Page tree plugin for Payload nested docs collections",
5
5
  "license": "MIT",
6
6
  "author": "WLF Studios",