@payloadcms/ui 3.0.0-beta.88 → 3.0.0-beta.89
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/AddNewRelation/index.d.ts.map +1 -0
- package/dist/{fields/Relationship/AddNew → elements/AddNewRelation}/index.js +98 -82
- package/dist/elements/AddNewRelation/index.js.map +1 -0
- package/dist/{fields/Relationship/AddNew → elements/AddNewRelation}/index.scss +7 -3
- package/dist/elements/AddNewRelation/types.d.ts +11 -0
- package/dist/elements/AddNewRelation/types.d.ts.map +1 -0
- package/dist/elements/AddNewRelation/types.js.map +1 -0
- package/dist/elements/AddNewRelation/useRelatedCollections.d.ts.map +1 -0
- package/dist/{fields/Relationship/AddNew → elements/AddNewRelation}/useRelatedCollections.js +1 -1
- package/dist/elements/AddNewRelation/useRelatedCollections.js.map +1 -0
- package/dist/elements/BulkUpload/ActionsBar/index.d.ts +9 -0
- package/dist/elements/BulkUpload/ActionsBar/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/ActionsBar/index.js +186 -0
- package/dist/elements/BulkUpload/ActionsBar/index.js.map +1 -0
- package/dist/elements/BulkUpload/ActionsBar/index.scss +59 -0
- package/dist/elements/BulkUpload/AddFilesView/index.d.ts +9 -0
- package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/AddFilesView/index.js +44 -0
- package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -0
- package/dist/elements/BulkUpload/AddFilesView/index.scss +15 -0
- package/dist/elements/BulkUpload/AddingFilesView/index.d.ts +4 -0
- package/dist/elements/BulkUpload/AddingFilesView/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/AddingFilesView/index.js +98 -0
- package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -0
- package/dist/elements/BulkUpload/AddingFilesView/index.scss +23 -0
- package/dist/elements/BulkUpload/DiscardWithoutSaving/index.d.ts +4 -0
- package/dist/elements/BulkUpload/DiscardWithoutSaving/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js +89 -0
- package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js.map +1 -0
- package/dist/elements/BulkUpload/DrawerCloseButton/index.d.ts +9 -0
- package/dist/elements/BulkUpload/DrawerCloseButton/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/DrawerCloseButton/index.js +38 -0
- package/dist/elements/BulkUpload/DrawerCloseButton/index.js.map +1 -0
- package/dist/elements/BulkUpload/DrawerCloseButton/index.scss +27 -0
- package/dist/elements/BulkUpload/EditForm/index.d.ts +5 -0
- package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/EditForm/index.js +176 -0
- package/dist/elements/BulkUpload/EditForm/index.js.map +1 -0
- package/dist/elements/BulkUpload/EditForm/index.scss +9 -0
- package/dist/elements/BulkUpload/EditForm/types.d.ts +4 -0
- package/dist/elements/BulkUpload/EditForm/types.d.ts.map +1 -0
- package/dist/elements/BulkUpload/EditForm/types.js +2 -0
- package/dist/elements/BulkUpload/EditForm/types.js.map +1 -0
- package/dist/elements/BulkUpload/FileSidebar/index.d.ts +4 -0
- package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/FileSidebar/index.js +242 -0
- package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -0
- package/dist/elements/BulkUpload/FileSidebar/index.scss +275 -0
- package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +3 -0
- package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -0
- package/dist/elements/BulkUpload/FormsManager/createFormData.js +22 -0
- package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -0
- package/dist/elements/BulkUpload/FormsManager/index.d.ts +35 -0
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/FormsManager/index.js +308 -0
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -0
- package/dist/elements/BulkUpload/FormsManager/reducer.d.ts +30 -0
- package/dist/elements/BulkUpload/FormsManager/reducer.d.ts.map +1 -0
- package/dist/elements/BulkUpload/FormsManager/reducer.js +69 -0
- package/dist/elements/BulkUpload/FormsManager/reducer.js.map +1 -0
- package/dist/elements/BulkUpload/Header/index.d.ts +9 -0
- package/dist/elements/BulkUpload/Header/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/Header/index.js +22 -0
- package/dist/elements/BulkUpload/Header/index.js.map +1 -0
- package/dist/elements/BulkUpload/Header/index.scss +12 -0
- package/dist/elements/BulkUpload/index.d.ts +10 -0
- package/dist/elements/BulkUpload/index.d.ts.map +1 -0
- package/dist/elements/BulkUpload/index.js +114 -0
- package/dist/elements/BulkUpload/index.js.map +1 -0
- package/dist/elements/BulkUpload/index.scss +0 -0
- package/dist/elements/Button/index.d.ts.map +1 -1
- package/dist/elements/Button/index.js +127 -79
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/index.scss +109 -43
- package/dist/elements/Button/types.d.ts +2 -1
- package/dist/elements/Button/types.d.ts.map +1 -1
- package/dist/elements/Button/types.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DocumentDrawer/index.js +1 -1
- package/dist/elements/DocumentDrawer/index.js.map +1 -1
- package/dist/elements/Dropzone/index.scss +2 -0
- package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts +20 -0
- package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -0
- package/dist/elements/FileDetails/DraggableFileDetails/index.js +116 -0
- package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -0
- package/dist/elements/FileDetails/DraggableFileDetails/index.scss +33 -0
- package/dist/elements/FileDetails/StaticFileDetails/index.d.ts +17 -0
- package/dist/elements/FileDetails/StaticFileDetails/index.d.ts.map +1 -0
- package/dist/elements/FileDetails/StaticFileDetails/index.js +71 -0
- package/dist/elements/FileDetails/StaticFileDetails/index.js.map +1 -0
- package/dist/elements/FileDetails/{index.scss → StaticFileDetails/index.scss} +1 -1
- package/dist/elements/FileDetails/index.d.ts +19 -4
- package/dist/elements/FileDetails/index.d.ts.map +1 -1
- package/dist/elements/FileDetails/index.js +11 -62
- package/dist/elements/FileDetails/index.js.map +1 -1
- package/dist/elements/FullscreenModal/index.d.ts +4 -0
- package/dist/elements/FullscreenModal/index.d.ts.map +1 -0
- package/dist/elements/FullscreenModal/index.js +38 -0
- package/dist/elements/FullscreenModal/index.js.map +1 -0
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +15 -10
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +45 -33
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/index.d.ts.map +1 -1
- package/dist/elements/ListDrawer/index.js.map +1 -1
- package/dist/elements/ListDrawer/types.d.ts +4 -1
- package/dist/elements/ListDrawer/types.d.ts.map +1 -1
- package/dist/elements/ListDrawer/types.js.map +1 -1
- package/dist/elements/ListHeader/index.d.ts +10 -0
- package/dist/elements/ListHeader/index.d.ts.map +1 -0
- package/dist/elements/ListHeader/index.js +17 -0
- package/dist/elements/ListHeader/index.js.map +1 -0
- package/dist/elements/ListHeader/index.scss +10 -0
- package/dist/elements/Popup/PopupButtonList/index.d.ts +1 -1
- package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
- package/dist/elements/Popup/PopupButtonList/index.js +4 -4
- package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.d.ts +2 -0
- package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.js +5 -2
- package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.scss +4 -1
- package/dist/elements/Popup/index.d.ts +2 -0
- package/dist/elements/Popup/index.d.ts.map +1 -1
- package/dist/elements/Popup/index.js +6 -0
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/SelectMany/index.d.ts +6 -0
- package/dist/elements/SelectMany/index.d.ts.map +1 -0
- package/dist/elements/SelectMany/index.js +29 -0
- package/dist/elements/SelectMany/index.js.map +1 -0
- package/dist/elements/ViewDescription/index.d.ts +3 -2
- package/dist/elements/ViewDescription/index.d.ts.map +1 -1
- package/dist/elements/ViewDescription/index.js +39 -16
- package/dist/elements/ViewDescription/index.js.map +1 -1
- package/dist/exports/client/index.d.ts +4 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +19 -19
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/Blocks/SectionTitle/index.scss +1 -1
- package/dist/fields/Relationship/index.d.ts.map +1 -1
- package/dist/fields/Relationship/index.js +1 -3
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Upload/HasMany/index.d.ts +4 -0
- package/dist/fields/Upload/HasMany/index.d.ts.map +1 -0
- package/dist/fields/Upload/HasMany/index.js +474 -0
- package/dist/fields/Upload/HasMany/index.js.map +1 -0
- package/dist/fields/Upload/HasMany/index.scss +47 -0
- package/dist/fields/Upload/{Input.d.ts → HasOne/Input.d.ts} +1 -1
- package/dist/fields/Upload/HasOne/Input.d.ts.map +1 -0
- package/dist/fields/Upload/{Input.js → HasOne/Input.js} +12 -12
- package/dist/fields/Upload/HasOne/Input.js.map +1 -0
- package/dist/fields/Upload/HasOne/index.d.ts +12 -0
- package/dist/fields/Upload/HasOne/index.d.ts.map +1 -0
- package/dist/fields/Upload/HasOne/index.js +131 -0
- package/dist/fields/Upload/HasOne/index.js.map +1 -0
- package/dist/fields/Upload/{index.scss → HasOne/index.scss} +1 -1
- package/dist/fields/Upload/index.d.ts +4 -4
- package/dist/fields/Upload/index.d.ts.map +1 -1
- package/dist/fields/Upload/index.js +84 -98
- package/dist/fields/Upload/index.js.map +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.js +1 -27
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
- package/dist/providers/Config/createClientConfig/collections.d.ts.map +1 -1
- package/dist/providers/Config/createClientConfig/collections.js +3 -4
- package/dist/providers/Config/createClientConfig/collections.js.map +1 -1
- package/dist/providers/ListInfo/index.d.ts +6 -0
- package/dist/providers/ListInfo/index.d.ts.map +1 -1
- package/dist/providers/ListInfo/index.js.map +1 -1
- package/dist/providers/Selection/index.d.ts +5 -3
- package/dist/providers/Selection/index.d.ts.map +1 -1
- package/dist/providers/Selection/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +4 -4
- package/dist/fields/Relationship/AddNew/index.d.ts.map +0 -1
- package/dist/fields/Relationship/AddNew/index.js.map +0 -1
- package/dist/fields/Relationship/AddNew/types.d.ts +0 -12
- package/dist/fields/Relationship/AddNew/types.d.ts.map +0 -1
- package/dist/fields/Relationship/AddNew/types.js.map +0 -1
- package/dist/fields/Relationship/AddNew/useRelatedCollections.d.ts.map +0 -1
- package/dist/fields/Relationship/AddNew/useRelatedCollections.js.map +0 -1
- package/dist/fields/Upload/Input.d.ts.map +0 -1
- package/dist/fields/Upload/Input.js.map +0 -1
- /package/dist/{fields/Relationship/AddNew → elements/AddNewRelation}/index.d.ts +0 -0
- /package/dist/{fields/Relationship/AddNew → elements/AddNewRelation}/types.js +0 -0
- /package/dist/{fields/Relationship/AddNew → elements/AddNewRelation}/useRelatedCollections.d.ts +0 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
+
import { useModal } from '@faceless-ui/modal';
|
|
5
|
+
import * as qs from 'qs-esm';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { toast } from 'sonner';
|
|
8
|
+
import { fieldReducer } from '../../../forms/Form/fieldReducer.js';
|
|
9
|
+
import { useConfig } from '../../../providers/Config/index.js';
|
|
10
|
+
import { useLocale } from '../../../providers/Locale/index.js';
|
|
11
|
+
import { useTranslation } from '../../../providers/Translation/index.js';
|
|
12
|
+
import { getFormState } from '../../../utilities/getFormState.js';
|
|
13
|
+
import { hasSavePermission as getHasSavePermission } from '../../../utilities/hasSavePermission.js';
|
|
14
|
+
import { useLoadingOverlay } from '../../LoadingOverlay/index.js';
|
|
15
|
+
import { drawerSlug } from '../index.js';
|
|
16
|
+
import { createFormData } from './createFormData.js';
|
|
17
|
+
import { formsManagementReducer } from './reducer.js';
|
|
18
|
+
const Context = /*#__PURE__*/React.createContext({
|
|
19
|
+
activeIndex: 0,
|
|
20
|
+
addFiles: () => {},
|
|
21
|
+
collectionSlug: '',
|
|
22
|
+
docPermissions: undefined,
|
|
23
|
+
forms: [],
|
|
24
|
+
getFormDataRef: {
|
|
25
|
+
current: () => ({})
|
|
26
|
+
},
|
|
27
|
+
hasPublishPermission: false,
|
|
28
|
+
hasSavePermission: false,
|
|
29
|
+
hasSubmitted: false,
|
|
30
|
+
isLoadingFiles: true,
|
|
31
|
+
removeFile: () => {},
|
|
32
|
+
saveAllDocs: () => Promise.resolve(),
|
|
33
|
+
setActiveIndex: () => 0,
|
|
34
|
+
setFormTotalErrorCount: () => {},
|
|
35
|
+
totalErrorCount: 0
|
|
36
|
+
});
|
|
37
|
+
const initialState = {
|
|
38
|
+
activeIndex: 0,
|
|
39
|
+
forms: [],
|
|
40
|
+
totalErrorCount: 0
|
|
41
|
+
};
|
|
42
|
+
export function FormsManagerProvider({
|
|
43
|
+
children,
|
|
44
|
+
collectionSlug,
|
|
45
|
+
onSuccess
|
|
46
|
+
}) {
|
|
47
|
+
const {
|
|
48
|
+
config
|
|
49
|
+
} = useConfig();
|
|
50
|
+
const {
|
|
51
|
+
routes: {
|
|
52
|
+
api
|
|
53
|
+
},
|
|
54
|
+
serverURL
|
|
55
|
+
} = config;
|
|
56
|
+
const {
|
|
57
|
+
code
|
|
58
|
+
} = useLocale();
|
|
59
|
+
const {
|
|
60
|
+
closeModal
|
|
61
|
+
} = useModal();
|
|
62
|
+
const {
|
|
63
|
+
i18n,
|
|
64
|
+
t
|
|
65
|
+
} = useTranslation();
|
|
66
|
+
const [isLoadingFiles, setIsLoadingFiles] = React.useState(false);
|
|
67
|
+
const [hasSubmitted, setHasSubmitted] = React.useState(false);
|
|
68
|
+
const [docPermissions, setDocPermissions] = React.useState();
|
|
69
|
+
const [hasSavePermission, setHasSavePermission] = React.useState(false);
|
|
70
|
+
const [hasPublishPermission, setHasPublishPermission] = React.useState(false);
|
|
71
|
+
const [state, dispatch] = React.useReducer(formsManagementReducer, initialState);
|
|
72
|
+
const {
|
|
73
|
+
activeIndex,
|
|
74
|
+
forms,
|
|
75
|
+
totalErrorCount
|
|
76
|
+
} = state;
|
|
77
|
+
const {
|
|
78
|
+
toggleLoadingOverlay
|
|
79
|
+
} = useLoadingOverlay();
|
|
80
|
+
const initialStateRef = React.useRef(null);
|
|
81
|
+
const hasFetchedInitialFormState = React.useRef(false);
|
|
82
|
+
const getFormDataRef = React.useRef(() => ({}));
|
|
83
|
+
const initialFormStateAbortControllerRef = React.useRef(null);
|
|
84
|
+
const hasFetchedInitialDocPermissions = React.useRef(false);
|
|
85
|
+
const initialDocPermissionsAbortControllerRef = React.useRef(null);
|
|
86
|
+
const actionURL = `${api}/${collectionSlug}`;
|
|
87
|
+
const initilizeSharedDocPermissions = React.useCallback(async () => {
|
|
88
|
+
if (initialDocPermissionsAbortControllerRef.current) initialDocPermissionsAbortControllerRef.current.abort('aborting previous fetch for initial doc permissions');
|
|
89
|
+
initialDocPermissionsAbortControllerRef.current = new AbortController();
|
|
90
|
+
const params = {
|
|
91
|
+
locale: code || undefined
|
|
92
|
+
};
|
|
93
|
+
const docAccessURL = `/${collectionSlug}/access`;
|
|
94
|
+
const res = await fetch(`${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`, {
|
|
95
|
+
credentials: 'include',
|
|
96
|
+
headers: {
|
|
97
|
+
'Accept-Language': i18n.language,
|
|
98
|
+
'Content-Type': 'application/json'
|
|
99
|
+
},
|
|
100
|
+
method: 'post',
|
|
101
|
+
signal: initialDocPermissionsAbortControllerRef.current.signal
|
|
102
|
+
});
|
|
103
|
+
const json = await res.json();
|
|
104
|
+
const publishedAccessJSON = await fetch(`${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`, {
|
|
105
|
+
body: JSON.stringify({
|
|
106
|
+
_status: 'published'
|
|
107
|
+
}),
|
|
108
|
+
credentials: 'include',
|
|
109
|
+
headers: {
|
|
110
|
+
'Accept-Language': i18n.language,
|
|
111
|
+
'Content-Type': 'application/json'
|
|
112
|
+
},
|
|
113
|
+
method: 'POST'
|
|
114
|
+
}).then(res_0 => res_0.json());
|
|
115
|
+
setDocPermissions(json);
|
|
116
|
+
setHasSavePermission(getHasSavePermission({
|
|
117
|
+
collectionSlug,
|
|
118
|
+
docPermissions: json,
|
|
119
|
+
isEditing: false
|
|
120
|
+
}));
|
|
121
|
+
setHasPublishPermission(publishedAccessJSON?.update?.permission);
|
|
122
|
+
}, [api, code, collectionSlug, i18n.language, serverURL]);
|
|
123
|
+
const initializeSharedFormState = React.useCallback(async () => {
|
|
124
|
+
if (initialFormStateAbortControllerRef.current) initialFormStateAbortControllerRef.current.abort('aborting previous fetch for initial form state without files');
|
|
125
|
+
initialFormStateAbortControllerRef.current = new AbortController();
|
|
126
|
+
try {
|
|
127
|
+
const formStateWithoutFiles = await getFormState({
|
|
128
|
+
apiRoute: config.routes.api,
|
|
129
|
+
body: {
|
|
130
|
+
collectionSlug,
|
|
131
|
+
locale: code,
|
|
132
|
+
operation: 'create',
|
|
133
|
+
schemaPath: collectionSlug
|
|
134
|
+
},
|
|
135
|
+
// onError: onLoadError,
|
|
136
|
+
serverURL: config.serverURL,
|
|
137
|
+
signal: initialFormStateAbortControllerRef.current.signal
|
|
138
|
+
});
|
|
139
|
+
initialStateRef.current = formStateWithoutFiles;
|
|
140
|
+
hasFetchedInitialFormState.current = true;
|
|
141
|
+
} catch (error) {
|
|
142
|
+
// swallow error
|
|
143
|
+
}
|
|
144
|
+
}, [code, collectionSlug, config.routes.api, config.serverURL]);
|
|
145
|
+
const setActiveIndex = React.useCallback(index => {
|
|
146
|
+
const currentFormsData = getFormDataRef.current();
|
|
147
|
+
dispatch({
|
|
148
|
+
type: 'REPLACE',
|
|
149
|
+
state: {
|
|
150
|
+
activeIndex: index,
|
|
151
|
+
forms: forms.map((form, i) => {
|
|
152
|
+
if (i === activeIndex) {
|
|
153
|
+
return {
|
|
154
|
+
errorCount: form.errorCount,
|
|
155
|
+
formState: currentFormsData
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return form;
|
|
159
|
+
})
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}, [forms, activeIndex]);
|
|
163
|
+
const addFiles = React.useCallback(files => {
|
|
164
|
+
setIsLoadingFiles(true);
|
|
165
|
+
dispatch({
|
|
166
|
+
type: 'ADD_FORMS',
|
|
167
|
+
files,
|
|
168
|
+
initialState: initialStateRef.current
|
|
169
|
+
});
|
|
170
|
+
setIsLoadingFiles(false);
|
|
171
|
+
}, []);
|
|
172
|
+
const removeFile = React.useCallback(index_0 => {
|
|
173
|
+
dispatch({
|
|
174
|
+
type: 'REMOVE_FORM',
|
|
175
|
+
index: index_0
|
|
176
|
+
});
|
|
177
|
+
}, []);
|
|
178
|
+
const setFormTotalErrorCount = React.useCallback(({
|
|
179
|
+
errorCount,
|
|
180
|
+
index: index_1
|
|
181
|
+
}) => {
|
|
182
|
+
dispatch({
|
|
183
|
+
type: 'UPDATE_ERROR_COUNT',
|
|
184
|
+
count: errorCount,
|
|
185
|
+
index: index_1
|
|
186
|
+
});
|
|
187
|
+
}, []);
|
|
188
|
+
const saveAllDocs = React.useCallback(async ({
|
|
189
|
+
overrides
|
|
190
|
+
} = {}) => {
|
|
191
|
+
const currentFormsData_0 = getFormDataRef.current();
|
|
192
|
+
const currentForms = [...forms];
|
|
193
|
+
currentForms[activeIndex] = {
|
|
194
|
+
errorCount: currentForms[activeIndex].errorCount,
|
|
195
|
+
formState: currentFormsData_0
|
|
196
|
+
};
|
|
197
|
+
const promises = currentForms.map(async (form_0, i_0) => {
|
|
198
|
+
try {
|
|
199
|
+
toggleLoadingOverlay({
|
|
200
|
+
isLoading: true,
|
|
201
|
+
key: 'saveAllDocs',
|
|
202
|
+
loadingText: t('general:uploading')
|
|
203
|
+
});
|
|
204
|
+
const req = await fetch(actionURL, {
|
|
205
|
+
body: createFormData(form_0.formState, overrides),
|
|
206
|
+
method: 'POST'
|
|
207
|
+
});
|
|
208
|
+
const json_0 = await req.json();
|
|
209
|
+
// should expose some sort of helper for this
|
|
210
|
+
if (json_0?.errors?.length) {
|
|
211
|
+
const [fieldErrors, nonFieldErrors] = json_0.errors.reduce(([fieldErrs, nonFieldErrs], err) => {
|
|
212
|
+
const newFieldErrs = [];
|
|
213
|
+
const newNonFieldErrs = [];
|
|
214
|
+
if (err?.message) {
|
|
215
|
+
newNonFieldErrs.push(err);
|
|
216
|
+
}
|
|
217
|
+
if (Array.isArray(err?.data?.errors)) {
|
|
218
|
+
err.data?.errors.forEach(dataError => {
|
|
219
|
+
if (dataError?.field) {
|
|
220
|
+
newFieldErrs.push(dataError);
|
|
221
|
+
} else {
|
|
222
|
+
newNonFieldErrs.push(dataError);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
return [[...fieldErrs, ...newFieldErrs], [...nonFieldErrs, ...newNonFieldErrs]];
|
|
227
|
+
}, [[], []]);
|
|
228
|
+
currentForms[i_0] = {
|
|
229
|
+
errorCount: fieldErrors.length,
|
|
230
|
+
formState: fieldReducer(currentForms[i_0].formState, {
|
|
231
|
+
type: 'ADD_SERVER_ERRORS',
|
|
232
|
+
errors: fieldErrors
|
|
233
|
+
})
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
} catch (error_0) {
|
|
237
|
+
// swallow error
|
|
238
|
+
} finally {
|
|
239
|
+
setHasSubmitted(true);
|
|
240
|
+
toggleLoadingOverlay({
|
|
241
|
+
isLoading: false,
|
|
242
|
+
key: 'saveAllDocs'
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
await Promise.all(promises);
|
|
247
|
+
const remainingForms = currentForms.filter(({
|
|
248
|
+
errorCount: errorCount_0
|
|
249
|
+
}) => errorCount_0 > 0);
|
|
250
|
+
const successCount = Math.max(0, currentForms.length - remainingForms.length);
|
|
251
|
+
const errorCount_1 = currentForms.length - successCount;
|
|
252
|
+
if (successCount) {
|
|
253
|
+
toast.success(`Successfully saved ${successCount} files`);
|
|
254
|
+
if (errorCount_1 === 0) {
|
|
255
|
+
closeModal(drawerSlug);
|
|
256
|
+
}
|
|
257
|
+
if (typeof onSuccess === 'function') {
|
|
258
|
+
onSuccess();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (errorCount_1) {
|
|
262
|
+
toast.error(`Failed to save ${errorCount_1} files`);
|
|
263
|
+
}
|
|
264
|
+
dispatch({
|
|
265
|
+
type: 'REPLACE',
|
|
266
|
+
state: {
|
|
267
|
+
activeIndex: 0,
|
|
268
|
+
forms: remainingForms,
|
|
269
|
+
totalErrorCount: remainingForms.reduce((acc, {
|
|
270
|
+
errorCount: errorCount_2
|
|
271
|
+
}) => acc + errorCount_2, 0)
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}, [actionURL, activeIndex, closeModal, forms, onSuccess]);
|
|
275
|
+
React.useEffect(() => {
|
|
276
|
+
if (!hasFetchedInitialFormState.current) {
|
|
277
|
+
void initializeSharedFormState();
|
|
278
|
+
}
|
|
279
|
+
if (!hasFetchedInitialDocPermissions.current) {
|
|
280
|
+
void initilizeSharedDocPermissions();
|
|
281
|
+
}
|
|
282
|
+
return;
|
|
283
|
+
}, [initializeSharedFormState, initilizeSharedDocPermissions]);
|
|
284
|
+
return /*#__PURE__*/_jsx(Context.Provider, {
|
|
285
|
+
value: {
|
|
286
|
+
activeIndex: state.activeIndex,
|
|
287
|
+
addFiles,
|
|
288
|
+
collectionSlug,
|
|
289
|
+
docPermissions,
|
|
290
|
+
forms,
|
|
291
|
+
getFormDataRef,
|
|
292
|
+
hasPublishPermission,
|
|
293
|
+
hasSavePermission,
|
|
294
|
+
hasSubmitted,
|
|
295
|
+
isLoadingFiles,
|
|
296
|
+
removeFile,
|
|
297
|
+
saveAllDocs,
|
|
298
|
+
setActiveIndex,
|
|
299
|
+
setFormTotalErrorCount,
|
|
300
|
+
totalErrorCount
|
|
301
|
+
},
|
|
302
|
+
children: children
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
export function useFormsManager() {
|
|
306
|
+
return React.useContext(Context);
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["useModal","qs","React","toast","fieldReducer","useConfig","useLocale","useTranslation","getFormState","hasSavePermission","getHasSavePermission","useLoadingOverlay","drawerSlug","createFormData","formsManagementReducer","Context","createContext","activeIndex","addFiles","collectionSlug","docPermissions","undefined","forms","getFormDataRef","current","hasPublishPermission","hasSubmitted","isLoadingFiles","removeFile","saveAllDocs","Promise","resolve","setActiveIndex","setFormTotalErrorCount","totalErrorCount","initialState","FormsManagerProvider","children","onSuccess","config","routes","api","serverURL","code","closeModal","i18n","t","setIsLoadingFiles","useState","setHasSubmitted","setDocPermissions","setHasSavePermission","setHasPublishPermission","state","dispatch","useReducer","toggleLoadingOverlay","initialStateRef","useRef","hasFetchedInitialFormState","initialFormStateAbortControllerRef","hasFetchedInitialDocPermissions","initialDocPermissionsAbortControllerRef","actionURL","initilizeSharedDocPermissions","useCallback","abort","AbortController","params","locale","docAccessURL","res","fetch","stringify","credentials","headers","language","method","signal","json","publishedAccessJSON","body","JSON","_status","then","isEditing","update","permission","initializeSharedFormState","formStateWithoutFiles","apiRoute","operation","schemaPath","error","index","currentFormsData","type","map","form","i","errorCount","formState","files","count","overrides","currentForms","promises","isLoading","key","loadingText","req","errors","length","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","push","Array","isArray","data","forEach","dataError","field","all","remainingForms","filter","successCount","Math","max","success","acc","useEffect","_jsx","Provider","value","useFormsManager","useContext"],"sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Data, DocumentPermissions, FormState } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport type { BulkUploadProps } from '../index.js'\nimport type { State } from './reducer.js'\n\nimport { fieldReducer } from '../../../forms/Form/fieldReducer.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { getFormState } from '../../../utilities/getFormState.js'\nimport { hasSavePermission as getHasSavePermission } from '../../../utilities/hasSavePermission.js'\nimport { useLoadingOverlay } from '../../LoadingOverlay/index.js'\nimport { drawerSlug } from '../index.js'\nimport { createFormData } from './createFormData.js'\nimport { formsManagementReducer } from './reducer.js'\n\ntype FormsManagerContext = {\n readonly activeIndex: State['activeIndex']\n readonly addFiles: (filelist: FileList) => void\n readonly collectionSlug: string\n readonly docPermissions?: DocumentPermissions\n readonly forms: State['forms']\n getFormDataRef: React.RefObject<() => Data>\n readonly hasPublishPermission: boolean\n readonly hasSavePermission: boolean\n readonly hasSubmitted: boolean\n readonly isLoadingFiles: boolean\n readonly removeFile: (index: number) => void\n readonly saveAllDocs: ({ overrides }?: { overrides?: Record<string, unknown> }) => Promise<void>\n readonly setActiveIndex: (index: number) => void\n readonly setFormTotalErrorCount: ({\n errorCount,\n index,\n }: {\n errorCount: number\n index: number\n }) => void\n readonly totalErrorCount?: number\n}\n\nconst Context = React.createContext<FormsManagerContext>({\n activeIndex: 0,\n addFiles: () => {},\n collectionSlug: '',\n docPermissions: undefined,\n forms: [],\n getFormDataRef: { current: () => ({}) },\n hasPublishPermission: false,\n hasSavePermission: false,\n hasSubmitted: false,\n isLoadingFiles: true,\n removeFile: () => {},\n saveAllDocs: () => Promise.resolve(),\n setActiveIndex: () => 0,\n setFormTotalErrorCount: () => {},\n totalErrorCount: 0,\n})\n\nconst initialState: State = {\n activeIndex: 0,\n forms: [],\n totalErrorCount: 0,\n}\n\ntype Props = {\n readonly children: React.ReactNode\n readonly collectionSlug: string\n readonly onSuccess: BulkUploadProps['onSuccess']\n}\n\nexport function FormsManagerProvider({ children, collectionSlug, onSuccess }: Props) {\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n const { code } = useLocale()\n const { closeModal } = useModal()\n const { i18n, t } = useTranslation()\n\n const [isLoadingFiles, setIsLoadingFiles] = React.useState(false)\n const [hasSubmitted, setHasSubmitted] = React.useState(false)\n const [docPermissions, setDocPermissions] = React.useState<DocumentPermissions>()\n const [hasSavePermission, setHasSavePermission] = React.useState(false)\n const [hasPublishPermission, setHasPublishPermission] = React.useState(false)\n const [state, dispatch] = React.useReducer(formsManagementReducer, initialState)\n const { activeIndex, forms, totalErrorCount } = state\n const { toggleLoadingOverlay } = useLoadingOverlay()\n\n const initialStateRef = React.useRef<FormState>(null)\n const hasFetchedInitialFormState = React.useRef(false)\n const getFormDataRef = React.useRef<() => Data>(() => ({}))\n const initialFormStateAbortControllerRef = React.useRef<AbortController>(null)\n const hasFetchedInitialDocPermissions = React.useRef(false)\n const initialDocPermissionsAbortControllerRef = React.useRef<AbortController>(null)\n\n const actionURL = `${api}/${collectionSlug}`\n\n const initilizeSharedDocPermissions = React.useCallback(async () => {\n if (initialDocPermissionsAbortControllerRef.current)\n initialDocPermissionsAbortControllerRef.current.abort(\n 'aborting previous fetch for initial doc permissions',\n )\n initialDocPermissionsAbortControllerRef.current = new AbortController()\n\n const params = {\n locale: code || undefined,\n }\n\n const docAccessURL = `/${collectionSlug}/access`\n const res = await fetch(`${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n signal: initialDocPermissionsAbortControllerRef.current.signal,\n })\n\n const json: DocumentPermissions = await res.json()\n const publishedAccessJSON = await fetch(\n `${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`,\n {\n body: JSON.stringify({\n _status: 'published',\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n ).then((res) => res.json())\n\n setDocPermissions(json)\n\n setHasSavePermission(\n getHasSavePermission({\n collectionSlug,\n docPermissions: json,\n isEditing: false,\n }),\n )\n\n setHasPublishPermission(publishedAccessJSON?.update?.permission)\n }, [api, code, collectionSlug, i18n.language, serverURL])\n\n const initializeSharedFormState = React.useCallback(async () => {\n if (initialFormStateAbortControllerRef.current)\n initialFormStateAbortControllerRef.current.abort(\n 'aborting previous fetch for initial form state without files',\n )\n initialFormStateAbortControllerRef.current = new AbortController()\n\n try {\n const formStateWithoutFiles = await getFormState({\n apiRoute: config.routes.api,\n body: {\n collectionSlug,\n locale: code,\n operation: 'create',\n schemaPath: collectionSlug,\n },\n // onError: onLoadError,\n serverURL: config.serverURL,\n signal: initialFormStateAbortControllerRef.current.signal,\n })\n initialStateRef.current = formStateWithoutFiles\n hasFetchedInitialFormState.current = true\n } catch (error) {\n // swallow error\n }\n }, [code, collectionSlug, config.routes.api, config.serverURL])\n\n const setActiveIndex: FormsManagerContext['setActiveIndex'] = React.useCallback(\n (index: number) => {\n const currentFormsData = getFormDataRef.current()\n dispatch({\n type: 'REPLACE',\n state: {\n activeIndex: index,\n forms: forms.map((form, i) => {\n if (i === activeIndex) {\n return {\n errorCount: form.errorCount,\n formState: currentFormsData,\n }\n }\n return form\n }),\n },\n })\n },\n [forms, activeIndex],\n )\n\n const addFiles = React.useCallback((files: FileList) => {\n setIsLoadingFiles(true)\n dispatch({ type: 'ADD_FORMS', files, initialState: initialStateRef.current })\n setIsLoadingFiles(false)\n }, [])\n\n const removeFile: FormsManagerContext['removeFile'] = React.useCallback((index) => {\n dispatch({ type: 'REMOVE_FORM', index })\n }, [])\n\n const setFormTotalErrorCount: FormsManagerContext['setFormTotalErrorCount'] = React.useCallback(\n ({ errorCount, index }) => {\n dispatch({\n type: 'UPDATE_ERROR_COUNT',\n count: errorCount,\n index,\n })\n },\n [],\n )\n\n const saveAllDocs: FormsManagerContext['saveAllDocs'] = React.useCallback(\n async ({ overrides } = {}) => {\n const currentFormsData = getFormDataRef.current()\n const currentForms = [...forms]\n currentForms[activeIndex] = {\n errorCount: currentForms[activeIndex].errorCount,\n formState: currentFormsData,\n }\n const promises = currentForms.map(async (form, i) => {\n try {\n toggleLoadingOverlay({\n isLoading: true,\n key: 'saveAllDocs',\n loadingText: t('general:uploading'),\n })\n const req = await fetch(actionURL, {\n body: createFormData(form.formState, overrides),\n method: 'POST',\n })\n\n const json = await req.json()\n\n // should expose some sort of helper for this\n if (json?.errors?.length) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs: any[] = []\n const newNonFieldErrs: any[] = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.field) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n currentForms[i] = {\n errorCount: fieldErrors.length,\n formState: fieldReducer(currentForms[i].formState, {\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n }),\n }\n }\n } catch (error) {\n // swallow error\n } finally {\n setHasSubmitted(true)\n toggleLoadingOverlay({ isLoading: false, key: 'saveAllDocs' })\n }\n })\n\n await Promise.all(promises)\n\n const remainingForms = currentForms.filter(({ errorCount }) => errorCount > 0)\n const successCount = Math.max(0, currentForms.length - remainingForms.length)\n const errorCount = currentForms.length - successCount\n\n if (successCount) {\n toast.success(`Successfully saved ${successCount} files`)\n\n if (errorCount === 0) {\n closeModal(drawerSlug)\n }\n\n if (typeof onSuccess === 'function') {\n onSuccess()\n }\n }\n\n if (errorCount) {\n toast.error(`Failed to save ${errorCount} files`)\n }\n\n dispatch({\n type: 'REPLACE',\n state: {\n activeIndex: 0,\n forms: remainingForms,\n totalErrorCount: remainingForms.reduce((acc, { errorCount }) => acc + errorCount, 0),\n },\n })\n },\n [actionURL, activeIndex, closeModal, forms, onSuccess],\n )\n\n React.useEffect(() => {\n if (!hasFetchedInitialFormState.current) {\n void initializeSharedFormState()\n }\n if (!hasFetchedInitialDocPermissions.current) {\n void initilizeSharedDocPermissions()\n }\n return\n }, [initializeSharedFormState, initilizeSharedDocPermissions])\n\n return (\n <Context.Provider\n value={{\n activeIndex: state.activeIndex,\n addFiles,\n collectionSlug,\n docPermissions,\n forms,\n getFormDataRef,\n hasPublishPermission,\n hasSavePermission,\n hasSubmitted,\n isLoadingFiles,\n removeFile,\n saveAllDocs,\n setActiveIndex,\n setFormTotalErrorCount,\n totalErrorCount,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport function useFormsManager() {\n return React.useContext(Context)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { FormState } from 'payload';
|
|
2
|
+
export type State = {
|
|
3
|
+
activeIndex: number;
|
|
4
|
+
forms: {
|
|
5
|
+
errorCount: number;
|
|
6
|
+
formState: FormState;
|
|
7
|
+
}[];
|
|
8
|
+
totalErrorCount: number;
|
|
9
|
+
};
|
|
10
|
+
type Action = {
|
|
11
|
+
count: number;
|
|
12
|
+
index: number;
|
|
13
|
+
type: 'UPDATE_ERROR_COUNT';
|
|
14
|
+
} | {
|
|
15
|
+
files: FileList;
|
|
16
|
+
initialState: FormState | null;
|
|
17
|
+
type: 'ADD_FORMS';
|
|
18
|
+
} | {
|
|
19
|
+
index: number;
|
|
20
|
+
type: 'REMOVE_FORM';
|
|
21
|
+
} | {
|
|
22
|
+
index: number;
|
|
23
|
+
type: 'SET_ACTIVE_INDEX';
|
|
24
|
+
} | {
|
|
25
|
+
state: Partial<State>;
|
|
26
|
+
type: 'REPLACE';
|
|
27
|
+
};
|
|
28
|
+
export declare function formsManagementReducer(state: State, action: Action): State;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=reducer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FormsManager/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,MAAM,MAAM,KAAK,GAAG;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAA;QAClB,SAAS,EAAE,SAAS,CAAA;KACrB,EAAE,CAAA;IACH,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,KAAK,MAAM,GACP;IACE,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,oBAAoB,CAAA;CAC3B,GACD;IACE,KAAK,EAAE,QAAQ,CAAA;IACf,YAAY,EAAE,SAAS,GAAG,IAAI,CAAA;IAC9B,IAAI,EAAE,WAAW,CAAA;CAClB,GACD;IACE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,CAAA;CACpB,GACD;IACE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,kBAAkB,CAAA;CACzB,GACD;IACE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACrB,IAAI,EAAE,SAAS,CAAA;CAChB,CAAA;AAEL,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAsE1E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export function formsManagementReducer(state, action) {
|
|
2
|
+
switch (action.type) {
|
|
3
|
+
case 'REPLACE':
|
|
4
|
+
{
|
|
5
|
+
return {
|
|
6
|
+
...state,
|
|
7
|
+
...action.state
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
case 'SET_ACTIVE_INDEX':
|
|
11
|
+
{
|
|
12
|
+
return {
|
|
13
|
+
...state,
|
|
14
|
+
activeIndex: action.index
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
case 'ADD_FORMS':
|
|
18
|
+
{
|
|
19
|
+
const newForms = [];
|
|
20
|
+
for (let i = 0; i < action.files.length; i++) {
|
|
21
|
+
newForms[i] = {
|
|
22
|
+
errorCount: 0,
|
|
23
|
+
formState: {
|
|
24
|
+
...(action.initialState || {}),
|
|
25
|
+
file: {
|
|
26
|
+
initialValue: action.files[i],
|
|
27
|
+
valid: true,
|
|
28
|
+
value: action.files[i]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
...state,
|
|
35
|
+
activeIndex: 0,
|
|
36
|
+
forms: [...newForms, ...state.forms]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
case 'REMOVE_FORM':
|
|
40
|
+
{
|
|
41
|
+
const remainingFormStates = [...state.forms];
|
|
42
|
+
const [removedForm] = remainingFormStates.splice(action.index, 1);
|
|
43
|
+
const affectedByShift = state.activeIndex >= action.index;
|
|
44
|
+
const nextIndex = state.activeIndex === action.index ? action.index : affectedByShift ? state.activeIndex - 1 : state.activeIndex;
|
|
45
|
+
const boundedActiveIndex = Math.min(remainingFormStates.length - 1, nextIndex);
|
|
46
|
+
return {
|
|
47
|
+
...state,
|
|
48
|
+
activeIndex: affectedByShift ? boundedActiveIndex : state.activeIndex,
|
|
49
|
+
forms: remainingFormStates,
|
|
50
|
+
totalErrorCount: state.totalErrorCount - removedForm.errorCount
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
case 'UPDATE_ERROR_COUNT':
|
|
54
|
+
{
|
|
55
|
+
const forms = [...state.forms];
|
|
56
|
+
forms[action.index].errorCount = action.count;
|
|
57
|
+
return {
|
|
58
|
+
...state,
|
|
59
|
+
forms,
|
|
60
|
+
totalErrorCount: state.forms.reduce((acc, form) => acc + form.errorCount, 0)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
default:
|
|
64
|
+
{
|
|
65
|
+
return state;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reducer.js","names":["formsManagementReducer","state","action","type","activeIndex","index","newForms","i","files","length","errorCount","formState","initialState","file","initialValue","valid","value","forms","remainingFormStates","removedForm","splice","affectedByShift","nextIndex","boundedActiveIndex","Math","min","totalErrorCount","count","reduce","acc","form"],"sources":["../../../../src/elements/BulkUpload/FormsManager/reducer.ts"],"sourcesContent":["import type { FormState } from 'payload'\n\nexport type State = {\n activeIndex: number\n forms: {\n errorCount: number\n formState: FormState\n }[]\n totalErrorCount: number\n}\n\ntype Action =\n | {\n count: number\n index: number\n type: 'UPDATE_ERROR_COUNT'\n }\n | {\n files: FileList\n initialState: FormState | null\n type: 'ADD_FORMS'\n }\n | {\n index: number\n type: 'REMOVE_FORM'\n }\n | {\n index: number\n type: 'SET_ACTIVE_INDEX'\n }\n | {\n state: Partial<State>\n type: 'REPLACE'\n }\n\nexport function formsManagementReducer(state: State, action: Action): State {\n switch (action.type) {\n case 'REPLACE': {\n return {\n ...state,\n ...action.state,\n }\n }\n case 'SET_ACTIVE_INDEX': {\n return {\n ...state,\n activeIndex: action.index,\n }\n }\n case 'ADD_FORMS': {\n const newForms: State['forms'] = []\n for (let i = 0; i < action.files.length; i++) {\n newForms[i] = {\n errorCount: 0,\n formState: {\n ...(action.initialState || {}),\n file: {\n initialValue: action.files[i],\n valid: true,\n value: action.files[i],\n },\n },\n }\n }\n\n return {\n ...state,\n activeIndex: 0,\n forms: [...newForms, ...state.forms],\n }\n }\n case 'REMOVE_FORM': {\n const remainingFormStates = [...state.forms]\n const [removedForm] = remainingFormStates.splice(action.index, 1)\n\n const affectedByShift = state.activeIndex >= action.index\n const nextIndex =\n state.activeIndex === action.index\n ? action.index\n : affectedByShift\n ? state.activeIndex - 1\n : state.activeIndex\n const boundedActiveIndex = Math.min(remainingFormStates.length - 1, nextIndex)\n\n return {\n ...state,\n activeIndex: affectedByShift ? boundedActiveIndex : state.activeIndex,\n forms: remainingFormStates,\n totalErrorCount: state.totalErrorCount - removedForm.errorCount,\n }\n }\n case 'UPDATE_ERROR_COUNT': {\n const forms = [...state.forms]\n forms[action.index].errorCount = action.count\n\n return {\n ...state,\n forms,\n totalErrorCount: state.forms.reduce((acc, form) => acc + form.errorCount, 0),\n }\n }\n default: {\n return state\n }\n }\n}\n"],"mappings":"AAmCA,OAAO,SAASA,uBAAuBC,KAAY,EAAEC,MAAc;EACjE,QAAQA,MAAA,CAAOC,IAAI;IACjB,KAAK;MAAW;QACd,OAAO;UACL,GAAGF,KAAK;UACR,GAAGC,MAAA,CAAOD;QACZ;MACF;IACA,KAAK;MAAoB;QACvB,OAAO;UACL,GAAGA,KAAK;UACRG,WAAA,EAAaF,MAAA,CAAOG;QACtB;MACF;IACA,KAAK;MAAa;QAChB,MAAMC,QAAA,GAA2B,EAAE;QACnC,KAAK,IAAIC,CAAA,GAAI,GAAGA,CAAA,GAAIL,MAAA,CAAOM,KAAK,CAACC,MAAM,EAAEF,CAAA,IAAK;UAC5CD,QAAQ,CAACC,CAAA,CAAE,GAAG;YACZG,UAAA,EAAY;YACZC,SAAA,EAAW;cACT,IAAIT,MAAA,CAAOU,YAAY,IAAI,CAAC,CAAC;cAC7BC,IAAA,EAAM;gBACJC,YAAA,EAAcZ,MAAA,CAAOM,KAAK,CAACD,CAAA,CAAE;gBAC7BQ,KAAA,EAAO;gBACPC,KAAA,EAAOd,MAAA,CAAOM,KAAK,CAACD,CAAA;cACtB;YACF;UACF;QACF;QAEA,OAAO;UACL,GAAGN,KAAK;UACRG,WAAA,EAAa;UACba,KAAA,EAAO,C,GAAIX,QAAA,E,GAAaL,KAAA,CAAMgB,KAAK;QACrC;MACF;IACA,KAAK;MAAe;QAClB,MAAMC,mBAAA,GAAsB,C,GAAIjB,KAAA,CAAMgB,KAAK,CAAC;QAC5C,MAAM,CAACE,WAAA,CAAY,GAAGD,mBAAA,CAAoBE,MAAM,CAAClB,MAAA,CAAOG,KAAK,EAAE;QAE/D,MAAMgB,eAAA,GAAkBpB,KAAA,CAAMG,WAAW,IAAIF,MAAA,CAAOG,KAAK;QACzD,MAAMiB,SAAA,GACJrB,KAAA,CAAMG,WAAW,KAAKF,MAAA,CAAOG,KAAK,GAC9BH,MAAA,CAAOG,KAAK,GACZgB,eAAA,GACEpB,KAAA,CAAMG,WAAW,GAAG,IACpBH,KAAA,CAAMG,WAAW;QACzB,MAAMmB,kBAAA,GAAqBC,IAAA,CAAKC,GAAG,CAACP,mBAAA,CAAoBT,MAAM,GAAG,GAAGa,SAAA;QAEpE,OAAO;UACL,GAAGrB,KAAK;UACRG,WAAA,EAAaiB,eAAA,GAAkBE,kBAAA,GAAqBtB,KAAA,CAAMG,WAAW;UACrEa,KAAA,EAAOC,mBAAA;UACPQ,eAAA,EAAiBzB,KAAA,CAAMyB,eAAe,GAAGP,WAAA,CAAYT;QACvD;MACF;IACA,KAAK;MAAsB;QACzB,MAAMO,KAAA,GAAQ,C,GAAIhB,KAAA,CAAMgB,KAAK,CAAC;QAC9BA,KAAK,CAACf,MAAA,CAAOG,KAAK,CAAC,CAACK,UAAU,GAAGR,MAAA,CAAOyB,KAAK;QAE7C,OAAO;UACL,GAAG1B,KAAK;UACRgB,KAAA;UACAS,eAAA,EAAiBzB,KAAA,CAAMgB,KAAK,CAACW,MAAM,CAAC,CAACC,GAAA,EAAKC,IAAA,KAASD,GAAA,GAAMC,IAAA,CAAKpB,UAAU,EAAE;QAC5E;MACF;IACA;MAAS;QACP,OAAOT,KAAA;MACT;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.scss';
|
|
3
|
+
type Props = {
|
|
4
|
+
readonly onClose: () => void;
|
|
5
|
+
readonly title: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function DrawerHeader({ onClose, title }: Props): React.JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/Header/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,cAAc,CAAA;AAIrB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAA;AACD,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,qBAOrD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { DrawerCloseButton } from '../DrawerCloseButton/index.js';
|
|
4
|
+
import { drawerSlug } from '../index.js';
|
|
5
|
+
import './index.scss';
|
|
6
|
+
const baseClass = 'bulk-upload--drawer-header';
|
|
7
|
+
export function DrawerHeader({
|
|
8
|
+
onClose,
|
|
9
|
+
title
|
|
10
|
+
}) {
|
|
11
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
12
|
+
className: baseClass,
|
|
13
|
+
children: [/*#__PURE__*/_jsx("h2", {
|
|
14
|
+
title: title,
|
|
15
|
+
children: title
|
|
16
|
+
}), /*#__PURE__*/_jsx(DrawerCloseButton, {
|
|
17
|
+
onClick: onClose,
|
|
18
|
+
slug: drawerSlug
|
|
19
|
+
})]
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","DrawerCloseButton","drawerSlug","baseClass","DrawerHeader","onClose","title","_jsxs","className","_jsx","onClick","slug"],"sources":["../../../../src/elements/BulkUpload/Header/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport { DrawerCloseButton } from '../DrawerCloseButton/index.js'\nimport { drawerSlug } from '../index.js'\nimport './index.scss'\n\nconst baseClass = 'bulk-upload--drawer-header'\n\ntype Props = {\n readonly onClose: () => void\n readonly title: string\n}\nexport function DrawerHeader({ onClose, title }: Props) {\n return (\n <div className={baseClass}>\n <h2 title={title}>{title}</h2>\n <DrawerCloseButton onClick={onClose} slug={drawerSlug} />\n </div>\n )\n}\n"],"mappings":";AAAA,OAAOA,KAAA,MAAW;AAElB,SAASC,iBAAiB,QAAQ;AAClC,SAASC,UAAU,QAAQ;AAC3B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAMlB,OAAO,SAASC,aAAa;EAAEC,OAAO;EAAEC;AAAK,CAAS;EACpD,oBACEC,KAAA,CAAC;IAAIC,SAAA,EAAWL,SAAA;4BACdM,IAAA,CAAC;MAAGH,KAAA,EAAOA,KAAA;gBAAQA;qBACnBG,IAAA,CAACR,iBAAA;MAAkBS,OAAA,EAASL,OAAA;MAASM,IAAA,EAAMT;;;AAGjD","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
.bulk-upload--drawer-header {
|
|
2
|
+
display: flex;
|
|
3
|
+
justify-content: space-between;
|
|
4
|
+
align-items: center;
|
|
5
|
+
padding: calc(var(--base) * 2.5) var(--gutter-h);
|
|
6
|
+
height: 48px;
|
|
7
|
+
border-bottom: 1px solid var(--theme-border-color);
|
|
8
|
+
|
|
9
|
+
h2 {
|
|
10
|
+
margin: 0;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const drawerSlug = "bulk-upload-drawer";
|
|
3
|
+
export type BulkUploadProps = {
|
|
4
|
+
readonly children: React.ReactNode;
|
|
5
|
+
readonly collectionSlug: string;
|
|
6
|
+
readonly onSuccess: () => void;
|
|
7
|
+
};
|
|
8
|
+
export declare function BulkUploadDrawer({ collectionSlug, onSuccess }: Omit<BulkUploadProps, 'children'>): React.JSX.Element;
|
|
9
|
+
export declare function BulkUploadToggler({ children, collectionSlug, onSuccess }: BulkUploadProps): React.JSX.Element;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/BulkUpload/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,eAAO,MAAM,UAAU,uBAAuB,CAAA;AAoB9C,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAA;CAC/B,CAAA;AAED,wBAAgB,gBAAgB,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,qBAahG;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,eAAe,qBAOzF"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { useModal } from '@faceless-ui/modal';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { EditDepthProvider, useEditDepth } from '../../providers/EditDepth/index.js';
|
|
8
|
+
import { Drawer, DrawerToggler } from '../Drawer/index.js';
|
|
9
|
+
import { AddFilesView } from './AddFilesView/index.js';
|
|
10
|
+
import { AddingFilesView } from './AddingFilesView/index.js';
|
|
11
|
+
import { DiscardWithoutSaving } from './DiscardWithoutSaving/index.js';
|
|
12
|
+
import { FormsManagerProvider, useFormsManager } from './FormsManager/index.js';
|
|
13
|
+
export const drawerSlug = 'bulk-upload-drawer';
|
|
14
|
+
function DrawerContent() {
|
|
15
|
+
const $ = _c(8);
|
|
16
|
+
const {
|
|
17
|
+
addFiles,
|
|
18
|
+
forms
|
|
19
|
+
} = useFormsManager();
|
|
20
|
+
const {
|
|
21
|
+
closeModal
|
|
22
|
+
} = useModal();
|
|
23
|
+
let t0;
|
|
24
|
+
if ($[0] !== addFiles) {
|
|
25
|
+
t0 = acceptedFiles => {
|
|
26
|
+
addFiles(acceptedFiles);
|
|
27
|
+
};
|
|
28
|
+
$[0] = addFiles;
|
|
29
|
+
$[1] = t0;
|
|
30
|
+
} else {
|
|
31
|
+
t0 = $[1];
|
|
32
|
+
}
|
|
33
|
+
const onDrop = t0;
|
|
34
|
+
if (!forms.length) {
|
|
35
|
+
let t1;
|
|
36
|
+
if ($[2] !== closeModal) {
|
|
37
|
+
t1 = () => closeModal(drawerSlug);
|
|
38
|
+
$[2] = closeModal;
|
|
39
|
+
$[3] = t1;
|
|
40
|
+
} else {
|
|
41
|
+
t1 = $[3];
|
|
42
|
+
}
|
|
43
|
+
let t2;
|
|
44
|
+
if ($[4] !== t1 || $[5] !== onDrop) {
|
|
45
|
+
t2 = _jsx(AddFilesView, {
|
|
46
|
+
onCancel: t1,
|
|
47
|
+
onDrop
|
|
48
|
+
});
|
|
49
|
+
$[4] = t1;
|
|
50
|
+
$[5] = onDrop;
|
|
51
|
+
$[6] = t2;
|
|
52
|
+
} else {
|
|
53
|
+
t2 = $[6];
|
|
54
|
+
}
|
|
55
|
+
return t2;
|
|
56
|
+
} else {
|
|
57
|
+
let t1;
|
|
58
|
+
if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
59
|
+
t1 = _jsx(AddingFilesView, {});
|
|
60
|
+
$[7] = t1;
|
|
61
|
+
} else {
|
|
62
|
+
t1 = $[7];
|
|
63
|
+
}
|
|
64
|
+
return t1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function BulkUploadDrawer(t0) {
|
|
68
|
+
const $ = _c(4);
|
|
69
|
+
const {
|
|
70
|
+
collectionSlug,
|
|
71
|
+
onSuccess
|
|
72
|
+
} = t0;
|
|
73
|
+
const currentDepth = useEditDepth();
|
|
74
|
+
const t1 = currentDepth || 1;
|
|
75
|
+
let t2;
|
|
76
|
+
if ($[0] !== collectionSlug || $[1] !== onSuccess || $[2] !== t1) {
|
|
77
|
+
t2 = _jsx(EditDepthProvider, {
|
|
78
|
+
depth: t1,
|
|
79
|
+
children: _jsx(Drawer, {
|
|
80
|
+
Header: null,
|
|
81
|
+
gutter: false,
|
|
82
|
+
slug: drawerSlug,
|
|
83
|
+
children: _jsxs(FormsManagerProvider, {
|
|
84
|
+
collectionSlug,
|
|
85
|
+
onSuccess,
|
|
86
|
+
children: [_jsx(DrawerContent, {}), _jsx(DiscardWithoutSaving, {})]
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
$[0] = collectionSlug;
|
|
91
|
+
$[1] = onSuccess;
|
|
92
|
+
$[2] = t1;
|
|
93
|
+
$[3] = t2;
|
|
94
|
+
} else {
|
|
95
|
+
t2 = $[3];
|
|
96
|
+
}
|
|
97
|
+
return t2;
|
|
98
|
+
}
|
|
99
|
+
export function BulkUploadToggler({
|
|
100
|
+
children,
|
|
101
|
+
collectionSlug,
|
|
102
|
+
onSuccess
|
|
103
|
+
}) {
|
|
104
|
+
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
105
|
+
children: [/*#__PURE__*/_jsx(DrawerToggler, {
|
|
106
|
+
slug: drawerSlug,
|
|
107
|
+
children: children
|
|
108
|
+
}), /*#__PURE__*/_jsx(BulkUploadDrawer, {
|
|
109
|
+
collectionSlug: collectionSlug,
|
|
110
|
+
onSuccess: onSuccess
|
|
111
|
+
})]
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=index.js.map
|