@payloadcms/ui 3.51.0-canary.6 → 3.51.0-internal.886ed9f
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/elements/Autosave/index.d.ts.map +1 -1
- package/dist/elements/Autosave/index.js +102 -31
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +1 -2
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/reducer.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/reducer.js +1 -2
- package/dist/elements/BulkUpload/FormsManager/reducer.js.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.d.ts +0 -5
- package/dist/elements/DocumentDrawer/Provider.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
- package/dist/elements/DocumentFields/index.scss +0 -1
- package/dist/elements/{QueryPresets/QueryPresetToggler → ListControls/ActiveQueryPreset}/index.d.ts +1 -1
- package/dist/elements/ListControls/ActiveQueryPreset/index.d.ts.map +1 -0
- package/dist/elements/ListControls/ActiveQueryPreset/index.js +180 -0
- package/dist/elements/ListControls/ActiveQueryPreset/index.js.map +1 -0
- package/dist/elements/ListControls/ActiveQueryPreset/index.scss +33 -0
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +127 -103
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListControls/index.scss +32 -44
- package/dist/elements/ListControls/useQueryPresets.d.ts +17 -0
- package/dist/elements/ListControls/useQueryPresets.d.ts.map +1 -0
- package/dist/elements/{QueryPresets/QueryPresetBar/index.js → ListControls/useQueryPresets.js} +60 -80
- package/dist/elements/ListControls/useQueryPresets.js.map +1 -0
- package/dist/elements/Pill/index.scss +1 -1
- package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
- package/dist/elements/Table/OrderableTable.js +1 -2
- package/dist/elements/Table/OrderableTable.js.map +1 -1
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +14 -14
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/exports/client/index.js +24 -24
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/Select/index.js +1 -2
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
- package/dist/forms/Form/fieldReducer.js +0 -2
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +14 -32
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.d.ts +2 -15
- package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +1 -9
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/types.d.ts +3 -38
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +0 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/index.js +8 -7
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/DocumentInfo/types.d.ts +5 -16
- package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/DocumentTitle/index.d.ts.map +1 -1
- package/dist/providers/DocumentTitle/index.js +4 -4
- package/dist/providers/DocumentTitle/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +14 -21
- package/dist/views/Edit/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/elements/QueryPresets/QueryPresetBar/index.d.ts +0 -9
- package/dist/elements/QueryPresets/QueryPresetBar/index.d.ts.map +0 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +0 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.scss +0 -41
- package/dist/elements/QueryPresets/QueryPresetToggler/index.d.ts.map +0 -1
- package/dist/elements/QueryPresets/QueryPresetToggler/index.js +0 -198
- package/dist/elements/QueryPresets/QueryPresetToggler/index.js.map +0 -1
- package/dist/elements/QueryPresets/QueryPresetToggler/index.scss +0 -61
|
@@ -2,48 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
@layer payload-default {
|
|
4
4
|
.list-controls {
|
|
5
|
-
display: flex;
|
|
6
|
-
flex-direction: column;
|
|
7
|
-
gap: 2px;
|
|
8
|
-
|
|
9
5
|
&__wrap {
|
|
10
6
|
display: flex;
|
|
11
7
|
align-items: center;
|
|
12
|
-
justify-content: space-between;
|
|
13
|
-
gap: base(0.5);
|
|
14
8
|
background-color: var(--theme-elevation-50);
|
|
15
9
|
border-radius: var(--style-radius-m);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
&__search {
|
|
19
|
-
display: flex;
|
|
20
|
-
background-color: var(--theme-elevation-50);
|
|
21
|
-
border-radius: var(--style-radius-m);
|
|
22
|
-
gap: base(0.4);
|
|
23
|
-
flex-grow: 1;
|
|
24
|
-
position: relative;
|
|
25
|
-
|
|
26
|
-
.icon {
|
|
27
|
-
flex-shrink: 0;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.icon--search {
|
|
32
|
-
position: absolute;
|
|
33
|
-
left: 0;
|
|
34
|
-
top: 50%;
|
|
35
|
-
transform: translate3d(0, -50%, 0);
|
|
36
|
-
inset-inline-start: base(0.4);
|
|
37
|
-
z-index: 1;
|
|
38
|
-
pointer-events: none;
|
|
10
|
+
padding: base(0.6);
|
|
11
|
+
gap: base(0.6);
|
|
39
12
|
}
|
|
40
13
|
|
|
41
14
|
.search-filter {
|
|
42
15
|
flex-grow: 1;
|
|
43
16
|
|
|
44
17
|
input {
|
|
45
|
-
height: 46px;
|
|
46
|
-
padding-left: 36px;
|
|
47
18
|
margin: 0;
|
|
48
19
|
}
|
|
49
20
|
}
|
|
@@ -53,11 +24,14 @@
|
|
|
53
24
|
border-radius: 0;
|
|
54
25
|
}
|
|
55
26
|
|
|
56
|
-
&
|
|
27
|
+
&__modified {
|
|
28
|
+
color: var(--theme-elevation-500);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&__buttons-wrap {
|
|
57
32
|
display: flex;
|
|
58
33
|
align-items: center;
|
|
59
34
|
gap: calc(var(--base) / 4);
|
|
60
|
-
padding-right: 10px;
|
|
61
35
|
}
|
|
62
36
|
|
|
63
37
|
.pill-selector,
|
|
@@ -69,25 +43,34 @@
|
|
|
69
43
|
|
|
70
44
|
@include small-break {
|
|
71
45
|
&__wrap {
|
|
72
|
-
flex-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
46
|
+
flex-wrap: wrap;
|
|
47
|
+
background-color: unset;
|
|
48
|
+
padding: 0;
|
|
49
|
+
position: relative;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.icon--search {
|
|
53
|
+
position: absolute;
|
|
54
|
+
top: base(0.4);
|
|
55
|
+
inset-inline-start: base(0.4);
|
|
56
|
+
z-index: 1;
|
|
76
57
|
}
|
|
77
58
|
|
|
78
59
|
.search-filter {
|
|
79
60
|
width: 100%;
|
|
80
|
-
|
|
81
61
|
input {
|
|
82
|
-
|
|
83
|
-
padding: 0 base(1.5);
|
|
62
|
+
padding: base(0.4) base(2);
|
|
84
63
|
}
|
|
85
64
|
}
|
|
86
65
|
|
|
87
|
-
&__buttons {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
66
|
+
&__buttons-wrap {
|
|
67
|
+
[dir='ltr'] & {
|
|
68
|
+
margin-right: 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
[dir='rtl'] & {
|
|
72
|
+
margin-left: 0;
|
|
73
|
+
}
|
|
91
74
|
|
|
92
75
|
.pill {
|
|
93
76
|
padding: base(0.2) base(0.2) base(0.2) base(0.4);
|
|
@@ -95,6 +78,11 @@
|
|
|
95
78
|
}
|
|
96
79
|
}
|
|
97
80
|
|
|
81
|
+
&__buttons {
|
|
82
|
+
margin: 0;
|
|
83
|
+
width: 100%;
|
|
84
|
+
}
|
|
85
|
+
|
|
98
86
|
.pill-selector,
|
|
99
87
|
.where-builder,
|
|
100
88
|
.sort-complex {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CollectionSlug, QueryPreset, SanitizedCollectionPermission } from 'payload';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export declare const useQueryPresets: ({ activePreset, collectionSlug, queryPresetPermissions, }: {
|
|
4
|
+
activePreset: QueryPreset;
|
|
5
|
+
collectionSlug: CollectionSlug;
|
|
6
|
+
queryPresetPermissions: SanitizedCollectionPermission;
|
|
7
|
+
}) => {
|
|
8
|
+
CreateNewPresetDrawer: React.ReactNode;
|
|
9
|
+
DeletePresetModal: React.ReactNode;
|
|
10
|
+
EditPresetDrawer: React.ReactNode;
|
|
11
|
+
hasModifiedPreset: boolean;
|
|
12
|
+
openPresetListDrawer: () => void;
|
|
13
|
+
PresetListDrawer: React.ReactNode;
|
|
14
|
+
queryPresetMenuItems: React.ReactNode[];
|
|
15
|
+
resetPreset: () => Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useQueryPresets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryPresets.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/useQueryPresets.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAA;AAKzF,OAAO,KAA+B,MAAM,OAAO,CAAA;AAiBnD,eAAO,MAAM,eAAe,8DAIzB;IACD,YAAY,EAAE,WAAW,CAAA;IACzB,cAAc,EAAE,cAAc,CAAA;IAC9B,sBAAsB,EAAE,6BAA6B,CAAA;CACtD,KAAG;IACF,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,oBAAoB,EAAE,MAAM,IAAI,CAAA;IAChC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,oBAAoB,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IACvC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAqSjC,CAAA"}
|
package/dist/elements/{QueryPresets/QueryPresetBar/index.js → ListControls/useQueryPresets.js}
RENAMED
|
@@ -1,25 +1,21 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useModal } from '@faceless-ui/modal';
|
|
3
3
|
import { getTranslation } from '@payloadcms/translations';
|
|
4
4
|
import { transformColumnsToPreferences, transformColumnsToSearchParams } from 'payload/shared';
|
|
5
|
-
import React, {
|
|
5
|
+
import React, { useCallback, useMemo } from 'react';
|
|
6
6
|
import { toast } from 'sonner';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { Translation } from '../../Translation/index.js';
|
|
17
|
-
import { QueryPresetToggler } from '../QueryPresetToggler/index.js';
|
|
18
|
-
import './index.scss';
|
|
7
|
+
import { useConfig } from '../../providers/Config/index.js';
|
|
8
|
+
import { useListQuery } from '../../providers/ListQuery/context.js';
|
|
9
|
+
import { useTranslation } from '../../providers/Translation/index.js';
|
|
10
|
+
import { ConfirmationModal } from '../ConfirmationModal/index.js';
|
|
11
|
+
import { useDocumentDrawer } from '../DocumentDrawer/index.js';
|
|
12
|
+
import { useListDrawer } from '../ListDrawer/index.js';
|
|
13
|
+
import { PopupList } from '../Popup/index.js';
|
|
14
|
+
import { PopupListGroupLabel } from '../Popup/PopupGroupLabel/index.js';
|
|
15
|
+
import { Translation } from '../Translation/index.js';
|
|
19
16
|
const confirmDeletePresetModalSlug = 'confirm-delete-preset';
|
|
20
17
|
const queryPresetsSlug = 'payload-query-presets';
|
|
21
|
-
const
|
|
22
|
-
export const QueryPresetBar = ({
|
|
18
|
+
export const useQueryPresets = ({
|
|
23
19
|
activePreset,
|
|
24
20
|
collectionSlug,
|
|
25
21
|
queryPresetPermissions
|
|
@@ -161,68 +157,45 @@ export const QueryPresetBar = ({
|
|
|
161
157
|
toast.error(t('error:unknown'));
|
|
162
158
|
}
|
|
163
159
|
}, [apiRoute, activePreset?.id, query.columns, query.where, t, presetConfig?.labels?.singular, i18n, setQueryModified]);
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
160
|
+
// Memoize so that components aren't re-rendered on query and column changes
|
|
161
|
+
const queryPresetMenuItems = useMemo(() => {
|
|
162
|
+
const hasModifiedPreset = activePreset && modified;
|
|
163
|
+
return [/*#__PURE__*/_jsx(PopupListGroupLabel, {
|
|
164
|
+
label: getTranslation(presetConfig?.labels?.plural, i18n)
|
|
165
|
+
}, "preset-group-label"), /*#__PURE__*/_jsxs(PopupList.ButtonGroup, {
|
|
166
|
+
children: [hasModifiedPreset && /*#__PURE__*/_jsx(PopupList.Button, {
|
|
167
|
+
onClick: async () => {
|
|
168
|
+
await refineListData({
|
|
169
|
+
columns: transformColumnsToSearchParams(activePreset.columns),
|
|
170
|
+
where: activePreset.where
|
|
171
|
+
}, false);
|
|
172
|
+
},
|
|
173
|
+
children: t('general:reset')
|
|
174
|
+
}), hasModifiedPreset && queryPresetPermissions.update && /*#__PURE__*/_jsx(PopupList.Button, {
|
|
175
|
+
onClick: async () => {
|
|
176
|
+
await saveCurrentChanges();
|
|
177
|
+
},
|
|
178
|
+
children: activePreset?.isShared ? t('general:updateForEveryone') : t('general:save')
|
|
179
|
+
}), /*#__PURE__*/_jsx(PopupList.Button, {
|
|
180
|
+
onClick: () => {
|
|
181
|
+
openCreateNewDrawer();
|
|
182
|
+
},
|
|
183
|
+
children: t('general:createNew')
|
|
184
|
+
}), activePreset && queryPresetPermissions?.delete && /*#__PURE__*/_jsxs(_Fragment, {
|
|
185
|
+
children: [/*#__PURE__*/_jsx(PopupList.Button, {
|
|
186
|
+
onClick: () => openModal(confirmDeletePresetModalSlug),
|
|
187
|
+
children: t('general:delete')
|
|
188
|
+
}), /*#__PURE__*/_jsx(PopupList.Button, {
|
|
181
189
|
onClick: () => {
|
|
182
|
-
|
|
190
|
+
openDocumentDrawer();
|
|
183
191
|
},
|
|
184
|
-
|
|
185
|
-
})]
|
|
186
|
-
}), /*#__PURE__*/_jsxs("div", {
|
|
187
|
-
className: `${baseClass}__menu-items`,
|
|
188
|
-
children: [hasModifiedPreset && /*#__PURE__*/_jsx(ListSelectionButton, {
|
|
189
|
-
id: "reset-preset",
|
|
190
|
-
onClick: async () => {
|
|
191
|
-
await refineListData({
|
|
192
|
-
columns: transformColumnsToSearchParams(activePreset.columns),
|
|
193
|
-
where: activePreset.where
|
|
194
|
-
}, false);
|
|
195
|
-
},
|
|
196
|
-
type: "button",
|
|
197
|
-
children: t('general:reset')
|
|
198
|
-
}, "reset"), hasModifiedPreset && queryPresetPermissions.update && /*#__PURE__*/_jsx(ListSelectionButton, {
|
|
199
|
-
id: "save-preset",
|
|
200
|
-
onClick: async () => {
|
|
201
|
-
await saveCurrentChanges();
|
|
202
|
-
},
|
|
203
|
-
type: "button",
|
|
204
|
-
children: activePreset?.isShared ? t('general:updateForEveryone') : t('fields:saveChanges')
|
|
205
|
-
}, "save"), activePreset && queryPresetPermissions?.delete && /*#__PURE__*/_jsxs(Fragment, {
|
|
206
|
-
children: [/*#__PURE__*/_jsx(ListSelectionButton, {
|
|
207
|
-
id: "delete-preset",
|
|
208
|
-
onClick: () => openModal(confirmDeletePresetModalSlug),
|
|
209
|
-
type: "button",
|
|
210
|
-
children: t('general:deleteLabel', {
|
|
211
|
-
label: presetConfig?.labels?.singular
|
|
212
|
-
})
|
|
213
|
-
}), /*#__PURE__*/_jsx(ListSelectionButton, {
|
|
214
|
-
id: "edit-preset",
|
|
215
|
-
onClick: () => {
|
|
216
|
-
openDocumentDrawer();
|
|
217
|
-
},
|
|
218
|
-
type: "button",
|
|
219
|
-
children: t('general:editLabel', {
|
|
220
|
-
label: presetConfig?.labels?.singular
|
|
221
|
-
})
|
|
222
|
-
})]
|
|
192
|
+
children: t('general:edit')
|
|
223
193
|
})]
|
|
224
194
|
})]
|
|
225
|
-
}
|
|
195
|
+
}, "preset-group-buttons")];
|
|
196
|
+
}, [activePreset, queryPresetPermissions?.delete, queryPresetPermissions?.update, openCreateNewDrawer, openDocumentDrawer, openModal, saveCurrentChanges, t, refineListData, modified, presetConfig?.labels?.plural, i18n]);
|
|
197
|
+
return {
|
|
198
|
+
CreateNewPresetDrawer: /*#__PURE__*/_jsx(CreateNewPresetDrawer, {
|
|
226
199
|
initialData: {
|
|
227
200
|
columns: transformColumnsToPreferences(query.columns),
|
|
228
201
|
relatedCollection: collectionSlug,
|
|
@@ -235,7 +208,8 @@ export const QueryPresetBar = ({
|
|
|
235
208
|
await handlePresetChange(doc);
|
|
236
209
|
},
|
|
237
210
|
redirectAfterCreate: false
|
|
238
|
-
}),
|
|
211
|
+
}),
|
|
212
|
+
DeletePresetModal: /*#__PURE__*/_jsx(ConfirmationModal, {
|
|
239
213
|
body: /*#__PURE__*/_jsx(Translation, {
|
|
240
214
|
elements: {
|
|
241
215
|
'1': ({
|
|
@@ -255,7 +229,8 @@ export const QueryPresetBar = ({
|
|
|
255
229
|
heading: t('general:confirmDeletion'),
|
|
256
230
|
modalSlug: confirmDeletePresetModalSlug,
|
|
257
231
|
onConfirm: handleDeletePreset
|
|
258
|
-
}),
|
|
232
|
+
}),
|
|
233
|
+
EditPresetDrawer: /*#__PURE__*/_jsx(PresetDocumentDrawer, {
|
|
259
234
|
onDelete: () => {
|
|
260
235
|
// setSelectedPreset(undefined)
|
|
261
236
|
},
|
|
@@ -269,7 +244,10 @@ export const QueryPresetBar = ({
|
|
|
269
244
|
}) => {
|
|
270
245
|
await handlePresetChange(doc);
|
|
271
246
|
}
|
|
272
|
-
}),
|
|
247
|
+
}),
|
|
248
|
+
hasModifiedPreset: modified,
|
|
249
|
+
openPresetListDrawer: openListDrawer,
|
|
250
|
+
PresetListDrawer: /*#__PURE__*/_jsx(ListDrawer, {
|
|
273
251
|
allowCreate: false,
|
|
274
252
|
disableQueryPresets: true,
|
|
275
253
|
onSelect: async ({
|
|
@@ -278,7 +256,9 @@ export const QueryPresetBar = ({
|
|
|
278
256
|
closeListDrawer();
|
|
279
257
|
await handlePresetChange(doc);
|
|
280
258
|
}
|
|
281
|
-
})
|
|
282
|
-
|
|
259
|
+
}),
|
|
260
|
+
queryPresetMenuItems,
|
|
261
|
+
resetPreset: resetQueryPreset
|
|
262
|
+
};
|
|
283
263
|
};
|
|
284
|
-
//# sourceMappingURL=
|
|
264
|
+
//# sourceMappingURL=useQueryPresets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryPresets.js","names":["useModal","getTranslation","transformColumnsToPreferences","transformColumnsToSearchParams","React","useCallback","useMemo","toast","useConfig","useListQuery","useTranslation","ConfirmationModal","useDocumentDrawer","useListDrawer","PopupList","PopupListGroupLabel","Translation","confirmDeletePresetModalSlug","queryPresetsSlug","useQueryPresets","activePreset","collectionSlug","queryPresetPermissions","modified","query","refineListData","setModified","setQueryModified","i18n","t","openModal","config","routes","api","apiRoute","getEntityConfig","presetConfig","PresetDocumentDrawer","openDrawer","openDocumentDrawer","id","CreateNewPresetDrawer","closeDrawer","closeCreateNewDrawer","openCreateNewDrawer","filterOptions","isTemp","not_equals","relatedCollection","equals","ListDrawer","closeListDrawer","openListDrawer","collectionSlugs","selectedCollection","handlePresetChange","preset","columns","undefined","where","resetQueryPreset","handleDeletePreset","fetch","method","then","res","json","status","success","label","labels","singular","title","errors","forEach","error","message","_err","saveCurrentChanges","body","JSON","stringify","credentials","headers","queryPresetMenuItems","hasModifiedPreset","_jsx","plural","_jsxs","ButtonGroup","Button","onClick","update","isShared","delete","_Fragment","initialData","onSave","doc","redirectAfterCreate","DeletePresetModal","elements","1","children","i18nKey","variables","confirmingLabel","heading","modalSlug","onConfirm","EditPresetDrawer","onDelete","onDuplicate","openPresetListDrawer","PresetListDrawer","allowCreate","disableQueryPresets","onSelect","resetPreset"],"sources":["../../../src/elements/ListControls/useQueryPresets.tsx"],"sourcesContent":["import type { CollectionSlug, QueryPreset, SanitizedCollectionPermission } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { transformColumnsToPreferences, transformColumnsToSearchParams } from 'payload/shared'\nimport React, { useCallback, useMemo } from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useListQuery } from '../../providers/ListQuery/context.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { useDocumentDrawer } from '../DocumentDrawer/index.js'\nimport { useListDrawer } from '../ListDrawer/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { PopupListGroupLabel } from '../Popup/PopupGroupLabel/index.js'\nimport { Translation } from '../Translation/index.js'\n\nconst confirmDeletePresetModalSlug = 'confirm-delete-preset'\n\nconst queryPresetsSlug = 'payload-query-presets'\n\nexport const useQueryPresets = ({\n activePreset,\n collectionSlug,\n queryPresetPermissions,\n}: {\n activePreset: QueryPreset\n collectionSlug: CollectionSlug\n queryPresetPermissions: SanitizedCollectionPermission\n}): {\n CreateNewPresetDrawer: React.ReactNode\n DeletePresetModal: React.ReactNode\n EditPresetDrawer: React.ReactNode\n hasModifiedPreset: boolean\n openPresetListDrawer: () => void\n PresetListDrawer: React.ReactNode\n queryPresetMenuItems: React.ReactNode[]\n resetPreset: () => Promise<void>\n} => {\n const { modified, query, refineListData, setModified: setQueryModified } = useListQuery()\n\n const { i18n, t } = useTranslation()\n const { openModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const presetConfig = getEntityConfig({ collectionSlug: queryPresetsSlug })\n\n const [PresetDocumentDrawer, , { openDrawer: openDocumentDrawer }] = useDocumentDrawer({\n id: activePreset?.id,\n collectionSlug: queryPresetsSlug,\n })\n\n const [\n CreateNewPresetDrawer,\n ,\n { closeDrawer: closeCreateNewDrawer, openDrawer: openCreateNewDrawer },\n ] = useDocumentDrawer({\n collectionSlug: queryPresetsSlug,\n })\n\n const filterOptions = useMemo(\n () => ({\n 'payload-query-presets': {\n isTemp: {\n not_equals: true,\n },\n relatedCollection: {\n equals: collectionSlug,\n },\n },\n }),\n [collectionSlug],\n )\n\n const [ListDrawer, , { closeDrawer: closeListDrawer, openDrawer: openListDrawer }] =\n useListDrawer({\n collectionSlugs: [queryPresetsSlug],\n filterOptions,\n selectedCollection: queryPresetsSlug,\n })\n\n const handlePresetChange = useCallback(\n async (preset: QueryPreset) => {\n await refineListData(\n {\n columns: preset.columns ? transformColumnsToSearchParams(preset.columns) : undefined,\n preset: preset.id,\n where: preset.where,\n },\n false,\n )\n },\n [refineListData],\n )\n\n const resetQueryPreset = useCallback(async () => {\n await refineListData(\n {\n columns: [],\n preset: '',\n where: {},\n },\n false,\n )\n }, [refineListData])\n\n const handleDeletePreset = useCallback(async () => {\n try {\n await fetch(`${apiRoute}/${queryPresetsSlug}/${activePreset.id}`, {\n method: 'DELETE',\n }).then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t('general:titleDeleted', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n title: activePreset.title,\n }),\n )\n\n await resetQueryPreset()\n } else {\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n }\n } catch (_err) {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n })\n } catch (_err) {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n }, [apiRoute, activePreset?.id, activePreset?.title, t, presetConfig, i18n, resetQueryPreset])\n\n const saveCurrentChanges = useCallback(async () => {\n try {\n await fetch(`${apiRoute}/payload-query-presets/${activePreset.id}`, {\n body: JSON.stringify({\n columns: transformColumnsToPreferences(query.columns),\n where: query.where,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n }).then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t('general:updatedLabelSuccessfully', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n }),\n )\n\n setQueryModified(false)\n } else {\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n toast.error(t('error:unknown'))\n }\n }\n } catch (_err) {\n toast.error(t('error:unknown'))\n }\n })\n } catch (_err) {\n toast.error(t('error:unknown'))\n }\n }, [\n apiRoute,\n activePreset?.id,\n query.columns,\n query.where,\n t,\n presetConfig?.labels?.singular,\n i18n,\n setQueryModified,\n ])\n\n // Memoize so that components aren't re-rendered on query and column changes\n const queryPresetMenuItems = useMemo(() => {\n const hasModifiedPreset = activePreset && modified\n\n return [\n <PopupListGroupLabel\n key=\"preset-group-label\"\n label={getTranslation(presetConfig?.labels?.plural, i18n)}\n />,\n <PopupList.ButtonGroup key=\"preset-group-buttons\">\n {hasModifiedPreset && (\n <PopupList.Button\n onClick={async () => {\n await refineListData(\n {\n columns: transformColumnsToSearchParams(activePreset.columns),\n where: activePreset.where,\n },\n false,\n )\n }}\n >\n {t('general:reset')}\n </PopupList.Button>\n )}\n {hasModifiedPreset && queryPresetPermissions.update && (\n <PopupList.Button\n onClick={async () => {\n await saveCurrentChanges()\n }}\n >\n {activePreset?.isShared ? t('general:updateForEveryone') : t('general:save')}\n </PopupList.Button>\n )}\n <PopupList.Button\n onClick={() => {\n openCreateNewDrawer()\n }}\n >\n {t('general:createNew')}\n </PopupList.Button>\n {activePreset && queryPresetPermissions?.delete && (\n <>\n <PopupList.Button onClick={() => openModal(confirmDeletePresetModalSlug)}>\n {t('general:delete')}\n </PopupList.Button>\n <PopupList.Button\n onClick={() => {\n openDocumentDrawer()\n }}\n >\n {t('general:edit')}\n </PopupList.Button>\n </>\n )}\n </PopupList.ButtonGroup>,\n ]\n }, [\n activePreset,\n queryPresetPermissions?.delete,\n queryPresetPermissions?.update,\n openCreateNewDrawer,\n openDocumentDrawer,\n openModal,\n saveCurrentChanges,\n t,\n refineListData,\n modified,\n presetConfig?.labels?.plural,\n i18n,\n ])\n\n return {\n CreateNewPresetDrawer: (\n <CreateNewPresetDrawer\n initialData={{\n columns: transformColumnsToPreferences(query.columns),\n relatedCollection: collectionSlug,\n where: query.where,\n }}\n onSave={async ({ doc }) => {\n closeCreateNewDrawer()\n await handlePresetChange(doc as QueryPreset)\n }}\n redirectAfterCreate={false}\n />\n ),\n DeletePresetModal: (\n <ConfirmationModal\n body={\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToDelete\"\n t={t}\n variables={{\n label: presetConfig?.labels?.singular,\n title: activePreset?.title,\n }}\n />\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmDeletePresetModalSlug}\n onConfirm={handleDeletePreset}\n />\n ),\n EditPresetDrawer: (\n <PresetDocumentDrawer\n onDelete={() => {\n // setSelectedPreset(undefined)\n }}\n onDuplicate={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n }}\n onSave={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n }}\n />\n ),\n hasModifiedPreset: modified,\n openPresetListDrawer: openListDrawer,\n PresetListDrawer: (\n <ListDrawer\n allowCreate={false}\n disableQueryPresets\n onSelect={async ({ doc }) => {\n closeListDrawer()\n await handlePresetChange(doc as QueryPreset)\n }}\n />\n ),\n queryPresetMenuItems,\n resetPreset: resetQueryPreset,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderableTable.d.ts","sourceRoot":"","sources":["../../../src/elements/Table/OrderableTable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAyB,MAAM,SAAS,CAAA;AAEpF,OAAO,cAAc,CAAA;AAGrB,OAAO,KAA8B,MAAM,OAAO,CAAA;AAYlD,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAA;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"OrderableTable.d.ts","sourceRoot":"","sources":["../../../src/elements/Table/OrderableTable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAyB,MAAM,SAAS,CAAA;AAEpF,OAAO,cAAc,CAAA;AAGrB,OAAO,KAA8B,MAAM,OAAO,CAAA;AAYlD,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAA;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA2L1C,CAAA"}
|
|
@@ -88,9 +88,8 @@ export const OrderableTable = ({
|
|
|
88
88
|
orderableFieldName,
|
|
89
89
|
target
|
|
90
90
|
};
|
|
91
|
-
const response = await fetch(`${config.
|
|
91
|
+
const response = await fetch(`${config.routes.api}/reorder`, {
|
|
92
92
|
body: JSON.stringify(jsonBody),
|
|
93
|
-
credentials: 'include',
|
|
94
93
|
headers: {
|
|
95
94
|
'Content-Type': 'application/json'
|
|
96
95
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderableTable.js","names":["DragOverlay","React","useEffect","useState","toast","useConfig","useListQuery","DraggableSortableItem","DraggableSortable","OrderableRow","OrderableRowDragPreview","baseClass","OrderableTable","appearance","BeforeTable","collection","columns","data","initialData","config","listQueryData","orderableFieldName","query","serverData","docs","localData","setLocalData","cellMap","setCellMap","dragActiveRowId","setDragActiveRowId","Object","fromEntries","map","item","index","String","id","_id","activeColumns","filter","col","active","includes","accessor","length","_jsx","handleDragEnd","moveFromIndex","moveToIndex","sort","warning","undefined","movedId","newBeforeRow","newAfterRow","previousData","currentData","newData","splice","target","key","newKeyWillBe","jsonBody","collectionSlug","slug","docsToMove","response","fetch","serverURL","routes","api","body","JSON","stringify","credentials","headers","method","status","Error","ok","json","err","error","message","handleDragStart","rowIds","row","_jsxs","className","Boolean","join","ids","onDragEnd","onDragStart","cellPadding","cellSpacing","i","Heading","rowIndex","children","attributes","isDragging","listeners","setNodeRef","transform","transition","dragAttributes","dragListeners","ref","rowId","style","opacity"],"sources":["../../../src/elements/Table/OrderableTable.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, Column, OrderableEndpointBody } from 'payload'\n\nimport './index.scss'\n\nimport { DragOverlay } from '@dnd-kit/core'\nimport React, { useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { DraggableSortableItem } from '../DraggableSortable/DraggableSortableItem/index.js'\nimport { DraggableSortable } from '../DraggableSortable/index.js'\nimport { OrderableRow } from './OrderableRow.js'\nimport { OrderableRowDragPreview } from './OrderableRowDragPreview.js'\n\nconst baseClass = 'table'\n\nexport type Props = {\n readonly appearance?: 'condensed' | 'default'\n readonly BeforeTable?: React.ReactNode\n readonly collection: ClientCollectionConfig\n readonly columns?: Column[]\n readonly data: Record<string, unknown>[]\n readonly heading?: React.ReactNode\n}\n\nexport const OrderableTable: React.FC<Props> = ({\n appearance = 'default',\n BeforeTable,\n collection,\n columns,\n data: initialData,\n}) => {\n const { config } = useConfig()\n const { data: listQueryData, orderableFieldName, query } = useListQuery()\n // Use the data from ListQueryProvider if available, otherwise use the props\n const serverData = listQueryData?.docs || initialData\n\n // Local state to track the current order of rows\n const [localData, setLocalData] = useState(serverData)\n\n // id -> index for each column\n const [cellMap, setCellMap] = useState<Record<string, number>>({})\n\n const [dragActiveRowId, setDragActiveRowId] = useState<number | string | undefined>()\n\n // Update local data when server data changes\n useEffect(() => {\n setLocalData(serverData)\n setCellMap(\n Object.fromEntries(serverData.map((item, index) => [String(item.id ?? item._id), index])),\n )\n }, [serverData])\n\n const activeColumns = columns?.filter((col) => col?.active)\n\n if (\n !activeColumns ||\n activeColumns.filter((col) => !['_dragHandle', '_select'].includes(col.accessor)).length === 0\n ) {\n return <div>No columns selected</div>\n }\n\n const handleDragEnd = async ({ moveFromIndex, moveToIndex }) => {\n if (query.sort !== orderableFieldName && query.sort !== `-${orderableFieldName}`) {\n toast.warning('To reorder the rows you must first sort them by the \"Order\" column')\n setDragActiveRowId(undefined)\n return\n }\n\n if (moveFromIndex === moveToIndex) {\n setDragActiveRowId(undefined)\n return\n }\n\n const movedId = localData[moveFromIndex].id ?? localData[moveFromIndex]._id\n const newBeforeRow =\n moveToIndex > moveFromIndex ? localData[moveToIndex] : localData[moveToIndex - 1]\n const newAfterRow =\n moveToIndex > moveFromIndex ? localData[moveToIndex + 1] : localData[moveToIndex]\n\n // Store the original data for rollback\n const previousData = [...localData]\n\n // Optimisitc update of local state to reorder the rows\n setLocalData((currentData) => {\n const newData = [...currentData]\n // Update the rendered cell for the moved row to show \"pending\"\n newData[moveFromIndex][orderableFieldName] = `pending`\n // Move the item in the array\n newData.splice(moveToIndex, 0, newData.splice(moveFromIndex, 1)[0])\n return newData\n })\n\n try {\n const target: OrderableEndpointBody['target'] = newBeforeRow\n ? {\n id: newBeforeRow.id ?? newBeforeRow._id,\n key: newBeforeRow[orderableFieldName],\n }\n : {\n id: newAfterRow.id ?? newAfterRow._id,\n key: newAfterRow[orderableFieldName],\n }\n\n const newKeyWillBe =\n (newBeforeRow && query.sort === orderableFieldName) ||\n (!newBeforeRow && query.sort === `-${orderableFieldName}`)\n ? 'greater'\n : 'less'\n\n const jsonBody: OrderableEndpointBody = {\n collectionSlug: collection.slug,\n docsToMove: [movedId],\n newKeyWillBe,\n orderableFieldName,\n target,\n }\n\n const response = await fetch(`${config.serverURL}${config.routes.api}/reorder`, {\n body: JSON.stringify(jsonBody),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (response.status === 403) {\n throw new Error('You do not have permission to reorder these rows')\n }\n\n if (!response.ok) {\n throw new Error(\n 'Failed to reorder. This can happen if you reorder several rows too quickly. Please try again.',\n )\n }\n\n if (response.status === 200 && (await response.json())['message'] === 'initial migration') {\n throw new Error(\n 'You have enabled \"orderable\" on a collection with existing documents' +\n 'and this is the first time you have sorted documents. We have run an automatic migration ' +\n 'to add an initial order to the documents. Please refresh the page and try again.',\n )\n }\n } catch (err) {\n const error = err instanceof Error ? err.message : String(err)\n // Rollback to previous state if the request fails\n setLocalData(previousData)\n toast.error(error)\n } finally {\n setDragActiveRowId(undefined)\n }\n }\n\n const handleDragStart = ({ id }) => {\n setDragActiveRowId(id)\n }\n\n const rowIds = localData.map((row) => row.id ?? row._id)\n\n return (\n <div\n className={[baseClass, appearance && `${baseClass}--appearance-${appearance}`]\n .filter(Boolean)\n .join(' ')}\n >\n {BeforeTable}\n <DraggableSortable ids={rowIds} onDragEnd={handleDragEnd} onDragStart={handleDragStart}>\n <table cellPadding=\"0\" cellSpacing=\"0\">\n <thead>\n <tr>\n {activeColumns.map((col, i) => (\n <th id={`heading-${col.accessor}`} key={i}>\n {col.Heading}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {localData.map((row, rowIndex) => (\n <DraggableSortableItem id={rowIds[rowIndex]} key={rowIds[rowIndex]}>\n {({ attributes, isDragging, listeners, setNodeRef, transform, transition }) => (\n <OrderableRow\n cellMap={cellMap}\n className={`row-${rowIndex + 1}`}\n columns={activeColumns}\n dragAttributes={attributes}\n dragListeners={listeners}\n ref={setNodeRef}\n rowId={row.id ?? row._id}\n style={{\n opacity: isDragging ? 0 : 1,\n transform,\n transition,\n }}\n />\n )}\n </DraggableSortableItem>\n ))}\n </tbody>\n </table>\n\n <DragOverlay>\n <OrderableRowDragPreview\n className={[baseClass, `${baseClass}--drag-preview`].join(' ')}\n rowId={dragActiveRowId}\n >\n <OrderableRow cellMap={cellMap} columns={activeColumns} rowId={dragActiveRowId} />\n </OrderableRowDragPreview>\n </DragOverlay>\n </DraggableSortable>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"OrderableTable.js","names":["DragOverlay","React","useEffect","useState","toast","useConfig","useListQuery","DraggableSortableItem","DraggableSortable","OrderableRow","OrderableRowDragPreview","baseClass","OrderableTable","appearance","BeforeTable","collection","columns","data","initialData","config","listQueryData","orderableFieldName","query","serverData","docs","localData","setLocalData","cellMap","setCellMap","dragActiveRowId","setDragActiveRowId","Object","fromEntries","map","item","index","String","id","_id","activeColumns","filter","col","active","includes","accessor","length","_jsx","handleDragEnd","moveFromIndex","moveToIndex","sort","warning","undefined","movedId","newBeforeRow","newAfterRow","previousData","currentData","newData","splice","target","key","newKeyWillBe","jsonBody","collectionSlug","slug","docsToMove","response","fetch","routes","api","body","JSON","stringify","headers","method","status","Error","ok","json","err","error","message","handleDragStart","rowIds","row","_jsxs","className","Boolean","join","ids","onDragEnd","onDragStart","cellPadding","cellSpacing","i","Heading","rowIndex","children","attributes","isDragging","listeners","setNodeRef","transform","transition","dragAttributes","dragListeners","ref","rowId","style","opacity"],"sources":["../../../src/elements/Table/OrderableTable.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, Column, OrderableEndpointBody } from 'payload'\n\nimport './index.scss'\n\nimport { DragOverlay } from '@dnd-kit/core'\nimport React, { useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { DraggableSortableItem } from '../DraggableSortable/DraggableSortableItem/index.js'\nimport { DraggableSortable } from '../DraggableSortable/index.js'\nimport { OrderableRow } from './OrderableRow.js'\nimport { OrderableRowDragPreview } from './OrderableRowDragPreview.js'\n\nconst baseClass = 'table'\n\nexport type Props = {\n readonly appearance?: 'condensed' | 'default'\n readonly BeforeTable?: React.ReactNode\n readonly collection: ClientCollectionConfig\n readonly columns?: Column[]\n readonly data: Record<string, unknown>[]\n readonly heading?: React.ReactNode\n}\n\nexport const OrderableTable: React.FC<Props> = ({\n appearance = 'default',\n BeforeTable,\n collection,\n columns,\n data: initialData,\n}) => {\n const { config } = useConfig()\n const { data: listQueryData, orderableFieldName, query } = useListQuery()\n // Use the data from ListQueryProvider if available, otherwise use the props\n const serverData = listQueryData?.docs || initialData\n\n // Local state to track the current order of rows\n const [localData, setLocalData] = useState(serverData)\n\n // id -> index for each column\n const [cellMap, setCellMap] = useState<Record<string, number>>({})\n\n const [dragActiveRowId, setDragActiveRowId] = useState<number | string | undefined>()\n\n // Update local data when server data changes\n useEffect(() => {\n setLocalData(serverData)\n setCellMap(\n Object.fromEntries(serverData.map((item, index) => [String(item.id ?? item._id), index])),\n )\n }, [serverData])\n\n const activeColumns = columns?.filter((col) => col?.active)\n\n if (\n !activeColumns ||\n activeColumns.filter((col) => !['_dragHandle', '_select'].includes(col.accessor)).length === 0\n ) {\n return <div>No columns selected</div>\n }\n\n const handleDragEnd = async ({ moveFromIndex, moveToIndex }) => {\n if (query.sort !== orderableFieldName && query.sort !== `-${orderableFieldName}`) {\n toast.warning('To reorder the rows you must first sort them by the \"Order\" column')\n setDragActiveRowId(undefined)\n return\n }\n\n if (moveFromIndex === moveToIndex) {\n setDragActiveRowId(undefined)\n return\n }\n\n const movedId = localData[moveFromIndex].id ?? localData[moveFromIndex]._id\n const newBeforeRow =\n moveToIndex > moveFromIndex ? localData[moveToIndex] : localData[moveToIndex - 1]\n const newAfterRow =\n moveToIndex > moveFromIndex ? localData[moveToIndex + 1] : localData[moveToIndex]\n\n // Store the original data for rollback\n const previousData = [...localData]\n\n // Optimisitc update of local state to reorder the rows\n setLocalData((currentData) => {\n const newData = [...currentData]\n // Update the rendered cell for the moved row to show \"pending\"\n newData[moveFromIndex][orderableFieldName] = `pending`\n // Move the item in the array\n newData.splice(moveToIndex, 0, newData.splice(moveFromIndex, 1)[0])\n return newData\n })\n\n try {\n const target: OrderableEndpointBody['target'] = newBeforeRow\n ? {\n id: newBeforeRow.id ?? newBeforeRow._id,\n key: newBeforeRow[orderableFieldName],\n }\n : {\n id: newAfterRow.id ?? newAfterRow._id,\n key: newAfterRow[orderableFieldName],\n }\n\n const newKeyWillBe =\n (newBeforeRow && query.sort === orderableFieldName) ||\n (!newBeforeRow && query.sort === `-${orderableFieldName}`)\n ? 'greater'\n : 'less'\n\n const jsonBody: OrderableEndpointBody = {\n collectionSlug: collection.slug,\n docsToMove: [movedId],\n newKeyWillBe,\n orderableFieldName,\n target,\n }\n\n const response = await fetch(`${config.routes.api}/reorder`, {\n body: JSON.stringify(jsonBody),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (response.status === 403) {\n throw new Error('You do not have permission to reorder these rows')\n }\n\n if (!response.ok) {\n throw new Error(\n 'Failed to reorder. This can happen if you reorder several rows too quickly. Please try again.',\n )\n }\n\n if (response.status === 200 && (await response.json())['message'] === 'initial migration') {\n throw new Error(\n 'You have enabled \"orderable\" on a collection with existing documents' +\n 'and this is the first time you have sorted documents. We have run an automatic migration ' +\n 'to add an initial order to the documents. Please refresh the page and try again.',\n )\n }\n } catch (err) {\n const error = err instanceof Error ? err.message : String(err)\n // Rollback to previous state if the request fails\n setLocalData(previousData)\n toast.error(error)\n } finally {\n setDragActiveRowId(undefined)\n }\n }\n\n const handleDragStart = ({ id }) => {\n setDragActiveRowId(id)\n }\n\n const rowIds = localData.map((row) => row.id ?? row._id)\n\n return (\n <div\n className={[baseClass, appearance && `${baseClass}--appearance-${appearance}`]\n .filter(Boolean)\n .join(' ')}\n >\n {BeforeTable}\n <DraggableSortable ids={rowIds} onDragEnd={handleDragEnd} onDragStart={handleDragStart}>\n <table cellPadding=\"0\" cellSpacing=\"0\">\n <thead>\n <tr>\n {activeColumns.map((col, i) => (\n <th id={`heading-${col.accessor}`} key={i}>\n {col.Heading}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {localData.map((row, rowIndex) => (\n <DraggableSortableItem id={rowIds[rowIndex]} key={rowIds[rowIndex]}>\n {({ attributes, isDragging, listeners, setNodeRef, transform, transition }) => (\n <OrderableRow\n cellMap={cellMap}\n className={`row-${rowIndex + 1}`}\n columns={activeColumns}\n dragAttributes={attributes}\n dragListeners={listeners}\n ref={setNodeRef}\n rowId={row.id ?? row._id}\n style={{\n opacity: isDragging ? 0 : 1,\n transform,\n transition,\n }}\n />\n )}\n </DraggableSortableItem>\n ))}\n </tbody>\n </table>\n\n <DragOverlay>\n <OrderableRowDragPreview\n className={[baseClass, `${baseClass}--drag-preview`].join(' ')}\n rowId={dragActiveRowId}\n >\n <OrderableRow cellMap={cellMap} columns={activeColumns} rowId={dragActiveRowId} />\n </OrderableRowDragPreview>\n </DragOverlay>\n </DraggableSortable>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Upload/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAIhF,OAAO,KAA6D,MAAM,OAAO,CAAA;AAiBjF,OAAO,cAAc,CAAA;AAMrB,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAC3C,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAU9C,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,aAAa,wEAKvB,iBAAiB,sBAkDnB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAA;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1C,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAYxC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;IACtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CACnC,GAAG,WAAW,CAAA;AAEf,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Upload/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAIhF,OAAO,KAA6D,MAAM,OAAO,CAAA;AAiBjF,OAAO,cAAc,CAAA;AAMrB,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAC3C,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAU9C,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,aAAa,wEAKvB,iBAAiB,sBAkDnB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAA;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1C,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAYxC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;IACtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CACnC,GAAG,WAAW,CAAA;AAEf,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4a9C,CAAA"}
|
|
@@ -170,8 +170,8 @@ export const Upload_v4 = props => {
|
|
|
170
170
|
} = useForm();
|
|
171
171
|
const {
|
|
172
172
|
id,
|
|
173
|
-
data,
|
|
174
173
|
docPermissions,
|
|
174
|
+
savedDocumentData,
|
|
175
175
|
setUploadStatus
|
|
176
176
|
} = useDocumentInfo();
|
|
177
177
|
const isFormSubmitting = useFormProcessing();
|
|
@@ -312,7 +312,7 @@ export const Upload_v4 = props => {
|
|
|
312
312
|
} = uploadConfig;
|
|
313
313
|
const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled);
|
|
314
314
|
const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ');
|
|
315
|
-
const imageCacheTag = uploadConfig?.cacheTags &&
|
|
315
|
+
const imageCacheTag = uploadConfig?.cacheTags && savedDocumentData?.updatedAt;
|
|
316
316
|
useEffect(() => {
|
|
317
317
|
const handleControlFileUrl = async () => {
|
|
318
318
|
if (uploadControlFileUrl) {
|
|
@@ -335,17 +335,17 @@ export const Upload_v4 = props => {
|
|
|
335
335
|
children: [/*#__PURE__*/_jsx(FieldError, {
|
|
336
336
|
message: errorMessage,
|
|
337
337
|
showError: showError
|
|
338
|
-
}),
|
|
338
|
+
}), savedDocumentData && savedDocumentData.filename && !removedFile && /*#__PURE__*/_jsx(FileDetails, {
|
|
339
339
|
collectionSlug: collectionSlug,
|
|
340
340
|
customUploadActions: customActions,
|
|
341
|
-
doc:
|
|
341
|
+
doc: savedDocumentData,
|
|
342
342
|
enableAdjustments: showCrop || showFocalPoint,
|
|
343
343
|
handleRemove: canRemoveUpload ? handleFileRemoval : undefined,
|
|
344
344
|
hasImageSizes: hasImageSizes,
|
|
345
345
|
hideRemoveFile: uploadConfig.hideRemoveFile,
|
|
346
346
|
imageCacheTag: imageCacheTag,
|
|
347
347
|
uploadConfig: uploadConfig
|
|
348
|
-
}), (!uploadConfig.hideFileInputOnCreate && !
|
|
348
|
+
}), (!uploadConfig.hideFileInputOnCreate && !savedDocumentData?.filename || removedFile) && /*#__PURE__*/_jsxs("div", {
|
|
349
349
|
className: `${baseClass}__upload`,
|
|
350
350
|
children: [!value && !showUrlInput && /*#__PURE__*/_jsx(Dropzone, {
|
|
351
351
|
onChange: handleFileSelection,
|
|
@@ -450,7 +450,7 @@ export const Upload_v4 = props => {
|
|
|
450
450
|
}), /*#__PURE__*/_jsx(UploadActions, {
|
|
451
451
|
customActions: customActions,
|
|
452
452
|
enableAdjustments: showCrop || showFocalPoint,
|
|
453
|
-
enablePreviewSizes: hasImageSizes &&
|
|
453
|
+
enablePreviewSizes: hasImageSizes && savedDocumentData?.filename && !removedFile,
|
|
454
454
|
mimeType: value.type
|
|
455
455
|
})]
|
|
456
456
|
}), /*#__PURE__*/_jsx(Button, {
|
|
@@ -463,33 +463,33 @@ export const Upload_v4 = props => {
|
|
|
463
463
|
tooltip: t('general:cancel')
|
|
464
464
|
})]
|
|
465
465
|
})]
|
|
466
|
-
}), (value ||
|
|
466
|
+
}), (value || savedDocumentData?.filename) && /*#__PURE__*/_jsx(EditDepthProvider, {
|
|
467
467
|
children: /*#__PURE__*/_jsx(Drawer, {
|
|
468
468
|
Header: null,
|
|
469
469
|
slug: editDrawerSlug,
|
|
470
470
|
children: /*#__PURE__*/_jsx(EditUpload, {
|
|
471
|
-
fileName: value?.name ||
|
|
472
|
-
fileSrc:
|
|
471
|
+
fileName: value?.name || savedDocumentData?.filename,
|
|
472
|
+
fileSrc: savedDocumentData?.url || fileSrc,
|
|
473
473
|
imageCacheTag: imageCacheTag,
|
|
474
474
|
initialCrop: uploadEdits?.crop ?? undefined,
|
|
475
475
|
initialFocalPoint: {
|
|
476
|
-
x: uploadEdits?.focalPoint?.x ||
|
|
477
|
-
y: uploadEdits?.focalPoint?.y ||
|
|
476
|
+
x: uploadEdits?.focalPoint?.x || savedDocumentData?.focalX || 50,
|
|
477
|
+
y: uploadEdits?.focalPoint?.y || savedDocumentData?.focalY || 50
|
|
478
478
|
},
|
|
479
479
|
onSave: onEditsSave,
|
|
480
480
|
showCrop: showCrop,
|
|
481
481
|
showFocalPoint: showFocalPoint
|
|
482
482
|
})
|
|
483
483
|
})
|
|
484
|
-
}),
|
|
484
|
+
}), savedDocumentData && hasImageSizes && /*#__PURE__*/_jsx(Drawer, {
|
|
485
485
|
className: `${baseClass}__previewDrawer`,
|
|
486
486
|
hoverTitle: true,
|
|
487
487
|
slug: sizePreviewSlug,
|
|
488
488
|
title: t('upload:sizesFor', {
|
|
489
|
-
label:
|
|
489
|
+
label: savedDocumentData.filename
|
|
490
490
|
}),
|
|
491
491
|
children: /*#__PURE__*/_jsx(PreviewSizes, {
|
|
492
|
-
doc:
|
|
492
|
+
doc: savedDocumentData,
|
|
493
493
|
imageCacheTag: imageCacheTag,
|
|
494
494
|
uploadConfig: uploadConfig
|
|
495
495
|
})
|