@payloadcms/richtext-lexical 3.0.0-beta.55 → 3.0.0-beta.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/chunk-OAQL5GDK.js +2 -0
- package/dist/exports/client/chunk-OAQL5GDK.js.map +7 -0
- package/dist/exports/client/component-V5QZ7EVZ.js +2 -0
- package/dist/exports/client/component-V5QZ7EVZ.js.map +7 -0
- package/dist/exports/client/{component-PEFMKIXI.js → component-YNZTTMBY.js} +2 -2
- package/dist/exports/client/component-YNZTTMBY.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/blocks/component/index.js +1 -1
- package/dist/features/blocks/component/index.js.map +1 -1
- package/dist/features/blocks/feature.server.d.ts.map +1 -1
- package/dist/features/blocks/feature.server.js +1 -11
- package/dist/features/blocks/feature.server.js.map +1 -1
- package/dist/features/heading/feature.server.d.ts +5 -1
- package/dist/features/heading/feature.server.d.ts.map +1 -1
- package/dist/features/heading/feature.server.js.map +1 -1
- package/dist/features/link/feature.server.d.ts.map +1 -1
- package/dist/features/link/feature.server.js +1 -11
- package/dist/features/link/feature.server.js.map +1 -1
- package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/index.js +9 -5
- package/dist/features/link/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/converter.d.ts.map +1 -1
- package/dist/features/migrations/lexicalPluginToLexical/converter/converters/heading/converter.js.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.d.ts.map +1 -1
- package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
- package/dist/features/upload/component/index.d.ts.map +1 -1
- package/dist/features/upload/component/index.js +34 -11
- package/dist/features/upload/component/index.js.map +1 -1
- package/dist/features/upload/feature.server.d.ts.map +1 -1
- package/dist/features/upload/feature.server.js +1 -11
- package/dist/features/upload/feature.server.js.map +1 -1
- package/dist/field/index.js +8 -8
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/nodeTypes.d.ts +11 -7
- package/dist/nodeTypes.d.ts.map +1 -1
- package/dist/nodeTypes.js.map +1 -1
- package/dist/utilities/fieldsDrawer/Drawer.d.ts +18 -0
- package/dist/utilities/fieldsDrawer/Drawer.d.ts.map +1 -0
- package/dist/utilities/fieldsDrawer/Drawer.js +26 -0
- package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -0
- package/dist/utilities/fieldsDrawer/DrawerContent.d.ts +4 -0
- package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -0
- package/dist/{features/link/drawer/index.js → utilities/fieldsDrawer/DrawerContent.js} +38 -40
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -0
- package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
- package/dist/utilities/generateSchemaMap.js +9 -0
- package/dist/utilities/generateSchemaMap.js.map +1 -1
- package/dist/utilities/migrateSlateToLexical/index.js +2 -2
- package/dist/utilities/migrateSlateToLexical/index.js.map +1 -1
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts +9 -0
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts.map +1 -0
- package/dist/utilities/migrateSlateToLexical/{recurse.js → migrateDocumentFieldsRecursively.js} +7 -7
- package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js.map +1 -0
- package/dist/utilities/upgradeLexicalData/index.d.ts +11 -0
- package/dist/utilities/upgradeLexicalData/index.d.ts.map +1 -0
- package/dist/utilities/upgradeLexicalData/index.js +101 -0
- package/dist/utilities/upgradeLexicalData/index.js.map +1 -0
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts +9 -0
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -0
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js +74 -0
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -0
- package/package.json +9 -9
- package/dist/exports/client/chunk-5RJS5YZT.js +0 -2
- package/dist/exports/client/chunk-5RJS5YZT.js.map +0 -7
- package/dist/exports/client/component-F6V63OLD.js +0 -2
- package/dist/exports/client/component-F6V63OLD.js.map +0 -7
- package/dist/exports/client/component-PEFMKIXI.js.map +0 -7
- package/dist/features/link/drawer/index.d.ts +0 -5
- package/dist/features/link/drawer/index.d.ts.map +0 -1
- package/dist/features/link/drawer/index.js.map +0 -1
- package/dist/features/link/drawer/types.d.ts +0 -10
- package/dist/features/link/drawer/types.d.ts.map +0 -1
- package/dist/features/link/drawer/types.js +0 -3
- package/dist/features/link/drawer/types.js.map +0 -1
- package/dist/features/upload/component/ExtraFieldsDrawer/index.d.ts +0 -12
- package/dist/features/upload/component/ExtraFieldsDrawer/index.d.ts.map +0 -1
- package/dist/features/upload/component/ExtraFieldsDrawer/index.js +0 -123
- package/dist/features/upload/component/ExtraFieldsDrawer/index.js.map +0 -1
- package/dist/utilities/migrateSlateToLexical/recurse.d.ts +0 -9
- package/dist/utilities/migrateSlateToLexical/recurse.d.ts.map +0 -1
- package/dist/utilities/migrateSlateToLexical/recurse.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/features/upload/component/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } 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 useConfig,\n useDocumentDrawer,\n useDrawerSlug,\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, useReducer, useRef, useState } from 'react'\n\nimport type { ClientComponentProps } from '../../typesClient.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\nimport type { UploadData } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../lexical/config/client/EditorConfigProvider.js'\nimport { EnabledRelationshipsCondition } from '../../relationship/utils/EnabledRelationshipsCondition.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport { $isUploadNode } from '../nodes/UploadNode.js'\nimport { ExtraFieldsUploadDrawer } from './ExtraFieldsDrawer/index.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 const {\n collections,\n routes: { api },\n serverURL,\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n\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, setRelatedCollection] = useState<ClientCollectionConfig>(() =>\n collections.find((coll) => coll.slug === relationTo),\n )\n\n const drawerSlug = useDrawerSlug('upload-drawer')\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 (json) => {\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 (payload: KeyboardEvent) => {\n if (isSelected && $isNodeSelection($getSelection())) {\n const event: KeyboardEvent = payload\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 const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if uploadRef.target or anything WITHIN uploadRef.target was clicked\n if (event.target === uploadRef.current || uploadRef.current?.contains(event.target as Node)) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as ClientComponentProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\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?.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?.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?.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} />}\n {hasExtraFields ? (\n <ExtraFieldsUploadDrawer\n drawerSlug={drawerSlug}\n relatedCollection={relatedCollection}\n {...props}\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"],"names":["useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","DrawerToggler","File","useConfig","useDocumentDrawer","useDrawerSlug","usePayloadAPI","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","React","useCallback","useEffect","useReducer","useRef","useState","useEditorConfigContext","EnabledRelationshipsCondition","INSERT_UPLOAD_WITH_DRAWER_COMMAND","$isUploadNode","ExtraFieldsUploadDrawer","baseClass","initialParams","depth","Component","props","data","fields","relationTo","value","nodeKey","collections","routes","api","serverURL","uploadRef","editor","isSelected","setSelected","clearSelection","editorConfig","field","i18n","t","cacheBust","dispatchCacheBust","state","relatedCollection","setRelatedCollection","find","coll","slug","drawerSlug","DocumentDrawer","DocumentDrawerToggler","closeDrawer","id","collectionSlug","setParams","thumbnailSRC","thumbnailURL","url","removeUpload","update","remove","updateUpload","json","$onDelete","payload","event","preventDefault","node","onClick","target","current","contains","shiftKey","registerCommand","hasExtraFields","resolvedFeatureMap","get","sanitizedClientFeatureProps","div","className","filter","Boolean","join","contentEditable","ref","img","alt","filename","data-lexical-upload-id","data-lexical-upload-relation-to","src","labels","singular","isEditable","disabled","readOnly","buttonStyle","el","icon","e","round","tooltip","dispatchCommand","replace","strong","onSave","UploadComponent","uploads"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/upload/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 useConfig,\n useDocumentDrawer,\n useDrawerSlug,\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, useReducer, useRef, useState } from 'react'\n\nimport type { ClientComponentProps } from '../../typesClient.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\nimport type { UploadData, 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/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 const {\n collections,\n routes: { api },\n serverURL,\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { closeModal } = useModal()\n\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 drawerSlug = useDrawerSlug('upload-drawer')\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 const onClick = useCallback(\n (event: MouseEvent) => {\n // Check if uploadRef.target or anything WITHIN uploadRef.target was clicked\n if (event.target === uploadRef.current || uploadRef.current?.contains(event.target as Node)) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as ClientComponentProps<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: UploadNode | null = $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?.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?.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?.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} />}\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"],"names":["useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","DrawerToggler","File","useConfig","useDocumentDrawer","useDrawerSlug","useModal","usePayloadAPI","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","React","useCallback","useEffect","useReducer","useRef","useState","useEditorConfigContext","FieldsDrawer","EnabledRelationshipsCondition","INSERT_UPLOAD_WITH_DRAWER_COMMAND","$isUploadNode","baseClass","initialParams","depth","Component","props","data","fields","relationTo","value","nodeKey","collections","routes","api","serverURL","uploadRef","closeModal","editor","isSelected","setSelected","clearSelection","editorConfig","field","i18n","t","cacheBust","dispatchCacheBust","state","relatedCollection","find","coll","slug","drawerSlug","DocumentDrawer","DocumentDrawerToggler","closeDrawer","id","collectionSlug","setParams","thumbnailSRC","thumbnailURL","url","removeUpload","update","remove","updateUpload","$onDelete","event","preventDefault","node","onClick","target","current","contains","shiftKey","registerCommand","hasExtraFields","resolvedFeatureMap","get","sanitizedClientFeatureProps","onExtraFieldsDrawerSubmit","_","uploadNode","newData","getData","setData","div","className","filter","Boolean","join","contentEditable","ref","img","alt","filename","data-lexical-upload-id","data-lexical-upload-relation-to","src","labels","singular","isEditable","disabled","readOnly","buttonStyle","el","icon","e","round","tooltip","dispatchCommand","replace","strong","onSave","drawerTitle","label","featureKey","handleDrawerSubmit","schemaPathSuffix","UploadComponent","uploads"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../src/features/upload/feature.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,KAAK,EAKN,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../src/features/upload/feature.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,KAAK,EAKN,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAYnE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE;QACZ,CAAC,UAAU,EAAE,cAAc,GAAG;YAC5B,MAAM,EAAE,KAAK,EAAE,CAAA;SAChB,CAAA;KACF,CAAA;IACD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AASD,eAAO,MAAM,aAAa,6HAyNxB,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { traverseFields } from '@payloadcms/ui/utilities/buildFieldSchemaMap/traverseFields';
|
|
2
1
|
import { sanitizeFields } from 'payload';
|
|
3
2
|
// eslint-disable-next-line payload/no-imports-from-exports-dir
|
|
4
3
|
import { UploadFeatureClient } from '../../exports/client/index.js';
|
|
@@ -45,21 +44,12 @@ export const UploadFeature = createServerFeature({
|
|
|
45
44
|
return {
|
|
46
45
|
ClientFeature: UploadFeatureClient,
|
|
47
46
|
clientFeatureProps: clientProps,
|
|
48
|
-
generateSchemaMap: ({
|
|
47
|
+
generateSchemaMap: ({ props })=>{
|
|
49
48
|
if (!props?.collections) return null;
|
|
50
49
|
const schemaMap = new Map();
|
|
51
|
-
const validRelationships = config.collections.map((c)=>c.slug) || [];
|
|
52
50
|
for(const collection in props.collections){
|
|
53
51
|
if (props.collections[collection].fields?.length) {
|
|
54
52
|
schemaMap.set(collection, props.collections[collection].fields);
|
|
55
|
-
traverseFields({
|
|
56
|
-
config,
|
|
57
|
-
fields: props.collections[collection].fields,
|
|
58
|
-
i18n,
|
|
59
|
-
schemaMap,
|
|
60
|
-
schemaPath: collection,
|
|
61
|
-
validRelationships
|
|
62
|
-
});
|
|
63
53
|
}
|
|
64
54
|
}
|
|
65
55
|
return schemaMap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/features/upload/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 { traverseFields } from '@payloadcms/ui/utilities/buildFieldSchemaMap/traverseFields'\nimport { sanitizeFields } from 'payload'\n\nimport type { UploadFeaturePropsClient } from './feature.client.js'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport { UploadFeatureClient } from '../../exports/client/index.js'\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 { UploadNode } 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, 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 requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n }\n }\n\n return {\n ClientFeature: UploadFeatureClient,\n clientFeatureProps: clientProps,\n generateSchemaMap: ({ config, i18n, props }) => {\n if (!props?.collections) return null\n\n const schemaMap = new Map<string, Field[]>()\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 schemaMap.set(collection, props.collections[collection].fields)\n traverseFields({\n config,\n fields: props.collections[collection].fields,\n i18n,\n schemaMap,\n schemaPath: collection,\n validRelationships,\n })\n }\n }\n\n return schemaMap\n },\n i18n,\n nodes: [\n createNode({\n converters: {\n html: {\n converter: async ({ node, req }) => {\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?: TypeWithID & FileData\n } = {}\n\n try {\n await populate({\n id,\n collectionSlug: node.relationTo,\n currentDepth: 0,\n data: uploadDocument,\n depth: 1,\n draft: false,\n key: 'value',\n overrideAccess: false,\n req,\n showHiddenFields: false,\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: FileSize & {\n url?: string\n } = 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: [UploadNode.getType()],\n },\n },\n getSubFields: ({ node, req }) => {\n const collection = req.payload.collections[node?.relationTo]\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: UploadNode,\n validations: [uploadValidation(props)],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'upload',\n})\n"],"names":["traverseFields","sanitizeFields","UploadFeatureClient","populate","createServerFeature","createNode","uploadPopulationPromiseHOC","i18n","UploadNode","uploadValidation","getAbsoluteURL","url","payload","startsWith","config","serverURL","UploadFeature","feature","_config","isRoot","props","collections","clientProps","collection","hasExtraFields","fields","length","validRelationships","map","c","slug","requireFieldLevelRichTextEditor","ClientFeature","clientFeatureProps","generateSchemaMap","schemaMap","Map","set","schemaPath","nodes","converters","html","converter","node","req","id","value","uploadDocument","collectionSlug","relationTo","currentDepth","data","depth","draft","key","overrideAccess","showHiddenFields","ignored","console","error","mimeType","filename","sizes","Object","keys","width","height","pictureHTML","size","imageSize","filesize","imageSizeURL","nodeTypes","getType","getSubFields","collectionFieldSchema","Array","isArray","getSubFieldsData","graphQLPopulationPromises","hooks","afterRead","populationPromises","populateDepth","maxDepth","undefined","push","validations","sanitizedServerFeatureProps"],"mappings":"AAUA,SAASA,cAAc,QAAQ,8DAA6D;AAC5F,SAASC,cAAc,QAAQ,UAAS;AAIxC,+DAA+D;AAC/D,SAASC,mBAAmB,QAAQ,gCAA+B;AACnE,SAASC,QAAQ,QAAQ,oCAAmC;AAC5D,SAASC,mBAAmB,QAAQ,yCAAwC;AAC5E,SAASC,UAAU,QAAQ,sBAAqB;AAChD,SAASC,0BAA0B,QAAQ,gCAA+B;AAC1E,SAASC,IAAI,QAAQ,YAAW;AAChC,SAASC,UAAU,QAAQ,wBAAuB;AAClD,SAASC,gBAAgB,QAAQ,gBAAe;AAiBhD;;CAEC,GACD,SAASC,eAAeC,GAAW,EAAEC,OAAgB;IACnD,OAAOD,KAAKE,WAAW,UAAUF,MAAM,AAACC,CAAAA,SAASE,QAAQC,aAAa,EAAC,IAAKJ;AAC9E;AAEA,OAAO,MAAMK,gBAAgBZ,oBAI3B;IACAa,SAAS,OAAO,EAAEH,QAAQI,OAAO,EAAEC,MAAM,EAAEC,KAAK,EAAE;QAChD,IAAI,CAACA,OAAO;YACVA,QAAQ;gBAAEC,aAAa,CAAC;YAAE;QAC5B;QAEA,MAAMC,cAAwC;YAC5CD,aAAa,CAAC;QAChB;QACA,IAAID,MAAMC,WAAW,EAAE;YACrB,IAAK,MAAME,cAAcH,MAAMC,WAAW,CAAE;gBAC1CC,YAAYD,WAAW,CAACE,WAAW,GAAG;oBACpCC,gBAAgBJ,MAAMC,WAAW,CAACE,WAAW,CAACE,MAAM,CAACC,MAAM,IAAI;gBACjE;YACF;QACF;QAEA,MAAMC,qBAAqBT,QAAQG,WAAW,CAACO,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAK,EAAE;QAEvE,IAAK,MAAMP,cAAcH,MAAMC,WAAW,CAAE;YAC1C,IAAID,MAAMC,WAAW,CAACE,WAAW,CAACE,MAAM,EAAEC,QAAQ;gBAChDN,MAAMC,WAAW,CAACE,WAAW,CAACE,MAAM,GAAG,MAAMxB,eAAe;oBAC1Da,QAAQI;oBACRO,QAAQL,MAAMC,WAAW,CAACE,WAAW,CAACE,MAAM;oBAC5CM,iCAAiCZ;oBACjCQ;gBACF;YACF;QACF;QAEA,OAAO;YACLK,eAAe9B;YACf+B,oBAAoBX;YACpBY,mBAAmB,CAAC,EAAEpB,MAAM,EAAEP,IAAI,EAAEa,KAAK,EAAE;gBACzC,IAAI,CAACA,OAAOC,aAAa,OAAO;gBAEhC,MAAMc,YAAY,IAAIC;gBACtB,MAAMT,qBAAqBb,OAAOO,WAAW,CAACO,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAK,EAAE;gBAEtE,IAAK,MAAMP,cAAcH,MAAMC,WAAW,CAAE;oBAC1C,IAAID,MAAMC,WAAW,CAACE,WAAW,CAACE,MAAM,EAAEC,QAAQ;wBAChDS,UAAUE,GAAG,CAACd,YAAYH,MAAMC,WAAW,CAACE,WAAW,CAACE,MAAM;wBAC9DzB,eAAe;4BACbc;4BACAW,QAAQL,MAAMC,WAAW,CAACE,WAAW,CAACE,MAAM;4BAC5ClB;4BACA4B;4BACAG,YAAYf;4BACZI;wBACF;oBACF;gBACF;gBAEA,OAAOQ;YACT;YACA5B;YACAgC,OAAO;gBACLlC,WAAW;oBACTmC,YAAY;wBACVC,MAAM;4BACJC,WAAW,OAAO,EAAEC,IAAI,EAAEC,GAAG,EAAE;gCAC7B,mBAAmB;gCACnB,MAAMC,KAAKF,MAAMG,OAAOD,MAAMF,MAAMG,MAAM,8BAA8B;;gCAExE,IAAIF,KAAKhC,SAAS;oCAChB,MAAMmC,iBAEF,CAAC;oCAEL,IAAI;wCACF,MAAM5C,SAAS;4CACb0C;4CACAG,gBAAgBL,KAAKM,UAAU;4CAC/BC,cAAc;4CACdC,MAAMJ;4CACNK,OAAO;4CACPC,OAAO;4CACPC,KAAK;4CACLC,gBAAgB;4CAChBX;4CACAY,kBAAkB;wCACpB;oCACF,EAAE,OAAOC,SAAS;wCAChB,sCAAsC;wCACtCC,QAAQC,KAAK,CACX,kEACAF,SACA,SACAd;wCAEF,OAAO,CAAC,OAAO,CAAC;oCAClB;oCAEA,MAAMhC,MAAMD,eAAeqC,gBAAgBD,OAAOnC,KAAKiC,KAAKhC;oCAE5D;;mBAEC,GACD,IAAI,CAACmC,gBAAgBD,OAAOc,UAAU/C,WAAW,UAAU;wCACzD,OAAO,CAAC,SAAS,EAAEF,IAAI,4BAA4B,EAAEoC,eAAeD,KAAK,EAAEe,SAAS,IAAI,CAAC;oCAC3F;oCAEA;;mBAEC,GACD,IACE,CAACd,gBAAgBD,OAAOgB,SACxB,CAACC,OAAOC,IAAI,CAACjB,gBAAgBD,OAAOgB,OAAOpC,MAAM,EACjD;wCACA,OAAO,CAAC,UAAU,EAAEf,IAAI,OAAO,EAAEoC,gBAAgBD,OAAOe,SAAS,SAAS,EAAEd,gBAAgBD,OAAOmB,MAAM,WAAW,EAAElB,gBAAgBD,OAAOoB,OAAO,GAAG,CAAC;oCAC1J;oCAEA;;mBAEC,GACD,IAAIC,cAAc;oCAElB,qDAAqD;oCACrD,IAAK,MAAMC,QAAQrB,eAAeD,KAAK,EAAEgB,MAAO;wCAC9C,MAAMO,YAEFtB,eAAeD,KAAK,EAAEgB,KAAK,CAACM,KAAK;wCAErC,kDAAkD;wCAClD,IACE,CAACC,UAAUJ,KAAK,IAChB,CAACI,UAAUH,MAAM,IACjB,CAACG,UAAUT,QAAQ,IACnB,CAACS,UAAUC,QAAQ,IACnB,CAACD,UAAUR,QAAQ,IACnB,CAACQ,UAAU1D,GAAG,EACd;4CACA;wCACF;wCACA,MAAM4D,eAAe7D,eAAe2D,WAAW1D,KAAKiC,KAAKhC;wCAEzDuD,eAAe,CAAC,gBAAgB,EAAEI,aAAa,qBAAqB,EAAEF,UAAUJ,KAAK,CAAC,WAAW,EAAEI,UAAUT,QAAQ,CAAC,EAAE,CAAC;oCAC3H;oCAEA,0BAA0B;oCAC1BO,eAAe,CAAC,UAAU,EAAExD,IAAI,qBAAqB,EAAEoC,eAAeD,KAAK,EAAEmB,MAAM,UAAU,EAAElB,eAAeD,KAAK,EAAEoB,OAAO,EAAE,CAAC;oCAC/HC,eAAe;oCACf,OAAOA;gCACT,OAAO;oCACL,OAAO,CAAC,UAAU,EAAEtB,GAAG,IAAI,CAAC;gCAC9B;4BACF;4BACA2B,WAAW;gCAAChE,WAAWiE,OAAO;6BAAG;wBACnC;oBACF;oBACAC,cAAc,CAAC,EAAE/B,IAAI,EAAEC,GAAG,EAAE;wBAC1B,MAAMrB,aAAaqB,IAAIhC,OAAO,CAACS,WAAW,CAACsB,MAAMM,WAAW;wBAE5D,IAAI1B,YAAY;4BACd,MAAMoD,wBAAwBvD,OAAOC,aAAa,CAACsB,MAAMM,WAAW,EAAExB;4BAEtE,IAAImD,MAAMC,OAAO,CAACF,wBAAwB;gCACxC,IAAI,CAACA,uBAAuBjD,QAAQ;oCAClC,OAAO;gCACT;gCACA,OAAOiD;4BACT;wBACF;wBACA,OAAO;oBACT;oBACAG,kBAAkB,CAAC,EAAEnC,IAAI,EAAE;wBACzB,OAAOA,MAAMlB;oBACf;oBACAsD,2BAA2B;wBAACzE,2BAA2Bc;qBAAO;oBAC9D4D,OAAO;wBACLC,WAAW;4BACT,CAAC,EACC/B,YAAY,EACZE,KAAK,EACLC,KAAK,EACLV,IAAI,EACJY,cAAc,EACd2B,kBAAkB,EAClBtC,GAAG,EACHY,gBAAgB,EACjB;gCACC,IAAI,CAACb,MAAMG,OAAO;oCAChB,OAAOH;gCACT;gCACA,MAAMpB,aAAaqB,IAAIhC,OAAO,CAACS,WAAW,CAACsB,MAAMM,WAAW;gCAE5D,IAAI,CAAC1B,YAAY;oCACf,OAAOoB;gCACT;gCACA,mBAAmB;gCACnB,MAAME,KAAKF,MAAMG,OAAOD,MAAMF,MAAMG,MAAM,8BAA8B;;gCAExE,MAAMqC,gBACJ/D,OAAOgE,aAAaC,aAAajE,OAAOgE,WAAWhC,QAAQhC,OAAOgE,WAAWhC;gCAE/E8B,mBAAmBI,IAAI,CACrBnF,SAAS;oCACP0C;oCACAG,gBAAgBzB,WAAWT,MAAM,CAACgB,IAAI;oCACtCoB;oCACAC,MAAMR;oCACNS,OAAO+B;oCACP9B;oCACAC,KAAK;oCACLC;oCACAX;oCACAY;gCACF;gCAGF,OAAOb;4BACT;yBACD;oBACH;oBACAA,MAAMnC;oBACN+E,aAAa;wBAAC9E,iBAAiBW;qBAAO;gBACxC;aACD;YACDoE,6BAA6BpE;QAC/B;IACF;IACAkC,KAAK;AACP,GAAE"}
|
|
1
|
+
{"version":3,"sources":["../../../src/features/upload/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 './feature.client.js'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport { UploadFeatureClient } from '../../exports/client/index.js'\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 { UploadNode } 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, 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 requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n }\n }\n\n return {\n ClientFeature: UploadFeatureClient,\n clientFeatureProps: clientProps,\n generateSchemaMap: ({ props }) => {\n if (!props?.collections) return null\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 ({ node, req }) => {\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?: TypeWithID & FileData\n } = {}\n\n try {\n await populate({\n id,\n collectionSlug: node.relationTo,\n currentDepth: 0,\n data: uploadDocument,\n depth: 1,\n draft: false,\n key: 'value',\n overrideAccess: false,\n req,\n showHiddenFields: false,\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: FileSize & {\n url?: string\n } = 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: [UploadNode.getType()],\n },\n },\n getSubFields: ({ node, req }) => {\n const collection = req.payload.collections[node?.relationTo]\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: UploadNode,\n validations: [uploadValidation(props)],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'upload',\n})\n"],"names":["sanitizeFields","UploadFeatureClient","populate","createServerFeature","createNode","uploadPopulationPromiseHOC","i18n","UploadNode","uploadValidation","getAbsoluteURL","url","payload","startsWith","config","serverURL","UploadFeature","feature","_config","isRoot","props","collections","clientProps","collection","hasExtraFields","fields","length","validRelationships","map","c","slug","requireFieldLevelRichTextEditor","ClientFeature","clientFeatureProps","generateSchemaMap","schemaMap","Map","set","nodes","converters","html","converter","node","req","id","value","uploadDocument","collectionSlug","relationTo","currentDepth","data","depth","draft","key","overrideAccess","showHiddenFields","ignored","console","error","mimeType","filename","sizes","Object","keys","width","height","pictureHTML","size","imageSize","filesize","imageSizeURL","nodeTypes","getType","getSubFields","collectionFieldSchema","Array","isArray","getSubFieldsData","graphQLPopulationPromises","hooks","afterRead","populationPromises","populateDepth","maxDepth","undefined","push","validations","sanitizedServerFeatureProps"],"mappings":"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"}
|