@payloadcms/richtext-lexical 3.66.0-canary.5 → 3.66.0-canary.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/align/client/index.tsx"],"names":[],"mappings":"AAsJA,eAAO,MAAM,kBAAkB,oFAO7B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/align/client/index.tsx"],"names":[],"mappings":"AA8MA,eAAO,MAAM,kBAAkB,oFAa7B,CAAA"}
@@ -1,12 +1,25 @@
1
1
  'use client';
2
2
 
3
- import { $isElementNode, $isRangeSelection, FORMAT_ELEMENT_COMMAND } from 'lexical';
3
+ import { c as _c } from "react/compiler-runtime";
4
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
5
+ import { $isDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode';
6
+ import { $findMatchingParent } from '@lexical/utils';
7
+ import { $getSelection, $isElementNode, $isNodeSelection, $isRangeSelection, COMMAND_PRIORITY_LOW, FORMAT_ELEMENT_COMMAND } from 'lexical';
8
+ import { useEffect } from 'react';
4
9
  import { AlignCenterIcon } from '../../../lexical/ui/icons/AlignCenter/index.js';
5
10
  import { AlignJustifyIcon } from '../../../lexical/ui/icons/AlignJustify/index.js';
6
11
  import { AlignLeftIcon } from '../../../lexical/ui/icons/AlignLeft/index.js';
7
12
  import { AlignRightIcon } from '../../../lexical/ui/icons/AlignRight/index.js';
8
13
  import { createClientFeature } from '../../../utilities/createClientFeature.js';
9
14
  import { toolbarAlignGroupWithItems } from './toolbarAlignGroup.js';
15
+ // DecoratorBlockNode has format, but Lexical forgot
16
+ // to add the getters like ElementNode does.
17
+ const getFormatType = node => {
18
+ if ($isElementNode(node)) {
19
+ return node.getFormatType();
20
+ }
21
+ return node.__format;
22
+ };
10
23
  const toolbarGroups = [toolbarAlignGroupWithItems([{
11
24
  ChildComponent: AlignLeftIcon,
12
25
  isActive: ({
@@ -16,14 +29,14 @@ const toolbarGroups = [toolbarAlignGroupWithItems([{
16
29
  return false;
17
30
  }
18
31
  for (const node of selection.getNodes()) {
19
- if ($isElementNode(node)) {
20
- if (node.getFormatType() === 'left') {
32
+ if ($isElementNode(node) || $isDecoratorBlockNode(node)) {
33
+ if (getFormatType(node) === 'left') {
21
34
  continue;
22
35
  }
23
36
  }
24
37
  const parent = node.getParent();
25
- if ($isElementNode(parent)) {
26
- if (parent.getFormatType() === 'left') {
38
+ if ($isElementNode(parent) || $isDecoratorBlockNode(parent)) {
39
+ if (getFormatType(parent) === 'left') {
27
40
  continue;
28
41
  }
29
42
  }
@@ -52,14 +65,14 @@ const toolbarGroups = [toolbarAlignGroupWithItems([{
52
65
  return false;
53
66
  }
54
67
  for (const node of selection.getNodes()) {
55
- if ($isElementNode(node)) {
56
- if (node.getFormatType() === 'center') {
68
+ if ($isElementNode(node) || $isDecoratorBlockNode(node)) {
69
+ if (getFormatType(node) === 'center') {
57
70
  continue;
58
71
  }
59
72
  }
60
73
  const parent = node.getParent();
61
- if ($isElementNode(parent)) {
62
- if (parent.getFormatType() === 'center') {
74
+ if ($isElementNode(parent) || $isDecoratorBlockNode(parent)) {
75
+ if (getFormatType(parent) === 'center') {
63
76
  continue;
64
77
  }
65
78
  }
@@ -88,14 +101,14 @@ const toolbarGroups = [toolbarAlignGroupWithItems([{
88
101
  return false;
89
102
  }
90
103
  for (const node of selection.getNodes()) {
91
- if ($isElementNode(node)) {
92
- if (node.getFormatType() === 'right') {
104
+ if ($isElementNode(node) || $isDecoratorBlockNode(node)) {
105
+ if (getFormatType(node) === 'right') {
93
106
  continue;
94
107
  }
95
108
  }
96
109
  const parent = node.getParent();
97
- if ($isElementNode(parent)) {
98
- if (parent.getFormatType() === 'right') {
110
+ if ($isElementNode(parent) || $isDecoratorBlockNode(parent)) {
111
+ if (getFormatType(parent) === 'right') {
99
112
  continue;
100
113
  }
101
114
  }
@@ -124,14 +137,14 @@ const toolbarGroups = [toolbarAlignGroupWithItems([{
124
137
  return false;
125
138
  }
126
139
  for (const node of selection.getNodes()) {
127
- if ($isElementNode(node)) {
128
- if (node.getFormatType() === 'justify') {
140
+ if ($isElementNode(node) || $isDecoratorBlockNode(node)) {
141
+ if (getFormatType(node) === 'justify') {
129
142
  continue;
130
143
  }
131
144
  }
132
145
  const parent = node.getParent();
133
- if ($isElementNode(parent)) {
134
- if (parent.getFormatType() === 'justify') {
146
+ if ($isElementNode(parent) || $isDecoratorBlockNode(parent)) {
147
+ if (getFormatType(parent) === 'justify') {
135
148
  continue;
136
149
  }
137
150
  }
@@ -152,7 +165,29 @@ const toolbarGroups = [toolbarAlignGroupWithItems([{
152
165
  },
153
166
  order: 4
154
167
  }])];
168
+ const AlignPlugin = () => {
169
+ const $ = _c(3);
170
+ const [editor] = useLexicalComposerContext();
171
+ let t0;
172
+ let t1;
173
+ if ($[0] !== editor) {
174
+ t0 = () => editor.registerCommand(FORMAT_ELEMENT_COMMAND, _temp2, COMMAND_PRIORITY_LOW);
175
+ t1 = [editor];
176
+ $[0] = editor;
177
+ $[1] = t0;
178
+ $[2] = t1;
179
+ } else {
180
+ t0 = $[1];
181
+ t1 = $[2];
182
+ }
183
+ useEffect(t0, t1);
184
+ return null;
185
+ };
155
186
  export const AlignFeatureClient = createClientFeature({
187
+ plugins: [{
188
+ Component: AlignPlugin,
189
+ position: 'normal'
190
+ }],
156
191
  toolbarFixed: {
157
192
  groups: toolbarGroups
158
193
  },
@@ -160,4 +195,21 @@ export const AlignFeatureClient = createClientFeature({
160
195
  groups: toolbarGroups
161
196
  }
162
197
  });
198
+ function _temp(parentNode) {
199
+ return ($isElementNode(parentNode) || $isDecoratorBlockNode(parentNode)) && !parentNode.isInline();
200
+ }
201
+ function _temp2(format) {
202
+ const selection = $getSelection();
203
+ if (!$isRangeSelection(selection) && !$isNodeSelection(selection)) {
204
+ return false;
205
+ }
206
+ const nodes = selection.getNodes();
207
+ for (const node of nodes) {
208
+ const element = $findMatchingParent(node, _temp);
209
+ if (element !== null) {
210
+ element.setFormat(format);
211
+ }
212
+ }
213
+ return true;
214
+ }
163
215
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["$isElementNode","$isRangeSelection","FORMAT_ELEMENT_COMMAND","AlignCenterIcon","AlignJustifyIcon","AlignLeftIcon","AlignRightIcon","createClientFeature","toolbarAlignGroupWithItems","toolbarGroups","ChildComponent","isActive","selection","node","getNodes","getFormatType","parent","getParent","key","label","i18n","t","onSelect","editor","dispatchCommand","order","AlignFeatureClient","toolbarFixed","groups","toolbarInline"],"sources":["../../../../src/features/align/client/index.tsx"],"sourcesContent":["'use client'\n\nimport { $isElementNode, $isRangeSelection, FORMAT_ELEMENT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { AlignCenterIcon } from '../../../lexical/ui/icons/AlignCenter/index.js'\nimport { AlignJustifyIcon } from '../../../lexical/ui/icons/AlignJustify/index.js'\nimport { AlignLeftIcon } from '../../../lexical/ui/icons/AlignLeft/index.js'\nimport { AlignRightIcon } from '../../../lexical/ui/icons/AlignRight/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarAlignGroupWithItems } from './toolbarAlignGroup.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarAlignGroupWithItems([\n {\n ChildComponent: AlignLeftIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'left') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'left') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignLeft',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignLeftLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'left')\n },\n order: 1,\n },\n {\n ChildComponent: AlignCenterIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'center') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'center') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignCenter',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignCenterLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'center')\n },\n order: 2,\n },\n {\n ChildComponent: AlignRightIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'right') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'right') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignRight',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignRightLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'right')\n },\n order: 3,\n },\n {\n ChildComponent: AlignJustifyIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node)) {\n if (node.getFormatType() === 'justify') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent)) {\n if (parent.getFormatType() === 'justify') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignJustify',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignJustifyLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'justify')\n },\n order: 4,\n },\n ]),\n]\n\nexport const AlignFeatureClient = createClientFeature({\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$isDecoratorBlockNode","$findMatchingParent","$getSelection","$isElementNode","$isNodeSelection","$isRangeSelection","COMMAND_PRIORITY_LOW","FORMAT_ELEMENT_COMMAND","useEffect","AlignCenterIcon","AlignJustifyIcon","AlignLeftIcon","AlignRightIcon","createClientFeature","toolbarAlignGroupWithItems","getFormatType","node","__format","toolbarGroups","ChildComponent","isActive","selection","getNodes","parent","getParent","key","label","i18n","t","onSelect","editor","dispatchCommand","order","AlignPlugin","$","t0","t1","registerCommand","_temp2","AlignFeatureClient","plugins","Component","position","toolbarFixed","groups","toolbarInline","_temp","parentNode","isInline","format","nodes","element","setFormat"],"sources":["../../../../src/features/align/client/index.tsx"],"sourcesContent":["'use client'\n\nimport type { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode'\nimport type { ElementFormatType, ElementNode } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { $isDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode'\nimport { $findMatchingParent } from '@lexical/utils'\nimport {\n $getSelection,\n $isElementNode,\n $isNodeSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n FORMAT_ELEMENT_COMMAND,\n} from 'lexical'\nimport { useEffect } from 'react'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\n\nimport { AlignCenterIcon } from '../../../lexical/ui/icons/AlignCenter/index.js'\nimport { AlignJustifyIcon } from '../../../lexical/ui/icons/AlignJustify/index.js'\nimport { AlignLeftIcon } from '../../../lexical/ui/icons/AlignLeft/index.js'\nimport { AlignRightIcon } from '../../../lexical/ui/icons/AlignRight/index.js'\nimport { createClientFeature } from '../../../utilities/createClientFeature.js'\nimport { toolbarAlignGroupWithItems } from './toolbarAlignGroup.js'\n\n// DecoratorBlockNode has format, but Lexical forgot\n// to add the getters like ElementNode does.\nconst getFormatType = (node: DecoratorBlockNode | ElementNode): ElementFormatType => {\n if ($isElementNode(node)) {\n return node.getFormatType()\n }\n return node.__format\n}\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarAlignGroupWithItems([\n {\n ChildComponent: AlignLeftIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node) || $isDecoratorBlockNode(node)) {\n if (getFormatType(node) === 'left') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent) || $isDecoratorBlockNode(parent)) {\n if (getFormatType(parent) === 'left') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignLeft',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignLeftLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'left')\n },\n order: 1,\n },\n {\n ChildComponent: AlignCenterIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node) || $isDecoratorBlockNode(node)) {\n if (getFormatType(node) === 'center') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent) || $isDecoratorBlockNode(parent)) {\n if (getFormatType(parent) === 'center') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignCenter',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignCenterLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'center')\n },\n order: 2,\n },\n {\n ChildComponent: AlignRightIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node) || $isDecoratorBlockNode(node)) {\n if (getFormatType(node) === 'right') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent) || $isDecoratorBlockNode(parent)) {\n if (getFormatType(parent) === 'right') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignRight',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignRightLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'right')\n },\n order: 3,\n },\n {\n ChildComponent: AlignJustifyIcon,\n isActive: ({ selection }) => {\n if (!$isRangeSelection(selection)) {\n return false\n }\n for (const node of selection.getNodes()) {\n if ($isElementNode(node) || $isDecoratorBlockNode(node)) {\n if (getFormatType(node) === 'justify') {\n continue\n }\n }\n\n const parent = node.getParent()\n if ($isElementNode(parent) || $isDecoratorBlockNode(parent)) {\n if (getFormatType(parent) === 'justify') {\n continue\n }\n }\n\n return false\n }\n return true\n },\n key: 'alignJustify',\n label: ({ i18n }) => {\n return i18n.t('lexical:align:alignJustifyLabel')\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, 'justify')\n },\n order: 4,\n },\n ]),\n]\n\nconst AlignPlugin = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n // Just like the default Lexical configuration, but in\n // addition to ElementNode we also set DecoratorBlocks\n return editor.registerCommand(\n FORMAT_ELEMENT_COMMAND,\n (format) => {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) && !$isNodeSelection(selection)) {\n return false\n }\n const nodes = selection.getNodes()\n for (const node of nodes) {\n const element = $findMatchingParent(\n node,\n (parentNode): parentNode is DecoratorBlockNode | ElementNode =>\n ($isElementNode(parentNode) || $isDecoratorBlockNode(parentNode)) &&\n !parentNode.isInline(),\n )\n if (element !== null) {\n element.setFormat(format)\n }\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n )\n }, [editor])\n return null\n}\n\nexport const AlignFeatureClient = createClientFeature({\n plugins: [\n {\n Component: AlignPlugin,\n position: 'normal',\n },\n ],\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n})\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/component/index.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE/D,OAAO,KAA2D,MAAM,OAAO,CAAA;AAG/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AASlE,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA0MlD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/component/index.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE/D,OAAO,KAA2D,MAAM,OAAO,CAAA;AAG/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AASlE,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA4MlD,CAAA"}
@@ -24,6 +24,7 @@ export const UploadComponent = props => {
24
24
  relationTo,
25
25
  value
26
26
  },
27
+ format,
27
28
  nodeKey
28
29
  } = props;
29
30
  if (typeof value === 'object') {
@@ -90,7 +91,7 @@ export const UploadComponent = props => {
90
91
  $getNodeByKey(nodeKey)?.remove();
91
92
  });
92
93
  }, [editor, nodeKey]);
93
- const updateUpload = useCallback(data_0 => {
94
+ const updateUpload = useCallback(_data => {
94
95
  setParams({
95
96
  ...initialParams,
96
97
  cacheBust
@@ -99,14 +100,14 @@ export const UploadComponent = props => {
99
100
  closeDocumentDrawer();
100
101
  }, [setParams, cacheBust, closeDocumentDrawer]);
101
102
  const hasExtraFields = editorConfig?.resolvedFeatureMap?.get('upload')?.sanitizedClientFeatureProps.collections?.[relatedCollection.slug]?.hasExtraFields;
102
- const onExtraFieldsDrawerSubmit = useCallback((_, data_1) => {
103
+ const onExtraFieldsDrawerSubmit = useCallback((_, data_0) => {
103
104
  // Update lexical node (with key nodeKey) with new data
104
105
  editor.update(() => {
105
106
  const uploadNode = $getNodeByKey(nodeKey);
106
107
  if (uploadNode) {
107
108
  const newData = {
108
109
  ...uploadNode.getData(),
109
- fields: data_1
110
+ fields: data_0
110
111
  };
111
112
  uploadNode.setData(newData);
112
113
  }
@@ -115,6 +116,7 @@ export const UploadComponent = props => {
115
116
  const aspectRatio = thumbnailSRC && data?.width && data?.height ? data.width > data.height ? 'landscape' : 'portrait' : 'landscape';
116
117
  return /*#__PURE__*/_jsxs("div", {
117
118
  className: `${baseClass}__contents ${baseClass}__contents--${aspectRatio}`,
119
+ "data-align": format || undefined,
118
120
  "data-filename": data?.filename,
119
121
  ref: uploadRef,
120
122
  children: [/*#__PURE__*/_jsxs("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalEditable","getTranslation","Button","formatDrawerSlug","Thumbnail","useConfig","useEditDepth","usePayloadAPI","useTranslation","$getNodeByKey","isImage","React","useCallback","useId","useReducer","useRef","useState","useEditorConfigContext","FieldsDrawer","useLexicalDocumentDrawer","useLexicalDrawer","INSERT_UPLOAD_WITH_DRAWER_COMMAND","initialParams","depth","UploadComponent","props","className","baseClass","data","fields","relationTo","value","nodeKey","Error","config","routes","api","serverURL","getEntityConfig","uploadRef","uuid","editDepth","editor","editorConfig","fieldProps","schemaPath","isEditable","i18n","t","cacheBust","dispatchCacheBust","state","relatedCollection","collectionSlug","componentID","extraFieldsDrawerSlug","slug","toggleDrawer","closeDocumentDrawer","DocumentDrawer","DocumentDrawerToggler","id","setParams","thumbnailSRC","thumbnailURL","url","removeUpload","update","remove","updateUpload","hasExtraFields","resolvedFeatureMap","get","sanitizedClientFeatureProps","collections","onExtraFieldsDrawerSubmit","_","uploadNode","newData","getData","setData","aspectRatio","width","height","_jsxs","filename","ref","_jsx","fileSrc","mimeType","size","role","buttonStyle","disabled","el","icon","onClick","round","tooltip","dispatchCommand","replace","e","preventDefault","labels","singular","onSave","drawerSlug","drawerTitle","label","featureKey","handleDrawerSubmit","schemaPathSuffix"],"sources":["../../../../../src/features/upload/client/component/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Data, FormState, JsonObject } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n formatDrawerSlug,\n Thumbnail,\n useConfig,\n useEditDepth,\n usePayloadAPI,\n useTranslation,\n} from '@payloadcms/ui'\nimport { $getNodeByKey, type ElementFormatType } from 'lexical'\nimport { isImage } from 'payload/shared'\nimport React, { useCallback, useId, useReducer, useRef, useState } from 'react'\n\nimport type { BaseClientFeatureProps } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../index.js'\nimport type { UploadNode } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport './index.scss'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n className: string\n data: UploadData\n format?: ElementFormatType\n nodeKey: string\n}\n\nexport const UploadComponent: React.FC<ElementProps> = (props) => {\n const {\n className: baseClass,\n data: { fields, relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.',\n )\n }\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n const [editor] = useLexicalComposerContext()\n\n const {\n editorConfig,\n fieldProps: { schemaPath },\n } = useEditorConfigContext()\n const isEditable = useLexicalEditable()\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection] = useState<ClientCollectionConfig>(() =>\n getEntityConfig({ collectionSlug: relationTo }),\n )\n\n const componentID = useId()\n\n const extraFieldsDrawerSlug = formatDrawerSlug({\n slug: `lexical-upload-drawer-` + uuid + componentID, // There can be multiple upload components, each with their own drawer, in one single editor => separate them by componentID\n depth: editDepth,\n })\n\n // Need to use hook to initialize useEffect that restores cursor position\n const { toggleDrawer } = useLexicalDrawer(extraFieldsDrawerSlug, true)\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\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 closeDocumentDrawer()\n },\n [setParams, cacheBust, closeDocumentDrawer],\n )\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as BaseClientFeatureProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n const onExtraFieldsDrawerSubmit = useCallback(\n (_: FormState, data: JsonObject) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: null | UploadNode = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n },\n [editor, nodeKey],\n )\n\n const aspectRatio =\n thumbnailSRC && data?.width && data?.height\n ? data.width > data.height\n ? 'landscape'\n : 'portrait'\n : 'landscape'\n\n return (\n <div\n className={`${baseClass}__contents ${baseClass}__contents--${aspectRatio}`}\n data-filename={data?.filename}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__media`}>\n <Thumbnail\n collectionSlug={relationTo}\n fileSrc={isImage(data?.mimeType) ? thumbnailSRC : null}\n height={data?.height}\n size=\"none\"\n width={data?.width}\n />\n\n {isEditable && (\n <div className={`${baseClass}__overlay ${baseClass}__floater`}>\n <div className={`${baseClass}__actions`} role=\"toolbar\">\n {hasExtraFields ? (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"edit\"\n onClick={toggleDrawer}\n round\n size=\"medium\"\n tooltip={t('fields:editRelationship')}\n />\n ) : null}\n\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__swap-drawer-toggler`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n size=\"medium\"\n tooltip={t('fields:swapUpload')}\n />\n\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={!isEditable}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n size=\"medium\"\n tooltip={t('fields:removeUpload')}\n />\n </div>\n </div>\n )}\n </div>\n\n <div className={`${baseClass}__metaOverlay ${baseClass}__floater`}>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <strong className={`${baseClass}__filename`}>\n {data?.filename || t('general:untitled')}\n </strong>\n </DocumentDrawerToggler>\n <div className={`${baseClass}__collectionLabel`}>\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </div>\n </div>\n </div>\n\n {value ? <DocumentDrawer onSave={updateUpload} /> : null}\n {hasExtraFields ? (\n <FieldsDrawer\n data={fields}\n drawerSlug={extraFieldsDrawerSlug}\n drawerTitle={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n featureKey=\"upload\"\n handleDrawerSubmit={onExtraFieldsDrawerSubmit}\n schemaPath={schemaPath}\n schemaPathSuffix={relatedCollection.slug}\n />\n ) : null}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalEditable","getTranslation","Button","formatDrawerSlug","Thumbnail","useConfig","useEditDepth","usePayloadAPI","useTranslation","$getNodeByKey","isImage","React","useCallback","useId","useReducer","useRef","useState","useEditorConfigContext","FieldsDrawer","useLexicalDocumentDrawer","useLexicalDrawer","INSERT_UPLOAD_WITH_DRAWER_COMMAND","initialParams","depth","UploadComponent","props","className","baseClass","data","fields","relationTo","value","format","nodeKey","Error","config","routes","api","serverURL","getEntityConfig","uploadRef","uuid","editDepth","editor","editorConfig","fieldProps","schemaPath","isEditable","i18n","t","cacheBust","dispatchCacheBust","state","relatedCollection","collectionSlug","componentID","extraFieldsDrawerSlug","slug","toggleDrawer","closeDocumentDrawer","DocumentDrawer","DocumentDrawerToggler","id","setParams","thumbnailSRC","thumbnailURL","url","removeUpload","update","remove","updateUpload","_data","hasExtraFields","resolvedFeatureMap","get","sanitizedClientFeatureProps","collections","onExtraFieldsDrawerSubmit","_","uploadNode","newData","getData","setData","aspectRatio","width","height","_jsxs","undefined","filename","ref","_jsx","fileSrc","mimeType","size","role","buttonStyle","disabled","el","icon","onClick","round","tooltip","dispatchCommand","replace","e","preventDefault","labels","singular","onSave","drawerSlug","drawerTitle","label","featureKey","handleDrawerSubmit","schemaPathSuffix"],"sources":["../../../../../src/features/upload/client/component/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Data, FormState, JsonObject } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n formatDrawerSlug,\n Thumbnail,\n useConfig,\n useEditDepth,\n usePayloadAPI,\n useTranslation,\n} from '@payloadcms/ui'\nimport { $getNodeByKey, type ElementFormatType } from 'lexical'\nimport { isImage } from 'payload/shared'\nimport React, { useCallback, useId, useReducer, useRef, useState } from 'react'\n\nimport type { BaseClientFeatureProps } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../index.js'\nimport type { UploadNode } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport './index.scss'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n className: string\n data: UploadData\n format?: ElementFormatType\n nodeKey: string\n}\n\nexport const UploadComponent: React.FC<ElementProps> = (props) => {\n const {\n className: baseClass,\n data: { fields, relationTo, value },\n format,\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.',\n )\n }\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n const [editor] = useLexicalComposerContext()\n\n const {\n editorConfig,\n fieldProps: { schemaPath },\n } = useEditorConfigContext()\n const isEditable = useLexicalEditable()\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection] = useState<ClientCollectionConfig>(() =>\n getEntityConfig({ collectionSlug: relationTo }),\n )\n\n const componentID = useId()\n\n const extraFieldsDrawerSlug = formatDrawerSlug({\n slug: `lexical-upload-drawer-` + uuid + componentID, // There can be multiple upload components, each with their own drawer, in one single editor => separate them by componentID\n depth: editDepth,\n })\n\n // Need to use hook to initialize useEffect that restores cursor position\n const { toggleDrawer } = useLexicalDrawer(extraFieldsDrawerSlug, true)\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\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 closeDocumentDrawer()\n },\n [setParams, cacheBust, closeDocumentDrawer],\n )\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as BaseClientFeatureProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n const onExtraFieldsDrawerSubmit = useCallback(\n (_: FormState, data: JsonObject) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: null | UploadNode = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n },\n [editor, nodeKey],\n )\n\n const aspectRatio =\n thumbnailSRC && data?.width && data?.height\n ? data.width > data.height\n ? 'landscape'\n : 'portrait'\n : 'landscape'\n\n return (\n <div\n className={`${baseClass}__contents ${baseClass}__contents--${aspectRatio}`}\n data-align={format || undefined}\n data-filename={data?.filename}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__media`}>\n <Thumbnail\n collectionSlug={relationTo}\n fileSrc={isImage(data?.mimeType) ? thumbnailSRC : null}\n height={data?.height}\n size=\"none\"\n width={data?.width}\n />\n\n {isEditable && (\n <div className={`${baseClass}__overlay ${baseClass}__floater`}>\n <div className={`${baseClass}__actions`} role=\"toolbar\">\n {hasExtraFields ? (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"edit\"\n onClick={toggleDrawer}\n round\n size=\"medium\"\n tooltip={t('fields:editRelationship')}\n />\n ) : null}\n\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__swap-drawer-toggler`}\n disabled={!isEditable}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n size=\"medium\"\n tooltip={t('fields:swapUpload')}\n />\n\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={!isEditable}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n size=\"medium\"\n tooltip={t('fields:removeUpload')}\n />\n </div>\n </div>\n )}\n </div>\n\n <div className={`${baseClass}__metaOverlay ${baseClass}__floater`}>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <strong className={`${baseClass}__filename`}>\n {data?.filename || t('general:untitled')}\n </strong>\n </DocumentDrawerToggler>\n <div className={`${baseClass}__collectionLabel`}>\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </div>\n </div>\n </div>\n\n {value ? <DocumentDrawer onSave={updateUpload} /> : null}\n {hasExtraFields ? (\n <FieldsDrawer\n data={fields}\n drawerSlug={extraFieldsDrawerSlug}\n drawerTitle={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n featureKey=\"upload\"\n handleDrawerSubmit={onExtraFieldsDrawerSubmit}\n schemaPath={schemaPath}\n schemaPathSuffix={relatedCollection.slug}\n />\n ) : null}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}