Skip to content

Commit 51c951f

Browse files
fix: sanitized versions type was incorrect (#14810)
Updates the config.versions (on the sanitized config) to be proper. #### Before ```ts versions: SanitizedCollectionVersions // not accurate ``` #### After ```ts versions?: SanitizedCollectionVersions ``` Previously sanitization did not remove the versions key when it was set to false so the actual type should have been `versions: SanitizedCollectionVersions | false`. I chose to remove the versions key if it is false in the sanitization function so it is easier to work with, i.e. optional chaining. Also adds importable helper functions: ```ts import { getAutosaveInterval, getVersionsMax, hasAutosaveEnabled, hasDraftsEnabled, hasDraftValidationEnabled, hasScheduledPublishEnabled, } from 'payload/shared' ```
1 parent 1c3417d commit 51c951f

File tree

44 files changed

+254
-171
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+254
-171
lines changed

packages/db-mongodb/src/utilities/buildJoinAggregation.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
type JoinQuery,
1212
type SanitizedCollectionConfig,
1313
} from 'payload'
14-
import { fieldShouldBeLocalized } from 'payload/shared'
14+
import { fieldShouldBeLocalized, hasDraftsEnabled } from 'payload/shared'
1515

1616
import type { MongooseAdapter } from '../index.js'
1717
import type { CollectionModel } from '../types.js'
@@ -282,7 +282,7 @@ export const buildJoinAggregation = async ({
282282

283283
let JoinModel: CollectionModel | undefined
284284

285-
const useDrafts = (draftsEnabled || versions) && Boolean(collectionConfig.versions.drafts)
285+
const useDrafts = (draftsEnabled || versions) && hasDraftsEnabled(collectionConfig)
286286

287287
if (useDrafts) {
288288
JoinModel = adapter.versions[collectionConfig.slug]

packages/drizzle/src/createGlobalVersion.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { CreateGlobalVersionArgs, JsonObject, TypeWithVersion } from 'paylo
22

33
import { sql } from 'drizzle-orm'
44
import { buildVersionGlobalFields } from 'payload'
5+
import { hasDraftsEnabled } from 'payload/shared'
56
import toSnakeCase from 'to-snake-case'
67

78
import type { DrizzleAdapter } from './types.js'
@@ -51,7 +52,7 @@ export async function createGlobalVersion<T extends JsonObject = JsonObject>(
5152
})
5253

5354
const table = this.tables[tableName]
54-
if (global.versions.drafts) {
55+
if (hasDraftsEnabled(global)) {
5556
await this.execute({
5657
db,
5758
sql: sql`

packages/drizzle/src/schema/buildRawSchema.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
buildVersionCompoundIndexes,
44
buildVersionGlobalFields,
55
} from 'payload'
6+
import { hasDraftsEnabled } from 'payload/shared'
67
import toSnakeCase from 'to-snake-case'
78

89
import type { DrizzleAdapter, RawIndex, SetColumnID } from '../types.js'
@@ -101,7 +102,7 @@ export const buildRawSchema = ({
101102
buildTable({
102103
adapter,
103104
blocksTableNameMap: {},
104-
disableNotNull: !!global?.versions?.drafts,
105+
disableNotNull: hasDraftsEnabled(global),
105106
disableUnique: false,
106107
fields: global.flattenedFields,
107108
parentIsLocalized: false,

packages/graphql/src/schema/initGlobals.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const { singular } = pluralize
55
import type { Field, GraphQLInfo, SanitizedConfig, SanitizedGlobalConfig } from 'payload'
66

77
import { buildVersionGlobalFields, toWords } from 'payload'
8+
import { hasDraftsEnabled } from 'payload/shared'
89

910
import { docAccessResolver } from '../resolvers/globals/docAccess.js'
1011
import { findOne } from '../resolvers/globals/findOne.js'
@@ -26,15 +27,15 @@ type InitGlobalsGraphQLArgs = {
2627
export function initGlobals({ config, graphqlResult }: InitGlobalsGraphQLArgs): void {
2728
Object.keys(graphqlResult.globals.config).forEach((slug) => {
2829
const global: SanitizedGlobalConfig = graphqlResult.globals.config[slug]
29-
const { fields, graphQL, versions } = global
30+
const { fields, graphQL } = global
3031

3132
if (graphQL === false) {
3233
return
3334
}
3435

3536
const formattedName = graphQL?.name ? graphQL.name : singular(toWords(global.slug, true))
3637

37-
const forceNullableObjectType = Boolean(versions?.drafts)
38+
const forceNullableObjectType = hasDraftsEnabled(global)
3839

3940
if (!graphqlResult.globals.graphQL) {
4041
graphqlResult.globals.graphQL = {}

packages/next/src/views/API/index.client.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { useSearchParams } from 'next/navigation.js'
1818

1919
import './index.scss'
2020

21+
import { hasDraftsEnabled } from 'payload/shared'
2122
import * as React from 'react'
2223

2324
import { LocaleSelector } from './LocaleSelector/index.js'
@@ -53,12 +54,12 @@ export const APIViewClient: React.FC = () => {
5354
let docEndpoint: string = ''
5455

5556
if (collectionConfig) {
56-
draftsEnabled = Boolean(collectionConfig.versions?.drafts)
57+
draftsEnabled = hasDraftsEnabled(collectionConfig)
5758
docEndpoint = `/${collectionSlug}/${id}`
5859
}
5960

6061
if (globalConfig) {
61-
draftsEnabled = Boolean(globalConfig.versions?.drafts)
62+
draftsEnabled = hasDraftsEnabled(globalConfig)
6263
docEndpoint = `/globals/${globalSlug}`
6364
}
6465

packages/next/src/views/Document/getDocumentPermissions.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
isEditing as getIsEditing,
1212
} from '@payloadcms/ui/shared'
1313
import { docAccessOperation, docAccessOperationGlobal, logError } from 'payload'
14+
import { hasDraftsEnabled } from 'payload/shared'
1415

1516
export const getDocumentPermissions = async (args: {
1617
collectionConfig?: SanitizedCollectionConfig
@@ -73,7 +74,7 @@ export const getDocumentPermissions = async (args: {
7374
req,
7475
})
7576

76-
if (globalConfig.versions?.drafts) {
77+
if (hasDraftsEnabled(globalConfig)) {
7778
hasPublishPermission = (
7879
await docAccessOperationGlobal({
7980
data: {

packages/next/src/views/Document/getVersions.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
type SanitizedGlobalConfig,
99
type TypedUser,
1010
} from 'payload'
11+
import { hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared'
1112

1213
type Args = {
1314
collectionConfig?: SanitizedCollectionConfig
@@ -79,7 +80,7 @@ export const getVersions = async ({
7980
}
8081
}
8182

82-
if (versionsConfig?.drafts) {
83+
if (hasDraftsEnabled(collectionConfig)) {
8384
// Find out if a published document exists
8485
if (doc?._status === 'published') {
8586
publishedDoc = doc
@@ -126,7 +127,7 @@ export const getVersions = async ({
126127
hasPublishedDoc = true
127128
}
128129

129-
if (versionsConfig.drafts?.autosave) {
130+
if (hasAutosaveEnabled(collectionConfig)) {
130131
const mostRecentVersion = await payload.findVersions({
131132
collection: collectionConfig.slug,
132133
depth: 0,
@@ -209,7 +210,7 @@ export const getVersions = async ({
209210

210211
if (globalConfig) {
211212
// Find out if a published document exists
212-
if (versionsConfig?.drafts) {
213+
if (hasDraftsEnabled(globalConfig)) {
213214
if (doc?._status === 'published') {
214215
publishedDoc = doc
215216
} else {
@@ -228,7 +229,7 @@ export const getVersions = async ({
228229
hasPublishedDoc = true
229230
}
230231

231-
if (versionsConfig.drafts?.autosave) {
232+
if (hasAutosaveEnabled(globalConfig)) {
232233
const mostRecentVersion = await payload.findGlobalVersions({
233234
slug: globalConfig.slug,
234235
limit: 1,

packages/next/src/views/Document/index.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { isEditing as getIsEditing } from '@payloadcms/ui/shared'
2222
import { buildFormState } from '@payloadcms/ui/utilities/buildFormState'
2323
import { notFound, redirect } from 'next/navigation.js'
2424
import { isolateObjectProperty, logError } from 'payload'
25-
import { formatAdminURL } from 'payload/shared'
25+
import { formatAdminURL, hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared'
2626
import React from 'react'
2727

2828
import type { GenerateEditViewMetadata } from './getMetaBySegment.js'
@@ -264,7 +264,7 @@ export const renderDocument = async ({
264264

265265
const formattedParams = new URLSearchParams()
266266

267-
if (collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts) {
267+
if (hasDraftsEnabled(collectionConfig || globalConfig)) {
268268
formattedParams.append('draft', 'true')
269269
}
270270

@@ -314,10 +314,7 @@ export const renderDocument = async ({
314314
* Handle case where autoSave is enabled and the document is being created
315315
* => create document and redirect
316316
*/
317-
const shouldAutosave =
318-
hasSavePermission &&
319-
((collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave) ||
320-
(globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave))
317+
const shouldAutosave = hasSavePermission && hasAutosaveEnabled(collectionConfig || globalConfig)
321318

322319
const validateDraftData =
323320
collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.validate

packages/next/src/views/Document/renderDocumentSlots.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import type {
1919

2020
import { ViewDescription } from '@payloadcms/ui'
2121
import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'
22+
import { hasDraftsEnabled } from 'payload/shared'
2223

2324
import { getDocumentPermissions } from './getDocumentPermissions.js'
2425

@@ -120,7 +121,7 @@ export const renderDocumentSlots: (args: {
120121
}
121122

122123
if (hasSavePermission) {
123-
if (collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts) {
124+
if (hasDraftsEnabled(collectionConfig || globalConfig)) {
124125
const CustomPublishButton =
125126
collectionConfig?.admin?.components?.edit?.PublishButton ||
126127
globalConfig?.admin?.components?.elements?.PublishButton
@@ -137,9 +138,7 @@ export const renderDocumentSlots: (args: {
137138
collectionConfig?.admin?.components?.edit?.SaveDraftButton ||
138139
globalConfig?.admin?.components?.elements?.SaveDraftButton
139140

140-
const draftsEnabled =
141-
(collectionConfig?.versions?.drafts && !collectionConfig?.versions?.drafts?.autosave) ||
142-
(globalConfig?.versions?.drafts && !globalConfig?.versions?.drafts?.autosave)
141+
const draftsEnabled = hasDraftsEnabled(collectionConfig || globalConfig)
143142

144143
if ((draftsEnabled || unsavedDraftWithValidations) && CustomSaveDraftButton) {
145144
components.SaveDraftButton = RenderServerComponent({

packages/next/src/views/Version/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'
1111
import { getClientSchemaMap } from '@payloadcms/ui/utilities/getClientSchemaMap'
1212
import { getSchemaMap } from '@payloadcms/ui/utilities/getSchemaMap'
1313
import { notFound } from 'next/navigation.js'
14+
import { hasDraftsEnabled } from 'payload/shared'
1415
import React from 'react'
1516

1617
import type { CompareOption } from './Default/types.js'
@@ -38,7 +39,7 @@ export async function VersionView(props: DocumentViewServerProps) {
3839
const collectionSlug = collectionConfig?.slug
3940
const globalSlug = globalConfig?.slug
4041

41-
const draftsEnabled = (collectionConfig ?? globalConfig)?.versions?.drafts
42+
const draftsEnabled = hasDraftsEnabled(collectionConfig || globalConfig)
4243

4344
const localeCodesFromParams = searchParams.localeCodes
4445
? JSON.parse(searchParams.localeCodes as string)

0 commit comments

Comments
 (0)