payload-nested-docs-page-tree 1.6.0 → 1.6.2
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 +36 -5
- package/dist/components/PageTreeListView.server.js +13 -2
- package/dist/components/PageTreeListView.server.js.map +1 -1
- package/dist/components/PageTreeLocaleStatusBadges.js +3 -2
- package/dist/components/PageTreeLocaleStatusBadges.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/listSelect.d.ts +9 -0
- package/dist/utilities/listSelect.js +24 -0
- package/dist/utilities/listSelect.js.map +1 -0
- package/dist/utilities/localeStatus.d.ts +2 -1
- package/dist/utilities/localeStatus.js +15 -11
- package/dist/utilities/localeStatus.js.map +1 -1
- package/dist/utilities/pageTreeConfig.js +1 -0
- package/dist/utilities/pageTreeConfig.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -393,15 +393,18 @@ pnpm add /path/payload-nested-docs-page-tree-*.tgz
|
|
|
393
393
|
### Locale badge visibility
|
|
394
394
|
|
|
395
395
|
With localized status badges enabled, the optional top-level
|
|
396
|
-
`localeBadgeVisibility: ({ doc, locale, req }) => boolean` callback decides which
|
|
397
|
-
badges are visible. It runs only on the server
|
|
398
|
-
|
|
396
|
+
`localeBadgeVisibility: ({ doc, publishedDoc, locale, req }) => boolean` callback decides which
|
|
397
|
+
badges are visible. It runs only on the server and receives the latest draft as
|
|
398
|
+
`doc` and the current document as `publishedDoc` when readable. Both contain all
|
|
399
|
+
locales and respect the current user's read access. Check each locale's status
|
|
400
|
+
before treating current content as published. This lets visibility follow published
|
|
401
|
+
content independently of pending draft changes. Returning false hides the badge
|
|
399
402
|
from both sight and assistive technology while preserving its aligned slot,
|
|
400
403
|
including when that locale is selected. Publication status is unchanged.
|
|
401
404
|
|
|
402
405
|
Without a callback, all locale badges remain visible. When configured, the existing
|
|
403
|
-
batched draft
|
|
404
|
-
queries are added. The callback and document content are not passed to the client.
|
|
406
|
+
two batched queries read the draft and current document content needed by the
|
|
407
|
+
callback; no per-row queries are added. The callback and document content are not passed to the client.
|
|
405
408
|
Project-specific inheritance or detachment rules belong in the consuming app.
|
|
406
409
|
|
|
407
410
|
The optional top-level
|
|
@@ -412,3 +415,31 @@ all locales. Check the current document's locale status before treating its cont
|
|
|
412
415
|
as published. This callback loads content in the same two access-controlled batched
|
|
413
416
|
queries; no document content or callbacks are passed to the client. It never writes
|
|
414
417
|
publication state. Without it, the plugin's normal status behavior is unchanged.
|
|
418
|
+
|
|
419
|
+
The status callback can also return `{ status, label }` to override one locale's
|
|
420
|
+
display text while retaining its publication status and status color. The label is
|
|
421
|
+
used in the badge's accessible name and, for the active locale, its visible text.
|
|
422
|
+
The resolved label is also exposed as `data-label` for custom styling. Existing
|
|
423
|
+
callbacks returning a status string continue to work.
|
|
424
|
+
|
|
425
|
+
### List query performance
|
|
426
|
+
|
|
427
|
+
Use `fastMode` as the single switch for narrower page-tree and status queries:
|
|
428
|
+
|
|
429
|
+
```ts
|
|
430
|
+
nestedDocsPageTreePlugin({
|
|
431
|
+
collections: ['pages'],
|
|
432
|
+
fastMode: true,
|
|
433
|
+
})
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
With `fastMode: true`, tree queries select active columns plus the title, parent,
|
|
437
|
+
breadcrumbs, slug, status, ordering, and effective sort fields. Status queries select
|
|
438
|
+
`id` and `_status`, plus breadcrumbs when needed for live links.
|
|
439
|
+
|
|
440
|
+
If custom cells, hooks, `localeBadgeStatus`, or `localeBadgeVisibility` read extra
|
|
441
|
+
fields, include them in the collection's native Payload `forceSelect`. Preview and
|
|
442
|
+
live URL callbacks retain full documents so their links continue to work.
|
|
443
|
+
|
|
444
|
+
With `fastMode: false` (the default), the plugin reads full documents for tree and
|
|
445
|
+
status queries, even when `admin.enableListViewSelectAPI` is enabled.
|
|
@@ -6,6 +6,7 @@ import { createLocalReq, extractJWT } from 'payload';
|
|
|
6
6
|
import { applyLocaleFiltering, combineWhereConstraints, mergeListSearchAndWhere } from 'payload/shared';
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js';
|
|
9
|
+
import { getPageTreeListSelect } from '../utilities/listSelect.js';
|
|
9
10
|
import { withPageTreeLocaleStatuses } from '../utilities/localeStatus.js';
|
|
10
11
|
import { buildPageTreeDocs } from '../utilities/pageTree.js';
|
|
11
12
|
import { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js';
|
|
@@ -184,7 +185,7 @@ function getBaseFilterArgs(props, req, query, locale) {
|
|
|
184
185
|
};
|
|
185
186
|
}
|
|
186
187
|
async function getDocsWithDisplayStatus(args) {
|
|
187
|
-
const { badgesLinks, breadcrumbsFieldSlug, collectionConfig, collectionSlug, docs, locale, payload, req, user } = args;
|
|
188
|
+
const { badgesLinks, breadcrumbsFieldSlug, collectionConfig, collectionSlug, docs, fastMode, locale, payload, req, user } = args;
|
|
188
189
|
const docIDs = docs.map((doc)=>doc.id).filter((id)=>typeof id === 'number' || typeof id === 'string');
|
|
189
190
|
if (docIDs.length === 0) {
|
|
190
191
|
return docs;
|
|
@@ -198,7 +199,7 @@ async function getDocsWithDisplayStatus(args) {
|
|
|
198
199
|
overrideAccess: false,
|
|
199
200
|
pagination: false,
|
|
200
201
|
req,
|
|
201
|
-
select: typeof badgesLinks?.liveURL === 'function' ? undefined : {
|
|
202
|
+
select: !fastMode || typeof badgesLinks?.liveURL === 'function' ? undefined : {
|
|
202
203
|
id: true,
|
|
203
204
|
_status: true,
|
|
204
205
|
...badgesLinks?.liveURL ? {
|
|
@@ -321,6 +322,14 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
321
322
|
draft: props.collectionConfig.versions?.drafts ? true : undefined,
|
|
322
323
|
fallbackLocale: false,
|
|
323
324
|
includeLockStatus: true,
|
|
325
|
+
select: pageTreeConfig.fastMode && !pageTreeConfig.badgesLinks ? getPageTreeListSelect({
|
|
326
|
+
columns: props.columnState,
|
|
327
|
+
useAsTitle: props.collectionConfig.admin.useAsTitle,
|
|
328
|
+
parentFieldSlug: pageTreeConfig.parentFieldSlug,
|
|
329
|
+
breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,
|
|
330
|
+
orderableFieldName,
|
|
331
|
+
sort: effectiveSort
|
|
332
|
+
}) : undefined,
|
|
324
333
|
locale,
|
|
325
334
|
overrideAccess: false,
|
|
326
335
|
pagination: false,
|
|
@@ -340,12 +349,14 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
340
349
|
const treeSourceDocs = statusLocales.length ? await withPageTreeLocaleStatuses({
|
|
341
350
|
collectionSlug: props.collectionSlug,
|
|
342
351
|
docs: fullResult.docs,
|
|
352
|
+
fastMode: pageTreeConfig.fastMode,
|
|
343
353
|
localeBadgeStatus: pageTreeConfig.localeBadgeStatus,
|
|
344
354
|
localeBadgeVisibility: pageTreeConfig.localeBadgeVisibility,
|
|
345
355
|
locales: statusLocales,
|
|
346
356
|
payload: props.payload,
|
|
347
357
|
req
|
|
348
358
|
}) : await getDocsWithDisplayStatus({
|
|
359
|
+
fastMode: pageTreeConfig.fastMode,
|
|
349
360
|
badgesLinks: pageTreeConfig.badgesLinks,
|
|
350
361
|
breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,
|
|
351
362
|
collectionConfig: props.collectionConfig,
|
|
@@ -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 { 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 { withPageTreeLocaleStatuses } from '../utilities/localeStatus.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])\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, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page, 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 typeof badgesLinks?.liveURL === 'function'\n ? undefined\n : {\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 { 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 statusLocales =\n pageTreeConfig.badges.locales &&\n props.collectionConfig.versions?.drafts?.localizeStatus &&\n clientConfig.localization\n ? clientConfig.localization.locales.map(({ code }: { code: string }) => code)\n : []\n const treeSourceDocs = statusLocales.length\n ? await withPageTreeLocaleStatuses({\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n localeBadgeStatus: pageTreeConfig.localeBadgeStatus,\n localeBadgeVisibility: pageTreeConfig.localeBadgeVisibility,\n locales: statusLocales,\n payload: props.payload,\n req,\n })\n : await getDocsWithDisplayStatus({\n badgesLinks: pageTreeConfig.badgesLinks,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs 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\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 = 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, 'columnState' | 'Table'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n beforeActions: props.beforeActions,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n collectionSlug: props.collectionSlug,\n Description: props.Description,\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 const badgesLinks = pageTreeConfig.badgesLinks ? { ...pageTreeConfig.badgesLinks } : undefined\n if (typeof badgesLinks?.liveURL === 'function') {\n delete badgesLinks.liveURL\n }\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n allDocs={orderedDocs}\n badgeConfig={pageTreeConfig.badges}\n badgesLinks={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","withPageTreeLocaleStatuses","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","liveURL","_status","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","statusLocales","badges","locales","localizeStatus","localization","treeSourceDocs","localeBadgeStatus","localeBadgeVisibility","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","beforeActions","BeforeList","BeforeListTable","Description","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","allDocs","badgeConfig","homeIndicatorEnabled","homeIndicator","enabled","sourceDocs"],"mappings":";AAQA,SAASA,UAAU,EAAEC,WAAW,QAAQ,qBAAoB;AAC5D,SAASC,eAAe,QAAQ,2CAA0C;AAC1E,SAASC,OAAO,QAAQ,kBAAiB;AACzC,SAASC,cAAc,EAAEC,UAAU,QAAQ,UAAS;AACpD,SACEC,oBAAoB,EACpBC,uBAAuB,EACvBC,uBAAuB,QAClB,iBAAgB;AACvB,OAAOC,WAAW,QAAO;AAIzB,SAASC,yBAAyB,QAAQ,6BAA4B;AACtE,SAASC,0BAA0B,QAAQ,+BAA8B;AACzE,SAASC,iBAAiB,QAAQ,2BAA0B;AAC5D,SAASC,2BAA2B,QAAQ,iCAAgC;AAC5E,SAASC,2BAA2B,QAAQ,yBAAwB;AACpE,OAAOC,4BAA4B,+BAA8B;AAKjE,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,EAAEL,gBACjCA;QAEFM,MAAMvB,cACJL,cAAc0B,YAAYE,IAAI,EAAEP,MAAMQ,IAAI,CAACD,IAAI,GAC/CP,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,IAUvC;IACC,MAAM,EACJqB,WAAW,EACXC,oBAAoB,EACpB3B,gBAAgB,EAChB4B,cAAc,EACdC,IAAI,EACJL,MAAM,EACNM,OAAO,EACPR,GAAG,EACHS,IAAI,EACL,GAAG1B;IAEJ,MAAM2B,SAASH,KACZI,GAAG,CAAC,CAACC,MAAQA,IAAIC,EAAE,EACnB9E,MAAM,CAAC,CAAC8E,KAA8B,OAAOA,OAAO,YAAY,OAAOA,OAAO;IAEjF,IAAIH,OAAOrE,MAAM,KAAK,GAAG;QACvB,OAAOkE;IACT;IAEA,MAAMO,gBAAgBpC,iBAAiBqC,QAAQ,EAAEC,SAC7C,MAAMR,QAAQS,IAAI,CAAC;QACjBC,YAAYZ;QACZa,OAAO;QACPC,OAAO;QACPC,gBAAgB;QAChBnB;QACAoB,gBAAgB;QAChBC,YAAY;QACZvB;QACAwB,QACE,OAAOpB,aAAaqB,YAAY,aAC5BzE,YACA;YACE6D,IAAI;YACJa,SAAS;YACT,GAAItB,aAAaqB,UAAU;gBAAE,CAACpB,qBAAqB,EAAE;YAAK,IAAI,CAAC,CAAC;QAClE;QACNI;QACAX,OAAO;YACLe,IAAI;gBACFc,IAAIjB;YACN;QACF;IACF,KACA;QAAEH;IAAK;IAEX,MAAMqB,cAAc,IAAIC,IACtBf,cAAcP,IAAI,CAACI,GAAG,CAAC,CAACC,MAA2B;YAACkB,OAAOlB,IAAIC,EAAE;YAAGD;SAAI;IAE1E,MAAMmB,cAAczG,4BAA4B;QAC9C0G,aAAalB,cAAcP,IAAI;QAC/B0B,WAAW1B;IACb;IACA,MAAM2B,QAAQ9B,eAAe1B,iBAAiByD,KAAK,CAACC,OAAO,GAAGvH,WAAWmF,OAAO;IAEhF,OAAOqC,QAAQC,GAAG,CAChBP,YAAYpB,GAAG,CAAC,OAAOC;QACrB,MAAM2B,WAAW;YAAE,GAAG3B,GAAG;QAAC;QAC1B,OAAO2B,SAASC,qBAAqB;QACrC,MAAMC,QAAQ,MAAMvH,0BAA0B;YAC5CkF;YACAC;YACA3B;YACAgE,UAAUH;YACVI,cAAcf,YAAYgB,GAAG,CAACd,OAAOlB,IAAIC,EAAE;YAC3Cb;YACAkC;QACF;QACA,OAAO;YAAE,GAAGK,QAAQ;YAAEC,uBAAuBC;QAAM;IACrD;AAEJ;AAEA,eAAeI,oBAAoB,EACjCvC,cAAc,EACdwC,IAAI,EACJtC,OAAO,EACPR,GAAG,EACHS,IAAI,EAOL;IAIC,MAAMsC,eAAerI,gBAAgB;QACnCsI,QAAQxC,QAAQwC,MAAM;QACtBF,MAAMA;QACNG,WAAWzC,QAAQyC,SAAS;QAC5BxC,MAAOA,QAAQ;IACjB;IAEA,MAAM3F,qBAAqB;QACzBiI;QACAC,QAAQxC,QAAQwC,MAAM;QACtBhD;IACF;IAEA,MAAMkD,yBAAyBH,aAAaI,WAAW,CAAClC,IAAI,CAC1D,CAACC,aAAeA,WAAWkC,IAAI,KAAK9C;IAGtC,IAAI,CAAC4C,wBAAwB;QAC3B,MAAM,IAAIG,MAAM,CAAC,gDAAgD,EAAE/C,eAAe,CAAC,CAAC;IACtF;IAEA,OAAO;QACL4C;QACAH;IACF;AACF;AAEA,OAAO,eAAeO,2BAA2BlE,KAA0B;IACzE,MAAMmE,iBAAiBlI,4BAA4B+D,MAAMV,gBAAgB;IAEzE,IAAI,CAAC6E,gBAAgB;QACnB,MAAM,IAAIF,MAAM,CAAC,wCAAwC,EAAEjE,MAAMkB,cAAc,CAAC,CAAC,CAAC;IACpF;IAEA,IAAI,OAAOlB,MAAMV,gBAAgB,CAACyD,KAAK,CAACqB,UAAU,KAAK,UAAU;QAC/D,MAAM,IAAIH,MAAM,CAAC,YAAY,EAAEjE,MAAMkB,cAAc,CAAC,8BAA8B,CAAC;IACrF;IAEA,MAAML,QAAQd,gBAAgBC,OAAOmE,eAAeE,YAAY;IAChE,MAAMzE,qBAAqBP,sBAAsBW,MAAMV,gBAAgB;IACvE,MAAMG,cAAcD,eAAeQ,MAAMV,gBAAgB;IACzD,MAAMgF,gBAAgB5E,qBAAqB;QACzCD;QACAG;QACAC,MAAMX,cAAc2B,MAAMhB,IAAI;IAChC;IACA,MAAM0E,iBAAiB;QACrB,GAAG1D,KAAK;QACRhB,MAAMyE;IACR;IACA,MAAMxD,SAASd,MAAMc,MAAM,EAAE0D;IAC7B,MAAMC,iBAAiB,MAAMlJ;IAC7B,MAAMmJ,OACJD,eAAejB,GAAG,CAAC,qBAAqBmB,MAAM,IAAI,CAAC,EAAE,EAAEC,UACvDH,eAAejB,GAAG,CAAC,WACnB;IACF,MAAMqB,WACJJ,eAAejB,GAAG,CAAC,sBAAsBmB,MAAM,IAAI,CAAC,EAAE,EAAEC,WAAW,UAAU,UAAU;IACzF,MAAME,aAAa,IAAIC,IAAI/E,MAAMoB,OAAO,CAACwC,MAAM,CAACoB,SAAS,IAAI,GAAGH,SAAS,GAAG,EAAEH,MAAM;IACpFI,WAAWG,QAAQ,GAAG,GAAGjF,MAAMoB,OAAO,CAACwC,MAAM,CAACsB,MAAM,EAAEnC,SAAS,SAAS,aAAa,EAAE/C,MAAMkB,cAAc,EAAE;IAC7G,MAAMN,MAAM,MAAMpF,eAChB;QACEyG,gBAAgB;QAChBnB;QACAF,KAAK;YACHrF,SAASkJ;YACTf,MAAM1D,MAAM0D,IAAI;YAChB5C;YACAM,SAASpB,MAAMoB,OAAO;YACtBP,OAAO0D;YACPY,KAAKL,WAAWM,IAAI;YACpB/D,MAAMrB,MAAMqB,IAAI;QAClB;QACAA,MAAMrB,MAAMqB,IAAI;IAClB,GACArB,MAAMoB,OAAO;IAGf,MAAMiE,aACJrF,MAAMV,gBAAgB,CAACyD,KAAK,EAAEsC,cAAcrF,MAAMV,gBAAgB,CAACyD,KAAK,EAAEuC;IAC5E,MAAMC,uBAAuBF,aACzB,MAAMA,WAAW1E,kBAAkBX,OAAOY,KAAKC,OAAOC,WACtDlD;IACJ,MAAM4H,cAAc7J,wBAAwB;QAC1CC,wBAAwB;YACtB0D,kBAAkBU,MAAMV,gBAAgB;YACxCmB,QAAQxB,gBAAgB4B,MAAMJ,MAAM;YACpCC,OAAOZ,eAAee,MAAMH,KAAK;QACnC;QACA6E,wBAAwB3H;KACzB;IACD,MAAM8C,QAAQzC,OAAOM,IAAI,CAACiH,aAAavI,MAAM,GAAG,IAAIuI,cAAc5H;IAElE,MAAM6H,aAAa,MAAMzF,MAAMoB,OAAO,CAACS,IAAI,CAAC;QAC1CC,YAAY9B,MAAMkB,cAAc;QAChCa,OAAO;QACPC,OAAOhC,MAAMV,gBAAgB,CAACqC,QAAQ,EAAEC,SAAS,OAAOhE;QACxDqE,gBAAgB;QAChByD,mBAAmB;QACnB5E;QACAoB,gBAAgB;QAChBC,YAAY;QACZvB;QACAf,MAAMX,cAAc2B,MAAMhB,IAAI,KAAKJ;QACnC4B,MAAMrB,MAAMqB,IAAI;QAChBX;IACF;IACA,MAAM,EAAEoD,sBAAsB,EAAEH,YAAY,EAAE,GAAG,MAAMF,oBAAoB;QACzEvC,gBAAgBlB,MAAMkB,cAAc;QACpCwC,MAAM1D,MAAM0D,IAAI;QAChBtC,SAASpB,MAAMoB,OAAO;QACtBR;QACAS,MAAMrB,MAAMqB,IAAI;IAClB;IACA,MAAMsE,gBACJxB,eAAeyB,MAAM,CAACC,OAAO,IAC7B7F,MAAMV,gBAAgB,CAACqC,QAAQ,EAAEC,QAAQkE,kBACzCnC,aAAaoC,YAAY,GACrBpC,aAAaoC,YAAY,CAACF,OAAO,CAACtE,GAAG,CAAC,CAAC,EAAEiD,IAAI,EAAoB,GAAKA,QACtE,EAAE;IACR,MAAMwB,iBAAiBL,cAAc1I,MAAM,GACvC,MAAMlB,2BAA2B;QAC/BmF,gBAAgBlB,MAAMkB,cAAc;QACpCC,MAAMsE,WAAWtE,IAAI;QACrB8E,mBAAmB9B,eAAe8B,iBAAiB;QACnDC,uBAAuB/B,eAAe+B,qBAAqB;QAC3DL,SAASF;QACTvE,SAASpB,MAAMoB,OAAO;QACtBR;IACF,KACA,MAAMG,yBAAyB;QAC7BC,aAAamD,eAAenD,WAAW;QACvCC,sBAAsBkD,eAAelD,oBAAoB;QACzD3B,kBAAkBU,MAAMV,gBAAgB;QACxC4B,gBAAgBlB,MAAMkB,cAAc;QACpCC,MAAMsE,WAAWtE,IAAI;QACrBL;QACAM,SAASpB,MAAMoB,OAAO;QACtBR;QACAS,MAAMrB,MAAMqB,IAAI;IAClB;IAEJ,MAAM8E,cAAcnK,kBAAkBgK,gBAAgB;QACpDI,iBAAiBjC,eAAeiC,eAAe;QAC/CvG,MAAMyE;IACR;IACA,MAAM+B,cAA6B;QACjClF,MAAMgF;QACNG,aAAa;QACbC,aAAa;QACbjG,OAAOxB,eAAe+B,MAAMP,KAAK,EAAE6D,eAAeE,YAAY;QAC9DmC,UAAU;QACVjG,MAAM;QACNkG,eAAeN,YAAYlJ,MAAM,GAAG,IAAI,IAAI;QAC5CyJ,UAAU;QACVC,WAAWR,YAAYlJ,MAAM;QAC7B2J,YAAY;IACd;IAEA,MAAMC,oBAAwC,AAC5C7G,MAAM8G,WAAW,CAIjBvF,GAAG,CAAC,CAAC,EAAEwF,QAAQ,EAAEC,MAAM,EAAE,GAAM,CAAA;YAC/BD;YACAC,QAAQD,aAAa/G,MAAMV,gBAAgB,CAACyD,KAAK,CAACqB,UAAU,GAAG,OAAO4C;QACxE,CAAA;IACA,MAAMC,UAAU7L,WAAW;QACzBuI;QACArE,kBAAkBwE;QAClB5C,gBAAgBlB,MAAMkB,cAAc;QACpC+F,SAASJ;QACTnD,MAAM1D,MAAM0D,IAAI;QAChBwD,aAAalH,MAAMkH,WAAW;IAChC;IACA,MAAMC,mBAAmBnH,MAAMkH,WAAW,EAAEnD,aAAa,CAAC/D,MAAMkB,cAAc,CAAC,EAAEkG,UAAU;IAC3F,MAAMC,gBAAgBhM,YAAY;QAChCyI;QACAH;QACArE,kBAAkBU,MAAMV,gBAAgB;QACxC2H;QACAzG,MAAM6F;QACNiB,qBAAqB1K,QAAQoD,MAAMsH,mBAAmB;QACtDH;QACAzD,MAAM1D,MAAM0D,IAAI;QAChB9D,oBAAoBA,sBAAsB;QAC1CwB,SAASpB,MAAMoB,OAAO;QACtBP,OAAO0D;QACP3D;QACA2G,iBAAiB;QACjBnD,YAAYpE,MAAMV,gBAAgB,CAACyD,KAAK,CAACqB,UAAU;QACnDoD,UAAUxH,MAAMwH,QAAQ;IAC1B;IACA,MAAMC,cAAkE;QACtEC,WAAW1H,MAAM0H,SAAS;QAC1BC,gBAAgB3H,MAAM2H,cAAc;QACpCC,eAAe5H,MAAM4H,aAAa;QAClCC,YAAY7H,MAAM6H,UAAU;QAC5BC,iBAAiB9H,MAAM8H,eAAe;QACtC5G,gBAAgBlB,MAAMkB,cAAc;QACpC6G,aAAa/H,MAAM+H,WAAW;QAC9BC,mBAAmBhI,MAAMgI,iBAAiB;QAC1CC,iBAAiBjI,MAAMiI,eAAe;QACtCC,qBAAqBlI,MAAMkI,mBAAmB;QAC9CZ,qBAAqBtH,MAAMsH,mBAAmB;QAC9Ca,qBAAqBnI,MAAMmI,mBAAmB;QAC9CC,qBAAqBpI,MAAMoI,mBAAmB;QAC9CC,oBAAoBrI,MAAMqI,kBAAkB;QAC5CC,eAAetI,MAAMsI,aAAa;QAClClI,iBAAiBJ,MAAMI,eAAe;QACtCmI,gBAAgBvI,MAAMuI,cAAc;QACpCC,eAAexI,MAAMwI,aAAa;QAClCC,aAAazI,MAAMyI,WAAW;QAC9BC,wBAAwB1I,MAAM0I,sBAAsB;QACpDC,iBAAiB3I,MAAM2I,eAAe;QACtCC,uBAAuB5I,MAAM4I,qBAAqB;QAClDpB,UAAUxH,MAAMwH,QAAQ;IAC1B;IACA,MAAMqB,cAAcjM,QAAQoD,MAAMkH,WAAW,EAAEnD,aAAa,CAAC/D,MAAMkB,cAAc,CAAC,EAAE4H;IACpF,MAAM9H,cAAcmD,eAAenD,WAAW,GAAG;QAAE,GAAGmD,eAAenD,WAAW;IAAC,IAAIpD;IACrF,IAAI,OAAOoD,aAAaqB,YAAY,YAAY;QAC9C,OAAOrB,YAAYqB,OAAO;IAC5B;IAEA,qBACE,KAAClG;QACE,GAAGsL,WAAW;QACfsB,SAAS5C;QACT6C,aAAa7E,eAAeyB,MAAM;QAClC5E,aAAaA;QACb6H,aAAaA;QACb/B,aAAaO,cAAcP,WAAW;QACtCmC,sBAAsB9E,eAAe+E,aAAa,CAACC,OAAO;QAC1DvJ,oBAAoBA;QACpBwG,iBAAiBjC,eAAeiC,eAAe;QAC/CvF,OAAO0D;QACP6E,YAAYpD;QACZ5B,YAAYpE,MAAMV,gBAAgB,CAACyD,KAAK,CAACqB,UAAU;;AAGzD;AAEA,eAAeF,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 { getPageTreeListSelect } from '../utilities/listSelect.js'\nimport { withPageTreeLocaleStatuses } from '../utilities/localeStatus.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])\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, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page, 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 fastMode?: boolean\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 fastMode,\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 !fastMode || typeof badgesLinks?.liveURL === 'function'\n ? undefined\n : {\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 select:\n pageTreeConfig.fastMode && !pageTreeConfig.badgesLinks\n ? getPageTreeListSelect({\n columns: props.columnState,\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n orderableFieldName,\n sort: effectiveSort,\n })\n : undefined,\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 { 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 statusLocales =\n pageTreeConfig.badges.locales &&\n props.collectionConfig.versions?.drafts?.localizeStatus &&\n clientConfig.localization\n ? clientConfig.localization.locales.map(({ code }: { code: string }) => code)\n : []\n const treeSourceDocs = statusLocales.length\n ? await withPageTreeLocaleStatuses({\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as PageTreeSourceDoc[],\n fastMode: pageTreeConfig.fastMode,\n localeBadgeStatus: pageTreeConfig.localeBadgeStatus,\n localeBadgeVisibility: pageTreeConfig.localeBadgeVisibility,\n locales: statusLocales,\n payload: props.payload,\n req,\n })\n : await getDocsWithDisplayStatus({\n fastMode: pageTreeConfig.fastMode,\n badgesLinks: pageTreeConfig.badgesLinks,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs 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\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 = 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, 'columnState' | 'Table'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n beforeActions: props.beforeActions,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n collectionSlug: props.collectionSlug,\n Description: props.Description,\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 const badgesLinks = pageTreeConfig.badgesLinks ? { ...pageTreeConfig.badgesLinks } : undefined\n if (typeof badgesLinks?.liveURL === 'function') {\n delete badgesLinks.liveURL\n }\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n allDocs={orderedDocs}\n badgeConfig={pageTreeConfig.badges}\n badgesLinks={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","getPageTreeListSelect","withPageTreeLocaleStatuses","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","fastMode","payload","user","docIDs","map","doc","id","currentResult","versions","drafts","find","collection","depth","draft","fallbackLocale","overrideAccess","pagination","select","liveURL","_status","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","columns","columnState","parentFieldSlug","statusLocales","badges","locales","localizeStatus","localization","treeSourceDocs","localeBadgeStatus","localeBadgeVisibility","orderedDocs","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","accessor","active","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","beforeActions","BeforeList","BeforeListTable","Description","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","allDocs","badgeConfig","homeIndicatorEnabled","homeIndicator","enabled","sourceDocs"],"mappings":"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"}
|
|
@@ -10,9 +10,9 @@ export function PageTreeLocaleStatusBadges({ badgeConfig, collectionSlug, docID,
|
|
|
10
10
|
const { t } = useTranslation();
|
|
11
11
|
return /*#__PURE__*/ _jsx("span", {
|
|
12
12
|
className: "pages-hierarchy-locale-statuses",
|
|
13
|
-
children: statuses.map(({ locale: code, status, visible })=>{
|
|
13
|
+
children: statuses.map(({ label: customLabel, locale: code, status, visible })=>{
|
|
14
14
|
const active = code === locale?.code;
|
|
15
|
-
const label = getPageTreeBadgeLabel({
|
|
15
|
+
const label = customLabel?.trim() || getPageTreeBadgeLabel({
|
|
16
16
|
badgeLabels: badgeConfig.labels,
|
|
17
17
|
status,
|
|
18
18
|
t
|
|
@@ -37,6 +37,7 @@ export function PageTreeLocaleStatusBadges({ badgeConfig, collectionSlug, docID,
|
|
|
37
37
|
className: `pages-hierarchy-status-badge pages-hierarchy-status-badge--${status} pages-hierarchy-locale-status-badge`,
|
|
38
38
|
"data-active": active ? 'true' : 'false',
|
|
39
39
|
"data-custom-color": color ? 'true' : undefined,
|
|
40
|
+
"data-label": label,
|
|
40
41
|
"data-locale": code,
|
|
41
42
|
"data-status": status,
|
|
42
43
|
href: href,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeLocaleStatusBadges.tsx"],"sourcesContent":["'use client'\n\nimport { useConfig, useLocale, useTranslation } from '@payloadcms/ui'\nimport { formatAdminURL } from 'payload/shared'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeLocaleStatus } from '../types.js'\n\nimport { getPageTreeBadgeColor, getPageTreeBadgeLabel } from '../utilities/status.js'\n\nexport function PageTreeLocaleStatusBadges({\n badgeConfig,\n collectionSlug,\n docID,\n statuses,\n}: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n collectionSlug?: string\n docID?: number | string\n statuses: PageTreeLocaleStatus[]\n}) {\n const { config } = useConfig()\n const locale = useLocale()\n const { t } = useTranslation()\n\n return (\n <span className=\"pages-hierarchy-locale-statuses\">\n {statuses.map(({ locale: code, status, visible }) => {\n const active = code === locale?.code\n const label
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeLocaleStatusBadges.tsx"],"sourcesContent":["'use client'\n\nimport { useConfig, useLocale, useTranslation } from '@payloadcms/ui'\nimport { formatAdminURL } from 'payload/shared'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeLocaleStatus } from '../types.js'\n\nimport { getPageTreeBadgeColor, getPageTreeBadgeLabel } from '../utilities/status.js'\n\nexport function PageTreeLocaleStatusBadges({\n badgeConfig,\n collectionSlug,\n docID,\n statuses,\n}: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n collectionSlug?: string\n docID?: number | string\n statuses: PageTreeLocaleStatus[]\n}) {\n const { config } = useConfig()\n const locale = useLocale()\n const { t } = useTranslation()\n\n return (\n <span className=\"pages-hierarchy-locale-statuses\">\n {statuses.map(({ label: customLabel, locale: code, status, visible }) => {\n const active = code === locale?.code\n const label =\n customLabel?.trim() ||\n getPageTreeBadgeLabel({ badgeLabels: badgeConfig.labels, status, t })\n const color = getPageTreeBadgeColor({ badgeColors: badgeConfig.colors, status })\n\n const href =\n visible !== false && collectionSlug && docID !== undefined\n ? formatAdminURL({\n adminRoute: config.routes.admin,\n includeBasePath: true,\n path: `/collections/${encodeURIComponent(collectionSlug)}/${encodeURIComponent(docID)}?${new URLSearchParams({ locale: code })}`,\n })\n : undefined\n const Badge = href ? 'a' : 'span'\n\n return (\n <span\n className={`pages-hierarchy-locale-status-slot${active ? ' pages-hierarchy-locale-status-slot--active' : ''}`}\n key={code}\n >\n <Badge\n aria-hidden={visible === false ? true : undefined}\n aria-label={`${code.toUpperCase()}: ${label}`}\n className={`pages-hierarchy-status-badge pages-hierarchy-status-badge--${status} pages-hierarchy-locale-status-badge`}\n data-active={active ? 'true' : 'false'}\n data-custom-color={color ? 'true' : undefined}\n data-label={label}\n data-locale={code}\n data-status={status}\n href={href}\n onClick={href ? (event: React.MouseEvent) => event.stopPropagation() : undefined}\n onPointerDown={\n href ? (event: React.PointerEvent) => event.stopPropagation() : undefined\n }\n role={href ? undefined : 'img'}\n style={{\n ...(color ? ({ '--page-tree-badge-base': color } as React.CSSProperties) : {}),\n ...(visible === false ? { visibility: 'hidden' } : {}),\n }}\n >\n <span className=\"pages-hierarchy-locale-status-badge__code\">\n {code.toUpperCase()}\n </span>\n {active && (\n <>\n <span\n aria-hidden=\"true\"\n className=\"pages-hierarchy-locale-status-badge__separator\"\n >\n ·\n </span>\n <span className=\"pages-hierarchy-locale-status-badge__label\">{label}</span>\n </>\n )}\n </Badge>\n </span>\n )\n })}\n </span>\n )\n}\n"],"names":["useConfig","useLocale","useTranslation","formatAdminURL","React","getPageTreeBadgeColor","getPageTreeBadgeLabel","PageTreeLocaleStatusBadges","badgeConfig","collectionSlug","docID","statuses","config","locale","t","span","className","map","label","customLabel","code","status","visible","active","trim","badgeLabels","labels","color","badgeColors","colors","href","undefined","adminRoute","routes","admin","includeBasePath","path","encodeURIComponent","URLSearchParams","Badge","aria-hidden","aria-label","toUpperCase","data-active","data-custom-color","data-label","data-locale","data-status","onClick","event","stopPropagation","onPointerDown","role","style","visibility"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,SAAS,EAAEC,cAAc,QAAQ,iBAAgB;AACrE,SAASC,cAAc,QAAQ,iBAAgB;AAC/C,OAAOC,WAAW,QAAO;AAIzB,SAASC,qBAAqB,EAAEC,qBAAqB,QAAQ,yBAAwB;AAErF,OAAO,SAASC,2BAA2B,EACzCC,WAAW,EACXC,cAAc,EACdC,KAAK,EACLC,QAAQ,EAMT;IACC,MAAM,EAAEC,MAAM,EAAE,GAAGZ;IACnB,MAAMa,SAASZ;IACf,MAAM,EAAEa,CAAC,EAAE,GAAGZ;IAEd,qBACE,KAACa;QAAKC,WAAU;kBACbL,SAASM,GAAG,CAAC,CAAC,EAAEC,OAAOC,WAAW,EAAEN,QAAQO,IAAI,EAAEC,MAAM,EAAEC,OAAO,EAAE;YAClE,MAAMC,SAASH,SAASP,QAAQO;YAChC,MAAMF,QACJC,aAAaK,UACblB,sBAAsB;gBAAEmB,aAAajB,YAAYkB,MAAM;gBAAEL;gBAAQP;YAAE;YACrE,MAAMa,QAAQtB,sBAAsB;gBAAEuB,aAAapB,YAAYqB,MAAM;gBAAER;YAAO;YAE9E,MAAMS,OACJR,YAAY,SAASb,kBAAkBC,UAAUqB,YAC7C5B,eAAe;gBACb6B,YAAYpB,OAAOqB,MAAM,CAACC,KAAK;gBAC/BC,iBAAiB;gBACjBC,MAAM,CAAC,aAAa,EAAEC,mBAAmB5B,gBAAgB,CAAC,EAAE4B,mBAAmB3B,OAAO,CAAC,EAAE,IAAI4B,gBAAgB;oBAAEzB,QAAQO;gBAAK,IAAI;YAClI,KACAW;YACN,MAAMQ,QAAQT,OAAO,MAAM;YAE3B,qBACE,KAACf;gBACCC,WAAW,CAAC,kCAAkC,EAAEO,SAAS,gDAAgD,IAAI;0BAG7G,cAAA,MAACgB;oBACCC,eAAalB,YAAY,QAAQ,OAAOS;oBACxCU,cAAY,GAAGrB,KAAKsB,WAAW,GAAG,EAAE,EAAExB,OAAO;oBAC7CF,WAAW,CAAC,2DAA2D,EAAEK,OAAO,oCAAoC,CAAC;oBACrHsB,eAAapB,SAAS,SAAS;oBAC/BqB,qBAAmBjB,QAAQ,SAASI;oBACpCc,cAAY3B;oBACZ4B,eAAa1B;oBACb2B,eAAa1B;oBACbS,MAAMA;oBACNkB,SAASlB,OAAO,CAACmB,QAA4BA,MAAMC,eAAe,KAAKnB;oBACvEoB,eACErB,OAAO,CAACmB,QAA8BA,MAAMC,eAAe,KAAKnB;oBAElEqB,MAAMtB,OAAOC,YAAY;oBACzBsB,OAAO;wBACL,GAAI1B,QAAS;4BAAE,0BAA0BA;wBAAM,IAA4B,CAAC,CAAC;wBAC7E,GAAIL,YAAY,QAAQ;4BAAEgC,YAAY;wBAAS,IAAI,CAAC,CAAC;oBACvD;;sCAEA,KAACvC;4BAAKC,WAAU;sCACbI,KAAKsB,WAAW;;wBAElBnB,wBACC;;8CACE,KAACR;oCACCyB,eAAY;oCACZxB,WAAU;8CACX;;8CAGD,KAACD;oCAAKC,WAAU;8CAA8CE;;;;;;eAjC/DE;QAuCX;;AAGN"}
|
package/dist/index.js
CHANGED
|
@@ -132,12 +132,13 @@ function validateTargetCollection(args) {
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
function buildCollectionCustom(args) {
|
|
135
|
-
const { badges, badgesLinks, breadcrumbsFieldSlug, defaultLimit, hideBreadcrumbs, homeIndicator, localeBadgeStatus, localeBadgeVisibility, parentFieldSlug } = args;
|
|
135
|
+
const { badges, badgesLinks, breadcrumbsFieldSlug, defaultLimit, fastMode, hideBreadcrumbs, homeIndicator, localeBadgeStatus, localeBadgeVisibility, parentFieldSlug } = args;
|
|
136
136
|
return {
|
|
137
137
|
badges,
|
|
138
138
|
badgesLinks,
|
|
139
139
|
breadcrumbsFieldSlug,
|
|
140
140
|
defaultLimit,
|
|
141
|
+
fastMode,
|
|
141
142
|
hideBreadcrumbs,
|
|
142
143
|
homeIndicator,
|
|
143
144
|
localeBadgeStatus,
|
|
@@ -160,6 +161,7 @@ export const nestedDocsPageTreePlugin = (pluginOptions)=>(config)=>{
|
|
|
160
161
|
return config;
|
|
161
162
|
}
|
|
162
163
|
const breadcrumbsFieldSlug = pluginOptions.breadcrumbsFieldSlug ?? DEFAULT_BREADCRUMBS_FIELD_SLUG;
|
|
164
|
+
const fastMode = pluginOptions.fastMode === true;
|
|
163
165
|
const defaultLimit = pluginOptions.defaultLimit ?? DEFAULT_LIMIT;
|
|
164
166
|
const hideBreadcrumbs = pluginOptions.hideBreadcrumbs ?? true;
|
|
165
167
|
const parentFieldSlug = pluginOptions.parentFieldSlug ?? DEFAULT_PARENT_FIELD_SLUG;
|
|
@@ -215,6 +217,7 @@ export const nestedDocsPageTreePlugin = (pluginOptions)=>(config)=>{
|
|
|
215
217
|
badgesLinks: pluginOptions.badgesLinks,
|
|
216
218
|
breadcrumbsFieldSlug,
|
|
217
219
|
defaultLimit,
|
|
220
|
+
fastMode,
|
|
218
221
|
hideBreadcrumbs,
|
|
219
222
|
homeIndicator: {
|
|
220
223
|
enabled: homeIndicatorCollectionSlugs.has(collection.slug)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionConfig,\n Config,\n} from 'payload'\n\nimport type {\n NestedDocsPageTreePluginCollectionCustom,\n NestedDocsPageTreePluginConfig,\n} from './types.js'\n\nimport { createMovePageEndpoint } from './endpoints/createMovePageEndpoint.js'\nimport { createReorderPageEndpoint } from './endpoints/createReorderPageEndpoint.js'\nimport { nestedDocsPageTreePluginCustomKey, pageTreeWriteContextKey } from './types.js'\nimport { normalizeNestedDocsPageTreePluginBadgeConfig } from './utilities/badgeConfig.js'\nimport {\n createFlowID,\n type Diagnostics,\n DIAGNOSTICS_FLOW_CONTEXT_KEY,\n projectField,\n resolveDiagnostics,\n} from './utilities/diagnostics.js'\nimport { findTopLevelField, mapTopLevelFields } from './utilities/fields.js'\n\nconst DEFAULT_BREADCRUMBS_FIELD_SLUG = 'breadcrumbs'\nconst DEFAULT_HOME_INDICATOR_COLLECTIONS = ['pages']\nconst DEFAULT_LIMIT = 100\nconst DEFAULT_PARENT_FIELD_SLUG = 'parent'\nconst PAGE_TREE_LIST_VIEW_PATH =\n 'payload-nested-docs-page-tree/rsc#NestedDocsPageTreeListView'\ntype CollectionEndpoint = NonNullable<Exclude<CollectionConfig['endpoints'], false>>[number]\n\n/**\n * When diagnostics are enabled this hook emits a structured event for each\n * page-tree-tagged create/update, including a small before/after diff of the\n * fields most relevant to tree publish/draft regressions.\n */\nfunction createDiagnosticsAfterChangeHook(args: {\n collectionSlug: string\n diagnostics: Diagnostics\n orderableFieldName: null | string\n parentFieldSlug: string\n}): CollectionAfterChangeHook {\n const { collectionSlug, diagnostics, orderableFieldName, parentFieldSlug } = args\n const snapshotFields: string[] = ['_status', parentFieldSlug]\n\n if (orderableFieldName) {\n snapshotFields.push(orderableFieldName)\n }\n\n return ({ doc, operation, previousDoc, req }) => {\n if (!diagnostics.enabled) {\n return doc\n }\n\n if (operation !== 'update' && operation !== 'create') {\n return doc\n }\n\n // Gated on the write flag, not the deploy opt-out flag: a published move\n // withholds the latter, and that is the case most worth tracing.\n if (!req.context?.[pageTreeWriteContextKey]) {\n return doc\n }\n\n const docID = (doc as Record<string, unknown>)?.id\n\n if (typeof docID !== 'string' && typeof docID !== 'number') {\n return doc\n }\n\n const flow =\n (req.context?.[DIAGNOSTICS_FLOW_CONTEXT_KEY] as string | undefined) ??\n createFlowID('page-tree-change')\n const before: Record<string, unknown> = {}\n const after: Record<string, unknown> = {}\n const changed: string[] = []\n\n for (const field of snapshotFields) {\n const beforeValue = projectField((previousDoc as Record<string, unknown> | undefined)?.[field])\n const afterValue = projectField((doc as Record<string, unknown>)?.[field])\n\n before[field] = beforeValue\n after[field] = afterValue\n\n if (JSON.stringify(beforeValue) !== JSON.stringify(afterValue)) {\n changed.push(field)\n }\n }\n\n diagnostics.log({\n collection: collectionSlug,\n data: {\n after,\n before,\n changed,\n docID: String(docID),\n operation,\n },\n flow,\n level: 'info',\n message: `${operation} on ${collectionSlug}#${String(docID)}`,\n source: 'page-tree-change:after',\n })\n\n const beforeStatus = (previousDoc as Record<string, unknown> | undefined)?._status\n const afterStatus = (doc as Record<string, unknown>)?._status\n\n if (beforeStatus === 'published' && afterStatus !== 'published') {\n diagnostics.log({\n collection: collectionSlug,\n data: {\n afterStatus,\n beforeStatus,\n docID: String(docID),\n },\n flow,\n level: 'warn',\n message: `Published doc was demoted to \"${typeof afterStatus === 'string' ? afterStatus : JSON.stringify(afterStatus ?? 'missing')}\" by a page-tree operation. Inspect the move-endpoint:enter/ok snapshots in flow ${flow} to confirm whether the main row was touched.`,\n source: 'page-tree-change:status-flip',\n })\n }\n\n return doc\n }\n}\n\nfunction getCollectionEndpoints(collection: CollectionConfig): CollectionEndpoint[] {\n return Array.isArray(collection.endpoints) ? [...collection.endpoints] : []\n}\n\nfunction patchBreadcrumbField<TField extends CollectionConfig['fields'][number]>(args: {\n breadcrumbsFieldSlug: string\n field: TField\n hideBreadcrumbs: boolean\n}): TField {\n const { breadcrumbsFieldSlug, field, hideBreadcrumbs } = args\n\n if (!('name' in field) || field.name !== breadcrumbsFieldSlug) {\n return field\n }\n\n return {\n ...field,\n admin: {\n ...(field.admin ?? {}),\n hidden: hideBreadcrumbs,\n },\n } as TField\n}\n\nfunction validateTargetCollection(args: {\n breadcrumbsFieldSlug: string\n collection: CollectionConfig\n parentFieldSlug: string\n}) {\n const { breadcrumbsFieldSlug, collection, parentFieldSlug } = args\n\n if (typeof collection.admin?.useAsTitle !== 'string' || collection.admin.useAsTitle.includes('.')) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to define a top-level admin.useAsTitle field.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, collection.admin.useAsTitle)) {\n throw new Error(\n `payload-nested-docs-page-tree could not find the useAsTitle field \"${collection.admin.useAsTitle}\" on \"${collection.slug}\". Fields inside tabs, rows, collapsibles, and unnamed groups are supported; fields inside a named tab or named group are not top-level.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, parentFieldSlug)) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to already define the nested docs parent field \"${parentFieldSlug}\". Register @payloadcms/plugin-nested-docs before payload-nested-docs-page-tree.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, breadcrumbsFieldSlug)) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to already define the nested docs breadcrumbs field \"${breadcrumbsFieldSlug}\". Register @payloadcms/plugin-nested-docs before payload-nested-docs-page-tree.`,\n )\n }\n\n const existingListView = collection.admin?.components?.views?.list?.Component\n\n if (existingListView && existingListView !== PAGE_TREE_LIST_VIEW_PATH) {\n throw new Error(\n `payload-nested-docs-page-tree cannot own the \"${collection.slug}\" list view because the collection already defines a custom admin.components.views.list.Component.`,\n )\n }\n\n const existingMoveEndpoint = getCollectionEndpoints(collection).find(\n (endpoint) => endpoint.path === '/:id/move',\n )\n const existingReorderEndpoint = getCollectionEndpoints(collection).find(\n (endpoint) => endpoint.path === '/:id/reorder',\n )\n\n if (existingMoveEndpoint) {\n throw new Error(\n `payload-nested-docs-page-tree cannot add the move endpoint to \"${collection.slug}\" because the collection already defines POST /:id/move.`,\n )\n }\n\n if (existingReorderEndpoint) {\n throw new Error(\n `payload-nested-docs-page-tree cannot add the reorder endpoint to \"${collection.slug}\" because the collection already defines POST /:id/reorder.`,\n )\n }\n}\n\nfunction buildCollectionCustom(args: {\n badges: NestedDocsPageTreePluginCollectionCustom['badges']\n badgesLinks?: NestedDocsPageTreePluginConfig['badgesLinks']\n breadcrumbsFieldSlug: string\n defaultLimit: number\n hideBreadcrumbs: boolean\n homeIndicator: NestedDocsPageTreePluginCollectionCustom['homeIndicator']\n localeBadgeStatus?: NestedDocsPageTreePluginConfig['localeBadgeStatus']\n localeBadgeVisibility?: NestedDocsPageTreePluginConfig['localeBadgeVisibility']\n parentFieldSlug: string\n}): NestedDocsPageTreePluginCollectionCustom {\n const {\n badges,\n badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n hideBreadcrumbs,\n homeIndicator,\n localeBadgeStatus,\n localeBadgeVisibility,\n parentFieldSlug,\n } = args\n\n return {\n badges,\n badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n hideBreadcrumbs,\n homeIndicator,\n localeBadgeStatus,\n localeBadgeVisibility,\n parentFieldSlug,\n }\n}\n\nfunction getHomeIndicatorCollectionSlugs(\n homeIndicator: NestedDocsPageTreePluginConfig['homeIndicator'],\n): Set<string> {\n if (homeIndicator === false) {\n return new Set()\n }\n\n return new Set(homeIndicator?.collections ?? DEFAULT_HOME_INDICATOR_COLLECTIONS)\n}\n\nexport type {\n NestedDocsPageTreePluginBadgeConfig,\n NestedDocsPageTreePluginBadgeMap,\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginBadgeStatus,\n NestedDocsPageTreePluginConfig,\n NestedDocsPageTreePluginHomeIndicatorConfig,\n PageTreeLiveURL,\n PageTreeMoveContext,\n} from './types.js'\n\nexport { pageTreeMoveContextKey } from './types.js'\n\nexport const nestedDocsPageTreePlugin =\n (pluginOptions: NestedDocsPageTreePluginConfig) =>\n (config: Config): Config => {\n if (!pluginOptions.collections?.length) {\n throw new Error('payload-nested-docs-page-tree requires at least one collection slug.')\n }\n\n if (pluginOptions.disabled) {\n return config\n }\n\n const breadcrumbsFieldSlug =\n pluginOptions.breadcrumbsFieldSlug ?? DEFAULT_BREADCRUMBS_FIELD_SLUG\n const defaultLimit = pluginOptions.defaultLimit ?? DEFAULT_LIMIT\n const hideBreadcrumbs = pluginOptions.hideBreadcrumbs ?? true\n const parentFieldSlug = pluginOptions.parentFieldSlug ?? DEFAULT_PARENT_FIELD_SLUG\n const publishOnMove = pluginOptions.publishOnMove ?? false\n const badges = normalizeNestedDocsPageTreePluginBadgeConfig(pluginOptions.badges)\n const diagnostics = resolveDiagnostics(pluginOptions.diagnostics)\n const homeIndicatorCollectionSlugs = getHomeIndicatorCollectionSlugs(\n pluginOptions.homeIndicator,\n )\n const targetedCollectionSlugs = new Set<string>(pluginOptions.collections)\n\n if (!config.collections?.length) {\n throw new Error('payload-nested-docs-page-tree could not find any collections to patch.')\n }\n\n const foundCollectionSlugs = new Set<string>()\n const nextCollections = config.collections.map((collection) => {\n if (!targetedCollectionSlugs.has(collection.slug)) {\n return collection\n }\n\n foundCollectionSlugs.add(collection.slug)\n validateTargetCollection({\n breadcrumbsFieldSlug,\n collection,\n parentFieldSlug,\n })\n const orderableFieldName =\n typeof collection.orderable === 'string'\n ? collection.orderable\n : collection.orderable\n ? '_order'\n : null\n const diagnosticsAfterChangeHook = diagnostics.enabled\n ? createDiagnosticsAfterChangeHook({\n collectionSlug: collection.slug,\n diagnostics,\n orderableFieldName,\n parentFieldSlug,\n })\n : null\n\n return {\n ...collection,\n admin: {\n ...(collection.admin ?? {}),\n components: {\n ...(collection.admin?.components ?? {}),\n views: {\n ...(collection.admin?.components?.views ?? {}),\n list: {\n ...(collection.admin?.components?.views?.list ?? {}),\n Component: PAGE_TREE_LIST_VIEW_PATH,\n },\n },\n },\n pagination: {\n ...(collection.admin?.pagination ?? {}),\n defaultLimit:\n collection.admin?.pagination?.defaultLimit === undefined\n ? defaultLimit\n : collection.admin.pagination.defaultLimit,\n },\n },\n custom: {\n ...(collection.custom ?? {}),\n [nestedDocsPageTreePluginCustomKey]: buildCollectionCustom({\n badges,\n badgesLinks: pluginOptions.badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n hideBreadcrumbs,\n homeIndicator: {\n enabled: homeIndicatorCollectionSlugs.has(collection.slug),\n },\n localeBadgeStatus: pluginOptions.localeBadgeStatus,\n localeBadgeVisibility: pluginOptions.localeBadgeVisibility,\n parentFieldSlug,\n }),\n },\n endpoints: [\n ...getCollectionEndpoints(collection),\n createMovePageEndpoint({\n collectionSlug: collection.slug,\n diagnostics,\n parentFieldSlug,\n publishOnMove,\n }),\n ...(orderableFieldName\n ? [\n createReorderPageEndpoint({\n collectionSlug: collection.slug,\n diagnostics,\n orderableFieldName,\n parentFieldSlug,\n }),\n ]\n : []),\n ],\n fields: mapTopLevelFields(collection.fields, (field) =>\n patchBreadcrumbField({\n breadcrumbsFieldSlug,\n field,\n hideBreadcrumbs,\n }),\n ),\n hooks: {\n ...(collection.hooks ?? {}),\n ...(diagnosticsAfterChangeHook\n ? {\n afterChange: [\n ...(collection.hooks?.afterChange ?? []),\n diagnosticsAfterChangeHook,\n ],\n }\n : {}),\n },\n }\n })\n\n const missingCollections = pluginOptions.collections.filter(\n (collectionSlug) => !foundCollectionSlugs.has(collectionSlug),\n )\n\n if (missingCollections.length > 0) {\n throw new Error(\n `payload-nested-docs-page-tree could not find the following collections: ${missingCollections.join(', ')}`,\n )\n }\n\n return {\n ...config,\n collections: nextCollections,\n }\n }\n"],"names":["createMovePageEndpoint","createReorderPageEndpoint","nestedDocsPageTreePluginCustomKey","pageTreeWriteContextKey","normalizeNestedDocsPageTreePluginBadgeConfig","createFlowID","DIAGNOSTICS_FLOW_CONTEXT_KEY","projectField","resolveDiagnostics","findTopLevelField","mapTopLevelFields","DEFAULT_BREADCRUMBS_FIELD_SLUG","DEFAULT_HOME_INDICATOR_COLLECTIONS","DEFAULT_LIMIT","DEFAULT_PARENT_FIELD_SLUG","PAGE_TREE_LIST_VIEW_PATH","createDiagnosticsAfterChangeHook","args","collectionSlug","diagnostics","orderableFieldName","parentFieldSlug","snapshotFields","push","doc","operation","previousDoc","req","enabled","context","docID","id","flow","before","after","changed","field","beforeValue","afterValue","JSON","stringify","log","collection","data","String","level","message","source","beforeStatus","_status","afterStatus","getCollectionEndpoints","Array","isArray","endpoints","patchBreadcrumbField","breadcrumbsFieldSlug","hideBreadcrumbs","name","admin","hidden","validateTargetCollection","useAsTitle","includes","Error","slug","fields","existingListView","components","views","list","Component","existingMoveEndpoint","find","endpoint","path","existingReorderEndpoint","buildCollectionCustom","badges","badgesLinks","defaultLimit","homeIndicator","localeBadgeStatus","localeBadgeVisibility","getHomeIndicatorCollectionSlugs","Set","collections","pageTreeMoveContextKey","nestedDocsPageTreePlugin","pluginOptions","config","length","disabled","publishOnMove","homeIndicatorCollectionSlugs","targetedCollectionSlugs","foundCollectionSlugs","nextCollections","map","has","add","orderable","diagnosticsAfterChangeHook","pagination","undefined","custom","hooks","afterChange","missingCollections","filter","join"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionConfig,\n Config,\n} from 'payload'\n\nimport type {\n NestedDocsPageTreePluginCollectionCustom,\n NestedDocsPageTreePluginConfig,\n} from './types.js'\n\nimport { createMovePageEndpoint } from './endpoints/createMovePageEndpoint.js'\nimport { createReorderPageEndpoint } from './endpoints/createReorderPageEndpoint.js'\nimport { nestedDocsPageTreePluginCustomKey, pageTreeWriteContextKey } from './types.js'\nimport { normalizeNestedDocsPageTreePluginBadgeConfig } from './utilities/badgeConfig.js'\nimport {\n createFlowID,\n type Diagnostics,\n DIAGNOSTICS_FLOW_CONTEXT_KEY,\n projectField,\n resolveDiagnostics,\n} from './utilities/diagnostics.js'\nimport { findTopLevelField, mapTopLevelFields } from './utilities/fields.js'\n\nconst DEFAULT_BREADCRUMBS_FIELD_SLUG = 'breadcrumbs'\nconst DEFAULT_HOME_INDICATOR_COLLECTIONS = ['pages']\nconst DEFAULT_LIMIT = 100\nconst DEFAULT_PARENT_FIELD_SLUG = 'parent'\nconst PAGE_TREE_LIST_VIEW_PATH =\n 'payload-nested-docs-page-tree/rsc#NestedDocsPageTreeListView'\ntype CollectionEndpoint = NonNullable<Exclude<CollectionConfig['endpoints'], false>>[number]\n\n/**\n * When diagnostics are enabled this hook emits a structured event for each\n * page-tree-tagged create/update, including a small before/after diff of the\n * fields most relevant to tree publish/draft regressions.\n */\nfunction createDiagnosticsAfterChangeHook(args: {\n collectionSlug: string\n diagnostics: Diagnostics\n orderableFieldName: null | string\n parentFieldSlug: string\n}): CollectionAfterChangeHook {\n const { collectionSlug, diagnostics, orderableFieldName, parentFieldSlug } = args\n const snapshotFields: string[] = ['_status', parentFieldSlug]\n\n if (orderableFieldName) {\n snapshotFields.push(orderableFieldName)\n }\n\n return ({ doc, operation, previousDoc, req }) => {\n if (!diagnostics.enabled) {\n return doc\n }\n\n if (operation !== 'update' && operation !== 'create') {\n return doc\n }\n\n // Gated on the write flag, not the deploy opt-out flag: a published move\n // withholds the latter, and that is the case most worth tracing.\n if (!req.context?.[pageTreeWriteContextKey]) {\n return doc\n }\n\n const docID = (doc as Record<string, unknown>)?.id\n\n if (typeof docID !== 'string' && typeof docID !== 'number') {\n return doc\n }\n\n const flow =\n (req.context?.[DIAGNOSTICS_FLOW_CONTEXT_KEY] as string | undefined) ??\n createFlowID('page-tree-change')\n const before: Record<string, unknown> = {}\n const after: Record<string, unknown> = {}\n const changed: string[] = []\n\n for (const field of snapshotFields) {\n const beforeValue = projectField((previousDoc as Record<string, unknown> | undefined)?.[field])\n const afterValue = projectField((doc as Record<string, unknown>)?.[field])\n\n before[field] = beforeValue\n after[field] = afterValue\n\n if (JSON.stringify(beforeValue) !== JSON.stringify(afterValue)) {\n changed.push(field)\n }\n }\n\n diagnostics.log({\n collection: collectionSlug,\n data: {\n after,\n before,\n changed,\n docID: String(docID),\n operation,\n },\n flow,\n level: 'info',\n message: `${operation} on ${collectionSlug}#${String(docID)}`,\n source: 'page-tree-change:after',\n })\n\n const beforeStatus = (previousDoc as Record<string, unknown> | undefined)?._status\n const afterStatus = (doc as Record<string, unknown>)?._status\n\n if (beforeStatus === 'published' && afterStatus !== 'published') {\n diagnostics.log({\n collection: collectionSlug,\n data: {\n afterStatus,\n beforeStatus,\n docID: String(docID),\n },\n flow,\n level: 'warn',\n message: `Published doc was demoted to \"${typeof afterStatus === 'string' ? afterStatus : JSON.stringify(afterStatus ?? 'missing')}\" by a page-tree operation. Inspect the move-endpoint:enter/ok snapshots in flow ${flow} to confirm whether the main row was touched.`,\n source: 'page-tree-change:status-flip',\n })\n }\n\n return doc\n }\n}\n\nfunction getCollectionEndpoints(collection: CollectionConfig): CollectionEndpoint[] {\n return Array.isArray(collection.endpoints) ? [...collection.endpoints] : []\n}\n\nfunction patchBreadcrumbField<TField extends CollectionConfig['fields'][number]>(args: {\n breadcrumbsFieldSlug: string\n field: TField\n hideBreadcrumbs: boolean\n}): TField {\n const { breadcrumbsFieldSlug, field, hideBreadcrumbs } = args\n\n if (!('name' in field) || field.name !== breadcrumbsFieldSlug) {\n return field\n }\n\n return {\n ...field,\n admin: {\n ...(field.admin ?? {}),\n hidden: hideBreadcrumbs,\n },\n } as TField\n}\n\nfunction validateTargetCollection(args: {\n breadcrumbsFieldSlug: string\n collection: CollectionConfig\n parentFieldSlug: string\n}) {\n const { breadcrumbsFieldSlug, collection, parentFieldSlug } = args\n\n if (typeof collection.admin?.useAsTitle !== 'string' || collection.admin.useAsTitle.includes('.')) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to define a top-level admin.useAsTitle field.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, collection.admin.useAsTitle)) {\n throw new Error(\n `payload-nested-docs-page-tree could not find the useAsTitle field \"${collection.admin.useAsTitle}\" on \"${collection.slug}\". Fields inside tabs, rows, collapsibles, and unnamed groups are supported; fields inside a named tab or named group are not top-level.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, parentFieldSlug)) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to already define the nested docs parent field \"${parentFieldSlug}\". Register @payloadcms/plugin-nested-docs before payload-nested-docs-page-tree.`,\n )\n }\n\n if (!findTopLevelField(collection.fields, breadcrumbsFieldSlug)) {\n throw new Error(\n `payload-nested-docs-page-tree requires \"${collection.slug}\" to already define the nested docs breadcrumbs field \"${breadcrumbsFieldSlug}\". Register @payloadcms/plugin-nested-docs before payload-nested-docs-page-tree.`,\n )\n }\n\n const existingListView = collection.admin?.components?.views?.list?.Component\n\n if (existingListView && existingListView !== PAGE_TREE_LIST_VIEW_PATH) {\n throw new Error(\n `payload-nested-docs-page-tree cannot own the \"${collection.slug}\" list view because the collection already defines a custom admin.components.views.list.Component.`,\n )\n }\n\n const existingMoveEndpoint = getCollectionEndpoints(collection).find(\n (endpoint) => endpoint.path === '/:id/move',\n )\n const existingReorderEndpoint = getCollectionEndpoints(collection).find(\n (endpoint) => endpoint.path === '/:id/reorder',\n )\n\n if (existingMoveEndpoint) {\n throw new Error(\n `payload-nested-docs-page-tree cannot add the move endpoint to \"${collection.slug}\" because the collection already defines POST /:id/move.`,\n )\n }\n\n if (existingReorderEndpoint) {\n throw new Error(\n `payload-nested-docs-page-tree cannot add the reorder endpoint to \"${collection.slug}\" because the collection already defines POST /:id/reorder.`,\n )\n }\n}\n\nfunction buildCollectionCustom(args: {\n badges: NestedDocsPageTreePluginCollectionCustom['badges']\n badgesLinks?: NestedDocsPageTreePluginConfig['badgesLinks']\n breadcrumbsFieldSlug: string\n defaultLimit: number\n fastMode: boolean\n hideBreadcrumbs: boolean\n homeIndicator: NestedDocsPageTreePluginCollectionCustom['homeIndicator']\n localeBadgeStatus?: NestedDocsPageTreePluginConfig['localeBadgeStatus']\n localeBadgeVisibility?: NestedDocsPageTreePluginConfig['localeBadgeVisibility']\n parentFieldSlug: string\n}): NestedDocsPageTreePluginCollectionCustom {\n const {\n badges,\n badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator,\n localeBadgeStatus,\n localeBadgeVisibility,\n parentFieldSlug,\n } = args\n\n return {\n badges,\n badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator,\n localeBadgeStatus,\n localeBadgeVisibility,\n parentFieldSlug,\n }\n}\n\nfunction getHomeIndicatorCollectionSlugs(\n homeIndicator: NestedDocsPageTreePluginConfig['homeIndicator'],\n): Set<string> {\n if (homeIndicator === false) {\n return new Set()\n }\n\n return new Set(homeIndicator?.collections ?? DEFAULT_HOME_INDICATOR_COLLECTIONS)\n}\n\nexport type {\n NestedDocsPageTreePluginBadgeConfig,\n NestedDocsPageTreePluginBadgeMap,\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginBadgeStatus,\n NestedDocsPageTreePluginConfig,\n NestedDocsPageTreePluginHomeIndicatorConfig,\n PageTreeLiveURL,\n PageTreeMoveContext,\n} from './types.js'\n\nexport { pageTreeMoveContextKey } from './types.js'\n\nexport const nestedDocsPageTreePlugin =\n (pluginOptions: NestedDocsPageTreePluginConfig) =>\n (config: Config): Config => {\n if (!pluginOptions.collections?.length) {\n throw new Error('payload-nested-docs-page-tree requires at least one collection slug.')\n }\n\n if (pluginOptions.disabled) {\n return config\n }\n\n const breadcrumbsFieldSlug =\n pluginOptions.breadcrumbsFieldSlug ?? DEFAULT_BREADCRUMBS_FIELD_SLUG\n const fastMode = pluginOptions.fastMode === true\n const defaultLimit = pluginOptions.defaultLimit ?? DEFAULT_LIMIT\n const hideBreadcrumbs = pluginOptions.hideBreadcrumbs ?? true\n const parentFieldSlug = pluginOptions.parentFieldSlug ?? DEFAULT_PARENT_FIELD_SLUG\n const publishOnMove = pluginOptions.publishOnMove ?? false\n const badges = normalizeNestedDocsPageTreePluginBadgeConfig(pluginOptions.badges)\n const diagnostics = resolveDiagnostics(pluginOptions.diagnostics)\n const homeIndicatorCollectionSlugs = getHomeIndicatorCollectionSlugs(\n pluginOptions.homeIndicator,\n )\n const targetedCollectionSlugs = new Set<string>(pluginOptions.collections)\n\n if (!config.collections?.length) {\n throw new Error('payload-nested-docs-page-tree could not find any collections to patch.')\n }\n\n const foundCollectionSlugs = new Set<string>()\n const nextCollections = config.collections.map((collection) => {\n if (!targetedCollectionSlugs.has(collection.slug)) {\n return collection\n }\n\n foundCollectionSlugs.add(collection.slug)\n validateTargetCollection({\n breadcrumbsFieldSlug,\n collection,\n parentFieldSlug,\n })\n const orderableFieldName =\n typeof collection.orderable === 'string'\n ? collection.orderable\n : collection.orderable\n ? '_order'\n : null\n const diagnosticsAfterChangeHook = diagnostics.enabled\n ? createDiagnosticsAfterChangeHook({\n collectionSlug: collection.slug,\n diagnostics,\n orderableFieldName,\n parentFieldSlug,\n })\n : null\n\n return {\n ...collection,\n admin: {\n ...(collection.admin ?? {}),\n components: {\n ...(collection.admin?.components ?? {}),\n views: {\n ...(collection.admin?.components?.views ?? {}),\n list: {\n ...(collection.admin?.components?.views?.list ?? {}),\n Component: PAGE_TREE_LIST_VIEW_PATH,\n },\n },\n },\n pagination: {\n ...(collection.admin?.pagination ?? {}),\n defaultLimit:\n collection.admin?.pagination?.defaultLimit === undefined\n ? defaultLimit\n : collection.admin.pagination.defaultLimit,\n },\n },\n custom: {\n ...(collection.custom ?? {}),\n [nestedDocsPageTreePluginCustomKey]: buildCollectionCustom({\n badges,\n badgesLinks: pluginOptions.badgesLinks,\n breadcrumbsFieldSlug,\n defaultLimit,\n fastMode,\n hideBreadcrumbs,\n homeIndicator: {\n enabled: homeIndicatorCollectionSlugs.has(collection.slug),\n },\n localeBadgeStatus: pluginOptions.localeBadgeStatus,\n localeBadgeVisibility: pluginOptions.localeBadgeVisibility,\n parentFieldSlug,\n }),\n },\n endpoints: [\n ...getCollectionEndpoints(collection),\n createMovePageEndpoint({\n collectionSlug: collection.slug,\n diagnostics,\n parentFieldSlug,\n publishOnMove,\n }),\n ...(orderableFieldName\n ? [\n createReorderPageEndpoint({\n collectionSlug: collection.slug,\n diagnostics,\n orderableFieldName,\n parentFieldSlug,\n }),\n ]\n : []),\n ],\n fields: mapTopLevelFields(collection.fields, (field) =>\n patchBreadcrumbField({\n breadcrumbsFieldSlug,\n field,\n hideBreadcrumbs,\n }),\n ),\n hooks: {\n ...(collection.hooks ?? {}),\n ...(diagnosticsAfterChangeHook\n ? {\n afterChange: [\n ...(collection.hooks?.afterChange ?? []),\n diagnosticsAfterChangeHook,\n ],\n }\n : {}),\n },\n }\n })\n\n const missingCollections = pluginOptions.collections.filter(\n (collectionSlug) => !foundCollectionSlugs.has(collectionSlug),\n )\n\n if (missingCollections.length > 0) {\n throw new Error(\n `payload-nested-docs-page-tree could not find the following collections: ${missingCollections.join(', ')}`,\n )\n }\n\n return {\n ...config,\n collections: nextCollections,\n }\n }\n"],"names":["createMovePageEndpoint","createReorderPageEndpoint","nestedDocsPageTreePluginCustomKey","pageTreeWriteContextKey","normalizeNestedDocsPageTreePluginBadgeConfig","createFlowID","DIAGNOSTICS_FLOW_CONTEXT_KEY","projectField","resolveDiagnostics","findTopLevelField","mapTopLevelFields","DEFAULT_BREADCRUMBS_FIELD_SLUG","DEFAULT_HOME_INDICATOR_COLLECTIONS","DEFAULT_LIMIT","DEFAULT_PARENT_FIELD_SLUG","PAGE_TREE_LIST_VIEW_PATH","createDiagnosticsAfterChangeHook","args","collectionSlug","diagnostics","orderableFieldName","parentFieldSlug","snapshotFields","push","doc","operation","previousDoc","req","enabled","context","docID","id","flow","before","after","changed","field","beforeValue","afterValue","JSON","stringify","log","collection","data","String","level","message","source","beforeStatus","_status","afterStatus","getCollectionEndpoints","Array","isArray","endpoints","patchBreadcrumbField","breadcrumbsFieldSlug","hideBreadcrumbs","name","admin","hidden","validateTargetCollection","useAsTitle","includes","Error","slug","fields","existingListView","components","views","list","Component","existingMoveEndpoint","find","endpoint","path","existingReorderEndpoint","buildCollectionCustom","badges","badgesLinks","defaultLimit","fastMode","homeIndicator","localeBadgeStatus","localeBadgeVisibility","getHomeIndicatorCollectionSlugs","Set","collections","pageTreeMoveContextKey","nestedDocsPageTreePlugin","pluginOptions","config","length","disabled","publishOnMove","homeIndicatorCollectionSlugs","targetedCollectionSlugs","foundCollectionSlugs","nextCollections","map","has","add","orderable","diagnosticsAfterChangeHook","pagination","undefined","custom","hooks","afterChange","missingCollections","filter","join"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export type PageTreeLocaleBadgeVisibility = (args: {
|
|
|
25
25
|
/** Latest draft document with all locales, read with the current user's access. */
|
|
26
26
|
doc: Record<string, unknown>;
|
|
27
27
|
locale: string;
|
|
28
|
+
/** Current document, if readable. Check its locale status before treating it as published. */
|
|
29
|
+
publishedDoc?: Record<string, unknown>;
|
|
28
30
|
req: PayloadRequest;
|
|
29
31
|
}) => boolean;
|
|
30
32
|
export type PageTreeLocaleBadgeStatus = (args: {
|
|
@@ -35,7 +37,7 @@ export type PageTreeLocaleBadgeStatus = (args: {
|
|
|
35
37
|
publishedDoc?: Record<string, unknown>;
|
|
36
38
|
req: PayloadRequest;
|
|
37
39
|
status: PageTreeLocaleStatus['status'];
|
|
38
|
-
}) => PageTreeLocaleStatus['status']
|
|
40
|
+
}) => PageTreeLocaleStatus['status'] | Pick<PageTreeLocaleStatus, 'status' | 'label'>;
|
|
39
41
|
export type NestedDocsPageTreePluginConfig = {
|
|
40
42
|
badges?: NestedDocsPageTreePluginBadgeConfig;
|
|
41
43
|
/** Opt in to status badge links. Preview uses the collection's admin.preview. */
|
|
@@ -51,6 +53,8 @@ export type NestedDocsPageTreePluginConfig = {
|
|
|
51
53
|
*/
|
|
52
54
|
diagnostics?: NestedDocsPageTreePluginDiagnosticsConfig;
|
|
53
55
|
disabled?: boolean;
|
|
56
|
+
/** Enable narrower tree and status queries. Declare extra cell, hook, or badge callback fields with collection.forceSelect. @default false */
|
|
57
|
+
fastMode?: boolean;
|
|
54
58
|
hideBreadcrumbs?: boolean;
|
|
55
59
|
homeIndicator?: NestedDocsPageTreePluginHomeIndicatorConfig;
|
|
56
60
|
/** Server-only display override. Does not change stored publication status. */
|
|
@@ -78,6 +82,7 @@ export type NestedDocsPageTreePluginCollectionCustom = {
|
|
|
78
82
|
badgesLinks?: NestedDocsPageTreePluginBadgesLinks;
|
|
79
83
|
breadcrumbsFieldSlug: string;
|
|
80
84
|
defaultLimit: number;
|
|
85
|
+
fastMode?: boolean;
|
|
81
86
|
hideBreadcrumbs: boolean;
|
|
82
87
|
homeIndicator: NestedDocsPageTreePluginResolvedHomeIndicatorConfig;
|
|
83
88
|
localeBadgeStatus?: PageTreeLocaleBadgeStatus;
|
|
@@ -106,6 +111,8 @@ export type PageTreeStatusLinks = {
|
|
|
106
111
|
publicURL?: string;
|
|
107
112
|
};
|
|
108
113
|
export type PageTreeLocaleStatus = {
|
|
114
|
+
/** Optional display label; publication status remains separate. */
|
|
115
|
+
label?: string;
|
|
109
116
|
locale: string;
|
|
110
117
|
status: 'changed' | 'draft' | 'published' | 'unknown';
|
|
111
118
|
visible?: boolean;
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, PayloadRequest } from 'payload'\n\nimport type { NestedDocsPageTreePluginDiagnosticsConfig } from './utilities/diagnostics.js'\n\nexport type {\n NestedDocsPageTreePluginDiagnosticEvent,\n NestedDocsPageTreePluginDiagnosticsConfig,\n} from './utilities/diagnostics.js'\n\nexport const nestedDocsPageTreePluginBadgeStatuses = ['published', 'changed', 'draft'] as const\n\nexport type NestedDocsPageTreePluginBadgeStatus =\n (typeof nestedDocsPageTreePluginBadgeStatuses)[number]\n\nexport type NestedDocsPageTreePluginBadgeMap = Partial<\n Record<NestedDocsPageTreePluginBadgeStatus, string>\n>\n\nexport type NestedDocsPageTreePluginBadgeConfig = {\n colors?: NestedDocsPageTreePluginBadgeMap\n labels?: NestedDocsPageTreePluginBadgeMap\n /** Show locale badges when the collection enables localized draft status. */\n locales?: boolean\n}\n\nexport type NestedDocsPageTreePluginResolvedBadgeConfig = {\n colors: NestedDocsPageTreePluginBadgeMap\n labels: NestedDocsPageTreePluginBadgeMap\n locales?: boolean\n}\n\nexport type NestedDocsPageTreePluginHomeIndicatorConfig =\n | {\n collections?: CollectionSlug[]\n }\n | false\n\nexport type NestedDocsPageTreePluginResolvedHomeIndicatorConfig = {\n enabled: boolean\n}\n\nexport type PageTreeLocaleBadgeVisibility = (args: {\n /** Latest draft document with all locales, read with the current user's access. */\n doc: Record<string, unknown>\n locale: string\n req: PayloadRequest\n}) => boolean\n\nexport type PageTreeLocaleBadgeStatus = (args: {\n /** Latest draft document with all locales, read with the current user's access. */\n doc: Record<string, unknown>\n locale: string\n /** Current document, if readable. Check its locale status before treating it as published. */\n publishedDoc?: Record<string, unknown>\n req: PayloadRequest\n status: PageTreeLocaleStatus['status']\n}) => PageTreeLocaleStatus['status']
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, PayloadRequest } from 'payload'\n\nimport type { NestedDocsPageTreePluginDiagnosticsConfig } from './utilities/diagnostics.js'\n\nexport type {\n NestedDocsPageTreePluginDiagnosticEvent,\n NestedDocsPageTreePluginDiagnosticsConfig,\n} from './utilities/diagnostics.js'\n\nexport const nestedDocsPageTreePluginBadgeStatuses = ['published', 'changed', 'draft'] as const\n\nexport type NestedDocsPageTreePluginBadgeStatus =\n (typeof nestedDocsPageTreePluginBadgeStatuses)[number]\n\nexport type NestedDocsPageTreePluginBadgeMap = Partial<\n Record<NestedDocsPageTreePluginBadgeStatus, string>\n>\n\nexport type NestedDocsPageTreePluginBadgeConfig = {\n colors?: NestedDocsPageTreePluginBadgeMap\n labels?: NestedDocsPageTreePluginBadgeMap\n /** Show locale badges when the collection enables localized draft status. */\n locales?: boolean\n}\n\nexport type NestedDocsPageTreePluginResolvedBadgeConfig = {\n colors: NestedDocsPageTreePluginBadgeMap\n labels: NestedDocsPageTreePluginBadgeMap\n locales?: boolean\n}\n\nexport type NestedDocsPageTreePluginHomeIndicatorConfig =\n | {\n collections?: CollectionSlug[]\n }\n | false\n\nexport type NestedDocsPageTreePluginResolvedHomeIndicatorConfig = {\n enabled: boolean\n}\n\nexport type PageTreeLocaleBadgeVisibility = (args: {\n /** Latest draft document with all locales, read with the current user's access. */\n doc: Record<string, unknown>\n locale: string\n /** Current document, if readable. Check its locale status before treating it as published. */\n publishedDoc?: Record<string, unknown>\n req: PayloadRequest\n}) => boolean\n\nexport type PageTreeLocaleBadgeStatus = (args: {\n /** Latest draft document with all locales, read with the current user's access. */\n doc: Record<string, unknown>\n locale: string\n /** Current document, if readable. Check its locale status before treating it as published. */\n publishedDoc?: Record<string, unknown>\n req: PayloadRequest\n status: PageTreeLocaleStatus['status']\n}) => PageTreeLocaleStatus['status'] | Pick<PageTreeLocaleStatus, 'status' | 'label'>\n\nexport type NestedDocsPageTreePluginConfig = {\n badges?: NestedDocsPageTreePluginBadgeConfig\n /** Opt in to status badge links. Preview uses the collection's admin.preview. */\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n breadcrumbsFieldSlug?: string\n collections: CollectionSlug[]\n defaultLimit?: number\n /**\n * When set, the plugin emits structured diagnostic events for page-tree\n * triggered moves, including before/after snapshots of the published main row.\n * Disabled by default. Pass `true` to log to `console`, or pass an object\n * with a custom `logger` to route events elsewhere.\n */\n diagnostics?: NestedDocsPageTreePluginDiagnosticsConfig\n disabled?: boolean\n /** Enable narrower tree and status queries. Declare extra cell, hook, or badge callback fields with collection.forceSelect. @default false */\n fastMode?: boolean\n hideBreadcrumbs?: boolean\n homeIndicator?: NestedDocsPageTreePluginHomeIndicatorConfig\n /** Server-only display override. Does not change stored publication status. */\n localeBadgeStatus?: PageTreeLocaleBadgeStatus\n /** Server-only rule. False hides the badge while preserving its aligned slot. */\n localeBadgeVisibility?: PageTreeLocaleBadgeVisibility\n parentFieldSlug?: string\n /**\n * Publish a hierarchy move immediately instead of staging it as a draft - but\n * ONLY when the moved document had no unpublished changes before the move (its\n * latest version is already published). A document with pending draft edits (a\n * \"changed\" or draft-only doc) always stays staged, so in-progress edits are\n * never published as a side effect of a move. Only affects collections with\n * drafts enabled; collections without drafts move live regardless.\n *\n * Disabled by default: every move is staged as a draft and the live URL/path\n * changes only when the document is next published.\n *\n * @default false\n */\n publishOnMove?: boolean\n}\n\nexport type NestedDocsPageTreePluginCollectionCustom = {\n badges: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n breadcrumbsFieldSlug: string\n defaultLimit: number\n fastMode?: boolean\n hideBreadcrumbs: boolean\n homeIndicator: NestedDocsPageTreePluginResolvedHomeIndicatorConfig\n localeBadgeStatus?: PageTreeLocaleBadgeStatus\n localeBadgeVisibility?: PageTreeLocaleBadgeVisibility\n parentFieldSlug: string\n}\n\nexport type PageTreeLiveURL<TRequest = PayloadRequest> = (args: {\n collectionSlug: string\n /** Published document read with the current user's access, at depth 0. */\n doc: PageTreeSourceDoc\n locale?: string\n /** Published document's last breadcrumb URL, when available. */\n path?: string\n req: TRequest\n}) => null | Promise<null | string | undefined> | string | undefined\n\nexport type NestedDocsPageTreePluginBadgesLinks<TRequest = PayloadRequest> = {\n /** Which links to offer for a draft with a published version. @default 'both' */\n draftHasPublishedVersion?: 'both' | 'live' | 'preview'\n /** Website base URL, or a server-only callback returning the final live URL. */\n liveURL?: PageTreeLiveURL<TRequest> | string\n /** Show live link and preview eye icons. When false, 'both' keeps an external-link preview action. @default true */\n showIcons?: boolean\n}\n\nexport type PageTreeStatusLinks = {\n previewURL?: string\n publicURL?: string\n}\n\nexport type PageTreeLocaleStatus = {\n /** Optional display label; publication status remains separate. */\n label?: string\n locale: string\n status: 'changed' | 'draft' | 'published' | 'unknown'\n visible?: boolean\n}\n\nexport type PageTreeSourceDoc = {\n __pageTreeLocaleStatuses?: PageTreeLocaleStatus[]\n __pageTreeStatusLinks?: PageTreeStatusLinks\n _displayStatus?: null | string\n _status?: null | string\n id?: number | string\n slug?: null | string\n} & Record<string, unknown>\n\nexport const nestedDocsPageTreePluginCustomKey = 'nestedDocsPageTreePlugin'\n\n/**\n * Set on Payload's hook context for every page-tree write that leaves the\n * published site unchanged: sibling reorders, and parent moves staged as\n * drafts. Deploy/revalidate hooks read it to skip rebuilds they do not need.\n *\n * It is deliberately NOT set when `publishOnMove` publishes a move, because\n * that move changed the live URL of the page and its descendants and the site\n * does need rebuilding. That way one guard covers every configuration:\n *\n * ```ts\n * if (req.context?.[pageTreeMoveContextKey]) return\n * ```\n *\n * Note the flag describes the *effect* of the write, not its kind - it is\n * absent on published moves even though those are still page-tree moves. Use\n * `pageTreeWriteContextKey` when you need \"was this a page-tree write at all\".\n */\nexport const pageTreeMoveContextKey = 'pageTreeMove'\n\n/**\n * Internal: set on every page-tree write regardless of whether it published.\n * Diagnostics uses it so that published moves are still traced, which is the\n * case most worth observing. Not part of the public API.\n */\nexport const pageTreeWriteContextKey = 'pageTreeWrite'\n\nexport type PageTreeMoveContext = {\n [pageTreeMoveContextKey]?: boolean\n [pageTreeWriteContextKey]?: boolean\n}\n"],"names":["nestedDocsPageTreePluginBadgeStatuses","nestedDocsPageTreePluginCustomKey","pageTreeMoveContextKey","pageTreeWriteContextKey"],"mappings":"AASA,OAAO,MAAMA,wCAAwC;IAAC;IAAa;IAAW;CAAQ,CAAS;AAiJ/F,OAAO,MAAMC,oCAAoC,2BAA0B;AAE3E;;;;;;;;;;;;;;;;CAgBC,GACD,OAAO,MAAMC,yBAAyB,eAAc;AAEpD;;;;CAIC,GACD,OAAO,MAAMC,0BAA0B,gBAAe"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ColumnPreference, SelectType } from 'payload';
|
|
2
|
+
export declare function getPageTreeListSelect({ columns, useAsTitle, parentFieldSlug, breadcrumbsFieldSlug, orderableFieldName, sort, }: {
|
|
3
|
+
breadcrumbsFieldSlug: string;
|
|
4
|
+
columns: ColumnPreference[];
|
|
5
|
+
orderableFieldName?: string;
|
|
6
|
+
parentFieldSlug: string;
|
|
7
|
+
sort?: string;
|
|
8
|
+
useAsTitle?: string;
|
|
9
|
+
}): SelectType;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { unflatten } from 'payload/shared';
|
|
2
|
+
export function getPageTreeListSelect({ columns, useAsTitle, parentFieldSlug, breadcrumbsFieldSlug, orderableFieldName, sort }) {
|
|
3
|
+
const select = Object.fromEntries(columns.filter(({ active })=>active).map(({ accessor })=>[
|
|
4
|
+
accessor,
|
|
5
|
+
true
|
|
6
|
+
]));
|
|
7
|
+
for (const field of [
|
|
8
|
+
'id',
|
|
9
|
+
'slug',
|
|
10
|
+
'_status',
|
|
11
|
+
useAsTitle,
|
|
12
|
+
parentFieldSlug,
|
|
13
|
+
breadcrumbsFieldSlug,
|
|
14
|
+
orderableFieldName,
|
|
15
|
+
...sort?.split(',').map((field)=>field.trim().replace(/^-/, '')) ?? []
|
|
16
|
+
]){
|
|
17
|
+
if (field) {
|
|
18
|
+
select[field] = true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return unflatten(select);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=listSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/listSelect.ts"],"sourcesContent":["import type { ColumnPreference, SelectType } from 'payload'\n\nimport { unflatten } from 'payload/shared'\n\nexport function getPageTreeListSelect({\n columns,\n useAsTitle,\n parentFieldSlug,\n breadcrumbsFieldSlug,\n orderableFieldName,\n sort,\n}: {\n breadcrumbsFieldSlug: string\n columns: ColumnPreference[]\n orderableFieldName?: string\n parentFieldSlug: string\n sort?: string\n useAsTitle?: string\n}): SelectType {\n const select = Object.fromEntries(\n columns.filter(({ active }) => active).map(({ accessor }) => [accessor, true]),\n )\n for (const field of [\n 'id', 'slug', '_status', useAsTitle, parentFieldSlug, breadcrumbsFieldSlug, orderableFieldName,\n ...(sort?.split(',').map((field) => field.trim().replace(/^-/, '')) ?? []),\n ]) {\n if (field) { select[field] = true }\n }\n return unflatten(select) as SelectType\n}\n"],"names":["unflatten","getPageTreeListSelect","columns","useAsTitle","parentFieldSlug","breadcrumbsFieldSlug","orderableFieldName","sort","select","Object","fromEntries","filter","active","map","accessor","field","split","trim","replace"],"mappings":"AAEA,SAASA,SAAS,QAAQ,iBAAgB;AAE1C,OAAO,SAASC,sBAAsB,EACpCC,OAAO,EACPC,UAAU,EACVC,eAAe,EACfC,oBAAoB,EACpBC,kBAAkB,EAClBC,IAAI,EAQL;IACC,MAAMC,SAASC,OAAOC,WAAW,CAC/BR,QAAQS,MAAM,CAAC,CAAC,EAAEC,MAAM,EAAE,GAAKA,QAAQC,GAAG,CAAC,CAAC,EAAEC,QAAQ,EAAE,GAAK;YAACA;YAAU;SAAK;IAE/E,KAAK,MAAMC,SAAS;QAClB;QAAM;QAAQ;QAAWZ;QAAYC;QAAiBC;QAAsBC;WACxEC,MAAMS,MAAM,KAAKH,IAAI,CAACE,QAAUA,MAAME,IAAI,GAAGC,OAAO,CAAC,MAAM,QAAQ,EAAE;KAC1E,CAAE;QACD,IAAIH,OAAO;YAAEP,MAAM,CAACO,MAAM,GAAG;QAAK;IACpC;IACA,OAAOf,UAAUQ;AACnB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { CollectionSlug, Payload, PayloadRequest } from 'payload';
|
|
2
2
|
import type { PageTreeLocaleBadgeStatus, PageTreeLocaleBadgeVisibility, PageTreeSourceDoc } from '../types.js';
|
|
3
|
-
export declare function withPageTreeLocaleStatuses({ collectionSlug, docs, localeBadgeStatus, localeBadgeVisibility, locales, payload, req, }: {
|
|
3
|
+
export declare function withPageTreeLocaleStatuses({ collectionSlug, docs, fastMode, localeBadgeStatus, localeBadgeVisibility, locales, payload, req, }: {
|
|
4
4
|
collectionSlug: CollectionSlug;
|
|
5
5
|
docs: PageTreeSourceDoc[];
|
|
6
|
+
fastMode?: boolean;
|
|
6
7
|
localeBadgeStatus?: PageTreeLocaleBadgeStatus;
|
|
7
8
|
localeBadgeVisibility?: PageTreeLocaleBadgeVisibility;
|
|
8
9
|
locales: string[];
|
|
@@ -6,7 +6,7 @@ function readLocaleStatus(value, locale) {
|
|
|
6
6
|
const status = value[locale];
|
|
7
7
|
return typeof status === 'string' ? status : undefined;
|
|
8
8
|
}
|
|
9
|
-
export async function withPageTreeLocaleStatuses({ collectionSlug, docs, localeBadgeStatus, localeBadgeVisibility, locales, payload, req }) {
|
|
9
|
+
export async function withPageTreeLocaleStatuses({ collectionSlug, docs, fastMode, localeBadgeStatus, localeBadgeVisibility, locales, payload, req }) {
|
|
10
10
|
const ids = docs.map(({ id })=>id).filter((id)=>typeof id === 'number' || typeof id === 'string');
|
|
11
11
|
if (!ids.length || !locales.length) {
|
|
12
12
|
return docs;
|
|
@@ -29,11 +29,10 @@ export async function withPageTreeLocaleStatuses({ collectionSlug, docs, localeB
|
|
|
29
29
|
...req.query
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
|
-
|
|
33
|
-
select: localeBadgeStatus || draft && localeBadgeVisibility ? undefined : {
|
|
32
|
+
select: fastMode ? {
|
|
34
33
|
id: true,
|
|
35
34
|
_status: true
|
|
36
|
-
},
|
|
35
|
+
} : undefined,
|
|
37
36
|
where: {
|
|
38
37
|
id: {
|
|
39
38
|
in: ids
|
|
@@ -59,22 +58,27 @@ export async function withPageTreeLocaleStatuses({ collectionSlug, docs, localeB
|
|
|
59
58
|
_displayStatus: draft === 'draft' && current === 'published' ? 'changed' : undefined,
|
|
60
59
|
_status: draft
|
|
61
60
|
});
|
|
61
|
+
const displayStatus = localeBadgeStatus && draftDoc ? localeBadgeStatus({
|
|
62
|
+
doc: draftDoc,
|
|
63
|
+
locale,
|
|
64
|
+
publishedDoc,
|
|
65
|
+
req,
|
|
66
|
+
status
|
|
67
|
+
}) : status;
|
|
62
68
|
return {
|
|
63
69
|
locale,
|
|
64
70
|
...localeBadgeVisibility ? {
|
|
65
71
|
visible: Boolean(draftDoc && localeBadgeVisibility({
|
|
66
72
|
doc: draftDoc,
|
|
67
73
|
locale,
|
|
74
|
+
publishedDoc,
|
|
68
75
|
req
|
|
69
76
|
}))
|
|
70
77
|
} : {},
|
|
71
|
-
status:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
req,
|
|
76
|
-
status
|
|
77
|
-
}) : status
|
|
78
|
+
status: typeof displayStatus === 'string' ? displayStatus : displayStatus.status,
|
|
79
|
+
...typeof displayStatus === 'object' && displayStatus.label ? {
|
|
80
|
+
label: displayStatus.label
|
|
81
|
+
} : {}
|
|
78
82
|
};
|
|
79
83
|
})
|
|
80
84
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/localeStatus.ts"],"sourcesContent":["import type { CollectionSlug, Payload, PayloadRequest } from 'payload'\n\nimport type {\n PageTreeLocaleBadgeStatus,\n PageTreeLocaleBadgeVisibility,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport { getPageTreeDisplayStatus } from './status.js'\n\nfunction readLocaleStatus(value: unknown, locale: string): string | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return undefined\n }\n const status = (value as Record<string, unknown>)[locale]\n return typeof status === 'string' ? status : undefined\n}\n\nexport async function withPageTreeLocaleStatuses({\n collectionSlug,\n docs,\n localeBadgeStatus,\n localeBadgeVisibility,\n locales,\n payload,\n req,\n}: {\n collectionSlug: CollectionSlug\n docs: PageTreeSourceDoc[]\n localeBadgeStatus?: PageTreeLocaleBadgeStatus\n localeBadgeVisibility?: PageTreeLocaleBadgeVisibility\n locales: string[]\n payload: Payload\n req: PayloadRequest\n}): Promise<PageTreeSourceDoc[]> {\n const ids = docs\n .map(({ id }) => id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (!ids.length || !locales.length) {\n return docs\n }\n\n const [draftResult, currentResult] = await Promise.all(\n [true, false].map((draft) =>\n payload.find({\n collection: collectionSlug,\n depth: 0,\n draft,\n fallbackLocale: false,\n locale: 'all',\n overrideAccess: false,\n pagination: false,\n // Payload mutates the request locale for Local API calls.\n req: { ...req, query: { ...req.query } },\n
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/localeStatus.ts"],"sourcesContent":["import type { CollectionSlug, Payload, PayloadRequest } from 'payload'\n\nimport type {\n PageTreeLocaleBadgeStatus,\n PageTreeLocaleBadgeVisibility,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport { getPageTreeDisplayStatus } from './status.js'\n\nfunction readLocaleStatus(value: unknown, locale: string): string | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return undefined\n }\n const status = (value as Record<string, unknown>)[locale]\n return typeof status === 'string' ? status : undefined\n}\n\nexport async function withPageTreeLocaleStatuses({\n collectionSlug,\n docs,\n fastMode,\n localeBadgeStatus,\n localeBadgeVisibility,\n locales,\n payload,\n req,\n}: {\n collectionSlug: CollectionSlug\n docs: PageTreeSourceDoc[]\n fastMode?: boolean\n localeBadgeStatus?: PageTreeLocaleBadgeStatus\n localeBadgeVisibility?: PageTreeLocaleBadgeVisibility\n locales: string[]\n payload: Payload\n req: PayloadRequest\n}): Promise<PageTreeSourceDoc[]> {\n const ids = docs\n .map(({ id }) => id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (!ids.length || !locales.length) {\n return docs\n }\n\n const [draftResult, currentResult] = await Promise.all(\n [true, false].map((draft) =>\n payload.find({\n collection: collectionSlug,\n depth: 0,\n draft,\n fallbackLocale: false,\n locale: 'all',\n overrideAccess: false,\n pagination: false,\n // Payload mutates the request locale for Local API calls.\n req: { ...req, query: { ...req.query } },\n select: fastMode ? { id: true, _status: true } : undefined,\n where: { id: { in: ids } },\n }),\n ),\n )\n const draftByID = new Map(draftResult.docs.map((doc) => [String(doc.id), doc]))\n const currentByID = new Map(currentResult.docs.map((doc) => [String(doc.id), doc]))\n\n return docs.map((doc) => ({\n ...doc,\n __pageTreeLocaleStatuses: locales.map((locale) => {\n const draftDoc = draftByID.get(String(doc.id))\n const draft = readLocaleStatus(draftDoc?._status, locale)\n const publishedDoc = currentByID.get(String(doc.id))\n const current = readLocaleStatus(publishedDoc?._status, locale)\n const status = getPageTreeDisplayStatus({\n _displayStatus: draft === 'draft' && current === 'published' ? 'changed' : undefined,\n _status: draft,\n })\n const displayStatus =\n localeBadgeStatus && draftDoc\n ? localeBadgeStatus({ doc: draftDoc, locale, publishedDoc, req, status })\n : status\n return {\n locale,\n ...(localeBadgeVisibility\n ? {\n visible: Boolean(\n draftDoc && localeBadgeVisibility({ doc: draftDoc, locale, publishedDoc, req }),\n ),\n }\n : {}),\n status: typeof displayStatus === 'string' ? displayStatus : displayStatus.status,\n ...(typeof displayStatus === 'object' && displayStatus.label\n ? { label: displayStatus.label }\n : {}),\n }\n }),\n }))\n}\n"],"names":["getPageTreeDisplayStatus","readLocaleStatus","value","locale","Array","isArray","undefined","status","withPageTreeLocaleStatuses","collectionSlug","docs","fastMode","localeBadgeStatus","localeBadgeVisibility","locales","payload","req","ids","map","id","filter","length","draftResult","currentResult","Promise","all","draft","find","collection","depth","fallbackLocale","overrideAccess","pagination","query","select","_status","where","in","draftByID","Map","doc","String","currentByID","__pageTreeLocaleStatuses","draftDoc","get","publishedDoc","current","_displayStatus","displayStatus","visible","Boolean","label"],"mappings":"AAQA,SAASA,wBAAwB,QAAQ,cAAa;AAEtD,SAASC,iBAAiBC,KAAc,EAAEC,MAAc;IACtD,IAAI,CAACD,SAAS,OAAOA,UAAU,YAAYE,MAAMC,OAAO,CAACH,QAAQ;QAC/D,OAAOI;IACT;IACA,MAAMC,SAAS,AAACL,KAAiC,CAACC,OAAO;IACzD,OAAO,OAAOI,WAAW,WAAWA,SAASD;AAC/C;AAEA,OAAO,eAAeE,2BAA2B,EAC/CC,cAAc,EACdC,IAAI,EACJC,QAAQ,EACRC,iBAAiB,EACjBC,qBAAqB,EACrBC,OAAO,EACPC,OAAO,EACPC,GAAG,EAUJ;IACC,MAAMC,MAAMP,KACTQ,GAAG,CAAC,CAAC,EAAEC,EAAE,EAAE,GAAKA,IAChBC,MAAM,CAAC,CAACD,KAA8B,OAAOA,OAAO,YAAY,OAAOA,OAAO;IAEjF,IAAI,CAACF,IAAII,MAAM,IAAI,CAACP,QAAQO,MAAM,EAAE;QAClC,OAAOX;IACT;IAEA,MAAM,CAACY,aAAaC,cAAc,GAAG,MAAMC,QAAQC,GAAG,CACpD;QAAC;QAAM;KAAM,CAACP,GAAG,CAAC,CAACQ,QACjBX,QAAQY,IAAI,CAAC;YACXC,YAAYnB;YACZoB,OAAO;YACPH;YACAI,gBAAgB;YAChB3B,QAAQ;YACR4B,gBAAgB;YAChBC,YAAY;YACZ,0DAA0D;YAC1DhB,KAAK;gBAAE,GAAGA,GAAG;gBAAEiB,OAAO;oBAAE,GAAGjB,IAAIiB,KAAK;gBAAC;YAAE;YACvCC,QAAQvB,WAAW;gBAAEQ,IAAI;gBAAMgB,SAAS;YAAK,IAAI7B;YACjD8B,OAAO;gBAAEjB,IAAI;oBAAEkB,IAAIpB;gBAAI;YAAE;QAC3B;IAGJ,MAAMqB,YAAY,IAAIC,IAAIjB,YAAYZ,IAAI,CAACQ,GAAG,CAAC,CAACsB,MAAQ;YAACC,OAAOD,IAAIrB,EAAE;YAAGqB;SAAI;IAC7E,MAAME,cAAc,IAAIH,IAAIhB,cAAcb,IAAI,CAACQ,GAAG,CAAC,CAACsB,MAAQ;YAACC,OAAOD,IAAIrB,EAAE;YAAGqB;SAAI;IAEjF,OAAO9B,KAAKQ,GAAG,CAAC,CAACsB,MAAS,CAAA;YACxB,GAAGA,GAAG;YACNG,0BAA0B7B,QAAQI,GAAG,CAAC,CAACf;gBACrC,MAAMyC,WAAWN,UAAUO,GAAG,CAACJ,OAAOD,IAAIrB,EAAE;gBAC5C,MAAMO,QAAQzB,iBAAiB2C,UAAUT,SAAShC;gBAClD,MAAM2C,eAAeJ,YAAYG,GAAG,CAACJ,OAAOD,IAAIrB,EAAE;gBAClD,MAAM4B,UAAU9C,iBAAiB6C,cAAcX,SAAShC;gBACxD,MAAMI,SAASP,yBAAyB;oBACtCgD,gBAAgBtB,UAAU,WAAWqB,YAAY,cAAc,YAAYzC;oBAC3E6B,SAAST;gBACX;gBACA,MAAMuB,gBACJrC,qBAAqBgC,WACjBhC,kBAAkB;oBAAE4B,KAAKI;oBAAUzC;oBAAQ2C;oBAAc9B;oBAAKT;gBAAO,KACrEA;gBACN,OAAO;oBACLJ;oBACA,GAAIU,wBACA;wBACEqC,SAASC,QACPP,YAAY/B,sBAAsB;4BAAE2B,KAAKI;4BAAUzC;4BAAQ2C;4BAAc9B;wBAAI;oBAEjF,IACA,CAAC,CAAC;oBACNT,QAAQ,OAAO0C,kBAAkB,WAAWA,gBAAgBA,cAAc1C,MAAM;oBAChF,GAAI,OAAO0C,kBAAkB,YAAYA,cAAcG,KAAK,GACxD;wBAAEA,OAAOH,cAAcG,KAAK;oBAAC,IAC7B,CAAC,CAAC;gBACR;YACF;QACF,CAAA;AACF"}
|
|
@@ -14,6 +14,7 @@ export function getCollectionPageTreeConfig(collection) {
|
|
|
14
14
|
badgesLinks: config.badgesLinks,
|
|
15
15
|
breadcrumbsFieldSlug: config.breadcrumbsFieldSlug,
|
|
16
16
|
defaultLimit: config.defaultLimit,
|
|
17
|
+
fastMode: config.fastMode === true,
|
|
17
18
|
hideBreadcrumbs: config.hideBreadcrumbs,
|
|
18
19
|
homeIndicator: {
|
|
19
20
|
enabled: config.homeIndicator.enabled
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/pageTreeConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport type { NestedDocsPageTreePluginCollectionCustom } from '../types.js'\n\nimport { nestedDocsPageTreePluginCustomKey } from '../types.js'\nimport { normalizeNestedDocsPageTreePluginBadgeConfig } from './badgeConfig.js'\n\nexport function getCollectionPageTreeConfig(\n collection: Pick<CollectionConfig, 'custom'>,\n): NestedDocsPageTreePluginCollectionCustom | null {\n const value = collection.custom?.[nestedDocsPageTreePluginCustomKey]\n\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null\n }\n\n const config = value as Partial<NestedDocsPageTreePluginCollectionCustom>\n\n if (\n typeof config.breadcrumbsFieldSlug !== 'string' ||\n typeof config.defaultLimit !== 'number' ||\n typeof config.hideBreadcrumbs !== 'boolean' ||\n !config.homeIndicator ||\n typeof config.homeIndicator !== 'object' ||\n Array.isArray(config.homeIndicator) ||\n typeof config.homeIndicator.enabled !== 'boolean' ||\n typeof config.parentFieldSlug !== 'string'\n ) {\n return null\n }\n\n return {\n badges: normalizeNestedDocsPageTreePluginBadgeConfig(config.badges),\n badgesLinks: config.badgesLinks,\n breadcrumbsFieldSlug: config.breadcrumbsFieldSlug,\n defaultLimit: config.defaultLimit,\n hideBreadcrumbs: config.hideBreadcrumbs,\n homeIndicator: {\n enabled: config.homeIndicator.enabled,\n },\n localeBadgeStatus: config.localeBadgeStatus,\n localeBadgeVisibility: config.localeBadgeVisibility,\n parentFieldSlug: config.parentFieldSlug,\n }\n}\n"],"names":["nestedDocsPageTreePluginCustomKey","normalizeNestedDocsPageTreePluginBadgeConfig","getCollectionPageTreeConfig","collection","value","custom","Array","isArray","config","breadcrumbsFieldSlug","defaultLimit","hideBreadcrumbs","homeIndicator","enabled","parentFieldSlug","badges","badgesLinks","localeBadgeStatus","localeBadgeVisibility"],"mappings":"AAIA,SAASA,iCAAiC,QAAQ,cAAa;AAC/D,SAASC,4CAA4C,QAAQ,mBAAkB;AAE/E,OAAO,SAASC,4BACdC,UAA4C;IAE5C,MAAMC,QAAQD,WAAWE,MAAM,EAAE,CAACL,kCAAkC;IAEpE,IAAI,CAACI,SAAS,OAAOA,UAAU,YAAYE,MAAMC,OAAO,CAACH,QAAQ;QAC/D,OAAO;IACT;IAEA,MAAMI,SAASJ;IAEf,IACE,OAAOI,OAAOC,oBAAoB,KAAK,YACvC,OAAOD,OAAOE,YAAY,KAAK,YAC/B,OAAOF,OAAOG,eAAe,KAAK,aAClC,CAACH,OAAOI,aAAa,IACrB,OAAOJ,OAAOI,aAAa,KAAK,YAChCN,MAAMC,OAAO,CAACC,OAAOI,aAAa,KAClC,OAAOJ,OAAOI,aAAa,CAACC,OAAO,KAAK,aACxC,OAAOL,OAAOM,eAAe,KAAK,UAClC;QACA,OAAO;IACT;IAEA,OAAO;QACLC,QAAQd,6CAA6CO,OAAOO,MAAM;QAClEC,aAAaR,OAAOQ,WAAW;QAC/BP,sBAAsBD,OAAOC,oBAAoB;QACjDC,cAAcF,OAAOE,YAAY;
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/pageTreeConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport type { NestedDocsPageTreePluginCollectionCustom } from '../types.js'\n\nimport { nestedDocsPageTreePluginCustomKey } from '../types.js'\nimport { normalizeNestedDocsPageTreePluginBadgeConfig } from './badgeConfig.js'\n\nexport function getCollectionPageTreeConfig(\n collection: Pick<CollectionConfig, 'custom'>,\n): NestedDocsPageTreePluginCollectionCustom | null {\n const value = collection.custom?.[nestedDocsPageTreePluginCustomKey]\n\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null\n }\n\n const config = value as Partial<NestedDocsPageTreePluginCollectionCustom>\n\n if (\n typeof config.breadcrumbsFieldSlug !== 'string' ||\n typeof config.defaultLimit !== 'number' ||\n typeof config.hideBreadcrumbs !== 'boolean' ||\n !config.homeIndicator ||\n typeof config.homeIndicator !== 'object' ||\n Array.isArray(config.homeIndicator) ||\n typeof config.homeIndicator.enabled !== 'boolean' ||\n typeof config.parentFieldSlug !== 'string'\n ) {\n return null\n }\n\n return {\n badges: normalizeNestedDocsPageTreePluginBadgeConfig(config.badges),\n badgesLinks: config.badgesLinks,\n breadcrumbsFieldSlug: config.breadcrumbsFieldSlug,\n defaultLimit: config.defaultLimit,\n fastMode: config.fastMode === true,\n hideBreadcrumbs: config.hideBreadcrumbs,\n homeIndicator: {\n enabled: config.homeIndicator.enabled,\n },\n localeBadgeStatus: config.localeBadgeStatus,\n localeBadgeVisibility: config.localeBadgeVisibility,\n parentFieldSlug: config.parentFieldSlug,\n }\n}\n"],"names":["nestedDocsPageTreePluginCustomKey","normalizeNestedDocsPageTreePluginBadgeConfig","getCollectionPageTreeConfig","collection","value","custom","Array","isArray","config","breadcrumbsFieldSlug","defaultLimit","hideBreadcrumbs","homeIndicator","enabled","parentFieldSlug","badges","badgesLinks","fastMode","localeBadgeStatus","localeBadgeVisibility"],"mappings":"AAIA,SAASA,iCAAiC,QAAQ,cAAa;AAC/D,SAASC,4CAA4C,QAAQ,mBAAkB;AAE/E,OAAO,SAASC,4BACdC,UAA4C;IAE5C,MAAMC,QAAQD,WAAWE,MAAM,EAAE,CAACL,kCAAkC;IAEpE,IAAI,CAACI,SAAS,OAAOA,UAAU,YAAYE,MAAMC,OAAO,CAACH,QAAQ;QAC/D,OAAO;IACT;IAEA,MAAMI,SAASJ;IAEf,IACE,OAAOI,OAAOC,oBAAoB,KAAK,YACvC,OAAOD,OAAOE,YAAY,KAAK,YAC/B,OAAOF,OAAOG,eAAe,KAAK,aAClC,CAACH,OAAOI,aAAa,IACrB,OAAOJ,OAAOI,aAAa,KAAK,YAChCN,MAAMC,OAAO,CAACC,OAAOI,aAAa,KAClC,OAAOJ,OAAOI,aAAa,CAACC,OAAO,KAAK,aACxC,OAAOL,OAAOM,eAAe,KAAK,UAClC;QACA,OAAO;IACT;IAEA,OAAO;QACLC,QAAQd,6CAA6CO,OAAOO,MAAM;QAClEC,aAAaR,OAAOQ,WAAW;QAC/BP,sBAAsBD,OAAOC,oBAAoB;QACjDC,cAAcF,OAAOE,YAAY;QACjCO,UAAUT,OAAOS,QAAQ,KAAK;QAC9BN,iBAAiBH,OAAOG,eAAe;QACvCC,eAAe;YACbC,SAASL,OAAOI,aAAa,CAACC,OAAO;QACvC;QACAK,mBAAmBV,OAAOU,iBAAiB;QAC3CC,uBAAuBX,OAAOW,qBAAqB;QACnDL,iBAAiBN,OAAOM,eAAe;IACzC;AACF"}
|