diff --git a/.prettierignore b/.prettierignore index 17883dc0e..d76d25c0a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,3 +10,5 @@ **/temp **/docs/** tsconfig.json +packages/payload/*.js +packages/payload/*.d.ts diff --git a/package.json b/package.json index d6ace21ed..ec204bc31 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "private": true, "type": "module", "workspaces:": [ diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index 2cf7dccca..6de410c56 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "description": "The officially supported MongoDB database adapter for Payload", "repository": { "type": "git", diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index c65f5de5d..c72f29b6c 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "description": "The officially supported Postgres database adapter for Payload", "repository": { "type": "git", diff --git a/packages/graphql/package.json b/packages/graphql/package.json index d69eafa5d..f7993cad4 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "main": "./src/index.ts", "types": "./src/index.d.ts", "type": "module", diff --git a/packages/next/package.json b/packages/next/package.json index 465acb729..7f0f168d3 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "main": "./src/index.js", "types": "./src/index.js", "type": "module", diff --git a/packages/next/src/layouts/Root/index.tsx b/packages/next/src/layouts/Root/index.tsx index f837470a4..24bdd7ed7 100644 --- a/packages/next/src/layouts/Root/index.tsx +++ b/packages/next/src/layouts/Root/index.tsx @@ -56,7 +56,7 @@ export const RootLayout = async ({ async function switchLanguageServerAction(lang: string): Promise { 'use server' nextCookies().set({ - name: `${config.cookiePrefix || 'payload'}-lng'`, + name: `${config.cookiePrefix || 'payload'}-lng`, path: '/', value: lang, }) diff --git a/packages/next/src/utilities/getRequestLanguage.ts b/packages/next/src/utilities/getRequestLanguage.ts index bb9bd93c9..6c6c77c70 100644 --- a/packages/next/src/utilities/getRequestLanguage.ts +++ b/packages/next/src/utilities/getRequestLanguage.ts @@ -17,7 +17,7 @@ export const getRequestLanguage = ({ headers, }: GetRequestLanguageArgs): string => { const acceptLanguage = headers.get('Accept-Language') - const cookieLanguage = cookies.get(`${config.cookiePrefix || 'payload'}-lng'`) + const cookieLanguage = cookies.get(`${config.cookiePrefix || 'payload'}-lng`) const reqLanguage = (typeof cookieLanguage === 'string' ? cookieLanguage : cookieLanguage?.value) || diff --git a/packages/next/src/views/CreateFirstUser/index.tsx b/packages/next/src/views/CreateFirstUser/index.tsx index 814e52238..2c8e55716 100644 --- a/packages/next/src/views/CreateFirstUser/index.tsx +++ b/packages/next/src/views/CreateFirstUser/index.tsx @@ -12,7 +12,7 @@ import './index.scss' export { generateCreateFirstUserMetadata } from './meta.js' -export const CreateFirstUser: React.FC = async ({ initPageResult }) => { +export const CreateFirstUserView: React.FC = async ({ initPageResult }) => { const { req, req: { diff --git a/packages/next/src/views/Document/getViewsFromConfig.tsx b/packages/next/src/views/Document/getViewsFromConfig.tsx index d56cbf55b..4dafc9096 100644 --- a/packages/next/src/views/Document/getViewsFromConfig.tsx +++ b/packages/next/src/views/Document/getViewsFromConfig.tsx @@ -10,7 +10,7 @@ import type { import { APIView as DefaultAPIView } from '../API/index.js' import { EditView as DefaultEditView } from '../Edit/index.js' import { LivePreviewView as DefaultLivePreviewView } from '../LivePreview/index.js' -import { Unauthorized } from '../Unauthorized/index.js' +import { UnauthorizedView } from '../Unauthorized/index.js' import { VersionView as DefaultVersionView } from '../Version/index.js' import { VersionsView as DefaultVersionsView } from '../Versions/index.js' import { getCustomViewByKey } from './getCustomViewByKey.js' @@ -77,7 +77,7 @@ export const getViewsFromConfig = ({ CustomView = getCustomViewByKey(views, 'Default') DefaultView = DefaultEditView } else { - ErrorView = Unauthorized + ErrorView = UnauthorizedView } break } @@ -87,7 +87,7 @@ export const getViewsFromConfig = ({ CustomView = getCustomViewByKey(views, 'Default') DefaultView = DefaultEditView } else { - ErrorView = Unauthorized + ErrorView = UnauthorizedView } break } @@ -118,7 +118,7 @@ export const getViewsFromConfig = ({ CustomView = getCustomViewByKey(views, 'Versions') DefaultView = DefaultVersionsView } else { - ErrorView = Unauthorized + ErrorView = UnauthorizedView } break } @@ -150,7 +150,7 @@ export const getViewsFromConfig = ({ CustomView = getCustomViewByKey(views, 'Version') DefaultView = DefaultVersionView } else { - ErrorView = Unauthorized + ErrorView = UnauthorizedView } } else { const baseRoute = [adminRoute, collectionEntity, collectionSlug, segment3] @@ -191,7 +191,7 @@ export const getViewsFromConfig = ({ CustomView = getCustomViewByKey(views, 'Default') DefaultView = DefaultEditView } else { - ErrorView = Unauthorized + ErrorView = UnauthorizedView } break } @@ -219,7 +219,7 @@ export const getViewsFromConfig = ({ CustomView = getCustomViewByKey(views, 'Versions') DefaultView = DefaultVersionsView } else { - ErrorView = Unauthorized + ErrorView = UnauthorizedView } break } @@ -229,7 +229,7 @@ export const getViewsFromConfig = ({ CustomView = getCustomViewByKey(views, 'Default') DefaultView = DefaultEditView } else { - ErrorView = Unauthorized + ErrorView = UnauthorizedView } break } @@ -244,7 +244,7 @@ export const getViewsFromConfig = ({ CustomView = getCustomViewByKey(views, 'Version') DefaultView = DefaultVersionView } else { - ErrorView = Unauthorized + ErrorView = UnauthorizedView } } else { const baseRoute = [adminRoute, 'globals', globalSlug].filter(Boolean).join('/') diff --git a/packages/next/src/views/Document/index.tsx b/packages/next/src/views/Document/index.tsx index e6fc96c76..b2b4003a0 100644 --- a/packages/next/src/views/Document/index.tsx +++ b/packages/next/src/views/Document/index.tsx @@ -15,6 +15,7 @@ import React from 'react' import type { GenerateEditViewMetadata } from './getMetaBySegment.js' +import { NotFoundView } from '../NotFound/index.js' import { getMetaBySegment } from './getMetaBySegment.js' import { getViewsFromConfig } from './getViewsFromConfig.js' @@ -106,12 +107,8 @@ export const Document: React.FC = async ({ ErrorView = collectionViews?.ErrorView } - if (!CustomView && !DefaultView && !ViewOverride) { - if (ErrorView) { - return - } - - notFound() + if (!CustomView && !DefaultView && !ViewOverride && !ErrorView) { + ErrorView = NotFoundView } } @@ -143,12 +140,8 @@ export const Document: React.FC = async ({ DefaultView = globalViews?.DefaultView ErrorView = globalViews?.ErrorView - if (!CustomView && !DefaultView && !ViewOverride) { - if (ErrorView) { - return - } - - notFound() + if (!CustomView && !DefaultView && !ViewOverride && !ErrorView) { + ErrorView = NotFoundView } } } @@ -219,11 +212,15 @@ export const Document: React.FC = async ({ uploadEdits: undefined, }} > - + {ErrorView ? ( + + ) : ( + + )} diff --git a/packages/next/src/views/ForgotPassword/index.tsx b/packages/next/src/views/ForgotPassword/index.tsx index 72e4f90ad..87e58ba3d 100644 --- a/packages/next/src/views/ForgotPassword/index.tsx +++ b/packages/next/src/views/ForgotPassword/index.tsx @@ -13,7 +13,7 @@ export { generateForgotPasswordMetadata } from './meta.js' const Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default export const forgotPasswordBaseClass = 'forgot-password' -export const ForgotPassword: React.FC = ({ initPageResult }) => { +export const ForgotPasswordView: React.FC = ({ initPageResult }) => { const { req: { i18n, diff --git a/packages/next/src/views/List/index.tsx b/packages/next/src/views/List/index.tsx index fd23b1f2b..5a3e881f2 100644 --- a/packages/next/src/views/List/index.tsx +++ b/packages/next/src/views/List/index.tsx @@ -13,7 +13,7 @@ import React, { Fragment } from 'react' import type { DefaultListViewProps, ListPreferences } from './Default/types.js' -import { Unauthorized } from '../Unauthorized/index.js' +import { UnauthorizedView } from '../Unauthorized/index.js' import { DefaultListView } from './Default/index.js' export { generateListMetadata } from './meta.js' @@ -35,7 +35,7 @@ export const ListView: React.FC = async ({ initPageResult, searc const collectionSlug = collectionConfig?.slug if (!permissions?.collections?.[collectionSlug]?.read?.permission) { - return + return } let listPreferences: ListPreferences diff --git a/packages/next/src/views/Login/index.tsx b/packages/next/src/views/Login/index.tsx index e71b946d9..1919fbc65 100644 --- a/packages/next/src/views/Login/index.tsx +++ b/packages/next/src/views/Login/index.tsx @@ -11,7 +11,7 @@ export { generateLoginMetadata } from './meta.js' export const loginBaseClass = 'login' -export const Login: React.FC = ({ initPageResult, searchParams }) => { +export const LoginView: React.FC = ({ initPageResult, searchParams }) => { const { req } = initPageResult const { diff --git a/packages/next/src/views/Logout/index.tsx b/packages/next/src/views/Logout/index.tsx index f84f41a75..59d74d554 100644 --- a/packages/next/src/views/Logout/index.tsx +++ b/packages/next/src/views/Logout/index.tsx @@ -10,7 +10,7 @@ const baseClass = 'logout' export { generateLogoutMetadata } from './meta.js' -export const Logout: React.FC< +export const LogoutView: React.FC< AdminViewProps & { inactivity?: boolean } @@ -39,5 +39,5 @@ export const Logout: React.FC< } export const LogoutInactivity: React.FC = (props) => { - return + return } diff --git a/packages/next/src/views/NotFound/index.tsx b/packages/next/src/views/NotFound/index.tsx index fa85e0500..d70de66b8 100644 --- a/packages/next/src/views/NotFound/index.tsx +++ b/packages/next/src/views/NotFound/index.tsx @@ -1,6 +1,6 @@ import type { I18n } from '@payloadcms/translations' import type { Metadata } from 'next' -import type { SanitizedConfig } from 'payload/types' +import type { AdminViewComponent, SanitizedConfig } from 'payload/types' import { getNextI18n } from '@payloadcms/next/utilities' import { HydrateClientUser } from '@payloadcms/ui/elements/HydrateClientUser' @@ -65,3 +65,7 @@ export const NotFoundPage = async ({ ) } + +export const NotFoundView: AdminViewComponent = () => { + return +} diff --git a/packages/next/src/views/Root/getViewFromConfig.tsx b/packages/next/src/views/Root/getViewFromConfig.tsx index b6329f353..18f504fde 100644 --- a/packages/next/src/views/Root/getViewFromConfig.tsx +++ b/packages/next/src/views/Root/getViewFromConfig.tsx @@ -4,15 +4,15 @@ import type { AdminViewComponent } from 'payload/types' import type { initPage } from '../../utilities/initPage.js' import { Account } from '../Account/index.js' -import { CreateFirstUser } from '../CreateFirstUser/index.js' +import { CreateFirstUserView } from '../CreateFirstUser/index.js' import { Dashboard } from '../Dashboard/index.js' import { Document as DocumentView } from '../Document/index.js' -import { ForgotPassword, forgotPasswordBaseClass } from '../ForgotPassword/index.js' +import { ForgotPasswordView, forgotPasswordBaseClass } from '../ForgotPassword/index.js' import { ListView } from '../List/index.js' -import { Login, loginBaseClass } from '../Login/index.js' -import { Logout, LogoutInactivity } from '../Logout/index.js' +import { LoginView, loginBaseClass } from '../Login/index.js' +import { LogoutInactivity, LogoutView } from '../Logout/index.js' import { ResetPassword, resetPasswordBaseClass } from '../ResetPassword/index.js' -import { Unauthorized } from '../Unauthorized/index.js' +import { UnauthorizedView } from '../Unauthorized/index.js' import { Verify, verifyBaseClass } from '../Verify/index.js' import { getCustomViewByRoute } from './getCustomViewByRoute.js' @@ -24,12 +24,12 @@ const baseClasses = { } const oneSegmentViews = { - 'create-first-user': CreateFirstUser, - forgot: ForgotPassword, - login: Login, - logout: Logout, + 'create-first-user': CreateFirstUserView, + forgot: ForgotPasswordView, + login: LoginView, + logout: LogoutView, 'logout-inactivity': LogoutInactivity, - unauthorized: Unauthorized, + unauthorized: UnauthorizedView, } export const getViewFromConfig = ({ diff --git a/packages/next/src/views/Unauthorized/index.scss b/packages/next/src/views/Unauthorized/index.scss new file mode 100644 index 000000000..fda11639e --- /dev/null +++ b/packages/next/src/views/Unauthorized/index.scss @@ -0,0 +1,36 @@ +@import '../../scss/styles.scss'; + +.unauthorized { + margin-top: var(--base); + + & > * { + &:first-child { + margin-top: 0; + } + &:last-child { + margin-bottom: 0; + } + } + + &__button { + margin: 0; + } + + &--margin-top-large { + margin-top: calc(var(--base) * 2); + } + + @include large-break { + &--margin-top-large { + margin-top: var(--base); + } + } + + @include small-break { + margin-top: calc(var(--base) / 2); + + &--margin-top-large { + margin-top: calc(var(--base) / 2); + } + } +} diff --git a/packages/next/src/views/Unauthorized/index.tsx b/packages/next/src/views/Unauthorized/index.tsx index c06c7535b..64ee95268 100644 --- a/packages/next/src/views/Unauthorized/index.tsx +++ b/packages/next/src/views/Unauthorized/index.tsx @@ -5,11 +5,15 @@ import { Gutter } from '@payloadcms/ui/elements/Gutter' import LinkImport from 'next/link.js' import React from 'react' +import './index.scss' + const Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default export { generateUnauthorizedMetadata } from './meta.js' -export const Unauthorized: AdminViewComponent = ({ initPageResult }) => { +const baseClass = 'unauthorized' + +export const UnauthorizedView: AdminViewComponent = ({ initPageResult }) => { const { req: { i18n, @@ -22,11 +26,10 @@ export const Unauthorized: AdminViewComponent = ({ initPageResult }) => { } = initPageResult return ( - +

{i18n.t('error:unauthorized')}

{i18n.t('error:notAllowedToAccessPage')}

-
-
diff --git a/packages/next/src/webpackEntry.ts b/packages/next/src/webpackEntry.ts index 05abef645..aadffdb39 100644 --- a/packages/next/src/webpackEntry.ts +++ b/packages/next/src/webpackEntry.ts @@ -1,4 +1,4 @@ export { RootLayout } from './layouts/Root/index.js' export { Dashboard as DashboardPage } from './views/Dashboard/index.js' -export { Login } from './views/Login/index.js' +export { LoginView } from './views/Login/index.js' export { RootPage } from './views/Root/index.js' diff --git a/packages/payload/package.json b/packages/payload/package.json index 417c50fb0..9d761f23f 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "description": "Node, React and MongoDB Headless CMS and Application Framework", "license": "MIT", "main": "./src/index.ts", diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index b6c5656d6..5be7e024a 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,7 +1,7 @@ { "name": "@payloadcms/plugin-cloud-storage", "description": "The official cloud storage plugin for Payload CMS", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "main": "./src/index.ts", "types": "./src/index.ts", "type": "module", diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index acdc5e60f..e6c9eb2ec 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@payloadcms/plugin-cloud", "description": "The official Payload Cloud plugin", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "main": "./src/index.ts", "types": "./src/index.ts", "license": "MIT", diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index 0e7d28441..a0971ea42 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,7 +1,7 @@ { "name": "@payloadcms/plugin-form-builder", "description": "Form builder plugin for Payload CMS", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "homepage:": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index 3e8cf4480..160835a94 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "description": "The official Nested Docs plugin for Payload", "repository": { "type": "git", diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index 58484cde6..905931424 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "homepage:": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index 57a741f03..eaf1ed529 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "homepage:": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index d8b47545c..cbadbca0a 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "homepage:": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index 5b53e5064..0294df53e 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "description": "The officially supported Lexical richtext adapter for Payload", "repository": { "type": "git", diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index 317f9cce6..ad507b8ff 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "description": "The officially supported Slate richtext adapter for Payload", "repository": { "type": "git", diff --git a/packages/translations/package.json b/packages/translations/package.json index a80e01fa2..a98eadbf8 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "main": "./src/exports/index.ts", "types": "./src/types.ts", "type": "module", diff --git a/packages/ui/package.json b/packages/ui/package.json index 470113172..2fa5575a4 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-alpha.58", + "version": "3.0.0-alpha.59", "type": "module", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/ui/src/elements/SaveDraft/index.tsx b/packages/ui/src/elements/SaveDraft/index.tsx index e4d252a6c..ef670990f 100644 --- a/packages/ui/src/elements/SaveDraft/index.tsx +++ b/packages/ui/src/elements/SaveDraft/index.tsx @@ -25,7 +25,6 @@ const DefaultSaveDraftButton: React.FC = () => { const editDepth = useEditDepth() const { t } = useTranslation() const { submit } = useForm() - const label = t('general:save') const saveDraft = useCallback(async () => { const search = `?locale=${locale}&depth=0&fallback-locale=null&draft=true` @@ -74,7 +73,7 @@ const DefaultSaveDraftButton: React.FC = () => { size="small" type="button" > - {label} + {t('version:saveDraft')} ) }