@payloadcms/richtext-lexical 3.15.2-canary.64ffcd8 → 3.15.2-canary.8d5d2d1
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-C3BBYNYR.js → Field-VBZQOYLK.js} +2 -2
- package/dist/exports/client/{RelationshipComponent-F77EQHRG.js → RelationshipComponent-N4C5MX3U.js} +2 -2
- package/dist/exports/client/chunk-BB2LUWM3.js +2 -0
- package/dist/exports/client/chunk-BB2LUWM3.js.map +7 -0
- package/dist/exports/client/{chunk-JSFV2MHZ.js → chunk-HTQL4HTC.js} +2 -2
- package/dist/exports/client/{chunk-PGMIO4IN.js → chunk-JRIUM7SP.js} +2 -2
- package/dist/exports/client/chunk-NFESG2MI.js +2 -0
- package/dist/exports/client/chunk-NFESG2MI.js.map +7 -0
- package/dist/exports/client/{component-OQJ5KXCS.js → component-TYBPYPLA.js} +2 -2
- package/dist/exports/client/componentInline-JOZZDATD.js +2 -0
- package/dist/exports/client/index.js +16 -16
- package/dist/exports/client/index.js.map +3 -3
- package/dist/features/blockquote/server/i18n.js +1 -1
- package/dist/features/blockquote/server/i18n.js.map +1 -1
- package/dist/features/blocks/client/component/index.d.ts +6 -1
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +6 -2
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts +6 -0
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +17 -8
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.js +1 -0
- package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/client/nodes/InlineBlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/client/nodes/InlineBlocksNode.js +1 -0
- package/dist/features/blocks/client/nodes/InlineBlocksNode.js.map +1 -1
- package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
- package/dist/features/blocks/client/plugin/index.js +16 -12
- package/dist/features/blocks/client/plugin/index.js.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.d.ts +5 -2
- package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.js +11 -1
- package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts +5 -2
- package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.js +11 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
- package/dist/features/horizontalRule/server/i18n.js +1 -1
- package/dist/features/horizontalRule/server/i18n.js.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.d.ts +3 -0
- package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.js +4 -1
- package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
- package/package.json +7 -7
- package/dist/exports/client/chunk-CUIBIFW2.js +0 -2
- package/dist/exports/client/chunk-CUIBIFW2.js.map +0 -7
- package/dist/exports/client/chunk-QNRPT52J.js +0 -2
- package/dist/exports/client/chunk-QNRPT52J.js.map +0 -7
- package/dist/exports/client/componentInline-TPGMZRGQ.js +0 -2
- /package/dist/exports/client/{Field-C3BBYNYR.js.map → Field-VBZQOYLK.js.map} +0 -0
- /package/dist/exports/client/{RelationshipComponent-F77EQHRG.js.map → RelationshipComponent-N4C5MX3U.js.map} +0 -0
- /package/dist/exports/client/{chunk-JSFV2MHZ.js.map → chunk-HTQL4HTC.js.map} +0 -0
- /package/dist/exports/client/{chunk-PGMIO4IN.js.map → chunk-JRIUM7SP.js.map} +0 -0
- /package/dist/exports/client/{component-OQJ5KXCS.js.map → component-TYBPYPLA.js.map} +0 -0
- /package/dist/exports/client/{componentInline-TPGMZRGQ.js.map → componentInline-JOZZDATD.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","names":["i18n","ar","label","az","bg","cs","da","de","en","es","et","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sl","sv","th","tr","uk","vi","zh"],"sources":["../../../../src/features/blockquote/server/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n label: 'اقتباس',\n },\n az: {\n label: 'Blokkvota',\n },\n bg: {\n label: 'Цитат',\n },\n cs: {\n label: 'Citace',\n },\n da: {\n label: 'Blokering',\n },\n de: {\n label: 'Blockzitat',\n },\n en: {\n label: 'Blockquote',\n },\n es: {\n label: 'Cita en bloque',\n },\n et: {\n label: 'Tsitaat',\n },\n fa: {\n label: 'نقل قول بلوکی',\n },\n fr: {\n label: 'Citation',\n },\n he: {\n label: 'בלוק ציטוט',\n },\n hr: {\n label: 'Blok citat',\n },\n hu: {\n label: 'Idézetblokk',\n },\n it: {\n label: 'Citazione',\n },\n ja: {\n label: 'ブロッククォート',\n },\n ko: {\n label: '인용구',\n },\n my: {\n label: 'ဒေါင်းချီးခြင်း',\n },\n nb: {\n label: 'Blokksitat',\n },\n nl: {\n label: 'Citaat',\n },\n pl: {\n label: 'Cytat blokowy',\n },\n pt: {\n label: 'Citação em bloco',\n },\n ro: {\n label: 'Citat',\n },\n rs: {\n label: 'Блок цитата',\n },\n 'rs-latin': {\n label: 'Blok citata',\n },\n ru: {\n label: 'Цитата',\n },\n sk: {\n label: 'Citát',\n },\n sl: {\n label: 'Citat',\n },\n sv: {\n label: 'Blockcitat',\n },\n th: {\n label: '
|
|
1
|
+
{"version":3,"file":"i18n.js","names":["i18n","ar","label","az","bg","cs","da","de","en","es","et","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sl","sv","th","tr","uk","vi","zh"],"sources":["../../../../src/features/blockquote/server/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n label: 'اقتباس',\n },\n az: {\n label: 'Blokkvota',\n },\n bg: {\n label: 'Цитат',\n },\n cs: {\n label: 'Citace',\n },\n da: {\n label: 'Blokering',\n },\n de: {\n label: 'Blockzitat',\n },\n en: {\n label: 'Blockquote',\n },\n es: {\n label: 'Cita en bloque',\n },\n et: {\n label: 'Tsitaat',\n },\n fa: {\n label: 'نقل قول بلوکی',\n },\n fr: {\n label: 'Citation',\n },\n he: {\n label: 'בלוק ציטוט',\n },\n hr: {\n label: 'Blok citat',\n },\n hu: {\n label: 'Idézetblokk',\n },\n it: {\n label: 'Citazione',\n },\n ja: {\n label: 'ブロッククォート',\n },\n ko: {\n label: '인용구',\n },\n my: {\n label: 'ဒေါင်းချီးခြင်း',\n },\n nb: {\n label: 'Blokksitat',\n },\n nl: {\n label: 'Citaat',\n },\n pl: {\n label: 'Cytat blokowy',\n },\n pt: {\n label: 'Citação em bloco',\n },\n ro: {\n label: 'Citat',\n },\n rs: {\n label: 'Блок цитата',\n },\n 'rs-latin': {\n label: 'Blok citata',\n },\n ru: {\n label: 'Цитата',\n },\n sk: {\n label: 'Citát',\n },\n sl: {\n label: 'Citat',\n },\n sv: {\n label: 'Blockcitat',\n },\n th: {\n label: 'ข้อความอ้างอิง',\n },\n tr: {\n label: 'Alıntı',\n },\n uk: {\n label: 'Блокцитата',\n },\n vi: {\n label: 'Trích dẫn',\n },\n zh: {\n label: '块引用',\n },\n 'zh-TW': {\n label: '引用塊',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,IAAA,GAAkC;EAC7CC,EAAA,EAAI;IACFC,KAAA,EAAO;EACT;EACAC,EAAA,EAAI;IACFD,KAAA,EAAO;EACT;EACAE,EAAA,EAAI;IACFF,KAAA,EAAO;EACT;EACAG,EAAA,EAAI;IACFH,KAAA,EAAO;EACT;EACAI,EAAA,EAAI;IACFJ,KAAA,EAAO;EACT;EACAK,EAAA,EAAI;IACFL,KAAA,EAAO;EACT;EACAM,EAAA,EAAI;IACFN,KAAA,EAAO;EACT;EACAO,EAAA,EAAI;IACFP,KAAA,EAAO;EACT;EACAQ,EAAA,EAAI;IACFR,KAAA,EAAO;EACT;EACAS,EAAA,EAAI;IACFT,KAAA,EAAO;EACT;EACAU,EAAA,EAAI;IACFV,KAAA,EAAO;EACT;EACAW,EAAA,EAAI;IACFX,KAAA,EAAO;EACT;EACAY,EAAA,EAAI;IACFZ,KAAA,EAAO;EACT;EACAa,EAAA,EAAI;IACFb,KAAA,EAAO;EACT;EACAc,EAAA,EAAI;IACFd,KAAA,EAAO;EACT;EACAe,EAAA,EAAI;IACFf,KAAA,EAAO;EACT;EACAgB,EAAA,EAAI;IACFhB,KAAA,EAAO;EACT;EACAiB,EAAA,EAAI;IACFjB,KAAA,EAAO;EACT;EACAkB,EAAA,EAAI;IACFlB,KAAA,EAAO;EACT;EACAmB,EAAA,EAAI;IACFnB,KAAA,EAAO;EACT;EACAoB,EAAA,EAAI;IACFpB,KAAA,EAAO;EACT;EACAqB,EAAA,EAAI;IACFrB,KAAA,EAAO;EACT;EACAsB,EAAA,EAAI;IACFtB,KAAA,EAAO;EACT;EACAuB,EAAA,EAAI;IACFvB,KAAA,EAAO;EACT;EACA,YAAY;IACVA,KAAA,EAAO;EACT;EACAwB,EAAA,EAAI;IACFxB,KAAA,EAAO;EACT;EACAyB,EAAA,EAAI;IACFzB,KAAA,EAAO;EACT;EACA0B,EAAA,EAAI;IACF1B,KAAA,EAAO;EACT;EACA2B,EAAA,EAAI;IACF3B,KAAA,EAAO;EACT;EACA4B,EAAA,EAAI;IACF5B,KAAA,EAAO;EACT;EACA6B,EAAA,EAAI;IACF7B,KAAA,EAAO;EACT;EACA8B,EAAA,EAAI;IACF9B,KAAA,EAAO;EACT;EACA+B,EAAA,EAAI;IACF/B,KAAA,EAAO;EACT;EACAgC,EAAA,EAAI;IACFhC,KAAA,EAAO;EACT;EACA,SAAS;IACPA,KAAA,EAAO;EACT;AACF","ignoreList":[]}
|
|
@@ -2,7 +2,12 @@ import React from 'react';
|
|
|
2
2
|
import type { BlockFields } from '../../server/nodes/BlocksNode.js';
|
|
3
3
|
import './index.scss';
|
|
4
4
|
type Props = {
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Can be modified by the node in order to trigger the re-fetch of the initial state based on the
|
|
7
|
+
* formData. This is useful when node.setFields() is explicitly called from outside of the form - in
|
|
8
|
+
* this case, the new field state is likely not reflected in the form state, so we need to re-fetch
|
|
9
|
+
*/
|
|
10
|
+
readonly cacheBuster: number;
|
|
6
11
|
readonly formData: BlockFields;
|
|
7
12
|
readonly nodeKey: string;
|
|
8
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/component/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAkD,MAAM,OAAO,CAAA;AAStE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAMnE,OAAO,cAAc,CAAA;AAGrB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/component/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAkD,MAAM,OAAO,CAAA;AAStE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAMnE,OAAO,cAAc,CAAA;AAGrB,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAoe1C,CAAA"}
|
|
@@ -17,6 +17,7 @@ import { BlockContent } from './BlockContent.js';
|
|
|
17
17
|
import { removeEmptyArrayValues } from './removeEmptyArrayValues.js';
|
|
18
18
|
export const BlockComponent = props => {
|
|
19
19
|
const {
|
|
20
|
+
cacheBuster,
|
|
20
21
|
formData,
|
|
21
22
|
nodeKey
|
|
22
23
|
} = props;
|
|
@@ -68,6 +69,9 @@ export const BlockComponent = props => {
|
|
|
68
69
|
value: formData.blockName
|
|
69
70
|
}
|
|
70
71
|
} : false);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
setInitialState(false);
|
|
74
|
+
}, [cacheBuster]);
|
|
71
75
|
const [CustomLabel, setCustomLabel] = React.useState(
|
|
72
76
|
// @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
|
|
73
77
|
initialState?.['_components']?.customComponents?.BlockLabel);
|
|
@@ -163,7 +167,7 @@ export const BlockComponent = props => {
|
|
|
163
167
|
if (node && $isBlockNode(node)) {
|
|
164
168
|
const newData = newFormStateData;
|
|
165
169
|
newData.blockType = formData.blockType;
|
|
166
|
-
node.setFields(newData);
|
|
170
|
+
node.setFields(newData, true);
|
|
167
171
|
}
|
|
168
172
|
});
|
|
169
173
|
}, 0);
|
|
@@ -335,7 +339,7 @@ export const BlockComponent = props => {
|
|
|
335
339
|
editor.update(() => {
|
|
336
340
|
const node_0 = $getNodeByKey(nodeKey);
|
|
337
341
|
if (node_0 && $isBlockNode(node_0)) {
|
|
338
|
-
node_0.setFields(newData_0);
|
|
342
|
+
node_0.setFields(newData_0, true);
|
|
339
343
|
}
|
|
340
344
|
});
|
|
341
345
|
toggleDrawer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Button","Collapsible","Drawer","EditDepthProvider","ErrorPill","Form","formatDrawerSlug","FormSubmit","Pill","RenderFields","SectionTitle","useDocumentInfo","useEditDepth","useFormSubmitted","useServerFunctions","useTranslation","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","React","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","$getNodeByKey","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isBlockNode","BlockContent","removeEmptyArrayValues","BlockComponent","props","formData","nodeKey","submitted","id","collectionSlug","globalSlug","fieldProps","featureClientSchemaMap","field","parentLexicalRichTextField","initialLexicalFormState","permissions","readOnly","schemaPath","uuidFromContext","onChangeAbortControllerRef","AbortController","editDepth","errorCount","setErrorCount","useState","drawerSlug","slug","depth","toggleDrawer","getDocPreferences","setDocFieldPreferences","editor","getFormState","schemaFieldsPath","blockType","initialState","setInitialState","formState","blockName","initialValue","passesCondition","valid","value","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","abortController","awaitInitialState","state","data","docPermissions","fields","docPreferences","operation","renderAllFields","signal","_components","isCollapsed","setIsCollapsed","collapsed","componentMapRenderedBlockPath","clientSchemaMap","blocksField","clientBlock","blocks","i18n","t","onChange","prevFormState","submit","current","controller","newFormState","newFormStateData","setTimeout","update","node","newData","setFields","rowErrorCount","formField","Object","values","removeBlock","remove","blockDisplayName","labels","singular","onCollapsedChange","changedCollapsed","then","currentDocPreferences","currentFieldPreferences","name","collapsedArray","newCollapsed","length","includes","push","splice","indexOf","hello","EditButton","_jsx","buttonStyle","className","disabled","el","icon","onClick","e","preventDefault","stopPropagation","onMouseDown","round","size","tooltip","label","RemoveButton","admin","BlockCollapsible","children","editButton","fieldHasErrors","Label","removeButton","join","collapsibleStyle","header","_jsxs","pillStyle","path","count","withMessage","isEditable","onToggle","incomingCollapsedState","BlockDrawer","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","beforeSubmit","onSubmit","formSchema"],"sources":["../../../../../src/features/blocks/client/component/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Button,\n Collapsible,\n Drawer,\n EditDepthProvider,\n ErrorPill,\n Form,\n formatDrawerSlug,\n FormSubmit,\n Pill,\n RenderFields,\n SectionTitle,\n useDocumentInfo,\n useEditDepth,\n useFormSubmitted,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react'\n\nconst baseClass = 'lexical-block'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport { $getNodeByKey } from 'lexical'\nimport { type BlocksFieldClient, type CollapsedPreferences, type FormState } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isBlockNode } from '../nodes/BlocksNode.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\nimport { removeEmptyArrayValues } from './removeEmptyArrayValues.js'\n\ntype Props = {\n readonly children?: React.ReactNode\n readonly formData: BlockFields\n readonly nodeKey: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const submitted = useFormSubmitted()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n const {\n fieldProps: {\n featureClientSchemaMap,\n field: parentLexicalRichTextField,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const onChangeAbortControllerRef = useRef(new AbortController())\n const editDepth = useEditDepth()\n const [errorCount, setErrorCount] = React.useState(0)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-blocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n const [editor] = useLexicalComposerContext()\n\n const { getFormState } = useServerFunctions()\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}.fields`\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState\n ? {\n ...initialLexicalFormState?.[formData.id]?.formState,\n blockName: {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n }\n : false,\n )\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n state.blockName = {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n setInitialState(state)\n setCustomLabel(state._components?.customComponents?.BlockLabel)\n setCustomBlock(state._components?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(\n initialLexicalFormState?.[formData.id]?.collapsed ?? false,\n )\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap[\n componentMapRenderedBlockPath\n ][0] as BlocksFieldClient\n\n const clientBlock = blocksField.blocks[0]\n\n const { i18n, t } = useTranslation<object, string>()\n\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state: newFormState } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!newFormState) {\n return prevFormState\n }\n\n newFormState.blockName = prevFormState.blockName\n\n const newFormStateData: BlockFields = reduceFieldsToValues(\n removeEmptyArrayValues({\n fields: deepCopyObjectSimpleWithoutReactComponents(newFormState),\n }),\n true,\n ) as BlockFields\n\n setTimeout(() => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n node.setFields(newData)\n }\n })\n }, 0)\n\n if (submit) {\n setCustomLabel(newFormState._components?.customComponents?.BlockLabel)\n setCustomBlock(newFormState._components?.customComponents?.Block)\n\n let rowErrorCount = 0\n for (const formField of Object.values(newFormState)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n\n return newFormState\n },\n\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n globalSlug,\n schemaFieldsPath,\n formData.blockType,\n editor,\n nodeKey,\n ],\n )\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences =\n currentDocPreferences?.fields?.[parentLexicalRichTextField.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(parentLexicalRichTextField.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, parentLexicalRichTextField.name, setDocFieldPreferences, formData.id],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n toggleDrawer()\n return false\n }}\n onMouseDown={(e) => {\n // Needed to preserve lexical selection for toggleDrawer lexical selection restore.\n // I believe this is needed due to this button (usually) being inside of a collapsible.\n e.preventDefault()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={parentLexicalRichTextField?.admin?.readOnly || false}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n ),\n [parentLexicalRichTextField?.admin?.readOnly, removeBlock],\n )\n\n const BlockCollapsible = useMemo(\n () =>\n ({\n children,\n editButton,\n errorCount,\n fieldHasErrors,\n Label,\n removeButton,\n }: {\n children?: React.ReactNode\n editButton?: boolean\n errorCount?: number\n fieldHasErrors?: boolean\n /**\n * Override the default label with a custom label\n */\n Label?: React.ReactNode\n removeButton?: boolean\n }) => (\n <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>\n <Collapsible\n className={[\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ].join(' ')}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n <div className={`${baseClass}__block-header`}>\n {(Label ?? CustomLabel) ? (\n (Label ?? CustomLabel)\n ) : (\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {blockDisplayName}\n </Pill>\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly || false}\n />\n {fieldHasErrors && (\n <ErrorPill count={errorCount ?? 0} i18n={i18n} withMessage />\n )}\n </div>\n )}\n\n <div>\n {(CustomBlock && editButton !== false) || (!CustomBlock && editButton) ? (\n <EditButton />\n ) : null}\n {removeButton !== false && editor.isEditable() ? <RemoveButton /> : null}\n </div>\n </div>\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n {children}\n </Collapsible>\n </div>\n ),\n [\n CustomBlock,\n CustomLabel,\n EditButton,\n RemoveButton,\n blockDisplayName,\n editor,\n formData.blockType,\n i18n,\n isCollapsed,\n onCollapsedChange,\n parentLexicalRichTextField?.admin?.readOnly,\n ],\n )\n\n const BlockDrawer = useMemo(\n () => () => (\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n ),\n [\n initialState,\n drawerSlug,\n blockDisplayName,\n t,\n clientBlock.fields,\n schemaFieldsPath,\n permissions,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n ],\n )\n\n // Memoized Form JSX\n const Block = useMemo(() => {\n if (!initialState) {\n return null\n }\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n return await onChange({ formState, submit: true })\n },\n ]}\n fields={clientBlock.fields}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={(formState) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n const newData: any = reduceFieldsToValues(formState)\n newData.blockType = formData.blockType\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n node.setFields(newData)\n }\n })\n toggleDrawer()\n }}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n BlockDrawer={BlockDrawer}\n Collapsible={BlockCollapsible}\n CustomBlock={CustomBlock}\n EditButton={EditButton}\n errorCount={errorCount}\n formSchema={clientBlock.fields}\n initialState={initialState}\n nodeKey={nodeKey}\n RemoveButton={RemoveButton}\n />\n </Form>\n )\n }, [\n BlockCollapsible,\n BlockDrawer,\n CustomBlock,\n RemoveButton,\n EditButton,\n editor,\n errorCount,\n toggleDrawer,\n clientBlock.fields,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n initialState,\n nodeKey,\n onChange,\n submitted,\n ])\n\n 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","useDocumentInfo","useEditDepth","useFormSubmitted","useServerFunctions","useTranslation","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","React","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","$getNodeByKey","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isBlockNode","BlockContent","removeEmptyArrayValues","BlockComponent","props","cacheBuster","formData","nodeKey","submitted","id","collectionSlug","globalSlug","fieldProps","featureClientSchemaMap","field","parentLexicalRichTextField","initialLexicalFormState","permissions","readOnly","schemaPath","uuidFromContext","onChangeAbortControllerRef","AbortController","editDepth","errorCount","setErrorCount","useState","drawerSlug","slug","depth","toggleDrawer","getDocPreferences","setDocFieldPreferences","editor","getFormState","schemaFieldsPath","blockType","initialState","setInitialState","formState","blockName","initialValue","passesCondition","valid","value","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","abortController","awaitInitialState","state","data","docPermissions","fields","docPreferences","operation","renderAllFields","signal","_components","isCollapsed","setIsCollapsed","collapsed","componentMapRenderedBlockPath","clientSchemaMap","blocksField","clientBlock","blocks","i18n","t","onChange","prevFormState","submit","current","controller","newFormState","newFormStateData","setTimeout","update","node","newData","setFields","rowErrorCount","formField","Object","values","removeBlock","remove","blockDisplayName","labels","singular","onCollapsedChange","changedCollapsed","then","currentDocPreferences","currentFieldPreferences","name","collapsedArray","newCollapsed","length","includes","push","splice","indexOf","hello","EditButton","_jsx","buttonStyle","className","disabled","el","icon","onClick","e","preventDefault","stopPropagation","onMouseDown","round","size","tooltip","label","RemoveButton","admin","BlockCollapsible","children","editButton","fieldHasErrors","Label","removeButton","join","collapsibleStyle","header","_jsxs","pillStyle","path","count","withMessage","isEditable","onToggle","incomingCollapsedState","BlockDrawer","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","beforeSubmit","onSubmit","formSchema"],"sources":["../../../../../src/features/blocks/client/component/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Button,\n Collapsible,\n Drawer,\n EditDepthProvider,\n ErrorPill,\n Form,\n formatDrawerSlug,\n FormSubmit,\n Pill,\n RenderFields,\n SectionTitle,\n useDocumentInfo,\n useEditDepth,\n useFormSubmitted,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react'\n\nconst baseClass = 'lexical-block'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport { $getNodeByKey } from 'lexical'\nimport { type BlocksFieldClient, type CollapsedPreferences, type FormState } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isBlockNode } from '../nodes/BlocksNode.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\nimport { removeEmptyArrayValues } from './removeEmptyArrayValues.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: BlockFields\n readonly nodeKey: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n const submitted = useFormSubmitted()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n const {\n fieldProps: {\n featureClientSchemaMap,\n field: parentLexicalRichTextField,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const onChangeAbortControllerRef = useRef(new AbortController())\n const editDepth = useEditDepth()\n const [errorCount, setErrorCount] = React.useState(0)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-blocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n const [editor] = useLexicalComposerContext()\n\n const { getFormState } = useServerFunctions()\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}.fields`\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState\n ? {\n ...initialLexicalFormState?.[formData.id]?.formState,\n blockName: {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n }\n : false,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n state.blockName = {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n setInitialState(state)\n setCustomLabel(state._components?.customComponents?.BlockLabel)\n setCustomBlock(state._components?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(\n initialLexicalFormState?.[formData.id]?.collapsed ?? false,\n )\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap[\n componentMapRenderedBlockPath\n ][0] as BlocksFieldClient\n\n const clientBlock = blocksField.blocks[0]\n\n const { i18n, t } = useTranslation<object, string>()\n\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state: newFormState } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!newFormState) {\n return prevFormState\n }\n\n newFormState.blockName = prevFormState.blockName\n\n const newFormStateData: BlockFields = reduceFieldsToValues(\n removeEmptyArrayValues({\n fields: deepCopyObjectSimpleWithoutReactComponents(newFormState),\n }),\n true,\n ) as BlockFields\n\n setTimeout(() => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n node.setFields(newData, true)\n }\n })\n }, 0)\n\n if (submit) {\n setCustomLabel(newFormState._components?.customComponents?.BlockLabel)\n setCustomBlock(newFormState._components?.customComponents?.Block)\n\n let rowErrorCount = 0\n for (const formField of Object.values(newFormState)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n\n return newFormState\n },\n\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n globalSlug,\n schemaFieldsPath,\n formData.blockType,\n editor,\n nodeKey,\n ],\n )\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences =\n currentDocPreferences?.fields?.[parentLexicalRichTextField.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(parentLexicalRichTextField.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, parentLexicalRichTextField.name, setDocFieldPreferences, formData.id],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n toggleDrawer()\n return false\n }}\n onMouseDown={(e) => {\n // Needed to preserve lexical selection for toggleDrawer lexical selection restore.\n // I believe this is needed due to this button (usually) being inside of a collapsible.\n e.preventDefault()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={parentLexicalRichTextField?.admin?.readOnly || false}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n ),\n [parentLexicalRichTextField?.admin?.readOnly, removeBlock],\n )\n\n const BlockCollapsible = useMemo(\n () =>\n ({\n children,\n editButton,\n errorCount,\n fieldHasErrors,\n Label,\n removeButton,\n }: {\n children?: React.ReactNode\n editButton?: boolean\n errorCount?: number\n fieldHasErrors?: boolean\n /**\n * Override the default label with a custom label\n */\n Label?: React.ReactNode\n removeButton?: boolean\n }) => (\n <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>\n <Collapsible\n className={[\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ].join(' ')}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n <div className={`${baseClass}__block-header`}>\n {(Label ?? CustomLabel) ? (\n (Label ?? CustomLabel)\n ) : (\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {blockDisplayName}\n </Pill>\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly || false}\n />\n {fieldHasErrors && (\n <ErrorPill count={errorCount ?? 0} i18n={i18n} withMessage />\n )}\n </div>\n )}\n\n <div>\n {(CustomBlock && editButton !== false) || (!CustomBlock && editButton) ? (\n <EditButton />\n ) : null}\n {removeButton !== false && editor.isEditable() ? <RemoveButton /> : null}\n </div>\n </div>\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n {children}\n </Collapsible>\n </div>\n ),\n [\n CustomBlock,\n CustomLabel,\n EditButton,\n RemoveButton,\n blockDisplayName,\n editor,\n formData.blockType,\n i18n,\n isCollapsed,\n onCollapsedChange,\n parentLexicalRichTextField?.admin?.readOnly,\n ],\n )\n\n const BlockDrawer = useMemo(\n () => () => (\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n ),\n [\n initialState,\n drawerSlug,\n blockDisplayName,\n t,\n clientBlock.fields,\n schemaFieldsPath,\n permissions,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n ],\n )\n\n // Memoized Form JSX\n const Block = useMemo(() => {\n if (!initialState) {\n return null\n }\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n return await onChange({ formState, submit: true })\n },\n ]}\n fields={clientBlock.fields}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={(formState) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n const newData: any = reduceFieldsToValues(formState)\n newData.blockType = formData.blockType\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n node.setFields(newData, true)\n }\n })\n toggleDrawer()\n }}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n BlockDrawer={BlockDrawer}\n Collapsible={BlockCollapsible}\n CustomBlock={CustomBlock}\n EditButton={EditButton}\n errorCount={errorCount}\n formSchema={clientBlock.fields}\n initialState={initialState}\n nodeKey={nodeKey}\n RemoveButton={RemoveButton}\n />\n </Form>\n )\n }, [\n BlockCollapsible,\n BlockDrawer,\n CustomBlock,\n RemoveButton,\n EditButton,\n editor,\n errorCount,\n toggleDrawer,\n clientBlock.fields,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n initialState,\n nodeKey,\n onChange,\n submitted,\n ])\n\n 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,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;AAClB,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAE9B,SAASC,EAAA,IAAMC,IAAI,QAAQ;AAI3B,SAASC,sBAAsB,QAAQ;AACvC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,YAAY,QAAQ;AAC7B,SAASC,YAAY,QAAQ;AAE7B,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;EACJ,MAAMuB,0BAAA,GAA6B9B,MAAA,CAAO,IAAI+B,eAAA;EAC9C,MAAMC,SAAA,GAAY3C,YAAA;EAClB,MAAM,CAAC4C,UAAA,EAAYC,aAAA,CAAc,GAAGtC,KAAA,CAAMuC,QAAQ,CAAC;EAEnD,MAAMC,UAAA,GAAarD,gBAAA,CAAiB;IAClCsD,IAAA,EAAM,yBAAyBR,eAAA,IAAmBd,QAAA,CAASG,EAAE,EAAE;IAC/DoB,KAAA,EAAON;EACT;EACA,MAAM;IAAEO;EAAY,CAAE,GAAG/B,gBAAA,CAAiB4B,UAAA;EAE1C;EACA;EACA;EACA,MAAM;IAAEI,iBAAiB;IAAEC;EAAsB,CAAE,GAAGrD,eAAA;EACtD,MAAM,CAACsD,MAAA,CAAO,GAAGxC,yBAAA;EAEjB,MAAM;IAAEyC;EAAY,CAAE,GAAGpD,kBAAA;EACzB,MAAMqD,gBAAA,GAAmB,GAAGhB,UAAA,mDAA6Db,QAAA,CAAS8B,SAAS,SAAS;EAEpH,MAAM,CAACC,YAAA,EAAcC,eAAA,CAAgB,GAAGnD,KAAA,CAAMuC,QAAQ,CACpDV,uBAAA,GAA0BV,QAAA,CAASG,EAAE,CAAC,EAAE8B,SAAA,GACpC;IACE,GAAGvB,uBAAA,GAA0BV,QAAA,CAASG,EAAE,CAAC,EAAE8B,SAAS;IACpDC,SAAA,EAAW;MACTC,YAAA,EAAcnC,QAAA,CAASkC,SAAS;MAChCE,eAAA,EAAiB;MACjBC,KAAA,EAAO;MACPC,KAAA,EAAOtC,QAAA,CAASkC;IAClB;EACF,IACA;EAGNnD,SAAA,CAAU;IACRiD,eAAA,CAAgB;EAClB,GAAG,CAACjC,WAAA,CAAY;EAEhB,MAAM,CAACwC,WAAA,EAAaC,cAAA,CAAe,GAAG3D,KAAA,CAAMuC,QAAQ;EAClD;EACAW,YAAA,GAAe,cAAc,EAAEU,gBAAA,EAAkBC,UAAA;EAGnD,MAAM,CAACC,WAAA,EAAaC,cAAA,CAAe,GAAG/D,KAAA,CAAMuC,QAAQ;EAClD;EACAW,YAAA,GAAe,cAAc,EAAEU,gBAAA,EAAkBI,KAAA;EAGnD;EACA9D,SAAA,CAAU;IACR,MAAM+D,eAAA,GAAkB,IAAI9B,eAAA;IAE5B,MAAM+B,iBAAA,GAAoB,MAAAA,CAAA;MACxB;;;;;MAKA,MAAM;QAAEC;MAAK,CAAE,GAAG,MAAMpB,YAAA,CAAa;QACnCzB,EAAA;QACAC,cAAA;QACA6C,IAAA,EAAMjD,QAAA;QACNkD,cAAA,EAAgB;UAAEC,MAAA,EAAQ;QAAK;QAC/BC,cAAA,EAAgB,MAAM3B,iBAAA;QACtBpB,UAAA;QACAgD,SAAA,EAAW;QACXC,eAAA,EAAiB;QACjBzC,UAAA,EAAYgB,gBAAA;QACZ0B,MAAA,EAAQT,eAAA,CAAgBS;MAC1B;MAEA,IAAIP,KAAA,EAAO;QACTA,KAAA,CAAMd,SAAS,GAAG;UAChBC,YAAA,EAAcnC,QAAA,CAASkC,SAAS;UAChCE,eAAA,EAAiB;UACjBC,KAAA,EAAO;UACPC,KAAA,EAAOtC,QAAA,CAASkC;QAClB;QAEAF,eAAA,CAAgBgB,KAAA;QAChBR,cAAA,CAAeQ,KAAA,CAAMQ,WAAW,EAAEf,gBAAA,EAAkBC,UAAA;QACpDE,cAAA,CAAeI,KAAA,CAAMQ,WAAW,EAAEf,gBAAA,EAAkBI,KAAA;MACtD;IACF;IAEA,IAAI7C,QAAA,IAAY,CAAC+B,YAAA,EAAc;MAC7B,KAAKgB,iBAAA;IACP;IAEA,OAAO;MACLrE,cAAA,CAAeoE,eAAA;IACjB;EACF,GAAG,CACDlB,YAAA,EACAC,gBAAA,EACA1B,EAAA,EACAH,QAAA,EACA+B,YAAA,EACA3B,cAAA,EACAC,UAAA,EACAoB,iBAAA,CACD;EAED,MAAM,CAACgC,WAAA,EAAaC,cAAA,CAAe,GAAG7E,KAAA,CAAMuC,QAAQ,CAClDV,uBAAA,GAA0BV,QAAA,CAASG,EAAE,CAAC,EAAEwD,SAAA,IAAa;EAGvD,MAAMC,6BAAA,GAAgC,GAAG/C,UAAA,mDAA6Db,QAAA,CAAS8B,SAAS,EAAE;EAE1H,MAAM+B,eAAA,GAAkBtD,sBAAsB,CAAC,SAAS;EAExD,MAAMuD,WAAA,GAAiCD,eAAe,CACpDD,6BAAA,CACD,CAAC,EAAE;EAEJ,MAAMG,WAAA,GAAcD,WAAA,CAAYE,MAAM,CAAC,EAAE;EAEzC,MAAM;IAAEC,IAAI;IAAEC;EAAC,CAAE,GAAGzF,cAAA;EAEpB,MAAM0F,QAAA,GAAWrF,WAAA,CACf,OAAO;IAAEmD,SAAA,EAAWmC,aAAa;IAAEC;EAAM,CAA8C;IACrF3F,cAAA,CAAeqC,0BAAA,CAA2BuD,OAAO;IAEjD,MAAMC,UAAA,GAAa,IAAIvD,eAAA;IACvBD,0BAAA,CAA2BuD,OAAO,GAAGC,UAAA;IAErC,MAAM;MAAEvB,KAAA,EAAOwB;IAAY,CAAE,GAAG,MAAM5C,YAAA,CAAa;MACjDzB,EAAA;MACAC,cAAA;MACA8C,cAAA,EAAgB;QACdC,MAAA,EAAQ;MACV;MACAC,cAAA,EAAgB,MAAM3B,iBAAA;MACtBQ,SAAA,EAAWmC,aAAA;MACX/D,UAAA;MACAgD,SAAA,EAAW;MACXC,eAAA,EAAiBe,MAAA,GAAS,OAAO;MACjCxD,UAAA,EAAYgB,gBAAA;MACZ0B,MAAA,EAAQgB,UAAA,CAAWhB;IACrB;IAEA,IAAI,CAACiB,YAAA,EAAc;MACjB,OAAOJ,aAAA;IACT;IAEAI,YAAA,CAAatC,SAAS,GAAGkC,aAAA,CAAclC,SAAS;IAEhD,MAAMuC,gBAAA,GAAgC7F,oBAAA,CACpCgB,sBAAA,CAAuB;MACrBuD,MAAA,EAAQxE,0CAAA,CAA2C6F,YAAA;IACrD,IACA;IAGFE,UAAA,CAAW;MACT/C,MAAA,CAAOgD,MAAM,CAAC;QACZ,MAAMC,IAAA,GAAOvF,aAAA,CAAcY,OAAA;QAC3B,IAAI2E,IAAA,IAAQlF,YAAA,CAAakF,IAAA,GAAO;UAC9B,MAAMC,OAAA,GAAUJ,gBAAA;UAChBI,OAAA,CAAQ/C,SAAS,GAAG9B,QAAA,CAAS8B,SAAS;UACtC8C,IAAA,CAAKE,SAAS,CAACD,OAAA,EAAS;QAC1B;MACF;IACF,GAAG;IAEH,IAAIR,MAAA,EAAQ;MACV7B,cAAA,CAAegC,YAAA,CAAahB,WAAW,EAAEf,gBAAA,EAAkBC,UAAA;MAC3DE,cAAA,CAAe4B,YAAA,CAAahB,WAAW,EAAEf,gBAAA,EAAkBI,KAAA;MAE3D,IAAIkC,aAAA,GAAgB;MACpB,KAAK,MAAMC,SAAA,IAAaC,MAAA,CAAOC,MAAM,CAACV,YAAA,GAAe;QACnD,IAAIQ,SAAA,EAAW3C,KAAA,KAAU,OAAO;UAC9B0C,aAAA;QACF;MACF;MACA5D,aAAA,CAAc4D,aAAA;IAChB;IAEA,OAAOP,YAAA;EACT,GAEA,CACE5C,YAAA,EACAzB,EAAA,EACAC,cAAA,EACAqB,iBAAA,EACApB,UAAA,EACAwB,gBAAA,EACA7B,QAAA,CAAS8B,SAAS,EAClBH,MAAA,EACA1B,OAAA,CACD;EAGHlB,SAAA,CAAU;IACR,OAAO;MACLL,cAAA,CAAeqC,0BAAA,CAA2BuD,OAAO;IACnD;EACF,GAAG,EAAE;EAEL,MAAMa,WAAA,GAAcrG,WAAA,CAAY;IAC9B6C,MAAA,CAAOgD,MAAM,CAAC;MACZtF,aAAA,CAAcY,OAAA,GAAUmF,MAAA;IAC1B;EACF,GAAG,CAACzD,MAAA,EAAQ1B,OAAA,CAAQ;EAEpB,MAAMoF,gBAAA,GAAmBtB,WAAA,EAAauB,MAAA,EAAQC,QAAA,GAC1CnG,cAAA,CAAe2E,WAAA,CAAYuB,MAAM,CAACC,QAAQ,EAAEtB,IAAA,IAC5CF,WAAA,EAAazC,IAAA;EAEjB,MAAMkE,iBAAA,GAAoB1G,WAAA,CACvB2G,gBAAA;IACC,KAAKhE,iBAAA,GAAoBiE,IAAI,CAAEC,qBAAA;MAC7B,MAAMC,uBAAA,GACJD,qBAAA,EAAuBxC,MAAA,GAAS1C,0BAAA,CAA2BoF,IAAI,CAAC;MAElE,MAAMC,cAAA,GAAiBF,uBAAA,EAAyBjC,SAAA;MAEhD,MAAMoC,YAAA,GACJD,cAAA,IAAkBA,cAAA,EAAgBE,MAAA,GAASF,cAAA,GAAiB,EAAE;MAEhE,IAAIL,gBAAA,EAAkB;QACpB,IAAI,CAACM,YAAA,CAAaE,QAAQ,CAACjG,QAAA,CAASG,EAAE,GAAG;UACvC4F,YAAA,CAAaG,IAAI,CAAClG,QAAA,CAASG,EAAE;QAC/B;MACF,OAAO;QACL,IAAI4F,YAAA,CAAaE,QAAQ,CAACjG,QAAA,CAASG,EAAE,GAAG;UACtC4F,YAAA,CAAaI,MAAM,CAACJ,YAAA,CAAaK,OAAO,CAACpG,QAAA,CAASG,EAAE,GAAG;QACzD;MACF;MAEAuB,sBAAA,CAAuBjB,0BAAA,CAA2BoF,IAAI,EAAE;QACtDlC,SAAA,EAAWoC,YAAA;QACXM,KAAA,EAAO;MACT;IACF;EACF,GACA,CAAC5E,iBAAA,EAAmBhB,0BAAA,CAA2BoF,IAAI,EAAEnE,sBAAA,EAAwB1B,QAAA,CAASG,EAAE,CAAC;EAG3F,MAAMmG,UAAA,GAAatH,OAAA,CACjB,MAAM,mBACJuH,IAAA,CAAC7I,MAAA;IACC8I,WAAA,EAAY;IACZC,SAAA,EAAW,GAAGvH,SAAA,cAAuB;IACrCwH,QAAA,EAAU9F,QAAA;IACV+F,EAAA,EAAG;IACHC,IAAA,EAAK;IACLC,OAAA,EAAUC,CAAA;MACRA,CAAA,CAAEC,cAAc;MAChBD,CAAA,CAAEE,eAAe;MACjBxF,YAAA;MACA,OAAO;IACT;IACAyF,WAAA,EAAcH,GAAA;MACZ;MACA;MACAA,GAAA,CAAEC,cAAc;IAClB;IACAG,KAAK;IACLC,IAAA,EAAK;IACLC,OAAA,EAASlD,CAAA,CAAE,oCAAoC;MAAEmD,KAAA,EAAOhC;IAAiB;MAG7E,CAACA,gBAAA,EAAkBzE,QAAA,EAAUsD,CAAA,EAAG1C,YAAA,CAAa;EAG/C,MAAM8F,YAAA,GAAetI,OAAA,CACnB,MAAM,mBACJuH,IAAA,CAAC7I,MAAA;IACC8I,WAAA,EAAY;IACZC,SAAA,EAAW,GAAGvH,SAAA,gBAAyB;IACvCwH,QAAA,EAAUjG,0BAAA,EAA4B8G,KAAA,EAAO3G,QAAA,IAAY;IACzDgG,IAAA,EAAK;IACLC,OAAA,EAAUC,GAAA;MACRA,GAAA,CAAEC,cAAc;MAChB5B,WAAA;IACF;IACA+B,KAAK;IACLE,OAAA,EAAQ;MAGZ,CAAC3G,0BAAA,EAA4B8G,KAAA,EAAO3G,QAAA,EAAUuE,WAAA,CAAY;EAG5D,MAAMqC,gBAAA,GAAmBxI,OAAA,CACvB,MACE,CAAC;IACCyI,QAAQ;IACRC,UAAU;IACVxG,UAAU,EAAVA,YAAU;IACVyG,cAAc;IACdC,KAAK;IACLC;EAAY,CAWb,kBACCtB,IAAA,CAAC;IAAIE,SAAA,EAAWvH,SAAA,GAAY,MAAMA,SAAA,GAAY,MAAMc,QAAA,CAAS8B,SAAS;cACpE,aAAAyE,IAAA,CAAC5I,WAAA;MACC8I,SAAA,EAAW,CACT,GAAGvH,SAAA,OAAgB,EACnByI,cAAA,GAAiB,GAAGzI,SAAA,mBAA4B,GAAG,GAAGA,SAAA,kBAA2B,CAClF,CAAC4I,IAAI,CAAC;MACPC,gBAAA,EAAkBJ,cAAA,GAAiB,UAAU;MAC7CK,MAAA,eACEC,KAAA,CAAC;QAAIxB,SAAA,EAAW,GAAGvH,SAAA,gBAAyB;mBACxC0I,KAAA,IAASrF,WAAA,GACRqF,KAAA,IAASrF,WAAA,gBAEV0F,KAAA,CAAC;kCACC1B,IAAA,CAACrI,IAAA;YACCuI,SAAA,EAAW,GAAGvH,SAAA,gBAAyBA,SAAA,gBAAyBc,QAAA,EAAU8B,SAAA,EAAW;YACrFoG,SAAA,EAAU;sBAET7C;2BAEHkB,IAAA,CAACnI,YAAA;YACC+J,IAAA,EAAK;YACLvH,QAAA,EAAUH,0BAAA,EAA4B8G,KAAA,EAAO3G,QAAA,IAAY;cAE1D+G,cAAA,iBACCpB,IAAA,CAACzI,SAAA;YAAUsK,KAAA,EAAOlH,YAAA,IAAc;YAAG+C,IAAA,EAAMA,IAAA;YAAMoE,WAAW;;yBAKhEJ,KAAA,CAAC;qBACGtF,WAAA,IAAe+E,UAAA,KAAe,SAAW,CAAC/E,WAAA,IAAe+E,UAAA,gBACzDnB,IAAA,CAACD,UAAA,QACC,MACHuB,YAAA,KAAiB,SAASlG,MAAA,CAAO2G,UAAU,kBAAK/B,IAAA,CAACe,YAAA,QAAkB;;;MAI1E7D,WAAA,EAAaA,WAAA;MAEb8E,QAAA,EAAWC,sBAAA;QACThD,iBAAA,CAAkBgD,sBAAA;QAClB9E,cAAA,CAAe8E,sBAAA;MACjB;gBAECf;OANI;MAUb,CACE9E,WAAA,EACAJ,WAAA,EACA+D,UAAA,EACAgB,YAAA,EACAjC,gBAAA,EACA1D,MAAA,EACA3B,QAAA,CAAS8B,SAAS,EAClBmC,IAAA,EACAR,WAAA,EACA+B,iBAAA,EACA/E,0BAAA,EAA4B8G,KAAA,EAAO3G,QAAA,CACpC;EAGH,MAAM6H,WAAA,GAAczJ,OAAA,CAClB,MAAM,mBACJuH,IAAA,CAAC1I,iBAAA;cACC,aAAA0I,IAAA,CAAC3I,MAAA;MACC6I,SAAA,EAAW;MACXnF,IAAA,EAAMD,UAAA;MACNqH,KAAA,EAAOxE,CAAA,CAAE,+BAA+BlE,QAAA,EAAUG,EAAA,GAAK,SAAS,UAAU,EAAE;QAC1EkH,KAAA,EAAOhC,gBAAA,IAAoBnB,CAAA,CAAE;MAC/B;gBAECnC,YAAA,gBACCkG,KAAA,CAAAU,SAAA;gCACEpC,IAAA,CAACpI,YAAA;UACCgF,MAAA,EAAQY,WAAA,CAAYZ,MAAM;UAC1ByF,WAAW;UACXC,eAAA,EAAgB;UAChBC,UAAA,EAAW,GAAG;UAAA;;UACdC,gBAAA,EAAkBlH,gBAAA;UAClBlB,WAAA,EAAaA,WAAA;UACbC,QAAA,EAAU;yBAEZ2F,IAAA,CAACtI,UAAA;UAAW+K,kBAAA,EAAoB;oBAAO9E,CAAA,CAAE;;WAEzC;;MAIV,CACEnC,YAAA,EACAV,UAAA,EACAgE,gBAAA,EACAnB,CAAA,EACAH,WAAA,CAAYZ,MAAM,EAClBtB,gBAAA,EACAlB,WAAA,CAED;EAGH;EACA,MAAMkC,KAAA,GAAQ7D,OAAA,CAAQ;IACpB,IAAI,CAAC+C,YAAA,EAAc;MACjB,OAAO;IACT;IACA,oBACEwE,IAAA,CAACxI,IAAA;MACCkL,YAAA,EAAc,CACZ,OAAO;QAAEhH;MAAS,CAAE;QAClB;QACA,OAAO,MAAMkC,QAAA,CAAS;UAAElC,SAAA;UAAWoC,MAAA,EAAQ;QAAK;MAClD,EACD;MACDlB,MAAA,EAAQY,WAAA,CAAYZ,MAAM;MAC1BpB,YAAA,EAAcA,YAAA;MACdoC,QAAA,EAAU,CAACA,QAAA,CAAS;MACpB+E,QAAA,EAAWjH,WAAA;QACT;QACA,MAAM4C,SAAA,GAAejG,oBAAA,CAAqBqD,WAAA;QAC1C4C,SAAA,CAAQ/C,SAAS,GAAG9B,QAAA,CAAS8B,SAAS;QACtCH,MAAA,CAAOgD,MAAM,CAAC;UACZ,MAAMC,MAAA,GAAOvF,aAAA,CAAcY,OAAA;UAC3B,IAAI2E,MAAA,IAAQlF,YAAA,CAAakF,MAAA,GAAO;YAC9BA,MAAA,CAAKE,SAAS,CAACD,SAAA,EAAS;UAC1B;QACF;QACArD,YAAA;MACF;MACAtB,SAAA,EAAWA,SAAA;MACXX,IAAA,EAAMA,IAAA;gBAEN,aAAAgH,IAAA,CAAC5G,YAAA;QACCT,SAAA,EAAWA,SAAA;QACXuJ,WAAA,EAAaA,WAAA;QACb9K,WAAA,EAAa6J,gBAAA;QACb7E,WAAA,EAAaA,WAAA;QACb2D,UAAA,EAAYA,UAAA;QACZpF,UAAA,EAAYA,UAAA;QACZiI,UAAA,EAAYpF,WAAA,CAAYZ,MAAM;QAC9BpB,YAAA,EAAcA,YAAA;QACd9B,OAAA,EAASA,OAAA;QACTqH,YAAA,EAAcA;;;EAItB,GAAG,CACDE,gBAAA,EACAiB,WAAA,EACA9F,WAAA,EACA2E,YAAA,EACAhB,UAAA,EACA3E,MAAA,EACAT,UAAA,EACAM,YAAA,EACAuC,WAAA,CAAYZ,MAAM;EAClB;EACApB,YAAA,EACA9B,OAAA,EACAkE,QAAA,EACAjE,SAAA,CACD;EAED,OAAO2C,KAAA;AACT","ignoreList":[]}
|
|
@@ -3,6 +3,12 @@ import type { FormState } from 'payload';
|
|
|
3
3
|
import './index.scss';
|
|
4
4
|
import type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js';
|
|
5
5
|
type Props = {
|
|
6
|
+
/**
|
|
7
|
+
* Can be modified by the node in order to trigger the re-fetch of the initial state based on the
|
|
8
|
+
* formData. This is useful when node.setFields() is explicitly called from outside of the form - in
|
|
9
|
+
* this case, the new field state is likely not reflected in the form state, so we need to re-fetch
|
|
10
|
+
*/
|
|
11
|
+
readonly cacheBuster: number;
|
|
6
12
|
readonly formData: InlineBlockFields;
|
|
7
13
|
readonly nodeKey: string;
|
|
8
14
|
};
|
|
@@ -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,EAAqB,SAAS,EAAE,MAAM,SAAS,CAAA;AAgC3D,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAM/E,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,+BAA+B,GAAG;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAAsD,CAAA;AAEjG,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
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,EAAqB,SAAS,EAAE,MAAM,SAAS,CAAA;AAgC3D,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAM/E,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,+BAA+B,GAAG;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAAsD,CAAA;AAEjG,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAyXhD,CAAA"}
|
|
@@ -23,6 +23,7 @@ export const useInlineBlockComponentContext = () => {
|
|
|
23
23
|
};
|
|
24
24
|
export const InlineBlockComponent = props => {
|
|
25
25
|
const {
|
|
26
|
+
cacheBuster,
|
|
26
27
|
formData,
|
|
27
28
|
nodeKey
|
|
28
29
|
} = props;
|
|
@@ -32,6 +33,7 @@ export const InlineBlockComponent = props => {
|
|
|
32
33
|
t
|
|
33
34
|
} = useTranslation();
|
|
34
35
|
const {
|
|
36
|
+
createdInlineBlock,
|
|
35
37
|
fieldProps: {
|
|
36
38
|
featureClientSchemaMap,
|
|
37
39
|
initialLexicalFormState,
|
|
@@ -39,14 +41,18 @@ export const InlineBlockComponent = props => {
|
|
|
39
41
|
readOnly,
|
|
40
42
|
schemaPath
|
|
41
43
|
},
|
|
44
|
+
setCreatedInlineBlock,
|
|
42
45
|
uuid: uuidFromContext
|
|
43
46
|
} = useEditorConfigContext();
|
|
44
47
|
const {
|
|
45
48
|
getFormState
|
|
46
49
|
} = useServerFunctions();
|
|
47
50
|
const editDepth = useEditDepth();
|
|
48
|
-
const
|
|
51
|
+
const firstTimeDrawer = useRef(false);
|
|
49
52
|
const [initialState, setInitialState] = React.useState(initialLexicalFormState?.[formData.id]?.formState);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
setInitialState(false);
|
|
55
|
+
}, [cacheBuster]);
|
|
50
56
|
const [CustomLabel, setCustomLabel] = React.useState(
|
|
51
57
|
// @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
|
|
52
58
|
initialState?.['_components']?.customComponents?.BlockLabel);
|
|
@@ -72,14 +78,17 @@ export const InlineBlockComponent = props => {
|
|
|
72
78
|
const clientSchemaMap = featureClientSchemaMap['blocks'];
|
|
73
79
|
const blocksField = clientSchemaMap[componentMapRenderedBlockPath][0];
|
|
74
80
|
const clientBlock = blocksField.blocks[0];
|
|
75
|
-
// Open drawer on mount
|
|
81
|
+
// Open drawer on "mount"
|
|
76
82
|
useEffect(() => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {
|
|
84
|
+
// > 2 because they always have "id" and "blockName" fields
|
|
85
|
+
if (clientBlock.fields.length > 2) {
|
|
86
|
+
toggleDrawer();
|
|
87
|
+
}
|
|
88
|
+
setCreatedInlineBlock?.(undefined);
|
|
89
|
+
firstTimeDrawer.current = true;
|
|
81
90
|
}
|
|
82
|
-
}, [clientBlock, toggleDrawer]);
|
|
91
|
+
}, [clientBlock.fields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer]);
|
|
83
92
|
const removeInlineBlock = useCallback(() => {
|
|
84
93
|
editor.update(() => {
|
|
85
94
|
$getNodeByKey(nodeKey)?.remove();
|
|
@@ -209,7 +218,7 @@ export const InlineBlockComponent = props => {
|
|
|
209
218
|
editor.update(() => {
|
|
210
219
|
const node_0 = $getNodeByKey(nodeKey);
|
|
211
220
|
if (node_0 && $isInlineBlockNode(node_0)) {
|
|
212
|
-
node_0.setFields(newData);
|
|
221
|
+
node_0.setFields(newData, true);
|
|
213
222
|
}
|
|
214
223
|
});
|
|
215
224
|
}, [editor, nodeKey, formData]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","createContext","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","FormSubmit","RenderFields","ShimmerEffect","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","reduceFieldsToValues","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","useContext","InlineBlockComponent","props","formData","nodeKey","editor","i18n","t","fieldProps","featureClientSchemaMap","initialLexicalFormState","permissions","readOnly","schemaPath","uuidFromContext","getFormState","editDepth","hasMounted","setInitialState","useState","id","formState","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","isSelected","setSelected","clearSelection","collectionSlug","getDocPreferences","globalSlug","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blocks","current","fields","length","removeInlineBlock","update","remove","$onDelete","event","deleteSelection","preventDefault","getNodes","forEach","node","onClick","payload","target","contains","shiftKey","registerCommand","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","operation","renderAllFields","signal","onChange","prevFormState","submit","controller","onFormSubmit","newData","setFields","RemoveButton","_jsx","buttonStyle","className","disabled","icon","e","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","ref","Label","_jsxs","beforeSubmit","disableValidationOnSubmit","onSubmit","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","Provider","value","height","width","isEditable"],"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, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\nimport { reduceFieldsToValues } from 'payload/shared'\n\nimport './index.scss'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.useContext(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const hasMounted = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState,\n )\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 [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap[\n componentMapRenderedBlockPath\n ][0] as BlocksFieldClient\n\n const clientBlock = blocksField.blocks[0]\n\n // Open drawer on mount\n useEffect(() => {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (!hasMounted.current && clientBlock.fields.length > 2) {\n toggleDrawer()\n hasMounted.current = true\n }\n }, [clientBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n const deleteSelection = $getSelection()\n if (isSelected && $isNodeSelection(deleteSelection)) {\n event.preventDefault()\n editor.update(() => {\n deleteSelection.getNodes().forEach((node) => {\n if ($isInlineBlockNode(node)) {\n node.remove()\n }\n })\n })\n }\n return false\n },\n [editor, isSelected],\n )\n const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if inlineBlockElemElemRef.target or anything WITHIN inlineBlockElemElemRef.target was clicked\n if (\n event.target === inlineBlockElemElemRef.current ||\n inlineBlockElemElemRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath],\n )\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState) => {\n const newData: any = reduceFieldsToValues(formState)\n newData.blockType = formData.blockType\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData)\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 }: { children: React.ReactNode }) => (\n <div\n className={[\n baseClass,\n baseClass + '-' + formData.blockType,\n isSelected && `${baseClass}--selected`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType, isSelected],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => <div>{getTranslation(clientBlock.labels!.singular, i18n)}</div>\n }\n }, [CustomLabel, clientBlock.labels, i18n])\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n fields={clientBlock.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState) => {\n onFormSubmit(formState)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext.Provider\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext.Provider>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","createContext","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","FormSubmit","RenderFields","ShimmerEffect","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","reduceFieldsToValues","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","useContext","InlineBlockComponent","props","cacheBuster","formData","nodeKey","editor","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","permissions","readOnly","schemaPath","setCreatedInlineBlock","uuidFromContext","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","id","formState","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","isSelected","setSelected","clearSelection","collectionSlug","getDocPreferences","globalSlug","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blocks","current","getKey","fields","length","undefined","removeInlineBlock","update","remove","$onDelete","event","deleteSelection","preventDefault","getNodes","forEach","node","onClick","payload","target","contains","shiftKey","registerCommand","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","operation","renderAllFields","signal","onChange","prevFormState","submit","controller","onFormSubmit","newData","setFields","RemoveButton","_jsx","buttonStyle","className","disabled","icon","e","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","ref","Label","_jsxs","beforeSubmit","disableValidationOnSubmit","onSubmit","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","Provider","value","height","width","isEditable"],"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, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\nimport { reduceFieldsToValues } from 'payload/shared'\n\nimport './index.scss'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.useContext(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap[\n componentMapRenderedBlockPath\n ][0] as BlocksFieldClient\n\n const clientBlock = blocksField.blocks[0]\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlock.fields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlock.fields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n const deleteSelection = $getSelection()\n if (isSelected && $isNodeSelection(deleteSelection)) {\n event.preventDefault()\n editor.update(() => {\n deleteSelection.getNodes().forEach((node) => {\n if ($isInlineBlockNode(node)) {\n node.remove()\n }\n })\n })\n }\n return false\n },\n [editor, isSelected],\n )\n const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if inlineBlockElemElemRef.target or anything WITHIN inlineBlockElemElemRef.target was clicked\n if (\n event.target === inlineBlockElemElemRef.current ||\n inlineBlockElemElemRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath],\n )\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState) => {\n const newData: any = reduceFieldsToValues(formState)\n newData.blockType = formData.blockType\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData, 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 }: { children: React.ReactNode }) => (\n <div\n className={[\n baseClass,\n baseClass + '-' + formData.blockType,\n isSelected && `${baseClass}--selected`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType, isSelected],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => <div>{getTranslation(clientBlock.labels!.singular, i18n)}</div>\n }\n }, [CustomLabel, clientBlock.labels, i18n])\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n fields={clientBlock.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState) => {\n onFormSubmit(formState)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext.Provider\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext.Provider>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlocksNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAElG,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAGlE,qBAAa,SAAU,SAAQ,eAAe;IAC5C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe;IAIpD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,mBAAmB,GAAG,SAAS;IAgBjE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"BlocksNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAElG,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAGlE,qBAAa,SAAU,SAAQ,eAAe;IAC5C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe;IAIpD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,mBAAmB,GAAG,SAAS;IAgBjE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;IAUlE,UAAU,IAAI,mBAAmB;CAGlC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAOzE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,SAAS,CAEhG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlocksNode.js","names":["ObjectID","React","ServerBlockNode","BlockComponent","BlockNode","clone","node","getType","importJSON","serializedNode","version","fields","data","$createBlockNode","setFormat","format","decorate","editor","config","_jsx","formData","getFields","nodeKey","getKey","exportJSON","id","default","toHexString","$isBlockNode"],"sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"sourcesContent":["'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nimport type { BlockFieldsOptionalID, SerializedBlockNode } from '../../server/nodes/BlocksNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlocksNode.js'\nimport { BlockComponent } from '../component/index.js'\n\nexport class BlockNode extends ServerBlockNode {\n static clone(node: ServerBlockNode): ServerBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <BlockComponent
|
|
1
|
+
{"version":3,"file":"BlocksNode.js","names":["ObjectID","React","ServerBlockNode","BlockComponent","BlockNode","clone","node","getType","importJSON","serializedNode","version","fields","data","$createBlockNode","setFormat","format","decorate","editor","config","_jsx","cacheBuster","getCacheBuster","formData","getFields","nodeKey","getKey","exportJSON","id","default","toHexString","$isBlockNode"],"sources":["../../../../../src/features/blocks/client/nodes/BlocksNode.tsx"],"sourcesContent":["'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nimport type { BlockFieldsOptionalID, SerializedBlockNode } from '../../server/nodes/BlocksNode.js'\n\nimport { ServerBlockNode } from '../../server/nodes/BlocksNode.js'\nimport { BlockComponent } from '../component/index.js'\n\nexport class BlockNode extends ServerBlockNode {\n static clone(node: ServerBlockNode): ServerBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return (\n <BlockComponent\n cacheBuster={this.getCacheBuster()}\n formData={this.getFields()}\n nodeKey={this.getKey()}\n />\n )\n }\n\n exportJSON(): SerializedBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createBlockNode(fields: BlockFieldsOptionalID): BlockNode {\n return new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n"],"mappings":"AAAA;;;AAGA,OAAOA,QAAA,MAAc;AACrB,OAAOC,KAAA,MAAyB;AAIhC,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,SAAA,SAAkBF,eAAA;EAC7B,OAAOG,MAAMC,IAAqB,EAAmB;IACnD,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAOC,QAAA,EAAkB;IACvB,OAAO,KAAK,CAACA,OAAA;EACf;EAEA,OAAOC,WAAWC,cAAmC,EAAa;IAChE,IAAIA,cAAA,CAAeC,OAAO,KAAK,GAAG;MAChC;MACAD,cAAA,GAAiB;QACf,GAAGA,cAAc;QACjBE,MAAA,EAAQ;UACN,GAAGF,cAAC,CAAuBE,MAAM,CAACC;QACpC;QACAF,OAAA,EAAS;MACX;IACF;IACA,MAAMJ,IAAA,GAAOO,gBAAA,CAAiBJ,cAAA,CAAeE,MAAM;IACnDL,IAAA,CAAKQ,SAAS,CAACL,cAAA,CAAeM,MAAM;IACpC,OAAOT,IAAA;EACT;EAEAU,SAASC,MAAqB,EAAEC,MAAoB,EAAe;IACjE,oBACEC,IAAA,CAAChB,cAAA;MACCiB,WAAA,EAAa,IAAI,CAACC,cAAc;MAChCC,QAAA,EAAU,IAAI,CAACC,SAAS;MACxBC,OAAA,EAAS,IAAI,CAACC,MAAM;;EAG1B;EAEAC,WAAA,EAAkC;IAChC,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,OAAO,SAASb,iBAAiBF,MAA6B;EAC5D,OAAO,IAAIP,SAAA,CAAU;IACnBO,MAAA,EAAQ;MACN,GAAGA,MAAM;MACTgB,EAAA,EAAIhB,MAAA,EAAQgB,EAAA,IAAM,IAAI3B,QAAA,CAAS4B,OAAO,GAAGC,WAAW;IACtD;EACF;AACF;AAEA,OAAO,SAASC,aAAaxB,IAAgD;EAC3E,OAAOA,IAAA,YAAgBF,SAAA;AACzB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineBlocksNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EACV,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAA;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAQ9E,qBAAa,eAAgB,SAAQ,qBAAqB;IACxD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,GAAG,qBAAqB;IAIhE,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,yBAAyB,GAAG,eAAe;IAK7E,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"InlineBlocksNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EACV,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAA;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAQ9E,qBAAa,eAAgB,SAAQ,qBAAqB;IACxD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,GAAG,qBAAqB;IAIhE,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,yBAAyB,GAAG,eAAe;IAK7E,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;IAUlE,UAAU,IAAI,yBAAyB;CAGxC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,eAAe,CAOhG;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,GACrD,IAAI,IAAI,eAAe,CAEzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineBlocksNode.js","names":["ObjectID","React","ServerInlineBlockNode","InlineBlockComponent","lazy","then","module","default","InlineBlockNode","clone","node","getType","importJSON","serializedNode","$createInlineBlockNode","fields","decorate","editor","config","_jsx","formData","getFields","nodeKey","getKey","exportJSON","id","toHexString","$isInlineBlockNode"],"sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"sourcesContent":["'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nimport type {\n InlineBlockFields,\n SerializedInlineBlockNode,\n} from '../../server/nodes/InlineBlocksNode.js'\n\nimport { ServerInlineBlockNode } from '../../server/nodes/InlineBlocksNode.js'\n\nconst InlineBlockComponent = React.lazy(() =>\n import('../componentInline/index.js').then((module) => ({\n default: module.InlineBlockComponent,\n })),\n)\n\nexport class InlineBlockNode extends ServerInlineBlockNode {\n static clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <InlineBlockComponent
|
|
1
|
+
{"version":3,"file":"InlineBlocksNode.js","names":["ObjectID","React","ServerInlineBlockNode","InlineBlockComponent","lazy","then","module","default","InlineBlockNode","clone","node","getType","importJSON","serializedNode","$createInlineBlockNode","fields","decorate","editor","config","_jsx","cacheBuster","getCacheBuster","formData","getFields","nodeKey","getKey","exportJSON","id","toHexString","$isInlineBlockNode"],"sources":["../../../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx"],"sourcesContent":["'use client'\nimport type { EditorConfig, LexicalEditor, LexicalNode } from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nimport type {\n InlineBlockFields,\n SerializedInlineBlockNode,\n} from '../../server/nodes/InlineBlocksNode.js'\n\nimport { ServerInlineBlockNode } from '../../server/nodes/InlineBlocksNode.js'\n\nconst InlineBlockComponent = React.lazy(() =>\n import('../componentInline/index.js').then((module) => ({\n default: module.InlineBlockComponent,\n })),\n)\n\nexport class InlineBlockNode extends ServerInlineBlockNode {\n static clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return (\n <InlineBlockComponent\n cacheBuster={this.getCacheBuster()}\n formData={this.getFields()}\n nodeKey={this.getKey()}\n />\n )\n }\n\n exportJSON(): SerializedInlineBlockNode {\n return super.exportJSON()\n }\n}\n\nexport function $createInlineBlockNode(fields: Exclude<InlineBlockFields, 'id'>): InlineBlockNode {\n return new InlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isInlineBlockNode(\n node: InlineBlockNode | LexicalNode | null | undefined,\n): node is InlineBlockNode {\n return node instanceof InlineBlockNode\n}\n"],"mappings":"AAAA;;;AAGA,OAAOA,QAAA,MAAc;AACrB,OAAOC,KAAA,MAAyB;AAOhC,SAASC,qBAAqB,QAAQ;AAEtC,MAAMC,oBAAA,gBAAuBF,KAAA,CAAMG,IAAI,CAAC,MACtC,MAAM,CAAC,+BAA+BC,IAAI,CAAEC,MAAA,KAAY;EACtDC,OAAA,EAASD,MAAA,CAAOH;AAClB;AAGF,OAAO,MAAMK,eAAA,SAAwBN,qBAAA;EACnC,OAAOO,MAAMC,IAA2B,EAAyB;IAC/D,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAOC,QAAA,EAAkB;IACvB,OAAO,KAAK,CAACA,OAAA;EACf;EAEA,OAAOC,WAAWC,cAAyC,EAAmB;IAC5E,MAAMH,IAAA,GAAOI,sBAAA,CAAuBD,cAAA,CAAeE,MAAM;IACzD,OAAOL,IAAA;EACT;EAEAM,SAASC,MAAqB,EAAEC,MAAoB,EAAe;IACjE,oBACEC,IAAA,CAAChB,oBAAA;MACCiB,WAAA,EAAa,IAAI,CAACC,cAAc;MAChCC,QAAA,EAAU,IAAI,CAACC,SAAS;MACxBC,OAAA,EAAS,IAAI,CAACC,MAAM;;EAG1B;EAEAC,WAAA,EAAwC;IACtC,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,OAAO,SAASZ,uBAAuBC,MAAwC;EAC7E,OAAO,IAAIP,eAAA,CAAgB;IACzBO,MAAA,EAAQ;MACN,GAAGA,MAAM;MACTY,EAAA,EAAIZ,MAAA,EAAQY,EAAA,IAAM,IAAI3B,QAAA,CAASO,OAAO,GAAGqB,WAAW;IACtD;EACF;AACF;AAEA,OAAO,SAASC,mBACdnB,IAAsD;EAEtD,OAAOA,IAAA,YAAgBF,eAAA;AACzB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/plugin/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAe,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAQ1F,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAA;AAEtD,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/plugin/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAe,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAQ1F,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAA;AAEtD,eAAO,MAAM,YAAY,EAAE,eAqF1B,CAAA"}
|
|
@@ -12,10 +12,11 @@ import { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js';
|
|
|
12
12
|
import { $createInlineBlockNode, $isInlineBlockNode } from '../nodes/InlineBlocksNode.js';
|
|
13
13
|
import { INSERT_BLOCK_COMMAND, INSERT_INLINE_BLOCK_COMMAND } from './commands.js';
|
|
14
14
|
export const BlocksPlugin = () => {
|
|
15
|
-
const $ = _c(
|
|
15
|
+
const $ = _c(12);
|
|
16
16
|
const [editor] = useLexicalComposerContext();
|
|
17
17
|
const [targetNodeKey, setTargetNodeKey] = useState(null);
|
|
18
18
|
const {
|
|
19
|
+
setCreatedInlineBlock,
|
|
19
20
|
uuid
|
|
20
21
|
} = useEditorConfigContext();
|
|
21
22
|
const editDepth = useEditDepth();
|
|
@@ -37,7 +38,7 @@ export const BlocksPlugin = () => {
|
|
|
37
38
|
toggleDrawer
|
|
38
39
|
} = useLexicalDrawer(drawerSlug, true);
|
|
39
40
|
let t2;
|
|
40
|
-
if ($[3] !== editor || $[4] !== targetNodeKey) {
|
|
41
|
+
if ($[3] !== editor || $[4] !== setCreatedInlineBlock || $[5] !== targetNodeKey) {
|
|
41
42
|
t2 = () => {
|
|
42
43
|
if (!editor.hasNodes([BlockNode])) {
|
|
43
44
|
throw new Error("BlocksPlugin: BlocksNode not registered on editor");
|
|
@@ -69,6 +70,7 @@ export const BlocksPlugin = () => {
|
|
|
69
70
|
return true;
|
|
70
71
|
}
|
|
71
72
|
const inlineBlockNode = $createInlineBlockNode(fields);
|
|
73
|
+
setCreatedInlineBlock?.(inlineBlockNode);
|
|
72
74
|
$insertNodes([inlineBlockNode]);
|
|
73
75
|
if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {
|
|
74
76
|
$wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd();
|
|
@@ -77,20 +79,22 @@ export const BlocksPlugin = () => {
|
|
|
77
79
|
}, COMMAND_PRIORITY_EDITOR));
|
|
78
80
|
};
|
|
79
81
|
$[3] = editor;
|
|
80
|
-
$[4] =
|
|
81
|
-
$[5] =
|
|
82
|
+
$[4] = setCreatedInlineBlock;
|
|
83
|
+
$[5] = targetNodeKey;
|
|
84
|
+
$[6] = t2;
|
|
82
85
|
} else {
|
|
83
|
-
t2 = $[
|
|
86
|
+
t2 = $[6];
|
|
84
87
|
}
|
|
85
88
|
let t3;
|
|
86
|
-
if ($[
|
|
87
|
-
t3 = [editor, targetNodeKey, toggleDrawer];
|
|
88
|
-
$[
|
|
89
|
-
$[
|
|
90
|
-
$[
|
|
91
|
-
$[
|
|
89
|
+
if ($[7] !== editor || $[8] !== setCreatedInlineBlock || $[9] !== targetNodeKey || $[10] !== toggleDrawer) {
|
|
90
|
+
t3 = [editor, setCreatedInlineBlock, targetNodeKey, toggleDrawer];
|
|
91
|
+
$[7] = editor;
|
|
92
|
+
$[8] = setCreatedInlineBlock;
|
|
93
|
+
$[9] = targetNodeKey;
|
|
94
|
+
$[10] = toggleDrawer;
|
|
95
|
+
$[11] = t3;
|
|
92
96
|
} else {
|
|
93
|
-
t3 = $[
|
|
97
|
+
t3 = $[11];
|
|
94
98
|
}
|
|
95
99
|
useEffect(t2, t3);
|
|
96
100
|
return null;
|