@payloadcms/richtext-lexical 3.21.0-canary.db74962 → 3.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports/client/index.js +10 -10
- package/dist/exports/client/index.js.map +3 -3
- package/dist/exports/react/components/RichText/converter/converters/list.d.ts.map +1 -1
- package/dist/exports/react/components/RichText/converter/converters/list.js +7 -1
- package/dist/exports/react/components/RichText/converter/converters/list.js.map +1 -1
- package/dist/exports/react/components/RichText/index.d.ts +0 -1
- package/dist/exports/react/components/RichText/index.d.ts.map +1 -1
- package/dist/exports/react/components/RichText/index.js +0 -1
- package/dist/exports/react/components/RichText/index.js.map +1 -1
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +3 -8
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/server/validate.d.ts.map +1 -1
- package/dist/features/blocks/server/validate.js +0 -2
- package/dist/features/blocks/server/validate.js.map +1 -1
- package/dist/field/rscEntry.d.ts.map +1 -1
- package/dist/field/rscEntry.js +0 -1
- package/dist/field/rscEntry.js.map +1 -1
- package/dist/utilities/buildInitialState.d.ts +0 -1
- package/dist/utilities/buildInitialState.d.ts.map +1 -1
- package/dist/utilities/buildInitialState.js +0 -1
- package/dist/utilities/buildInitialState.js.map +1 -1
- package/package.json +7 -7
- package/dist/exports/react/components/RichText/index.css +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../../src/exports/react/components/RichText/converter/converters/list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,sBAAsB,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../../src/exports/react/components/RichText/converter/converters/list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,sBAAsB,GAAG,kBAAkB,CAqDvF,CAAA"}
|
|
@@ -30,6 +30,9 @@ export const ListJSXConverter = {
|
|
|
30
30
|
className: `list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}`,
|
|
31
31
|
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role
|
|
32
32
|
role: "checkbox",
|
|
33
|
+
style: {
|
|
34
|
+
listStyleType: 'none'
|
|
35
|
+
},
|
|
33
36
|
tabIndex: -1,
|
|
34
37
|
value: node?.value,
|
|
35
38
|
children: hasSubLists ? children : /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -46,7 +49,10 @@ export const ListJSXConverter = {
|
|
|
46
49
|
});
|
|
47
50
|
} else {
|
|
48
51
|
return /*#__PURE__*/_jsx("li", {
|
|
49
|
-
className: hasSubLists ? 'nestedListItem' : ''
|
|
52
|
+
className: `${hasSubLists ? 'nestedListItem' : ''}`,
|
|
53
|
+
style: hasSubLists ? {
|
|
54
|
+
listStyleType: 'none'
|
|
55
|
+
} : undefined,
|
|
50
56
|
value: node?.value,
|
|
51
57
|
children: children
|
|
52
58
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","names":["v4","uuidv4","ListJSXConverter","list","node","nodesToJSX","children","nodes","NodeTag","tag","_jsx","className","listType","listitem","parent","hasSubLists","some","child","type","uuid","checked","role","tabIndex","value","_jsxs","_Fragment","id","readOnly","htmlFor"],"sources":["../../../../../../../src/exports/react/components/RichText/converter/converters/list.tsx"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../../nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nexport const ListJSXConverter: JSXConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = node.tag\n\n return <NodeTag className={`list-${node?.listType}`}>{children}</NodeTag>\n },\n listitem: ({ node, nodesToJSX, parent }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n\n return (\n <li\n aria-checked={node.checked ? 'true' : 'false'}\n className={`list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}`}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n role=\"checkbox\"\n tabIndex={-1}\n value={node?.value}\n >\n {hasSubLists ? (\n children\n ) : (\n <>\n <input checked={node.checked} id={uuid} readOnly={true} type=\"checkbox\" />\n <label htmlFor={uuid}>{children}</label>\n <br />\n </>\n )}\n </li>\n )\n } else {\n return (\n <li
|
|
1
|
+
{"version":3,"file":"list.js","names":["v4","uuidv4","ListJSXConverter","list","node","nodesToJSX","children","nodes","NodeTag","tag","_jsx","className","listType","listitem","parent","hasSubLists","some","child","type","uuid","checked","role","style","listStyleType","tabIndex","value","_jsxs","_Fragment","id","readOnly","htmlFor","undefined"],"sources":["../../../../../../../src/exports/react/components/RichText/converter/converters/list.tsx"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../../nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nexport const ListJSXConverter: JSXConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = node.tag\n\n return <NodeTag className={`list-${node?.listType}`}>{children}</NodeTag>\n },\n listitem: ({ node, nodesToJSX, parent }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n\n return (\n <li\n aria-checked={node.checked ? 'true' : 'false'}\n className={`list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}`}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n role=\"checkbox\"\n style={{ listStyleType: 'none' }}\n tabIndex={-1}\n value={node?.value}\n >\n {hasSubLists ? (\n children\n ) : (\n <>\n <input checked={node.checked} id={uuid} readOnly={true} type=\"checkbox\" />\n <label htmlFor={uuid}>{children}</label>\n <br />\n </>\n )}\n </li>\n )\n } else {\n return (\n <li\n className={`${hasSubLists ? 'nestedListItem' : ''}`}\n style={hasSubLists ? { listStyleType: 'none' } : undefined}\n value={node?.value}\n >\n {children}\n </li>\n )\n }\n },\n}\n"],"mappings":";AAAA,SAASA,EAAA,IAAMC,MAAM,QAAQ;AAK7B,OAAO,MAAMC,gBAAA,GAA+E;EAC1FC,IAAA,EAAMA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IACzB,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAME,OAAA,GAAUJ,IAAA,CAAKK,GAAG;IAExB,oBAAOC,IAAA,CAACF,OAAA;MAAQG,SAAA,EAAW,QAAQP,IAAA,EAAMQ,QAAA,EAAU;gBAAGN;;EACxD;EACAO,QAAA,EAAUA,CAAC;IAAET,IAAI;IAAEC,UAAU;IAAES;EAAM,CAAE;IACrC,MAAMC,WAAA,GAAcX,IAAA,CAAKE,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,IAAI,cAAcQ,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMO,IAAA,GAAOlB,MAAA;MAEb,oBACES,IAAA,CAAC;QACC,gBAAcN,IAAA,CAAKgB,OAAO,GAAG,SAAS;QACtCT,SAAA,EAAW,qBAAqBP,IAAA,CAAKgB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB,IAAI;QACvJ;QACAM,IAAA,EAAK;QACLC,KAAA,EAAO;UAAEC,aAAA,EAAe;QAAO;QAC/BC,QAAA,EAAU,CAAC;QACXC,KAAA,EAAOrB,IAAA,EAAMqB,KAAA;kBAEZV,WAAA,GACCT,QAAA,gBAEAoB,KAAA,CAAAC,SAAA;kCACEjB,IAAA,CAAC;YAAMU,OAAA,EAAShB,IAAA,CAAKgB,OAAO;YAAEQ,EAAA,EAAIT,IAAA;YAAMU,QAAA,EAAU;YAAMX,IAAA,EAAK;2BAC7DR,IAAA,CAAC;YAAMoB,OAAA,EAASX,IAAA;sBAAOb;2BACvBI,IAAA,CAAC;;;IAKX,OAAO;MACL,oBACEA,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGI,WAAA,GAAc,mBAAmB,IAAI;QACnDO,KAAA,EAAOP,WAAA,GAAc;UAAEQ,aAAA,EAAe;QAAO,IAAIQ,SAAA;QACjDN,KAAA,EAAOrB,IAAA,EAAMqB,KAAA;kBAEZnB;;IAGP;EACF;AACF","ignoreList":[]}
|
|
@@ -2,7 +2,6 @@ import type { SerializedEditorState } from 'lexical';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { DefaultNodeTypes, SerializedBlockNode, SerializedInlineBlockNode } from '../../../../nodeTypes.js';
|
|
4
4
|
import type { JSXConverters } from './converter/types.js';
|
|
5
|
-
import './index.css';
|
|
6
5
|
export type JSXConvertersFunction<T extends {
|
|
7
6
|
[key: string]: any;
|
|
8
7
|
type?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exports/react/components/RichText/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exports/react/components/RichText/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAKzD,MAAM,MAAM,qBAAqB,CAC/B,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,gBAAgB,GAChB,mBAAmB,CAAC;IAAE,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAAC,GAClD,yBAAyB,CAAC;IAAE,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,IAC7E,CAAC,IAAI,EAAE;IAAE,iBAAiB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;CAAE,KAAK,aAAa,CAAC,CAAC,CAAC,CAAA;AAEtF,KAAK,aAAa,GAAG;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,GAAG,qBAAqB,CAAA;IAClD;;OAEG;IACH,IAAI,EAAE,qBAAqB,CAAA;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAA;IAClC;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAwC5C,CAAA"}
|
|
@@ -2,7 +2,6 @@ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { defaultJSXConverters } from './converter/defaultConverters.js';
|
|
4
4
|
import { convertLexicalToJSX } from './converter/index.js';
|
|
5
|
-
import './index.css';
|
|
6
5
|
export const RichText = ({
|
|
7
6
|
className,
|
|
8
7
|
converters,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","defaultJSXConverters","convertLexicalToJSX","RichText","className","converters","data","editorState","disableContainer","disableIndent","disableTextAlign","finalConverters","defaultConverters","content","Array","isArray","_jsx","_Fragment"],"sources":["../../../../../src/exports/react/components/RichText/index.tsx"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\n\nimport React from 'react'\n\nimport type {\n DefaultNodeTypes,\n SerializedBlockNode,\n SerializedInlineBlockNode,\n} from '../../../../nodeTypes.js'\nimport type { JSXConverters } from './converter/types.js'\n\nimport { defaultJSXConverters } from './converter/defaultConverters.js'\nimport { convertLexicalToJSX } from './converter/index.js'\
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","defaultJSXConverters","convertLexicalToJSX","RichText","className","converters","data","editorState","disableContainer","disableIndent","disableTextAlign","finalConverters","defaultConverters","content","Array","isArray","_jsx","_Fragment"],"sources":["../../../../../src/exports/react/components/RichText/index.tsx"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\n\nimport React from 'react'\n\nimport type {\n DefaultNodeTypes,\n SerializedBlockNode,\n SerializedInlineBlockNode,\n} from '../../../../nodeTypes.js'\nimport type { JSXConverters } from './converter/types.js'\n\nimport { defaultJSXConverters } from './converter/defaultConverters.js'\nimport { convertLexicalToJSX } from './converter/index.js'\n\nexport type JSXConvertersFunction<\n T extends { [key: string]: any; type?: string } =\n | DefaultNodeTypes\n | SerializedBlockNode<{ blockName?: null | string }>\n | SerializedInlineBlockNode<{ blockName?: null | string; blockType: string }>,\n> = (args: { defaultConverters: JSXConverters<DefaultNodeTypes> }) => JSXConverters<T>\n\ntype RichTextProps = {\n /**\n * Additional class names for the container.\n */\n className?: string\n /**\n * Custom converters to transform your nodes to JSX. Can be an object or a function that receives the default converters.\n */\n converters?: JSXConverters | JSXConvertersFunction\n /**\n * Serialized editor state to render.\n */\n data: SerializedEditorState\n /**\n * If true, removes the container div wrapper.\n */\n disableContainer?: boolean\n /**\n * If true, disables indentation globally. If an array, disables for specific node `type` values.\n */\n disableIndent?: boolean | string[]\n /**\n * If true, disables text alignment globally. If an array, disables for specific node `type` values.\n */\n disableTextAlign?: boolean | string[]\n}\n\nexport const RichText: React.FC<RichTextProps> = ({\n className,\n converters,\n data: editorState,\n disableContainer,\n disableIndent,\n disableTextAlign,\n}) => {\n if (!editorState) {\n return null\n }\n\n let finalConverters: JSXConverters = {}\n if (converters) {\n if (typeof converters === 'function') {\n finalConverters = converters({ defaultConverters: defaultJSXConverters })\n } else {\n finalConverters = converters\n }\n } else {\n finalConverters = defaultJSXConverters\n }\n\n const content =\n editorState &&\n !Array.isArray(editorState) &&\n typeof editorState === 'object' &&\n 'root' in editorState &&\n convertLexicalToJSX({\n converters: finalConverters,\n data: editorState,\n disableIndent,\n disableTextAlign,\n })\n\n if (disableContainer) {\n return <>{content}</>\n }\n\n return <div className={className ?? 'payload-richtext'}>{content}</div>\n}\n"],"mappings":";AAEA,OAAOA,KAAA,MAAW;AASlB,SAASC,oBAAoB,QAAQ;AACrC,SAASC,mBAAmB,QAAQ;AAoCpC,OAAO,MAAMC,QAAA,GAAoCA,CAAC;EAChDC,SAAS;EACTC,UAAU;EACVC,IAAA,EAAMC,WAAW;EACjBC,gBAAgB;EAChBC,aAAa;EACbC;AAAgB,CACjB;EACC,IAAI,CAACH,WAAA,EAAa;IAChB,OAAO;EACT;EAEA,IAAII,eAAA,GAAiC,CAAC;EACtC,IAAIN,UAAA,EAAY;IACd,IAAI,OAAOA,UAAA,KAAe,YAAY;MACpCM,eAAA,GAAkBN,UAAA,CAAW;QAAEO,iBAAA,EAAmBX;MAAqB;IACzE,OAAO;MACLU,eAAA,GAAkBN,UAAA;IACpB;EACF,OAAO;IACLM,eAAA,GAAkBV,oBAAA;EACpB;EAEA,MAAMY,OAAA,GACJN,WAAA,IACA,CAACO,KAAA,CAAMC,OAAO,CAACR,WAAA,KACf,OAAOA,WAAA,KAAgB,YACvB,UAAUA,WAAA,IACVL,mBAAA,CAAoB;IAClBG,UAAA,EAAYM,eAAA;IACZL,IAAA,EAAMC,WAAA;IACNE,aAAA;IACAC;EACF;EAEF,IAAIF,gBAAA,EAAkB;IACpB,oBAAOQ,IAAA,CAAAC,SAAA;gBAAGJ;;EACZ;EAEA,oBAAOG,IAAA,CAAC;IAAIZ,SAAA,EAAWA,SAAA,IAAa;cAAqBS;;AAC3D","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/component/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/component/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAkD,MAAM,OAAO,CAAA;AAStE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAMnE,OAAO,cAAc,CAAA;AAGrB,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkf1C,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
4
|
-
import { Button, Collapsible, Drawer, EditDepthProvider, ErrorPill, Form, formatDrawerSlug, FormSubmit, Pill, RenderFields, SectionTitle,
|
|
4
|
+
import { Button, Collapsible, Drawer, EditDepthProvider, ErrorPill, Form, formatDrawerSlug, FormSubmit, Pill, RenderFields, SectionTitle, useDocumentInfo, useEditDepth, useFormSubmitted, useServerFunctions, useTranslation } from '@payloadcms/ui';
|
|
5
5
|
import { abortAndIgnore } from '@payloadcms/ui/shared';
|
|
6
6
|
import { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared';
|
|
7
7
|
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
@@ -38,9 +38,6 @@ export const BlockComponent = props => {
|
|
|
38
38
|
},
|
|
39
39
|
uuid: uuidFromContext
|
|
40
40
|
} = useEditorConfigContext();
|
|
41
|
-
const {
|
|
42
|
-
fields: parentDocumentFields
|
|
43
|
-
} = useDocumentForm();
|
|
44
41
|
const onChangeAbortControllerRef = useRef(new AbortController());
|
|
45
42
|
const editDepth = useEditDepth();
|
|
46
43
|
const [errorCount, setErrorCount] = React.useState(0);
|
|
@@ -100,7 +97,6 @@ export const BlockComponent = props => {
|
|
|
100
97
|
fields: true
|
|
101
98
|
},
|
|
102
99
|
docPreferences: await getDocPreferences(),
|
|
103
|
-
fullFormStateOverride: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),
|
|
104
100
|
globalSlug,
|
|
105
101
|
operation: 'update',
|
|
106
102
|
renderAllFields: true,
|
|
@@ -125,7 +121,7 @@ export const BlockComponent = props => {
|
|
|
125
121
|
return () => {
|
|
126
122
|
abortAndIgnore(abortController);
|
|
127
123
|
};
|
|
128
|
-
}, [getFormState, schemaFieldsPath, id, formData, initialState, collectionSlug, globalSlug, getDocPreferences
|
|
124
|
+
}, [getFormState, schemaFieldsPath, id, formData, initialState, collectionSlug, globalSlug, getDocPreferences]);
|
|
129
125
|
const [isCollapsed, setIsCollapsed] = React.useState(initialLexicalFormState?.[formData.id]?.collapsed ?? false);
|
|
130
126
|
const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`;
|
|
131
127
|
const clientSchemaMap = featureClientSchemaMap['blocks'];
|
|
@@ -152,7 +148,6 @@ export const BlockComponent = props => {
|
|
|
152
148
|
},
|
|
153
149
|
docPreferences: await getDocPreferences(),
|
|
154
150
|
formState: prevFormState,
|
|
155
|
-
fullFormStateOverride: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),
|
|
156
151
|
globalSlug,
|
|
157
152
|
operation: 'update',
|
|
158
153
|
renderAllFields: submit ? true : false,
|
|
@@ -188,7 +183,7 @@ export const BlockComponent = props => {
|
|
|
188
183
|
setErrorCount(rowErrorCount);
|
|
189
184
|
}
|
|
190
185
|
return newFormState;
|
|
191
|
-
}, [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath, formData.blockType,
|
|
186
|
+
}, [getFormState, id, collectionSlug, getDocPreferences, globalSlug, schemaFieldsPath, formData.blockType, editor, nodeKey]);
|
|
192
187
|
useEffect(() => {
|
|
193
188
|
return () => {
|
|
194
189
|
abortAndIgnore(onChangeAbortControllerRef.current);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Button","Collapsible","Drawer","EditDepthProvider","ErrorPill","Form","formatDrawerSlug","FormSubmit","Pill","RenderFields","SectionTitle","useDocumentForm","useDocumentInfo","useEditDepth","useFormSubmitted","useServerFunctions","useTranslation","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","React","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","$getNodeByKey","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isBlockNode","BlockContent","removeEmptyArrayValues","BlockComponent","props","cacheBuster","formData","nodeKey","submitted","id","collectionSlug","globalSlug","fieldProps","featureClientSchemaMap","field","parentLexicalRichTextField","initialLexicalFormState","permissions","readOnly","schemaPath","uuidFromContext","fields","parentDocumentFields","onChangeAbortControllerRef","AbortController","editDepth","errorCount","setErrorCount","useState","drawerSlug","slug","depth","toggleDrawer","getDocPreferences","setDocFieldPreferences","editor","getFormState","schemaFieldsPath","blockType","initialState","setInitialState","formState","blockName","initialValue","passesCondition","valid","value","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","abortController","awaitInitialState","state","data","docPermissions","docPreferences","fullFormStateOverride","operation","renderAllFields","signal","_components","isCollapsed","setIsCollapsed","collapsed","componentMapRenderedBlockPath","clientSchemaMap","blocksField","clientBlock","blocks","i18n","t","onChange","prevFormState","submit","current","controller","newFormState","newFormStateData","setTimeout","update","node","newData","setFields","rowErrorCount","formField","Object","values","removeBlock","remove","blockDisplayName","labels","singular","onCollapsedChange","changedCollapsed","then","currentDocPreferences","currentFieldPreferences","name","collapsedArray","newCollapsed","length","includes","push","splice","indexOf","hello","EditButton","_jsx","buttonStyle","className","disabled","el","icon","onClick","e","preventDefault","stopPropagation","onMouseDown","round","size","tooltip","label","RemoveButton","admin","BlockCollapsible","children","disableBlockName","editButton","fieldHasErrors","Label","removeButton","join","collapsibleStyle","header","_jsxs","pillStyle","path","count","withMessage","isEditable","onToggle","incomingCollapsedState","BlockDrawer","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","beforeSubmit","onSubmit","formSchema"],"sources":["../../../../../src/features/blocks/client/component/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Button,\n Collapsible,\n Drawer,\n EditDepthProvider,\n ErrorPill,\n Form,\n formatDrawerSlug,\n FormSubmit,\n Pill,\n RenderFields,\n SectionTitle,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useFormSubmitted,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react'\n\nconst baseClass = 'lexical-block'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport { $getNodeByKey } from 'lexical'\nimport { type BlocksFieldClient, type CollapsedPreferences, type FormState } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport './index.scss'\nimport { $isBlockNode } from '../nodes/BlocksNode.js'\nimport { BlockContent } from './BlockContent.js'\nimport { removeEmptyArrayValues } from './removeEmptyArrayValues.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: BlockFields\n readonly nodeKey: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n const submitted = useFormSubmitted()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n const {\n fieldProps: {\n featureClientSchemaMap,\n field: parentLexicalRichTextField,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n\n const { fields: parentDocumentFields } = useDocumentForm()\n const onChangeAbortControllerRef = useRef(new AbortController())\n const editDepth = useEditDepth()\n const [errorCount, setErrorCount] = React.useState(0)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-blocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n const [editor] = useLexicalComposerContext()\n\n const { getFormState } = useServerFunctions()\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}.fields`\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState\n ? {\n ...initialLexicalFormState?.[formData.id]?.formState,\n blockName: {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n }\n : false,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n fullFormStateOverride: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\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 parentDocumentFields,\n ])\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(\n initialLexicalFormState?.[formData.id]?.collapsed ?? false,\n )\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient | undefined = clientSchemaMap[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock = blocksField?.blocks?.[0]\n\n const { i18n, t } = useTranslation<object, string>()\n\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state: newFormState } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n fullFormStateOverride: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\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 parentDocumentFields,\n editor,\n nodeKey,\n ],\n )\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences =\n currentDocPreferences?.fields?.[parentLexicalRichTextField.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(parentLexicalRichTextField.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, parentLexicalRichTextField.name, setDocFieldPreferences, formData.id],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n toggleDrawer()\n return false\n }}\n onMouseDown={(e) => {\n // Needed to preserve lexical selection for toggleDrawer lexical selection restore.\n // I believe this is needed due to this button (usually) being inside of a collapsible.\n e.preventDefault()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={parentLexicalRichTextField?.admin?.readOnly || false}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n ),\n [parentLexicalRichTextField?.admin?.readOnly, removeBlock],\n )\n\n const BlockCollapsible = useMemo(\n () =>\n ({\n children,\n disableBlockName,\n editButton,\n errorCount,\n fieldHasErrors,\n Label,\n removeButton,\n }: {\n children?: React.ReactNode\n disableBlockName?: boolean\n editButton?: boolean\n errorCount?: number\n fieldHasErrors?: boolean\n /**\n * Override the default label with a custom label\n */\n Label?: React.ReactNode\n removeButton?: boolean\n }) => (\n <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>\n <Collapsible\n className={[\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ].join(' ')}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n <div className={`${baseClass}__block-header`}>\n {(Label ?? CustomLabel) ? (\n (Label ?? CustomLabel)\n ) : (\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {blockDisplayName ?? formData?.blockType}\n </Pill>\n {!disableBlockName && (\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly || false}\n />\n )}\n\n {fieldHasErrors && (\n <ErrorPill count={errorCount ?? 0} i18n={i18n} withMessage />\n )}\n </div>\n )}\n\n <div>\n {(CustomBlock && editButton !== false) || (!CustomBlock && editButton) ? (\n <EditButton />\n ) : null}\n {removeButton !== false && editor.isEditable() ? <RemoveButton /> : null}\n </div>\n </div>\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n {children}\n </Collapsible>\n </div>\n ),\n [\n CustomBlock,\n CustomLabel,\n EditButton,\n RemoveButton,\n blockDisplayName,\n editor,\n formData.blockType,\n i18n,\n isCollapsed,\n onCollapsedChange,\n parentLexicalRichTextField?.admin?.readOnly,\n ],\n )\n\n const BlockDrawer = useMemo(\n () => () => (\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n ),\n [\n initialState,\n drawerSlug,\n blockDisplayName,\n t,\n clientBlock?.fields,\n schemaFieldsPath,\n permissions,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n ],\n )\n\n // Memoized Form JSX\n const Block = useMemo(() => {\n if (!initialState) {\n return null\n }\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n return await onChange({ formState, submit: true })\n },\n ]}\n fields={clientBlock?.fields}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={(formState, newData) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n newData.blockType = formData.blockType\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n node.setFields(newData as BlockFields, true)\n }\n })\n toggleDrawer()\n }}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n BlockDrawer={BlockDrawer}\n Collapsible={BlockCollapsible}\n CustomBlock={CustomBlock}\n EditButton={EditButton}\n errorCount={errorCount}\n formSchema={clientBlock?.fields}\n initialState={initialState}\n nodeKey={nodeKey}\n RemoveButton={RemoveButton}\n />\n </Form>\n )\n }, [\n BlockCollapsible,\n BlockDrawer,\n CustomBlock,\n RemoveButton,\n EditButton,\n editor,\n errorCount,\n toggleDrawer,\n clientBlock?.fields,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n initialState,\n nodeKey,\n onChange,\n submitted,\n ])\n\n if (!clientBlock) {\n return (\n <BlockCollapsible disableBlockName={true} fieldHasErrors={true}>\n <div className=\"lexical-block-not-found\">\n Error: Block '{formData.blockType}' not found in the config but exists in the lexical data\n </div>\n </BlockCollapsible>\n )\n }\n\n return Block\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Button","Collapsible","Drawer","EditDepthProvider","ErrorPill","Form","formatDrawerSlug","FormSubmit","Pill","RenderFields","SectionTitle","useDocumentInfo","useEditDepth","useFormSubmitted","useServerFunctions","useTranslation","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","React","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","$getNodeByKey","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isBlockNode","BlockContent","removeEmptyArrayValues","BlockComponent","props","cacheBuster","formData","nodeKey","submitted","id","collectionSlug","globalSlug","fieldProps","featureClientSchemaMap","field","parentLexicalRichTextField","initialLexicalFormState","permissions","readOnly","schemaPath","uuidFromContext","onChangeAbortControllerRef","AbortController","editDepth","errorCount","setErrorCount","useState","drawerSlug","slug","depth","toggleDrawer","getDocPreferences","setDocFieldPreferences","editor","getFormState","schemaFieldsPath","blockType","initialState","setInitialState","formState","blockName","initialValue","passesCondition","valid","value","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","abortController","awaitInitialState","state","data","docPermissions","fields","docPreferences","operation","renderAllFields","signal","_components","isCollapsed","setIsCollapsed","collapsed","componentMapRenderedBlockPath","clientSchemaMap","blocksField","clientBlock","blocks","i18n","t","onChange","prevFormState","submit","current","controller","newFormState","newFormStateData","setTimeout","update","node","newData","setFields","rowErrorCount","formField","Object","values","removeBlock","remove","blockDisplayName","labels","singular","onCollapsedChange","changedCollapsed","then","currentDocPreferences","currentFieldPreferences","name","collapsedArray","newCollapsed","length","includes","push","splice","indexOf","hello","EditButton","_jsx","buttonStyle","className","disabled","el","icon","onClick","e","preventDefault","stopPropagation","onMouseDown","round","size","tooltip","label","RemoveButton","admin","BlockCollapsible","children","disableBlockName","editButton","fieldHasErrors","Label","removeButton","join","collapsibleStyle","header","_jsxs","pillStyle","path","count","withMessage","isEditable","onToggle","incomingCollapsedState","BlockDrawer","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","beforeSubmit","onSubmit","formSchema"],"sources":["../../../../../src/features/blocks/client/component/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Button,\n Collapsible,\n Drawer,\n EditDepthProvider,\n ErrorPill,\n Form,\n formatDrawerSlug,\n FormSubmit,\n Pill,\n RenderFields,\n SectionTitle,\n useDocumentInfo,\n useEditDepth,\n useFormSubmitted,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react'\n\nconst baseClass = 'lexical-block'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport { $getNodeByKey } from 'lexical'\nimport { type BlocksFieldClient, type CollapsedPreferences, type FormState } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isBlockNode } from '../nodes/BlocksNode.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\nimport { removeEmptyArrayValues } from './removeEmptyArrayValues.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: BlockFields\n readonly nodeKey: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n const submitted = useFormSubmitted()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n const {\n fieldProps: {\n featureClientSchemaMap,\n field: parentLexicalRichTextField,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const onChangeAbortControllerRef = useRef(new AbortController())\n const editDepth = useEditDepth()\n const [errorCount, setErrorCount] = React.useState(0)\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-blocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug)\n\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n const [editor] = useLexicalComposerContext()\n\n const { getFormState } = useServerFunctions()\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}.fields`\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n initialLexicalFormState?.[formData.id]?.formState\n ? {\n ...initialLexicalFormState?.[formData.id]?.formState,\n blockName: {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n }\n : false,\n )\n\n useEffect(() => {\n setInitialState(false)\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n state.blockName = {\n initialValue: formData.blockName,\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n setInitialState(state)\n setCustomLabel(state._components?.customComponents?.BlockLabel)\n setCustomBlock(state._components?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n ])\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(\n initialLexicalFormState?.[formData.id]?.collapsed ?? false,\n )\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient | undefined = clientSchemaMap[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock = blocksField?.blocks?.[0]\n\n const { i18n, t } = useTranslation<object, string>()\n\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state: newFormState } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!newFormState) {\n return prevFormState\n }\n\n newFormState.blockName = prevFormState.blockName\n\n const newFormStateData: BlockFields = reduceFieldsToValues(\n removeEmptyArrayValues({\n fields: deepCopyObjectSimpleWithoutReactComponents(newFormState),\n }),\n true,\n ) as BlockFields\n\n setTimeout(() => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n node.setFields(newData, true)\n }\n })\n }, 0)\n\n if (submit) {\n setCustomLabel(newFormState._components?.customComponents?.BlockLabel)\n setCustomBlock(newFormState._components?.customComponents?.Block)\n\n let rowErrorCount = 0\n for (const formField of Object.values(newFormState)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n\n return newFormState\n },\n\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n globalSlug,\n schemaFieldsPath,\n formData.blockType,\n editor,\n nodeKey,\n ],\n )\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences =\n currentDocPreferences?.fields?.[parentLexicalRichTextField.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(parentLexicalRichTextField.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, parentLexicalRichTextField.name, setDocFieldPreferences, formData.id],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n toggleDrawer()\n return false\n }}\n onMouseDown={(e) => {\n // Needed to preserve lexical selection for toggleDrawer lexical selection restore.\n // I believe this is needed due to this button (usually) being inside of a collapsible.\n e.preventDefault()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={parentLexicalRichTextField?.admin?.readOnly || false}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n ),\n [parentLexicalRichTextField?.admin?.readOnly, removeBlock],\n )\n\n const BlockCollapsible = useMemo(\n () =>\n ({\n children,\n disableBlockName,\n editButton,\n errorCount,\n fieldHasErrors,\n Label,\n removeButton,\n }: {\n children?: React.ReactNode\n disableBlockName?: boolean\n editButton?: boolean\n errorCount?: number\n fieldHasErrors?: boolean\n /**\n * Override the default label with a custom label\n */\n Label?: React.ReactNode\n removeButton?: boolean\n }) => (\n <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>\n <Collapsible\n className={[\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ].join(' ')}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n <div className={`${baseClass}__block-header`}>\n {(Label ?? CustomLabel) ? (\n (Label ?? CustomLabel)\n ) : (\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {blockDisplayName ?? formData?.blockType}\n </Pill>\n {!disableBlockName && (\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly || false}\n />\n )}\n\n {fieldHasErrors && (\n <ErrorPill count={errorCount ?? 0} i18n={i18n} withMessage />\n )}\n </div>\n )}\n\n <div>\n {(CustomBlock && editButton !== false) || (!CustomBlock && editButton) ? (\n <EditButton />\n ) : null}\n {removeButton !== false && editor.isEditable() ? <RemoveButton /> : null}\n </div>\n </div>\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n {children}\n </Collapsible>\n </div>\n ),\n [\n CustomBlock,\n CustomLabel,\n EditButton,\n RemoveButton,\n blockDisplayName,\n editor,\n formData.blockType,\n i18n,\n isCollapsed,\n onCollapsedChange,\n parentLexicalRichTextField?.admin?.readOnly,\n ],\n )\n\n const BlockDrawer = useMemo(\n () => () => (\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n ),\n [\n initialState,\n drawerSlug,\n blockDisplayName,\n t,\n clientBlock?.fields,\n schemaFieldsPath,\n permissions,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n ],\n )\n\n // Memoized Form JSX\n const Block = useMemo(() => {\n if (!initialState) {\n return null\n }\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n return await onChange({ formState, submit: true })\n },\n ]}\n fields={clientBlock?.fields}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={(formState, newData) => {\n // This is only called when form is submitted from drawer - usually only the case if the block has a custom Block component\n newData.blockType = formData.blockType\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n node.setFields(newData as BlockFields, true)\n }\n })\n toggleDrawer()\n }}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n BlockDrawer={BlockDrawer}\n Collapsible={BlockCollapsible}\n CustomBlock={CustomBlock}\n EditButton={EditButton}\n errorCount={errorCount}\n formSchema={clientBlock?.fields}\n initialState={initialState}\n nodeKey={nodeKey}\n RemoveButton={RemoveButton}\n />\n </Form>\n )\n }, [\n BlockCollapsible,\n BlockDrawer,\n CustomBlock,\n RemoveButton,\n EditButton,\n editor,\n errorCount,\n toggleDrawer,\n clientBlock?.fields,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n initialState,\n nodeKey,\n onChange,\n submitted,\n ])\n\n if (!clientBlock) {\n return (\n <BlockCollapsible disableBlockName={true} fieldHasErrors={true}>\n <div className=\"lexical-block-not-found\">\n Error: Block '{formData.blockType}' not found in the config but exists in the lexical data\n </div>\n </BlockCollapsible>\n )\n }\n\n return Block\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/server/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAE5E,eAAO,MAAM,kBAAkB,WACrB,KAAK,EAAE,KACd,cAAc,CAAC,mBAAmB,GAAG,yBAAyB,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/server/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAE5E,eAAO,MAAM,kBAAkB,WACrB,KAAK,EAAE,KACd,cAAc,CAAC,mBAAmB,GAAG,yBAAyB,CA+ChE,CAAA"}
|
|
@@ -9,7 +9,6 @@ export const blockValidationHOC = blocks => {
|
|
|
9
9
|
options: {
|
|
10
10
|
id,
|
|
11
11
|
collectionSlug,
|
|
12
|
-
data: parentDocumentData,
|
|
13
12
|
operation,
|
|
14
13
|
preferences,
|
|
15
14
|
req
|
|
@@ -30,7 +29,6 @@ export const blockValidationHOC = blocks => {
|
|
|
30
29
|
data: blockFieldData,
|
|
31
30
|
fields: block.fields,
|
|
32
31
|
fieldSchemaMap: undefined,
|
|
33
|
-
fullDataOverride: parentDocumentData,
|
|
34
32
|
operation: operation === 'create' || operation === 'update' ? operation : 'update',
|
|
35
33
|
permissions: {},
|
|
36
34
|
preferences,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","names":["fieldSchemasToFormState","blockValidationHOC","blocks","node","validation","blockFieldData","fields","options","id","collectionSlug","
|
|
1
|
+
{"version":3,"file":"validate.js","names":["fieldSchemasToFormState","blockValidationHOC","blocks","node","validation","blockFieldData","fields","options","id","collectionSlug","operation","preferences","req","block","find","slug","blockType","result","data","fieldSchemaMap","undefined","permissions","renderAllFields","schemaPath","errorPaths","fieldKey","concat","length","join"],"sources":["../../../../src/features/blocks/server/validate.ts"],"sourcesContent":["import type { Block } from 'payload'\n\nimport { fieldSchemasToFormState } from '@payloadcms/ui/forms/fieldSchemasToFormState'\n\nimport type { NodeValidation } from '../../typesServer.js'\nimport type { BlockFields, SerializedBlockNode } from './nodes/BlocksNode.js'\nimport type { SerializedInlineBlockNode } from './nodes/InlineBlocksNode.js'\n\nexport const blockValidationHOC = (\n blocks: Block[],\n): NodeValidation<SerializedBlockNode | SerializedInlineBlockNode> => {\n return async ({ node, validation }) => {\n const blockFieldData = node.fields ?? ({} as BlockFields)\n\n const {\n options: { id, collectionSlug, operation, preferences, req },\n } = validation\n\n // find block\n const block = blocks.find((block) => block.slug === blockFieldData.blockType)\n\n // validate block\n if (!block) {\n return `Block ${blockFieldData.blockType} not found`\n }\n\n /**\n * Run fieldSchemasToFormState as that properly validates block and block sub-fields\n */\n\n const result = await fieldSchemasToFormState({\n id,\n collectionSlug,\n data: blockFieldData,\n fields: block.fields,\n fieldSchemaMap: undefined,\n operation: operation === 'create' || operation === 'update' ? operation : 'update',\n permissions: {},\n preferences,\n renderAllFields: false,\n req,\n schemaPath: '',\n })\n\n let errorPaths: string[] = []\n for (const fieldKey in result) {\n if (result[fieldKey].errorPaths) {\n errorPaths = errorPaths.concat(result[fieldKey].errorPaths)\n }\n }\n\n if (errorPaths.length) {\n return 'The following fields are invalid: ' + errorPaths.join(', ')\n }\n\n return true\n }\n}\n"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ;AAMxC,OAAO,MAAMC,kBAAA,GACXC,MAAA;EAEA,OAAO,OAAO;IAAEC,IAAI;IAAEC;EAAU,CAAE;IAChC,MAAMC,cAAA,GAAiBF,IAAA,CAAKG,MAAM,IAAK,CAAC;IAExC,MAAM;MACJC,OAAA,EAAS;QAAEC,EAAE;QAAEC,cAAc;QAAEC,SAAS;QAAEC,WAAW;QAAEC;MAAG;IAAE,CAC7D,GAAGR,UAAA;IAEJ;IACA,MAAMS,KAAA,GAAQX,MAAA,CAAOY,IAAI,CAAED,KAAA,IAAUA,KAAA,CAAME,IAAI,KAAKV,cAAA,CAAeW,SAAS;IAE5E;IACA,IAAI,CAACH,KAAA,EAAO;MACV,OAAO,SAASR,cAAA,CAAeW,SAAS,YAAY;IACtD;IAEA;;;IAIA,MAAMC,MAAA,GAAS,MAAMjB,uBAAA,CAAwB;MAC3CQ,EAAA;MACAC,cAAA;MACAS,IAAA,EAAMb,cAAA;MACNC,MAAA,EAAQO,KAAA,CAAMP,MAAM;MACpBa,cAAA,EAAgBC,SAAA;MAChBV,SAAA,EAAWA,SAAA,KAAc,YAAYA,SAAA,KAAc,WAAWA,SAAA,GAAY;MAC1EW,WAAA,EAAa,CAAC;MACdV,WAAA;MACAW,eAAA,EAAiB;MACjBV,GAAA;MACAW,UAAA,EAAY;IACd;IAEA,IAAIC,UAAA,GAAuB,EAAE;IAC7B,KAAK,MAAMC,QAAA,IAAYR,MAAA,EAAQ;MAC7B,IAAIA,MAAM,CAACQ,QAAA,CAAS,CAACD,UAAU,EAAE;QAC/BA,UAAA,GAAaA,UAAA,CAAWE,MAAM,CAACT,MAAM,CAACQ,QAAA,CAAS,CAACD,UAAU;MAC5D;IACF;IAEA,IAAIA,UAAA,CAAWG,MAAM,EAAE;MACrB,OAAO,uCAAuCH,UAAA,CAAWI,IAAI,CAAC;IAChE;IAEA,OAAO;EACT;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rscEntry.d.ts","sourceRoot":"","sources":["../../src/field/rscEntry.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EAGV,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,aAAa,CAAA;AAOpB,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CACzC;IACE,KAAK,EAAE,sBAAsB,CAAA;IAC7B,qBAAqB,EAAE,2BAA2B,CAAA;CACnD,GAAG,oBAAoB,GACtB,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GACxB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"rscEntry.d.ts","sourceRoot":"","sources":["../../src/field/rscEntry.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EAGV,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,aAAa,CAAA;AAOpB,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CACzC;IACE,KAAK,EAAE,sBAAsB,CAAA;IAC7B,qBAAqB,EAAE,2BAA2B,CAAA;CACnD,GAAG,oBAAoB,GACtB,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GACxB,oBAAoB,CAgFvB,CAAA"}
|
package/dist/field/rscEntry.js
CHANGED
|
@@ -32,7 +32,6 @@ export const RscEntryLexicalField = async args => {
|
|
|
32
32
|
id: args.id,
|
|
33
33
|
clientFieldSchemaMap: args.clientFieldSchemaMap,
|
|
34
34
|
collectionSlug: args.collectionSlug,
|
|
35
|
-
documentData: args.data,
|
|
36
35
|
field,
|
|
37
36
|
fieldSchemaMap: args.fieldSchemaMap,
|
|
38
37
|
lexicalFieldSchemaPath: schemaPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rscEntry.js","names":["getTranslation","renderField","React","RichTextField","buildInitialState","initLexicalFeatures","RscEntryLexicalField","args","field","path","clientField","name","schemaPath","Error","clientFeatures","featureClientSchemaMap","clientFieldSchemaMap","fieldSchemaMap","i18n","payload","sanitizedEditorConfig","initialLexicalFormState","data","root","children","length","context","id","collectionSlug","
|
|
1
|
+
{"version":3,"file":"rscEntry.js","names":["getTranslation","renderField","React","RichTextField","buildInitialState","initLexicalFeatures","RscEntryLexicalField","args","field","path","clientField","name","schemaPath","Error","clientFeatures","featureClientSchemaMap","clientFieldSchemaMap","fieldSchemaMap","i18n","payload","sanitizedEditorConfig","initialLexicalFormState","data","root","children","length","context","id","collectionSlug","lexicalFieldSchemaPath","operation","permissions","preferences","renderFieldFn","req","nodeData","placeholderFromArgs","admin","placeholder","undefined","hideGutter","hideInsertParagraphAtEnd","props","forceRender","lexicalEditorConfig","lexical","readOnly","renderedBlocks","Object","keys","key","_jsx"],"sources":["../../src/field/rscEntry.tsx"],"sourcesContent":["import type { SerializedLexicalNode } from 'lexical'\nimport type {\n ClientComponentProps,\n FieldPaths,\n RichTextFieldClient,\n RichTextField as RichTextFieldType,\n ServerComponentProps,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { renderField } from '@payloadcms/ui/forms/renderField'\nimport React from 'react'\n\nimport type { SanitizedServerEditorConfig } from '../lexical/config/types.js'\nimport type {\n LexicalFieldAdminClientProps,\n LexicalFieldAdminProps,\n LexicalRichTextFieldProps,\n} from '../types.js'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport { RichTextField } from '../exports/client/index.js'\nimport { buildInitialState } from '../utilities/buildInitialState.js'\nimport { initLexicalFeatures } from '../utilities/initLexicalFeatures.js'\n\nexport const RscEntryLexicalField: React.FC<\n {\n admin: LexicalFieldAdminProps\n sanitizedEditorConfig: SanitizedServerEditorConfig\n } & ClientComponentProps &\n Pick<FieldPaths, 'path'> &\n ServerComponentProps\n> = async (args) => {\n const field: RichTextFieldType = args.field as RichTextFieldType\n const path = args.path ?? (args.clientField as RichTextFieldClient).name\n const schemaPath = args.schemaPath ?? path\n\n if (!(args?.clientField as RichTextFieldClient)?.name) {\n throw new Error('Initialized lexical RSC field without a field name')\n }\n\n const { clientFeatures, featureClientSchemaMap } = initLexicalFeatures({\n clientFieldSchemaMap: args.clientFieldSchemaMap,\n fieldSchemaMap: args.fieldSchemaMap,\n i18n: args.i18n,\n path,\n payload: args.payload,\n sanitizedEditorConfig: args.sanitizedEditorConfig,\n schemaPath,\n })\n\n let initialLexicalFormState = {}\n if (args.data?.[field.name]?.root?.children?.length) {\n initialLexicalFormState = await buildInitialState({\n context: {\n id: args.id,\n clientFieldSchemaMap: args.clientFieldSchemaMap,\n collectionSlug: args.collectionSlug,\n field,\n fieldSchemaMap: args.fieldSchemaMap,\n lexicalFieldSchemaPath: schemaPath,\n operation: args.operation,\n permissions: args.permissions,\n preferences: args.preferences,\n renderFieldFn: renderField,\n req: args.req,\n },\n nodeData: args.data?.[field.name]?.root?.children as SerializedLexicalNode[],\n })\n }\n\n const placeholderFromArgs = args.admin?.placeholder\n const placeholder = placeholderFromArgs\n ? getTranslation(placeholderFromArgs, args.i18n)\n : undefined\n\n const admin: LexicalFieldAdminClientProps = {}\n if (placeholder) {\n admin.placeholder = placeholder\n }\n if (args.admin?.hideGutter) {\n admin.hideGutter = true\n }\n if (args.admin?.hideInsertParagraphAtEnd) {\n admin.hideInsertParagraphAtEnd = true\n }\n\n const props: LexicalRichTextFieldProps = {\n clientFeatures,\n featureClientSchemaMap, // TODO: Does client need this? Why cant this just live in the server\n field: args.clientField as RichTextFieldClient,\n forceRender: args.forceRender,\n initialLexicalFormState,\n lexicalEditorConfig: args.sanitizedEditorConfig.lexical,\n path,\n permissions: args.permissions,\n readOnly: args.readOnly,\n renderedBlocks: args.renderedBlocks,\n schemaPath,\n }\n if (Object.keys(admin).length) {\n props.admin = admin\n }\n\n for (const key in props) {\n if (props[key as keyof LexicalRichTextFieldProps] === undefined) {\n delete props[key as keyof LexicalRichTextFieldProps]\n }\n }\n\n return <RichTextField {...props} />\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildInitialState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildInitialState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,SAAS,EACT,cAAc,EACd,aAAa,EACb,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AAMhB,MAAM,MAAM,uBAAuB,GAAG;IACpC,CAAC,MAAM,EAAE,MAAM,GAAG;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;QAClB,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAA;CACF,CAAA;AAED,KAAK,KAAK,GAAG;IACX,OAAO,EAAE;QACP,oBAAoB,EAAE,oBAAoB,CAAA;QAC1C,cAAc,EAAE,MAAM,CAAA;QACtB,
|
|
1
|
+
{"version":3,"file":"buildInitialState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildInitialState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,SAAS,EACT,cAAc,EACd,aAAa,EACb,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AAMhB,MAAM,MAAM,uBAAuB,GAAG;IACpC,CAAC,MAAM,EAAE,MAAM,GAAG;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;QAClB,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAA;CACF,CAAA;AAED,KAAK,KAAK,GAAG;IACX,OAAO,EAAE;QACP,oBAAoB,EAAE,oBAAoB,CAAA;QAC1C,cAAc,EAAE,MAAM,CAAA;QACtB,KAAK,EAAE,aAAa,CAAA;QACpB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QACpB,sBAAsB,EAAE,MAAM,CAAA;QAC9B,SAAS,EAAE,SAAS,CAAA;QACpB,WAAW,CAAC,EAAE,yBAAyB,CAAA;QACvC,WAAW,EAAE,mBAAmB,CAAA;QAChC,aAAa,EAAE,GAAG,CAAA;QAClB,GAAG,EAAE,cAAc,CAAA;KACpB,CAAA;IACD,YAAY,CAAC,EAAE,uBAAuB,CAAA;IACtC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;CAClC,CAAA;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,YAAY,EAAE,oBAAoB,EAClC,QAAQ,GACT,EAAE,KAAK,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAyD1C"}
|
|
@@ -28,7 +28,6 @@ export async function buildInitialState({
|
|
|
28
28
|
data: blockNode.fields,
|
|
29
29
|
fields: context.fieldSchemaMap.get(schemaFieldsPath)?.fields,
|
|
30
30
|
fieldSchemaMap: context.fieldSchemaMap,
|
|
31
|
-
fullDataOverride: context.documentData,
|
|
32
31
|
operation: context.operation,
|
|
33
32
|
permissions: true,
|
|
34
33
|
preferences: context.preferences,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildInitialState.js","names":["fieldSchemasToFormState","buildInitialState","context","initialState","initialStateFromArgs","nodeData","node","children","type","blockNode","id","fields","schemaFieldsPath","lexicalFieldSchemaPath","blockType","formStateResult","clientFieldSchemaMap","collectionSlug","data","fieldSchemaMap","get","
|
|
1
|
+
{"version":3,"file":"buildInitialState.js","names":["fieldSchemasToFormState","buildInitialState","context","initialState","initialStateFromArgs","nodeData","node","children","type","blockNode","id","fields","schemaFieldsPath","lexicalFieldSchemaPath","blockType","formStateResult","clientFieldSchemaMap","collectionSlug","data","fieldSchemaMap","get","operation","permissions","preferences","renderAllFields","renderFieldFn","req","schemaPath","formState","currentFieldPreferences","field","name","collapsedArray","collapsed","includes"],"sources":["../../src/utilities/buildInitialState.ts"],"sourcesContent":["import type { SerializedLexicalNode } from 'lexical'\nimport type {\n ClientFieldSchemaMap,\n DocumentPreferences,\n FieldSchemaMap,\n FormState,\n Operation,\n PayloadRequest,\n RichTextField,\n SanitizedFieldPermissions,\n} from 'payload'\n\nimport { fieldSchemasToFormState } from '@payloadcms/ui/forms/fieldSchemasToFormState'\n\nimport type { SerializedBlockNode } from '../nodeTypes.js'\n\nexport type InitialLexicalFormState = {\n [nodeID: string]: {\n [key: string]: any\n formState?: FormState\n }\n}\n\ntype Props = {\n context: {\n clientFieldSchemaMap: ClientFieldSchemaMap\n collectionSlug: string\n field: RichTextField\n fieldSchemaMap: FieldSchemaMap\n id?: number | string\n lexicalFieldSchemaPath: string\n operation: Operation\n permissions?: SanitizedFieldPermissions\n preferences: DocumentPreferences\n renderFieldFn: any\n req: PayloadRequest\n }\n initialState?: InitialLexicalFormState\n nodeData: SerializedLexicalNode[]\n}\n\nexport async function buildInitialState({\n context,\n initialState: initialStateFromArgs,\n nodeData,\n}: Props): Promise<InitialLexicalFormState> {\n let initialState: InitialLexicalFormState = initialStateFromArgs ?? {}\n for (const node of nodeData) {\n if ('children' in node) {\n initialState = await buildInitialState({\n context,\n initialState,\n nodeData: node.children as SerializedLexicalNode[],\n })\n }\n\n if (node.type === 'block' || node.type === 'inlineBlock') {\n const blockNode = node as SerializedBlockNode\n const id = blockNode?.fields?.id\n if (!id) {\n continue\n }\n\n const schemaFieldsPath =\n node.type === 'block'\n ? `${context.lexicalFieldSchemaPath}.lexical_internal_feature.blocks.lexical_blocks.${blockNode.fields.blockType}.fields`\n : `${context.lexicalFieldSchemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${blockNode.fields.blockType}.fields`\n\n // Build form state for the block\n\n const formStateResult = await fieldSchemasToFormState({\n id: context.id,\n clientFieldSchemaMap: context.clientFieldSchemaMap,\n collectionSlug: context.collectionSlug,\n data: blockNode.fields,\n fields: (context.fieldSchemaMap.get(schemaFieldsPath) as any)?.fields,\n fieldSchemaMap: context.fieldSchemaMap,\n operation: context.operation as any, // TODO: Type\n permissions: true,\n preferences: context.preferences,\n renderAllFields: true, // If this function runs, the parent lexical field is being re-rendered => thus we can assume all its sub-fields need to be re-rendered\n renderFieldFn: context.renderFieldFn,\n req: context.req,\n schemaPath: schemaFieldsPath,\n })\n\n if (!initialState[id]) {\n initialState[id] = {}\n }\n\n initialState[id].formState = formStateResult\n\n if (node.type === 'block') {\n const currentFieldPreferences = context.preferences?.fields?.[context.field.name]\n const collapsedArray = currentFieldPreferences?.collapsed\n if (collapsedArray && collapsedArray.includes(id)) {\n initialState[id].collapsed = true\n }\n }\n }\n }\n return initialState\n}\n"],"mappings":"AAYA,SAASA,uBAAuB,QAAQ;AA6BxC,OAAO,eAAeC,kBAAkB;EACtCC,OAAO;EACPC,YAAA,EAAcC,oBAAoB;EAClCC;AAAQ,CACF;EACN,IAAIF,YAAA,GAAwCC,oBAAA,IAAwB,CAAC;EACrE,KAAK,MAAME,IAAA,IAAQD,QAAA,EAAU;IAC3B,IAAI,cAAcC,IAAA,EAAM;MACtBH,YAAA,GAAe,MAAMF,iBAAA,CAAkB;QACrCC,OAAA;QACAC,YAAA;QACAE,QAAA,EAAUC,IAAA,CAAKC;MACjB;IACF;IAEA,IAAID,IAAA,CAAKE,IAAI,KAAK,WAAWF,IAAA,CAAKE,IAAI,KAAK,eAAe;MACxD,MAAMC,SAAA,GAAYH,IAAA;MAClB,MAAMI,EAAA,GAAKD,SAAA,EAAWE,MAAA,EAAQD,EAAA;MAC9B,IAAI,CAACA,EAAA,EAAI;QACP;MACF;MAEA,MAAME,gBAAA,GACJN,IAAA,CAAKE,IAAI,KAAK,UACV,GAAGN,OAAA,CAAQW,sBAAsB,mDAAmDJ,SAAA,CAAUE,MAAM,CAACG,SAAS,SAAS,GACvH,GAAGZ,OAAA,CAAQW,sBAAsB,0DAA0DJ,SAAA,CAAUE,MAAM,CAACG,SAAS,SAAS;MAEpI;MAEA,MAAMC,eAAA,GAAkB,MAAMf,uBAAA,CAAwB;QACpDU,EAAA,EAAIR,OAAA,CAAQQ,EAAE;QACdM,oBAAA,EAAsBd,OAAA,CAAQc,oBAAoB;QAClDC,cAAA,EAAgBf,OAAA,CAAQe,cAAc;QACtCC,IAAA,EAAMT,SAAA,CAAUE,MAAM;QACtBA,MAAA,EAAST,OAAA,CAAQiB,cAAc,CAACC,GAAG,CAACR,gBAAA,GAA2BD,MAAA;QAC/DQ,cAAA,EAAgBjB,OAAA,CAAQiB,cAAc;QACtCE,SAAA,EAAWnB,OAAA,CAAQmB,SAAS;QAC5BC,WAAA,EAAa;QACbC,WAAA,EAAarB,OAAA,CAAQqB,WAAW;QAChCC,eAAA,EAAiB;QACjBC,aAAA,EAAevB,OAAA,CAAQuB,aAAa;QACpCC,GAAA,EAAKxB,OAAA,CAAQwB,GAAG;QAChBC,UAAA,EAAYf;MACd;MAEA,IAAI,CAACT,YAAY,CAACO,EAAA,CAAG,EAAE;QACrBP,YAAY,CAACO,EAAA,CAAG,GAAG,CAAC;MACtB;MAEAP,YAAY,CAACO,EAAA,CAAG,CAACkB,SAAS,GAAGb,eAAA;MAE7B,IAAIT,IAAA,CAAKE,IAAI,KAAK,SAAS;QACzB,MAAMqB,uBAAA,GAA0B3B,OAAA,CAAQqB,WAAW,EAAEZ,MAAA,GAAST,OAAA,CAAQ4B,KAAK,CAACC,IAAI,CAAC;QACjF,MAAMC,cAAA,GAAiBH,uBAAA,EAAyBI,SAAA;QAChD,IAAID,cAAA,IAAkBA,cAAA,CAAeE,QAAQ,CAACxB,EAAA,GAAK;UACjDP,YAAY,CAACO,EAAA,CAAG,CAACuB,SAAS,GAAG;QAC/B;MACF;IACF;EACF;EACA,OAAO9B,YAAA;AACT","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/richtext-lexical",
|
|
3
|
-
"version": "3.21.0
|
|
3
|
+
"version": "3.21.0",
|
|
4
4
|
"description": "The officially supported Lexical richtext adapter for Payload",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -352,8 +352,8 @@
|
|
|
352
352
|
"react-error-boundary": "4.1.2",
|
|
353
353
|
"ts-essentials": "10.0.3",
|
|
354
354
|
"uuid": "10.0.0",
|
|
355
|
-
"@payloadcms/translations": "3.21.0
|
|
356
|
-
"@payloadcms/ui": "3.21.0
|
|
355
|
+
"@payloadcms/translations": "3.21.0",
|
|
356
|
+
"@payloadcms/ui": "3.21.0"
|
|
357
357
|
},
|
|
358
358
|
"devDependencies": {
|
|
359
359
|
"@babel/cli": "7.26.4",
|
|
@@ -373,8 +373,8 @@
|
|
|
373
373
|
"esbuild-sass-plugin": "3.3.1",
|
|
374
374
|
"eslint-plugin-react-compiler": "19.0.0-beta-714736e-20250131",
|
|
375
375
|
"swc-plugin-transform-remove-imports": "3.1.0",
|
|
376
|
-
"
|
|
377
|
-
"
|
|
376
|
+
"@payloadcms/eslint-config": "3.9.0",
|
|
377
|
+
"payload": "3.21.0"
|
|
378
378
|
},
|
|
379
379
|
"peerDependencies": {
|
|
380
380
|
"@faceless-ui/modal": "3.0.0-beta.2",
|
|
@@ -392,8 +392,8 @@
|
|
|
392
392
|
"lexical": "0.21.0",
|
|
393
393
|
"react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
394
394
|
"react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
395
|
-
"@payloadcms/next": "3.21.0
|
|
396
|
-
"payload": "3.21.0
|
|
395
|
+
"@payloadcms/next": "3.21.0",
|
|
396
|
+
"payload": "3.21.0"
|
|
397
397
|
},
|
|
398
398
|
"engines": {
|
|
399
399
|
"node": "^18.20.2 || >=20.9.0"
|