@payloadcms/richtext-lexical 3.21.0 → 3.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/exports/client/bundled.css +1 -1
  2. package/dist/exports/client/chunk-PUXDVIHC.js +2 -0
  3. package/dist/exports/client/chunk-PUXDVIHC.js.map +7 -0
  4. package/dist/exports/client/chunk-UJAPUXH4.js +2 -0
  5. package/dist/exports/client/chunk-UJAPUXH4.js.map +7 -0
  6. package/dist/exports/client/{component-VJVZFYZJ.js → component-P5K7Z5NW.js} +2 -2
  7. package/dist/exports/client/componentInline-KK5V376W.js +2 -0
  8. package/dist/exports/client/index.js +10 -10
  9. package/dist/exports/client/index.js.map +3 -3
  10. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  11. package/dist/features/blocks/client/component/index.js +19 -9
  12. package/dist/features/blocks/client/component/index.js.map +1 -1
  13. package/dist/features/blocks/client/component/removeEmptyArrayValues.js +1 -1
  14. package/dist/features/blocks/client/component/removeEmptyArrayValues.js.map +1 -1
  15. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  16. package/dist/features/blocks/client/componentInline/index.js +16 -6
  17. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  18. package/dist/features/blocks/client/index.d.ts.map +1 -1
  19. package/dist/features/blocks/client/index.js +7 -4
  20. package/dist/features/blocks/client/index.js.map +1 -1
  21. package/dist/features/blocks/client/markdownTransformer.js +1 -1
  22. package/dist/features/blocks/client/markdownTransformer.js.map +1 -1
  23. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js +4 -4
  24. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js.map +1 -1
  25. package/dist/features/blocks/server/markdownTransformer.d.ts.map +1 -1
  26. package/dist/features/blocks/server/markdownTransformer.js +5 -4
  27. package/dist/features/blocks/server/markdownTransformer.js.map +1 -1
  28. package/dist/features/blocks/server/validate.d.ts.map +1 -1
  29. package/dist/features/blocks/server/validate.js +9 -3
  30. package/dist/features/blocks/server/validate.js.map +1 -1
  31. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  32. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +12 -10
  33. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  34. package/dist/features/experimental_table/markdownTransformer.d.ts.map +1 -1
  35. package/dist/features/experimental_table/markdownTransformer.js +6 -2
  36. package/dist/features/experimental_table/markdownTransformer.js.map +1 -1
  37. package/dist/features/heading/markdownTransformer.js +1 -1
  38. package/dist/features/heading/markdownTransformer.js.map +1 -1
  39. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +1 -1
  40. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  41. package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
  42. package/dist/features/link/nodes/LinkNode.js +4 -6
  43. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  44. package/dist/features/link/server/validate.d.ts.map +1 -1
  45. package/dist/features/link/server/validate.js +9 -3
  46. package/dist/features/link/server/validate.js.map +1 -1
  47. package/dist/features/lists/shared/markdown.js.map +1 -1
  48. package/dist/features/upload/server/validate.d.ts.map +1 -1
  49. package/dist/features/upload/server/validate.js +9 -3
  50. package/dist/features/upload/server/validate.js.map +1 -1
  51. package/dist/field/bundled.css +1 -1
  52. package/dist/field/rscEntry.d.ts.map +1 -1
  53. package/dist/field/rscEntry.js +1 -0
  54. package/dist/field/rscEntry.js.map +1 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +6 -2
  57. package/dist/index.js.map +1 -1
  58. package/dist/utilities/buildInitialState.d.ts +1 -0
  59. package/dist/utilities/buildInitialState.d.ts.map +1 -1
  60. package/dist/utilities/buildInitialState.js +2 -0
  61. package/dist/utilities/buildInitialState.js.map +1 -1
  62. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  63. package/dist/utilities/fieldsDrawer/DrawerContent.js +11 -3
  64. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  65. package/package.json +7 -7
  66. package/dist/exports/client/chunk-KDV47ZNZ.js +0 -2
  67. package/dist/exports/client/chunk-KDV47ZNZ.js.map +0 -7
  68. package/dist/exports/client/chunk-QP2NYEWJ.js +0 -2
  69. package/dist/exports/client/chunk-QP2NYEWJ.js.map +0 -7
  70. package/dist/exports/client/componentInline-DTNGYZCL.js +0 -2
  71. /package/dist/exports/client/{component-VJVZFYZJ.js.map → component-P5K7Z5NW.js.map} +0 -0
  72. /package/dist/exports/client/{componentInline-DTNGYZCL.js.map → componentInline-KK5V376W.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/component/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAkD,MAAM,OAAO,CAAA;AAStE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAMnE,OAAO,cAAc,CAAA;AAGrB,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkf1C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/component/index.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAkD,MAAM,OAAO,CAAA;AAUtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAInE,OAAO,cAAc,CAAA;AAKrB,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA+f1C,CAAA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
- import { Button, Collapsible, Drawer, EditDepthProvider, ErrorPill, Form, formatDrawerSlug, FormSubmit, Pill, RenderFields, SectionTitle, useDocumentInfo, useEditDepth, useFormSubmitted, useServerFunctions, useTranslation } from '@payloadcms/ui';
4
+ import { Button, Collapsible, Drawer, EditDepthProvider, ErrorPill, Form, formatDrawerSlug, FormSubmit, Pill, RenderFields, SectionTitle, useDocumentForm, useDocumentInfo, useEditDepth, useFormSubmitted, useServerFunctions, useTranslation } from '@payloadcms/ui';
5
5
  import { abortAndIgnore } from '@payloadcms/ui/shared';
6
6
  import { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared';
7
7
  import React, { useCallback, useEffect, useMemo, useRef } from 'react';
@@ -38,6 +38,9 @@ export const BlockComponent = props => {
38
38
  },
39
39
  uuid: uuidFromContext
40
40
  } = useEditorConfigContext();
41
+ const {
42
+ fields: parentDocumentFields
43
+ } = useDocumentForm();
41
44
  const onChangeAbortControllerRef = useRef(new AbortController());
42
45
  const editDepth = useEditDepth();
43
46
  const [errorCount, setErrorCount] = React.useState(0);
@@ -97,7 +100,9 @@ export const BlockComponent = props => {
97
100
  fields: true
98
101
  },
99
102
  docPreferences: await getDocPreferences(),
103
+ documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),
100
104
  globalSlug,
105
+ initialBlockData: formData,
101
106
  operation: 'update',
102
107
  renderAllFields: true,
103
108
  schemaPath: schemaFieldsPath,
@@ -121,11 +126,11 @@ export const BlockComponent = props => {
121
126
  return () => {
122
127
  abortAndIgnore(abortController);
123
128
  };
124
- }, [getFormState, schemaFieldsPath, id, formData, initialState, collectionSlug, globalSlug, getDocPreferences]);
129
+ }, [getFormState, schemaFieldsPath, id, formData, initialState, collectionSlug, globalSlug, getDocPreferences, parentDocumentFields]);
125
130
  const [isCollapsed, setIsCollapsed] = React.useState(initialLexicalFormState?.[formData.id]?.collapsed ?? false);
126
131
  const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`;
127
132
  const clientSchemaMap = featureClientSchemaMap['blocks'];
128
- const blocksField = clientSchemaMap[componentMapRenderedBlockPath]?.[0];
133
+ const blocksField = clientSchemaMap?.[componentMapRenderedBlockPath]?.[0];
129
134
  const clientBlock = blocksField?.blocks?.[0];
130
135
  const {
131
136
  i18n,
@@ -147,8 +152,10 @@ export const BlockComponent = props => {
147
152
  fields: true
148
153
  },
149
154
  docPreferences: await getDocPreferences(),
155
+ documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),
150
156
  formState: prevFormState,
151
157
  globalSlug,
158
+ initialBlockFormState: prevFormState,
152
159
  operation: 'update',
153
160
  renderAllFields: submit ? true : false,
154
161
  schemaPath: schemaFieldsPath,
@@ -157,7 +164,9 @@ export const BlockComponent = props => {
157
164
  if (!newFormState) {
158
165
  return prevFormState;
159
166
  }
160
- newFormState.blockName = prevFormState.blockName;
167
+ if (prevFormState.blockName) {
168
+ newFormState.blockName = prevFormState.blockName;
169
+ }
161
170
  const newFormStateData = reduceFieldsToValues(removeEmptyArrayValues({
162
171
  fields: deepCopyObjectSimpleWithoutReactComponents(newFormState)
163
172
  }), true);
@@ -183,7 +192,7 @@ export const BlockComponent = props => {
183
192
  setErrorCount(rowErrorCount);
184
193
  }
185
194
  return newFormState;
186
- }, [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath, formData.blockType, editor, nodeKey]);
195
+ }, [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath, formData.blockType, parentDocumentFields, editor, nodeKey]);
187
196
  useEffect(() => {
188
197
  return () => {
189
198
  abortAndIgnore(onChangeAbortControllerRef.current);
@@ -290,6 +299,7 @@ export const BlockComponent = props => {
290
299
  children: children
291
300
  }, 0)
292
301
  }), [CustomBlock, CustomLabel, EditButton, RemoveButton, blockDisplayName, editor, formData.blockType, i18n, isCollapsed, onCollapsedChange, parentLexicalRichTextField?.admin?.readOnly]);
302
+ const clientBlockFields = clientBlock?.fields ?? [];
293
303
  const BlockDrawer = useMemo(() => () => /*#__PURE__*/_jsx(EditDepthProvider, {
294
304
  children: /*#__PURE__*/_jsx(Drawer, {
295
305
  className: '',
@@ -299,7 +309,7 @@ export const BlockComponent = props => {
299
309
  }),
300
310
  children: initialState ? /*#__PURE__*/_jsxs(_Fragment, {
301
311
  children: [/*#__PURE__*/_jsx(RenderFields, {
302
- fields: clientBlock?.fields,
312
+ fields: clientBlockFields,
303
313
  forceRender: true,
304
314
  parentIndexPath: "",
305
315
  parentPath: "" // See Blocks feature path for details as for why this is empty
@@ -330,7 +340,7 @@ export const BlockComponent = props => {
330
340
  submit: true
331
341
  });
332
342
  }],
333
- fields: clientBlock?.fields,
343
+ fields: clientBlockFields,
334
344
  initialState: initialState,
335
345
  onChange: [onChange],
336
346
  onSubmit: (formState_0, newData_0) => {
@@ -353,13 +363,13 @@ export const BlockComponent = props => {
353
363
  CustomBlock: CustomBlock,
354
364
  EditButton: EditButton,
355
365
  errorCount: errorCount,
356
- formSchema: clientBlock?.fields,
366
+ formSchema: clientBlockFields,
357
367
  initialState: initialState,
358
368
  nodeKey: nodeKey,
359
369
  RemoveButton: RemoveButton
360
370
  })
361
371
  });
362
- }, [BlockCollapsible, BlockDrawer, CustomBlock, RemoveButton, EditButton, editor, errorCount, toggleDrawer, clientBlock?.fields,
372
+ }, [BlockCollapsible, BlockDrawer, CustomBlock, clientBlockFields, RemoveButton, EditButton, editor, errorCount, toggleDrawer, clientBlock?.fields,
363
373
  // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.
364
374
  initialState, nodeKey, onChange, submitted]);
365
375
  if (!clientBlock) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Button","Collapsible","Drawer","EditDepthProvider","ErrorPill","Form","formatDrawerSlug","FormSubmit","Pill","RenderFields","SectionTitle","useDocumentInfo","useEditDepth","useFormSubmitted","useServerFunctions","useTranslation","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","React","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","$getNodeByKey","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isBlockNode","BlockContent","removeEmptyArrayValues","BlockComponent","props","cacheBuster","formData","nodeKey","submitted","id","collectionSlug","globalSlug","fieldProps","featureClientSchemaMap","field","parentLexicalRichTextField","initialLexicalFormState","permissions","readOnly","schemaPath","uuidFromContext","onChangeAbortControllerRef","AbortController","editDepth","errorCount","setErrorCount","useState","drawerSlug","slug","depth","toggleDrawer","getDocPreferences","setDocFieldPreferences","editor","getFormState","schemaFieldsPath","blockType","initialState","setInitialState","formState","blockName","initialValue","passesCondition","valid","value","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","abortController","awaitInitialState","state","data","docPermissions","fields","docPreferences","operation","renderAllFields","signal","_components","isCollapsed","setIsCollapsed","collapsed","componentMapRenderedBlockPath","clientSchemaMap","blocksField","clientBlock","blocks","i18n","t","onChange","prevFormState","submit","current","controller","newFormState","newFormStateData","setTimeout","update","node","newData","setFields","rowErrorCount","formField","Object","values","removeBlock","remove","blockDisplayName","labels","singular","onCollapsedChange","changedCollapsed","then","currentDocPreferences","currentFieldPreferences","name","collapsedArray","newCollapsed","length","includes","push","splice","indexOf","hello","EditButton","_jsx","buttonStyle","className","disabled","el","icon","onClick","e","preventDefault","stopPropagation","onMouseDown","round","size","tooltip","label","RemoveButton","admin","BlockCollapsible","children","disableBlockName","editButton","fieldHasErrors","Label","removeButton","join","collapsibleStyle","header","_jsxs","pillStyle","path","count","withMessage","isEditable","onToggle","incomingCollapsedState","BlockDrawer","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","beforeSubmit","onSubmit","formSchema"],"sources":["../../../../../src/features/blocks/client/component/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Button,\n Collapsible,\n Drawer,\n EditDepthProvider,\n ErrorPill,\n Form,\n formatDrawerSlug,\n FormSubmit,\n Pill,\n RenderFields,\n SectionTitle,\n useDocumentInfo,\n useEditDepth,\n useFormSubmitted,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react'\n\nconst baseClass = 'lexical-block'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport { $getNodeByKey } from 'lexical'\nimport { type BlocksFieldClient, type CollapsedPreferences, type FormState } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isBlockNode } from '../nodes/BlocksNode.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\nimport { removeEmptyArrayValues } from './removeEmptyArrayValues.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: BlockFields\n readonly nodeKey: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n const submitted = useFormSubmitted()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n const {\n fieldProps: {\n featureClientSchemaMap,\n field: parentLexicalRichTextField,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const onChangeAbortControllerRef = useRef(new AbortController())\n const editDepth = useEditDepth()\n const [errorCount, setErrorCount] = React.useState(0)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-blocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n const [editor] = useLexicalComposerContext()\n\n const { getFormState } = useServerFunctions()\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}.fields`\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState\n ? {\n ...initialLexicalFormState?.[formData.id]?.formState,\n blockName: {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n }\n : false,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n state.blockName = {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n setInitialState(state)\n setCustomLabel(state._components?.customComponents?.BlockLabel)\n setCustomBlock(state._components?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(\n initialLexicalFormState?.[formData.id]?.collapsed ?? false,\n )\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient | undefined = clientSchemaMap[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock = blocksField?.blocks?.[0]\n\n const { i18n, t } = useTranslation<object, string>()\n\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state: newFormState } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!newFormState) {\n return prevFormState\n }\n\n newFormState.blockName = prevFormState.blockName\n\n const newFormStateData: BlockFields = reduceFieldsToValues(\n removeEmptyArrayValues({\n fields: deepCopyObjectSimpleWithoutReactComponents(newFormState),\n }),\n true,\n ) as BlockFields\n\n setTimeout(() => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n node.setFields(newData, true)\n }\n })\n }, 0)\n\n if (submit) {\n setCustomLabel(newFormState._components?.customComponents?.BlockLabel)\n setCustomBlock(newFormState._components?.customComponents?.Block)\n\n let rowErrorCount = 0\n for (const formField of Object.values(newFormState)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n\n return newFormState\n },\n\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n globalSlug,\n schemaFieldsPath,\n formData.blockType,\n editor,\n nodeKey,\n ],\n )\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences =\n currentDocPreferences?.fields?.[parentLexicalRichTextField.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(parentLexicalRichTextField.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, parentLexicalRichTextField.name, setDocFieldPreferences, formData.id],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n toggleDrawer()\n return false\n }}\n onMouseDown={(e) => {\n // Needed to preserve lexical selection for toggleDrawer lexical selection restore.\n // I believe this is needed due to this button (usually) being inside of a collapsible.\n e.preventDefault()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={parentLexicalRichTextField?.admin?.readOnly || false}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n ),\n [parentLexicalRichTextField?.admin?.readOnly, removeBlock],\n )\n\n const BlockCollapsible = useMemo(\n () =>\n ({\n children,\n disableBlockName,\n editButton,\n errorCount,\n fieldHasErrors,\n Label,\n removeButton,\n }: {\n children?: React.ReactNode\n disableBlockName?: boolean\n editButton?: boolean\n errorCount?: number\n fieldHasErrors?: boolean\n /**\n * Override the default label with a custom label\n */\n Label?: React.ReactNode\n removeButton?: boolean\n }) => (\n <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>\n <Collapsible\n className={[\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ].join(' ')}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n <div className={`${baseClass}__block-header`}>\n {(Label ?? CustomLabel) ? (\n (Label ?? CustomLabel)\n ) : (\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {blockDisplayName ?? formData?.blockType}\n </Pill>\n {!disableBlockName && (\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly || false}\n />\n )}\n\n {fieldHasErrors && (\n <ErrorPill count={errorCount ?? 0} i18n={i18n} withMessage />\n )}\n </div>\n )}\n\n <div>\n {(CustomBlock && editButton !== false) || (!CustomBlock && editButton) ? (\n <EditButton />\n ) : null}\n {removeButton !== false && editor.isEditable() ? <RemoveButton /> : null}\n </div>\n </div>\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n {children}\n </Collapsible>\n </div>\n ),\n [\n CustomBlock,\n CustomLabel,\n EditButton,\n RemoveButton,\n blockDisplayName,\n editor,\n formData.blockType,\n i18n,\n isCollapsed,\n onCollapsedChange,\n parentLexicalRichTextField?.admin?.readOnly,\n ],\n )\n\n const BlockDrawer = useMemo(\n () => () => (\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n ),\n [\n initialState,\n drawerSlug,\n blockDisplayName,\n t,\n clientBlock?.fields,\n schemaFieldsPath,\n permissions,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n ],\n )\n\n // Memoized Form JSX\n const Block = useMemo(() => {\n if (!initialState) {\n return null\n }\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n return await onChange({ formState, submit: true })\n },\n ]}\n fields={clientBlock?.fields}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={(formState, newData) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n newData.blockType = formData.blockType\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n node.setFields(newData as BlockFields, true)\n }\n })\n toggleDrawer()\n }}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n BlockDrawer={BlockDrawer}\n Collapsible={BlockCollapsible}\n CustomBlock={CustomBlock}\n EditButton={EditButton}\n errorCount={errorCount}\n formSchema={clientBlock?.fields}\n initialState={initialState}\n nodeKey={nodeKey}\n RemoveButton={RemoveButton}\n />\n </Form>\n )\n }, [\n BlockCollapsible,\n BlockDrawer,\n CustomBlock,\n RemoveButton,\n EditButton,\n editor,\n errorCount,\n toggleDrawer,\n clientBlock?.fields,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n initialState,\n nodeKey,\n onChange,\n submitted,\n ])\n\n if (!clientBlock) {\n return (\n <BlockCollapsible disableBlockName={true} fieldHasErrors={true}>\n <div className=\"lexical-block-not-found\">\n Error: Block '{formData.blockType}' not found in the config but exists in the lexical data\n </div>\n </BlockCollapsible>\n )\n }\n\n return Block\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Button","Collapsible","Drawer","EditDepthProvider","ErrorPill","Form","formatDrawerSlug","FormSubmit","Pill","RenderFields","SectionTitle","useDocumentForm","useDocumentInfo","useEditDepth","useFormSubmitted","useServerFunctions","useTranslation","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","React","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","$getNodeByKey","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isBlockNode","BlockContent","removeEmptyArrayValues","BlockComponent","props","cacheBuster","formData","nodeKey","submitted","id","collectionSlug","globalSlug","fieldProps","featureClientSchemaMap","field","parentLexicalRichTextField","initialLexicalFormState","permissions","readOnly","schemaPath","uuidFromContext","fields","parentDocumentFields","onChangeAbortControllerRef","AbortController","editDepth","errorCount","setErrorCount","useState","drawerSlug","slug","depth","toggleDrawer","getDocPreferences","setDocFieldPreferences","editor","getFormState","schemaFieldsPath","blockType","initialState","setInitialState","formState","blockName","initialValue","passesCondition","valid","value","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","initialBlockData","operation","renderAllFields","signal","_components","isCollapsed","setIsCollapsed","collapsed","componentMapRenderedBlockPath","clientSchemaMap","blocksField","clientBlock","blocks","i18n","t","onChange","prevFormState","submit","current","controller","newFormState","initialBlockFormState","newFormStateData","setTimeout","update","node","newData","setFields","rowErrorCount","formField","Object","values","removeBlock","remove","blockDisplayName","labels","singular","onCollapsedChange","changedCollapsed","then","currentDocPreferences","currentFieldPreferences","name","collapsedArray","newCollapsed","length","includes","push","splice","indexOf","hello","EditButton","_jsx","buttonStyle","className","disabled","el","icon","onClick","e","preventDefault","stopPropagation","onMouseDown","round","size","tooltip","label","RemoveButton","admin","BlockCollapsible","children","disableBlockName","editButton","fieldHasErrors","Label","removeButton","join","collapsibleStyle","header","_jsxs","pillStyle","path","count","withMessage","isEditable","onToggle","incomingCollapsedState","clientBlockFields","BlockDrawer","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","beforeSubmit","onSubmit","formSchema"],"sources":["../../../../../src/features/blocks/client/component/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Button,\n Collapsible,\n Drawer,\n EditDepthProvider,\n ErrorPill,\n Form,\n formatDrawerSlug,\n FormSubmit,\n Pill,\n RenderFields,\n SectionTitle,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useFormSubmitted,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react'\n\nconst baseClass = 'lexical-block'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport { $getNodeByKey } from 'lexical'\nimport { type BlocksFieldClient, type CollapsedPreferences, type FormState } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport './index.scss'\nimport { $isBlockNode } from '../nodes/BlocksNode.js'\nimport { BlockContent } from './BlockContent.js'\nimport { removeEmptyArrayValues } from './removeEmptyArrayValues.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: BlockFields\n readonly nodeKey: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n const submitted = useFormSubmitted()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n const {\n fieldProps: {\n featureClientSchemaMap,\n field: parentLexicalRichTextField,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n\n const { fields: parentDocumentFields } = useDocumentForm()\n const onChangeAbortControllerRef = useRef(new AbortController())\n const editDepth = useEditDepth()\n const [errorCount, setErrorCount] = React.useState(0)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-blocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n const [editor] = useLexicalComposerContext()\n\n const { getFormState } = useServerFunctions()\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}.fields`\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState\n ? {\n ...initialLexicalFormState?.[formData.id]?.formState,\n blockName: {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n }\n : false,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n globalSlug,\n initialBlockData: formData,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n state.blockName = {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n setInitialState(state)\n setCustomLabel(state._components?.customComponents?.BlockLabel)\n setCustomBlock(state._components?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(\n initialLexicalFormState?.[formData.id]?.collapsed ?? false,\n )\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient | undefined = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock = blocksField?.blocks?.[0]\n\n const { i18n, t } = useTranslation<object, string>()\n\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state: newFormState } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!newFormState) {\n return prevFormState\n }\n\n if (prevFormState.blockName) {\n newFormState.blockName = prevFormState.blockName\n }\n\n const newFormStateData: BlockFields = reduceFieldsToValues(\n removeEmptyArrayValues({\n fields: deepCopyObjectSimpleWithoutReactComponents(newFormState),\n }),\n true,\n ) as BlockFields\n\n setTimeout(() => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n node.setFields(newData, true)\n }\n })\n }, 0)\n\n if (submit) {\n setCustomLabel(newFormState._components?.customComponents?.BlockLabel)\n setCustomBlock(newFormState._components?.customComponents?.Block)\n\n let rowErrorCount = 0\n for (const formField of Object.values(newFormState)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n\n return newFormState\n },\n\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n globalSlug,\n schemaFieldsPath,\n formData.blockType,\n parentDocumentFields,\n editor,\n nodeKey,\n ],\n )\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences =\n currentDocPreferences?.fields?.[parentLexicalRichTextField.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(parentLexicalRichTextField.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, parentLexicalRichTextField.name, setDocFieldPreferences, formData.id],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n toggleDrawer()\n return false\n }}\n onMouseDown={(e) => {\n // Needed to preserve lexical selection for toggleDrawer lexical selection restore.\n // I believe this is needed due to this button (usually) being inside of a collapsible.\n e.preventDefault()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={parentLexicalRichTextField?.admin?.readOnly || false}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n ),\n [parentLexicalRichTextField?.admin?.readOnly, removeBlock],\n )\n\n const BlockCollapsible = useMemo(\n () =>\n ({\n children,\n disableBlockName,\n editButton,\n errorCount,\n fieldHasErrors,\n Label,\n removeButton,\n }: {\n children?: React.ReactNode\n disableBlockName?: boolean\n editButton?: boolean\n errorCount?: number\n fieldHasErrors?: boolean\n /**\n * Override the default label with a custom label\n */\n Label?: React.ReactNode\n removeButton?: boolean\n }) => (\n <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>\n <Collapsible\n className={[\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ].join(' ')}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n <div className={`${baseClass}__block-header`}>\n {(Label ?? CustomLabel) ? (\n (Label ?? CustomLabel)\n ) : (\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {blockDisplayName ?? formData?.blockType}\n </Pill>\n {!disableBlockName && (\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly || false}\n />\n )}\n\n {fieldHasErrors && (\n <ErrorPill count={errorCount ?? 0} i18n={i18n} withMessage />\n )}\n </div>\n )}\n\n <div>\n {(CustomBlock && editButton !== false) || (!CustomBlock && editButton) ? (\n <EditButton />\n ) : null}\n {removeButton !== false && editor.isEditable() ? <RemoveButton /> : null}\n </div>\n </div>\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n {children}\n </Collapsible>\n </div>\n ),\n [\n CustomBlock,\n CustomLabel,\n EditButton,\n RemoveButton,\n blockDisplayName,\n editor,\n formData.blockType,\n i18n,\n isCollapsed,\n onCollapsedChange,\n parentLexicalRichTextField?.admin?.readOnly,\n ],\n )\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n const BlockDrawer = useMemo(\n () => () => (\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlockFields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n ),\n [\n initialState,\n drawerSlug,\n blockDisplayName,\n t,\n clientBlock?.fields,\n schemaFieldsPath,\n permissions,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n ],\n )\n\n // Memoized Form JSX\n const Block = useMemo(() => {\n if (!initialState) {\n return null\n }\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n return await onChange({ formState, submit: true })\n },\n ]}\n fields={clientBlockFields}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={(formState, newData) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n newData.blockType = formData.blockType\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n node.setFields(newData as BlockFields, true)\n }\n })\n toggleDrawer()\n }}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n BlockDrawer={BlockDrawer}\n Collapsible={BlockCollapsible}\n CustomBlock={CustomBlock}\n EditButton={EditButton}\n errorCount={errorCount}\n formSchema={clientBlockFields}\n initialState={initialState}\n nodeKey={nodeKey}\n RemoveButton={RemoveButton}\n />\n </Form>\n )\n }, [\n BlockCollapsible,\n BlockDrawer,\n CustomBlock,\n clientBlockFields,\n RemoveButton,\n EditButton,\n editor,\n errorCount,\n toggleDrawer,\n clientBlock?.fields,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n initialState,\n nodeKey,\n onChange,\n submitted,\n ])\n\n if (!clientBlock) {\n return (\n <BlockCollapsible disableBlockName={true} fieldHasErrors={true}>\n <div className=\"lexical-block-not-found\">\n Error: Block '{formData.blockType}' not found in the config but exists in the lexical data\n </div>\n </BlockCollapsible>\n )\n }\n\n return Block\n}\n"],"mappings":"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","ignoreList":[]}
@@ -11,7 +11,7 @@ export function removeEmptyArrayValues({
11
11
  }) {
12
12
  for (const key in fields) {
13
13
  const field = fields[key];
14
- if (Array.isArray(field.rows) && 'value' in field) {
14
+ if (Array.isArray(field?.rows) && 'value' in field) {
15
15
  field.disableFormData = true;
16
16
  }
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"removeEmptyArrayValues.js","names":["removeEmptyArrayValues","fields","key","field","Array","isArray","rows","disableFormData"],"sources":["../../../../../src/features/blocks/client/component/removeEmptyArrayValues.ts"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\n/**\n * By default, if an array field is empty, it will be included in the form state with a value of 0.\n * We do not need this behavior here, By setting `disableFormData` to true, we can prevent the field from being included in the form state\n * like that.\n * @param fields form state\n */\nexport function removeEmptyArrayValues({ fields }: { fields: FormState }): FormState {\n for (const key in fields) {\n const field = fields[key]\n if (Array.isArray(field.rows) && 'value' in field) {\n field.disableFormData = true\n }\n }\n return fields\n}\n"],"mappings":"AAAA;;AAGA;;;;;;AAMA,OAAO,SAASA,uBAAuB;EAAEC;AAAM,CAAyB;EACtE,KAAK,MAAMC,GAAA,IAAOD,MAAA,EAAQ;IACxB,MAAME,KAAA,GAAQF,MAAM,CAACC,GAAA,CAAI;IACzB,IAAIE,KAAA,CAAMC,OAAO,CAACF,KAAA,CAAMG,IAAI,KAAK,WAAWH,KAAA,EAAO;MACjDA,KAAA,CAAMI,eAAe,GAAG;IAC1B;EACF;EACA,OAAON,MAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"removeEmptyArrayValues.js","names":["removeEmptyArrayValues","fields","key","field","Array","isArray","rows","disableFormData"],"sources":["../../../../../src/features/blocks/client/component/removeEmptyArrayValues.ts"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\n/**\n * By default, if an array field is empty, it will be included in the form state with a value of 0.\n * We do not need this behavior here, By setting `disableFormData` to true, we can prevent the field from being included in the form state\n * like that.\n * @param fields form state\n */\nexport function removeEmptyArrayValues({ fields }: { fields: FormState }): FormState {\n for (const key in fields) {\n const field = fields[key]\n if (Array.isArray(field?.rows) && 'value' in field) {\n field.disableFormData = true\n }\n }\n return fields\n}\n"],"mappings":"AAAA;;AAGA;;;;;;AAMA,OAAO,SAASA,uBAAuB;EAAEC;AAAM,CAAyB;EACtE,KAAK,MAAMC,GAAA,IAAOD,MAAA,EAAQ;IACxB,MAAME,KAAA,GAAQF,MAAM,CAACC,GAAA,CAAI;IACzB,IAAIE,KAAA,CAAMC,OAAO,CAACF,KAAA,EAAOG,IAAA,KAAS,WAAWH,KAAA,EAAO;MAClDA,KAAA,CAAMI,eAAe,GAAG;IAC1B;EACF;EACA,OAAON,MAAA;AACT","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiE,MAAM,OAAO,CAAA;AAGrF,OAAO,KAAK,EAA2B,SAAS,EAAE,MAAM,SAAS,CAAA;AAqBjE,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAM/E,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,+BAA+B,GAAG;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAAsD,CAAA;AAEjG,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuVhD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiE,MAAM,OAAO,CAAA;AAGrF,OAAO,KAAK,EAA2B,SAAS,EAAE,MAAM,SAAS,CAAA;AAsBjE,OAAO,cAAc,CAAA;AAKrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAM/E,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,+BAA+B,GAAG;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAAsD,CAAA;AAEjG,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAmWhD,CAAA"}
@@ -5,9 +5,10 @@ import React, { createContext, useCallback, useEffect, useMemo, useRef } from 'r
5
5
  const baseClass = 'inline-block';
6
6
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
7
7
  import { getTranslation } from '@payloadcms/translations';
8
- import { Button, Drawer, EditDepthProvider, Form, formatDrawerSlug, FormSubmit, RenderFields, ShimmerEffect, useDocumentInfo, useEditDepth, useServerFunctions, useTranslation } from '@payloadcms/ui';
8
+ import { Button, Drawer, EditDepthProvider, Form, formatDrawerSlug, FormSubmit, RenderFields, ShimmerEffect, useDocumentForm, useDocumentInfo, useEditDepth, useServerFunctions, useTranslation } from '@payloadcms/ui';
9
9
  import { abortAndIgnore } from '@payloadcms/ui/shared';
10
10
  import { $getNodeByKey } from 'lexical';
11
+ import { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared';
11
12
  import { v4 as uuid } from 'uuid';
12
13
  import { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js';
13
14
  import { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js';
@@ -41,6 +42,9 @@ export const InlineBlockComponent = props => {
41
42
  setCreatedInlineBlock,
42
43
  uuid: uuidFromContext
43
44
  } = useEditorConfigContext();
45
+ const {
46
+ fields: parentDocumentFields
47
+ } = useDocumentForm();
44
48
  const {
45
49
  getFormState
46
50
  } = useServerFunctions();
@@ -72,19 +76,20 @@ export const InlineBlockComponent = props => {
72
76
  } = useDocumentInfo();
73
77
  const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`;
74
78
  const clientSchemaMap = featureClientSchemaMap['blocks'];
75
- const blocksField = clientSchemaMap[componentMapRenderedBlockPath]?.[0];
79
+ const blocksField = clientSchemaMap?.[componentMapRenderedBlockPath]?.[0];
76
80
  const clientBlock = blocksField?.blocks?.[0];
81
+ const clientBlockFields = clientBlock?.fields ?? [];
77
82
  // Open drawer on "mount"
78
83
  useEffect(() => {
79
84
  if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {
80
85
  // > 2 because they always have "id" and "blockName" fields
81
- if (clientBlock?.fields?.length > 2) {
86
+ if (clientBlockFields.length > 2) {
82
87
  toggleDrawer();
83
88
  }
84
89
  setCreatedInlineBlock?.(undefined);
85
90
  firstTimeDrawer.current = true;
86
91
  }
87
- }, [clientBlock?.fields?.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer]);
92
+ }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer]);
88
93
  const removeInlineBlock = useCallback(() => {
89
94
  editor.update(() => {
90
95
  $getNodeByKey(nodeKey)?.remove();
@@ -112,7 +117,10 @@ export const InlineBlockComponent = props => {
112
117
  fields: true
113
118
  },
114
119
  docPreferences: await getDocPreferences(),
120
+ documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),
115
121
  globalSlug,
122
+ initialBlockData: formData,
123
+ initialBlockFormState: formData,
116
124
  operation: 'update',
117
125
  renderAllFields: true,
118
126
  schemaPath: schemaFieldsPath,
@@ -130,7 +138,7 @@ export const InlineBlockComponent = props => {
130
138
  return () => {
131
139
  abortAndIgnore(abortController);
132
140
  };
133
- }, [getFormState, schemaFieldsPath, id, formData, initialState, collectionSlug, globalSlug, getDocPreferences]);
141
+ }, [getFormState, schemaFieldsPath, id, formData, initialState, collectionSlug, globalSlug, getDocPreferences, parentDocumentFields]);
134
142
  /**
135
143
  * HANDLE ONCHANGE
136
144
  */
@@ -150,8 +158,10 @@ export const InlineBlockComponent = props => {
150
158
  fields: true
151
159
  },
152
160
  docPreferences: await getDocPreferences(),
161
+ documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),
153
162
  formState: prevFormState,
154
163
  globalSlug,
164
+ initialBlockFormState: prevFormState,
155
165
  operation: 'update',
156
166
  renderAllFields: submit ? true : false,
157
167
  schemaPath: schemaFieldsPath,
@@ -165,7 +175,7 @@ export const InlineBlockComponent = props => {
165
175
  setCustomBlock(state_0['_components']?.customComponents?.Block);
166
176
  }
167
177
  return state_0;
168
- }, [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath]);
178
+ }, [getFormState, id, collectionSlug, getDocPreferences, parentDocumentFields, globalSlug, schemaFieldsPath]);
169
179
  // cleanup effect
170
180
  useEffect(() => {
171
181
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","createContext","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","FormSubmit","RenderFields","ShimmerEffect","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","useContext","InlineBlockComponent","props","cacheBuster","formData","nodeKey","editor","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","permissions","readOnly","schemaPath","setCreatedInlineBlock","uuidFromContext","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","id","formState","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blocks","current","getKey","fields","length","undefined","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","operation","renderAllFields","signal","onChange","prevFormState","submit","controller","onFormSubmit","newData","node","setFields","RemoveButton","_jsx","buttonStyle","className","disabled","icon","onClick","e","preventDefault","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","ref","Label","_jsxs","isEditable","beforeSubmit","disableValidationOnSubmit","onSubmit","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","Provider","value","height","width"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey } from 'lexical'\n\nimport './index.scss'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.useContext(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock = blocksField?.blocks?.[0]\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlock?.fields?.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [\n clientBlock?.fields?.length,\n createdInlineBlock,\n nodeKey,\n setCreatedInlineBlock,\n toggleDrawer,\n ])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath],\n )\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n })\n },\n [editor, nodeKey, formData],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[baseClass, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [CustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext.Provider\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext.Provider>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"AAAA;;;AAEA,OAAOA,KAAA,IAASC,aAAa,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ;AAC9E,MAAMC,SAAA,GAAY;AAIlB,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,cAAc,QAAQ;AAC/B,SACEC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,IAAI,EACJC,gBAAgB,EAChBC,UAAU,EACVC,YAAY,EACZC,aAAa,EACbC,eAAe,EACfC,YAAY,EACZC,kBAAkB,EAClBC,cAAc,QACT;AACP,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAI9B,SAASC,EAAA,IAAMC,IAAI,QAAQ;AAI3B,SAASC,sBAAsB,QAAQ;AACvC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,kBAAkB,QAAQ;AAsBnC,MAAMC,2BAAA,gBAA8B3B,aAAA,CAA+C;EACjF4B,YAAA,EAAc;AAChB;AAEA,OAAO,MAAMC,8BAAA,GAAiCA,CAAA;EAAA,OAAM9B,KAAA,CAAA+B,UAAA,CAAAH,2BAAiB;AAAA;AAErE,OAAO,MAAMI,oBAAA,GAAyCC,KAAA;EACpD,MAAM;IAAEC,WAAW;IAAEC,QAAQ;IAAEC;EAAO,CAAE,GAAGH,KAAA;EAE3C,MAAM,CAACI,MAAA,CAAO,GAAG9B,yBAAA;EACjB,MAAM;IAAE+B,IAAI;IAAEC;EAAC,CAAE,GAAGnB,cAAA;EACpB,MAAM;IACJoB,kBAAkB;IAClBC,UAAA,EAAY;MACVC,sBAAsB;MACtBC,uBAAuB;MACvBC,WAAW;MACXC,QAAQ;MACRC;IAAU,CACX;IACDC,qBAAqB;IACrBvB,IAAA,EAAMwB;EAAe,CACtB,GAAGvB,sBAAA;EACJ,MAAM;IAAEwB;EAAY,CAAE,GAAG9B,kBAAA;EACzB,MAAM+B,SAAA,GAAYhC,YAAA;EAClB,MAAMiC,eAAA,GAAkB9C,MAAA,CAAO;EAE/B,MAAM,CAACwB,YAAA,EAAcuB,eAAA,CAAgB,GAAGpD,KAAA,CAAMqD,QAAQ,CACpDV,uBAAA,GAA0BR,QAAA,CAASmB,EAAE,CAAC,EAAEC,SAAA;EAG1CpD,SAAA,CAAU;IACRiD,eAAA,CAAgB;EAClB,GAAG,CAAClB,WAAA,CAAY;EAEhB,MAAM,CAACsB,WAAA,EAAaC,cAAA,CAAe,GAAGzD,KAAA,CAAMqD,QAAQ;EAClD;EACAxB,YAAA,GAAe,cAAc,EAAE6B,gBAAA,EAAkBC,UAAA;EAGnD,MAAM,CAACC,WAAA,EAAaC,cAAA,CAAe,GAAG7D,KAAA,CAAMqD,QAAQ;EAClD;EACAxB,YAAA,GAAe,cAAc,EAAE6B,gBAAA,EAAkBI,KAAA;EAGnD,MAAMC,UAAA,GAAalD,gBAAA,CAAiB;IAClCmD,IAAA,EAAM,+BAA+BhB,eAAA,IAAmBb,QAAA,CAASmB,EAAE,EAAE;IACrEW,KAAA,EAAOf;EACT;EACA,MAAM;IAAEgB;EAAY,CAAE,GAAGxC,gBAAA,CAAiBqC,UAAA,EAAY;EAEtD,MAAMI,sBAAA,GAAyB9D,MAAA,CAA8B;EAC7D,MAAM;IAAEiD,EAAE;IAAEc,cAAc;IAAEC,iBAAiB;IAAEC;EAAU,CAAE,GAAGrD,eAAA;EAE9D,MAAMsD,6BAAA,GAAgC,GAAGzB,UAAA,0DAAoEX,QAAA,CAASqC,SAAS,EAAE;EAEjI,MAAMC,eAAA,GAAkB/B,sBAAsB,CAAC,SAAS;EAExD,MAAMgC,WAAA,GAAiCD,eAAe,CACpDF,6BAAA,CACD,GAAG,EAAE;EAEN,MAAMI,WAAA,GAAcD,WAAA,EAAaE,MAAA,GAAS,EAAE;EAE5C;EACAzE,SAAA,CAAU;IACR,IAAI,CAACgD,eAAA,CAAgB0B,OAAO,IAAIrC,kBAAA,EAAoBsC,MAAA,OAAa1C,OAAA,EAAS;MACxE;MACA,IAAIuC,WAAA,EAAaI,MAAA,EAAQC,MAAA,GAAS,GAAG;QACnCd,YAAA;MACF;MACAnB,qBAAA,GAAwBkC,SAAA;MACxB9B,eAAA,CAAgB0B,OAAO,GAAG;IAC5B;EACF,GAAG,CACDF,WAAA,EAAaI,MAAA,EAAQC,MAAA,EACrBxC,kBAAA,EACAJ,OAAA,EACAW,qBAAA,EACAmB,YAAA,CACD;EAED,MAAMgB,iBAAA,GAAoBhF,WAAA,CAAY;IACpCmC,MAAA,CAAO8C,MAAM,CAAC;MACZ7D,aAAA,CAAcc,OAAA,GAAUgD,MAAA;IAC1B;EACF,GAAG,CAAC/C,MAAA,EAAQD,OAAA,CAAQ;EAEpB,MAAMiD,gBAAA,GAAmBV,WAAA,EAAaW,MAAA,EAAQC,QAAA,GAC1C/E,cAAA,CAAemE,WAAA,EAAaW,MAAA,CAAOC,QAAA,EAAUjD,IAAA,IAC7CqC,WAAA,EAAaX,IAAA;EAEjB,MAAMwB,0BAAA,GAA6BnF,MAAA,CAAO,IAAIoF,eAAA;EAC9C,MAAMC,gBAAA,GAAmB,GAAG5C,UAAA,0DAAoE6B,WAAA,EAAaX,IAAA,SAAa;EAE1H;EACA7D,SAAA,CAAU;IACR,MAAMwF,eAAA,GAAkB,IAAIF,eAAA;IAE5B,MAAMG,iBAAA,GAAoB,MAAAA,CAAA;MACxB;;;;;MAKA,MAAM;QAAEC;MAAK,CAAE,GAAG,MAAM5C,YAAA,CAAa;QACnCK,EAAA;QACAc,cAAA;QACA0B,IAAA,EAAM3D,QAAA;QACN4D,cAAA,EAAgB;UAAEhB,MAAA,EAAQ;QAAK;QAC/BiB,cAAA,EAAgB,MAAM3B,iBAAA;QACtBC,UAAA;QACA2B,SAAA,EAAW;QACXC,eAAA,EAAiB;QACjBpD,UAAA,EAAY4C,gBAAA;QACZS,MAAA,EAAQR,eAAA,CAAgBQ;MAC1B;MAEA,IAAIN,KAAA,EAAO;QACTzC,eAAA,CAAgByC,KAAA;QAChBpC,cAAA,CAAeoC,KAAK,CAAC,cAAc,EAAEnC,gBAAA,EAAkBC,UAAA;QACvDE,cAAA,CAAegC,KAAK,CAAC,cAAc,EAAEnC,gBAAA,EAAkBI,KAAA;MACzD;IACF;IAEA,IAAI3B,QAAA,IAAY,CAACN,YAAA,EAAc;MAC7B,KAAK+D,iBAAA;IACP;IAEA,OAAO;MACLvE,cAAA,CAAesE,eAAA;IACjB;EACF,GAAG,CACD1C,YAAA,EACAyC,gBAAA,EACApC,EAAA,EACAnB,QAAA,EACAN,YAAA,EACAuC,cAAA,EACAE,UAAA,EACAD,iBAAA,CACD;EAED;;;EAGA,MAAM+B,QAAA,GAAWlG,WAAA,CACf,OAAO;IAAEqD,SAAA,EAAW8C,aAAa;IAAEC;EAAM,CAA8C;IACrFjF,cAAA,CAAemE,0BAAA,CAA2BX,OAAO;IAEjD,MAAM0B,UAAA,GAAa,IAAId,eAAA;IACvBD,0BAAA,CAA2BX,OAAO,GAAG0B,UAAA;IAErC,MAAM;MAAEV,KAAK,EAALA;IAAK,CAAE,GAAG,MAAM5C,YAAA,CAAa;MACnCK,EAAA;MACAc,cAAA;MACA2B,cAAA,EAAgB;QACdhB,MAAA,EAAQ;MACV;MACAiB,cAAA,EAAgB,MAAM3B,iBAAA;MACtBd,SAAA,EAAW8C,aAAA;MACX/B,UAAA;MACA2B,SAAA,EAAW;MACXC,eAAA,EAAiBI,MAAA,GAAS,OAAO;MACjCxD,UAAA,EAAY4C,gBAAA;MACZS,MAAA,EAAQI,UAAA,CAAWJ;IACrB;IAEA,IAAI,CAACN,OAAA,EAAO;MACV,OAAOQ,aAAA;IACT;IAEA,IAAIC,MAAA,EAAQ;MACV7C,cAAA,CAAeoC,OAAK,CAAC,cAAc,EAAEnC,gBAAA,EAAkBC,UAAA;MACvDE,cAAA,CAAegC,OAAK,CAAC,cAAc,EAAEnC,gBAAA,EAAkBI,KAAA;IACzD;IAEA,OAAO+B,OAAA;EACT,GACA,CAAC5C,YAAA,EAAcK,EAAA,EAAIc,cAAA,EAAgBC,iBAAA,EAAmBC,UAAA,EAAYoB,gBAAA,CAAiB;EAErF;EACAvF,SAAA,CAAU;IACR,OAAO;MACLkB,cAAA,CAAemE,0BAAA,CAA2BX,OAAO;IACnD;EACF,GAAG,EAAE;EAEL;;;EAGA,MAAM2B,YAAA,GAAetG,WAAA,CACnB,CAACqD,SAAA,EAAsBkD,OAAA;IACrBA,OAAA,CAAQjC,SAAS,GAAGrC,QAAA,CAASqC,SAAS;IAEtCnC,MAAA,CAAO8C,MAAM,CAAC;MACZ,MAAMuB,IAAA,GAAOpF,aAAA,CAAcc,OAAA;MAC3B,IAAIsE,IAAA,IAAQ/E,kBAAA,CAAmB+E,IAAA,GAAO;QACpCA,IAAA,CAAKC,SAAS,CAACF,OAAA,EAA8B;MAC/C;IACF;EACF,GACA,CAACpE,MAAA,EAAQD,OAAA,EAASD,QAAA,CAAS;EAG7B,MAAMyE,YAAA,GAAexG,OAAA,CACnB,MAAM,mBACJyG,IAAA,CAACpG,MAAA;IACCqG,WAAA,EAAY;IACZC,SAAA,EAAW,GAAGzG,SAAA,gBAAyB;IACvC0G,QAAA,EAAUnE,QAAA;IACVoE,IAAA,EAAK;IACLC,OAAA,EAAUC,CAAA;MACRA,CAAA,CAAEC,cAAc;MAChBlC,iBAAA;IACF;IACAmC,KAAK;IACLC,IAAA,EAAK;IACLC,OAAA,EAAShF,CAAA,CAAE,sCAAsC;MAAEiF,KAAA,EAAOnC;IAAiB;MAG/E,CAACA,gBAAA,EAAkBxC,QAAA,EAAUqC,iBAAA,EAAmB3C,CAAA,CAAE;EAGpD,MAAMkF,UAAA,GAAarH,OAAA,CACjB,MAAM,mBACJyG,IAAA,CAACpG,MAAA;IACCqG,WAAA,EAAY;IACZC,SAAA,EAAW,GAAGzG,SAAA,cAAuB;IACrC0G,QAAA,EAAUnE,QAAA;IACV6E,EAAA,EAAG;IACHT,IAAA,EAAK;IACLC,OAAA,EAASA,CAAA;MACPhD,YAAA;IACF;IACAmD,KAAK;IACLC,IAAA,EAAK;IACLC,OAAA,EAAShF,CAAA,CAAE,oCAAoC;MAAEiF,KAAA,EAAOnC;IAAiB;MAG7E,CAACA,gBAAA,EAAkBxC,QAAA,EAAUN,CAAA,EAAG2B,YAAA,CAAa;EAG/C,MAAMyD,oBAAA,GAAuBvH,OAAA,CAC3B,MACE,CAAC;IAAEwH,QAAQ;IAAEb;EAAS,CAAqD,kBACzEF,IAAA,CAAC;IACCE,SAAA,EAAW,CAACzG,SAAA,EAAWA,SAAA,GAAY,MAAM6B,QAAA,CAASqC,SAAS,EAAEuC,SAAA,CAAU,CACpEc,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;IACRC,GAAA,EAAK7D,sBAAA;cAEJyD;MAGP,CAACzF,QAAA,CAASqC,SAAS,CAAC;EAGtB,MAAMyD,KAAA,GAAQ7H,OAAA,CAAQ;IACpB,IAAIoD,WAAA,EAAa;MACf,OAAO,MAAMA,WAAA;IACf,OAAO;MACL,OAAO,mBACLqD,IAAA,CAAC;kBAAKlC,WAAA,EAAaW,MAAA,GAAS9E,cAAA,CAAemE,WAAA,EAAaW,MAAA,CAAOC,QAAA,EAAUjD,IAAA,IAAQ;;IAErF;EACF,GAAG,CAACkB,WAAA,EAAamB,WAAA,EAAaW,MAAA,EAAQhD,IAAA,CAAK;EAE3C,IAAI,CAACqC,WAAA,EAAa;IAChB,oBACEuD,KAAA,CAACP,oBAAA;MAAqBZ,SAAA,EAAW,GAAGzG,SAAA,YAAqB;8BACvD4H,KAAA,CAAC;mBAAK,kBAAe/F,QAAA,CAASqC,SAAS,EAAC;UACvCnC,MAAA,CAAO8F,UAAU,kBAChBtB,IAAA,CAAC;QAAIE,SAAA,EAAW,GAAGzG,SAAA,WAAoB;kBACrC,aAAAuG,IAAA,CAACD,YAAA;WAED;;EAGV;EAEA,oBACEsB,KAAA,CAACtH,IAAA;IACCwH,YAAA,EAAc,CACZ,OAAO;MAAE7E,SAAS,EAATA;IAAS,CAAE;MAClB;MACA,OAAO,MAAM6C,QAAA,CAAS;QAAE7C,SAAA,EAAAA,WAAA;QAAW+C,MAAA,EAAQ;MAAK;IAClD,EACD;IACD+B,yBAAyB;IACzBtD,MAAA,EAAQJ,WAAA,EAAaI,MAAA;IACrBlD,YAAA,EAAcA,YAAA,IAAgB,CAAC;IAC/BuE,QAAA,EAAU,CAACA,QAAA,CAAS;IACpBkC,QAAA,EAAUA,CAAC/E,WAAA,EAAWuC,IAAA;MACpBU,YAAA,CAAajD,WAAA,EAAWuC,IAAA;MACxB5B,YAAA;IACF;IACA1C,IAAA,EAAMA,IAAA;4BAENqF,IAAA,CAAClG,iBAAA;gBACC,aAAAkG,IAAA,CAACnG,MAAA;QACCqG,SAAA,EAAW;QACX/C,IAAA,EAAMD,UAAA;QACNwE,KAAA,EAAOhG,CAAA,CAAE,+BAA+BJ,QAAA,EAAUmB,EAAA,GAAK,SAAS,UAAU,EAAE;UAC1EkE,KAAA,EAAOnC,gBAAA,IAAoB9C,CAAA,CAAE;QAC/B;kBAECV,YAAA,gBACCqG,KAAA,CAAAM,SAAA;kCACE3B,IAAA,CAAC9F,YAAA;YACCgE,MAAA,EAAQJ,WAAA,EAAaI,MAAA;YACrB0D,WAAW;YACXC,eAAA,EAAgB;YAChBC,UAAA,EAAW,GAAG;YAAA;;YACdC,gBAAA,EAAkBlD,gBAAA;YAClB9C,WAAA,EAAaA,WAAA;YACbC,QAAA,EAAU;2BAEZgE,IAAA,CAAC/F,UAAA;YAAW+H,kBAAA,EAAoB;sBAAOtG,CAAA,CAAE;;aAEzC;;QAGPqB,WAAA,gBACCiD,IAAA,CAACjF,2BAAA,CAA4BkH,QAAQ;MACnCC,KAAA,EAAO;QACLtB,UAAA;QACA5F,YAAA;QACA8F,oBAAA;QACAM,KAAA;QACA7F,OAAA;QACAwE;MACF;gBAEChD;sBAGHsE,KAAA,CAACP,oBAAA;iBACE9F,YAAA,gBAAegF,IAAA,CAACoB,KAAA,qBAAWpB,IAAA,CAAC7F,aAAA;QAAcgI,MAAA,EAAO;QAAOC,KAAA,EAAM;UAC9D5G,MAAA,CAAO8F,UAAU,kBAChBD,KAAA,CAAC;QAAInB,SAAA,EAAW,GAAGzG,SAAA,WAAoB;gCACrCuG,IAAA,CAACY,UAAA,O,aACDZ,IAAA,CAACD,YAAA;WAED;;;AAKd","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","createContext","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","FormSubmit","RenderFields","ShimmerEffect","useDocumentForm","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","deepCopyObjectSimpleWithoutReactComponents","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","useContext","InlineBlockComponent","props","cacheBuster","formData","nodeKey","editor","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","permissions","readOnly","schemaPath","setCreatedInlineBlock","uuidFromContext","fields","parentDocumentFields","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","id","formState","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blocks","clientBlockFields","current","getKey","length","undefined","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","initialBlockData","initialBlockFormState","operation","renderAllFields","signal","onChange","prevFormState","submit","controller","onFormSubmit","newData","node","setFields","RemoveButton","_jsx","buttonStyle","className","disabled","icon","onClick","e","preventDefault","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","ref","Label","_jsxs","isEditable","beforeSubmit","disableValidationOnSubmit","onSubmit","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","Provider","value","height","width"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey } from 'lexical'\n\nimport './index.scss'\n\nimport { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.useContext(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { fields: parentDocumentFields } = useDocumentForm()\n\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock = blocksField?.blocks?.[0]\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlockFields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n globalSlug,\n initialBlockData: formData,\n initialBlockFormState: formData,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n })\n },\n [editor, nodeKey, formData],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[baseClass, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [CustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext.Provider\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext.Provider>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"AAAA;;;AAEA,OAAOA,KAAA,IAASC,aAAa,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ;AAC9E,MAAMC,SAAA,GAAY;AAIlB,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,cAAc,QAAQ;AAC/B,SACEC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,IAAI,EACJC,gBAAgB,EAChBC,UAAU,EACVC,YAAY,EACZC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,YAAY,EACZC,kBAAkB,EAClBC,cAAc,QACT;AACP,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAI9B,SAASC,0CAA0C,QAAQ;AAC3D,SAASC,EAAA,IAAMC,IAAI,QAAQ;AAI3B,SAASC,sBAAsB,QAAQ;AACvC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,kBAAkB,QAAQ;AAsBnC,MAAMC,2BAAA,gBAA8B7B,aAAA,CAA+C;EACjF8B,YAAA,EAAc;AAChB;AAEA,OAAO,MAAMC,8BAAA,GAAiCA,CAAA;EAAA,OAAMhC,KAAA,CAAAiC,UAAA,CAAAH,2BAAiB;AAAA;AAErE,OAAO,MAAMI,oBAAA,GAAyCC,KAAA;EACpD,MAAM;IAAEC,WAAW;IAAEC,QAAQ;IAAEC;EAAO,CAAE,GAAGH,KAAA;EAE3C,MAAM,CAACI,MAAA,CAAO,GAAGhC,yBAAA;EACjB,MAAM;IAAEiC,IAAI;IAAEC;EAAC,CAAE,GAAGpB,cAAA;EACpB,MAAM;IACJqB,kBAAkB;IAClBC,UAAA,EAAY;MACVC,sBAAsB;MACtBC,uBAAuB;MACvBC,WAAW;MACXC,QAAQ;MACRC;IAAU,CACX;IACDC,qBAAqB;IACrBvB,IAAA,EAAMwB;EAAe,CACtB,GAAGvB,sBAAA;EACJ,MAAM;IAAEwB,MAAA,EAAQC;EAAoB,CAAE,GAAGnC,eAAA;EAEzC,MAAM;IAAEoC;EAAY,CAAE,GAAGjC,kBAAA;EACzB,MAAMkC,SAAA,GAAYnC,YAAA;EAClB,MAAMoC,eAAA,GAAkBlD,MAAA,CAAO;EAE/B,MAAM,CAAC0B,YAAA,EAAcyB,eAAA,CAAgB,GAAGxD,KAAA,CAAMyD,QAAQ,CACpDZ,uBAAA,GAA0BR,QAAA,CAASqB,EAAE,CAAC,EAAEC,SAAA;EAG1CxD,SAAA,CAAU;IACRqD,eAAA,CAAgB;EAClB,GAAG,CAACpB,WAAA,CAAY;EAEhB,MAAM,CAACwB,WAAA,EAAaC,cAAA,CAAe,GAAG7D,KAAA,CAAMyD,QAAQ;EAClD;EACA1B,YAAA,GAAe,cAAc,EAAE+B,gBAAA,EAAkBC,UAAA;EAGnD,MAAM,CAACC,WAAA,EAAaC,cAAA,CAAe,GAAGjE,KAAA,CAAMyD,QAAQ;EAClD;EACA1B,YAAA,GAAe,cAAc,EAAE+B,gBAAA,EAAkBI,KAAA;EAGnD,MAAMC,UAAA,GAAatD,gBAAA,CAAiB;IAClCuD,IAAA,EAAM,+BAA+BlB,eAAA,IAAmBb,QAAA,CAASqB,EAAE,EAAE;IACrEW,KAAA,EAAOf;EACT;EACA,MAAM;IAAEgB;EAAY,CAAE,GAAG1C,gBAAA,CAAiBuC,UAAA,EAAY;EAEtD,MAAMI,sBAAA,GAAyBlE,MAAA,CAA8B;EAC7D,MAAM;IAAEqD,EAAE;IAAEc,cAAc;IAAEC,iBAAiB;IAAEC;EAAU,CAAE,GAAGxD,eAAA;EAE9D,MAAMyD,6BAAA,GAAgC,GAAG3B,UAAA,0DAAoEX,QAAA,CAASuC,SAAS,EAAE;EAEjI,MAAMC,eAAA,GAAkBjC,sBAAsB,CAAC,SAAS;EAExD,MAAMkC,WAAA,GAAiCD,eAAA,GACrCF,6BAAA,CACD,GAAG,EAAE;EAEN,MAAMI,WAAA,GAAcD,WAAA,EAAaE,MAAA,GAAS,EAAE;EAE5C,MAAMC,iBAAA,GAAoBF,WAAA,EAAa5B,MAAA,IAAU,EAAE;EAEnD;EACAhD,SAAA,CAAU;IACR,IAAI,CAACoD,eAAA,CAAgB2B,OAAO,IAAIxC,kBAAA,EAAoByC,MAAA,OAAa7C,OAAA,EAAS;MACxE;MACA,IAAI2C,iBAAA,CAAkBG,MAAM,GAAG,GAAG;QAChCd,YAAA;MACF;MACArB,qBAAA,GAAwBoC,SAAA;MACxB9B,eAAA,CAAgB2B,OAAO,GAAG;IAC5B;EACF,GAAG,CAACD,iBAAA,CAAkBG,MAAM,EAAE1C,kBAAA,EAAoBJ,OAAA,EAASW,qBAAA,EAAuBqB,YAAA,CAAa;EAE/F,MAAMgB,iBAAA,GAAoBpF,WAAA,CAAY;IACpCqC,MAAA,CAAOgD,MAAM,CAAC;MACZhE,aAAA,CAAce,OAAA,GAAUkD,MAAA;IAC1B;EACF,GAAG,CAACjD,MAAA,EAAQD,OAAA,CAAQ;EAEpB,MAAMmD,gBAAA,GAAmBV,WAAA,EAAaW,MAAA,EAAQC,QAAA,GAC1CnF,cAAA,CAAeuE,WAAA,EAAaW,MAAA,CAAOC,QAAA,EAAUnD,IAAA,IAC7CuC,WAAA,EAAaX,IAAA;EAEjB,MAAMwB,0BAAA,GAA6BvF,MAAA,CAAO,IAAIwF,eAAA;EAC9C,MAAMC,gBAAA,GAAmB,GAAG9C,UAAA,0DAAoE+B,WAAA,EAAaX,IAAA,SAAa;EAE1H;EACAjE,SAAA,CAAU;IACR,MAAM4F,eAAA,GAAkB,IAAIF,eAAA;IAE5B,MAAMG,iBAAA,GAAoB,MAAAA,CAAA;MACxB;;;;;MAKA,MAAM;QAAEC;MAAK,CAAE,GAAG,MAAM5C,YAAA,CAAa;QACnCK,EAAA;QACAc,cAAA;QACA0B,IAAA,EAAM7D,QAAA;QACN8D,cAAA,EAAgB;UAAEhD,MAAA,EAAQ;QAAK;QAC/BiD,cAAA,EAAgB,MAAM3B,iBAAA;QACtB4B,iBAAA,EAAmB7E,0CAAA,CAA2C4B,oBAAA;QAC9DsB,UAAA;QACA4B,gBAAA,EAAkBjE,QAAA;QAClBkE,qBAAA,EAAuBlE,QAAA;QACvBmE,SAAA,EAAW;QACXC,eAAA,EAAiB;QACjBzD,UAAA,EAAY8C,gBAAA;QACZY,MAAA,EAAQX,eAAA,CAAgBW;MAC1B;MAEA,IAAIT,KAAA,EAAO;QACTzC,eAAA,CAAgByC,KAAA;QAChBpC,cAAA,CAAeoC,KAAK,CAAC,cAAc,EAAEnC,gBAAA,EAAkBC,UAAA;QACvDE,cAAA,CAAegC,KAAK,CAAC,cAAc,EAAEnC,gBAAA,EAAkBI,KAAA;MACzD;IACF;IAEA,IAAI7B,QAAA,IAAY,CAACN,YAAA,EAAc;MAC7B,KAAKiE,iBAAA;IACP;IAEA,OAAO;MACL1E,cAAA,CAAeyE,eAAA;IACjB;EACF,GAAG,CACD1C,YAAA,EACAyC,gBAAA,EACApC,EAAA,EACArB,QAAA,EACAN,YAAA,EACAyC,cAAA,EACAE,UAAA,EACAD,iBAAA,EACArB,oBAAA,CACD;EAED;;;EAGA,MAAMuD,QAAA,GAAWzG,WAAA,CACf,OAAO;IAAEyD,SAAA,EAAWiD,aAAa;IAAEC;EAAM,CAA8C;IACrFvF,cAAA,CAAesE,0BAAA,CAA2BV,OAAO;IAEjD,MAAM4B,UAAA,GAAa,IAAIjB,eAAA;IACvBD,0BAAA,CAA2BV,OAAO,GAAG4B,UAAA;IAErC,MAAM;MAAEb,KAAK,EAALA;IAAK,CAAE,GAAG,MAAM5C,YAAA,CAAa;MACnCK,EAAA;MACAc,cAAA;MACA2B,cAAA,EAAgB;QACdhD,MAAA,EAAQ;MACV;MACAiD,cAAA,EAAgB,MAAM3B,iBAAA;MACtB4B,iBAAA,EAAmB7E,0CAAA,CAA2C4B,oBAAA;MAC9DO,SAAA,EAAWiD,aAAA;MACXlC,UAAA;MACA6B,qBAAA,EAAuBK,aAAA;MACvBJ,SAAA,EAAW;MACXC,eAAA,EAAiBI,MAAA,GAAS,OAAO;MACjC7D,UAAA,EAAY8C,gBAAA;MACZY,MAAA,EAAQI,UAAA,CAAWJ;IACrB;IAEA,IAAI,CAACT,OAAA,EAAO;MACV,OAAOW,aAAA;IACT;IAEA,IAAIC,MAAA,EAAQ;MACVhD,cAAA,CAAeoC,OAAK,CAAC,cAAc,EAAEnC,gBAAA,EAAkBC,UAAA;MACvDE,cAAA,CAAegC,OAAK,CAAC,cAAc,EAAEnC,gBAAA,EAAkBI,KAAA;IACzD;IAEA,OAAO+B,OAAA;EACT,GACA,CACE5C,YAAA,EACAK,EAAA,EACAc,cAAA,EACAC,iBAAA,EACArB,oBAAA,EACAsB,UAAA,EACAoB,gBAAA,CACD;EAEH;EACA3F,SAAA,CAAU;IACR,OAAO;MACLmB,cAAA,CAAesE,0BAAA,CAA2BV,OAAO;IACnD;EACF,GAAG,EAAE;EAEL;;;EAGA,MAAM6B,YAAA,GAAe7G,WAAA,CACnB,CAACyD,SAAA,EAAsBqD,OAAA;IACrBA,OAAA,CAAQpC,SAAS,GAAGvC,QAAA,CAASuC,SAAS;IAEtCrC,MAAA,CAAOgD,MAAM,CAAC;MACZ,MAAM0B,IAAA,GAAO1F,aAAA,CAAce,OAAA;MAC3B,IAAI2E,IAAA,IAAQpF,kBAAA,CAAmBoF,IAAA,GAAO;QACpCA,IAAA,CAAKC,SAAS,CAACF,OAAA,EAA8B;MAC/C;IACF;EACF,GACA,CAACzE,MAAA,EAAQD,OAAA,EAASD,QAAA,CAAS;EAG7B,MAAM8E,YAAA,GAAe/G,OAAA,CACnB,MAAM,mBACJgH,IAAA,CAAC3G,MAAA;IACC4G,WAAA,EAAY;IACZC,SAAA,EAAW,GAAGhH,SAAA,gBAAyB;IACvCiH,QAAA,EAAUxE,QAAA;IACVyE,IAAA,EAAK;IACLC,OAAA,EAAUC,CAAA;MACRA,CAAA,CAAEC,cAAc;MAChBrC,iBAAA;IACF;IACAsC,KAAK;IACLC,IAAA,EAAK;IACLC,OAAA,EAASrF,CAAA,CAAE,sCAAsC;MAAEsF,KAAA,EAAOtC;IAAiB;MAG/E,CAACA,gBAAA,EAAkB1C,QAAA,EAAUuC,iBAAA,EAAmB7C,CAAA,CAAE;EAGpD,MAAMuF,UAAA,GAAa5H,OAAA,CACjB,MAAM,mBACJgH,IAAA,CAAC3G,MAAA;IACC4G,WAAA,EAAY;IACZC,SAAA,EAAW,GAAGhH,SAAA,cAAuB;IACrCiH,QAAA,EAAUxE,QAAA;IACVkF,EAAA,EAAG;IACHT,IAAA,EAAK;IACLC,OAAA,EAASA,CAAA;MACPnD,YAAA;IACF;IACAsD,KAAK;IACLC,IAAA,EAAK;IACLC,OAAA,EAASrF,CAAA,CAAE,oCAAoC;MAAEsF,KAAA,EAAOtC;IAAiB;MAG7E,CAACA,gBAAA,EAAkB1C,QAAA,EAAUN,CAAA,EAAG6B,YAAA,CAAa;EAG/C,MAAM4D,oBAAA,GAAuB9H,OAAA,CAC3B,MACE,CAAC;IAAE+H,QAAQ;IAAEb;EAAS,CAAqD,kBACzEF,IAAA,CAAC;IACCE,SAAA,EAAW,CAAChH,SAAA,EAAWA,SAAA,GAAY,MAAM+B,QAAA,CAASuC,SAAS,EAAE0C,SAAA,CAAU,CACpEc,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;IACRC,GAAA,EAAKhE,sBAAA;cAEJ4D;MAGP,CAAC9F,QAAA,CAASuC,SAAS,CAAC;EAGtB,MAAM4D,KAAA,GAAQpI,OAAA,CAAQ;IACpB,IAAIwD,WAAA,EAAa;MACf,OAAO,MAAMA,WAAA;IACf,OAAO;MACL,OAAO,mBACLwD,IAAA,CAAC;kBAAKrC,WAAA,EAAaW,MAAA,GAASlF,cAAA,CAAeuE,WAAA,EAAaW,MAAA,CAAOC,QAAA,EAAUnD,IAAA,IAAQ;;IAErF;EACF,GAAG,CAACoB,WAAA,EAAamB,WAAA,EAAaW,MAAA,EAAQlD,IAAA,CAAK;EAE3C,IAAI,CAACuC,WAAA,EAAa;IAChB,oBACE0D,KAAA,CAACP,oBAAA;MAAqBZ,SAAA,EAAW,GAAGhH,SAAA,YAAqB;8BACvDmI,KAAA,CAAC;mBAAK,kBAAepG,QAAA,CAASuC,SAAS,EAAC;UACvCrC,MAAA,CAAOmG,UAAU,kBAChBtB,IAAA,CAAC;QAAIE,SAAA,EAAW,GAAGhH,SAAA,WAAoB;kBACrC,aAAA8G,IAAA,CAACD,YAAA;WAED;;EAGV;EAEA,oBACEsB,KAAA,CAAC7H,IAAA;IACC+H,YAAA,EAAc,CACZ,OAAO;MAAEhF,SAAS,EAATA;IAAS,CAAE;MAClB;MACA,OAAO,MAAMgD,QAAA,CAAS;QAAEhD,SAAA,EAAAA,WAAA;QAAWkD,MAAA,EAAQ;MAAK;IAClD,EACD;IACD+B,yBAAyB;IACzBzF,MAAA,EAAQ4B,WAAA,EAAa5B,MAAA;IACrBpB,YAAA,EAAcA,YAAA,IAAgB,CAAC;IAC/B4E,QAAA,EAAU,CAACA,QAAA,CAAS;IACpBkC,QAAA,EAAUA,CAAClF,WAAA,EAAWuC,IAAA;MACpBa,YAAA,CAAapD,WAAA,EAAWuC,IAAA;MACxB5B,YAAA;IACF;IACA5C,IAAA,EAAMA,IAAA;4BAEN0F,IAAA,CAACzG,iBAAA;gBACC,aAAAyG,IAAA,CAAC1G,MAAA;QACC4G,SAAA,EAAW;QACXlD,IAAA,EAAMD,UAAA;QACN2E,KAAA,EAAOrG,CAAA,CAAE,+BAA+BJ,QAAA,EAAUqB,EAAA,GAAK,SAAS,UAAU,EAAE;UAC1EqE,KAAA,EAAOtC,gBAAA,IAAoBhD,CAAA,CAAE;QAC/B;kBAECV,YAAA,gBACC0G,KAAA,CAAAM,SAAA;kCACE3B,IAAA,CAACrG,YAAA;YACCoC,MAAA,EAAQ4B,WAAA,EAAa5B,MAAA;YACrB6F,WAAW;YACXC,eAAA,EAAgB;YAChBC,UAAA,EAAW,GAAG;YAAA;;YACdC,gBAAA,EAAkBrD,gBAAA;YAClBhD,WAAA,EAAaA,WAAA;YACbC,QAAA,EAAU;2BAEZqE,IAAA,CAACtG,UAAA;YAAWsI,kBAAA,EAAoB;sBAAO3G,CAAA,CAAE;;aAEzC;;QAGPuB,WAAA,gBACCoD,IAAA,CAACtF,2BAAA,CAA4BuH,QAAQ;MACnCC,KAAA,EAAO;QACLtB,UAAA;QACAjG,YAAA;QACAmG,oBAAA;QACAM,KAAA;QACAlG,OAAA;QACA6E;MACF;gBAECnD;sBAGHyE,KAAA,CAACP,oBAAA;iBACEnG,YAAA,gBAAeqF,IAAA,CAACoB,KAAA,qBAAWpB,IAAA,CAACpG,aAAA;QAAcuI,MAAA,EAAO;QAAOC,KAAA,EAAM;UAC9DjH,MAAA,CAAOmG,UAAU,kBAChBD,KAAA,CAAC;QAAInB,SAAA,EAAW,GAAGhH,SAAA,WAAoB;gCACrC8G,IAAA,CAACY,UAAA,O,aACDZ,IAAA,CAACD,YAAA;WAED;;;AAKd","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/client/index.tsx"],"names":[],"mappings":"AAqBA,eAAO,MAAM,mBAAmB,8EAyK/B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/client/index.tsx"],"names":[],"mappings":"AAqBA,eAAO,MAAM,mBAAmB,8EAiL/B,CAAA"}
@@ -17,14 +17,17 @@ export const BlocksFeatureClient = createClientFeature(({
17
17
  const schemaMapRenderedBlockPathPrefix = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks`;
18
18
  const schemaMapRenderedInlineBlockPathPrefix = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks`;
19
19
  const clientSchema = featureClientSchemaMap['blocks'];
20
- const blocksFields = Object.entries(clientSchema).filter(([key]) => key.startsWith(schemaMapRenderedBlockPathPrefix + '.') && !key.replace(schemaMapRenderedBlockPathPrefix + '.', '').includes('.')).map(([key, value]) => value[0]);
21
- const inlineBlocksFields = Object.entries(clientSchema).filter(([key]) => key.startsWith(schemaMapRenderedInlineBlockPathPrefix + '.') && !key.replace(schemaMapRenderedInlineBlockPathPrefix + '.', '').includes('.')).map(([key, value]) => value[0]);
20
+ if (!clientSchema) {
21
+ return {};
22
+ }
23
+ const blocksFields = Object.entries(clientSchema).filter(([key]) => key.startsWith(schemaMapRenderedBlockPathPrefix + '.') && !key.replace(schemaMapRenderedBlockPathPrefix + '.', '').includes('.')).map(([, value]) => value[0]);
24
+ const inlineBlocksFields = Object.entries(clientSchema).filter(([key]) => key.startsWith(schemaMapRenderedInlineBlockPathPrefix + '.') && !key.replace(schemaMapRenderedInlineBlockPathPrefix + '.', '').includes('.')).map(([, value]) => value[0]);
22
25
  const clientBlocks = blocksFields.map(field => {
23
26
  return field.blocks[0];
24
- });
27
+ }).filter(block => block !== undefined);
25
28
  const clientInlineBlocks = inlineBlocksFields.map(field => {
26
29
  return field.blocks[0];
27
- });
30
+ }).filter(block => block !== undefined);
28
31
  return {
29
32
  nodes: [BlockNode, InlineBlockNode],
30
33
  plugins: [{