@payloadcms/ui 3.0.0-beta.93 → 3.0.0-beta.94

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.
Files changed (109) hide show
  1. package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
  2. package/dist/elements/BulkUpload/AddFilesView/index.js +44 -30
  3. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  4. package/dist/elements/BulkUpload/AddFilesView/index.scss +14 -1
  5. package/dist/elements/BulkUpload/AddingFilesView/index.d.ts.map +1 -1
  6. package/dist/elements/BulkUpload/AddingFilesView/index.js +7 -7
  7. package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -1
  8. package/dist/elements/BulkUpload/DiscardWithoutSaving/index.d.ts.map +1 -1
  9. package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js +14 -17
  10. package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js.map +1 -1
  11. package/dist/elements/BulkUpload/DrawerCloseButton/index.d.ts +1 -2
  12. package/dist/elements/BulkUpload/DrawerCloseButton/index.d.ts.map +1 -1
  13. package/dist/elements/BulkUpload/DrawerCloseButton/index.js +5 -8
  14. package/dist/elements/BulkUpload/DrawerCloseButton/index.js.map +1 -1
  15. package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
  16. package/dist/elements/BulkUpload/EditForm/index.js +31 -28
  17. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  18. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  19. package/dist/elements/BulkUpload/FileSidebar/index.js +65 -55
  20. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  21. package/dist/elements/BulkUpload/FileSidebar/index.scss +4 -0
  22. package/dist/elements/BulkUpload/FormsManager/index.d.ts +4 -7
  23. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  24. package/dist/elements/BulkUpload/FormsManager/index.js +62 -36
  25. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  26. package/dist/elements/BulkUpload/Header/index.d.ts.map +1 -1
  27. package/dist/elements/BulkUpload/Header/index.js +1 -3
  28. package/dist/elements/BulkUpload/Header/index.js.map +1 -1
  29. package/dist/elements/BulkUpload/index.d.ts +21 -5
  30. package/dist/elements/BulkUpload/index.d.ts.map +1 -1
  31. package/dist/elements/BulkUpload/index.js +148 -51
  32. package/dist/elements/BulkUpload/index.js.map +1 -1
  33. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  34. package/dist/elements/DocumentDrawer/DrawerContent.js +18 -15
  35. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  36. package/dist/elements/DocumentDrawer/types.d.ts +1 -0
  37. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  38. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  39. package/dist/elements/DraggableSortable/index.d.ts.map +1 -1
  40. package/dist/elements/DraggableSortable/index.js +1 -0
  41. package/dist/elements/DraggableSortable/index.js.map +1 -1
  42. package/dist/elements/Dropzone/index.d.ts +3 -3
  43. package/dist/elements/Dropzone/index.d.ts.map +1 -1
  44. package/dist/elements/Dropzone/index.js +23 -50
  45. package/dist/elements/Dropzone/index.js.map +1 -1
  46. package/dist/elements/Dropzone/index.scss +6 -23
  47. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -1
  48. package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
  49. package/dist/elements/FileDetails/StaticFileDetails/index.d.ts.map +1 -1
  50. package/dist/elements/FileDetails/StaticFileDetails/index.js +0 -1
  51. package/dist/elements/FileDetails/StaticFileDetails/index.js.map +1 -1
  52. package/dist/elements/FileDetails/StaticFileDetails/index.scss +1 -0
  53. package/dist/elements/ListDrawer/index.scss +7 -0
  54. package/dist/elements/ShimmerEffect/index.d.ts +3 -3
  55. package/dist/elements/ShimmerEffect/index.d.ts.map +1 -1
  56. package/dist/elements/ShimmerEffect/index.js.map +1 -1
  57. package/dist/elements/Thumbnail/index.d.ts +10 -6
  58. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  59. package/dist/elements/Thumbnail/index.js +84 -9
  60. package/dist/elements/Thumbnail/index.js.map +1 -1
  61. package/dist/elements/Upload/index.d.ts.map +1 -1
  62. package/dist/elements/Upload/index.js +59 -33
  63. package/dist/elements/Upload/index.js.map +1 -1
  64. package/dist/elements/Upload/index.scss +9 -0
  65. package/dist/exports/client/{CodeEditor-MTP455NO.js → CodeEditor-P66JEENA.js} +2 -2
  66. package/dist/exports/client/{chunk-NJHSEGFB.js → chunk-XKP472RX.js} +1 -1
  67. package/dist/exports/client/{chunk-NJHSEGFB.js.map → chunk-XKP472RX.js.map} +1 -1
  68. package/dist/exports/client/index.d.ts +3 -2
  69. package/dist/exports/client/index.d.ts.map +1 -1
  70. package/dist/exports/client/index.js +19 -19
  71. package/dist/exports/client/index.js.map +4 -4
  72. package/dist/fields/Upload/HasMany/index.d.ts +16 -2
  73. package/dist/fields/Upload/HasMany/index.d.ts.map +1 -1
  74. package/dist/fields/Upload/HasMany/index.js +148 -224
  75. package/dist/fields/Upload/HasMany/index.js.map +1 -1
  76. package/dist/fields/Upload/HasMany/index.scss +12 -56
  77. package/dist/fields/Upload/HasOne/index.d.ts +13 -9
  78. package/dist/fields/Upload/HasOne/index.d.ts.map +1 -1
  79. package/dist/fields/Upload/HasOne/index.js +30 -121
  80. package/dist/fields/Upload/HasOne/index.js.map +1 -1
  81. package/dist/fields/Upload/HasOne/index.scss +0 -68
  82. package/dist/fields/Upload/{HasOne/Input.d.ts → Input.d.ts} +9 -4
  83. package/dist/fields/Upload/Input.d.ts.map +1 -0
  84. package/dist/fields/Upload/Input.js +366 -0
  85. package/dist/fields/Upload/Input.js.map +1 -0
  86. package/dist/fields/Upload/RelationshipContent/index.d.ts +21 -0
  87. package/dist/fields/Upload/RelationshipContent/index.d.ts.map +1 -0
  88. package/dist/fields/Upload/RelationshipContent/index.js +135 -0
  89. package/dist/fields/Upload/RelationshipContent/index.js.map +1 -0
  90. package/dist/fields/Upload/RelationshipContent/index.scss +51 -0
  91. package/dist/fields/Upload/UploadCard/index.d.ts +10 -0
  92. package/dist/fields/Upload/UploadCard/index.d.ts.map +1 -0
  93. package/dist/fields/Upload/UploadCard/index.js +15 -0
  94. package/dist/fields/Upload/UploadCard/index.js.map +1 -0
  95. package/dist/fields/Upload/UploadCard/index.scss +27 -0
  96. package/dist/fields/Upload/index.d.ts +4 -4
  97. package/dist/fields/Upload/index.d.ts.map +1 -1
  98. package/dist/fields/Upload/index.js +85 -91
  99. package/dist/fields/Upload/index.js.map +1 -1
  100. package/dist/fields/Upload/index.scss +57 -0
  101. package/dist/providers/Root/index.d.ts +12 -12
  102. package/dist/providers/Root/index.d.ts.map +1 -1
  103. package/dist/providers/Root/index.js.map +1 -1
  104. package/dist/styles.css +1 -1
  105. package/package.json +5 -5
  106. package/dist/fields/Upload/HasOne/Input.d.ts.map +0 -1
  107. package/dist/fields/Upload/HasOne/Input.js +0 -324
  108. package/dist/fields/Upload/HasOne/Input.js.map +0 -1
  109. /package/dist/exports/client/{CodeEditor-MTP455NO.js.map → CodeEditor-P66JEENA.js.map} +0 -0
@@ -1,4 +1,18 @@
1
- import type { UploadFieldPropsWithContext } from '../HasOne/index.js';
1
+ import type { JsonObject } from 'payload';
2
+ import React from 'react';
2
3
  import './index.scss';
3
- export declare const UploadComponentHasMany: React.FC<UploadFieldPropsWithContext<string[]>>;
4
+ type Props = {
5
+ readonly className?: string;
6
+ readonly fileDocs: {
7
+ relationTo: string;
8
+ value: JsonObject;
9
+ }[];
10
+ readonly isSortable?: boolean;
11
+ readonly onRemove?: (value: any) => void;
12
+ readonly onReorder?: (value: any) => void;
13
+ readonly readonly?: boolean;
14
+ readonly serverURL: string;
15
+ };
16
+ export declare function UploadComponentHasMany(props: Props): React.JSX.Element;
17
+ export {};
4
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/Upload/HasMany/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAcrE,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAAC,MAAM,EAAE,CAAC,CAyQlF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/Upload/HasMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE;QACjB,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,UAAU,CAAA;KAClB,EAAE,CAAA;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,KAAA,KAAK,IAAI,CAAA;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,KAAA,KAAK,IAAI,CAAA;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AACD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,qBAuFlD"}
@@ -1,238 +1,162 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- import * as qs from 'qs-esm';
5
- import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';
6
- import { AddNewRelation } from '../../../elements/AddNewRelation/index.js';
7
- import { Button } from '../../../elements/Button/index.js';
5
+ import React from 'react';
6
+ import { DraggableSortableItem } from '../../../elements/DraggableSortable/DraggableSortableItem/index.js';
8
7
  import { DraggableSortable } from '../../../elements/DraggableSortable/index.js';
9
- import { FileDetails } from '../../../elements/FileDetails/index.js';
10
- import { useListDrawer } from '../../../elements/ListDrawer/index.js';
11
- import { useConfig } from '../../../providers/Config/index.js';
12
- import { useLocale } from '../../../providers/Locale/index.js';
13
- import { useTranslation } from '../../../providers/Translation/index.js';
14
- import { FieldLabel } from '../../FieldLabel/index.js';
8
+ import { DragHandleIcon } from '../../../icons/DragHandle/index.js';
9
+ import { RelationshipContent } from '../RelationshipContent/index.js';
10
+ import { UploadCard } from '../UploadCard/index.js';
15
11
  const baseClass = 'upload upload--has-many';
16
12
  import './index.scss';
17
- export const UploadComponentHasMany = props => {
13
+ export function UploadComponentHasMany(props) {
14
+ const $ = _c(23);
18
15
  const {
19
- canCreate,
20
- field,
21
- field: {
22
- _path,
23
- admin: {
24
- components: {
25
- Label
26
- },
27
- isSortable
28
- },
29
- hasMany,
30
- label,
31
- relationTo
32
- },
33
- fieldHookResult: {
34
- filterOptions: filterOptionsFromProps,
35
- setValue,
36
- value
37
- },
38
- readOnly
16
+ className,
17
+ fileDocs,
18
+ isSortable,
19
+ onRemove,
20
+ onReorder,
21
+ readonly,
22
+ serverURL
39
23
  } = props;
40
- const {
41
- i18n,
42
- t
43
- } = useTranslation();
44
- const {
45
- config: {
46
- collections,
47
- routes: {
48
- api
49
- },
50
- serverURL
51
- }
52
- } = useConfig();
53
- const filterOptions = useMemo(() => {
54
- if (typeof relationTo === 'string') {
55
- return {
56
- ...filterOptionsFromProps,
57
- [relationTo]: {
58
- ...(filterOptionsFromProps?.[relationTo] || {}),
59
- id: {
60
- ...(filterOptionsFromProps?.[relationTo]?.id || {}),
61
- not_in: filterOptionsFromProps?.[relationTo]?.id?.not_in || value
62
- }
63
- }
24
+ let t0;
25
+ if ($[0] !== fileDocs || $[1] !== onReorder) {
26
+ t0 = (moveFromIndex, moveToIndex) => {
27
+ if (moveFromIndex === moveToIndex) {
28
+ return;
29
+ }
30
+ const updatedArray = [...fileDocs];
31
+ const [item] = updatedArray.splice(moveFromIndex, 1);
32
+ updatedArray.splice(moveToIndex, 0, item);
33
+ onReorder(updatedArray);
34
+ };
35
+ $[0] = fileDocs;
36
+ $[1] = onReorder;
37
+ $[2] = t0;
38
+ } else {
39
+ t0 = $[2];
40
+ }
41
+ const moveRow = t0;
42
+ let t1;
43
+ if ($[3] !== fileDocs || $[4] !== onRemove) {
44
+ t1 = index => {
45
+ const updatedArray_0 = [...(fileDocs || [])];
46
+ updatedArray_0.splice(index, 1);
47
+ onRemove(updatedArray_0.length === 0 ? [] : updatedArray_0);
48
+ };
49
+ $[3] = fileDocs;
50
+ $[4] = onRemove;
51
+ $[5] = t1;
52
+ } else {
53
+ t1 = $[5];
54
+ }
55
+ const removeItem = t1;
56
+ let t2;
57
+ if ($[6] !== className) {
58
+ t2 = [baseClass, className].filter(Boolean);
59
+ $[6] = className;
60
+ $[7] = t2;
61
+ } else {
62
+ t2 = $[7];
63
+ }
64
+ const t3 = t2.join(" ");
65
+ let t4;
66
+ if ($[8] !== fileDocs || $[9] !== moveRow || $[10] !== isSortable || $[11] !== readonly || $[12] !== removeItem || $[13] !== serverURL || $[14] !== t3) {
67
+ let t5;
68
+ if ($[16] !== moveRow) {
69
+ t5 = t6 => {
70
+ const {
71
+ moveFromIndex: moveFromIndex_0,
72
+ moveToIndex: moveToIndex_0
73
+ } = t6;
74
+ return moveRow(moveFromIndex_0, moveToIndex_0);
64
75
  };
76
+ $[16] = moveRow;
77
+ $[17] = t5;
78
+ } else {
79
+ t5 = $[17];
65
80
  }
66
- }, [value, relationTo, filterOptionsFromProps]);
67
- const [fileDocs, setFileDocs] = useState([]);
68
- const [missingFiles, setMissingFiles] = useState(false);
69
- const {
70
- code
71
- } = useLocale();
72
- useEffect(() => {
73
- if (value !== null && typeof value !== 'undefined' && value.length !== 0) {
74
- const query = {
75
- depth: 0,
76
- draft: true,
77
- locale: code,
78
- where: {
79
- and: [{
80
- id: {
81
- in: value
82
- }
83
- }]
84
- }
85
- };
86
- const fetchFile = async () => {
87
- const response = await fetch(`${serverURL}${api}/${relationTo}`, {
88
- body: qs.stringify(query),
89
- credentials: 'include',
90
- headers: {
91
- 'Accept-Language': i18n.language,
92
- 'Content-Type': 'application/x-www-form-urlencoded',
93
- 'X-HTTP-Method-Override': 'GET'
94
- },
95
- method: 'POST'
96
- });
97
- if (response.ok) {
98
- const json = await response.json();
99
- setFileDocs(json.docs);
100
- } else {
101
- setMissingFiles(true);
102
- setFileDocs([]);
103
- }
81
+ let t6;
82
+ if ($[18] !== isSortable || $[19] !== readonly || $[20] !== removeItem || $[21] !== serverURL) {
83
+ t6 = (t7, index_0) => {
84
+ const {
85
+ relationTo,
86
+ value: value_0
87
+ } = t7;
88
+ const id = String(value_0.id);
89
+ return _jsx(DraggableSortableItem, {
90
+ disabled: !isSortable,
91
+ id,
92
+ children: draggableSortableItemProps => _jsx("div", {
93
+ className: [`${baseClass}__dragItem`, draggableSortableItemProps && isSortable && `${baseClass}--has-drag-handle`].filter(Boolean).join(" "),
94
+ ref: draggableSortableItemProps.setNodeRef,
95
+ style: {
96
+ transform: draggableSortableItemProps.transform,
97
+ transition: draggableSortableItemProps.transition,
98
+ zIndex: draggableSortableItemProps.isDragging ? 1 : undefined
99
+ },
100
+ children: _jsxs(UploadCard, {
101
+ size: "small",
102
+ children: [isSortable && draggableSortableItemProps && _jsx("div", {
103
+ className: `${baseClass}__drag`,
104
+ ...draggableSortableItemProps.attributes,
105
+ ...draggableSortableItemProps.listeners,
106
+ children: _jsx(DragHandleIcon, {})
107
+ }), _jsx(RelationshipContent, {
108
+ allowEdit: !readonly,
109
+ allowRemove: !readonly,
110
+ alt: value_0?.alt || value_0?.filename,
111
+ byteSize: value_0.filesize,
112
+ collectionSlug: relationTo,
113
+ filename: value_0.filename,
114
+ id,
115
+ mimeType: value_0?.mimeType,
116
+ onRemove: () => removeItem(index_0),
117
+ src: `${serverURL}${value_0.url}`,
118
+ withMeta: false,
119
+ x: value_0?.width,
120
+ y: value_0?.height
121
+ })]
122
+ })
123
+ })
124
+ }, id);
104
125
  };
105
- void fetchFile();
126
+ $[18] = isSortable;
127
+ $[19] = readonly;
128
+ $[20] = removeItem;
129
+ $[21] = serverURL;
130
+ $[22] = t6;
131
+ } else {
132
+ t6 = $[22];
106
133
  }
107
- }, [value, relationTo, api, serverURL, i18n, code]);
108
- function moveItemInArray(array, moveFromIndex, moveToIndex) {
109
- const newArray = [...array];
110
- const [item] = newArray.splice(moveFromIndex, 1);
111
- newArray.splice(moveToIndex, 0, item);
112
- return newArray;
113
- }
114
- const moveRow = useCallback((moveFromIndex_0, moveToIndex_0) => {
115
- const updatedArray = moveItemInArray(value, moveFromIndex_0, moveToIndex_0);
116
- setValue(updatedArray);
117
- }, [value, setValue]);
118
- const removeItem = useCallback(index => {
119
- const updatedArray_0 = [...value];
120
- updatedArray_0.splice(index, 1);
121
- setValue(updatedArray_0);
122
- }, [value, setValue]);
123
- const [ListDrawer, ListDrawerToggler] = useListDrawer({
124
- collectionSlugs: typeof relationTo === 'string' ? [relationTo] : collections.map(collection => collection.slug),
125
- filterOptions
126
- });
127
- const collection_0 = collections.find(coll => coll.slug === relationTo);
128
- // Get the labels of the collections that the relation is to
129
- const labels_0 = useMemo(() => {
130
- function joinWithCommaAndOr(items) {
131
- const or = t('general:or');
132
- if (items.length === 0) return '';
133
- if (items.length === 1) return items[0];
134
- if (items.length === 2) return items.join(` ${or} `);
135
- return items.slice(0, -1).join(', ') + ` ${or} ` + items[items.length - 1];
136
- }
137
- const labels = [];
138
- collections.forEach(collection_1 => {
139
- if (relationTo.includes(collection_1.slug)) {
140
- labels.push(collection_1.labels?.singular || collection_1.slug);
141
- }
134
+ t4 = _jsx("div", {
135
+ className: t3,
136
+ children: _jsx(DraggableSortable, {
137
+ className: `${baseClass}__draggable-rows`,
138
+ ids: fileDocs?.map(_temp),
139
+ onDragEnd: t5,
140
+ children: fileDocs.map(t6)
141
+ })
142
142
  });
143
- return joinWithCommaAndOr(labels);
144
- }, [collections, relationTo, t]);
145
- const onBulkSelect = useCallback(selections => {
146
- const selectedIDs = Object.entries(selections).reduce((acc, [key, value_0]) => value_0 ? [...acc, key] : acc, []);
147
- if (value?.length) setValue([...value, ...selectedIDs]);else setValue(selectedIDs);
148
- }, [setValue, value]);
149
- return /*#__PURE__*/_jsxs(Fragment, {
150
- children: [/*#__PURE__*/_jsxs("div", {
151
- className: [baseClass].join(' '),
152
- children: [/*#__PURE__*/_jsx(FieldLabel, {
153
- Label: Label,
154
- field: field,
155
- label: label
156
- }), /*#__PURE__*/_jsx("div", {
157
- children: missingFiles || !value?.length ? /*#__PURE__*/_jsx("div", {
158
- className: [`${baseClass}__no-data`].join(' '),
159
- children: t('version:noRowsSelected', {
160
- label: labels_0
161
- })
162
- }) : /*#__PURE__*/_jsx(DraggableSortable, {
163
- className: `${baseClass}__draggable-rows`,
164
- ids: value,
165
- onDragEnd: ({
166
- moveFromIndex: moveFromIndex_1,
167
- moveToIndex: moveToIndex_1
168
- }) => moveRow(moveFromIndex_1, moveToIndex_1),
169
- children: Boolean(value.length) && value.map((id, index_0) => {
170
- const doc_0 = fileDocs.find(doc => doc.id === id);
171
- const uploadConfig = collection_0?.upload;
172
- if (!doc_0) {
173
- return null;
174
- }
175
- return /*#__PURE__*/_jsx(FileDetails, {
176
- collectionSlug: relationTo,
177
- doc: doc_0,
178
- hasMany: true,
179
- isSortable: isSortable,
180
- removeItem: removeItem,
181
- rowIndex: index_0,
182
- uploadConfig: uploadConfig
183
- }, id);
184
- })
185
- })
186
- }), /*#__PURE__*/_jsxs("div", {
187
- className: [`${baseClass}__controls`].join(' '),
188
- children: [/*#__PURE__*/_jsxs("div", {
189
- className: [`${baseClass}__buttons`].join(' '),
190
- children: [canCreate && /*#__PURE__*/_jsx("div", {
191
- className: [`${baseClass}__add-new`].join(' '),
192
- children: /*#__PURE__*/_jsx(AddNewRelation, {
193
- Button: /*#__PURE__*/_jsx(Button, {
194
- buttonStyle: "icon-label",
195
- el: "span",
196
- icon: "plus",
197
- iconPosition: "left",
198
- iconStyle: "with-border",
199
- children: t('fields:addNew')
200
- }),
201
- hasMany: hasMany,
202
- path: _path,
203
- relationTo: relationTo,
204
- setValue: setValue,
205
- unstyled: true,
206
- value: value
207
- })
208
- }), /*#__PURE__*/_jsx(ListDrawerToggler, {
209
- className: `${baseClass}__toggler`,
210
- disabled: readOnly,
211
- children: /*#__PURE__*/_jsx("div", {
212
- children: /*#__PURE__*/_jsx(Button, {
213
- buttonStyle: "icon-label",
214
- el: "span",
215
- icon: "plus",
216
- iconPosition: "left",
217
- iconStyle: "with-border",
218
- children: t('fields:chooseFromExisting')
219
- })
220
- })
221
- })]
222
- }), Boolean(value.length) && /*#__PURE__*/_jsx("button", {
223
- className: `${baseClass}__clear-all`,
224
- onClick: () => setValue([]),
225
- type: "button",
226
- children: t('general:clearAll')
227
- })]
228
- })]
229
- }), /*#__PURE__*/_jsx(ListDrawer, {
230
- enableRowSelections: true,
231
- onBulkSelect: onBulkSelect,
232
- onSelect: selection => {
233
- if (value?.length) setValue([...value, selection.docID]);else setValue([selection.docID]);
234
- }
235
- })]
236
- });
237
- };
143
+ $[8] = fileDocs;
144
+ $[9] = moveRow;
145
+ $[10] = isSortable;
146
+ $[11] = readonly;
147
+ $[12] = removeItem;
148
+ $[13] = serverURL;
149
+ $[14] = t3;
150
+ $[15] = t4;
151
+ } else {
152
+ t4 = $[15];
153
+ }
154
+ return t4;
155
+ }
156
+ function _temp(t0) {
157
+ const {
158
+ value
159
+ } = t0;
160
+ return String(value.id);
161
+ }
238
162
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["qs","Fragment","useCallback","useEffect","useMemo","useState","AddNewRelation","Button","DraggableSortable","FileDetails","useListDrawer","useConfig","useLocale","useTranslation","FieldLabel","baseClass","UploadComponentHasMany","props","canCreate","field","_path","admin","components","Label","isSortable","hasMany","label","relationTo","fieldHookResult","filterOptions","filterOptionsFromProps","setValue","value","readOnly","i18n","t","config","collections","routes","api","serverURL","id","not_in","fileDocs","setFileDocs","missingFiles","setMissingFiles","code","length","query","depth","draft","locale","where","and","in","fetchFile","response","fetch","body","stringify","credentials","headers","language","method","ok","json","docs","moveItemInArray","array","moveFromIndex","moveToIndex","newArray","item","splice","moveRow","updatedArray","removeItem","index","ListDrawer","ListDrawerToggler","collectionSlugs","map","collection","slug","find","coll","labels","joinWithCommaAndOr","items","or","join","slice","forEach","includes","push","singular","onBulkSelect","selections","selectedIDs","Object","entries","reduce","acc","key","_jsxs","className","_jsx","ids","onDragEnd","Boolean","doc","uploadConfig","upload","collectionSlug","rowIndex","buttonStyle","el","icon","iconPosition","iconStyle","path","unstyled","disabled","onClick","type","enableRowSelections","onSelect","selection","docID"],"sources":["../../../../src/fields/Upload/HasMany/index.tsx"],"sourcesContent":["'use client'\nimport type { FilterOptionsResult, Where } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { useSelection } from '../../../providers/Selection/index.js'\nimport type { UploadFieldPropsWithContext } from '../HasOne/index.js'\n\nimport { AddNewRelation } from '../../../elements/AddNewRelation/index.js'\nimport { Button } from '../../../elements/Button/index.js'\nimport { DraggableSortable } from '../../../elements/DraggableSortable/index.js'\nimport { FileDetails } from '../../../elements/FileDetails/index.js'\nimport { useListDrawer } from '../../../elements/ListDrawer/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { FieldLabel } from '../../FieldLabel/index.js'\n\nconst baseClass = 'upload upload--has-many'\n\nimport './index.scss'\n\nexport const UploadComponentHasMany: React.FC<UploadFieldPropsWithContext<string[]>> = (props) => {\n const {\n canCreate,\n field,\n field: {\n _path,\n admin: {\n components: { Label },\n isSortable,\n },\n hasMany,\n label,\n relationTo,\n },\n fieldHookResult: { filterOptions: filterOptionsFromProps, setValue, value },\n readOnly,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const filterOptions: FilterOptionsResult = useMemo(() => {\n if (typeof relationTo === 'string') {\n return {\n ...filterOptionsFromProps,\n [relationTo]: {\n ...((filterOptionsFromProps?.[relationTo] as any) || {}),\n id: {\n ...((filterOptionsFromProps?.[relationTo] as any)?.id || {}),\n not_in: (filterOptionsFromProps?.[relationTo] as any)?.id?.not_in || value,\n },\n },\n }\n }\n }, [value, relationTo, filterOptionsFromProps])\n\n const [fileDocs, setFileDocs] = useState([])\n const [missingFiles, setMissingFiles] = useState(false)\n\n const { code } = useLocale()\n\n useEffect(() => {\n if (value !== null && typeof value !== 'undefined' && value.length !== 0) {\n const query: {\n [key: string]: unknown\n where: Where\n } = {\n depth: 0,\n draft: true,\n locale: code,\n where: {\n and: [\n {\n id: {\n in: value,\n },\n },\n ],\n },\n }\n\n const fetchFile = async () => {\n const response = await fetch(`${serverURL}${api}/${relationTo}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n if (response.ok) {\n const json = await response.json()\n setFileDocs(json.docs)\n } else {\n setMissingFiles(true)\n setFileDocs([])\n }\n }\n\n void fetchFile()\n }\n }, [value, relationTo, api, serverURL, i18n, code])\n\n function moveItemInArray<T>(array: T[], moveFromIndex: number, moveToIndex: number): T[] {\n const newArray = [...array]\n const [item] = newArray.splice(moveFromIndex, 1)\n\n newArray.splice(moveToIndex, 0, item)\n\n return newArray\n }\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n const updatedArray = moveItemInArray(value, moveFromIndex, moveToIndex)\n setValue(updatedArray)\n },\n [value, setValue],\n )\n\n const removeItem = useCallback(\n (index: number) => {\n const updatedArray = [...value]\n updatedArray.splice(index, 1)\n setValue(updatedArray)\n },\n [value, setValue],\n )\n\n const [ListDrawer, ListDrawerToggler] = useListDrawer({\n collectionSlugs:\n typeof relationTo === 'string'\n ? [relationTo]\n : collections.map((collection) => collection.slug),\n filterOptions,\n })\n\n const collection = collections.find((coll) => coll.slug === relationTo)\n\n // Get the labels of the collections that the relation is to\n const labels = useMemo(() => {\n function joinWithCommaAndOr(items: string[]): string {\n const or = t('general:or')\n\n if (items.length === 0) return ''\n if (items.length === 1) return items[0]\n if (items.length === 2) return items.join(` ${or} `)\n\n return items.slice(0, -1).join(', ') + ` ${or} ` + items[items.length - 1]\n }\n\n const labels = []\n\n collections.forEach((collection) => {\n if (relationTo.includes(collection.slug)) {\n labels.push(collection.labels?.singular || collection.slug)\n }\n })\n\n return joinWithCommaAndOr(labels)\n }, [collections, relationTo, t])\n\n const onBulkSelect = useCallback(\n (selections: ReturnType<typeof useSelection>['selected']) => {\n const selectedIDs = Object.entries(selections).reduce(\n (acc, [key, value]) => (value ? [...acc, key] : acc),\n [] as string[],\n )\n if (value?.length) setValue([...value, ...selectedIDs])\n else setValue(selectedIDs)\n },\n [setValue, value],\n )\n\n return (\n <Fragment>\n <div className={[baseClass].join(' ')}>\n <FieldLabel Label={Label} field={field} label={label} />\n\n <div>\n {missingFiles || !value?.length ? (\n <div className={[`${baseClass}__no-data`].join(' ')}>\n {t('version:noRowsSelected', { label: labels })}\n </div>\n ) : (\n <DraggableSortable\n className={`${baseClass}__draggable-rows`}\n ids={value}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {Boolean(value.length) &&\n value.map((id, index) => {\n const doc = fileDocs.find((doc) => doc.id === id)\n const uploadConfig = collection?.upload\n\n if (!doc) {\n return null\n }\n\n return (\n <FileDetails\n collectionSlug={relationTo}\n doc={doc}\n hasMany={true}\n isSortable={isSortable}\n key={id}\n removeItem={removeItem}\n rowIndex={index}\n uploadConfig={uploadConfig}\n />\n )\n })}\n </DraggableSortable>\n )}\n </div>\n\n <div className={[`${baseClass}__controls`].join(' ')}>\n <div className={[`${baseClass}__buttons`].join(' ')}>\n {canCreate && (\n <div className={[`${baseClass}__add-new`].join(' ')}>\n <AddNewRelation\n Button={\n <Button\n buttonStyle=\"icon-label\"\n el=\"span\"\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n >\n {t('fields:addNew')}\n </Button>\n }\n hasMany={hasMany}\n path={_path}\n relationTo={relationTo}\n setValue={setValue}\n unstyled\n value={value}\n />\n </div>\n )}\n <ListDrawerToggler className={`${baseClass}__toggler`} disabled={readOnly}>\n <div>\n <Button\n buttonStyle=\"icon-label\"\n el=\"span\"\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n >\n {t('fields:chooseFromExisting')}\n </Button>\n </div>\n </ListDrawerToggler>\n </div>\n {Boolean(value.length) && (\n <button\n className={`${baseClass}__clear-all`}\n onClick={() => setValue([])}\n type=\"button\"\n >\n {t('general:clearAll')}\n </button>\n )}\n </div>\n </div>\n <ListDrawer\n enableRowSelections\n onBulkSelect={onBulkSelect}\n onSelect={(selection) => {\n if (value?.length) setValue([...value, selection.docID])\n else setValue([selection.docID])\n }}\n />\n </Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","DraggableSortableItem","DraggableSortable","DragHandleIcon","RelationshipContent","UploadCard","baseClass","UploadComponentHasMany","props","$","className","fileDocs","isSortable","onRemove","onReorder","readonly","serverURL","t0","moveFromIndex","moveToIndex","updatedArray","item","splice","moveRow","t1","index","updatedArray_0","length","removeItem","t2","filter","Boolean","t3","join","t4","t5","t6","moveFromIndex_0","moveToIndex_0","t7","index_0","relationTo","value","value_0","id","String","_jsx","disabled","children","draggableSortableItemProps","ref","setNodeRef","style","transform","transition","zIndex","isDragging","undefined","_jsxs","size","attributes","listeners","allowEdit","allowRemove","alt","filename","byteSize","filesize","collectionSlug","mimeType","src","url","withMeta","x","width","y","height","ids","map","_temp","onDragEnd"],"sources":["../../../../src/fields/Upload/HasMany/index.tsx"],"sourcesContent":["'use client'\nimport type { JsonObject } from 'payload'\n\nimport React from 'react'\n\nimport { DraggableSortableItem } from '../../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport { DraggableSortable } from '../../../elements/DraggableSortable/index.js'\nimport { DragHandleIcon } from '../../../icons/DragHandle/index.js'\nimport { RelationshipContent } from '../RelationshipContent/index.js'\nimport { UploadCard } from '../UploadCard/index.js'\n\nconst baseClass = 'upload upload--has-many'\n\nimport './index.scss'\n\ntype Props = {\n readonly className?: string\n readonly fileDocs: {\n relationTo: string\n value: JsonObject\n }[]\n readonly isSortable?: boolean\n readonly onRemove?: (value) => void\n readonly onReorder?: (value) => void\n readonly readonly?: boolean\n readonly serverURL: string\n}\nexport function UploadComponentHasMany(props: Props) {\n const { className, fileDocs, isSortable, onRemove, onReorder, readonly, serverURL } = props\n\n const moveRow = React.useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n if (moveFromIndex === moveToIndex) return\n\n const updatedArray = [...fileDocs]\n const [item] = updatedArray.splice(moveFromIndex, 1)\n\n updatedArray.splice(moveToIndex, 0, item)\n\n onReorder(updatedArray)\n },\n [fileDocs, onReorder],\n )\n\n const removeItem = React.useCallback(\n (index: number) => {\n const updatedArray = [...(fileDocs || [])]\n updatedArray.splice(index, 1)\n onRemove(updatedArray.length === 0 ? [] : updatedArray)\n },\n [fileDocs, onRemove],\n )\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n <DraggableSortable\n className={`${baseClass}__draggable-rows`}\n ids={fileDocs?.map(({ value }) => String(value.id))}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {fileDocs.map(({ relationTo, value }, index) => {\n const id = String(value.id)\n return (\n <DraggableSortableItem disabled={!isSortable} id={id} key={id}>\n {(draggableSortableItemProps) => (\n <div\n className={[\n `${baseClass}__dragItem`,\n draggableSortableItemProps && isSortable && `${baseClass}--has-drag-handle`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={draggableSortableItemProps.setNodeRef}\n style={{\n transform: draggableSortableItemProps.transform,\n transition: draggableSortableItemProps.transition,\n zIndex: draggableSortableItemProps.isDragging ? 1 : undefined,\n }}\n >\n <UploadCard size=\"small\">\n {isSortable && draggableSortableItemProps && (\n <div\n className={`${baseClass}__drag`}\n {...draggableSortableItemProps.attributes}\n {...draggableSortableItemProps.listeners}\n >\n <DragHandleIcon />\n </div>\n )}\n\n <RelationshipContent\n allowEdit={!readonly}\n allowRemove={!readonly}\n alt={(value?.alt || value?.filename) as string}\n byteSize={value.filesize as number}\n collectionSlug={relationTo}\n filename={value.filename as string}\n id={id}\n mimeType={value?.mimeType as string}\n onRemove={() => removeItem(index)}\n src={`${serverURL}${value.url}`}\n withMeta={false}\n x={value?.width as number}\n y={value?.height as number}\n />\n </UploadCard>\n </div>\n )}\n </DraggableSortableItem>\n )\n })}\n </DraggableSortable>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,68 +4,24 @@
4
4
  position: relative;
5
5
  max-width: 100%;
6
6
 
7
- &__controls {
8
- display: flex;
9
- flex-wrap: wrap;
10
- gap: base(2);
11
- margin-top: base(1);
12
-
13
- @include extra-small-break {
14
- gap: base(1);
15
- }
16
- }
17
-
18
- &__buttons {
19
- display: flex;
20
- flex-wrap: wrap;
21
- gap: base(1);
22
-
23
- & .relationship-add-new__add-button {
24
- padding: 0;
25
- }
26
- }
27
-
28
- &__add-new {
29
- display: flex;
30
- gap: base(0.5);
31
- }
32
-
33
- &__clear-all {
34
- all: unset;
35
- flex-shrink: 0;
36
- font-size: inherit;
37
- font-family: inherit;
38
- color: inherit;
39
- cursor: pointer;
40
- margin-inline-start: auto;
41
- color: var(--theme-elevation-800);
42
-
43
- @include extra-small-break {
44
- margin-inline-start: 0;
45
- }
46
- }
47
-
48
7
  &__draggable-rows {
49
8
  display: flex;
50
9
  flex-direction: column;
51
- gap: 0.25rem;
10
+ gap: calc(var(--base) / 4);
52
11
  }
53
12
 
54
- &__no-data {
55
- background: var(--theme-elevation-50);
56
- padding: 1rem 0.75rem;
57
- border-radius: 3px;
58
- color: var(--theme-elevation-700);
59
- text-align: center;
60
- }
61
- }
13
+ &__dragItem {
14
+ .icon--drag-handle {
15
+ color: var(--theme-elevation-400);
16
+ }
62
17
 
63
- html[data-theme='light'] {
64
- .upload {
65
- }
66
- }
18
+ .thumbnail {
19
+ width: 26px;
20
+ height: 26px;
21
+ }
67
22
 
68
- html[data-theme='dark'] {
69
- .upload {
23
+ .uploadDocRelationshipContent__details {
24
+ line-height: 1.2;
25
+ }
70
26
  }
71
27
  }
@@ -1,12 +1,16 @@
1
- import type { UploadFieldProps } from 'payload';
1
+ import type { JsonObject } from 'payload';
2
2
  import React from 'react';
3
- import type { useField } from '../../../forms/useField/index.js';
4
3
  import './index.scss';
5
- export type UploadFieldPropsWithContext<TValue extends string | string[] = string> = {
6
- readonly canCreate: boolean;
7
- readonly disabled: boolean;
8
- readonly fieldHookResult: ReturnType<typeof useField<TValue>>;
9
- readonly onChange: (value: unknown) => void;
10
- } & UploadFieldProps;
11
- export declare const UploadComponentHasOne: React.FC<UploadFieldPropsWithContext>;
4
+ type Props = {
5
+ readonly className?: string;
6
+ readonly fileDoc: {
7
+ relationTo: string;
8
+ value: JsonObject;
9
+ };
10
+ readonly onRemove?: () => void;
11
+ readonly readonly?: boolean;
12
+ readonly serverURL: string;
13
+ };
14
+ export declare function UploadComponentHasOne(props: Props): React.JSX.Element;
15
+ export {};
12
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/Upload/HasOne/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAIhE,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,2BAA2B,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,IAAI;IACnF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7D,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CAC5C,GAAG,gBAAgB,CAAA;AAEpB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAwDvE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/Upload/HasOne/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,cAAc,CAAA;AAIrB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,UAAU,CAAA;KAClB,CAAA;IACD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,qBAuBjD"}