@payloadcms/richtext-lexical 3.0.0-beta.106 → 3.0.0-beta.108
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-F6JI75HS.js +2 -0
- package/dist/exports/client/{RelationshipComponent-Z5SZ5FFT.js.map → RelationshipComponent-F6JI75HS.js.map} +2 -2
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/chunk-76MVRKRT.js +2 -0
- package/dist/exports/client/chunk-76MVRKRT.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-HIGLONP6.js +2 -0
- package/dist/exports/client/chunk-HIGLONP6.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-PY6JO5OH.js → chunk-JYCJEIVA.js} +2 -2
- package/dist/exports/client/{chunk-PY6JO5OH.js.map → chunk-JYCJEIVA.js.map} +2 -2
- package/dist/exports/client/{chunk-GTKNWSQW.js → chunk-N2PXHNGO.js} +2 -2
- package/dist/exports/client/{chunk-GTKNWSQW.js.map → chunk-N2PXHNGO.js.map} +2 -2
- package/dist/exports/client/{chunk-PECDZEZY.js → chunk-YREZUOA6.js} +2 -2
- package/dist/exports/client/{chunk-PECDZEZY.js.map → chunk-YREZUOA6.js.map} +2 -2
- package/dist/exports/client/component-4IBTSHL5.js +2 -0
- package/dist/exports/client/component-4IBTSHL5.js.map +7 -0
- package/dist/exports/client/{component-GAX6BHKZ.js → component-GQ5M6NF6.js} +2 -2
- package/dist/exports/client/component-P34B4EPY.js +2 -0
- package/dist/exports/client/component-P34B4EPY.js.map +7 -0
- package/dist/exports/client/componentInline-XX7FVAIV.js +2 -0
- package/dist/exports/client/{componentInline-HAGGWKA7.js.map → componentInline-XX7FVAIV.js.map} +2 -2
- 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 +15 -5
- 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 +4 -4
- 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.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/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 -6
- 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 +8 -6
- 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.js +1 -1
- 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 +69 -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/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 +8 -3
- 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 +13 -13
- 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/chunk-366OGJYE.js +0 -2
- package/dist/exports/client/chunk-366OGJYE.js.map +0 -7
- 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-OVIYSCND.js +0 -2
- package/dist/exports/client/component-OVIYSCND.js.map +0 -7
- package/dist/exports/client/component-UJILB3MH.js +0 -2
- package/dist/exports/client/component-UJILB3MH.js.map +0 -7
- package/dist/exports/client/componentInline-HAGGWKA7.js +0 -2
- /package/dist/exports/client/{component-GAX6BHKZ.js.map → component-GQ5M6NF6.js.map} +0 -0
|
@@ -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":"AAAA;;;AAGA,SAASA,yBAAyB,QAAQ;AAC1C,SAASC,uBAAuB,QAAQ;AACxC,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SACEC,MAAM,EACNC,aAAa,EACbC,IAAI,EACJC,gBAAgB,EAChBC,SAAS,EACTC,iBAAiB,EACjBC,YAAY,EACZC,QAAQ,EACRC,aAAa,EACbC,cAAc,QACT;AACP,SACEC,aAAa,EACbC,aAAa,EACbC,gBAAgB,EAChBC,aAAa,EACbC,oBAAoB,EACpBC,qBAAqB,EACrBC,kBAAkB,QACb;AACP,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,KAAK,EAAEC,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAOnF,SAASC,sBAAsB,QAAQ;AACvC,SAASC,YAAY,QAAQ;AAC7B,SAASC,6BAA6B,QAAQ;AAC9C,SAASC,iCAAiC,QAAQ;AAClD,SAASC,aAAa,QAAQ;AAG9B,MAAMC,SAAA,GAAY;AAElB,MAAMC,aAAA,GAAgB;EACpBC,KAAA,EAAO;AACT;AAOA,MAAMC,SAAA,GAAqCC,KAAA;EACzC,MAAM;IACJC,IAAA,EAAM;MAAEC,MAAM;MAAEC,UAAU;MAAEC;IAAK,CAAE;IACnCC;EAAO,CACR,GAAGL,KAAA;EAEJ,IAAI,OAAOI,KAAA,KAAU,UAAU;IAC7B,MAAM,IAAIE,KAAA,CACR;EAEJ;EAEA,MAAM;IACJC,MAAA,EAAQ;MACNC,WAAW;MACXC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS;EACV,CACF,GAAGxC,SAAA;EACJ,MAAMyC,SAAA,GAAYvB,MAAA,CAA8B;EAChD,MAAM;IAAEwB;EAAU,CAAE,GAAGvC,QAAA;EACvB,MAAM;IAAEwC;EAAI,CAAE,GAAGvB,sBAAA;EACjB,MAAMwB,SAAA,GAAY1C,YAAA;EAClB,MAAM,CAAC2C,MAAA,CAAO,GAAGrD,yBAAA;EACjB,MAAM,CAACsD,UAAA,EAAYC,WAAA,EAAaC,cAAA,CAAe,GAAGvD,uBAAA,CAAwByC,OAAA;EAE1E,MAAM;IAAEe,YAAY;IAAEC;EAAK,CAAE,GAAG9B,sBAAA;EAEhC,MAAM;IAAE+B,IAAI;IAAEC;EAAC,CAAE,GAAG/C,cAAA;EACpB,MAAM,CAACgD,SAAA,EAAWC,iBAAA,CAAkB,GAAGrC,UAAA,CAAYsC,KAAA,IAAUA,KAAA,GAAQ,GAAG;EACxE,MAAM,CAACC,iBAAA,CAAkB,GAAGrC,QAAA,CAAiC,MAC3DkB,WAAA,CAAYoB,IAAI,CAAEC,IAAA,IAASA,IAAA,CAAKC,IAAI,KAAK3B,UAAA;EAG3C,MAAM4B,WAAA,GAAc5C,KAAA;EAEpB,MAAM6C,UAAA,GAAa9D,gBAAA,CAAiB;IAClC4D,IAAA,EAAM,wBAAwB,GAAGhB,IAAA,GAAOiB,WAAA;IACxCjC,KAAA,EAAOiB;EACT;EAEA,MAAM,CAACkB,cAAA,EAAgBC,qBAAA,EAAuB;IAAEC;EAAW,CAAE,CAAC,GAAG/D,iBAAA,CAAkB;IACjFgE,EAAA,EAAIhC,KAAA;IACJiC,cAAA,EAAgBV,iBAAA,CAAkBG;EACpC;EAEA;EACA,MAAM,CAAC;IAAE7B;EAAI,CAAE,EAAE;IAAEqC;EAAS,CAAE,CAAC,GAAG/D,aAAA,CAChC,GAAGoC,SAAA,GAAYD,GAAA,IAAOiB,iBAAA,CAAkBG,IAAI,IAAI1B,KAAA,EAAO,EACvD;IAAEP;EAAc;EAGlB,MAAM0C,YAAA,GAAetC,IAAA,EAAMuC,YAAA,IAAgBvC,IAAA,EAAMwC,GAAA;EAEjD,MAAMC,YAAA,GAAezD,WAAA,CAAY;IAC/B+B,MAAA,CAAO2B,MAAM,CAAC;MACZlE,aAAA,CAAc4B,OAAA,EAASuC,MAAM;IAC/B;EACF,GAAG,CAAC5B,MAAA,EAAQX,OAAA,CAAQ;EAEpB,MAAMwC,YAAA,GAAe5D,WAAA,CAClBgB,MAAA;IACCqC,SAAA,CAAU;MACR,GAAGzC,aAAa;MAChB2B;IACF;IAEAC,iBAAA;IACAU,WAAA;EACF,GACA,CAACG,SAAA,EAAWd,SAAA,EAAWW,WAAA,CAAY;EAGrC,MAAMW,SAAA,GAAY7D,WAAA,CACf8D,KAAA;IACC,IAAI9B,UAAA,IAActC,gBAAA,CAAiBD,aAAA,KAAkB;MACnDqE,KAAA,CAAMC,cAAc;MACpB,MAAMC,IAAA,GAAOxE,aAAA,CAAc4B,OAAA;MAC3B,IAAIV,aAAA,CAAcsD,IAAA,GAAO;QACvBA,IAAA,CAAKL,MAAM;QACX,OAAO;MACT;IACF;IACA,OAAO;EACT,GACA,CAAC3B,UAAA,EAAYZ,OAAA,CAAQ;EAGvBnB,SAAA,CAAU;IACR,OAAOrB,aAAA,CACLmD,MAAA,CAAOkC,eAAe,CACpBtE,aAAA,EACCmE,OAAA;MACC;MACA,IACEA,OAAA,CAAMI,MAAM,KAAKvC,SAAA,CAAUwC,OAAO,IAClCxC,SAAA,CAAUwC,OAAO,EAAEC,QAAA,CAASN,OAAA,CAAMI,MAAM,GACxC;QACA,IAAIJ,OAAA,CAAMO,QAAQ,EAAE;UAClBpC,WAAA,CAAY,CAACD,UAAA;QACf,OAAO;UACL,IAAI,CAACA,UAAA,EAAY;YACfE,cAAA;YACAD,WAAA,CAAY;UACd;QACF;QACA,OAAO;MACT;MAEA,OAAO;IACT,GACArC,oBAAA,GAGFmC,MAAA,CAAOkC,eAAe,CAACnE,kBAAA,EAAoB+D,SAAA,EAAWjE,oBAAA,GACtDmC,MAAA,CAAOkC,eAAe,CAACpE,qBAAA,EAAuBgE,SAAA,EAAWjE,oBAAA;EAE7D,GAAG,CAACsC,cAAA,EAAgBH,MAAA,EAAQC,UAAA,EAAYZ,OAAA,EAASyC,SAAA,EAAW5B,WAAA,CAAY;EAExE,MAAMqC,cAAA,GAAiBnC,YACrB,EAAcoC,kBAAA,EAAoBC,GAAA,CAAI,WAClCC,2BAAA,CACJlD,WAAW,GAAGmB,iBAAA,CAAkBG,IAAI,CAAC,EAAEyB,cAAA;EAEzC,MAAMI,yBAAA,GAA4B1E,WAAA,CAChC,CAAC2E,CAAA,EAAG3D,MAAA;IACF;IACAe,MAAA,CAAO2B,MAAM,CAAC;MACZ,MAAMkB,UAAA,GAAgCpF,aAAA,CAAc4B,OAAA;MACpD,IAAIwD,UAAA,EAAY;QACd,MAAMC,OAAA,GAAsB;UAC1B,GAAGD,UAAA,CAAWE,OAAO,EAAE;UACvB7D,MAAA,EAAQD;QACV;QACA4D,UAAA,CAAWG,OAAO,CAACF,OAAA;MACrB;IACF;IAEAjD,UAAA,CAAWmB,UAAA;EACb,GACA,CAACnB,UAAA,EAAYG,MAAA,EAAQgB,UAAA,EAAY3B,OAAA,CAAQ;EAG3C,oBACE4D,KAAA,CAAC;IACCC,SAAA,EAAW,CAACtE,SAAA,EAAWqB,UAAA,IAAc,GAAGrB,SAAA,YAAqB,CAAC,CAACuE,MAAM,CAACC,OAAA,EAASC,IAAI,CAAC;IACpFC,eAAA,EAAiB;IACjBC,GAAA,EAAK3D,SAAA;4BAELqD,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGtE,SAAA,QAAiB;8BAClCqE,KAAA,CAAC;QAAIC,SAAA,EAAW,GAAGtE,SAAA,UAAmB;gCAEpC4E,IAAA,CAAC;UAAIN,SAAA,EAAW,GAAGtE,SAAA,aAAsB;oBACtC2C,YAAA,gBACCiC,IAAA,CAAC;YACCC,GAAA,EAAKxE,IAAA,EAAMyE,QAAA;YACX,0BAAwBtE,KAAA;YACxB,mCAAiCD,UAAA;YACjCwE,GAAA,EAAKpC;4BAGPiC,IAAA,CAACvG,IAAA;yBAGLgG,KAAA,CAAC;UAAIC,SAAA,EAAW,GAAGtE,SAAA,oBAA6B;kCAC9C4E,IAAA,CAAC;YAAIN,SAAA,EAAW,GAAGtE,SAAA,mBAA4B;sBAC5C9B,cAAA,CAAe6D,iBAAA,CAAkBiD,MAAM,CAACC,QAAQ,EAAEvD,IAAA;cAEpDN,MAAA,CAAO8D,UAAU,mBAChBb,KAAA,CAAC;YAAIC,SAAA,EAAW,GAAGtE,SAAA,WAAoB;uBACpC2D,cAAA,gBACCiB,IAAA,CAACxG,aAAA;cACCkG,SAAA,EAAW,GAAGtE,SAAA,yBAAkC;cAChDmF,QAAA,EAAU1D,KAAA,EAAO2D,KAAA,EAAOC,QAAA;cACxBnD,IAAA,EAAME,UAAA;wBAEN,aAAAwC,IAAA,CAACzG,MAAA;gBACCmH,WAAA,EAAY;gBACZC,EAAA,EAAG;gBACHC,IAAA,EAAK;gBACLC,OAAA,EAAUC,CAAA;kBACRA,CAAA,CAAEtC,cAAc;gBAClB;gBACAuC,KAAK;gBACLC,OAAA,EAASjE,CAAA,CAAE;;iBAGb,M,aAEJiD,IAAA,CAACzG,MAAA;cACCmH,WAAA,EAAY;cACZH,QAAA,EAAU1D,KAAA,EAAO2D,KAAA,EAAOC,QAAA;cACxBE,EAAA,EAAG;cACHC,IAAA,EAAK;cACLC,OAAA,EAASA,CAAA;gBACPrE,MAAA,CAAOyE,eAAe,CAAC/F,iCAAA,EAAmC;kBACxDgG,OAAA,EAAS;oBAAErF;kBAAQ;gBACrB;cACF;cACAkF,KAAK;cACLC,OAAA,EAASjE,CAAA,CAAE;6BAEbiD,IAAA,CAACzG,MAAA;cACCmH,WAAA,EAAY;cACZhB,SAAA,EAAW,GAAGtE,SAAA,gBAAyB;cACvCmF,QAAA,EAAU1D,KAAA,EAAO2D,KAAA,EAAOC,QAAA;cACxBG,IAAA,EAAK;cACLC,OAAA,EAAUC,GAAA;gBACRA,GAAA,CAAEtC,cAAc;gBAChBN,YAAA;cACF;cACA6C,KAAK;cACLC,OAAA,EAASjE,CAAA,CAAE;;;;uBAMrBiD,IAAA,CAAC;QAAIN,SAAA,EAAW,GAAGtE,SAAA,aAAsB;kBACvC,aAAA4E,IAAA,CAACtC,qBAAA;UAAsBgC,SAAA,EAAW,GAAGtE,SAAA,sBAA+B;oBAClE,aAAA4E,IAAA,CAAC;sBAAQvE,IAAA,EAAMyE;;;;QAIpBtE,KAAA,gBAAQoE,IAAA,CAACvC,cAAA;MAAe0D,MAAA,EAAQ9C;SAAmB,MACnDU,cAAA,gBACCiB,IAAA,CAAChF,YAAA;MACCS,IAAA,EAAMC,MAAA;MACN8B,UAAA,EAAYA,UAAA;MACZ4D,WAAA,EAAarE,CAAA,CAAE,qBAAqB;QAClCsE,KAAA,EAAO/H,cAAA,CAAe6D,iBAAA,CAAkBiD,MAAM,CAACC,QAAQ,EAAEvD,IAAA;MAC3D;MACAwE,UAAA,EAAW;MACXC,kBAAA,EAAoBpC,yBAAA;MACpBqC,gBAAA,EAAkBrE,iBAAA,CAAkBG;SAEpC;;AAGV;AAEA,OAAO,MAAMmE,eAAA,GAAmBjG,KAAA;EAC9B,oBACEwE,IAAA,CAAC/E,6BAAA;IAA+B,GAAGO,KAAK;IAAEkG,OAAO;cAC/C,aAAA1B,IAAA,CAACzE,SAAA;MAAW,GAAGC;;;AAGrB","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","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 +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":"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","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":[]}
|