@payloadcms/richtext-lexical 3.36.0 → 3.37.0-internal.f2e6c68
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/chunk-3BY5IZJD.js +2 -0
- package/dist/exports/client/{chunk-TMS3LIBB.js.map → chunk-3BY5IZJD.js.map} +3 -3
- package/dist/exports/client/componentInline-7TPI7ZBC.js +2 -0
- package/dist/exports/client/index.js +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +10 -1
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/package.json +7 -7
- package/dist/exports/client/chunk-TMS3LIBB.js +0 -2
- package/dist/exports/client/componentInline-7ITSVAKP.js +0 -2
- /package/dist/exports/client/{componentInline-7ITSVAKP.js.map → componentInline-7TPI7ZBC.js.map} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as ie}from"./chunk-INBEEENE.js";import{b as se}from"./chunk-BZZVLW4U.js";import{jsx as r,jsxs as p,Fragment as we}from"react/jsx-runtime";import O,{createContext as Ie,useCallback as A,useEffect as v,useMemo as N,useRef as x}from"react";import{useLexicalComposerContext as ve}from"@lexical/react/LexicalComposerContext";import{getTranslation as ce}from"@payloadcms/translations";import{Button as ae,Drawer as Ne,EditDepthProvider as Oe,Form as Te,formatDrawerSlug as $e,FormSubmit as Pe,RenderFields as Re,ShimmerEffect as Ee,useConfig as Le,useDocumentForm as je,useDocumentInfo as Me,useEditDepth as Ae,useServerFunctions as Je,useTranslation as Ke}from"@payloadcms/ui";import{abortAndIgnore as J}from"@payloadcms/ui/shared";import{$getNodeByKey as K}from"lexical";import{deepCopyObjectSimpleWithoutReactComponents as z,reduceFieldsToValues as ze}from"payload/shared";import{v4 as He}from"uuid";import{jsx as Ce}from"react/jsx-runtime";import _e from"bson-objectid";import ye from"react";import Be from"bson-objectid";import{DecoratorNode as xe}from"lexical";var B=class extends xe{__cacheBuster;__fields;constructor({cacheBuster:e,fields:t,key:l}){super(l),this.__fields=t,this.__cacheBuster=e||0}static clone(e){return new this({cacheBuster:e.__cacheBuster,fields:e.__fields,key:e.__key})}static getType(){return"inlineBlock"}static importDOM(){return{}}static importJSON(e){return Se(e.fields)}static isInline(){return!1}canIndent(){return!0}createDOM(){let e=document.createElement("span");return e.classList.add("inline-block-container"),e}decorate(e,t){return null}exportDOM(){let e=document.createElement("span");e.classList.add("inline-block-container");let t=document.createTextNode(this.getTextContent());return e.append(t),{element:e}}exportJSON(){return{type:"inlineBlock",fields:this.getFields(),version:1}}getCacheBuster(){return this.getLatest().__cacheBuster}getFields(){return this.getLatest().__fields}getTextContent(){return"Block Field"}isInline(){return!0}setFields(e,t){let l=this.getWritable();l.__fields=e,t||l.__cacheBuster++}updateDOM(){return!1}};function Se(s){return new B({fields:{...s,id:s?.id||new Be.default().toHexString()}})}var Fe=ye.lazy(()=>import("./componentInline-7TPI7ZBC.js").then(s=>({default:s.InlineBlockComponent}))),I=class extends B{static clone(e){return super.clone(e)}static getType(){return super.getType()}static importJSON(e){return De(e.fields)}decorate(e,t){return Ce(Fe,{cacheBuster:this.getCacheBuster(),formData:this.getFields(),nodeKey:this.getKey()})}exportJSON(){return super.exportJSON()}};function De(s){return new I({fields:{...s,id:s?.id||new _e.default().toHexString()}})}function M(s){return s instanceof I}var f="inline-block",ue=Ie({initialState:!1}),ft=()=>O.use(ue),pt=s=>{let{cacheBuster:e,formData:t,nodeKey:l}=s,[d]=ve(),{i18n:T,t:m}=Ke(),{createdInlineBlock:H,fieldProps:{featureClientSchemaMap:de,initialLexicalFormState:me,permissions:Ve,readOnly:S,schemaPath:V},setCreatedInlineBlock:W,uuid:fe}=se(),{fields:C}=je(),{getFormState:_}=Je(),pe=Ae(),q=x(!1),[c,$]=O.useState(()=>me?.[t.id]?.formState),G=x(!1),Q=x(e);v(()=>{G.current?(Q.current!==e&&$(!1),Q.current=e):G.current=!0},[e]);let[P,U]=O.useState(c?._components?.customComponents?.BlockLabel),[X,Y]=O.useState(c?._components?.customComponents?.Block),Z=$e({slug:`lexical-inlineBlocks-create-${fe}-${t.id}`,depth:pe}),{toggleDrawer:b}=ie(Z,!0),be=x(null),{id:y,collectionSlug:F,getDocPreferences:D,globalSlug:w}=Me(),{config:ke}=Le(),he=`${V}.lexical_internal_feature.blocks.lexical_inline_blocks.${t.blockType}`,k=de.blocks?.[he]?.[0],a=k.blockReferences?typeof k?.blockReferences?.[0]=="string"?ke.blocksMap[k?.blockReferences?.[0]]:k?.blockReferences?.[0]:k?.blocks?.[0],ee=a?.fields??[];v(()=>{!q.current&&H?.getKey()===l&&(ee.length>2&&b(),W?.(void 0),q.current=!0)},[ee.length,H,l,W,b]);let te=A(()=>{d.update(()=>{K(l)?.remove()})},[d,l]),h=a?.labels?.singular?ce(a?.labels.singular,T):a?.slug,R=x(new AbortController),g=`${V}.lexical_internal_feature.blocks.lexical_inline_blocks.${a?.slug}.fields`;v(()=>{let n=new AbortController;return t&&!c&&(async()=>{let{state:o}=await _({id:y,collectionSlug:F,data:t,docPermissions:{fields:!0},docPreferences:await D(),documentFormState:z(C),globalSlug:w,initialBlockData:t,initialBlockFormState:t,operation:"update",renderAllFields:!0,schemaPath:g,signal:n.signal});if(o){let u=ze(z(o),!0);d.update(()=>{let j=K(l);if(j&&M(j)){let le=u;le.blockType=t.blockType,j.setFields(le,!0)}}),$(o),U(o._components?.customComponents?.BlockLabel),Y(o._components?.customComponents?.Block)}})(),()=>{J(n)}},[_,d,l,g,y,t,c,F,w,D,C]);let ne=A(async({formState:n,submit:i})=>{J(R.current);let o=new AbortController;R.current=o;let{state:u}=await _({id:y,collectionSlug:F,docPermissions:{fields:!0},docPreferences:await D(),documentFormState:z(C),formState:n,globalSlug:w,initialBlockFormState:n,operation:"update",renderAllFields:!!i,schemaPath:g,signal:o.signal});return u?(i&&(U(u._components?.customComponents?.BlockLabel),Y(u._components?.customComponents?.Block)),u):n},[_,y,F,D,C,w,g]);v(()=>{let n=(i,o)=>Object.keys(o).some(u=>o[u]&&i[u]!==o[u].value);return()=>{c&&n(t,c)&&$(!1),J(R.current)}},[t,c]);let ge=A((n,i)=>{i.blockType=t.blockType,d.update(()=>{let o=K(l);o&&M(o)&&o.setFields(i,!0)})},[d,l,t]),E=N(()=>()=>r(ae,{buttonStyle:"icon-label",className:`${f}__removeButton`,disabled:S,icon:"x",onClick:n=>{n.preventDefault(),te()},round:!0,size:"small",tooltip:m("lexical:blocks:inlineBlocks:remove",{label:h})}),[h,S,te,m]),oe=N(()=>()=>r(ae,{buttonStyle:"icon-label",className:`${f}__editButton`,disabled:S,el:"button",icon:"edit",onClick:()=>{b()},round:!0,size:"small",tooltip:m("lexical:blocks:inlineBlocks:edit",{label:h})}),[h,S,m,b]),L=N(()=>({children:n,className:i})=>r("div",{className:[f,f+"-"+t.blockType,i].filter(Boolean).join(" "),ref:be,children:n}),[t.blockType]),re=N(()=>P?()=>P:()=>r("div",{children:a?.labels?ce(a?.labels.singular,T):""}),[P,a?.labels,T]);return a?p(Te,{beforeSubmit:[async({formState:n})=>await ne({formState:n,submit:!0})],disableValidationOnSubmit:!0,el:"div",fields:a?.fields,initialState:c||{},onChange:[ne],onSubmit:(n,i)=>{ge(n,i),b()},uuid:He(),children:[r(Oe,{children:r(Ne,{className:"",slug:Z,title:m(`lexical:blocks:inlineBlocks:${t?.id?"edit":"create"}`,{label:h??m("lexical:blocks:inlineBlocks:label")}),children:c?p(we,{children:[r(Re,{fields:a?.fields,forceRender:!0,parentIndexPath:"",parentPath:"",parentSchemaPath:g,permissions:!0,readOnly:!1}),r(Pe,{programmaticSubmit:!0,children:m("fields:saveChanges")})]}):null})}),X?r(ue,{value:{EditButton:oe,initialState:c,InlineBlockContainer:L,Label:re,nodeKey:l,RemoveButton:E},children:X}):p(L,{children:[c?r(re,{}):r(Ee,{height:"15px",width:"40px"}),d.isEditable()?p("div",{className:`${f}__actions`,children:[r(oe,{}),r(E,{})]}):null]})]}):p(L,{className:`${f}-not-found`,children:[p("span",{children:["Error: Block '",t.blockType,"' not found"]}),d.isEditable()?r("div",{className:`${f}__actions`,children:r(E,{})}):null]})};export{ft as a,pt as b,I as c,De as d,M as e};
|
|
2
|
+
//# sourceMappingURL=chunk-3BY5IZJD.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/blocks/client/componentInline/index.tsx", "../../../src/features/blocks/client/nodes/InlineBlocksNode.tsx", "../../../src/features/blocks/server/nodes/InlineBlocksNode.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\n\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient, ClientBlock, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useConfig,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey } from 'lexical'\n\nimport './index.scss'\n\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.use(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { fields: parentDocumentFields } = useDocumentForm()\n\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n () => initialLexicalFormState?.[formData.id]?.formState,\n )\n\n const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { config } = useConfig()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock: ClientBlock | undefined = blocksField.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : blocksField?.blocks?.[0]\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlockFields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n globalSlug,\n initialBlockData: formData,\n initialBlockFormState: formData,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\n })\n\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n editor,\n nodeKey,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n })\n },\n [editor, nodeKey, formData],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[baseClass, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [CustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n el=\"div\"\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n", "'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 override clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n override 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 override 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", "import type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from 'lexical'\nimport type { JsonObject } from 'payload'\nimport type React from 'react'\nimport type { JSX } from 'react'\n\nimport ObjectID from 'bson-objectid'\nimport { DecoratorNode } from 'lexical'\n\nexport type InlineBlockFields<TInlineBlockFields extends JsonObject = JsonObject> = {\n blockType: string\n id: string\n} & TInlineBlockFields\n\nexport type SerializedInlineBlockNode<TBlockFields extends JsonObject = JsonObject> = Spread<\n {\n children?: never // required so that our typed editor state doesn't automatically add children\n fields: InlineBlockFields<TBlockFields>\n type: 'inlineBlock'\n },\n SerializedLexicalNode\n>\n\nexport class ServerInlineBlockNode extends DecoratorNode<null | React.ReactElement> {\n __cacheBuster: number\n __fields: InlineBlockFields\n\n constructor({\n cacheBuster,\n fields,\n key,\n }: {\n cacheBuster?: number\n fields: InlineBlockFields\n key?: NodeKey\n }) {\n super(key)\n this.__fields = fields\n this.__cacheBuster = cacheBuster || 0\n }\n\n static override clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return new this({\n cacheBuster: node.__cacheBuster,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static override getType(): string {\n return 'inlineBlock'\n }\n\n static override importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static override importJSON(serializedNode: SerializedInlineBlockNode): ServerInlineBlockNode {\n const node = $createServerInlineBlockNode(serializedNode.fields)\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n canIndent() {\n return true\n }\n override createDOM() {\n const element = document.createElement('span')\n element.classList.add('inline-block-container')\n\n return element\n }\n\n override decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element | null {\n return null\n }\n\n override exportDOM(): DOMExportOutput {\n const element = document.createElement('span')\n element.classList.add('inline-block-container')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n override exportJSON(): SerializedInlineBlockNode {\n return {\n type: 'inlineBlock',\n fields: this.getFields(),\n version: 1,\n }\n }\n\n getCacheBuster(): number {\n return this.getLatest().__cacheBuster\n }\n\n getFields(): InlineBlockFields {\n return this.getLatest().__fields\n }\n\n override getTextContent(): string {\n return `Block Field`\n }\n\n override isInline() {\n return true\n }\n\n setFields(fields: InlineBlockFields, preventFormStateUpdate?: boolean): void {\n const writable = this.getWritable()\n writable.__fields = fields\n if (!preventFormStateUpdate) {\n writable.__cacheBuster++\n }\n }\n\n override updateDOM(): boolean {\n return false\n }\n}\n\nexport function $createServerInlineBlockNode(\n fields: Exclude<InlineBlockFields, 'id'>,\n): ServerInlineBlockNode {\n return new ServerInlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isServerInlineBlockNode(\n node: LexicalNode | null | ServerInlineBlockNode | undefined,\n): node is ServerInlineBlockNode {\n return node instanceof ServerInlineBlockNode\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["React", "createContext", "useCallback", "useEffect", "useMemo", "useRef", "useLexicalComposerContext", "getTranslation", "Button", "Drawer", "EditDepthProvider", "Form", "formatDrawerSlug", "FormSubmit", "RenderFields", "ShimmerEffect", "useConfig", "useDocumentForm", "useDocumentInfo", "useEditDepth", "useServerFunctions", "useTranslation", "abortAndIgnore", "$getNodeByKey", "deepCopyObjectSimpleWithoutReactComponents", "reduceFieldsToValues", "v4", "uuid", "ObjectID", "React", "ObjectID", "DecoratorNode", "ServerInlineBlockNode", "__cacheBuster", "__fields", "constructor", "cacheBuster", "fields", "key", "clone", "node", "__key", "getType", "importDOM", "importJSON", "serializedNode", "$createServerInlineBlockNode", "isInline", "canIndent", "createDOM", "element", "document", "createElement", "classList", "add", "decorate", "editor", "config", "exportDOM", "text", "createTextNode", "getTextContent", "append", "exportJSON", "type", "getFields", "version", "getCacheBuster", "getLatest", "setFields", "preventFormStateUpdate", "writable", "getWritable", "updateDOM", "id", "default", "toHexString", "InlineBlockComponent", "React", "lazy", "then", "module", "default", "InlineBlockNode", "ServerInlineBlockNode", "clone", "node", "getType", "importJSON", "serializedNode", "$createInlineBlockNode", "fields", "decorate", "editor", "config", "_jsx", "cacheBuster", "getCacheBuster", "formData", "getFields", "nodeKey", "getKey", "exportJSON", "id", "ObjectID", "toHexString", "$isInlineBlockNode", "baseClass", "InlineBlockComponentContext", "createContext", "initialState", "useInlineBlockComponentContext", "React", "use", "InlineBlockComponent", "props", "cacheBuster", "formData", "nodeKey", "editor", "useLexicalComposerContext", "i18n", "t", "useTranslation", "createdInlineBlock", "fieldProps", "featureClientSchemaMap", "initialLexicalFormState", "permissions", "readOnly", "schemaPath", "setCreatedInlineBlock", "uuid", "uuidFromContext", "useEditorConfigContext", "fields", "parentDocumentFields", "useDocumentForm", "getFormState", "useServerFunctions", "editDepth", "useEditDepth", "firstTimeDrawer", "useRef", "setInitialState", "useState", "id", "formState", "hasMounted", "prevCacheBuster", "useEffect", "current", "CustomLabel", "setCustomLabel", "customComponents", "BlockLabel", "CustomBlock", "setCustomBlock", "Block", "drawerSlug", "formatDrawerSlug", "slug", "depth", "toggleDrawer", "useLexicalDrawer", "inlineBlockElemElemRef", "collectionSlug", "getDocPreferences", "globalSlug", "useDocumentInfo", "config", "useConfig", "componentMapRenderedBlockPath", "blockType", "blocksField", "clientBlock", "blockReferences", "blocksMap", "blocks", "clientBlockFields", "getKey", "length", "undefined", "removeInlineBlock", "useCallback", "update", "$getNodeByKey", "remove", "blockDisplayName", "labels", "singular", "getTranslation", "onChangeAbortControllerRef", "AbortController", "schemaFieldsPath", "abortController", "state", "data", "docPermissions", "docPreferences", "documentFormState", "deepCopyObjectSimpleWithoutReactComponents", "initialBlockData", "initialBlockFormState", "operation", "renderAllFields", "signal", "newFormStateData", "reduceFieldsToValues", "node", "$isInlineBlockNode", "newData", "setFields", "abortAndIgnore", "onChange", "prevFormState", "submit", "controller", "onFormSubmit", "RemoveButton", "useMemo", "_jsx", "Button", "buttonStyle", "className", "disabled", "icon", "onClick", "e", "preventDefault", "round", "size", "tooltip", "label", "EditButton", "el", "InlineBlockContainer", "children", "filter", "Boolean", "join", "ref", "Label", "_jsxs", "Form", "beforeSubmit", "disableValidationOnSubmit", "onSubmit", "EditDepthProvider", "Drawer", "title", "_Fragment", "RenderFields", "forceRender", "parentIndexPath", "parentPath", "parentSchemaPath", "FormSubmit", "programmaticSubmit", "
|
|
4
|
+
"sourcesContent": ["'use client'\n\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient, ClientBlock, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useConfig,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey } from 'lexical'\n\nimport './index.scss'\n\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.use(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { fields: parentDocumentFields } = useDocumentForm()\n\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n () => initialLexicalFormState?.[formData.id]?.formState,\n )\n\n const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { config } = useConfig()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock: ClientBlock | undefined = blocksField.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : blocksField?.blocks?.[0]\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlockFields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n globalSlug,\n initialBlockData: formData,\n initialBlockFormState: formData,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\n })\n\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n editor,\n nodeKey,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n // cleanup effect\n useEffect(() => {\n const isStateOutOfSync = (formData: InlineBlockFields, initialState: FormState) => {\n return Object.keys(initialState).some(\n (key) => initialState[key] && formData[key] !== initialState[key].value,\n )\n }\n\n return () => {\n // If the component is unmounted (either via removeInlineBlock or via lexical itself) and the form state got changed before,\n // we need to reset the initial state to force a re-fetch of the initial state when it gets mounted again (e.g. via lexical history undo).\n // Otherwise it would use an outdated initial state.\n if (initialState && isStateOutOfSync(formData, initialState)) {\n setInitialState(false)\n }\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [formData, initialState])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n })\n },\n [editor, nodeKey, formData],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[baseClass, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [CustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n el=\"div\"\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n", "'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 override clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n override 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 override 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", "import type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from 'lexical'\nimport type { JsonObject } from 'payload'\nimport type React from 'react'\nimport type { JSX } from 'react'\n\nimport ObjectID from 'bson-objectid'\nimport { DecoratorNode } from 'lexical'\n\nexport type InlineBlockFields<TInlineBlockFields extends JsonObject = JsonObject> = {\n blockType: string\n id: string\n} & TInlineBlockFields\n\nexport type SerializedInlineBlockNode<TBlockFields extends JsonObject = JsonObject> = Spread<\n {\n children?: never // required so that our typed editor state doesn't automatically add children\n fields: InlineBlockFields<TBlockFields>\n type: 'inlineBlock'\n },\n SerializedLexicalNode\n>\n\nexport class ServerInlineBlockNode extends DecoratorNode<null | React.ReactElement> {\n __cacheBuster: number\n __fields: InlineBlockFields\n\n constructor({\n cacheBuster,\n fields,\n key,\n }: {\n cacheBuster?: number\n fields: InlineBlockFields\n key?: NodeKey\n }) {\n super(key)\n this.__fields = fields\n this.__cacheBuster = cacheBuster || 0\n }\n\n static override clone(node: ServerInlineBlockNode): ServerInlineBlockNode {\n return new this({\n cacheBuster: node.__cacheBuster,\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static override getType(): string {\n return 'inlineBlock'\n }\n\n static override importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static override importJSON(serializedNode: SerializedInlineBlockNode): ServerInlineBlockNode {\n const node = $createServerInlineBlockNode(serializedNode.fields)\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n canIndent() {\n return true\n }\n override createDOM() {\n const element = document.createElement('span')\n element.classList.add('inline-block-container')\n\n return element\n }\n\n override decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element | null {\n return null\n }\n\n override exportDOM(): DOMExportOutput {\n const element = document.createElement('span')\n element.classList.add('inline-block-container')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n override exportJSON(): SerializedInlineBlockNode {\n return {\n type: 'inlineBlock',\n fields: this.getFields(),\n version: 1,\n }\n }\n\n getCacheBuster(): number {\n return this.getLatest().__cacheBuster\n }\n\n getFields(): InlineBlockFields {\n return this.getLatest().__fields\n }\n\n override getTextContent(): string {\n return `Block Field`\n }\n\n override isInline() {\n return true\n }\n\n setFields(fields: InlineBlockFields, preventFormStateUpdate?: boolean): void {\n const writable = this.getWritable()\n writable.__fields = fields\n if (!preventFormStateUpdate) {\n writable.__cacheBuster++\n }\n }\n\n override updateDOM(): boolean {\n return false\n }\n}\n\nexport function $createServerInlineBlockNode(\n fields: Exclude<InlineBlockFields, 'id'>,\n): ServerInlineBlockNode {\n return new ServerInlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isServerInlineBlockNode(\n node: LexicalNode | null | ServerInlineBlockNode | undefined,\n): node is ServerInlineBlockNode {\n return node instanceof ServerInlineBlockNode\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "createContext", "useCallback", "useEffect", "useMemo", "useRef", "useLexicalComposerContext", "getTranslation", "Button", "Drawer", "EditDepthProvider", "Form", "formatDrawerSlug", "FormSubmit", "RenderFields", "ShimmerEffect", "useConfig", "useDocumentForm", "useDocumentInfo", "useEditDepth", "useServerFunctions", "useTranslation", "abortAndIgnore", "$getNodeByKey", "deepCopyObjectSimpleWithoutReactComponents", "reduceFieldsToValues", "v4", "uuid", "ObjectID", "React", "ObjectID", "DecoratorNode", "ServerInlineBlockNode", "__cacheBuster", "__fields", "constructor", "cacheBuster", "fields", "key", "clone", "node", "__key", "getType", "importDOM", "importJSON", "serializedNode", "$createServerInlineBlockNode", "isInline", "canIndent", "createDOM", "element", "document", "createElement", "classList", "add", "decorate", "editor", "config", "exportDOM", "text", "createTextNode", "getTextContent", "append", "exportJSON", "type", "getFields", "version", "getCacheBuster", "getLatest", "setFields", "preventFormStateUpdate", "writable", "getWritable", "updateDOM", "id", "default", "toHexString", "InlineBlockComponent", "React", "lazy", "then", "module", "default", "InlineBlockNode", "ServerInlineBlockNode", "clone", "node", "getType", "importJSON", "serializedNode", "$createInlineBlockNode", "fields", "decorate", "editor", "config", "_jsx", "cacheBuster", "getCacheBuster", "formData", "getFields", "nodeKey", "getKey", "exportJSON", "id", "ObjectID", "toHexString", "$isInlineBlockNode", "baseClass", "InlineBlockComponentContext", "createContext", "initialState", "useInlineBlockComponentContext", "React", "use", "InlineBlockComponent", "props", "cacheBuster", "formData", "nodeKey", "editor", "useLexicalComposerContext", "i18n", "t", "useTranslation", "createdInlineBlock", "fieldProps", "featureClientSchemaMap", "initialLexicalFormState", "permissions", "readOnly", "schemaPath", "setCreatedInlineBlock", "uuid", "uuidFromContext", "useEditorConfigContext", "fields", "parentDocumentFields", "useDocumentForm", "getFormState", "useServerFunctions", "editDepth", "useEditDepth", "firstTimeDrawer", "useRef", "setInitialState", "useState", "id", "formState", "hasMounted", "prevCacheBuster", "useEffect", "current", "CustomLabel", "setCustomLabel", "customComponents", "BlockLabel", "CustomBlock", "setCustomBlock", "Block", "drawerSlug", "formatDrawerSlug", "slug", "depth", "toggleDrawer", "useLexicalDrawer", "inlineBlockElemElemRef", "collectionSlug", "getDocPreferences", "globalSlug", "useDocumentInfo", "config", "useConfig", "componentMapRenderedBlockPath", "blockType", "blocksField", "clientBlock", "blockReferences", "blocksMap", "blocks", "clientBlockFields", "getKey", "length", "undefined", "removeInlineBlock", "useCallback", "update", "$getNodeByKey", "remove", "blockDisplayName", "labels", "singular", "getTranslation", "onChangeAbortControllerRef", "AbortController", "schemaFieldsPath", "abortController", "state", "data", "docPermissions", "docPreferences", "documentFormState", "deepCopyObjectSimpleWithoutReactComponents", "initialBlockData", "initialBlockFormState", "operation", "renderAllFields", "signal", "newFormStateData", "reduceFieldsToValues", "node", "$isInlineBlockNode", "newData", "setFields", "abortAndIgnore", "onChange", "prevFormState", "submit", "controller", "isStateOutOfSync", "Object", "keys", "some", "key", "value", "onFormSubmit", "RemoveButton", "useMemo", "_jsx", "Button", "buttonStyle", "className", "disabled", "icon", "onClick", "e", "preventDefault", "round", "size", "tooltip", "label", "EditButton", "el", "InlineBlockContainer", "children", "filter", "Boolean", "join", "ref", "Label", "_jsxs", "Form", "beforeSubmit", "disableValidationOnSubmit", "onSubmit", "EditDepthProvider", "Drawer", "title", "_Fragment", "RenderFields", "forceRender", "parentIndexPath", "parentPath", "parentSchemaPath", "FormSubmit", "programmaticSubmit", "ShimmerEffect", "height", "width", "isEditable"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";import{a as xe,c as _o,d as To,e as wo}from"./chunk-
|
|
1
|
+
"use client";import{a as xe,c as _o,d as To,e as wo}from"./chunk-3BY5IZJD.js";import{a as st}from"./chunk-DBWINSQN.js";import{a as lt,b as Ot,c as Ve}from"./chunk-FSKAVN4P.js";import{a as Ce}from"./chunk-INBEEENE.js";import{a as ua}from"./chunk-F26IQ5RE.js";import{a as ae,c as Pr,d as Br,e as da,f as ma,h as pa,j as fa,k as ha}from"./chunk-DOZWITPU.js";import{a as ca,b as j}from"./chunk-BZZVLW4U.js";function Q(t){return{items:t,key:"basic",label:({i18n:e})=>e.t("lexical:general:slashMenuBasicGroupLabel")}}import{$isElementNode as ye,$isRangeSelection as $t,FORMAT_ELEMENT_COMMAND as Pt}from"lexical";import{jsx as ko,jsxs as ga}from"react/jsx-runtime";import"react";var Hr=()=>ga("svg",{"aria-hidden":"true",className:"icon",fill:"none",focusable:"false",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:[ko("path",{d:"M2.5 5H17.5",stroke:"currentColor",strokeWidth:"1.5"}),ko("path",{d:"M2.5 10H17.5",stroke:"currentColor",strokeWidth:"1.5"}),ko("path",{d:"M5 15H15",stroke:"currentColor",strokeWidth:"1.5"})]});import{jsx as Eo,jsxs as Ca}from"react/jsx-runtime";import"react";var jr=()=>Ca("svg",{"aria-hidden":"true",className:"icon",fill:"none",focusable:"false",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:[Eo("path",{d:"M2.5 5H17.5",stroke:"currentColor",strokeWidth:"1.5"}),Eo("path",{d:"M2.5 10H17.5",stroke:"currentColor",strokeWidth:"1.5"}),Eo("path",{d:"M2.5 15H17.5",stroke:"currentColor",strokeWidth:"1.5"})]});import{jsx as No,jsxs as xa}from"react/jsx-runtime";import"react";var Ft=()=>xa("svg",{"aria-hidden":"true",className:"icon",fill:"none",focusable:"false",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:[No("path",{d:"M2.5 5H17.5",stroke:"currentColor",strokeWidth:"1.5"}),No("path",{d:"M2.5 10H17.5",stroke:"currentColor",strokeWidth:"1.5"}),No("path",{d:"M2.5 15H12.5",stroke:"currentColor",strokeWidth:"1.5"})]});import{jsx as Lo,jsxs as ba}from"react/jsx-runtime";import"react";var Ur=()=>ba("svg",{"aria-hidden":"true",className:"icon",fill:"none",focusable:"false",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:[Lo("path",{d:"M2.5 5H17.5",stroke:"currentColor",strokeWidth:"1.5"}),Lo("path",{d:"M2.5 10H17.5",stroke:"currentColor",strokeWidth:"1.5"}),Lo("path",{d:"M7.5 15H17.5",stroke:"currentColor",strokeWidth:"1.5"})]});var y=t=>o=>{let r={clientFeatureProps:o};if(typeof t=="function")r.feature=({config:n,featureClientImportMap:i,featureClientSchemaMap:l,featureProviderMap:s,field:u,resolvedFeatures:c,schemaPath:d,unSanitizedEditorConfig:a})=>{let p=t({config:n,featureClientImportMap:i,featureClientSchemaMap:l,featureProviderMap:s,field:u,props:o,resolvedFeatures:c,schemaPath:d,unSanitizedEditorConfig:a});return p.sanitizedClientFeatureProps===null&&(p.sanitizedClientFeatureProps=o),p};else{let n={...t};n.sanitizedClientFeatureProps=o,r.feature=n}return r};var Gr=t=>({type:"dropdown",ChildComponent:Ft,items:t,key:"align",order:30});var Wr=[Gr([{ChildComponent:Ft,isActive:({selection:t})=>{if(!$t(t))return!1;for(let e of t.getNodes()){if(ye(e)&&e.getFormatType()==="left")continue;let o=e.getParent();if(!(ye(o)&&o.getFormatType()==="left"))return!1}return!0},key:"alignLeft",label:({i18n:t})=>t.t("lexical:align:alignLeftLabel"),onSelect:({editor:t})=>{t.dispatchCommand(Pt,"left")},order:1},{ChildComponent:Hr,isActive:({selection:t})=>{if(!$t(t))return!1;for(let e of t.getNodes()){if(ye(e)&&e.getFormatType()==="center")continue;let o=e.getParent();if(!(ye(o)&&o.getFormatType()==="center"))return!1}return!0},key:"alignCenter",label:({i18n:t})=>t.t("lexical:align:alignCenterLabel"),onSelect:({editor:t})=>{t.dispatchCommand(Pt,"center")},order:2},{ChildComponent:Ur,isActive:({selection:t})=>{if(!$t(t))return!1;for(let e of t.getNodes()){if(ye(e)&&e.getFormatType()==="right")continue;let o=e.getParent();if(!(ye(o)&&o.getFormatType()==="right"))return!1}return!0},key:"alignRight",label:({i18n:t})=>t.t("lexical:align:alignRightLabel"),onSelect:({editor:t})=>{t.dispatchCommand(Pt,"right")},order:3},{ChildComponent:jr,isActive:({selection:t})=>{if(!$t(t))return!1;for(let e of t.getNodes()){if(ye(e)&&e.getFormatType()==="justify")continue;let o=e.getParent();if(!(ye(o)&&o.getFormatType()==="justify"))return!1}return!0},key:"alignJustify",label:({i18n:t})=>t.t("lexical:align:alignJustifyLabel"),onSelect:({editor:t})=>{t.dispatchCommand(Pt,"justify")},order:4}])],_a=y({toolbarFixed:{groups:Wr},toolbarInline:{groups:Wr}});import{$createQuoteNode as Yr,$isQuoteNode as zr,QuoteNode as ka}from"@lexical/rich-text";import{$setBlocksType as qr}from"@lexical/selection";import{$getSelection as Qr,$isRangeSelection as Ea}from"lexical";import{jsx as Vr}from"react/jsx-runtime";import"react";var So=()=>Vr("svg",{"aria-hidden":"true",className:"icon",fill:"none",focusable:"false",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:Vr("path",{d:"M13.5353 10.5725C13.5353 9.47709 11.0456 9.99991 11.0456 7.85883C11.0456 6.46464 12.1162 5.61816 13.361 5.61816C14.805 5.61816 16 6.86298 16 8.92937C16 11.2945 14.4564 13.7841 11.1203 14.3816L10.8216 13.1368C12.888 12.4895 13.5353 11.4937 13.5353 10.5725ZM6.71369 10.5725C6.71369 9.47709 4.22407 9.99991 4.22407 7.85883C4.22407 6.46464 5.29461 5.61816 6.53942 5.61816C7.9834 5.61816 9.17842 6.86298 9.17842 8.92937C9.17842 11.2945 7.63485 13.7841 4.29876 14.3816L4 13.1368C6.06639 12.4895 6.71369 11.4937 6.71369 10.5725Z",fill:"currentColor"})});import{jsx as Kr}from"react/jsx-runtime";import"react";var at=()=>Kr("svg",{"aria-hidden":"true",className:"icon",fill:"currentColor",focusable:"false",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:Kr("path",{d:"M11.708 14.5H7.79785V13.9414H8.01367C9.00391 13.9414 9.15625 13.9033 9.15625 13.6113V6.70508H8.07715C6.82031 6.70508 6.73145 7.08594 6.28711 8.67285H5.80469L5.91895 6.12109H13.5869L13.7012 8.67285H13.2188C12.7744 7.08594 12.6855 6.70508 11.4287 6.70508H10.3496V13.6113C10.3496 13.9033 10.502 13.9414 11.4922 13.9414H11.708V14.5Z",fill:"currentColor"})});var ne=t=>({type:"dropdown",ChildComponent:at,items:t,key:"text",order:25});import{$createQuoteNode as Ta,$isQuoteNode as Jr,QuoteNode as wa}from"@lexical/rich-text";var Xr={type:"element",dependencies:[wa],export:(t,e)=>{if(!Jr(t))return null;let o=e(t).split(`
|
|
2
2
|
`),r=[];for(let n of o)r.push("> "+n);return r.join(`
|
|
3
3
|
`)},regExp:/^>\s/,replace:(t,e,o,r)=>{if(r){let i=t.getPreviousSibling();if(Jr(i)){i.splice(i.getChildrenSize(),0,[...e]),i.select(0,0),t.remove();return}}let n=Ta();n.append(...e),t.replace(n),n.select(0,0)}};var Zr=[ne([{ChildComponent:So,isActive:({selection:t})=>{if(!Ea(t))return!1;for(let e of t.getNodes())if(!zr(e)&&!zr(e.getParent()))return!1;return!0},key:"blockquote",label:({i18n:t})=>t.t("lexical:blockquote:label"),onSelect:({editor:t})=>{t.update(()=>{let e=Qr();qr(e,()=>Yr())})},order:20}])],Na=y({markdownTransformers:[Xr],nodes:[ka],slashMenu:{groups:[Q([{Icon:So,key:"blockquote",keywords:["quote","blockquote"],label:({i18n:t})=>t.t("lexical:blockquote:label"),onSelect:({editor:t})=>{t.update(()=>{let e=Qr();qr(e,()=>Yr())})}}])]},toolbarFixed:{groups:Zr},toolbarInline:{groups:Zr}});import{getTranslation as Kt}from"@payloadcms/translations";import{jsx as Io,jsxs as La}from"react/jsx-runtime";import"react";var Bt=()=>La("svg",{"aria-hidden":"true",className:"icon",fill:"none",focusable:"false",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:[Io("rect",{height:"4",rx:"0.5",stroke:"currentColor",width:"4",x:"8",y:"5"}),Io("rect",{height:"4",rx:"0.5",stroke:"currentColor",width:"4",x:"5",y:"11"}),Io("rect",{height:"4",rx:"0.5",stroke:"currentColor",width:"4",x:"11",y:"11"})]});import{jsx as en}from"react/jsx-runtime";import"react";var Ht=()=>en("svg",{"aria-hidden":"true",className:"icon",fill:"none",focusable:"false",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:en("path",{clipRule:"evenodd",d:"M5.33333 6.5C5.11232 6.5 4.90036 6.5878 4.74408 6.74408C4.5878 6.90036 4.5 7.11232 4.5 7.33333V12.1667C4.5 12.3877 4.5878 12.5996 4.74408 12.7559C4.90036 12.9122 5.11232 13 5.33333 13H14.6667C14.8877 13 15.0996 12.9122 15.2559 12.7559C15.4122 12.5996 15.5 12.3877 15.5 12.1667V11.6667C15.5 11.3905 15.7239 11.1667 16 11.1667C16.2761 11.1667 16.5 11.3905 16.5 11.6667V12.1667C16.5 12.6529 16.3068 13.1192 15.963 13.463C15.6192 13.8068 15.1529 14 14.6667 14H5.33333C4.8471 14 4.38079 13.8068 4.03697 13.463C3.69315 13.1192 3.5 12.6529 3.5 12.1667V7.33333C3.5 6.8471 3.69315 6.38079 4.03697 6.03697C4.38079 5.69315 4.8471 5.5 5.33333 5.5H10.3333C10.6095 5.5 10.8333 5.72386 10.8333 6C10.8333 6.27614 10.6095 6.5 10.3333 6.5H5.33333ZM13 6.5C12.7239 6.5 12.5 6.27614 12.5 6C12.5 5.72386 12.7239 5.5 13 5.5H16C16.2761 5.5 16.5 5.72386 16.5 6V9C16.5 9.27614 16.2761 9.5 16 9.5C15.7239 9.5 15.5 9.27614 15.5 9V7.20711L13.3536 9.35355C13.1583 9.54882 12.8417 9.54882 12.6464 9.35355C12.4512 9.15829 12.4512 8.84171 12.6464 8.64645L14.7929 6.5H13ZM6.16699 8.33325C6.16699 8.05711 6.39085 7.83325 6.66699 7.83325H11.0003C11.2765 7.83325 11.5003 8.05711 11.5003 8.33325C11.5003 8.60939 11.2765 8.83325 11.0003 8.83325H6.66699C6.39085 8.83325 6.16699 8.60939 6.16699 8.33325ZM6.16699 10.9999C6.16699 10.7238 6.39085 10.4999 6.66699 10.4999H13.3337C13.6098 10.4999 13.8337 10.7238 13.8337 10.9999C13.8337 11.2761 13.6098 11.4999 13.3337 11.4999H6.66699C6.39085 11.4999 6.16699 11.2761 6.16699 10.9999Z",fill:"currentColor",fillRule:"evenodd"})});import{jsx as Sa}from"react/jsx-runtime";import"react";function jt(t,e){return t?()=>Sa("img",{alt:e??"Block Image",className:"lexical-block-custom-image",src:t,style:{maxHeight:20,maxWidth:20}}):Bt}import{jsx as rc}from"react/jsx-runtime";import nc from"bson-objectid";import"react";import{DecoratorBlockNode as Ia}from"@lexical/react/LexicalDecoratorBlockNode.js";import Ra from"bson-objectid";var ct=class extends Ia{__cacheBuster;__fields;constructor({cacheBuster:e,fields:o,format:r,key:n}){super(r,n),this.__fields=o,this.__cacheBuster=e||0}static clone(e){return new this({cacheBuster:e.__cacheBuster,fields:e.__fields,format:e.__format,key:e.__key})}static getType(){return"block"}static importDOM(){return{}}static importJSON(e){e.version===1&&(e={...e,fields:{...e.fields.data},version:2});let o=ya(e.fields);return o.setFormat(e.format),o}static isInline(){return!1}decorate(e,o){return null}exportDOM(){let e=document.createElement("div"),o=document.createTextNode(this.getTextContent());return e.append(o),{element:e}}exportJSON(){return{...super.exportJSON(),type:"block",fields:this.getFields(),version:2}}getCacheBuster(){return this.getLatest().__cacheBuster}getFields(){return this.getLatest().__fields}getTextContent(){return"Block Field"}setFields(e,o){let r=this.getWritable();r.__fields=e,o||r.__cacheBuster++}};function ya(t){return new ct({fields:{...t,id:t?.id||new Ra.default().toHexString()}})}import{jsx as z,jsxs as ut,Fragment as $a}from"react/jsx-runtime";import{Button as nn,Collapsible as Pa,Drawer as Ba,EditDepthProvider as Ha,ErrorPill as ja,Form as Ua,formatDrawerSlug as Ga,FormSubmit as Wa,Pill as Va,RenderFields as Ka,SectionTitle as Ja,useConfig as Xa,useDocumentForm as za,useDocumentInfo as ln,useEditDepth as Za,useFormSubmitted as Ya,useServerFunctions as qa,useTranslation as Qa}from"@payloadcms/ui";import{abortAndIgnore as Ro}from"@payloadcms/ui/shared";import{deepCopyObjectSimpleWithoutReactComponents as Gt,reduceFieldsToValues as sn}from"payload/shared";import dt,{useCallback as yo,useEffect as vo,useMemo as mt,useRef as Mo}from"react";import{useLexicalComposerContext as ec}from"@lexical/react/LexicalComposerContext";import{getTranslation as tc}from"@payloadcms/translations";import{$getNodeByKey as Wt}from"lexical";import{v4 as oc}from"uuid";import{c as va}from"react/compiler-runtime";import{jsx as Ut,jsxs as Ma}from"react/jsx-runtime";import{RenderFields as Aa,useFormSubmitted as Da}from"@payloadcms/ui";import Oa,{createContext as Fa}from"react";var tn=Fa({initialState:!1}),Oe=()=>Oa.use(tn),on=t=>{let e=va(13),{BlockDrawer:o,Collapsible:r,CustomBlock:n,EditButton:i,errorCount:l,formSchema:s,initialState:u,nodeKey:c,RemoveButton:d}=t,p=Da()&&l>0,m,f;e[0]!==r||e[1]!==l||e[2]!==p?(f=_=>Ut(r,{editButton:_.editButton,errorCount:l,fieldHasErrors:p,Label:_.Label,removeButton:_.removeButton,children:_.children}),e[0]=r,e[1]=l,e[2]=p,e[3]=f):f=e[3],m=f;let h=m,C;return e[4]!==o||e[5]!==h||e[6]!==n||e[7]!==i||e[8]!==d||e[9]!==s||e[10]!==u||e[11]!==c?(C=n?Ma(tn,{value:{BlockCollapsible:h,EditButton:i,initialState:u,nodeKey:c,RemoveButton:d},children:[n,Ut(o,{})]}):Ut(h,{children:Ut(Aa,{fields:s,forceRender:!0,parentIndexPath:"",parentPath:"",parentSchemaPath:"",permissions:!0})}),e[4]=o,e[5]=h,e[6]=n,e[7]=i,e[8]=d,e[9]=s,e[10]=u,e[11]=c,e[12]=C):C=e[12],C};function rn({fields:t}){for(let e in t){let o=t[e];Array.isArray(o?.rows)&&"value"in o&&(o.disableFormData=!0)}return t}var ue="lexical-block",an=t=>{let{cacheBuster:e,formData:o,nodeKey:r}=t,n=Ya(),{id:i,collectionSlug:l,globalSlug:s}=ln(),{fieldProps:{featureClientSchemaMap:u,field:c,initialLexicalFormState:d,permissions:a,readOnly:p,schemaPath:m},uuid:f}=j(),{fields:h}=za(),C=Mo(new AbortController),_=Za(),[I,A]=dt.useState(0),{config:b}=Xa(),T=Ga({slug:`lexical-blocks-create-${f}-${o.id}`,depth:_}),{toggleDrawer:g}=Ce(T),{getDocPreferences:k,setDocFieldPreferences:M}=ln(),[D]=ec(),{getFormState:P}=qa(),v=`${m}.lexical_internal_feature.blocks.lexical_blocks.${o.blockType}.fields`,[N,x]=dt.useState(()=>d?.[o.id]?.formState?{...d?.[o.id]?.formState,blockName:{initialValue:o.blockName,passesCondition:!0,valid:!0,value:o.blockName}}:!1),E=Mo(!1),S=Mo(e);vo(()=>{E.current?(S.current!==e&&x(!1),S.current=e):E.current=!0},[e]);let[L,R]=dt.useState(N?._components?.customComponents?.BlockLabel),[w,F]=dt.useState(N?._components?.customComponents?.Block);vo(()=>{let G=new AbortController;return o&&!N&&(async()=>{let{state:J}=await P({id:i,collectionSlug:l,data:o,docPermissions:{fields:!0},docPreferences:await k(),documentFormState:Gt(h),globalSlug:s,initialBlockData:o,operation:"update",renderAllFields:!0,schemaPath:v,signal:G.signal});if(J){J.blockName={initialValue:o.blockName,passesCondition:!0,valid:!0,value:o.blockName};let q=sn(Gt(J),!0);D.update(()=>{let X=Wt(r);if(X&&pt(X)){let se=q;se.blockType=o.blockType,X.setFields(se,!0)}}),x(J),R(J._components?.customComponents?.BlockLabel),F(J._components?.customComponents?.Block)}})(),()=>{Ro(G)}},[P,v,i,o,D,r,N,l,s,k,h]);let[$,U]=dt.useState(d?.[o.id]?.collapsed??!1),V=`${m}.lexical_internal_feature.blocks.lexical_blocks.${o.blockType}`,H=u.blocks?.[V]?.[0],W=H.blockReferences?typeof H?.blockReferences?.[0]=="string"?b.blocksMap[H?.blockReferences?.[0]]:H?.blockReferences?.[0]:H?.blocks?.[0],{i18n:te,t:ce}=Qa(),Y=yo(async({formState:G,submit:fe})=>{Ro(C.current);let J=new AbortController;C.current=J;let{state:q}=await P({id:i,collectionSlug:l,docPermissions:{fields:!0},docPreferences:await k(),documentFormState:Gt(h),formState:G,globalSlug:s,initialBlockFormState:G,operation:"update",renderAllFields:!!fe,schemaPath:v,signal:J.signal});if(!q)return G;G.blockName&&(q.blockName=G.blockName);let X=sn(rn({fields:Gt(q)}),!0);if(setTimeout(()=>{D.update(()=>{let se=Wt(r);if(se&&pt(se)){let We=X;We.blockType=o.blockType,se.setFields(We,!0)}})},0),fe){R(q._components?.customComponents?.BlockLabel),F(q._components?.customComponents?.Block);let se=0;for(let We of Object.values(q))We?.valid===!1&&se++;A(se)}return q},[P,i,l,k,s,v,o.blockType,h,D,r]);vo(()=>()=>{Ro(C.current)},[]);let K=yo(()=>{D.update(()=>{Wt(r)?.remove()})},[D,r]),oe=W?.labels?.singular?tc(W.labels.singular,te):W?.slug,re=yo(G=>{k().then(fe=>{let q=fe?.fields?.[c.name]?.collapsed,X=q&&q?.length?q:[];G?X.includes(o.id)||X.push(o.id):X.includes(o.id)&&X.splice(X.indexOf(o.id),1),M(c.name,{collapsed:X,hello:"hi"})})},[k,c.name,M,o.id]),le=mt(()=>()=>z(nn,{buttonStyle:"icon-label",className:`${ue}__editButton`,disabled:p,el:"button",icon:"edit",onClick:G=>(G.preventDefault(),G.stopPropagation(),g(),!1),onMouseDown:G=>{G.preventDefault()},round:!0,size:"small",tooltip:ce("lexical:blocks:inlineBlocks:edit",{label:oe})}),[oe,p,ce,g]),De=mt(()=>()=>z(nn,{buttonStyle:"icon-label",className:`${ue}__removeButton`,disabled:c?.admin?.readOnly||!1,icon:"x",onClick:G=>{G.preventDefault(),K()},round:!0,tooltip:"Remove Block"}),[c?.admin?.readOnly,K]),it=mt(()=>({children:G,disableBlockName:fe,editButton:J,errorCount:q,fieldHasErrors:X,Label:se,removeButton:We})=>z("div",{className:ue+" "+ue+"-"+o.blockType,children:z(Pa,{className:[`${ue}__row`,X?`${ue}__row--has-errors`:`${ue}__row--no-errors`].join(" "),collapsibleStyle:X?"error":"default",header:ut("div",{className:`${ue}__block-header`,children:[se??L?se??L:ut("div",{children:[z(Va,{className:`${ue}__block-pill ${ue}__block-pill-${o?.blockType}`,pillStyle:"white",children:oe??o?.blockType}),!fe&&z(Ja,{path:"blockName",readOnly:c?.admin?.readOnly||!1}),X&&z(ja,{count:q??0,i18n:te,withMessage:!0})]}),ut("div",{children:[w&&J!==!1||!w&&J?z(le,{}):null,We!==!1&&D.isEditable()?z(De,{}):null]})]}),isCollapsed:$,onToggle:$r=>{re($r),U($r)},children:G},0)}),[w,L,le,De,oe,D,o.blockType,te,$,re,c?.admin?.readOnly]),Dt=W?.fields??[],Fr=mt(()=>()=>z(Ha,{children:z(Ba,{className:"",slug:T,title:ce(`lexical:blocks:inlineBlocks:${o?.id?"edit":"create"}`,{label:oe??ce("lexical:blocks:inlineBlocks:label")}),children:N?ut($a,{children:[z(Ka,{fields:Dt,forceRender:!0,parentIndexPath:"",parentPath:"",parentSchemaPath:v,permissions:!0,readOnly:!1}),z(Wa,{programmaticSubmit:!0,children:ce("fields:saveChanges")})]}):null})}),[N,T,oe,ce,W?.fields,v,a]),aa=mt(()=>N?z(Ua,{beforeSubmit:[async({formState:G})=>await Y({formState:G,submit:!0})],el:"div",fields:Dt,initialState:N,onChange:[Y],onSubmit:(G,fe)=>{fe.blockType=o.blockType,D.update(()=>{let J=Wt(r);J&&pt(J)&&J.setFields(fe,!0)}),g()},submitted:n,uuid:oc(),children:z(on,{baseClass:ue,BlockDrawer:Fr,Collapsible:it,CustomBlock:w,EditButton:le,errorCount:I,formSchema:Dt,initialState:N,nodeKey:r,RemoveButton:De})}):null,[it,Fr,w,Dt,De,le,D,I,g,W?.fields,N,r,Y,n]);return W?aa:z(it,{disableBlockName:!0,fieldHasErrors:!0,children:ut("div",{className:"lexical-block-not-found",children:["Error: Block '",o.blockType,"' not found in the config but exists in the lexical data"]})})};var be=class extends ct{static clone(e){return super.clone(e)}static getType(){return super.getType()}static importJSON(e){e.version===1&&(e={...e,fields:{...e.fields.data},version:2});let o=Vt(e.fields);return o.setFormat(e.format),o}decorate(e,o){return rc(an,{cacheBuster:this.getCacheBuster(),formData:this.getFields(),nodeKey:this.getKey()})}exportJSON(){return super.exportJSON()}};function Vt(t){return new be({fields:{...t,id:t?.id||new nc.default().toHexString()}})}function pt(t){return t instanceof be}import{createCommand as cn}from"lexical";var Ke=cn("INSERT_BLOCK_COMMAND"),Je=cn("INSERT_INLINE_BLOCK_COMMAND");import{c as ic}from"react/compiler-runtime";import{useLexicalComposerContext as lc}from"@lexical/react/LexicalComposerContext.js";import{$insertNodeToNearestRoot as sc,$wrapNodeInElement as ac,mergeRegister as cc}from"@lexical/utils";import{formatDrawerSlug as uc,useEditDepth as dc}from"@payloadcms/ui";import{$createParagraphNode as mc,$getNodeByKey as pc,$getPreviousSelection as fc,$getSelection as hc,$insertNodes as gc,$isParagraphNode as Cc,$isRangeSelection as xc,$isRootOrShadowRoot as bc,COMMAND_PRIORITY_EDITOR as un}from"lexical";import{useEffect as _c,useState as Tc}from"react";var dn=()=>{let t=ic(12),[e]=lc(),[o,r]=Tc(null),{setCreatedInlineBlock:n,uuid:i}=j(),l=dc(),s="lexical-inlineBlocks-create-"+i,u;t[0]!==l||t[1]!==s?(u=uc({slug:s,depth:l}),t[0]=l,t[1]=s,t[2]=u):u=t[2];let c=u,{toggleDrawer:d}=Ce(c,!0),a;t[3]!==e||t[4]!==n||t[5]!==o?(a=()=>{if(!e.hasNodes([be]))throw new Error("BlocksPlugin: BlocksNode not registered on editor");return cc(e.registerCommand(Ke,m=>(e.update(()=>{let f=hc()||fc();if(xc(f)){let h=Vt(m),{focus:C}=f,_=C.getNode();sc(h),Cc(_)&&!_.__first&&_.remove()}}),!0),un),e.registerCommand(Je,m=>{if(o){let h=pc(o);return!h||!wo(h)?!1:(h.setFields(m),r(null),!0)}let f=To(m);return n?.(f),gc([f]),bc(f.getParentOrThrow())&&ac(f,mc).selectEnd(),!0},un))},t[3]=e,t[4]=n,t[5]=o,t[6]=a):a=t[6];let p;return t[7]!==e||t[8]!==n||t[9]!==o||t[10]!==d?(p=[e,n,o,d],t[7]=e,t[8]=n,t[9]=o,t[10]=d,t[11]=p):p=t[11],_c(a,p),null};var wc=y(({config:t,featureClientSchemaMap:e,props:o,schemaPath:r})=>{let n=`${r}.lexical_internal_feature.blocks.lexical_blocks`,i=`${r}.lexical_internal_feature.blocks.lexical_inline_blocks`,l=e.blocks;if(!l)return{};let s=Object.entries(l).filter(([a])=>a.startsWith(n+".")&&!a.replace(n+".","").includes(".")).map(([,a])=>a[0]),u=Object.entries(l).filter(([a])=>a.startsWith(i+".")&&!a.replace(i+".","").includes(".")).map(([,a])=>a[0]),c=s.map(a=>a.blockReferences?typeof a.blockReferences[0]=="string"?t.blocksMap[a.blockReferences[0]]:a.blockReferences[0]:a.blocks[0]).filter(a=>a!==void 0),d=u.map(a=>a.blockReferences?typeof a.blockReferences[0]=="string"?t.blocksMap[a.blockReferences[0]]:a.blockReferences[0]:a.blocks[0]).filter(a=>a!==void 0);return{nodes:[be,_o],plugins:[{Component:dn,position:"normal"}],sanitizedClientFeatureProps:o,slashMenu:{groups:[c?.length?{items:c.map(a=>({Icon:jt(a.imageURL,a.imageAltText),key:"block-"+a.slug,keywords:["block","blocks",a.slug],label:({i18n:p})=>a?.labels?.singular?Kt(a.labels.singular,p):a?.slug,onSelect:({editor:p})=>{p.dispatchCommand(Ke,{blockName:"",blockType:a.slug})}})),key:"blocks",label:({i18n:a})=>a.t("lexical:blocks:label")}:null,d?.length?{items:d.map(a=>({Icon:Ht,key:"inlineBlocks-"+a.slug,keywords:["inlineBlock","inline block",a.slug],label:({i18n:p})=>a?.labels?.singular?Kt(a.labels.singular,p):a?.slug,onSelect:({editor:p})=>{p.dispatchCommand(Je,{blockName:"",blockType:a.slug})}})),key:"inlineBlocks",label:({i18n:a})=>a.t("lexical:blocks:inlineBlocks:label")}:null].filter(Boolean)},toolbarFixed:{groups:[c.length?{type:"dropdown",ChildComponent:Bt,items:c.map((a,p)=>({ChildComponent:jt(a.imageURL,a.imageAltText),isActive:void 0,key:"block-"+a.slug,label:({i18n:m})=>a?.labels?.singular?Kt(a.labels.singular,m):a?.slug,onSelect:({editor:m})=>{m.dispatchCommand(Ke,{blockName:"",blockType:a.slug})},order:p})),key:"blocks",order:20}:null,d?.length?{type:"dropdown",ChildComponent:Ht,items:d.map((a,p)=>({ChildComponent:a.imageURL?jt(a.imageURL,a.imageAltText):Ht,isActive:void 0,key:"inlineBlock-"+a.slug,label:({i18n:m})=>a?.labels?.singular?Kt(a.labels.singular,m):a?.slug,onSelect:({editor:m})=>{m.dispatchCommand(Je,{blockName:"",blockType:a.slug})},order:p})),key:"inlineBlocks",order:25}:null].filter(Boolean)}}});import{c as Nc}from"react/compiler-runtime";import{jsx as $e,jsxs as Fo}from"react/jsx-runtime";import{useLexicalComposerContext as Lc}from"@lexical/react/LexicalComposerContext.js";import{$createParagraphNode as Sc,$createTextNode as Ic,$getRoot as Rc,getDOMSelection as Ao}from"lexical";import*as gn from"react";import{useCallback as Fe,useEffect as Do,useLayoutEffect as pn,useRef as Oo,useState as Jt}from"react";var kc=ae&&"documentMode"in document?document.documentMode:null,mn=ae&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),Rb=ae&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),yb=ae&&"InputEvent"in window&&!kc?"getTargetRanges"in new window.InputEvent("input"):!1,vb=ae&&/Version\/[\d.].*Safari/.test(navigator.userAgent),Mb=ae&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,Ab=ae&&/Android/.test(navigator.userAgent),Db=ae&&/Win/.test(navigator.platform),Ec=ae&&/^(?=.*Chrome).*/i.test(navigator.userAgent),Ob=ae&&/AppleWebKit\/[\d.]+/.test(navigator.userAgent)&&!Ec;var yc=t=>{let e=document.createElement("textarea");e.value=t||"",e.style.position="absolute",e.style.opacity="0",document.body?.appendChild(e),e.focus(),e.select();try{let o=document.execCommand("copy");console.log(o)}catch(o){console.error(o)}document.body?.removeChild(e)},vc=(t,e)=>{let o=document.createElement("a");o.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(e||"")),o.setAttribute("download",t),o.style.display="none",document.body?.appendChild(o),o.click(),document.body?.removeChild(o)},Mc=t=>{let o=((r,n)=>{switch(r){case"click":return` await page.mouse.click(${n.x}, ${n.y});`;case"keydown":return` await page.keyboard.keydown('${n}');`;case"keyup":return` await page.keyboard.keyup('${n}');`;case"press":return` await page.keyboard.press('${n}');`;case"selectAll":return" await selectAll(page);";case"snapshot":return` await assertHTMLSnapshot(page);
|
|
4
4
|
await assertSelection(page, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiE,MAAM,OAAO,CAAA;AAGrF,OAAO,KAAK,EAAwC,SAAS,EAAE,MAAM,SAAS,CAAA;AAuB9E,OAAO,cAAc,CAAA;AAKrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAM/E,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,+BAA+B,GAAG;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAA+C,CAAA;AAE1F,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiE,MAAM,OAAO,CAAA;AAGrF,OAAO,KAAK,EAAwC,SAAS,EAAE,MAAM,SAAS,CAAA;AAuB9E,OAAO,cAAc,CAAA;AAKrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAM/E,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,+BAA+B,GAAG;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACrB,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAA;IAC3C,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;CACxB,CAAA;AAMD,eAAO,MAAM,8BAA8B,uCAA+C,CAAA;AAE1F,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAgZhD,CAAA"}
|
|
@@ -198,10 +198,19 @@ export const InlineBlockComponent = props => {
|
|
|
198
198
|
}, [getFormState, id, collectionSlug, getDocPreferences, parentDocumentFields, globalSlug, schemaFieldsPath]);
|
|
199
199
|
// cleanup effect
|
|
200
200
|
useEffect(() => {
|
|
201
|
+
const isStateOutOfSync = (formData_0, initialState_0) => {
|
|
202
|
+
return Object.keys(initialState_0).some(key => initialState_0[key] && formData_0[key] !== initialState_0[key].value);
|
|
203
|
+
};
|
|
201
204
|
return () => {
|
|
205
|
+
// If the component is unmounted (either via removeInlineBlock or via lexical itself) and the form state got changed before,
|
|
206
|
+
// we need to reset the initial state to force a re-fetch of the initial state when it gets mounted again (e.g. via lexical history undo).
|
|
207
|
+
// Otherwise it would use an outdated initial state.
|
|
208
|
+
if (initialState && isStateOutOfSync(formData, initialState)) {
|
|
209
|
+
setInitialState(false);
|
|
210
|
+
}
|
|
202
211
|
abortAndIgnore(onChangeAbortControllerRef.current);
|
|
203
212
|
};
|
|
204
|
-
}, []);
|
|
213
|
+
}, [formData, initialState]);
|
|
205
214
|
/**
|
|
206
215
|
* HANDLE FORM SUBMIT
|
|
207
216
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","createContext","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","FormSubmit","RenderFields","ShimmerEffect","useConfig","useDocumentForm","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","use","InlineBlockComponent","props","cacheBuster","formData","nodeKey","editor","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","permissions","readOnly","schemaPath","setCreatedInlineBlock","uuidFromContext","fields","parentDocumentFields","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","id","formState","hasMounted","prevCacheBuster","current","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","config","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blockReferences","blocksMap","blocks","clientBlockFields","getKey","length","undefined","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","initialBlockData","initialBlockFormState","operation","renderAllFields","signal","newFormStateData","node","newData","setFields","onChange","prevFormState","submit","controller","onFormSubmit","RemoveButton","_jsx","buttonStyle","className","disabled","icon","onClick","e","preventDefault","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","ref","Label","_jsxs","isEditable","beforeSubmit","disableValidationOnSubmit","onSubmit","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","value","height","width"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient, ClientBlock, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useConfig,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey } from 'lexical'\n\nimport './index.scss'\n\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.use(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { fields: parentDocumentFields } = useDocumentForm()\n\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n () => initialLexicalFormState?.[formData.id]?.formState,\n )\n\n const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { config } = useConfig()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock: ClientBlock | undefined = blocksField.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : blocksField?.blocks?.[0]\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlockFields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n globalSlug,\n initialBlockData: formData,\n initialBlockFormState: formData,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\n })\n\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n editor,\n nodeKey,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n })\n },\n [editor, nodeKey, formData],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[baseClass, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [CustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n el=\"div\"\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","createContext","useCallback","useEffect","useMemo","useRef","baseClass","useLexicalComposerContext","getTranslation","Button","Drawer","EditDepthProvider","Form","formatDrawerSlug","FormSubmit","RenderFields","ShimmerEffect","useConfig","useDocumentForm","useDocumentInfo","useEditDepth","useServerFunctions","useTranslation","abortAndIgnore","$getNodeByKey","deepCopyObjectSimpleWithoutReactComponents","reduceFieldsToValues","v4","uuid","useEditorConfigContext","useLexicalDrawer","$isInlineBlockNode","InlineBlockComponentContext","initialState","useInlineBlockComponentContext","use","InlineBlockComponent","props","cacheBuster","formData","nodeKey","editor","i18n","t","createdInlineBlock","fieldProps","featureClientSchemaMap","initialLexicalFormState","permissions","readOnly","schemaPath","setCreatedInlineBlock","uuidFromContext","fields","parentDocumentFields","getFormState","editDepth","firstTimeDrawer","setInitialState","useState","id","formState","hasMounted","prevCacheBuster","current","CustomLabel","setCustomLabel","customComponents","BlockLabel","CustomBlock","setCustomBlock","Block","drawerSlug","slug","depth","toggleDrawer","inlineBlockElemElemRef","collectionSlug","getDocPreferences","globalSlug","config","componentMapRenderedBlockPath","blockType","clientSchemaMap","blocksField","clientBlock","blockReferences","blocksMap","blocks","clientBlockFields","getKey","length","undefined","removeInlineBlock","update","remove","blockDisplayName","labels","singular","onChangeAbortControllerRef","AbortController","schemaFieldsPath","abortController","awaitInitialState","state","data","docPermissions","docPreferences","documentFormState","initialBlockData","initialBlockFormState","operation","renderAllFields","signal","newFormStateData","node","newData","setFields","onChange","prevFormState","submit","controller","isStateOutOfSync","Object","keys","some","key","value","onFormSubmit","RemoveButton","_jsx","buttonStyle","className","disabled","icon","onClick","e","preventDefault","round","size","tooltip","label","EditButton","el","InlineBlockContainer","children","filter","Boolean","join","ref","Label","_jsxs","isEditable","beforeSubmit","disableValidationOnSubmit","onSubmit","title","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","programmaticSubmit","height","width"],"sources":["../../../../../src/features/blocks/client/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport type { BlocksFieldClient, ClientBlock, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Drawer,\n EditDepthProvider,\n Form,\n formatDrawerSlug,\n FormSubmit,\n RenderFields,\n ShimmerEffect,\n useConfig,\n useDocumentForm,\n useDocumentInfo,\n useEditDepth,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { $getNodeByKey } from 'lexical'\n\nimport './index.scss'\n\nimport { deepCopyObjectSimpleWithoutReactComponents, reduceFieldsToValues } from 'payload/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { InlineBlockFields } from '../../server/nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\ntype Props = {\n /**\n * Can be modified by the node in order to trigger the re-fetch of the initial state based on the\n * formData. This is useful when node.setFields() is explicitly called from outside of the form - in\n * this case, the new field state is likely not reflected in the form state, so we need to re-fetch\n */\n readonly cacheBuster: number\n readonly formData: InlineBlockFields\n readonly nodeKey: string\n}\n\ntype InlineBlockComponentContextType = {\n EditButton?: React.FC\n initialState: false | FormState | undefined\n InlineBlockContainer?: React.FC<{ children: React.ReactNode }>\n Label?: React.FC\n nodeKey?: string\n RemoveButton?: React.FC\n}\n\nconst InlineBlockComponentContext = createContext<InlineBlockComponentContextType>({\n initialState: false,\n})\n\nexport const useInlineBlockComponentContext = () => React.use(InlineBlockComponentContext)\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { cacheBuster, formData, nodeKey } = props\n\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const {\n createdInlineBlock,\n fieldProps: {\n featureClientSchemaMap,\n initialLexicalFormState,\n permissions,\n readOnly,\n schemaPath,\n },\n setCreatedInlineBlock,\n uuid: uuidFromContext,\n } = useEditorConfigContext()\n const { fields: parentDocumentFields } = useDocumentForm()\n\n const { getFormState } = useServerFunctions()\n const editDepth = useEditDepth()\n const firstTimeDrawer = useRef(false)\n\n const [initialState, setInitialState] = React.useState<false | FormState | undefined>(\n () => initialLexicalFormState?.[formData.id]?.formState,\n )\n\n const hasMounted = useRef(false)\n const prevCacheBuster = useRef(cacheBuster)\n useEffect(() => {\n if (hasMounted.current) {\n if (prevCacheBuster.current !== cacheBuster) {\n setInitialState(false)\n }\n prevCacheBuster.current = cacheBuster\n } else {\n hasMounted.current = true\n }\n }, [cacheBuster])\n\n const [CustomLabel, setCustomLabel] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.BlockLabel,\n )\n\n const [CustomBlock, setCustomBlock] = React.useState<React.ReactNode | undefined>(\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n initialState?.['_components']?.customComponents?.Block,\n )\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-inlineBlocks-create-${uuidFromContext}-${formData.id}`,\n depth: editDepth,\n })\n const { toggleDrawer } = useLexicalDrawer(drawerSlug, true)\n\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { config } = useConfig()\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap?.[\n componentMapRenderedBlockPath\n ]?.[0] as BlocksFieldClient\n\n const clientBlock: ClientBlock | undefined = blocksField.blockReferences\n ? typeof blocksField?.blockReferences?.[0] === 'string'\n ? config.blocksMap[blocksField?.blockReferences?.[0]]\n : blocksField?.blockReferences?.[0]\n : blocksField?.blocks?.[0]\n\n const clientBlockFields = clientBlock?.fields ?? []\n\n // Open drawer on \"mount\"\n useEffect(() => {\n if (!firstTimeDrawer.current && createdInlineBlock?.getKey() === nodeKey) {\n // > 2 because they always have \"id\" and \"blockName\" fields\n if (clientBlockFields.length > 2) {\n toggleDrawer()\n }\n setCreatedInlineBlock?.(undefined)\n firstTimeDrawer.current = true\n }\n }, [clientBlockFields.length, createdInlineBlock, nodeKey, setCreatedInlineBlock, toggleDrawer])\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const blockDisplayName = clientBlock?.labels?.singular\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock?.slug\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_inline_blocks.${clientBlock?.slug}.fields`\n\n // Initial state for newly created blocks\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n /*\n * This will only run if a new block is created. For all existing blocks that are loaded when the document is loaded, or when the form is saved,\n * this is not run, as the lexical field RSC will fetch the state server-side and pass it to the client. That way, we avoid unnecessary client-side\n * requests. Though for newly created blocks, we need to fetch the state client-side, as the server doesn't know about the block yet.\n */\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions: { fields: true },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n globalSlug,\n initialBlockData: formData,\n initialBlockFormState: formData,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n const newFormStateData: InlineBlockFields = reduceFieldsToValues(\n deepCopyObjectSimpleWithoutReactComponents(state),\n true,\n ) as InlineBlockFields\n\n // Things like default values may come back from the server => update the node with the new data\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n const newData = newFormStateData\n newData.blockType = formData.blockType\n\n node.setFields(newData, true)\n }\n })\n\n setInitialState(state)\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n }\n\n if (formData && !initialState) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n editor,\n nodeKey,\n schemaFieldsPath,\n id,\n formData,\n initialState,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n /**\n * HANDLE ONCHANGE\n */\n const onChange = useCallback(\n async ({ formState: prevFormState, submit }: { formState: FormState; submit?: boolean }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n renderAllFields: submit ? true : false,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n if (submit) {\n setCustomLabel(state['_components']?.customComponents?.BlockLabel)\n setCustomBlock(state['_components']?.customComponents?.Block)\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n // cleanup effect\n useEffect(() => {\n const isStateOutOfSync = (formData: InlineBlockFields, initialState: FormState) => {\n return Object.keys(initialState).some(\n (key) => initialState[key] && formData[key] !== initialState[key].value,\n )\n }\n\n return () => {\n // If the component is unmounted (either via removeInlineBlock or via lexical itself) and the form state got changed before,\n // we need to reset the initial state to force a re-fetch of the initial state when it gets mounted again (e.g. via lexical history undo).\n // Otherwise it would use an outdated initial state.\n if (initialState && isStateOutOfSync(formData, initialState)) {\n setInitialState(false)\n }\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [formData, initialState])\n\n /**\n * HANDLE FORM SUBMIT\n */\n const onFormSubmit = useCallback(\n (formState: FormState, newData: Data) => {\n newData.blockType = formData.blockType\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey)\n if (node && $isInlineBlockNode(node)) {\n node.setFields(newData as InlineBlockFields, true)\n }\n })\n },\n [editor, nodeKey, formData],\n )\n\n const RemoveButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, removeInlineBlock, t],\n )\n\n const EditButton = useMemo(\n () => () => (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n ),\n [blockDisplayName, readOnly, t, toggleDrawer],\n )\n\n const InlineBlockContainer = useMemo(\n () =>\n ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <div\n className={[baseClass, baseClass + '-' + formData.blockType, className]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {children}\n </div>\n ),\n [formData.blockType],\n )\n\n const Label = useMemo(() => {\n if (CustomLabel) {\n return () => CustomLabel\n } else {\n return () => (\n <div>{clientBlock?.labels ? getTranslation(clientBlock?.labels.singular, i18n) : ''}</div>\n )\n }\n }, [CustomLabel, clientBlock?.labels, i18n])\n\n if (!clientBlock) {\n return (\n <InlineBlockContainer className={`${baseClass}-not-found`}>\n <span>Error: Block '{formData.blockType}' not found</span>\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )\n }\n\n return (\n <Form\n beforeSubmit={[\n async ({ formState }) => {\n // This is only called when form is submitted from drawer\n return await onChange({ formState, submit: true })\n },\n ]}\n disableValidationOnSubmit\n el=\"div\"\n fields={clientBlock?.fields}\n initialState={initialState || {}}\n onChange={[onChange]}\n onSubmit={(formState, data) => {\n onFormSubmit(formState, data)\n toggleDrawer()\n }}\n uuid={uuid()}\n >\n <EditDepthProvider>\n <Drawer\n className={''}\n slug={drawerSlug}\n title={t(`lexical:blocks:inlineBlocks:${formData?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n >\n {initialState ? (\n <>\n <RenderFields\n fields={clientBlock?.fields}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={false}\n />\n <FormSubmit programmaticSubmit={true}>{t('fields:saveChanges')}</FormSubmit>\n </>\n ) : null}\n </Drawer>\n </EditDepthProvider>\n {CustomBlock ? (\n <InlineBlockComponentContext\n value={{\n EditButton,\n initialState,\n InlineBlockContainer,\n Label,\n nodeKey,\n RemoveButton,\n }}\n >\n {CustomBlock}\n </InlineBlockComponentContext>\n ) : (\n <InlineBlockContainer>\n {initialState ? <Label /> : <ShimmerEffect height=\"15px\" width=\"40px\" />}\n {editor.isEditable() ? (\n <div className={`${baseClass}__actions`}>\n <EditButton />\n <RemoveButton />\n </div>\n ) : null}\n </InlineBlockContainer>\n )}\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/richtext-lexical",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.37.0-internal.f2e6c68",
|
|
4
4
|
"description": "The officially supported Lexical richtext adapter for Payload",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -364,8 +364,8 @@
|
|
|
364
364
|
"react-error-boundary": "4.1.2",
|
|
365
365
|
"ts-essentials": "10.0.3",
|
|
366
366
|
"uuid": "10.0.0",
|
|
367
|
-
"@payloadcms/
|
|
368
|
-
"@payloadcms/
|
|
367
|
+
"@payloadcms/ui": "3.37.0-internal.f2e6c68",
|
|
368
|
+
"@payloadcms/translations": "3.37.0-internal.f2e6c68"
|
|
369
369
|
},
|
|
370
370
|
"devDependencies": {
|
|
371
371
|
"@babel/cli": "7.26.4",
|
|
@@ -385,16 +385,16 @@
|
|
|
385
385
|
"esbuild-sass-plugin": "3.3.1",
|
|
386
386
|
"eslint-plugin-react-compiler": "19.0.0-beta-e993439-20250405",
|
|
387
387
|
"swc-plugin-transform-remove-imports": "3.1.0",
|
|
388
|
-
"
|
|
389
|
-
"
|
|
388
|
+
"@payloadcms/eslint-config": "3.28.0",
|
|
389
|
+
"payload": "3.37.0-internal.f2e6c68"
|
|
390
390
|
},
|
|
391
391
|
"peerDependencies": {
|
|
392
392
|
"@faceless-ui/modal": "3.0.0-beta.2",
|
|
393
393
|
"@faceless-ui/scroll-info": "2.0.0",
|
|
394
394
|
"react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
395
395
|
"react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
396
|
-
"@payloadcms/next": "3.
|
|
397
|
-
"payload": "3.
|
|
396
|
+
"@payloadcms/next": "3.37.0-internal.f2e6c68",
|
|
397
|
+
"payload": "3.37.0-internal.f2e6c68"
|
|
398
398
|
},
|
|
399
399
|
"engines": {
|
|
400
400
|
"node": "^18.20.2 || >=20.9.0"
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as ie}from"./chunk-INBEEENE.js";import{b as se}from"./chunk-BZZVLW4U.js";import{jsx as o,jsxs as p,Fragment as we}from"react/jsx-runtime";import T,{createContext as Ie,useCallback as j,useEffect as N,useMemo as v,useRef as _}from"react";import{useLexicalComposerContext as Ne}from"@lexical/react/LexicalComposerContext";import{getTranslation as ce}from"@payloadcms/translations";import{Button as ae,Drawer as ve,EditDepthProvider as Te,Form as $e,formatDrawerSlug as Oe,FormSubmit as Pe,RenderFields as Re,ShimmerEffect as Ee,useConfig as Le,useDocumentForm as Me,useDocumentInfo as je,useEditDepth as Ae,useServerFunctions as Je,useTranslation as Ke}from"@payloadcms/ui";import{abortAndIgnore as A}from"@payloadcms/ui/shared";import{$getNodeByKey as J}from"lexical";import{deepCopyObjectSimpleWithoutReactComponents as K,reduceFieldsToValues as ze}from"payload/shared";import{v4 as He}from"uuid";import{jsx as Se}from"react/jsx-runtime";import Ce from"bson-objectid";import ye from"react";import Be from"bson-objectid";import{DecoratorNode as _e}from"lexical";var B=class extends _e{__cacheBuster;__fields;constructor({cacheBuster:e,fields:t,key:r}){super(r),this.__fields=t,this.__cacheBuster=e||0}static clone(e){return new this({cacheBuster:e.__cacheBuster,fields:e.__fields,key:e.__key})}static getType(){return"inlineBlock"}static importDOM(){return{}}static importJSON(e){return xe(e.fields)}static isInline(){return!1}canIndent(){return!0}createDOM(){let e=document.createElement("span");return e.classList.add("inline-block-container"),e}decorate(e,t){return null}exportDOM(){let e=document.createElement("span");e.classList.add("inline-block-container");let t=document.createTextNode(this.getTextContent());return e.append(t),{element:e}}exportJSON(){return{type:"inlineBlock",fields:this.getFields(),version:1}}getCacheBuster(){return this.getLatest().__cacheBuster}getFields(){return this.getLatest().__fields}getTextContent(){return"Block Field"}isInline(){return!0}setFields(e,t){let r=this.getWritable();r.__fields=e,t||r.__cacheBuster++}updateDOM(){return!1}};function xe(l){return new B({fields:{...l,id:l?.id||new Be.default().toHexString()}})}var Fe=ye.lazy(()=>import("./componentInline-7ITSVAKP.js").then(l=>({default:l.InlineBlockComponent}))),I=class extends B{static clone(e){return super.clone(e)}static getType(){return super.getType()}static importJSON(e){return De(e.fields)}decorate(e,t){return Se(Fe,{cacheBuster:this.getCacheBuster(),formData:this.getFields(),nodeKey:this.getKey()})}exportJSON(){return super.exportJSON()}};function De(l){return new I({fields:{...l,id:l?.id||new Ce.default().toHexString()}})}function M(l){return l instanceof I}var m="inline-block",ue=Ie({initialState:!1}),ft=()=>T.use(ue),pt=l=>{let{cacheBuster:e,formData:t,nodeKey:r}=l,[a]=Ne(),{i18n:$,t:d}=Ke(),{createdInlineBlock:z,fieldProps:{featureClientSchemaMap:de,initialLexicalFormState:me,permissions:Ve,readOnly:x,schemaPath:H},setCreatedInlineBlock:V,uuid:fe}=se(),{fields:S}=Me(),{getFormState:C}=Je(),pe=Ae(),W=_(!1),[u,q]=T.useState(()=>me?.[t.id]?.formState),G=_(!1),Q=_(e);N(()=>{G.current?(Q.current!==e&&q(!1),Q.current=e):G.current=!0},[e]);let[O,U]=T.useState(u?._components?.customComponents?.BlockLabel),[X,Y]=T.useState(u?._components?.customComponents?.Block),Z=Oe({slug:`lexical-inlineBlocks-create-${fe}-${t.id}`,depth:pe}),{toggleDrawer:b}=ie(Z,!0),be=_(null),{id:y,collectionSlug:F,getDocPreferences:D,globalSlug:w}=je(),{config:ke}=Le(),he=`${H}.lexical_internal_feature.blocks.lexical_inline_blocks.${t.blockType}`,k=de.blocks?.[he]?.[0],i=k.blockReferences?typeof k?.blockReferences?.[0]=="string"?ke.blocksMap[k?.blockReferences?.[0]]:k?.blockReferences?.[0]:k?.blocks?.[0],ee=i?.fields??[];N(()=>{!W.current&&z?.getKey()===r&&(ee.length>2&&b(),V?.(void 0),W.current=!0)},[ee.length,z,r,V,b]);let te=j(()=>{a.update(()=>{J(r)?.remove()})},[a,r]),h=i?.labels?.singular?ce(i?.labels.singular,$):i?.slug,P=_(new AbortController),g=`${H}.lexical_internal_feature.blocks.lexical_inline_blocks.${i?.slug}.fields`;N(()=>{let n=new AbortController;return t&&!u&&(async()=>{let{state:s}=await C({id:y,collectionSlug:F,data:t,docPermissions:{fields:!0},docPreferences:await D(),documentFormState:K(S),globalSlug:w,initialBlockData:t,initialBlockFormState:t,operation:"update",renderAllFields:!0,schemaPath:g,signal:n.signal});if(s){let f=ze(K(s),!0);a.update(()=>{let L=J(r);if(L&&M(L)){let le=f;le.blockType=t.blockType,L.setFields(le,!0)}}),q(s),U(s._components?.customComponents?.BlockLabel),Y(s._components?.customComponents?.Block)}})(),()=>{A(n)}},[C,a,r,g,y,t,u,F,w,D,S]);let ne=j(async({formState:n,submit:c})=>{A(P.current);let s=new AbortController;P.current=s;let{state:f}=await C({id:y,collectionSlug:F,docPermissions:{fields:!0},docPreferences:await D(),documentFormState:K(S),formState:n,globalSlug:w,initialBlockFormState:n,operation:"update",renderAllFields:!!c,schemaPath:g,signal:s.signal});return f?(c&&(U(f._components?.customComponents?.BlockLabel),Y(f._components?.customComponents?.Block)),f):n},[C,y,F,D,S,w,g]);N(()=>()=>{A(P.current)},[]);let ge=j((n,c)=>{c.blockType=t.blockType,a.update(()=>{let s=J(r);s&&M(s)&&s.setFields(c,!0)})},[a,r,t]),R=v(()=>()=>o(ae,{buttonStyle:"icon-label",className:`${m}__removeButton`,disabled:x,icon:"x",onClick:n=>{n.preventDefault(),te()},round:!0,size:"small",tooltip:d("lexical:blocks:inlineBlocks:remove",{label:h})}),[h,x,te,d]),oe=v(()=>()=>o(ae,{buttonStyle:"icon-label",className:`${m}__editButton`,disabled:x,el:"button",icon:"edit",onClick:()=>{b()},round:!0,size:"small",tooltip:d("lexical:blocks:inlineBlocks:edit",{label:h})}),[h,x,d,b]),E=v(()=>({children:n,className:c})=>o("div",{className:[m,m+"-"+t.blockType,c].filter(Boolean).join(" "),ref:be,children:n}),[t.blockType]),re=v(()=>O?()=>O:()=>o("div",{children:i?.labels?ce(i?.labels.singular,$):""}),[O,i?.labels,$]);return i?p($e,{beforeSubmit:[async({formState:n})=>await ne({formState:n,submit:!0})],disableValidationOnSubmit:!0,el:"div",fields:i?.fields,initialState:u||{},onChange:[ne],onSubmit:(n,c)=>{ge(n,c),b()},uuid:He(),children:[o(Te,{children:o(ve,{className:"",slug:Z,title:d(`lexical:blocks:inlineBlocks:${t?.id?"edit":"create"}`,{label:h??d("lexical:blocks:inlineBlocks:label")}),children:u?p(we,{children:[o(Re,{fields:i?.fields,forceRender:!0,parentIndexPath:"",parentPath:"",parentSchemaPath:g,permissions:!0,readOnly:!1}),o(Pe,{programmaticSubmit:!0,children:d("fields:saveChanges")})]}):null})}),X?o(ue,{value:{EditButton:oe,initialState:u,InlineBlockContainer:E,Label:re,nodeKey:r,RemoveButton:R},children:X}):p(E,{children:[u?o(re,{}):o(Ee,{height:"15px",width:"40px"}),a.isEditable()?p("div",{className:`${m}__actions`,children:[o(oe,{}),o(R,{})]}):null]})]}):p(E,{className:`${m}-not-found`,children:[p("span",{children:["Error: Block '",t.blockType,"' not found"]}),a.isEditable()?o("div",{className:`${m}__actions`,children:o(R,{})}):null]})};export{ft as a,pt as b,I as c,De as d,M as e};
|
|
2
|
-
//# sourceMappingURL=chunk-TMS3LIBB.js.map
|
/package/dist/exports/client/{componentInline-7ITSVAKP.js.map → componentInline-7TPI7ZBC.js.map}
RENAMED
|
File without changes
|