payload-nested-docs-page-tree 1.2.3 → 1.2.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
|
@@ -173,7 +173,7 @@ export const triggerDeployOnPublishedChange: CollectionAfterChangeHook = async (
|
|
|
173
173
|
}
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
See `dev/lib/rebuild.ts` for the full reference example.
|
|
176
|
+
See [`dev/lib/rebuild.ts`](https://github.com/WLF-Studios/payload-nested-docs-page-tree/blob/main/dev/lib/rebuild.ts) for the full reference example.
|
|
177
177
|
|
|
178
178
|
## Configuration
|
|
179
179
|
|
|
@@ -14,5 +14,5 @@ type PageTreeListViewClientOwnProps = {
|
|
|
14
14
|
useAsTitle: string;
|
|
15
15
|
};
|
|
16
16
|
type PageTreeListViewClientProps = Omit<ListViewClientProps, 'columnState' | 'Table'> & PageTreeListViewClientOwnProps;
|
|
17
|
-
export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDocs, columnState, homeIndicatorEnabled, orderableFieldName, parentFieldSlug, query, sourceDocs, useAsTitle, ...props }: PageTreeListViewClientProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDocs, columnState, homeIndicatorEnabled, orderableFieldName: _orderableFieldName, parentFieldSlug, query, sourceDocs, useAsTitle, ...props }: PageTreeListViewClientProps): import("react/jsx-runtime").JSX.Element;
|
|
18
18
|
export {};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { DndContext, DragOverlay, PointerSensor, useDroppable, useSensor, useSensors } from '@dnd-kit/core';
|
|
4
|
-
import { DefaultListView, ListQueryProvider, SelectAll, SelectRow,
|
|
4
|
+
import { DefaultListView, ListQueryProvider, SelectAll, SelectRow, toast, useConfig, useLocale, useTranslation } from '@payloadcms/ui';
|
|
5
5
|
import { useRouter, useSearchParams } from 'next/navigation';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import { pageTreeMoveRequestHeader, pageTreeMoveRequestHeaderValue } from '../types.js';
|
|
8
|
-
import { buildInsertDropTargets, getDropTargetParentDoc
|
|
8
|
+
import { buildInsertDropTargets, getDropTargetParentDoc } from '../utilities/dropTargets.js';
|
|
9
9
|
import { CANCEL_DRAG_MESSAGE, getDropValidation } from '../utilities/moveValidation.js';
|
|
10
10
|
import { buildDocSlugPath, buildPageTreeDocs, buildProspectiveDocSlugPath, getDocDisplayLabel, getVisibleTreeDocs } from '../utilities/pageTree.js';
|
|
11
11
|
import { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js';
|
|
@@ -23,85 +23,6 @@ function getRowDropID(rowID) {
|
|
|
23
23
|
function getPageTreeDragData(value) {
|
|
24
24
|
return value && typeof value === 'object' ? value : {};
|
|
25
25
|
}
|
|
26
|
-
function getPayloadDocID(doc) {
|
|
27
|
-
return typeof doc.id === 'number' || typeof doc.id === 'string' ? doc.id : undefined;
|
|
28
|
-
}
|
|
29
|
-
function getManualOrderDropValidation(args) {
|
|
30
|
-
const { activeDoc, targetDoc } = args;
|
|
31
|
-
if (!targetDoc) {
|
|
32
|
-
return {
|
|
33
|
-
isValid: true,
|
|
34
|
-
parentID: null
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
if (targetDoc.__pageTreeID === activeDoc.__pageTreeID) {
|
|
38
|
-
return {
|
|
39
|
-
isValid: false,
|
|
40
|
-
message: CANCEL_DRAG_MESSAGE,
|
|
41
|
-
parentID: targetDoc.__pageTreeID
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
if (targetDoc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)) {
|
|
45
|
-
return {
|
|
46
|
-
isValid: false,
|
|
47
|
-
message: 'A document cannot be moved under one of its descendants.',
|
|
48
|
-
parentID: targetDoc.__pageTreeID
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
return {
|
|
52
|
-
isValid: true,
|
|
53
|
-
parentID: targetDoc.__pageTreeID
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
function getDropValidationForMode(args) {
|
|
57
|
-
const { activeDoc, allowSameParent, targetDoc } = args;
|
|
58
|
-
if (allowSameParent) {
|
|
59
|
-
return getManualOrderDropValidation({
|
|
60
|
-
activeDoc,
|
|
61
|
-
targetDoc
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
return getDropValidation({
|
|
65
|
-
activeDoc,
|
|
66
|
-
targetDoc
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
function getCurrentOrderPlacement(args) {
|
|
70
|
-
const { activeDoc, docs } = args;
|
|
71
|
-
const activeIndex = docs.findIndex((doc)=>doc.__pageTreeID === activeDoc.__pageTreeID);
|
|
72
|
-
const movingSubtreeIDs = new Set(docs.filter((doc)=>doc.__pageTreeID === activeDoc.__pageTreeID || doc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)).map((doc)=>doc.__pageTreeID));
|
|
73
|
-
const siblingIsNotMoving = (doc)=>doc.__pageTreeParentID === activeDoc.__pageTreeParentID && !movingSubtreeIDs.has(doc.__pageTreeID);
|
|
74
|
-
if (activeIndex < 0) {
|
|
75
|
-
return {
|
|
76
|
-
nextSiblingID: null,
|
|
77
|
-
parentID: activeDoc.__pageTreeParentID,
|
|
78
|
-
previousSiblingID: null
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
return {
|
|
82
|
-
nextSiblingID: docs.slice(activeIndex + 1).find(siblingIsNotMoving)?.__pageTreeID ?? null,
|
|
83
|
-
parentID: activeDoc.__pageTreeParentID,
|
|
84
|
-
previousSiblingID: docs.slice(0, activeIndex).filter(siblingIsNotMoving).at(-1)?.__pageTreeID ?? null
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
function orderPlacementHasChanged(currentPlacement, nextPlacement) {
|
|
88
|
-
return currentPlacement.parentID !== nextPlacement.parentID || currentPlacement.previousSiblingID !== nextPlacement.previousSiblingID || currentPlacement.nextSiblingID !== nextPlacement.nextSiblingID;
|
|
89
|
-
}
|
|
90
|
-
function getReorderTargetFromPlacement(args) {
|
|
91
|
-
const { currentSort, docsByID, orderableFieldName, placement } = args;
|
|
92
|
-
const targetDocID = placement.previousSiblingID ?? placement.nextSiblingID;
|
|
93
|
-
if (!targetDocID) {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
const targetDoc = docsByID.get(targetDocID);
|
|
97
|
-
if (!targetDoc) {
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
return {
|
|
101
|
-
newKeyWillBe: placement.previousSiblingID !== null && currentSort === orderableFieldName || placement.previousSiblingID === null && currentSort === `-${orderableFieldName}` ? 'greater' : 'less',
|
|
102
|
-
targetDoc
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
26
|
function buildPaginatedData(docs, limit, requestedPage) {
|
|
106
27
|
const totalDocs = docs.length;
|
|
107
28
|
const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1;
|
|
@@ -192,28 +113,8 @@ function renderStatusBadge(args) {
|
|
|
192
113
|
})
|
|
193
114
|
}, doc.__pageTreeID ?? index);
|
|
194
115
|
}
|
|
195
|
-
function createManualOrderColumn(docs) {
|
|
196
|
-
return {
|
|
197
|
-
accessor: MANUAL_ORDER_COLUMN_ACCESSOR,
|
|
198
|
-
active: true,
|
|
199
|
-
field: {
|
|
200
|
-
hidden: true
|
|
201
|
-
},
|
|
202
|
-
Heading: /*#__PURE__*/ _jsx(SortHeader, {}),
|
|
203
|
-
renderedCells: docs.map(()=>null)
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
function insertManualOrderColumn(columns, orderColumn) {
|
|
207
|
-
const selectColumnIndex = columns.findIndex((column)=>column.accessor === '_select');
|
|
208
|
-
const insertIndex = selectColumnIndex >= 0 ? selectColumnIndex + 1 : 0;
|
|
209
|
-
return [
|
|
210
|
-
...columns.slice(0, insertIndex),
|
|
211
|
-
orderColumn,
|
|
212
|
-
...columns.slice(insertIndex)
|
|
213
|
-
];
|
|
214
|
-
}
|
|
215
116
|
function buildTableColumns(args) {
|
|
216
|
-
const { badgeConfig, columnState, docs, enableRowSelections, homeIndicatorEnabled,
|
|
117
|
+
const { badgeConfig, columnState, docs, enableRowSelections, homeIndicatorEnabled, parentFieldSlug, t, useAsTitle } = args;
|
|
217
118
|
const columnsToUse = columnState.map((column)=>{
|
|
218
119
|
if (column.accessor === useAsTitle) {
|
|
219
120
|
return {
|
|
@@ -261,9 +162,6 @@ function buildTableColumns(args) {
|
|
|
261
162
|
}, doc.__pageTreeID ?? index))
|
|
262
163
|
});
|
|
263
164
|
}
|
|
264
|
-
if (orderableFieldName && !columnsToUse.some((column)=>column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR)) {
|
|
265
|
-
return insertManualOrderColumn(columnsToUse, createManualOrderColumn(docs));
|
|
266
|
-
}
|
|
267
165
|
return columnsToUse;
|
|
268
166
|
}
|
|
269
167
|
function HierarchyInsertRow({ activeColumnsCount, activeDragRowID, dropTarget, dropValidation, isMovePending }) {
|
|
@@ -320,7 +218,7 @@ function HierarchyTableRow({ activeColumns, activeDragRowID, doc, dropValidation
|
|
|
320
218
|
})
|
|
321
219
|
});
|
|
322
220
|
}
|
|
323
|
-
function HierarchyTable({ activeDragRowID, allDocsByID,
|
|
221
|
+
function HierarchyTable({ activeDragRowID, allDocsByID, columns, data, isMovePending, titleCellAccessor }) {
|
|
324
222
|
const activeColumns = React.useMemo(()=>columns.filter((column)=>column?.active), [
|
|
325
223
|
columns
|
|
326
224
|
]);
|
|
@@ -337,15 +235,13 @@ function HierarchyTable({ activeDragRowID, allDocsByID, allowSameParentDrops, co
|
|
|
337
235
|
}
|
|
338
236
|
return new Map(data.map((doc)=>[
|
|
339
237
|
doc.__pageTreeID,
|
|
340
|
-
|
|
238
|
+
getDropValidation({
|
|
341
239
|
activeDoc,
|
|
342
|
-
allowSameParent: allowSameParentDrops,
|
|
343
240
|
targetDoc: doc
|
|
344
241
|
})
|
|
345
242
|
]));
|
|
346
243
|
}, [
|
|
347
244
|
activeDoc,
|
|
348
|
-
allowSameParentDrops,
|
|
349
245
|
data
|
|
350
246
|
]);
|
|
351
247
|
const insertDropValidationByID = React.useMemo(()=>{
|
|
@@ -354,15 +250,13 @@ function HierarchyTable({ activeDragRowID, allDocsByID, allowSameParentDrops, co
|
|
|
354
250
|
}
|
|
355
251
|
return new Map(insertDropTargets.map((dropTarget)=>[
|
|
356
252
|
dropTarget.dropID,
|
|
357
|
-
|
|
253
|
+
getDropValidation({
|
|
358
254
|
activeDoc,
|
|
359
|
-
allowSameParent: allowSameParentDrops,
|
|
360
255
|
targetDoc: dropTarget.parentID === null ? undefined : allDocsByID.get(dropTarget.parentID) ?? undefined
|
|
361
256
|
})
|
|
362
257
|
]));
|
|
363
258
|
}, [
|
|
364
259
|
activeDoc,
|
|
365
|
-
allowSameParentDrops,
|
|
366
260
|
allDocsByID,
|
|
367
261
|
insertDropTargets
|
|
368
262
|
]);
|
|
@@ -431,7 +325,7 @@ function HierarchyTable({ activeDragRowID, allDocsByID, allowSameParentDrops, co
|
|
|
431
325
|
})
|
|
432
326
|
});
|
|
433
327
|
}
|
|
434
|
-
export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDocs, columnState, homeIndicatorEnabled, orderableFieldName, parentFieldSlug, query, sourceDocs, useAsTitle, ...props }) {
|
|
328
|
+
export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDocs, columnState, homeIndicatorEnabled, orderableFieldName: _orderableFieldName, parentFieldSlug, query, sourceDocs, useAsTitle, ...props }) {
|
|
435
329
|
const router = useRouter();
|
|
436
330
|
const searchParams = useSearchParams();
|
|
437
331
|
const { config } = useConfig();
|
|
@@ -468,7 +362,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
468
362
|
query.sort,
|
|
469
363
|
searchParams
|
|
470
364
|
]);
|
|
471
|
-
const manualOrderIsActive = Boolean(orderableFieldName && (currentSort === orderableFieldName || currentSort === `-${orderableFieldName}`));
|
|
472
365
|
const currentLimit = React.useMemo(()=>normalizePositiveInt(searchParams.get('limit'), typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10), [
|
|
473
366
|
query.limit,
|
|
474
367
|
searchParams
|
|
@@ -557,7 +450,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
557
450
|
docs: paginatedDocs,
|
|
558
451
|
enableRowSelections: props.enableRowSelections,
|
|
559
452
|
homeIndicatorEnabled,
|
|
560
|
-
orderableFieldName,
|
|
561
453
|
parentFieldSlug,
|
|
562
454
|
t: i18n.t,
|
|
563
455
|
useAsTitle
|
|
@@ -566,7 +458,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
566
458
|
paginatedDocs,
|
|
567
459
|
badgeConfig,
|
|
568
460
|
homeIndicatorEnabled,
|
|
569
|
-
orderableFieldName,
|
|
570
461
|
parentFieldSlug,
|
|
571
462
|
props.enableRowSelections,
|
|
572
463
|
i18n.t,
|
|
@@ -587,9 +478,8 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
587
478
|
docsByID: allDocsByID,
|
|
588
479
|
dropTarget: activeDropTarget
|
|
589
480
|
});
|
|
590
|
-
const dropValidation =
|
|
481
|
+
const dropValidation = getDropValidation({
|
|
591
482
|
activeDoc: activeDragDoc,
|
|
592
|
-
allowSameParent: manualOrderIsActive,
|
|
593
483
|
targetDoc: targetDoc ?? undefined
|
|
594
484
|
});
|
|
595
485
|
if (!dropValidation.isValid) {
|
|
@@ -606,8 +496,7 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
606
496
|
}, [
|
|
607
497
|
activeDragDoc,
|
|
608
498
|
activeDropTarget,
|
|
609
|
-
allDocsByID
|
|
610
|
-
manualOrderIsActive
|
|
499
|
+
allDocsByID
|
|
611
500
|
]);
|
|
612
501
|
const isMovePending = pendingMoveRowID !== null;
|
|
613
502
|
const sensors = useSensors(useSensor(PointerSensor, {
|
|
@@ -644,157 +533,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
644
533
|
locale?.code,
|
|
645
534
|
props.collectionSlug
|
|
646
535
|
]);
|
|
647
|
-
const reorderDocument = React.useCallback(async (args)=>{
|
|
648
|
-
const { movedDocID, newKeyWillBe, targetDoc } = args;
|
|
649
|
-
const targetID = getPayloadDocID(targetDoc);
|
|
650
|
-
if (!orderableFieldName || targetID === undefined) {
|
|
651
|
-
return undefined;
|
|
652
|
-
}
|
|
653
|
-
const params = new URLSearchParams();
|
|
654
|
-
if (locale?.code) {
|
|
655
|
-
params.set('locale', locale.code);
|
|
656
|
-
}
|
|
657
|
-
const response = await fetch(`${config.routes.api}/reorder${params.size > 0 ? `?${params.toString()}` : ''}`, {
|
|
658
|
-
body: JSON.stringify({
|
|
659
|
-
collectionSlug: props.collectionSlug,
|
|
660
|
-
docsToMove: [
|
|
661
|
-
movedDocID
|
|
662
|
-
],
|
|
663
|
-
newKeyWillBe,
|
|
664
|
-
orderableFieldName,
|
|
665
|
-
target: {
|
|
666
|
-
id: targetID,
|
|
667
|
-
key: targetDoc[orderableFieldName]
|
|
668
|
-
}
|
|
669
|
-
}),
|
|
670
|
-
credentials: 'include',
|
|
671
|
-
headers: {
|
|
672
|
-
'Accept-Language': i18n.language,
|
|
673
|
-
'Content-Type': 'application/json',
|
|
674
|
-
[pageTreeMoveRequestHeader]: pageTreeMoveRequestHeaderValue
|
|
675
|
-
},
|
|
676
|
-
method: 'POST'
|
|
677
|
-
});
|
|
678
|
-
const result = await response.json().catch(()=>null);
|
|
679
|
-
if (response.status === 403) {
|
|
680
|
-
throw new Error('You do not have permission to reorder these rows');
|
|
681
|
-
}
|
|
682
|
-
if (!response.ok) {
|
|
683
|
-
throw new Error('Failed to reorder. This can happen if you reorder several rows too quickly. Please try again.');
|
|
684
|
-
}
|
|
685
|
-
if (result?.message === 'initial migration') {
|
|
686
|
-
throw new Error('You have enabled "orderable" on a collection with existing documents and this is the first time you have sorted documents. We have run an automatic migration to add an initial order to the documents. Please refresh the page and try again.');
|
|
687
|
-
}
|
|
688
|
-
return result?.orderValues?.[0];
|
|
689
|
-
}, [
|
|
690
|
-
config.routes.api,
|
|
691
|
-
i18n.language,
|
|
692
|
-
locale?.code,
|
|
693
|
-
orderableFieldName,
|
|
694
|
-
props.collectionSlug
|
|
695
|
-
]);
|
|
696
|
-
const handleManualOrderMoveEnd = React.useCallback(async (args)=>{
|
|
697
|
-
const { activeDoc, dropTarget, rowID } = args;
|
|
698
|
-
if (!orderableFieldName) {
|
|
699
|
-
return;
|
|
700
|
-
}
|
|
701
|
-
const targetDoc = getDropTargetParentDoc({
|
|
702
|
-
docsByID: allDocsByID,
|
|
703
|
-
dropTarget
|
|
704
|
-
});
|
|
705
|
-
const dropValidation = getManualOrderDropValidation({
|
|
706
|
-
activeDoc,
|
|
707
|
-
targetDoc: targetDoc ?? undefined
|
|
708
|
-
});
|
|
709
|
-
if (!dropValidation.isValid) {
|
|
710
|
-
if (!shouldSilenceMoveMessage(dropValidation.message)) {
|
|
711
|
-
toast.error(dropValidation.message ?? 'Could not move document.');
|
|
712
|
-
}
|
|
713
|
-
return;
|
|
714
|
-
}
|
|
715
|
-
const placement = getOrderPlacementFromDropTarget({
|
|
716
|
-
activeDoc,
|
|
717
|
-
docs: paginatedDocs,
|
|
718
|
-
docsByID: allDocsByID,
|
|
719
|
-
dropTarget
|
|
720
|
-
});
|
|
721
|
-
if (!placement) {
|
|
722
|
-
return;
|
|
723
|
-
}
|
|
724
|
-
const currentPlacement = getCurrentOrderPlacement({
|
|
725
|
-
activeDoc,
|
|
726
|
-
docs: paginatedDocs
|
|
727
|
-
});
|
|
728
|
-
const parentChanged = activeDoc.__pageTreeParentID !== placement.parentID;
|
|
729
|
-
const orderChanged = orderPlacementHasChanged(currentPlacement, placement);
|
|
730
|
-
const reorderTarget = orderChanged ? getReorderTargetFromPlacement({
|
|
731
|
-
currentSort,
|
|
732
|
-
docsByID: allDocsByID,
|
|
733
|
-
orderableFieldName,
|
|
734
|
-
placement
|
|
735
|
-
}) : null;
|
|
736
|
-
if (!parentChanged && !reorderTarget) {
|
|
737
|
-
return;
|
|
738
|
-
}
|
|
739
|
-
const movedDocID = getPayloadDocID(activeDoc);
|
|
740
|
-
if (movedDocID === undefined) {
|
|
741
|
-
return;
|
|
742
|
-
}
|
|
743
|
-
const parentDoc = placement.parentID ? allDocsByID.get(placement.parentID) : undefined;
|
|
744
|
-
const nextParentValue = placement.parentID === null ? null : parentDoc ? getPayloadDocID(parentDoc) ?? placement.parentID : placement.parentID;
|
|
745
|
-
let parentMoveSucceeded = false;
|
|
746
|
-
setPendingMoveRowID(rowID);
|
|
747
|
-
try {
|
|
748
|
-
if (parentChanged) {
|
|
749
|
-
await moveDocument({
|
|
750
|
-
parentID: placement.parentID,
|
|
751
|
-
rowID
|
|
752
|
-
});
|
|
753
|
-
parentMoveSucceeded = true;
|
|
754
|
-
}
|
|
755
|
-
const nextOrderValue = reorderTarget ? await reorderDocument({
|
|
756
|
-
movedDocID,
|
|
757
|
-
newKeyWillBe: reorderTarget.newKeyWillBe,
|
|
758
|
-
targetDoc: reorderTarget.targetDoc
|
|
759
|
-
}) : undefined;
|
|
760
|
-
if (parentChanged || typeof nextOrderValue === 'string') {
|
|
761
|
-
setLocalSourceDocs((currentDocs)=>currentDocs.map((doc)=>String(doc.id ?? '') === String(movedDocID) ? {
|
|
762
|
-
...doc,
|
|
763
|
-
...parentChanged ? {
|
|
764
|
-
[parentFieldSlug]: nextParentValue
|
|
765
|
-
} : {},
|
|
766
|
-
...typeof nextOrderValue === 'string' ? {
|
|
767
|
-
[orderableFieldName]: nextOrderValue
|
|
768
|
-
} : {}
|
|
769
|
-
} : doc));
|
|
770
|
-
}
|
|
771
|
-
if (parentChanged) {
|
|
772
|
-
toast.success(`Moved "${getDocDisplayLabel(activeDoc)}".`);
|
|
773
|
-
}
|
|
774
|
-
React.startTransition(()=>{
|
|
775
|
-
router.refresh();
|
|
776
|
-
});
|
|
777
|
-
} catch (error) {
|
|
778
|
-
const message = error instanceof Error && error.message ? error.message : 'Could not move document.';
|
|
779
|
-
toast.error(parentMoveSucceeded ? `Moved "${getDocDisplayLabel(activeDoc)}", but could not update its manual order. ${message}` : message);
|
|
780
|
-
if (parentMoveSucceeded) {
|
|
781
|
-
React.startTransition(()=>{
|
|
782
|
-
router.refresh();
|
|
783
|
-
});
|
|
784
|
-
}
|
|
785
|
-
} finally{
|
|
786
|
-
setPendingMoveRowID(null);
|
|
787
|
-
}
|
|
788
|
-
}, [
|
|
789
|
-
allDocsByID,
|
|
790
|
-
currentSort,
|
|
791
|
-
moveDocument,
|
|
792
|
-
orderableFieldName,
|
|
793
|
-
paginatedDocs,
|
|
794
|
-
parentFieldSlug,
|
|
795
|
-
reorderDocument,
|
|
796
|
-
router
|
|
797
|
-
]);
|
|
798
536
|
const handleDragCancel = React.useCallback(()=>{
|
|
799
537
|
setActiveDragRowID(null);
|
|
800
538
|
setActiveDropTarget(null);
|
|
@@ -840,14 +578,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
840
578
|
if (!rowID || !activeDoc || !overData) {
|
|
841
579
|
return;
|
|
842
580
|
}
|
|
843
|
-
if (manualOrderIsActive && orderableFieldName) {
|
|
844
|
-
await handleManualOrderMoveEnd({
|
|
845
|
-
activeDoc,
|
|
846
|
-
dropTarget: overData,
|
|
847
|
-
rowID
|
|
848
|
-
});
|
|
849
|
-
return;
|
|
850
|
-
}
|
|
851
581
|
const targetDoc = getDropTargetParentDoc({
|
|
852
582
|
docsByID: allDocsByID,
|
|
853
583
|
dropTarget: overData
|
|
@@ -883,10 +613,7 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
883
613
|
}
|
|
884
614
|
}, [
|
|
885
615
|
allDocsByID,
|
|
886
|
-
handleManualOrderMoveEnd,
|
|
887
|
-
manualOrderIsActive,
|
|
888
616
|
moveDocument,
|
|
889
|
-
orderableFieldName,
|
|
890
617
|
paginatedDocsByID,
|
|
891
618
|
router
|
|
892
619
|
]);
|
|
@@ -906,7 +633,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
906
633
|
/*#__PURE__*/ _jsx(HierarchyTable, {
|
|
907
634
|
activeDragRowID: activeDragRowID,
|
|
908
635
|
allDocsByID: allDocsByID,
|
|
909
|
-
allowSameParentDrops: manualOrderIsActive,
|
|
910
636
|
columns: tableColumns,
|
|
911
637
|
data: paginatedDocs,
|
|
912
638
|
isMovePending: isMovePending,
|
|
@@ -932,7 +658,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
932
658
|
handleDragStart,
|
|
933
659
|
isMovePending,
|
|
934
660
|
allDocsByID,
|
|
935
|
-
manualOrderIsActive,
|
|
936
661
|
paginatedDocs,
|
|
937
662
|
sensors,
|
|
938
663
|
tableColumns,
|
|
@@ -946,7 +671,6 @@ export default function PageTreeListViewClient({ allDocs, badgeConfig, canMoveDo
|
|
|
946
671
|
collectionSlug: props.collectionSlug,
|
|
947
672
|
data: paginatedData,
|
|
948
673
|
modifySearchParams: true,
|
|
949
|
-
orderableFieldName: orderableFieldName,
|
|
950
674
|
query: {
|
|
951
675
|
...query,
|
|
952
676
|
limit: currentLimit,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeListView.client.tsx"],"sourcesContent":["'use client'\r\n\r\nimport type { Column, ListQuery, ListViewClientProps, PaginatedDocs } from 'payload'\r\n\r\nimport {\r\n DndContext,\r\n type DragEndEvent,\r\n type DragOverEvent,\r\n DragOverlay,\r\n type DragStartEvent,\r\n PointerSensor,\r\n useDroppable,\r\n useSensor,\r\n useSensors,\r\n} from '@dnd-kit/core'\r\nimport {\r\n DefaultListView,\r\n ListQueryProvider,\r\n SelectAll,\r\n SelectRow,\r\n SortHeader,\r\n toast,\r\n useConfig,\r\n useLocale,\r\n useTranslation,\r\n} from '@payloadcms/ui'\r\nimport { useRouter, useSearchParams } from 'next/navigation'\r\nimport React from 'react'\r\n\r\nimport {\n pageTreeMoveRequestHeader,\n pageTreeMoveRequestHeaderValue,\n type NestedDocsPageTreePluginResolvedBadgeConfig,\n type PageTreeSourceDoc,\n} from '../types.js'\n\r\nimport {\r\n buildInsertDropTargets,\r\n getDropTargetParentDoc,\r\n getOrderPlacementFromDropTarget,\r\n type PageTreeDropTarget,\r\n type PageTreeOrderPlacement,\r\n} from '../utilities/dropTargets.js'\r\nimport {\r\n CANCEL_DRAG_MESSAGE,\r\n getDropValidation,\r\n type PageTreeDropValidation,\r\n} from '../utilities/moveValidation.js'\r\nimport {\r\n buildDocSlugPath,\r\n buildPageTreeDocs,\r\n buildProspectiveDocSlugPath,\r\n getDocDisplayLabel,\r\n getVisibleTreeDocs,\r\n type PageTreeDoc,\r\n} from '../utilities/pageTree.js'\r\nimport { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js'\r\nimport {\r\n getPageTreeBadgeColor,\r\n getPageTreeBadgeLabel,\r\n getPageTreeDisplayStatus,\r\n type PageTreeDisplayStatus,\r\n} from '../utilities/status.js'\r\nimport { PageTreeProvider } from './PageTreeContext.js'\r\nimport styles from './PageTreeListView.module.css'\r\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\r\n\r\ntype PageTreeListViewClientOwnProps = {\r\n allDocs: PageTreeDoc[]\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n canMoveDocs: boolean\r\n columnState: Column[]\r\n homeIndicatorEnabled: boolean\r\n orderableFieldName?: string\r\n parentFieldSlug: string\r\n query: ListQuery\r\n sourceDocs: PageTreeSourceDoc[]\r\n useAsTitle: string\r\n}\r\n\r\ntype PageTreeListViewClientProps = Omit<ListViewClientProps, 'columnState' | 'Table'> &\r\n PageTreeListViewClientOwnProps\r\n\r\ntype SelectableRowData = React.ComponentProps<typeof SelectRow>['rowData']\r\ntype PageTreeDragData = {\r\n dragType?: 'move'\r\n rowID?: string\r\n}\r\ntype ReorderDirection = 'greater' | 'less'\r\n\r\nconst MANUAL_ORDER_COLUMN_ACCESSOR = '_dragHandle'\r\nconst SILENT_MOVE_MESSAGES = new Set([CANCEL_DRAG_MESSAGE])\r\n\r\nfunction getRowDropID(rowID: string): string {\r\n return `page-drop:${rowID}`\r\n}\r\n\r\nfunction getPageTreeDragData(value: unknown): PageTreeDragData {\r\n return value && typeof value === 'object' ? (value as PageTreeDragData) : {}\r\n}\r\n\r\nfunction getPayloadDocID(doc: PageTreeDoc): number | string | undefined {\r\n return typeof doc.id === 'number' || typeof doc.id === 'string' ? doc.id : undefined\r\n}\r\n\r\nfunction getManualOrderDropValidation(args: {\r\n activeDoc: PageTreeDoc\r\n targetDoc?: PageTreeDoc\r\n}): PageTreeDropValidation {\r\n const { activeDoc, targetDoc } = args\r\n\r\n if (!targetDoc) {\r\n return {\r\n isValid: true,\r\n parentID: null,\r\n }\r\n }\r\n\r\n if (targetDoc.__pageTreeID === activeDoc.__pageTreeID) {\r\n return {\r\n isValid: false,\r\n message: CANCEL_DRAG_MESSAGE,\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n }\r\n\r\n if (targetDoc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID)) {\r\n return {\r\n isValid: false,\r\n message: 'A document cannot be moved under one of its descendants.',\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n }\r\n\r\n return {\r\n isValid: true,\r\n parentID: targetDoc.__pageTreeID,\r\n }\r\n}\r\n\r\nfunction getDropValidationForMode(args: {\r\n activeDoc: PageTreeDoc\r\n allowSameParent: boolean\r\n targetDoc?: PageTreeDoc\r\n}): PageTreeDropValidation {\r\n const { activeDoc, allowSameParent, targetDoc } = args\r\n\r\n if (allowSameParent) {\r\n return getManualOrderDropValidation({\r\n activeDoc,\r\n targetDoc,\r\n })\r\n }\r\n\r\n return getDropValidation({\r\n activeDoc,\r\n targetDoc,\r\n })\r\n}\r\n\r\nfunction getCurrentOrderPlacement(args: {\r\n activeDoc: PageTreeDoc\r\n docs: PageTreeDoc[]\r\n}): PageTreeOrderPlacement {\r\n const { activeDoc, docs } = args\r\n const activeIndex = docs.findIndex((doc) => doc.__pageTreeID === activeDoc.__pageTreeID)\r\n const movingSubtreeIDs = new Set(\r\n docs\r\n .filter(\r\n (doc) =>\r\n doc.__pageTreeID === activeDoc.__pageTreeID ||\r\n doc.__pageTreeAncestorIDs.includes(activeDoc.__pageTreeID),\r\n )\r\n .map((doc) => doc.__pageTreeID),\r\n )\r\n const siblingIsNotMoving = (doc: PageTreeDoc) =>\r\n doc.__pageTreeParentID === activeDoc.__pageTreeParentID &&\r\n !movingSubtreeIDs.has(doc.__pageTreeID)\r\n\r\n if (activeIndex < 0) {\r\n return {\r\n nextSiblingID: null,\r\n parentID: activeDoc.__pageTreeParentID,\r\n previousSiblingID: null,\r\n }\r\n }\r\n\r\n return {\r\n nextSiblingID: docs.slice(activeIndex + 1).find(siblingIsNotMoving)?.__pageTreeID ?? null,\r\n parentID: activeDoc.__pageTreeParentID,\r\n previousSiblingID:\r\n docs.slice(0, activeIndex).filter(siblingIsNotMoving).at(-1)?.__pageTreeID ?? null,\r\n }\r\n}\r\n\r\nfunction orderPlacementHasChanged(\r\n currentPlacement: PageTreeOrderPlacement,\r\n nextPlacement: PageTreeOrderPlacement,\r\n): boolean {\r\n return (\r\n currentPlacement.parentID !== nextPlacement.parentID ||\r\n currentPlacement.previousSiblingID !== nextPlacement.previousSiblingID ||\r\n currentPlacement.nextSiblingID !== nextPlacement.nextSiblingID\r\n )\r\n}\r\n\r\nfunction getReorderTargetFromPlacement(args: {\r\n currentSort?: string\r\n docsByID: ReadonlyMap<string, PageTreeDoc>\r\n orderableFieldName: string\r\n placement: PageTreeOrderPlacement\r\n}): {\r\n newKeyWillBe: ReorderDirection\r\n targetDoc: PageTreeDoc\r\n} | null {\r\n const { currentSort, docsByID, orderableFieldName, placement } = args\r\n const targetDocID = placement.previousSiblingID ?? placement.nextSiblingID\r\n\r\n if (!targetDocID) {\r\n return null\r\n }\r\n\r\n const targetDoc = docsByID.get(targetDocID)\r\n\r\n if (!targetDoc) {\r\n return null\r\n }\r\n\r\n return {\r\n newKeyWillBe:\r\n (placement.previousSiblingID !== null && currentSort === orderableFieldName) ||\r\n (placement.previousSiblingID === null && currentSort === `-${orderableFieldName}`)\r\n ? 'greater'\r\n : 'less',\r\n targetDoc,\r\n }\r\n}\r\n\r\nfunction buildPaginatedData(\r\n docs: PageTreeDoc[],\r\n limit: number,\r\n requestedPage: number,\r\n): PaginatedDocs {\r\n const totalDocs = docs.length\r\n const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1\r\n const page = Math.min(Math.max(requestedPage, 1), totalPages)\r\n const startIndex = (page - 1) * limit\r\n const pageDocs = docs.slice(startIndex, startIndex + limit)\r\n\r\n return {\r\n docs: pageDocs,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n limit,\r\n nextPage: page < totalPages ? page + 1 : null,\r\n page,\r\n pagingCounter: totalDocs === 0 ? 0 : startIndex + 1,\r\n prevPage: page > 1 ? page - 1 : null,\r\n totalDocs,\r\n totalPages,\r\n }\r\n}\r\n\r\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\r\n if (Array.isArray(value)) {\r\n const sortValues = value.filter((entry) => typeof entry === 'string' && entry.length > 0)\r\n return sortValues.length > 0 ? sortValues.join(',') : undefined\r\n }\r\n\r\n return typeof value === 'string' && value.length > 0 ? value : undefined\r\n}\r\n\r\nfunction normalizePositiveInt(value: null | string, fallback: number): number {\r\n if (typeof value !== 'string') {\r\n return fallback\r\n }\r\n\r\n const parsedValue = Number.parseInt(value, 10)\r\n return Number.isNaN(parsedValue) || parsedValue <= 0 ? fallback : parsedValue\r\n}\r\n\r\nfunction normalizePageTreeColumnState(columnState: Column[], useAsTitle: string): Column[] {\r\n return columnState\r\n .filter((column) => column.accessor !== MANUAL_ORDER_COLUMN_ACCESSOR)\r\n .map((column) =>\r\n column.accessor === useAsTitle\r\n ? {\r\n ...column,\r\n active: true,\r\n }\r\n : column,\r\n )\r\n}\r\n\r\nfunction sliceColumnState(\r\n columnState: Column[],\r\n docs: PageTreeDoc[],\r\n renderedCellIndexByDocID: ReadonlyMap<string, number>,\r\n): Column[] {\r\n return columnState.map((column) => ({\r\n ...column,\r\n renderedCells: docs.map((doc) => {\r\n const renderedCellIndex =\r\n renderedCellIndexByDocID.get(doc.__pageTreeID) ?? doc.__pageTreeOrderIndex\r\n\r\n return column.renderedCells?.[renderedCellIndex] ?? null\r\n }),\r\n }))\r\n}\r\n\r\nfunction getSelectableRowData(doc: PageTreeDoc): SelectableRowData {\r\n const record = doc as Record<string, unknown>\r\n\r\n return {\r\n id: String(doc.id ?? doc.__pageTreeID),\r\n _isLocked: Boolean(record._isLocked),\r\n _userEditing: record._userEditing as SelectableRowData['_userEditing'],\r\n }\r\n}\r\n\r\nfunction shouldSilenceMoveMessage(message?: string): boolean {\r\n return typeof message === 'string' && SILENT_MOVE_MESSAGES.has(message)\r\n}\r\n\r\nfunction getStatusClassName(\r\n status: PageTreeDisplayStatus,\r\n): 'changed' | 'draft' | 'published' | 'unknown' {\r\n if (status === 'changed' || status === 'draft' || status === 'published') {\r\n return status\r\n }\r\n\r\n return 'unknown'\r\n}\r\n\r\nfunction renderStatusBadge(args: {\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n doc: PageTreeDoc\r\n index: number\r\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\r\n}): React.ReactNode {\r\n const { badgeConfig, doc, index, t } = args\r\n const status = getPageTreeDisplayStatus(doc)\r\n const customColor = getPageTreeBadgeColor({\r\n badgeColors: badgeConfig.colors,\r\n status,\r\n })\r\n const statusClass = getStatusClassName(status)\r\n const style = customColor\r\n ? ({ '--page-tree-badge-base': customColor } as React.CSSProperties)\r\n : undefined\r\n\r\n return (\r\n <span\r\n className={[\r\n 'pages-hierarchy-status-badge',\r\n `pages-hierarchy-status-badge--${statusClass}`,\r\n ].join(' ')}\r\n data-custom-color={customColor ? 'true' : undefined}\r\n key={doc.__pageTreeID ?? index}\r\n style={style}\r\n >\r\n {getPageTreeBadgeLabel({\r\n badgeLabels: badgeConfig.labels,\r\n status,\r\n t,\r\n })}\r\n </span>\r\n )\r\n}\r\n\r\nfunction createManualOrderColumn(docs: PageTreeDoc[]): Column {\r\n return {\r\n accessor: MANUAL_ORDER_COLUMN_ACCESSOR,\r\n active: true,\r\n field: { hidden: true } as Column['field'],\r\n Heading: <SortHeader />,\r\n renderedCells: docs.map(() => null),\r\n }\r\n}\r\n\r\nfunction insertManualOrderColumn(columns: Column[], orderColumn: Column): Column[] {\r\n const selectColumnIndex = columns.findIndex((column) => column.accessor === '_select')\r\n const insertIndex = selectColumnIndex >= 0 ? selectColumnIndex + 1 : 0\r\n\r\n return [\r\n ...columns.slice(0, insertIndex),\r\n orderColumn,\r\n ...columns.slice(insertIndex),\r\n ]\r\n}\r\n\r\nfunction buildTableColumns(args: {\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n columnState: Column[]\r\n docs: PageTreeDoc[]\r\n enableRowSelections?: boolean\r\n homeIndicatorEnabled: boolean\r\n orderableFieldName?: string\r\n parentFieldSlug: string\r\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\r\n useAsTitle: string\r\n}): Column[] {\r\n const {\r\n badgeConfig,\r\n columnState,\r\n docs,\r\n enableRowSelections,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n t,\r\n useAsTitle,\r\n } = args\r\n const columnsToUse = columnState.map((column) => {\r\n if (column.accessor === useAsTitle) {\r\n return {\r\n ...column,\r\n active: true,\r\n renderedCells: docs.map((doc, index) => (\r\n <PageTreeTitleCell\r\n doc={doc}\r\n homeIndicatorEnabled={homeIndicatorEnabled}\r\n key={doc.__pageTreeID ?? index}\r\n >\r\n {column.renderedCells?.[index] ?? getDocDisplayLabel(doc)}\r\n </PageTreeTitleCell>\r\n )),\r\n }\r\n }\r\n\r\n if (column.accessor === '_status') {\r\n return {\r\n ...column,\r\n renderedCells: docs.map((doc, index) =>\r\n renderStatusBadge({\r\n badgeConfig,\r\n doc,\r\n index,\r\n t,\r\n }),\r\n ),\r\n }\r\n }\r\n\r\n if (column.accessor === parentFieldSlug) {\r\n return {\r\n ...column,\r\n renderedCells: docs.map((doc, index) =>\r\n doc.__pageTreeParentID !== null ? (\r\n column.renderedCells?.[index] ?? null\r\n ) : (\r\n <span className=\"pages-hierarchy-empty-cell\" key={doc.__pageTreeID ?? index}>\r\n -\r\n </span>\r\n ),\r\n ),\r\n }\r\n }\r\n\r\n return column\r\n })\r\n\r\n if (enableRowSelections) {\r\n columnsToUse.unshift({\r\n accessor: '_select',\r\n active: true,\r\n field: { hidden: true } as Column['field'],\r\n Heading: <SelectAll />,\r\n renderedCells: docs.map((doc, index) => (\r\n <SelectRow key={doc.__pageTreeID ?? index} rowData={getSelectableRowData(doc)} />\r\n )),\r\n })\r\n }\r\n\r\n if (\r\n orderableFieldName &&\r\n !columnsToUse.some((column) => column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR)\r\n ) {\r\n return insertManualOrderColumn(columnsToUse, createManualOrderColumn(docs))\r\n }\r\n\r\n return columnsToUse\r\n}\r\n\r\nfunction HierarchyInsertRow({\r\n activeColumnsCount,\r\n activeDragRowID,\r\n dropTarget,\r\n dropValidation,\r\n isMovePending,\r\n}: {\r\n activeColumnsCount: number\r\n activeDragRowID: null | string\r\n dropTarget: Extract<PageTreeDropTarget, { dropType: 'insert' }>\r\n dropValidation?: PageTreeDropValidation\r\n isMovePending: boolean\r\n}) {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: dropTarget.dropID,\r\n data: dropTarget,\r\n disabled: isMovePending,\r\n })\r\n const hasActiveDrag = Boolean(activeDragRowID)\r\n\r\n return (\r\n <tr\r\n className=\"pages-hierarchy-insert-row\"\r\n data-drag-over={isOver ? 'true' : 'false'}\r\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\r\n data-page-tree-insert=\"true\"\r\n >\r\n <td colSpan={activeColumnsCount}>\r\n <div\r\n className=\"pages-hierarchy-insert-row__target\"\r\n data-insert-depth={dropTarget.depth}\r\n ref={setNodeRef}\r\n />\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nfunction HierarchyTableRow({\r\n activeColumns,\r\n activeDragRowID,\r\n doc,\r\n dropValidation,\r\n insertAfterDropID,\r\n insertBeforeDropID,\r\n isMovePending,\r\n rowIndex,\r\n titleCellAccessor,\r\n}: {\r\n activeColumns: Column[]\r\n activeDragRowID: null | string\r\n doc: PageTreeDoc\r\n dropValidation?: PageTreeDropValidation\r\n insertAfterDropID: string\r\n insertBeforeDropID: string\r\n isMovePending: boolean\r\n rowIndex: number\r\n titleCellAccessor: string\r\n}) {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: getRowDropID(doc.__pageTreeID),\r\n data: {\r\n dropType: 'row',\r\n insertAfterDropID,\r\n insertBeforeDropID,\r\n rowID: doc.__pageTreeID,\r\n } satisfies Extract<PageTreeDropTarget, { dropType: 'row' }>,\r\n disabled: isMovePending,\r\n })\r\n const hasActiveDrag = Boolean(activeDragRowID)\r\n const isActiveDragRow = activeDragRowID === doc.__pageTreeID\r\n\r\n return (\r\n <tr\r\n className={`row-${rowIndex + 1}`}\r\n data-drag-over={isOver ? 'true' : 'false'}\r\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\r\n data-id={doc.id}\r\n data-is-drag-source={isActiveDragRow ? 'true' : 'false'}\r\n data-page-tree-row=\"true\"\r\n ref={setNodeRef}\r\n >\r\n {activeColumns.map((column, columnIndex) => {\r\n const { accessor } = column\r\n\r\n return (\r\n <td\r\n className={`cell-${accessor.replace(/\\./g, '__')}`}\r\n data-page-tree-manual-order-cell={\r\n accessor === MANUAL_ORDER_COLUMN_ACCESSOR ? 'true' : undefined\r\n }\r\n data-page-tree-title-cell={accessor === titleCellAccessor ? 'true' : undefined}\r\n key={columnIndex}\r\n >\r\n {column.renderedCells?.[rowIndex] ?? null}\r\n </td>\r\n )\r\n })}\r\n </tr>\r\n )\r\n}\r\n\r\nfunction HierarchyTable({\r\n activeDragRowID,\r\n allDocsByID,\r\n allowSameParentDrops,\r\n columns,\r\n data,\r\n isMovePending,\r\n titleCellAccessor,\r\n}: {\r\n activeDragRowID: null | string\r\n allDocsByID: ReadonlyMap<string, PageTreeDoc>\r\n allowSameParentDrops: boolean\r\n columns: Column[]\r\n data: PageTreeDoc[]\r\n isMovePending: boolean\r\n titleCellAccessor: string\r\n}) {\r\n const activeColumns = React.useMemo(\r\n () => columns.filter((column) => column?.active),\r\n [columns],\r\n )\r\n const hasManualOrderColumn = React.useMemo(\r\n () => activeColumns.some((column) => column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR),\r\n [activeColumns],\r\n )\r\n const insertDropTargets = React.useMemo(() => buildInsertDropTargets(data), [data])\r\n const activeDoc = activeDragRowID ? allDocsByID.get(activeDragRowID) ?? null : null\r\n const rowDropValidationByID = React.useMemo(() => {\r\n if (!activeDoc) {\r\n return new Map<string, PageTreeDropValidation>()\r\n }\r\n\r\n return new Map(\r\n data.map((doc) => [\r\n doc.__pageTreeID,\r\n getDropValidationForMode({\r\n activeDoc,\r\n allowSameParent: allowSameParentDrops,\r\n targetDoc: doc,\r\n }),\r\n ]),\r\n )\r\n }, [activeDoc, allowSameParentDrops, data])\r\n const insertDropValidationByID = React.useMemo(() => {\r\n if (!activeDoc) {\r\n return new Map<string, PageTreeDropValidation>()\r\n }\r\n\r\n return new Map(\r\n insertDropTargets.map((dropTarget) => [\r\n dropTarget.dropID,\r\n getDropValidationForMode({\r\n activeDoc,\r\n allowSameParent: allowSameParentDrops,\r\n targetDoc:\r\n dropTarget.parentID === null\r\n ? undefined\r\n : allDocsByID.get(dropTarget.parentID) ?? undefined,\r\n }),\r\n ]),\r\n )\r\n }, [activeDoc, allowSameParentDrops, allDocsByID, insertDropTargets])\r\n\r\n if (activeColumns.length === 0) {\r\n return <div>No columns selected</div>\r\n }\r\n\r\n return (\r\n <div\r\n className={[\r\n 'table-wrap pages-hierarchy-table',\r\n activeDoc ? 'pages-hierarchy-table--dragging' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n data-page-tree-orderable={hasManualOrderColumn ? 'true' : undefined}\r\n >\r\n <div className=\"table table--appearance-default\">\r\n <table cellPadding=\"0\" cellSpacing=\"0\">\r\n <thead>\r\n <tr>\r\n {activeColumns.map((column, index) => (\r\n <th\r\n data-page-tree-manual-order-cell={\r\n column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR ? 'true' : undefined\r\n }\r\n data-page-tree-title-cell={\r\n column.accessor === titleCellAccessor ? 'true' : undefined\r\n }\r\n id={`heading-${column.accessor.replace(/\\./g, '__')}`}\r\n key={index}\r\n >\r\n {column.Heading}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {insertDropTargets[0] ? (\r\n <HierarchyInsertRow\r\n activeColumnsCount={activeColumns.length}\r\n activeDragRowID={activeDragRowID}\r\n dropTarget={insertDropTargets[0]}\r\n dropValidation={insertDropValidationByID.get(insertDropTargets[0].dropID)}\r\n isMovePending={isMovePending}\r\n key={insertDropTargets[0].dropID}\r\n />\r\n ) : null}\r\n {data.map((doc, rowIndex) => (\r\n <React.Fragment key={doc.__pageTreeID}>\r\n <HierarchyTableRow\r\n activeColumns={activeColumns}\r\n activeDragRowID={activeDragRowID}\r\n doc={doc}\r\n dropValidation={rowDropValidationByID.get(doc.__pageTreeID)}\r\n insertAfterDropID={insertDropTargets[rowIndex + 1].dropID}\r\n insertBeforeDropID={insertDropTargets[rowIndex].dropID}\r\n isMovePending={isMovePending}\r\n rowIndex={rowIndex}\r\n titleCellAccessor={titleCellAccessor}\r\n />\r\n {insertDropTargets[rowIndex + 1] ? (\r\n <HierarchyInsertRow\r\n activeColumnsCount={activeColumns.length}\r\n activeDragRowID={activeDragRowID}\r\n dropTarget={insertDropTargets[rowIndex + 1]}\r\n dropValidation={insertDropValidationByID.get(\r\n insertDropTargets[rowIndex + 1].dropID,\r\n )}\r\n isMovePending={isMovePending}\r\n key={insertDropTargets[rowIndex + 1].dropID}\r\n />\r\n ) : null}\r\n </React.Fragment>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default function PageTreeListViewClient({\r\n allDocs,\r\n badgeConfig,\r\n canMoveDocs,\r\n columnState,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n query,\r\n sourceDocs,\r\n useAsTitle,\r\n ...props\r\n}: PageTreeListViewClientProps) {\r\n const router = useRouter()\r\n const searchParams = useSearchParams()\r\n const { config } = useConfig()\r\n const locale = useLocale()\r\n const { i18n } = useTranslation()\r\n const [activeDragRowID, setActiveDragRowID] = React.useState<null | string>(null)\r\n const [activeDropTarget, setActiveDropTarget] = React.useState<null | PageTreeDropTarget>(null)\r\n const [collapsedIDs, setCollapsedIDs] = React.useState<Set<string>>(() => new Set())\r\n const [localSourceDocs, setLocalSourceDocs] = React.useState(sourceDocs)\r\n const [pendingMoveRowID, setPendingMoveRowID] = React.useState<null | string>(null)\r\n\r\n React.useEffect(() => {\r\n setLocalSourceDocs(sourceDocs)\r\n }, [sourceDocs])\r\n\r\n const toggleRow = React.useCallback((rowID: string) => {\r\n setCollapsedIDs((currentState) => {\r\n const nextState = new Set(currentState)\r\n\r\n if (nextState.has(rowID)) {\r\n nextState.delete(rowID)\r\n } else {\r\n nextState.add(rowID)\r\n }\r\n\r\n return nextState\r\n })\r\n }, [])\r\n const currentSort = React.useMemo(() => {\r\n const searchParamSort = searchParams.getAll('sort')\r\n\r\n if (searchParamSort.length > 0) {\r\n return normalizeSort(searchParamSort)\r\n }\r\n\r\n return normalizeSort(query.sort as string | string[] | undefined)\r\n }, [query.sort, searchParams])\r\n const manualOrderIsActive = Boolean(\r\n orderableFieldName &&\r\n (currentSort === orderableFieldName || currentSort === `-${orderableFieldName}`),\r\n )\r\n const currentLimit = React.useMemo(\r\n () =>\r\n normalizePositiveInt(\r\n searchParams.get('limit'),\r\n typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10,\r\n ),\r\n [query.limit, searchParams],\r\n )\r\n const currentRequestedPage = React.useMemo(\r\n () =>\r\n normalizePositiveInt(\r\n searchParams.get('page'),\r\n typeof query.page === 'number' && query.page > 0 ? query.page : 1,\r\n ),\r\n [query.page, searchParams],\r\n )\r\n const liveAllDocs = React.useMemo(\r\n () =>\r\n buildPageTreeDocs(localSourceDocs, {\r\n parentFieldSlug,\r\n sort: currentSort,\r\n }),\r\n [currentSort, localSourceDocs, parentFieldSlug],\r\n )\r\n const collapseResetKey = React.useMemo(\r\n () => JSON.stringify([props.collectionSlug, props.viewType, searchParams.toString()]),\r\n [props.collectionSlug, props.viewType, searchParams],\r\n )\r\n const hierarchyValue = React.useMemo(\r\n () => ({\r\n activeDragRowID,\r\n canMoveDocs,\r\n collapsedIDs,\r\n pendingMoveRowID,\r\n toggleRow,\r\n }),\r\n [activeDragRowID, canMoveDocs, collapsedIDs, pendingMoveRowID, toggleRow],\r\n )\r\n\r\n React.useEffect(() => {\r\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n setCollapsedIDs(new Set())\r\n }, [collapseResetKey])\r\n\r\n const visibleDocs = React.useMemo(\r\n () => getVisibleTreeDocs(liveAllDocs, collapsedIDs),\r\n [liveAllDocs, collapsedIDs],\r\n )\r\n const paginatedData = React.useMemo(\r\n () => buildPaginatedData(visibleDocs, currentLimit, currentRequestedPage),\r\n [currentLimit, currentRequestedPage, visibleDocs],\r\n )\r\n const paginatedDocs = paginatedData.docs as PageTreeDoc[]\r\n const allDocsByID = React.useMemo(\r\n () => new Map(liveAllDocs.map((doc) => [doc.__pageTreeID, doc])),\r\n [liveAllDocs],\r\n )\r\n const paginatedDocsByID = React.useMemo(\r\n () => new Map(paginatedDocs.map((doc) => [doc.__pageTreeID, doc])),\r\n [paginatedDocs],\r\n )\r\n const renderedCellIndexByDocID = React.useMemo(\r\n () => new Map(allDocs.map((doc, index) => [doc.__pageTreeID, index])),\r\n [allDocs],\r\n )\r\n const normalizedColumnState = React.useMemo(\r\n () => normalizePageTreeColumnState(columnState, useAsTitle),\r\n [columnState, useAsTitle],\r\n )\r\n const paginatedColumnState = React.useMemo(\r\n () => sliceColumnState(normalizedColumnState, paginatedDocs, renderedCellIndexByDocID),\r\n [normalizedColumnState, paginatedDocs, renderedCellIndexByDocID],\r\n )\r\n const tableColumns = React.useMemo(\r\n () =>\r\n buildTableColumns({\r\n badgeConfig,\r\n columnState: paginatedColumnState,\r\n docs: paginatedDocs,\r\n enableRowSelections: props.enableRowSelections,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n t: i18n.t,\r\n useAsTitle,\r\n }),\r\n [\r\n paginatedColumnState,\r\n paginatedDocs,\r\n badgeConfig,\r\n homeIndicatorEnabled,\r\n orderableFieldName,\r\n parentFieldSlug,\r\n props.enableRowSelections,\r\n i18n.t,\r\n useAsTitle,\r\n ],\r\n )\r\n const activeDragDoc = activeDragRowID ? paginatedDocsByID.get(activeDragRowID) ?? null : null\r\n const activeDragPreviewPath = React.useMemo(() => {\r\n if (!activeDragDoc) {\r\n return null\r\n }\r\n\r\n if (!activeDropTarget) {\r\n return buildDocSlugPath({\r\n doc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n })\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\r\n docsByID: allDocsByID,\r\n dropTarget: activeDropTarget,\r\n })\r\n const dropValidation = getDropValidationForMode({\r\n activeDoc: activeDragDoc,\r\n allowSameParent: manualOrderIsActive,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n return buildDocSlugPath({\r\n doc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n })\r\n }\r\n\r\n return buildProspectiveDocSlugPath({\r\n activeDoc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n }, [activeDragDoc, activeDropTarget, allDocsByID, manualOrderIsActive])\r\n const isMovePending = pendingMoveRowID !== null\r\n const sensors = useSensors(\r\n useSensor(PointerSensor, {\r\n activationConstraint: {\r\n distance: 4,\r\n },\r\n }),\r\n )\r\n const moveDocument = React.useCallback(\r\n async (args: { parentID: null | string; rowID: string }) => {\r\n const { parentID, rowID } = args\r\n const params = new URLSearchParams()\r\n\r\n if (locale?.code) {\r\n params.set('locale', locale.code)\r\n }\r\n\r\n const response = await fetch(\r\n `${config.routes.api}/${props.collectionSlug}/${encodeURIComponent(rowID)}/move${\r\n params.size > 0 ? `?${params.toString()}` : ''\r\n }`,\r\n {\r\n body: JSON.stringify({\r\n parentID,\r\n }),\r\n credentials: 'include',\r\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n [pageTreeMoveRequestHeader]: pageTreeMoveRequestHeaderValue,\n },\n method: 'POST',\n },\n )\r\n const result = (await response.json().catch(() => null)) as\r\n | {\r\n message?: string\r\n }\r\n | null\r\n\r\n if (!response.ok) {\r\n throw new Error(result?.message ?? 'Could not move document.')\r\n }\r\n\r\n return result\r\n },\r\n [config.routes.api, i18n.language, locale?.code, props.collectionSlug],\r\n )\r\n const reorderDocument = React.useCallback(\r\n async (args: {\r\n movedDocID: number | string\r\n newKeyWillBe: ReorderDirection\r\n targetDoc: PageTreeDoc\r\n }) => {\r\n const { movedDocID, newKeyWillBe, targetDoc } = args\r\n const targetID = getPayloadDocID(targetDoc)\r\n\r\n if (!orderableFieldName || targetID === undefined) {\r\n return undefined\r\n }\r\n\r\n const params = new URLSearchParams()\r\n\r\n if (locale?.code) {\r\n params.set('locale', locale.code)\r\n }\r\n\r\n const response = await fetch(\r\n `${config.routes.api}/reorder${params.size > 0 ? `?${params.toString()}` : ''}`,\r\n {\r\n body: JSON.stringify({\r\n collectionSlug: props.collectionSlug,\r\n docsToMove: [movedDocID],\r\n newKeyWillBe,\r\n orderableFieldName,\r\n target: {\r\n id: targetID,\r\n key: targetDoc[orderableFieldName],\r\n },\r\n }),\r\n credentials: 'include',\r\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n [pageTreeMoveRequestHeader]: pageTreeMoveRequestHeaderValue,\n },\n method: 'POST',\n },\n )\r\n const result = (await response.json().catch(() => null)) as\r\n | {\r\n message?: string\r\n orderValues?: unknown[]\r\n }\r\n | null\r\n\r\n if (response.status === 403) {\r\n throw new Error('You do not have permission to reorder these rows')\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n 'Failed to reorder. This can happen if you reorder several rows too quickly. Please try again.',\r\n )\r\n }\r\n\r\n if (result?.message === 'initial migration') {\r\n throw new Error(\r\n 'You have enabled \"orderable\" on a collection with existing documents and this is the first time you have sorted documents. We have run an automatic migration to add an initial order to the documents. Please refresh the page and try again.',\r\n )\r\n }\r\n\r\n return result?.orderValues?.[0]\r\n },\r\n [\r\n config.routes.api,\r\n i18n.language,\r\n locale?.code,\r\n orderableFieldName,\r\n props.collectionSlug,\r\n ],\r\n )\r\n const handleManualOrderMoveEnd = React.useCallback(\r\n async (args: {\r\n activeDoc: PageTreeDoc\r\n dropTarget: PageTreeDropTarget\r\n rowID: string\r\n }) => {\r\n const { activeDoc, dropTarget, rowID } = args\r\n\r\n if (!orderableFieldName) {\r\n return\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\r\n docsByID: allDocsByID,\r\n dropTarget,\r\n })\r\n const dropValidation = getManualOrderDropValidation({\r\n activeDoc,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\r\n toast.error(dropValidation.message ?? 'Could not move document.')\r\n }\r\n\r\n return\r\n }\r\n\r\n const placement = getOrderPlacementFromDropTarget({\r\n activeDoc,\r\n docs: paginatedDocs,\r\n docsByID: allDocsByID,\r\n dropTarget,\r\n })\r\n\r\n if (!placement) {\r\n return\r\n }\r\n\r\n const currentPlacement = getCurrentOrderPlacement({\r\n activeDoc,\r\n docs: paginatedDocs,\r\n })\r\n const parentChanged = activeDoc.__pageTreeParentID !== placement.parentID\r\n const orderChanged = orderPlacementHasChanged(currentPlacement, placement)\r\n const reorderTarget = orderChanged\r\n ? getReorderTargetFromPlacement({\r\n currentSort,\r\n docsByID: allDocsByID,\r\n orderableFieldName,\r\n placement,\r\n })\r\n : null\r\n\r\n if (!parentChanged && !reorderTarget) {\r\n return\r\n }\r\n\r\n const movedDocID = getPayloadDocID(activeDoc)\r\n\r\n if (movedDocID === undefined) {\r\n return\r\n }\r\n\r\n const parentDoc = placement.parentID ? allDocsByID.get(placement.parentID) : undefined\r\n const nextParentValue =\r\n placement.parentID === null\r\n ? null\r\n : parentDoc\r\n ? getPayloadDocID(parentDoc) ?? placement.parentID\r\n : placement.parentID\r\n let parentMoveSucceeded = false\r\n\r\n setPendingMoveRowID(rowID)\r\n\r\n try {\r\n if (parentChanged) {\r\n await moveDocument({\r\n parentID: placement.parentID,\r\n rowID,\r\n })\r\n parentMoveSucceeded = true\r\n }\r\n\r\n const nextOrderValue = reorderTarget\r\n ? await reorderDocument({\r\n movedDocID,\r\n newKeyWillBe: reorderTarget.newKeyWillBe,\r\n targetDoc: reorderTarget.targetDoc,\r\n })\r\n : undefined\r\n\r\n if (parentChanged || typeof nextOrderValue === 'string') {\r\n setLocalSourceDocs((currentDocs) =>\r\n currentDocs.map((doc) =>\r\n String(doc.id ?? '') === String(movedDocID)\r\n ? {\r\n ...doc,\r\n ...(parentChanged\r\n ? {\r\n [parentFieldSlug]: nextParentValue,\r\n }\r\n : {}),\r\n ...(typeof nextOrderValue === 'string'\r\n ? {\r\n [orderableFieldName]: nextOrderValue,\r\n }\r\n : {}),\r\n }\r\n : doc,\r\n ),\r\n )\r\n }\r\n\r\n if (parentChanged) {\r\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\r\n }\r\n\r\n React.startTransition(() => {\r\n router.refresh()\r\n })\r\n } catch (error) {\r\n const message =\r\n error instanceof Error && error.message ? error.message : 'Could not move document.'\r\n\r\n toast.error(\r\n parentMoveSucceeded\r\n ? `Moved \"${getDocDisplayLabel(activeDoc)}\", but could not update its manual order. ${message}`\r\n : message,\r\n )\r\n\r\n if (parentMoveSucceeded) {\r\n React.startTransition(() => {\r\n router.refresh()\r\n })\r\n }\r\n } finally {\r\n setPendingMoveRowID(null)\r\n }\r\n },\r\n [\r\n allDocsByID,\r\n currentSort,\r\n moveDocument,\r\n orderableFieldName,\r\n paginatedDocs,\r\n parentFieldSlug,\r\n reorderDocument,\r\n router,\r\n ],\r\n )\r\n const handleDragCancel = React.useCallback(() => {\r\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n }, [])\r\n const handleDragStart = React.useCallback(\r\n (event: DragStartEvent) => {\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n\r\n if (!canMoveDocs || isMovePending) {\r\n return\r\n }\r\n\r\n const rowID = dragData.rowID\r\n\r\n if (typeof rowID === 'string' && paginatedDocsByID.has(rowID)) {\r\n setActiveDragRowID(rowID)\r\n setActiveDropTarget(null)\r\n }\r\n },\r\n [canMoveDocs, isMovePending, paginatedDocsByID],\r\n )\r\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\r\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\r\n\r\n if (!overData) {\r\n setActiveDropTarget(null)\r\n return\r\n }\r\n\r\n if (overData.dropType === 'insert') {\r\n setActiveDropTarget(overData)\r\n return\r\n }\r\n\r\n if (overData.dropType === 'row') {\r\n setActiveDropTarget(overData)\r\n return\r\n }\r\n\r\n setActiveDropTarget(null)\r\n }, [])\r\n const handleDragEnd = React.useCallback(\r\n async (event: DragEndEvent) => {\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n\r\n const rowID = dragData.rowID\r\n const activeDoc = typeof rowID === 'string' ? paginatedDocsByID.get(rowID) ?? null : null\r\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\r\n\r\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n\r\n if (!rowID || !activeDoc || !overData) {\r\n return\r\n }\r\n\r\n if (manualOrderIsActive && orderableFieldName) {\r\n await handleManualOrderMoveEnd({\r\n activeDoc,\r\n dropTarget: overData,\r\n rowID,\r\n })\r\n return\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\r\n docsByID: allDocsByID,\r\n dropTarget: overData,\r\n })\r\n const dropValidation = getDropValidation({\r\n activeDoc,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\r\n toast.error(dropValidation.message ?? 'Could not move document.')\r\n }\r\n\r\n return\r\n }\r\n\r\n setPendingMoveRowID(rowID)\r\n\r\n try {\r\n await moveDocument({\r\n parentID: dropValidation.parentID,\r\n rowID,\r\n })\r\n\r\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\r\n React.startTransition(() => {\r\n router.refresh()\r\n })\r\n } catch (error) {\r\n const message =\r\n error instanceof Error && error.message ? error.message : 'Could not move document.'\r\n\r\n if (shouldSilenceMoveMessage(message)) {\r\n return\r\n }\r\n\r\n toast.error(message)\r\n } finally {\r\n setPendingMoveRowID(null)\r\n }\r\n },\r\n [\r\n allDocsByID,\r\n handleManualOrderMoveEnd,\r\n manualOrderIsActive,\r\n moveDocument,\r\n orderableFieldName,\r\n paginatedDocsByID,\r\n router,\r\n ],\r\n )\r\n const handleDragEndSync = React.useCallback(\r\n (event: DragEndEvent) => {\r\n void handleDragEnd(event)\r\n },\r\n [handleDragEnd],\r\n )\r\n\r\n const tableNode = React.useMemo(\r\n () => (\r\n <DndContext\r\n collisionDetection={pageTreeCollisionDetectionStrategy}\r\n onDragCancel={handleDragCancel}\r\n onDragEnd={handleDragEndSync}\r\n onDragOver={handleDragOver}\r\n onDragStart={handleDragStart}\r\n sensors={sensors}\r\n >\r\n <HierarchyTable\r\n activeDragRowID={activeDragRowID}\r\n allDocsByID={allDocsByID}\r\n allowSameParentDrops={manualOrderIsActive}\r\n columns={tableColumns}\r\n data={paginatedDocs}\r\n isMovePending={isMovePending}\r\n titleCellAccessor={useAsTitle}\r\n />\r\n <DragOverlay dropAnimation={null} style={{ cursor: 'grabbing' }}>\r\n {activeDragPreviewPath ? (\r\n <div className=\"pages-hierarchy-drag-overlay\">{activeDragPreviewPath}</div>\r\n ) : null}\r\n </DragOverlay>\r\n </DndContext>\r\n ),\r\n [\r\n activeDragPreviewPath,\r\n activeDragRowID,\r\n handleDragCancel,\r\n handleDragEndSync,\r\n handleDragOver,\r\n handleDragStart,\r\n isMovePending,\r\n allDocsByID,\r\n manualOrderIsActive,\r\n paginatedDocs,\r\n sensors,\r\n tableColumns,\r\n useAsTitle,\r\n ],\r\n )\r\n\r\n return (\r\n <div className={styles.root}>\r\n <PageTreeProvider value={hierarchyValue}>\r\n <ListQueryProvider\r\n collectionSlug={props.collectionSlug}\r\n data={paginatedData}\r\n modifySearchParams\r\n orderableFieldName={orderableFieldName}\r\n query={{\r\n ...query,\r\n limit: currentLimit,\r\n page: paginatedData.page,\r\n sort: currentSort,\r\n }}\r\n >\r\n <DefaultListView {...props} columnState={paginatedColumnState} Table={tableNode} />\r\n </ListQueryProvider>\r\n </PageTreeProvider>\r\n </div>\r\n )\r\n}\r\n"],"names":["DndContext","DragOverlay","PointerSensor","useDroppable","useSensor","useSensors","DefaultListView","ListQueryProvider","SelectAll","SelectRow","SortHeader","toast","useConfig","useLocale","useTranslation","useRouter","useSearchParams","React","pageTreeMoveRequestHeader","pageTreeMoveRequestHeaderValue","buildInsertDropTargets","getDropTargetParentDoc","getOrderPlacementFromDropTarget","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","getPageTreeBadgeColor","getPageTreeBadgeLabel","getPageTreeDisplayStatus","PageTreeProvider","styles","PageTreeTitleCell","MANUAL_ORDER_COLUMN_ACCESSOR","SILENT_MOVE_MESSAGES","Set","getRowDropID","rowID","getPageTreeDragData","value","getPayloadDocID","doc","id","undefined","getManualOrderDropValidation","args","activeDoc","targetDoc","isValid","parentID","__pageTreeID","message","__pageTreeAncestorIDs","includes","getDropValidationForMode","allowSameParent","getCurrentOrderPlacement","docs","activeIndex","findIndex","movingSubtreeIDs","filter","map","siblingIsNotMoving","__pageTreeParentID","has","nextSiblingID","previousSiblingID","slice","find","at","orderPlacementHasChanged","currentPlacement","nextPlacement","getReorderTargetFromPlacement","currentSort","docsByID","orderableFieldName","placement","targetDocID","get","newKeyWillBe","buildPaginatedData","limit","requestedPage","totalDocs","length","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","entry","join","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","normalizePageTreeColumnState","columnState","useAsTitle","column","accessor","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","renderedCellIndex","__pageTreeOrderIndex","getSelectableRowData","record","String","_isLocked","Boolean","_userEditing","shouldSilenceMoveMessage","getStatusClassName","status","renderStatusBadge","badgeConfig","index","t","customColor","badgeColors","colors","statusClass","style","span","className","data-custom-color","badgeLabels","labels","createManualOrderColumn","field","hidden","Heading","insertManualOrderColumn","columns","orderColumn","selectColumnIndex","insertIndex","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","columnsToUse","unshift","rowData","some","HierarchyInsertRow","activeColumnsCount","activeDragRowID","dropTarget","dropValidation","isMovePending","isOver","setNodeRef","dropID","data","disabled","hasActiveDrag","tr","data-drag-over","data-drop-valid","data-page-tree-insert","td","colSpan","div","data-insert-depth","depth","ref","HierarchyTableRow","activeColumns","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","dropType","isActiveDragRow","data-id","data-is-drag-source","data-page-tree-row","columnIndex","replace","data-page-tree-manual-order-cell","data-page-tree-title-cell","HierarchyTable","allDocsByID","allowSameParentDrops","useMemo","hasManualOrderColumn","insertDropTargets","rowDropValidationByID","Map","insertDropValidationByID","data-page-tree-orderable","table","cellPadding","cellSpacing","thead","th","tbody","Fragment","PageTreeListViewClient","allDocs","canMoveDocs","query","sourceDocs","props","router","searchParams","config","locale","i18n","setActiveDragRowID","useState","activeDropTarget","setActiveDropTarget","collapsedIDs","setCollapsedIDs","localSourceDocs","setLocalSourceDocs","pendingMoveRowID","setPendingMoveRowID","useEffect","toggleRow","useCallback","currentState","nextState","delete","add","searchParamSort","getAll","sort","manualOrderIsActive","currentLimit","currentRequestedPage","liveAllDocs","collapseResetKey","JSON","stringify","collectionSlug","viewType","toString","hierarchyValue","visibleDocs","paginatedData","paginatedDocs","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","sensors","activationConstraint","distance","moveDocument","params","URLSearchParams","code","set","response","fetch","routes","api","encodeURIComponent","size","body","credentials","headers","language","method","result","json","catch","ok","Error","reorderDocument","movedDocID","targetID","docsToMove","target","key","orderValues","handleManualOrderMoveEnd","error","parentChanged","orderChanged","reorderTarget","parentDoc","nextParentValue","parentMoveSucceeded","nextOrderValue","currentDocs","success","startTransition","refresh","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","root","modifySearchParams","Table"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeListView.client.tsx"],"sourcesContent":["'use client'\r\n\r\nimport type { Column, ListQuery, ListViewClientProps, PaginatedDocs } from 'payload'\r\n\r\nimport {\r\n DndContext,\r\n type DragEndEvent,\r\n type DragOverEvent,\r\n DragOverlay,\r\n type DragStartEvent,\r\n PointerSensor,\r\n useDroppable,\r\n useSensor,\r\n useSensors,\r\n} from '@dnd-kit/core'\r\nimport {\r\n DefaultListView,\n ListQueryProvider,\n SelectAll,\n SelectRow,\n toast,\n useConfig,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport { useRouter, useSearchParams } from 'next/navigation'\r\nimport React from 'react'\n\nimport {\n type NestedDocsPageTreePluginResolvedBadgeConfig,\n pageTreeMoveRequestHeader,\n pageTreeMoveRequestHeaderValue,\n type PageTreeSourceDoc,\n} from '../types.js'\nimport {\n buildInsertDropTargets,\n getDropTargetParentDoc,\n type PageTreeDropTarget,\n} from '../utilities/dropTargets.js'\nimport {\n CANCEL_DRAG_MESSAGE,\n getDropValidation,\n type PageTreeDropValidation,\r\n} from '../utilities/moveValidation.js'\r\nimport {\r\n buildDocSlugPath,\r\n buildPageTreeDocs,\r\n buildProspectiveDocSlugPath,\n getDocDisplayLabel,\n getVisibleTreeDocs,\n type PageTreeDoc,\n} from '../utilities/pageTree.js'\nimport { pageTreeCollisionDetectionStrategy } from '../utilities/pageTreeCollision.js'\r\nimport {\r\n getPageTreeBadgeColor,\r\n getPageTreeBadgeLabel,\r\n getPageTreeDisplayStatus,\r\n type PageTreeDisplayStatus,\r\n} from '../utilities/status.js'\r\nimport { PageTreeProvider } from './PageTreeContext.js'\r\nimport styles from './PageTreeListView.module.css'\r\nimport { PageTreeTitleCell } from './PageTreeTitleCell.js'\r\n\r\ntype PageTreeListViewClientOwnProps = {\r\n allDocs: PageTreeDoc[]\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n canMoveDocs: boolean\r\n columnState: Column[]\r\n homeIndicatorEnabled: boolean\r\n orderableFieldName?: string\r\n parentFieldSlug: string\r\n query: ListQuery\r\n sourceDocs: PageTreeSourceDoc[]\r\n useAsTitle: string\r\n}\r\n\r\ntype PageTreeListViewClientProps = Omit<ListViewClientProps, 'columnState' | 'Table'> &\r\n PageTreeListViewClientOwnProps\r\n\r\ntype SelectableRowData = React.ComponentProps<typeof SelectRow>['rowData']\r\ntype PageTreeDragData = {\n dragType?: 'move'\n rowID?: string\n}\n\nconst MANUAL_ORDER_COLUMN_ACCESSOR = '_dragHandle'\nconst SILENT_MOVE_MESSAGES = new Set([CANCEL_DRAG_MESSAGE])\n\r\nfunction getRowDropID(rowID: string): string {\r\n return `page-drop:${rowID}`\r\n}\r\n\r\nfunction getPageTreeDragData(value: unknown): PageTreeDragData {\n return value && typeof value === 'object' ? (value as PageTreeDragData) : {}\n}\n\nfunction buildPaginatedData(\n docs: PageTreeDoc[],\n limit: number,\n requestedPage: number,\r\n): PaginatedDocs {\r\n const totalDocs = docs.length\r\n const totalPages = totalDocs > 0 ? Math.max(1, Math.ceil(totalDocs / limit)) : 1\r\n const page = Math.min(Math.max(requestedPage, 1), totalPages)\r\n const startIndex = (page - 1) * limit\r\n const pageDocs = docs.slice(startIndex, startIndex + limit)\r\n\r\n return {\r\n docs: pageDocs,\r\n hasNextPage: page < totalPages,\r\n hasPrevPage: page > 1,\r\n limit,\r\n nextPage: page < totalPages ? page + 1 : null,\r\n page,\r\n pagingCounter: totalDocs === 0 ? 0 : startIndex + 1,\r\n prevPage: page > 1 ? page - 1 : null,\r\n totalDocs,\r\n totalPages,\r\n }\r\n}\r\n\r\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\r\n if (Array.isArray(value)) {\r\n const sortValues = value.filter((entry) => typeof entry === 'string' && entry.length > 0)\r\n return sortValues.length > 0 ? sortValues.join(',') : undefined\r\n }\r\n\r\n return typeof value === 'string' && value.length > 0 ? value : undefined\r\n}\r\n\r\nfunction normalizePositiveInt(value: null | string, fallback: number): number {\r\n if (typeof value !== 'string') {\r\n return fallback\r\n }\r\n\r\n const parsedValue = Number.parseInt(value, 10)\r\n return Number.isNaN(parsedValue) || parsedValue <= 0 ? fallback : parsedValue\r\n}\r\n\r\nfunction normalizePageTreeColumnState(columnState: Column[], useAsTitle: string): Column[] {\r\n return columnState\r\n .filter((column) => column.accessor !== MANUAL_ORDER_COLUMN_ACCESSOR)\r\n .map((column) =>\r\n column.accessor === useAsTitle\r\n ? {\r\n ...column,\r\n active: true,\r\n }\r\n : column,\r\n )\r\n}\r\n\r\nfunction sliceColumnState(\r\n columnState: Column[],\r\n docs: PageTreeDoc[],\r\n renderedCellIndexByDocID: ReadonlyMap<string, number>,\r\n): Column[] {\r\n return columnState.map((column) => ({\r\n ...column,\r\n renderedCells: docs.map((doc) => {\r\n const renderedCellIndex =\r\n renderedCellIndexByDocID.get(doc.__pageTreeID) ?? doc.__pageTreeOrderIndex\r\n\r\n return column.renderedCells?.[renderedCellIndex] ?? null\r\n }),\r\n }))\r\n}\r\n\r\nfunction getSelectableRowData(doc: PageTreeDoc): SelectableRowData {\r\n const record = doc as Record<string, unknown>\r\n\r\n return {\r\n id: String(doc.id ?? doc.__pageTreeID),\r\n _isLocked: Boolean(record._isLocked),\r\n _userEditing: record._userEditing as SelectableRowData['_userEditing'],\r\n }\r\n}\r\n\r\nfunction shouldSilenceMoveMessage(message?: string): boolean {\r\n return typeof message === 'string' && SILENT_MOVE_MESSAGES.has(message)\r\n}\r\n\r\nfunction getStatusClassName(\r\n status: PageTreeDisplayStatus,\r\n): 'changed' | 'draft' | 'published' | 'unknown' {\r\n if (status === 'changed' || status === 'draft' || status === 'published') {\r\n return status\r\n }\r\n\r\n return 'unknown'\r\n}\r\n\r\nfunction renderStatusBadge(args: {\r\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\r\n doc: PageTreeDoc\r\n index: number\r\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\r\n}): React.ReactNode {\r\n const { badgeConfig, doc, index, t } = args\r\n const status = getPageTreeDisplayStatus(doc)\r\n const customColor = getPageTreeBadgeColor({\r\n badgeColors: badgeConfig.colors,\r\n status,\r\n })\r\n const statusClass = getStatusClassName(status)\r\n const style = customColor\r\n ? ({ '--page-tree-badge-base': customColor } as React.CSSProperties)\r\n : undefined\r\n\r\n return (\r\n <span\r\n className={[\r\n 'pages-hierarchy-status-badge',\r\n `pages-hierarchy-status-badge--${statusClass}`,\r\n ].join(' ')}\r\n data-custom-color={customColor ? 'true' : undefined}\r\n key={doc.__pageTreeID ?? index}\r\n style={style}\r\n >\r\n {getPageTreeBadgeLabel({\r\n badgeLabels: badgeConfig.labels,\r\n status,\r\n t,\r\n })}\r\n </span>\r\n )\r\n}\r\n\r\nfunction buildTableColumns(args: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n columnState: Column[]\n docs: PageTreeDoc[]\n enableRowSelections?: boolean\n homeIndicatorEnabled: boolean\n parentFieldSlug: string\n t: (key: 'general:noValue' | 'version:changed' | 'version:draft' | 'version:published') => string\n useAsTitle: string\n}): Column[] {\n const {\r\n badgeConfig,\r\n columnState,\r\n docs,\n enableRowSelections,\n homeIndicatorEnabled,\n parentFieldSlug,\n t,\n useAsTitle,\n } = args\n const columnsToUse = columnState.map((column) => {\r\n if (column.accessor === useAsTitle) {\r\n return {\r\n ...column,\r\n active: true,\r\n renderedCells: docs.map((doc, index) => (\r\n <PageTreeTitleCell\r\n doc={doc}\r\n homeIndicatorEnabled={homeIndicatorEnabled}\r\n key={doc.__pageTreeID ?? index}\r\n >\r\n {column.renderedCells?.[index] ?? getDocDisplayLabel(doc)}\r\n </PageTreeTitleCell>\r\n )),\r\n }\r\n }\r\n\r\n if (column.accessor === '_status') {\r\n return {\r\n ...column,\r\n renderedCells: docs.map((doc, index) =>\r\n renderStatusBadge({\r\n badgeConfig,\r\n doc,\r\n index,\r\n t,\r\n }),\r\n ),\r\n }\r\n }\r\n\r\n if (column.accessor === parentFieldSlug) {\r\n return {\r\n ...column,\r\n renderedCells: docs.map((doc, index) =>\r\n doc.__pageTreeParentID !== null ? (\r\n column.renderedCells?.[index] ?? null\r\n ) : (\r\n <span className=\"pages-hierarchy-empty-cell\" key={doc.__pageTreeID ?? index}>\r\n -\r\n </span>\r\n ),\r\n ),\r\n }\r\n }\r\n\r\n return column\r\n })\r\n\r\n if (enableRowSelections) {\r\n columnsToUse.unshift({\r\n accessor: '_select',\r\n active: true,\r\n field: { hidden: true } as Column['field'],\r\n Heading: <SelectAll />,\r\n renderedCells: docs.map((doc, index) => (\r\n <SelectRow key={doc.__pageTreeID ?? index} rowData={getSelectableRowData(doc)} />\r\n )),\r\n })\n }\n\n return columnsToUse\n}\n\r\nfunction HierarchyInsertRow({\r\n activeColumnsCount,\r\n activeDragRowID,\r\n dropTarget,\r\n dropValidation,\r\n isMovePending,\r\n}: {\r\n activeColumnsCount: number\r\n activeDragRowID: null | string\r\n dropTarget: Extract<PageTreeDropTarget, { dropType: 'insert' }>\r\n dropValidation?: PageTreeDropValidation\r\n isMovePending: boolean\r\n}) {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: dropTarget.dropID,\r\n data: dropTarget,\r\n disabled: isMovePending,\r\n })\r\n const hasActiveDrag = Boolean(activeDragRowID)\r\n\r\n return (\r\n <tr\r\n className=\"pages-hierarchy-insert-row\"\r\n data-drag-over={isOver ? 'true' : 'false'}\r\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\r\n data-page-tree-insert=\"true\"\r\n >\r\n <td colSpan={activeColumnsCount}>\r\n <div\r\n className=\"pages-hierarchy-insert-row__target\"\r\n data-insert-depth={dropTarget.depth}\r\n ref={setNodeRef}\r\n />\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nfunction HierarchyTableRow({\r\n activeColumns,\r\n activeDragRowID,\r\n doc,\r\n dropValidation,\r\n insertAfterDropID,\r\n insertBeforeDropID,\r\n isMovePending,\r\n rowIndex,\r\n titleCellAccessor,\r\n}: {\r\n activeColumns: Column[]\r\n activeDragRowID: null | string\r\n doc: PageTreeDoc\r\n dropValidation?: PageTreeDropValidation\r\n insertAfterDropID: string\r\n insertBeforeDropID: string\r\n isMovePending: boolean\r\n rowIndex: number\r\n titleCellAccessor: string\r\n}) {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: getRowDropID(doc.__pageTreeID),\r\n data: {\r\n dropType: 'row',\r\n insertAfterDropID,\r\n insertBeforeDropID,\r\n rowID: doc.__pageTreeID,\r\n } satisfies Extract<PageTreeDropTarget, { dropType: 'row' }>,\r\n disabled: isMovePending,\r\n })\r\n const hasActiveDrag = Boolean(activeDragRowID)\r\n const isActiveDragRow = activeDragRowID === doc.__pageTreeID\r\n\r\n return (\r\n <tr\r\n className={`row-${rowIndex + 1}`}\r\n data-drag-over={isOver ? 'true' : 'false'}\r\n data-drop-valid={hasActiveDrag ? (dropValidation?.isValid ? 'true' : 'false') : undefined}\r\n data-id={doc.id}\r\n data-is-drag-source={isActiveDragRow ? 'true' : 'false'}\r\n data-page-tree-row=\"true\"\r\n ref={setNodeRef}\r\n >\r\n {activeColumns.map((column, columnIndex) => {\r\n const { accessor } = column\r\n\r\n return (\r\n <td\r\n className={`cell-${accessor.replace(/\\./g, '__')}`}\r\n data-page-tree-manual-order-cell={\r\n accessor === MANUAL_ORDER_COLUMN_ACCESSOR ? 'true' : undefined\r\n }\r\n data-page-tree-title-cell={accessor === titleCellAccessor ? 'true' : undefined}\r\n key={columnIndex}\r\n >\r\n {column.renderedCells?.[rowIndex] ?? null}\r\n </td>\r\n )\r\n })}\r\n </tr>\r\n )\r\n}\r\n\r\nfunction HierarchyTable({\n activeDragRowID,\n allDocsByID,\n columns,\n data,\n isMovePending,\n titleCellAccessor,\r\n}: {\n activeDragRowID: null | string\n allDocsByID: ReadonlyMap<string, PageTreeDoc>\n columns: Column[]\n data: PageTreeDoc[]\n isMovePending: boolean\n titleCellAccessor: string\r\n}) {\r\n const activeColumns = React.useMemo(\r\n () => columns.filter((column) => column?.active),\r\n [columns],\r\n )\r\n const hasManualOrderColumn = React.useMemo(\r\n () => activeColumns.some((column) => column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR),\r\n [activeColumns],\r\n )\r\n const insertDropTargets = React.useMemo(() => buildInsertDropTargets(data), [data])\r\n const activeDoc = activeDragRowID ? allDocsByID.get(activeDragRowID) ?? null : null\r\n const rowDropValidationByID = React.useMemo(() => {\r\n if (!activeDoc) {\r\n return new Map<string, PageTreeDropValidation>()\r\n }\r\n\r\n return new Map(\r\n data.map((doc) => [\n doc.__pageTreeID,\n getDropValidation({\n activeDoc,\n targetDoc: doc,\n }),\n ]),\n )\n }, [activeDoc, data])\n const insertDropValidationByID = React.useMemo(() => {\n if (!activeDoc) {\n return new Map<string, PageTreeDropValidation>()\n }\r\n\r\n return new Map(\n insertDropTargets.map((dropTarget) => [\n dropTarget.dropID,\n getDropValidation({\n activeDoc,\n targetDoc:\n dropTarget.parentID === null\n ? undefined\n : allDocsByID.get(dropTarget.parentID) ?? undefined,\n }),\r\n ]),\n )\n }, [activeDoc, allDocsByID, insertDropTargets])\n\r\n if (activeColumns.length === 0) {\r\n return <div>No columns selected</div>\r\n }\r\n\r\n return (\r\n <div\r\n className={[\r\n 'table-wrap pages-hierarchy-table',\r\n activeDoc ? 'pages-hierarchy-table--dragging' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n data-page-tree-orderable={hasManualOrderColumn ? 'true' : undefined}\r\n >\r\n <div className=\"table table--appearance-default\">\r\n <table cellPadding=\"0\" cellSpacing=\"0\">\r\n <thead>\r\n <tr>\r\n {activeColumns.map((column, index) => (\r\n <th\r\n data-page-tree-manual-order-cell={\r\n column.accessor === MANUAL_ORDER_COLUMN_ACCESSOR ? 'true' : undefined\r\n }\r\n data-page-tree-title-cell={\r\n column.accessor === titleCellAccessor ? 'true' : undefined\r\n }\r\n id={`heading-${column.accessor.replace(/\\./g, '__')}`}\r\n key={index}\r\n >\r\n {column.Heading}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {insertDropTargets[0] ? (\r\n <HierarchyInsertRow\r\n activeColumnsCount={activeColumns.length}\r\n activeDragRowID={activeDragRowID}\r\n dropTarget={insertDropTargets[0]}\r\n dropValidation={insertDropValidationByID.get(insertDropTargets[0].dropID)}\r\n isMovePending={isMovePending}\r\n key={insertDropTargets[0].dropID}\r\n />\r\n ) : null}\r\n {data.map((doc, rowIndex) => (\r\n <React.Fragment key={doc.__pageTreeID}>\r\n <HierarchyTableRow\r\n activeColumns={activeColumns}\r\n activeDragRowID={activeDragRowID}\r\n doc={doc}\r\n dropValidation={rowDropValidationByID.get(doc.__pageTreeID)}\r\n insertAfterDropID={insertDropTargets[rowIndex + 1].dropID}\r\n insertBeforeDropID={insertDropTargets[rowIndex].dropID}\r\n isMovePending={isMovePending}\r\n rowIndex={rowIndex}\r\n titleCellAccessor={titleCellAccessor}\r\n />\r\n {insertDropTargets[rowIndex + 1] ? (\r\n <HierarchyInsertRow\r\n activeColumnsCount={activeColumns.length}\r\n activeDragRowID={activeDragRowID}\r\n dropTarget={insertDropTargets[rowIndex + 1]}\r\n dropValidation={insertDropValidationByID.get(\r\n insertDropTargets[rowIndex + 1].dropID,\r\n )}\r\n isMovePending={isMovePending}\r\n key={insertDropTargets[rowIndex + 1].dropID}\r\n />\r\n ) : null}\r\n </React.Fragment>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default function PageTreeListViewClient({\r\n allDocs,\r\n badgeConfig,\r\n canMoveDocs,\n columnState,\n homeIndicatorEnabled,\n orderableFieldName: _orderableFieldName,\n parentFieldSlug,\n query,\n sourceDocs,\n useAsTitle,\r\n ...props\r\n}: PageTreeListViewClientProps) {\r\n const router = useRouter()\r\n const searchParams = useSearchParams()\r\n const { config } = useConfig()\r\n const locale = useLocale()\r\n const { i18n } = useTranslation()\r\n const [activeDragRowID, setActiveDragRowID] = React.useState<null | string>(null)\r\n const [activeDropTarget, setActiveDropTarget] = React.useState<null | PageTreeDropTarget>(null)\r\n const [collapsedIDs, setCollapsedIDs] = React.useState<Set<string>>(() => new Set())\r\n const [localSourceDocs, setLocalSourceDocs] = React.useState(sourceDocs)\r\n const [pendingMoveRowID, setPendingMoveRowID] = React.useState<null | string>(null)\r\n\r\n React.useEffect(() => {\r\n setLocalSourceDocs(sourceDocs)\r\n }, [sourceDocs])\r\n\r\n const toggleRow = React.useCallback((rowID: string) => {\r\n setCollapsedIDs((currentState) => {\r\n const nextState = new Set(currentState)\r\n\r\n if (nextState.has(rowID)) {\r\n nextState.delete(rowID)\r\n } else {\r\n nextState.add(rowID)\r\n }\r\n\r\n return nextState\r\n })\r\n }, [])\r\n const currentSort = React.useMemo(() => {\r\n const searchParamSort = searchParams.getAll('sort')\r\n\r\n if (searchParamSort.length > 0) {\r\n return normalizeSort(searchParamSort)\r\n }\r\n\r\n return normalizeSort(query.sort as string | string[] | undefined)\r\n }, [query.sort, searchParams])\r\n const currentLimit = React.useMemo(\n () =>\r\n normalizePositiveInt(\r\n searchParams.get('limit'),\r\n typeof query.limit === 'number' && query.limit > 0 ? query.limit : 10,\r\n ),\r\n [query.limit, searchParams],\r\n )\r\n const currentRequestedPage = React.useMemo(\r\n () =>\r\n normalizePositiveInt(\r\n searchParams.get('page'),\r\n typeof query.page === 'number' && query.page > 0 ? query.page : 1,\r\n ),\r\n [query.page, searchParams],\r\n )\r\n const liveAllDocs = React.useMemo(\r\n () =>\r\n buildPageTreeDocs(localSourceDocs, {\r\n parentFieldSlug,\r\n sort: currentSort,\r\n }),\r\n [currentSort, localSourceDocs, parentFieldSlug],\r\n )\r\n const collapseResetKey = React.useMemo(\r\n () => JSON.stringify([props.collectionSlug, props.viewType, searchParams.toString()]),\r\n [props.collectionSlug, props.viewType, searchParams],\r\n )\r\n const hierarchyValue = React.useMemo(\r\n () => ({\r\n activeDragRowID,\r\n canMoveDocs,\r\n collapsedIDs,\r\n pendingMoveRowID,\r\n toggleRow,\r\n }),\r\n [activeDragRowID, canMoveDocs, collapsedIDs, pendingMoveRowID, toggleRow],\r\n )\r\n\r\n React.useEffect(() => {\r\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n setCollapsedIDs(new Set())\r\n }, [collapseResetKey])\r\n\r\n const visibleDocs = React.useMemo(\r\n () => getVisibleTreeDocs(liveAllDocs, collapsedIDs),\r\n [liveAllDocs, collapsedIDs],\r\n )\r\n const paginatedData = React.useMemo(\r\n () => buildPaginatedData(visibleDocs, currentLimit, currentRequestedPage),\r\n [currentLimit, currentRequestedPage, visibleDocs],\r\n )\r\n const paginatedDocs = paginatedData.docs as PageTreeDoc[]\r\n const allDocsByID = React.useMemo(\r\n () => new Map(liveAllDocs.map((doc) => [doc.__pageTreeID, doc])),\r\n [liveAllDocs],\r\n )\r\n const paginatedDocsByID = React.useMemo(\r\n () => new Map(paginatedDocs.map((doc) => [doc.__pageTreeID, doc])),\r\n [paginatedDocs],\r\n )\r\n const renderedCellIndexByDocID = React.useMemo(\r\n () => new Map(allDocs.map((doc, index) => [doc.__pageTreeID, index])),\r\n [allDocs],\r\n )\r\n const normalizedColumnState = React.useMemo(\r\n () => normalizePageTreeColumnState(columnState, useAsTitle),\r\n [columnState, useAsTitle],\r\n )\r\n const paginatedColumnState = React.useMemo(\r\n () => sliceColumnState(normalizedColumnState, paginatedDocs, renderedCellIndexByDocID),\r\n [normalizedColumnState, paginatedDocs, renderedCellIndexByDocID],\r\n )\r\n const tableColumns = React.useMemo(\r\n () =>\r\n buildTableColumns({\r\n badgeConfig,\r\n columnState: paginatedColumnState,\r\n docs: paginatedDocs,\n enableRowSelections: props.enableRowSelections,\n homeIndicatorEnabled,\n parentFieldSlug,\n t: i18n.t,\n useAsTitle,\n }),\r\n [\r\n paginatedColumnState,\r\n paginatedDocs,\n badgeConfig,\n homeIndicatorEnabled,\n parentFieldSlug,\n props.enableRowSelections,\n i18n.t,\n useAsTitle,\r\n ],\r\n )\r\n const activeDragDoc = activeDragRowID ? paginatedDocsByID.get(activeDragRowID) ?? null : null\r\n const activeDragPreviewPath = React.useMemo(() => {\r\n if (!activeDragDoc) {\r\n return null\r\n }\r\n\r\n if (!activeDropTarget) {\r\n return buildDocSlugPath({\r\n doc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n })\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\r\n docsByID: allDocsByID,\r\n dropTarget: activeDropTarget,\r\n })\n const dropValidation = getDropValidation({\n activeDoc: activeDragDoc,\n targetDoc: targetDoc ?? undefined,\n })\n\r\n if (!dropValidation.isValid) {\r\n return buildDocSlugPath({\r\n doc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n })\r\n }\r\n\r\n return buildProspectiveDocSlugPath({\r\n activeDoc: activeDragDoc,\r\n docsByID: allDocsByID,\r\n targetDoc: targetDoc ?? undefined,\n })\n }, [activeDragDoc, activeDropTarget, allDocsByID])\n const isMovePending = pendingMoveRowID !== null\r\n const sensors = useSensors(\r\n useSensor(PointerSensor, {\r\n activationConstraint: {\r\n distance: 4,\r\n },\r\n }),\r\n )\r\n const moveDocument = React.useCallback(\r\n async (args: { parentID: null | string; rowID: string }) => {\r\n const { parentID, rowID } = args\r\n const params = new URLSearchParams()\r\n\r\n if (locale?.code) {\r\n params.set('locale', locale.code)\r\n }\r\n\r\n const response = await fetch(\r\n `${config.routes.api}/${props.collectionSlug}/${encodeURIComponent(rowID)}/move${\r\n params.size > 0 ? `?${params.toString()}` : ''\r\n }`,\r\n {\r\n body: JSON.stringify({\r\n parentID,\r\n }),\r\n credentials: 'include',\r\n headers: {\r\n 'Accept-Language': i18n.language,\r\n 'Content-Type': 'application/json',\r\n [pageTreeMoveRequestHeader]: pageTreeMoveRequestHeaderValue,\r\n },\r\n method: 'POST',\r\n },\r\n )\r\n const result = (await response.json().catch(() => null)) as\r\n | {\r\n message?: string\r\n }\r\n | null\r\n\r\n if (!response.ok) {\r\n throw new Error(result?.message ?? 'Could not move document.')\r\n }\r\n\r\n return result\r\n },\r\n [config.routes.api, i18n.language, locale?.code, props.collectionSlug],\r\n )\r\n const handleDragCancel = React.useCallback(() => {\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n }, [])\r\n const handleDragStart = React.useCallback(\r\n (event: DragStartEvent) => {\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n\r\n if (!canMoveDocs || isMovePending) {\r\n return\r\n }\r\n\r\n const rowID = dragData.rowID\r\n\r\n if (typeof rowID === 'string' && paginatedDocsByID.has(rowID)) {\r\n setActiveDragRowID(rowID)\r\n setActiveDropTarget(null)\r\n }\r\n },\r\n [canMoveDocs, isMovePending, paginatedDocsByID],\r\n )\r\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\r\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\r\n\r\n if (!overData) {\r\n setActiveDropTarget(null)\r\n return\r\n }\r\n\r\n if (overData.dropType === 'insert') {\r\n setActiveDropTarget(overData)\r\n return\r\n }\r\n\r\n if (overData.dropType === 'row') {\r\n setActiveDropTarget(overData)\r\n return\r\n }\r\n\r\n setActiveDropTarget(null)\r\n }, [])\r\n const handleDragEnd = React.useCallback(\r\n async (event: DragEndEvent) => {\r\n const dragData = getPageTreeDragData(event.active.data.current)\r\n\r\n const rowID = dragData.rowID\r\n const activeDoc = typeof rowID === 'string' ? paginatedDocsByID.get(rowID) ?? null : null\r\n const overData = event.over?.data.current as PageTreeDropTarget | undefined\r\n\r\n setActiveDragRowID(null)\r\n setActiveDropTarget(null)\r\n\r\n if (!rowID || !activeDoc || !overData) {\r\n return\r\n }\r\n\r\n const targetDoc = getDropTargetParentDoc({\n docsByID: allDocsByID,\n dropTarget: overData,\n })\r\n const dropValidation = getDropValidation({\r\n activeDoc,\r\n targetDoc: targetDoc ?? undefined,\r\n })\r\n\r\n if (!dropValidation.isValid) {\r\n if (!shouldSilenceMoveMessage(dropValidation.message)) {\r\n toast.error(dropValidation.message ?? 'Could not move document.')\r\n }\r\n\r\n return\r\n }\r\n\r\n setPendingMoveRowID(rowID)\r\n\r\n try {\r\n await moveDocument({\r\n parentID: dropValidation.parentID,\r\n rowID,\r\n })\r\n\r\n toast.success(`Moved \"${getDocDisplayLabel(activeDoc)}\".`)\r\n React.startTransition(() => {\r\n router.refresh()\r\n })\r\n } catch (error) {\r\n const message =\r\n error instanceof Error && error.message ? error.message : 'Could not move document.'\r\n\r\n if (shouldSilenceMoveMessage(message)) {\r\n return\r\n }\r\n\r\n toast.error(message)\r\n } finally {\r\n setPendingMoveRowID(null)\r\n }\r\n },\r\n [\r\n allDocsByID,\n moveDocument,\n paginatedDocsByID,\n router,\n ],\n )\r\n const handleDragEndSync = React.useCallback(\r\n (event: DragEndEvent) => {\r\n void handleDragEnd(event)\r\n },\r\n [handleDragEnd],\r\n )\r\n\r\n const tableNode = React.useMemo(\r\n () => (\r\n <DndContext\r\n collisionDetection={pageTreeCollisionDetectionStrategy}\r\n onDragCancel={handleDragCancel}\r\n onDragEnd={handleDragEndSync}\r\n onDragOver={handleDragOver}\r\n onDragStart={handleDragStart}\r\n sensors={sensors}\r\n >\r\n <HierarchyTable\n activeDragRowID={activeDragRowID}\n allDocsByID={allDocsByID}\n columns={tableColumns}\n data={paginatedDocs}\n isMovePending={isMovePending}\n titleCellAccessor={useAsTitle}\r\n />\r\n <DragOverlay dropAnimation={null} style={{ cursor: 'grabbing' }}>\r\n {activeDragPreviewPath ? (\r\n <div className=\"pages-hierarchy-drag-overlay\">{activeDragPreviewPath}</div>\r\n ) : null}\r\n </DragOverlay>\r\n </DndContext>\r\n ),\r\n [\r\n activeDragPreviewPath,\r\n activeDragRowID,\r\n handleDragCancel,\r\n handleDragEndSync,\r\n handleDragOver,\r\n handleDragStart,\n isMovePending,\n allDocsByID,\n paginatedDocs,\n sensors,\n tableColumns,\n useAsTitle,\r\n ],\r\n )\r\n\r\n return (\r\n <div className={styles.root}>\r\n <PageTreeProvider value={hierarchyValue}>\r\n <ListQueryProvider\r\n collectionSlug={props.collectionSlug}\n data={paginatedData}\n modifySearchParams\n query={{\n ...query,\n limit: currentLimit,\n page: paginatedData.page,\r\n sort: currentSort,\r\n }}\r\n >\r\n <DefaultListView {...props} columnState={paginatedColumnState} Table={tableNode} />\r\n </ListQueryProvider>\r\n </PageTreeProvider>\r\n </div>\r\n )\r\n}\r\n"],"names":["DndContext","DragOverlay","PointerSensor","useDroppable","useSensor","useSensors","DefaultListView","ListQueryProvider","SelectAll","SelectRow","toast","useConfig","useLocale","useTranslation","useRouter","useSearchParams","React","pageTreeMoveRequestHeader","pageTreeMoveRequestHeaderValue","buildInsertDropTargets","getDropTargetParentDoc","CANCEL_DRAG_MESSAGE","getDropValidation","buildDocSlugPath","buildPageTreeDocs","buildProspectiveDocSlugPath","getDocDisplayLabel","getVisibleTreeDocs","pageTreeCollisionDetectionStrategy","getPageTreeBadgeColor","getPageTreeBadgeLabel","getPageTreeDisplayStatus","PageTreeProvider","styles","PageTreeTitleCell","MANUAL_ORDER_COLUMN_ACCESSOR","SILENT_MOVE_MESSAGES","Set","getRowDropID","rowID","getPageTreeDragData","value","buildPaginatedData","docs","limit","requestedPage","totalDocs","length","totalPages","Math","max","ceil","page","min","startIndex","pageDocs","slice","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","normalizeSort","Array","isArray","sortValues","filter","entry","join","undefined","normalizePositiveInt","fallback","parsedValue","Number","parseInt","isNaN","normalizePageTreeColumnState","columnState","useAsTitle","column","accessor","map","active","sliceColumnState","renderedCellIndexByDocID","renderedCells","doc","renderedCellIndex","get","__pageTreeID","__pageTreeOrderIndex","getSelectableRowData","record","id","String","_isLocked","Boolean","_userEditing","shouldSilenceMoveMessage","message","has","getStatusClassName","status","renderStatusBadge","args","badgeConfig","index","t","customColor","badgeColors","colors","statusClass","style","span","className","data-custom-color","badgeLabels","labels","buildTableColumns","enableRowSelections","homeIndicatorEnabled","parentFieldSlug","columnsToUse","__pageTreeParentID","unshift","field","hidden","Heading","rowData","HierarchyInsertRow","activeColumnsCount","activeDragRowID","dropTarget","dropValidation","isMovePending","isOver","setNodeRef","dropID","data","disabled","hasActiveDrag","tr","data-drag-over","data-drop-valid","isValid","data-page-tree-insert","td","colSpan","div","data-insert-depth","depth","ref","HierarchyTableRow","activeColumns","insertAfterDropID","insertBeforeDropID","rowIndex","titleCellAccessor","dropType","isActiveDragRow","data-id","data-is-drag-source","data-page-tree-row","columnIndex","replace","data-page-tree-manual-order-cell","data-page-tree-title-cell","HierarchyTable","allDocsByID","columns","useMemo","hasManualOrderColumn","some","insertDropTargets","activeDoc","rowDropValidationByID","Map","targetDoc","insertDropValidationByID","parentID","data-page-tree-orderable","table","cellPadding","cellSpacing","thead","th","tbody","Fragment","PageTreeListViewClient","allDocs","canMoveDocs","orderableFieldName","_orderableFieldName","query","sourceDocs","props","router","searchParams","config","locale","i18n","setActiveDragRowID","useState","activeDropTarget","setActiveDropTarget","collapsedIDs","setCollapsedIDs","localSourceDocs","setLocalSourceDocs","pendingMoveRowID","setPendingMoveRowID","useEffect","toggleRow","useCallback","currentState","nextState","delete","add","currentSort","searchParamSort","getAll","sort","currentLimit","currentRequestedPage","liveAllDocs","collapseResetKey","JSON","stringify","collectionSlug","viewType","toString","hierarchyValue","visibleDocs","paginatedData","paginatedDocs","paginatedDocsByID","normalizedColumnState","paginatedColumnState","tableColumns","activeDragDoc","activeDragPreviewPath","docsByID","sensors","activationConstraint","distance","moveDocument","params","URLSearchParams","code","set","response","fetch","routes","api","encodeURIComponent","size","body","credentials","headers","language","method","result","json","catch","ok","Error","handleDragCancel","handleDragStart","event","dragData","current","handleDragOver","overData","over","handleDragEnd","error","success","startTransition","refresh","handleDragEndSync","tableNode","collisionDetection","onDragCancel","onDragEnd","onDragOver","onDragStart","dropAnimation","cursor","root","modifySearchParams","Table"],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug } from 'payload'\n\nexport const nestedDocsPageTreePluginBadgeStatuses = ['published', 'changed', 'draft'] as const\n\nexport type NestedDocsPageTreePluginBadgeStatus =\n (typeof nestedDocsPageTreePluginBadgeStatuses)[number]\n\nexport type NestedDocsPageTreePluginBadgeMap = Partial<\n Record<NestedDocsPageTreePluginBadgeStatus, string>\n>\n\nexport type NestedDocsPageTreePluginBadgeConfig = {\n colors?: NestedDocsPageTreePluginBadgeMap\n labels?: NestedDocsPageTreePluginBadgeMap\n}\n\nexport type NestedDocsPageTreePluginResolvedBadgeConfig = {\n colors: NestedDocsPageTreePluginBadgeMap\n labels: NestedDocsPageTreePluginBadgeMap\n}\n\nexport type NestedDocsPageTreePluginHomeIndicatorConfig =\n | false\n | {\n collections?: CollectionSlug[]\n }\n\nexport type NestedDocsPageTreePluginResolvedHomeIndicatorConfig = {\n enabled: boolean\n}\n\nexport type NestedDocsPageTreePluginConfig = {\n badges?: NestedDocsPageTreePluginBadgeConfig\n breadcrumbsFieldSlug?: string\n collections: CollectionSlug[]\n defaultLimit?: number\n disabled?: boolean\n hideBreadcrumbs?: boolean\n homeIndicator?: NestedDocsPageTreePluginHomeIndicatorConfig\n parentFieldSlug?: string\n}\n\nexport type NestedDocsPageTreePluginCollectionCustom = {\n badges: NestedDocsPageTreePluginResolvedBadgeConfig\n breadcrumbsFieldSlug: string\n defaultLimit: number\n hideBreadcrumbs: boolean\n homeIndicator: NestedDocsPageTreePluginResolvedHomeIndicatorConfig\n parentFieldSlug: string\n}\n\nexport type PageTreeSourceDoc = Record<string, unknown> & {\n _displayStatus?: null | string\n _status?: null | string\n id?: number | string\n slug?: null | string\n}\n\nexport const nestedDocsPageTreePluginCustomKey = 'nestedDocsPageTreePlugin'\n\nexport const pageTreeMoveContextKey = 'pageTreeMove'\n\nexport const pageTreeMoveRequestHeader = 'x-payload-nested-docs-page-tree-move'\n\nexport const pageTreeMoveRequestHeaderValue = 'true'\n\nexport type PageTreeMoveContext = {\n [pageTreeMoveContextKey]?: boolean\n}\n"],"names":["nestedDocsPageTreePluginBadgeStatuses","nestedDocsPageTreePluginCustomKey","pageTreeMoveContextKey","pageTreeMoveRequestHeader","pageTreeMoveRequestHeaderValue"],"mappings":"AAEA,OAAO,MAAMA,wCAAwC;IAAC;IAAa;IAAW;CAAQ,CAAS;AAwD/F,OAAO,MAAMC,oCAAoC,2BAA0B;AAE3E,OAAO,MAAMC,yBAAyB,eAAc;AAEpD,OAAO,MAAMC,4BAA4B,uCAAsC;AAE/E,OAAO,MAAMC,iCAAiC,OAAM"}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug } from 'payload'\r\n\r\nexport const nestedDocsPageTreePluginBadgeStatuses = ['published', 'changed', 'draft'] as const\r\n\r\nexport type NestedDocsPageTreePluginBadgeStatus =\r\n (typeof nestedDocsPageTreePluginBadgeStatuses)[number]\r\n\r\nexport type NestedDocsPageTreePluginBadgeMap = Partial<\r\n Record<NestedDocsPageTreePluginBadgeStatus, string>\r\n>\r\n\r\nexport type NestedDocsPageTreePluginBadgeConfig = {\r\n colors?: NestedDocsPageTreePluginBadgeMap\r\n labels?: NestedDocsPageTreePluginBadgeMap\r\n}\r\n\r\nexport type NestedDocsPageTreePluginResolvedBadgeConfig = {\r\n colors: NestedDocsPageTreePluginBadgeMap\r\n labels: NestedDocsPageTreePluginBadgeMap\r\n}\r\n\r\nexport type NestedDocsPageTreePluginHomeIndicatorConfig =\r\n | false\r\n | {\r\n collections?: CollectionSlug[]\r\n }\r\n\r\nexport type NestedDocsPageTreePluginResolvedHomeIndicatorConfig = {\r\n enabled: boolean\r\n}\r\n\r\nexport type NestedDocsPageTreePluginConfig = {\r\n badges?: NestedDocsPageTreePluginBadgeConfig\r\n breadcrumbsFieldSlug?: string\r\n collections: CollectionSlug[]\r\n defaultLimit?: number\r\n disabled?: boolean\r\n hideBreadcrumbs?: boolean\r\n homeIndicator?: NestedDocsPageTreePluginHomeIndicatorConfig\r\n parentFieldSlug?: string\r\n}\r\n\r\nexport type NestedDocsPageTreePluginCollectionCustom = {\r\n badges: NestedDocsPageTreePluginResolvedBadgeConfig\r\n breadcrumbsFieldSlug: string\r\n defaultLimit: number\r\n hideBreadcrumbs: boolean\r\n homeIndicator: NestedDocsPageTreePluginResolvedHomeIndicatorConfig\r\n parentFieldSlug: string\r\n}\r\n\r\nexport type PageTreeSourceDoc = Record<string, unknown> & {\r\n _displayStatus?: null | string\r\n _status?: null | string\r\n id?: number | string\r\n slug?: null | string\r\n}\r\n\r\nexport const nestedDocsPageTreePluginCustomKey = 'nestedDocsPageTreePlugin'\r\n\r\nexport const pageTreeMoveContextKey = 'pageTreeMove'\r\n\r\nexport const pageTreeMoveRequestHeader = 'x-payload-nested-docs-page-tree-move'\r\n\r\nexport const pageTreeMoveRequestHeaderValue = 'true'\r\n\r\nexport type PageTreeMoveContext = {\r\n [pageTreeMoveContextKey]?: boolean\r\n}\r\n"],"names":["nestedDocsPageTreePluginBadgeStatuses","nestedDocsPageTreePluginCustomKey","pageTreeMoveContextKey","pageTreeMoveRequestHeader","pageTreeMoveRequestHeaderValue"],"mappings":"AAEA,OAAO,MAAMA,wCAAwC;IAAC;IAAa;IAAW;CAAQ,CAAS;AAwD/F,OAAO,MAAMC,oCAAoC,2BAA0B;AAE3E,OAAO,MAAMC,yBAAyB,eAAc;AAEpD,OAAO,MAAMC,4BAA4B,uCAAsC;AAE/E,OAAO,MAAMC,iCAAiC,OAAM"}
|