@payloadcms/ui 4.0.0-canary.35 → 4.0.0-canary.36
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/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/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/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/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/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/views/API/index.css +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.css +2 -0
- 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/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/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/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 +5 -5
- 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/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/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;
|
|
@@ -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.36",
|
|
4
4
|
"homepage": "https://payloadcms.com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -290,7 +290,7 @@
|
|
|
290
290
|
"ts-essentials": "10.0.3",
|
|
291
291
|
"use-context-selector": "2.0.0",
|
|
292
292
|
"uuid": "14.0.0",
|
|
293
|
-
"@payloadcms/translations": "4.0.0-canary.
|
|
293
|
+
"@payloadcms/translations": "4.0.0-canary.36"
|
|
294
294
|
},
|
|
295
295
|
"devDependencies": {
|
|
296
296
|
"@babel/cli": "7.27.2",
|
|
@@ -305,12 +305,12 @@
|
|
|
305
305
|
"esbuild": "0.27.1",
|
|
306
306
|
"esbuild-sass-plugin": "3.3.1",
|
|
307
307
|
"@payloadcms/eslint-config": "3.28.0",
|
|
308
|
-
"payload": "4.0.0-canary.
|
|
308
|
+
"payload": "4.0.0-canary.36"
|
|
309
309
|
},
|
|
310
310
|
"peerDependencies": {
|
|
311
311
|
"react": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
312
312
|
"react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
313
|
-
"payload": "4.0.0-canary.
|
|
313
|
+
"payload": "4.0.0-canary.36"
|
|
314
314
|
},
|
|
315
315
|
"engines": {
|
|
316
316
|
"node": ">=24.15.0"
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
"build:types": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" tsc --emitDeclarationOnly --outDir dist",
|
|
330
330
|
"build:without_reactcompiler": "rm -rf dist && rm -rf tsconfig.tsbuildinfo && pnpm copyfiles && pnpm build:types && pnpm build:swc",
|
|
331
331
|
"clean": "rimraf -g {dist,*.tsbuildinfo,esbuild}",
|
|
332
|
-
"copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
|
|
332
|
+
"copyfiles": "copyfiles -u 1 -e \"**/*.spec.*\" \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
|
|
333
333
|
"lint": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" eslint .",
|
|
334
334
|
"lint:fix": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" eslint . --fix"
|
|
335
335
|
}
|
|
@@ -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":[]}
|