diff --git a/packages/live-preview/src/handleMessage.ts b/packages/live-preview/src/handleMessage.ts index dbf517f7a9..ed7ebeb47f 100644 --- a/packages/live-preview/src/handleMessage.ts +++ b/packages/live-preview/src/handleMessage.ts @@ -1,9 +1,15 @@ +import type { FieldSchemaJSON } from 'payload' + import type { LivePreviewMessageEvent } from './types.js' import { isLivePreviewEvent } from './isLivePreviewEvent.js' import { mergeData } from './mergeData.js' -const _payloadLivePreview = { +const _payloadLivePreview: { + fieldSchema: FieldSchemaJSON | undefined + // eslint-disable-next-line @typescript-eslint/no-explicit-any + previousData: any +} = { /** * For performance reasons, `fieldSchemaJSON` will only be sent once on the initial message * We need to cache this value so that it can be used across subsequent messages @@ -18,7 +24,7 @@ const _payloadLivePreview = { previousData: undefined, } -export const handleMessage = async (args: { +export const handleMessage = async >(args: { apiRoute?: string depth?: number event: LivePreviewMessageEvent diff --git a/packages/live-preview/src/mergeData.ts b/packages/live-preview/src/mergeData.ts index ee7b7cf38d..1448377475 100644 --- a/packages/live-preview/src/mergeData.ts +++ b/packages/live-preview/src/mergeData.ts @@ -4,7 +4,15 @@ import type { PopulationsByCollection } from './types.js' import { traverseFields } from './traverseFields.js' -const defaultRequestHandler = ({ apiPath, endpoint, serverURL }) => { +const defaultRequestHandler = ({ + apiPath, + endpoint, + serverURL, +}: { + apiPath: string + endpoint: string + serverURL: string +}) => { const url = `${serverURL}${apiPath}/${endpoint}` return fetch(url, { credentials: 'include', @@ -19,7 +27,7 @@ const defaultRequestHandler = ({ apiPath, endpoint, serverURL }) => { // Instead, we keep track of the old locale ourselves and trigger a re-population when it changes let prevLocale: string | undefined -export const mergeData = async (args: { +export const mergeData = async >(args: { apiRoute?: string collectionPopulationRequestHandler?: ({ apiPath, @@ -86,7 +94,7 @@ export const mergeData = async (args: { if (res?.docs?.length > 0) { res.docs.forEach((doc) => { - populationsByCollection[collection].forEach((population) => { + populationsByCollection[collection]?.forEach((population) => { if (population.id === doc.id) { population.ref[population.accessor] = doc } diff --git a/packages/live-preview/src/subscribe.ts b/packages/live-preview/src/subscribe.ts index 2f09121be4..6cbe1bf4e7 100644 --- a/packages/live-preview/src/subscribe.ts +++ b/packages/live-preview/src/subscribe.ts @@ -1,6 +1,6 @@ import { handleMessage } from './handleMessage.js' -export const subscribe = (args: { +export const subscribe = >(args: { apiRoute?: string callback: (data: T) => void depth?: number diff --git a/packages/live-preview/src/traverseFields.ts b/packages/live-preview/src/traverseFields.ts index d9f9bbb528..caa024efb4 100644 --- a/packages/live-preview/src/traverseFields.ts +++ b/packages/live-preview/src/traverseFields.ts @@ -1,17 +1,16 @@ -import type { DocumentEvent } from 'payload' -import type { fieldSchemaToJSON } from 'payload/shared' +import type { DocumentEvent, FieldSchemaJSON } from 'payload' import type { PopulationsByCollection } from './types.js' import { traverseRichText } from './traverseRichText.js' -export const traverseFields = (args: { +export const traverseFields = >(args: { externallyUpdatedRelationship?: DocumentEvent - fieldSchema: ReturnType + fieldSchema: FieldSchemaJSON incomingData: T localeChanged: boolean populationsByCollection: PopulationsByCollection - result: T + result: Record }): void => { const { externallyUpdatedRelationship, @@ -48,7 +47,7 @@ export const traverseFields = (args: { traverseFields({ externallyUpdatedRelationship, - fieldSchema: fieldSchema.fields, + fieldSchema: fieldSchema.fields!, incomingData: incomingRow, localeChanged, populationsByCollection, @@ -64,7 +63,7 @@ export const traverseFields = (args: { case 'blocks': if (Array.isArray(incomingData[fieldName])) { result[fieldName] = incomingData[fieldName].map((incomingBlock, i) => { - const incomingBlockJSON = fieldSchema.blocks[incomingBlock.blockType] + const incomingBlockJSON = fieldSchema.blocks?.[incomingBlock.blockType] if (!result[fieldName]) { result[fieldName] = [] @@ -82,7 +81,7 @@ export const traverseFields = (args: { traverseFields({ externallyUpdatedRelationship, - fieldSchema: incomingBlockJSON.fields, + fieldSchema: incomingBlockJSON!.fields!, incomingData: incomingBlock, localeChanged, populationsByCollection, @@ -106,7 +105,7 @@ export const traverseFields = (args: { traverseFields({ externallyUpdatedRelationship, - fieldSchema: fieldSchema.fields, + fieldSchema: fieldSchema.fields!, incomingData: incomingData[fieldName] || {}, localeChanged, populationsByCollection, @@ -166,11 +165,11 @@ export const traverseFields = (args: { incomingRelation === externallyUpdatedRelationship?.id if (hasChanged || hasUpdated || localeChanged) { - if (!populationsByCollection[fieldSchema.relationTo]) { - populationsByCollection[fieldSchema.relationTo] = [] + if (!populationsByCollection[fieldSchema.relationTo!]) { + populationsByCollection[fieldSchema.relationTo!] = [] } - populationsByCollection[fieldSchema.relationTo].push({ + populationsByCollection[fieldSchema.relationTo!]?.push({ id: incomingRelation, accessor: i, ref: result[fieldName], @@ -265,11 +264,11 @@ export const traverseFields = (args: { // if the new value is not empty, populate it // otherwise set the value to null if (newID) { - if (!populationsByCollection[fieldSchema.relationTo]) { - populationsByCollection[fieldSchema.relationTo] = [] + if (!populationsByCollection[fieldSchema.relationTo!]) { + populationsByCollection[fieldSchema.relationTo!] = [] } - populationsByCollection[fieldSchema.relationTo].push({ + populationsByCollection[fieldSchema.relationTo!]?.push({ id: newID, accessor: fieldName, ref: result as Record, diff --git a/packages/live-preview/src/traverseRichText.ts b/packages/live-preview/src/traverseRichText.ts index 5eca16b5a4..878595b01e 100644 --- a/packages/live-preview/src/traverseRichText.ts +++ b/packages/live-preview/src/traverseRichText.ts @@ -79,7 +79,7 @@ export const traverseRichText = ({ populationsByCollection[incomingData.relationTo] = [] } - populationsByCollection[incomingData.relationTo].push({ + populationsByCollection[incomingData.relationTo]?.push({ id: incomingData[key] && typeof incomingData[key] === 'object' ? incomingData[key].id diff --git a/packages/live-preview/tsconfig.json b/packages/live-preview/tsconfig.json index 14564e0715..45209999a2 100644 --- a/packages/live-preview/tsconfig.json +++ b/packages/live-preview/tsconfig.json @@ -1,9 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - /* TODO: remove the following lines */ - "strict": false, - "noUncheckedIndexedAccess": false, - }, "references": [{ "path": "../payload" }] }