@payloadcms/ui 4.0.0-canary.35 → 4.0.0-canary.37
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/dist/css/app.css +1 -0
- package/dist/css/preflight.css +1 -0
- package/dist/css/spacing.css +3 -0
- package/dist/elements/AppHeader/index.css +3 -0
- package/dist/elements/Banner/index.css +4 -0
- package/dist/elements/Banner/index.d.ts.map +1 -1
- package/dist/elements/Banner/index.js +1 -0
- package/dist/elements/Banner/index.js.map +1 -1
- package/dist/elements/BulkUpload/ActionsBar/index.css +1 -0
- package/dist/elements/BulkUpload/AddingFilesView/index.css +2 -4
- package/dist/elements/BulkUpload/FileSidebar/index.css +1 -0
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +12 -7
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/BulkUpload/index.css +2 -0
- package/dist/elements/Collapsible/index.css +1 -0
- package/dist/elements/DatePicker/index.css +2 -0
- package/dist/elements/Dialog/index.css +1 -0
- package/dist/elements/DocumentControls/index.css +1 -0
- package/dist/elements/DocumentFields/index.css +2 -0
- package/dist/elements/DocumentHeader/Tabs/index.css +1 -0
- package/dist/elements/DocumentHeader/index.css +1 -0
- package/dist/elements/EditUpload/index.css +1 -1
- package/dist/elements/FieldDiffContainer/index.css +1 -0
- package/dist/elements/FieldDiffLabel/index.css +1 -0
- package/dist/elements/FileDetails/StaticFileDetails/index.css +2 -0
- package/dist/elements/HTMLDiff/index.css +1 -0
- package/dist/elements/ItemsDrawer/index.css +3 -0
- package/dist/elements/ListControls/index.css +1 -0
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +7 -1
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListControls/types.d.ts +3 -1
- package/dist/elements/ListControls/types.d.ts.map +1 -1
- package/dist/elements/ListControls/types.js.map +1 -1
- package/dist/elements/ListControlsBar/index.css +1 -0
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +1 -1
- package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
- package/dist/elements/LivePreview/Window/index.css +1 -0
- package/dist/elements/Nav/getNavPrefs.d.ts.map +1 -1
- package/dist/elements/Nav/getNavPrefs.js +2 -0
- package/dist/elements/Nav/getNavPrefs.js.map +1 -1
- package/dist/elements/Nav/index.css +2 -0
- package/dist/elements/PageControls/index.css +1 -0
- package/dist/elements/PillSelector/index.css +1 -0
- package/dist/elements/PreviewSizes/index.css +2 -0
- package/dist/elements/PublishButton/index.css +1 -0
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +11 -25
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/QueryPresets/fields/Heading/index.css +1 -0
- package/dist/elements/RenderTitle/index.css +1 -0
- package/dist/elements/Table/index.css +1 -0
- package/dist/elements/TableSection/index.css +1 -0
- package/dist/elements/Tabs/index.css +1 -0
- package/dist/elements/Thumbnail/index.css +1 -0
- package/dist/elements/TimezonePicker/index.css +1 -0
- package/dist/elements/Tooltip/index.css +7 -0
- package/dist/elements/WhereBuilder/Condition/index.css +1 -0
- package/dist/elements/WhereBuilder/index.css +2 -0
- package/dist/fields/Array/index.css +1 -0
- package/dist/fields/Blocks/index.css +1 -0
- package/dist/fields/Group/index.css +1 -0
- package/dist/fields/Row/index.css +2 -0
- package/dist/fields/Tabs/index.css +1 -0
- package/dist/forms/RenderFields/index.css +1 -0
- package/dist/hooks/useControllableState.js +3 -3
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/layouts/Root/index.d.ts +3 -6
- package/dist/layouts/Root/index.d.ts.map +1 -1
- package/dist/layouts/Root/index.js +2 -4
- package/dist/layouts/Root/index.js.map +1 -1
- package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/index.js +30 -19
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/Locale/index.d.ts.map +1 -1
- package/dist/providers/Locale/index.js +6 -7
- package/dist/providers/Locale/index.js.map +1 -1
- package/dist/styles.css +5 -1
- package/dist/templates/Default/Wrapper/index.css +2 -0
- package/dist/templates/Default/index.css +1 -0
- package/dist/utilities/getDocPreferences.d.ts.map +1 -1
- package/dist/utilities/getDocPreferences.js +1 -0
- package/dist/utilities/getDocPreferences.js.map +1 -1
- package/dist/utilities/getPreferences.d.ts.map +1 -1
- package/dist/utilities/getPreferences.js +1 -0
- package/dist/utilities/getPreferences.js.map +1 -1
- package/dist/utilities/getVersions.d.ts.map +1 -1
- package/dist/utilities/getVersions.js +8 -0
- package/dist/utilities/getVersions.js.map +1 -1
- package/dist/utilities/handleAuthRedirect.d.ts.map +1 -1
- package/dist/utilities/handleAuthRedirect.js +4 -1
- package/dist/utilities/handleAuthRedirect.js.map +1 -1
- package/dist/utilities/isPathMatchingRoute.d.ts.map +1 -1
- package/dist/utilities/isPathMatchingRoute.js +7 -5
- package/dist/utilities/isPathMatchingRoute.js.map +1 -1
- package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +2 -0
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/utilities/upsertPreferences.d.ts.map +1 -1
- package/dist/utilities/upsertPreferences.js +3 -0
- package/dist/utilities/upsertPreferences.js.map +1 -1
- package/dist/views/API/index.css +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.css +2 -0
- package/dist/views/Document/handleServerFunction.d.ts.map +1 -1
- package/dist/views/Document/handleServerFunction.js +1 -0
- package/dist/views/Document/handleServerFunction.js.map +1 -1
- package/dist/views/Edit/index.css +1 -0
- package/dist/views/HierarchyList/HierarchyTable/SlotTable.css +1 -0
- package/dist/views/HierarchyList/index.css +1 -0
- package/dist/views/List/ListHeader/index.css +1 -0
- package/dist/views/List/ListHeader/index.d.ts +0 -1
- package/dist/views/List/ListHeader/index.d.ts.map +1 -1
- package/dist/views/List/ListHeader/index.js +2 -6
- package/dist/views/List/ListHeader/index.js.map +1 -1
- package/dist/views/List/enrichDocsWithVersionStatus.d.ts.map +1 -1
- package/dist/views/List/enrichDocsWithVersionStatus.js +1 -0
- package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
- package/dist/views/List/handleServerFunction.d.ts.map +1 -1
- package/dist/views/List/handleServerFunction.js +1 -0
- package/dist/views/List/handleServerFunction.js.map +1 -1
- package/dist/views/List/index.client.d.ts.map +1 -1
- package/dist/views/List/index.client.js +3 -2
- package/dist/views/List/index.client.js.map +1 -1
- package/dist/views/List/index.css +2 -0
- package/dist/views/NotFound/client.d.ts +2 -0
- package/dist/views/NotFound/client.d.ts.map +1 -0
- package/dist/views/NotFound/client.js +4 -0
- package/dist/views/NotFound/client.js.map +1 -0
- package/dist/views/Root/index.d.ts.map +1 -1
- package/dist/views/Root/index.js +26 -19
- package/dist/views/Root/index.js.map +1 -1
- package/dist/views/Version/Default/index.css +2 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.css +8 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.css +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.css +1 -0
- package/dist/views/Version/RenderFieldsToDiff/index.css +2 -0
- package/dist/views/Version/Restore/index.d.ts.map +1 -1
- package/dist/views/Version/Restore/index.js +9 -6
- package/dist/views/Version/Restore/index.js.map +1 -1
- package/dist/views/Versions/VersionPillLabel/index.css +1 -0
- package/dist/views/Versions/index.css +1 -0
- package/dist/widgets/CollectionCards/index.css +4 -0
- package/package.json +11 -6
- package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +0 -120
- package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +0 -1
- package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +0 -144
- package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +0 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +0 -885
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +0 -1
- package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js +0 -87
- package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js.map +0 -1
- package/dist/elements/CommandPalette/buildActions.spec.js +0 -158
- package/dist/elements/CommandPalette/buildActions.spec.js.map +0 -1
- package/dist/elements/CommandPalette/highlightLabel.spec.js +0 -78
- package/dist/elements/CommandPalette/highlightLabel.spec.js.map +0 -1
- package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +0 -143
- package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +0 -1
- package/dist/elements/Toasts/fieldErrors.spec.js +0 -46
- package/dist/elements/Toasts/fieldErrors.spec.js.map +0 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js +0 -152
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js.map +0 -1
- package/dist/elements/WhereBuilder/conditionValue.spec.js +0 -65
- package/dist/elements/WhereBuilder/conditionValue.spec.js.map +0 -1
- package/dist/fields/Upload/Input.spec.js +0 -242
- package/dist/fields/Upload/Input.spec.js.map +0 -1
- package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts +0 -2
- package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts.map +0 -1
- package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js +0 -67
- package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js.map +0 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js +0 -150
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js.map +0 -1
- package/dist/layouts/Root/index.spec.js +0 -20
- package/dist/layouts/Root/index.spec.js.map +0 -1
- package/dist/providers/Auth/authSessionRequests.spec.js +0 -121
- package/dist/providers/Auth/authSessionRequests.spec.js.map +0 -1
- package/dist/providers/Auth/sessionActivity.spec.js +0 -44
- package/dist/providers/Auth/sessionActivity.spec.js.map +0 -1
- package/dist/providers/Auth/tabSessionSync/index.spec.js +0 -463
- package/dist/providers/Auth/tabSessionSync/index.spec.js.map +0 -1
- package/dist/providers/Auth/useAuthSessionTimers.spec.js +0 -311
- package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +0 -1
- package/dist/providers/RouteTransition/ProgressBar/index.spec.js +0 -44
- package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +0 -1
- package/dist/providers/TableColumns/buildColumnState/index.spec.js +0 -40
- package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +0 -1
- package/dist/utilities/appendCacheTag.spec.js +0 -34
- package/dist/utilities/appendCacheTag.spec.js.map +0 -1
- package/dist/utilities/formatAbsoluteURL.spec.js +0 -27
- package/dist/utilities/formatAbsoluteURL.spec.js.map +0 -1
- package/dist/utilities/formatMetadata.spec.js +0 -83
- package/dist/utilities/formatMetadata.spec.js.map +0 -1
- package/dist/utilities/fuzzyMatch.spec.js +0 -38
- package/dist/utilities/fuzzyMatch.spec.js.map +0 -1
- package/dist/utilities/getRequestLocale.d.ts +0 -7
- package/dist/utilities/getRequestLocale.d.ts.map +0 -1
- package/dist/utilities/getRequestLocale.js +0 -20
- package/dist/utilities/getRequestLocale.js.map +0 -1
- package/dist/utilities/initReq.d.ts +0 -16
- package/dist/utilities/initReq.d.ts.map +0 -1
- package/dist/utilities/initReq.js +0 -146
- package/dist/utilities/initReq.js.map +0 -1
- package/dist/utilities/initReq.spec.js +0 -226
- package/dist/utilities/initReq.spec.js.map +0 -1
- package/dist/utilities/isAbsoluteURL.spec.js +0 -11
- package/dist/utilities/isAbsoluteURL.spec.js.map +0 -1
- package/dist/utilities/isCustomAdminView.spec.js +0 -90
- package/dist/utilities/isCustomAdminView.spec.js.map +0 -1
- package/dist/utilities/isHttpURL.spec.js +0 -25
- package/dist/utilities/isHttpURL.spec.js.map +0 -1
- package/dist/utilities/isPathMatchingRoute.spec.js +0 -178
- package/dist/utilities/isPathMatchingRoute.spec.js.map +0 -1
- package/dist/utilities/isPublicAdminRoute.spec.js +0 -34
- package/dist/utilities/isPublicAdminRoute.spec.js.map +0 -1
- package/dist/utilities/normalizeRelationshipValue.spec.js +0 -373
- package/dist/utilities/normalizeRelationshipValue.spec.js.map +0 -1
- package/dist/utilities/recentlyViewed.spec.js +0 -92
- package/dist/utilities/recentlyViewed.spec.js.map +0 -1
- package/dist/utilities/selectiveCache.d.ts +0 -12
- package/dist/utilities/selectiveCache.d.ts.map +0 -1
- package/dist/utilities/selectiveCache.js +0 -37
- package/dist/utilities/selectiveCache.js.map +0 -1
- package/dist/views/Root/getCustomCollectionViewByRoute.spec.js +0 -168
- package/dist/views/Root/getCustomCollectionViewByRoute.spec.js.map +0 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js +0 -258
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js.map +0 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +0 -915
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +0 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +0 -47
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +0 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +0 -125
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +0 -1
- package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js +0 -100
- package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["applyLocaleFiltering","formatAdminURL","qs","React","RenderServerComponent","PageConfigProvider","DefaultTemplate","MinimalTemplate","getClientConfig","getPreferences","getVisibleEntities","handleAuthRedirect","isCustomAdminView","isPublicAdminRoute","getCustomViewByRoute","getRouteData","renderRoot","adminViews","config","configPromise","importMap","initReq","key","notFound","params","paramsPromise","redirect","searchParams","searchParamsPromise","admin","routes","createFirstUser","_createFirstUserRoute","user","userSlug","adminRoute","currentRoute","path","Array","isArray","segments","join","isCollectionRoute","isGlobalRoute","collectionConfig","undefined","globalConfig","length","viewKey","collections","find","slug","globals","queryString","stringify","addQueryPrefix","cookies","locale","permissions","req","payload","overrides","fallbackLocale","query","parse","depth","ignoreQueryPrefix","urlSuffix","canAccessAdmin","route","server","collectionPreferences","id","then","res","value","DefaultView","documentSubViewType","routeParams","templateClassName","templateType","viewActions","viewType","dbHasUser","db","findOne","collection","doc","Component","payloadComponent","usersCollection","disableLocalStrategy","auth","createFirstUserRoute","clientConfig","i18n","localization","localeCodes","includes","defaultLocale","visibleEntities","RenderedView","clientProps","collectionSlug","docID","globalSlug","Fallback","serverProps","initPageResult","languageOptions","Object","entries","supportedLanguages","reduce","acc","language","languageConfig","keys","push","label","translations","general","thisLanguage","KeyedView","_jsx","Fragment","_jsxs","className"],"sources":["../../../src/views/Root/index.tsx"],"sourcesContent":["'use server'\n\nimport type {\n AdminViewAdapter,\n AdminViewClientProps,\n AdminViewServerPropsOnly,\n CollectionPreferences,\n createLocalReq,\n ImportMap,\n InitReqResult,\n SanitizedCollectionConfig,\n SanitizedConfig,\n SanitizedGlobalConfig,\n} from 'payload'\n\nimport { applyLocaleFiltering, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\n\nimport { RenderServerComponent } from '../../elements/RenderServerComponent/index.js'\n// eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds\nimport { PageConfigProvider } from '../../exports/client/index.js'\nimport { DefaultTemplate } from '../../templates/Default/index.js'\nimport { MinimalTemplate } from '../../templates/Minimal/index.js'\nimport { getClientConfig } from '../../utilities/getClientConfig.js'\nimport { getPreferences } from '../../utilities/getPreferences.js'\nimport { getVisibleEntities } from '../../utilities/getVisibleEntities.js'\nimport { handleAuthRedirect } from '../../utilities/handleAuthRedirect.js'\nimport { isCustomAdminView } from '../../utilities/isCustomAdminView.js'\nimport { isPublicAdminRoute } from '../../utilities/isPublicAdminRoute.js'\nimport { getCustomViewByRoute } from './getCustomViewByRoute.js'\nimport { getRouteData } from './getRouteData.js'\n\ntype InitReqFn = (args: {\n canSetHeaders?: boolean\n configPromise: Promise<SanitizedConfig> | SanitizedConfig\n importMap: ImportMap\n key: string\n overrides?: Parameters<typeof createLocalReq>[0]\n}) => Promise<InitReqResult>\n\nexport type RenderRootArgs = {\n adminViews: AdminViewAdapter\n config: Promise<SanitizedConfig>\n importMap: ImportMap\n initReq: InitReqFn\n /**\n * Optional React `key` applied to the rendered view (not the surrounding admin\n * template/nav). Adapters whose router reconciles a single RSC payload in place\n * across navigations (e.g. TanStack Start) pass a per-route key here so the\n * *view* remounts on route change — resetting view-scoped client providers like\n * `DocumentInfoProvider` that hold uncontrolled `useState` from the prior\n * document — while the persistent nav/template reconciles in place (no flash).\n * Left `undefined` by Next.js, whose App Router already remounts the page\n * segment while its layout (nav) persists.\n */\n key?: string\n /** Framework notFound implementation (e.g. next/navigation notFound). Called before req is available. */\n notFound: () => never\n params: Promise<{ segments: string[] }>\n /** Framework redirect implementation (e.g. next/navigation redirect). Called before req is available. */\n redirect: (url: string) => never\n searchParams: Promise<{ [key: string]: string | string[] }>\n}\n\nexport const renderRoot = async ({\n adminViews,\n config: configPromise,\n importMap,\n initReq,\n key,\n notFound,\n params: paramsPromise,\n redirect,\n searchParams: searchParamsPromise,\n}: RenderRootArgs) => {\n const config = await configPromise\n\n const {\n admin: {\n routes: { createFirstUser: _createFirstUserRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute },\n } = config\n\n const params = await paramsPromise\n\n const currentRoute = formatAdminURL({\n adminRoute,\n path: Array.isArray(params.segments) ? `/${params.segments.join('/')}` : null,\n })\n\n const segments = Array.isArray(params.segments) ? params.segments : []\n const isCollectionRoute = segments[0] === 'collections'\n const isGlobalRoute = segments[0] === 'globals'\n let collectionConfig: SanitizedCollectionConfig = undefined\n let globalConfig: SanitizedGlobalConfig = undefined\n\n const searchParams = await searchParamsPromise\n\n // Redirect `${adminRoute}/collections` to `${adminRoute}`\n if (isCollectionRoute) {\n if (segments.length === 1) {\n const { viewKey } = getCustomViewByRoute({\n config,\n currentRoute: '/collections',\n })\n\n // Only redirect if there's NO custom view configured for /collections\n if (!viewKey) {\n redirect(adminRoute)\n }\n }\n\n if (segments[1]) {\n collectionConfig = config.collections.find(({ slug }) => slug === segments[1])\n }\n }\n\n // Redirect `${adminRoute}/globals` to `${adminRoute}`\n if (isGlobalRoute) {\n if (segments.length === 1) {\n const { viewKey } = getCustomViewByRoute({\n config,\n currentRoute: '/globals',\n })\n\n // Only redirect if there's NO custom view configured for /globals\n if (!viewKey) {\n redirect(adminRoute)\n }\n }\n\n if (segments[1]) {\n globalConfig = config.globals.find(({ slug }) => slug === segments[1])\n }\n }\n\n if ((isCollectionRoute && !collectionConfig) || (isGlobalRoute && !globalConfig)) {\n notFound()\n }\n\n const queryString = `${qs.stringify(searchParams ?? {}, { addQueryPrefix: true })}`\n\n const {\n cookies,\n locale,\n permissions,\n req,\n req: { payload },\n user,\n } = await initReq({\n configPromise: config,\n importMap,\n key: 'initPage',\n overrides: {\n fallbackLocale: false,\n req: {\n query: qs.parse(queryString, {\n depth: 10,\n ignoreQueryPrefix: true,\n }),\n },\n // intentionally omit `serverURL` to keep URL relative\n urlSuffix: `${currentRoute}${searchParams ? queryString : ''}`,\n },\n })\n\n if (\n !permissions.canAccessAdmin &&\n !isPublicAdminRoute({ adminRoute, config: payload.config, route: currentRoute }) &&\n !isCustomAdminView({ adminRoute, config: payload.config, route: currentRoute })\n ) {\n req.server.redirect(\n handleAuthRedirect({\n config: payload.config,\n route: currentRoute,\n searchParams,\n user: req.user,\n }),\n )\n }\n\n let collectionPreferences: CollectionPreferences = undefined\n\n if (collectionConfig && segments.length === 2) {\n await getPreferences<CollectionPreferences>(\n `collection-${collectionConfig.slug}`,\n req.payload,\n req.user.id,\n config.admin.user,\n ).then((res) => {\n if (res && res.value) {\n collectionPreferences = res.value\n }\n })\n }\n\n const {\n DefaultView,\n documentSubViewType,\n routeParams,\n templateClassName,\n templateType,\n viewActions,\n viewType,\n } = getRouteData({\n adminRoute,\n adminViews,\n collectionConfig,\n collectionPreferences,\n currentRoute,\n globalConfig,\n payload,\n searchParams,\n segments,\n })\n\n req.routeParams = routeParams\n\n const dbHasUser =\n req.user ||\n (await req.payload.db\n .findOne({\n collection: userSlug,\n req,\n })\n ?.then((doc) => !!doc))\n\n /**\n * This function is responsible for handling the case where the view is not found.\n * The current route did not match any default views or custom route views.\n */\n if (!DefaultView?.Component && !DefaultView?.payloadComponent) {\n if (req?.user) {\n req.server.notFound()\n }\n\n if (dbHasUser) {\n req.server.redirect(adminRoute)\n }\n }\n\n const usersCollection = config.collections.find(({ slug }) => slug === userSlug)\n const disableLocalStrategy = usersCollection?.auth?.disableLocalStrategy\n\n const createFirstUserRoute = formatAdminURL({\n adminRoute,\n path: _createFirstUserRoute,\n })\n\n if (disableLocalStrategy && currentRoute === createFirstUserRoute) {\n req.server.redirect(adminRoute)\n }\n\n if (!dbHasUser && currentRoute !== createFirstUserRoute && !disableLocalStrategy) {\n req.server.redirect(createFirstUserRoute)\n }\n\n if (dbHasUser && currentRoute === createFirstUserRoute) {\n req.server.redirect(adminRoute)\n }\n\n if (!DefaultView?.Component && !DefaultView?.payloadComponent && !dbHasUser) {\n req.server.redirect(adminRoute)\n }\n\n const clientConfig = getClientConfig({\n config,\n i18n: req.i18n,\n importMap,\n user: viewType === 'createFirstUser' ? true : user,\n })\n\n await applyLocaleFiltering({ clientConfig, config, req })\n\n // Ensure locale on req is still valid after filtering locales\n if (\n clientConfig.localization &&\n req.locale &&\n !clientConfig.localization.localeCodes.includes(req.locale)\n ) {\n req.server.redirect(\n `${currentRoute}${qs.stringify(\n {\n ...searchParams,\n locale: clientConfig.localization.localeCodes.includes(\n clientConfig.localization.defaultLocale,\n )\n ? clientConfig.localization.defaultLocale\n : clientConfig.localization.localeCodes[0],\n },\n { addQueryPrefix: true },\n )}`,\n )\n }\n\n const visibleEntities = getVisibleEntities({ req })\n\n const RenderedView = RenderServerComponent({\n clientProps: {\n clientConfig,\n collectionSlug: collectionConfig?.slug,\n docID: routeParams.id,\n documentSubViewType,\n globalSlug: globalConfig?.slug,\n viewType,\n } satisfies AdminViewClientProps,\n Component: DefaultView.payloadComponent,\n Fallback: DefaultView.Component,\n importMap,\n serverProps: {\n clientConfig,\n collectionConfig,\n docID: routeParams.id,\n globalConfig,\n i18n: req.i18n,\n importMap,\n initPageResult: {\n collectionConfig,\n cookies,\n docID: routeParams.id,\n globalConfig,\n languageOptions: Object.entries(req.payload.config.i18n.supportedLanguages || {}).reduce(\n (acc, [language, languageConfig]) => {\n if (Object.keys(req.payload.config.i18n.supportedLanguages).includes(language)) {\n acc.push({\n label: languageConfig.translations.general.thisLanguage,\n value: language,\n })\n }\n\n return acc\n },\n [],\n ),\n locale,\n permissions,\n req,\n translations: req.i18n.translations,\n visibleEntities,\n },\n params,\n payload: req.payload,\n searchParams,\n server: req.server,\n user,\n viewActions,\n } satisfies AdminViewServerPropsOnly,\n })\n\n // Wrap the view in a keyed boundary so it remounts on route change while the\n // surrounding template/nav reconciles in place. `key={undefined}` (Next.js) is\n // a no-op, preserving prior behavior.\n const KeyedView = <React.Fragment key={key}>{RenderedView}</React.Fragment>\n\n return (\n <PageConfigProvider config={clientConfig}>\n {!templateType && <React.Fragment>{KeyedView}</React.Fragment>}\n {templateType === 'minimal' && (\n <MinimalTemplate className={templateClassName}>{KeyedView}</MinimalTemplate>\n )}\n {templateType === 'default' && (\n <DefaultTemplate\n collectionSlug={collectionConfig?.slug}\n docID={routeParams.id}\n documentSubViewType={documentSubViewType}\n globalSlug={globalConfig?.slug}\n i18n={req.i18n}\n locale={locale}\n params={params}\n payload={req.payload}\n permissions={permissions}\n req={req}\n searchParams={searchParams}\n user={user}\n viewActions={viewActions}\n viewKey={key}\n viewType={viewType}\n visibleEntities={{\n // The reason we are not passing in initPageResult.visibleEntities directly is due to a \"Cannot assign to read only property of object '#<Object>\" error introduced in React 19\n // which this caused as soon as initPageResult.visibleEntities is passed in\n collections: visibleEntities?.collections,\n globals: visibleEntities?.globals,\n }}\n >\n {KeyedView}\n </DefaultTemplate>\n )}\n </PageConfigProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["applyLocaleFiltering","formatAdminURL","stripTrailingSlash","qs","React","RenderServerComponent","PageConfigProvider","DefaultTemplate","MinimalTemplate","getClientConfig","getPreferences","getVisibleEntities","handleAuthRedirect","isCustomAdminView","isPublicAdminRoute","getCustomViewByRoute","getRouteData","renderRoot","adminViews","config","configPromise","importMap","initReq","key","notFound","params","paramsPromise","redirect","searchParams","searchParamsPromise","admin","routes","createFirstUser","_createFirstUserRoute","user","userSlug","adminRoute","adminRouteURL","currentRouteURL","path","Array","isArray","segments","join","currentRouteToCompare","isCollectionRoute","isGlobalRoute","collectionConfig","undefined","globalConfig","length","viewKey","currentRoute","collections","find","slug","globals","queryString","stringify","addQueryPrefix","cookies","locale","permissions","req","payload","overrides","fallbackLocale","query","parse","depth","ignoreQueryPrefix","urlSuffix","canAccessAdmin","route","server","collectionPreferences","id","then","res","value","DefaultView","documentSubViewType","routeParams","templateClassName","templateType","viewActions","viewType","dbHasUser","db","findOne","collection","doc","Component","payloadComponent","usersCollection","disableLocalStrategy","auth","createFirstUserURL","createFirstUserRouteToCompare","clientConfig","i18n","localization","localeCodes","includes","defaultLocale","visibleEntities","RenderedView","clientProps","collectionSlug","docID","globalSlug","Fallback","serverProps","initPageResult","languageOptions","Object","entries","supportedLanguages","reduce","acc","language","languageConfig","keys","push","label","translations","general","thisLanguage","KeyedView","_jsx","Fragment","_jsxs","className"],"sources":["../../../src/views/Root/index.tsx"],"sourcesContent":["'use server'\n\nimport type {\n AdminViewAdapter,\n AdminViewClientProps,\n AdminViewServerPropsOnly,\n CollectionPreferences,\n createLocalReq,\n ImportMap,\n InitReqResult,\n SanitizedCollectionConfig,\n SanitizedConfig,\n SanitizedGlobalConfig,\n} from 'payload'\n\nimport { applyLocaleFiltering, formatAdminURL, stripTrailingSlash } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\n\nimport { RenderServerComponent } from '../../elements/RenderServerComponent/index.js'\n// eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds\nimport { PageConfigProvider } from '../../exports/client/index.js'\nimport { DefaultTemplate } from '../../templates/Default/index.js'\nimport { MinimalTemplate } from '../../templates/Minimal/index.js'\nimport { getClientConfig } from '../../utilities/getClientConfig.js'\nimport { getPreferences } from '../../utilities/getPreferences.js'\nimport { getVisibleEntities } from '../../utilities/getVisibleEntities.js'\nimport { handleAuthRedirect } from '../../utilities/handleAuthRedirect.js'\nimport { isCustomAdminView } from '../../utilities/isCustomAdminView.js'\nimport { isPublicAdminRoute } from '../../utilities/isPublicAdminRoute.js'\nimport { getCustomViewByRoute } from './getCustomViewByRoute.js'\nimport { getRouteData } from './getRouteData.js'\n\ntype InitReqFn = (args: {\n canSetHeaders?: boolean\n configPromise: Promise<SanitizedConfig> | SanitizedConfig\n importMap: ImportMap\n key: string\n overrides?: Parameters<typeof createLocalReq>[0]\n}) => Promise<InitReqResult>\n\nexport type RenderRootArgs = {\n adminViews: AdminViewAdapter\n config: Promise<SanitizedConfig>\n importMap: ImportMap\n initReq: InitReqFn\n /**\n * Optional React `key` applied to the rendered view (not the surrounding admin\n * template/nav). Adapters whose router reconciles a single RSC payload in place\n * across navigations (e.g. TanStack Start) pass a per-route key here so the\n * *view* remounts on route change — resetting view-scoped client providers like\n * `DocumentInfoProvider` that hold uncontrolled `useState` from the prior\n * document — while the persistent nav/template reconciles in place (no flash).\n * Left `undefined` by Next.js, whose App Router already remounts the page\n * segment while its layout (nav) persists.\n */\n key?: string\n /** Framework notFound implementation (e.g. next/navigation notFound). Called before req is available. */\n notFound: () => never\n params: Promise<{ segments: string[] }>\n /** Framework redirect implementation (e.g. next/navigation redirect). Called before req is available. */\n redirect: (url: string) => never\n searchParams: Promise<{ [key: string]: string | string[] }>\n}\n\nexport const renderRoot = async ({\n adminViews,\n config: configPromise,\n importMap,\n initReq,\n key,\n notFound,\n params: paramsPromise,\n redirect,\n searchParams: searchParamsPromise,\n}: RenderRootArgs) => {\n const config = await configPromise\n\n const {\n admin: {\n routes: { createFirstUser: _createFirstUserRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute },\n } = config\n const adminRouteURL = formatAdminURL({ adminRoute })\n\n const params = await paramsPromise\n\n // route with possible trailing slash\n const currentRouteURL = formatAdminURL({\n adminRoute,\n path: Array.isArray(params.segments) ? `/${params.segments.join('/')}` : null,\n })\n // route without possible trailing slash\n const currentRouteToCompare = stripTrailingSlash(currentRouteURL)\n\n const segments = Array.isArray(params.segments) ? params.segments : []\n const isCollectionRoute = segments[0] === 'collections'\n const isGlobalRoute = segments[0] === 'globals'\n let collectionConfig: SanitizedCollectionConfig = undefined\n let globalConfig: SanitizedGlobalConfig = undefined\n\n const searchParams = await searchParamsPromise\n\n // Redirect `${adminRoute}/collections` to `${adminRoute}`\n if (isCollectionRoute) {\n if (segments.length === 1) {\n const { viewKey } = getCustomViewByRoute({\n config,\n currentRoute: '/collections',\n })\n\n // Only redirect if there's NO custom view configured for /collections\n if (!viewKey) {\n redirect(adminRouteURL)\n }\n }\n\n if (segments[1]) {\n collectionConfig = config.collections.find(({ slug }) => slug === segments[1])\n }\n }\n\n // Redirect `${adminRoute}/globals` to `${adminRoute}`\n if (isGlobalRoute) {\n if (segments.length === 1) {\n const { viewKey } = getCustomViewByRoute({\n config,\n currentRoute: '/globals',\n })\n\n // Only redirect if there's NO custom view configured for /globals\n if (!viewKey) {\n redirect(adminRouteURL)\n }\n }\n\n if (segments[1]) {\n globalConfig = config.globals.find(({ slug }) => slug === segments[1])\n }\n }\n\n if ((isCollectionRoute && !collectionConfig) || (isGlobalRoute && !globalConfig)) {\n notFound()\n }\n\n const queryString = `${qs.stringify(searchParams ?? {}, { addQueryPrefix: true })}`\n\n const {\n cookies,\n locale,\n permissions,\n req,\n req: { payload },\n user,\n } = await initReq({\n configPromise: config,\n importMap,\n key: 'initPage',\n overrides: {\n fallbackLocale: false,\n req: {\n query: qs.parse(queryString, {\n depth: 10,\n ignoreQueryPrefix: true,\n }),\n },\n // intentionally omit `serverURL` to keep URL relative\n urlSuffix: `${currentRouteURL}${searchParams ? queryString : ''}`,\n },\n })\n\n if (\n !permissions.canAccessAdmin &&\n !isPublicAdminRoute({ adminRoute, config: payload.config, route: currentRouteToCompare }) &&\n !isCustomAdminView({ adminRoute, config: payload.config, route: currentRouteToCompare })\n ) {\n req.server.redirect(\n handleAuthRedirect({\n config: payload.config,\n route: currentRouteToCompare,\n searchParams,\n user: req.user,\n }),\n )\n }\n\n let collectionPreferences: CollectionPreferences = undefined\n\n if (collectionConfig && segments.length === 2) {\n await getPreferences<CollectionPreferences>(\n `collection-${collectionConfig.slug}`,\n req.payload,\n req.user.id,\n config.admin.user,\n ).then((res) => {\n if (res && res.value) {\n collectionPreferences = res.value\n }\n })\n }\n\n const {\n DefaultView,\n documentSubViewType,\n routeParams,\n templateClassName,\n templateType,\n viewActions,\n viewType,\n } = getRouteData({\n adminRoute,\n adminViews,\n collectionConfig,\n collectionPreferences,\n currentRoute: currentRouteToCompare,\n globalConfig,\n payload,\n searchParams,\n segments,\n })\n\n req.routeParams = routeParams\n\n const dbHasUser =\n req.user ||\n (await req.payload.db\n .findOne({\n collection: userSlug,\n req,\n })\n ?.then((doc) => !!doc))\n\n /**\n * This function is responsible for handling the case where the view is not found.\n * The current route did not match any default views or custom route views.\n */\n if (!DefaultView?.Component && !DefaultView?.payloadComponent) {\n if (req?.user) {\n req.server.notFound()\n }\n\n if (dbHasUser) {\n req.server.redirect(adminRouteURL)\n }\n }\n\n const usersCollection = config.collections.find(({ slug }) => slug === userSlug)\n const disableLocalStrategy = usersCollection?.auth?.disableLocalStrategy\n\n const createFirstUserURL = formatAdminURL({\n adminRoute,\n path: _createFirstUserRoute,\n })\n const createFirstUserRouteToCompare = stripTrailingSlash(createFirstUserURL)\n\n if (disableLocalStrategy && currentRouteToCompare === createFirstUserRouteToCompare) {\n req.server.redirect(adminRouteURL)\n }\n\n if (\n !dbHasUser &&\n currentRouteToCompare !== createFirstUserRouteToCompare &&\n !disableLocalStrategy\n ) {\n req.server.redirect(createFirstUserURL)\n }\n\n if (dbHasUser && currentRouteToCompare === createFirstUserRouteToCompare) {\n req.server.redirect(adminRouteURL)\n }\n\n if (!DefaultView?.Component && !DefaultView?.payloadComponent && !dbHasUser) {\n req.server.redirect(adminRouteURL)\n }\n\n const clientConfig = getClientConfig({\n config,\n i18n: req.i18n,\n importMap,\n user: viewType === 'createFirstUser' ? true : user,\n })\n\n await applyLocaleFiltering({ clientConfig, config, req })\n\n // Ensure locale on req is still valid after filtering locales\n if (\n clientConfig.localization &&\n req.locale &&\n !clientConfig.localization.localeCodes.includes(req.locale)\n ) {\n req.server.redirect(\n `${currentRouteURL}${qs.stringify(\n {\n ...searchParams,\n locale: clientConfig.localization.localeCodes.includes(\n clientConfig.localization.defaultLocale,\n )\n ? clientConfig.localization.defaultLocale\n : clientConfig.localization.localeCodes[0],\n },\n { addQueryPrefix: true },\n )}`,\n )\n }\n\n const visibleEntities = getVisibleEntities({ req })\n\n const RenderedView = RenderServerComponent({\n clientProps: {\n clientConfig,\n collectionSlug: collectionConfig?.slug,\n docID: routeParams.id,\n documentSubViewType,\n globalSlug: globalConfig?.slug,\n viewType,\n } satisfies AdminViewClientProps,\n Component: DefaultView.payloadComponent,\n Fallback: DefaultView.Component,\n importMap,\n serverProps: {\n clientConfig,\n collectionConfig,\n docID: routeParams.id,\n globalConfig,\n i18n: req.i18n,\n importMap,\n initPageResult: {\n collectionConfig,\n cookies,\n docID: routeParams.id,\n globalConfig,\n languageOptions: Object.entries(req.payload.config.i18n.supportedLanguages || {}).reduce(\n (acc, [language, languageConfig]) => {\n if (Object.keys(req.payload.config.i18n.supportedLanguages).includes(language)) {\n acc.push({\n label: languageConfig.translations.general.thisLanguage,\n value: language,\n })\n }\n\n return acc\n },\n [],\n ),\n locale,\n permissions,\n req,\n translations: req.i18n.translations,\n visibleEntities,\n },\n params,\n payload: req.payload,\n searchParams,\n server: req.server,\n user,\n viewActions,\n } satisfies AdminViewServerPropsOnly,\n })\n\n // Wrap the view in a keyed boundary so it remounts on route change while the\n // surrounding template/nav reconciles in place. `key={undefined}` (Next.js) is\n // a no-op, preserving prior behavior.\n const KeyedView = <React.Fragment key={key}>{RenderedView}</React.Fragment>\n\n return (\n <PageConfigProvider config={clientConfig}>\n {!templateType && <React.Fragment>{KeyedView}</React.Fragment>}\n {templateType === 'minimal' && (\n <MinimalTemplate className={templateClassName}>{KeyedView}</MinimalTemplate>\n )}\n {templateType === 'default' && (\n <DefaultTemplate\n collectionSlug={collectionConfig?.slug}\n docID={routeParams.id}\n documentSubViewType={documentSubViewType}\n globalSlug={globalConfig?.slug}\n i18n={req.i18n}\n locale={locale}\n params={params}\n payload={req.payload}\n permissions={permissions}\n req={req}\n searchParams={searchParams}\n user={user}\n viewActions={viewActions}\n viewKey={key}\n viewType={viewType}\n visibleEntities={{\n // The reason we are not passing in initPageResult.visibleEntities directly is due to a \"Cannot assign to read only property of object '#<Object>\" error introduced in React 19\n // which this caused as soon as initPageResult.visibleEntities is passed in\n collections: visibleEntities?.collections,\n globals: visibleEntities?.globals,\n }}\n >\n {KeyedView}\n </DefaultTemplate>\n )}\n </PageConfigProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -159,6 +159,7 @@
|
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
162
163
|
@media (max-width: 1024px) {
|
|
163
164
|
.view-version__version-to-version {
|
|
164
165
|
flex-direction: column;
|
|
@@ -166,6 +167,7 @@
|
|
|
166
167
|
}
|
|
167
168
|
}
|
|
168
169
|
|
|
170
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
169
171
|
@media (max-width: 768px) {
|
|
170
172
|
.view-version {
|
|
171
173
|
display: flex;
|
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
@layer payload-default {
|
|
2
2
|
.date-diff[data-match-type] {
|
|
3
|
+
/* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
|
|
3
4
|
background-color: unset !important;
|
|
5
|
+
/* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
|
|
4
6
|
border-radius: unset !important;
|
|
7
|
+
/* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
|
|
5
8
|
padding: 0 !important;
|
|
6
9
|
}
|
|
7
10
|
|
|
8
11
|
.date-diff {
|
|
9
12
|
p *[data-match-type='delete'] {
|
|
13
|
+
/* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
|
|
10
14
|
color: unset !important;
|
|
15
|
+
/* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
|
|
11
16
|
background-color: unset !important;
|
|
12
17
|
}
|
|
13
18
|
|
|
14
19
|
p *[data-match-type='create'] {
|
|
20
|
+
/* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
|
|
15
21
|
color: unset !important;
|
|
22
|
+
/* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
|
|
16
23
|
background-color: unset !important;
|
|
17
24
|
}
|
|
18
25
|
}
|
|
19
26
|
|
|
27
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
20
28
|
@media (max-width: 768px) {
|
|
21
29
|
.field-diff-content .date-diff {
|
|
22
30
|
display: contents;
|
package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateLabelFromValue.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAA;AAS5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,eAAO,MAAM,sBAAsB,sDAMhC;IACD,KAAK,EAAE,iBAAiB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,iBAAiB,CAAA;CACzB,KAAG,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"generateLabelFromValue.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAA;AAS5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,eAAO,MAAM,sBAAsB,sDAMhC;IACD,KAAK,EAAE,iBAAiB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,iBAAiB,CAAA;CACzB,KAAG,OAAO,CAAC,MAAM,CA6EjB,CAAA"}
|
package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateLabelFromValue.js","names":["fieldAffectsData","fieldIsPresentationalOnly","fieldShouldBeLocalized","flattenTopLevelFields","generateLabelFromValue","field","locale","parentIsLocalized","req","value","relatedDoc","relationTo","valueToReturn","relatedCollection","payload","collections","config","useAsTitle","admin","flattenedRelatedCollectionFields","fields","moveSubFieldsToTop","useAsTitleField","find","f","name","titleFieldIsLocalized","fetchedDoc","findByID","id","collection","depth","undefined","select","i18n","t","error","String","JSON","stringify"],"sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.ts"],"sourcesContent":["import type { PayloadRequest, RelationshipField, TypeWithID } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldShouldBeLocalized,\n flattenTopLevelFields,\n} from 'payload/shared'\n\nimport type { RelationshipValue } from './index.js'\n\nexport const generateLabelFromValue = async ({\n field,\n locale,\n parentIsLocalized,\n req,\n value,\n}: {\n field: RelationshipField\n locale: string\n parentIsLocalized: boolean\n req: PayloadRequest\n value: RelationshipValue\n}): Promise<string> => {\n let relatedDoc: number | string | TypeWithID\n let relationTo: string = field.relationTo as string\n let valueToReturn: string = ''\n\n if (typeof value === 'object' && 'relationTo' in value) {\n relatedDoc = value.value\n relationTo = value.relationTo\n } else {\n // Non-polymorphic relationship or deleted document\n relatedDoc = value\n }\n\n const relatedCollection = req.payload.collections[relationTo].config\n\n const useAsTitle = relatedCollection?.admin?.useAsTitle\n\n const flattenedRelatedCollectionFields = flattenTopLevelFields(relatedCollection.fields, {\n moveSubFieldsToTop: true,\n })\n\n const useAsTitleField = flattenedRelatedCollectionFields.find(\n (f) => fieldAffectsData(f) && !fieldIsPresentationalOnly(f) && f.name === useAsTitle,\n )\n let titleFieldIsLocalized = false\n\n if (useAsTitleField && fieldAffectsData(useAsTitleField)) {\n titleFieldIsLocalized = fieldShouldBeLocalized({ field: useAsTitleField, parentIsLocalized })\n }\n\n if (typeof relatedDoc?.[useAsTitle] !== 'undefined') {\n valueToReturn = relatedDoc[useAsTitle]\n } else if (typeof relatedDoc === 'string' || typeof relatedDoc === 'number') {\n // When relatedDoc is just an ID (due to maxDepth: 0), fetch the document to get the title\n try {\n const fetchedDoc = await req.payload.findByID({\n id: relatedDoc,\n collection: relationTo,\n depth: 0,\n locale: titleFieldIsLocalized ? locale : undefined,\n req,\n select: {\n [useAsTitle]: true,\n },\n })\n\n if (fetchedDoc?.[useAsTitle]) {\n valueToReturn = fetchedDoc[useAsTitle]\n } else {\n valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`\n }\n } catch (error) {\n // Document might have been deleted or user doesn't have access\n valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`\n }\n } else {\n valueToReturn = String(typeof relatedDoc === 'object' ? relatedDoc.id : relatedDoc)\n }\n\n if (\n typeof valueToReturn === 'object' &&\n valueToReturn &&\n titleFieldIsLocalized &&\n valueToReturn?.[locale]\n ) {\n valueToReturn = valueToReturn[locale]\n }\n\n if (\n (valueToReturn && typeof valueToReturn === 'object' && valueToReturn !== null) ||\n typeof valueToReturn !== 'string'\n ) {\n valueToReturn = JSON.stringify(valueToReturn)\n }\n\n return valueToReturn\n}\n"],"mappings":"AAEA,SACEA,gBAAgB,EAChBC,yBAAyB,EACzBC,sBAAsB,EACtBC,qBAAqB,QAChB;AAIP,OAAO,MAAMC,sBAAA,GAAyB,MAAAA,CAAO;EAC3CC,KAAK;EACLC,MAAM;EACNC,iBAAiB;EACjBC,GAAG;EACHC;AAAK,CAON;EACC,IAAIC,UAAA;EACJ,IAAIC,UAAA,GAAqBN,KAAA,CAAMM,UAAU;EACzC,IAAIC,aAAA,GAAwB;EAE5B,IAAI,OAAOH,KAAA,KAAU,YAAY,gBAAgBA,KAAA,EAAO;IACtDC,UAAA,GAAaD,KAAA,CAAMA,KAAK;IACxBE,UAAA,GAAaF,KAAA,CAAME,UAAU;EAC/B,OAAO;IACL;IACAD,UAAA,GAAaD,KAAA;EACf;EAEA,MAAMI,iBAAA,GAAoBL,GAAA,CAAIM,OAAO,CAACC,WAAW,CAACJ,UAAA,CAAW,CAACK,MAAM;EAEpE,MAAMC,UAAA,GAAaJ,iBAAA,EAAmBK,KAAA,EAAOD,UAAA;EAE7C,MAAME,gCAAA,GAAmChB,qBAAA,CAAsBU,iBAAA,CAAkBO,MAAM,EAAE;IACvFC,kBAAA,EAAoB;EACtB;EAEA,MAAMC,eAAA,GAAkBH,gCAAA,CAAiCI,IAAI,CAC1DC,CAAA,IAAMxB,gBAAA,CAAiBwB,CAAA,KAAM,CAACvB,yBAAA,CAA0BuB,CAAA,KAAMA,CAAA,CAAEC,IAAI,KAAKR,UAAA;EAE5E,IAAIS,qBAAA,GAAwB;EAE5B,IAAIJ,eAAA,IAAmBtB,gBAAA,CAAiBsB,eAAA,GAAkB;IACxDI,qBAAA,GAAwBxB,sBAAA,CAAuB;MAAEG,KAAA,EAAOiB,eAAA;MAAiBf;IAAkB;EAC7F;EAEA,IAAI,OAAOG,UAAA,GAAaO,UAAA,CAAW,KAAK,aAAa;IACnDL,aAAA,GAAgBF,UAAU,CAACO,UAAA,CAAW;EACxC,OAAO,IAAI,OAAOP,UAAA,KAAe,YAAY,OAAOA,UAAA,KAAe,UAAU;IAC3E;IACA,IAAI;MACF,MAAMiB,UAAA,GAAa,MAAMnB,GAAA,CAAIM,OAAO,CAACc,QAAQ,CAAC;QAC5CC,EAAA,EAAInB,UAAA;QACJoB,UAAA,EAAYnB,UAAA;QACZoB,KAAA,EAAO;QACPzB,MAAA,EAAQoB,qBAAA,GAAwBpB,MAAA,GAAS0B,SAAA;
|
|
1
|
+
{"version":3,"file":"generateLabelFromValue.js","names":["fieldAffectsData","fieldIsPresentationalOnly","fieldShouldBeLocalized","flattenTopLevelFields","generateLabelFromValue","field","locale","parentIsLocalized","req","value","relatedDoc","relationTo","valueToReturn","relatedCollection","payload","collections","config","useAsTitle","admin","flattenedRelatedCollectionFields","fields","moveSubFieldsToTop","useAsTitleField","find","f","name","titleFieldIsLocalized","fetchedDoc","findByID","id","collection","depth","undefined","overrideAccess","select","i18n","t","error","String","JSON","stringify"],"sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.ts"],"sourcesContent":["import type { PayloadRequest, RelationshipField, TypeWithID } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldShouldBeLocalized,\n flattenTopLevelFields,\n} from 'payload/shared'\n\nimport type { RelationshipValue } from './index.js'\n\nexport const generateLabelFromValue = async ({\n field,\n locale,\n parentIsLocalized,\n req,\n value,\n}: {\n field: RelationshipField\n locale: string\n parentIsLocalized: boolean\n req: PayloadRequest\n value: RelationshipValue\n}): Promise<string> => {\n let relatedDoc: number | string | TypeWithID\n let relationTo: string = field.relationTo as string\n let valueToReturn: string = ''\n\n if (typeof value === 'object' && 'relationTo' in value) {\n relatedDoc = value.value\n relationTo = value.relationTo\n } else {\n // Non-polymorphic relationship or deleted document\n relatedDoc = value\n }\n\n const relatedCollection = req.payload.collections[relationTo].config\n\n const useAsTitle = relatedCollection?.admin?.useAsTitle\n\n const flattenedRelatedCollectionFields = flattenTopLevelFields(relatedCollection.fields, {\n moveSubFieldsToTop: true,\n })\n\n const useAsTitleField = flattenedRelatedCollectionFields.find(\n (f) => fieldAffectsData(f) && !fieldIsPresentationalOnly(f) && f.name === useAsTitle,\n )\n let titleFieldIsLocalized = false\n\n if (useAsTitleField && fieldAffectsData(useAsTitleField)) {\n titleFieldIsLocalized = fieldShouldBeLocalized({ field: useAsTitleField, parentIsLocalized })\n }\n\n if (typeof relatedDoc?.[useAsTitle] !== 'undefined') {\n valueToReturn = relatedDoc[useAsTitle]\n } else if (typeof relatedDoc === 'string' || typeof relatedDoc === 'number') {\n // When relatedDoc is just an ID (due to maxDepth: 0), fetch the document to get the title\n try {\n const fetchedDoc = await req.payload.findByID({\n id: relatedDoc,\n collection: relationTo,\n depth: 0,\n locale: titleFieldIsLocalized ? locale : undefined,\n overrideAccess: true,\n req,\n select: {\n [useAsTitle]: true,\n },\n })\n\n if (fetchedDoc?.[useAsTitle]) {\n valueToReturn = fetchedDoc[useAsTitle]\n } else {\n valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`\n }\n } catch (error) {\n // Document might have been deleted or user doesn't have access\n valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`\n }\n } else {\n valueToReturn = String(typeof relatedDoc === 'object' ? relatedDoc.id : relatedDoc)\n }\n\n if (\n typeof valueToReturn === 'object' &&\n valueToReturn &&\n titleFieldIsLocalized &&\n valueToReturn?.[locale]\n ) {\n valueToReturn = valueToReturn[locale]\n }\n\n if (\n (valueToReturn && typeof valueToReturn === 'object' && valueToReturn !== null) ||\n typeof valueToReturn !== 'string'\n ) {\n valueToReturn = JSON.stringify(valueToReturn)\n }\n\n return valueToReturn\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -180,6 +180,7 @@
|
|
|
180
180
|
text-decoration-line: line-through;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
183
184
|
@media (max-width: 768px) {
|
|
184
185
|
.relationship-diff-container--hasOne .field-diff-content {
|
|
185
186
|
padding: 0;
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
padding-right: 0;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
25
26
|
@media (max-width: 768px) {
|
|
26
27
|
/* Stack hasMany columns vertically */
|
|
27
28
|
.upload-diff-container--hasMany .field-diff-content {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
gap: var(--spacer-3);
|
|
6
6
|
|
|
7
7
|
[role='banner'] {
|
|
8
|
+
/* stylelint-disable-next-line plugin/no-important -- TODO: pre-existing; revisit whether specificity can win instead */
|
|
8
9
|
display: none !important;
|
|
9
10
|
}
|
|
10
11
|
}
|
|
@@ -16,6 +17,7 @@
|
|
|
16
17
|
gap: var(--spacer-3);
|
|
17
18
|
}
|
|
18
19
|
|
|
20
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
19
21
|
@media (max-width: 768px) {
|
|
20
22
|
.render-field-diffs {
|
|
21
23
|
gap: calc(var(--spacer-4) - var(--spacer-1));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Version/Restore/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAIpG,OAAO,KAA0C,MAAM,OAAO,CAAA;AAY9D,OAAO,aAAa,CAAA;AAKpB,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IACzC,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,KAAK,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IACtD,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oBAAoB,EAAE,MAAM,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Version/Restore/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAIpG,OAAO,KAA0C,MAAM,OAAO,CAAA;AAY9D,OAAO,aAAa,CAAA;AAKpB,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IACzC,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,KAAK,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IACtD,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oBAAoB,EAAE,MAAM,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuHnC,CAAA"}
|
|
@@ -53,20 +53,23 @@ export const Restore = ({
|
|
|
53
53
|
});
|
|
54
54
|
const canRestoreAsDraft = status !== 'draft' && collectionConfig?.versions?.drafts;
|
|
55
55
|
const handleRestore = useCallback(async () => {
|
|
56
|
-
let fetchURL
|
|
57
|
-
apiRoute,
|
|
58
|
-
path: ''
|
|
59
|
-
});
|
|
56
|
+
let fetchURL;
|
|
60
57
|
let redirectURL;
|
|
61
58
|
if (collectionConfig) {
|
|
62
|
-
fetchURL =
|
|
59
|
+
fetchURL = formatAdminURL({
|
|
60
|
+
apiRoute,
|
|
61
|
+
path: `/${collectionConfig.slug}/versions/${versionID}?draft=${draft}`
|
|
62
|
+
});
|
|
63
63
|
redirectURL = formatAdminURL({
|
|
64
64
|
adminRoute,
|
|
65
65
|
path: `/collections/${collectionConfig.slug}/${originalDocID}`
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
if (globalConfig) {
|
|
69
|
-
fetchURL =
|
|
69
|
+
fetchURL = formatAdminURL({
|
|
70
|
+
apiRoute,
|
|
71
|
+
path: `/globals/${globalConfig.slug}/versions/${versionID}?draft=${draft}`
|
|
72
|
+
});
|
|
70
73
|
redirectURL = formatAdminURL({
|
|
71
74
|
adminRoute,
|
|
72
75
|
path: `/globals/${globalConfig.slug}`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["getTranslation","formatAdminURL","React","Fragment","useCallback","useState","toast","Button","ConfirmationModal","useModal","PopupList","useConfig","useRouter","useRouteTransition","useTranslation","requests","baseClass","modalSlug","Restore","className","collectionConfig","globalConfig","label","originalDocID","status","versionDateFormatted","versionID","config","routes","admin","adminRoute","api","apiRoute","toggleModal","router","i18n","t","draft","setDraft","startRouteTransition","restoreMessage","versionDate","canRestoreAsDraft","versions","drafts","handleRestore","fetchURL","
|
|
1
|
+
{"version":3,"file":"index.js","names":["getTranslation","formatAdminURL","React","Fragment","useCallback","useState","toast","Button","ConfirmationModal","useModal","PopupList","useConfig","useRouter","useRouteTransition","useTranslation","requests","baseClass","modalSlug","Restore","className","collectionConfig","globalConfig","label","originalDocID","status","versionDateFormatted","versionID","config","routes","admin","adminRoute","api","apiRoute","toggleModal","router","i18n","t","draft","setDraft","startRouteTransition","restoreMessage","versionDate","canRestoreAsDraft","versions","drafts","handleRestore","fetchURL","redirectURL","path","slug","res","post","headers","language","json","success","message","push","error","_jsxs","_jsx","filter","Boolean","join","buttonStyle","onClick","size","SubMenuPopupContent","ButtonGroup","body","confirmingLabel","heading","onConfirm"],"sources":["../../../../src/views/Version/Restore/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, ClientGlobalConfig, SanitizedCollectionConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { Fragment, useCallback, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { Button } from '../../../elements/Button/index.js'\nimport { ConfirmationModal } from '../../../elements/ConfirmationModal/index.js'\nimport { useModal } from '../../../elements/Modal/index.js'\nimport * as PopupList from '../../../elements/Popup/PopupButtonList/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useRouter } from '../../../providers/RouterAdapter/index.js'\nimport { useRouteTransition } from '../../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport './index.css'\n\nconst baseClass = 'restore-version'\nconst modalSlug = 'restore-version'\n\ntype Props = {\n className?: string\n collectionConfig?: ClientCollectionConfig\n globalConfig?: ClientGlobalConfig\n label: SanitizedCollectionConfig['labels']['singular']\n originalDocID: number | string\n status?: string\n versionDateFormatted: string\n versionID: string\n}\n\nexport const Restore: React.FC<Props> = ({\n className,\n collectionConfig,\n globalConfig,\n label,\n originalDocID,\n status,\n versionDateFormatted,\n versionID,\n}) => {\n const {\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n },\n } = useConfig()\n\n const { toggleModal } = useModal()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const [draft, setDraft] = useState(false)\n const { startRouteTransition } = useRouteTransition()\n\n const restoreMessage = t(\n globalConfig ? 'version:aboutToRestoreGlobal' : 'version:aboutToRestore',\n {\n label: getTranslation(label, i18n),\n versionDate: versionDateFormatted,\n },\n )\n\n const canRestoreAsDraft = status !== 'draft' && collectionConfig?.versions?.drafts\n\n const handleRestore = useCallback(async () => {\n let fetchURL: string\n let redirectURL: string\n\n if (collectionConfig) {\n fetchURL = formatAdminURL({\n apiRoute,\n path: `/${collectionConfig.slug}/versions/${versionID}?draft=${draft}`,\n })\n redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig.slug}/${originalDocID}`,\n })\n }\n\n if (globalConfig) {\n fetchURL = formatAdminURL({\n apiRoute,\n path: `/globals/${globalConfig.slug}/versions/${versionID}?draft=${draft}`,\n })\n redirectURL = formatAdminURL({\n adminRoute,\n path: `/globals/${globalConfig.slug}`,\n })\n }\n\n const res = await requests.post(fetchURL, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (res.status === 200) {\n const json = await res.json()\n toast.success(json.message)\n return startRouteTransition(() => router.push(redirectURL))\n } else {\n toast.error(t('version:problemRestoringVersion'))\n }\n }, [\n apiRoute,\n collectionConfig,\n globalConfig,\n i18n.language,\n versionID,\n draft,\n adminRoute,\n originalDocID,\n startRouteTransition,\n router,\n t,\n ])\n\n return (\n <Fragment>\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n <Button\n buttonStyle=\"primary\"\n className={[canRestoreAsDraft && `${baseClass}__restore-as-draft-button`]\n .filter(Boolean)\n .join(' ')}\n onClick={() => toggleModal(modalSlug)}\n size=\"medium\"\n SubMenuPopupContent={\n canRestoreAsDraft\n ? () => (\n <PopupList.ButtonGroup>\n <PopupList.Button onClick={() => [setDraft(true), toggleModal(modalSlug)]}>\n {t('version:restoreAsDraft')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n : null\n }\n >\n {t('version:restoreThisVersion')}\n </Button>\n </div>\n <ConfirmationModal\n body={restoreMessage}\n confirmingLabel={t('version:restoring')}\n heading={t('version:confirmVersionRestoration')}\n modalSlug={modalSlug}\n onConfirm={handleRestore}\n />\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
letter-spacing: var(--text-body-medium-letter-spacing);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
24
25
|
@media (max-width: 768px) {
|
|
25
26
|
.version-pill-label {
|
|
26
27
|
flex-direction: row;
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
|
|
72
72
|
/* on mobile, extend the table all the way to the viewport edges */
|
|
73
73
|
/* this is to visually indicate overflowing content */
|
|
74
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
74
75
|
@media (max-width: 768px) {
|
|
75
76
|
.versions .table {
|
|
76
77
|
display: flex;
|
|
@@ -49,12 +49,14 @@
|
|
|
49
49
|
justify-content: unset;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
52
53
|
@media (max-width: 1440px) {
|
|
53
54
|
.collections {
|
|
54
55
|
--cols: 4;
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
|
|
59
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
58
60
|
@media (max-width: 1024px) {
|
|
59
61
|
.collections {
|
|
60
62
|
--gap: var(--spacer-3);
|
|
@@ -62,6 +64,7 @@
|
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
|
|
67
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
65
68
|
@media (max-width: 768px) {
|
|
66
69
|
.collections {
|
|
67
70
|
--cols: 2;
|
|
@@ -76,6 +79,7 @@
|
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
|
|
82
|
+
/* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
|
|
79
83
|
@media (max-width: 400px) {
|
|
80
84
|
.collections {
|
|
81
85
|
--cols: 1;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/ui",
|
|
3
|
-
"version": "4.0.0-canary.
|
|
3
|
+
"version": "4.0.0-canary.37",
|
|
4
4
|
"homepage": "https://payloadcms.com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -167,6 +167,11 @@
|
|
|
167
167
|
"types": "./dist/views/NotFound/page.d.ts",
|
|
168
168
|
"default": "./dist/views/NotFound/page.js"
|
|
169
169
|
},
|
|
170
|
+
"./views/NotFound/client": {
|
|
171
|
+
"import": "./dist/views/NotFound/client.js",
|
|
172
|
+
"types": "./dist/views/NotFound/client.d.ts",
|
|
173
|
+
"default": "./dist/views/NotFound/client.js"
|
|
174
|
+
},
|
|
170
175
|
"./views/Root/getCustomViewByRoute": {
|
|
171
176
|
"import": "./dist/views/Root/getCustomViewByRoute.js",
|
|
172
177
|
"types": "./dist/views/Root/getCustomViewByRoute.d.ts",
|
|
@@ -290,7 +295,7 @@
|
|
|
290
295
|
"ts-essentials": "10.0.3",
|
|
291
296
|
"use-context-selector": "2.0.0",
|
|
292
297
|
"uuid": "14.0.0",
|
|
293
|
-
"@payloadcms/translations": "4.0.0-canary.
|
|
298
|
+
"@payloadcms/translations": "4.0.0-canary.37"
|
|
294
299
|
},
|
|
295
300
|
"devDependencies": {
|
|
296
301
|
"@babel/cli": "7.27.2",
|
|
@@ -304,13 +309,13 @@
|
|
|
304
309
|
"babel-plugin-react-compiler": "19.1.0-rc.3",
|
|
305
310
|
"esbuild": "0.27.1",
|
|
306
311
|
"esbuild-sass-plugin": "3.3.1",
|
|
307
|
-
"
|
|
308
|
-
"
|
|
312
|
+
"payload": "4.0.0-canary.37",
|
|
313
|
+
"@payloadcms/eslint-config": "3.28.0"
|
|
309
314
|
},
|
|
310
315
|
"peerDependencies": {
|
|
311
316
|
"react": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
312
317
|
"react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
313
|
-
"payload": "4.0.0-canary.
|
|
318
|
+
"payload": "4.0.0-canary.37"
|
|
314
319
|
},
|
|
315
320
|
"engines": {
|
|
316
321
|
"node": ">=24.15.0"
|
|
@@ -329,7 +334,7 @@
|
|
|
329
334
|
"build:types": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" tsc --emitDeclarationOnly --outDir dist",
|
|
330
335
|
"build:without_reactcompiler": "rm -rf dist && rm -rf tsconfig.tsbuildinfo && pnpm copyfiles && pnpm build:types && pnpm build:swc",
|
|
331
336
|
"clean": "rimraf -g {dist,*.tsbuildinfo,esbuild}",
|
|
332
|
-
"copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
|
|
337
|
+
"copyfiles": "copyfiles -u 1 -e \"**/*.spec.*\" \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
|
|
333
338
|
"lint": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" eslint .",
|
|
334
339
|
"lint:fix": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" eslint . --fix"
|
|
335
340
|
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { canPasteClipboardData } from './clipboardUtilities.js';
|
|
3
|
-
const localStorageClipboardKey = '_payloadClipboard';
|
|
4
|
-
const textField = {
|
|
5
|
-
name: 'text',
|
|
6
|
-
type: 'text'
|
|
7
|
-
};
|
|
8
|
-
const numberField = {
|
|
9
|
-
name: 'num',
|
|
10
|
-
type: 'number'
|
|
11
|
-
};
|
|
12
|
-
const ctaBlock = {
|
|
13
|
-
slug: 'cta',
|
|
14
|
-
fields: [textField]
|
|
15
|
-
};
|
|
16
|
-
const otherBlock = {
|
|
17
|
-
slug: 'other',
|
|
18
|
-
fields: [numberField]
|
|
19
|
-
};
|
|
20
|
-
const arrayClipboard = {
|
|
21
|
-
type: 'array',
|
|
22
|
-
data: {
|
|
23
|
-
'items.0.text': {
|
|
24
|
-
valid: true,
|
|
25
|
-
value: 'hi'
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
fields: [textField],
|
|
29
|
-
path: 'items',
|
|
30
|
-
rowIndex: 0
|
|
31
|
-
};
|
|
32
|
-
const blocksClipboard = {
|
|
33
|
-
type: 'blocks',
|
|
34
|
-
blocks: [ctaBlock],
|
|
35
|
-
data: {
|
|
36
|
-
'layout.0.blockType': {
|
|
37
|
-
valid: true,
|
|
38
|
-
value: 'cta'
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
path: 'layout',
|
|
42
|
-
rowIndex: 0
|
|
43
|
-
};
|
|
44
|
-
class LocalStorageMock {
|
|
45
|
-
store = {};
|
|
46
|
-
clear() {
|
|
47
|
-
this.store = {};
|
|
48
|
-
}
|
|
49
|
-
getItem(key) {
|
|
50
|
-
return key in this.store ? this.store[key] : null;
|
|
51
|
-
}
|
|
52
|
-
removeItem(key) {
|
|
53
|
-
delete this.store[key];
|
|
54
|
-
}
|
|
55
|
-
setItem(key, value) {
|
|
56
|
-
this.store[key] = String(value);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
describe('canPasteClipboardData', () => {
|
|
60
|
-
let localStorageMock;
|
|
61
|
-
beforeEach(() => {
|
|
62
|
-
localStorageMock = new LocalStorageMock();
|
|
63
|
-
vi.stubGlobal('localStorage', localStorageMock);
|
|
64
|
-
});
|
|
65
|
-
afterEach(() => {
|
|
66
|
-
vi.unstubAllGlobals();
|
|
67
|
-
});
|
|
68
|
-
const writeClipboard = data => {
|
|
69
|
-
localStorageMock.setItem(localStorageClipboardKey, JSON.stringify(data));
|
|
70
|
-
};
|
|
71
|
-
it('should return false when the clipboard is empty', () => {
|
|
72
|
-
expect(canPasteClipboardData({
|
|
73
|
-
path: 'items',
|
|
74
|
-
schemaFields: [textField]
|
|
75
|
-
})).toBe(false);
|
|
76
|
-
});
|
|
77
|
-
it('should return false when the clipboard contains invalid JSON', () => {
|
|
78
|
-
localStorageMock.setItem(localStorageClipboardKey, 'not-json');
|
|
79
|
-
expect(canPasteClipboardData({
|
|
80
|
-
path: 'items',
|
|
81
|
-
schemaFields: [textField]
|
|
82
|
-
})).toBe(false);
|
|
83
|
-
});
|
|
84
|
-
it('should return true for an array field with a matching schema', () => {
|
|
85
|
-
writeClipboard(arrayClipboard);
|
|
86
|
-
expect(canPasteClipboardData({
|
|
87
|
-
path: 'items',
|
|
88
|
-
schemaFields: [textField]
|
|
89
|
-
})).toBe(true);
|
|
90
|
-
});
|
|
91
|
-
it('should return false for an array field with an incompatible schema', () => {
|
|
92
|
-
writeClipboard(arrayClipboard);
|
|
93
|
-
expect(canPasteClipboardData({
|
|
94
|
-
path: 'items',
|
|
95
|
-
schemaFields: [numberField]
|
|
96
|
-
})).toBe(false);
|
|
97
|
-
});
|
|
98
|
-
it('should return true for a blocks field with a matching schema', () => {
|
|
99
|
-
writeClipboard(blocksClipboard);
|
|
100
|
-
expect(canPasteClipboardData({
|
|
101
|
-
path: 'layout',
|
|
102
|
-
schemaBlocks: [ctaBlock]
|
|
103
|
-
})).toBe(true);
|
|
104
|
-
});
|
|
105
|
-
it('should return false for a blocks field with an incompatible schema', () => {
|
|
106
|
-
writeClipboard(blocksClipboard);
|
|
107
|
-
expect(canPasteClipboardData({
|
|
108
|
-
path: 'layout',
|
|
109
|
-
schemaBlocks: [otherBlock]
|
|
110
|
-
})).toBe(false);
|
|
111
|
-
});
|
|
112
|
-
it('should return false when pasting array data into a blocks field', () => {
|
|
113
|
-
writeClipboard(arrayClipboard);
|
|
114
|
-
expect(canPasteClipboardData({
|
|
115
|
-
path: 'layout',
|
|
116
|
-
schemaBlocks: [ctaBlock]
|
|
117
|
-
})).toBe(false);
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
//# sourceMappingURL=clipboardUtilities.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clipboardUtilities.spec.js","names":["afterEach","beforeEach","describe","expect","it","vi","canPasteClipboardData","localStorageClipboardKey","textField","name","type","numberField","ctaBlock","slug","fields","otherBlock","arrayClipboard","data","valid","value","path","rowIndex","blocksClipboard","blocks","LocalStorageMock","store","clear","getItem","key","removeItem","setItem","String","localStorageMock","stubGlobal","unstubAllGlobals","writeClipboard","JSON","stringify","schemaFields","toBe","schemaBlocks"],"sources":["../../../src/elements/ClipboardAction/clipboardUtilities.spec.ts"],"sourcesContent":["import type { ClientBlock, ClientField } from 'payload'\n\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { ClipboardPasteData } from './types.js'\n\nimport { canPasteClipboardData } from './clipboardUtilities.js'\n\nconst localStorageClipboardKey = '_payloadClipboard'\n\nconst textField = { name: 'text', type: 'text' } as ClientField\nconst numberField = { name: 'num', type: 'number' } as ClientField\n\nconst ctaBlock = { slug: 'cta', fields: [textField] } as ClientBlock\nconst otherBlock = { slug: 'other', fields: [numberField] } as ClientBlock\n\nconst arrayClipboard: ClipboardPasteData = {\n type: 'array',\n data: { 'items.0.text': { valid: true, value: 'hi' } },\n fields: [textField],\n path: 'items',\n rowIndex: 0,\n}\n\nconst blocksClipboard: ClipboardPasteData = {\n type: 'blocks',\n blocks: [ctaBlock],\n data: { 'layout.0.blockType': { valid: true, value: 'cta' } },\n path: 'layout',\n rowIndex: 0,\n}\n\nclass LocalStorageMock {\n private store: Record<string, string> = {}\n\n clear() {\n this.store = {}\n }\n\n getItem(key: string): null | string {\n return key in this.store ? this.store[key] : null\n }\n\n removeItem(key: string) {\n delete this.store[key]\n }\n\n setItem(key: string, value: string) {\n this.store[key] = String(value)\n }\n}\n\ndescribe('canPasteClipboardData', () => {\n let localStorageMock: LocalStorageMock\n\n beforeEach(() => {\n localStorageMock = new LocalStorageMock()\n vi.stubGlobal('localStorage', localStorageMock)\n })\n\n afterEach(() => {\n vi.unstubAllGlobals()\n })\n\n const writeClipboard = (data: ClipboardPasteData) => {\n localStorageMock.setItem(localStorageClipboardKey, JSON.stringify(data))\n }\n\n it('should return false when the clipboard is empty', () => {\n expect(canPasteClipboardData({ path: 'items', schemaFields: [textField] })).toBe(false)\n })\n\n it('should return false when the clipboard contains invalid JSON', () => {\n localStorageMock.setItem(localStorageClipboardKey, 'not-json')\n\n expect(canPasteClipboardData({ path: 'items', schemaFields: [textField] })).toBe(false)\n })\n\n it('should return true for an array field with a matching schema', () => {\n writeClipboard(arrayClipboard)\n\n expect(canPasteClipboardData({ path: 'items', schemaFields: [textField] })).toBe(true)\n })\n\n it('should return false for an array field with an incompatible schema', () => {\n writeClipboard(arrayClipboard)\n\n expect(canPasteClipboardData({ path: 'items', schemaFields: [numberField] })).toBe(false)\n })\n\n it('should return true for a blocks field with a matching schema', () => {\n writeClipboard(blocksClipboard)\n\n expect(canPasteClipboardData({ path: 'layout', schemaBlocks: [ctaBlock] })).toBe(true)\n })\n\n it('should return false for a blocks field with an incompatible schema', () => {\n writeClipboard(blocksClipboard)\n\n expect(canPasteClipboardData({ path: 'layout', schemaBlocks: [otherBlock] })).toBe(false)\n })\n\n it('should return false when pasting array data into a blocks field', () => {\n writeClipboard(arrayClipboard)\n\n expect(canPasteClipboardData({ path: 'layout', schemaBlocks: [ctaBlock] })).toBe(false)\n })\n})\n"],"mappings":"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","ignoreList":[]}
|