@payloadcms/richtext-lexical 3.59.0-internal.5d79493 → 3.59.0-internal.6aee982
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.
- package/dist/exports/client/{Field-2MCIQXRP.js → Field-EHRBYNHO.js} +2 -2
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/{chunk-TLQLXR6Q.js → chunk-2Y72RT72.js} +2 -2
- package/dist/exports/client/chunk-3BY5IZJD.js +2 -0
- package/dist/exports/client/chunk-3BY5IZJD.js.map +7 -0
- package/dist/exports/client/componentInline-7TPI7ZBC.js +2 -0
- package/dist/exports/client/index.d.ts +0 -3
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +10 -35
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/align/server/i18n.d.ts.map +1 -1
- package/dist/features/align/server/i18n.js +6 -0
- package/dist/features/align/server/i18n.js.map +1 -1
- package/dist/features/blockquote/server/i18n.d.ts.map +1 -1
- package/dist/features/blockquote/server/i18n.js +3 -0
- package/dist/features/blockquote/server/i18n.js.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.d.ts +27 -52
- package/dist/features/blocks/client/component/BlockContent.d.ts.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.js +51 -45
- package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
- package/dist/features/blocks/client/component/components/BlockCollapsible.d.ts +9 -2
- package/dist/features/blocks/client/component/components/BlockCollapsible.d.ts.map +1 -1
- package/dist/features/blocks/client/component/components/BlockCollapsible.js +25 -7
- package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +50 -62
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +1 -0
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/index.d.ts.map +1 -1
- package/dist/features/blocks/client/index.js +0 -5
- package/dist/features/blocks/client/index.js.map +1 -1
- package/dist/features/blocks/client/markdownTransformer.d.ts +17 -0
- package/dist/features/blocks/client/markdownTransformer.d.ts.map +1 -0
- package/dist/features/blocks/client/markdownTransformer.js +144 -0
- package/dist/features/blocks/client/markdownTransformer.js.map +1 -0
- package/dist/features/blocks/server/i18n.d.ts.map +1 -1
- package/dist/features/blocks/server/i18n.js +47 -38
- package/dist/features/blocks/server/i18n.js.map +1 -1
- package/dist/features/blocks/server/index.js +1 -1
- package/dist/features/blocks/server/index.js.map +1 -1
- package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.d.ts.map +1 -0
- package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js.map +1 -0
- package/dist/features/blocks/server/markdownTransformer.d.ts +22 -0
- package/dist/features/blocks/server/markdownTransformer.d.ts.map +1 -0
- package/dist/features/blocks/server/{markdown/markdownTransformer.js → markdownTransformer.js} +48 -6
- package/dist/features/blocks/server/markdownTransformer.js.map +1 -0
- package/dist/features/heading/server/i18n.d.ts.map +1 -1
- package/dist/features/heading/server/i18n.js +3 -0
- package/dist/features/heading/server/i18n.js.map +1 -1
- package/dist/features/horizontalRule/server/i18n.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/i18n.js +3 -0
- package/dist/features/horizontalRule/server/i18n.js.map +1 -1
- package/dist/features/indent/server/i18n.d.ts.map +1 -1
- package/dist/features/indent/server/i18n.js +4 -0
- package/dist/features/indent/server/i18n.js.map +1 -1
- package/dist/features/link/server/i18n.d.ts.map +1 -1
- package/dist/features/link/server/i18n.js +4 -0
- package/dist/features/link/server/i18n.js.map +1 -1
- package/dist/features/lists/checklist/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/checklist/server/i18n.js +3 -0
- package/dist/features/lists/checklist/server/i18n.js.map +1 -1
- package/dist/features/lists/orderedList/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/orderedList/server/i18n.js +3 -0
- package/dist/features/lists/orderedList/server/i18n.js.map +1 -1
- package/dist/features/lists/unorderedList/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/unorderedList/server/i18n.js +3 -0
- package/dist/features/lists/unorderedList/server/i18n.js.map +1 -1
- package/dist/features/paragraph/server/i18n.d.ts.map +1 -1
- package/dist/features/paragraph/server/i18n.js +4 -0
- package/dist/features/paragraph/server/i18n.js.map +1 -1
- package/dist/features/relationship/server/i18n.d.ts.map +1 -1
- package/dist/features/relationship/server/i18n.js +3 -0
- package/dist/features/relationship/server/i18n.js.map +1 -1
- package/dist/features/textState/i18n.d.ts.map +1 -1
- package/dist/features/textState/i18n.js +3 -0
- package/dist/features/textState/i18n.js.map +1 -1
- package/dist/features/upload/server/i18n.d.ts.map +1 -1
- package/dist/features/upload/server/i18n.js +3 -0
- package/dist/features/upload/server/i18n.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +6 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/lexical/ui/icons/CodeBlock/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/CodeBlock/index.js +15 -10
- package/dist/lexical/ui/icons/CodeBlock/index.js.map +1 -1
- package/dist/utilities/jsx/collectTopLevelJSXInLines.js +2 -2
- package/dist/utilities/jsx/collectTopLevelJSXInLines.js.map +1 -1
- package/package.json +6 -6
- package/dist/exports/client/chunk-K47TNP5J.js +0 -2
- package/dist/exports/client/chunk-K47TNP5J.js.map +0 -7
- package/dist/exports/client/componentInline-AGFSKAY4.js +0 -2
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts +0 -6
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts.map +0 -1
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js +0 -24
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js.map +0 -1
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts +0 -6
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts.map +0 -1
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.js +0 -20
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.js.map +0 -1
- package/dist/features/blocks/client/markdown/markdownTransformer.d.ts +0 -12
- package/dist/features/blocks/client/markdown/markdownTransformer.d.ts.map +0 -1
- package/dist/features/blocks/client/markdown/markdownTransformer.js +0 -348
- package/dist/features/blocks/client/markdown/markdownTransformer.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Block.d.ts +0 -5
- package/dist/features/blocks/premade/CodeBlock/Component/Block.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Block.js +0 -151
- package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Code.d.ts +0 -61
- package/dist/features/blocks/premade/CodeBlock/Component/Code.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Code.js +0 -99
- package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.d.ts +0 -4
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.js +0 -17
- package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.d.ts +0 -4
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.js +0 -26
- package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/converter.d.ts +0 -7
- package/dist/features/blocks/premade/CodeBlock/converter.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/converter.js +0 -46
- package/dist/features/blocks/premade/CodeBlock/converter.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/converterClient.d.ts +0 -2
- package/dist/features/blocks/premade/CodeBlock/converterClient.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/converterClient.js +0 -4
- package/dist/features/blocks/premade/CodeBlock/converterClient.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/index.d.ts +0 -7
- package/dist/features/blocks/premade/CodeBlock/index.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/index.js +0 -52
- package/dist/features/blocks/premade/CodeBlock/index.js.map +0 -1
- package/dist/features/blocks/server/markdown/getLexicalToMarkdown.d.ts +0 -6
- package/dist/features/blocks/server/markdown/getLexicalToMarkdown.d.ts.map +0 -1
- package/dist/features/blocks/server/markdown/getLexicalToMarkdown.js +0 -27
- package/dist/features/blocks/server/markdown/getLexicalToMarkdown.js.map +0 -1
- package/dist/features/blocks/server/markdown/getMarkdownToLexical.d.ts +0 -7
- package/dist/features/blocks/server/markdown/getMarkdownToLexical.d.ts.map +0 -1
- package/dist/features/blocks/server/markdown/getMarkdownToLexical.js +0 -22
- package/dist/features/blocks/server/markdown/getMarkdownToLexical.js.map +0 -1
- package/dist/features/blocks/server/markdown/linesFromMatchToContentAndPropsString.d.ts.map +0 -1
- package/dist/features/blocks/server/markdown/linesFromMatchToContentAndPropsString.js.map +0 -1
- package/dist/features/blocks/server/markdown/markdownTransformer.d.ts +0 -15
- package/dist/features/blocks/server/markdown/markdownTransformer.d.ts.map +0 -1
- package/dist/features/blocks/server/markdown/markdownTransformer.js.map +0 -1
- package/dist/lexical/ui/icons/Collapse/index.d.ts +0 -3
- package/dist/lexical/ui/icons/Collapse/index.d.ts.map +0 -1
- package/dist/lexical/ui/icons/Collapse/index.js +0 -18
- package/dist/lexical/ui/icons/Collapse/index.js.map +0 -1
- /package/dist/exports/client/{Field-2MCIQXRP.js.map → Field-EHRBYNHO.js.map} +0 -0
- /package/dist/exports/client/{chunk-TLQLXR6Q.js.map → chunk-2Y72RT72.js.map} +0 -0
- /package/dist/exports/client/{componentInline-AGFSKAY4.js.map → componentInline-7TPI7ZBC.js.map} +0 -0
- /package/dist/features/blocks/server/{markdown/linesFromMatchToContentAndPropsString.d.ts → linesFromMatchToContentAndPropsString.d.ts} +0 -0
- /package/dist/features/blocks/server/{markdown/linesFromMatchToContentAndPropsString.js → linesFromMatchToContentAndPropsString.js} +0 -0
|
@@ -32,6 +32,7 @@ export const BlockComponent = props => {
|
|
|
32
32
|
featureClientSchemaMap,
|
|
33
33
|
field: parentLexicalRichTextField,
|
|
34
34
|
initialLexicalFormState,
|
|
35
|
+
permissions,
|
|
35
36
|
readOnly,
|
|
36
37
|
schemaPath
|
|
37
38
|
},
|
|
@@ -61,11 +62,10 @@ export const BlockComponent = props => {
|
|
|
61
62
|
setDocFieldPreferences
|
|
62
63
|
} = useDocumentInfo();
|
|
63
64
|
const [editor] = useLexicalComposerContext();
|
|
64
|
-
const blockType = formData.blockType;
|
|
65
65
|
const {
|
|
66
66
|
getFormState
|
|
67
67
|
} = useServerFunctions();
|
|
68
|
-
const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${blockType}.fields`;
|
|
68
|
+
const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}.fields`;
|
|
69
69
|
const [initialState, setInitialState] = React.useState(() => {
|
|
70
70
|
return initialLexicalFormState?.[formData.id]?.formState ? {
|
|
71
71
|
...initialLexicalFormState?.[formData.id]?.formState,
|
|
@@ -91,10 +91,10 @@ export const BlockComponent = props => {
|
|
|
91
91
|
}, [cacheBuster]);
|
|
92
92
|
const [CustomLabel, setCustomLabel] = React.useState(
|
|
93
93
|
// @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
|
|
94
|
-
initialState?.['_components']?.customComponents?.BlockLabel
|
|
94
|
+
initialState?.['_components']?.customComponents?.BlockLabel);
|
|
95
95
|
const [CustomBlock, setCustomBlock] = React.useState(
|
|
96
96
|
// @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
|
|
97
|
-
initialState?.['_components']?.customComponents?.Block
|
|
97
|
+
initialState?.['_components']?.customComponents?.Block);
|
|
98
98
|
// Initial state for newly created blocks
|
|
99
99
|
useEffect(() => {
|
|
100
100
|
const abortController = new AbortController();
|
|
@@ -135,13 +135,13 @@ export const BlockComponent = props => {
|
|
|
135
135
|
const node = $getNodeByKey(nodeKey);
|
|
136
136
|
if (node && $isBlockNode(node)) {
|
|
137
137
|
const newData = newFormStateData;
|
|
138
|
-
newData.blockType = blockType;
|
|
138
|
+
newData.blockType = formData.blockType;
|
|
139
139
|
node.setFields(newData, true);
|
|
140
140
|
}
|
|
141
141
|
});
|
|
142
142
|
setInitialState(state);
|
|
143
|
-
setCustomLabel(state._components?.customComponents?.BlockLabel
|
|
144
|
-
setCustomBlock(state._components?.customComponents?.Block
|
|
143
|
+
setCustomLabel(state._components?.customComponents?.BlockLabel);
|
|
144
|
+
setCustomBlock(state._components?.customComponents?.Block);
|
|
145
145
|
}
|
|
146
146
|
};
|
|
147
147
|
if (formData && !initialState) {
|
|
@@ -150,9 +150,9 @@ export const BlockComponent = props => {
|
|
|
150
150
|
return () => {
|
|
151
151
|
abortAndIgnore(abortController);
|
|
152
152
|
};
|
|
153
|
-
}, [getFormState, schemaFieldsPath, id, formData, editor, nodeKey, initialState, collectionSlug, globalSlug, getDocPreferences, parentDocumentFields
|
|
153
|
+
}, [getFormState, schemaFieldsPath, id, formData, editor, nodeKey, initialState, collectionSlug, globalSlug, getDocPreferences, parentDocumentFields]);
|
|
154
154
|
const [isCollapsed, setIsCollapsed] = React.useState(initialLexicalFormState?.[formData.id]?.collapsed ?? false);
|
|
155
|
-
const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${blockType}`;
|
|
155
|
+
const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`;
|
|
156
156
|
const clientSchemaMap = featureClientSchemaMap['blocks'];
|
|
157
157
|
const blocksField = clientSchemaMap?.[componentMapRenderedBlockPath]?.[0];
|
|
158
158
|
const clientBlock = blocksField.blockReferences ? typeof blocksField?.blockReferences?.[0] === 'string' ? config.blocksMap[blocksField?.blockReferences?.[0]] : blocksField?.blockReferences?.[0] : blocksField?.blocks?.[0];
|
|
@@ -199,14 +199,14 @@ export const BlockComponent = props => {
|
|
|
199
199
|
const node_0 = $getNodeByKey(nodeKey);
|
|
200
200
|
if (node_0 && $isBlockNode(node_0)) {
|
|
201
201
|
const newData_0 = newFormStateData_0;
|
|
202
|
-
newData_0.blockType = blockType;
|
|
202
|
+
newData_0.blockType = formData.blockType;
|
|
203
203
|
node_0.setFields(newData_0, true);
|
|
204
204
|
}
|
|
205
205
|
});
|
|
206
206
|
}, 0);
|
|
207
207
|
if (submit) {
|
|
208
|
-
setCustomLabel(newFormState._components?.customComponents?.BlockLabel
|
|
209
|
-
setCustomBlock(newFormState._components?.customComponents?.Block
|
|
208
|
+
setCustomLabel(newFormState._components?.customComponents?.BlockLabel);
|
|
209
|
+
setCustomBlock(newFormState._components?.customComponents?.Block);
|
|
210
210
|
let rowErrorCount = 0;
|
|
211
211
|
for (const formField of Object.values(newFormState)) {
|
|
212
212
|
if (formField?.valid === false) {
|
|
@@ -216,7 +216,7 @@ export const BlockComponent = props => {
|
|
|
216
216
|
setErrorCount(rowErrorCount);
|
|
217
217
|
}
|
|
218
218
|
return newFormState;
|
|
219
|
-
}, [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath, blockType, parentDocumentFields, editor, nodeKey]);
|
|
219
|
+
}, [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath, formData.blockType, parentDocumentFields, editor, nodeKey]);
|
|
220
220
|
useEffect(() => {
|
|
221
221
|
return () => {
|
|
222
222
|
abortAndIgnore(onChangeAbortControllerRef.current);
|
|
@@ -284,63 +284,51 @@ export const BlockComponent = props => {
|
|
|
284
284
|
tooltip: "Remove Block"
|
|
285
285
|
}), [parentLexicalRichTextField?.admin?.readOnly, removeBlock]);
|
|
286
286
|
const BlockCollapsible = useMemo(() => ({
|
|
287
|
-
Actions,
|
|
288
287
|
children,
|
|
289
|
-
className,
|
|
290
|
-
collapsibleProps,
|
|
291
288
|
disableBlockName,
|
|
292
289
|
editButton,
|
|
293
290
|
errorCount: errorCount_0,
|
|
294
291
|
fieldHasErrors,
|
|
295
292
|
Label,
|
|
296
|
-
Pill: CustomPill,
|
|
297
293
|
removeButton
|
|
298
|
-
}) => {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
children: [
|
|
307
|
-
className: `${baseClass}__block-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
i18n: i18n,
|
|
319
|
-
withMessage: true
|
|
320
|
-
})]
|
|
321
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
322
|
-
className: `${baseClass}__block-actions`,
|
|
323
|
-
children: typeof Actions !== 'undefined' ? Actions : /*#__PURE__*/_jsxs(_Fragment, {
|
|
324
|
-
children: [CustomBlock && editButton !== false || !CustomBlock && editButton ? /*#__PURE__*/_jsx(EditButton, {}) : null, removeButton !== false && editor.isEditable() ? /*#__PURE__*/_jsx(RemoveButton, {}) : null]
|
|
325
|
-
})
|
|
294
|
+
}) => /*#__PURE__*/_jsx("div", {
|
|
295
|
+
className: baseClass + ' ' + baseClass + '-' + formData.blockType,
|
|
296
|
+
children: /*#__PURE__*/_jsx(Collapsible, {
|
|
297
|
+
className: [`${baseClass}__row`, fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`].join(' '),
|
|
298
|
+
collapsibleStyle: fieldHasErrors ? 'error' : 'default',
|
|
299
|
+
header: /*#__PURE__*/_jsxs("div", {
|
|
300
|
+
className: `${baseClass}__block-header`,
|
|
301
|
+
children: [Label ?? CustomLabel ? Label ?? CustomLabel : /*#__PURE__*/_jsxs("div", {
|
|
302
|
+
children: [/*#__PURE__*/_jsx(Pill, {
|
|
303
|
+
className: `${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`,
|
|
304
|
+
pillStyle: "white",
|
|
305
|
+
size: "small",
|
|
306
|
+
children: blockDisplayName ?? formData?.blockType
|
|
307
|
+
}), !disableBlockName && !clientBlock?.admin?.disableBlockName && /*#__PURE__*/_jsx(SectionTitle, {
|
|
308
|
+
path: "blockName",
|
|
309
|
+
readOnly: parentLexicalRichTextField?.admin?.readOnly || false
|
|
310
|
+
}), fieldHasErrors && /*#__PURE__*/_jsx(ErrorPill, {
|
|
311
|
+
count: errorCount_0 ?? 0,
|
|
312
|
+
i18n: i18n,
|
|
313
|
+
withMessage: true
|
|
326
314
|
})]
|
|
327
|
-
}),
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
},
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
315
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
316
|
+
children: [CustomBlock && editButton !== false || !CustomBlock && editButton ? /*#__PURE__*/_jsx(EditButton, {}) : null, removeButton !== false && editor.isEditable() ? /*#__PURE__*/_jsx(RemoveButton, {}) : null]
|
|
317
|
+
})]
|
|
318
|
+
}),
|
|
319
|
+
isCollapsed: isCollapsed,
|
|
320
|
+
onToggle: incomingCollapsedState => {
|
|
321
|
+
onCollapsedChange(incomingCollapsedState);
|
|
322
|
+
setIsCollapsed(incomingCollapsedState);
|
|
323
|
+
},
|
|
324
|
+
children: children
|
|
325
|
+
}, 0)
|
|
326
|
+
}), [CustomBlock, CustomLabel, EditButton, RemoveButton, blockDisplayName, clientBlock?.admin?.disableBlockName, editor, formData.blockType, i18n, isCollapsed, onCollapsedChange, parentLexicalRichTextField?.admin?.readOnly]);
|
|
339
327
|
const BlockDrawer = useMemo(() => () => /*#__PURE__*/_jsx(EditDepthProvider, {
|
|
340
328
|
children: /*#__PURE__*/_jsx(Drawer, {
|
|
341
329
|
className: '',
|
|
342
330
|
slug: drawerSlug,
|
|
343
|
-
title: t(`lexical:blocks:inlineBlocks:${
|
|
331
|
+
title: t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {
|
|
344
332
|
label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label')
|
|
345
333
|
}),
|
|
346
334
|
children: initialState ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -360,7 +348,7 @@ export const BlockComponent = props => {
|
|
|
360
348
|
})]
|
|
361
349
|
}) : null
|
|
362
350
|
})
|
|
363
|
-
}), [initialState, drawerSlug,
|
|
351
|
+
}), [initialState, drawerSlug, blockDisplayName, t, clientBlock?.fields, schemaFieldsPath, permissions]);
|
|
364
352
|
// Memoized Form JSX
|
|
365
353
|
const Block = useMemo(() => {
|
|
366
354
|
if (!initialState) {
|
|
@@ -382,7 +370,7 @@ export const BlockComponent = props => {
|
|
|
382
370
|
onChange: [onChange],
|
|
383
371
|
onSubmit: (formState_0, newData_1) => {
|
|
384
372
|
// This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component
|
|
385
|
-
newData_1.blockType = blockType;
|
|
373
|
+
newData_1.blockType = formData.blockType;
|
|
386
374
|
editor.update(() => {
|
|
387
375
|
const node_1 = $getNodeByKey(nodeKey);
|
|
388
376
|
if (node_1 && $isBlockNode(node_1)) {
|
|
@@ -406,7 +394,7 @@ export const BlockComponent = props => {
|
|
|
406
394
|
RemoveButton: RemoveButton
|
|
407
395
|
})
|
|
408
396
|
});
|
|
409
|
-
}, [BlockCollapsible, BlockDrawer, CustomBlock,
|
|
397
|
+
}, [BlockCollapsible, BlockDrawer, CustomBlock, clientBlock?.fields, RemoveButton, EditButton, editor, errorCount, toggleDrawer, clientBlock?.fields,
|
|
410
398
|
// DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.
|
|
411
399
|
initialState, nodeKey, onChange, submitted]);
|
|
412
400
|
if (!clientBlock) {
|
|
@@ -415,7 +403,7 @@ export const BlockComponent = props => {
|
|
|
415
403
|
fieldHasErrors: true,
|
|
416
404
|
children: /*#__PURE__*/_jsxs("div", {
|
|
417
405
|
className: "lexical-block-not-found",
|
|
418
|
-
children: ["Error: Block '", blockType, "' not found in the config but exists in the lexical data"]
|
|
406
|
+
children: ["Error: Block '", formData.blockType, "' not found in the config but exists in the lexical data"]
|
|
419
407
|
})
|
|
420
408
|
});
|
|
421
409
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Button","Collapsible","Drawer","EditDepthProvider","ErrorPill","Form","formatDrawerSlug","FormSubmit","Pill","RenderFields","SectionTitle","useConfig","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","readOnly","schemaPath","uuidFromContext","fields","parentDocumentFields","onChangeAbortControllerRef","AbortController","editDepth","errorCount","setErrorCount","useState","config","drawerSlug","slug","depth","toggleDrawer","getDocPreferences","setDocFieldPreferences","editor","blockType","getFormState","schemaFieldsPath","initialState","setInitialState","formState","blockName","initialValue","passesCondition","valid","value","hasMounted","prevCacheBuster","current","CustomLabel","setCustomLabel","customComponents","BlockLabel","undefined","CustomBlock","setCustomBlock","Block","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","initialBlockData","operation","renderAllFields","signal","newFormStateData","update","node","newData","setFields","_components","isCollapsed","setIsCollapsed","collapsed","componentMapRenderedBlockPath","clientSchemaMap","blocksField","clientBlock","blockReferences","blocksMap","blocks","i18n","t","onChange","prevFormState","submit","controller","newFormState","initialBlockFormState","setTimeout","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","Actions","children","collapsibleProps","disableBlockName","editButton","fieldHasErrors","Label","CustomPill","removeButton","filter","Boolean","join","collapsibleStyle","header","_jsxs","pillStyle","path","count","withMessage","_Fragment","isEditable","onToggle","incomingCollapsedState","blockID","BlockDrawer","title","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions","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 useConfig,\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 {\n type BlocksFieldClient,\n type ClientBlock,\n type CollapsedPreferences,\n type FormState,\n} 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 { type BlockCollapsibleWithErrorProps, 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 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 { config } = useConfig()\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 blockType = formData.blockType\n\n const { getFormState } = useServerFunctions()\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${blockType}.fields`\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(() => {\n return 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 const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\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 ?? undefined,\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 ?? undefined,\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 const newFormStateData: BlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state),\n true,\n ) as BlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = blockType\n\n node.setFields(newData, true)\n }\n })\n\n setInitialState(state)\n setCustomLabel(state._components?.customComponents?.BlockLabel ?? undefined)\n setCustomBlock(state._components?.customComponents?.Block ?? undefined)\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 editor,\n nodeKey,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n blockType,\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.${blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient | undefined = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock: ClientBlock | undefined = blocksField.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : 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 = blockType\n node.setFields(newData, true)\n }\n })\n }, 0)\n\n if (submit) {\n setCustomLabel(newFormState._components?.customComponents?.BlockLabel ?? undefined)\n setCustomBlock(newFormState._components?.customComponents?.Block ?? undefined)\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 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 Actions,\n children,\n className,\n collapsibleProps,\n disableBlockName,\n editButton,\n errorCount,\n fieldHasErrors,\n Label,\n Pill: CustomPill,\n removeButton,\n }: BlockCollapsibleWithErrorProps) => {\n return (\n <div className={baseClass + ' ' + baseClass + '-' + blockType}>\n <Collapsible\n className={[\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n <div className={`${baseClass}__block-header`}>\n {typeof Label !== 'undefined' ? (\n Label\n ) : typeof CustomLabel !== 'undefined' ? (\n CustomLabel\n ) : (\n <div className={`${baseClass}__block-label`}>\n {typeof CustomPill !== 'undefined' ? (\n CustomPill\n ) : (\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${blockType}`}\n pillStyle=\"white\"\n size=\"small\"\n >\n {blockDisplayName ?? blockType}\n </Pill>\n )}\n {!disableBlockName && !clientBlock?.admin?.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 className={`${baseClass}__block-actions`}>\n {typeof Actions !== 'undefined' ? (\n Actions\n ) : (\n <>\n {(CustomBlock && editButton !== false) || (!CustomBlock && editButton) ? (\n <EditButton />\n ) : null}\n {removeButton !== false && editor.isEditable() ? <RemoveButton /> : null}\n </>\n )}\n </div>\n </div>\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n {...(collapsibleProps || {})}\n >\n {children}\n </Collapsible>\n </div>\n )\n },\n [\n CustomBlock,\n CustomLabel,\n EditButton,\n RemoveButton,\n blockDisplayName,\n clientBlock?.admin?.disableBlockName,\n editor,\n blockType,\n i18n,\n isCollapsed,\n onCollapsedChange,\n parentLexicalRichTextField?.admin?.readOnly,\n ],\n )\n\n const blockID = formData?.id\n\n const BlockDrawer = useMemo(\n () => () => (\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${blockID ? '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={true}\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 blockID,\n blockDisplayName,\n t,\n clientBlock?.fields,\n schemaFieldsPath,\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 el=\"div\"\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 = 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 blockType,\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 '{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","useConfig","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","config","drawerSlug","slug","depth","toggleDrawer","getDocPreferences","setDocFieldPreferences","editor","getFormState","schemaFieldsPath","blockType","initialState","setInitialState","formState","blockName","initialValue","passesCondition","valid","value","hasMounted","prevCacheBuster","current","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","initialBlockData","operation","renderAllFields","signal","newFormStateData","update","node","newData","setFields","_components","isCollapsed","setIsCollapsed","collapsed","componentMapRenderedBlockPath","clientSchemaMap","blocksField","clientBlock","blockReferences","blocksMap","blocks","i18n","t","onChange","prevFormState","submit","controller","newFormState","initialBlockFormState","setTimeout","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 useConfig,\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 {\n type BlocksFieldClient,\n type ClientBlock,\n type CollapsedPreferences,\n type FormState,\n} 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 { config } = useConfig()\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 return 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 const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\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 const newFormStateData: BlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state),\n true,\n ) as BlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\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 editor,\n nodeKey,\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: ClientBlock | undefined = blocksField.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : 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 size=\"small\"\n >\n {blockDisplayName ?? formData?.blockType}\n </Pill>\n {!disableBlockName && !clientBlock?.admin?.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 clientBlock?.admin?.disableBlockName,\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={true}\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 el=\"div\"\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 clientBlock?.fields,\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":"AAAA;;;AAEA,SACEA,MAAM,EACNC,WAAW,EACXC,MAAM,EACNC,iBAAiB,EACjBC,SAAS,EACTC,IAAI,EACJC,gBAAgB,EAChBC,UAAU,EACVC,IAAI,EACJC,YAAY,EACZC,YAAY,EACZC,SAAS,EACTC,eAAe,EACfC,eAAe,EACfC,YAAY,EACZC,gBAAgB,EAChBC,kBAAkB,EAClBC,cAAc,QACT;AACP,SAASC,cAAc,QAAQ;AAC/B,SAASC,0CAA0C,EAAEC,oBAAoB,QAAQ;AACjF,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ;AAE/D,MAAMC,SAAA,GAAY;AAElB,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAO9B,SAASC,EAAA,IAAMC,IAAI,QAAQ;AAI3B,SAASC,sBAAsB,QAAQ;AACvC,SAASC,gBAAgB,QAAQ;AAEjC,SAASC,YAAY,QAAQ;AAC7B,SAASC,YAAY,QAAQ;AAC7B,SAASC,sBAAsB,QAAQ;AAavC,OAAO,MAAMC,cAAA,GAAmCC,KAAA;EAC9C,MAAM;IAAEC,WAAW;IAAEC,QAAQ;IAAEC;EAAO,CAAE,GAAGH,KAAA;EAC3C,MAAMI,SAAA,GAAY3B,gBAAA;EAClB,MAAM;IAAE4B,EAAE;IAAEC,cAAc;IAAEC;EAAU,CAAE,GAAGhC,eAAA;EAC3C,MAAM;IACJiC,UAAA,EAAY;MACVC,sBAAsB;MACtBC,KAAA,EAAOC,0BAA0B;MACjCC,uBAAuB;MACvBC,WAAW;MACXC,QAAQ;MACRC;IAAU,CACX;IACDtB,IAAA,EAAMuB;EAAe,CACtB,GAAGtB,sBAAA;EAEJ,MAAM;IAAEuB,MAAA,EAAQC;EAAoB,CAAE,GAAG5C,eAAA;EACzC,MAAM6C,0BAAA,GAA6BhC,MAAA,CAAO,IAAIiC,eAAA;EAC9C,MAAMC,SAAA,GAAY7C,YAAA;EAClB,MAAM,CAAC8C,UAAA,EAAYC,aAAA,CAAc,GAAGxC,KAAA,CAAMyC,QAAQ,CAAC;EAEnD,MAAM;IAAEC;EAAM,CAAE,GAAGpD,SAAA;EAEnB,MAAMqD,UAAA,GAAa1D,gBAAA,CAAiB;IAClC2D,IAAA,EAAM,yBAAyBX,eAAA,IAAmBd,QAAA,CAASG,EAAE,EAAE;IAC/DuB,KAAA,EAAOP;EACT;EACA,MAAM;IAAEQ;EAAY,CAAE,GAAGlC,gBAAA,CAAiB+B,UAAA;EAE1C;EACA;EACA;EACA,MAAM;IAAEI,iBAAiB;IAAEC;EAAsB,CAAE,GAAGxD,eAAA;EACtD,MAAM,CAACyD,MAAA,CAAO,GAAG3C,yBAAA;EAEjB,MAAM;IAAE4C;EAAY,CAAE,GAAGvD,kBAAA;EACzB,MAAMwD,gBAAA,GAAmB,GAAGnB,UAAA,mDAA6Db,QAAA,CAASiC,SAAS,SAAS;EAEpH,MAAM,CAACC,YAAA,EAAcC,eAAA,CAAgB,GAAGtD,KAAA,CAAMyC,QAAQ,CAAgC;IACpF,OAAOZ,uBAAA,GAA0BV,QAAA,CAASG,EAAE,CAAC,EAAEiC,SAAA,GAC3C;MACE,GAAG1B,uBAAA,GAA0BV,QAAA,CAASG,EAAE,CAAC,EAAEiC,SAAS;MACpDC,SAAA,EAAW;QACTC,YAAA,EAActC,QAAA,CAASqC,SAAS;QAChCE,eAAA,EAAiB;QACjBC,KAAA,EAAO;QACPC,KAAA,EAAOzC,QAAA,CAASqC;MAClB;IACF,IACA;EACN;EAEA,MAAMK,UAAA,GAAazD,MAAA,CAAO;EAC1B,MAAM0D,eAAA,GAAkB1D,MAAA,CAAOc,WAAA;EAC/BhB,SAAA,CAAU;IACR,IAAI2D,UAAA,CAAWE,OAAO,EAAE;MACtB,IAAID,eAAA,CAAgBC,OAAO,KAAK7C,WAAA,EAAa;QAC3CoC,eAAA,CAAgB;MAClB;MACAQ,eAAA,CAAgBC,OAAO,GAAG7C,WAAA;IAC5B,OAAO;MACL2C,UAAA,CAAWE,OAAO,GAAG;IACvB;EACF,GAAG,CAAC7C,WAAA,CAAY;EAEhB,MAAM,CAAC8C,WAAA,EAAaC,cAAA,CAAe,GAAGjE,KAAA,CAAMyC,QAAQ;EAClD;EACAY,YAAA,GAAe,cAAc,EAAEa,gBAAA,EAAkBC,UAAA;EAGnD,MAAM,CAACC,WAAA,EAAaC,cAAA,CAAe,GAAGrE,KAAA,CAAMyC,QAAQ;EAClD;EACAY,YAAA,GAAe,cAAc,EAAEa,gBAAA,EAAkBI,KAAA;EAGnD;EACApE,SAAA,CAAU;IACR,MAAMqE,eAAA,GAAkB,IAAIlC,eAAA;IAE5B,MAAMmC,iBAAA,GAAoB,MAAAA,CAAA;MACxB;;;;;MAKA,MAAM;QAAEC;MAAK,CAAE,GAAG,MAAMvB,YAAA,CAAa;QACnC5B,EAAA;QACAC,cAAA;QACAmD,IAAA,EAAMvD,QAAA;QACNwD,cAAA,EAAgB;UAAEzC,MAAA,EAAQ;QAAK;QAC/B0C,cAAA,EAAgB,MAAM7B,iBAAA;QACtB8B,iBAAA,EAAmB/E,0CAAA,CAA2CqC,oBAAA;QAC9DX,UAAA;QACAsD,gBAAA,EAAkB3D,QAAA;QAClB4D,SAAA,EAAW;QACXC,eAAA,EAAiB;QACjBhD,UAAA,EAAYmB,gBAAA;QACZ8B,MAAA,EAAQV,eAAA,CAAgBU;MAC1B;MAEA,IAAIR,KAAA,EAAO;QACTA,KAAA,CAAMjB,SAAS,GAAG;UAChBC,YAAA,EAActC,QAAA,CAASqC,SAAS;UAChCE,eAAA,EAAiB;UACjBC,KAAA,EAAO;UACPC,KAAA,EAAOzC,QAAA,CAASqC;QAClB;QAEA,MAAM0B,gBAAA,GAAgCnF,oBAAA,CACpCD,0CAAA,CAA2C2E,KAAA,GAC3C;QAGF;QACAxB,MAAA,CAAOkC,MAAM,CAAC;UACZ,MAAMC,IAAA,GAAO5E,aAAA,CAAcY,OAAA;UAC3B,IAAIgE,IAAA,IAAQvE,YAAA,CAAauE,IAAA,GAAO;YAC9B,MAAMC,OAAA,GAAUH,gBAAA;YAChBG,OAAA,CAAQjC,SAAS,GAAGjC,QAAA,CAASiC,SAAS;YAEtCgC,IAAA,CAAKE,SAAS,CAACD,OAAA,EAAS;UAC1B;QACF;QAEA/B,eAAA,CAAgBmB,KAAA;QAChBR,cAAA,CAAeQ,KAAA,CAAMc,WAAW,EAAErB,gBAAA,EAAkBC,UAAA;QACpDE,cAAA,CAAeI,KAAA,CAAMc,WAAW,EAAErB,gBAAA,EAAkBI,KAAA;MACtD;IACF;IAEA,IAAInD,QAAA,IAAY,CAACkC,YAAA,EAAc;MAC7B,KAAKmB,iBAAA;IACP;IAEA,OAAO;MACL3E,cAAA,CAAe0E,eAAA;IACjB;EACF,GAAG,CACDrB,YAAA,EACAC,gBAAA,EACA7B,EAAA,EACAH,QAAA,EACA8B,MAAA,EACA7B,OAAA,EACAiC,YAAA,EACA9B,cAAA,EACAC,UAAA,EACAuB,iBAAA,EACAZ,oBAAA,CACD;EAED,MAAM,CAACqD,WAAA,EAAaC,cAAA,CAAe,GAAGzF,KAAA,CAAMyC,QAAQ,CAClDZ,uBAAA,GAA0BV,QAAA,CAASG,EAAE,CAAC,EAAEoE,SAAA,IAAa;EAGvD,MAAMC,6BAAA,GAAgC,GAAG3D,UAAA,mDAA6Db,QAAA,CAASiC,SAAS,EAAE;EAE1H,MAAMwC,eAAA,GAAkBlE,sBAAsB,CAAC,SAAS;EAExD,MAAMmE,WAAA,GAA6CD,eAAA,GACjDD,6BAAA,CACD,GAAG,EAAE;EAEN,MAAMG,WAAA,GAAuCD,WAAA,CAAYE,eAAe,GACpE,OAAOF,WAAA,EAAaE,eAAA,GAAkB,EAAE,KAAK,WAC3CrD,MAAA,CAAOsD,SAAS,CAACH,WAAA,EAAaE,eAAA,GAAkB,EAAE,CAAC,GACnDF,WAAA,EAAaE,eAAA,GAAkB,EAAE,GACnCF,WAAA,EAAaI,MAAA,GAAS,EAAE;EAE5B,MAAM;IAAEC,IAAI;IAAEC;EAAC,CAAE,GAAGvG,cAAA;EAEpB,MAAMwG,QAAA,GAAWnG,WAAA,CACf,OAAO;IAAEsD,SAAA,EAAW8C,aAAa;IAAEC;EAAM,CAA8C;IACrFzG,cAAA,CAAeuC,0BAAA,CAA2B2B,OAAO;IAEjD,MAAMwC,UAAA,GAAa,IAAIlE,eAAA;IACvBD,0BAAA,CAA2B2B,OAAO,GAAGwC,UAAA;IAErC,MAAM;MAAE9B,KAAA,EAAO+B;IAAY,CAAE,GAAG,MAAMtD,YAAA,CAAa;MACjD5B,EAAA;MACAC,cAAA;MACAoD,cAAA,EAAgB;QACdzC,MAAA,EAAQ;MACV;MACA0C,cAAA,EAAgB,MAAM7B,iBAAA;MACtB8B,iBAAA,EAAmB/E,0CAAA,CAA2CqC,oBAAA;MAC9DoB,SAAA,EAAW8C,aAAA;MACX7E,UAAA;MACAiF,qBAAA,EAAuBJ,aAAA;MACvBtB,SAAA,EAAW;MACXC,eAAA,EAAiBsB,MAAA,GAAS,OAAO;MACjCtE,UAAA,EAAYmB,gBAAA;MACZ8B,MAAA,EAAQsB,UAAA,CAAWtB;IACrB;IAEA,IAAI,CAACuB,YAAA,EAAc;MACjB,OAAOH,aAAA;IACT;IAEA,IAAIA,aAAA,CAAc7C,SAAS,EAAE;MAC3BgD,YAAA,CAAahD,SAAS,GAAG6C,aAAA,CAAc7C,SAAS;IAClD;IAEA,MAAM0B,kBAAA,GAAgCnF,oBAAA,CACpCgB,sBAAA,CAAuB;MACrBmB,MAAA,EAAQpC,0CAAA,CAA2C0G,YAAA;IACrD,IACA;IAGFE,UAAA,CAAW;MACTzD,MAAA,CAAOkC,MAAM,CAAC;QACZ,MAAMC,MAAA,GAAO5E,aAAA,CAAcY,OAAA;QAC3B,IAAIgE,MAAA,IAAQvE,YAAA,CAAauE,MAAA,GAAO;UAC9B,MAAMC,SAAA,GAAUH,kBAAA;UAChBG,SAAA,CAAQjC,SAAS,GAAGjC,QAAA,CAASiC,SAAS;UACtCgC,MAAA,CAAKE,SAAS,CAACD,SAAA,EAAS;QAC1B;MACF;IACF,GAAG;IAEH,IAAIiB,MAAA,EAAQ;MACVrC,cAAA,CAAeuC,YAAA,CAAajB,WAAW,EAAErB,gBAAA,EAAkBC,UAAA;MAC3DE,cAAA,CAAemC,YAAA,CAAajB,WAAW,EAAErB,gBAAA,EAAkBI,KAAA;MAE3D,IAAIqC,aAAA,GAAgB;MACpB,KAAK,MAAMC,SAAA,IAAaC,MAAA,CAAOC,MAAM,CAACN,YAAA,GAAe;QACnD,IAAII,SAAA,EAAWjD,KAAA,KAAU,OAAO;UAC9BgD,aAAA;QACF;MACF;MACAnE,aAAA,CAAcmE,aAAA;IAChB;IAEA,OAAOH,YAAA;EACT,GAEA,CACEtD,YAAA,EACA5B,EAAA,EACAC,cAAA,EACAwB,iBAAA,EACAvB,UAAA,EACA2B,gBAAA,EACAhC,QAAA,CAASiC,SAAS,EAClBjB,oBAAA,EACAc,MAAA,EACA7B,OAAA,CACD;EAGHlB,SAAA,CAAU;IACR,OAAO;MACLL,cAAA,CAAeuC,0BAAA,CAA2B2B,OAAO;IACnD;EACF,GAAG,EAAE;EAEL,MAAMgD,WAAA,GAAc9G,WAAA,CAAY;IAC9BgD,MAAA,CAAOkC,MAAM,CAAC;MACZ3E,aAAA,CAAcY,OAAA,GAAU4F,MAAA;IAC1B;EACF,GAAG,CAAC/D,MAAA,EAAQ7B,OAAA,CAAQ;EAEpB,MAAM6F,gBAAA,GAAmBnB,WAAA,EAAaoB,MAAA,EAAQC,QAAA,GAC1C5G,cAAA,CAAeuF,WAAA,CAAYoB,MAAM,CAACC,QAAQ,EAAEjB,IAAA,IAC5CJ,WAAA,EAAalD,IAAA;EAEjB,MAAMwE,iBAAA,GAAoBnH,WAAA,CACvBoH,gBAAA;IACC,KAAKtE,iBAAA,GAAoBuE,IAAI,CAAEC,qBAAA;MAC7B,MAAMC,uBAAA,GACJD,qBAAA,EAAuBrF,MAAA,GAASN,0BAAA,CAA2B6F,IAAI,CAAC;MAElE,MAAMC,cAAA,GAAiBF,uBAAA,EAAyB9B,SAAA;MAEhD,MAAMiC,YAAA,GACJD,cAAA,IAAkBA,cAAA,EAAgBE,MAAA,GAASF,cAAA,GAAiB,EAAE;MAEhE,IAAIL,gBAAA,EAAkB;QACpB,IAAI,CAACM,YAAA,CAAaE,QAAQ,CAAC1G,QAAA,CAASG,EAAE,GAAG;UACvCqG,YAAA,CAAaG,IAAI,CAAC3G,QAAA,CAASG,EAAE;QAC/B;MACF,OAAO;QACL,IAAIqG,YAAA,CAAaE,QAAQ,CAAC1G,QAAA,CAASG,EAAE,GAAG;UACtCqG,YAAA,CAAaI,MAAM,CAACJ,YAAA,CAAaK,OAAO,CAAC7G,QAAA,CAASG,EAAE,GAAG;QACzD;MACF;MAEA0B,sBAAA,CAAuBpB,0BAAA,CAA2B6F,IAAI,EAAE;QACtD/B,SAAA,EAAWiC,YAAA;QACXM,KAAA,EAAO;MACT;IACF;EACF,GACA,CAAClF,iBAAA,EAAmBnB,0BAAA,CAA2B6F,IAAI,EAAEzE,sBAAA,EAAwB7B,QAAA,CAASG,EAAE,CAAC;EAG3F,MAAM4G,UAAA,GAAa/H,OAAA,CACjB,MAAM,mBACJgI,IAAA,CAACxJ,MAAA;IACCyJ,WAAA,EAAY;IACZC,SAAA,EAAW,GAAGhI,SAAA,cAAuB;IACrCiI,QAAA,EAAUvG,QAAA;IACVwG,EAAA,EAAG;IACHC,IAAA,EAAK;IACLC,OAAA,EAAUC,CAAA;MACRA,CAAA,CAAEC,cAAc;MAChBD,CAAA,CAAEE,eAAe;MACjB9F,YAAA;MACA,OAAO;IACT;IACA+F,WAAA,EAAcH,GAAA;MACZ;MACA;MACAA,GAAA,CAAEC,cAAc;IAClB;IACAG,KAAK;IACLC,IAAA,EAAK;IACLC,OAAA,EAAS7C,CAAA,CAAE,oCAAoC;MAAE8C,KAAA,EAAOhC;IAAiB;MAG7E,CAACA,gBAAA,EAAkBlF,QAAA,EAAUoE,CAAA,EAAGrD,YAAA,CAAa;EAG/C,MAAMoG,YAAA,GAAe/I,OAAA,CACnB,MAAM,mBACJgI,IAAA,CAACxJ,MAAA;IACCyJ,WAAA,EAAY;IACZC,SAAA,EAAW,GAAGhI,SAAA,gBAAyB;IACvCiI,QAAA,EAAU1G,0BAAA,EAA4BuH,KAAA,EAAOpH,QAAA,IAAY;IACzDyG,IAAA,EAAK;IACLC,OAAA,EAAUC,GAAA;MACRA,GAAA,CAAEC,cAAc;MAChB5B,WAAA;IACF;IACA+B,KAAK;IACLE,OAAA,EAAQ;MAGZ,CAACpH,0BAAA,EAA4BuH,KAAA,EAAOpH,QAAA,EAAUgF,WAAA,CAAY;EAG5D,MAAMqC,gBAAA,GAAmBjJ,OAAA,CACvB,MACE,CAAC;IACCkJ,QAAQ;IACRC,gBAAgB;IAChBC,UAAU;IACVhH,UAAU,EAAVA,YAAU;IACViH,cAAc;IACdC,KAAK;IACLC;EAAY,CAYb,kBACCvB,IAAA,CAAC;IAAIE,SAAA,EAAWhI,SAAA,GAAY,MAAMA,SAAA,GAAY,MAAMc,QAAA,CAASiC,SAAS;cACpE,aAAA+E,IAAA,CAACvJ,WAAA;MACCyJ,SAAA,EAAW,CACT,GAAGhI,SAAA,OAAgB,EACnBmJ,cAAA,GAAiB,GAAGnJ,SAAA,mBAA4B,GAAG,GAAGA,SAAA,kBAA2B,CAClF,CAACsJ,IAAI,CAAC;MACPC,gBAAA,EAAkBJ,cAAA,GAAiB,UAAU;MAC7CK,MAAA,eACEC,KAAA,CAAC;QAAIzB,SAAA,EAAW,GAAGhI,SAAA,gBAAyB;mBACxCoJ,KAAA,IAASzF,WAAA,GACRyF,KAAA,IAASzF,WAAA,gBAEV8F,KAAA,CAAC;kCACC3B,IAAA,CAAChJ,IAAA;YACCkJ,SAAA,EAAW,GAAGhI,SAAA,gBAAyBA,SAAA,gBAAyBc,QAAA,EAAUiC,SAAA,EAAW;YACrF2G,SAAA,EAAU;YACVhB,IAAA,EAAK;sBAEJ9B,gBAAA,IAAoB9F,QAAA,EAAUiC;cAEhC,CAACkG,gBAAA,IAAoB,CAACxD,WAAA,EAAaqD,KAAA,EAAOG,gBAAA,iBACzCnB,IAAA,CAAC9I,YAAA;YACC2K,IAAA,EAAK;YACLjI,QAAA,EAAUH,0BAAA,EAA4BuH,KAAA,EAAOpH,QAAA,IAAY;cAI5DyH,cAAA,iBACCrB,IAAA,CAACpJ,SAAA;YAAUkL,KAAA,EAAO1H,YAAA,IAAc;YAAG2D,IAAA,EAAMA,IAAA;YAAMgE,WAAW;;yBAKhEJ,KAAA,CAAC;qBACG1F,WAAA,IAAemF,UAAA,KAAe,SAAW,CAACnF,WAAA,IAAemF,UAAA,gBACzDpB,IAAA,CAACD,UAAA,QACC,MACHwB,YAAA,KAAiB,SAASzG,MAAA,CAAOkH,UAAU,kBAAKhC,IAAA,CAACe,YAAA,QAAkB;;;MAI1E1D,WAAA,EAAaA,WAAA;MAEb4E,QAAA,EAAWC,sBAAA;QACTjD,iBAAA,CAAkBiD,sBAAA;QAClB5E,cAAA,CAAe4E,sBAAA;MACjB;gBAEChB;OANI;MAUb,CACEjF,WAAA,EACAJ,WAAA,EACAkE,UAAA,EACAgB,YAAA,EACAjC,gBAAA,EACAnB,WAAA,EAAaqD,KAAA,EAAOG,gBAAA,EACpBrG,MAAA,EACA9B,QAAA,CAASiC,SAAS,EAClB8C,IAAA,EACAV,WAAA,EACA4B,iBAAA,EACAxF,0BAAA,EAA4BuH,KAAA,EAAOpH,QAAA,CACpC;EAGH,MAAMuI,WAAA,GAAcnK,OAAA,CAClB,MAAM,mBACJgI,IAAA,CAACrJ,iBAAA;cACC,aAAAqJ,IAAA,CAACtJ,MAAA;MACCwJ,SAAA,EAAW;MACXzF,IAAA,EAAMD,UAAA;MACN4H,KAAA,EAAOpE,CAAA,CAAE,+BAA+BhF,QAAA,EAAUG,EAAA,GAAK,SAAS,UAAU,EAAE;QAC1E2H,KAAA,EAAOhC,gBAAA,IAAoBd,CAAA,CAAE;MAC/B;gBAEC9C,YAAA,gBACCyG,KAAA,CAAAU,SAAA;gCACErC,IAAA,CAAC/I,YAAA;UACC8C,MAAA,EAAQ4D,WAAA,EAAa5D,MAAA,IAAU,EAAE;UACjCuI,WAAW;UACXC,eAAA,EAAgB;UAChBC,UAAA,EAAW,GAAG;UAAA;;UACdC,gBAAA,EAAkBzH,gBAAA;UAClBrB,WAAA,EAAa;UACbC,QAAA,EAAU;yBAEZoG,IAAA,CAACjJ,UAAA;UAAW2L,kBAAA,EAAoB;oBAAO1E,CAAA,CAAE;;WAEzC;;MAIV,CACE9C,YAAA,EACAV,UAAA,EACAsE,gBAAA,EACAd,CAAA,EACAL,WAAA,EAAa5D,MAAA,EACbiB,gBAAA,EACArB,WAAA,CAED;EAGH;EACA,MAAMwC,KAAA,GAAQnE,OAAA,CAAQ;IACpB,IAAI,CAACkD,YAAA,EAAc;MACjB,OAAO;IACT;IACA,oBACE8E,IAAA,CAACnJ,IAAA;MACC8L,YAAA,EAAc,CACZ,OAAO;QAAEvH;MAAS,CAAE;QAClB;QACA,OAAO,MAAM6C,QAAA,CAAS;UAAE7C,SAAA;UAAW+C,MAAA,EAAQ;QAAK;MAClD,EACD;MACDiC,EAAA,EAAG;MACHrG,MAAA,EAAQ4D,WAAA,EAAa5D,MAAA,IAAU,EAAE;MACjCmB,YAAA,EAAcA,YAAA;MACd+C,QAAA,EAAU,CAACA,QAAA,CAAS;MACpB2E,QAAA,EAAUA,CAACxH,WAAA,EAAW8B,SAAA;QACpB;QACAA,SAAA,CAAQjC,SAAS,GAAGjC,QAAA,CAASiC,SAAS;QACtCH,MAAA,CAAOkC,MAAM,CAAC;UACZ,MAAMC,MAAA,GAAO5E,aAAA,CAAcY,OAAA;UAC3B,IAAIgE,MAAA,IAAQvE,YAAA,CAAauE,MAAA,GAAO;YAC9BA,MAAA,CAAKE,SAAS,CAACD,SAAA,EAAwB;UACzC;QACF;QACAvC,YAAA;MACF;MACAzB,SAAA,EAAWA,SAAA;MACXX,IAAA,EAAMA,IAAA;gBAEN,aAAAyH,IAAA,CAACrH,YAAA;QACCT,SAAA,EAAWA,SAAA;QACXiK,WAAA,EAAaA,WAAA;QACb1L,WAAA,EAAawK,gBAAA;QACbhF,WAAA,EAAaA,WAAA;QACb8D,UAAA,EAAYA,UAAA;QACZ3F,UAAA,EAAYA,UAAA;QACZyI,UAAA,EAAYlF,WAAA,EAAa5D,MAAA,IAAU,EAAE;QACrCmB,YAAA,EAAcA,YAAA;QACdjC,OAAA,EAASA,OAAA;QACT8H,YAAA,EAAcA;;;EAItB,GAAG,CACDE,gBAAA,EACAkB,WAAA,EACAlG,WAAA,EACA0B,WAAA,EAAa5D,MAAA,EACbgH,YAAA,EACAhB,UAAA,EACAjF,MAAA,EACAV,UAAA,EACAO,YAAA,EACAgD,WAAA,EAAa5D,MAAA;EACb;EACAmB,YAAA,EACAjC,OAAA,EACAgF,QAAA,EACA/E,SAAA,CACD;EAED,IAAI,CAACyE,WAAA,EAAa;IAChB,oBACEqC,IAAA,CAACiB,gBAAA;MAAiBE,gBAAA,EAAkB;MAAME,cAAA,EAAgB;gBACxD,aAAAM,KAAA,CAAC;QAAIzB,SAAA,EAAU;mBAA0B,kBACxBlH,QAAA,CAASiC,SAAS,EAAC;;;EAI1C;EAEA,OAAOkB,KAAA;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,EAAwC,SAAS,EAAE,MAAM,SAAS,CAAA;AAuB9E,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,uCAA+C,CAAA;AAE1F,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
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,EAAwC,SAAS,EAAE,MAAM,SAAS,CAAA;AAuB9E,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,uCAA+C,CAAA;AAE1F,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAgZhD,CAAA"}
|
|
@@ -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","useConfig","useDocumentForm","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","use","InlineBlockComponent","props","cacheBuster","formData","nodeKey","editor","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","readOnly","schemaPath","setCreatedInlineBlock","uuidFromContext","fields","parentDocumentFields","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","id","formState","hasMounted","prevCacheBuster","current","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","config","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blockReferences","blocksMap","blocks","clientBlockFields","getKey","length","undefined","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","initialBlockData","initialBlockFormState","operation","renderAllFields","signal","newFormStateData","node","newData","setFields","onChange","prevFormState","submit","controller","isStateOutOfSync","Object","keys","some","key","value","onFormSubmit","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","permissions","programmaticSubmit","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, ClientBlock, 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 useConfig,\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, reduceFieldsToValues } 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.use(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: { featureClientSchemaMap, initialLexicalFormState, readOnly, schemaPath },\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 const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\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 const { config } = useConfig()\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: ClientBlock | undefined = blocksField.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : 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 const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\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 editor,\n nodeKey,\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 const isStateOutOfSync = (formData: InlineBlockFields, initialState: FormState) => {\n return Object.keys(initialState).some(\n (key) => initialState[key] && formData[key] !== initialState[key].value,\n )\n }\n\n return () => {\n // If the component is unmounted (either via removeInlineBlock or via lexical itself) and the form state got changed before,\n // we need to reset the initial state to force a re-fetch of the initial state when it gets mounted again (e.g. via lexical history undo).\n // Otherwise it would use an outdated initial state.\n if (initialState && isStateOutOfSync(formData, initialState)) {\n setInitialState(false)\n }\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [formData, initialState])\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 el=\"div\"\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={true}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext>\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,SAAS,EACTC,eAAe,EACfC,eAAe,EACfC,YAAY,EACZC,kBAAkB,EAClBC,cAAc,QACT;AACP,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAI9B,SAASC,0CAA0C,EAAEC,oBAAoB,QAAQ;AACjF,SAASC,EAAA,IAAMC,IAAI,QAAQ;AAI3B,SAASC,sBAAsB,QAAQ;AACvC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,kBAAkB,QAAQ;AAsBnC,MAAMC,2BAAA,gBAA8B/B,aAAA,CAA+C;EACjFgC,YAAA,EAAc;AAChB;AAEA,OAAO,MAAMC,8BAAA,GAAiCA,CAAA,KAAMlC,KAAA,CAAMmC,GAAG,CAACH,2BAAA;AAE9D,OAAO,MAAMI,oBAAA,GAAyCC,KAAA;EACpD,MAAM;IAAEC,WAAW;IAAEC,QAAQ;IAAEC;EAAO,CAAE,GAAGH,KAAA;EAE3C,MAAM,CAACI,MAAA,CAAO,GAAGlC,yBAAA;EACjB,MAAM;IAAEmC,IAAI;IAAEC;EAAC,CAAE,GAAGrB,cAAA;EACpB,MAAM;IACJsB,kBAAkB;IAClBC,UAAA,EAAY;MAAEC,sBAAsB;MAAEC,uBAAuB;MAAEC,QAAQ;MAAEC;IAAU,CAAE;IACrFC,qBAAqB;IACrBtB,IAAA,EAAMuB;EAAe,CACtB,GAAGtB,sBAAA;EACJ,MAAM;IAAEuB,MAAA,EAAQC;EAAoB,CAAE,GAAGnC,eAAA;EAEzC,MAAM;IAAEoC;EAAY,CAAE,GAAGjC,kBAAA;EACzB,MAAMkC,SAAA,GAAYnC,YAAA;EAClB,MAAMoC,eAAA,GAAkBnD,MAAA,CAAO;EAE/B,MAAM,CAAC4B,YAAA,EAAcwB,eAAA,CAAgB,GAAGzD,KAAA,CAAM0D,QAAQ,CACpD,MAAMX,uBAAA,GAA0BR,QAAA,CAASoB,EAAE,CAAC,EAAEC,SAAA;EAGhD,MAAMC,UAAA,GAAaxD,MAAA,CAAO;EAC1B,MAAMyD,eAAA,GAAkBzD,MAAA,CAAOiC,WAAA;EAC/BnC,SAAA,CAAU;IACR,IAAI0D,UAAA,CAAWE,OAAO,EAAE;MACtB,IAAID,eAAA,CAAgBC,OAAO,KAAKzB,WAAA,EAAa;QAC3CmB,eAAA,CAAgB;MAClB;MACAK,eAAA,CAAgBC,OAAO,GAAGzB,WAAA;IAC5B,OAAO;MACLuB,UAAA,CAAWE,OAAO,GAAG;IACvB;EACF,GAAG,CAACzB,WAAA,CAAY;EAEhB,MAAM,CAAC0B,WAAA,EAAaC,cAAA,CAAe,GAAGjE,KAAA,CAAM0D,QAAQ;EAClD;EACAzB,YAAA,GAAe,cAAc,EAAEiC,gBAAA,EAAkBC,UAAA;EAGnD,MAAM,CAACC,WAAA,EAAaC,cAAA,CAAe,GAAGrE,KAAA,CAAM0D,QAAQ;EAClD;EACAzB,YAAA,GAAe,cAAc,EAAEiC,gBAAA,EAAkBI,KAAA;EAGnD,MAAMC,UAAA,GAAa1D,gBAAA,CAAiB;IAClC2D,IAAA,EAAM,+BAA+BrB,eAAA,IAAmBZ,QAAA,CAASoB,EAAE,EAAE;IACrEc,KAAA,EAAOlB;EACT;EACA,MAAM;IAAEmB;EAAY,CAAE,GAAG5C,gBAAA,CAAiByC,UAAA,EAAY;EAEtD,MAAMI,sBAAA,GAAyBtE,MAAA,CAA8B;EAC7D,MAAM;IAAEsD,EAAE;IAAEiB,cAAc;IAAEC,iBAAiB;IAAEC;EAAU,CAAE,GAAG3D,eAAA;EAC9D,MAAM;IAAE4D;EAAM,CAAE,GAAG9D,SAAA;EAEnB,MAAM+D,6BAAA,GAAgC,GAAG/B,UAAA,0DAAoEV,QAAA,CAAS0C,SAAS,EAAE;EAEjI,MAAMC,eAAA,GAAkBpC,sBAAsB,CAAC,SAAS;EAExD,MAAMqC,WAAA,GAAiCD,eAAA,GACrCF,6BAAA,CACD,GAAG,EAAE;EAEN,MAAMI,WAAA,GAAuCD,WAAA,CAAYE,eAAe,GACpE,OAAOF,WAAA,EAAaE,eAAA,GAAkB,EAAE,KAAK,WAC3CN,MAAA,CAAOO,SAAS,CAACH,WAAA,EAAaE,eAAA,GAAkB,EAAE,CAAC,GACnDF,WAAA,EAAaE,eAAA,GAAkB,EAAE,GACnCF,WAAA,EAAaI,MAAA,GAAS,EAAE;EAE5B,MAAMC,iBAAA,GAAoBJ,WAAA,EAAahC,MAAA,IAAU,EAAE;EAEnD;EACAjD,SAAA,CAAU;IACR,IAAI,CAACqD,eAAA,CAAgBO,OAAO,IAAInB,kBAAA,EAAoB6C,MAAA,OAAajD,OAAA,EAAS;MACxE;MACA,IAAIgD,iBAAA,CAAkBE,MAAM,GAAG,GAAG;QAChChB,YAAA;MACF;MACAxB,qBAAA,GAAwByC,SAAA;MACxBnC,eAAA,CAAgBO,OAAO,GAAG;IAC5B;EACF,GAAG,CAACyB,iBAAA,CAAkBE,MAAM,EAAE9C,kBAAA,EAAoBJ,OAAA,EAASU,qBAAA,EAAuBwB,YAAA,CAAa;EAE/F,MAAMkB,iBAAA,GAAoB1F,WAAA,CAAY;IACpCuC,MAAA,CAAOoD,MAAM,CAAC;MACZrE,aAAA,CAAcgB,OAAA,GAAUsD,MAAA;IAC1B;EACF,GAAG,CAACrD,MAAA,EAAQD,OAAA,CAAQ;EAEpB,MAAMuD,gBAAA,GAAmBX,WAAA,EAAaY,MAAA,EAAQC,QAAA,GAC1CzF,cAAA,CAAe4E,WAAA,EAAaY,MAAA,CAAOC,QAAA,EAAUvD,IAAA,IAC7C0C,WAAA,EAAaZ,IAAA;EAEjB,MAAM0B,0BAAA,GAA6B7F,MAAA,CAAO,IAAI8F,eAAA;EAC9C,MAAMC,gBAAA,GAAmB,GAAGnD,UAAA,0DAAoEmC,WAAA,EAAaZ,IAAA,SAAa;EAE1H;EACArE,SAAA,CAAU;IACR,MAAMkG,eAAA,GAAkB,IAAIF,eAAA;IAE5B,MAAMG,iBAAA,GAAoB,MAAAA,CAAA;MACxB;;;;;MAKA,MAAM;QAAEC;MAAK,CAAE,GAAG,MAAMjD,YAAA,CAAa;QACnCK,EAAA;QACAiB,cAAA;QACA4B,IAAA,EAAMjE,QAAA;QACNkE,cAAA,EAAgB;UAAErD,MAAA,EAAQ;QAAK;QAC/BsD,cAAA,EAAgB,MAAM7B,iBAAA;QACtB8B,iBAAA,EAAmBlF,0CAAA,CAA2C4B,oBAAA;QAC9DyB,UAAA;QACA8B,gBAAA,EAAkBrE,QAAA;QAClBsE,qBAAA,EAAuBtE,QAAA;QACvBuE,SAAA,EAAW;QACXC,eAAA,EAAiB;QACjB9D,UAAA,EAAYmD,gBAAA;QACZY,MAAA,EAAQX,eAAA,CAAgBW;MAC1B;MAEA,IAAIT,KAAA,EAAO;QACT,MAAMU,gBAAA,GAAsCvF,oBAAA,CAC1CD,0CAAA,CAA2C8E,KAAA,GAC3C;QAGF;QACA9D,MAAA,CAAOoD,MAAM,CAAC;UACZ,MAAMqB,IAAA,GAAO1F,aAAA,CAAcgB,OAAA;UAC3B,IAAI0E,IAAA,IAAQnF,kBAAA,CAAmBmF,IAAA,GAAO;YACpC,MAAMC,OAAA,GAAUF,gBAAA;YAChBE,OAAA,CAAQlC,SAAS,GAAG1C,QAAA,CAAS0C,SAAS;YAEtCiC,IAAA,CAAKE,SAAS,CAACD,OAAA,EAAS;UAC1B;QACF;QAEA1D,eAAA,CAAgB8C,KAAA;QAChBtC,cAAA,CAAesC,KAAK,CAAC,cAAc,EAAErC,gBAAA,EAAkBC,UAAA;QACvDE,cAAA,CAAekC,KAAK,CAAC,cAAc,EAAErC,gBAAA,EAAkBI,KAAA;MACzD;IACF;IAEA,IAAI/B,QAAA,IAAY,CAACN,YAAA,EAAc;MAC7B,KAAKqE,iBAAA;IACP;IAEA,OAAO;MACL/E,cAAA,CAAe8E,eAAA;IACjB;EACF,GAAG,CACD/C,YAAA,EACAb,MAAA,EACAD,OAAA,EACA4D,gBAAA,EACAzC,EAAA,EACApB,QAAA,EACAN,YAAA,EACA2C,cAAA,EACAE,UAAA,EACAD,iBAAA,EACAxB,oBAAA,CACD;EAED;;;EAGA,MAAMgE,QAAA,GAAWnH,WAAA,CACf,OAAO;IAAE0D,SAAA,EAAW0D,aAAa;IAAEC;EAAM,CAA8C;IACrFhG,cAAA,CAAe2E,0BAAA,CAA2BnC,OAAO;IAEjD,MAAMyD,UAAA,GAAa,IAAIrB,eAAA;IACvBD,0BAAA,CAA2BnC,OAAO,GAAGyD,UAAA;IAErC,MAAM;MAAEjB,KAAK,EAALA;IAAK,CAAE,GAAG,MAAMjD,YAAA,CAAa;MACnCK,EAAA;MACAiB,cAAA;MACA6B,cAAA,EAAgB;QACdrD,MAAA,EAAQ;MACV;MACAsD,cAAA,EAAgB,MAAM7B,iBAAA;MACtB8B,iBAAA,EAAmBlF,0CAAA,CAA2C4B,oBAAA;MAC9DO,SAAA,EAAW0D,aAAA;MACXxC,UAAA;MACA+B,qBAAA,EAAuBS,aAAA;MACvBR,SAAA,EAAW;MACXC,eAAA,EAAiBQ,MAAA,GAAS,OAAO;MACjCtE,UAAA,EAAYmD,gBAAA;MACZY,MAAA,EAAQQ,UAAA,CAAWR;IACrB;IAEA,IAAI,CAACT,OAAA,EAAO;MACV,OAAOe,aAAA;IACT;IAEA,IAAIC,MAAA,EAAQ;MACVtD,cAAA,CAAesC,OAAK,CAAC,cAAc,EAAErC,gBAAA,EAAkBC,UAAA;MACvDE,cAAA,CAAekC,OAAK,CAAC,cAAc,EAAErC,gBAAA,EAAkBI,KAAA;IACzD;IAEA,OAAOiC,OAAA;EACT,GACA,CACEjD,YAAA,EACAK,EAAA,EACAiB,cAAA,EACAC,iBAAA,EACAxB,oBAAA,EACAyB,UAAA,EACAsB,gBAAA,CACD;EAEH;EACAjG,SAAA,CAAU;IACR,MAAMsH,gBAAA,GAAmBA,CAAClF,UAAA,EAA6BN,cAAA;MACrD,OAAOyF,MAAA,CAAOC,IAAI,CAAC1F,cAAA,EAAc2F,IAAI,CAClCC,GAAA,IAAQ5F,cAAY,CAAC4F,GAAA,CAAI,IAAItF,UAAQ,CAACsF,GAAA,CAAI,KAAK5F,cAAY,CAAC4F,GAAA,CAAI,CAACC,KAAK;IAE3E;IAEA,OAAO;MACL;MACA;MACA;MACA,IAAI7F,YAAA,IAAgBwF,gBAAA,CAAiBlF,QAAA,EAAUN,YAAA,GAAe;QAC5DwB,eAAA,CAAgB;MAClB;MACAlC,cAAA,CAAe2E,0BAAA,CAA2BnC,OAAO;IACnD;EACF,GAAG,CAACxB,QAAA,EAAUN,YAAA,CAAa;EAE3B;;;EAGA,MAAM8F,YAAA,GAAe7H,WAAA,CACnB,CAAC0D,SAAA,EAAsBuD,SAAA;IACrBA,SAAA,CAAQlC,SAAS,GAAG1C,QAAA,CAAS0C,SAAS;IAEtCxC,MAAA,CAAOoD,MAAM,CAAC;MACZ,MAAMqB,MAAA,GAAO1F,aAAA,CAAcgB,OAAA;MAC3B,IAAI0E,MAAA,IAAQnF,kBAAA,CAAmBmF,MAAA,GAAO;QACpCA,MAAA,CAAKE,SAAS,CAACD,SAAA,EAA8B;MAC/C;IACF;EACF,GACA,CAAC1E,MAAA,EAAQD,OAAA,EAASD,QAAA,CAAS;EAG7B,MAAMyF,YAAA,GAAe5H,OAAA,CACnB,MAAM,mBACJ6H,IAAA,CAACxH,MAAA;IACCyH,WAAA,EAAY;IACZC,SAAA,EAAW,GAAG7H,SAAA,gBAAyB;IACvC8H,QAAA,EAAUpF,QAAA;IACVqF,IAAA,EAAK;IACLC,OAAA,EAAUC,CAAA;MACRA,CAAA,CAAEC,cAAc;MAChB5C,iBAAA;IACF;IACA6C,KAAK;IACLC,IAAA,EAAK;IACLC,OAAA,EAAShG,CAAA,CAAE,sCAAsC;MAAEiG,KAAA,EAAO7C;IAAiB;MAG/E,CAACA,gBAAA,EAAkB/C,QAAA,EAAU4C,iBAAA,EAAmBjD,CAAA,CAAE;EAGpD,MAAMkG,UAAA,GAAazI,OAAA,CACjB,MAAM,mBACJ6H,IAAA,CAACxH,MAAA;IACCyH,WAAA,EAAY;IACZC,SAAA,EAAW,GAAG7H,SAAA,cAAuB;IACrC8H,QAAA,EAAUpF,QAAA;IACV8F,EAAA,EAAG;IACHT,IAAA,EAAK;IACLC,OAAA,EAASA,CAAA;MACP5D,YAAA;IACF;IACA+D,KAAK;IACLC,IAAA,EAAK;IACLC,OAAA,EAAShG,CAAA,CAAE,oCAAoC;MAAEiG,KAAA,EAAO7C;IAAiB;MAG7E,CAACA,gBAAA,EAAkB/C,QAAA,EAAUL,CAAA,EAAG+B,YAAA,CAAa;EAG/C,MAAMqE,oBAAA,GAAuB3I,OAAA,CAC3B,MACE,CAAC;IAAE4I,QAAQ;IAAEb;EAAS,CAAqD,kBACzEF,IAAA,CAAC;IACCE,SAAA,EAAW,CAAC7H,SAAA,EAAWA,SAAA,GAAY,MAAMiC,QAAA,CAAS0C,SAAS,EAAEkD,SAAA,CAAU,CACpEc,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;IACRC,GAAA,EAAKzE,sBAAA;cAEJqE;MAGP,CAACzG,QAAA,CAAS0C,SAAS,CAAC;EAGtB,MAAMoE,KAAA,GAAQjJ,OAAA,CAAQ;IACpB,IAAI4D,WAAA,EAAa;MACf,OAAO,MAAMA,WAAA;IACf,OAAO;MACL,OAAO,mBACLiE,IAAA,CAAC;kBAAK7C,WAAA,EAAaY,MAAA,GAASxF,cAAA,CAAe4E,WAAA,EAAaY,MAAA,CAAOC,QAAA,EAAUvD,IAAA,IAAQ;;IAErF;EACF,GAAG,CAACsB,WAAA,EAAaoB,WAAA,EAAaY,MAAA,EAAQtD,IAAA,CAAK;EAE3C,IAAI,CAAC0C,WAAA,EAAa;IAChB,oBACEkE,KAAA,CAACP,oBAAA;MAAqBZ,SAAA,EAAW,GAAG7H,SAAA,YAAqB;8BACvDgJ,KAAA,CAAC;mBAAK,kBAAe/G,QAAA,CAAS0C,SAAS,EAAC;UACvCxC,MAAA,CAAO8G,UAAU,kBAChBtB,IAAA,CAAC;QAAIE,SAAA,EAAW,GAAG7H,SAAA,WAAoB;kBACrC,aAAA2H,IAAA,CAACD,YAAA;WAED;;EAGV;EAEA,oBACEsB,KAAA,CAAC1I,IAAA;IACC4I,YAAA,EAAc,CACZ,OAAO;MAAE5F,SAAS,EAATA;IAAS,CAAE;MAClB;MACA,OAAO,MAAMyD,QAAA,CAAS;QAAEzD,SAAA,EAAAA,WAAA;QAAW2D,MAAA,EAAQ;MAAK;IAClD,EACD;IACDkC,yBAAyB;IACzBX,EAAA,EAAG;IACH1F,MAAA,EAAQgC,WAAA,EAAahC,MAAA;IACrBnB,YAAA,EAAcA,YAAA,IAAgB,CAAC;IAC/BoF,QAAA,EAAU,CAACA,QAAA,CAAS;IACpBqC,QAAA,EAAUA,CAAC9F,WAAA,EAAW4C,IAAA;MACpBuB,YAAA,CAAanE,WAAA,EAAW4C,IAAA;MACxB9B,YAAA;IACF;IACA9C,IAAA,EAAMA,IAAA;4BAENqG,IAAA,CAACtH,iBAAA;gBACC,aAAAsH,IAAA,CAACvH,MAAA;QACCyH,SAAA,EAAW;QACX3D,IAAA,EAAMD,UAAA;QACNoF,KAAA,EAAOhH,CAAA,CAAE,+BAA+BJ,QAAA,EAAUoB,EAAA,GAAK,SAAS,UAAU,EAAE;UAC1EiF,KAAA,EAAO7C,gBAAA,IAAoBpD,CAAA,CAAE;QAC/B;kBAECV,YAAA,gBACCqH,KAAA,CAAAM,SAAA;kCACE3B,IAAA,CAAClH,YAAA;YACCqC,MAAA,EAAQgC,WAAA,EAAahC,MAAA;YACrByG,WAAW;YACXC,eAAA,EAAgB;YAChBC,UAAA,EAAW,GAAG;YAAA;;YACdC,gBAAA,EAAkB5D,gBAAA;YAClB6D,WAAA,EAAa;YACbjH,QAAA,EAAU;2BAEZiF,IAAA,CAACnH,UAAA;YAAWoJ,kBAAA,EAAoB;sBAAOvH,CAAA,CAAE;;aAEzC;;QAGPyB,WAAA,gBACC6D,IAAA,CAACjG,2BAAA;MACC8F,KAAA,EAAO;QACLe,UAAA;QACA5G,YAAA;QACA8G,oBAAA;QACAM,KAAA;QACA7G,OAAA;QACAwF;MACF;gBAEC5D;sBAGHkF,KAAA,CAACP,oBAAA;iBACE9G,YAAA,gBAAegG,IAAA,CAACoB,KAAA,qBAAWpB,IAAA,CAACjH,aAAA;QAAcmJ,MAAA,EAAO;QAAOC,KAAA,EAAM;UAC9D3H,MAAA,CAAO8G,UAAU,kBAChBD,KAAA,CAAC;QAAInB,SAAA,EAAW,GAAG7H,SAAA,WAAoB;gCACrC2H,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","useConfig","useDocumentForm","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","use","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","hasMounted","prevCacheBuster","current","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","config","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blockReferences","blocksMap","blocks","clientBlockFields","getKey","length","undefined","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","initialBlockData","initialBlockFormState","operation","renderAllFields","signal","newFormStateData","node","newData","setFields","onChange","prevFormState","submit","controller","isStateOutOfSync","Object","keys","some","key","value","onFormSubmit","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","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, ClientBlock, 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 useConfig,\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, reduceFieldsToValues } 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.use(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 const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\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 const { config } = useConfig()\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: ClientBlock | undefined = blocksField.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : 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 const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\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 editor,\n nodeKey,\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 const isStateOutOfSync = (formData: InlineBlockFields, initialState: FormState) => {\n return Object.keys(initialState).some(\n (key) => initialState[key] && formData[key] !== initialState[key].value,\n )\n }\n\n return () => {\n // If the component is unmounted (either via removeInlineBlock or via lexical itself) and the form state got changed before,\n // we need to reset the initial state to force a re-fetch of the initial state when it gets mounted again (e.g. via lexical history undo).\n // Otherwise it would use an outdated initial state.\n if (initialState && isStateOutOfSync(formData, initialState)) {\n setInitialState(false)\n }\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [formData, initialState])\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 el=\"div\"\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={true}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext>\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":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/client/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/client/index.tsx"],"names":[],"mappings":"AAqBA,eAAO,MAAM,mBAAmB,8EAyL/B,CAAA"}
|
|
@@ -5,7 +5,6 @@ import { BlockIcon } from '../../../lexical/ui/icons/Block/index.js';
|
|
|
5
5
|
import { InlineBlocksIcon } from '../../../lexical/ui/icons/InlineBlocks/index.js';
|
|
6
6
|
import { createClientFeature } from '../../../utilities/createClientFeature.js';
|
|
7
7
|
import { getBlockImageComponent } from './getBlockImageComponent.js';
|
|
8
|
-
import { getBlockMarkdownTransformers } from './markdown/markdownTransformer.js';
|
|
9
8
|
import { BlockNode } from './nodes/BlocksNode.js';
|
|
10
9
|
import { InlineBlockNode } from './nodes/InlineBlocksNode.js';
|
|
11
10
|
import { INSERT_BLOCK_COMMAND, INSERT_INLINE_BLOCK_COMMAND } from './plugin/commands.js';
|
|
@@ -31,10 +30,6 @@ export const BlocksFeatureClient = createClientFeature(({
|
|
|
31
30
|
return field.blockReferences ? typeof field.blockReferences[0] === 'string' ? config.blocksMap[field.blockReferences[0]] : field.blockReferences[0] : field.blocks[0];
|
|
32
31
|
}).filter(block => block !== undefined);
|
|
33
32
|
return {
|
|
34
|
-
markdownTransformers: getBlockMarkdownTransformers({
|
|
35
|
-
blocks: clientBlocks,
|
|
36
|
-
inlineBlocks: clientInlineBlocks
|
|
37
|
-
}),
|
|
38
33
|
nodes: [BlockNode, InlineBlockNode],
|
|
39
34
|
plugins: [{
|
|
40
35
|
Component: BlocksPlugin,
|