feat(richtext-lexical)!: sub-field hooks and localization support (#6591)
## BREAKING - Our internal field hook methods now have new required `schemaPath` and path `props`. This affects the following functions, if you are using those: `afterChangeTraverseFields`, `afterReadTraverseFields`, `beforeChangeTraverseFields`, `beforeValidateTraverseFields`, `afterReadPromise` - The afterChange field hook's `value` is now the value AFTER the previous hooks were run. Previously, this was the original value, which I believe is a bug - Only relevant if you have built your own richText adapter: the richText adapter `populationPromises` property has been renamed to `graphQLPopulationPromises` and is now only run for graphQL. Previously, it was run for graphQL AND the rest API. To migrate, use `hooks.afterRead` to run population for the rest API - Only relevant if you have built your own lexical features: The `populationPromises` server feature property has been renamed to `graphQLPopulationPromises` and is now only run for graphQL. Previously, it was run for graphQL AND the rest API. To migrate, use `hooks.afterRead` to run population for the rest API - Serialized lexical link and upload nodes now have a new `id` property. While not breaking, localization / hooks will not work for their fields until you have migrated to that. Re-saving the old document on the new version will automatically add the `id` property for you. You will also get a bunch of console logs for every lexical node which is not migrated
This commit is contained in:
@@ -5,7 +5,9 @@ import type { AdapterArguments } from '../types.js'
|
||||
import { populate } from './populate.js'
|
||||
import { recurseNestedFields } from './recurseNestedFields.js'
|
||||
|
||||
export type Args = Parameters<RichTextAdapter<any[], AdapterArguments>['populationPromises']>[0]
|
||||
export type Args = Parameters<
|
||||
RichTextAdapter<any[], AdapterArguments>['graphQLPopulationPromises']
|
||||
>[0]
|
||||
|
||||
type RecurseRichTextArgs = {
|
||||
children: unknown[]
|
||||
|
||||
@@ -52,15 +52,7 @@ export function slateEditor(
|
||||
FieldComponent: RichTextField,
|
||||
generateComponentMap: getGenerateComponentMap(args),
|
||||
generateSchemaMap: getGenerateSchemaMap(args),
|
||||
outputSchema: ({ isRequired }) => {
|
||||
return {
|
||||
type: withNullableJSONSchemaType('array', isRequired),
|
||||
items: {
|
||||
type: 'object',
|
||||
},
|
||||
}
|
||||
},
|
||||
populationPromises({
|
||||
graphQLPopulationPromises({
|
||||
context,
|
||||
currentDepth,
|
||||
depth,
|
||||
@@ -98,6 +90,58 @@ export function slateEditor(
|
||||
})
|
||||
}
|
||||
},
|
||||
hooks: {
|
||||
afterRead: [
|
||||
({
|
||||
context: _context,
|
||||
currentDepth,
|
||||
depth,
|
||||
draft,
|
||||
field: _field,
|
||||
fieldPromises,
|
||||
findMany,
|
||||
flattenLocales,
|
||||
overrideAccess,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
siblingData,
|
||||
}) => {
|
||||
const context: any = _context
|
||||
const field = _field as any
|
||||
if (
|
||||
field.admin?.elements?.includes('relationship') ||
|
||||
field.admin?.elements?.includes('upload') ||
|
||||
field.admin?.elements?.includes('link') ||
|
||||
!field?.admin?.elements
|
||||
) {
|
||||
richTextRelationshipPromise({
|
||||
context,
|
||||
currentDepth,
|
||||
depth,
|
||||
draft,
|
||||
field,
|
||||
fieldPromises,
|
||||
findMany,
|
||||
flattenLocales,
|
||||
overrideAccess,
|
||||
populationPromises,
|
||||
req,
|
||||
showHiddenFields,
|
||||
siblingDoc: siblingData,
|
||||
})
|
||||
}
|
||||
},
|
||||
],
|
||||
},
|
||||
outputSchema: ({ isRequired }) => {
|
||||
return {
|
||||
type: withNullableJSONSchemaType('array', isRequired),
|
||||
items: {
|
||||
type: 'object',
|
||||
},
|
||||
}
|
||||
},
|
||||
validate: richTextValidate,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user