@payloadcms/richtext-lexical 3.0.0-canary.a5aaf21 → 3.0.0-canary.a7293f6
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/cell/index.js +1 -1
- package/dist/cell/index.js.map +1 -1
- package/dist/exports/client/Field-ETCEVZLL.js +2 -0
- package/dist/exports/client/Field-ETCEVZLL.js.map +7 -0
- package/dist/exports/client/RelationshipComponent-FTWR5YDX.js +2 -0
- package/dist/exports/client/RelationshipComponent-FTWR5YDX.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/{chunk-PY6JO5OH.js → chunk-32KXGBIQ.js} +2 -2
- package/dist/exports/client/{chunk-PY6JO5OH.js.map → chunk-32KXGBIQ.js.map} +2 -2
- package/dist/exports/client/chunk-6LZZDOEO.js +2 -0
- package/dist/exports/client/chunk-6LZZDOEO.js.map +7 -0
- package/dist/exports/client/{chunk-TXEIKM77.js → chunk-GD6LBQBJ.js} +2 -2
- package/dist/exports/client/chunk-GD6LBQBJ.js.map +7 -0
- package/dist/exports/client/{chunk-GK7ZKYHL.js → chunk-IIWHHN4J.js} +2 -2
- package/dist/exports/client/chunk-IIWHHN4J.js.map +7 -0
- package/dist/exports/client/{chunk-GTKNWSQW.js → chunk-QZNJUROL.js} +2 -2
- package/dist/exports/client/{chunk-GTKNWSQW.js.map → chunk-QZNJUROL.js.map} +2 -2
- package/dist/exports/client/chunk-WAMTSCVM.js +2 -0
- package/dist/exports/client/{chunk-F5DIILW3.js.map → chunk-WAMTSCVM.js.map} +2 -2
- package/dist/exports/client/{chunk-PECDZEZY.js → chunk-XCEM47RI.js} +2 -2
- package/dist/exports/client/{chunk-PECDZEZY.js.map → chunk-XCEM47RI.js.map} +2 -2
- package/dist/exports/client/component-6PBZ2U3Z.js +2 -0
- package/dist/exports/client/component-6PBZ2U3Z.js.map +7 -0
- package/dist/exports/client/component-6Y2K2RNP.js +2 -0
- package/dist/exports/client/component-6Y2K2RNP.js.map +7 -0
- package/dist/exports/client/component-ANB7VZLA.js +2 -0
- package/dist/exports/client/component-ANB7VZLA.js.map +7 -0
- package/dist/exports/client/componentInline-NUDJIIQ4.js +2 -0
- package/dist/exports/client/componentInline-NUDJIIQ4.js.map +7 -0
- package/dist/exports/client/index.d.ts +1 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +7 -7
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/blockquote/markdownTransformer.js.map +1 -1
- package/dist/features/blockquote/server/index.d.ts +1 -1
- package/dist/features/blockquote/server/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.js +5 -4
- package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
- package/dist/features/blocks/client/component/index.d.ts +1 -1
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +3 -3
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +14 -11
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/index.d.ts +1 -1
- package/dist/features/blocks/client/index.d.ts.map +1 -1
- package/dist/features/blocks/client/index.js +21 -11
- package/dist/features/blocks/client/index.js.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.d.ts +2 -2
- package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/client/plugin/index.d.ts +2 -2
- package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
- package/dist/features/blocks/client/plugin/index.js +4 -4
- package/dist/features/blocks/client/plugin/index.js.map +1 -1
- package/dist/features/blocks/server/index.d.ts.map +1 -1
- package/dist/features/blocks/server/index.js +4 -2
- package/dist/features/blocks/server/index.js.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.d.ts +10 -4
- package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts +2 -2
- package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
- package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
- package/dist/features/blocks/server/validate.js.map +1 -1
- package/dist/features/converters/html/converter/index.js +2 -2
- package/dist/features/converters/html/converter/index.js.map +1 -1
- package/dist/features/converters/html/field/index.js.map +1 -1
- package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +29 -43
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +39 -39
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js +19 -18
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
- package/dist/features/experimental_table/server/index.js +2 -2
- package/dist/features/experimental_table/server/index.js.map +1 -1
- package/dist/features/horizontalRule/client/component/index.d.ts +1 -1
- package/dist/features/horizontalRule/client/component/index.d.ts.map +1 -1
- package/dist/features/horizontalRule/client/component/index.js +12 -9
- package/dist/features/horizontalRule/client/component/index.js.map +1 -1
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +2 -2
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
- package/dist/features/indent/client/index.d.ts.map +1 -1
- package/dist/features/indent/client/index.js +2 -1
- package/dist/features/indent/client/index.js.map +1 -1
- package/dist/features/link/client/index.js +1 -1
- package/dist/features/link/client/index.js.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.d.ts +1 -1
- package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -7
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/nodes/AutoLinkNode.js +2 -2
- package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
- package/dist/features/link/nodes/LinkNode.js +11 -7
- package/dist/features/link/nodes/LinkNode.js.map +1 -1
- package/dist/features/link/nodes/types.d.ts +3 -3
- package/dist/features/link/nodes/types.d.ts.map +1 -1
- package/dist/features/link/nodes/types.js.map +1 -1
- package/dist/features/link/server/baseFields.d.ts +1 -1
- package/dist/features/link/server/baseFields.d.ts.map +1 -1
- package/dist/features/link/server/baseFields.js +3 -1
- package/dist/features/link/server/baseFields.js.map +1 -1
- package/dist/features/link/server/index.d.ts.map +1 -1
- package/dist/features/link/server/index.js +2 -2
- package/dist/features/link/server/index.js.map +1 -1
- package/dist/features/link/server/transformExtraFields.d.ts +1 -1
- package/dist/features/link/server/transformExtraFields.d.ts.map +1 -1
- package/dist/features/link/server/transformExtraFields.js.map +1 -1
- package/dist/features/link/server/validate.js.map +1 -1
- package/dist/features/lists/shared/markdown.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/converter/index.d.ts.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/converter/index.js +1 -0
- package/dist/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/index.d.ts.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/index.js +1 -0
- package/dist/features/migrations/slateToLexical/converter/index.js.map +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
- package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
- package/dist/features/paragraph/server/index.d.ts +1 -1
- package/dist/features/paragraph/server/index.d.ts.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.js +18 -13
- package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
- package/dist/features/relationship/client/drawer/index.js +3 -3
- package/dist/features/relationship/client/drawer/index.js.map +1 -1
- package/dist/features/relationship/client/plugins/index.js +1 -1
- package/dist/features/relationship/client/plugins/index.js.map +1 -1
- package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js +1 -1
- package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
- package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +40 -41
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +33 -34
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +4 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts +3 -4
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js +82 -64
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/toolbars/types.d.ts +21 -11
- package/dist/features/toolbars/types.d.ts.map +1 -1
- package/dist/features/toolbars/types.js.map +1 -1
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/features/upload/client/component/index.d.ts.map +1 -1
- package/dist/features/upload/client/component/index.js +11 -8
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/client/drawer/index.d.ts.map +1 -1
- package/dist/features/upload/client/drawer/index.js +2 -0
- package/dist/features/upload/client/drawer/index.js.map +1 -1
- package/dist/features/upload/client/plugin/index.js +1 -1
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/feature.server.js +3 -4
- package/dist/features/upload/server/feature.server.js.map +1 -1
- package/dist/features/upload/server/validate.js.map +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +11 -11
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/index.js +1 -1
- package/dist/field/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -63
- package/dist/index.js.map +1 -1
- package/dist/lexical/EditorPlugin.d.ts.map +1 -1
- package/dist/lexical/EditorPlugin.js +2 -1
- package/dist/lexical/EditorPlugin.js.map +1 -1
- package/dist/lexical/LexicalEditor.d.ts +1 -1
- package/dist/lexical/LexicalEditor.d.ts.map +1 -1
- package/dist/lexical/LexicalEditor.js +5 -5
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.d.ts +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.js +8 -7
- package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
- package/dist/lexical/config/client/sanitize.js +2 -2
- package/dist/lexical/config/client/sanitize.js.map +1 -1
- package/dist/lexical/config/server/loader.js.map +1 -1
- package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
- package/dist/lexical/config/server/sanitize.js +11 -11
- package/dist/lexical/config/server/sanitize.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +2 -2
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.js +9 -6
- package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +5 -5
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +9 -4
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js +3 -4
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
- package/dist/lexical/theme/EditorTheme.d.ts.map +1 -1
- package/dist/lexical/theme/EditorTheme.js +1 -0
- package/dist/lexical/theme/EditorTheme.js.map +1 -1
- package/dist/lexical/utils/rect.d.ts +4 -4
- package/dist/lexical/utils/setFloatingElemPosition.d.ts +1 -1
- package/dist/lexical/utils/setFloatingElemPosition.d.ts.map +1 -1
- package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
- package/dist/populateGraphQL/populate.js +1 -1
- package/dist/populateGraphQL/populate.js.map +1 -1
- package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts +1 -1
- package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
- package/dist/populateGraphQL/populateLexicalPopulationPromises.js +5 -4
- package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
- package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
- package/dist/utilities/generateComponentMap.d.ts.map +1 -1
- package/dist/utilities/generateComponentMap.js +1 -0
- package/dist/utilities/generateComponentMap.js.map +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts.map +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js.map +1 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts +1 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
- package/dist/validate/validateNodes.d.ts.map +1 -1
- package/dist/validate/validateNodes.js +2 -2
- package/dist/validate/validateNodes.js.map +1 -1
- package/package.json +30 -30
- package/dist/exports/client/Field-EL5TNVZW.js +0 -2
- package/dist/exports/client/Field-EL5TNVZW.js.map +0 -7
- package/dist/exports/client/RelationshipComponent-Z5SZ5FFT.js +0 -2
- package/dist/exports/client/RelationshipComponent-Z5SZ5FFT.js.map +0 -7
- package/dist/exports/client/chunk-F5DIILW3.js +0 -2
- package/dist/exports/client/chunk-GK7ZKYHL.js.map +0 -7
- package/dist/exports/client/chunk-TXEIKM77.js.map +0 -7
- package/dist/exports/client/component-ATPITPNI.js +0 -2
- package/dist/exports/client/component-ATPITPNI.js.map +0 -7
- package/dist/exports/client/component-GAX6BHKZ.js +0 -2
- package/dist/exports/client/component-GAX6BHKZ.js.map +0 -7
- package/dist/exports/client/component-M3ZCPXEG.js +0 -2
- package/dist/exports/client/component-M3ZCPXEG.js.map +0 -7
- package/dist/exports/client/componentInline-HAGGWKA7.js +0 -2
- package/dist/exports/client/componentInline-HAGGWKA7.js.map +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesServer.js","names":[],"sources":["../../src/features/typesServer.ts"],"sourcesContent":["import type { Transformer } from '@lexical/markdown'\nimport type { GenericLanguages, I18nClient } from '@payloadcms/translations'\nimport type { JSONSchema4 } from 'json-schema'\nimport type {\n Klass,\n LexicalNode,\n LexicalNodeReplacement,\n SerializedEditorState,\n SerializedLexicalNode,\n} from 'lexical'\nimport type {\n Config,\n Field,\n JsonObject,\n Payload,\n PayloadComponent,\n PayloadRequest,\n ReplaceAny,\n RequestContext,\n RichTextField,\n RichTextHooks,\n SanitizedConfig,\n ValidateOptions,\n} from 'payload'\n\nimport type { ServerEditorConfig } from '../lexical/config/types.js'\nimport type { AdapterProps } from '../types.js'\nimport type { HTMLConverter } from './converters/html/converter/types.js'\nimport type { BaseClientFeatureProps } from './typesClient.js'\n\nexport type PopulationPromise<T extends SerializedLexicalNode = SerializedLexicalNode> = ({\n context,\n currentDepth,\n depth,\n draft,\n editorPopulationPromises,\n field,\n fieldPromises,\n findMany,\n flattenLocales,\n node,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n}: {\n context: RequestContext\n currentDepth: number\n depth: number\n draft: boolean\n /**\n * This maps all population promises to the node type\n */\n editorPopulationPromises: Map<string, Array<PopulationPromise>>\n field: RichTextField<SerializedEditorState, AdapterProps>\n /**\n * fieldPromises are used for things like field hooks. They will be awaited before awaiting populationPromises\n */\n fieldPromises: Promise<void>[]\n findMany: boolean\n flattenLocales: boolean\n node: T\n overrideAccess: boolean\n populationPromises: Promise<void>[]\n req: PayloadRequest\n showHiddenFields: boolean\n siblingDoc: JsonObject\n}) => void\n\nexport type NodeValidation<T extends SerializedLexicalNode = SerializedLexicalNode> = ({\n node,\n nodeValidations,\n validation,\n}: {\n node: T\n nodeValidations: Map<string, Array<NodeValidation>>\n validation: {\n options: ValidateOptions<unknown, unknown, RichTextField, SerializedEditorState>\n value: SerializedEditorState\n }\n}) => Promise<string | true> | string | true\n\nexport type FeatureProviderProviderServer<\n UnSanitizedServerFeatureProps = undefined,\n ServerFeatureProps = UnSanitizedServerFeatureProps,\n ClientFeatureProps = undefined,\n> = (\n props?: UnSanitizedServerFeatureProps,\n) => FeatureProviderServer<UnSanitizedServerFeatureProps, ServerFeatureProps, ClientFeatureProps>\n\nexport type FeatureProviderServer<\n UnSanitizedServerFeatureProps = undefined,\n ServerFeatureProps = UnSanitizedServerFeatureProps,\n ClientFeatureProps = undefined,\n> = {\n /** Keys of dependencies needed for this feature. These dependencies do not have to be loaded first, but they have to exist, otherwise an error will be thrown. */\n dependencies?: string[]\n /** Keys of priority dependencies needed for this feature. These dependencies have to be loaded first AND have to exist, otherwise an error will be thrown. They will be available in the `feature` property. */\n dependenciesPriority?: string[]\n /** Keys of soft-dependencies needed for this feature. These are optional. Payload will attempt to load them before this feature, but doesn't throw an error if that's not possible. */\n dependenciesSoft?: string[]\n\n /**\n * This is being called during the payload sanitization process\n */\n feature:\n | ((props: {\n config: SanitizedConfig\n /** unSanitizedEditorConfig.features, but mapped */\n featureProviderMap: ServerFeatureProviderMap\n isRoot?: boolean\n parentIsLocalized: boolean\n // other resolved features, which have been loaded before this one. All features declared in 'dependencies' should be available here\n resolvedFeatures: ResolvedServerFeatureMap\n // unSanitized EditorConfig,\n unSanitizedEditorConfig: ServerEditorConfig\n }) =>\n | Promise<ServerFeature<ServerFeatureProps, ClientFeatureProps>>\n | ServerFeature<ServerFeatureProps, ClientFeatureProps>)\n | ServerFeature<ServerFeatureProps, ClientFeatureProps>\n key: string\n /** Props which were passed into your feature will have to be passed here. This will allow them to be used / read in other places of the code, e.g. wherever you can use useEditorConfigContext */\n serverFeatureProps: UnSanitizedServerFeatureProps\n}\n\nexport type AfterReadNodeHookArgs<T extends SerializedLexicalNode> = {\n /**\n * Only available in `afterRead` hooks.\n */\n currentDepth: number\n /**\n * Only available in `afterRead` hooks.\n */\n depth: number\n draft: boolean\n fallbackLocale: string\n /**\n * Only available in `afterRead` field hooks.\n */\n fieldPromises: Promise<void>[]\n /** Boolean to denote if this hook is running against finding one, or finding many within the afterRead hook. */\n findMany: boolean\n flattenLocales: boolean\n /**\n * The requested locale.\n */\n locale: string\n overrideAccess: boolean\n /**\n * Only available in `afterRead` field hooks.\n */\n populationPromises: Promise<void>[]\n /**\n * Only available in `afterRead` hooks.\n */\n showHiddenFields: boolean\n /**\n * Only available in `afterRead` hooks.\n */\n triggerAccessControl: boolean\n /**\n * Only available in `afterRead` hooks.\n */\n triggerHooks: boolean\n}\n\nexport type AfterChangeNodeHookArgs<T extends SerializedLexicalNode> = {\n /** A string relating to which operation the field type is currently executing within. Useful within beforeValidate, beforeChange, and afterChange hooks to differentiate between create and update operations. */\n operation: 'create' | 'delete' | 'read' | 'update'\n /** The value of the node before any changes. Not available in afterRead hooks */\n originalNode: T\n}\nexport type BeforeValidateNodeHookArgs<T extends SerializedLexicalNode> = {\n /** A string relating to which operation the field type is currently executing within. Useful within beforeValidate, beforeChange, and afterChange hooks to differentiate between create and update operations. */\n operation: 'create' | 'delete' | 'read' | 'update'\n /** The value of the node before any changes. Not available in afterRead hooks */\n originalNode: T\n overrideAccess: boolean\n}\n\nexport type BeforeChangeNodeHookArgs<T extends SerializedLexicalNode> = {\n /**\n * Only available in `beforeChange` hooks.\n */\n errors: { field: string; message: string }[]\n mergeLocaleActions: (() => Promise<void>)[]\n /** A string relating to which operation the field type is currently executing within. Useful within beforeValidate, beforeChange, and afterChange hooks to differentiate between create and update operations. */\n operation: 'create' | 'delete' | 'read' | 'update'\n /** The value of the node before any changes. Not available in afterRead hooks */\n originalNode: T\n /**\n * The original node with locales (not modified by any hooks).\n */\n originalNodeWithLocales?: T\n skipValidation: boolean\n}\n\nexport type BaseNodeHookArgs<T extends SerializedLexicalNode> = {\n context: RequestContext\n /** The value of the node. */\n node: T\n parentRichTextFieldPath: (number | string)[]\n parentRichTextFieldSchemaPath: string[]\n /** The payload request object. It is mocked for Local API operations. */\n req: PayloadRequest\n}\n\nexport type AfterReadNodeHook<T extends SerializedLexicalNode> = (\n args: AfterReadNodeHookArgs<T> & BaseNodeHookArgs<T>,\n) => Promise<T> | T\n\nexport type AfterChangeNodeHook<T extends SerializedLexicalNode> = (\n args: AfterChangeNodeHookArgs<T> & BaseNodeHookArgs<T>,\n) => Promise<T> | T\n\nexport type BeforeChangeNodeHook<T extends SerializedLexicalNode> = (\n args: BaseNodeHookArgs<T> & BeforeChangeNodeHookArgs<T>,\n) => Promise<T> | T\n\nexport type BeforeValidateNodeHook<T extends SerializedLexicalNode> = (\n args: BaseNodeHookArgs<T> & BeforeValidateNodeHookArgs<T>,\n) => Promise<T> | T\n\n// Define the node with hooks that use the node's exportJSON return type\nexport type NodeWithHooks<T extends LexicalNode = any> = {\n /**\n * Allows you to define how a node can be serialized into different formats. Currently, only supports html.\n * Markdown converters are defined in `markdownTransformers` and not here.\n */\n converters?: {\n html?: HTMLConverter<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>\n }\n /**\n * If a node includes sub-fields (e.g. block and link nodes), passing those subFields here will make payload\n * automatically populate, run hooks, and generate component import maps for them\n */\n getSubFields?: (args: {\n /**\n * Optional. If not provided, all possible sub-fields should be returned.\n */\n node?: ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>\n req?: PayloadRequest\n }) => Field[] | null\n /**\n * If a node includes sub-fields, the sub-fields data needs to be returned here, alongside `getSubFields` which returns their schema.\n */\n getSubFieldsData?: (args: {\n node: ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>\n req: PayloadRequest\n }) => JsonObject\n /**\n * Allows you to run population logic when a node's data was requested from graphQL.\n * While `getSubFields` and `getSubFieldsData` automatically handle populating sub-fields (since they run hooks on them), those are only populated in the Rest API.\n * This is because the Rest API hooks do not have access to the 'depth' property provided by graphQL.\n * In order for them to be populated correctly in graphQL, the population logic needs to be provided here.\n */\n graphQLPopulationPromises?: Array<\n PopulationPromise<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>\n >\n /**\n * Just like payload fields, you can provide hooks which are run for this specific node. These are called Node Hooks.\n */\n hooks?: {\n afterChange?: Array<AfterChangeNodeHook<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>>\n afterRead?: Array<AfterReadNodeHook<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>>\n beforeChange?: Array<BeforeChangeNodeHook<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>>\n beforeValidate?: Array<\n BeforeValidateNodeHook<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>\n >\n }\n /**\n * The actual lexical node needs to be provided here. This also supports [lexical node replacements](https://lexical.dev/docs/concepts/node-replacement).\n */\n node: Klass<T> | LexicalNodeReplacement\n /**\n * This allows you to provide node validations, which are run when your document is being validated, alongside other payload fields.\n * You can use it to throw a validation error for a specific node in case its data is incorrect.\n */\n validations?: Array<NodeValidation<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>>\n}\n\nexport type ServerFeature<ServerProps, ClientFeatureProps> = {\n ClientFeature?: PayloadComponent<never, BaseClientFeatureProps<ClientFeatureProps>>\n /**\n * This determines what props will be available on the Client.\n */\n clientFeatureProps?: ClientFeatureProps\n componentImports?: Config['admin']['importMap']['generators'][0] | PayloadComponent[]\n componentMap?:\n | ((args: { i18n: I18nClient; payload: Payload; props: ServerProps; schemaPath: string }) => {\n [key: string]: PayloadComponent\n })\n | {\n [key: string]: PayloadComponent\n }\n generatedTypes?: {\n modifyOutputSchema: ({\n collectionIDFieldTypes,\n config,\n currentSchema,\n field,\n interfaceNameDefinitions,\n isRequired,\n }: {\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config?: SanitizedConfig\n /**\n * Current schema which will be modified by this function.\n */\n currentSchema: JSONSchema4\n field: RichTextField<SerializedEditorState, AdapterProps>\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>\n isRequired: boolean\n }) => JSONSchema4\n }\n generateSchemaMap?: (args: {\n config: SanitizedConfig\n field: RichTextField\n i18n: I18nClient\n props: ServerProps\n schemaMap: Map<string, Field[]>\n schemaPath: string\n }) => Map<string, Field[]> | null\n hooks?: RichTextHooks\n /**\n * Here you can provide i18n translations for your feature. These will only be available on the server and client.\n *\n * Translations here are automatically scoped to `lexical.featureKey.yourKey`\n *\n * @Example\n * ```ts\n * i18n: {\n * en: {\n * label: 'Horizontal Rule',\n * },\n * de: {\n * label: 'Trennlinie',\n * },\n * }\n * ```\n * In order to access these translations, you would use `i18n.t('lexical:horizontalRule:label')`.\n */\n i18n?: Partial<GenericLanguages>\n markdownTransformers?: Transformer[]\n nodes?: Array<NodeWithHooks>\n\n /** Props which were passed into your feature will have to be passed here. This will allow them to be used / read in other places of the code, e.g. wherever you can use useEditorConfigContext */\n sanitizedServerFeatureProps?: ServerProps\n}\n\nexport type ResolvedServerFeature<ServerProps, ClientFeatureProps> = {\n order: number\n} & Required<\n Pick<\n FeatureProviderServer<ServerProps, ClientFeatureProps>,\n 'dependencies' | 'dependenciesPriority' | 'dependenciesSoft' | 'key'\n >\n> &\n ServerFeature<ServerProps, ClientFeatureProps>\n\nexport type ResolvedServerFeatureMap = Map<string, ResolvedServerFeature<any, any>>\n\nexport type ServerFeatureProviderMap = Map<string, FeatureProviderServer<any, any, any>>\n\nexport type SanitizedServerFeatures = {\n /** The node types mapped to their converters */\n converters: {\n html: HTMLConverter[]\n }\n /** The keys of all enabled features */\n enabledFeatures: string[]\n generatedTypes: {\n modifyOutputSchemas: Array<\n ({\n collectionIDFieldTypes,\n config,\n currentSchema,\n field,\n interfaceNameDefinitions,\n isRequired,\n }: {\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config?: SanitizedConfig\n /**\n * Current schema which will be modified by this function.\n */\n currentSchema: JSONSchema4\n field: RichTextField<SerializedEditorState, AdapterProps>\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>\n isRequired: boolean\n }) => JSONSchema4\n >\n }\n /** The node types mapped to their hooks */\n\n getSubFields?: Map<\n string,\n (args: { node: SerializedLexicalNode; req: PayloadRequest }) => Field[] | null\n >\n getSubFieldsData?: Map<\n string,\n (args: { node: SerializedLexicalNode; req: PayloadRequest }) => JsonObject\n >\n graphQLPopulationPromises: Map<string, Array<PopulationPromise>>\n hooks: RichTextHooks\n nodeHooks?: {\n afterChange?: Map<string, Array<AfterChangeNodeHook<SerializedLexicalNode>>>\n afterRead?: Map<string, Array<AfterReadNodeHook<SerializedLexicalNode>>>\n beforeChange?: Map<string, Array<BeforeChangeNodeHook<SerializedLexicalNode>>>\n beforeValidate?: Map<string, Array<BeforeValidateNodeHook<SerializedLexicalNode>>>\n } /** The node types mapped to their populationPromises */\n /** The node types mapped to their validations */\n validations: Map<string, Array<NodeValidation>>\n} & Required<Pick<ResolvedServerFeature<any, any>, 'i18n' | 'markdownTransformers' | 'nodes'>>\n"],"mappings":"AAgXA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"typesServer.js","names":[],"sources":["../../src/features/typesServer.ts"],"sourcesContent":["import type { Transformer } from '@lexical/markdown'\nimport type { GenericLanguages, I18nClient } from '@payloadcms/translations'\nimport type { JSONSchema4 } from 'json-schema'\nimport type {\n Klass,\n LexicalNode,\n LexicalNodeReplacement,\n SerializedEditorState,\n SerializedLexicalNode,\n} from 'lexical'\nimport type {\n Config,\n Field,\n JsonObject,\n Payload,\n PayloadComponent,\n PayloadRequest,\n ReplaceAny,\n RequestContext,\n RichTextField,\n RichTextHooks,\n SanitizedConfig,\n ValidateOptions,\n} from 'payload'\n\nimport type { ServerEditorConfig } from '../lexical/config/types.js'\nimport type { AdapterProps } from '../types.js'\nimport type { HTMLConverter } from './converters/html/converter/types.js'\nimport type { BaseClientFeatureProps } from './typesClient.js'\n\nexport type PopulationPromise<T extends SerializedLexicalNode = SerializedLexicalNode> = ({\n context,\n currentDepth,\n depth,\n draft,\n editorPopulationPromises,\n field,\n fieldPromises,\n findMany,\n flattenLocales,\n node,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n}: {\n context: RequestContext\n currentDepth: number\n depth: number\n draft: boolean\n /**\n * This maps all population promises to the node type\n */\n editorPopulationPromises: Map<string, Array<PopulationPromise>>\n field: RichTextField<SerializedEditorState, AdapterProps>\n /**\n * fieldPromises are used for things like field hooks. They will be awaited before awaiting populationPromises\n */\n fieldPromises: Promise<void>[]\n findMany: boolean\n flattenLocales: boolean\n node: T\n overrideAccess: boolean\n populationPromises: Promise<void>[]\n req: PayloadRequest\n showHiddenFields: boolean\n siblingDoc: JsonObject\n}) => void\n\nexport type NodeValidation<T extends SerializedLexicalNode = SerializedLexicalNode> = ({\n node,\n nodeValidations,\n validation,\n}: {\n node: T\n nodeValidations: Map<string, Array<NodeValidation>>\n validation: {\n options: ValidateOptions<unknown, unknown, RichTextField, SerializedEditorState>\n value: SerializedEditorState\n }\n}) => Promise<string | true> | string | true\n\nexport type FeatureProviderProviderServer<\n UnSanitizedServerFeatureProps = undefined,\n ServerFeatureProps = UnSanitizedServerFeatureProps,\n ClientFeatureProps = undefined,\n> = (\n props?: UnSanitizedServerFeatureProps,\n) => FeatureProviderServer<UnSanitizedServerFeatureProps, ServerFeatureProps, ClientFeatureProps>\n\nexport type FeatureProviderServer<\n UnSanitizedServerFeatureProps = undefined,\n ServerFeatureProps = UnSanitizedServerFeatureProps,\n ClientFeatureProps = undefined,\n> = {\n /** Keys of dependencies needed for this feature. These dependencies do not have to be loaded first, but they have to exist, otherwise an error will be thrown. */\n dependencies?: string[]\n /** Keys of priority dependencies needed for this feature. These dependencies have to be loaded first AND have to exist, otherwise an error will be thrown. They will be available in the `feature` property. */\n dependenciesPriority?: string[]\n /** Keys of soft-dependencies needed for this feature. These are optional. Payload will attempt to load them before this feature, but doesn't throw an error if that's not possible. */\n dependenciesSoft?: string[]\n\n /**\n * This is being called during the payload sanitization process\n */\n feature:\n | ((props: {\n config: SanitizedConfig\n /** unSanitizedEditorConfig.features, but mapped */\n featureProviderMap: ServerFeatureProviderMap\n isRoot?: boolean\n parentIsLocalized: boolean\n // other resolved features, which have been loaded before this one. All features declared in 'dependencies' should be available here\n resolvedFeatures: ResolvedServerFeatureMap\n // unSanitized EditorConfig,\n unSanitizedEditorConfig: ServerEditorConfig\n }) =>\n | Promise<ServerFeature<ServerFeatureProps, ClientFeatureProps>>\n | ServerFeature<ServerFeatureProps, ClientFeatureProps>)\n | ServerFeature<ServerFeatureProps, ClientFeatureProps>\n key: string\n /** Props which were passed into your feature will have to be passed here. This will allow them to be used / read in other places of the code, e.g. wherever you can use useEditorConfigContext */\n serverFeatureProps: UnSanitizedServerFeatureProps\n}\n\nexport type AfterReadNodeHookArgs<T extends SerializedLexicalNode> = {\n /**\n * Only available in `afterRead` hooks.\n */\n currentDepth: number\n /**\n * Only available in `afterRead` hooks.\n */\n depth: number\n draft: boolean\n fallbackLocale: string\n /**\n * Only available in `afterRead` field hooks.\n */\n fieldPromises: Promise<void>[]\n /** Boolean to denote if this hook is running against finding one, or finding many within the afterRead hook. */\n findMany: boolean\n flattenLocales: boolean\n /**\n * The requested locale.\n */\n locale: string\n overrideAccess: boolean\n /**\n * Only available in `afterRead` field hooks.\n */\n populationPromises: Promise<void>[]\n /**\n * Only available in `afterRead` hooks.\n */\n showHiddenFields: boolean\n /**\n * Only available in `afterRead` hooks.\n */\n triggerAccessControl: boolean\n /**\n * Only available in `afterRead` hooks.\n */\n triggerHooks: boolean\n}\n\nexport type AfterChangeNodeHookArgs<T extends SerializedLexicalNode> = {\n /** A string relating to which operation the field type is currently executing within. Useful within beforeValidate, beforeChange, and afterChange hooks to differentiate between create and update operations. */\n operation: 'create' | 'delete' | 'read' | 'update'\n /** The value of the node before any changes. Not available in afterRead hooks */\n originalNode: T\n}\nexport type BeforeValidateNodeHookArgs<T extends SerializedLexicalNode> = {\n /** A string relating to which operation the field type is currently executing within. Useful within beforeValidate, beforeChange, and afterChange hooks to differentiate between create and update operations. */\n operation: 'create' | 'delete' | 'read' | 'update'\n /** The value of the node before any changes. Not available in afterRead hooks */\n originalNode: T\n overrideAccess: boolean\n}\n\nexport type BeforeChangeNodeHookArgs<T extends SerializedLexicalNode> = {\n /**\n * Only available in `beforeChange` hooks.\n */\n errors: { field: string; message: string }[]\n mergeLocaleActions: (() => Promise<void>)[]\n /** A string relating to which operation the field type is currently executing within. Useful within beforeValidate, beforeChange, and afterChange hooks to differentiate between create and update operations. */\n operation: 'create' | 'delete' | 'read' | 'update'\n /** The value of the node before any changes. Not available in afterRead hooks */\n originalNode: T\n /**\n * The original node with locales (not modified by any hooks).\n */\n originalNodeWithLocales?: T\n skipValidation: boolean\n}\n\nexport type BaseNodeHookArgs<T extends SerializedLexicalNode> = {\n context: RequestContext\n /** The value of the node. */\n node: T\n parentRichTextFieldPath: (number | string)[]\n parentRichTextFieldSchemaPath: string[]\n /** The payload request object. It is mocked for Local API operations. */\n req: PayloadRequest\n}\n\nexport type AfterReadNodeHook<T extends SerializedLexicalNode> = (\n args: AfterReadNodeHookArgs<T> & BaseNodeHookArgs<T>,\n) => Promise<T> | T\n\nexport type AfterChangeNodeHook<T extends SerializedLexicalNode> = (\n args: AfterChangeNodeHookArgs<T> & BaseNodeHookArgs<T>,\n) => Promise<T> | T\n\nexport type BeforeChangeNodeHook<T extends SerializedLexicalNode> = (\n args: BaseNodeHookArgs<T> & BeforeChangeNodeHookArgs<T>,\n) => Promise<T> | T\n\nexport type BeforeValidateNodeHook<T extends SerializedLexicalNode> = (\n args: BaseNodeHookArgs<T> & BeforeValidateNodeHookArgs<T>,\n) => Promise<T> | T\n\n// Define the node with hooks that use the node's exportJSON return type\nexport type NodeWithHooks<T extends LexicalNode = any> = {\n /**\n * Allows you to define how a node can be serialized into different formats. Currently, only supports html.\n * Markdown converters are defined in `markdownTransformers` and not here.\n */\n converters?: {\n html?: HTMLConverter<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>\n }\n /**\n * If a node includes sub-fields (e.g. block and link nodes), passing those subFields here will make payload\n * automatically populate, run hooks, and generate component import maps for them\n */\n getSubFields?: (args: {\n /**\n * Optional. If not provided, all possible sub-fields should be returned.\n */\n node?: ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>\n req?: PayloadRequest\n }) => Field[] | null\n /**\n * If a node includes sub-fields, the sub-fields data needs to be returned here, alongside `getSubFields` which returns their schema.\n */\n getSubFieldsData?: (args: {\n node: ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>\n req: PayloadRequest\n }) => JsonObject\n /**\n * Allows you to run population logic when a node's data was requested from graphQL.\n * While `getSubFields` and `getSubFieldsData` automatically handle populating sub-fields (since they run hooks on them), those are only populated in the Rest API.\n * This is because the Rest API hooks do not have access to the 'depth' property provided by graphQL.\n * In order for them to be populated correctly in graphQL, the population logic needs to be provided here.\n */\n graphQLPopulationPromises?: Array<\n PopulationPromise<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>\n >\n /**\n * Just like payload fields, you can provide hooks which are run for this specific node. These are called Node Hooks.\n */\n hooks?: {\n afterChange?: Array<AfterChangeNodeHook<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>>\n afterRead?: Array<AfterReadNodeHook<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>>\n beforeChange?: Array<BeforeChangeNodeHook<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>>\n beforeValidate?: Array<\n BeforeValidateNodeHook<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>\n >\n }\n /**\n * The actual lexical node needs to be provided here. This also supports [lexical node replacements](https://lexical.dev/docs/concepts/node-replacement).\n */\n node: Klass<T> | LexicalNodeReplacement\n /**\n * This allows you to provide node validations, which are run when your document is being validated, alongside other payload fields.\n * You can use it to throw a validation error for a specific node in case its data is incorrect.\n */\n validations?: Array<NodeValidation<ReturnType<ReplaceAny<T, LexicalNode>['exportJSON']>>>\n}\n\nexport type ServerFeature<ServerProps, ClientFeatureProps> = {\n ClientFeature?: PayloadComponent<never, BaseClientFeatureProps<ClientFeatureProps>>\n /**\n * This determines what props will be available on the Client.\n */\n clientFeatureProps?: ClientFeatureProps\n // @ts-expect-error - TODO: fix this\n componentImports?: Config['admin']['importMap']['generators'][0] | PayloadComponent[]\n componentMap?:\n | ((args: { i18n: I18nClient; payload: Payload; props: ServerProps; schemaPath: string }) => {\n [key: string]: PayloadComponent\n })\n | {\n [key: string]: PayloadComponent\n }\n generatedTypes?: {\n modifyOutputSchema: ({\n collectionIDFieldTypes,\n config,\n currentSchema,\n field,\n interfaceNameDefinitions,\n isRequired,\n }: {\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config?: SanitizedConfig\n /**\n * Current schema which will be modified by this function.\n */\n currentSchema: JSONSchema4\n field: RichTextField<SerializedEditorState, AdapterProps>\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>\n isRequired: boolean\n }) => JSONSchema4\n }\n generateSchemaMap?: (args: {\n config: SanitizedConfig\n field: RichTextField\n i18n: I18nClient\n props: ServerProps\n schemaMap: Map<string, Field[]>\n schemaPath: string\n }) => Map<string, Field[]> | null\n hooks?: RichTextHooks\n /**\n * Here you can provide i18n translations for your feature. These will only be available on the server and client.\n *\n * Translations here are automatically scoped to `lexical.featureKey.yourKey`\n *\n * @Example\n * ```ts\n * i18n: {\n * en: {\n * label: 'Horizontal Rule',\n * },\n * de: {\n * label: 'Trennlinie',\n * },\n * }\n * ```\n * In order to access these translations, you would use `i18n.t('lexical:horizontalRule:label')`.\n */\n i18n?: Partial<GenericLanguages>\n markdownTransformers?: Transformer[]\n nodes?: Array<NodeWithHooks>\n\n /** Props which were passed into your feature will have to be passed here. This will allow them to be used / read in other places of the code, e.g. wherever you can use useEditorConfigContext */\n sanitizedServerFeatureProps?: ServerProps\n}\n\nexport type ResolvedServerFeature<ServerProps, ClientFeatureProps> = {\n order: number\n} & Required<\n Pick<\n FeatureProviderServer<ServerProps, ClientFeatureProps>,\n 'dependencies' | 'dependenciesPriority' | 'dependenciesSoft' | 'key'\n >\n> &\n ServerFeature<ServerProps, ClientFeatureProps>\n\nexport type ResolvedServerFeatureMap = Map<string, ResolvedServerFeature<any, any>>\n\nexport type ServerFeatureProviderMap = Map<string, FeatureProviderServer<any, any, any>>\n\nexport type SanitizedServerFeatures = {\n /** The node types mapped to their converters */\n converters: {\n html: HTMLConverter[]\n }\n /** The keys of all enabled features */\n enabledFeatures: string[]\n generatedTypes: {\n modifyOutputSchemas: Array<\n ({\n collectionIDFieldTypes,\n config,\n currentSchema,\n field,\n interfaceNameDefinitions,\n isRequired,\n }: {\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config?: SanitizedConfig\n /**\n * Current schema which will be modified by this function.\n */\n currentSchema: JSONSchema4\n field: RichTextField<SerializedEditorState, AdapterProps>\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>\n isRequired: boolean\n }) => JSONSchema4\n >\n }\n /** The node types mapped to their hooks */\n\n getSubFields?: Map<\n string,\n (args: { node: SerializedLexicalNode; req: PayloadRequest }) => Field[] | null\n >\n getSubFieldsData?: Map<\n string,\n (args: { node: SerializedLexicalNode; req: PayloadRequest }) => JsonObject\n >\n graphQLPopulationPromises: Map<string, Array<PopulationPromise>>\n hooks: RichTextHooks\n nodeHooks?: {\n afterChange?: Map<string, Array<AfterChangeNodeHook<SerializedLexicalNode>>>\n afterRead?: Map<string, Array<AfterReadNodeHook<SerializedLexicalNode>>>\n beforeChange?: Map<string, Array<BeforeChangeNodeHook<SerializedLexicalNode>>>\n beforeValidate?: Map<string, Array<BeforeValidateNodeHook<SerializedLexicalNode>>>\n } /** The node types mapped to their populationPromises */\n /** The node types mapped to their validations */\n validations: Map<string, Array<NodeValidation>>\n} & Required<Pick<ResolvedServerFeature<any, any>, 'i18n' | 'markdownTransformers' | 'nodes'>>\n"],"mappings":"AAiXA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/component/index.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAsE,MAAM,OAAO,CAAA;AAG1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AASlE,OAAO,cAAc,CAAA;AAQrB,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/component/index.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAsE,MAAM,OAAO,CAAA;AAG1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AASlE,OAAO,cAAc,CAAA;AAQrB,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAsPD,eAAO,MAAM,eAAe,UAAW,YAAY,KAAG,KAAK,CAAC,SAM3D,CAAA"}
|
|
@@ -80,7 +80,7 @@ const Component = props => {
|
|
|
80
80
|
const thumbnailSRC = data?.thumbnailURL || data?.url;
|
|
81
81
|
const removeUpload = useCallback(() => {
|
|
82
82
|
editor.update(() => {
|
|
83
|
-
$getNodeByKey(nodeKey)
|
|
83
|
+
$getNodeByKey(nodeKey)?.remove();
|
|
84
84
|
});
|
|
85
85
|
}, [editor, nodeKey]);
|
|
86
86
|
const updateUpload = useCallback(data_0 => {
|
|
@@ -92,16 +92,19 @@ const Component = props => {
|
|
|
92
92
|
closeDrawer();
|
|
93
93
|
}, [setParams, cacheBust, closeDrawer]);
|
|
94
94
|
const $onDelete = useCallback(event => {
|
|
95
|
-
|
|
95
|
+
const deleteSelection = $getSelection();
|
|
96
|
+
if (isSelected && $isNodeSelection(deleteSelection)) {
|
|
96
97
|
event.preventDefault();
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
editor.update(() => {
|
|
99
|
+
deleteSelection.getNodes().forEach(node => {
|
|
100
|
+
if ($isUploadNode(node)) {
|
|
101
|
+
node.remove();
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
});
|
|
102
105
|
}
|
|
103
106
|
return false;
|
|
104
|
-
}, [
|
|
107
|
+
}, [editor, isSelected]);
|
|
105
108
|
useEffect(() => {
|
|
106
109
|
return mergeRegister(editor.registerCommand(CLICK_COMMAND, event_0 => {
|
|
107
110
|
// Check if uploadRef.target or anything WITHIN uploadRef.target was clicked
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","DrawerToggler","File","formatDrawerSlug","useConfig","useDocumentDrawer","useEditDepth","useModal","usePayloadAPI","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","React","useCallback","useEffect","useId","useReducer","useRef","useState","useEditorConfigContext","FieldsDrawer","EnabledRelationshipsCondition","INSERT_UPLOAD_WITH_DRAWER_COMMAND","$isUploadNode","baseClass","initialParams","depth","Component","props","data","fields","relationTo","value","nodeKey","Error","config","collections","routes","api","serverURL","uploadRef","closeModal","uuid","editDepth","editor","isSelected","setSelected","clearSelection","editorConfig","field","i18n","t","cacheBust","dispatchCacheBust","state","relatedCollection","find","coll","slug","componentID","drawerSlug","DocumentDrawer","DocumentDrawerToggler","closeDrawer","id","collectionSlug","setParams","thumbnailSRC","thumbnailURL","url","removeUpload","update","remove","updateUpload","$onDelete","event","preventDefault","node","registerCommand","target","current","contains","shiftKey","hasExtraFields","resolvedFeatureMap","get","sanitizedClientFeatureProps","onExtraFieldsDrawerSubmit","_","uploadNode","newData","getData","setData","_jsxs","className","filter","Boolean","join","contentEditable","ref","_jsx","alt","filename","src","labels","singular","isEditable","disabled","admin","readOnly","buttonStyle","el","icon","onClick","e","round","tooltip","dispatchCommand","replace","onSave","drawerTitle","label","featureKey","handleDrawerSubmit","schemaPathSuffix","UploadComponent","uploads"],"sources":["../../../../../src/features/upload/client/component/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Data } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n DrawerToggler,\n File,\n formatDrawerSlug,\n useConfig,\n useDocumentDrawer,\n useEditDepth,\n useModal,\n usePayloadAPI,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useId, useReducer, useRef, useState } from 'react'\n\nimport type { BaseClientFeatureProps } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\nimport type { UploadNode } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport { $isUploadNode } from '../nodes/UploadNode.js'\nimport './index.scss'\n\nconst baseClass = 'lexical-upload'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n data: UploadData\n nodeKey: string\n}\n\nconst Component: React.FC<ElementProps> = (props) => {\n const {\n data: { fields, relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.',\n )\n }\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { closeModal } = useModal()\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n const [editor] = useLexicalComposerContext()\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const { editorConfig, field } = useEditorConfigContext()\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection] = useState<ClientCollectionConfig>(() =>\n collections.find((coll) => coll.slug === relationTo),\n )\n\n const componentID = useId()\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-upload-drawer-` + uuid + componentID, // There can be multiple upload components, each with their own drawer, in one single editor => separate them by componentID\n depth: editDepth,\n })\n\n const [DocumentDrawer, DocumentDrawerToggler, { closeDrawer }] = useDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n // Get the referenced document\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const thumbnailSRC = data?.thumbnailURL || data?.url\n\n const removeUpload = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey).remove()\n })\n }, [editor, nodeKey])\n\n const updateUpload = useCallback(\n (data: Data) => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n dispatchCacheBust()\n closeDrawer()\n },\n [setParams, cacheBust, closeDrawer],\n )\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n if (isSelected && $isNodeSelection($getSelection())) {\n event.preventDefault()\n const node = $getNodeByKey(nodeKey)\n if ($isUploadNode(node)) {\n node.remove()\n return true\n }\n }\n return false\n },\n [isSelected, nodeKey],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(\n CLICK_COMMAND,\n (event: MouseEvent) => {\n // Check if uploadRef.target or anything WITHIN uploadRef.target was clicked\n if (\n event.target === uploadRef.current ||\n uploadRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected])\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as BaseClientFeatureProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n const onExtraFieldsDrawerSubmit = useCallback(\n (_, data) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: null | UploadNode = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n\n closeModal(drawerSlug)\n },\n [closeModal, editor, drawerSlug, nodeKey],\n )\n\n return (\n <div\n className={[baseClass, isSelected && `${baseClass}--selected`].filter(Boolean).join(' ')}\n contentEditable={false}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__topRow`}>\n {/* TODO: migrate to use @payloadcms/ui/elements/Thumbnail component */}\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC ? (\n <img\n alt={data?.filename}\n data-lexical-upload-id={value}\n data-lexical-upload-relation-to={relationTo}\n src={thumbnailSRC}\n />\n ) : (\n <File />\n )}\n </div>\n <div className={`${baseClass}__topRowRightPanel`}>\n <div className={`${baseClass}__collectionLabel`}>\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </div>\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n {hasExtraFields ? (\n <DrawerToggler\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={field?.admin?.readOnly}\n slug={drawerSlug}\n >\n <Button\n buttonStyle=\"icon-label\"\n el=\"div\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n }}\n round\n tooltip={t('fields:editRelationship')}\n />\n </DrawerToggler>\n ) : null}\n\n <Button\n buttonStyle=\"icon-label\"\n disabled={field?.admin?.readOnly}\n el=\"div\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n tooltip={t('fields:swapUpload')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.admin?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n tooltip={t('fields:removeUpload')}\n />\n </div>\n )}\n </div>\n </div>\n <div className={`${baseClass}__bottomRow`}>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <strong>{data?.filename}</strong>\n </DocumentDrawerToggler>\n </div>\n </div>\n {value ? <DocumentDrawer onSave={updateUpload} /> : null}\n {hasExtraFields ? (\n <FieldsDrawer\n data={fields}\n drawerSlug={drawerSlug}\n drawerTitle={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n featureKey=\"upload\"\n handleDrawerSubmit={onExtraFieldsDrawerSubmit}\n schemaPathSuffix={relatedCollection.slug}\n />\n ) : null}\n </div>\n )\n}\n\nexport const UploadComponent = (props: ElementProps): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <Component {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","DrawerToggler","File","formatDrawerSlug","useConfig","useDocumentDrawer","useEditDepth","useModal","usePayloadAPI","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","React","useCallback","useEffect","useId","useReducer","useRef","useState","useEditorConfigContext","FieldsDrawer","EnabledRelationshipsCondition","INSERT_UPLOAD_WITH_DRAWER_COMMAND","$isUploadNode","baseClass","initialParams","depth","Component","props","data","fields","relationTo","value","nodeKey","Error","config","collections","routes","api","serverURL","uploadRef","closeModal","uuid","editDepth","editor","isSelected","setSelected","clearSelection","editorConfig","field","i18n","t","cacheBust","dispatchCacheBust","state","relatedCollection","find","coll","slug","componentID","drawerSlug","DocumentDrawer","DocumentDrawerToggler","closeDrawer","id","collectionSlug","setParams","thumbnailSRC","thumbnailURL","url","removeUpload","update","remove","updateUpload","$onDelete","event","deleteSelection","preventDefault","getNodes","forEach","node","registerCommand","target","current","contains","shiftKey","hasExtraFields","resolvedFeatureMap","get","sanitizedClientFeatureProps","onExtraFieldsDrawerSubmit","_","uploadNode","newData","getData","setData","_jsxs","className","filter","Boolean","join","contentEditable","ref","_jsx","alt","filename","src","labels","singular","isEditable","disabled","admin","readOnly","buttonStyle","el","icon","onClick","e","round","tooltip","dispatchCommand","replace","onSave","drawerTitle","label","featureKey","handleDrawerSubmit","schemaPathSuffix","UploadComponent","uploads"],"sources":["../../../../../src/features/upload/client/component/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Data } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n DrawerToggler,\n File,\n formatDrawerSlug,\n useConfig,\n useDocumentDrawer,\n useEditDepth,\n useModal,\n usePayloadAPI,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useId, useReducer, useRef, useState } from 'react'\n\nimport type { BaseClientFeatureProps } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\nimport type { UploadNode } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport { $isUploadNode } from '../nodes/UploadNode.js'\nimport './index.scss'\n\nconst baseClass = 'lexical-upload'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n data: UploadData\n nodeKey: string\n}\n\nconst Component: React.FC<ElementProps> = (props) => {\n const {\n data: { fields, relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.',\n )\n }\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { closeModal } = useModal()\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n const [editor] = useLexicalComposerContext()\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const { editorConfig, field } = useEditorConfigContext()\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection] = useState<ClientCollectionConfig>(\n () => collections.find((coll) => coll.slug === relationTo)!,\n )\n\n const componentID = useId()\n\n const drawerSlug = formatDrawerSlug({\n slug: `lexical-upload-drawer-` + uuid + componentID, // There can be multiple upload components, each with their own drawer, in one single editor => separate them by componentID\n depth: editDepth,\n })\n\n const [DocumentDrawer, DocumentDrawerToggler, { closeDrawer }] = useDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n // Get the referenced document\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const thumbnailSRC = data?.thumbnailURL || data?.url\n\n const removeUpload = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const updateUpload = useCallback(\n (data: Data) => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n dispatchCacheBust()\n closeDrawer()\n },\n [setParams, cacheBust, closeDrawer],\n )\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n const deleteSelection = $getSelection()\n if (isSelected && $isNodeSelection(deleteSelection)) {\n event.preventDefault()\n editor.update(() => {\n deleteSelection.getNodes().forEach((node) => {\n if ($isUploadNode(node)) {\n node.remove()\n }\n })\n })\n }\n return false\n },\n [editor, isSelected],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(\n CLICK_COMMAND,\n (event: MouseEvent) => {\n // Check if uploadRef.target or anything WITHIN uploadRef.target was clicked\n if (\n event.target === uploadRef.current ||\n uploadRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected])\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as BaseClientFeatureProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n const onExtraFieldsDrawerSubmit = useCallback(\n (_, data) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: null | UploadNode = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n\n closeModal(drawerSlug)\n },\n [closeModal, editor, drawerSlug, nodeKey],\n )\n\n return (\n <div\n className={[baseClass, isSelected && `${baseClass}--selected`].filter(Boolean).join(' ')}\n contentEditable={false}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__topRow`}>\n {/* TODO: migrate to use @payloadcms/ui/elements/Thumbnail component */}\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC ? (\n <img\n alt={data?.filename}\n data-lexical-upload-id={value}\n data-lexical-upload-relation-to={relationTo}\n src={thumbnailSRC}\n />\n ) : (\n <File />\n )}\n </div>\n <div className={`${baseClass}__topRowRightPanel`}>\n <div className={`${baseClass}__collectionLabel`}>\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </div>\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n {hasExtraFields ? (\n <DrawerToggler\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={field?.admin?.readOnly}\n slug={drawerSlug}\n >\n <Button\n buttonStyle=\"icon-label\"\n el=\"div\"\n icon=\"edit\"\n onClick={(e) => {\n e.preventDefault()\n }}\n round\n tooltip={t('fields:editRelationship')}\n />\n </DrawerToggler>\n ) : null}\n\n <Button\n buttonStyle=\"icon-label\"\n disabled={field?.admin?.readOnly}\n el=\"div\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n tooltip={t('fields:swapUpload')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.admin?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n tooltip={t('fields:removeUpload')}\n />\n </div>\n )}\n </div>\n </div>\n <div className={`${baseClass}__bottomRow`}>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <strong>{data?.filename}</strong>\n </DocumentDrawerToggler>\n </div>\n </div>\n {value ? <DocumentDrawer onSave={updateUpload} /> : null}\n {hasExtraFields ? (\n <FieldsDrawer\n data={fields}\n drawerSlug={drawerSlug}\n drawerTitle={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n featureKey=\"upload\"\n handleDrawerSubmit={onExtraFieldsDrawerSubmit}\n schemaPathSuffix={relatedCollection.slug}\n />\n ) : null}\n </div>\n )\n}\n\nexport const UploadComponent = (props: ElementProps): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <Component {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/drawer/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA2C,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/drawer/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA2C,MAAM,OAAO,CAAA;AA4C/D,KAAK,KAAK,GAAG;IACX,sBAAsB,EAAE,MAAM,EAAE,CAAA;CACjC,CAAA;AA0CD,eAAO,MAAM,YAAY,UAAW,KAAK,KAAG,KAAK,CAAC,SAMjD,CAAA"}
|
|
@@ -18,6 +18,7 @@ const insertUpload = ({
|
|
|
18
18
|
}) => {
|
|
19
19
|
if (!replaceNodeKey) {
|
|
20
20
|
editor.dispatchCommand(INSERT_UPLOAD_COMMAND, {
|
|
21
|
+
// @ts-expect-error - TODO: fix this
|
|
21
22
|
fields: null,
|
|
22
23
|
relationTo,
|
|
23
24
|
value
|
|
@@ -28,6 +29,7 @@ const insertUpload = ({
|
|
|
28
29
|
if (node) {
|
|
29
30
|
node.replace($createUploadNode({
|
|
30
31
|
data: {
|
|
32
|
+
// @ts-expect-error - TODO: fix this
|
|
31
33
|
fields: null,
|
|
32
34
|
relationTo,
|
|
33
35
|
value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useListDrawer","$getNodeByKey","COMMAND_PRIORITY_EDITOR","React","useCallback","useEffect","useState","EnabledRelationshipsCondition","$createUploadNode","INSERT_UPLOAD_COMMAND","INSERT_UPLOAD_WITH_DRAWER_COMMAND","insertUpload","editor","relationTo","replaceNodeKey","value","dispatchCommand","fields","update","node","replace","data","UploadDrawerComponent","t0","$","enabledCollectionSlugs","setReplaceNodeKey","t1","collectionSlugs","uploads","ListDrawer","ListDrawerToggler","t2","closeDrawer","openDrawer","t3","t4","registerCommand","payload","nodeKey","t5","t6","collectionSlug","docID","onSelect","_jsx","UploadDrawer","props"],"sources":["../../../../../src/features/upload/client/drawer/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useListDrawer } from '@payloadcms/ui'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { $createUploadNode } from '../nodes/UploadNode.js'\nimport { INSERT_UPLOAD_COMMAND } from '../plugin/index.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from './commands.js'\n\nconst insertUpload = ({\n editor,\n relationTo,\n replaceNodeKey,\n value,\n}: {\n editor: LexicalEditor\n relationTo: string\n replaceNodeKey: null | string\n value: number | string\n}) => {\n if (!replaceNodeKey) {\n editor.dispatchCommand(INSERT_UPLOAD_COMMAND, {\n fields: null,\n relationTo,\n value,\n })\n } else {\n editor.update(() => {\n const node = $getNodeByKey(replaceNodeKey)\n if (node) {\n node.replace(\n $createUploadNode({\n data: {\n fields: null,\n relationTo,\n value,\n },\n }),\n )\n }\n })\n }\n}\n\ntype Props = {\n enabledCollectionSlugs: string[]\n}\n\nconst UploadDrawerComponent: React.FC<Props> = ({ enabledCollectionSlugs }) => {\n const [editor] = useLexicalComposerContext()\n\n const [replaceNodeKey, setReplaceNodeKey] = useState<null | string>(null)\n\n const [ListDrawer, ListDrawerToggler, { closeDrawer, openDrawer }] = useListDrawer({\n collectionSlugs: enabledCollectionSlugs,\n uploads: true,\n })\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_UPLOAD_WITH_DRAWER_COMMAND,\n (payload) => {\n setReplaceNodeKey(payload?.replace ? payload?.replace.nodeKey : null)\n openDrawer()\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor, openDrawer])\n\n const onSelect = useCallback(\n ({ collectionSlug, docID }) => {\n insertUpload({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: docID,\n })\n closeDrawer()\n },\n [editor, closeDrawer, replaceNodeKey],\n )\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nexport const UploadDrawer = (props: Props): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <UploadDrawerComponent {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,aAAa,QAAQ;AAC9B,SAASC,aAAa,EAAEC,uBAAuB,QAAQ;AACvD,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAExD,SAASC,6BAA6B,QAAQ;AAC9C,SAASC,iBAAiB,QAAQ;AAClC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,iCAAiC,QAAQ;AAElD,MAAMC,YAAA,GAAeA,CAAC;EACpBC,MAAM;EACNC,UAAU;EACVC,cAAc;EACdC;AAAK,CAMN;EACC,IAAI,CAACD,cAAA,EAAgB;IACnBF,MAAA,CAAOI,eAAe,CAACP,qBAAA,EAAuB;
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useListDrawer","$getNodeByKey","COMMAND_PRIORITY_EDITOR","React","useCallback","useEffect","useState","EnabledRelationshipsCondition","$createUploadNode","INSERT_UPLOAD_COMMAND","INSERT_UPLOAD_WITH_DRAWER_COMMAND","insertUpload","editor","relationTo","replaceNodeKey","value","dispatchCommand","fields","update","node","replace","data","UploadDrawerComponent","t0","$","enabledCollectionSlugs","setReplaceNodeKey","t1","collectionSlugs","uploads","ListDrawer","ListDrawerToggler","t2","closeDrawer","openDrawer","t3","t4","registerCommand","payload","nodeKey","t5","t6","collectionSlug","docID","onSelect","_jsx","UploadDrawer","props"],"sources":["../../../../../src/features/upload/client/drawer/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useListDrawer } from '@payloadcms/ui'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { $createUploadNode } from '../nodes/UploadNode.js'\nimport { INSERT_UPLOAD_COMMAND } from '../plugin/index.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from './commands.js'\n\nconst insertUpload = ({\n editor,\n relationTo,\n replaceNodeKey,\n value,\n}: {\n editor: LexicalEditor\n relationTo: string\n replaceNodeKey: null | string\n value: number | string\n}) => {\n if (!replaceNodeKey) {\n editor.dispatchCommand(INSERT_UPLOAD_COMMAND, {\n // @ts-expect-error - TODO: fix this\n fields: null,\n relationTo,\n value,\n })\n } else {\n editor.update(() => {\n const node = $getNodeByKey(replaceNodeKey)\n if (node) {\n node.replace(\n $createUploadNode({\n data: {\n // @ts-expect-error - TODO: fix this\n fields: null,\n relationTo,\n value,\n },\n }),\n )\n }\n })\n }\n}\n\ntype Props = {\n enabledCollectionSlugs: string[]\n}\n\nconst UploadDrawerComponent: React.FC<Props> = ({ enabledCollectionSlugs }) => {\n const [editor] = useLexicalComposerContext()\n\n const [replaceNodeKey, setReplaceNodeKey] = useState<null | string>(null)\n\n const [ListDrawer, ListDrawerToggler, { closeDrawer, openDrawer }] = useListDrawer({\n collectionSlugs: enabledCollectionSlugs,\n uploads: true,\n })\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_UPLOAD_WITH_DRAWER_COMMAND,\n (payload) => {\n setReplaceNodeKey(payload?.replace ? payload?.replace.nodeKey : null)\n openDrawer()\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor, openDrawer])\n\n const onSelect = useCallback(\n ({ collectionSlug, docID }) => {\n insertUpload({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: docID,\n })\n closeDrawer()\n },\n [editor, closeDrawer, replaceNodeKey],\n )\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nexport const UploadDrawer = (props: Props): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <UploadDrawerComponent {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,aAAa,QAAQ;AAC9B,SAASC,aAAa,EAAEC,uBAAuB,QAAQ;AACvD,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAExD,SAASC,6BAA6B,QAAQ;AAC9C,SAASC,iBAAiB,QAAQ;AAClC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,iCAAiC,QAAQ;AAElD,MAAMC,YAAA,GAAeA,CAAC;EACpBC,MAAM;EACNC,UAAU;EACVC,cAAc;EACdC;AAAK,CAMN;EACC,IAAI,CAACD,cAAA,EAAgB;IACnBF,MAAA,CAAOI,eAAe,CAACP,qBAAA,EAAuB;MAC5C;MACAQ,MAAA,EAAQ;MACRJ,UAAA;MACAE;IACF;EACF,OAAO;IACLH,MAAA,CAAOM,MAAM,CAAC;MACZ,MAAMC,IAAA,GAAOlB,aAAA,CAAca,cAAA;MAC3B,IAAIK,IAAA,EAAM;QACRA,IAAA,CAAKC,OAAO,CACVZ,iBAAA,CAAkB;UAChBa,IAAA,EAAM;YACJ;YACAJ,MAAA,EAAQ;YACRJ,UAAA;YACAE;UACF;QACF;MAEJ;IACF;EACF;AACF;AAMA,MAAMO,qBAAA,GAAyCC,EAAA;EAAA,MAAAC,CAAA,GAAA1B,EAAA;EAAC;IAAA2B;EAAA,IAAAF,EAA0B;EACxE,OAAAX,MAAA,IAAiBb,yBAAA;EAEjB,OAAAe,cAAA,EAAAY,iBAAA,IAA4CpB,QAAA,KAAwB;EAAA,IAAAqB,EAAA;EAAA,IAAAH,CAAA,QAAAC,sBAAA;IAEeE,EAAA;MAAAC,eAAA,EAChEH,sBAAA;MAAAI,OAAA;IAAA;IAEnBL,CAAA,MAAAC,sBAAA;IAAAD,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAHA,OAAAM,UAAA,EAAAC,iBAAA,EAAAC,EAAA,IAAqEhC,aAAA,CAAc2B,EAGnF;EAHsC;IAAAM,WAAA;IAAAC;EAAA,IAAAF,EAA2B;EAAA,IAAAG,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAZ,CAAA,QAAAZ,MAAA,IAAAY,CAAA,QAAAU,UAAA;IAKvDC,EAAA,GAAAA,CAAA,KACDvB,MAAA,CAAAyB,eAAA,CAAA3B,iCAAA,EAAA4B,OAAA;MAKHZ,iBAAA,CAAkBY,OAAA,EAAAlB,OAAA,GAAmBkB,OAAA,EAAAlB,OAAA,CAAAmB,OAAA,OAA2B;MAChEL,UAAA;MAAA;IAAA,GAAAhC,uBAGF;IAEDkC,EAAA,IAACxB,MAAA,EAAQsB,UAAA;IAAWV,CAAA,MAAAZ,MAAA;IAAAY,CAAA,MAAAU,UAAA;IAAAV,CAAA,MAAAW,EAAA;IAAAX,CAAA,MAAAY,EAAA;EAAA;IAAAD,EAAA,GAAAX,CAAA;IAAAY,EAAA,GAAAZ,CAAA;EAAA;EAZvBnB,SAAA,CAAU8B,EAYV,EAAGC,EAAoB;EAAA,IAAAI,EAAA;EAAA,IAAAhB,CAAA,QAAAZ,MAAA,IAAAY,CAAA,QAAAV,cAAA,IAAAU,CAAA,QAAAS,WAAA;IAGrBO,EAAA,GAAAC,EAAA;MAAC;QAAAC,cAAA;QAAAC;MAAA,IAAAF,EAAyB;MACxB9B,YAAA;QAAAC,MAAA;QAAAC,UAAA,EAEc6B,cAAA;QAAA5B,cAAA;QAAAC,KAAA,EAEL4B;MAAA,CACT;MACAV,WAAA;IAAA;IACFT,CAAA,MAAAZ,MAAA;IAAAY,CAAA,MAAAV,cAAA;IAAAU,CAAA,MAAAS,WAAA;IAAAT,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EATF,MAAAoB,QAAA,GAAiBJ,EAUsB;EAAA,IAAAC,EAAA;EAAA,IAAAjB,CAAA,SAAAoB,QAAA,IAAApB,CAAA,SAAAM,UAAA;IAGhCW,EAAA,GAAAI,IAAA,CAACf,UAAA;MAAAc;IAAA,C;;;;;;;SAADH,E;CACT;AAEA,OAAO,MAAMK,YAAA,GAAgBC,KAAA;EAC3B,oBACEF,IAAA,CAACtC,6BAAA;IAA+B,GAAGwC,KAAK;IAAElB,OAAO;cAC/C,aAAAgB,IAAA,CAACvB,qBAAA;MAAuB,GAAGyB;;;AAGjC","ignoreList":[]}
|
|
@@ -43,7 +43,7 @@ export const UploadPlugin = t0 => {
|
|
|
43
43
|
focus
|
|
44
44
|
} = selection;
|
|
45
45
|
const focusNode = focus.getNode();
|
|
46
|
-
if ($isParagraphNode(focusNode) && focusNode.getTextContentSize() === 0 && focusNode.
|
|
46
|
+
if ($isParagraphNode(focusNode) && focusNode.getTextContentSize() === 0 && focusNode.getParentOrThrow().getChildren().filter(node => $isParagraphNode(node)).length > 1) {
|
|
47
47
|
focusNode.remove();
|
|
48
48
|
}
|
|
49
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$insertNodeToNearestRoot","mergeRegister","useConfig","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","createCommand","React","useEffect","UploadDrawer","$createUploadNode","UploadNode","INSERT_UPLOAD_COMMAND","UploadPlugin","t0","$","editor","config","t1","collections","t2","t3","hasNodes","Error","registerCommand","payload","update","selection","uploadNode","data","id","fields","relationTo","value","focus","focusNode","getNode","getTextContentSize","
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$insertNodeToNearestRoot","mergeRegister","useConfig","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","createCommand","React","useEffect","UploadDrawer","$createUploadNode","UploadNode","INSERT_UPLOAD_COMMAND","UploadPlugin","t0","$","editor","config","t1","collections","t2","t3","hasNodes","Error","registerCommand","payload","update","selection","uploadNode","data","id","fields","relationTo","value","focus","focusNode","getNode","getTextContentSize","getParentOrThrow","getChildren","filter","node","length","remove","t4","_jsx","enabledCollectionSlugs","map","_temp","slug"],"sources":["../../../../../src/features/upload/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useConfig } from '@payloadcms/ui'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponentWithAnchor } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\n\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $createUploadNode, UploadNode } from '../nodes/UploadNode.js'\n\nexport type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>\n\nexport const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload> =\n createCommand('INSERT_UPLOAD_COMMAND')\n\nexport const UploadPlugin: PluginComponentWithAnchor<UploadFeaturePropsClient> = ({\n clientProps,\n}) => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertUploadPayload>(\n INSERT_UPLOAD_COMMAND,\n (payload: InsertUploadPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const uploadNode = $createUploadNode({\n data: {\n id: payload.id,\n fields: payload.fields,\n relationTo: payload.relationTo,\n value: payload.value,\n },\n })\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParentOrThrow()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <UploadDrawer enabledCollectionSlugs={collections.map(({ slug }) => slug)} />\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,wBAAwB,EAAEC,aAAa,QAAQ;AACxD,SAASC,SAAS,QAAQ;AAC1B,SACEC,qBAAqB,EACrBC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,EACvBC,aAAa,QACR;AACP,OAAOC,KAAA,IAASC,SAAS,QAAQ;AAMjC,SAASC,YAAY,QAAQ;AAC7B,SAASC,iBAAiB,EAAEC,UAAU,QAAQ;AAI9C,OAAO,MAAMC,qBAAA,GACXN,aAAA,CAAc;AAEhB,OAAO,MAAMO,YAAA,GAAoEC,EAAA;EAAA,MAAAC,CAAA,GAAAnB,EAAA;EAG/E,OAAAoB,MAAA,IAAiBnB,yBAAA;EACjB;IAAAoB,MAAA,EAAAC;EAAA,IAEIlB,SAAA;EADM;IAAAmB;EAAA,IAAAD,EAAe;EAAA,IAAAE,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAN,CAAA,QAAAC,MAAA;IAGfI,EAAA,GAAAA,CAAA;MAAA,KACHJ,MAAA,CAAAM,QAAA,EAAAX,UAAA,CAA4B;QAAA,UAAAY,KAAA,CACf;MAAA;MAAA,OAGXxB,aAAA,CACLiB,MAAA,CAAAQ,eAAA,CAAAZ,qBAAA,EAAAa,OAAA;QAGIT,MAAA,CAAAU,MAAA;UACE,MAAAC,SAAA,GAAkBzB,aAAA,MAAmBD,qBAAA;UAAA,IAEjCG,iBAAA,CAAkBuB,SAAA;YACpB,MAAAC,UAAA,GAAmBlB,iBAAA;cAAAmB,IAAA;gBAAAC,EAAA,EAEXL,OAAA,CAAAK,EAAA;gBAAAC,MAAA,EACIN,OAAA,CAAAM,MAAA;gBAAAC,UAAA,EACIP,OAAA,CAAAO,UAAA;gBAAAC,KAAA,EACLR,OAAA,CAAAQ;cAAA;YAAA,CAEX;YAEAnC,wBAAA,CAAyB8B,UAAA;YAEzB;cAAAM;YAAA,IAAkBP,SAAA;YAClB,MAAAQ,SAAA,GAAkBD,KAAA,CAAAE,OAAA,CAAa;YAAA,IAK7BjC,gBAAA,CAAiBgC,SAAA,KACjBA,SAAA,CAAAE,kBAAA,CAA4B,OAAO,IACnCF,SAAA,CAAAG,gBAAA,CACmB,EAAAC,WAAA,CACL,EAAAC,MAAA,CAAAC,IAAA,IACMtC,gBAAA,CAAiBsC,IAAA,GAAAC,MAAA,IAAgB;cAErDP,SAAA,CAAAQ,MAAA,CAAgB;YAAA;UAAA;QAAA,CAGtB;QAAA;MAAA,GAAAtC,uBAIF;IAAA;IAGHgB,EAAA,IAACL,MAAA;IAAOD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAK,EAAA;IAAAL,CAAA,MAAAM,EAAA;EAAA;IAAAD,EAAA,GAAAL,CAAA;IAAAM,EAAA,GAAAN,CAAA;EAAA;EA/CXP,SAAA,CAAUY,EA+CV,EAAGC,EAAQ;EAAA,IAAAuB,EAAA;EAAA,IAAA7B,CAAA,QAAAI,WAAA;IAEJyB,EAAA,GAAAC,IAAA,CAAApC,YAAA;MAAAqC,sBAAA,EAAsC3B,WAAA,CAAA4B,GAAA,CAAAC,KAA8B;IAAA,C;;;;;;SAApEJ,E;CACT;AA1DiF,SAAAI,MAAAlC,EAAA;EAyDjB;IAAAmC;EAAA,IAAAnC,EAAQ;EAAA,OAAKmC,IAAA;AAAA","ignoreList":[]}
|
|
@@ -76,9 +76,8 @@ export const UploadFeature = createServerFeature({
|
|
|
76
76
|
req,
|
|
77
77
|
showHiddenFields
|
|
78
78
|
}) => {
|
|
79
|
-
// @ts-expect-error
|
|
80
|
-
const id = node?.value?.id || node?.value
|
|
81
|
-
;
|
|
79
|
+
// @ts-expect-error - for backwards-compatibility
|
|
80
|
+
const id = node?.value?.id || node?.value;
|
|
82
81
|
if (req?.payload) {
|
|
83
82
|
const uploadDocument = {};
|
|
84
83
|
try {
|
|
@@ -99,7 +98,7 @@ export const UploadFeature = createServerFeature({
|
|
|
99
98
|
console.error('Lexical upload node HTML converter: error fetching upload file', ignored, 'Node:', node);
|
|
100
99
|
return `<img />`;
|
|
101
100
|
}
|
|
102
|
-
const url = getAbsoluteURL(uploadDocument?.value?.url, req?.payload);
|
|
101
|
+
const url = getAbsoluteURL(uploadDocument?.value?.url ?? '', req?.payload);
|
|
103
102
|
/**
|
|
104
103
|
* If the upload is not an image, return a link to the upload
|
|
105
104
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.server.js","names":["sanitizeFields","populate","createServerFeature","createNode","uploadPopulationPromiseHOC","i18n","UploadServerNode","uploadValidation","getAbsoluteURL","url","payload","startsWith","config","serverURL","UploadFeature","feature","_config","isRoot","parentIsLocalized","props","collections","clientProps","collection","hasExtraFields","fields","length","validRelationships","map","c","slug","requireFieldLevelRichTextEditor","ClientFeature","clientFeatureProps","generateSchemaMap","schemaMap","Map","set","nodes","converters","html","converter","currentDepth","depth","draft","node","overrideAccess","req","showHiddenFields","id","value","uploadDocument","collectionSlug","relationTo","data","key","ignored","console","error","mimeType","filename","sizes","Object","keys","width","height","pictureHTML","size","imageSize","filesize","imageSizeURL","nodeTypes","getType","getSubFields","allSubFields","concat","collectionFieldSchema","Array","isArray","getSubFieldsData","graphQLPopulationPromises","hooks","afterRead","populationPromises","populateDepth","maxDepth","undefined","push","validations","sanitizedServerFeatureProps"],"sources":["../../../../src/features/upload/server/feature.server.ts"],"sourcesContent":["import type {\n CollectionSlug,\n Config,\n Field,\n FileData,\n FileSize,\n Payload,\n TypeWithID,\n} from 'payload'\n\nimport { sanitizeFields } from 'payload'\n\nimport type { UploadFeaturePropsClient } from '../client/feature.client.js'\n\nimport { populate } from '../../../populateGraphQL/populate.js'\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { uploadPopulationPromiseHOC } from './graphQLPopulationPromise.js'\nimport { i18n } from './i18n.js'\nimport { UploadServerNode } from './nodes/UploadNode.js'\nimport { uploadValidation } from './validate.js'\n\nexport type UploadFeatureProps = {\n collections?: {\n [collection: CollectionSlug]: {\n fields: Field[]\n }\n }\n /**\n * Sets a maximum population depth for this upload (not the fields for this upload), regardless of the remaining depth when the respective field is reached.\n * This behaves exactly like the maxDepth properties of relationship and upload fields.\n *\n * {@link https://payloadcms.com/docs/getting-started/concepts#field-level-max-depth}\n */\n maxDepth?: number\n}\n\n/**\n * Get the absolute URL for an upload URL by potentially prepending the serverURL\n */\nfunction getAbsoluteURL(url: string, payload: Payload): string {\n return url?.startsWith('http') ? url : (payload?.config?.serverURL || '') + url\n}\n\nexport const UploadFeature = createServerFeature<\n UploadFeatureProps,\n UploadFeatureProps,\n UploadFeaturePropsClient\n>({\n feature: async ({ config: _config, isRoot, parentIsLocalized, props }) => {\n if (!props) {\n props = { collections: {} }\n }\n\n const clientProps: UploadFeaturePropsClient = {\n collections: {},\n }\n if (props.collections) {\n for (const collection in props.collections) {\n clientProps.collections[collection] = {\n hasExtraFields: props.collections[collection].fields.length >= 1,\n }\n }\n }\n\n const validRelationships = _config.collections.map((c) => c.slug) || []\n\n for (const collection in props.collections) {\n if (props.collections[collection].fields?.length) {\n props.collections[collection].fields = await sanitizeFields({\n config: _config as unknown as Config,\n fields: props.collections[collection].fields,\n parentIsLocalized,\n requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n }\n }\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#UploadFeatureClient',\n clientFeatureProps: clientProps,\n generateSchemaMap: ({ props }) => {\n if (!props?.collections) {\n return null\n }\n\n const schemaMap = new Map<string, Field[]>()\n\n for (const collection in props.collections) {\n if (props.collections[collection].fields?.length) {\n schemaMap.set(collection, props.collections[collection].fields)\n }\n }\n\n return schemaMap\n },\n i18n,\n nodes: [\n createNode({\n converters: {\n html: {\n converter: async ({\n currentDepth,\n depth,\n draft,\n node,\n overrideAccess,\n req,\n showHiddenFields,\n }) => {\n // @ts-expect-error\n const id = node?.value?.id || node?.value // for backwards-compatibility\n\n if (req?.payload) {\n const uploadDocument: {\n value?: FileData & TypeWithID\n } = {}\n\n try {\n await populate({\n id,\n collectionSlug: node.relationTo,\n currentDepth,\n data: uploadDocument,\n depth,\n draft,\n key: 'value',\n overrideAccess,\n req,\n showHiddenFields,\n })\n } catch (ignored) {\n // eslint-disable-next-line no-console\n console.error(\n 'Lexical upload node HTML converter: error fetching upload file',\n ignored,\n 'Node:',\n node,\n )\n return `<img />`\n }\n\n const url = getAbsoluteURL(uploadDocument?.value?.url, req?.payload)\n\n /**\n * If the upload is not an image, return a link to the upload\n */\n if (!uploadDocument?.value?.mimeType?.startsWith('image')) {\n return `<a href=\"${url}\" rel=\"noopener noreferrer\">${uploadDocument.value?.filename}</a>`\n }\n\n /**\n * If the upload is a simple image with no different sizes, return a simple img tag\n */\n if (\n !uploadDocument?.value?.sizes ||\n !Object.keys(uploadDocument?.value?.sizes).length\n ) {\n return `<img src=\"${url}\" alt=\"${uploadDocument?.value?.filename}\" width=\"${uploadDocument?.value?.width}\" height=\"${uploadDocument?.value?.height}\"/>`\n }\n\n /**\n * If the upload is an image with different sizes, return a picture element\n */\n let pictureHTML = '<picture>'\n\n // Iterate through each size in the data.sizes object\n for (const size in uploadDocument.value?.sizes) {\n const imageSize: {\n url?: string\n } & FileSize = uploadDocument.value?.sizes[size]\n\n // Skip if any property of the size object is null\n if (\n !imageSize.width ||\n !imageSize.height ||\n !imageSize.mimeType ||\n !imageSize.filesize ||\n !imageSize.filename ||\n !imageSize.url\n ) {\n continue\n }\n const imageSizeURL = getAbsoluteURL(imageSize?.url, req?.payload)\n\n pictureHTML += `<source srcset=\"${imageSizeURL}\" media=\"(max-width: ${imageSize.width}px)\" type=\"${imageSize.mimeType}\">`\n }\n\n // Add the default img tag\n pictureHTML += `<img src=\"${url}\" alt=\"Image\" width=\"${uploadDocument.value?.width}\" height=\"${uploadDocument.value?.height}\">`\n pictureHTML += '</picture>'\n return pictureHTML\n } else {\n return `<img src=\"${id}\" />`\n }\n },\n nodeTypes: [UploadServerNode.getType()],\n },\n },\n getSubFields: ({ node, req }) => {\n if (!node) {\n let allSubFields: Field[] = []\n for (const collection in props?.collections) {\n allSubFields = allSubFields.concat(props?.collections?.[collection]?.fields)\n }\n return allSubFields\n }\n const collection = req ? req.payload.collections[node?.relationTo] : null\n\n if (collection) {\n const collectionFieldSchema = props?.collections?.[node?.relationTo]?.fields\n\n if (Array.isArray(collectionFieldSchema)) {\n if (!collectionFieldSchema?.length) {\n return null\n }\n return collectionFieldSchema\n }\n }\n return null\n },\n getSubFieldsData: ({ node }) => {\n return node?.fields\n },\n graphQLPopulationPromises: [uploadPopulationPromiseHOC(props)],\n hooks: {\n afterRead: [\n ({\n currentDepth,\n depth,\n draft,\n node,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n }) => {\n if (!node?.value) {\n return node\n }\n const collection = req.payload.collections[node?.relationTo]\n\n if (!collection) {\n return node\n }\n // @ts-expect-error\n const id = node?.value?.id || node?.value // for backwards-compatibility\n\n const populateDepth =\n props?.maxDepth !== undefined && props?.maxDepth < depth ? props?.maxDepth : depth\n\n populationPromises.push(\n populate({\n id,\n collectionSlug: collection.config.slug,\n currentDepth,\n data: node,\n depth: populateDepth,\n draft,\n key: 'value',\n overrideAccess,\n req,\n showHiddenFields,\n }),\n )\n\n return node\n },\n ],\n },\n node: UploadServerNode,\n validations: [uploadValidation(props)],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'upload',\n})\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"feature.server.js","names":["sanitizeFields","populate","createServerFeature","createNode","uploadPopulationPromiseHOC","i18n","UploadServerNode","uploadValidation","getAbsoluteURL","url","payload","startsWith","config","serverURL","UploadFeature","feature","_config","isRoot","parentIsLocalized","props","collections","clientProps","collection","hasExtraFields","fields","length","validRelationships","map","c","slug","requireFieldLevelRichTextEditor","ClientFeature","clientFeatureProps","generateSchemaMap","schemaMap","Map","set","nodes","converters","html","converter","currentDepth","depth","draft","node","overrideAccess","req","showHiddenFields","id","value","uploadDocument","collectionSlug","relationTo","data","key","ignored","console","error","mimeType","filename","sizes","Object","keys","width","height","pictureHTML","size","imageSize","filesize","imageSizeURL","nodeTypes","getType","getSubFields","allSubFields","concat","collectionFieldSchema","Array","isArray","getSubFieldsData","graphQLPopulationPromises","hooks","afterRead","populationPromises","populateDepth","maxDepth","undefined","push","validations","sanitizedServerFeatureProps"],"sources":["../../../../src/features/upload/server/feature.server.ts"],"sourcesContent":["import type {\n CollectionSlug,\n Config,\n Field,\n FileData,\n FileSize,\n Payload,\n TypeWithID,\n} from 'payload'\n\nimport { sanitizeFields } from 'payload'\n\nimport type { UploadFeaturePropsClient } from '../client/feature.client.js'\n\nimport { populate } from '../../../populateGraphQL/populate.js'\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { uploadPopulationPromiseHOC } from './graphQLPopulationPromise.js'\nimport { i18n } from './i18n.js'\nimport { UploadServerNode } from './nodes/UploadNode.js'\nimport { uploadValidation } from './validate.js'\n\nexport type UploadFeatureProps = {\n collections?: {\n [collection: CollectionSlug]: {\n fields: Field[]\n }\n }\n /**\n * Sets a maximum population depth for this upload (not the fields for this upload), regardless of the remaining depth when the respective field is reached.\n * This behaves exactly like the maxDepth properties of relationship and upload fields.\n *\n * {@link https://payloadcms.com/docs/getting-started/concepts#field-level-max-depth}\n */\n maxDepth?: number\n}\n\n/**\n * Get the absolute URL for an upload URL by potentially prepending the serverURL\n */\nfunction getAbsoluteURL(url: string, payload: Payload): string {\n return url?.startsWith('http') ? url : (payload?.config?.serverURL || '') + url\n}\n\nexport const UploadFeature = createServerFeature<\n UploadFeatureProps,\n UploadFeatureProps,\n UploadFeaturePropsClient\n>({\n feature: async ({ config: _config, isRoot, parentIsLocalized, props }) => {\n if (!props) {\n props = { collections: {} }\n }\n\n const clientProps: UploadFeaturePropsClient = {\n collections: {},\n }\n if (props.collections) {\n for (const collection in props.collections) {\n clientProps.collections[collection] = {\n hasExtraFields: props.collections[collection].fields.length >= 1,\n }\n }\n }\n\n const validRelationships = _config.collections.map((c) => c.slug) || []\n\n for (const collection in props.collections) {\n if (props.collections[collection].fields?.length) {\n props.collections[collection].fields = await sanitizeFields({\n config: _config as unknown as Config,\n fields: props.collections[collection].fields,\n parentIsLocalized,\n requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n }\n }\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#UploadFeatureClient',\n clientFeatureProps: clientProps,\n generateSchemaMap: ({ props }) => {\n if (!props?.collections) {\n return null\n }\n\n const schemaMap = new Map<string, Field[]>()\n\n for (const collection in props.collections) {\n if (props.collections[collection].fields?.length) {\n schemaMap.set(collection, props.collections[collection].fields)\n }\n }\n\n return schemaMap\n },\n i18n,\n nodes: [\n createNode({\n converters: {\n html: {\n converter: async ({\n currentDepth,\n depth,\n draft,\n node,\n overrideAccess,\n req,\n showHiddenFields,\n }) => {\n // @ts-expect-error - for backwards-compatibility\n const id = node?.value?.id || node?.value\n\n if (req?.payload) {\n const uploadDocument: {\n value?: FileData & TypeWithID\n } = {}\n\n try {\n await populate({\n id,\n collectionSlug: node.relationTo,\n currentDepth,\n data: uploadDocument,\n depth,\n draft,\n key: 'value',\n overrideAccess,\n req,\n showHiddenFields,\n })\n } catch (ignored) {\n // eslint-disable-next-line no-console\n console.error(\n 'Lexical upload node HTML converter: error fetching upload file',\n ignored,\n 'Node:',\n node,\n )\n return `<img />`\n }\n\n const url = getAbsoluteURL(uploadDocument?.value?.url ?? '', req?.payload)\n\n /**\n * If the upload is not an image, return a link to the upload\n */\n if (!uploadDocument?.value?.mimeType?.startsWith('image')) {\n return `<a href=\"${url}\" rel=\"noopener noreferrer\">${uploadDocument.value?.filename}</a>`\n }\n\n /**\n * If the upload is a simple image with no different sizes, return a simple img tag\n */\n if (\n !uploadDocument?.value?.sizes ||\n !Object.keys(uploadDocument?.value?.sizes).length\n ) {\n return `<img src=\"${url}\" alt=\"${uploadDocument?.value?.filename}\" width=\"${uploadDocument?.value?.width}\" height=\"${uploadDocument?.value?.height}\"/>`\n }\n\n /**\n * If the upload is an image with different sizes, return a picture element\n */\n let pictureHTML = '<picture>'\n\n // Iterate through each size in the data.sizes object\n for (const size in uploadDocument.value?.sizes) {\n const imageSize: {\n url?: string\n } & FileSize = uploadDocument.value?.sizes[size]\n\n // Skip if any property of the size object is null\n if (\n !imageSize.width ||\n !imageSize.height ||\n !imageSize.mimeType ||\n !imageSize.filesize ||\n !imageSize.filename ||\n !imageSize.url\n ) {\n continue\n }\n const imageSizeURL = getAbsoluteURL(imageSize?.url, req?.payload)\n\n pictureHTML += `<source srcset=\"${imageSizeURL}\" media=\"(max-width: ${imageSize.width}px)\" type=\"${imageSize.mimeType}\">`\n }\n\n // Add the default img tag\n pictureHTML += `<img src=\"${url}\" alt=\"Image\" width=\"${uploadDocument.value?.width}\" height=\"${uploadDocument.value?.height}\">`\n pictureHTML += '</picture>'\n return pictureHTML\n } else {\n return `<img src=\"${id}\" />`\n }\n },\n nodeTypes: [UploadServerNode.getType()],\n },\n },\n getSubFields: ({ node, req }) => {\n if (!node) {\n let allSubFields: Field[] = []\n for (const collection in props?.collections) {\n allSubFields = allSubFields.concat(props?.collections?.[collection]?.fields)\n }\n return allSubFields\n }\n const collection = req ? req.payload.collections[node?.relationTo] : null\n\n if (collection) {\n const collectionFieldSchema = props?.collections?.[node?.relationTo]?.fields\n\n if (Array.isArray(collectionFieldSchema)) {\n if (!collectionFieldSchema?.length) {\n return null\n }\n return collectionFieldSchema\n }\n }\n return null\n },\n getSubFieldsData: ({ node }) => {\n return node?.fields\n },\n graphQLPopulationPromises: [uploadPopulationPromiseHOC(props)],\n hooks: {\n afterRead: [\n ({\n currentDepth,\n depth,\n draft,\n node,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n }) => {\n if (!node?.value) {\n return node\n }\n const collection = req.payload.collections[node?.relationTo]\n\n if (!collection) {\n return node\n }\n // @ts-expect-error\n const id = node?.value?.id || node?.value // for backwards-compatibility\n\n const populateDepth =\n props?.maxDepth !== undefined && props?.maxDepth < depth ? props?.maxDepth : depth\n\n populationPromises.push(\n populate({\n id,\n collectionSlug: collection.config.slug,\n currentDepth,\n data: node,\n depth: populateDepth,\n draft,\n key: 'value',\n overrideAccess,\n req,\n showHiddenFields,\n }),\n )\n\n return node\n },\n ],\n },\n node: UploadServerNode,\n validations: [uploadValidation(props)],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'upload',\n})\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","names":["buildStateFromSchema","isValidID","uploadValidation","props","node","validation","options","id","operation","preferences","req","payload","t","idType","collections","relationTo","customIDType","db","defaultIDType","nodeID","value","Object","keys","length","collection","fields","result","collectionSlug","data","fieldSchema","siblingData","errorPaths","fieldKey","concat","join"],"sources":["../../../../src/features/upload/server/validate.ts"],"sourcesContent":["import { buildStateFromSchema } from '@payloadcms/ui/forms/buildStateFromSchema'\nimport { isValidID } from 'payload'\n\nimport type { NodeValidation } from '../../typesServer.js'\nimport type { UploadFeatureProps } from './feature.server.js'\nimport type { SerializedUploadNode } from './nodes/UploadNode.js'\n\nexport const uploadValidation = (\n props: UploadFeatureProps,\n): NodeValidation<SerializedUploadNode> => {\n return async ({\n node,\n validation: {\n options: {\n id,\n operation,\n preferences,\n req,\n req: { payload, t },\n },\n },\n }) => {\n const idType = payload.collections[node.relationTo].customIDType || payload.db.defaultIDType\n // @ts-expect-error\n const nodeID = node?.value?.id || node?.value // for backwards-compatibility\n\n if (!isValidID(nodeID, idType)) {\n return t('validation:validUploadID')\n }\n\n if (!props?.collections) {\n return true\n }\n\n if (Object.keys(props?.collections).length === 0) {\n return true\n }\n\n const collection = props?.collections[node.relationTo]\n\n if (!collection?.fields?.length) {\n return true\n }\n\n const result = await buildStateFromSchema({\n id,\n collectionSlug: node.relationTo,\n data: node?.fields ?? {},\n fieldSchema: collection.fields,\n operation: operation === 'create' || operation === 'update' ? operation : 'update',\n preferences,\n req,\n siblingData: node?.fields ?? {},\n })\n\n let errorPaths = []\n for (const fieldKey in result) {\n if (result[fieldKey].errorPaths) {\n errorPaths = errorPaths.concat(result[fieldKey].errorPaths)\n }\n }\n\n if (errorPaths.length) {\n return 'The following fields are invalid: ' + errorPaths.join(', ')\n }\n\n return true\n }\n}\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ;AACrC,SAASC,SAAS,QAAQ;AAM1B,OAAO,MAAMC,gBAAA,GACXC,KAAA;EAEA,OAAO,OAAO;IACZC,IAAI;IACJC,UAAA,EAAY;MACVC,OAAA,EAAS;QACPC,EAAE;QACFC,SAAS;QACTC,WAAW;QACXC,GAAG;QACHA,GAAA,EAAK;UAAEC,OAAO;UAAEC;QAAC;MAAE;IACpB;EACF,CACF;IACC,MAAMC,MAAA,GAASF,OAAA,CAAQG,WAAW,CAACV,IAAA,CAAKW,UAAU,CAAC,CAACC,YAAY,IAAIL,OAAA,CAAQM,EAAE,CAACC,aAAa;IAC5F;IACA,MAAMC,MAAA,GAASf,IAAA,EAAMgB,KAAA,EAAOb,EAAA,IAAMH,IAAA,EAAMgB,KAAA,CAAM;IAAA;IAE9C,IAAI,CAACnB,SAAA,CAAUkB,MAAA,EAAQN,MAAA,GAAS;MAC9B,OAAOD,CAAA,CAAE;IACX;IAEA,IAAI,CAACT,KAAA,EAAOW,WAAA,EAAa;MACvB,OAAO;IACT;IAEA,IAAIO,MAAA,CAAOC,IAAI,CAACnB,KAAA,EAAOW,WAAA,EAAaS,MAAM,KAAK,GAAG;MAChD,OAAO;IACT;IAEA,MAAMC,UAAA,GAAarB,KAAA,EAAOW,WAAW,CAACV,IAAA,CAAKW,UAAU,CAAC;IAEtD,IAAI,CAACS,UAAA,EAAYC,MAAA,EAAQF,MAAA,EAAQ;MAC/B,OAAO;IACT;IAEA,MAAMG,MAAA,GAAS,MAAM1B,oBAAA,CAAqB;MACxCO,EAAA;MACAoB,cAAA,EAAgBvB,IAAA,CAAKW,UAAU;MAC/Ba,IAAA,EAAMxB,IAAA,EAAMqB,MAAA,IAAU,CAAC;MACvBI,WAAA,EAAaL,UAAA,CAAWC,MAAM;MAC9BjB,SAAA,EAAWA,SAAA,KAAc,YAAYA,SAAA,KAAc,WAAWA,SAAA,GAAY;MAC1EC,WAAA;MACAC,GAAA;MACAoB,WAAA,EAAa1B,IAAA,EAAMqB,MAAA,IAAU,CAAC;IAChC;IAEA,IAAIM,UAAA,
|
|
1
|
+
{"version":3,"file":"validate.js","names":["buildStateFromSchema","isValidID","uploadValidation","props","node","validation","options","id","operation","preferences","req","payload","t","idType","collections","relationTo","customIDType","db","defaultIDType","nodeID","value","Object","keys","length","collection","fields","result","collectionSlug","data","fieldSchema","siblingData","errorPaths","fieldKey","concat","join"],"sources":["../../../../src/features/upload/server/validate.ts"],"sourcesContent":["import { buildStateFromSchema } from '@payloadcms/ui/forms/buildStateFromSchema'\nimport { isValidID } from 'payload'\n\nimport type { NodeValidation } from '../../typesServer.js'\nimport type { UploadFeatureProps } from './feature.server.js'\nimport type { SerializedUploadNode } from './nodes/UploadNode.js'\n\nexport const uploadValidation = (\n props: UploadFeatureProps,\n): NodeValidation<SerializedUploadNode> => {\n return async ({\n node,\n validation: {\n options: {\n id,\n operation,\n preferences,\n req,\n req: { payload, t },\n },\n },\n }) => {\n const idType = payload.collections[node.relationTo].customIDType || payload.db.defaultIDType\n // @ts-expect-error\n const nodeID = node?.value?.id || node?.value // for backwards-compatibility\n\n if (!isValidID(nodeID, idType)) {\n return t('validation:validUploadID')\n }\n\n if (!props?.collections) {\n return true\n }\n\n if (Object.keys(props?.collections).length === 0) {\n return true\n }\n\n const collection = props?.collections[node.relationTo]\n\n if (!collection?.fields?.length) {\n return true\n }\n\n const result = await buildStateFromSchema({\n id,\n collectionSlug: node.relationTo,\n data: node?.fields ?? {},\n fieldSchema: collection.fields,\n operation: operation === 'create' || operation === 'update' ? operation : 'update',\n preferences,\n req,\n siblingData: node?.fields ?? {},\n })\n\n let errorPaths: string[] = []\n for (const fieldKey in result) {\n if (result[fieldKey].errorPaths) {\n errorPaths = errorPaths.concat(result[fieldKey].errorPaths)\n }\n }\n\n if (errorPaths.length) {\n return 'The following fields are invalid: ' + errorPaths.join(', ')\n }\n\n return true\n }\n}\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ;AACrC,SAASC,SAAS,QAAQ;AAM1B,OAAO,MAAMC,gBAAA,GACXC,KAAA;EAEA,OAAO,OAAO;IACZC,IAAI;IACJC,UAAA,EAAY;MACVC,OAAA,EAAS;QACPC,EAAE;QACFC,SAAS;QACTC,WAAW;QACXC,GAAG;QACHA,GAAA,EAAK;UAAEC,OAAO;UAAEC;QAAC;MAAE;IACpB;EACF,CACF;IACC,MAAMC,MAAA,GAASF,OAAA,CAAQG,WAAW,CAACV,IAAA,CAAKW,UAAU,CAAC,CAACC,YAAY,IAAIL,OAAA,CAAQM,EAAE,CAACC,aAAa;IAC5F;IACA,MAAMC,MAAA,GAASf,IAAA,EAAMgB,KAAA,EAAOb,EAAA,IAAMH,IAAA,EAAMgB,KAAA,CAAM;IAAA;IAE9C,IAAI,CAACnB,SAAA,CAAUkB,MAAA,EAAQN,MAAA,GAAS;MAC9B,OAAOD,CAAA,CAAE;IACX;IAEA,IAAI,CAACT,KAAA,EAAOW,WAAA,EAAa;MACvB,OAAO;IACT;IAEA,IAAIO,MAAA,CAAOC,IAAI,CAACnB,KAAA,EAAOW,WAAA,EAAaS,MAAM,KAAK,GAAG;MAChD,OAAO;IACT;IAEA,MAAMC,UAAA,GAAarB,KAAA,EAAOW,WAAW,CAACV,IAAA,CAAKW,UAAU,CAAC;IAEtD,IAAI,CAACS,UAAA,EAAYC,MAAA,EAAQF,MAAA,EAAQ;MAC/B,OAAO;IACT;IAEA,MAAMG,MAAA,GAAS,MAAM1B,oBAAA,CAAqB;MACxCO,EAAA;MACAoB,cAAA,EAAgBvB,IAAA,CAAKW,UAAU;MAC/Ba,IAAA,EAAMxB,IAAA,EAAMqB,MAAA,IAAU,CAAC;MACvBI,WAAA,EAAaL,UAAA,CAAWC,MAAM;MAC9BjB,SAAA,EAAWA,SAAA,KAAc,YAAYA,SAAA,KAAc,WAAWA,SAAA,GAAY;MAC1EC,WAAA;MACAC,GAAA;MACAoB,WAAA,EAAa1B,IAAA,EAAMqB,MAAA,IAAU,CAAC;IAChC;IAEA,IAAIM,UAAA,GAAuB,EAAE;IAC7B,KAAK,MAAMC,QAAA,IAAYN,MAAA,EAAQ;MAC7B,IAAIA,MAAM,CAACM,QAAA,CAAS,CAACD,UAAU,EAAE;QAC/BA,UAAA,GAAaA,UAAA,CAAWE,MAAM,CAACP,MAAM,CAACM,QAAA,CAAS,CAACD,UAAU;MAC5D;IACF;IAEA,IAAIA,UAAA,CAAWR,MAAM,EAAE;MACrB,OAAO,uCAAuCQ,UAAA,CAAWG,IAAI,CAAC;IAChE;IAEA,OAAO;EACT;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/field/Field.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAG1C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAG5D,OAAO,eAAe,CAAA;AACtB,OAAO,cAAc,CAAA;AACrB,OAAO,mCAAmC,CAAA;AAI1C,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAC/B;IACE,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAA;CACnD,GAAG,yBAAyB,
|
|
1
|
+
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/field/Field.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAG1C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAG5D,OAAO,eAAe,CAAA;AACtB,OAAO,cAAc,CAAA;AACrB,OAAO,mCAAmC,CAAA;AAI1C,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAC/B;IACE,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAA;CACnD,GAAG,yBAAyB,CAqG9B,CAAA;AAaD,eAAO,MAAM,QAAQ,EAAE,OAAO,iBAAoD,CAAA"}
|
package/dist/field/Field.js
CHANGED
|
@@ -17,11 +17,7 @@ const RichTextComponent = props => {
|
|
|
17
17
|
_path: pathFromProps,
|
|
18
18
|
admin: {
|
|
19
19
|
className,
|
|
20
|
-
components
|
|
21
|
-
Description,
|
|
22
|
-
Error,
|
|
23
|
-
Label
|
|
24
|
-
},
|
|
20
|
+
components,
|
|
25
21
|
readOnly: readOnlyFromAdmin,
|
|
26
22
|
style,
|
|
27
23
|
width
|
|
@@ -33,6 +29,9 @@ const RichTextComponent = props => {
|
|
|
33
29
|
readOnly: readOnlyFromTopLevelProps,
|
|
34
30
|
validate
|
|
35
31
|
} = props;
|
|
32
|
+
const Description = components?.Description;
|
|
33
|
+
const Error = components?.Error;
|
|
34
|
+
const Label = components?.Label;
|
|
36
35
|
const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin;
|
|
37
36
|
const memoizedValidate = useCallback((value, validationOptions) => {
|
|
38
37
|
if (typeof validate === 'function') {
|
|
@@ -53,6 +52,7 @@ const RichTextComponent = props => {
|
|
|
53
52
|
} = useFieldProps();
|
|
54
53
|
const fieldType = useField({
|
|
55
54
|
path: pathFromContext ?? pathFromProps ?? name,
|
|
55
|
+
// @ts-expect-error: TODO: Fix this
|
|
56
56
|
validate: memoizedValidate
|
|
57
57
|
});
|
|
58
58
|
const {
|
|
@@ -74,14 +74,14 @@ const RichTextComponent = props => {
|
|
|
74
74
|
},
|
|
75
75
|
children: [/*#__PURE__*/_jsx(FieldError, {
|
|
76
76
|
CustomError: Error,
|
|
77
|
-
field: field,
|
|
78
77
|
path: path,
|
|
79
78
|
...(errorProps || {}),
|
|
80
|
-
alignCaret: "left"
|
|
79
|
+
alignCaret: "left",
|
|
80
|
+
field: field
|
|
81
81
|
}), /*#__PURE__*/_jsx(FieldLabel, {
|
|
82
|
-
field: field,
|
|
83
82
|
Label: Label,
|
|
84
|
-
...(labelProps || {})
|
|
83
|
+
...(labelProps || {}),
|
|
84
|
+
field: field
|
|
85
85
|
}), /*#__PURE__*/_jsxs("div", {
|
|
86
86
|
className: `${baseClass}__wrap`,
|
|
87
87
|
children: [/*#__PURE__*/_jsx(ErrorBoundary, {
|
|
@@ -111,8 +111,8 @@ const RichTextComponent = props => {
|
|
|
111
111
|
}))
|
|
112
112
|
}), /*#__PURE__*/_jsx(FieldDescription, {
|
|
113
113
|
Description: Description,
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
...(descriptionProps || {}),
|
|
115
|
+
field: field
|
|
116
116
|
})]
|
|
117
117
|
})]
|
|
118
118
|
}, path);
|
package/dist/field/Field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","names":["FieldDescription","FieldError","FieldLabel","useField","useFieldProps","withCondition","React","useCallback","ErrorBoundary","LexicalProvider","baseClass","RichTextComponent","props","descriptionProps","editorConfig","errorProps","field","name","_path","pathFromProps","admin","className","components","
|
|
1
|
+
{"version":3,"file":"Field.js","names":["FieldDescription","FieldError","FieldLabel","useField","useFieldProps","withCondition","React","useCallback","ErrorBoundary","LexicalProvider","baseClass","RichTextComponent","props","descriptionProps","editorConfig","errorProps","field","name","_path","pathFromProps","admin","className","components","readOnly","readOnlyFromAdmin","style","width","required","labelProps","readOnlyFromTopLevelProps","validate","Description","Error","Label","readOnlyFromProps","memoizedValidate","value","validationOptions","path","pathFromContext","readOnlyFromContext","fieldType","formInitializing","formProcessing","initialValue","setValue","showError","disabled","classes","hideGutter","filter","Boolean","join","_jsxs","_jsx","CustomError","alignCaret","fallbackRender","onReset","onChange","editorState","serializedEditorState","toJSON","features","hooks","save","length","forEach","hook","incomingEditorState","JSON","stringify","error","role","color","message","RichText"],"sources":["../../src/field/Field.tsx"],"sourcesContent":["'use client'\nimport type { SerializedEditorState } from 'lexical'\n\nimport {\n FieldDescription,\n FieldError,\n FieldLabel,\n useField,\n useFieldProps,\n withCondition,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\nimport type { LexicalRichTextFieldProps } from '../types.js'\n\nimport { LexicalProvider } from '../lexical/LexicalProvider.js'\nimport './bundled.css'\nimport './index.scss'\nimport '../lexical/theme/EditorTheme.scss'\n\nconst baseClass = 'rich-text-lexical'\n\nconst RichTextComponent: React.FC<\n {\n readonly editorConfig: SanitizedClientEditorConfig // With rendered features n stuff\n } & LexicalRichTextFieldProps\n> = (props) => {\n const {\n descriptionProps,\n editorConfig,\n errorProps,\n field: {\n name,\n _path: pathFromProps,\n admin: { className, components, readOnly: readOnlyFromAdmin, style, width } = {},\n required,\n },\n field,\n labelProps,\n readOnly: readOnlyFromTopLevelProps,\n validate, // Users can pass in client side validation if they WANT to, but it's not required anymore\n } = props\n const Description = components?.Description\n const Error = components?.Error\n const Label = components?.Label\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const memoizedValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n return validate(value, { ...validationOptions, props, required })\n }\n },\n // Important: do not add props to the dependencies array.\n // This would cause an infinite loop and endless re-rendering.\n // Removing props from the dependencies array fixed this issue: https://github.com/payloadcms/payload/issues/3709\n [validate, required],\n )\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n const fieldType = useField<SerializedEditorState>({\n path: pathFromContext ?? pathFromProps ?? name,\n // @ts-expect-error: TODO: Fix this\n validate: memoizedValidate,\n })\n\n const { formInitializing, formProcessing, initialValue, path, setValue, showError, value } =\n fieldType\n\n const disabled = readOnlyFromProps || readOnlyFromContext || formProcessing || formInitializing\n\n const classes = [\n baseClass,\n 'field-type',\n className,\n showError && 'error',\n disabled && `${baseClass}--read-only`,\n editorConfig?.admin?.hideGutter !== true ? `${baseClass}--show-gutter` : null,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n className={classes}\n key={path}\n style={{\n ...style,\n width,\n }}\n >\n <FieldError\n CustomError={Error}\n path={path}\n {...(errorProps || {})}\n alignCaret=\"left\"\n field={field}\n />\n <FieldLabel Label={Label} {...(labelProps || {})} field={field} />\n <div className={`${baseClass}__wrap`}>\n <ErrorBoundary fallbackRender={fallbackRender} onReset={() => {}}>\n <LexicalProvider\n editorConfig={editorConfig}\n field={field}\n key={JSON.stringify({ initialValue, path })} // makes sure lexical is completely re-rendered when initialValue changes, bypassing the lexical-internal value memoization. That way, external changes to the form will update the editor. More infos in PR description (https://github.com/payloadcms/payload/pull/5010)\n onChange={(editorState) => {\n let serializedEditorState = editorState.toJSON()\n\n // Transform state through save hooks\n if (editorConfig?.features?.hooks?.save?.length) {\n editorConfig.features.hooks.save.forEach((hook) => {\n serializedEditorState = hook({ incomingEditorState: serializedEditorState })\n })\n }\n\n setValue(serializedEditorState)\n }}\n path={path}\n readOnly={disabled}\n value={value}\n />\n </ErrorBoundary>\n <FieldDescription Description={Description} {...(descriptionProps || {})} field={field} />\n </div>\n </div>\n )\n}\n\nfunction fallbackRender({ error }): React.ReactElement {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return (\n <div className=\"errorBoundary\" role=\"alert\">\n <p>Something went wrong:</p>\n <pre style={{ color: 'red' }}>{error.message}</pre>\n </div>\n )\n}\n\nexport const RichText: typeof RichTextComponent = withCondition(RichTextComponent)\n"],"mappings":"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","ignoreList":[]}
|