@payloadcms/richtext-lexical 3.57.0-canary.7 → 3.57.0-internal.1d2ebbc
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/{Field-D5RCNN4A.js → Field-PKJPWZJL.js} +2 -2
- package/dist/exports/client/Field-PKJPWZJL.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/component-3PENNOM3.js +2 -0
- package/dist/exports/client/component-3PENNOM3.js.map +7 -0
- package/dist/exports/client/index.js +10 -10
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/client/pendingComponent-WFSCE6LJ.js +2 -0
- package/dist/exports/client/pendingComponent-WFSCE6LJ.js.map +7 -0
- package/dist/features/align/server/i18n.d.ts.map +1 -1
- package/dist/features/align/server/i18n.js +0 -6
- package/dist/features/align/server/i18n.js.map +1 -1
- package/dist/features/blockquote/server/i18n.d.ts.map +1 -1
- package/dist/features/blockquote/server/i18n.js +0 -3
- package/dist/features/blockquote/server/i18n.js.map +1 -1
- package/dist/features/blocks/server/i18n.d.ts.map +1 -1
- package/dist/features/blocks/server/i18n.js +0 -9
- package/dist/features/blocks/server/i18n.js.map +1 -1
- package/dist/features/heading/client/index.d.ts.map +1 -1
- package/dist/features/heading/client/index.js +0 -60
- package/dist/features/heading/client/index.js.map +1 -1
- package/dist/features/heading/server/i18n.d.ts.map +1 -1
- package/dist/features/heading/server/i18n.js +0 -3
- package/dist/features/heading/server/i18n.js.map +1 -1
- package/dist/features/heading/server/index.d.ts.map +1 -1
- package/dist/features/heading/server/index.js +0 -1
- package/dist/features/heading/server/index.js.map +1 -1
- package/dist/features/horizontalRule/server/i18n.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/i18n.js +0 -3
- package/dist/features/horizontalRule/server/i18n.js.map +1 -1
- package/dist/features/indent/server/i18n.d.ts.map +1 -1
- package/dist/features/indent/server/i18n.js +0 -4
- package/dist/features/indent/server/i18n.js.map +1 -1
- package/dist/features/link/server/i18n.d.ts.map +1 -1
- package/dist/features/link/server/i18n.js +0 -4
- package/dist/features/link/server/i18n.js.map +1 -1
- package/dist/features/lists/checklist/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/checklist/server/i18n.js +0 -3
- package/dist/features/lists/checklist/server/i18n.js.map +1 -1
- package/dist/features/lists/orderedList/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/orderedList/server/i18n.js +0 -3
- package/dist/features/lists/orderedList/server/i18n.js.map +1 -1
- package/dist/features/lists/unorderedList/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/unorderedList/server/i18n.js +0 -3
- package/dist/features/lists/unorderedList/server/i18n.js.map +1 -1
- package/dist/features/paragraph/server/i18n.d.ts.map +1 -1
- package/dist/features/paragraph/server/i18n.js +0 -4
- package/dist/features/paragraph/server/i18n.js.map +1 -1
- package/dist/features/relationship/server/i18n.d.ts.map +1 -1
- package/dist/features/relationship/server/i18n.js +0 -3
- package/dist/features/relationship/server/i18n.js.map +1 -1
- package/dist/features/textState/i18n.d.ts.map +1 -1
- package/dist/features/textState/i18n.js +0 -3
- package/dist/features/textState/i18n.js.map +1 -1
- package/dist/features/upload/client/component/index.d.ts +0 -2
- package/dist/features/upload/client/component/index.d.ts.map +1 -1
- package/dist/features/upload/client/component/index.js +24 -28
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/client/index.d.ts.map +1 -1
- package/dist/features/upload/client/index.js +2 -1
- package/dist/features/upload/client/index.js.map +1 -1
- package/dist/features/upload/client/nodes/PendingUploadNode.d.ts +17 -0
- package/dist/features/upload/client/nodes/PendingUploadNode.d.ts.map +1 -0
- package/dist/features/upload/client/nodes/PendingUploadNode.js +57 -0
- package/dist/features/upload/client/nodes/PendingUploadNode.js.map +1 -0
- package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.js +0 -6
- package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/client/pendingComponent/index.d.ts +7 -0
- package/dist/features/upload/client/pendingComponent/index.d.ts.map +1 -0
- package/dist/features/upload/client/{component/pending → pendingComponent}/index.js +1 -1
- package/dist/features/upload/client/pendingComponent/index.js.map +1 -0
- package/dist/features/upload/client/plugin/index.d.ts +0 -6
- package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
- package/dist/features/upload/client/plugin/index.js +31 -67
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/i18n.d.ts.map +1 -1
- package/dist/features/upload/server/i18n.js +0 -3
- package/dist/features/upload/server/i18n.js.map +1 -1
- package/dist/features/upload/server/index.d.ts.map +1 -1
- package/dist/features/upload/server/index.js +4 -1
- package/dist/features/upload/server/index.js.map +1 -1
- package/dist/features/upload/server/nodes/PendingUploadNode.d.ts +42 -0
- package/dist/features/upload/server/nodes/PendingUploadNode.d.ts.map +1 -0
- package/dist/features/upload/server/nodes/PendingUploadNode.js +92 -0
- package/dist/features/upload/server/nodes/PendingUploadNode.js.map +1 -0
- package/dist/features/upload/server/nodes/UploadNode.d.ts +0 -16
- package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.js +2 -9
- package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/server/nodes/conversions.d.ts +3 -0
- package/dist/features/upload/server/nodes/conversions.d.ts.map +1 -1
- package/dist/features/upload/server/nodes/conversions.js +20 -20
- package/dist/features/upload/server/nodes/conversions.js.map +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +1 -1
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +0 -6
- package/dist/i18n.js.map +1 -1
- package/package.json +6 -6
- package/dist/exports/client/Field-D5RCNN4A.js.map +0 -7
- package/dist/exports/client/component-VDJI45F2.js +0 -2
- package/dist/exports/client/component-VDJI45F2.js.map +0 -7
- package/dist/features/upload/client/component/pending/index.d.ts +0 -3
- package/dist/features/upload/client/component/pending/index.d.ts.map +0 -1
- package/dist/features/upload/client/component/pending/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingUploadNode.js","names":["$applyNodeReplacement","React","$convertPendingUploadElement","PendingUploadServerNode","PendingUploadComponent","lazy","then","module","default","PendingUploadNode","clone","node","getType","importDOM","img","conversion","domNode","$createPendingUploadNode","priority","importJSON","serializedNode","importedData","formID","src","data","setFormat","format","decorate","_jsx","__data","nodeKey","getKey","exportJSON","$isPendingUploadNode"],"sources":["../../../../../src/features/upload/client/nodes/PendingUploadNode.tsx"],"sourcesContent":["'use client'\nimport type { DOMConversionMap, LexicalNode } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type {\n PendingUploadData,\n SerializedPendingUploadNode,\n} from '../../server/nodes/PendingUploadNode.js'\n\nimport { $convertPendingUploadElement } from '../../server/nodes/conversions.js'\nimport { PendingUploadServerNode } from '../../server/nodes/PendingUploadNode.js'\n\nconst PendingUploadComponent = React.lazy(() =>\n import('../../client/pendingComponent/index.js').then((module) => ({\n default: module.PendingUploadComponent,\n })),\n)\n\nexport class PendingUploadNode extends PendingUploadServerNode {\n static override clone(node: PendingUploadServerNode): PendingUploadServerNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importDOM(): DOMConversionMap<HTMLImageElement> {\n return {\n img: () => ({\n conversion: (domNode) => $convertPendingUploadElement(domNode, $createPendingUploadNode),\n priority: 0,\n }),\n }\n }\n\n static override importJSON(serializedNode: SerializedPendingUploadNode): PendingUploadNode {\n const importedData: PendingUploadData = {\n formID: serializedNode.formID,\n src: serializedNode.src,\n }\n\n const node = $createPendingUploadNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n override decorate(): JSX.Element {\n return <PendingUploadComponent data={this.__data} nodeKey={this.getKey()} />\n }\n\n override exportJSON(): SerializedPendingUploadNode {\n return super.exportJSON()\n }\n}\n\nexport function $createPendingUploadNode({ data }: { data: PendingUploadData }): PendingUploadNode {\n return $applyNodeReplacement(new PendingUploadNode({ data }))\n}\n\nexport function $isPendingUploadNode(\n node: LexicalNode | null | undefined,\n): node is PendingUploadNode {\n return node instanceof PendingUploadNode\n}\n"],"mappings":"AAAA;;;AAIA,SAASA,qBAAqB,QAAQ;AACtC,YAAYC,KAAA,MAAW;AAOvB,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,uBAAuB,QAAQ;AAExC,MAAMC,sBAAA,gBAAyBH,KAAA,CAAMI,IAAI,CAAC,MACxC,MAAM,CAAC,0CAA0CC,IAAI,CAAEC,MAAA,KAAY;EACjEC,OAAA,EAASD,MAAA,CAAOH;AAClB;AAGF,OAAO,MAAMK,iBAAA,SAA0BN,uBAAA;EACrC,OAAgBO,MAAMC,IAA6B,EAA2B;IAC5E,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO,KAAK,CAACA,OAAA;EACf;EAEA,OAAgBC,UAAA,EAAgD;IAC9D,OAAO;MACLC,GAAA,EAAKA,CAAA,MAAO;QACVC,UAAA,EAAaC,OAAA,IAAYd,4BAAA,CAA6Bc,OAAA,EAASC,wBAAA;QAC/DC,QAAA,EAAU;MACZ;IACF;EACF;EAEA,OAAgBC,WAAWC,cAA2C,EAAqB;IACzF,MAAMC,YAAA,GAAkC;MACtCC,MAAA,EAAQF,cAAA,CAAeE,MAAM;MAC7BC,GAAA,EAAKH,cAAA,CAAeG;IACtB;IAEA,MAAMZ,IAAA,GAAOM,wBAAA,CAAyB;MAAEO,IAAA,EAAMH;IAAa;IAC3DV,IAAA,CAAKc,SAAS,CAACL,cAAA,CAAeM,MAAM;IAEpC,OAAOf,IAAA;EACT;EAESgB,SAAA,EAAwB;IAC/B,oBAAOC,IAAA,CAACxB,sBAAA;MAAuBoB,IAAA,EAAM,IAAI,CAACK,MAAM;MAAEC,OAAA,EAAS,IAAI,CAACC,MAAM;;EACxE;EAESC,WAAA,EAA0C;IACjD,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,OAAO,SAASf,yBAAyB;EAAEO;AAAI,CAA+B;EAC5E,OAAOxB,qBAAA,CAAsB,IAAIS,iBAAA,CAAkB;IAAEe;EAAK;AAC5D;AAEA,OAAO,SAASS,qBACdtB,IAAoC;EAEpC,OAAOA,IAAA,YAAgBF,iBAAA;AACzB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/nodes/UploadNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAMhC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"UploadNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/nodes/UploadNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAMhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAGxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAMnE,qBAAa,UAAW,SAAQ,gBAAgB;WAC9B,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB;WAI/C,OAAO,IAAI,MAAM;WAIjB,SAAS,IAAI,gBAAgB,CAAC,gBAAgB,CAAC;WAS/C,UAAU,CAAC,cAAc,EAAE,oBAAoB,GAAG,UAAU;IAsBnE,QAAQ,IAAI,GAAG,CAAC,OAAO;IAIvB,UAAU,IAAI,oBAAoB;CAG5C;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,GACL,EAAE;IACD,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAA;CAC/D,GAAG,UAAU,CAKb;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,UAAU,CAEtF"}
|
|
@@ -6,7 +6,6 @@ import { $applyNodeReplacement } from 'lexical';
|
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import { $convertUploadElement } from '../../server/nodes/conversions.js';
|
|
8
8
|
import { UploadServerNode } from '../../server/nodes/UploadNode.js';
|
|
9
|
-
import { PendingUploadComponent } from '../component/pending/index.js';
|
|
10
9
|
const RawUploadComponent = /*#__PURE__*/React.lazy(() => import('../../client/component/index.js').then(module => ({
|
|
11
10
|
default: module.UploadComponent
|
|
12
11
|
})));
|
|
@@ -36,7 +35,6 @@ export class UploadNode extends UploadServerNode {
|
|
|
36
35
|
const importedData = {
|
|
37
36
|
id: serializedNode.id,
|
|
38
37
|
fields: serializedNode.fields,
|
|
39
|
-
pending: serializedNode.pending,
|
|
40
38
|
relationTo: serializedNode.relationTo,
|
|
41
39
|
value: serializedNode.value
|
|
42
40
|
};
|
|
@@ -47,12 +45,8 @@ export class UploadNode extends UploadServerNode {
|
|
|
47
45
|
return node;
|
|
48
46
|
}
|
|
49
47
|
decorate() {
|
|
50
|
-
if (this.__data.pending) {
|
|
51
|
-
return /*#__PURE__*/_jsx(PendingUploadComponent, {});
|
|
52
|
-
}
|
|
53
48
|
return /*#__PURE__*/_jsx(RawUploadComponent, {
|
|
54
49
|
data: this.__data,
|
|
55
|
-
format: this.__format,
|
|
56
50
|
nodeKey: this.getKey()
|
|
57
51
|
});
|
|
58
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadNode.js","names":["ObjectID","$applyNodeReplacement","React","$convertUploadElement","UploadServerNode","
|
|
1
|
+
{"version":3,"file":"UploadNode.js","names":["ObjectID","$applyNodeReplacement","React","$convertUploadElement","UploadServerNode","RawUploadComponent","lazy","then","module","default","UploadComponent","UploadNode","clone","node","getType","importDOM","img","conversion","domNode","$createUploadNode","priority","importJSON","serializedNode","version","value","id","toHexString","importedData","fields","relationTo","data","setFormat","format","decorate","_jsx","__data","nodeKey","getKey","exportJSON","$isUploadNode"],"sources":["../../../../../src/features/upload/client/nodes/UploadNode.tsx"],"sourcesContent":["'use client'\nimport type { DOMConversionMap, LexicalNode } from 'lexical'\nimport type { JSX } from 'react'\n\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type { SerializedUploadNode, UploadData } from '../../server/nodes/UploadNode.js'\n\nimport { $convertUploadElement } from '../../server/nodes/conversions.js'\nimport { UploadServerNode } from '../../server/nodes/UploadNode.js'\n\nconst RawUploadComponent = React.lazy(() =>\n import('../../client/component/index.js').then((module) => ({ default: module.UploadComponent })),\n)\n\nexport class UploadNode extends UploadServerNode {\n static override clone(node: UploadServerNode): UploadServerNode {\n return super.clone(node)\n }\n\n static override getType(): string {\n return super.getType()\n }\n\n static override importDOM(): DOMConversionMap<HTMLImageElement> {\n return {\n img: (node) => ({\n conversion: (domNode) => $convertUploadElement(domNode, $createUploadNode),\n priority: 0,\n }),\n }\n }\n\n static override importJSON(serializedNode: SerializedUploadNode): UploadNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n if (serializedNode.version === 2 && !serializedNode?.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const importedData: UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n\n const node = $createUploadNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n override decorate(): JSX.Element {\n return <RawUploadComponent data={this.__data} nodeKey={this.getKey()} />\n }\n\n override exportJSON(): SerializedUploadNode {\n return super.exportJSON()\n }\n}\n\nexport function $createUploadNode({\n data,\n}: {\n data: Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>\n}): UploadNode {\n if (!data?.id) {\n data.id = new ObjectID.default().toHexString()\n }\n return $applyNodeReplacement(new UploadNode({ data: data as UploadData }))\n}\n\nexport function $isUploadNode(node: LexicalNode | null | undefined): node is UploadNode {\n return node instanceof UploadNode\n}\n"],"mappings":"AAAA;;;AAIA,OAAOA,QAAA,MAAc;AACrB,SAASC,qBAAqB,QAAQ;AACtC,YAAYC,KAAA,MAAW;AAIvB,SAASC,qBAAqB,QAAQ;AACtC,SAASC,gBAAgB,QAAQ;AAEjC,MAAMC,kBAAA,gBAAqBH,KAAA,CAAMI,IAAI,CAAC,MACpC,MAAM,CAAC,mCAAmCC,IAAI,CAAEC,MAAA,KAAY;EAAEC,OAAA,EAASD,MAAA,CAAOE;AAAgB;AAGhG,OAAO,MAAMC,UAAA,SAAmBP,gBAAA;EAC9B,OAAgBQ,MAAMC,IAAsB,EAAoB;IAC9D,OAAO,KAAK,CAACD,KAAA,CAAMC,IAAA;EACrB;EAEA,OAAgBC,QAAA,EAAkB;IAChC,OAAO,KAAK,CAACA,OAAA;EACf;EAEA,OAAgBC,UAAA,EAAgD;IAC9D,OAAO;MACLC,GAAA,EAAMH,IAAA,KAAU;QACdI,UAAA,EAAaC,OAAA,IAAYf,qBAAA,CAAsBe,OAAA,EAASC,iBAAA;QACxDC,QAAA,EAAU;MACZ;IACF;EACF;EAEA,OAAgBC,WAAWC,cAAoC,EAAc;IAC3E,IAAIA,cAAA,CAAeC,OAAO,KAAK,KAAMD,cAAA,EAAgBE,KAAA,EAAqCC,EAAA,EAAI;MAC5FH,cAAA,CAAeE,KAAK,GAAGF,cAAC,CAAeE,KAAK,CAA+BC,EAAE;IAC/E;IACA,IAAIH,cAAA,CAAeC,OAAO,KAAK,KAAK,CAACD,cAAA,EAAgBG,EAAA,EAAI;MACvDH,cAAA,CAAeG,EAAE,GAAG,IAAIzB,QAAA,CAASS,OAAO,GAAGiB,WAAW;MACtDJ,cAAA,CAAeC,OAAO,GAAG;IAC3B;IAEA,MAAMI,YAAA,GAA2B;MAC/BF,EAAA,EAAIH,cAAA,CAAeG,EAAE;MACrBG,MAAA,EAAQN,cAAA,CAAeM,MAAM;MAC7BC,UAAA,EAAYP,cAAA,CAAeO,UAAU;MACrCL,KAAA,EAAOF,cAAA,CAAeE;IACxB;IAEA,MAAMX,IAAA,GAAOM,iBAAA,CAAkB;MAAEW,IAAA,EAAMH;IAAa;IACpDd,IAAA,CAAKkB,SAAS,CAACT,cAAA,CAAeU,MAAM;IAEpC,OAAOnB,IAAA;EACT;EAESoB,SAAA,EAAwB;IAC/B,oBAAOC,IAAA,CAAC7B,kBAAA;MAAmByB,IAAA,EAAM,IAAI,CAACK,MAAM;MAAEC,OAAA,EAAS,IAAI,CAACC,MAAM;;EACpE;EAESC,WAAA,EAAmC;IAC1C,OAAO,KAAK,CAACA,UAAA;EACf;AACF;AAEA,OAAO,SAASnB,kBAAkB;EAChCW;AAAI,CAGL;EACC,IAAI,CAACA,IAAA,EAAML,EAAA,EAAI;IACbK,IAAA,CAAKL,EAAE,GAAG,IAAIzB,QAAA,CAASS,OAAO,GAAGiB,WAAW;EAC9C;EACA,OAAOzB,qBAAA,CAAsB,IAAIU,UAAA,CAAW;IAAEmB,IAAA,EAAMA;EAAmB;AACzE;AAEA,OAAO,SAASS,cAAc1B,IAAoC;EAChE,OAAOA,IAAA,YAAgBF,UAAA;AACzB","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PendingUploadData } from '../../server/nodes/PendingUploadNode.js';
|
|
2
|
+
import '../component/index.scss';
|
|
3
|
+
export declare const PendingUploadComponent: (props: {
|
|
4
|
+
data: PendingUploadData;
|
|
5
|
+
nodeKey: string;
|
|
6
|
+
}) => React.ReactNode;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/pendingComponent/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAEhF,OAAO,yBAAyB,CAAA;AAEhC,eAAO,MAAM,sBAAsB,UAAW;IAC5C,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;CAChB,KAAG,KAAK,CAAC,SAMT,CAAA"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
4
|
import { ShimmerEffect } from '@payloadcms/ui';
|
|
5
|
-
export const PendingUploadComponent =
|
|
5
|
+
export const PendingUploadComponent = props => {
|
|
6
6
|
return /*#__PURE__*/_jsx("div", {
|
|
7
7
|
className: 'lexical-upload',
|
|
8
8
|
children: /*#__PURE__*/_jsx(ShimmerEffect, {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["ShimmerEffect","PendingUploadComponent","props","_jsx","className","height","width"],"sources":["../../../../../src/features/upload/client/pendingComponent/index.tsx"],"sourcesContent":["'use client'\n\nimport { ShimmerEffect } from '@payloadcms/ui'\n\nimport type { PendingUploadData } from '../../server/nodes/PendingUploadNode.js'\n\nimport '../component/index.scss'\n\nexport const PendingUploadComponent = (props: {\n data: PendingUploadData\n nodeKey: string\n}): React.ReactNode => {\n return (\n <div className={'lexical-upload'}>\n <ShimmerEffect height={'95px'} width={'203px'} />\n </div>\n )\n}\n"],"mappings":"AAAA;;;AAEA,SAASA,aAAa,QAAQ;AAM9B,OAAO,MAAMC,sBAAA,GAA0BC,KAAA;EAIrC,oBACEC,IAAA,CAAC;IAAIC,SAAA,EAAW;cACd,aAAAD,IAAA,CAACH,aAAA;MAAcK,MAAA,EAAQ;MAAQC,KAAA,EAAO;;;AAG5C","ignoreList":[]}
|
|
@@ -3,12 +3,6 @@ import type { PluginComponent } from '../../../typesClient.js';
|
|
|
3
3
|
import type { UploadData } from '../../server/nodes/UploadNode.js';
|
|
4
4
|
import type { UploadFeaturePropsClient } from '../index.js';
|
|
5
5
|
export type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>;
|
|
6
|
-
declare global {
|
|
7
|
-
interface DragEvent {
|
|
8
|
-
rangeOffset?: number;
|
|
9
|
-
rangeParent?: Node;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
6
|
export declare const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload>;
|
|
13
7
|
export declare const UploadPlugin: PluginComponent<UploadFeaturePropsClient>;
|
|
14
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/plugin/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/plugin/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAmB7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAM3D,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAEpG,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,mBAAmB,CAC9B,CAAA;AAYxC,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,wBAAwB,CAySlE,CAAA"}
|
|
@@ -6,28 +6,11 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext
|
|
|
6
6
|
import { $dfsIterator, $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils';
|
|
7
7
|
import { useBulkUpload, useConfig, useEffectEvent, useModal } from '@payloadcms/ui';
|
|
8
8
|
import ObjectID from 'bson-objectid';
|
|
9
|
-
import { $
|
|
9
|
+
import { $getPreviousSelection, $getSelection, $isParagraphNode, $isRangeSelection, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_LOW, createCommand, DROP_COMMAND, PASTE_COMMAND } from 'lexical';
|
|
10
10
|
import React, { useEffect } from 'react';
|
|
11
11
|
import { UploadDrawer } from '../drawer/index.js';
|
|
12
|
-
import { $
|
|
13
|
-
|
|
14
|
-
const target = event.target;
|
|
15
|
-
return !!(isHTMLElement(target) && !target.closest('code, span.editor-image') && isHTMLElement(target.parentElement) && target.parentElement.closest('div.ContentEditable__root'));
|
|
16
|
-
}
|
|
17
|
-
function getDragSelection(event) {
|
|
18
|
-
// Source: https://github.com/AlessioGr/lexical/blob/main/packages/lexical-playground/src/plugins/ImagesPlugin/index.tsx
|
|
19
|
-
let range;
|
|
20
|
-
const domSelection = getDOMSelectionFromTarget(event.target);
|
|
21
|
-
if (document.caretRangeFromPoint) {
|
|
22
|
-
range = document.caretRangeFromPoint(event.clientX, event.clientY);
|
|
23
|
-
} else if (event.rangeParent && domSelection !== null) {
|
|
24
|
-
domSelection.collapse(event.rangeParent, event.rangeOffset || 0);
|
|
25
|
-
range = domSelection.getRangeAt(0);
|
|
26
|
-
} else {
|
|
27
|
-
throw Error(`Cannot get the selection when dragging`);
|
|
28
|
-
}
|
|
29
|
-
return range;
|
|
30
|
-
}
|
|
12
|
+
import { $isPendingUploadNode, PendingUploadNode } from '../nodes/PendingUploadNode.js';
|
|
13
|
+
import { $createUploadNode, UploadNode } from '../nodes/UploadNode.js';
|
|
31
14
|
export const INSERT_UPLOAD_COMMAND = createCommand('INSERT_UPLOAD_COMMAND');
|
|
32
15
|
export const UploadPlugin = () => {
|
|
33
16
|
const $ = _c(18);
|
|
@@ -75,20 +58,17 @@ export const UploadPlugin = () => {
|
|
|
75
58
|
editor.update(() => {
|
|
76
59
|
for (const dfsNode_0 of $dfsIterator()) {
|
|
77
60
|
const node_0 = dfsNode_0.node;
|
|
78
|
-
if ($
|
|
79
|
-
const
|
|
80
|
-
if (
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
}));
|
|
91
|
-
}
|
|
61
|
+
if ($isPendingUploadNode(node_0)) {
|
|
62
|
+
const newDoc = newDocsMap.get(node_0.getData().formID);
|
|
63
|
+
if (newDoc) {
|
|
64
|
+
node_0.replace($createUploadNode({
|
|
65
|
+
data: {
|
|
66
|
+
id: new ObjectID.default().toHexString(),
|
|
67
|
+
fields: newDoc.doc,
|
|
68
|
+
relationTo: newDoc.collectionSlug,
|
|
69
|
+
value: newDoc.doc.id
|
|
70
|
+
}
|
|
71
|
+
}));
|
|
92
72
|
}
|
|
93
73
|
}
|
|
94
74
|
}
|
|
@@ -118,16 +98,13 @@ export const UploadPlugin = () => {
|
|
|
118
98
|
if (!editor.hasNodes([UploadNode])) {
|
|
119
99
|
throw new Error("UploadPlugin: UploadNode not registered on editor");
|
|
120
100
|
}
|
|
121
|
-
return mergeRegister(editor.registerNodeTransform(
|
|
122
|
-
const
|
|
123
|
-
if (!nodeData_1?.pending) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
101
|
+
return mergeRegister(editor.registerNodeTransform(PendingUploadNode, node_1 => {
|
|
102
|
+
const nodeData = node_1.getData();
|
|
126
103
|
const upload_0 = async function upload() {
|
|
127
104
|
let transformedImage = null;
|
|
128
|
-
const src =
|
|
129
|
-
const formID =
|
|
130
|
-
if (src
|
|
105
|
+
const src = nodeData.src;
|
|
106
|
+
const formID = nodeData.formID;
|
|
107
|
+
if (src.startsWith("data:")) {
|
|
131
108
|
const mimeMatch = src.match(/data:(image\/[a-zA-Z]+);base64,/);
|
|
132
109
|
const mimeType = mimeMatch ? mimeMatch[1] : "image/png";
|
|
133
110
|
const base64Data = src.replace(/^data:image\/[a-zA-Z]+;base64,/, "");
|
|
@@ -146,11 +123,10 @@ export const UploadPlugin = () => {
|
|
|
146
123
|
formID
|
|
147
124
|
};
|
|
148
125
|
} else {
|
|
149
|
-
if (src
|
|
126
|
+
if (src.startsWith("http") || src.startsWith("https")) {
|
|
150
127
|
const res = await fetch(src);
|
|
151
128
|
const blob = await res.blob();
|
|
152
|
-
const
|
|
153
|
-
const file_1 = new File([blob], inferredFileName, {
|
|
129
|
+
const file_1 = new File([blob], "pasted-image." + blob.type.split("/")[1], {
|
|
154
130
|
type: blob.type
|
|
155
131
|
});
|
|
156
132
|
transformedImage = {
|
|
@@ -214,12 +190,10 @@ export const UploadPlugin = () => {
|
|
|
214
190
|
const selection_0 = $getSelection() || $getPreviousSelection();
|
|
215
191
|
if ($isRangeSelection(selection_0)) {
|
|
216
192
|
for (const file_3 of files_0) {
|
|
217
|
-
const pendingUploadNode = new
|
|
193
|
+
const pendingUploadNode = new PendingUploadNode({
|
|
218
194
|
data: {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
src: URL.createObjectURL(file_3.file)
|
|
222
|
-
}
|
|
195
|
+
formID: file_3.formID,
|
|
196
|
+
src: URL.createObjectURL(file_3.file)
|
|
223
197
|
}
|
|
224
198
|
});
|
|
225
199
|
const {
|
|
@@ -261,20 +235,13 @@ export const UploadPlugin = () => {
|
|
|
261
235
|
event_0.preventDefault();
|
|
262
236
|
event_0.stopPropagation();
|
|
263
237
|
editor.update(() => {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
const selection_1 = $createRangeSelection();
|
|
267
|
-
if (range !== null && range !== undefined) {
|
|
268
|
-
selection_1.applyDOMRange(range);
|
|
269
|
-
}
|
|
270
|
-
$setSelection(selection_1);
|
|
238
|
+
const selection_1 = $getSelection() || $getPreviousSelection();
|
|
239
|
+
if ($isRangeSelection(selection_1)) {
|
|
271
240
|
for (const file_5 of files_1) {
|
|
272
|
-
const pendingUploadNode_0 = new
|
|
241
|
+
const pendingUploadNode_0 = new PendingUploadNode({
|
|
273
242
|
data: {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
src: URL.createObjectURL(file_5.file)
|
|
277
|
-
}
|
|
243
|
+
formID: file_5.formID,
|
|
244
|
+
src: URL.createObjectURL(file_5.file)
|
|
278
245
|
}
|
|
279
246
|
});
|
|
280
247
|
const {
|
|
@@ -344,11 +311,8 @@ function _temp3(t0) {
|
|
|
344
311
|
function _temp4() {
|
|
345
312
|
for (const dfsNode of $dfsIterator()) {
|
|
346
313
|
const node = dfsNode.node;
|
|
347
|
-
if ($
|
|
348
|
-
|
|
349
|
-
if (nodeData?.pending) {
|
|
350
|
-
node.remove();
|
|
351
|
-
}
|
|
314
|
+
if ($isPendingUploadNode(node)) {
|
|
315
|
+
node.remove();
|
|
352
316
|
}
|
|
353
317
|
}
|
|
354
318
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$dfsIterator","$insertNodeToNearestRoot","mergeRegister","useBulkUpload","useConfig","useEffectEvent","useModal","ObjectID","$createRangeSelection","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","$setSelection","COMMAND_PRIORITY_EDITOR","COMMAND_PRIORITY_LOW","createCommand","DROP_COMMAND","getDOMSelectionFromTarget","isHTMLElement","PASTE_COMMAND","React","useEffect","UploadDrawer","$createUploadNode","$isUploadNode","UploadNode","canDropImage","event","target","closest","parentElement","getDragSelection","range","domSelection","document","caretRangeFromPoint","clientX","clientY","rangeParent","collapse","rangeOffset","getRangeAt","Error","INSERT_UPLOAD_COMMAND","UploadPlugin","$","editor","config","t0","collections","drawerSlug","bulkUploadDrawerSlug","setCollectionSlug","setInitialForms","setOnCancel","setOnSuccess","setSelectableCollections","isModalOpen","openModal","t1","t2","files","length","initialForms","map","_temp","uploadCollections","filter","_temp2","_temp3","update","_temp4","newDocs","newDocsMap","Map","_temp5","dfsNode_0","node_0","dfsNode","node","nodeData_0","getData","nodeData","pending","newDoc","get","formID","replace","data","id","default","toHexString","fields","relationTo","collectionSlug","value","doc","openBulkUpload","hasNodes","registerNodeTransform","node_1","nodeData_1","upload_0","upload","transformedImage","src","startsWith","mimeMatch","match","mimeType","base64Data","byteCharacters","atob","byteNumbers","Array","i","charCodeAt","byteArray","Uint8Array","file_0","File","split","type","file","res","fetch","blob","inferredFileName","pop","file_1","registerCommand","payload","selection","uploadNode","focus","focusNode","getNode","__first","remove","ClipboardEvent","clipboardData","types","includes","files_0","from","forEach","file_2","push","alt","selection_0","file_3","pendingUploadNode","URL","createObjectURL","focus_0","focusNode_0","event_0","DragEvent","dt","dataTransfer","files_1","file_4","preventDefault","stopPropagation","selection_1","undefined","applyDOMRange","file_5","pendingUploadNode_0","focus_1","focusNode_1","t3","t4","_jsx","enabledCollectionSlugs","_temp6","slug","slug_0"],"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 { $dfsIterator, $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useBulkUpload, useConfig, useEffectEvent, useModal } from '@payloadcms/ui'\nimport ObjectID from 'bson-objectid'\nimport {\n $createRangeSelection,\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n $setSelection,\n COMMAND_PRIORITY_EDITOR,\n COMMAND_PRIORITY_LOW,\n createCommand,\n DROP_COMMAND,\n getDOMSelectionFromTarget,\n isHTMLElement,\n PASTE_COMMAND,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { Internal_UploadData, UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../index.js'\n\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $createUploadNode, $isUploadNode, UploadNode } from '../nodes/UploadNode.js'\n\nexport type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>\n\ndeclare global {\n interface DragEvent {\n rangeOffset?: number\n rangeParent?: Node\n }\n}\n\nfunction canDropImage(event: DragEvent): boolean {\n const target = event.target\n return !!(\n isHTMLElement(target) &&\n !target.closest('code, span.editor-image') &&\n isHTMLElement(target.parentElement) &&\n target.parentElement.closest('div.ContentEditable__root')\n )\n}\n\nfunction getDragSelection(event: DragEvent): null | Range | undefined {\n // Source: https://github.com/AlessioGr/lexical/blob/main/packages/lexical-playground/src/plugins/ImagesPlugin/index.tsx\n let range\n const domSelection = getDOMSelectionFromTarget(event.target)\n if (document.caretRangeFromPoint) {\n range = document.caretRangeFromPoint(event.clientX, event.clientY)\n } else if (event.rangeParent && domSelection !== null) {\n domSelection.collapse(event.rangeParent, event.rangeOffset || 0)\n range = domSelection.getRangeAt(0)\n } else {\n throw Error(`Cannot get the selection when dragging`)\n }\n\n return range\n}\n\nexport const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload> =\n createCommand('INSERT_UPLOAD_COMMAND')\n\ntype FileToUpload = {\n alt?: string\n file: File\n /**\n * Bulk Upload Form ID that should be created, which can then be matched\n * against the node formID if the upload is successful\n */\n formID: string\n}\n\nexport const UploadPlugin: PluginComponent<UploadFeaturePropsClient> = () => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n const {\n drawerSlug: bulkUploadDrawerSlug,\n setCollectionSlug,\n setInitialForms,\n setOnCancel,\n setOnSuccess,\n setSelectableCollections,\n } = useBulkUpload()\n\n const { isModalOpen, openModal } = useModal()\n\n const openBulkUpload = useEffectEvent(({ files }: { files: FileToUpload[] }) => {\n if (files?.length === 0) {\n return\n }\n\n setInitialForms((initialForms) => [\n ...(initialForms ?? []),\n ...files.map((file) => ({\n file: file.file,\n formID: file.formID,\n })),\n ])\n\n if (!isModalOpen(bulkUploadDrawerSlug)) {\n const uploadCollections = collections.filter(({ upload }) => !!upload).map(({ slug }) => slug)\n if (!uploadCollections.length || !uploadCollections[0]) {\n return\n }\n\n setCollectionSlug(uploadCollections[0])\n setSelectableCollections(uploadCollections)\n\n setOnCancel(() => {\n // Remove all the pending upload nodes that were added but not uploaded\n editor.update(() => {\n for (const dfsNode of $dfsIterator()) {\n const node = dfsNode.node\n\n if ($isUploadNode(node)) {\n const nodeData = node.getData()\n if ((nodeData as Internal_UploadData)?.pending) {\n node.remove()\n }\n }\n }\n })\n })\n\n setOnSuccess((newDocs) => {\n const newDocsMap = new Map(newDocs.map((doc) => [doc.formID, doc]))\n editor.update(() => {\n for (const dfsNode of $dfsIterator()) {\n const node = dfsNode.node\n if ($isUploadNode(node)) {\n const nodeData: Internal_UploadData = node.getData()\n\n if (nodeData?.pending) {\n const newDoc = newDocsMap.get(nodeData.pending?.formID)\n if (newDoc) {\n node.replace(\n $createUploadNode({\n data: {\n id: new ObjectID.default().toHexString(),\n fields: {},\n relationTo: newDoc.collectionSlug,\n value: newDoc.doc.id,\n } as UploadData,\n }),\n )\n }\n }\n }\n }\n })\n })\n\n openModal(bulkUploadDrawerSlug)\n }\n })\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n return mergeRegister(\n /**\n * Handle auto-uploading files if you copy & paste an image dom element from the clipboard\n */\n editor.registerNodeTransform(UploadNode, (node) => {\n const nodeData: Internal_UploadData = node.getData()\n if (!nodeData?.pending) {\n return\n }\n\n async function upload() {\n let transformedImage: FileToUpload | null = null\n\n const src = nodeData?.pending?.src\n const formID = nodeData?.pending?.formID as string\n\n if (src?.startsWith('data:')) {\n // It's a base64-encoded image\n const mimeMatch = src.match(/data:(image\\/[a-zA-Z]+);base64,/)\n const mimeType = mimeMatch ? mimeMatch[1] : 'image/png' // Default to PNG if MIME type not found\n const base64Data = src.replace(/^data:image\\/[a-zA-Z]+;base64,/, '')\n const byteCharacters = atob(base64Data)\n const byteNumbers = new Array(byteCharacters.length)\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i)\n }\n const byteArray = new Uint8Array(byteNumbers)\n const file = new File([byteArray], 'pasted-image.' + mimeType?.split('/')[1], {\n type: mimeType,\n })\n transformedImage = { alt: undefined, file, formID }\n } else if (src?.startsWith('http') || src?.startsWith('https')) {\n // It's an image URL\n const res = await fetch(src)\n const blob = await res.blob()\n const inferredFileName =\n src.split('/').pop() || 'pasted-image' + blob.type.split('/')[1]\n const file = new File([blob], inferredFileName, {\n type: blob.type,\n })\n\n transformedImage = { alt: undefined, file, formID }\n }\n\n if (!transformedImage) {\n return\n }\n\n openBulkUpload({ files: [transformedImage] })\n }\n void upload()\n }),\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 // we need to get the focus node before inserting the block node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n // Pending UploadNodes are automatically created when importDOM is called. However, if you paste a file from your computer\n // directly, importDOM won't be called, as it's not a HTML dom element. So we need to handle that case here.\n\n if (!(event instanceof ClipboardEvent)) {\n return false\n }\n const clipboardData = event.clipboardData\n\n if (!clipboardData?.types?.length || clipboardData?.types?.includes('text/html')) {\n // HTML is handled through importDOM => registerNodeTransform for pending UploadNode\n return false\n }\n\n const files: FileToUpload[] = []\n if (clipboardData?.files?.length) {\n Array.from(clipboardData.files).forEach((file) => {\n files.push({\n alt: '',\n file,\n formID: new ObjectID.default().toHexString(),\n })\n })\n }\n\n if (files.length) {\n // Insert a pending UploadNode for each image\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n for (const file of files) {\n const pendingUploadNode = new UploadNode({\n data: {\n pending: {\n formID: file.formID,\n src: URL.createObjectURL(file.file),\n },\n } as Internal_UploadData,\n })\n // we need to get the focus node before inserting the upload node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(pendingUploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n }\n })\n\n // Open the bulk drawer - the node transform will not open it for us, as it does not handle blob/file uploads\n openBulkUpload({ files })\n\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n // Handle drag & drop of files from the desktop into the editor\n editor.registerCommand(\n DROP_COMMAND,\n (event) => {\n if (!(event instanceof DragEvent)) {\n return false\n }\n\n const dt = event.dataTransfer\n\n if (!dt?.types?.length) {\n return false\n }\n\n const files: FileToUpload[] = []\n if (dt?.files?.length) {\n Array.from(dt.files).forEach((file) => {\n files.push({\n alt: '',\n file,\n formID: new ObjectID.default().toHexString(),\n })\n })\n }\n\n if (files.length) {\n // Prevent the default browser drop handling, which would open the file in the browser\n event.preventDefault()\n event.stopPropagation()\n\n // Insert a PendingUploadNode for each image\n editor.update(() => {\n if (canDropImage(event)) {\n const range = getDragSelection(event)\n const selection = $createRangeSelection()\n if (range !== null && range !== undefined) {\n selection.applyDOMRange(range)\n }\n $setSelection(selection)\n\n for (const file of files) {\n const pendingUploadNode = new UploadNode({\n data: {\n pending: {\n formID: file.formID,\n src: URL.createObjectURL(file.file),\n },\n } as Internal_UploadData,\n })\n // we need to get the focus node before inserting the upload node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(pendingUploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n }\n })\n\n // Open the bulk drawer - the node transform will not open it for us, as it does not handle blob/file uploads\n openBulkUpload({ files })\n\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor])\n\n return <UploadDrawer enabledCollectionSlugs={collections.map(({ slug }) => slug)} />\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$dfsIterator","$insertNodeToNearestRoot","mergeRegister","useBulkUpload","useConfig","useEffectEvent","useModal","ObjectID","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","COMMAND_PRIORITY_LOW","createCommand","DROP_COMMAND","PASTE_COMMAND","React","useEffect","UploadDrawer","$isPendingUploadNode","PendingUploadNode","$createUploadNode","UploadNode","INSERT_UPLOAD_COMMAND","UploadPlugin","$","editor","config","t0","collections","drawerSlug","bulkUploadDrawerSlug","setCollectionSlug","setInitialForms","setOnCancel","setOnSuccess","setSelectableCollections","isModalOpen","openModal","t1","t2","files","length","initialForms","map","_temp","uploadCollections","filter","_temp2","_temp3","update","_temp4","newDocs","newDocsMap","Map","_temp5","dfsNode_0","node_0","dfsNode","node","newDoc","get","getData","formID","replace","data","id","default","toHexString","fields","doc","relationTo","collectionSlug","value","openBulkUpload","hasNodes","Error","registerNodeTransform","node_1","nodeData","upload_0","upload","transformedImage","src","startsWith","mimeMatch","match","mimeType","base64Data","byteCharacters","atob","byteNumbers","Array","i","charCodeAt","byteArray","Uint8Array","file_0","File","split","type","file","res","fetch","blob","file_1","registerCommand","payload","selection","uploadNode","focus","focusNode","getNode","__first","remove","event","ClipboardEvent","clipboardData","types","includes","files_0","from","forEach","file_2","push","alt","selection_0","file_3","pendingUploadNode","URL","createObjectURL","focus_0","focusNode_0","event_0","DragEvent","dt","dataTransfer","files_1","file_4","preventDefault","stopPropagation","selection_1","file_5","pendingUploadNode_0","focus_1","focusNode_1","t3","t4","_jsx","enabledCollectionSlugs","_temp6","slug","slug_0"],"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 { $dfsIterator, $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useBulkUpload, useConfig, useEffectEvent, useModal } from '@payloadcms/ui'\nimport ObjectID from 'bson-objectid'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n COMMAND_PRIORITY_LOW,\n createCommand,\n DROP_COMMAND,\n PASTE_COMMAND,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../index.js'\n\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $isPendingUploadNode, PendingUploadNode } from '../nodes/PendingUploadNode.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\ntype FileToUpload = {\n alt?: string\n file: File\n /**\n * Bulk Upload Form ID that should be created, which can then be matched\n * against the node formID if the upload is successful\n */\n formID: string\n}\n\nexport const UploadPlugin: PluginComponent<UploadFeaturePropsClient> = () => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n const {\n drawerSlug: bulkUploadDrawerSlug,\n setCollectionSlug,\n setInitialForms,\n setOnCancel,\n setOnSuccess,\n setSelectableCollections,\n } = useBulkUpload()\n\n const { isModalOpen, openModal } = useModal()\n\n const openBulkUpload = useEffectEvent(({ files }: { files: FileToUpload[] }) => {\n if (files?.length === 0) {\n return\n }\n\n setInitialForms((initialForms) => [\n ...(initialForms ?? []),\n ...files.map((file) => ({\n file: file.file,\n formID: file.formID,\n })),\n ])\n\n if (!isModalOpen(bulkUploadDrawerSlug)) {\n const uploadCollections = collections.filter(({ upload }) => !!upload).map(({ slug }) => slug)\n if (!uploadCollections.length || !uploadCollections[0]) {\n return\n }\n\n setCollectionSlug(uploadCollections[0])\n setSelectableCollections(uploadCollections)\n\n setOnCancel(() => {\n // Remove all the pending upload nodes that were added but not uploaded\n editor.update(() => {\n for (const dfsNode of $dfsIterator()) {\n const node = dfsNode.node\n\n if ($isPendingUploadNode(node)) {\n node.remove()\n }\n }\n })\n })\n\n setOnSuccess((newDocs) => {\n const newDocsMap = new Map(newDocs.map((doc) => [doc.formID, doc]))\n editor.update(() => {\n for (const dfsNode of $dfsIterator()) {\n const node = dfsNode.node\n if ($isPendingUploadNode(node)) {\n const newDoc = newDocsMap.get(node.getData().formID)\n if (newDoc) {\n node.replace(\n $createUploadNode({\n data: {\n id: new ObjectID.default().toHexString(),\n fields: newDoc.doc,\n relationTo: newDoc.collectionSlug,\n value: newDoc.doc.id,\n },\n }),\n )\n }\n }\n }\n })\n })\n\n openModal(bulkUploadDrawerSlug)\n }\n })\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n return mergeRegister(\n /**\n * Handle auto-uploading files if you copy & paste an image dom element from the clipboard\n */\n editor.registerNodeTransform(PendingUploadNode, (node) => {\n const nodeData = node.getData()\n async function upload() {\n let transformedImage: FileToUpload | null = null\n\n const src = nodeData.src\n const formID = nodeData.formID\n\n if (src.startsWith('data:')) {\n // It's a base64-encoded image\n const mimeMatch = src.match(/data:(image\\/[a-zA-Z]+);base64,/)\n const mimeType = mimeMatch ? mimeMatch[1] : 'image/png' // Default to PNG if MIME type not found\n const base64Data = src.replace(/^data:image\\/[a-zA-Z]+;base64,/, '')\n const byteCharacters = atob(base64Data)\n const byteNumbers = new Array(byteCharacters.length)\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i)\n }\n const byteArray = new Uint8Array(byteNumbers)\n const file = new File([byteArray], 'pasted-image.' + mimeType?.split('/')[1], {\n type: mimeType,\n })\n transformedImage = { alt: undefined, file, formID }\n } else if (src.startsWith('http') || src.startsWith('https')) {\n // It's an image URL\n const res = await fetch(src)\n const blob = await res.blob()\n const file = new File([blob], 'pasted-image.' + blob.type.split('/')[1], {\n type: blob.type,\n })\n\n transformedImage = { alt: undefined, file, formID }\n }\n\n if (!transformedImage) {\n return\n }\n\n openBulkUpload({ files: [transformedImage] })\n }\n void upload()\n }),\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 // we need to get the focus node before inserting the block node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n // PendingUploadNodes are automatically created when importDOM is called. However, if you paste a file from your computer\n // directly, importDOM won't be called, as it's not a HTML dom element. So we need to handle that case here.\n\n if (!(event instanceof ClipboardEvent)) {\n return false\n }\n const clipboardData = event.clipboardData\n\n if (!clipboardData?.types?.length || clipboardData?.types?.includes('text/html')) {\n // HTML is handled through importDOM => registerNodeTransform for PendingUploadNode\n return false\n }\n\n const files: FileToUpload[] = []\n if (clipboardData?.files?.length) {\n Array.from(clipboardData.files).forEach((file) => {\n files.push({\n alt: '',\n file,\n formID: new ObjectID.default().toHexString(),\n })\n })\n }\n\n if (files.length) {\n // Insert a PendingUploadNode for each image\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n for (const file of files) {\n const pendingUploadNode = new PendingUploadNode({\n data: {\n formID: file.formID,\n src: URL.createObjectURL(file.file),\n },\n })\n // we need to get the focus node before inserting the upload node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(pendingUploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n }\n })\n\n // Open the bulk drawer - the node transform will not open it for us, as it does not handle blob/file uploads\n openBulkUpload({ files })\n\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n // Handle drag & drop of files from the desktop into the editor\n editor.registerCommand(\n DROP_COMMAND,\n (event) => {\n if (!(event instanceof DragEvent)) {\n return false\n }\n\n const dt = event.dataTransfer\n\n if (!dt?.types?.length) {\n return false\n }\n\n const files: FileToUpload[] = []\n if (dt?.files?.length) {\n Array.from(dt.files).forEach((file) => {\n files.push({\n alt: '',\n file,\n formID: new ObjectID.default().toHexString(),\n })\n })\n }\n\n if (files.length) {\n // Prevent the default browser drop handling, which would open the file in the browser\n event.preventDefault()\n event.stopPropagation()\n\n // Insert a PendingUploadNode for each image\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n for (const file of files) {\n const pendingUploadNode = new PendingUploadNode({\n data: {\n formID: file.formID,\n src: URL.createObjectURL(file.file),\n },\n })\n // we need to get the focus node before inserting the upload node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(pendingUploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n }\n })\n\n // Open the bulk drawer - the node transform will not open it for us, as it does not handle blob/file uploads\n openBulkUpload({ files })\n\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\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,YAAY,EAAEC,wBAAwB,EAAEC,aAAa,QAAQ;AACtE,SAASC,aAAa,EAAEC,SAAS,EAAEC,cAAc,EAAEC,QAAQ,QAAQ;AACnE,OAAOC,QAAA,MAAc;AACrB,SACEC,qBAAqB,EACrBC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,EACvBC,oBAAoB,EACpBC,aAAa,EACbC,YAAY,EACZC,aAAa,QACR;AACP,OAAOC,KAAA,IAASC,SAAS,QAAQ;AAMjC,SAASC,YAAY,QAAQ;AAC7B,SAASC,oBAAoB,EAAEC,iBAAiB,QAAQ;AACxD,SAASC,iBAAiB,EAAEC,UAAU,QAAQ;AAI9C,OAAO,MAAMC,qBAAA,GACXV,aAAA,CAAc;AAYhB,OAAO,MAAMW,YAAA,GAA0DA,CAAA;EAAA,MAAAC,CAAA,GAAA5B,EAAA;EACrE,OAAA6B,MAAA,IAAiB5B,yBAAA;EACjB;IAAA6B,MAAA,EAAAC;EAAA,IAEIzB,SAAA;EADM;IAAA0B;EAAA,IAAAD,EAAe;EAGzB;IAAAE,UAAA,EAAAC,oBAAA;IAAAC,iBAAA;IAAAC,eAAA;IAAAC,WAAA;IAAAC,YAAA;IAAAC;EAAA,IAOIlC,aAAA;EAEJ;IAAAmC,WAAA;IAAAC;EAAA,IAAmCjC,QAAA;EAAA,IAAAkC,EAAA;EAAA,IAAAd,CAAA,QAAAM,oBAAA,IAAAN,CAAA,QAAAI,WAAA,IAAAJ,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAY,WAAA,IAAAZ,CAAA,QAAAa,SAAA,IAAAb,CAAA,QAAAO,iBAAA,IAAAP,CAAA,QAAAQ,eAAA,IAAAR,CAAA,QAAAS,WAAA,IAAAT,CAAA,QAAAU,YAAA,IAAAV,CAAA,QAAAW,wBAAA;IAEGG,EAAA,GAAAC,EAAA;MAAC;QAAAC;MAAA,IAAAD,EAAoC;MAAA,IACrEC,KAAA,EAAAC,MAAA,MAAkB;QAAA;MAAA;MAItBT,eAAA,CAAAU,YAAA,SACMA,YAAA,MAAkB,MACnBF,KAAA,CAAAG,GAAA,CAAAC,KAGH,EACD;MAAA,KAEIR,WAAA,CAAYN,oBAAA;QACf,MAAAe,iBAAA,GAA0BjB,WAAA,CAAAkB,MAAA,CAAAC,MAAqC,EAAAJ,GAAA,CAAAK,MAA0B;QAAA,IACrF,CAACH,iBAAA,CAAAJ,MAAA,KAA6BI,iBAAiB,GAAG;UAAA;QAAA;QAItDd,iBAAA,CAAkBc,iBAAiB,GAAG;QACtCV,wBAAA,CAAyBU,iBAAA;QAEzBZ,WAAA;UAEER,MAAA,CAAAwB,MAAA,CAAAC,MAQA;QAAA,CACF;QAEAhB,YAAA,CAAAiB,OAAA;UACE,MAAAC,UAAA,OAAAC,GAAA,CAA2BF,OAAA,CAAAR,GAAA,CAAAW,MAAsC;UACjE7B,MAAA,CAAAwB,MAAA;YAAA,KACO,MAAAM,SAAM,IAAWzD,YAAA;cACpB,MAAA0D,MAAA,GAAaC,SAAA,CAAAC,IAAA;cAAY,IACrBxC,oBAAA,CAAqBwC,MAAA;gBACvB,MAAAC,MAAA,GAAeP,UAAA,CAAAQ,GAAA,CAAeF,MAAA,CAAAG,OAAA,CAAY,EAAAC,MAAS;gBAAA,IAC/CH,MAAA;kBACFD,MAAA,CAAAK,OAAA,CACE3C,iBAAA;oBAAA4C,IAAA;sBAAAC,EAAA,EAEQ,IAAA5D,QAAA,CAAA6D,OAAA,GAAAC,WAAA,CAAkC;sBAAAC,MAAA,EAC9BT,MAAA,CAAAU,GAAA;sBAAAC,UAAA,EACIX,MAAA,CAAAY,cAAA;sBAAAC,KAAA,EACLb,MAAA,CAAAU,GAAA,CAAAJ;oBAAA;kBAAA,CAEX;gBAAA;cAAA;YAAA;UAAA,CAKV;QAAA,CACF;QAEA5B,SAAA,CAAUP,oBAAA;MAAA;IAAA;IAEdN,CAAA,MAAAM,oBAAA;IAAAN,CAAA,MAAAI,WAAA;IAAAJ,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAY,WAAA;IAAAZ,CAAA,MAAAa,SAAA;IAAAb,CAAA,MAAAO,iBAAA;IAAAP,CAAA,MAAAQ,eAAA;IAAAR,CAAA,MAAAS,WAAA;IAAAT,CAAA,MAAAU,YAAA;IAAAV,CAAA,MAAAW,wBAAA;IAAAX,CAAA,OAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EA7DA,MAAAiD,cAAA,GAAuBtE,cAAA,CAAemC,EA6DtC;EAAA,IAAAC,EAAA;EAAA,IAAAf,CAAA,SAAAC,MAAA,IAAAD,CAAA,SAAAiD,cAAA;IAEUlC,EAAA,GAAAA,CAAA;MAAA,KACHd,MAAA,CAAAiD,QAAA,EAAArD,UAAA,CAA4B;QAAA,UAAAsD,KAAA,CACf;MAAA;MAAA,OAGX3E,aAAA,CAILyB,MAAA,CAAAmD,qBAAA,CAAAzD,iBAAA,EAAA0D,MAAA;QACE,MAAAC,QAAA,GAAiBpB,MAAA,CAAAG,OAAA,CAAY;QAC7B,MAAAkB,QAAA,kBAAAC,OAAA;UACE,IAAAC,gBAAA;UAEA,MAAAC,GAAA,GAAYJ,QAAA,CAAAI,GAAA;UACZ,MAAApB,MAAA,GAAegB,QAAA,CAAAhB,MAAA;UAAe,IAE1BoB,GAAA,CAAAC,UAAA,CAAe;YAEjB,MAAAC,SAAA,GAAkBF,GAAA,CAAAG,KAAA,kCAAU;YAC5B,MAAAC,QAAA,GAAiBF,SAAA,GAAYA,SAAS,MAAM;YAC5C,MAAAG,UAAA,GAAmBL,GAAA,CAAAnB,OAAA,mCAA8C;YACjE,MAAAyB,cAAA,GAAuBC,IAAA,CAAKF,UAAA;YAC5B,MAAAG,WAAA,OAAAC,KAAA,CAA8BH,cAAA,CAAA/C,MAAA;YAAqB,SAAAmD,CAAA,MACnCA,CAAA,GAAIJ,cAAA,CAAA/C,MAAqB,EAAEmD,CAAA;cACzCF,WAAW,CAACE,CAAA,IAAKJ,cAAA,CAAAK,UAAA,CAA0BD,CAAA;YAAA;YAE7C,MAAAE,SAAA,OAAAC,UAAA,CAAiCL,WAAA;YACjC,MAAAM,MAAA,OAAAC,IAAA,EAAuBH,SAAA,GAAY,kBAAkBR,QAAA,EAAAY,KAAA,CAAgB,OAAO;cAAAC,IAAA,EACpEb;YAAA;YAERL,gBAAA,CAAAA,CAAA,CAAAA;cAAAA,IAAA,CAAAA;cAAAA,KAAA,CAAqCmB,MAAA;cAAAtC;YAAA;UAArC;YAAA,IACSoB,GAAA,CAAAC,UAAA,CAAe,WAAWD,GAAA,CAAAC,UAAA,CAAe;cAElD,MAAAkB,GAAA,SAAkBC,KAAA,CAAMpB,GAAA;cACxB,MAAAqB,IAAA,SAAmBF,GAAA,CAAAE,IAAA,CAAQ;cAC3B,MAAAC,MAAA,OAAAP,IAAA,EAAuBM,IAAA,GAAO,kBAAkBA,IAAA,CAAAJ,IAAA,CAAAD,KAAA,CAAgB,IAAI,GAAG;gBAAAC,IAAA,EAC/DI,IAAA,CAAAJ;cAAA;cAGRlB,gBAAA,CAAAA,CAAA,CAAAA;gBAAAA,IAAA,CAAAA;gBAAAA,KAAA,CAAqCmB,MAAA;gBAAAtC;cAAA;YAArC;UAAA;UAAA,KAGGmB,gBAAA;YAAA;UAAA;UAILR,cAAA;YAAAjC,KAAA,GAAyByC,gBAAA;UAAA,CAAkB;QAAA;QAExCD,QAAA;MAAA,CACP,GACAvD,MAAA,CAAAgF,eAAA,CAAAnF,qBAAA,EAAAoF,OAAA;QAGIjF,MAAA,CAAAwB,MAAA;UACE,MAAA0D,SAAA,GAAkBpG,aAAA,MAAmBD,qBAAA;UAAA,IAEjCG,iBAAA,CAAkBkG,SAAA;YACpB,MAAAC,UAAA,GAAmBxF,iBAAA;cAAA4C,IAAA;gBAAAC,EAAA,EAEXyC,OAAA,CAAAzC,EAAA;gBAAAG,MAAA,EACIsC,OAAA,CAAAtC,MAAA;gBAAAE,UAAA,EACIoC,OAAA,CAAApC,UAAA;gBAAAE,KAAA,EACLkC,OAAA,CAAAlC;cAAA;YAAA,CAEX;YAEA;cAAAqC;YAAA,IAAkBF,SAAA;YAClB,MAAAG,SAAA,GAAkBD,KAAA,CAAAE,OAAA,CAAa;YAE/BhH,wBAAA,CAAyB6G,UAAA;YAAA,IAGrBpG,gBAAA,CAAiBsG,SAAA,MAAeA,SAAA,CAAAE,OAAiB;cACnDF,SAAA,CAAAG,MAAA,CAAgB;YAAA;UAAA;QAAA,CAGtB;QAAA;MAAA,GAAAvG,uBAIF,GAEFe,MAAA,CAAAgF,eAAA,CAAA3F,aAAA,EAAAoG,KAAA;QAAA,MAMUA,KAAA,YAAAC,cAA8B;UAAA;QAAA;QAGpC,MAAAC,aAAA,GAAsBF,KAAA,CAAAE,aAAA;QAAmB,IAErC,CAACA,aAAA,EAAAC,KAAA,EAAA5E,MAAA,IAAgC2E,aAAA,EAAAC,KAAA,EAAAC,QAAA,CAA+B;UAAA;QAAA;QAKpE,MAAAC,OAAA;QAAgC,IAC5BH,aAAA,EAAA5E,KAAA,EAAAC,MAAA;UACFkD,KAAA,CAAA6B,IAAA,CAAWJ,aAAA,CAAA5E,KAAmB,EAAAiF,OAAA,CAAAC,MAAA;YAC5BlF,OAAA,CAAAmF,IAAA;cAAAC,GAAA,EACO;cAAAxB,IAAA,EACLA,MAAA;cAAAtC,MAAA,EACQ,IAAAzD,QAAA,CAAA6D,OAAA,GAAAC,WAAA,CAAkC;YAAA,CAC5C;UAAA,CACF;QAAA;QAAA,IAGE3B,OAAA,CAAAC,MAAA;UAEFhB,MAAA,CAAAwB,MAAA;YACE,MAAA4E,WAAA,GAAkBtH,aAAA,MAAmBD,qBAAA;YAAA,IAEjCG,iBAAA,CAAkBkG,WAAA;cAAA,KACf,MAAAmB,MAAM,IAAQtF,OAAA;gBACjB,MAAAuF,iBAAA,OAAA5G,iBAAA;kBAAA6C,IAAA;oBAAAF,MAAA,EAEYsC,MAAA,CAAAtC,MAAA;oBAAAoB,GAAA,EACH8C,GAAA,CAAAC,eAAA,CAAoB7B,MAAA,CAAAA,IAAS;kBAAA;gBAAA;gBAItC;kBAAAS,KAAA,EAAAqB;gBAAA,IAAkBvB,WAAA;gBAClB,MAAAwB,WAAA,GAAkBtB,OAAA,CAAAE,OAAA,CAAa;gBAE/BhH,wBAAA,CAAyBgI,iBAAA;gBAAA,IAGrBvH,gBAAA,CAAiBsG,WAAA,MAAeA,WAAA,CAAAE,OAAiB;kBACnDF,WAAA,CAAAG,MAAA,CAAgB;gBAAA;cAAA;YAAA;UAAA,CAIxB;UAGAxC,cAAA;YAAAjC,KAAA,EAAiBA;UAAA,CAAM;UAAA;QAAA;QAAA;MAAA,GAAA7B,oBAO3B,GAGFc,MAAA,CAAAgF,eAAA,CAAA5F,YAAA,EAAAuH,OAAA;QAAA,MAGUlB,OAAA,YAAAmB,SAAyB;UAAA;QAAA;QAI/B,MAAAC,EAAA,GAAWpB,OAAA,CAAAqB,YAAA;QAAkB,KAExBD,EAAA,EAAAjB,KAAA,EAAA5E,MAAA;UAAA;QAAA;QAIL,MAAA+F,OAAA;QAAgC,IAC5BF,EAAA,EAAA9F,KAAA,EAAAC,MAAA;UACFkD,KAAA,CAAA6B,IAAA,CAAWc,EAAA,CAAA9F,KAAQ,EAAAiF,OAAA,CAAAgB,MAAA;YACjBjG,OAAA,CAAAmF,IAAA;cAAAC,GAAA,EACO;cAAAxB,IAAA,EACLA,MAAA;cAAAtC,MAAA,EACQ,IAAAzD,QAAA,CAAA6D,OAAA,GAAAC,WAAA,CAAkC;YAAA,CAC5C;UAAA,CACF;QAAA;QAAA,IAGE3B,OAAA,CAAAC,MAAA;UAEFyE,OAAA,CAAAwB,cAAA,CAAoB;UACpBxB,OAAA,CAAAyB,eAAA,CAAqB;UAGrBlH,MAAA,CAAAwB,MAAA;YACE,MAAA2F,WAAA,GAAkBrI,aAAA,MAAmBD,qBAAA;YAAA,IAEjCG,iBAAA,CAAkBkG,WAAA;cAAA,KACf,MAAAkC,MAAM,IAAQrG,OAAA;gBACjB,MAAAsG,mBAAA,OAAA3H,iBAAA;kBAAA6C,IAAA;oBAAAF,MAAA,EAEYsC,MAAA,CAAAtC,MAAA;oBAAAoB,GAAA,EACH8C,GAAA,CAAAC,eAAA,CAAoB7B,MAAA,CAAAA,IAAS;kBAAA;gBAAA;gBAItC;kBAAAS,KAAA,EAAAkC;gBAAA,IAAkBpC,WAAA;gBAClB,MAAAqC,WAAA,GAAkBnC,OAAA,CAAAE,OAAA,CAAa;gBAE/BhH,wBAAA,CAAyBgI,mBAAA;gBAAA,IAGrBvH,gBAAA,CAAiBsG,WAAA,MAAeA,WAAA,CAAAE,OAAiB;kBACnDF,WAAA,CAAAG,MAAA,CAAgB;gBAAA;cAAA;YAAA;UAAA,CAIxB;UAGAxC,cAAA;YAAAjC,KAAA,EAAiBA;UAAA,CAAM;UAAA;QAAA;QAAA;MAAA,GAAA7B,oBAO3B;IAAA;IAGNa,CAAA,OAAAC,MAAA;IAAAD,CAAA,OAAAiD,cAAA;IAAAjD,CAAA,OAAAe,EAAA;EAAA;IAAAA,EAAA,GAAAf,CAAA;EAAA;EAAA,IAAAyH,EAAA;EAAA,IAAAzH,CAAA,SAAAC,MAAA;IAAGwH,EAAA,IAACxH,MAAA;IAAOD,CAAA,OAAAC,MAAA;IAAAD,CAAA,OAAAyH,EAAA;EAAA;IAAAA,EAAA,GAAAzH,CAAA;EAAA;EAtNXR,SAAA,CAAUuB,EAsNV,EAAG0G,EAAQ;EAAA,IAAAC,EAAA;EAAA,IAAA1H,CAAA,SAAAI,WAAA;IAEJsH,EAAA,GAAAC,IAAA,CAAAlI,YAAA;MAAAmI,sBAAA,EAAsCxH,WAAA,CAAAe,GAAA,CAAA0G,MAA8B;IAAA,C;;;;;;SAApEH,E;CACT;AAzSuE,SAAAtG,MAAAwD,IAAA;EAAA;IAAAA,IAAA,EAyBzDA,IAAA,CAAAA,IAAA;IAAAtC,MAAA,EACEsC,IAAA,CAAAtC;EAAA;AAAA;AA1BuD,SAAAf,OAAApB,EAAA;EA+BnB;IAAAqD;EAAA,IAAArD,EAAU;EAAA,SAAOqD,MAAA;AAAA;AA/BE,SAAAhC,OAAArB,EAAA;EA+BW;IAAA2H;EAAA,IAAA3H,EAAQ;EAAA,OAAK2H,IAAA;AAAA;AA/BxB,SAAApG,OAAA;EAAA,KA0CxD,MAAAO,OAAM,IAAW3D,YAAA;IACpB,MAAA4D,IAAA,GAAaD,OAAA,CAAAC,IAAA;IAAY,IAErBxC,oBAAA,CAAqBwC,IAAA;MACvBA,IAAA,CAAAuD,MAAA,CAAW;IAAA;EAAA;AAAA;AA9C8C,SAAA3D,OAAAe,GAAA;EAAA,QAqDdA,GAAA,CAAAP,MAAA,EAAYO,GAAA;AAAA;AArDE,SAAAgF,OAAA1H,EAAA;EAwSP;IAAA2H,IAAA,EAAAC;EAAA,IAAA5H,EAAQ;EAAA,OAAK2H,MAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/features/upload/server/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,eAAO,MAAM,IAAI,EAAE,OAAO,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/features/upload/server/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,eAAO,MAAM,IAAI,EAAE,OAAO,CAAC,gBAAgB,CA0G1C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","names":["i18n","ar","label","az","bg","cs","da","de","en","es","et","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sl","sv","
|
|
1
|
+
{"version":3,"file":"i18n.js","names":["i18n","ar","label","az","bg","cs","da","de","en","es","et","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sl","sv","th","tr","uk","vi","zh"],"sources":["../../../../src/features/upload/server/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n label: 'تحميل',\n },\n az: {\n label: 'Yükləyin',\n },\n bg: {\n label: 'Качване',\n },\n cs: {\n label: 'Nahrát',\n },\n da: {\n label: 'Upload',\n },\n de: {\n label: 'Datei',\n },\n en: {\n label: 'Upload',\n },\n es: {\n label: 'Subir',\n },\n et: {\n label: 'Lae üles',\n },\n fa: {\n label: 'بارگذاری',\n },\n fr: {\n label: 'Télécharger',\n },\n he: {\n label: 'העלה',\n },\n hr: {\n label: 'Prenesi',\n },\n hu: {\n label: 'Feltöltés',\n },\n it: {\n label: 'Carica',\n },\n ja: {\n label: 'アップロード',\n },\n ko: {\n label: '업로드',\n },\n my: {\n label: 'တင်ပြီး',\n },\n nb: {\n label: 'Last opp',\n },\n nl: {\n label: 'Uploaden',\n },\n pl: {\n label: 'Prześlij',\n },\n pt: {\n label: 'Carregar',\n },\n ro: {\n label: 'Încarcă',\n },\n rs: {\n label: 'Отпреми',\n },\n 'rs-latin': {\n label: 'Otpremi',\n },\n ru: {\n label: 'Загрузить',\n },\n sk: {\n label: 'Nahrať',\n },\n sl: {\n label: 'Naloži',\n },\n sv: {\n label: 'Ladda upp',\n },\n th: {\n label: 'อัปโหลด',\n },\n tr: {\n label: 'Yükle',\n },\n uk: {\n label: 'Завантажити',\n },\n vi: {\n label: 'Tải lên',\n },\n zh: {\n label: '上传',\n },\n 'zh-TW': {\n label: '上傳',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,IAAA,GAAkC;EAC7CC,EAAA,EAAI;IACFC,KAAA,EAAO;EACT;EACAC,EAAA,EAAI;IACFD,KAAA,EAAO;EACT;EACAE,EAAA,EAAI;IACFF,KAAA,EAAO;EACT;EACAG,EAAA,EAAI;IACFH,KAAA,EAAO;EACT;EACAI,EAAA,EAAI;IACFJ,KAAA,EAAO;EACT;EACAK,EAAA,EAAI;IACFL,KAAA,EAAO;EACT;EACAM,EAAA,EAAI;IACFN,KAAA,EAAO;EACT;EACAO,EAAA,EAAI;IACFP,KAAA,EAAO;EACT;EACAQ,EAAA,EAAI;IACFR,KAAA,EAAO;EACT;EACAS,EAAA,EAAI;IACFT,KAAA,EAAO;EACT;EACAU,EAAA,EAAI;IACFV,KAAA,EAAO;EACT;EACAW,EAAA,EAAI;IACFX,KAAA,EAAO;EACT;EACAY,EAAA,EAAI;IACFZ,KAAA,EAAO;EACT;EACAa,EAAA,EAAI;IACFb,KAAA,EAAO;EACT;EACAc,EAAA,EAAI;IACFd,KAAA,EAAO;EACT;EACAe,EAAA,EAAI;IACFf,KAAA,EAAO;EACT;EACAgB,EAAA,EAAI;IACFhB,KAAA,EAAO;EACT;EACAiB,EAAA,EAAI;IACFjB,KAAA,EAAO;EACT;EACAkB,EAAA,EAAI;IACFlB,KAAA,EAAO;EACT;EACAmB,EAAA,EAAI;IACFnB,KAAA,EAAO;EACT;EACAoB,EAAA,EAAI;IACFpB,KAAA,EAAO;EACT;EACAqB,EAAA,EAAI;IACFrB,KAAA,EAAO;EACT;EACAsB,EAAA,EAAI;IACFtB,KAAA,EAAO;EACT;EACAuB,EAAA,EAAI;IACFvB,KAAA,EAAO;EACT;EACA,YAAY;IACVA,KAAA,EAAO;EACT;EACAwB,EAAA,EAAI;IACFxB,KAAA,EAAO;EACT;EACAyB,EAAA,EAAI;IACFzB,KAAA,EAAO;EACT;EACA0B,EAAA,EAAI;IACF1B,KAAA,EAAO;EACT;EACA2B,EAAA,EAAI;IACF3B,KAAA,EAAO;EACT;EACA4B,EAAA,EAAI;IACF5B,KAAA,EAAO;EACT;EACA6B,EAAA,EAAI;IACF7B,KAAA,EAAO;EACT;EACA8B,EAAA,EAAI;IACF9B,KAAA,EAAO;EACT;EACA+B,EAAA,EAAI;IACF/B,KAAA,EAAO;EACT;EACAgC,EAAA,EAAI;IACFhC,KAAA,EAAO;EACT;EACA,SAAS;IACPA,KAAA,EAAO;EACT;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/upload/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,KAAK,EAMN,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/upload/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,KAAK,EAMN,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAWlE,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,gIAoPxB,CAAA"}
|
|
@@ -4,6 +4,7 @@ import { createServerFeature } from '../../../utilities/createServerFeature.js';
|
|
|
4
4
|
import { createNode } from '../../typeUtilities.js';
|
|
5
5
|
import { uploadPopulationPromiseHOC } from './graphQLPopulationPromise.js';
|
|
6
6
|
import { i18n } from './i18n.js';
|
|
7
|
+
import { PendingUploadServerNode } from './nodes/PendingUploadNode.js';
|
|
7
8
|
import { UploadServerNode } from './nodes/UploadNode.js';
|
|
8
9
|
import { uploadValidation } from './validate.js';
|
|
9
10
|
/**
|
|
@@ -211,7 +212,9 @@ export const UploadFeature = createServerFeature({
|
|
|
211
212
|
},
|
|
212
213
|
node: UploadServerNode,
|
|
213
214
|
validations: [uploadValidation(props)]
|
|
214
|
-
})
|
|
215
|
+
}), {
|
|
216
|
+
node: PendingUploadServerNode
|
|
217
|
+
}],
|
|
215
218
|
sanitizedServerFeatureProps: props
|
|
216
219
|
};
|
|
217
220
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.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","collectionKey","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","collectionFields","concat","collectionFieldSchema","Array","isArray","getSubFieldsData","graphQLPopulationPromises","hooks","afterRead","populateArg","populationPromises","populateDepth","maxDepth","undefined","push","select","defaultPopulate","validations","sanitizedServerFeatureProps"],"sources":["../../../../src/features/upload/server/index.ts"],"sourcesContent":["import type {\n CollectionSlug,\n Config,\n Field,\n FieldSchemaMap,\n FileData,\n FileSizeImproved,\n Payload,\n TypeWithID,\n} from 'payload'\n\nimport { sanitizeFields } from 'payload'\n\nimport type { UploadFeaturePropsClient } from '../client/index.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 collectionKey in props.collections) {\n const collection = props.collections[collectionKey]!\n if (collection.fields?.length) {\n collection.fields = await sanitizeFields({\n config: _config as unknown as Config,\n fields: 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: FieldSchemaMap = new Map()\n\n for (const collectionKey in props.collections) {\n const collection = props.collections[collectionKey]!\n if (collection.fields?.length) {\n schemaMap.set(collectionKey, {\n fields: collection.fields,\n })\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 = uploadDocument.value.sizes[size] as FileSizeImproved\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 const collectionFields = props.collections[collection]!.fields\n allSubFields = allSubFields.concat(collectionFields)\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 populateArg,\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 - Fix in Payload v4\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 select:\n populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,\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":"index.js","names":["sanitizeFields","populate","createServerFeature","createNode","uploadPopulationPromiseHOC","i18n","PendingUploadServerNode","UploadServerNode","uploadValidation","getAbsoluteURL","url","payload","startsWith","config","serverURL","UploadFeature","feature","_config","isRoot","parentIsLocalized","props","collections","clientProps","collection","hasExtraFields","fields","length","validRelationships","map","c","slug","collectionKey","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","collectionFields","concat","collectionFieldSchema","Array","isArray","getSubFieldsData","graphQLPopulationPromises","hooks","afterRead","populateArg","populationPromises","populateDepth","maxDepth","undefined","push","select","defaultPopulate","validations","sanitizedServerFeatureProps"],"sources":["../../../../src/features/upload/server/index.ts"],"sourcesContent":["import type {\n CollectionSlug,\n Config,\n Field,\n FieldSchemaMap,\n FileData,\n FileSizeImproved,\n Payload,\n TypeWithID,\n} from 'payload'\n\nimport { sanitizeFields } from 'payload'\n\nimport type { UploadFeaturePropsClient } from '../client/index.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 { PendingUploadServerNode } from './nodes/PendingUploadNode.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 collectionKey in props.collections) {\n const collection = props.collections[collectionKey]!\n if (collection.fields?.length) {\n collection.fields = await sanitizeFields({\n config: _config as unknown as Config,\n fields: 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: FieldSchemaMap = new Map()\n\n for (const collectionKey in props.collections) {\n const collection = props.collections[collectionKey]!\n if (collection.fields?.length) {\n schemaMap.set(collectionKey, {\n fields: collection.fields,\n })\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 = uploadDocument.value.sizes[size] as FileSizeImproved\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 const collectionFields = props.collections[collection]!.fields\n allSubFields = allSubFields.concat(collectionFields)\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 populateArg,\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 - Fix in Payload v4\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 select:\n populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,\n showHiddenFields,\n }),\n )\n\n return node\n },\n ],\n },\n node: UploadServerNode,\n validations: [uploadValidation(props)],\n }),\n {\n node: PendingUploadServerNode,\n },\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'upload',\n})\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js';
|
|
2
|
+
import type { DOMConversionMap, DOMExportOutput, ElementFormatType, LexicalNode, NodeKey, Spread } from 'lexical';
|
|
3
|
+
import type { JSX } from 'react';
|
|
4
|
+
import { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js';
|
|
5
|
+
export type PendingUploadData = {
|
|
6
|
+
/**
|
|
7
|
+
* ID that corresponds to the bulk upload form ID
|
|
8
|
+
*/
|
|
9
|
+
formID: string;
|
|
10
|
+
/**
|
|
11
|
+
* src value of the image dom element
|
|
12
|
+
*/
|
|
13
|
+
src: string;
|
|
14
|
+
};
|
|
15
|
+
export type SerializedPendingUploadNode = {
|
|
16
|
+
children?: never;
|
|
17
|
+
type: 'pendingUpload';
|
|
18
|
+
} & Spread<PendingUploadData, SerializedDecoratorBlockNode>;
|
|
19
|
+
export declare class PendingUploadServerNode extends DecoratorBlockNode {
|
|
20
|
+
__data: PendingUploadData;
|
|
21
|
+
constructor({ data, format, key, }: {
|
|
22
|
+
data: PendingUploadData;
|
|
23
|
+
format?: ElementFormatType;
|
|
24
|
+
key?: NodeKey;
|
|
25
|
+
});
|
|
26
|
+
static clone(node: PendingUploadServerNode): PendingUploadServerNode;
|
|
27
|
+
static getType(): string;
|
|
28
|
+
static importDOM(): DOMConversionMap<HTMLImageElement>;
|
|
29
|
+
static importJSON(serializedNode: SerializedPendingUploadNode): PendingUploadServerNode;
|
|
30
|
+
static isInline(): false;
|
|
31
|
+
decorate(): JSX.Element;
|
|
32
|
+
exportDOM(): DOMExportOutput;
|
|
33
|
+
exportJSON(): SerializedPendingUploadNode;
|
|
34
|
+
getData(): PendingUploadData;
|
|
35
|
+
setData(data: PendingUploadData): void;
|
|
36
|
+
updateDOM(): false;
|
|
37
|
+
}
|
|
38
|
+
export declare function $createPendingUploadServerNode({ data, }: {
|
|
39
|
+
data: PendingUploadData;
|
|
40
|
+
}): PendingUploadServerNode;
|
|
41
|
+
export declare function $isPendingUploadServerNode(node: LexicalNode | null | undefined): node is PendingUploadServerNode;
|
|
42
|
+
//# sourceMappingURL=PendingUploadNode.d.ts.map
|