payload-nested-docs-page-tree 1.4.2 → 1.4.4

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
@@ -333,6 +333,13 @@ pnpm generate:types
333
333
  pnpm generate:importmap
334
334
  ```
335
335
 
336
+ Open [http://localhost:3000/admin](http://localhost:3000/admin) and sign in with:
337
+
338
+ - email: `admin@email.com`
339
+ - password: `password`
340
+
341
+ The dev app creates this user automatically on startup. After signing in, use the **seed the database** button on the dashboard to add the sample pages.
342
+
336
343
  Plugin source is in `src/`. The internal test app is in `dev/`.
337
344
 
338
345
  For checks:
@@ -1,10 +1,11 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { DndContext, DragOverlay, PointerSensor, useDroppable, useSensor, useSensors } from '@dnd-kit/core';
4
4
  import { arrayMove, SortableContext, useSortable } from '@dnd-kit/sortable';
5
- import { DefaultListView, ListQueryProvider, Pill, SelectAll, SelectRow, SortHeader, toast, useConfig, useLocale, usePreferences, useTranslation } from '@payloadcms/ui';
5
+ import { DefaultListView, ListQueryProvider, Pill, SelectAll, SelectRow, SortHeader, toast, useConfig, useLocale, usePreferences, useTranslation, useWindowInfo } from '@payloadcms/ui';
6
6
  import { useRouter, useSearchParams } from 'next/navigation';
7
7
  import React from 'react';
8
+ import { createPortal } from 'react-dom';
8
9
  import { buildInsertDropTargets, getDropTargetParentDoc } from '../utilities/dropTargets.js';
9
10
  import { CANCEL_DRAG_MESSAGE, getDropValidation } from '../utilities/moveValidation.js';
10
11
  import { buildDocSlugPath, buildPageTreeDocs, buildProspectiveDocSlugPath, getDocDisplayLabel, getVisibleTreeDocs } from '../utilities/pageTree.js';
@@ -418,7 +419,12 @@ function renderStatusBadge(args) {
418
419
  }, doc.__pageTreeID ?? index);
419
420
  }
420
421
  function ParentMoveToggle({ collectionSlug, enabled, onToggle }) {
421
- return /*#__PURE__*/ _jsx(Pill, {
422
+ const { breakpoints: { s: smallBreak } } = useWindowInfo();
423
+ const [mobileActions, setMobileActions] = React.useState(null);
424
+ const setMobileMount = React.useCallback((node)=>{
425
+ setMobileActions(node?.closest('.collection-list')?.querySelector('.search-bar__actions') ?? null);
426
+ }, []);
427
+ const toggle = /*#__PURE__*/ _jsx(Pill, {
422
428
  "aria-checked": enabled,
423
429
  "aria-label": `${enabled ? 'Hide' : 'Show'} edit hierarchy handles`,
424
430
  className: "pages-hierarchy-parent-move-toggle",
@@ -428,6 +434,18 @@ function ParentMoveToggle({ collectionSlug, enabled, onToggle }) {
428
434
  size: "small",
429
435
  children: "Edit Hierarchy"
430
436
  });
437
+ if (smallBreak) {
438
+ return /*#__PURE__*/ _jsxs(_Fragment, {
439
+ children: [
440
+ /*#__PURE__*/ _jsx("span", {
441
+ hidden: true,
442
+ ref: setMobileMount
443
+ }),
444
+ mobileActions ? /*#__PURE__*/ createPortal(toggle, mobileActions) : null
445
+ ]
446
+ });
447
+ }
448
+ return toggle;
431
449
  }
432
450
  function buildTableColumns(args) {
433
451
  const { badgeConfig, columnState, docs, enableRowSelections, homeIndicatorEnabled, orderableFieldName, parentFieldSlug, t, useAsTitle } = args;
@@ -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 useConfig,\n useLocale,\n usePreferences,\n useTranslation,\n} from '@payloadcms/ui'\nimport { useRouter, useSearchParams } from 'next/navigation'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeSourceDoc } 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 {\n getPageTreeBadgeColor,\n getPageTreeBadgeLabel,\n getPageTreeDisplayStatus,\n type PageTreeDisplayStatus,\n} from '../utilities/status.js'\nimport { PageTreeProvider, PageTreeRowDndProvider } from './PageTreeContext.js'\nimport styles from './PageTreeListView.module.css'\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\n\ntype PageTreeListViewClientProps = {\n allDocs: PageTreeDoc[]\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\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 id: String(doc.id ?? doc.__pageTreeID),\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 getStatusClassName(\n status: PageTreeDisplayStatus,\n): 'changed' | 'draft' | 'published' | 'unknown' {\n if (status === 'changed' || status === 'draft' || status === 'published') {\n return status\n }\n\n return 'unknown'\n}\n\nfunction renderStatusBadge(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n doc: PageTreeDoc\n index: number\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n}): React.ReactNode {\n const { badgeConfig, doc, index, t } = args\n const status = getPageTreeDisplayStatus(doc)\n const customColor = getPageTreeBadgeColor({\n badgeColors: badgeConfig.colors,\n status,\n })\n const statusClass = getStatusClassName(status)\n const style = customColor\n ? ({ '--page-tree-badge-base': customColor } as React.CSSProperties)\n : undefined\n\n return (\n <span\n className={[\n 'pages-hierarchy-status-badge',\n `pages-hierarchy-status-badge--${statusClass}`,\n ].join(' ')}\n data-custom-color={customColor ? 'true' : undefined}\n key={doc.__pageTreeID ?? index}\n style={style}\n >\n {getPageTreeBadgeLabel({\n badgeLabels: badgeConfig.labels,\n status,\n t,\n })}\n </span>\n )\n}\n\nfunction ParentMoveToggle({\n collectionSlug,\n enabled,\n onToggle,\n}: {\n collectionSlug: string\n enabled: boolean\n onToggle: () => void\n}) {\n return (\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\nfunction buildTableColumns(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\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 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 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 canMoveDocs,\n columnState,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n query,\n sourceDocs,\n useAsTitle,\n ...props\n}: PageTreeListViewClientProps) {\n const router = useRouter()\n const searchParams = useSearchParams()\n const { config } = useConfig()\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 [collapsedIDs, setCollapsedIDs] = React.useState<Set<string>>(() => new Set())\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 const toggleRow = React.useCallback((rowID: string) => {\n setCollapsedIDs((currentState) => {\n const nextState = new Set(currentState)\n\n if (nextState.has(rowID)) {\n nextState.delete(rowID)\n } else {\n nextState.add(rowID)\n }\n\n return nextState\n })\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 collapseResetKey = 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 setCollapsedIDs(new Set())\n setOptimisticOrderRowIDs(null)\n }, [collapseResetKey])\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 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 homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\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 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 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","useConfig","useLocale","usePreferences","useTranslation","useRouter","useSearchParams","React","buildInsertDropTargets","getDropTargetParentDoc","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","getPageTreeBadgeColor","getPageTreeBadgeLabel","getPageTreeDisplayStatus","PageTreeProvider","PageTreeRowDndProvider","styles","PageTreeTitleCell","SILENT_MOVE_MESSAGES","Set","ALREADY_ROOT_MESSAGE","getParentMovePreferenceKey","collectionSlug","getRowDropID","rowID","getSortableRowID","getDiagnosticString","value","length","getPageTreeDragData","data","dragType","undefined","parentID","getSortableTransform","transform","scaleX","scaleY","x","y","getVisibleSubtreeIndexRange","docs","rootIndex","rootDoc","end","index","__pageTreeAncestorIDs","includes","__pageTreeID","start","getRangeRect","args","activeNodeRect","activeRange","range","rects","firstRect","lastRect","bottom","top","height","isIndexInRange","buildPageTreeSortingStrategy","activeIndex","overIndex","overRange","activeRect","overRect","buildPaginatedData","limit","requestedPage","totalDocs","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","slice","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","filter","entry","join","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","isOrderableSortActive","orderableFieldName","sort","Boolean","ensureUseAsTitleColumn","columnState","useAsTitle","map","column","accessor","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","doc","renderedCellIndex","get","__pageTreeOrderIndex","getSelectableRowData","record","id","String","_isLocked","_userEditing","shouldSilenceMoveMessage","message","has","getVisibleSubtreeRowIDs","findIndex","rowIDs","push","buildOptimisticOrderRowIDs","activeRowID","targetRowID","activeDoc","find","targetDoc","__pageTreeParentID","activeBlockIDs","targetBlockIDs","currentRowIDs","indexOf","targetIndex","remainingRowIDs","targetAnchorID","targetAnchorIndex","insertIndex","buildReorderRequestBody","siblingDocs","moveFromIndex","moveToIndex","newBeforeRow","newAfterRow","target","getFrontendOrderEntry","orderKey","slug","siblingDocsAfter","movedSiblingDoc","splice","targetKey","newKeyWillBe","docsToMove","frontendOrder","activeSlug","after","before","newAfterRowSlug","newBeforeRowSlug","targetSlug","key","orderDocsByRowIDs","orderRowIDs","docsByID","Map","orderedDocs","flatMap","getDropTargetValidation","dropTarget","dropType","isValid","getStatusClassName","status","renderStatusBadge","badgeConfig","t","customColor","badgeColors","colors","statusClass","style","span","className","data-custom-color","badgeLabels","labels","ParentMoveToggle","enabled","onToggle","aria-checked","aria-label","onClick","pillStyle","size","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","columnsToUse","unshift","field","hidden","Heading","rowData","orderableColumn","aria-hidden","selectColumnIndex","HierarchyInsertRow","activeColumnsCount","activeDragRowID","activeDropTargetID","dropValidation","isMovePending","isOver","setNodeRef","dropID","disabled","hasActiveDrag","showInsertLine","tr","data-drag-over","data-drop-valid","data-page-tree-insert","td","colSpan","div","data-insert-depth","depth","ref","HierarchyTableRow","activeColumns","activeDragType","canReorderRows","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","sortable","hasActiveMoveDrag","isActiveDragRow","setRowRef","useCallback","element","rowDndValue","useMemo","isOrderDragging","isDragging","orderHandleAttributes","attributes","orderHandleListeners","listeners","orderHandleRef","setActivatorNodeRef","sortableStyle","position","transition","zIndex","data-id","data-is-drag-source","data-is-order-drag-source","data-page-tree-row","columnIndex","replace","data-page-tree-title-cell","HierarchyTable","activeDropTarget","allDocsByID","columns","sortableItems","sortingStrategy","insertDropTargets","insertDropTargetsByReferenceRowID","referenceRowID","rowDropValidationByID","insertDropValidationByID","table","cellPadding","cellSpacing","thead","th","tbody","items","strategy","rootInsertBeforeDropTarget","rootInsertTargetIndex","rootInsertAfterDropTarget","isTrailingRootInsert","nextVisibleDoc","hasVisibleDescendantAfter","Fragment","PageTreeListViewClient","allDocs","canMoveDocs","query","sourceDocs","props","router","searchParams","config","locale","i18n","setActiveDragRowID","useState","setActiveDragType","setActiveDropTarget","collapsedIDs","setCollapsedIDs","optimisticOrderRowIDs","setOptimisticOrderRowIDs","parentMoveEnabled","setParentMoveEnabled","pendingMoveRowID","setPendingMoveRowID","getPreference","setPreference","parentMovePreferenceKey","toggleRow","currentState","nextState","delete","add","handleParentMoveToggle","currentValue","nextValue","currentSort","searchParamSort","getAll","currentLimit","currentRequestedPage","liveAllDocs","collapseResetKey","JSON","stringify","viewType","toString","hierarchyValue","useEffect","isMounted","then","storedValue","visibleDocs","paginatedData","paginatedDocs","paginatedServerOrderKey","displayedPaginatedDocs","displayedPaginatedData","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","sensors","activationConstraint","distance","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","overDragData","nextOrderRowIDs","reorderRequestBody","apiRoute","routes","api","params","URLSearchParams","code","set","response","fetch","encodeURIComponent","body","credentials","headers","language","method","result","json","catch","ok","error","startTransition","refresh","Error","success","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","beforeActions","actions","root","modifySearchParams","Table"],"mappings":"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"}
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 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 { NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeSourceDoc } 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 {\n getPageTreeBadgeColor,\n getPageTreeBadgeLabel,\n getPageTreeDisplayStatus,\n type PageTreeDisplayStatus,\n} from '../utilities/status.js'\nimport { PageTreeProvider, PageTreeRowDndProvider } from './PageTreeContext.js'\nimport styles from './PageTreeListView.module.css'\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\n\ntype PageTreeListViewClientProps = {\n allDocs: PageTreeDoc[]\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\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 id: String(doc.id ?? doc.__pageTreeID),\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 getStatusClassName(\n status: PageTreeDisplayStatus,\n): 'changed' | 'draft' | 'published' | 'unknown' {\n if (status === 'changed' || status === 'draft' || status === 'published') {\n return status\n }\n\n return 'unknown'\n}\n\nfunction renderStatusBadge(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n doc: PageTreeDoc\n index: number\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n}): React.ReactNode {\n const { badgeConfig, doc, index, t } = args\n const status = getPageTreeDisplayStatus(doc)\n const customColor = getPageTreeBadgeColor({\n badgeColors: badgeConfig.colors,\n status,\n })\n const statusClass = getStatusClassName(status)\n const style = customColor\n ? ({ '--page-tree-badge-base': customColor } as React.CSSProperties)\n : undefined\n\n return (\n <span\n className={[\n 'pages-hierarchy-status-badge',\n `pages-hierarchy-status-badge--${statusClass}`,\n ].join(' ')}\n data-custom-color={customColor ? 'true' : undefined}\n key={doc.__pageTreeID ?? index}\n style={style}\n >\n {getPageTreeBadgeLabel({\n badgeLabels: badgeConfig.labels,\n status,\n t,\n })}\n </span>\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 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 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 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 canMoveDocs,\n columnState,\n homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\n query,\n sourceDocs,\n useAsTitle,\n ...props\n}: PageTreeListViewClientProps) {\n const router = useRouter()\n const searchParams = useSearchParams()\n const { config } = useConfig()\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 [collapsedIDs, setCollapsedIDs] = React.useState<Set<string>>(() => new Set())\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 const toggleRow = React.useCallback((rowID: string) => {\n setCollapsedIDs((currentState) => {\n const nextState = new Set(currentState)\n\n if (nextState.has(rowID)) {\n nextState.delete(rowID)\n } else {\n nextState.add(rowID)\n }\n\n return nextState\n })\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 collapseResetKey = 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 setCollapsedIDs(new Set())\n setOptimisticOrderRowIDs(null)\n }, [collapseResetKey])\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 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 homeIndicatorEnabled,\n orderableFieldName,\n parentFieldSlug,\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 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 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","useConfig","useLocale","usePreferences","useTranslation","useWindowInfo","useRouter","useSearchParams","React","createPortal","buildInsertDropTargets","getDropTargetParentDoc","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","getPageTreeBadgeColor","getPageTreeBadgeLabel","getPageTreeDisplayStatus","PageTreeProvider","PageTreeRowDndProvider","styles","PageTreeTitleCell","SILENT_MOVE_MESSAGES","Set","ALREADY_ROOT_MESSAGE","getParentMovePreferenceKey","collectionSlug","getRowDropID","rowID","getSortableRowID","getDiagnosticString","value","length","getPageTreeDragData","data","dragType","undefined","parentID","getSortableTransform","transform","scaleX","scaleY","x","y","getVisibleSubtreeIndexRange","docs","rootIndex","rootDoc","end","index","__pageTreeAncestorIDs","includes","__pageTreeID","start","getRangeRect","args","activeNodeRect","activeRange","range","rects","firstRect","lastRect","bottom","top","height","isIndexInRange","buildPageTreeSortingStrategy","activeIndex","overIndex","overRange","activeRect","overRect","buildPaginatedData","limit","requestedPage","totalDocs","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","slice","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","filter","entry","join","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","isOrderableSortActive","orderableFieldName","sort","Boolean","ensureUseAsTitleColumn","columnState","useAsTitle","map","column","accessor","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","doc","renderedCellIndex","get","__pageTreeOrderIndex","getSelectableRowData","record","id","String","_isLocked","_userEditing","shouldSilenceMoveMessage","message","has","getVisibleSubtreeRowIDs","findIndex","rowIDs","push","buildOptimisticOrderRowIDs","activeRowID","targetRowID","activeDoc","find","targetDoc","__pageTreeParentID","activeBlockIDs","targetBlockIDs","currentRowIDs","indexOf","targetIndex","remainingRowIDs","targetAnchorID","targetAnchorIndex","insertIndex","buildReorderRequestBody","siblingDocs","moveFromIndex","moveToIndex","newBeforeRow","newAfterRow","target","getFrontendOrderEntry","orderKey","slug","siblingDocsAfter","movedSiblingDoc","splice","targetKey","newKeyWillBe","docsToMove","frontendOrder","activeSlug","after","before","newAfterRowSlug","newBeforeRowSlug","targetSlug","key","orderDocsByRowIDs","orderRowIDs","docsByID","Map","orderedDocs","flatMap","getDropTargetValidation","dropTarget","dropType","isValid","getStatusClassName","status","renderStatusBadge","badgeConfig","t","customColor","badgeColors","colors","statusClass","style","span","className","data-custom-color","badgeLabels","labels","ParentMoveToggle","enabled","onToggle","breakpoints","s","smallBreak","mobileActions","setMobileActions","useState","setMobileMount","useCallback","node","closest","querySelector","toggle","aria-checked","aria-label","onClick","pillStyle","size","hidden","ref","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","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","columnIndex","replace","data-page-tree-title-cell","HierarchyTable","activeDropTarget","allDocsByID","columns","sortableItems","sortingStrategy","insertDropTargets","insertDropTargetsByReferenceRowID","referenceRowID","rowDropValidationByID","insertDropValidationByID","table","cellPadding","cellSpacing","thead","th","tbody","items","strategy","rootInsertBeforeDropTarget","rootInsertTargetIndex","rootInsertAfterDropTarget","isTrailingRootInsert","nextVisibleDoc","hasVisibleDescendantAfter","Fragment","PageTreeListViewClient","allDocs","canMoveDocs","query","sourceDocs","props","router","searchParams","config","locale","i18n","setActiveDragRowID","setActiveDragType","setActiveDropTarget","collapsedIDs","setCollapsedIDs","optimisticOrderRowIDs","setOptimisticOrderRowIDs","parentMoveEnabled","setParentMoveEnabled","pendingMoveRowID","setPendingMoveRowID","getPreference","setPreference","parentMovePreferenceKey","toggleRow","currentState","nextState","delete","add","handleParentMoveToggle","currentValue","nextValue","currentSort","searchParamSort","getAll","currentLimit","currentRequestedPage","liveAllDocs","collapseResetKey","JSON","stringify","viewType","toString","hierarchyValue","useEffect","isMounted","then","storedValue","visibleDocs","paginatedData","paginatedDocs","paginatedServerOrderKey","displayedPaginatedDocs","displayedPaginatedData","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","sensors","activationConstraint","distance","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","overDragData","nextOrderRowIDs","reorderRequestBody","apiRoute","routes","api","params","URLSearchParams","code","set","response","fetch","encodeURIComponent","body","credentials","headers","language","method","result","json","catch","ok","error","startTransition","refresh","Error","success","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","beforeActions","actions","root","modifySearchParams","Table"],"mappings":"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"}
@@ -2,13 +2,6 @@
2
2
  }
3
3
 
4
4
  .root :global(.pages-hierarchy-table) {
5
- --pages-tree-shade-rgb: 0 0 0;
6
- --pages-tree-shade-1: rgb(var(--pages-tree-shade-rgb) / 0.03);
7
- --pages-tree-shade-2: rgb(var(--pages-tree-shade-rgb) / 0.06);
8
- --pages-tree-shade-3: rgb(var(--pages-tree-shade-rgb) / 0.08);
9
- --pages-tree-shade-4: rgb(var(--pages-tree-shade-rgb) / 0.1);
10
- --pages-tree-shade-5: rgb(var(--pages-tree-shade-rgb) / 0.14);
11
- --pages-tree-shade-6: rgb(var(--pages-tree-shade-rgb) / 0.16);
12
5
  overflow: visible;
13
6
  position: relative;
14
7
  }
@@ -72,6 +65,10 @@
72
65
  border-radius: 0;
73
66
  }
74
67
 
68
+ .root :global(.pages-hierarchy-table .table tbody tr[data-page-tree-row='true'] td) {
69
+ border-top: 1px solid var(--theme-elevation-100);
70
+ }
71
+
75
72
  .root :global(.pages-hierarchy-table .table th[id='heading-_pageTreeOrderSort']),
76
73
  .root :global(.pages-hierarchy-table .table td.cell-_pageTreeOrderSort) {
77
74
  inline-size: 2rem;
@@ -109,59 +106,6 @@
109
106
  margin-inline-start: -2rem;
110
107
  }
111
108
 
112
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='1'])) {
113
- background: var(--pages-tree-shade-1);
114
- }
115
-
116
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='2'])) {
117
- background: var(--pages-tree-shade-2);
118
- }
119
-
120
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='3'])) {
121
- background: var(--pages-tree-shade-3);
122
- }
123
-
124
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='4'])) {
125
- background: var(--pages-tree-shade-4);
126
- }
127
-
128
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='5'])) {
129
- background: var(--pages-tree-shade-5);
130
- }
131
-
132
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='6'])) {
133
- background: var(--pages-tree-shade-6);
134
- }
135
-
136
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='1'])),
137
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='2'])),
138
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='3'])),
139
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='4'])),
140
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='5'])),
141
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='6'])) {
142
- border-radius: var(--style-radius-s);
143
- }
144
-
145
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='1']) td:first-child),
146
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='2']) td:first-child),
147
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='3']) td:first-child),
148
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='4']) td:first-child),
149
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='5']) td:first-child),
150
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='6']) td:first-child) {
151
- border-bottom-left-radius: inherit;
152
- border-top-left-radius: inherit;
153
- }
154
-
155
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='1']) td:last-child),
156
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='2']) td:last-child),
157
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='3']) td:last-child),
158
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='4']) td:last-child),
159
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='5']) td:last-child),
160
- .root :global(.pages-hierarchy-table .table tbody tr:has(.pages-hierarchy-cell[data-tree-shade-level='6']) td:last-child) {
161
- border-bottom-right-radius: inherit;
162
- border-top-right-radius: inherit;
163
- }
164
-
165
109
  .root :global(.pages-hierarchy-table .table tbody tr[data-page-tree-row='true'][data-is-drag-source='true']) {
166
110
  box-shadow: inset 0 0 0 999px rgb(36 164 223 / 0.22);
167
111
  }
@@ -182,10 +126,6 @@
182
126
  box-shadow: inset 0 0 0 999px rgb(36 164 223 / 0.22);
183
127
  }
184
128
 
185
- :global(html[data-theme='dark']) .root :global(.pages-hierarchy-table) {
186
- --pages-tree-shade-rgb: 255 255 255;
187
- }
188
-
189
129
  :global(html[data-theme='dark']) .root :global(.pages-hierarchy-insert-row[data-drop-valid='true'][data-drag-over='true'] .pages-hierarchy-insert-row__target::after) {
190
130
  background: rgb(232 236 241 / 0.72);
191
131
  box-shadow: 0 0 0 1px rgb(232 236 241 / 0.22);
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useDraggable } from '@dnd-kit/core';
4
- import { ChevronIcon, DragHandleIcon, useListQuery } from '@payloadcms/ui';
4
+ import { ChevronIcon, useListQuery } from '@payloadcms/ui';
5
5
  import React from 'react';
6
6
  import { usePageTree, usePageTreeRowDnd } from './PageTreeContext.js';
7
7
  const HOME_PAGE_SLUG = 'home';
@@ -114,7 +114,39 @@ export function PageTreeTitleCell({ children, doc, homeIndicatorEnabled }) {
114
114
  },
115
115
  ref: rowDnd?.orderHandleRef,
116
116
  type: "button",
117
- children: /*#__PURE__*/ _jsx(DragHandleIcon, {})
117
+ children: /*#__PURE__*/ _jsxs("svg", {
118
+ width: "20",
119
+ height: "20",
120
+ viewBox: "0 0 20 20",
121
+ fill: "none",
122
+ xmlns: "http://www.w3.org/2000/svg",
123
+ children: [
124
+ /*#__PURE__*/ _jsx("path", {
125
+ d: "M7.125 6C7.95343 6 8.625 5.32843 8.625 4.5C8.625 3.67157 7.95343 3 7.125 3C6.29657 3 5.625 3.67157 5.625 4.5C5.625 5.32843 6.29657 6 7.125 6Z",
126
+ fill: "black"
127
+ }),
128
+ /*#__PURE__*/ _jsx("path", {
129
+ d: "M7.125 12C7.95343 12 8.625 11.3284 8.625 10.5C8.625 9.67157 7.95343 9 7.125 9C6.29657 9 5.625 9.67157 5.625 10.5C5.625 11.3284 6.29657 12 7.125 12Z",
130
+ fill: "black"
131
+ }),
132
+ /*#__PURE__*/ _jsx("path", {
133
+ d: "M7.125 18C7.95343 18 8.625 17.3284 8.625 16.5C8.625 15.6716 7.95343 15 7.125 15C6.29657 15 5.625 15.6716 5.625 16.5C5.625 17.3284 6.29657 18 7.125 18Z",
134
+ fill: "black"
135
+ }),
136
+ /*#__PURE__*/ _jsx("path", {
137
+ d: "M12.875 6C13.7034 6 14.375 5.32843 14.375 4.5C14.375 3.67157 13.7034 3 12.875 3C12.0466 3 11.375 3.67157 11.375 4.5C11.375 5.32843 12.0466 6 12.875 6Z",
138
+ fill: "black"
139
+ }),
140
+ /*#__PURE__*/ _jsx("path", {
141
+ d: "M12.875 12C13.7034 12 14.375 11.3284 14.375 10.5C14.375 9.67157 13.7034 9 12.875 9C12.0466 9 11.375 9.67157 11.375 10.5C11.375 11.3284 12.0466 12 12.875 12Z",
142
+ fill: "black"
143
+ }),
144
+ /*#__PURE__*/ _jsx("path", {
145
+ d: "M12.875 18C13.7034 18 14.375 17.3284 14.375 16.5C14.375 15.6716 13.7034 15 12.875 15C12.0466 15 11.375 15.6716 11.375 16.5C11.375 17.3284 12.0466 18 12.875 18Z",
146
+ fill: "black"
147
+ })
148
+ ]
149
+ })
118
150
  }) : null,
119
151
  canMoveDocs && parentMoveEnabled ? /*#__PURE__*/ _jsx("button", {
120
152
  ...parentMoveDrag.attributes,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/PageTreeTitleCell.tsx"],"sourcesContent":["'use client'\n\nimport { useDraggable } from '@dnd-kit/core'\nimport { ChevronIcon, DragHandleIcon, useListQuery } from '@payloadcms/ui'\nimport React from 'react'\n\nimport type { PageTreeDoc } from '../utilities/pageTree.js'\n\nimport { usePageTree, usePageTreeRowDnd } from './PageTreeContext.js'\n\nconst HOME_PAGE_SLUG = 'home'\n\nfunction isHomePageDoc(doc: PageTreeDoc): boolean {\n return doc.__pageTreeParentID === null && doc.slug?.trim() === HOME_PAGE_SLUG\n}\n\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\n return Array.isArray(value) ? value[0] : value\n}\n\nfunction ParentMoveHandleIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"icon icon--drag-handle\"\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n className=\"stroke\"\n d=\"M13.75 4.25L6.25 15.75\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth=\"2.25\"\n />\n </svg>\n )\n}\n\nfunction HomeIndicatorIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"pages-hierarchy-cell__home-icon\"\n fill=\"none\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.5 7L7 3L11.5 7V13.5H2.5V7Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport function PageTreeTitleCell({\n children,\n doc,\n homeIndicatorEnabled,\n}: {\n children: React.ReactNode\n doc: PageTreeDoc\n homeIndicatorEnabled: boolean\n}) {\n const {\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n parentMoveEnabled,\n pendingMoveRowID,\n toggleRow,\n } = usePageTree()\n const rowDnd = usePageTreeRowDnd()\n const { orderableFieldName, query = {} } = useListQuery()\n const depth = doc.__pageTreeDepth\n const hasChildren = doc.__pageTreeHasChildren\n const shadeLevel = Math.min(doc.__pageTreeShadeLevel, 6)\n const rowID = doc.__pageTreeID\n const isCollapsed = hasChildren && collapsedIDs.has(rowID)\n const dragIsDisabled = !canMoveDocs || !rowID || pendingMoveRowID !== null\n const showHomeIcon = homeIndicatorEnabled && isHomePageDoc(doc)\n const parentMoveDrag = useDraggable({\n id: `page-drag:${rowID}`,\n data: {\n dragType: 'move',\n rowID,\n },\n disabled: dragIsDisabled,\n })\n const querySort = normalizeSort(query.sort)\n const showOrderableHandle =\n canMoveDocs &&\n Boolean(orderableFieldName) &&\n (querySort === orderableFieldName || querySort === `-${orderableFieldName}`)\n const isActiveDragRow = activeDragRowID === rowID\n const isDragging = parentMoveDrag.isDragging || rowDnd?.isOrderDragging || isActiveDragRow\n\n return (\n <div\n className=\"pages-hierarchy-cell\"\n data-row-dragging={isDragging ? 'true' : 'false'}\n data-tree-depth={depth}\n data-tree-has-children={hasChildren ? 'true' : 'false'}\n data-tree-home={showHomeIcon ? 'true' : undefined}\n data-tree-shade-level={shadeLevel}\n style={{ '--pages-tree-depth': String(depth) } as React.CSSProperties}\n >\n {hasChildren ? (\n <button\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? 'Expand nested items' : 'Collapse nested items'}\n className=\"pages-hierarchy-cell__toggle\"\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n toggleRow(rowID)\n }}\n type=\"button\"\n >\n <ChevronIcon\n className={[\n 'pages-hierarchy-cell__chevron',\n isCollapsed ? 'pages-hierarchy-cell__chevron--collapsed' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </button>\n ) : (\n <span className=\"pages-hierarchy-cell__spacer\" />\n )}\n {showOrderableHandle ? (\n <button\n {...(rowDnd?.orderHandleAttributes ?? {})}\n {...(rowDnd?.orderHandleListeners ?? {})}\n aria-label=\"Reorder document within this parent\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n 'pages-hierarchy-cell__drag-handle--orderable',\n rowDnd?.isOrderDragging || isActiveDragRow\n ? 'pages-hierarchy-cell__drag-handle--active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled || !rowDnd}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={rowDnd?.orderHandleRef}\n type=\"button\"\n >\n <DragHandleIcon />\n </button>\n ) : null}\n {canMoveDocs && parentMoveEnabled ? (\n <button\n {...parentMoveDrag.attributes}\n {...parentMoveDrag.listeners}\n aria-label=\"Move document under another page\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n 'pages-hierarchy-cell__drag-handle--parent',\n parentMoveDrag.isDragging || isActiveDragRow\n ? 'pages-hierarchy-cell__drag-handle--active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={parentMoveDrag.setNodeRef}\n type=\"button\"\n >\n <ParentMoveHandleIcon />\n </button>\n ) : null}\n <span className=\"pages-hierarchy-cell__content\">\n {showHomeIcon ? <HomeIndicatorIcon /> : null}\n {children}\n </span>\n </div>\n )\n}\n"],"names":["useDraggable","ChevronIcon","DragHandleIcon","useListQuery","React","usePageTree","usePageTreeRowDnd","HOME_PAGE_SLUG","isHomePageDoc","doc","__pageTreeParentID","slug","trim","normalizeSort","value","Array","isArray","ParentMoveHandleIcon","svg","aria-hidden","className","fill","height","viewBox","width","xmlns","path","d","stroke","strokeLinecap","strokeWidth","HomeIndicatorIcon","strokeLinejoin","PageTreeTitleCell","children","homeIndicatorEnabled","activeDragRowID","canMoveDocs","collapsedIDs","parentMoveEnabled","pendingMoveRowID","toggleRow","rowDnd","orderableFieldName","query","depth","__pageTreeDepth","hasChildren","__pageTreeHasChildren","shadeLevel","Math","min","__pageTreeShadeLevel","rowID","__pageTreeID","isCollapsed","has","dragIsDisabled","showHomeIcon","parentMoveDrag","id","data","dragType","disabled","querySort","sort","showOrderableHandle","Boolean","isActiveDragRow","isDragging","isOrderDragging","div","data-row-dragging","data-tree-depth","data-tree-has-children","data-tree-home","undefined","data-tree-shade-level","style","String","button","aria-expanded","aria-label","onClick","event","preventDefault","stopPropagation","type","filter","join","span","orderHandleAttributes","orderHandleListeners","ref","orderHandleRef","attributes","listeners","setNodeRef"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/components/PageTreeTitleCell.tsx"],"sourcesContent":["'use client'\n\nimport { useDraggable } from '@dnd-kit/core'\nimport { ChevronIcon, useListQuery } from '@payloadcms/ui'\nimport React from 'react'\n\nimport type { PageTreeDoc } from '../utilities/pageTree.js'\n\nimport { usePageTree, usePageTreeRowDnd } from './PageTreeContext.js'\n\nconst HOME_PAGE_SLUG = 'home'\n\nfunction isHomePageDoc(doc: PageTreeDoc): boolean {\n return doc.__pageTreeParentID === null && doc.slug?.trim() === HOME_PAGE_SLUG\n}\n\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\n return Array.isArray(value) ? value[0] : value\n}\n\nfunction ParentMoveHandleIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"icon icon--drag-handle\"\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n className=\"stroke\"\n d=\"M13.75 4.25L6.25 15.75\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth=\"2.25\"\n />\n </svg>\n )\n}\n\nfunction HomeIndicatorIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"pages-hierarchy-cell__home-icon\"\n fill=\"none\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.5 7L7 3L11.5 7V13.5H2.5V7Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport function PageTreeTitleCell({\n children,\n doc,\n homeIndicatorEnabled,\n}: {\n children: React.ReactNode\n doc: PageTreeDoc\n homeIndicatorEnabled: boolean\n}) {\n const {\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n parentMoveEnabled,\n pendingMoveRowID,\n toggleRow,\n } = usePageTree()\n const rowDnd = usePageTreeRowDnd()\n const { orderableFieldName, query = {} } = useListQuery()\n const depth = doc.__pageTreeDepth\n const hasChildren = doc.__pageTreeHasChildren\n const shadeLevel = Math.min(doc.__pageTreeShadeLevel, 6)\n const rowID = doc.__pageTreeID\n const isCollapsed = hasChildren && collapsedIDs.has(rowID)\n const dragIsDisabled = !canMoveDocs || !rowID || pendingMoveRowID !== null\n const showHomeIcon = homeIndicatorEnabled && isHomePageDoc(doc)\n const parentMoveDrag = useDraggable({\n id: `page-drag:${rowID}`,\n data: {\n dragType: 'move',\n rowID,\n },\n disabled: dragIsDisabled,\n })\n const querySort = normalizeSort(query.sort)\n const showOrderableHandle =\n canMoveDocs &&\n Boolean(orderableFieldName) &&\n (querySort === orderableFieldName || querySort === `-${orderableFieldName}`)\n const isActiveDragRow = activeDragRowID === rowID\n const isDragging = parentMoveDrag.isDragging || rowDnd?.isOrderDragging || isActiveDragRow\n\n return (\n <div\n className=\"pages-hierarchy-cell\"\n data-row-dragging={isDragging ? 'true' : 'false'}\n data-tree-depth={depth}\n data-tree-has-children={hasChildren ? 'true' : 'false'}\n data-tree-home={showHomeIcon ? 'true' : undefined}\n data-tree-shade-level={shadeLevel}\n style={{ '--pages-tree-depth': String(depth) } as React.CSSProperties}\n >\n {hasChildren ? (\n <button\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? 'Expand nested items' : 'Collapse nested items'}\n className=\"pages-hierarchy-cell__toggle\"\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n toggleRow(rowID)\n }}\n type=\"button\"\n >\n <ChevronIcon\n className={[\n 'pages-hierarchy-cell__chevron',\n isCollapsed ? 'pages-hierarchy-cell__chevron--collapsed' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </button>\n ) : (\n <span className=\"pages-hierarchy-cell__spacer\" />\n )}\n {showOrderableHandle ? (\n <button\n {...(rowDnd?.orderHandleAttributes ?? {})}\n {...(rowDnd?.orderHandleListeners ?? {})}\n aria-label=\"Reorder document within this parent\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n 'pages-hierarchy-cell__drag-handle--orderable',\n rowDnd?.isOrderDragging || isActiveDragRow\n ? 'pages-hierarchy-cell__drag-handle--active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled || !rowDnd}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={rowDnd?.orderHandleRef}\n type=\"button\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.125 6C7.95343 6 8.625 5.32843 8.625 4.5C8.625 3.67157 7.95343 3 7.125 3C6.29657 3 5.625 3.67157 5.625 4.5C5.625 5.32843 6.29657 6 7.125 6Z\" fill=\"black\"/>\n <path d=\"M7.125 12C7.95343 12 8.625 11.3284 8.625 10.5C8.625 9.67157 7.95343 9 7.125 9C6.29657 9 5.625 9.67157 5.625 10.5C5.625 11.3284 6.29657 12 7.125 12Z\" fill=\"black\"/>\n <path d=\"M7.125 18C7.95343 18 8.625 17.3284 8.625 16.5C8.625 15.6716 7.95343 15 7.125 15C6.29657 15 5.625 15.6716 5.625 16.5C5.625 17.3284 6.29657 18 7.125 18Z\" fill=\"black\"/>\n <path d=\"M12.875 6C13.7034 6 14.375 5.32843 14.375 4.5C14.375 3.67157 13.7034 3 12.875 3C12.0466 3 11.375 3.67157 11.375 4.5C11.375 5.32843 12.0466 6 12.875 6Z\" fill=\"black\"/>\n <path d=\"M12.875 12C13.7034 12 14.375 11.3284 14.375 10.5C14.375 9.67157 13.7034 9 12.875 9C12.0466 9 11.375 9.67157 11.375 10.5C11.375 11.3284 12.0466 12 12.875 12Z\" fill=\"black\"/>\n <path d=\"M12.875 18C13.7034 18 14.375 17.3284 14.375 16.5C14.375 15.6716 13.7034 15 12.875 15C12.0466 15 11.375 15.6716 11.375 16.5C11.375 17.3284 12.0466 18 12.875 18Z\" fill=\"black\"/>\n </svg>\n </button>\n ) : null}\n {canMoveDocs && parentMoveEnabled ? (\n <button\n {...parentMoveDrag.attributes}\n {...parentMoveDrag.listeners}\n aria-label=\"Move document under another page\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n 'pages-hierarchy-cell__drag-handle--parent',\n parentMoveDrag.isDragging || isActiveDragRow\n ? 'pages-hierarchy-cell__drag-handle--active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={parentMoveDrag.setNodeRef}\n type=\"button\"\n >\n <ParentMoveHandleIcon />\n </button>\n ) : null}\n <span className=\"pages-hierarchy-cell__content\">\n {showHomeIcon ? <HomeIndicatorIcon /> : null}\n {children}\n </span>\n </div>\n )\n}\n"],"names":["useDraggable","ChevronIcon","useListQuery","React","usePageTree","usePageTreeRowDnd","HOME_PAGE_SLUG","isHomePageDoc","doc","__pageTreeParentID","slug","trim","normalizeSort","value","Array","isArray","ParentMoveHandleIcon","svg","aria-hidden","className","fill","height","viewBox","width","xmlns","path","d","stroke","strokeLinecap","strokeWidth","HomeIndicatorIcon","strokeLinejoin","PageTreeTitleCell","children","homeIndicatorEnabled","activeDragRowID","canMoveDocs","collapsedIDs","parentMoveEnabled","pendingMoveRowID","toggleRow","rowDnd","orderableFieldName","query","depth","__pageTreeDepth","hasChildren","__pageTreeHasChildren","shadeLevel","Math","min","__pageTreeShadeLevel","rowID","__pageTreeID","isCollapsed","has","dragIsDisabled","showHomeIcon","parentMoveDrag","id","data","dragType","disabled","querySort","sort","showOrderableHandle","Boolean","isActiveDragRow","isDragging","isOrderDragging","div","data-row-dragging","data-tree-depth","data-tree-has-children","data-tree-home","undefined","data-tree-shade-level","style","String","button","aria-expanded","aria-label","onClick","event","preventDefault","stopPropagation","type","filter","join","span","orderHandleAttributes","orderHandleListeners","ref","orderHandleRef","attributes","listeners","setNodeRef"],"mappings":"AAAA;;AAEA,SAASA,YAAY,QAAQ,gBAAe;AAC5C,SAASC,WAAW,EAAEC,YAAY,QAAQ,iBAAgB;AAC1D,OAAOC,WAAW,QAAO;AAIzB,SAASC,WAAW,EAAEC,iBAAiB,QAAQ,uBAAsB;AAErE,MAAMC,iBAAiB;AAEvB,SAASC,cAAcC,GAAgB;IACrC,OAAOA,IAAIC,kBAAkB,KAAK,QAAQD,IAAIE,IAAI,EAAEC,WAAWL;AACjE;AAEA,SAASM,cAAcC,KAAoC;IACzD,OAAOC,MAAMC,OAAO,CAACF,SAASA,KAAK,CAAC,EAAE,GAAGA;AAC3C;AAEA,SAASG;IACP,qBACE,KAACC;QACCC,eAAY;QACZC,WAAU;QACVC,MAAK;QACLC,QAAO;QACPC,SAAQ;QACRC,OAAM;QACNC,OAAM;kBAEN,cAAA,KAACC;YACCN,WAAU;YACVO,GAAE;YACFC,QAAO;YACPC,eAAc;YACdC,aAAY;;;AAIpB;AAEA,SAASC;IACP,qBACE,KAACb;QACCC,eAAY;QACZC,WAAU;QACVC,MAAK;QACLC,QAAO;QACPC,SAAQ;QACRC,OAAM;QACNC,OAAM;kBAEN,cAAA,KAACC;YACCC,GAAE;YACFC,QAAO;YACPI,gBAAe;;;AAIvB;AAEA,OAAO,SAASC,kBAAkB,EAChCC,QAAQ,EACRzB,GAAG,EACH0B,oBAAoB,EAKrB;IACC,MAAM,EACJC,eAAe,EACfC,WAAW,EACXC,YAAY,EACZC,iBAAiB,EACjBC,gBAAgB,EAChBC,SAAS,EACV,GAAGpC;IACJ,MAAMqC,SAASpC;IACf,MAAM,EAAEqC,kBAAkB,EAAEC,QAAQ,CAAC,CAAC,EAAE,GAAGzC;IAC3C,MAAM0C,QAAQpC,IAAIqC,eAAe;IACjC,MAAMC,cAActC,IAAIuC,qBAAqB;IAC7C,MAAMC,aAAaC,KAAKC,GAAG,CAAC1C,IAAI2C,oBAAoB,EAAE;IACtD,MAAMC,QAAQ5C,IAAI6C,YAAY;IAC9B,MAAMC,cAAcR,eAAeT,aAAakB,GAAG,CAACH;IACpD,MAAMI,iBAAiB,CAACpB,eAAe,CAACgB,SAASb,qBAAqB;IACtE,MAAMkB,eAAevB,wBAAwB3B,cAAcC;IAC3D,MAAMkD,iBAAiB1D,aAAa;QAClC2D,IAAI,CAAC,UAAU,EAAEP,OAAO;QACxBQ,MAAM;YACJC,UAAU;YACVT;QACF;QACAU,UAAUN;IACZ;IACA,MAAMO,YAAYnD,cAAc+B,MAAMqB,IAAI;IAC1C,MAAMC,sBACJ7B,eACA8B,QAAQxB,uBACPqB,CAAAA,cAAcrB,sBAAsBqB,cAAc,CAAC,CAAC,EAAErB,oBAAoB,AAAD;IAC5E,MAAMyB,kBAAkBhC,oBAAoBiB;IAC5C,MAAMgB,aAAaV,eAAeU,UAAU,IAAI3B,QAAQ4B,mBAAmBF;IAE3E,qBACE,MAACG;QACCnD,WAAU;QACVoD,qBAAmBH,aAAa,SAAS;QACzCI,mBAAiB5B;QACjB6B,0BAAwB3B,cAAc,SAAS;QAC/C4B,kBAAgBjB,eAAe,SAASkB;QACxCC,yBAAuB5B;QACvB6B,OAAO;YAAE,sBAAsBC,OAAOlC;QAAO;;YAE5CE,4BACC,KAACiC;gBACCC,iBAAe,CAAC1B;gBAChB2B,cAAY3B,cAAc,wBAAwB;gBAClDnC,WAAU;gBACV+D,SAAS,CAACC;oBACRA,MAAMC,cAAc;oBACpBD,MAAME,eAAe;oBACrB7C,UAAUY;gBACZ;gBACAkC,MAAK;0BAEL,cAAA,KAACrF;oBACCkB,WAAW;wBACT;wBACAmC,cAAc,6CAA6C;qBAC5D,CACEiC,MAAM,CAACrB,SACPsB,IAAI,CAAC;;+BAIZ,KAACC;gBAAKtE,WAAU;;YAEjB8C,oCACC,KAACc;gBACE,GAAItC,QAAQiD,yBAAyB,CAAC,CAAC;gBACvC,GAAIjD,QAAQkD,wBAAwB,CAAC,CAAC;gBACvCV,cAAW;gBACX9D,WAAW;oBACT;oBACA;oBACAsB,QAAQ4B,mBAAmBF,kBACvB,8CACA;iBACL,CACEoB,MAAM,CAACrB,SACPsB,IAAI,CAAC;gBACR1B,UAAUN,kBAAkB,CAACf;gBAC7ByC,SAAS,CAACC;oBACRA,MAAMC,cAAc;oBACpBD,MAAME,eAAe;gBACvB;gBACAO,KAAKnD,QAAQoD;gBACbP,MAAK;0BAET,cAAA,MAACrE;oBAAIM,OAAM;oBAAKF,QAAO;oBAAKC,SAAQ;oBAAYF,MAAK;oBAAOI,OAAM;;sCAClE,KAACC;4BAAKC,GAAE;4BAAgJN,MAAK;;sCAC7J,KAACK;4BAAKC,GAAE;4BAAsJN,MAAK;;sCACnK,KAACK;4BAAKC,GAAE;4BAAyJN,MAAK;;sCACtK,KAACK;4BAAKC,GAAE;4BAAyJN,MAAK;;sCACtK,KAACK;4BAAKC,GAAE;4BAA+JN,MAAK;;sCAC5K,KAACK;4BAAKC,GAAE;4BAAkKN,MAAK;;;;iBAG3K;YACHgB,eAAeE,kCACd,KAACyC;gBACE,GAAGrB,eAAeoC,UAAU;gBAC5B,GAAGpC,eAAeqC,SAAS;gBAC5Bd,cAAW;gBACX9D,WAAW;oBACT;oBACA;oBACAuC,eAAeU,UAAU,IAAID,kBACzB,8CACA;iBACL,CACEoB,MAAM,CAACrB,SACPsB,IAAI,CAAC;gBACR1B,UAAUN;gBACV0B,SAAS,CAACC;oBACRA,MAAMC,cAAc;oBACpBD,MAAME,eAAe;gBACvB;gBACAO,KAAKlC,eAAesC,UAAU;gBAC9BV,MAAK;0BAEL,cAAA,KAACtE;iBAED;0BACJ,MAACyE;gBAAKtE,WAAU;;oBACbsC,6BAAe,KAAC3B,yBAAuB;oBACvCG;;;;;AAIT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload-nested-docs-page-tree",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "Page tree plugin for Payload nested docs collections",
5
5
  "license": "MIT",
6
6
  "author": "WLF Studios",