chore: consolidates server-side edit view props
This commit is contained in:
@@ -112,19 +112,14 @@ export const Account = async ({
|
||||
action: `${serverURL}${api}/${userSlug}/${data?.id}?locale=${locale.code}`,
|
||||
apiURL: `${serverURL}${api}/${userSlug}/${data?.id}?locale=${locale.code}`,
|
||||
collectionSlug: userSlug,
|
||||
config,
|
||||
data,
|
||||
docPermissions: collectionPermissions,
|
||||
docPreferences,
|
||||
hasSavePermission: collectionPermissions?.update?.permission,
|
||||
i18n: req.i18n,
|
||||
initPageResult: page,
|
||||
initialState,
|
||||
locale,
|
||||
payload,
|
||||
permissions,
|
||||
searchParams,
|
||||
updatedAt: '', // TODO
|
||||
user,
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -53,7 +53,6 @@ export const Document = async ({ page, params, searchParams }: Props) => {
|
||||
const isEditing = Boolean(globalSlug || (collectionSlug && !!id))
|
||||
|
||||
const {
|
||||
i18n,
|
||||
payload,
|
||||
payload: { config },
|
||||
user,
|
||||
@@ -185,24 +184,18 @@ export const Document = async ({ page, params, searchParams }: Props) => {
|
||||
action: `${action}?${queryString.stringify(formQueryParams)}`,
|
||||
apiURL,
|
||||
canAccessAdmin: permissions?.canAccessAdmin,
|
||||
collectionConfig,
|
||||
collectionSlug,
|
||||
config,
|
||||
data,
|
||||
docPermissions,
|
||||
docPreferences,
|
||||
globalConfig,
|
||||
globalSlug,
|
||||
hasSavePermission,
|
||||
i18n,
|
||||
initPageResult: page,
|
||||
initialState,
|
||||
isEditing,
|
||||
locale,
|
||||
payload,
|
||||
permissions,
|
||||
params,
|
||||
searchParams,
|
||||
updatedAt: data?.updatedAt?.toString(),
|
||||
user,
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -4,12 +4,9 @@ import type { ServerSideEditViewProps } from './types'
|
||||
|
||||
export const sanitizeEditViewProps = (props: ServerSideEditViewProps) => {
|
||||
const clientSideProps = { ...props }
|
||||
delete clientSideProps.payload
|
||||
delete clientSideProps.config
|
||||
delete clientSideProps.initPageResult.req
|
||||
delete clientSideProps.initPageResult.collectionConfig
|
||||
delete clientSideProps.initPageResult.globalConfig
|
||||
delete clientSideProps.searchParams
|
||||
delete clientSideProps.i18n
|
||||
delete clientSideProps.collectionConfig
|
||||
delete clientSideProps.globalConfig
|
||||
|
||||
return clientSideProps as EditViewProps
|
||||
}
|
||||
|
||||
@@ -1,37 +1,25 @@
|
||||
import type { I18n } from '@payloadcms/translations'
|
||||
import type { FormState } from '@payloadcms/ui'
|
||||
import type { Permissions, User } from 'payload/auth'
|
||||
import type { EditViewProps, Locale } from 'payload/config'
|
||||
import type {
|
||||
Data,
|
||||
DocumentPermissions,
|
||||
DocumentPreferences,
|
||||
Payload,
|
||||
SanitizedConfig,
|
||||
} from 'payload/types'
|
||||
import type { EditViewProps } from 'payload/config'
|
||||
import type { Data, DocumentPermissions, DocumentPreferences } from 'payload/types'
|
||||
|
||||
import type { InitPageResult } from '../../utilities/initPage'
|
||||
|
||||
export type ServerSideEditViewProps = EditViewProps & {
|
||||
action?: string
|
||||
apiURL: string
|
||||
canAccessAdmin?: boolean
|
||||
collectionConfig?: SanitizedConfig['collections'][0]
|
||||
config: SanitizedConfig
|
||||
data: Data
|
||||
disableActions?: boolean
|
||||
disableLeaveWithoutSaving?: boolean
|
||||
docPermissions: DocumentPermissions
|
||||
docPreferences: DocumentPreferences
|
||||
globalConfig?: SanitizedConfig['globals'][0]
|
||||
hasSavePermission?: boolean
|
||||
i18n: I18n
|
||||
id?: string
|
||||
initPageResult: InitPageResult
|
||||
initialState?: FormState
|
||||
isEditing?: boolean
|
||||
locale: Locale
|
||||
payload: Payload
|
||||
permissions: Permissions
|
||||
params?: { [key: string]: string | string[] }
|
||||
searchParams: { [key: string]: string | string[] | undefined }
|
||||
// isLoading: boolean
|
||||
updatedAt: string
|
||||
user: User
|
||||
}
|
||||
|
||||
@@ -1,21 +1,15 @@
|
||||
import type { LivePreviewConfig } from 'payload/config'
|
||||
import type { Data } from 'payload/types'
|
||||
|
||||
import React from 'react'
|
||||
|
||||
import type { InitPageResult } from '../../utilities/initPage'
|
||||
import type { ServerSideEditViewProps } from '../Edit/types'
|
||||
|
||||
import { LivePreviewClient } from './index.client'
|
||||
import './index.scss'
|
||||
|
||||
type Props = {
|
||||
data: Data
|
||||
page: InitPageResult
|
||||
params: { [key: string]: string | string[] }
|
||||
searchParams: { [key: string]: string | string[] | undefined }
|
||||
}
|
||||
export const LivePreviewView: React.FC = async (props: Props) => {
|
||||
const { page } = props
|
||||
export const LivePreviewView: React.FC = async (props: ServerSideEditViewProps) => {
|
||||
const { initPageResult } = props
|
||||
|
||||
const {
|
||||
collectionConfig,
|
||||
globalConfig,
|
||||
@@ -27,7 +21,7 @@ export const LivePreviewView: React.FC = async (props: Props) => {
|
||||
},
|
||||
} = {},
|
||||
} = {},
|
||||
} = page
|
||||
} = initPageResult
|
||||
|
||||
// TODO(JAKE): not sure what `data` is or what it should be
|
||||
const { data = {} } = props
|
||||
|
||||
@@ -5,23 +5,19 @@ import type { Document } from 'payload/types'
|
||||
import { notFound } from 'next/navigation'
|
||||
import React from 'react'
|
||||
|
||||
import type { InitPageResult } from '../../utilities/initPage'
|
||||
import type { ServerSideEditViewProps } from '../Edit/types'
|
||||
|
||||
import { DefaultVersionView } from './Default'
|
||||
|
||||
type Props = {
|
||||
page: InitPageResult
|
||||
params: { [key: string]: string | string[] }
|
||||
searchParams: { [key: string]: string | string[] | undefined }
|
||||
}
|
||||
export const VersionView: React.FC = async (props: Props) => {
|
||||
const { page, params } = props
|
||||
export const VersionView: React.FC = async (props: ServerSideEditViewProps) => {
|
||||
const { initPageResult, params } = props
|
||||
|
||||
const {
|
||||
collectionConfig,
|
||||
globalConfig,
|
||||
permissions,
|
||||
req: { payload, payload: { config } = {}, user } = {},
|
||||
} = page
|
||||
} = initPageResult
|
||||
|
||||
// /entityType/:entitySlug/:id/versions/:versionID
|
||||
const [entityType, entitySlug, id, versions, versionID] = params.segments
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { getTranslation } from '@payloadcms/translations'
|
||||
import { Gutter } from '@payloadcms/ui'
|
||||
import { notFound } from 'next/navigation'
|
||||
import React from 'react'
|
||||
@@ -14,25 +13,28 @@ import './index.scss'
|
||||
export const baseClass = 'versions'
|
||||
|
||||
export const VersionsView: React.FC<ServerSideEditViewProps> = async (props) => {
|
||||
const { config, i18n, payload, searchParams, user } = props
|
||||
const { id, initPageResult, searchParams } = props
|
||||
|
||||
const id = 'id' in props ? props.id : undefined
|
||||
const collectionConfig = 'collectionConfig' in props && props?.collectionConfig
|
||||
const globalConfig = 'globalConfig' in props && props?.globalConfig
|
||||
const {
|
||||
collectionConfig,
|
||||
globalConfig,
|
||||
req: {
|
||||
i18n,
|
||||
payload,
|
||||
payload: { config },
|
||||
user,
|
||||
},
|
||||
} = initPageResult
|
||||
|
||||
const collectionSlug = collectionConfig?.slug
|
||||
const globalSlug = globalConfig?.slug
|
||||
const { limit, page, sort } = searchParams
|
||||
|
||||
const {
|
||||
routes: { admin: adminRoute, api: apiRoute },
|
||||
routes: { api: apiRoute },
|
||||
serverURL,
|
||||
} = config
|
||||
|
||||
let docURL: string
|
||||
let entityLabel: string
|
||||
let slug: string
|
||||
let editURL: string
|
||||
let versionsData
|
||||
|
||||
if (collectionSlug) {
|
||||
@@ -51,12 +53,8 @@ export const VersionsView: React.FC<ServerSideEditViewProps> = async (props) =>
|
||||
},
|
||||
})
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
console.error(error) // eslint-disable-line no-console
|
||||
}
|
||||
|
||||
docURL = `${serverURL}${apiRoute}/${slug}/${id}`
|
||||
entityLabel = getTranslation(collectionConfig.labels.singular, i18n)
|
||||
editURL = `${adminRoute}/collections/${collectionSlug}/${id}`
|
||||
}
|
||||
|
||||
if (globalSlug) {
|
||||
@@ -74,16 +72,12 @@ export const VersionsView: React.FC<ServerSideEditViewProps> = async (props) =>
|
||||
},
|
||||
})
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
console.error(error) // eslint-disable-line no-console
|
||||
}
|
||||
|
||||
if (!versionsData) {
|
||||
return notFound()
|
||||
}
|
||||
|
||||
docURL = `${serverURL}${apiRoute}/globals/${globalSlug}`
|
||||
entityLabel = getTranslation(globalConfig.label, i18n)
|
||||
editURL = `${adminRoute}/globals/${globalSlug}`
|
||||
}
|
||||
|
||||
const columns = buildVersionColumns({
|
||||
|
||||
@@ -10,7 +10,11 @@
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"jsx": "preserve",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"lib": [
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"esnext"
|
||||
],
|
||||
"noEmit": true,
|
||||
"outDir": "./dist",
|
||||
"resolveJsonModule": true,
|
||||
@@ -18,7 +22,11 @@
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": false,
|
||||
"types": ["jest", "node", "@types/jest"],
|
||||
"types": [
|
||||
"jest",
|
||||
"node",
|
||||
"@types/jest"
|
||||
],
|
||||
"incremental": true,
|
||||
"isolatedModules": true,
|
||||
"plugins": [
|
||||
@@ -27,26 +35,59 @@
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"payload": ["./packages/payload/src"],
|
||||
"payload/*": ["./packages/payload/src/exports/*"],
|
||||
"@payloadcms/db-mongodb": ["./packages/db-mongodb/src"],
|
||||
"@payloadcms/richtext-lexical": ["./packages/richtext-lexical/src"],
|
||||
"@payloadcms/ui": ["./packages/ui/src/exports/index.ts"],
|
||||
"@payloadcms/ui/*": ["./packages/ui/src/exports/*"],
|
||||
"@payloadcms/ui/scss": ["./packages/ui/src/scss/styles.scss"],
|
||||
"@payloadcms/ui/scss/app.scss": ["./packages/ui/src/scss/app.scss"],
|
||||
"@payloadcms/translations": ["./packages/translations/src/exports/index.ts"],
|
||||
"payload": [
|
||||
"./packages/payload/src"
|
||||
],
|
||||
"payload/*": [
|
||||
"./packages/payload/src/exports/*"
|
||||
],
|
||||
"@payloadcms/db-mongodb": [
|
||||
"./packages/db-mongodb/src"
|
||||
],
|
||||
"@payloadcms/richtext-lexical": [
|
||||
"./packages/richtext-lexical/src"
|
||||
],
|
||||
"@payloadcms/ui": [
|
||||
"./packages/ui/src/exports/index.ts"
|
||||
],
|
||||
"@payloadcms/ui/*": [
|
||||
"./packages/ui/src/exports/*"
|
||||
],
|
||||
"@payloadcms/ui/scss": [
|
||||
"./packages/ui/src/scss/styles.scss"
|
||||
],
|
||||
"@payloadcms/ui/scss/app.scss": [
|
||||
"./packages/ui/src/scss/app.scss"
|
||||
],
|
||||
"@payloadcms/translations": [
|
||||
"./packages/translations/src/exports/index.ts"
|
||||
],
|
||||
"@payloadcms/translations/client": [
|
||||
"./packages/translations/src/_generatedFiles_/client/index.ts"
|
||||
],
|
||||
"@payloadcms/translations/api": ["./packages/translations/src/_generatedFiles_/api/index.ts"],
|
||||
"@payloadcms/next/*": ["./packages/next/src/*"],
|
||||
"@payloadcms/next": ["./packages/next/src/exports/*"],
|
||||
"@payloadcms/graphql": ["./packages/graphql/src"],
|
||||
"@payload-config": ["./test/_community/config.ts"]
|
||||
"@payloadcms/translations/api": [
|
||||
"./packages/translations/src/_generatedFiles_/api/index.ts"
|
||||
],
|
||||
"@payloadcms/next/*": [
|
||||
"./packages/next/src/*"
|
||||
],
|
||||
"@payloadcms/next": [
|
||||
"./packages/next/src/exports/*"
|
||||
],
|
||||
"@payloadcms/graphql": [
|
||||
"./packages/graphql/src"
|
||||
],
|
||||
"@payload-config": [
|
||||
"./test/_community/config.ts"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exclude": ["dist", "build", "temp", "node_modules"],
|
||||
"exclude": [
|
||||
"dist",
|
||||
"build",
|
||||
"temp",
|
||||
"node_modules"
|
||||
],
|
||||
"composite": true,
|
||||
"references": [
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user