payload-nested-docs-page-tree 1.4.4 → 1.5.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.
- package/README.md +169 -257
- package/dist/components/PageTreeListView.client.d.ts +3 -2
- package/dist/components/PageTreeListView.client.js +11 -31
- package/dist/components/PageTreeListView.client.js.map +1 -1
- package/dist/components/PageTreeListView.module.css +63 -0
- package/dist/components/PageTreeListView.server.js +62 -15
- package/dist/components/PageTreeListView.server.js.map +1 -1
- package/dist/components/PageTreeStatusBadge.d.ts +6 -0
- package/dist/components/PageTreeStatusBadge.js +77 -0
- package/dist/components/PageTreeStatusBadge.js.map +1 -0
- package/dist/components/PageTreeTitleCell.js +3 -2
- package/dist/components/PageTreeTitleCell.js.map +1 -1
- package/dist/endpoints/createMovePageEndpoint.js +13 -14
- package/dist/endpoints/createMovePageEndpoint.js.map +1 -1
- package/dist/endpoints/createReorderPageEndpoint.js +3 -4
- package/dist/endpoints/createReorderPageEndpoint.js.map +1 -1
- package/dist/endpoints/shared.d.ts +1 -14
- package/dist/endpoints/shared.js +3 -6
- package/dist/endpoints/shared.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +15 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/badgeLinks.d.ts +29 -0
- package/dist/utilities/badgeLinks.js +47 -0
- package/dist/utilities/badgeLinks.js.map +1 -0
- package/dist/utilities/diagnostics.js +1 -1
- package/dist/utilities/diagnostics.js.map +1 -1
- package/dist/utilities/pageTreeConfig.js +1 -0
- package/dist/utilities/pageTreeConfig.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import React from 'react';
|
|
3
2
|
import { getColumns, renderTable } from '@payloadcms/ui/rsc';
|
|
4
3
|
import { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig';
|
|
4
|
+
import { headers } from 'next/headers.js';
|
|
5
|
+
import { createLocalReq, extractJWT } from 'payload';
|
|
5
6
|
import { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere } from 'payload/shared';
|
|
6
|
-
import
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js';
|
|
7
9
|
import { buildPageTreeDocs } from '../utilities/pageTree.js';
|
|
8
10
|
import { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js';
|
|
9
11
|
import { withPageTreeDisplayStatuses } from '../utilities/status.js';
|
|
12
|
+
import PageTreeListViewClient from './PageTreeListView.client.js';
|
|
10
13
|
function isNumericSegment(segment) {
|
|
11
14
|
return /^\d+$/.test(segment);
|
|
12
15
|
}
|
|
@@ -180,24 +183,26 @@ function getBaseFilterArgs(props, req, query, locale) {
|
|
|
180
183
|
};
|
|
181
184
|
}
|
|
182
185
|
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
|
-
}
|
|
186
|
+
const { badgesLinks, breadcrumbsFieldSlug, collectionConfig, collectionSlug, docs, locale, payload, req, user } = args;
|
|
187
187
|
const docIDs = docs.map((doc)=>doc.id).filter((id)=>typeof id === 'number' || typeof id === 'string');
|
|
188
188
|
if (docIDs.length === 0) {
|
|
189
189
|
return docs;
|
|
190
190
|
}
|
|
191
|
-
const currentResult = await payload.find({
|
|
191
|
+
const currentResult = collectionConfig.versions?.drafts ? await payload.find({
|
|
192
192
|
collection: collectionSlug,
|
|
193
193
|
depth: 0,
|
|
194
|
+
draft: false,
|
|
194
195
|
fallbackLocale: false,
|
|
195
196
|
locale,
|
|
197
|
+
overrideAccess: false,
|
|
196
198
|
pagination: false,
|
|
197
199
|
req,
|
|
198
200
|
select: {
|
|
201
|
+
id: true,
|
|
199
202
|
_status: true,
|
|
200
|
-
|
|
203
|
+
...badgesLinks?.liveURL ? {
|
|
204
|
+
[breadcrumbsFieldSlug]: true
|
|
205
|
+
} : {}
|
|
201
206
|
},
|
|
202
207
|
user,
|
|
203
208
|
where: {
|
|
@@ -205,11 +210,37 @@ async function getDocsWithDisplayStatus(args) {
|
|
|
205
210
|
in: docIDs
|
|
206
211
|
}
|
|
207
212
|
}
|
|
208
|
-
})
|
|
209
|
-
|
|
213
|
+
}) : {
|
|
214
|
+
docs
|
|
215
|
+
};
|
|
216
|
+
const currentByID = new Map(currentResult.docs.map((doc)=>[
|
|
217
|
+
String(doc.id),
|
|
218
|
+
doc
|
|
219
|
+
]));
|
|
220
|
+
const displayDocs = withPageTreeDisplayStatuses({
|
|
210
221
|
currentDocs: currentResult.docs,
|
|
211
222
|
draftDocs: docs
|
|
212
223
|
});
|
|
224
|
+
const token = badgesLinks && collectionConfig.admin.preview ? extractJWT(req) : null;
|
|
225
|
+
return Promise.all(displayDocs.map(async (doc)=>{
|
|
226
|
+
const cleanDoc = {
|
|
227
|
+
...doc
|
|
228
|
+
};
|
|
229
|
+
delete cleanDoc.__pageTreeStatusLinks;
|
|
230
|
+
const links = await resolvePageTreeBadgeLinks({
|
|
231
|
+
badgesLinks,
|
|
232
|
+
breadcrumbsFieldSlug,
|
|
233
|
+
collectionConfig,
|
|
234
|
+
draftDoc: cleanDoc,
|
|
235
|
+
publishedDoc: currentByID.get(String(doc.id)),
|
|
236
|
+
req,
|
|
237
|
+
token
|
|
238
|
+
});
|
|
239
|
+
return {
|
|
240
|
+
...cleanDoc,
|
|
241
|
+
__pageTreeStatusLinks: links
|
|
242
|
+
};
|
|
243
|
+
}));
|
|
213
244
|
}
|
|
214
245
|
async function getListClientConfig({ collectionSlug, i18n, payload, req, user }) {
|
|
215
246
|
const clientConfig = getClientConfig({
|
|
@@ -253,13 +284,25 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
253
284
|
sort: effectiveSort
|
|
254
285
|
};
|
|
255
286
|
const locale = props.locale?.code;
|
|
256
|
-
const
|
|
257
|
-
|
|
287
|
+
const requestHeaders = await headers();
|
|
288
|
+
const host = requestHeaders.get('x-forwarded-host')?.split(',')[0]?.trim() || requestHeaders.get('host') || 'localhost';
|
|
289
|
+
const protocol = requestHeaders.get('x-forwarded-proto')?.split(',')[0]?.trim() === 'https' ? 'https' : 'http';
|
|
290
|
+
const requestURL = new URL(props.payload.config.serverURL || `${protocol}://${host}`);
|
|
291
|
+
requestURL.pathname = `${props.payload.config.routes?.admin || '/admin'}/collections/${props.collectionSlug}`;
|
|
292
|
+
const req = await createLocalReq({
|
|
293
|
+
fallbackLocale: false,
|
|
258
294
|
locale,
|
|
259
|
-
|
|
260
|
-
|
|
295
|
+
req: {
|
|
296
|
+
headers: requestHeaders,
|
|
297
|
+
i18n: props.i18n,
|
|
298
|
+
locale,
|
|
299
|
+
payload: props.payload,
|
|
300
|
+
query: effectiveQuery,
|
|
301
|
+
url: requestURL.href,
|
|
302
|
+
user: props.user
|
|
303
|
+
},
|
|
261
304
|
user: props.user
|
|
262
|
-
};
|
|
305
|
+
}, props.payload);
|
|
263
306
|
const baseFilter = props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter;
|
|
264
307
|
const baseFilterConstraint = baseFilter ? await baseFilter(getBaseFilterArgs(props, req, query, locale)) : undefined;
|
|
265
308
|
const mergedWhere = combineWhereConstraints([
|
|
@@ -278,6 +321,7 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
278
321
|
fallbackLocale: false,
|
|
279
322
|
includeLockStatus: true,
|
|
280
323
|
locale,
|
|
324
|
+
overrideAccess: false,
|
|
281
325
|
pagination: false,
|
|
282
326
|
req,
|
|
283
327
|
sort: normalizeSort(query.sort) ?? defaultSort,
|
|
@@ -285,6 +329,8 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
285
329
|
where
|
|
286
330
|
});
|
|
287
331
|
const treeSourceDocs = await getDocsWithDisplayStatus({
|
|
332
|
+
badgesLinks: pageTreeConfig.badgesLinks,
|
|
333
|
+
breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,
|
|
288
334
|
collectionConfig: props.collectionConfig,
|
|
289
335
|
collectionSlug: props.collectionSlug,
|
|
290
336
|
docs: fullResult.docs,
|
|
@@ -376,6 +422,7 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
376
422
|
...clientProps,
|
|
377
423
|
allDocs: orderedDocs,
|
|
378
424
|
badgeConfig: pageTreeConfig.badges,
|
|
425
|
+
badgesLinks: pageTreeConfig.badgesLinks,
|
|
379
426
|
canMoveDocs: canMoveDocs,
|
|
380
427
|
columnState: renderedTable.columnState,
|
|
381
428
|
homeIndicatorEnabled: pageTreeConfig.homeIndicator.enabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\n ColumnPreference,\n ListQuery,\n ListViewClientProps,\n PaginatedDocs,\n Params,\n} from 'payload'\n\nimport React from 'react'\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\nimport { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere } from 'payload/shared'\n\nimport PageTreeListViewClient from './PageTreeListView.client.js'\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\nimport type { PageTreeSourceDoc } from '../types.js'\n\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\ntype ServerListViewProps = Record<string, any>\n\nfunction isNumericSegment(segment: string): boolean {\n return /^\\d+$/.test(segment)\n}\n\nfunction getKeySegments(key: string): string[] {\n const matches = key.match(/([^[\\]]+)/g)\n return matches ? matches.filter(Boolean) : [key]\n}\n\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\n const segments = getKeySegments(key)\n\n if (segments.length === 0) {\n return\n }\n\n let current: Record<string, unknown> | unknown[] = target\n\n for (let index = 0; index < segments.length; index += 1) {\n const segment = segments[index]\n const isLastSegment = index === segments.length - 1\n const nextSegment = segments[index + 1]\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\n ? []\n : {}\n\n if (isLastSegment) {\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n current[arrayIndex] = value\n } else {\n const existingValue = current[segment]\n\n if (existingValue === undefined) {\n current[segment] = value\n } else if (Array.isArray(existingValue)) {\n existingValue.push(value)\n } else {\n current[segment] = [existingValue, value]\n }\n }\n\n return\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n const existingValue = current[arrayIndex]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[arrayIndex] = nextContainer\n }\n\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\n continue\n }\n\n const existingValue = current[segment]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[segment] = nextContainer\n }\n\n current = current[segment] as Record<string, unknown> | unknown[]\n }\n}\n\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\n const parsed: ParsedQuery = {}\n\n for (const [key, value] of Object.entries(searchParams ?? {})) {\n if (Array.isArray(value)) {\n for (const entry of value) {\n if (typeof entry === 'string') {\n setNestedValue(parsed, key, entry)\n }\n }\n } else if (typeof value === 'string') {\n setNestedValue(parsed, key, value)\n }\n }\n\n for (const key of ['columns', 'queryByGroup']) {\n if (typeof parsed[key] === 'string') {\n try {\n parsed[key] = JSON.parse(parsed[key] as string)\n } catch {\n // Leave invalid persisted values untouched and let Payload ignore them.\n }\n }\n }\n\n const sanitized: ParsedQuery = { ...parsed }\n\n for (const [key, value] of Object.entries(sanitized)) {\n if (\n key === 'columns' &&\n ((typeof value === 'string' && value === '[]') ||\n (Array.isArray(value) && value.length === 0))\n ) {\n delete sanitized[key]\n continue\n }\n\n if (\n key === 'where' &&\n typeof value === 'object' &&\n value !== null &&\n !Object.keys(value).length\n ) {\n delete sanitized[key]\n continue\n }\n\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\n const parsedValue = Number.parseInt(value, 10)\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\n }\n\n if (key === 'page' && value === 0) {\n delete sanitized[key]\n continue\n }\n\n if (value === '') {\n delete sanitized[key]\n }\n }\n\n return sanitized\n}\n\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\n return incomingValue === undefined ? fallbackValue : incomingValue\n}\n\nfunction normalizeLimit(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizePage(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizeSearch(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction normalizeSort(value: unknown): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter(\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\n )\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\n return collectionConfig.orderable === true\n ? '_order'\n : typeof collectionConfig.orderable === 'string'\n ? collectionConfig.orderable\n : undefined\n}\n\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\n}\n\nfunction getEffectiveTreeSort(args: {\n defaultSort?: string\n orderableFieldName?: string\n sort?: string\n}): string | undefined {\n const { defaultSort, orderableFieldName, sort } = args\n\n if (sort) {\n return sort\n }\n\n if (\n orderableFieldName &&\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\n ) {\n return defaultSort\n }\n\n return undefined\n}\n\nfunction normalizeWhere(value: unknown): any {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n return undefined\n}\n\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\n const parsedSearchQuery = parseSearchParams(props.searchParams)\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\n const mergedQuery = {\n ...preferenceQuery,\n ...parsedSearchQuery,\n } as ParsedQuery\n\n return {\n ...mergedQuery,\n limit: normalizeLimit(\n getQueryValue(mergedQuery.limit as number | undefined, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page as number | undefined, props.data.page),\n props.data.page,\n ),\n search: normalizeSearch(mergedQuery.search),\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\n where: normalizeWhere(mergedQuery.where),\n }\n}\n\nfunction getBaseFilterArgs(\n props: ServerListViewProps,\n req: any,\n query: ListQuery,\n locale?: string,\n) {\n return {\n limit: 0,\n locale,\n page: 1,\n req,\n sort:\n normalizeSort(query.sort) ??\n (typeof props.collectionConfig.defaultSort === 'string'\n ? props.collectionConfig.defaultSort\n : 'id'),\n }\n}\n\nasync function getDocsWithDisplayStatus(args: {\n collectionConfig: ServerListViewProps['collectionConfig']\n collectionSlug: string\n docs: PageTreeSourceDoc[]\n locale?: string\n payload: any\n req: any\n user: unknown\n}): Promise<PageTreeSourceDoc[]> {\n const { collectionConfig, collectionSlug, docs, locale, payload, req, user } = args\n\n if (!collectionConfig.versions?.drafts || docs.length === 0) {\n return docs\n }\n\n const docIDs = docs\n .map((doc) => doc.id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (docIDs.length === 0) {\n return docs\n }\n\n const currentResult = await payload.find({\n collection: collectionSlug,\n depth: 0,\n fallbackLocale: false,\n locale,\n pagination: false,\n req,\n select: {\n _status: true,\n id: true,\n },\n user,\n where: {\n id: {\n in: docIDs,\n },\n },\n } as never)\n\n return withPageTreeDisplayStatuses({\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\n draftDocs: docs,\n })\n}\n\nasync function getListClientConfig({\n collectionSlug,\n i18n,\n payload,\n req,\n user,\n}: {\n collectionSlug: string\n i18n: unknown\n payload: any\n req: any\n user: unknown\n}): Promise<{\n clientCollectionConfig: any\n clientConfig: any\n}> {\n const clientConfig = getClientConfig({\n config: payload.config,\n i18n: i18n as never,\n importMap: payload.importMap,\n user: (user ?? true) as never,\n } as never)\n\n await applyLocaleFiltering({\n clientConfig,\n config: payload.config,\n req,\n } as never)\n\n const clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n if (!clientCollectionConfig) {\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\n }\n\n return {\n clientCollectionConfig,\n clientConfig,\n }\n}\n\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\n\n if (!pageTreeConfig) {\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\n }\n\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\n }\n\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\n const defaultSort = getDefaultSort(props.collectionConfig)\n const effectiveSort = getEffectiveTreeSort({\n defaultSort,\n orderableFieldName,\n sort: normalizeSort(query.sort),\n })\n const effectiveQuery = {\n ...query,\n sort: effectiveSort,\n }\n const locale = props.locale?.code\n const req = {\n i18n: props.i18n,\n locale,\n payload: props.payload,\n query: effectiveQuery,\n user: props.user,\n }\n\n const baseFilter =\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\n const baseFilterConstraint = baseFilter\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\n : undefined\n const mergedWhere = combineWhereConstraints([\n mergeListSearchAndWhere({\n collectionConfig: props.collectionConfig,\n search: normalizeSearch(query.search),\n where: normalizeWhere(query.where),\n } as never),\n baseFilterConstraint ?? undefined,\n ])\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\n\n const fullResult = await props.payload.find({\n collection: props.collectionSlug,\n depth: 0,\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\n fallbackLocale: false,\n includeLockStatus: true,\n locale,\n pagination: false,\n req,\n sort: normalizeSort(query.sort) ?? defaultSort,\n user: props.user,\n where,\n } as never)\n const treeSourceDocs = await getDocsWithDisplayStatus({\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as unknown as PageTreeSourceDoc[],\n locale,\n payload: props.payload,\n req,\n user: props.user,\n })\n\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n sort: effectiveSort,\n })\n const orderedData: PaginatedDocs = {\n docs: orderedDocs,\n hasNextPage: false,\n hasPrevPage: false,\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\n nextPage: null,\n page: 1,\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\n prevPage: null,\n totalDocs: orderedDocs.length,\n totalPages: 1,\n }\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\n collectionSlug: props.collectionSlug,\n i18n: props.i18n,\n payload: props.payload,\n req,\n user: props.user,\n })\n const columnPreferences: ColumnPreference[] = (props.columnState as Array<{\n accessor: string\n active: boolean\n }>).map(({ accessor, active }) => ({\n accessor,\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\n }))\n const columns = getColumns({\n clientConfig,\n collectionConfig: clientCollectionConfig,\n collectionSlug: props.collectionSlug,\n columns: columnPreferences,\n i18n: props.i18n,\n permissions: props.permissions,\n } as never)\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\n const renderedTable = await renderTable({\n clientCollectionConfig,\n clientConfig,\n collectionConfig: props.collectionConfig,\n columns,\n data: orderedData,\n enableRowSelections: Boolean(props.enableRowSelections),\n fieldPermissions,\n i18n: props.i18n,\n orderableFieldName: orderableFieldName ?? '',\n payload: props.payload,\n query: effectiveQuery,\n req,\n tableAppearance: 'default',\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n viewType: props.viewType,\n } as never)\n const clientProps: Omit<ListViewClientProps, 'Table' | 'columnState'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n Description: props.Description,\n beforeActions: props.beforeActions,\n collectionSlug: props.collectionSlug,\n disableBulkDelete: props.disableBulkDelete,\n disableBulkEdit: props.disableBulkEdit,\n disableQueryPresets: props.disableQueryPresets,\n enableRowSelections: props.enableRowSelections,\n hasCreatePermission: props.hasCreatePermission,\n hasDeletePermission: props.hasDeletePermission,\n hasTrashPermission: props.hasTrashPermission,\n listMenuItems: props.listMenuItems,\n listPreferences: props.listPreferences,\n newDocumentURL: props.newDocumentURL,\n preferenceKey: props.preferenceKey,\n queryPreset: props.queryPreset,\n queryPresetPermissions: props.queryPresetPermissions,\n renderedFilters: props.renderedFilters,\n resolvedFilterOptions: props.resolvedFilterOptions,\n viewType: props.viewType,\n }\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n allDocs={orderedDocs}\n badgeConfig={pageTreeConfig.badges}\n canMoveDocs={canMoveDocs}\n columnState={renderedTable.columnState}\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\n orderableFieldName={orderableFieldName}\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\n query={effectiveQuery}\n sourceDocs={treeSourceDocs}\n useAsTitle={props.collectionConfig.admin.useAsTitle}\n />\n )\n}\n\nexport default NestedDocsPageTreeListView\n"],"names":["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","homeIndicatorEnabled","homeIndicator","enabled","sourceDocs"],"mappings":";AAQA,OAAOA,WAAW,QAAO;AACzB,SAASC,UAAU,EAAEC,WAAW,QAAQ,qBAAoB;AAC5D,SAASC,eAAe,QAAQ,2CAA0C;AAC1E,SAASC,oBAAoB,EAAEC,uBAAuB,EAAEC,uBAAuB,QAAQ,iBAAgB;AAEvG,OAAOC,4BAA4B,+BAA8B;AACjE,SAASC,iBAAiB,QAAQ,2BAA0B;AAC5D,SAASC,2BAA2B,QAAQ,iCAAgC;AAC5E,SAASC,2BAA2B,QAAQ,yBAAwB;AAMpE,SAASC,iBAAiBC,OAAe;IACvC,OAAO,QAAQC,IAAI,CAACD;AACtB;AAEA,SAASE,eAAeC,GAAW;IACjC,MAAMC,UAAUD,IAAIE,KAAK,CAAC;IAC1B,OAAOD,UAAUA,QAAQE,MAAM,CAACC,WAAW;QAACJ;KAAI;AAClD;AAEA,SAASK,eAAeC,MAA+B,EAAEN,GAAW,EAAEO,KAAa;IACjF,MAAMC,WAAWT,eAAeC;IAEhC,IAAIQ,SAASC,MAAM,KAAK,GAAG;QACzB;IACF;IAEA,IAAIC,UAA+CJ;IAEnD,IAAK,IAAIK,QAAQ,GAAGA,QAAQH,SAASC,MAAM,EAAEE,SAAS,EAAG;QACvD,MAAMd,UAAUW,QAAQ,CAACG,MAAM;QAC/B,MAAMC,gBAAgBD,UAAUH,SAASC,MAAM,GAAG;QAClD,MAAMI,cAAcL,QAAQ,CAACG,QAAQ,EAAE;QACvC,MAAMG,gBAAqDlB,iBAAiBiB,eAAe,MACvF,EAAE,GACF,CAAC;QAEL,IAAID,eAAe;YACjB,IAAIG,MAAMC,OAAO,CAACN,UAAU;gBAC1B,MAAMO,aAAaC,OAAOrB;gBAC1Ba,OAAO,CAACO,WAAW,GAAGV;YACxB,OAAO;gBACL,MAAMY,gBAAgBT,OAAO,CAACb,QAAQ;gBAEtC,IAAIsB,kBAAkBC,WAAW;oBAC/BV,OAAO,CAACb,QAAQ,GAAGU;gBACrB,OAAO,IAAIQ,MAAMC,OAAO,CAACG,gBAAgB;oBACvCA,cAAcE,IAAI,CAACd;gBACrB,OAAO;oBACLG,OAAO,CAACb,QAAQ,GAAG;wBAACsB;wBAAeZ;qBAAM;gBAC3C;YACF;YAEA;QACF;QAEA,IAAIQ,MAAMC,OAAO,CAACN,UAAU;YAC1B,MAAMO,aAAaC,OAAOrB;YAC1B,MAAMsB,gBAAgBT,OAAO,CAACO,WAAW;YAEzC,IACE,OAAOE,kBAAkB,YACzBA,kBAAkB,QAClBJ,MAAMC,OAAO,CAACG,mBAAmBJ,MAAMC,OAAO,CAACF,gBAC/C;gBACAJ,OAAO,CAACO,WAAW,GAAGH;YACxB;YAEAJ,UAAUA,OAAO,CAACO,WAAW;YAC7B;QACF;QAEA,MAAME,gBAAgBT,OAAO,CAACb,QAAQ;QAEtC,IACE,OAAOsB,kBAAkB,YACzBA,kBAAkB,QAClBJ,MAAMC,OAAO,CAACG,mBAAmBJ,MAAMC,OAAO,CAACF,gBAC/C;YACAJ,OAAO,CAACb,QAAQ,GAAGiB;QACrB;QAEAJ,UAAUA,OAAO,CAACb,QAAQ;IAC5B;AACF;AAEA,SAASyB,kBAAkBC,YAAqB;IAC9C,MAAMC,SAAsB,CAAC;IAE7B,KAAK,MAAM,CAACxB,KAAKO,MAAM,IAAIkB,OAAOC,OAAO,CAACH,gBAAgB,CAAC,GAAI;QAC7D,IAAIR,MAAMC,OAAO,CAACT,QAAQ;YACxB,KAAK,MAAMoB,SAASpB,MAAO;gBACzB,IAAI,OAAOoB,UAAU,UAAU;oBAC7BtB,eAAemB,QAAQxB,KAAK2B;gBAC9B;YACF;QACF,OAAO,IAAI,OAAOpB,UAAU,UAAU;YACpCF,eAAemB,QAAQxB,KAAKO;QAC9B;IACF;IAEA,KAAK,MAAMP,OAAO;QAAC;QAAW;KAAe,CAAE;QAC7C,IAAI,OAAOwB,MAAM,CAACxB,IAAI,KAAK,UAAU;YACnC,IAAI;gBACFwB,MAAM,CAACxB,IAAI,GAAG4B,KAAKC,KAAK,CAACL,MAAM,CAACxB,IAAI;YACtC,EAAE,OAAM;YACN,wEAAwE;YAC1E;QACF;IACF;IAEA,MAAM8B,YAAyB;QAAE,GAAGN,MAAM;IAAC;IAE3C,KAAK,MAAM,CAACxB,KAAKO,MAAM,IAAIkB,OAAOC,OAAO,CAACI,WAAY;QACpD,IACE9B,QAAQ,aACP,CAAA,AAAC,OAAOO,UAAU,YAAYA,UAAU,QACtCQ,MAAMC,OAAO,CAACT,UAAUA,MAAME,MAAM,KAAK,CAAC,GAC7C;YACA,OAAOqB,SAAS,CAAC9B,IAAI;YACrB;QACF;QAEA,IACEA,QAAQ,WACR,OAAOO,UAAU,YACjBA,UAAU,QACV,CAACkB,OAAOM,IAAI,CAACxB,OAAOE,MAAM,EAC1B;YACA,OAAOqB,SAAS,CAAC9B,IAAI;YACrB;QACF;QAEA,IAAI,AAACA,CAAAA,QAAQ,WAAWA,QAAQ,MAAK,KAAM,OAAOO,UAAU,UAAU;YACpE,MAAMyB,cAAcd,OAAOe,QAAQ,CAAC1B,OAAO;YAC3CuB,SAAS,CAAC9B,IAAI,GAAGkB,OAAOgB,KAAK,CAACF,eAAeZ,YAAYY;QAC3D;QAEA,IAAIhC,QAAQ,UAAUO,UAAU,GAAG;YACjC,OAAOuB,SAAS,CAAC9B,IAAI;YACrB;QACF;QAEA,IAAIO,UAAU,IAAI;YAChB,OAAOuB,SAAS,CAAC9B,IAAI;QACvB;IACF;IAEA,OAAO8B;AACT;AAEA,SAASK,cAAiBC,aAA4B,EAAEC,aAAgB;IACtE,OAAOD,kBAAkBhB,YAAYiB,gBAAgBD;AACvD;AAEA,SAASE,eAAe/B,KAAc,EAAEgC,QAAgB;IACtD,OAAO,OAAOhC,UAAU,YAAYA,QAAQ,IAAIA,QAAQgC;AAC1D;AAEA,SAASC,cAAcjC,KAAc,EAAEgC,QAAgB;IACrD,OAAO,OAAOhC,UAAU,YAAYA,QAAQ,IAAIA,QAAQgC;AAC1D;AAEA,SAASE,gBAAgBlC,KAAc;IACrC,OAAO,OAAOA,UAAU,WAAWA,QAAQ;AAC7C;AAEA,SAASmC,cAAcnC,KAAc;IACnC,IAAIQ,MAAMC,OAAO,CAACT,QAAQ;QACxB,MAAMoC,aAAapC,MAAMJ,MAAM,CAC7B,CAACwB,QAA2B,OAAOA,UAAU,YAAYA,MAAMlB,MAAM,GAAG;QAE1E,OAAOkC,WAAWlC,MAAM,GAAG,IAAIkC,WAAWC,IAAI,CAAC,OAAOxB;IACxD;IAEA,OAAO,OAAOb,UAAU,YAAYA,MAAME,MAAM,GAAG,IAAIF,QAAQa;AACjE;AAEA,SAASyB,sBAAsBC,gBAAyD;IACtF,OAAOA,iBAAiBC,SAAS,KAAK,OAClC,WACA,OAAOD,iBAAiBC,SAAS,KAAK,WACpCD,iBAAiBC,SAAS,GAC1B3B;AACR;AAEA,SAAS4B,eAAeF,gBAAyD;IAC/E,OAAO,OAAOA,iBAAiBG,WAAW,KAAK,WAAWH,iBAAiBG,WAAW,GAAG7B;AAC3F;AAEA,SAAS8B,qBAAqBC,IAI7B;IACC,MAAM,EAAEF,WAAW,EAAEG,kBAAkB,EAAEC,IAAI,EAAE,GAAGF;IAElD,IAAIE,MAAM;QACR,OAAOA;IACT;IAEA,IACED,sBACCH,CAAAA,gBAAgBG,sBAAsBH,gBAAgB,CAAC,CAAC,EAAEG,oBAAoB,AAAD,GAC9E;QACA,OAAOH;IACT;IAEA,OAAO7B;AACT;AAEA,SAASkC,eAAe/C,KAAc;IACpC,IAAIA,SAAS,OAAOA,UAAU,YAAY,CAACQ,MAAMC,OAAO,CAACT,QAAQ;QAC/D,OAAOA;IACT;IAEA,OAAOa;AACT;AAEA,SAASmC,gBAAgBC,KAA0B,EAAEC,aAAqB;IACxE,MAAMC,oBAAoBpC,kBAAkBkC,MAAMjC,YAAY;IAC9D,MAAMoC,kBAAmBH,MAAMI,eAAe,IAAI,CAAC;IACnD,MAAMC,cAAc;QAClB,GAAGF,eAAe;QAClB,GAAGD,iBAAiB;IACtB;IAEA,OAAO;QACL,GAAGG,WAAW;QACdC,OAAOxB,eACLH,cAAc0B,YAAYC,KAAK,EAAwBL,gBACvDA;QAEFM,MAAMvB,cACJL,cAAc0B,YAAYE,IAAI,EAAwBP,MAAMQ,IAAI,CAACD,IAAI,GACrEP,MAAMQ,IAAI,CAACD,IAAI;QAEjBE,QAAQxB,gBAAgBoB,YAAYI,MAAM;QAC1CZ,MAAMX,cAAcmB,YAAYR,IAAI,KAAKX,cAAciB,gBAAgBN,IAAI,KAAKjC;QAChF8C,OAAOZ,eAAeO,YAAYK,KAAK;IACzC;AACF;AAEA,SAASC,kBACPX,KAA0B,EAC1BY,GAAQ,EACRC,KAAgB,EAChBC,MAAe;IAEf,OAAO;QACLR,OAAO;QACPQ;QACAP,MAAM;QACNK;QACAf,MACEX,cAAc2B,MAAMhB,IAAI,KACvB,CAAA,OAAOG,MAAMV,gBAAgB,CAACG,WAAW,KAAK,WAC3CO,MAAMV,gBAAgB,CAACG,WAAW,GAClC,IAAG;IACX;AACF;AAEA,eAAesB,yBAAyBpB,IAQvC;IACC,MAAM,EAAEL,gBAAgB,EAAE0B,cAAc,EAAEC,IAAI,EAAEH,MAAM,EAAEI,OAAO,EAAEN,GAAG,EAAEO,IAAI,EAAE,GAAGxB;IAE/E,IAAI,CAACL,iBAAiB8B,QAAQ,EAAEC,UAAUJ,KAAKhE,MAAM,KAAK,GAAG;QAC3D,OAAOgE;IACT;IAEA,MAAMK,SAASL,KACZM,GAAG,CAAC,CAACC,MAAQA,IAAIC,EAAE,EACnB9E,MAAM,CAAC,CAAC8E,KAA8B,OAAOA,OAAO,YAAY,OAAOA,OAAO;IAEjF,IAAIH,OAAOrE,MAAM,KAAK,GAAG;QACvB,OAAOgE;IACT;IAEA,MAAMS,gBAAgB,MAAMR,QAAQS,IAAI,CAAC;QACvCC,YAAYZ;QACZa,OAAO;QACPC,gBAAgB;QAChBhB;QACAiB,YAAY;QACZnB;QACAoB,QAAQ;YACNC,SAAS;YACTR,IAAI;QACN;QACAN;QACAT,OAAO;YACLe,IAAI;gBACFS,IAAIZ;YACN;QACF;IACF;IAEA,OAAOnF,4BAA4B;QACjCgG,aAAaT,cAAcT,IAAI;QAC/BmB,WAAWnB;IACb;AACF;AAEA,eAAeoB,oBAAoB,EACjCrB,cAAc,EACdsB,IAAI,EACJpB,OAAO,EACPN,GAAG,EACHO,IAAI,EAOL;IAIC,MAAMoB,eAAe3G,gBAAgB;QACnC4G,QAAQtB,QAAQsB,MAAM;QACtBF,MAAMA;QACNG,WAAWvB,QAAQuB,SAAS;QAC5BtB,MAAOA,QAAQ;IACjB;IAEA,MAAMtF,qBAAqB;QACzB0G;QACAC,QAAQtB,QAAQsB,MAAM;QACtB5B;IACF;IAEA,MAAM8B,yBAAyBH,aAAaI,WAAW,CAAChB,IAAI,CAC1D,CAACC,aAAeA,WAAWgB,IAAI,KAAK5B;IAGtC,IAAI,CAAC0B,wBAAwB;QAC3B,MAAM,IAAIG,MAAM,CAAC,gDAAgD,EAAE7B,eAAe,CAAC,CAAC;IACtF;IAEA,OAAO;QACL0B;QACAH;IACF;AACF;AAEA,OAAO,eAAeO,2BAA2B9C,KAA0B;IACzE,MAAM+C,iBAAiB7G,4BAA4B8D,MAAMV,gBAAgB;IAEzE,IAAI,CAACyD,gBAAgB;QACnB,MAAM,IAAIF,MAAM,CAAC,wCAAwC,EAAE7C,MAAMgB,cAAc,CAAC,CAAC,CAAC;IACpF;IAEA,IAAI,OAAOhB,MAAMV,gBAAgB,CAAC0D,KAAK,CAACC,UAAU,KAAK,UAAU;QAC/D,MAAM,IAAIJ,MAAM,CAAC,YAAY,EAAE7C,MAAMgB,cAAc,CAAC,8BAA8B,CAAC;IACrF;IAEA,MAAMH,QAAQd,gBAAgBC,OAAO+C,eAAeG,YAAY;IAChE,MAAMtD,qBAAqBP,sBAAsBW,MAAMV,gBAAgB;IACvE,MAAMG,cAAcD,eAAeQ,MAAMV,gBAAgB;IACzD,MAAM6D,gBAAgBzD,qBAAqB;QACzCD;QACAG;QACAC,MAAMX,cAAc2B,MAAMhB,IAAI;IAChC;IACA,MAAMuD,iBAAiB;QACrB,GAAGvC,KAAK;QACRhB,MAAMsD;IACR;IACA,MAAMrC,SAASd,MAAMc,MAAM,EAAEuC;IAC7B,MAAMzC,MAAM;QACV0B,MAAMtC,MAAMsC,IAAI;QAChBxB;QACAI,SAASlB,MAAMkB,OAAO;QACtBL,OAAOuC;QACPjC,MAAMnB,MAAMmB,IAAI;IAClB;IAEA,MAAMmC,aACJtD,MAAMV,gBAAgB,CAAC0D,KAAK,EAAEM,cAActD,MAAMV,gBAAgB,CAAC0D,KAAK,EAAEO;IAC5E,MAAMC,uBAAuBF,aACzB,MAAMA,WAAW3C,kBAAkBX,OAAOY,KAAKC,OAAOC,WACtDlD;IACJ,MAAM6F,cAAc3H,wBAAwB;QAC1CC,wBAAwB;YACtBuD,kBAAkBU,MAAMV,gBAAgB;YACxCmB,QAAQxB,gBAAgB4B,MAAMJ,MAAM;YACpCC,OAAOZ,eAAee,MAAMH,KAAK;QACnC;QACA8C,wBAAwB5F;KACzB;IACD,MAAM8C,QAAQzC,OAAOM,IAAI,CAACkF,aAAaxG,MAAM,GAAG,IAAIwG,cAAc7F;IAElE,MAAM8F,aAAa,MAAM1D,MAAMkB,OAAO,CAACS,IAAI,CAAC;QAC1CC,YAAY5B,MAAMgB,cAAc;QAChCa,OAAO;QACP8B,OAAO3D,MAAMV,gBAAgB,CAAC8B,QAAQ,EAAEC,SAAS,OAAOzD;QACxDkE,gBAAgB;QAChB8B,mBAAmB;QACnB9C;QACAiB,YAAY;QACZnB;QACAf,MAAMX,cAAc2B,MAAMhB,IAAI,KAAKJ;QACnC0B,MAAMnB,MAAMmB,IAAI;QAChBT;IACF;IACA,MAAMmD,iBAAiB,MAAM9C,yBAAyB;QACpDzB,kBAAkBU,MAAMV,gBAAgB;QACxC0B,gBAAgBhB,MAAMgB,cAAc;QACpCC,MAAMyC,WAAWzC,IAAI;QACrBH;QACAI,SAASlB,MAAMkB,OAAO;QACtBN;QACAO,MAAMnB,MAAMmB,IAAI;IAClB;IAEA,MAAM2C,cAAc7H,kBAAkB4H,gBAAgB;QACpDE,iBAAiBhB,eAAegB,eAAe;QAC/ClE,MAAMsD;IACR;IACA,MAAMa,cAA6B;QACjC/C,MAAM6C;QACNG,aAAa;QACbC,aAAa;QACb5D,OAAOxB,eAAe+B,MAAMP,KAAK,EAAEyC,eAAeG,YAAY;QAC9DiB,UAAU;QACV5D,MAAM;QACN6D,eAAeN,YAAY7G,MAAM,GAAG,IAAI,IAAI;QAC5CoH,UAAU;QACVC,WAAWR,YAAY7G,MAAM;QAC7BsH,YAAY;IACd;IACA,MAAM,EAAE7B,sBAAsB,EAAEH,YAAY,EAAE,GAAG,MAAMF,oBAAoB;QACzErB,gBAAgBhB,MAAMgB,cAAc;QACpCsB,MAAMtC,MAAMsC,IAAI;QAChBpB,SAASlB,MAAMkB,OAAO;QACtBN;QACAO,MAAMnB,MAAMmB,IAAI;IAClB;IACA,MAAMqD,oBAAwC,AAACxE,MAAMyE,WAAW,CAG5DlD,GAAG,CAAC,CAAC,EAAEmD,QAAQ,EAAEC,MAAM,EAAE,GAAM,CAAA;YACjCD;YACAC,QAAQD,aAAa1E,MAAMV,gBAAgB,CAAC0D,KAAK,CAACC,UAAU,GAAG,OAAO0B;QACxE,CAAA;IACA,MAAMC,UAAUlJ,WAAW;QACzB6G;QACAjD,kBAAkBoD;QAClB1B,gBAAgBhB,MAAMgB,cAAc;QACpC4D,SAASJ;QACTlC,MAAMtC,MAAMsC,IAAI;QAChBuC,aAAa7E,MAAM6E,WAAW;IAChC;IACA,MAAMC,mBAAmB9E,MAAM6E,WAAW,EAAElC,aAAa,CAAC3C,MAAMgB,cAAc,CAAC,EAAE+D,UAAU;IAC3F,MAAMC,gBAAgB,MAAMrJ,YAAY;QACtC+G;QACAH;QACAjD,kBAAkBU,MAAMV,gBAAgB;QACxCsF;QACApE,MAAMwD;QACNiB,qBAAqBrI,QAAQoD,MAAMiF,mBAAmB;QACtDH;QACAxC,MAAMtC,MAAMsC,IAAI;QAChB1C,oBAAoBA,sBAAsB;QAC1CsB,SAASlB,MAAMkB,OAAO;QACtBL,OAAOuC;QACPxC;QACAsE,iBAAiB;QACjBjC,YAAYjD,MAAMV,gBAAgB,CAAC0D,KAAK,CAACC,UAAU;QACnDkC,UAAUnF,MAAMmF,QAAQ;IAC1B;IACA,MAAMC,cAAkE;QACtEC,WAAWrF,MAAMqF,SAAS;QAC1BC,gBAAgBtF,MAAMsF,cAAc;QACpCC,YAAYvF,MAAMuF,UAAU;QAC5BC,iBAAiBxF,MAAMwF,eAAe;QACtCC,aAAazF,MAAMyF,WAAW;QAC9BC,eAAe1F,MAAM0F,aAAa;QAClC1E,gBAAgBhB,MAAMgB,cAAc;QACpC2E,mBAAmB3F,MAAM2F,iBAAiB;QAC1CC,iBAAiB5F,MAAM4F,eAAe;QACtCC,qBAAqB7F,MAAM6F,mBAAmB;QAC9CZ,qBAAqBjF,MAAMiF,mBAAmB;QAC9Ca,qBAAqB9F,MAAM8F,mBAAmB;QAC9CC,qBAAqB/F,MAAM+F,mBAAmB;QAC9CC,oBAAoBhG,MAAMgG,kBAAkB;QAC5CC,eAAejG,MAAMiG,aAAa;QAClC7F,iBAAiBJ,MAAMI,eAAe;QACtC8F,gBAAgBlG,MAAMkG,cAAc;QACpCC,eAAenG,MAAMmG,aAAa;QAClCC,aAAapG,MAAMoG,WAAW;QAC9BC,wBAAwBrG,MAAMqG,sBAAsB;QACpDC,iBAAiBtG,MAAMsG,eAAe;QACtCC,uBAAuBvG,MAAMuG,qBAAqB;QAClDpB,UAAUnF,MAAMmF,QAAQ;IAC1B;IACA,MAAMqB,cAAc5J,QAAQoD,MAAM6E,WAAW,EAAElC,aAAa,CAAC3C,MAAMgB,cAAc,CAAC,EAAEyF;IAEpF,qBACE,KAACzK;QACE,GAAGoJ,WAAW;QACfsB,SAAS5C;QACT6C,aAAa5D,eAAe6D,MAAM;QAClCJ,aAAaA;QACb/B,aAAaO,cAAcP,WAAW;QACtCoC,sBAAsB9D,eAAe+D,aAAa,CAACC,OAAO;QAC1DnH,oBAAoBA;QACpBmE,iBAAiBhB,eAAegB,eAAe;QAC/ClD,OAAOuC;QACP4D,YAAYnD;QACZZ,YAAYjD,MAAMV,gBAAgB,CAAC0D,KAAK,CAACC,UAAU;;AAGzD;AAEA,eAAeH,2BAA0B"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\n ColumnPreference,\n ListQuery,\n ListViewClientProps,\n PaginatedDocs,\n Params,\n} from 'payload'\n\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\nimport { headers } from 'next/headers.js'\nimport { createLocalReq, extractJWT } from 'payload'\nimport {\n applyLocaleFiltering,\n combineWhereConstraints,\n mergeListSearchAndWhere,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginBadgesLinks, PageTreeSourceDoc } from '../types.js'\n\nimport { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js'\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\nimport PageTreeListViewClient from './PageTreeListView.client.js'\n\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\ntype ServerListViewProps = Record<string, any>\n\nfunction isNumericSegment(segment: string): boolean {\n return /^\\d+$/.test(segment)\n}\n\nfunction getKeySegments(key: string): string[] {\n const matches = key.match(/([^[\\]]+)/g)\n return matches ? matches.filter(Boolean) : [key]\n}\n\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\n const segments = getKeySegments(key)\n\n if (segments.length === 0) {\n return\n }\n\n let current: Record<string, unknown> | unknown[] = target\n\n for (let index = 0; index < segments.length; index += 1) {\n const segment = segments[index]\n const isLastSegment = index === segments.length - 1\n const nextSegment = segments[index + 1]\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\n ? []\n : {}\n\n if (isLastSegment) {\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n current[arrayIndex] = value\n } else {\n const existingValue = current[segment]\n\n if (existingValue === undefined) {\n current[segment] = value\n } else if (Array.isArray(existingValue)) {\n existingValue.push(value)\n } else {\n current[segment] = [existingValue, value]\n }\n }\n\n return\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n const existingValue = current[arrayIndex]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[arrayIndex] = nextContainer\n }\n\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\n continue\n }\n\n const existingValue = current[segment]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[segment] = nextContainer\n }\n\n current = current[segment] as Record<string, unknown> | unknown[]\n }\n}\n\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\n const parsed: ParsedQuery = {}\n\n for (const [key, value] of Object.entries(searchParams ?? {})) {\n if (Array.isArray(value)) {\n for (const entry of value) {\n if (typeof entry === 'string') {\n setNestedValue(parsed, key, entry)\n }\n }\n } else if (typeof value === 'string') {\n setNestedValue(parsed, key, value)\n }\n }\n\n for (const key of ['columns', 'queryByGroup']) {\n if (typeof parsed[key] === 'string') {\n try {\n parsed[key] = JSON.parse(parsed[key] as string)\n } catch {\n // Leave invalid persisted values untouched and let Payload ignore them.\n }\n }\n }\n\n const sanitized: ParsedQuery = { ...parsed }\n\n for (const [key, value] of Object.entries(sanitized)) {\n if (\n key === 'columns' &&\n ((typeof value === 'string' && value === '[]') ||\n (Array.isArray(value) && value.length === 0))\n ) {\n delete sanitized[key]\n continue\n }\n\n if (\n key === 'where' &&\n typeof value === 'object' &&\n value !== null &&\n !Object.keys(value).length\n ) {\n delete sanitized[key]\n continue\n }\n\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\n const parsedValue = Number.parseInt(value, 10)\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\n }\n\n if (key === 'page' && value === 0) {\n delete sanitized[key]\n continue\n }\n\n if (value === '') {\n delete sanitized[key]\n }\n }\n\n return sanitized\n}\n\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\n return incomingValue === undefined ? fallbackValue : incomingValue\n}\n\nfunction normalizeLimit(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizePage(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizeSearch(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction normalizeSort(value: unknown): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter(\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\n )\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\n return collectionConfig.orderable === true\n ? '_order'\n : typeof collectionConfig.orderable === 'string'\n ? collectionConfig.orderable\n : undefined\n}\n\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\n}\n\nfunction getEffectiveTreeSort(args: {\n defaultSort?: string\n orderableFieldName?: string\n sort?: string\n}): string | undefined {\n const { defaultSort, orderableFieldName, sort } = args\n\n if (sort) {\n return sort\n }\n\n if (\n orderableFieldName &&\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\n ) {\n return defaultSort\n }\n\n return undefined\n}\n\nfunction normalizeWhere(value: unknown): any {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n return undefined\n}\n\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\n const parsedSearchQuery = parseSearchParams(props.searchParams)\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\n const mergedQuery = {\n ...preferenceQuery,\n ...parsedSearchQuery,\n } as ParsedQuery\n\n return {\n ...mergedQuery,\n limit: normalizeLimit(\n getQueryValue(mergedQuery.limit as number | undefined, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page as number | undefined, props.data.page),\n props.data.page,\n ),\n search: normalizeSearch(mergedQuery.search),\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\n where: normalizeWhere(mergedQuery.where),\n }\n}\n\nfunction getBaseFilterArgs(\n props: ServerListViewProps,\n req: any,\n query: ListQuery,\n locale?: string,\n) {\n return {\n limit: 0,\n locale,\n page: 1,\n req,\n sort:\n normalizeSort(query.sort) ??\n (typeof props.collectionConfig.defaultSort === 'string'\n ? props.collectionConfig.defaultSort\n : 'id'),\n }\n}\n\nasync function getDocsWithDisplayStatus(args: {\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n breadcrumbsFieldSlug: string\n collectionConfig: ServerListViewProps['collectionConfig']\n collectionSlug: string\n docs: PageTreeSourceDoc[]\n locale?: string\n payload: any\n req: any\n user: unknown\n}): Promise<PageTreeSourceDoc[]> {\n const {\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n collectionSlug,\n docs,\n locale,\n payload,\n req,\n user,\n } = args\n\n const docIDs = docs\n .map((doc) => doc.id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (docIDs.length === 0) {\n return docs\n }\n\n const currentResult = collectionConfig.versions?.drafts\n ? await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: false,\n fallbackLocale: false,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n select: {\n id: true,\n _status: true,\n ...(badgesLinks?.liveURL ? { [breadcrumbsFieldSlug]: true } : {}),\n },\n user,\n where: {\n id: {\n in: docIDs,\n },\n },\n } as never)\n : { docs }\n\n const currentByID = new Map<string, PageTreeSourceDoc>(\n currentResult.docs.map((doc: PageTreeSourceDoc) => [String(doc.id), doc]),\n )\n const displayDocs = withPageTreeDisplayStatuses({\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\n draftDocs: docs,\n })\n const token = badgesLinks && collectionConfig.admin.preview ? extractJWT(req) : null\n\n return Promise.all(\n displayDocs.map(async (doc) => {\n const cleanDoc = { ...doc }\n delete cleanDoc.__pageTreeStatusLinks\n const links = await resolvePageTreeBadgeLinks({\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n draftDoc: cleanDoc,\n publishedDoc: currentByID.get(String(doc.id)),\n req,\n token,\n })\n return { ...cleanDoc, __pageTreeStatusLinks: links }\n }),\n )\n}\n\nasync function getListClientConfig({\n collectionSlug,\n i18n,\n payload,\n req,\n user,\n}: {\n collectionSlug: string\n i18n: unknown\n payload: any\n req: any\n user: unknown\n}): Promise<{\n clientCollectionConfig: any\n clientConfig: any\n}> {\n const clientConfig = getClientConfig({\n config: payload.config,\n i18n: i18n as never,\n importMap: payload.importMap,\n user: (user ?? true) as never,\n } as never)\n\n await applyLocaleFiltering({\n clientConfig,\n config: payload.config,\n req,\n } as never)\n\n const clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n if (!clientCollectionConfig) {\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\n }\n\n return {\n clientCollectionConfig,\n clientConfig,\n }\n}\n\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\n\n if (!pageTreeConfig) {\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\n }\n\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\n }\n\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\n const defaultSort = getDefaultSort(props.collectionConfig)\n const effectiveSort = getEffectiveTreeSort({\n defaultSort,\n orderableFieldName,\n sort: normalizeSort(query.sort),\n })\n const effectiveQuery = {\n ...query,\n sort: effectiveSort,\n }\n const locale = props.locale?.code\n const requestHeaders = await headers()\n const host =\n requestHeaders.get('x-forwarded-host')?.split(',')[0]?.trim() ||\n requestHeaders.get('host') ||\n 'localhost'\n const protocol =\n requestHeaders.get('x-forwarded-proto')?.split(',')[0]?.trim() === 'https' ? 'https' : 'http'\n const requestURL = new URL(props.payload.config.serverURL || `${protocol}://${host}`)\n requestURL.pathname = `${props.payload.config.routes?.admin || '/admin'}/collections/${props.collectionSlug}`\n const req = await createLocalReq(\n {\n fallbackLocale: false,\n locale,\n req: {\n headers: requestHeaders,\n i18n: props.i18n,\n locale,\n payload: props.payload,\n query: effectiveQuery,\n url: requestURL.href,\n user: props.user,\n },\n user: props.user,\n },\n props.payload,\n )\n\n const baseFilter =\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\n const baseFilterConstraint = baseFilter\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\n : undefined\n const mergedWhere = combineWhereConstraints([\n mergeListSearchAndWhere({\n collectionConfig: props.collectionConfig,\n search: normalizeSearch(query.search),\n where: normalizeWhere(query.where),\n } as never),\n baseFilterConstraint ?? undefined,\n ])\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\n\n const fullResult = await props.payload.find({\n collection: props.collectionSlug,\n depth: 0,\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\n fallbackLocale: false,\n includeLockStatus: true,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n sort: normalizeSort(query.sort) ?? defaultSort,\n user: props.user,\n where,\n } as never)\n const treeSourceDocs = await getDocsWithDisplayStatus({\n badgesLinks: pageTreeConfig.badgesLinks,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as unknown as PageTreeSourceDoc[],\n locale,\n payload: props.payload,\n req,\n user: props.user,\n })\n\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n sort: effectiveSort,\n })\n const orderedData: PaginatedDocs = {\n docs: orderedDocs,\n hasNextPage: false,\n hasPrevPage: false,\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\n nextPage: null,\n page: 1,\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\n prevPage: null,\n totalDocs: orderedDocs.length,\n totalPages: 1,\n }\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\n collectionSlug: props.collectionSlug,\n i18n: props.i18n,\n payload: props.payload,\n req,\n user: props.user,\n })\n const columnPreferences: ColumnPreference[] = (\n props.columnState as Array<{\n accessor: string\n active: boolean\n }>\n ).map(({ accessor, active }) => ({\n accessor,\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\n }))\n const columns = getColumns({\n clientConfig,\n collectionConfig: clientCollectionConfig,\n collectionSlug: props.collectionSlug,\n columns: columnPreferences,\n i18n: props.i18n,\n permissions: props.permissions,\n } as never)\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\n const renderedTable = await renderTable({\n clientCollectionConfig,\n clientConfig,\n collectionConfig: props.collectionConfig,\n columns,\n data: orderedData,\n enableRowSelections: Boolean(props.enableRowSelections),\n fieldPermissions,\n i18n: props.i18n,\n orderableFieldName: orderableFieldName ?? '',\n payload: props.payload,\n query: effectiveQuery,\n req,\n tableAppearance: 'default',\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n viewType: props.viewType,\n } as never)\n const clientProps: Omit<ListViewClientProps, 'Table' | 'columnState'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n Description: props.Description,\n beforeActions: props.beforeActions,\n collectionSlug: props.collectionSlug,\n disableBulkDelete: props.disableBulkDelete,\n disableBulkEdit: props.disableBulkEdit,\n disableQueryPresets: props.disableQueryPresets,\n enableRowSelections: props.enableRowSelections,\n hasCreatePermission: props.hasCreatePermission,\n hasDeletePermission: props.hasDeletePermission,\n hasTrashPermission: props.hasTrashPermission,\n listMenuItems: props.listMenuItems,\n listPreferences: props.listPreferences,\n newDocumentURL: props.newDocumentURL,\n preferenceKey: props.preferenceKey,\n queryPreset: props.queryPreset,\n queryPresetPermissions: props.queryPresetPermissions,\n renderedFilters: props.renderedFilters,\n resolvedFilterOptions: props.resolvedFilterOptions,\n viewType: props.viewType,\n }\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n allDocs={orderedDocs}\n badgeConfig={pageTreeConfig.badges}\n badgesLinks={pageTreeConfig.badgesLinks}\n canMoveDocs={canMoveDocs}\n columnState={renderedTable.columnState}\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\n orderableFieldName={orderableFieldName}\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\n query={effectiveQuery}\n sourceDocs={treeSourceDocs}\n useAsTitle={props.collectionConfig.admin.useAsTitle}\n />\n )\n}\n\nexport default NestedDocsPageTreeListView\n"],"names":["getColumns","renderTable","getClientConfig","headers","createLocalReq","extractJWT","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","React","resolvePageTreeBadgeLinks","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","PageTreeListViewClient","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","badgesLinks","breadcrumbsFieldSlug","collectionSlug","docs","payload","user","docIDs","map","doc","id","currentResult","versions","drafts","find","collection","depth","draft","fallbackLocale","overrideAccess","pagination","select","_status","liveURL","in","currentByID","Map","String","displayDocs","currentDocs","draftDocs","token","admin","preview","Promise","all","cleanDoc","__pageTreeStatusLinks","links","draftDoc","publishedDoc","get","getListClientConfig","i18n","clientConfig","config","importMap","clientCollectionConfig","collections","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","requestHeaders","host","split","trim","protocol","requestURL","URL","serverURL","pathname","routes","url","href","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","includeLockStatus","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","homeIndicatorEnabled","homeIndicator","enabled","sourceDocs"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NestedDocsPageTreePluginBadgesLinks, NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeSourceDoc } from '../types.js';
|
|
2
|
+
export declare function PageTreeStatusBadge({ badgeConfig, badgesLinks, doc, }: {
|
|
3
|
+
badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig;
|
|
4
|
+
badgesLinks?: NestedDocsPageTreePluginBadgesLinks;
|
|
5
|
+
doc: PageTreeSourceDoc;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ExternalLinkIcon, useTranslation } from '@payloadcms/ui';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { getPageTreeBadgeColor, getPageTreeBadgeLabel, getPageTreeDisplayStatus } from '../utilities/status.js';
|
|
6
|
+
export function PageTreeStatusBadge({ badgeConfig, badgesLinks, doc }) {
|
|
7
|
+
const { t } = useTranslation();
|
|
8
|
+
const status = getPageTreeDisplayStatus(doc);
|
|
9
|
+
const color = getPageTreeBadgeColor({
|
|
10
|
+
badgeColors: badgeConfig.colors,
|
|
11
|
+
status
|
|
12
|
+
});
|
|
13
|
+
const label = getPageTreeBadgeLabel({
|
|
14
|
+
badgeLabels: badgeConfig.labels,
|
|
15
|
+
status,
|
|
16
|
+
t
|
|
17
|
+
});
|
|
18
|
+
const previewLabel = t('version:preview');
|
|
19
|
+
const openInNewTabLabel = t('fields:openInNewTab');
|
|
20
|
+
const publicURL = badgesLinks ? doc.__pageTreeStatusLinks?.publicURL : undefined;
|
|
21
|
+
const previewURL = badgesLinks ? doc.__pageTreeStatusLinks?.previewURL : undefined;
|
|
22
|
+
const mode = badgesLinks?.draftHasPublishedVersion ?? 'both';
|
|
23
|
+
const split = status === 'changed' && mode === 'both' && Boolean(previewURL);
|
|
24
|
+
const opensPreview = status === 'draft' || status === 'changed' && mode === 'preview';
|
|
25
|
+
const href = opensPreview ? previewURL : status === 'published' || status === 'changed' ? publicURL : undefined;
|
|
26
|
+
const badgeProps = {
|
|
27
|
+
className: `pages-hierarchy-status-badge pages-hierarchy-status-badge--${status}${split ? ' pages-hierarchy-status-badge--split' : ''}`,
|
|
28
|
+
'data-custom-color': color ? 'true' : undefined,
|
|
29
|
+
style: color ? {
|
|
30
|
+
'--page-tree-badge-base': color
|
|
31
|
+
} : undefined
|
|
32
|
+
};
|
|
33
|
+
const linkProps = {
|
|
34
|
+
href,
|
|
35
|
+
onClick: (event)=>event.stopPropagation(),
|
|
36
|
+
onPointerDown: (event)=>event.stopPropagation(),
|
|
37
|
+
rel: 'noopener noreferrer',
|
|
38
|
+
target: '_blank',
|
|
39
|
+
title: `${opensPreview ? previewLabel : 'Live'} (${openInNewTabLabel})`
|
|
40
|
+
};
|
|
41
|
+
if (!split) {
|
|
42
|
+
return href ? /*#__PURE__*/ _jsx("a", {
|
|
43
|
+
...badgeProps,
|
|
44
|
+
...linkProps,
|
|
45
|
+
children: label
|
|
46
|
+
}) : /*#__PURE__*/ _jsx("span", {
|
|
47
|
+
...badgeProps,
|
|
48
|
+
children: label
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return /*#__PURE__*/ _jsxs("span", {
|
|
52
|
+
...badgeProps,
|
|
53
|
+
children: [
|
|
54
|
+
href ? /*#__PURE__*/ _jsx("a", {
|
|
55
|
+
...linkProps,
|
|
56
|
+
className: "pages-hierarchy-status-badge__body",
|
|
57
|
+
children: label
|
|
58
|
+
}) : /*#__PURE__*/ _jsx("span", {
|
|
59
|
+
className: "pages-hierarchy-status-badge__body",
|
|
60
|
+
children: label
|
|
61
|
+
}),
|
|
62
|
+
/*#__PURE__*/ _jsx("a", {
|
|
63
|
+
...linkProps,
|
|
64
|
+
"aria-label": previewLabel,
|
|
65
|
+
className: "pages-hierarchy-status-badge__preview",
|
|
66
|
+
href: previewURL,
|
|
67
|
+
title: `${previewLabel} (${openInNewTabLabel})`,
|
|
68
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
69
|
+
"aria-hidden": "true",
|
|
70
|
+
children: /*#__PURE__*/ _jsx(ExternalLinkIcon, {})
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
]
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=PageTreeStatusBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeStatusBadge.tsx"],"sourcesContent":["'use client'\n\nimport { ExternalLinkIcon, useTranslation } from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginResolvedBadgeConfig,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport {\n getPageTreeBadgeColor,\n getPageTreeBadgeLabel,\n getPageTreeDisplayStatus,\n} from '../utilities/status.js'\n\nexport function PageTreeStatusBadge({\n badgeConfig,\n badgesLinks,\n doc,\n}: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n doc: PageTreeSourceDoc\n}) {\n const { t } = useTranslation()\n const status = getPageTreeDisplayStatus(doc)\n const color = getPageTreeBadgeColor({ badgeColors: badgeConfig.colors, status })\n const label = getPageTreeBadgeLabel({ badgeLabels: badgeConfig.labels, status, t })\n const previewLabel = t('version:preview')\n const openInNewTabLabel = t('fields:openInNewTab')\n const publicURL = badgesLinks ? doc.__pageTreeStatusLinks?.publicURL : undefined\n const previewURL = badgesLinks ? doc.__pageTreeStatusLinks?.previewURL : undefined\n const mode = badgesLinks?.draftHasPublishedVersion ?? 'both'\n const split = status === 'changed' && mode === 'both' && Boolean(previewURL)\n const opensPreview = status === 'draft' || (status === 'changed' && mode === 'preview')\n const href = opensPreview\n ? previewURL\n : status === 'published' || status === 'changed'\n ? publicURL\n : undefined\n\n const badgeProps = {\n className: `pages-hierarchy-status-badge pages-hierarchy-status-badge--${status}${split ? ' pages-hierarchy-status-badge--split' : ''}`,\n 'data-custom-color': color ? 'true' : undefined,\n style: color ? ({ '--page-tree-badge-base': color } as React.CSSProperties) : undefined,\n }\n const linkProps = {\n href,\n onClick: (event: React.MouseEvent) => event.stopPropagation(),\n onPointerDown: (event: React.PointerEvent) => event.stopPropagation(),\n rel: 'noopener noreferrer',\n target: '_blank',\n title: `${opensPreview ? previewLabel : 'Live'} (${openInNewTabLabel})`,\n }\n\n if (!split) {\n return href ? (\n <a {...badgeProps} {...linkProps}>\n {label}\n </a>\n ) : (\n <span {...badgeProps}>{label}</span>\n )\n }\n\n return (\n <span {...badgeProps}>\n {href ? (\n <a {...linkProps} className=\"pages-hierarchy-status-badge__body\">\n {label}\n </a>\n ) : (\n <span className=\"pages-hierarchy-status-badge__body\">{label}</span>\n )}\n <a\n {...linkProps}\n aria-label={previewLabel}\n className=\"pages-hierarchy-status-badge__preview\"\n href={previewURL}\n title={`${previewLabel} (${openInNewTabLabel})`}\n >\n <span aria-hidden=\"true\">\n <ExternalLinkIcon />\n </span>\n </a>\n </span>\n )\n}\n"],"names":["ExternalLinkIcon","useTranslation","React","getPageTreeBadgeColor","getPageTreeBadgeLabel","getPageTreeDisplayStatus","PageTreeStatusBadge","badgeConfig","badgesLinks","doc","t","status","color","badgeColors","colors","label","badgeLabels","labels","previewLabel","openInNewTabLabel","publicURL","__pageTreeStatusLinks","undefined","previewURL","mode","draftHasPublishedVersion","split","Boolean","opensPreview","href","badgeProps","className","style","linkProps","onClick","event","stopPropagation","onPointerDown","rel","target","title","a","span","aria-label","aria-hidden"],"mappings":"AAAA;;AAEA,SAASA,gBAAgB,EAAEC,cAAc,QAAQ,iBAAgB;AACjE,OAAOC,WAAW,QAAO;AAQzB,SACEC,qBAAqB,EACrBC,qBAAqB,EACrBC,wBAAwB,QACnB,yBAAwB;AAE/B,OAAO,SAASC,oBAAoB,EAClCC,WAAW,EACXC,WAAW,EACXC,GAAG,EAKJ;IACC,MAAM,EAAEC,CAAC,EAAE,GAAGT;IACd,MAAMU,SAASN,yBAAyBI;IACxC,MAAMG,QAAQT,sBAAsB;QAAEU,aAAaN,YAAYO,MAAM;QAAEH;IAAO;IAC9E,MAAMI,QAAQX,sBAAsB;QAAEY,aAAaT,YAAYU,MAAM;QAAEN;QAAQD;IAAE;IACjF,MAAMQ,eAAeR,EAAE;IACvB,MAAMS,oBAAoBT,EAAE;IAC5B,MAAMU,YAAYZ,cAAcC,IAAIY,qBAAqB,EAAED,YAAYE;IACvE,MAAMC,aAAaf,cAAcC,IAAIY,qBAAqB,EAAEE,aAAaD;IACzE,MAAME,OAAOhB,aAAaiB,4BAA4B;IACtD,MAAMC,QAAQf,WAAW,aAAaa,SAAS,UAAUG,QAAQJ;IACjE,MAAMK,eAAejB,WAAW,WAAYA,WAAW,aAAaa,SAAS;IAC7E,MAAMK,OAAOD,eACTL,aACAZ,WAAW,eAAeA,WAAW,YACnCS,YACAE;IAEN,MAAMQ,aAAa;QACjBC,WAAW,CAAC,2DAA2D,EAAEpB,SAASe,QAAQ,yCAAyC,IAAI;QACvI,qBAAqBd,QAAQ,SAASU;QACtCU,OAAOpB,QAAS;YAAE,0BAA0BA;QAAM,IAA4BU;IAChF;IACA,MAAMW,YAAY;QAChBJ;QACAK,SAAS,CAACC,QAA4BA,MAAMC,eAAe;QAC3DC,eAAe,CAACF,QAA8BA,MAAMC,eAAe;QACnEE,KAAK;QACLC,QAAQ;QACRC,OAAO,GAAGZ,eAAeV,eAAe,OAAO,EAAE,EAAEC,kBAAkB,CAAC,CAAC;IACzE;IAEA,IAAI,CAACO,OAAO;QACV,OAAOG,qBACL,KAACY;YAAG,GAAGX,UAAU;YAAG,GAAGG,SAAS;sBAC7BlB;2BAGH,KAAC2B;YAAM,GAAGZ,UAAU;sBAAGf;;IAE3B;IAEA,qBACE,MAAC2B;QAAM,GAAGZ,UAAU;;YACjBD,qBACC,KAACY;gBAAG,GAAGR,SAAS;gBAAEF,WAAU;0BACzBhB;+BAGH,KAAC2B;gBAAKX,WAAU;0BAAsChB;;0BAExD,KAAC0B;gBACE,GAAGR,SAAS;gBACbU,cAAYzB;gBACZa,WAAU;gBACVF,MAAMN;gBACNiB,OAAO,GAAGtB,aAAa,EAAE,EAAEC,kBAAkB,CAAC,CAAC;0BAE/C,cAAA,KAACuB;oBAAKE,eAAY;8BAChB,cAAA,KAAC5C;;;;;AAKX"}
|
|
@@ -39,9 +39,10 @@ function HomeIndicatorIcon() {
|
|
|
39
39
|
width: "14",
|
|
40
40
|
xmlns: "http://www.w3.org/2000/svg",
|
|
41
41
|
children: /*#__PURE__*/ _jsx("path", {
|
|
42
|
-
d: "M2.5 7L7 3L11.5 7V13.
|
|
42
|
+
d: "M2.5 7L7 3L11.5 7V13.25H2.5V7Z",
|
|
43
43
|
stroke: "currentColor",
|
|
44
|
-
strokeLinejoin: "round"
|
|
44
|
+
strokeLinejoin: "round",
|
|
45
|
+
strokeWidth: "1.5"
|
|
45
46
|
})
|
|
46
47
|
});
|
|
47
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeTitleCell.tsx"],"sourcesContent":["'use client'\n\nimport { useDraggable } from '@dnd-kit/core'\nimport { ChevronIcon, useListQuery } from '@payloadcms/ui'\nimport React from 'react'\n\nimport type { PageTreeDoc } from '../utilities/pageTree.js'\n\nimport { usePageTree, usePageTreeRowDnd } from './PageTreeContext.js'\n\nconst HOME_PAGE_SLUG = 'home'\n\nfunction isHomePageDoc(doc: PageTreeDoc): boolean {\n return doc.__pageTreeParentID === null && doc.slug?.trim() === HOME_PAGE_SLUG\n}\n\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\n return Array.isArray(value) ? value[0] : value\n}\n\nfunction ParentMoveHandleIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"icon icon--drag-handle\"\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n className=\"stroke\"\n d=\"M13.75 4.25L6.25 15.75\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth=\"2.25\"\n />\n </svg>\n )\n}\n\nfunction HomeIndicatorIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"pages-hierarchy-cell__home-icon\"\n fill=\"none\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.5 7L7 3L11.5 7V13.5H2.5V7Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport function PageTreeTitleCell({\n children,\n doc,\n homeIndicatorEnabled,\n}: {\n children: React.ReactNode\n doc: PageTreeDoc\n homeIndicatorEnabled: boolean\n}) {\n const {\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n parentMoveEnabled,\n pendingMoveRowID,\n toggleRow,\n } = usePageTree()\n const rowDnd = usePageTreeRowDnd()\n const { orderableFieldName, query = {} } = useListQuery()\n const depth = doc.__pageTreeDepth\n const hasChildren = doc.__pageTreeHasChildren\n const shadeLevel = Math.min(doc.__pageTreeShadeLevel, 6)\n const rowID = doc.__pageTreeID\n const isCollapsed = hasChildren && collapsedIDs.has(rowID)\n const dragIsDisabled = !canMoveDocs || !rowID || pendingMoveRowID !== null\n const showHomeIcon = homeIndicatorEnabled && isHomePageDoc(doc)\n const parentMoveDrag = useDraggable({\n id: `page-drag:${rowID}`,\n data: {\n dragType: 'move',\n rowID,\n },\n disabled: dragIsDisabled,\n })\n const querySort = normalizeSort(query.sort)\n const showOrderableHandle =\n canMoveDocs &&\n Boolean(orderableFieldName) &&\n (querySort === orderableFieldName || querySort === `-${orderableFieldName}`)\n const isActiveDragRow = activeDragRowID === rowID\n const isDragging = parentMoveDrag.isDragging || rowDnd?.isOrderDragging || isActiveDragRow\n\n return (\n <div\n className=\"pages-hierarchy-cell\"\n data-row-dragging={isDragging ? 'true' : 'false'}\n data-tree-depth={depth}\n data-tree-has-children={hasChildren ? 'true' : 'false'}\n data-tree-home={showHomeIcon ? 'true' : undefined}\n data-tree-shade-level={shadeLevel}\n style={{ '--pages-tree-depth': String(depth) } as React.CSSProperties}\n >\n {hasChildren ? (\n <button\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? 'Expand nested items' : 'Collapse nested items'}\n className=\"pages-hierarchy-cell__toggle\"\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n toggleRow(rowID)\n }}\n type=\"button\"\n >\n <ChevronIcon\n className={[\n 'pages-hierarchy-cell__chevron',\n isCollapsed ? 'pages-hierarchy-cell__chevron--collapsed' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </button>\n ) : (\n <span className=\"pages-hierarchy-cell__spacer\" />\n )}\n {showOrderableHandle ? (\n <button\n {...(rowDnd?.orderHandleAttributes ?? {})}\n {...(rowDnd?.orderHandleListeners ?? {})}\n aria-label=\"Reorder document within this parent\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n 'pages-hierarchy-cell__drag-handle--orderable',\n rowDnd?.isOrderDragging || isActiveDragRow\n ? 'pages-hierarchy-cell__drag-handle--active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled || !rowDnd}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={rowDnd?.orderHandleRef}\n type=\"button\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.125 6C7.95343 6 8.625 5.32843 8.625 4.5C8.625 3.67157 7.95343 3 7.125 3C6.29657 3 5.625 3.67157 5.625 4.5C5.625 5.32843 6.29657 6 7.125 6Z\" fill=\"black\"/>\n <path d=\"M7.125 12C7.95343 12 8.625 11.3284 8.625 10.5C8.625 9.67157 7.95343 9 7.125 9C6.29657 9 5.625 9.67157 5.625 10.5C5.625 11.3284 6.29657 12 7.125 12Z\" fill=\"black\"/>\n <path d=\"M7.125 18C7.95343 18 8.625 17.3284 8.625 16.5C8.625 15.6716 7.95343 15 7.125 15C6.29657 15 5.625 15.6716 5.625 16.5C5.625 17.3284 6.29657 18 7.125 18Z\" fill=\"black\"/>\n <path d=\"M12.875 6C13.7034 6 14.375 5.32843 14.375 4.5C14.375 3.67157 13.7034 3 12.875 3C12.0466 3 11.375 3.67157 11.375 4.5C11.375 5.32843 12.0466 6 12.875 6Z\" fill=\"black\"/>\n <path d=\"M12.875 12C13.7034 12 14.375 11.3284 14.375 10.5C14.375 9.67157 13.7034 9 12.875 9C12.0466 9 11.375 9.67157 11.375 10.5C11.375 11.3284 12.0466 12 12.875 12Z\" fill=\"black\"/>\n <path d=\"M12.875 18C13.7034 18 14.375 17.3284 14.375 16.5C14.375 15.6716 13.7034 15 12.875 15C12.0466 15 11.375 15.6716 11.375 16.5C11.375 17.3284 12.0466 18 12.875 18Z\" fill=\"black\"/>\n </svg>\n </button>\n ) : null}\n {canMoveDocs && parentMoveEnabled ? (\n <button\n {...parentMoveDrag.attributes}\n {...parentMoveDrag.listeners}\n aria-label=\"Move document under another page\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n 'pages-hierarchy-cell__drag-handle--parent',\n parentMoveDrag.isDragging || isActiveDragRow\n ? 'pages-hierarchy-cell__drag-handle--active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={parentMoveDrag.setNodeRef}\n type=\"button\"\n >\n <ParentMoveHandleIcon />\n </button>\n ) : null}\n <span className=\"pages-hierarchy-cell__content\">\n {showHomeIcon ? <HomeIndicatorIcon /> : null}\n {children}\n </span>\n </div>\n )\n}\n"],"names":["useDraggable","ChevronIcon","useListQuery","React","usePageTree","usePageTreeRowDnd","HOME_PAGE_SLUG","isHomePageDoc","doc","__pageTreeParentID","slug","trim","normalizeSort","value","Array","isArray","ParentMoveHandleIcon","svg","aria-hidden","className","fill","height","viewBox","width","xmlns","path","d","stroke","strokeLinecap","strokeWidth","HomeIndicatorIcon","strokeLinejoin","PageTreeTitleCell","children","homeIndicatorEnabled","activeDragRowID","canMoveDocs","collapsedIDs","parentMoveEnabled","pendingMoveRowID","toggleRow","rowDnd","orderableFieldName","query","depth","__pageTreeDepth","hasChildren","__pageTreeHasChildren","shadeLevel","Math","min","__pageTreeShadeLevel","rowID","__pageTreeID","isCollapsed","has","dragIsDisabled","showHomeIcon","parentMoveDrag","id","data","dragType","disabled","querySort","sort","showOrderableHandle","Boolean","isActiveDragRow","isDragging","isOrderDragging","div","data-row-dragging","data-tree-depth","data-tree-has-children","data-tree-home","undefined","data-tree-shade-level","style","String","button","aria-expanded","aria-label","onClick","event","preventDefault","stopPropagation","type","filter","join","span","orderHandleAttributes","orderHandleListeners","ref","orderHandleRef","attributes","listeners","setNodeRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeTitleCell.tsx"],"sourcesContent":["'use client'\n\nimport { useDraggable } from '@dnd-kit/core'\nimport { ChevronIcon, useListQuery } from '@payloadcms/ui'\nimport React from 'react'\n\nimport type { PageTreeDoc } from '../utilities/pageTree.js'\n\nimport { usePageTree, usePageTreeRowDnd } from './PageTreeContext.js'\n\nconst HOME_PAGE_SLUG = 'home'\n\nfunction isHomePageDoc(doc: PageTreeDoc): boolean {\n return doc.__pageTreeParentID === null && doc.slug?.trim() === HOME_PAGE_SLUG\n}\n\nfunction normalizeSort(value: string | string[] | undefined): string | undefined {\n return Array.isArray(value) ? value[0] : value\n}\n\nfunction ParentMoveHandleIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"icon icon--drag-handle\"\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n className=\"stroke\"\n d=\"M13.75 4.25L6.25 15.75\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth=\"2.25\"\n />\n </svg>\n )\n}\n\nfunction HomeIndicatorIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"pages-hierarchy-cell__home-icon\"\n fill=\"none\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.5 7L7 3L11.5 7V13.25H2.5V7Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n />\n </svg>\n )\n}\n\nexport function PageTreeTitleCell({\n children,\n doc,\n homeIndicatorEnabled,\n}: {\n children: React.ReactNode\n doc: PageTreeDoc\n homeIndicatorEnabled: boolean\n}) {\n const {\n activeDragRowID,\n canMoveDocs,\n collapsedIDs,\n parentMoveEnabled,\n pendingMoveRowID,\n toggleRow,\n } = usePageTree()\n const rowDnd = usePageTreeRowDnd()\n const { orderableFieldName, query = {} } = useListQuery()\n const depth = doc.__pageTreeDepth\n const hasChildren = doc.__pageTreeHasChildren\n const shadeLevel = Math.min(doc.__pageTreeShadeLevel, 6)\n const rowID = doc.__pageTreeID\n const isCollapsed = hasChildren && collapsedIDs.has(rowID)\n const dragIsDisabled = !canMoveDocs || !rowID || pendingMoveRowID !== null\n const showHomeIcon = homeIndicatorEnabled && isHomePageDoc(doc)\n const parentMoveDrag = useDraggable({\n id: `page-drag:${rowID}`,\n data: {\n dragType: 'move',\n rowID,\n },\n disabled: dragIsDisabled,\n })\n const querySort = normalizeSort(query.sort)\n const showOrderableHandle =\n canMoveDocs &&\n Boolean(orderableFieldName) &&\n (querySort === orderableFieldName || querySort === `-${orderableFieldName}`)\n const isActiveDragRow = activeDragRowID === rowID\n const isDragging = parentMoveDrag.isDragging || rowDnd?.isOrderDragging || isActiveDragRow\n\n return (\n <div\n className=\"pages-hierarchy-cell\"\n data-row-dragging={isDragging ? 'true' : 'false'}\n data-tree-depth={depth}\n data-tree-has-children={hasChildren ? 'true' : 'false'}\n data-tree-home={showHomeIcon ? 'true' : undefined}\n data-tree-shade-level={shadeLevel}\n style={{ '--pages-tree-depth': String(depth) } as React.CSSProperties}\n >\n {hasChildren ? (\n <button\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? 'Expand nested items' : 'Collapse nested items'}\n className=\"pages-hierarchy-cell__toggle\"\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n toggleRow(rowID)\n }}\n type=\"button\"\n >\n <ChevronIcon\n className={[\n 'pages-hierarchy-cell__chevron',\n isCollapsed ? 'pages-hierarchy-cell__chevron--collapsed' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </button>\n ) : (\n <span className=\"pages-hierarchy-cell__spacer\" />\n )}\n {showOrderableHandle ? (\n <button\n {...(rowDnd?.orderHandleAttributes ?? {})}\n {...(rowDnd?.orderHandleListeners ?? {})}\n aria-label=\"Reorder document within this parent\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n 'pages-hierarchy-cell__drag-handle--orderable',\n rowDnd?.isOrderDragging || isActiveDragRow\n ? 'pages-hierarchy-cell__drag-handle--active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled || !rowDnd}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={rowDnd?.orderHandleRef}\n type=\"button\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.125 6C7.95343 6 8.625 5.32843 8.625 4.5C8.625 3.67157 7.95343 3 7.125 3C6.29657 3 5.625 3.67157 5.625 4.5C5.625 5.32843 6.29657 6 7.125 6Z\" fill=\"black\"/>\n <path d=\"M7.125 12C7.95343 12 8.625 11.3284 8.625 10.5C8.625 9.67157 7.95343 9 7.125 9C6.29657 9 5.625 9.67157 5.625 10.5C5.625 11.3284 6.29657 12 7.125 12Z\" fill=\"black\"/>\n <path d=\"M7.125 18C7.95343 18 8.625 17.3284 8.625 16.5C8.625 15.6716 7.95343 15 7.125 15C6.29657 15 5.625 15.6716 5.625 16.5C5.625 17.3284 6.29657 18 7.125 18Z\" fill=\"black\"/>\n <path d=\"M12.875 6C13.7034 6 14.375 5.32843 14.375 4.5C14.375 3.67157 13.7034 3 12.875 3C12.0466 3 11.375 3.67157 11.375 4.5C11.375 5.32843 12.0466 6 12.875 6Z\" fill=\"black\"/>\n <path d=\"M12.875 12C13.7034 12 14.375 11.3284 14.375 10.5C14.375 9.67157 13.7034 9 12.875 9C12.0466 9 11.375 9.67157 11.375 10.5C11.375 11.3284 12.0466 12 12.875 12Z\" fill=\"black\"/>\n <path d=\"M12.875 18C13.7034 18 14.375 17.3284 14.375 16.5C14.375 15.6716 13.7034 15 12.875 15C12.0466 15 11.375 15.6716 11.375 16.5C11.375 17.3284 12.0466 18 12.875 18Z\" fill=\"black\"/>\n </svg>\n </button>\n ) : null}\n {canMoveDocs && parentMoveEnabled ? (\n <button\n {...parentMoveDrag.attributes}\n {...parentMoveDrag.listeners}\n aria-label=\"Move document under another page\"\n className={[\n 'pages-hierarchy-cell__drag-handle',\n 'pages-hierarchy-cell__drag-handle--parent',\n parentMoveDrag.isDragging || isActiveDragRow\n ? 'pages-hierarchy-cell__drag-handle--active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={dragIsDisabled}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n ref={parentMoveDrag.setNodeRef}\n type=\"button\"\n >\n <ParentMoveHandleIcon />\n </button>\n ) : null}\n <span className=\"pages-hierarchy-cell__content\">\n {showHomeIcon ? <HomeIndicatorIcon /> : null}\n {children}\n </span>\n </div>\n )\n}\n"],"names":["useDraggable","ChevronIcon","useListQuery","React","usePageTree","usePageTreeRowDnd","HOME_PAGE_SLUG","isHomePageDoc","doc","__pageTreeParentID","slug","trim","normalizeSort","value","Array","isArray","ParentMoveHandleIcon","svg","aria-hidden","className","fill","height","viewBox","width","xmlns","path","d","stroke","strokeLinecap","strokeWidth","HomeIndicatorIcon","strokeLinejoin","PageTreeTitleCell","children","homeIndicatorEnabled","activeDragRowID","canMoveDocs","collapsedIDs","parentMoveEnabled","pendingMoveRowID","toggleRow","rowDnd","orderableFieldName","query","depth","__pageTreeDepth","hasChildren","__pageTreeHasChildren","shadeLevel","Math","min","__pageTreeShadeLevel","rowID","__pageTreeID","isCollapsed","has","dragIsDisabled","showHomeIcon","parentMoveDrag","id","data","dragType","disabled","querySort","sort","showOrderableHandle","Boolean","isActiveDragRow","isDragging","isOrderDragging","div","data-row-dragging","data-tree-depth","data-tree-has-children","data-tree-home","undefined","data-tree-shade-level","style","String","button","aria-expanded","aria-label","onClick","event","preventDefault","stopPropagation","type","filter","join","span","orderHandleAttributes","orderHandleListeners","ref","orderHandleRef","attributes","listeners","setNodeRef"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pageTreeMoveContextKey, pageTreeWriteContextKey } from '../types.js';
|
|
2
|
+
import { createFlowID, DIAGNOSTICS_FLOW_CONTEXT_KEY, readMainRowSnapshot } from '../utilities/diagnostics.js';
|
|
2
3
|
import { CANCEL_DRAG_MESSAGE } from '../utilities/moveValidation.js';
|
|
3
4
|
import { buildChildrenByParentID, collectDescendantIDs, getDocParentID, stringifyDocID } from '../utilities/pageTree.js';
|
|
4
|
-
import { pageTreeMoveContextKey, pageTreeWriteContextKey } from '../types.js';
|
|
5
5
|
import { assertUpdateAccess, collectionHasAutosaveDrafts, collectionHasDrafts, getRequestedLocale, normalizeID, respond, toCollectionID } from './shared.js';
|
|
6
6
|
const SNAPSHOT_FIELDS = [
|
|
7
7
|
'_status'
|
|
@@ -125,21 +125,21 @@ export function createMovePageEndpoint(args) {
|
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
127
|
const movedID = toCollectionID({
|
|
128
|
-
collectionSlug,
|
|
129
128
|
id: movedIDFromRoute,
|
|
129
|
+
collectionSlug,
|
|
130
130
|
req
|
|
131
131
|
});
|
|
132
132
|
const nextParentID = body.parentID === null ? null : toCollectionID({
|
|
133
|
-
collectionSlug,
|
|
134
133
|
id: body.parentID,
|
|
134
|
+
collectionSlug,
|
|
135
135
|
req
|
|
136
136
|
});
|
|
137
137
|
const accessError = await assertUpdateAccess({
|
|
138
|
+
id: movedID,
|
|
138
139
|
collectionSlug,
|
|
139
140
|
data: {
|
|
140
141
|
[parentFieldSlug]: nextParentID
|
|
141
142
|
},
|
|
142
|
-
id: movedID,
|
|
143
143
|
req
|
|
144
144
|
});
|
|
145
145
|
if (accessError) {
|
|
@@ -206,15 +206,15 @@ export function createMovePageEndpoint(args) {
|
|
|
206
206
|
req
|
|
207
207
|
});
|
|
208
208
|
// With `publishOnMove`, publish the reparent right away instead of staging
|
|
209
|
-
// it
|
|
209
|
+
// it - but ONLY when the moved doc had nothing staged before the move (its
|
|
210
210
|
// latest version, read above with `draft: true`, is already published). A
|
|
211
211
|
// doc with pending draft edits stays staged, so those in-progress edits are
|
|
212
212
|
// never published as a side effect of the move.
|
|
213
213
|
const publishMove = publishOnMove && hasDrafts && movedDoc._status === 'published';
|
|
214
214
|
const updateData = {
|
|
215
215
|
[parentFieldSlug]: body.parentID === null ? null : toCollectionID({
|
|
216
|
-
collectionSlug,
|
|
217
216
|
id: body.parentID,
|
|
217
|
+
collectionSlug,
|
|
218
218
|
req
|
|
219
219
|
}),
|
|
220
220
|
...publishMove ? {
|
|
@@ -222,6 +222,8 @@ export function createMovePageEndpoint(args) {
|
|
|
222
222
|
} : {}
|
|
223
223
|
};
|
|
224
224
|
const updateArgs = {
|
|
225
|
+
id: movedID,
|
|
226
|
+
autosave: hasAutosave && !publishMove ? true : undefined,
|
|
225
227
|
collection: collectionSlug,
|
|
226
228
|
context: {
|
|
227
229
|
// A published move changes the live URL of this page and of every
|
|
@@ -233,11 +235,9 @@ export function createMovePageEndpoint(args) {
|
|
|
233
235
|
},
|
|
234
236
|
[pageTreeWriteContextKey]: true
|
|
235
237
|
},
|
|
236
|
-
autosave: hasAutosave && !publishMove ? true : undefined,
|
|
237
238
|
data: updateData,
|
|
238
239
|
depth: 0,
|
|
239
240
|
draft: hasDrafts && !publishMove ? true : undefined,
|
|
240
|
-
id: movedID,
|
|
241
241
|
locale: getRequestedLocale(req),
|
|
242
242
|
overrideAccess: true,
|
|
243
243
|
req
|
|
@@ -246,12 +246,11 @@ export function createMovePageEndpoint(args) {
|
|
|
246
246
|
if (!req.context) {
|
|
247
247
|
req.context = {};
|
|
248
248
|
}
|
|
249
|
-
;
|
|
250
249
|
req.context[DIAGNOSTICS_FLOW_CONTEXT_KEY] = flow;
|
|
251
250
|
const beforeSnapshot = await readMainRowSnapshot({
|
|
251
|
+
id: movedID,
|
|
252
252
|
collectionSlug,
|
|
253
253
|
fields: snapshotFields,
|
|
254
|
-
id: movedID,
|
|
255
254
|
req
|
|
256
255
|
});
|
|
257
256
|
diagnostics.log({
|
|
@@ -279,9 +278,9 @@ export function createMovePageEndpoint(args) {
|
|
|
279
278
|
const result = await req.payload.update(updateArgs);
|
|
280
279
|
if (diagnostics.enabled) {
|
|
281
280
|
const afterSnapshot = await readMainRowSnapshot({
|
|
281
|
+
id: movedID,
|
|
282
282
|
collectionSlug,
|
|
283
283
|
fields: snapshotFields,
|
|
284
|
-
id: movedID,
|
|
285
284
|
req
|
|
286
285
|
});
|
|
287
286
|
diagnostics.log({
|
|
@@ -303,11 +302,11 @@ export function createMovePageEndpoint(args) {
|
|
|
303
302
|
diagnostics.log({
|
|
304
303
|
collection: collectionSlug,
|
|
305
304
|
data: {
|
|
305
|
+
name: error?.name,
|
|
306
306
|
data: error?.data ?? null,
|
|
307
307
|
durMs: Date.now() - moveStart,
|
|
308
308
|
message: error?.message,
|
|
309
|
-
movedID: String(movedID)
|
|
310
|
-
name: error?.name
|
|
309
|
+
movedID: String(movedID)
|
|
311
310
|
},
|
|
312
311
|
flow,
|
|
313
312
|
level: 'error',
|