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, SortHeader, toast, useConfig, useLocale, useTranslation } from '@payloadcms/ui';
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, getOrderPlacementFromDropTarget } from '../utilities/dropTargets.js';
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, orderableFieldName, parentFieldSlug, t, useAsTitle } = args;
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, allowSameParentDrops, columns, data, isMovePending, titleCellAccessor }) {
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
- getDropValidationForMode({
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
- getDropValidationForMode({
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 = getDropValidationForMode({
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":"AAAA;;AAIA,SACEA,UAAU,EAGVC,WAAW,EAEXC,aAAa,EACbC,YAAY,EACZC,SAAS,EACTC,UAAU,QACL,gBAAe;AACtB,SACEC,eAAe,EACfC,iBAAiB,EACjBC,SAAS,EACTC,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,SAAS,EACTC,SAAS,EACTC,cAAc,QACT,iBAAgB;AACvB,SAASC,SAAS,EAAEC,eAAe,QAAQ,kBAAiB;AAC5D,OAAOC,WAAW,QAAO;AAEzB,SACEC,yBAAyB,EACzBC,8BAA8B,QAGzB,cAAa;AAEpB,SACEC,sBAAsB,EACtBC,sBAAsB,EACtBC,+BAA+B,QAG1B,8BAA6B;AACpC,SACEC,mBAAmB,EACnBC,iBAAiB,QAEZ,iCAAgC;AACvC,SACEC,gBAAgB,EAChBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,kBAAkB,EAClBC,kBAAkB,QAEb,2BAA0B;AACjC,SAASC,kCAAkC,QAAQ,oCAAmC;AACtF,SACEC,qBAAqB,EACrBC,qBAAqB,EACrBC,wBAAwB,QAEnB,yBAAwB;AAC/B,SAASC,gBAAgB,QAAQ,uBAAsB;AACvD,OAAOC,YAAY,gCAA+B;AAClD,SAASC,iBAAiB,QAAQ,yBAAwB;AAyB1D,MAAMC,+BAA+B;AACrC,MAAMC,uBAAuB,IAAIC,IAAI;IAAChB;CAAoB;AAE1D,SAASiB,aAAaC,KAAa;IACjC,OAAO,CAAC,UAAU,EAAEA,OAAO;AAC7B;AAEA,SAASC,oBAAoBC,KAAc;IACzC,OAAOA,SAAS,OAAOA,UAAU,WAAYA,QAA6B,CAAC;AAC7E;AAEA,SAASC,gBAAgBC,GAAgB;IACvC,OAAO,OAAOA,IAAIC,EAAE,KAAK,YAAY,OAAOD,IAAIC,EAAE,KAAK,WAAWD,IAAIC,EAAE,GAAGC;AAC7E;AAEA,SAASC,6BAA6BC,IAGrC;IACC,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGF;IAEjC,IAAI,CAACE,WAAW;QACd,OAAO;YACLC,SAAS;YACTC,UAAU;QACZ;IACF;IAEA,IAAIF,UAAUG,YAAY,KAAKJ,UAAUI,YAAY,EAAE;QACrD,OAAO;YACLF,SAAS;YACTG,SAAShC;YACT8B,UAAUF,UAAUG,YAAY;QAClC;IACF;IAEA,IAAIH,UAAUK,qBAAqB,CAACC,QAAQ,CAACP,UAAUI,YAAY,GAAG;QACpE,OAAO;YACLF,SAAS;YACTG,SAAS;YACTF,UAAUF,UAAUG,YAAY;QAClC;IACF;IAEA,OAAO;QACLF,SAAS;QACTC,UAAUF,UAAUG,YAAY;IAClC;AACF;AAEA,SAASI,yBAAyBT,IAIjC;IACC,MAAM,EAAEC,SAAS,EAAES,eAAe,EAAER,SAAS,EAAE,GAAGF;IAElD,IAAIU,iBAAiB;QACnB,OAAOX,6BAA6B;YAClCE;YACAC;QACF;IACF;IAEA,OAAO3B,kBAAkB;QACvB0B;QACAC;IACF;AACF;AAEA,SAASS,yBAAyBX,IAGjC;IACC,MAAM,EAAEC,SAAS,EAAEW,IAAI,EAAE,GAAGZ;IAC5B,MAAMa,cAAcD,KAAKE,SAAS,CAAC,CAAClB,MAAQA,IAAIS,YAAY,KAAKJ,UAAUI,YAAY;IACvF,MAAMU,mBAAmB,IAAIzB,IAC3BsB,KACGI,MAAM,CACL,CAACpB,MACCA,IAAIS,YAAY,KAAKJ,UAAUI,YAAY,IAC3CT,IAAIW,qBAAqB,CAACC,QAAQ,CAACP,UAAUI,YAAY,GAE5DY,GAAG,CAAC,CAACrB,MAAQA,IAAIS,YAAY;IAElC,MAAMa,qBAAqB,CAACtB,MAC1BA,IAAIuB,kBAAkB,KAAKlB,UAAUkB,kBAAkB,IACvD,CAACJ,iBAAiBK,GAAG,CAACxB,IAAIS,YAAY;IAExC,IAAIQ,cAAc,GAAG;QACnB,OAAO;YACLQ,eAAe;YACfjB,UAAUH,UAAUkB,kBAAkB;YACtCG,mBAAmB;QACrB;IACF;IAEA,OAAO;QACLD,eAAeT,KAAKW,KAAK,CAACV,cAAc,GAAGW,IAAI,CAACN,qBAAqBb,gBAAgB;QACrFD,UAAUH,UAAUkB,kBAAkB;QACtCG,mBACEV,KAAKW,KAAK,CAAC,GAAGV,aAAaG,MAAM,CAACE,oBAAoBO,EAAE,CAAC,CAAC,IAAIpB,gBAAgB;IAClF;AACF;AAEA,SAASqB,yBACPC,gBAAwC,EACxCC,aAAqC;IAErC,OACED,iBAAiBvB,QAAQ,KAAKwB,cAAcxB,QAAQ,IACpDuB,iBAAiBL,iBAAiB,KAAKM,cAAcN,iBAAiB,IACtEK,iBAAiBN,aAAa,KAAKO,cAAcP,aAAa;AAElE;AAEA,SAASQ,8BAA8B7B,IAKtC;IAIC,MAAM,EAAE8B,WAAW,EAAEC,QAAQ,EAAEC,kBAAkB,EAAEC,SAAS,EAAE,GAAGjC;IACjE,MAAMkC,cAAcD,UAAUX,iBAAiB,IAAIW,UAAUZ,aAAa;IAE1E,IAAI,CAACa,aAAa;QAChB,OAAO;IACT;IAEA,MAAMhC,YAAY6B,SAASI,GAAG,CAACD;IAE/B,IAAI,CAAChC,WAAW;QACd,OAAO;IACT;IAEA,OAAO;QACLkC,cACE,AAACH,UAAUX,iBAAiB,KAAK,QAAQQ,gBAAgBE,sBACxDC,UAAUX,iBAAiB,KAAK,QAAQQ,gBAAgB,CAAC,CAAC,EAAEE,oBAAoB,GAC7E,YACA;QACN9B;IACF;AACF;AAEA,SAASmC,mBACPzB,IAAmB,EACnB0B,KAAa,EACbC,aAAqB;IAErB,MAAMC,YAAY5B,KAAK6B,MAAM;IAC7B,MAAMC,aAAaF,YAAY,IAAIG,KAAKC,GAAG,CAAC,GAAGD,KAAKE,IAAI,CAACL,YAAYF,UAAU;IAC/E,MAAMQ,OAAOH,KAAKI,GAAG,CAACJ,KAAKC,GAAG,CAACL,eAAe,IAAIG;IAClD,MAAMM,aAAa,AAACF,CAAAA,OAAO,CAAA,IAAKR;IAChC,MAAMW,WAAWrC,KAAKW,KAAK,CAACyB,YAAYA,aAAaV;IAErD,OAAO;QACL1B,MAAMqC;QACNC,aAAaJ,OAAOJ;QACpBS,aAAaL,OAAO;QACpBR;QACAc,UAAUN,OAAOJ,aAAaI,OAAO,IAAI;QACzCA;QACAO,eAAeb,cAAc,IAAI,IAAIQ,aAAa;QAClDM,UAAUR,OAAO,IAAIA,OAAO,IAAI;QAChCN;QACAE;IACF;AACF;AAEA,SAASa,cAAc7D,KAAoC;IACzD,IAAI8D,MAAMC,OAAO,CAAC/D,QAAQ;QACxB,MAAMgE,aAAahE,MAAMsB,MAAM,CAAC,CAAC2C,QAAU,OAAOA,UAAU,YAAYA,MAAMlB,MAAM,GAAG;QACvF,OAAOiB,WAAWjB,MAAM,GAAG,IAAIiB,WAAWE,IAAI,CAAC,OAAO9D;IACxD;IAEA,OAAO,OAAOJ,UAAU,YAAYA,MAAM+C,MAAM,GAAG,IAAI/C,QAAQI;AACjE;AAEA,SAAS+D,qBAAqBnE,KAAoB,EAAEoE,QAAgB;IAClE,IAAI,OAAOpE,UAAU,UAAU;QAC7B,OAAOoE;IACT;IAEA,MAAMC,cAAcC,OAAOC,QAAQ,CAACvE,OAAO;IAC3C,OAAOsE,OAAOE,KAAK,CAACH,gBAAgBA,eAAe,IAAID,WAAWC;AACpE;AAEA,SAASI,6BAA6BC,WAAqB,EAAEC,UAAkB;IAC7E,OAAOD,YACJpD,MAAM,CAAC,CAACsD,SAAWA,OAAOC,QAAQ,KAAKnF,8BACvC6B,GAAG,CAAC,CAACqD,SACJA,OAAOC,QAAQ,KAAKF,aAChB;YACE,GAAGC,MAAM;YACTE,QAAQ;QACV,IACAF;AAEV;AAEA,SAASG,iBACPL,WAAqB,EACrBxD,IAAmB,EACnB8D,wBAAqD;IAErD,OAAON,YAAYnD,GAAG,CAAC,CAACqD,SAAY,CAAA;YAClC,GAAGA,MAAM;YACTK,eAAe/D,KAAKK,GAAG,CAAC,CAACrB;gBACvB,MAAMgF,oBACJF,yBAAyBvC,GAAG,CAACvC,IAAIS,YAAY,KAAKT,IAAIiF,oBAAoB;gBAE5E,OAAOP,OAAOK,aAAa,EAAE,CAACC,kBAAkB,IAAI;YACtD;QACF,CAAA;AACF;AAEA,SAASE,qBAAqBlF,GAAgB;IAC5C,MAAMmF,SAASnF;IAEf,OAAO;QACLC,IAAImF,OAAOpF,IAAIC,EAAE,IAAID,IAAIS,YAAY;QACrC4E,WAAWC,QAAQH,OAAOE,SAAS;QACnCE,cAAcJ,OAAOI,YAAY;IACnC;AACF;AAEA,SAASC,yBAAyB9E,OAAgB;IAChD,OAAO,OAAOA,YAAY,YAAYjB,qBAAqB+B,GAAG,CAACd;AACjE;AAEA,SAAS+E,mBACPC,MAA6B;IAE7B,IAAIA,WAAW,aAAaA,WAAW,WAAWA,WAAW,aAAa;QACxE,OAAOA;IACT;IAEA,OAAO;AACT;AAEA,SAASC,kBAAkBvF,IAK1B;IACC,MAAM,EAAEwF,WAAW,EAAE5F,GAAG,EAAE6F,KAAK,EAAEC,CAAC,EAAE,GAAG1F;IACvC,MAAMsF,SAAStG,yBAAyBY;IACxC,MAAM+F,cAAc7G,sBAAsB;QACxC8G,aAAaJ,YAAYK,MAAM;QAC/BP;IACF;IACA,MAAMQ,cAAcT,mBAAmBC;IACvC,MAAMS,QAAQJ,cACT;QAAE,0BAA0BA;IAAY,IACzC7F;IAEJ,qBACE,KAACkG;QACCC,WAAW;YACT;YACA,CAAC,8BAA8B,EAAEH,aAAa;SAC/C,CAAClC,IAAI,CAAC;QACPsC,qBAAmBP,cAAc,SAAS7F;QAE1CiG,OAAOA;kBAENhH,sBAAsB;YACrBoH,aAAaX,YAAYY,MAAM;YAC/Bd;YACAI;QACF;OAPK9F,IAAIS,YAAY,IAAIoF;AAU/B;AAEA,SAASY,wBAAwBzF,IAAmB;IAClD,OAAO;QACL2D,UAAUnF;QACVoF,QAAQ;QACR8B,OAAO;YAAEC,QAAQ;QAAK;QACtBC,uBAAS,KAAC/I;QACVkH,eAAe/D,KAAKK,GAAG,CAAC,IAAM;IAChC;AACF;AAEA,SAASwF,wBAAwBC,OAAiB,EAAEC,WAAmB;IACrE,MAAMC,oBAAoBF,QAAQ5F,SAAS,CAAC,CAACwD,SAAWA,OAAOC,QAAQ,KAAK;IAC5E,MAAMsC,cAAcD,qBAAqB,IAAIA,oBAAoB,IAAI;IAErE,OAAO;WACFF,QAAQnF,KAAK,CAAC,GAAGsF;QACpBF;WACGD,QAAQnF,KAAK,CAACsF;KAClB;AACH;AAEA,SAASC,kBAAkB9G,IAU1B;IACC,MAAM,EACJwF,WAAW,EACXpB,WAAW,EACXxD,IAAI,EACJmG,mBAAmB,EACnBC,oBAAoB,EACpBhF,kBAAkB,EAClBiF,eAAe,EACfvB,CAAC,EACDrB,UAAU,EACX,GAAGrE;IACJ,MAAMkH,eAAe9C,YAAYnD,GAAG,CAAC,CAACqD;QACpC,IAAIA,OAAOC,QAAQ,KAAKF,YAAY;YAClC,OAAO;gBACL,GAAGC,MAAM;gBACTE,QAAQ;gBACRG,eAAe/D,KAAKK,GAAG,CAAC,CAACrB,KAAK6F,sBAC5B,KAACtG;wBACCS,KAAKA;wBACLoH,sBAAsBA;kCAGrB1C,OAAOK,aAAa,EAAE,CAACc,MAAM,IAAI9G,mBAAmBiB;uBAFhDA,IAAIS,YAAY,IAAIoF;YAK/B;QACF;QAEA,IAAInB,OAAOC,QAAQ,KAAK,WAAW;YACjC,OAAO;gBACL,GAAGD,MAAM;gBACTK,eAAe/D,KAAKK,GAAG,CAAC,CAACrB,KAAK6F,QAC5BF,kBAAkB;wBAChBC;wBACA5F;wBACA6F;wBACAC;oBACF;YAEJ;QACF;QAEA,IAAIpB,OAAOC,QAAQ,KAAK0C,iBAAiB;YACvC,OAAO;gBACL,GAAG3C,MAAM;gBACTK,eAAe/D,KAAKK,GAAG,CAAC,CAACrB,KAAK6F,QAC5B7F,IAAIuB,kBAAkB,KAAK,OACzBmD,OAAOK,aAAa,EAAE,CAACc,MAAM,IAAI,qBAEjC,KAACO;wBAAKC,WAAU;kCAA6D;uBAA3BrG,IAAIS,YAAY,IAAIoF;YAK5E;QACF;QAEA,OAAOnB;IACT;IAEA,IAAIyC,qBAAqB;QACvBG,aAAaC,OAAO,CAAC;YACnB5C,UAAU;YACVC,QAAQ;YACR8B,OAAO;gBAAEC,QAAQ;YAAK;YACtBC,uBAAS,KAACjJ;YACVoH,eAAe/D,KAAKK,GAAG,CAAC,CAACrB,KAAK6F,sBAC5B,KAACjI;oBAA0C4J,SAAStC,qBAAqBlF;mBAAzDA,IAAIS,YAAY,IAAIoF;QAExC;IACF;IAEA,IACEzD,sBACA,CAACkF,aAAaG,IAAI,CAAC,CAAC/C,SAAWA,OAAOC,QAAQ,KAAKnF,+BACnD;QACA,OAAOqH,wBAAwBS,cAAcb,wBAAwBzF;IACvE;IAEA,OAAOsG;AACT;AAEA,SAASI,mBAAmB,EAC1BC,kBAAkB,EAClBC,eAAe,EACfC,UAAU,EACVC,cAAc,EACdC,aAAa,EAOd;IACC,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAE,GAAG3K,aAAa;QAC1C2C,IAAI4H,WAAWK,MAAM;QACrBC,MAAMN;QACNO,UAAUL;IACZ;IACA,MAAMM,gBAAgB/C,QAAQsC;IAE9B,qBACE,KAACU;QACCjC,WAAU;QACVkC,kBAAgBP,SAAS,SAAS;QAClCQ,mBAAiBH,gBAAiBP,gBAAgBvH,UAAU,SAAS,UAAWL;QAChFuI,yBAAsB;kBAEtB,cAAA,KAACC;YAAGC,SAAShB;sBACX,cAAA,KAACiB;gBACCvC,WAAU;gBACVwC,qBAAmBhB,WAAWiB,KAAK;gBACnCC,KAAKd;;;;AAKf;AAEA,SAASe,kBAAkB,EACzBC,aAAa,EACbrB,eAAe,EACf5H,GAAG,EACH8H,cAAc,EACdoB,iBAAiB,EACjBC,kBAAkB,EAClBpB,aAAa,EACbqB,QAAQ,EACRC,iBAAiB,EAWlB;IACC,MAAM,EAAErB,MAAM,EAAEC,UAAU,EAAE,GAAG3K,aAAa;QAC1C2C,IAAIN,aAAaK,IAAIS,YAAY;QACjC0H,MAAM;YACJmB,UAAU;YACVJ;YACAC;YACAvJ,OAAOI,IAAIS,YAAY;QACzB;QACA2H,UAAUL;IACZ;IACA,MAAMM,gBAAgB/C,QAAQsC;IAC9B,MAAM2B,kBAAkB3B,oBAAoB5H,IAAIS,YAAY;IAE5D,qBACE,KAAC6H;QACCjC,WAAW,CAAC,IAAI,EAAE+C,WAAW,GAAG;QAChCb,kBAAgBP,SAAS,SAAS;QAClCQ,mBAAiBH,gBAAiBP,gBAAgBvH,UAAU,SAAS,UAAWL;QAChFsJ,WAASxJ,IAAIC,EAAE;QACfwJ,uBAAqBF,kBAAkB,SAAS;QAChDG,sBAAmB;QACnBX,KAAKd;kBAEJgB,cAAc5H,GAAG,CAAC,CAACqD,QAAQiF;YAC1B,MAAM,EAAEhF,QAAQ,EAAE,GAAGD;YAErB,qBACE,KAACgE;gBACCrC,WAAW,CAAC,KAAK,EAAE1B,SAASiF,OAAO,CAAC,OAAO,OAAO;gBAClDC,oCACElF,aAAanF,+BAA+B,SAASU;gBAEvD4J,6BAA2BnF,aAAa0E,oBAAoB,SAASnJ;0BAGpEwE,OAAOK,aAAa,EAAE,CAACqE,SAAS,IAAI;eAFhCO;QAKX;;AAGN;AAEA,SAASI,eAAe,EACtBnC,eAAe,EACfoC,WAAW,EACXC,oBAAoB,EACpBnD,OAAO,EACPqB,IAAI,EACJJ,aAAa,EACbsB,iBAAiB,EASlB;IACC,MAAMJ,gBAAgB7K,MAAM8L,OAAO,CACjC,IAAMpD,QAAQ1F,MAAM,CAAC,CAACsD,SAAWA,QAAQE,SACzC;QAACkC;KAAQ;IAEX,MAAMqD,uBAAuB/L,MAAM8L,OAAO,CACxC,IAAMjB,cAAcxB,IAAI,CAAC,CAAC/C,SAAWA,OAAOC,QAAQ,KAAKnF,+BACzD;QAACyJ;KAAc;IAEjB,MAAMmB,oBAAoBhM,MAAM8L,OAAO,CAAC,IAAM3L,uBAAuB4J,OAAO;QAACA;KAAK;IAClF,MAAM9H,YAAYuH,kBAAkBoC,YAAYzH,GAAG,CAACqF,oBAAoB,OAAO;IAC/E,MAAMyC,wBAAwBjM,MAAM8L,OAAO,CAAC;QAC1C,IAAI,CAAC7J,WAAW;YACd,OAAO,IAAIiK;QACb;QAEA,OAAO,IAAIA,IACTnC,KAAK9G,GAAG,CAAC,CAACrB,MAAQ;gBAChBA,IAAIS,YAAY;gBAChBI,yBAAyB;oBACvBR;oBACAS,iBAAiBmJ;oBACjB3J,WAAWN;gBACb;aACD;IAEL,GAAG;QAACK;QAAW4J;QAAsB9B;KAAK;IAC1C,MAAMoC,2BAA2BnM,MAAM8L,OAAO,CAAC;QAC7C,IAAI,CAAC7J,WAAW;YACd,OAAO,IAAIiK;QACb;QAEA,OAAO,IAAIA,IACTF,kBAAkB/I,GAAG,CAAC,CAACwG,aAAe;gBACpCA,WAAWK,MAAM;gBACjBrH,yBAAyB;oBACvBR;oBACAS,iBAAiBmJ;oBACjB3J,WACEuH,WAAWrH,QAAQ,KAAK,OACpBN,YACA8J,YAAYzH,GAAG,CAACsF,WAAWrH,QAAQ,KAAKN;gBAChD;aACD;IAEL,GAAG;QAACG;QAAW4J;QAAsBD;QAAaI;KAAkB;IAEpE,IAAInB,cAAcpG,MAAM,KAAK,GAAG;QAC9B,qBAAO,KAAC+F;sBAAI;;IACd;IAEA,qBACE,KAACA;QACCvC,WAAW;YACT;YACAhG,YAAY,oCAAoC;SACjD,CACEe,MAAM,CAACkE,SACPtB,IAAI,CAAC;QACRwG,4BAA0BL,uBAAuB,SAASjK;kBAE1D,cAAA,KAAC0I;YAAIvC,WAAU;sBACb,cAAA,MAACoE;gBAAMC,aAAY;gBAAIC,aAAY;;kCACjC,KAACC;kCACC,cAAA,KAACtC;sCACEW,cAAc5H,GAAG,CAAC,CAACqD,QAAQmB,sBAC1B,KAACgF;oCACChB,oCACEnF,OAAOC,QAAQ,KAAKnF,+BAA+B,SAASU;oCAE9D4J,6BACEpF,OAAOC,QAAQ,KAAK0E,oBAAoB,SAASnJ;oCAEnDD,IAAI,CAAC,QAAQ,EAAEyE,OAAOC,QAAQ,CAACiF,OAAO,CAAC,OAAO,OAAO;8CAGpDlF,OAAOkC,OAAO;mCAFVf;;;kCAOb,MAACiF;;4BACEV,iBAAiB,CAAC,EAAE,iBACnB,KAAC1C;gCACCC,oBAAoBsB,cAAcpG,MAAM;gCACxC+E,iBAAiBA;gCACjBC,YAAYuC,iBAAiB,CAAC,EAAE;gCAChCtC,gBAAgByC,yBAAyBhI,GAAG,CAAC6H,iBAAiB,CAAC,EAAE,CAAClC,MAAM;gCACxEH,eAAeA;+BACVqC,iBAAiB,CAAC,EAAE,CAAClC,MAAM,IAEhC;4BACHC,KAAK9G,GAAG,CAAC,CAACrB,KAAKoJ,yBACd,MAAChL,MAAM2M,QAAQ;;sDACb,KAAC/B;4CACCC,eAAeA;4CACfrB,iBAAiBA;4CACjB5H,KAAKA;4CACL8H,gBAAgBuC,sBAAsB9H,GAAG,CAACvC,IAAIS,YAAY;4CAC1DyI,mBAAmBkB,iBAAiB,CAAChB,WAAW,EAAE,CAAClB,MAAM;4CACzDiB,oBAAoBiB,iBAAiB,CAAChB,SAAS,CAAClB,MAAM;4CACtDH,eAAeA;4CACfqB,UAAUA;4CACVC,mBAAmBA;;wCAEpBe,iBAAiB,CAAChB,WAAW,EAAE,iBAC9B,KAAC1B;4CACCC,oBAAoBsB,cAAcpG,MAAM;4CACxC+E,iBAAiBA;4CACjBC,YAAYuC,iBAAiB,CAAChB,WAAW,EAAE;4CAC3CtB,gBAAgByC,yBAAyBhI,GAAG,CAC1C6H,iBAAiB,CAAChB,WAAW,EAAE,CAAClB,MAAM;4CAExCH,eAAeA;2CACVqC,iBAAiB,CAAChB,WAAW,EAAE,CAAClB,MAAM,IAE3C;;mCAvBelI,IAAIS,YAAY;;;;;;;AA+BnD;AAEA,eAAe,SAASuK,uBAAuB,EAC7CC,OAAO,EACPrF,WAAW,EACXsF,WAAW,EACX1G,WAAW,EACX4C,oBAAoB,EACpBhF,kBAAkB,EAClBiF,eAAe,EACf8D,KAAK,EACLC,UAAU,EACV3G,UAAU,EACV,GAAG4G,OACyB;IAC5B,MAAMC,SAASpN;IACf,MAAMqN,eAAepN;IACrB,MAAM,EAAEqN,MAAM,EAAE,GAAGzN;IACnB,MAAM0N,SAASzN;IACf,MAAM,EAAE0N,IAAI,EAAE,GAAGzN;IACjB,MAAM,CAAC2J,iBAAiB+D,mBAAmB,GAAGvN,MAAMwN,QAAQ,CAAgB;IAC5E,MAAM,CAACC,kBAAkBC,oBAAoB,GAAG1N,MAAMwN,QAAQ,CAA4B;IAC1F,MAAM,CAACG,cAAcC,gBAAgB,GAAG5N,MAAMwN,QAAQ,CAAc,IAAM,IAAIlM;IAC9E,MAAM,CAACuM,iBAAiBC,mBAAmB,GAAG9N,MAAMwN,QAAQ,CAACR;IAC7D,MAAM,CAACe,kBAAkBC,oBAAoB,GAAGhO,MAAMwN,QAAQ,CAAgB;IAE9ExN,MAAMiO,SAAS,CAAC;QACdH,mBAAmBd;IACrB,GAAG;QAACA;KAAW;IAEf,MAAMkB,YAAYlO,MAAMmO,WAAW,CAAC,CAAC3M;QACnCoM,gBAAgB,CAACQ;YACf,MAAMC,YAAY,IAAI/M,IAAI8M;YAE1B,IAAIC,UAAUjL,GAAG,CAAC5B,QAAQ;gBACxB6M,UAAUC,MAAM,CAAC9M;YACnB,OAAO;gBACL6M,UAAUE,GAAG,CAAC/M;YAChB;YAEA,OAAO6M;QACT;IACF,GAAG,EAAE;IACL,MAAMvK,cAAc9D,MAAM8L,OAAO,CAAC;QAChC,MAAM0C,kBAAkBrB,aAAasB,MAAM,CAAC;QAE5C,IAAID,gBAAgB/J,MAAM,GAAG,GAAG;YAC9B,OAAOc,cAAciJ;QACvB;QAEA,OAAOjJ,cAAcwH,MAAM2B,IAAI;IACjC,GAAG;QAAC3B,MAAM2B,IAAI;QAAEvB;KAAa;IAC7B,MAAMwB,sBAAsBzH,QAC1BlD,sBACGF,CAAAA,gBAAgBE,sBAAsBF,gBAAgB,CAAC,CAAC,EAAEE,oBAAoB,AAAD;IAElF,MAAM4K,eAAe5O,MAAM8L,OAAO,CAChC,IACEjG,qBACEsH,aAAahJ,GAAG,CAAC,UACjB,OAAO4I,MAAMzI,KAAK,KAAK,YAAYyI,MAAMzI,KAAK,GAAG,IAAIyI,MAAMzI,KAAK,GAAG,KAEvE;QAACyI,MAAMzI,KAAK;QAAE6I;KAAa;IAE7B,MAAM0B,uBAAuB7O,MAAM8L,OAAO,CACxC,IACEjG,qBACEsH,aAAahJ,GAAG,CAAC,SACjB,OAAO4I,MAAMjI,IAAI,KAAK,YAAYiI,MAAMjI,IAAI,GAAG,IAAIiI,MAAMjI,IAAI,GAAG,IAEpE;QAACiI,MAAMjI,IAAI;QAAEqI;KAAa;IAE5B,MAAM2B,cAAc9O,MAAM8L,OAAO,CAC/B,IACErL,kBAAkBoN,iBAAiB;YACjC5E;YACAyF,MAAM5K;QACR,IACF;QAACA;QAAa+J;QAAiB5E;KAAgB;IAEjD,MAAM8F,mBAAmB/O,MAAM8L,OAAO,CACpC,IAAMkD,KAAKC,SAAS,CAAC;YAAChC,MAAMiC,cAAc;YAAEjC,MAAMkC,QAAQ;YAAEhC,aAAaiC,QAAQ;SAAG,GACpF;QAACnC,MAAMiC,cAAc;QAAEjC,MAAMkC,QAAQ;QAAEhC;KAAa;IAEtD,MAAMkC,iBAAiBrP,MAAM8L,OAAO,CAClC,IAAO,CAAA;YACLtC;YACAsD;YACAa;YACAI;YACAG;QACF,CAAA,GACA;QAAC1E;QAAiBsD;QAAaa;QAAcI;QAAkBG;KAAU;IAG3ElO,MAAMiO,SAAS,CAAC;QACdV,mBAAmB;QACnBG,oBAAoB;QACpBE,gBAAgB,IAAItM;IACtB,GAAG;QAACyN;KAAiB;IAErB,MAAMO,cAActP,MAAM8L,OAAO,CAC/B,IAAMlL,mBAAmBkO,aAAanB,eACtC;QAACmB;QAAanB;KAAa;IAE7B,MAAM4B,gBAAgBvP,MAAM8L,OAAO,CACjC,IAAMzH,mBAAmBiL,aAAaV,cAAcC,uBACpD;QAACD;QAAcC;QAAsBS;KAAY;IAEnD,MAAME,gBAAgBD,cAAc3M,IAAI;IACxC,MAAMgJ,cAAc5L,MAAM8L,OAAO,CAC/B,IAAM,IAAII,IAAI4C,YAAY7L,GAAG,CAAC,CAACrB,MAAQ;gBAACA,IAAIS,YAAY;gBAAET;aAAI,IAC9D;QAACkN;KAAY;IAEf,MAAMW,oBAAoBzP,MAAM8L,OAAO,CACrC,IAAM,IAAII,IAAIsD,cAAcvM,GAAG,CAAC,CAACrB,MAAQ;gBAACA,IAAIS,YAAY;gBAAET;aAAI,IAChE;QAAC4N;KAAc;IAEjB,MAAM9I,2BAA2B1G,MAAM8L,OAAO,CAC5C,IAAM,IAAII,IAAIW,QAAQ5J,GAAG,CAAC,CAACrB,KAAK6F,QAAU;gBAAC7F,IAAIS,YAAY;gBAAEoF;aAAM,IACnE;QAACoF;KAAQ;IAEX,MAAM6C,wBAAwB1P,MAAM8L,OAAO,CACzC,IAAM3F,6BAA6BC,aAAaC,aAChD;QAACD;QAAaC;KAAW;IAE3B,MAAMsJ,uBAAuB3P,MAAM8L,OAAO,CACxC,IAAMrF,iBAAiBiJ,uBAAuBF,eAAe9I,2BAC7D;QAACgJ;QAAuBF;QAAe9I;KAAyB;IAElE,MAAMkJ,eAAe5P,MAAM8L,OAAO,CAChC,IACEhD,kBAAkB;YAChBtB;YACApB,aAAauJ;YACb/M,MAAM4M;YACNzG,qBAAqBkE,MAAMlE,mBAAmB;YAC9CC;YACAhF;YACAiF;YACAvB,GAAG4F,KAAK5F,CAAC;YACTrB;QACF,IACF;QACEsJ;QACAH;QACAhI;QACAwB;QACAhF;QACAiF;QACAgE,MAAMlE,mBAAmB;QACzBuE,KAAK5F,CAAC;QACNrB;KACD;IAEH,MAAMwJ,gBAAgBrG,kBAAkBiG,kBAAkBtL,GAAG,CAACqF,oBAAoB,OAAO;IACzF,MAAMsG,wBAAwB9P,MAAM8L,OAAO,CAAC;QAC1C,IAAI,CAAC+D,eAAe;YAClB,OAAO;QACT;QAEA,IAAI,CAACpC,kBAAkB;YACrB,OAAOjN,iBAAiB;gBACtBoB,KAAKiO;gBACL9L,UAAU6H;YACZ;QACF;QAEA,MAAM1J,YAAY9B,uBAAuB;YACvC2D,UAAU6H;YACVnC,YAAYgE;QACd;QACA,MAAM/D,iBAAiBjH,yBAAyB;YAC9CR,WAAW4N;YACXnN,iBAAiBiM;YACjBzM,WAAWA,aAAaJ;QAC1B;QAEA,IAAI,CAAC4H,eAAevH,OAAO,EAAE;YAC3B,OAAO3B,iBAAiB;gBACtBoB,KAAKiO;gBACL9L,UAAU6H;YACZ;QACF;QAEA,OAAOlL,4BAA4B;YACjCuB,WAAW4N;YACX9L,UAAU6H;YACV1J,WAAWA,aAAaJ;QAC1B;IACF,GAAG;QAAC+N;QAAepC;QAAkB7B;QAAa+C;KAAoB;IACtE,MAAMhF,gBAAgBoE,qBAAqB;IAC3C,MAAMgC,UAAU3Q,WACdD,UAAUF,eAAe;QACvB+Q,sBAAsB;YACpBC,UAAU;QACZ;IACF;IAEF,MAAMC,eAAelQ,MAAMmO,WAAW,CACpC,OAAOnM;QACL,MAAM,EAAEI,QAAQ,EAAEZ,KAAK,EAAE,GAAGQ;QAC5B,MAAMmO,SAAS,IAAIC;QAEnB,IAAI/C,QAAQgD,MAAM;YAChBF,OAAOG,GAAG,CAAC,UAAUjD,OAAOgD,IAAI;QAClC;QAEA,MAAME,WAAW,MAAMC,MACrB,GAAGpD,OAAOqD,MAAM,CAACC,GAAG,CAAC,CAAC,EAAEzD,MAAMiC,cAAc,CAAC,CAAC,EAAEyB,mBAAmBnP,OAAO,KAAK,EAC7E2O,OAAOS,IAAI,GAAG,IAAI,CAAC,CAAC,EAAET,OAAOf,QAAQ,IAAI,GAAG,IAC5C,EACF;YACEyB,MAAM7B,KAAKC,SAAS,CAAC;gBACnB7M;YACF;YACA0O,aAAa;YACbC,SAAS;gBACP,mBAAmBzD,KAAK0D,QAAQ;gBAChC,gBAAgB;gBAChB,CAAC/Q,0BAA0B,EAAEC;YAC/B;YACA+Q,QAAQ;QACV;QAEF,MAAMC,SAAU,MAAMX,SAASY,IAAI,GAAGC,KAAK,CAAC,IAAM;QAMlD,IAAI,CAACb,SAASc,EAAE,EAAE;YAChB,MAAM,IAAIC,MAAMJ,QAAQ5O,WAAW;QACrC;QAEA,OAAO4O;IACT,GACA;QAAC9D,OAAOqD,MAAM,CAACC,GAAG;QAAEpD,KAAK0D,QAAQ;QAAE3D,QAAQgD;QAAMpD,MAAMiC,cAAc;KAAC;IAExE,MAAMqC,kBAAkBvR,MAAMmO,WAAW,CACvC,OAAOnM;QAKL,MAAM,EAAEwP,UAAU,EAAEpN,YAAY,EAAElC,SAAS,EAAE,GAAGF;QAChD,MAAMyP,WAAW9P,gBAAgBO;QAEjC,IAAI,CAAC8B,sBAAsByN,aAAa3P,WAAW;YACjD,OAAOA;QACT;QAEA,MAAMqO,SAAS,IAAIC;QAEnB,IAAI/C,QAAQgD,MAAM;YAChBF,OAAOG,GAAG,CAAC,UAAUjD,OAAOgD,IAAI;QAClC;QAEA,MAAME,WAAW,MAAMC,MACrB,GAAGpD,OAAOqD,MAAM,CAACC,GAAG,CAAC,QAAQ,EAAEP,OAAOS,IAAI,GAAG,IAAI,CAAC,CAAC,EAAET,OAAOf,QAAQ,IAAI,GAAG,IAAI,EAC/E;YACEyB,MAAM7B,KAAKC,SAAS,CAAC;gBACnBC,gBAAgBjC,MAAMiC,cAAc;gBACpCwC,YAAY;oBAACF;iBAAW;gBACxBpN;gBACAJ;gBACA2N,QAAQ;oBACN9P,IAAI4P;oBACJG,KAAK1P,SAAS,CAAC8B,mBAAmB;gBACpC;YACF;YACA8M,aAAa;YACbC,SAAS;gBACP,mBAAmBzD,KAAK0D,QAAQ;gBAChC,gBAAgB;gBAChB,CAAC/Q,0BAA0B,EAAEC;YAC/B;YACA+Q,QAAQ;QACV;QAEF,MAAMC,SAAU,MAAMX,SAASY,IAAI,GAAGC,KAAK,CAAC,IAAM;QAOlD,IAAIb,SAASjJ,MAAM,KAAK,KAAK;YAC3B,MAAM,IAAIgK,MAAM;QAClB;QAEA,IAAI,CAACf,SAASc,EAAE,EAAE;YAChB,MAAM,IAAIC,MACR;QAEJ;QAEA,IAAIJ,QAAQ5O,YAAY,qBAAqB;YAC3C,MAAM,IAAIgP,MACR;QAEJ;QAEA,OAAOJ,QAAQW,aAAa,CAAC,EAAE;IACjC,GACA;QACEzE,OAAOqD,MAAM,CAACC,GAAG;QACjBpD,KAAK0D,QAAQ;QACb3D,QAAQgD;QACRrM;QACAiJ,MAAMiC,cAAc;KACrB;IAEH,MAAM4C,2BAA2B9R,MAAMmO,WAAW,CAChD,OAAOnM;QAKL,MAAM,EAAEC,SAAS,EAAEwH,UAAU,EAAEjI,KAAK,EAAE,GAAGQ;QAEzC,IAAI,CAACgC,oBAAoB;YACvB;QACF;QAEA,MAAM9B,YAAY9B,uBAAuB;YACvC2D,UAAU6H;YACVnC;QACF;QACA,MAAMC,iBAAiB3H,6BAA6B;YAClDE;YACAC,WAAWA,aAAaJ;QAC1B;QAEA,IAAI,CAAC4H,eAAevH,OAAO,EAAE;YAC3B,IAAI,CAACiF,yBAAyBsC,eAAepH,OAAO,GAAG;gBACrD5C,MAAMqS,KAAK,CAACrI,eAAepH,OAAO,IAAI;YACxC;YAEA;QACF;QAEA,MAAM2B,YAAY5D,gCAAgC;YAChD4B;YACAW,MAAM4M;YACNzL,UAAU6H;YACVnC;QACF;QAEA,IAAI,CAACxF,WAAW;YACd;QACF;QAEA,MAAMN,mBAAmBhB,yBAAyB;YAChDV;YACAW,MAAM4M;QACR;QACA,MAAMwC,gBAAgB/P,UAAUkB,kBAAkB,KAAKc,UAAU7B,QAAQ;QACzE,MAAM6P,eAAevO,yBAAyBC,kBAAkBM;QAChE,MAAMiO,gBAAgBD,eAClBpO,8BAA8B;YAC5BC;YACAC,UAAU6H;YACV5H;YACAC;QACF,KACA;QAEJ,IAAI,CAAC+N,iBAAiB,CAACE,eAAe;YACpC;QACF;QAEA,MAAMV,aAAa7P,gBAAgBM;QAEnC,IAAIuP,eAAe1P,WAAW;YAC5B;QACF;QAEA,MAAMqQ,YAAYlO,UAAU7B,QAAQ,GAAGwJ,YAAYzH,GAAG,CAACF,UAAU7B,QAAQ,IAAIN;QAC7E,MAAMsQ,kBACJnO,UAAU7B,QAAQ,KAAK,OACnB,OACA+P,YACExQ,gBAAgBwQ,cAAclO,UAAU7B,QAAQ,GAChD6B,UAAU7B,QAAQ;QAC1B,IAAIiQ,sBAAsB;QAE1BrE,oBAAoBxM;QAEpB,IAAI;YACF,IAAIwQ,eAAe;gBACjB,MAAM9B,aAAa;oBACjB9N,UAAU6B,UAAU7B,QAAQ;oBAC5BZ;gBACF;gBACA6Q,sBAAsB;YACxB;YAEA,MAAMC,iBAAiBJ,gBACnB,MAAMX,gBAAgB;gBACpBC;gBACApN,cAAc8N,cAAc9N,YAAY;gBACxClC,WAAWgQ,cAAchQ,SAAS;YACpC,KACAJ;YAEJ,IAAIkQ,iBAAiB,OAAOM,mBAAmB,UAAU;gBACvDxE,mBAAmB,CAACyE,cAClBA,YAAYtP,GAAG,CAAC,CAACrB,MACfoF,OAAOpF,IAAIC,EAAE,IAAI,QAAQmF,OAAOwK,cAC5B;4BACE,GAAG5P,GAAG;4BACN,GAAIoQ,gBACA;gCACE,CAAC/I,gBAAgB,EAAEmJ;4BACrB,IACA,CAAC,CAAC;4BACN,GAAI,OAAOE,mBAAmB,WAC1B;gCACE,CAACtO,mBAAmB,EAAEsO;4BACxB,IACA,CAAC,CAAC;wBACR,IACA1Q;YAGV;YAEA,IAAIoQ,eAAe;gBACjBtS,MAAM8S,OAAO,CAAC,CAAC,OAAO,EAAE7R,mBAAmBsB,WAAW,EAAE,CAAC;YAC3D;YAEAjC,MAAMyS,eAAe,CAAC;gBACpBvF,OAAOwF,OAAO;YAChB;QACF,EAAE,OAAOX,OAAO;YACd,MAAMzP,UACJyP,iBAAiBT,SAASS,MAAMzP,OAAO,GAAGyP,MAAMzP,OAAO,GAAG;YAE5D5C,MAAMqS,KAAK,CACTM,sBACI,CAAC,OAAO,EAAE1R,mBAAmBsB,WAAW,0CAA0C,EAAEK,SAAS,GAC7FA;YAGN,IAAI+P,qBAAqB;gBACvBrS,MAAMyS,eAAe,CAAC;oBACpBvF,OAAOwF,OAAO;gBAChB;YACF;QACF,SAAU;YACR1E,oBAAoB;QACtB;IACF,GACA;QACEpC;QACA9H;QACAoM;QACAlM;QACAwL;QACAvG;QACAsI;QACArE;KACD;IAEH,MAAMyF,mBAAmB3S,MAAMmO,WAAW,CAAC;QACzCZ,mBAAmB;QACnBG,oBAAoB;IACtB,GAAG,EAAE;IACL,MAAMkF,kBAAkB5S,MAAMmO,WAAW,CACvC,CAAC0E;QACC,MAAMC,WAAWrR,oBAAoBoR,MAAMrM,MAAM,CAACuD,IAAI,CAACgJ,OAAO;QAE9D,IAAI,CAACjG,eAAenD,eAAe;YACjC;QACF;QAEA,MAAMnI,QAAQsR,SAAStR,KAAK;QAE5B,IAAI,OAAOA,UAAU,YAAYiO,kBAAkBrM,GAAG,CAAC5B,QAAQ;YAC7D+L,mBAAmB/L;YACnBkM,oBAAoB;QACtB;IACF,GACA;QAACZ;QAAanD;QAAe8F;KAAkB;IAEjD,MAAMuD,iBAAiBhT,MAAMmO,WAAW,CAAC,CAAC0E;QACxC,MAAMI,WAAWJ,MAAMK,IAAI,EAAEnJ,KAAKgJ;QAElC,IAAI,CAACE,UAAU;YACbvF,oBAAoB;YACpB;QACF;QAEA,IAAIuF,SAAS/H,QAAQ,KAAK,UAAU;YAClCwC,oBAAoBuF;YACpB;QACF;QAEA,IAAIA,SAAS/H,QAAQ,KAAK,OAAO;YAC/BwC,oBAAoBuF;YACpB;QACF;QAEAvF,oBAAoB;IACtB,GAAG,EAAE;IACL,MAAMyF,gBAAgBnT,MAAMmO,WAAW,CACrC,OAAO0E;QACL,MAAMC,WAAWrR,oBAAoBoR,MAAMrM,MAAM,CAACuD,IAAI,CAACgJ,OAAO;QAE9D,MAAMvR,QAAQsR,SAAStR,KAAK;QAC5B,MAAMS,YAAY,OAAOT,UAAU,WAAWiO,kBAAkBtL,GAAG,CAAC3C,UAAU,OAAO;QACrF,MAAMyR,WAAWJ,MAAMK,IAAI,EAAEnJ,KAAKgJ;QAElCxF,mBAAmB;QACnBG,oBAAoB;QAEpB,IAAI,CAAClM,SAAS,CAACS,aAAa,CAACgR,UAAU;YACrC;QACF;QAEA,IAAItE,uBAAuB3K,oBAAoB;YAC7C,MAAM8N,yBAAyB;gBAC7B7P;gBACAwH,YAAYwJ;gBACZzR;YACF;YACA;QACF;QAEA,MAAMU,YAAY9B,uBAAuB;YACvC2D,UAAU6H;YACVnC,YAAYwJ;QACd;QACA,MAAMvJ,iBAAiBnJ,kBAAkB;YACvC0B;YACAC,WAAWA,aAAaJ;QAC1B;QAEA,IAAI,CAAC4H,eAAevH,OAAO,EAAE;YAC3B,IAAI,CAACiF,yBAAyBsC,eAAepH,OAAO,GAAG;gBACrD5C,MAAMqS,KAAK,CAACrI,eAAepH,OAAO,IAAI;YACxC;YAEA;QACF;QAEA0L,oBAAoBxM;QAEpB,IAAI;YACF,MAAM0O,aAAa;gBACjB9N,UAAUsH,eAAetH,QAAQ;gBACjCZ;YACF;YAEA9B,MAAM8S,OAAO,CAAC,CAAC,OAAO,EAAE7R,mBAAmBsB,WAAW,EAAE,CAAC;YACzDjC,MAAMyS,eAAe,CAAC;gBACpBvF,OAAOwF,OAAO;YAChB;QACF,EAAE,OAAOX,OAAO;YACd,MAAMzP,UACJyP,iBAAiBT,SAASS,MAAMzP,OAAO,GAAGyP,MAAMzP,OAAO,GAAG;YAE5D,IAAI8E,yBAAyB9E,UAAU;gBACrC;YACF;YAEA5C,MAAMqS,KAAK,CAACzP;QACd,SAAU;YACR0L,oBAAoB;QACtB;IACF,GACA;QACEpC;QACAkG;QACAnD;QACAuB;QACAlM;QACAyL;QACAvC;KACD;IAEH,MAAMkG,oBAAoBpT,MAAMmO,WAAW,CACzC,CAAC0E;QACC,KAAKM,cAAcN;IACrB,GACA;QAACM;KAAc;IAGjB,MAAME,YAAYrT,MAAM8L,OAAO,CAC7B,kBACE,MAAC/M;YACCuU,oBAAoBzS;YACpB0S,cAAcZ;YACda,WAAWJ;YACXK,YAAYT;YACZU,aAAad;YACb7C,SAASA;;8BAET,KAACpE;oBACCnC,iBAAiBA;oBACjBoC,aAAaA;oBACbC,sBAAsB8C;oBACtBjG,SAASkH;oBACT7F,MAAMyF;oBACN7F,eAAeA;oBACfsB,mBAAmB5E;;8BAErB,KAACrH;oBAAY2U,eAAe;oBAAM5L,OAAO;wBAAE6L,QAAQ;oBAAW;8BAC3D9D,sCACC,KAACtF;wBAAIvC,WAAU;kCAAgC6H;yBAC7C;;;YAIV;QACEA;QACAtG;QACAmJ;QACAS;QACAJ;QACAJ;QACAjJ;QACAiC;QACA+C;QACAa;QACAO;QACAH;QACAvJ;KACD;IAGH,qBACE,KAACmE;QAAIvC,WAAW/G,OAAO2S,IAAI;kBACzB,cAAA,KAAC5S;YAAiBS,OAAO2N;sBACvB,cAAA,KAAC/P;gBACC4P,gBAAgBjC,MAAMiC,cAAc;gBACpCnF,MAAMwF;gBACNuE,kBAAkB;gBAClB9P,oBAAoBA;gBACpB+I,OAAO;oBACL,GAAGA,KAAK;oBACRzI,OAAOsK;oBACP9J,MAAMyK,cAAczK,IAAI;oBACxB4J,MAAM5K;gBACR;0BAEA,cAAA,KAACzE;oBAAiB,GAAG4N,KAAK;oBAAE7G,aAAauJ;oBAAsBoE,OAAOV;;;;;AAKhF"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload-nested-docs-page-tree",
3
- "version": "1.2.3",
3
+ "version": "1.2.4",
4
4
  "description": "Page tree plugin for Payload nested docs collections",
5
5
  "license": "MIT",
6
6
  "author": "WLF Studios",