payload-nested-docs-page-tree 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +148 -11
- package/dist/components/PageTreeListView.client.js +9 -4
- package/dist/components/PageTreeListView.client.js.map +1 -1
- package/dist/components/PageTreeListView.module.css +55 -8
- package/dist/components/PageTreeListView.server.js +30 -14
- package/dist/components/PageTreeListView.server.js.map +1 -1
- package/dist/components/PageTreeLocaleStatusBadges.d.ts +7 -0
- package/dist/components/PageTreeLocaleStatusBadges.js +79 -0
- package/dist/components/PageTreeLocaleStatusBadges.js.map +1 -0
- package/dist/components/PageTreeStatusBadge.d.ts +2 -1
- package/dist/components/PageTreeStatusBadge.js +37 -7
- package/dist/components/PageTreeStatusBadge.js.map +1 -1
- package/dist/components/PageTreeTitleCell.js +12 -10
- package/dist/components/PageTreeTitleCell.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +49 -8
- package/dist/types.js.map +1 -1
- package/dist/utilities/badgeConfig.js +3 -0
- package/dist/utilities/badgeConfig.js.map +1 -1
- package/dist/utilities/badgeLinks.d.ts +1 -1
- package/dist/utilities/badgeLinks.js +13 -3
- package/dist/utilities/badgeLinks.js.map +1 -1
- package/dist/utilities/localeStatus.d.ts +11 -0
- package/dist/utilities/localeStatus.js +83 -0
- package/dist/utilities/localeStatus.js.map +1 -0
- package/dist/utilities/pageTree.js +1 -1
- package/dist/utilities/pageTree.js.map +1 -1
- package/dist/utilities/pageTreeConfig.d.ts +1 -1
- package/dist/utilities/pageTreeConfig.js +2 -0
- package/dist/utilities/pageTreeConfig.js.map +1 -1
- package/dist/utilities/status.d.ts +2 -2
- package/dist/utilities/status.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 { withPageTreeLocaleStatuses } from '../utilities/localeStatus.js';
|
|
9
10
|
import { buildPageTreeDocs } from '../utilities/pageTree.js';
|
|
10
11
|
import { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js';
|
|
11
12
|
import { withPageTreeDisplayStatuses } from '../utilities/status.js';
|
|
@@ -14,7 +15,7 @@ function isNumericSegment(segment) {
|
|
|
14
15
|
return /^\d+$/.test(segment);
|
|
15
16
|
}
|
|
16
17
|
function getKeySegments(key) {
|
|
17
|
-
const matches = key.match(/
|
|
18
|
+
const matches = key.match(/[^[\]]+/g);
|
|
18
19
|
return matches ? matches.filter(Boolean) : [
|
|
19
20
|
key
|
|
20
21
|
];
|
|
@@ -197,7 +198,7 @@ async function getDocsWithDisplayStatus(args) {
|
|
|
197
198
|
overrideAccess: false,
|
|
198
199
|
pagination: false,
|
|
199
200
|
req,
|
|
200
|
-
select: {
|
|
201
|
+
select: typeof badgesLinks?.liveURL === 'function' ? undefined : {
|
|
201
202
|
id: true,
|
|
202
203
|
_status: true,
|
|
203
204
|
...badgesLinks?.liveURL ? {
|
|
@@ -328,7 +329,23 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
328
329
|
user: props.user,
|
|
329
330
|
where
|
|
330
331
|
});
|
|
331
|
-
const
|
|
332
|
+
const { clientCollectionConfig, clientConfig } = await getListClientConfig({
|
|
333
|
+
collectionSlug: props.collectionSlug,
|
|
334
|
+
i18n: props.i18n,
|
|
335
|
+
payload: props.payload,
|
|
336
|
+
req,
|
|
337
|
+
user: props.user
|
|
338
|
+
});
|
|
339
|
+
const statusLocales = pageTreeConfig.badges.locales && props.collectionConfig.versions?.drafts?.localizeStatus && clientConfig.localization ? clientConfig.localization.locales.map(({ code })=>code) : [];
|
|
340
|
+
const treeSourceDocs = statusLocales.length ? await withPageTreeLocaleStatuses({
|
|
341
|
+
collectionSlug: props.collectionSlug,
|
|
342
|
+
docs: fullResult.docs,
|
|
343
|
+
localeBadgeStatus: pageTreeConfig.localeBadgeStatus,
|
|
344
|
+
localeBadgeVisibility: pageTreeConfig.localeBadgeVisibility,
|
|
345
|
+
locales: statusLocales,
|
|
346
|
+
payload: props.payload,
|
|
347
|
+
req
|
|
348
|
+
}) : await getDocsWithDisplayStatus({
|
|
332
349
|
badgesLinks: pageTreeConfig.badgesLinks,
|
|
333
350
|
breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,
|
|
334
351
|
collectionConfig: props.collectionConfig,
|
|
@@ -355,13 +372,6 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
355
372
|
totalDocs: orderedDocs.length,
|
|
356
373
|
totalPages: 1
|
|
357
374
|
};
|
|
358
|
-
const { clientCollectionConfig, clientConfig } = await getListClientConfig({
|
|
359
|
-
collectionSlug: props.collectionSlug,
|
|
360
|
-
i18n: props.i18n,
|
|
361
|
-
payload: props.payload,
|
|
362
|
-
req,
|
|
363
|
-
user: props.user
|
|
364
|
-
});
|
|
365
375
|
const columnPreferences = props.columnState.map(({ accessor, active })=>({
|
|
366
376
|
accessor,
|
|
367
377
|
active: accessor === props.collectionConfig.admin.useAsTitle ? true : active
|
|
@@ -375,7 +385,7 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
375
385
|
permissions: props.permissions
|
|
376
386
|
});
|
|
377
387
|
const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true;
|
|
378
|
-
const renderedTable =
|
|
388
|
+
const renderedTable = renderTable({
|
|
379
389
|
clientCollectionConfig,
|
|
380
390
|
clientConfig,
|
|
381
391
|
collectionConfig: props.collectionConfig,
|
|
@@ -395,11 +405,11 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
395
405
|
const clientProps = {
|
|
396
406
|
AfterList: props.AfterList,
|
|
397
407
|
AfterListTable: props.AfterListTable,
|
|
408
|
+
beforeActions: props.beforeActions,
|
|
398
409
|
BeforeList: props.BeforeList,
|
|
399
410
|
BeforeListTable: props.BeforeListTable,
|
|
400
|
-
Description: props.Description,
|
|
401
|
-
beforeActions: props.beforeActions,
|
|
402
411
|
collectionSlug: props.collectionSlug,
|
|
412
|
+
Description: props.Description,
|
|
403
413
|
disableBulkDelete: props.disableBulkDelete,
|
|
404
414
|
disableBulkEdit: props.disableBulkEdit,
|
|
405
415
|
disableQueryPresets: props.disableQueryPresets,
|
|
@@ -418,11 +428,17 @@ export async function NestedDocsPageTreeListView(props) {
|
|
|
418
428
|
viewType: props.viewType
|
|
419
429
|
};
|
|
420
430
|
const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update);
|
|
431
|
+
const badgesLinks = pageTreeConfig.badgesLinks ? {
|
|
432
|
+
...pageTreeConfig.badgesLinks
|
|
433
|
+
} : undefined;
|
|
434
|
+
if (typeof badgesLinks?.liveURL === 'function') {
|
|
435
|
+
delete badgesLinks.liveURL;
|
|
436
|
+
}
|
|
421
437
|
return /*#__PURE__*/ _jsx(PageTreeListViewClient, {
|
|
422
438
|
...clientProps,
|
|
423
439
|
allDocs: orderedDocs,
|
|
424
440
|
badgeConfig: pageTreeConfig.badges,
|
|
425
|
-
badgesLinks:
|
|
441
|
+
badgesLinks: badgesLinks,
|
|
426
442
|
canMoveDocs: canMoveDocs,
|
|
427
443
|
columnState: renderedTable.columnState,
|
|
428
444
|
homeIndicatorEnabled: pageTreeConfig.homeIndicator.enabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeListView.server.tsx"],"sourcesContent":["import type {\n ColumnPreference,\n ListQuery,\n ListViewClientProps,\n PaginatedDocs,\n Params,\n} from 'payload'\n\nimport { getColumns, renderTable } from '@payloadcms/ui/rsc'\nimport { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'\nimport { headers } from 'next/headers.js'\nimport { createLocalReq, extractJWT } from 'payload'\nimport {\n applyLocaleFiltering,\n combineWhereConstraints,\n mergeListSearchAndWhere,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { NestedDocsPageTreePluginBadgesLinks, PageTreeSourceDoc } from '../types.js'\n\nimport { resolvePageTreeBadgeLinks } from '../utilities/badgeLinks.js'\nimport { buildPageTreeDocs } from '../utilities/pageTree.js'\nimport { getCollectionPageTreeConfig } from '../utilities/pageTreeConfig.js'\nimport { withPageTreeDisplayStatuses } from '../utilities/status.js'\nimport PageTreeListViewClient from './PageTreeListView.client.js'\n\ntype ParsedQuery = Partial<ListQuery> & Record<string, unknown>\ntype ServerListViewProps = Record<string, any>\n\nfunction isNumericSegment(segment: string): boolean {\n return /^\\d+$/.test(segment)\n}\n\nfunction getKeySegments(key: string): string[] {\n const matches = key.match(/([^[\\]]+)/g)\n return matches ? matches.filter(Boolean) : [key]\n}\n\nfunction setNestedValue(target: Record<string, unknown>, key: string, value: string): void {\n const segments = getKeySegments(key)\n\n if (segments.length === 0) {\n return\n }\n\n let current: Record<string, unknown> | unknown[] = target\n\n for (let index = 0; index < segments.length; index += 1) {\n const segment = segments[index]\n const isLastSegment = index === segments.length - 1\n const nextSegment = segments[index + 1]\n const nextContainer: Record<string, unknown> | unknown[] = isNumericSegment(nextSegment ?? '')\n ? []\n : {}\n\n if (isLastSegment) {\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n current[arrayIndex] = value\n } else {\n const existingValue = current[segment]\n\n if (existingValue === undefined) {\n current[segment] = value\n } else if (Array.isArray(existingValue)) {\n existingValue.push(value)\n } else {\n current[segment] = [existingValue, value]\n }\n }\n\n return\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment)\n const existingValue = current[arrayIndex]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[arrayIndex] = nextContainer\n }\n\n current = current[arrayIndex] as Record<string, unknown> | unknown[]\n continue\n }\n\n const existingValue = current[segment]\n\n if (\n typeof existingValue !== 'object' ||\n existingValue === null ||\n Array.isArray(existingValue) !== Array.isArray(nextContainer)\n ) {\n current[segment] = nextContainer\n }\n\n current = current[segment] as Record<string, unknown> | unknown[]\n }\n}\n\nfunction parseSearchParams(searchParams?: Params): ParsedQuery {\n const parsed: ParsedQuery = {}\n\n for (const [key, value] of Object.entries(searchParams ?? {})) {\n if (Array.isArray(value)) {\n for (const entry of value) {\n if (typeof entry === 'string') {\n setNestedValue(parsed, key, entry)\n }\n }\n } else if (typeof value === 'string') {\n setNestedValue(parsed, key, value)\n }\n }\n\n for (const key of ['columns', 'queryByGroup']) {\n if (typeof parsed[key] === 'string') {\n try {\n parsed[key] = JSON.parse(parsed[key] as string)\n } catch {\n // Leave invalid persisted values untouched and let Payload ignore them.\n }\n }\n }\n\n const sanitized: ParsedQuery = { ...parsed }\n\n for (const [key, value] of Object.entries(sanitized)) {\n if (\n key === 'columns' &&\n ((typeof value === 'string' && value === '[]') ||\n (Array.isArray(value) && value.length === 0))\n ) {\n delete sanitized[key]\n continue\n }\n\n if (\n key === 'where' &&\n typeof value === 'object' &&\n value !== null &&\n !Object.keys(value).length\n ) {\n delete sanitized[key]\n continue\n }\n\n if ((key === 'limit' || key === 'page') && typeof value === 'string') {\n const parsedValue = Number.parseInt(value, 10)\n sanitized[key] = Number.isNaN(parsedValue) ? undefined : parsedValue\n }\n\n if (key === 'page' && value === 0) {\n delete sanitized[key]\n continue\n }\n\n if (value === '') {\n delete sanitized[key]\n }\n }\n\n return sanitized\n}\n\nfunction getQueryValue<T>(incomingValue: T | undefined, fallbackValue: T): T {\n return incomingValue === undefined ? fallbackValue : incomingValue\n}\n\nfunction normalizeLimit(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizePage(value: unknown, fallback: number): number {\n return typeof value === 'number' && value > 0 ? value : fallback\n}\n\nfunction normalizeSearch(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction normalizeSort(value: unknown): string | undefined {\n if (Array.isArray(value)) {\n const sortValues = value.filter(\n (entry): entry is string => typeof entry === 'string' && entry.length > 0,\n )\n return sortValues.length > 0 ? sortValues.join(',') : undefined\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction getOrderableFieldName(collectionConfig: ServerListViewProps['collectionConfig']) {\n return collectionConfig.orderable === true\n ? '_order'\n : typeof collectionConfig.orderable === 'string'\n ? collectionConfig.orderable\n : undefined\n}\n\nfunction getDefaultSort(collectionConfig: ServerListViewProps['collectionConfig']) {\n return typeof collectionConfig.defaultSort === 'string' ? collectionConfig.defaultSort : undefined\n}\n\nfunction getEffectiveTreeSort(args: {\n defaultSort?: string\n orderableFieldName?: string\n sort?: string\n}): string | undefined {\n const { defaultSort, orderableFieldName, sort } = args\n\n if (sort) {\n return sort\n }\n\n if (\n orderableFieldName &&\n (defaultSort === orderableFieldName || defaultSort === `-${orderableFieldName}`)\n ) {\n return defaultSort\n }\n\n return undefined\n}\n\nfunction normalizeWhere(value: unknown): any {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n return undefined\n}\n\nfunction getCurrentQuery(props: ServerListViewProps, fallbackLimit: number): ListQuery {\n const parsedSearchQuery = parseSearchParams(props.searchParams)\n const preferenceQuery = (props.listPreferences ?? {}) as Partial<ListQuery>\n const mergedQuery = {\n ...preferenceQuery,\n ...parsedSearchQuery,\n } as ParsedQuery\n\n return {\n ...mergedQuery,\n limit: normalizeLimit(\n getQueryValue(mergedQuery.limit as number | undefined, fallbackLimit),\n fallbackLimit,\n ),\n page: normalizePage(\n getQueryValue(mergedQuery.page as number | undefined, props.data.page),\n props.data.page,\n ),\n search: normalizeSearch(mergedQuery.search),\n sort: normalizeSort(mergedQuery.sort) ?? normalizeSort(preferenceQuery.sort) ?? undefined,\n where: normalizeWhere(mergedQuery.where),\n }\n}\n\nfunction getBaseFilterArgs(\n props: ServerListViewProps,\n req: any,\n query: ListQuery,\n locale?: string,\n) {\n return {\n limit: 0,\n locale,\n page: 1,\n req,\n sort:\n normalizeSort(query.sort) ??\n (typeof props.collectionConfig.defaultSort === 'string'\n ? props.collectionConfig.defaultSort\n : 'id'),\n }\n}\n\nasync function getDocsWithDisplayStatus(args: {\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n breadcrumbsFieldSlug: string\n collectionConfig: ServerListViewProps['collectionConfig']\n collectionSlug: string\n docs: PageTreeSourceDoc[]\n locale?: string\n payload: any\n req: any\n user: unknown\n}): Promise<PageTreeSourceDoc[]> {\n const {\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n collectionSlug,\n docs,\n locale,\n payload,\n req,\n user,\n } = args\n\n const docIDs = docs\n .map((doc) => doc.id)\n .filter((id): id is number | string => typeof id === 'number' || typeof id === 'string')\n\n if (docIDs.length === 0) {\n return docs\n }\n\n const currentResult = collectionConfig.versions?.drafts\n ? await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: false,\n fallbackLocale: false,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n select: {\n id: true,\n _status: true,\n ...(badgesLinks?.liveURL ? { [breadcrumbsFieldSlug]: true } : {}),\n },\n user,\n where: {\n id: {\n in: docIDs,\n },\n },\n } as never)\n : { docs }\n\n const currentByID = new Map<string, PageTreeSourceDoc>(\n currentResult.docs.map((doc: PageTreeSourceDoc) => [String(doc.id), doc]),\n )\n const displayDocs = withPageTreeDisplayStatuses({\n currentDocs: currentResult.docs as Pick<PageTreeSourceDoc, '_status' | 'id'>[],\n draftDocs: docs,\n })\n const token = badgesLinks && collectionConfig.admin.preview ? extractJWT(req) : null\n\n return Promise.all(\n displayDocs.map(async (doc) => {\n const cleanDoc = { ...doc }\n delete cleanDoc.__pageTreeStatusLinks\n const links = await resolvePageTreeBadgeLinks({\n badgesLinks,\n breadcrumbsFieldSlug,\n collectionConfig,\n draftDoc: cleanDoc,\n publishedDoc: currentByID.get(String(doc.id)),\n req,\n token,\n })\n return { ...cleanDoc, __pageTreeStatusLinks: links }\n }),\n )\n}\n\nasync function getListClientConfig({\n collectionSlug,\n i18n,\n payload,\n req,\n user,\n}: {\n collectionSlug: string\n i18n: unknown\n payload: any\n req: any\n user: unknown\n}): Promise<{\n clientCollectionConfig: any\n clientConfig: any\n}> {\n const clientConfig = getClientConfig({\n config: payload.config,\n i18n: i18n as never,\n importMap: payload.importMap,\n user: (user ?? true) as never,\n } as never)\n\n await applyLocaleFiltering({\n clientConfig,\n config: payload.config,\n req,\n } as never)\n\n const clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n if (!clientCollectionConfig) {\n throw new Error(`Could not resolve client collection config for \"${collectionSlug}\"`)\n }\n\n return {\n clientCollectionConfig,\n clientConfig,\n }\n}\n\nexport async function NestedDocsPageTreeListView(props: ServerListViewProps) {\n const pageTreeConfig = getCollectionPageTreeConfig(props.collectionConfig)\n\n if (!pageTreeConfig) {\n throw new Error(`Could not resolve page tree config for \"${props.collectionSlug}\"`)\n }\n\n if (typeof props.collectionConfig.admin.useAsTitle !== 'string') {\n throw new Error(`Collection \"${props.collectionSlug}\" must define admin.useAsTitle`)\n }\n\n const query = getCurrentQuery(props, pageTreeConfig.defaultLimit)\n const orderableFieldName = getOrderableFieldName(props.collectionConfig)\n const defaultSort = getDefaultSort(props.collectionConfig)\n const effectiveSort = getEffectiveTreeSort({\n defaultSort,\n orderableFieldName,\n sort: normalizeSort(query.sort),\n })\n const effectiveQuery = {\n ...query,\n sort: effectiveSort,\n }\n const locale = props.locale?.code\n const requestHeaders = await headers()\n const host =\n requestHeaders.get('x-forwarded-host')?.split(',')[0]?.trim() ||\n requestHeaders.get('host') ||\n 'localhost'\n const protocol =\n requestHeaders.get('x-forwarded-proto')?.split(',')[0]?.trim() === 'https' ? 'https' : 'http'\n const requestURL = new URL(props.payload.config.serverURL || `${protocol}://${host}`)\n requestURL.pathname = `${props.payload.config.routes?.admin || '/admin'}/collections/${props.collectionSlug}`\n const req = await createLocalReq(\n {\n fallbackLocale: false,\n locale,\n req: {\n headers: requestHeaders,\n i18n: props.i18n,\n locale,\n payload: props.payload,\n query: effectiveQuery,\n url: requestURL.href,\n user: props.user,\n },\n user: props.user,\n },\n props.payload,\n )\n\n const baseFilter =\n props.collectionConfig.admin?.baseFilter ?? props.collectionConfig.admin?.baseListFilter\n const baseFilterConstraint = baseFilter\n ? await baseFilter(getBaseFilterArgs(props, req, query, locale))\n : undefined\n const mergedWhere = combineWhereConstraints([\n mergeListSearchAndWhere({\n collectionConfig: props.collectionConfig,\n search: normalizeSearch(query.search),\n where: normalizeWhere(query.where),\n } as never),\n baseFilterConstraint ?? undefined,\n ])\n const where = Object.keys(mergedWhere).length > 0 ? mergedWhere : undefined\n\n const fullResult = await props.payload.find({\n collection: props.collectionSlug,\n depth: 0,\n draft: props.collectionConfig.versions?.drafts ? true : undefined,\n fallbackLocale: false,\n includeLockStatus: true,\n locale,\n overrideAccess: false,\n pagination: false,\n req,\n sort: normalizeSort(query.sort) ?? defaultSort,\n user: props.user,\n where,\n } as never)\n const treeSourceDocs = await getDocsWithDisplayStatus({\n badgesLinks: pageTreeConfig.badgesLinks,\n breadcrumbsFieldSlug: pageTreeConfig.breadcrumbsFieldSlug,\n collectionConfig: props.collectionConfig,\n collectionSlug: props.collectionSlug,\n docs: fullResult.docs as unknown as PageTreeSourceDoc[],\n locale,\n payload: props.payload,\n req,\n user: props.user,\n })\n\n const orderedDocs = buildPageTreeDocs(treeSourceDocs, {\n parentFieldSlug: pageTreeConfig.parentFieldSlug,\n sort: effectiveSort,\n })\n const orderedData: PaginatedDocs = {\n docs: orderedDocs,\n hasNextPage: false,\n hasPrevPage: false,\n limit: normalizeLimit(query.limit, pageTreeConfig.defaultLimit),\n nextPage: null,\n page: 1,\n pagingCounter: orderedDocs.length > 0 ? 1 : 0,\n prevPage: null,\n totalDocs: orderedDocs.length,\n totalPages: 1,\n }\n const { clientCollectionConfig, clientConfig } = await getListClientConfig({\n collectionSlug: props.collectionSlug,\n i18n: props.i18n,\n payload: props.payload,\n req,\n user: props.user,\n })\n const columnPreferences: ColumnPreference[] = (\n props.columnState as Array<{\n accessor: string\n active: boolean\n }>\n ).map(({ accessor, active }) => ({\n accessor,\n active: accessor === props.collectionConfig.admin.useAsTitle ? true : active,\n }))\n const columns = getColumns({\n clientConfig,\n collectionConfig: clientCollectionConfig,\n collectionSlug: props.collectionSlug,\n columns: columnPreferences,\n i18n: props.i18n,\n permissions: props.permissions,\n } as never)\n const fieldPermissions = props.permissions?.collections?.[props.collectionSlug]?.fields ?? true\n const renderedTable = await renderTable({\n clientCollectionConfig,\n clientConfig,\n collectionConfig: props.collectionConfig,\n columns,\n data: orderedData,\n enableRowSelections: Boolean(props.enableRowSelections),\n fieldPermissions,\n i18n: props.i18n,\n orderableFieldName: orderableFieldName ?? '',\n payload: props.payload,\n query: effectiveQuery,\n req,\n tableAppearance: 'default',\n useAsTitle: props.collectionConfig.admin.useAsTitle,\n viewType: props.viewType,\n } as never)\n const clientProps: Omit<ListViewClientProps, 'Table' | 'columnState'> = {\n AfterList: props.AfterList,\n AfterListTable: props.AfterListTable,\n BeforeList: props.BeforeList,\n BeforeListTable: props.BeforeListTable,\n Description: props.Description,\n beforeActions: props.beforeActions,\n collectionSlug: props.collectionSlug,\n disableBulkDelete: props.disableBulkDelete,\n disableBulkEdit: props.disableBulkEdit,\n disableQueryPresets: props.disableQueryPresets,\n enableRowSelections: props.enableRowSelections,\n hasCreatePermission: props.hasCreatePermission,\n hasDeletePermission: props.hasDeletePermission,\n hasTrashPermission: props.hasTrashPermission,\n listMenuItems: props.listMenuItems,\n listPreferences: props.listPreferences,\n newDocumentURL: props.newDocumentURL,\n preferenceKey: props.preferenceKey,\n queryPreset: props.queryPreset,\n queryPresetPermissions: props.queryPresetPermissions,\n renderedFilters: props.renderedFilters,\n resolvedFilterOptions: props.resolvedFilterOptions,\n viewType: props.viewType,\n }\n const canMoveDocs = Boolean(props.permissions?.collections?.[props.collectionSlug]?.update)\n\n return (\n <PageTreeListViewClient\n {...clientProps}\n allDocs={orderedDocs}\n badgeConfig={pageTreeConfig.badges}\n badgesLinks={pageTreeConfig.badgesLinks}\n canMoveDocs={canMoveDocs}\n columnState={renderedTable.columnState}\n homeIndicatorEnabled={pageTreeConfig.homeIndicator.enabled}\n orderableFieldName={orderableFieldName}\n parentFieldSlug={pageTreeConfig.parentFieldSlug}\n query={effectiveQuery}\n sourceDocs={treeSourceDocs}\n useAsTitle={props.collectionConfig.admin.useAsTitle}\n />\n )\n}\n\nexport default NestedDocsPageTreeListView\n"],"names":["getColumns","renderTable","getClientConfig","headers","createLocalReq","extractJWT","applyLocaleFiltering","combineWhereConstraints","mergeListSearchAndWhere","React","resolvePageTreeBadgeLinks","buildPageTreeDocs","getCollectionPageTreeConfig","withPageTreeDisplayStatuses","PageTreeListViewClient","isNumericSegment","segment","test","getKeySegments","key","matches","match","filter","Boolean","setNestedValue","target","value","segments","length","current","index","isLastSegment","nextSegment","nextContainer","Array","isArray","arrayIndex","Number","existingValue","undefined","push","parseSearchParams","searchParams","parsed","Object","entries","entry","JSON","parse","sanitized","keys","parsedValue","parseInt","isNaN","getQueryValue","incomingValue","fallbackValue","normalizeLimit","fallback","normalizePage","normalizeSearch","normalizeSort","sortValues","join","getOrderableFieldName","collectionConfig","orderable","getDefaultSort","defaultSort","getEffectiveTreeSort","args","orderableFieldName","sort","normalizeWhere","getCurrentQuery","props","fallbackLimit","parsedSearchQuery","preferenceQuery","listPreferences","mergedQuery","limit","page","data","search","where","getBaseFilterArgs","req","query","locale","getDocsWithDisplayStatus","badgesLinks","breadcrumbsFieldSlug","collectionSlug","docs","payload","user","docIDs","map","doc","id","currentResult","versions","drafts","find","collection","depth","draft","fallbackLocale","overrideAccess","pagination","select","_status","liveURL","in","currentByID","Map","String","displayDocs","currentDocs","draftDocs","token","admin","preview","Promise","all","cleanDoc","__pageTreeStatusLinks","links","draftDoc","publishedDoc","get","getListClientConfig","i18n","clientConfig","config","importMap","clientCollectionConfig","collections","slug","Error","NestedDocsPageTreeListView","pageTreeConfig","useAsTitle","defaultLimit","effectiveSort","effectiveQuery","code","requestHeaders","host","split","trim","protocol","requestURL","URL","serverURL","pathname","routes","url","href","baseFilter","baseListFilter","baseFilterConstraint","mergedWhere","fullResult","includeLockStatus","treeSourceDocs","orderedDocs","parentFieldSlug","orderedData","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","columnPreferences","columnState","accessor","active","columns","permissions","fieldPermissions","fields","renderedTable","enableRowSelections","tableAppearance","viewType","clientProps","AfterList","AfterListTable","BeforeList","BeforeListTable","Description","beforeActions","disableBulkDelete","disableBulkEdit","disableQueryPresets","hasCreatePermission","hasDeletePermission","hasTrashPermission","listMenuItems","newDocumentURL","preferenceKey","queryPreset","queryPresetPermissions","renderedFilters","resolvedFilterOptions","canMoveDocs","update","allDocs","badgeConfig","badges","homeIndicatorEnabled","homeIndicator","enabled","sourceDocs"],"mappings":"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"}
|
|
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":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeLocaleStatus } from '../types.js';
|
|
2
|
+
export declare function PageTreeLocaleStatusBadges({ badgeConfig, collectionSlug, docID, statuses, }: {
|
|
3
|
+
badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig;
|
|
4
|
+
collectionSlug?: string;
|
|
5
|
+
docID?: number | string;
|
|
6
|
+
statuses: PageTreeLocaleStatus[];
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useConfig, useLocale, useTranslation } from '@payloadcms/ui';
|
|
4
|
+
import { formatAdminURL } from 'payload/shared';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { getPageTreeBadgeColor, getPageTreeBadgeLabel } from '../utilities/status.js';
|
|
7
|
+
export function PageTreeLocaleStatusBadges({ badgeConfig, collectionSlug, docID, statuses }) {
|
|
8
|
+
const { config } = useConfig();
|
|
9
|
+
const locale = useLocale();
|
|
10
|
+
const { t } = useTranslation();
|
|
11
|
+
return /*#__PURE__*/ _jsx("span", {
|
|
12
|
+
className: "pages-hierarchy-locale-statuses",
|
|
13
|
+
children: statuses.map(({ locale: code, status, visible })=>{
|
|
14
|
+
const active = code === locale?.code;
|
|
15
|
+
const label = getPageTreeBadgeLabel({
|
|
16
|
+
badgeLabels: badgeConfig.labels,
|
|
17
|
+
status,
|
|
18
|
+
t
|
|
19
|
+
});
|
|
20
|
+
const color = getPageTreeBadgeColor({
|
|
21
|
+
badgeColors: badgeConfig.colors,
|
|
22
|
+
status
|
|
23
|
+
});
|
|
24
|
+
const href = visible !== false && collectionSlug && docID !== undefined ? formatAdminURL({
|
|
25
|
+
adminRoute: config.routes.admin,
|
|
26
|
+
includeBasePath: true,
|
|
27
|
+
path: `/collections/${encodeURIComponent(collectionSlug)}/${encodeURIComponent(docID)}?${new URLSearchParams({
|
|
28
|
+
locale: code
|
|
29
|
+
})}`
|
|
30
|
+
}) : undefined;
|
|
31
|
+
const Badge = href ? 'a' : 'span';
|
|
32
|
+
return /*#__PURE__*/ _jsx("span", {
|
|
33
|
+
className: `pages-hierarchy-locale-status-slot${active ? ' pages-hierarchy-locale-status-slot--active' : ''}`,
|
|
34
|
+
children: /*#__PURE__*/ _jsxs(Badge, {
|
|
35
|
+
"aria-hidden": visible === false ? true : undefined,
|
|
36
|
+
"aria-label": `${code.toUpperCase()}: ${label}`,
|
|
37
|
+
className: `pages-hierarchy-status-badge pages-hierarchy-status-badge--${status} pages-hierarchy-locale-status-badge`,
|
|
38
|
+
"data-active": active ? 'true' : 'false',
|
|
39
|
+
"data-custom-color": color ? 'true' : undefined,
|
|
40
|
+
"data-locale": code,
|
|
41
|
+
"data-status": status,
|
|
42
|
+
href: href,
|
|
43
|
+
onClick: href ? (event)=>event.stopPropagation() : undefined,
|
|
44
|
+
onPointerDown: href ? (event)=>event.stopPropagation() : undefined,
|
|
45
|
+
role: href ? undefined : 'img',
|
|
46
|
+
style: {
|
|
47
|
+
...color ? {
|
|
48
|
+
'--page-tree-badge-base': color
|
|
49
|
+
} : {},
|
|
50
|
+
...visible === false ? {
|
|
51
|
+
visibility: 'hidden'
|
|
52
|
+
} : {}
|
|
53
|
+
},
|
|
54
|
+
children: [
|
|
55
|
+
/*#__PURE__*/ _jsx("span", {
|
|
56
|
+
className: "pages-hierarchy-locale-status-badge__code",
|
|
57
|
+
children: code.toUpperCase()
|
|
58
|
+
}),
|
|
59
|
+
active && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
60
|
+
children: [
|
|
61
|
+
/*#__PURE__*/ _jsx("span", {
|
|
62
|
+
"aria-hidden": "true",
|
|
63
|
+
className: "pages-hierarchy-locale-status-badge__separator",
|
|
64
|
+
children: "·"
|
|
65
|
+
}),
|
|
66
|
+
/*#__PURE__*/ _jsx("span", {
|
|
67
|
+
className: "pages-hierarchy-locale-status-badge__label",
|
|
68
|
+
children: label
|
|
69
|
+
})
|
|
70
|
+
]
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
})
|
|
74
|
+
}, code);
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=PageTreeLocaleStatusBadges.js.map
|
|
@@ -0,0 +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 = 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-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","code","status","visible","active","label","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-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,EAAEJ,QAAQK,IAAI,EAAEC,MAAM,EAAEC,OAAO,EAAE;YAC9C,MAAMC,SAASH,SAASL,QAAQK;YAChC,MAAMI,QAAQhB,sBAAsB;gBAAEiB,aAAaf,YAAYgB,MAAM;gBAAEL;gBAAQL;YAAE;YACjF,MAAMW,QAAQpB,sBAAsB;gBAAEqB,aAAalB,YAAYmB,MAAM;gBAAER;YAAO;YAE9E,MAAMS,OACJR,YAAY,SAASX,kBAAkBC,UAAUmB,YAC7C1B,eAAe;gBACb2B,YAAYlB,OAAOmB,MAAM,CAACC,KAAK;gBAC/BC,iBAAiB;gBACjBC,MAAM,CAAC,aAAa,EAAEC,mBAAmB1B,gBAAgB,CAAC,EAAE0B,mBAAmBzB,OAAO,CAAC,EAAE,IAAI0B,gBAAgB;oBAAEvB,QAAQK;gBAAK,IAAI;YAClI,KACAW;YACN,MAAMQ,QAAQT,OAAO,MAAM;YAE3B,qBACE,KAACb;gBACCC,WAAW,CAAC,kCAAkC,EAAEK,SAAS,gDAAgD,IAAI;0BAG7G,cAAA,MAACgB;oBACCC,eAAalB,YAAY,QAAQ,OAAOS;oBACxCU,cAAY,GAAGrB,KAAKsB,WAAW,GAAG,EAAE,EAAElB,OAAO;oBAC7CN,WAAW,CAAC,2DAA2D,EAAEG,OAAO,oCAAoC,CAAC;oBACrHsB,eAAapB,SAAS,SAAS;oBAC/BqB,qBAAmBjB,QAAQ,SAASI;oBACpCc,eAAazB;oBACb0B,eAAazB;oBACbS,MAAMA;oBACNiB,SAASjB,OAAO,CAACkB,QAA4BA,MAAMC,eAAe,KAAKlB;oBACvEmB,eACEpB,OAAO,CAACkB,QAA8BA,MAAMC,eAAe,KAAKlB;oBAElEoB,MAAMrB,OAAOC,YAAY;oBACzBqB,OAAO;wBACL,GAAIzB,QAAS;4BAAE,0BAA0BA;wBAAM,IAA4B,CAAC,CAAC;wBAC7E,GAAIL,YAAY,QAAQ;4BAAE+B,YAAY;wBAAS,IAAI,CAAC,CAAC;oBACvD;;sCAEA,KAACpC;4BAAKC,WAAU;sCACbE,KAAKsB,WAAW;;wBAElBnB,wBACC;;8CACE,KAACN;oCACCuB,eAAY;oCACZtB,WAAU;8CACX;;8CAGD,KAACD;oCAAKC,WAAU;8CAA8CM;;;;;;eAhC/DJ;QAsCX;;AAGN"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { NestedDocsPageTreePluginBadgesLinks, NestedDocsPageTreePluginResolvedBadgeConfig, PageTreeSourceDoc } from '../types.js';
|
|
2
|
-
export declare function PageTreeStatusBadge({ badgeConfig, badgesLinks, doc, }: {
|
|
2
|
+
export declare function PageTreeStatusBadge({ badgeConfig, badgesLinks, collectionSlug, doc, }: {
|
|
3
3
|
badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig;
|
|
4
4
|
badgesLinks?: NestedDocsPageTreePluginBadgesLinks;
|
|
5
|
+
collectionSlug?: string;
|
|
5
6
|
doc: PageTreeSourceDoc;
|
|
6
7
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { ExternalLinkIcon, useTranslation } from '@payloadcms/ui';
|
|
3
|
+
import { ExternalLinkIcon, LinkIcon, useTranslation } from '@payloadcms/ui';
|
|
4
|
+
import { EyeIcon } from '@payloadcms/ui/icons/Eye';
|
|
4
5
|
import React from 'react';
|
|
5
6
|
import { getPageTreeBadgeColor, getPageTreeBadgeLabel, getPageTreeDisplayStatus } from '../utilities/status.js';
|
|
6
|
-
|
|
7
|
+
import { PageTreeLocaleStatusBadges } from './PageTreeLocaleStatusBadges.js';
|
|
8
|
+
export function PageTreeStatusBadge({ badgeConfig, badgesLinks, collectionSlug, doc }) {
|
|
7
9
|
const { t } = useTranslation();
|
|
10
|
+
if (badgeConfig.locales && doc.__pageTreeLocaleStatuses?.length) {
|
|
11
|
+
return /*#__PURE__*/ _jsx(PageTreeLocaleStatusBadges, {
|
|
12
|
+
badgeConfig: badgeConfig,
|
|
13
|
+
collectionSlug: collectionSlug,
|
|
14
|
+
docID: doc.id,
|
|
15
|
+
statuses: doc.__pageTreeLocaleStatuses
|
|
16
|
+
});
|
|
17
|
+
}
|
|
8
18
|
const status = getPageTreeDisplayStatus(doc);
|
|
9
19
|
const color = getPageTreeBadgeColor({
|
|
10
20
|
badgeColors: badgeConfig.colors,
|
|
@@ -20,6 +30,7 @@ export function PageTreeStatusBadge({ badgeConfig, badgesLinks, doc }) {
|
|
|
20
30
|
const publicURL = badgesLinks ? doc.__pageTreeStatusLinks?.publicURL : undefined;
|
|
21
31
|
const previewURL = badgesLinks ? doc.__pageTreeStatusLinks?.previewURL : undefined;
|
|
22
32
|
const mode = badgesLinks?.draftHasPublishedVersion ?? 'both';
|
|
33
|
+
const showIcons = badgesLinks?.showIcons ?? true;
|
|
23
34
|
const split = status === 'changed' && mode === 'both' && Boolean(previewURL);
|
|
24
35
|
const opensPreview = status === 'draft' || status === 'changed' && mode === 'preview';
|
|
25
36
|
const href = opensPreview ? previewURL : status === 'published' || status === 'changed' ? publicURL : undefined;
|
|
@@ -39,10 +50,19 @@ export function PageTreeStatusBadge({ badgeConfig, badgesLinks, doc }) {
|
|
|
39
50
|
title: `${opensPreview ? previewLabel : 'Live'} (${openInNewTabLabel})`
|
|
40
51
|
};
|
|
41
52
|
if (!split) {
|
|
42
|
-
return href ? /*#__PURE__*/
|
|
53
|
+
return href ? /*#__PURE__*/ _jsxs("a", {
|
|
43
54
|
...badgeProps,
|
|
44
55
|
...linkProps,
|
|
45
|
-
children:
|
|
56
|
+
children: [
|
|
57
|
+
label,
|
|
58
|
+
showIcons && /*#__PURE__*/ _jsx("span", {
|
|
59
|
+
"aria-hidden": "true",
|
|
60
|
+
className: "pages-hierarchy-status-badge__icon",
|
|
61
|
+
children: opensPreview ? /*#__PURE__*/ _jsx(EyeIcon, {
|
|
62
|
+
active: false
|
|
63
|
+
}) : /*#__PURE__*/ _jsx(LinkIcon, {})
|
|
64
|
+
})
|
|
65
|
+
]
|
|
46
66
|
}) : /*#__PURE__*/ _jsx("span", {
|
|
47
67
|
...badgeProps,
|
|
48
68
|
children: label
|
|
@@ -51,10 +71,17 @@ export function PageTreeStatusBadge({ badgeConfig, badgesLinks, doc }) {
|
|
|
51
71
|
return /*#__PURE__*/ _jsxs("span", {
|
|
52
72
|
...badgeProps,
|
|
53
73
|
children: [
|
|
54
|
-
href ? /*#__PURE__*/
|
|
74
|
+
href ? /*#__PURE__*/ _jsxs("a", {
|
|
55
75
|
...linkProps,
|
|
56
76
|
className: "pages-hierarchy-status-badge__body",
|
|
57
|
-
children:
|
|
77
|
+
children: [
|
|
78
|
+
label,
|
|
79
|
+
showIcons && /*#__PURE__*/ _jsx("span", {
|
|
80
|
+
"aria-hidden": "true",
|
|
81
|
+
className: "pages-hierarchy-status-badge__icon",
|
|
82
|
+
children: /*#__PURE__*/ _jsx(LinkIcon, {})
|
|
83
|
+
})
|
|
84
|
+
]
|
|
58
85
|
}) : /*#__PURE__*/ _jsx("span", {
|
|
59
86
|
className: "pages-hierarchy-status-badge__body",
|
|
60
87
|
children: label
|
|
@@ -67,7 +94,10 @@ export function PageTreeStatusBadge({ badgeConfig, badgesLinks, doc }) {
|
|
|
67
94
|
title: `${previewLabel} (${openInNewTabLabel})`,
|
|
68
95
|
children: /*#__PURE__*/ _jsx("span", {
|
|
69
96
|
"aria-hidden": "true",
|
|
70
|
-
|
|
97
|
+
className: "pages-hierarchy-status-badge__icon",
|
|
98
|
+
children: showIcons ? /*#__PURE__*/ _jsx(EyeIcon, {
|
|
99
|
+
active: false
|
|
100
|
+
}) : /*#__PURE__*/ _jsx(ExternalLinkIcon, {})
|
|
71
101
|
})
|
|
72
102
|
})
|
|
73
103
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/PageTreeStatusBadge.tsx"],"sourcesContent":["'use client'\n\nimport { ExternalLinkIcon, useTranslation } from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginResolvedBadgeConfig,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport {\n getPageTreeBadgeColor,\n getPageTreeBadgeLabel,\n getPageTreeDisplayStatus,\n} from '../utilities/status.js'\n\nexport function PageTreeStatusBadge({\n badgeConfig,\n badgesLinks,\n doc,\n}: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n doc: PageTreeSourceDoc\n}) {\n const { t } = useTranslation()\n const status = getPageTreeDisplayStatus(doc)\n const color = getPageTreeBadgeColor({ badgeColors: badgeConfig.colors, status })\n const label = getPageTreeBadgeLabel({ badgeLabels: badgeConfig.labels, status, t })\n const previewLabel = t('version:preview')\n const openInNewTabLabel = t('fields:openInNewTab')\n const publicURL = badgesLinks ? doc.__pageTreeStatusLinks?.publicURL : undefined\n const previewURL = badgesLinks ? doc.__pageTreeStatusLinks?.previewURL : undefined\n const mode = badgesLinks?.draftHasPublishedVersion ?? 'both'\n const split = status === 'changed' && mode === 'both' && Boolean(previewURL)\n const opensPreview = status === 'draft' || (status === 'changed' && mode === 'preview')\n const href = opensPreview\n ? previewURL\n : status === 'published' || status === 'changed'\n ? publicURL\n : undefined\n\n const badgeProps = {\n className: `pages-hierarchy-status-badge pages-hierarchy-status-badge--${status}${split ? ' pages-hierarchy-status-badge--split' : ''}`,\n 'data-custom-color': color ? 'true' : undefined,\n style: color ? ({ '--page-tree-badge-base': color } as React.CSSProperties) : undefined,\n }\n const linkProps = {\n href,\n onClick: (event: React.MouseEvent) => event.stopPropagation(),\n onPointerDown: (event: React.PointerEvent) => event.stopPropagation(),\n rel: 'noopener noreferrer',\n target: '_blank',\n title: `${opensPreview ? previewLabel : 'Live'} (${openInNewTabLabel})`,\n }\n\n if (!split) {\n return href ? (\n <a {...badgeProps} {...linkProps}>\n {label}\n </a>\n ) : (\n <span {...badgeProps}>{label}</span>\n )\n }\n\n return (\n <span {...badgeProps}>\n {href ? (\n <a {...linkProps} className=\"pages-hierarchy-status-badge__body\">\n {label}\n </a>\n ) : (\n <span className=\"pages-hierarchy-status-badge__body\">{label}</span>\n )}\n <a\n {...linkProps}\n aria-label={previewLabel}\n className=\"pages-hierarchy-status-badge__preview\"\n href={previewURL}\n title={`${previewLabel} (${openInNewTabLabel})`}\n >\n <span aria-hidden=\"true\">\n <ExternalLinkIcon
|
|
1
|
+
{"version":3,"sources":["../../src/components/PageTreeStatusBadge.tsx"],"sourcesContent":["'use client'\n\nimport { ExternalLinkIcon, LinkIcon, useTranslation } from '@payloadcms/ui'\nimport { EyeIcon } from '@payloadcms/ui/icons/Eye'\nimport React from 'react'\n\nimport type {\n NestedDocsPageTreePluginBadgesLinks,\n NestedDocsPageTreePluginResolvedBadgeConfig,\n PageTreeSourceDoc,\n} from '../types.js'\n\nimport {\n getPageTreeBadgeColor,\n getPageTreeBadgeLabel,\n getPageTreeDisplayStatus,\n} from '../utilities/status.js'\nimport { PageTreeLocaleStatusBadges } from './PageTreeLocaleStatusBadges.js'\n\nexport function PageTreeStatusBadge({\n badgeConfig,\n badgesLinks,\n collectionSlug,\n doc,\n}: {\n badgeConfig: NestedDocsPageTreePluginResolvedBadgeConfig\n badgesLinks?: NestedDocsPageTreePluginBadgesLinks\n collectionSlug?: string\n doc: PageTreeSourceDoc\n}) {\n const { t } = useTranslation()\n if (badgeConfig.locales && doc.__pageTreeLocaleStatuses?.length) {\n return (\n <PageTreeLocaleStatusBadges\n badgeConfig={badgeConfig}\n collectionSlug={collectionSlug}\n docID={doc.id}\n statuses={doc.__pageTreeLocaleStatuses}\n />\n )\n }\n\n const status = getPageTreeDisplayStatus(doc)\n const color = getPageTreeBadgeColor({ badgeColors: badgeConfig.colors, status })\n const label = getPageTreeBadgeLabel({ badgeLabels: badgeConfig.labels, status, t })\n const previewLabel = t('version:preview')\n const openInNewTabLabel = t('fields:openInNewTab')\n const publicURL = badgesLinks ? doc.__pageTreeStatusLinks?.publicURL : undefined\n const previewURL = badgesLinks ? doc.__pageTreeStatusLinks?.previewURL : undefined\n const mode = badgesLinks?.draftHasPublishedVersion ?? 'both'\n const showIcons = badgesLinks?.showIcons ?? true\n const split = status === 'changed' && mode === 'both' && Boolean(previewURL)\n const opensPreview = status === 'draft' || (status === 'changed' && mode === 'preview')\n const href = opensPreview\n ? previewURL\n : status === 'published' || status === 'changed'\n ? publicURL\n : undefined\n\n const badgeProps = {\n className: `pages-hierarchy-status-badge pages-hierarchy-status-badge--${status}${split ? ' pages-hierarchy-status-badge--split' : ''}`,\n 'data-custom-color': color ? 'true' : undefined,\n style: color ? ({ '--page-tree-badge-base': color } as React.CSSProperties) : undefined,\n }\n const linkProps = {\n href,\n onClick: (event: React.MouseEvent) => event.stopPropagation(),\n onPointerDown: (event: React.PointerEvent) => event.stopPropagation(),\n rel: 'noopener noreferrer',\n target: '_blank',\n title: `${opensPreview ? previewLabel : 'Live'} (${openInNewTabLabel})`,\n }\n\n if (!split) {\n return href ? (\n <a {...badgeProps} {...linkProps}>\n {label}\n {showIcons && (\n <span aria-hidden=\"true\" className=\"pages-hierarchy-status-badge__icon\">\n {opensPreview ? <EyeIcon active={false} /> : <LinkIcon />}\n </span>\n )}\n </a>\n ) : (\n <span {...badgeProps}>{label}</span>\n )\n }\n\n return (\n <span {...badgeProps}>\n {href ? (\n <a {...linkProps} className=\"pages-hierarchy-status-badge__body\">\n {label}\n {showIcons && (\n <span aria-hidden=\"true\" className=\"pages-hierarchy-status-badge__icon\">\n <LinkIcon />\n </span>\n )}\n </a>\n ) : (\n <span className=\"pages-hierarchy-status-badge__body\">{label}</span>\n )}\n <a\n {...linkProps}\n aria-label={previewLabel}\n className=\"pages-hierarchy-status-badge__preview\"\n href={previewURL}\n title={`${previewLabel} (${openInNewTabLabel})`}\n >\n <span aria-hidden=\"true\" className=\"pages-hierarchy-status-badge__icon\">\n {showIcons ? <EyeIcon active={false} /> : <ExternalLinkIcon />}\n </span>\n </a>\n </span>\n )\n}\n"],"names":["ExternalLinkIcon","LinkIcon","useTranslation","EyeIcon","React","getPageTreeBadgeColor","getPageTreeBadgeLabel","getPageTreeDisplayStatus","PageTreeLocaleStatusBadges","PageTreeStatusBadge","badgeConfig","badgesLinks","collectionSlug","doc","t","locales","__pageTreeLocaleStatuses","length","docID","id","statuses","status","color","badgeColors","colors","label","badgeLabels","labels","previewLabel","openInNewTabLabel","publicURL","__pageTreeStatusLinks","undefined","previewURL","mode","draftHasPublishedVersion","showIcons","split","Boolean","opensPreview","href","badgeProps","className","style","linkProps","onClick","event","stopPropagation","onPointerDown","rel","target","title","a","span","aria-hidden","active","aria-label"],"mappings":"AAAA;;AAEA,SAASA,gBAAgB,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,iBAAgB;AAC3E,SAASC,OAAO,QAAQ,2BAA0B;AAClD,OAAOC,WAAW,QAAO;AAQzB,SACEC,qBAAqB,EACrBC,qBAAqB,EACrBC,wBAAwB,QACnB,yBAAwB;AAC/B,SAASC,0BAA0B,QAAQ,kCAAiC;AAE5E,OAAO,SAASC,oBAAoB,EAClCC,WAAW,EACXC,WAAW,EACXC,cAAc,EACdC,GAAG,EAMJ;IACC,MAAM,EAAEC,CAAC,EAAE,GAAGZ;IACd,IAAIQ,YAAYK,OAAO,IAAIF,IAAIG,wBAAwB,EAAEC,QAAQ;QAC/D,qBACE,KAACT;YACCE,aAAaA;YACbE,gBAAgBA;YAChBM,OAAOL,IAAIM,EAAE;YACbC,UAAUP,IAAIG,wBAAwB;;IAG5C;IAEA,MAAMK,SAASd,yBAAyBM;IACxC,MAAMS,QAAQjB,sBAAsB;QAAEkB,aAAab,YAAYc,MAAM;QAAEH;IAAO;IAC9E,MAAMI,QAAQnB,sBAAsB;QAAEoB,aAAahB,YAAYiB,MAAM;QAAEN;QAAQP;IAAE;IACjF,MAAMc,eAAed,EAAE;IACvB,MAAMe,oBAAoBf,EAAE;IAC5B,MAAMgB,YAAYnB,cAAcE,IAAIkB,qBAAqB,EAAED,YAAYE;IACvE,MAAMC,aAAatB,cAAcE,IAAIkB,qBAAqB,EAAEE,aAAaD;IACzE,MAAME,OAAOvB,aAAawB,4BAA4B;IACtD,MAAMC,YAAYzB,aAAayB,aAAa;IAC5C,MAAMC,QAAQhB,WAAW,aAAaa,SAAS,UAAUI,QAAQL;IACjE,MAAMM,eAAelB,WAAW,WAAYA,WAAW,aAAaa,SAAS;IAC7E,MAAMM,OAAOD,eACTN,aACAZ,WAAW,eAAeA,WAAW,YACnCS,YACAE;IAEN,MAAMS,aAAa;QACjBC,WAAW,CAAC,2DAA2D,EAAErB,SAASgB,QAAQ,yCAAyC,IAAI;QACvI,qBAAqBf,QAAQ,SAASU;QACtCW,OAAOrB,QAAS;YAAE,0BAA0BA;QAAM,IAA4BU;IAChF;IACA,MAAMY,YAAY;QAChBJ;QACAK,SAAS,CAACC,QAA4BA,MAAMC,eAAe;QAC3DC,eAAe,CAACF,QAA8BA,MAAMC,eAAe;QACnEE,KAAK;QACLC,QAAQ;QACRC,OAAO,GAAGZ,eAAeX,eAAe,OAAO,EAAE,EAAEC,kBAAkB,CAAC,CAAC;IACzE;IAEA,IAAI,CAACQ,OAAO;QACV,OAAOG,qBACL,MAACY;YAAG,GAAGX,UAAU;YAAG,GAAGG,SAAS;;gBAC7BnB;gBACAW,2BACC,KAACiB;oBAAKC,eAAY;oBAAOZ,WAAU;8BAChCH,6BAAe,KAACpC;wBAAQoD,QAAQ;uCAAY,KAACtD;;;2BAKpD,KAACoD;YAAM,GAAGZ,UAAU;sBAAGhB;;IAE3B;IAEA,qBACE,MAAC4B;QAAM,GAAGZ,UAAU;;YACjBD,qBACC,MAACY;gBAAG,GAAGR,SAAS;gBAAEF,WAAU;;oBACzBjB;oBACAW,2BACC,KAACiB;wBAAKC,eAAY;wBAAOZ,WAAU;kCACjC,cAAA,KAACzC;;;+BAKP,KAACoD;gBAAKX,WAAU;0BAAsCjB;;0BAExD,KAAC2B;gBACE,GAAGR,SAAS;gBACbY,cAAY5B;gBACZc,WAAU;gBACVF,MAAMP;gBACNkB,OAAO,GAAGvB,aAAa,EAAE,EAAEC,kBAAkB,CAAC,CAAC;0BAE/C,cAAA,KAACwB;oBAAKC,eAAY;oBAAOZ,WAAU;8BAChCN,0BAAY,KAACjC;wBAAQoD,QAAQ;uCAAY,KAACvD;;;;;AAKrD"}
|
|
@@ -25,7 +25,8 @@ function ParentMoveHandleIcon() {
|
|
|
25
25
|
d: "M13.75 4.25L6.25 15.75",
|
|
26
26
|
stroke: "currentColor",
|
|
27
27
|
strokeLinecap: "round",
|
|
28
|
-
strokeWidth: "
|
|
28
|
+
strokeWidth: "1",
|
|
29
|
+
vectorEffect: "non-scaling-stroke"
|
|
29
30
|
})
|
|
30
31
|
});
|
|
31
32
|
}
|
|
@@ -42,7 +43,8 @@ function HomeIndicatorIcon() {
|
|
|
42
43
|
d: "M2.5 7L7 3L11.5 7V13.25H2.5V7Z",
|
|
43
44
|
stroke: "currentColor",
|
|
44
45
|
strokeLinejoin: "round",
|
|
45
|
-
strokeWidth: "1
|
|
46
|
+
strokeWidth: "1",
|
|
47
|
+
vectorEffect: "non-scaling-stroke"
|
|
46
48
|
})
|
|
47
49
|
});
|
|
48
50
|
}
|
|
@@ -116,35 +118,35 @@ export function PageTreeTitleCell({ children, doc, homeIndicatorEnabled }) {
|
|
|
116
118
|
ref: rowDnd?.orderHandleRef,
|
|
117
119
|
type: "button",
|
|
118
120
|
children: /*#__PURE__*/ _jsxs("svg", {
|
|
119
|
-
|
|
121
|
+
fill: "none",
|
|
120
122
|
height: "20",
|
|
121
123
|
viewBox: "0 0 20 20",
|
|
122
|
-
|
|
124
|
+
width: "20",
|
|
123
125
|
xmlns: "http://www.w3.org/2000/svg",
|
|
124
126
|
children: [
|
|
125
127
|
/*#__PURE__*/ _jsx("path", {
|
|
126
128
|
d: "M7.125 6C7.95343 6 8.625 5.32843 8.625 4.5C8.625 3.67157 7.95343 3 7.125 3C6.29657 3 5.625 3.67157 5.625 4.5C5.625 5.32843 6.29657 6 7.125 6Z",
|
|
127
|
-
fill: "
|
|
129
|
+
fill: "currentColor"
|
|
128
130
|
}),
|
|
129
131
|
/*#__PURE__*/ _jsx("path", {
|
|
130
132
|
d: "M7.125 12C7.95343 12 8.625 11.3284 8.625 10.5C8.625 9.67157 7.95343 9 7.125 9C6.29657 9 5.625 9.67157 5.625 10.5C5.625 11.3284 6.29657 12 7.125 12Z",
|
|
131
|
-
fill: "
|
|
133
|
+
fill: "currentColor"
|
|
132
134
|
}),
|
|
133
135
|
/*#__PURE__*/ _jsx("path", {
|
|
134
136
|
d: "M7.125 18C7.95343 18 8.625 17.3284 8.625 16.5C8.625 15.6716 7.95343 15 7.125 15C6.29657 15 5.625 15.6716 5.625 16.5C5.625 17.3284 6.29657 18 7.125 18Z",
|
|
135
|
-
fill: "
|
|
137
|
+
fill: "currentColor"
|
|
136
138
|
}),
|
|
137
139
|
/*#__PURE__*/ _jsx("path", {
|
|
138
140
|
d: "M12.875 6C13.7034 6 14.375 5.32843 14.375 4.5C14.375 3.67157 13.7034 3 12.875 3C12.0466 3 11.375 3.67157 11.375 4.5C11.375 5.32843 12.0466 6 12.875 6Z",
|
|
139
|
-
fill: "
|
|
141
|
+
fill: "currentColor"
|
|
140
142
|
}),
|
|
141
143
|
/*#__PURE__*/ _jsx("path", {
|
|
142
144
|
d: "M12.875 12C13.7034 12 14.375 11.3284 14.375 10.5C14.375 9.67157 13.7034 9 12.875 9C12.0466 9 11.375 9.67157 11.375 10.5C11.375 11.3284 12.0466 12 12.875 12Z",
|
|
143
|
-
fill: "
|
|
145
|
+
fill: "currentColor"
|
|
144
146
|
}),
|
|
145
147
|
/*#__PURE__*/ _jsx("path", {
|
|
146
148
|
d: "M12.875 18C13.7034 18 14.375 17.3284 14.375 16.5C14.375 15.6716 13.7034 15 12.875 15C12.0466 15 11.375 15.6716 11.375 16.5C11.375 17.3284 12.0466 18 12.875 18Z",
|
|
147
|
-
fill: "
|
|
149
|
+
fill: "currentColor"
|
|
148
150
|
})
|
|
149
151
|
]
|
|
150
152
|
})
|