payload-nested-docs-page-tree 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -0
  3. package/dist/components/PageTreeContext.d.ts +15 -0
  4. package/dist/components/PageTreeContext.js +26 -0
  5. package/dist/components/PageTreeContext.js.map +1 -0
  6. package/dist/components/PageTreeListView.client.d.ts +17 -0
  7. package/dist/components/PageTreeListView.client.js +960 -0
  8. package/dist/components/PageTreeListView.client.js.map +1 -0
  9. package/dist/components/PageTreeListView.module.css +358 -0
  10. package/dist/components/PageTreeListView.server.d.ts +3 -0
  11. package/dist/components/PageTreeListView.server.js +390 -0
  12. package/dist/components/PageTreeListView.server.js.map +1 -0
  13. package/dist/components/PageTreeTitleCell.d.ts +6 -0
  14. package/dist/components/PageTreeTitleCell.js +80 -0
  15. package/dist/components/PageTreeTitleCell.js.map +1 -0
  16. package/dist/endpoints/createMovePageEndpoint.d.ts +5 -0
  17. package/dist/endpoints/createMovePageEndpoint.js +265 -0
  18. package/dist/endpoints/createMovePageEndpoint.js.map +1 -0
  19. package/dist/exports/client.d.ts +1 -0
  20. package/dist/exports/client.js +3 -0
  21. package/dist/exports/client.js.map +1 -0
  22. package/dist/exports/rsc.d.ts +1 -0
  23. package/dist/exports/rsc.js +3 -0
  24. package/dist/exports/rsc.js.map +1 -0
  25. package/dist/index.d.ts +4 -0
  26. package/dist/index.js +142 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/types.d.ts +35 -0
  29. package/dist/types.js +8 -0
  30. package/dist/types.js.map +1 -0
  31. package/dist/utilities/badgeConfig.d.ts +2 -0
  32. package/dist/utilities/badgeConfig.js +30 -0
  33. package/dist/utilities/badgeConfig.js.map +1 -0
  34. package/dist/utilities/dropTargets.d.ts +31 -0
  35. package/dist/utilities/dropTargets.js +73 -0
  36. package/dist/utilities/dropTargets.js.map +1 -0
  37. package/dist/utilities/moveValidation.d.ts +11 -0
  38. package/dist/utilities/moveValidation.js +44 -0
  39. package/dist/utilities/moveValidation.js.map +1 -0
  40. package/dist/utilities/pageTree.d.ts +37 -0
  41. package/dist/utilities/pageTree.js +300 -0
  42. package/dist/utilities/pageTree.js.map +1 -0
  43. package/dist/utilities/pageTreeCollision.d.ts +16 -0
  44. package/dist/utilities/pageTreeCollision.js +70 -0
  45. package/dist/utilities/pageTreeCollision.js.map +1 -0
  46. package/dist/utilities/pageTreeConfig.d.ts +3 -0
  47. package/dist/utilities/pageTreeConfig.js +21 -0
  48. package/dist/utilities/pageTreeConfig.js.map +1 -0
  49. package/dist/utilities/status.d.ts +17 -0
  50. package/dist/utilities/status.js +72 -0
  51. package/dist/utilities/status.js.map +1 -0
  52. package/package.json +115 -0
@@ -0,0 +1,390 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { getColumns, renderTable } from '@payloadcms/ui/rsc';
4
+ import { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig';
5
+ import { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere } from 'payload/shared';
6
+ import PageTreeListViewClient from './PageTreeListView.client.js';
7
+ import { buildPageTreeDocs } from '../utilities/pageTree.js';
8
+ import { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js';
9
+ import { withPageTreeDisplayStatuses } from '../utilities/status.js';
10
+ function isNumericSegment(segment) {
11
+ return /^\d+$/.test(segment);
12
+ }
13
+ function getKeySegments(key) {
14
+ const matches = key.match(/([^[\]]+)/g);
15
+ return matches ? matches.filter(Boolean) : [
16
+ key
17
+ ];
18
+ }
19
+ function setNestedValue(target, key, value) {
20
+ const segments = getKeySegments(key);
21
+ if (segments.length === 0) {
22
+ return;
23
+ }
24
+ let current = target;
25
+ for(let index = 0; index < segments.length; index += 1){
26
+ const segment = segments[index];
27
+ const isLastSegment = index === segments.length - 1;
28
+ const nextSegment = segments[index + 1];
29
+ const nextContainer = isNumericSegment(nextSegment ?? '') ? [] : {};
30
+ if (isLastSegment) {
31
+ if (Array.isArray(current)) {
32
+ const arrayIndex = Number(segment);
33
+ current[arrayIndex] = value;
34
+ } else {
35
+ const existingValue = current[segment];
36
+ if (existingValue === undefined) {
37
+ current[segment] = value;
38
+ } else if (Array.isArray(existingValue)) {
39
+ existingValue.push(value);
40
+ } else {
41
+ current[segment] = [
42
+ existingValue,
43
+ value
44
+ ];
45
+ }
46
+ }
47
+ return;
48
+ }
49
+ if (Array.isArray(current)) {
50
+ const arrayIndex = Number(segment);
51
+ const existingValue = current[arrayIndex];
52
+ if (typeof existingValue !== 'object' || existingValue === null || Array.isArray(existingValue) !== Array.isArray(nextContainer)) {
53
+ current[arrayIndex] = nextContainer;
54
+ }
55
+ current = current[arrayIndex];
56
+ continue;
57
+ }
58
+ const existingValue = current[segment];
59
+ if (typeof existingValue !== 'object' || existingValue === null || Array.isArray(existingValue) !== Array.isArray(nextContainer)) {
60
+ current[segment] = nextContainer;
61
+ }
62
+ current = current[segment];
63
+ }
64
+ }
65
+ function parseSearchParams(searchParams) {
66
+ const parsed = {};
67
+ for (const [key, value] of Object.entries(searchParams ?? {})){
68
+ if (Array.isArray(value)) {
69
+ for (const entry of value){
70
+ if (typeof entry === 'string') {
71
+ setNestedValue(parsed, key, entry);
72
+ }
73
+ }
74
+ } else if (typeof value === 'string') {
75
+ setNestedValue(parsed, key, value);
76
+ }
77
+ }
78
+ for (const key of [
79
+ 'columns',
80
+ 'queryByGroup'
81
+ ]){
82
+ if (typeof parsed[key] === 'string') {
83
+ try {
84
+ parsed[key] = JSON.parse(parsed[key]);
85
+ } catch {
86
+ // Leave invalid persisted values untouched and let Payload ignore them.
87
+ }
88
+ }
89
+ }
90
+ const sanitized = {
91
+ ...parsed
92
+ };
93
+ for (const [key, value] of Object.entries(sanitized)){
94
+ if (key === 'columns' && (typeof value === 'string' && value === '[]' || Array.isArray(value) && value.length === 0)) {
95
+ delete sanitized[key];
96
+ continue;
97
+ }
98
+ if (key === 'where' && typeof value === 'object' && value !== null && !Object.keys(value).length) {
99
+ delete sanitized[key];
100
+ continue;
101
+ }
102
+ if ((key === 'limit' || key === 'page') && typeof value === 'string') {
103
+ const parsedValue = Number.parseInt(value, 10);
104
+ sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue;
105
+ }
106
+ if (key === 'page' && value === 0) {
107
+ delete sanitized[key];
108
+ continue;
109
+ }
110
+ if (value === '') {
111
+ delete sanitized[key];
112
+ }
113
+ }
114
+ return sanitized;
115
+ }
116
+ function getQueryValue(incomingValue, fallbackValue) {
117
+ return incomingValue === undefined ? fallbackValue : incomingValue;
118
+ }
119
+ function normalizeLimit(value, fallback) {
120
+ return typeof value === 'number' && value > 0 ? value : fallback;
121
+ }
122
+ function normalizePage(value, fallback) {
123
+ return typeof value === 'number' && value > 0 ? value : fallback;
124
+ }
125
+ function normalizeSearch(value) {
126
+ return typeof value === 'string' ? value : '';
127
+ }
128
+ function normalizeSort(value) {
129
+ if (Array.isArray(value)) {
130
+ const sortValues = value.filter((entry)=>typeof entry === 'string' && entry.length > 0);
131
+ return sortValues.length > 0 ? sortValues.join(',') : undefined;
132
+ }
133
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
134
+ }
135
+ function getOrderableFieldName(collectionConfig) {
136
+ return collectionConfig.orderable === true ? '_order' : undefined;
137
+ }
138
+ function getDefaultSort(collectionConfig) {
139
+ return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined;
140
+ }
141
+ function getEffectiveTreeSort(args) {
142
+ const { defaultSort, orderableFieldName, sort } = args;
143
+ if (sort) {
144
+ return sort;
145
+ }
146
+ if (orderableFieldName && (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)) {
147
+ return defaultSort;
148
+ }
149
+ return undefined;
150
+ }
151
+ function normalizeWhere(value) {
152
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
153
+ return value;
154
+ }
155
+ return undefined;
156
+ }
157
+ function getCurrentQuery(props, fallbackLimit) {
158
+ const parsedSearchQuery = parseSearchParams(props.searchParams);
159
+ const preferenceQuery = props.listPreferences ?? {};
160
+ const mergedQuery = {
161
+ ...preferenceQuery,
162
+ ...parsedSearchQuery
163
+ };
164
+ return {
165
+ ...mergedQuery,
166
+ limit: normalizeLimit(getQueryValue(mergedQuery.limit, fallbackLimit), fallbackLimit),
167
+ page: normalizePage(getQueryValue(mergedQuery.page, props.data.page), props.data.page),
168
+ search: normalizeSearch(mergedQuery.search),
169
+ sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,
170
+ where: normalizeWhere(mergedQuery.where)
171
+ };
172
+ }
173
+ function getBaseFilterArgs(props, req, query, locale) {
174
+ return {
175
+ limit: 0,
176
+ locale,
177
+ page: 1,
178
+ req,
179
+ sort: normalizeSort(query.sort) ?? (typeof props.collectionConfig.defaultSort === 'string' ? props.collectionConfig.defaultSort : 'id')
180
+ };
181
+ }
182
+ async function getDocsWithDisplayStatus(args) {
183
+ const { collectionConfig, collectionSlug, docs, locale, payload, req, user } = args;
184
+ if (!collectionConfig.versions?.drafts || docs.length === 0) {
185
+ return docs;
186
+ }
187
+ const docIDs = docs.map((doc)=>doc.id).filter((id)=>typeof id === 'number' || typeof id === 'string');
188
+ if (docIDs.length === 0) {
189
+ return docs;
190
+ }
191
+ const currentResult = await payload.find({
192
+ collection: collectionSlug,
193
+ depth: 0,
194
+ fallbackLocale: false,
195
+ locale,
196
+ pagination: false,
197
+ req,
198
+ select: {
199
+ _status: true,
200
+ id: true
201
+ },
202
+ user,
203
+ where: {
204
+ id: {
205
+ in: docIDs
206
+ }
207
+ }
208
+ });
209
+ return withPageTreeDisplayStatuses({
210
+ currentDocs: currentResult.docs,
211
+ draftDocs: docs
212
+ });
213
+ }
214
+ async function getListClientConfig({ collectionSlug, i18n, payload, req, user }) {
215
+ const clientConfig = getClientConfig({
216
+ config: payload.config,
217
+ i18n: i18n,
218
+ importMap: payload.importMap,
219
+ user: user ?? true
220
+ });
221
+ await applyLocaleFiltering({
222
+ clientConfig,
223
+ config: payload.config,
224
+ req
225
+ });
226
+ const clientCollectionConfig = clientConfig.collections.find((collection)=>collection.slug === collectionSlug);
227
+ if (!clientCollectionConfig) {
228
+ throw new Error(`Could not resolve client collection config for "${collectionSlug}"`);
229
+ }
230
+ return {
231
+ clientCollectionConfig,
232
+ clientConfig
233
+ };
234
+ }
235
+ export async function NestedDocsPageTreeListView(props) {
236
+ const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig);
237
+ if (!pageTreeConfig) {
238
+ throw new Error(`Could not resolve page tree config for "${props.collectionSlug}"`);
239
+ }
240
+ if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {
241
+ throw new Error(`Collection "${props.collectionSlug}" must define admin.useAsTitle`);
242
+ }
243
+ const query = getCurrentQuery(props, pageTreeConfig.defaultLimit);
244
+ const orderableFieldName = getOrderableFieldName(props.collectionConfig);
245
+ const defaultSort = getDefaultSort(props.collectionConfig);
246
+ const effectiveSort = getEffectiveTreeSort({
247
+ defaultSort,
248
+ orderableFieldName,
249
+ sort: normalizeSort(query.sort)
250
+ });
251
+ const effectiveQuery = {
252
+ ...query,
253
+ sort: effectiveSort
254
+ };
255
+ const locale = props.locale?.code;
256
+ const req = {
257
+ i18n: props.i18n,
258
+ locale,
259
+ payload: props.payload,
260
+ query: effectiveQuery,
261
+ user: props.user
262
+ };
263
+ const baseFilter = props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter;
264
+ const baseFilterConstraint = baseFilter ? await baseFilter(getBaseFilterArgs(props, req, query, locale)) : undefined;
265
+ const mergedWhere = combineWhereConstraints([
266
+ mergeListSearchAndWhere({
267
+ collectionConfig: props.collectionConfig,
268
+ search: normalizeSearch(query.search),
269
+ where: normalizeWhere(query.where)
270
+ }),
271
+ baseFilterConstraint ?? undefined
272
+ ]);
273
+ const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined;
274
+ const fullResult = await props.payload.find({
275
+ collection: props.collectionSlug,
276
+ depth: 0,
277
+ draft: props.collectionConfig.versions?.drafts ? true : undefined,
278
+ fallbackLocale: false,
279
+ includeLockStatus: true,
280
+ locale,
281
+ pagination: false,
282
+ req,
283
+ sort: normalizeSort(query.sort) ?? defaultSort,
284
+ user: props.user,
285
+ where
286
+ });
287
+ const treeSourceDocs = await getDocsWithDisplayStatus({
288
+ collectionConfig: props.collectionConfig,
289
+ collectionSlug: props.collectionSlug,
290
+ docs: fullResult.docs,
291
+ locale,
292
+ payload: props.payload,
293
+ req,
294
+ user: props.user
295
+ });
296
+ const orderedDocs = buildPageTreeDocs(treeSourceDocs, {
297
+ parentFieldSlug: pageTreeConfig.parentFieldSlug,
298
+ sort: effectiveSort
299
+ });
300
+ const orderedData = {
301
+ docs: orderedDocs,
302
+ hasNextPage: false,
303
+ hasPrevPage: false,
304
+ limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),
305
+ nextPage: null,
306
+ page: 1,
307
+ pagingCounter: orderedDocs.length > 0 ? 1 : 0,
308
+ prevPage: null,
309
+ totalDocs: orderedDocs.length,
310
+ totalPages: 1
311
+ };
312
+ const { clientCollectionConfig, clientConfig } = await getListClientConfig({
313
+ collectionSlug: props.collectionSlug,
314
+ i18n: props.i18n,
315
+ payload: props.payload,
316
+ req,
317
+ user: props.user
318
+ });
319
+ const columnPreferences = props.columnState.map(({ accessor, active })=>({
320
+ accessor,
321
+ active: accessor === props.collectionConfig.admin.useAsTitle ? true : active
322
+ }));
323
+ const columns = getColumns({
324
+ clientConfig,
325
+ collectionConfig: clientCollectionConfig,
326
+ collectionSlug: props.collectionSlug,
327
+ columns: columnPreferences,
328
+ i18n: props.i18n,
329
+ permissions: props.permissions
330
+ });
331
+ const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true;
332
+ const renderedTable = await renderTable({
333
+ clientCollectionConfig,
334
+ clientConfig,
335
+ collectionConfig: props.collectionConfig,
336
+ columns,
337
+ data: orderedData,
338
+ enableRowSelections: Boolean(props.enableRowSelections),
339
+ fieldPermissions,
340
+ i18n: props.i18n,
341
+ orderableFieldName: orderableFieldName ?? '',
342
+ payload: props.payload,
343
+ query: effectiveQuery,
344
+ req,
345
+ tableAppearance: 'default',
346
+ useAsTitle: props.collectionConfig.admin.useAsTitle,
347
+ viewType: props.viewType
348
+ });
349
+ const clientProps = {
350
+ AfterList: props.AfterList,
351
+ AfterListTable: props.AfterListTable,
352
+ BeforeList: props.BeforeList,
353
+ BeforeListTable: props.BeforeListTable,
354
+ Description: props.Description,
355
+ beforeActions: props.beforeActions,
356
+ collectionSlug: props.collectionSlug,
357
+ disableBulkDelete: props.disableBulkDelete,
358
+ disableBulkEdit: props.disableBulkEdit,
359
+ disableQueryPresets: props.disableQueryPresets,
360
+ enableRowSelections: props.enableRowSelections,
361
+ hasCreatePermission: props.hasCreatePermission,
362
+ hasDeletePermission: props.hasDeletePermission,
363
+ hasTrashPermission: props.hasTrashPermission,
364
+ listMenuItems: props.listMenuItems,
365
+ listPreferences: props.listPreferences,
366
+ newDocumentURL: props.newDocumentURL,
367
+ preferenceKey: props.preferenceKey,
368
+ queryPreset: props.queryPreset,
369
+ queryPresetPermissions: props.queryPresetPermissions,
370
+ renderedFilters: props.renderedFilters,
371
+ resolvedFilterOptions: props.resolvedFilterOptions,
372
+ viewType: props.viewType
373
+ };
374
+ const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update);
375
+ return /*#__PURE__*/ _jsx(PageTreeListViewClient, {
376
+ ...clientProps,
377
+ allDocs: orderedDocs,
378
+ badgeConfig: pageTreeConfig.badges,
379
+ canMoveDocs: canMoveDocs,
380
+ columnState: renderedTable.columnState,
381
+ orderableFieldName: orderableFieldName,
382
+ parentFieldSlug: pageTreeConfig.parentFieldSlug,
383
+ query: effectiveQuery,
384
+ sourceDocs: treeSourceDocs,
385
+ useAsTitle: props.collectionConfig.admin.useAsTitle
386
+ });
387
+ }
388
+ export default NestedDocsPageTreeListView;
389
+
390
+ //# sourceMappingURL=PageTreeListView.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\r\n ColumnPreference,\r\n ListQuery,\r\n ListViewClientProps,\r\n PaginatedDocs,\r\n Params,\r\n} from 'payload'\r\n\r\nimport React from 'react'\r\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\r\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\r\nimport { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere } from 'payload/shared'\r\n\r\nimport PageTreeListViewClient from './PageTreeListView.client.js'\r\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\r\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\r\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\r\nimport type { PageTreeSourceDoc } from '../types.js'\r\n\r\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\r\ntype ServerListViewProps = Record<string, any>\r\n\r\nfunction isNumericSegment(segment: string): boolean {\r\n return /^\\d+$/.test(segment)\r\n}\r\n\r\nfunction getKeySegments(key: string): string[] {\r\n const matches = key.match(/([^[\\]]+)/g)\r\n return matches ? matches.filter(Boolean) : [key]\r\n}\r\n\r\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\r\n const segments = getKeySegments(key)\r\n\r\n if (segments.length === 0) {\r\n return\r\n }\r\n\r\n let current: Record<string, unknown> | unknown[] = target\r\n\r\n for (let index = 0; index < segments.length; index += 1) {\r\n const segment = segments[index]\r\n const isLastSegment = index === segments.length - 1\r\n const nextSegment = segments[index + 1]\r\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\r\n ? []\r\n : {}\r\n\r\n if (isLastSegment) {\r\n if (Array.isArray(current)) {\r\n const arrayIndex = Number(segment)\r\n current[arrayIndex] = value\r\n } else {\r\n const existingValue = current[segment]\r\n\r\n if (existingValue === undefined) {\r\n current[segment] = value\r\n } else if (Array.isArray(existingValue)) {\r\n existingValue.push(value)\r\n } else {\r\n current[segment] = [existingValue, value]\r\n }\r\n }\r\n\r\n return\r\n }\r\n\r\n if (Array.isArray(current)) {\r\n const arrayIndex = Number(segment)\r\n const existingValue = current[arrayIndex]\r\n\r\n if (\r\n typeof existingValue !== 'object' ||\r\n existingValue === null ||\r\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\r\n ) {\r\n current[arrayIndex] = nextContainer\r\n }\r\n\r\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\r\n continue\r\n }\r\n\r\n const existingValue = current[segment]\r\n\r\n if (\r\n typeof existingValue !== 'object' ||\r\n existingValue === null ||\r\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\r\n ) {\r\n current[segment] = nextContainer\r\n }\r\n\r\n current = current[segment] as Record<string, unknown> | unknown[]\r\n }\r\n}\r\n\r\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\r\n const parsed: ParsedQuery = {}\r\n\r\n for (const [key, value] of Object.entries(searchParams ?? {})) {\r\n if (Array.isArray(value)) {\r\n for (const entry of value) {\r\n if (typeof entry === 'string') {\r\n setNestedValue(parsed, key, entry)\r\n }\r\n }\r\n } else if (typeof value === 'string') {\r\n setNestedValue(parsed, key, value)\r\n }\r\n }\r\n\r\n for (const key of ['columns', 'queryByGroup']) {\r\n if (typeof parsed[key] === 'string') {\r\n try {\r\n parsed[key] = JSON.parse(parsed[key] as string)\r\n } catch {\r\n // Leave invalid persisted values untouched and let Payload ignore them.\r\n }\r\n }\r\n }\r\n\r\n const sanitized: ParsedQuery = { ...parsed }\r\n\r\n for (const [key, value] of Object.entries(sanitized)) {\r\n if (\r\n key === 'columns' &&\r\n ((typeof value === 'string' && value === '[]') ||\r\n (Array.isArray(value) && value.length === 0))\r\n ) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if (\r\n key === 'where' &&\r\n typeof value === 'object' &&\r\n value !== null &&\r\n !Object.keys(value).length\r\n ) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\r\n const parsedValue = Number.parseInt(value, 10)\r\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\r\n }\r\n\r\n if (key === 'page' && value === 0) {\r\n delete sanitized[key]\r\n continue\r\n }\r\n\r\n if (value === '') {\r\n delete sanitized[key]\r\n }\r\n }\r\n\r\n return sanitized\r\n}\r\n\r\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\r\n return incomingValue === undefined ? fallbackValue : incomingValue\r\n}\r\n\r\nfunction normalizeLimit(value: unknown, fallback: number): number {\r\n return typeof value === 'number' && value > 0 ? value : fallback\r\n}\r\n\r\nfunction normalizePage(value: unknown, fallback: number): number {\r\n return typeof value === 'number' && value > 0 ? value : fallback\r\n}\r\n\r\nfunction normalizeSearch(value: unknown): string {\r\n return typeof value === 'string' ? value : ''\r\n}\r\n\r\nfunction normalizeSort(value: unknown): string | undefined {\n if (Array.isArray(value)) {\r\n const sortValues = value.filter(\r\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\r\n )\r\n return sortValues.length > 0 ? sortValues.join(',') : undefined\r\n }\r\n\r\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\n return collectionConfig.orderable === true ? '_order' : undefined\n}\n\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\n}\n\nfunction getEffectiveTreeSort(args: {\n defaultSort?: string\n orderableFieldName?: string\n sort?: string\n}): string | undefined {\n const { defaultSort, orderableFieldName, sort } = args\n\n if (sort) {\n return sort\n }\n\n if (\n orderableFieldName &&\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\n ) {\n return defaultSort\n }\n\n return undefined\n}\n\nfunction normalizeWhere(value: unknown): any {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\r\n return undefined\r\n}\r\n\r\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\r\n const parsedSearchQuery = parseSearchParams(props.searchParams)\r\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\r\n const mergedQuery = {\r\n ...preferenceQuery,\r\n ...parsedSearchQuery,\r\n } as ParsedQuery\r\n\r\n return {\r\n ...mergedQuery,\r\n limit: normalizeLimit(\r\n getQueryValue(mergedQuery.limit as number | undefined, fallbackLimit),\r\n fallbackLimit,\r\n ),\r\n page: normalizePage(\r\n getQueryValue(mergedQuery.page as number | undefined, props.data.page),\r\n props.data.page,\r\n ),\r\n search: normalizeSearch(mergedQuery.search),\r\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\r\n where: normalizeWhere(mergedQuery.where),\r\n }\r\n}\r\n\r\nfunction getBaseFilterArgs(\r\n props: ServerListViewProps,\r\n req: any,\r\n query: ListQuery,\r\n locale?: string,\r\n) {\r\n return {\r\n limit: 0,\r\n locale,\r\n page: 1,\r\n req,\r\n sort:\r\n normalizeSort(query.sort) ??\r\n (typeof props.collectionConfig.defaultSort === 'string'\r\n ? props.collectionConfig.defaultSort\r\n : 'id'),\r\n }\r\n}\r\n\r\nasync function getDocsWithDisplayStatus(args: {\r\n collectionConfig: ServerListViewProps['collectionConfig']\r\n collectionSlug: string\r\n docs: PageTreeSourceDoc[]\r\n locale?: string\r\n payload: any\r\n req: any\r\n user: unknown\r\n}): Promise<PageTreeSourceDoc[]> {\r\n const { collectionConfig, collectionSlug, docs, locale, payload, req, user } = args\r\n\r\n if (!collectionConfig.versions?.drafts || docs.length === 0) {\r\n return docs\r\n }\r\n\r\n const docIDs = docs\r\n .map((doc) => doc.id)\r\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\r\n\r\n if (docIDs.length === 0) {\r\n return docs\r\n }\r\n\r\n const currentResult = await payload.find({\r\n collection: collectionSlug,\r\n depth: 0,\r\n fallbackLocale: false,\r\n locale,\r\n pagination: false,\r\n req,\r\n select: {\r\n _status: true,\r\n id: true,\r\n },\r\n user,\r\n where: {\r\n id: {\r\n in: docIDs,\r\n },\r\n },\r\n } as never)\r\n\r\n return withPageTreeDisplayStatuses({\r\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\r\n draftDocs: docs,\r\n })\r\n}\r\n\r\nasync function getListClientConfig({\r\n collectionSlug,\r\n i18n,\r\n payload,\r\n req,\r\n user,\r\n}: {\r\n collectionSlug: string\r\n i18n: unknown\r\n payload: any\r\n req: any\r\n user: unknown\r\n}): Promise<{\r\n clientCollectionConfig: any\r\n clientConfig: any\r\n}> {\r\n const clientConfig = getClientConfig({\r\n config: payload.config,\r\n i18n: i18n as never,\r\n importMap: payload.importMap,\r\n user: (user ?? true) as never,\r\n } as never)\r\n\r\n await applyLocaleFiltering({\r\n clientConfig,\r\n config: payload.config,\r\n req,\r\n } as never)\r\n\r\n const clientCollectionConfig = clientConfig.collections.find(\r\n (collection) => collection.slug === collectionSlug,\r\n )\r\n\r\n if (!clientCollectionConfig) {\r\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\r\n }\r\n\r\n return {\r\n clientCollectionConfig,\r\n clientConfig,\r\n }\r\n}\r\n\r\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\r\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\r\n\r\n if (!pageTreeConfig) {\r\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\r\n }\r\n\r\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\r\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\r\n }\r\n\r\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\n const defaultSort = getDefaultSort(props.collectionConfig)\n const effectiveSort = getEffectiveTreeSort({\n defaultSort,\n orderableFieldName,\n sort: normalizeSort(query.sort),\n })\n const effectiveQuery = {\n ...query,\n sort: effectiveSort,\n }\n const locale = props.locale?.code\n const req = {\n i18n: props.i18n,\n locale,\n payload: props.payload,\n query: effectiveQuery,\n user: props.user,\n }\n\r\n const baseFilter =\r\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\r\n const baseFilterConstraint = baseFilter\r\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\r\n : undefined\r\n const mergedWhere = combineWhereConstraints([\r\n mergeListSearchAndWhere({\r\n collectionConfig: props.collectionConfig,\r\n search: normalizeSearch(query.search),\r\n where: normalizeWhere(query.where),\r\n } as never),\r\n baseFilterConstraint ?? undefined,\r\n ])\r\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\r\n\r\n const fullResult = await props.payload.find({\r\n collection: props.collectionSlug,\r\n depth: 0,\r\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\r\n fallbackLocale: false,\r\n includeLockStatus: true,\r\n locale,\r\n pagination: false,\r\n req,\r\n sort:\n normalizeSort(query.sort) ??\n defaultSort,\n user: props.user,\r\n where,\r\n } as never)\r\n const treeSourceDocs = await getDocsWithDisplayStatus({\r\n collectionConfig: props.collectionConfig,\r\n collectionSlug: props.collectionSlug,\r\n docs: fullResult.docs as unknown as PageTreeSourceDoc[],\r\n locale,\r\n payload: props.payload,\r\n req,\r\n user: props.user,\r\n })\r\n\r\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n sort: effectiveSort,\n })\n const orderedData: PaginatedDocs = {\r\n docs: orderedDocs,\r\n hasNextPage: false,\r\n hasPrevPage: false,\r\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\r\n nextPage: null,\r\n page: 1,\r\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\r\n prevPage: null,\r\n totalDocs: orderedDocs.length,\r\n totalPages: 1,\r\n }\r\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\r\n collectionSlug: props.collectionSlug,\r\n i18n: props.i18n,\r\n payload: props.payload,\r\n req,\r\n user: props.user,\r\n })\r\n const columnPreferences: ColumnPreference[] = (props.columnState as Array<{\r\n accessor: string\r\n active: boolean\r\n }>).map(({ accessor, active }) => ({\r\n accessor,\r\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\r\n }))\r\n const columns = getColumns({\r\n clientConfig,\r\n collectionConfig: clientCollectionConfig,\r\n collectionSlug: props.collectionSlug,\r\n columns: columnPreferences,\r\n i18n: props.i18n,\r\n permissions: props.permissions,\r\n } as never)\r\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\r\n const renderedTable = await renderTable({\r\n clientCollectionConfig,\r\n clientConfig,\r\n collectionConfig: props.collectionConfig,\r\n columns,\r\n data: orderedData,\r\n enableRowSelections: Boolean(props.enableRowSelections),\r\n fieldPermissions,\r\n i18n: props.i18n,\r\n orderableFieldName: orderableFieldName ?? '',\n payload: props.payload,\r\n query: effectiveQuery,\n req,\r\n tableAppearance: 'default',\r\n useAsTitle: props.collectionConfig.admin.useAsTitle,\r\n viewType: props.viewType,\r\n } as never)\r\n const clientProps: Omit<ListViewClientProps, 'Table' | 'columnState'> = {\r\n AfterList: props.AfterList,\r\n AfterListTable: props.AfterListTable,\r\n BeforeList: props.BeforeList,\r\n BeforeListTable: props.BeforeListTable,\r\n Description: props.Description,\r\n beforeActions: props.beforeActions,\r\n collectionSlug: props.collectionSlug,\r\n disableBulkDelete: props.disableBulkDelete,\r\n disableBulkEdit: props.disableBulkEdit,\r\n disableQueryPresets: props.disableQueryPresets,\r\n enableRowSelections: props.enableRowSelections,\r\n hasCreatePermission: props.hasCreatePermission,\r\n hasDeletePermission: props.hasDeletePermission,\r\n hasTrashPermission: props.hasTrashPermission,\r\n listMenuItems: props.listMenuItems,\r\n listPreferences: props.listPreferences,\r\n newDocumentURL: props.newDocumentURL,\r\n preferenceKey: props.preferenceKey,\r\n queryPreset: props.queryPreset,\r\n queryPresetPermissions: props.queryPresetPermissions,\r\n renderedFilters: props.renderedFilters,\r\n resolvedFilterOptions: props.resolvedFilterOptions,\r\n viewType: props.viewType,\r\n }\r\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\r\n\r\n return (\r\n <PageTreeListViewClient\r\n {...clientProps}\r\n allDocs={orderedDocs}\r\n badgeConfig={pageTreeConfig.badges}\r\n canMoveDocs={canMoveDocs}\r\n columnState={renderedTable.columnState}\n orderableFieldName={orderableFieldName}\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\n query={effectiveQuery}\n sourceDocs={treeSourceDocs}\r\n useAsTitle={props.collectionConfig.admin.useAsTitle}\r\n />\r\n )\r\n}\r\n\r\nexport default NestedDocsPageTreeListView\r\n"],"names":["React","getColumns","renderTable","getClientConfig","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","PageTreeListViewClient","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","collectionSlug","docs","payload","user","versions","drafts","docIDs","map","doc","id","currentResult","find","collection","depth","fallbackLocale","pagination","select","_status","in","currentDocs","draftDocs","getListClientConfig","i18n","clientConfig","config","importMap","clientCollectionConfig","collections","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","admin","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","draft","includeLockStatus","treeSourceDocs","orderedDocs","parentFieldSlug","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","columnState","accessor","active","columns","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","BeforeList","BeforeListTable","Description","beforeActions","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","allDocs","badgeConfig","badges","sourceDocs"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { PageTreeDoc } from '../utilities/pageTree.js';
3
+ export declare function PageTreeTitleCell({ children, doc, }: {
4
+ children: React.ReactNode;
5
+ doc: PageTreeDoc;
6
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,80 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React from 'react';
4
+ import { useDraggable } from '@dnd-kit/core';
5
+ import { ChevronIcon, DragHandleIcon } from '@payloadcms/ui';
6
+ import { usePageTree } from './PageTreeContext.js';
7
+ export function PageTreeTitleCell({ children, doc }) {
8
+ const { activeDragRowID, canMoveDocs, collapsedIDs, disableMoveDrag, pendingMoveRowID, toggleRow } = usePageTree();
9
+ const depth = doc.__pageTreeDepth;
10
+ const hasChildren = doc.__pageTreeHasChildren;
11
+ const shadeLevel = Math.min(doc.__pageTreeShadeLevel, 6);
12
+ const rowID = doc.__pageTreeID;
13
+ const isCollapsed = hasChildren && collapsedIDs.has(rowID);
14
+ const dragIsDisabled = disableMoveDrag || !canMoveDocs || !rowID || pendingMoveRowID !== null;
15
+ const { attributes, isDragging, listeners, setNodeRef } = useDraggable({
16
+ data: {
17
+ dragType: 'move',
18
+ rowID
19
+ },
20
+ disabled: dragIsDisabled,
21
+ id: `page-drag:${rowID}`
22
+ });
23
+ const isActiveDragRow = activeDragRowID === rowID;
24
+ return /*#__PURE__*/ _jsxs("div", {
25
+ className: "pages-hierarchy-cell",
26
+ "data-row-dragging": isDragging || isActiveDragRow ? 'true' : 'false',
27
+ "data-tree-depth": depth,
28
+ "data-tree-has-children": hasChildren ? 'true' : 'false',
29
+ "data-tree-shade-level": shadeLevel,
30
+ style: {
31
+ '--pages-tree-depth': String(depth)
32
+ },
33
+ children: [
34
+ hasChildren ? /*#__PURE__*/ _jsx("button", {
35
+ "aria-expanded": !isCollapsed,
36
+ "aria-label": isCollapsed ? 'Expand nested items' : 'Collapse nested items',
37
+ className: "pages-hierarchy-cell__toggle",
38
+ onClick: (event)=>{
39
+ event.preventDefault();
40
+ event.stopPropagation();
41
+ toggleRow(rowID);
42
+ },
43
+ type: "button",
44
+ children: /*#__PURE__*/ _jsx(ChevronIcon, {
45
+ className: [
46
+ 'pages-hierarchy-cell__chevron',
47
+ isCollapsed ? 'pages-hierarchy-cell__chevron--collapsed' : ''
48
+ ].filter(Boolean).join(' ')
49
+ })
50
+ }) : /*#__PURE__*/ _jsx("span", {
51
+ className: "pages-hierarchy-cell__spacer"
52
+ }),
53
+ canMoveDocs ? /*#__PURE__*/ _jsx("button", {
54
+ ...attributes,
55
+ ...listeners,
56
+ "aria-label": "Move document",
57
+ className: [
58
+ 'pages-hierarchy-cell__drag-handle',
59
+ isDragging || isActiveDragRow ? 'pages-hierarchy-cell__drag-handle--active' : ''
60
+ ].filter(Boolean).join(' '),
61
+ disabled: dragIsDisabled,
62
+ onClick: (event)=>{
63
+ event.preventDefault();
64
+ event.stopPropagation();
65
+ },
66
+ ref: setNodeRef,
67
+ type: "button",
68
+ children: /*#__PURE__*/ _jsx(DragHandleIcon, {})
69
+ }) : /*#__PURE__*/ _jsx("span", {
70
+ className: "pages-hierarchy-cell__drag-spacer"
71
+ }),
72
+ /*#__PURE__*/ _jsx("span", {
73
+ className: "pages-hierarchy-cell__content",
74
+ children: children
75
+ })
76
+ ]
77
+ });
78
+ }
79
+
80
+ //# sourceMappingURL=PageTreeTitleCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/PageTreeTitleCell.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\nimport { useDraggable } from '@dnd-kit/core'\nimport { ChevronIcon, DragHandleIcon } from '@payloadcms/ui'\n\nimport { usePageTree } from './PageTreeContext.js'\nimport type { PageTreeDoc } from '../utilities/pageTree.js'\n\nexport function PageTreeTitleCell({\n children,\n doc,\n}: {\n children: React.ReactNode\n doc: PageTreeDoc\n}) {\n const {\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n disableMoveDrag,\n pendingMoveRowID,\n toggleRow,\n } = usePageTree()\n const depth = doc.__pageTreeDepth\n const hasChildren = doc.__pageTreeHasChildren\n const shadeLevel = Math.min(doc.__pageTreeShadeLevel, 6)\n const rowID = doc.__pageTreeID\n const isCollapsed = hasChildren && collapsedIDs.has(rowID)\n const dragIsDisabled = disableMoveDrag || !canMoveDocs || !rowID || pendingMoveRowID !== null\n const { attributes, isDragging, listeners, setNodeRef } = useDraggable({\n data: {\n dragType: 'move',\n rowID,\n },\n disabled: dragIsDisabled,\n id: `page-drag:${rowID}`,\n })\n const isActiveDragRow = activeDragRowID === rowID\n\n return (\n <div\n className=\"pages-hierarchy-cell\"\n data-row-dragging={isDragging || isActiveDragRow ? 'true' : 'false'}\n data-tree-depth={depth}\n data-tree-has-children={hasChildren ? 'true' : 'false'}\n data-tree-shade-level={shadeLevel}\n style={{ '--pages-tree-depth': String(depth) } as React.CSSProperties}\n >\n {hasChildren ? (\n <button\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? 'Expand nested items' : 'Collapse nested items'}\n className=\"pages-hierarchy-cell__toggle\"\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n toggleRow(rowID)\n }}\n type=\"button\"\n >\n <ChevronIcon\n className={[\n 'pages-hierarchy-cell__chevron',\n isCollapsed ? 'pages-hierarchy-cell__chevron--collapsed' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </button>\n ) : (\n <span className=\"pages-hierarchy-cell__spacer\" />\n )}\n {canMoveDocs ? (\n <button\n {...attributes}\n {...listeners}\n aria-label=\"Move document\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n isDragging || isActiveDragRow ? 'pages-hierarchy-cell__drag-handle--active' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={setNodeRef}\n type=\"button\"\n >\n <DragHandleIcon />\n </button>\n ) : (\n <span className=\"pages-hierarchy-cell__drag-spacer\" />\n )}\n <span className=\"pages-hierarchy-cell__content\">{children}</span>\n </div>\n )\n}\n"],"names":["React","useDraggable","ChevronIcon","DragHandleIcon","usePageTree","PageTreeTitleCell","children","doc","activeDragRowID","canMoveDocs","collapsedIDs","disableMoveDrag","pendingMoveRowID","toggleRow","depth","__pageTreeDepth","hasChildren","__pageTreeHasChildren","shadeLevel","Math","min","__pageTreeShadeLevel","rowID","__pageTreeID","isCollapsed","has","dragIsDisabled","attributes","isDragging","listeners","setNodeRef","data","dragType","disabled","id","isActiveDragRow","div","className","data-row-dragging","data-tree-depth","data-tree-has-children","data-tree-shade-level","style","String","button","aria-expanded","aria-label","onClick","event","preventDefault","stopPropagation","type","filter","Boolean","join","span","ref"],"mappings":"AAAA;;AAEA,OAAOA,WAAW,QAAO;AACzB,SAASC,YAAY,QAAQ,gBAAe;AAC5C,SAASC,WAAW,EAAEC,cAAc,QAAQ,iBAAgB;AAE5D,SAASC,WAAW,QAAQ,uBAAsB;AAGlD,OAAO,SAASC,kBAAkB,EAChCC,QAAQ,EACRC,GAAG,EAIJ;IACC,MAAM,EACJC,eAAe,EACfC,WAAW,EACXC,YAAY,EACZC,eAAe,EACfC,gBAAgB,EAChBC,SAAS,EACV,GAAGT;IACJ,MAAMU,QAAQP,IAAIQ,eAAe;IACjC,MAAMC,cAAcT,IAAIU,qBAAqB;IAC7C,MAAMC,aAAaC,KAAKC,GAAG,CAACb,IAAIc,oBAAoB,EAAE;IACtD,MAAMC,QAAQf,IAAIgB,YAAY;IAC9B,MAAMC,cAAcR,eAAeN,aAAae,GAAG,CAACH;IACpD,MAAMI,iBAAiBf,mBAAmB,CAACF,eAAe,CAACa,SAASV,qBAAqB;IACzF,MAAM,EAAEe,UAAU,EAAEC,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAG7B,aAAa;QACrE8B,MAAM;YACJC,UAAU;YACVV;QACF;QACAW,UAAUP;QACVQ,IAAI,CAAC,UAAU,EAAEZ,OAAO;IAC1B;IACA,MAAMa,kBAAkB3B,oBAAoBc;IAE5C,qBACE,MAACc;QACCC,WAAU;QACVC,qBAAmBV,cAAcO,kBAAkB,SAAS;QAC5DI,mBAAiBzB;QACjB0B,0BAAwBxB,cAAc,SAAS;QAC/CyB,yBAAuBvB;QACvBwB,OAAO;YAAE,sBAAsBC,OAAO7B;QAAO;;YAE5CE,4BACC,KAAC4B;gBACCC,iBAAe,CAACrB;gBAChBsB,cAAYtB,cAAc,wBAAwB;gBAClDa,WAAU;gBACVU,SAAS,CAACC;oBACRA,MAAMC,cAAc;oBACpBD,MAAME,eAAe;oBACrBrC,UAAUS;gBACZ;gBACA6B,MAAK;0BAEL,cAAA,KAACjD;oBACCmC,WAAW;wBACT;wBACAb,cAAc,6CAA6C;qBAC5D,CACE4B,MAAM,CAACC,SACPC,IAAI,CAAC;;+BAIZ,KAACC;gBAAKlB,WAAU;;YAEjB5B,4BACC,KAACmC;gBACE,GAAGjB,UAAU;gBACb,GAAGE,SAAS;gBACbiB,cAAW;gBACXT,WAAW;oBACT;oBACAT,cAAcO,kBAAkB,8CAA8C;iBAC/E,CACEiB,MAAM,CAACC,SACPC,IAAI,CAAC;gBACRrB,UAAUP;gBACVqB,SAAS,CAACC;oBACRA,MAAMC,cAAc;oBACpBD,MAAME,eAAe;gBACvB;gBACAM,KAAK1B;gBACLqB,MAAK;0BAEL,cAAA,KAAChD;+BAGH,KAACoD;gBAAKlB,WAAU;;0BAElB,KAACkB;gBAAKlB,WAAU;0BAAiC/B;;;;AAGvD"}
@@ -0,0 +1,5 @@
1
+ import type { Endpoint } from 'payload';
2
+ export declare function createMovePageEndpoint(args: {
3
+ collectionSlug: string;
4
+ parentFieldSlug: string;
5
+ }): Endpoint;