@payloadcms/ui 3.57.0-internal.f26caed → 3.57.0
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/BulkUpload/FileSidebar/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FileSidebar/index.js +74 -38
- package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
- package/dist/elements/BulkUpload/FileSidebar/index.scss +14 -1
- package/dist/elements/BulkUpload/FormsManager/index.d.ts +6 -1
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +52 -14
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/reducer.d.ts +2 -2
- package/dist/elements/BulkUpload/FormsManager/reducer.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/reducer.js +5 -5
- package/dist/elements/BulkUpload/FormsManager/reducer.js.map +1 -1
- package/dist/elements/BulkUpload/index.d.ts +30 -5
- package/dist/elements/BulkUpload/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/index.js +130 -28
- package/dist/elements/BulkUpload/index.js.map +1 -1
- package/dist/elements/ConfirmationModal/index.d.ts.map +1 -1
- package/dist/elements/ConfirmationModal/index.js +1 -0
- package/dist/elements/ConfirmationModal/index.js.map +1 -1
- package/dist/elements/DocumentLocked/index.d.ts.map +1 -1
- package/dist/elements/DocumentLocked/index.js +41 -33
- package/dist/elements/DocumentLocked/index.js.map +1 -1
- package/dist/elements/DocumentTakeOver/index.d.ts.map +1 -1
- package/dist/elements/DocumentTakeOver/index.js +27 -19
- package/dist/elements/DocumentTakeOver/index.js.map +1 -1
- package/dist/elements/Drawer/index.d.ts.map +1 -1
- package/dist/elements/Drawer/index.js +1 -0
- package/dist/elements/Drawer/index.js.map +1 -1
- package/dist/elements/FullscreenModal/index.d.ts.map +1 -1
- package/dist/elements/FullscreenModal/index.js +1 -0
- package/dist/elements/FullscreenModal/index.js.map +1 -1
- package/dist/elements/LivePreview/IFrame/index.d.ts +1 -7
- package/dist/elements/LivePreview/IFrame/index.d.ts.map +1 -1
- package/dist/elements/LivePreview/IFrame/index.js +39 -18
- package/dist/elements/LivePreview/IFrame/index.js.map +1 -1
- package/dist/elements/LivePreview/Window/index.d.ts.map +1 -1
- package/dist/elements/LivePreview/Window/index.js +135 -61
- package/dist/elements/LivePreview/Window/index.js.map +1 -1
- package/dist/elements/PublishButton/index.js +1 -1
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/SearchBar/index.scss +4 -0
- package/dist/elements/Status/index.d.ts.map +1 -1
- package/dist/elements/Status/index.js +9 -19
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +20 -14
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Thumbnail/index.d.ts +4 -2
- package/dist/elements/Thumbnail/index.d.ts.map +1 -1
- package/dist/elements/Thumbnail/index.js +6 -2
- package/dist/elements/Thumbnail/index.js.map +1 -1
- package/dist/elements/Thumbnail/index.scss +11 -9
- package/dist/elements/Toasts/fieldErrors.js +1 -1
- package/dist/elements/Toasts/fieldErrors.js.map +1 -1
- package/dist/exports/client/index.js +24 -24
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/rsc/index.d.ts +1 -0
- package/dist/exports/rsc/index.d.ts.map +1 -1
- package/dist/exports/rsc/index.js +1 -0
- package/dist/exports/rsc/index.js.map +1 -1
- package/dist/exports/shared/index.js +2 -2
- package/dist/exports/shared/index.js.map +3 -3
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js +36 -16
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Relationship/Input.d.ts.map +1 -1
- package/dist/fields/Relationship/Input.js +1 -5
- package/dist/fields/Relationship/Input.js.map +1 -1
- package/dist/fields/Upload/Input.js +20 -20
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/forms/Form/index.js +1 -2
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +8 -0
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/types.d.ts +2 -2
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/RenderFields/RenderField.js +223 -236
- package/dist/forms/RenderFields/RenderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +33 -2
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +2 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +2 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.d.ts +6 -0
- package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/forms/useField/index.d.ts.map +1 -1
- package/dist/forms/useField/index.js +76 -73
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/forms/useField/types.d.ts +5 -9
- package/dist/forms/useField/types.d.ts.map +1 -1
- package/dist/forms/useField/types.js.map +1 -1
- package/dist/providers/LivePreview/context.d.ts +17 -2
- package/dist/providers/LivePreview/context.d.ts.map +1 -1
- package/dist/providers/LivePreview/context.js +3 -2
- package/dist/providers/LivePreview/context.js.map +1 -1
- package/dist/providers/LivePreview/index.d.ts +2 -2
- package/dist/providers/LivePreview/index.d.ts.map +1 -1
- package/dist/providers/LivePreview/index.js +33 -19
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/providers/RouteCache/index.d.ts.map +1 -1
- package/dist/providers/RouteCache/index.js +62 -25
- package/dist/providers/RouteCache/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.d.ts +2 -1
- package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.js +2 -0
- package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts +3 -2
- package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +39 -2
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/buildFormState.d.ts +2 -0
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js +20 -1
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/formatAbsoluteURL.d.ts +8 -0
- package/dist/utilities/formatAbsoluteURL.d.ts.map +1 -0
- package/dist/utilities/formatAbsoluteURL.js +15 -0
- package/dist/utilities/formatAbsoluteURL.js.map +1 -0
- package/dist/utilities/getFolderResultsComponentAndData.d.ts.map +1 -1
- package/dist/utilities/getFolderResultsComponentAndData.js +0 -4
- package/dist/utilities/getFolderResultsComponentAndData.js.map +1 -1
- package/dist/utilities/handleLivePreview.d.ts +58 -0
- package/dist/utilities/handleLivePreview.d.ts.map +1 -0
- package/dist/utilities/handleLivePreview.js +96 -0
- package/dist/utilities/handleLivePreview.js.map +1 -0
- package/dist/utilities/handleTakeOver.d.ts +17 -4
- package/dist/utilities/handleTakeOver.d.ts.map +1 -1
- package/dist/utilities/handleTakeOver.js +18 -2
- package/dist/utilities/handleTakeOver.js.map +1 -1
- package/dist/utilities/renderTable.d.ts +3 -2
- package/dist/utilities/renderTable.d.ts.map +1 -1
- package/dist/utilities/renderTable.js +2 -0
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +48 -13
- package/dist/views/Edit/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useModal","qs","React","toast","fieldReducer","useConfig","useLocale","useServerFunctions","useTranslation","useUploadHandlers","hasSavePermission","getHasSavePermission","LoadingOverlay","useLoadingOverlay","useBulkUpload","createFormData","formsManagementReducer","Context","createContext","activeIndex","addFiles","Promise","resolve","bulkUpdateForm","collectionSlug","docPermissions","undefined","documentSlots","forms","getFormDataRef","current","hasPublishPermission","hasSubmitted","isInitializing","removeFile","saveAllDocs","setActiveIndex","setFormTotalErrorCount","totalErrorCount","updateUploadEdits","initialState","FormsManagerProvider","children","config","routes","api","serverURL","code","i18n","t","getDocumentSlots","getFormState","getUploadHandler","setDocumentSlots","useState","setHasSubmitted","setDocPermissions","setHasSavePermission","setHasPublishPermission","hasInitializedState","setHasInitializedState","hasInitializedDocPermissions","setHasInitializedDocPermissions","setIsInitializing","state","dispatch","useReducer","formsRef","useRef","toggleLoadingOverlay","closeModal","drawerSlug","initialFiles","onSuccess","setInitialFiles","isUploading","setIsUploading","loadingText","setLoadingText","hasInitializedWithFiles","initialStateRef","actionURL","initializeSharedDocPermissions","useCallback","params","locale","docAccessURL","res","fetch","stringify","credentials","headers","language","method","json","publishedAccessJSON","body","JSON","_status","then","isEditing","update","initializeSharedFormState","abortController","signal","abort","formStateWithoutFiles","docPreferences","fields","operation","renderAllFields","schemaPath","skipValidation","_err","index","currentFormsData","type","map","form","i","errorCount","formID","formState","uploadEdits","files","length","isLoading","key","count","overrides","currentForms","newDocs","total","actionURLWithParams","addQueryPrefix","req","status","doc","push","fieldErrors","nonFieldErrors","errors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","Array","isArray","data","forEach","dataError","path","error","_","remainingForms","successCount","Math","max","success","acc","updatedFields","afterStateUpdate","Object","entries","value","newFormErrorCount","values","valid","resetUploadEdits","useEffect","_jsxs","_jsx","animationDuration","overlayType","show","useFormsManager","use"],"sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"sourcesContent":["'use client'\n\nimport type {\n Data,\n DocumentSlots,\n FormState,\n SanitizedDocumentPermissions,\n UploadEdits,\n} 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 { 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 { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { useUploadHandlers } from '../../../providers/UploadHandlers/index.js'\nimport { hasSavePermission as getHasSavePermission } from '../../../utilities/hasSavePermission.js'\nimport { LoadingOverlay } from '../../Loading/index.js'\nimport { useLoadingOverlay } from '../../LoadingOverlay/index.js'\nimport { useBulkUpload } 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) => Promise<void>\n readonly bulkUpdateForm: (\n updatedFields: Record<string, unknown>,\n afterStateUpdate?: () => void,\n ) => Promise<void>\n readonly collectionSlug: string\n readonly docPermissions?: SanitizedDocumentPermissions\n readonly documentSlots: DocumentSlots\n readonly forms: State['forms']\n getFormDataRef: React.RefObject<() => Data>\n readonly hasPublishPermission: boolean\n readonly hasSavePermission: boolean\n readonly hasSubmitted: boolean\n readonly isInitializing: boolean\n readonly removeFile: (index: number) => void\n readonly resetUploadEdits?: () => 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 readonly updateUploadEdits: (args: UploadEdits) => void\n}\n\nconst Context = React.createContext<FormsManagerContext>({\n activeIndex: 0,\n addFiles: () => Promise.resolve(),\n bulkUpdateForm: () => null,\n collectionSlug: '',\n docPermissions: undefined,\n documentSlots: {},\n forms: [],\n getFormDataRef: { current: () => ({}) },\n hasPublishPermission: false,\n hasSavePermission: false,\n hasSubmitted: false,\n isInitializing: false,\n removeFile: () => {},\n saveAllDocs: () => Promise.resolve(),\n setActiveIndex: () => 0,\n setFormTotalErrorCount: () => {},\n totalErrorCount: 0,\n updateUploadEdits: () => {},\n})\n\nconst initialState: State = {\n activeIndex: 0,\n forms: [],\n totalErrorCount: 0,\n}\n\ntype FormsManagerProps = {\n readonly children: React.ReactNode\n}\n\nexport function FormsManagerProvider({ children }: FormsManagerProps) {\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n const { code } = useLocale()\n const { i18n, t } = useTranslation()\n\n const { getDocumentSlots, getFormState } = useServerFunctions()\n const { getUploadHandler } = useUploadHandlers()\n\n const [documentSlots, setDocumentSlots] = React.useState<DocumentSlots>({})\n const [hasSubmitted, setHasSubmitted] = React.useState(false)\n const [docPermissions, setDocPermissions] = React.useState<SanitizedDocumentPermissions>()\n const [hasSavePermission, setHasSavePermission] = React.useState(false)\n const [hasPublishPermission, setHasPublishPermission] = React.useState(false)\n const [hasInitializedState, setHasInitializedState] = React.useState(false)\n const [hasInitializedDocPermissions, setHasInitializedDocPermissions] = React.useState(false)\n const [isInitializing, setIsInitializing] = React.useState(false)\n const [state, dispatch] = React.useReducer(formsManagementReducer, initialState)\n const { activeIndex, forms, totalErrorCount } = state\n\n const formsRef = React.useRef(forms)\n formsRef.current = forms\n\n const { toggleLoadingOverlay } = useLoadingOverlay()\n const { closeModal } = useModal()\n const { collectionSlug, drawerSlug, initialFiles, onSuccess, setInitialFiles } = useBulkUpload()\n\n const [isUploading, setIsUploading] = React.useState(false)\n const [loadingText, setLoadingText] = React.useState('')\n\n const hasInitializedWithFiles = React.useRef(false)\n const initialStateRef = React.useRef<FormState>(null)\n const getFormDataRef = React.useRef<() => Data>(() => ({}))\n\n const actionURL = `${serverURL}${api}/${collectionSlug}`\n\n const initializeSharedDocPermissions = React.useCallback(async () => {\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 })\n\n const json: SanitizedDocumentPermissions = 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)\n setHasInitializedDocPermissions(true)\n }, [api, code, collectionSlug, i18n.language, serverURL])\n\n const initializeSharedFormState = React.useCallback(\n async (abortController?: AbortController) => {\n if (abortController?.signal) {\n abortController.abort('aborting previous fetch for initial form state without files')\n }\n\n // FETCH AND SET THE DOCUMENT SLOTS HERE!\n const documentSlots = await getDocumentSlots({ collectionSlug })\n setDocumentSlots(documentSlots)\n\n try {\n const { state: formStateWithoutFiles } = await getFormState({\n collectionSlug,\n docPermissions,\n docPreferences: { fields: {} },\n locale: code,\n operation: 'create',\n renderAllFields: true,\n schemaPath: collectionSlug,\n skipValidation: true,\n })\n initialStateRef.current = formStateWithoutFiles\n setHasInitializedState(true)\n } catch (_err) {\n // swallow error\n }\n },\n [getDocumentSlots, collectionSlug, getFormState, docPermissions, code],\n )\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 formID: form.formID,\n formState: currentFormsData,\n uploadEdits: form.uploadEdits,\n }\n }\n return form\n }),\n },\n })\n },\n [forms, activeIndex],\n )\n\n const addFiles = React.useCallback(\n async (files: FileList) => {\n if (forms.length) {\n // save the state of the current form before adding new files\n dispatch({\n type: 'UPDATE_FORM',\n errorCount: forms[activeIndex].errorCount,\n formState: getFormDataRef.current(),\n index: activeIndex,\n })\n }\n\n toggleLoadingOverlay({ isLoading: true, key: 'addingDocs' })\n if (!hasInitializedState) {\n await initializeSharedFormState()\n }\n dispatch({ type: 'ADD_FORMS', files, initialState: initialStateRef.current })\n toggleLoadingOverlay({ isLoading: false, key: 'addingDocs' })\n },\n [initializeSharedFormState, hasInitializedState, toggleLoadingOverlay, activeIndex, forms],\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 formID: currentForms[activeIndex].formID,\n formState: currentFormsData,\n uploadEdits: currentForms[activeIndex].uploadEdits,\n }\n const newDocs = []\n\n setIsUploading(true)\n\n for (let i = 0; i < currentForms.length; i++) {\n try {\n const form = currentForms[i]\n\n setLoadingText(t('general:uploadingBulk', { current: i + 1, total: currentForms.length }))\n\n const actionURLWithParams = `${actionURL}${qs.stringify(\n {\n locale: code,\n uploadEdits: form?.uploadEdits || undefined,\n },\n {\n addQueryPrefix: true,\n },\n )}`\n\n const req = await fetch(actionURLWithParams, {\n body: await createFormData(\n form.formState,\n overrides,\n collectionSlug,\n getUploadHandler({ collectionSlug }),\n ),\n credentials: 'include',\n method: 'POST',\n })\n\n const json = await req.json()\n\n if (req.status === 201 && json?.doc) {\n newDocs.push(json.doc)\n }\n\n // should expose some sort of helper for this\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?.path) {\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 formID: currentForms[i].formID,\n formState: fieldReducer(currentForms[i].formState, {\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n }),\n }\n\n if (req.status === 413 || req.status === 400) {\n // file too large\n currentForms[i] = {\n ...currentForms[i],\n errorCount: currentForms[i].errorCount + 1,\n }\n\n toast.error(nonFieldErrors[0]?.message)\n }\n } catch (_) {\n // swallow\n }\n }\n\n setHasSubmitted(true)\n setLoadingText('')\n setIsUploading(false)\n\n const remainingForms = []\n\n currentForms.forEach(({ errorCount }, i) => {\n if (errorCount) {\n remainingForms.push(currentForms[i])\n }\n })\n\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 (typeof onSuccess === 'function') {\n onSuccess(newDocs, errorCount)\n }\n }\n\n if (errorCount) {\n toast.error(`Failed to save ${errorCount} files`)\n } else {\n closeModal(drawerSlug)\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 if (remainingForms.length === 0) {\n setInitialFiles(undefined)\n }\n },\n [\n setInitialFiles,\n actionURL,\n collectionSlug,\n getUploadHandler,\n t,\n forms,\n activeIndex,\n closeModal,\n drawerSlug,\n onSuccess,\n code,\n ],\n )\n\n const bulkUpdateForm = React.useCallback(\n async (updatedFields: Record<string, unknown>, afterStateUpdate?: () => void) => {\n for (let i = 0; i < forms.length; i++) {\n Object.entries(updatedFields).forEach(([path, value]) => {\n if (forms[i].formState[path]) {\n forms[i].formState[path].value = value\n\n dispatch({\n type: 'UPDATE_FORM',\n errorCount: forms[i].errorCount,\n formState: forms[i].formState,\n index: i,\n })\n }\n })\n\n if (typeof afterStateUpdate === 'function') {\n afterStateUpdate()\n }\n\n if (hasSubmitted) {\n const { state } = await getFormState({\n collectionSlug,\n docPermissions,\n docPreferences: null,\n formState: forms[i].formState,\n operation: 'create',\n schemaPath: collectionSlug,\n })\n\n const newFormErrorCount = Object.values(state).reduce(\n (acc, value) => (value?.valid === false ? acc + 1 : acc),\n 0,\n )\n\n dispatch({\n type: 'UPDATE_FORM',\n errorCount: newFormErrorCount,\n formState: state,\n index: i,\n })\n }\n }\n },\n [collectionSlug, docPermissions, forms, getFormState, hasSubmitted],\n )\n\n const updateUploadEdits = React.useCallback<FormsManagerContext['updateUploadEdits']>(\n (uploadEdits) => {\n dispatch({\n type: 'UPDATE_FORM',\n errorCount: forms[activeIndex].errorCount,\n formState: forms[activeIndex].formState,\n index: activeIndex,\n uploadEdits,\n })\n },\n [activeIndex, forms],\n )\n\n const resetUploadEdits = React.useCallback<FormsManagerContext['resetUploadEdits']>(() => {\n dispatch({\n type: 'REPLACE',\n state: {\n forms: forms.map((form) => ({\n ...form,\n uploadEdits: {},\n })),\n },\n })\n }, [forms])\n\n React.useEffect(() => {\n if (!collectionSlug) {\n return\n }\n if (!hasInitializedState) {\n void initializeSharedFormState()\n }\n\n if (!hasInitializedDocPermissions) {\n void initializeSharedDocPermissions()\n }\n\n if (initialFiles) {\n if (!hasInitializedState || !hasInitializedDocPermissions) {\n setIsInitializing(true)\n } else {\n setIsInitializing(false)\n }\n }\n\n if (hasInitializedState && initialFiles && !hasInitializedWithFiles.current) {\n void addFiles(initialFiles)\n hasInitializedWithFiles.current = true\n }\n return\n }, [\n addFiles,\n initialFiles,\n initializeSharedFormState,\n initializeSharedDocPermissions,\n collectionSlug,\n hasInitializedState,\n hasInitializedDocPermissions,\n ])\n\n return (\n <Context\n value={{\n activeIndex: state.activeIndex,\n addFiles,\n bulkUpdateForm,\n collectionSlug,\n docPermissions,\n documentSlots,\n forms,\n getFormDataRef,\n hasPublishPermission,\n hasSavePermission,\n hasSubmitted,\n isInitializing,\n removeFile,\n resetUploadEdits,\n saveAllDocs,\n setActiveIndex,\n setFormTotalErrorCount,\n totalErrorCount,\n updateUploadEdits,\n }}\n >\n {isUploading && (\n <LoadingOverlay\n animationDuration=\"250ms\"\n loadingText={loadingText}\n overlayType=\"fullscreen\"\n show\n />\n )}\n {children}\n </Context>\n )\n}\n\nexport function useFormsManager() {\n return React.use(Context)\n}\n"],"mappings":"AAAA;;;AAUA,SAASA,QAAQ,QAAQ;AACzB,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,MAAW;AAClB,SAASC,KAAK,QAAQ;AAItB,SAASC,YAAY,QAAQ;AAC7B,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,iBAAA,IAAqBC,oBAAoB,QAAQ;AAC1D,SAASC,cAAc,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SAASC,sBAAsB,QAAQ;AAiCvC,MAAMC,OAAA,gBAAUf,KAAA,CAAMgB,aAAa,CAAsB;EACvDC,WAAA,EAAa;EACbC,QAAA,EAAUA,CAAA,KAAMC,OAAA,CAAQC,OAAO;EAC/BC,cAAA,EAAgBA,CAAA,KAAM;EACtBC,cAAA,EAAgB;EAChBC,cAAA,EAAgBC,SAAA;EAChBC,aAAA,EAAe,CAAC;EAChBC,KAAA,EAAO,EAAE;EACTC,cAAA,EAAgB;IAAEC,OAAA,EAASA,CAAA,MAAO,CAAC;EAAG;EACtCC,oBAAA,EAAsB;EACtBrB,iBAAA,EAAmB;EACnBsB,YAAA,EAAc;EACdC,cAAA,EAAgB;EAChBC,UAAA,EAAYA,CAAA,MAAO;EACnBC,WAAA,EAAaA,CAAA,KAAMd,OAAA,CAAQC,OAAO;EAClCc,cAAA,EAAgBA,CAAA,KAAM;EACtBC,sBAAA,EAAwBA,CAAA,MAAO;EAC/BC,eAAA,EAAiB;EACjBC,iBAAA,EAAmBA,CAAA,MAAO;AAC5B;AAEA,MAAMC,YAAA,GAAsB;EAC1BrB,WAAA,EAAa;EACbS,KAAA,EAAO,EAAE;EACTU,eAAA,EAAiB;AACnB;AAMA,OAAO,SAASG,qBAAqB;EAAEC;AAAQ,CAAqB;EAClE,MAAM;IAAEC;EAAM,CAAE,GAAGtC,SAAA;EACnB,MAAM;IACJuC,MAAA,EAAQ;MAAEC;IAAG,CAAE;IACfC;EAAS,CACV,GAAGH,MAAA;EACJ,MAAM;IAAEI;EAAI,CAAE,GAAGzC,SAAA;EACjB,MAAM;IAAE0C,IAAI;IAAEC;EAAC,CAAE,GAAGzC,cAAA;EAEpB,MAAM;IAAE0C,gBAAgB;IAAEC;EAAY,CAAE,GAAG5C,kBAAA;EAC3C,MAAM;IAAE6C;EAAgB,CAAE,GAAG3C,iBAAA;EAE7B,MAAM,CAACkB,aAAA,EAAe0B,gBAAA,CAAiB,GAAGnD,KAAA,CAAMoD,QAAQ,CAAgB,CAAC;EACzE,MAAM,CAACtB,YAAA,EAAcuB,eAAA,CAAgB,GAAGrD,KAAA,CAAMoD,QAAQ,CAAC;EACvD,MAAM,CAAC7B,cAAA,EAAgB+B,iBAAA,CAAkB,GAAGtD,KAAA,CAAMoD,QAAQ;EAC1D,MAAM,CAAC5C,iBAAA,EAAmB+C,oBAAA,CAAqB,GAAGvD,KAAA,CAAMoD,QAAQ,CAAC;EACjE,MAAM,CAACvB,oBAAA,EAAsB2B,uBAAA,CAAwB,GAAGxD,KAAA,CAAMoD,QAAQ,CAAC;EACvE,MAAM,CAACK,mBAAA,EAAqBC,sBAAA,CAAuB,GAAG1D,KAAA,CAAMoD,QAAQ,CAAC;EACrE,MAAM,CAACO,4BAAA,EAA8BC,+BAAA,CAAgC,GAAG5D,KAAA,CAAMoD,QAAQ,CAAC;EACvF,MAAM,CAACrB,cAAA,EAAgB8B,iBAAA,CAAkB,GAAG7D,KAAA,CAAMoD,QAAQ,CAAC;EAC3D,MAAM,CAACU,KAAA,EAAOC,QAAA,CAAS,GAAG/D,KAAA,CAAMgE,UAAU,CAAClD,sBAAA,EAAwBwB,YAAA;EACnE,MAAM;IAAErB,WAAW;IAAES,KAAK;IAAEU;EAAe,CAAE,GAAG0B,KAAA;EAEhD,MAAMG,QAAA,GAAWjE,KAAA,CAAMkE,MAAM,CAACxC,KAAA;EAC9BuC,QAAA,CAASrC,OAAO,GAAGF,KAAA;EAEnB,MAAM;IAAEyC;EAAoB,CAAE,GAAGxD,iBAAA;EACjC,MAAM;IAAEyD;EAAU,CAAE,GAAGtE,QAAA;EACvB,MAAM;IAAEwB,cAAc;IAAE+C,UAAU;IAAEC,YAAY;IAAEC,SAAS;IAAEC;EAAe,CAAE,GAAG5D,aAAA;EAEjF,MAAM,CAAC6D,WAAA,EAAaC,cAAA,CAAe,GAAG1E,KAAA,CAAMoD,QAAQ,CAAC;EACrD,MAAM,CAACuB,WAAA,EAAaC,cAAA,CAAe,GAAG5E,KAAA,CAAMoD,QAAQ,CAAC;EAErD,MAAMyB,uBAAA,GAA0B7E,KAAA,CAAMkE,MAAM,CAAC;EAC7C,MAAMY,eAAA,GAAkB9E,KAAA,CAAMkE,MAAM,CAAY;EAChD,MAAMvC,cAAA,GAAiB3B,KAAA,CAAMkE,MAAM,CAAa,OAAO,CAAC;EAExD,MAAMa,SAAA,GAAY,GAAGnC,SAAA,GAAYD,GAAA,IAAOrB,cAAA,EAAgB;EAExD,MAAM0D,8BAAA,GAAiChF,KAAA,CAAMiF,WAAW,CAAC;IACvD,MAAMC,MAAA,GAAS;MACbC,MAAA,EAAQtC,IAAA,IAAQrB;IAClB;IAEA,MAAM4D,YAAA,GAAe,IAAI9D,cAAA,SAAuB;IAChD,MAAM+D,GAAA,GAAM,MAAMC,KAAA,CAAM,GAAG1C,SAAA,GAAYD,GAAA,GAAMyC,YAAA,IAAgBrF,EAAA,CAAGwF,SAAS,CAACL,MAAA,GAAS,EAAE;MACnFM,WAAA,EAAa;MACbC,OAAA,EAAS;QACP,mBAAmB3C,IAAA,CAAK4C,QAAQ;QAChC,gBAAgB;MAClB;MACAC,MAAA,EAAQ;IACV;IAEA,MAAMC,IAAA,GAAqC,MAAMP,GAAA,CAAIO,IAAI;IACzD,MAAMC,mBAAA,GAAsB,MAAMP,KAAA,CAChC,GAAG1C,SAAA,GAAYD,GAAA,GAAMyC,YAAA,IAAgBrF,EAAA,CAAGwF,SAAS,CAACL,MAAA,GAAS,EAC3D;MACEY,IAAA,EAAMC,IAAA,CAAKR,SAAS,CAAC;QACnBS,OAAA,EAAS;MACX;MACAR,WAAA,EAAa;MACbC,OAAA,EAAS;QACP,mBAAmB3C,IAAA,CAAK4C,QAAQ;QAChC,gBAAgB;MAClB;MACAC,MAAA,EAAQ;IACV,GACAM,IAAI,CAAEZ,KAAA,IAAQA,KAAA,CAAIO,IAAI;IAExBtC,iBAAA,CAAkBsC,IAAA;IAElBrC,oBAAA,CACE9C,oBAAA,CAAqB;MACnBa,cAAA;MACAC,cAAA,EAAgBqE,IAAA;MAChBM,SAAA,EAAW;IACb;IAGF1C,uBAAA,CAAwBqC,mBAAA,EAAqBM,MAAA;IAC7CvC,+BAAA,CAAgC;EAClC,GAAG,CAACjB,GAAA,EAAKE,IAAA,EAAMvB,cAAA,EAAgBwB,IAAA,CAAK4C,QAAQ,EAAE9C,SAAA,CAAU;EAExD,MAAMwD,yBAAA,GAA4BpG,KAAA,CAAMiF,WAAW,CACjD,MAAOoB,eAAA;IACL,IAAIA,eAAA,EAAiBC,MAAA,EAAQ;MAC3BD,eAAA,CAAgBE,KAAK,CAAC;IACxB;IAEA;IACA,MAAM9E,eAAA,GAAgB,MAAMuB,gBAAA,CAAiB;MAAE1B;IAAe;IAC9D6B,gBAAA,CAAiB1B,eAAA;IAEjB,IAAI;MACF,MAAM;QAAEqC,KAAA,EAAO0C;MAAqB,CAAE,GAAG,MAAMvD,YAAA,CAAa;QAC1D3B,cAAA;QACAC,cAAA;QACAkF,cAAA,EAAgB;UAAEC,MAAA,EAAQ,CAAC;QAAE;QAC7BvB,MAAA,EAAQtC,IAAA;QACR8D,SAAA,EAAW;QACXC,eAAA,EAAiB;QACjBC,UAAA,EAAYvF,cAAA;QACZwF,cAAA,EAAgB;MAClB;MACAhC,eAAA,CAAgBlD,OAAO,GAAG4E,qBAAA;MAC1B9C,sBAAA,CAAuB;IACzB,EAAE,OAAOqD,IAAA,EAAM;MACb;IAAA;EAEJ,GACA,CAAC/D,gBAAA,EAAkB1B,cAAA,EAAgB2B,YAAA,EAAc1B,cAAA,EAAgBsB,IAAA,CAAK;EAGxE,MAAMX,cAAA,GAAwDlC,KAAA,CAAMiF,WAAW,CAC5E+B,KAAA;IACC,MAAMC,gBAAA,GAAmBtF,cAAA,CAAeC,OAAO;IAC/CmC,QAAA,CAAS;MACPmD,IAAA,EAAM;MACNpD,KAAA,EAAO;QACL7C,WAAA,EAAa+F,KAAA;QACbtF,KAAA,EAAOA,KAAA,CAAMyF,GAAG,CAAC,CAACC,IAAA,EAAMC,CAAA;UACtB,IAAIA,CAAA,KAAMpG,WAAA,EAAa;YACrB,OAAO;cACLqG,UAAA,EAAYF,IAAA,CAAKE,UAAU;cAC3BC,MAAA,EAAQH,IAAA,CAAKG,MAAM;cACnBC,SAAA,EAAWP,gBAAA;cACXQ,WAAA,EAAaL,IAAA,CAAKK;YACpB;UACF;UACA,OAAOL,IAAA;QACT;MACF;IACF;EACF,GACA,CAAC1F,KAAA,EAAOT,WAAA,CAAY;EAGtB,MAAMC,QAAA,GAAWlB,KAAA,CAAMiF,WAAW,CAChC,MAAOyC,KAAA;IACL,IAAIhG,KAAA,CAAMiG,MAAM,EAAE;MAChB;MACA5D,QAAA,CAAS;QACPmD,IAAA,EAAM;QACNI,UAAA,EAAY5F,KAAK,CAACT,WAAA,CAAY,CAACqG,UAAU;QACzCE,SAAA,EAAW7F,cAAA,CAAeC,OAAO;QACjCoF,KAAA,EAAO/F;MACT;IACF;IAEAkD,oBAAA,CAAqB;MAAEyD,SAAA,EAAW;MAAMC,GAAA,EAAK;IAAa;IAC1D,IAAI,CAACpE,mBAAA,EAAqB;MACxB,MAAM2C,yBAAA;IACR;IACArC,QAAA,CAAS;MAAEmD,IAAA,EAAM;MAAaQ,KAAA;MAAOpF,YAAA,EAAcwC,eAAA,CAAgBlD;IAAQ;IAC3EuC,oBAAA,CAAqB;MAAEyD,SAAA,EAAW;MAAOC,GAAA,EAAK;IAAa;EAC7D,GACA,CAACzB,yBAAA,EAA2B3C,mBAAA,EAAqBU,oBAAA,EAAsBlD,WAAA,EAAaS,KAAA,CAAM;EAG5F,MAAMM,UAAA,GAAgDhC,KAAA,CAAMiF,WAAW,CAAE+B,OAAA;IACvEjD,QAAA,CAAS;MAAEmD,IAAA,EAAM;MAAeF,KAAA,EAAAA;IAAM;EACxC,GAAG,EAAE;EAEL,MAAM7E,sBAAA,GAAwEnC,KAAA,CAAMiF,WAAW,CAC7F,CAAC;IAAEqC,UAAU;IAAEN,KAAK,EAALA;EAAK,CAAE;IACpBjD,QAAA,CAAS;MACPmD,IAAA,EAAM;MACNY,KAAA,EAAOR,UAAA;MACPN,KAAA,EAAAA;IACF;EACF,GACA,EAAE;EAGJ,MAAM/E,WAAA,GAAkDjC,KAAA,CAAMiF,WAAW,CACvE,OAAO;IAAE8C;EAAS,CAAE,GAAG,CAAC,CAAC;IACvB,MAAMd,kBAAA,GAAmBtF,cAAA,CAAeC,OAAO;IAC/C,MAAMoG,YAAA,GAAe,C,GAAItG,KAAA,CAAM;IAC/BsG,YAAY,CAAC/G,WAAA,CAAY,GAAG;MAC1BqG,UAAA,EAAYU,YAAY,CAAC/G,WAAA,CAAY,CAACqG,UAAU;MAChDC,MAAA,EAAQS,YAAY,CAAC/G,WAAA,CAAY,CAACsG,MAAM;MACxCC,SAAA,EAAWP,kBAAA;MACXQ,WAAA,EAAaO,YAAY,CAAC/G,WAAA,CAAY,CAACwG;IACzC;IACA,MAAMQ,OAAA,GAAU,EAAE;IAElBvD,cAAA,CAAe;IAEf,KAAK,IAAI2C,GAAA,GAAI,GAAGA,GAAA,GAAIW,YAAA,CAAaL,MAAM,EAAEN,GAAA,IAAK;MAC5C,IAAI;QACF,MAAMD,MAAA,GAAOY,YAAY,CAACX,GAAA,CAAE;QAE5BzC,cAAA,CAAe7B,CAAA,CAAE,yBAAyB;UAAEnB,OAAA,EAASyF,GAAA,GAAI;UAAGa,KAAA,EAAOF,YAAA,CAAaL;QAAO;QAEvF,MAAMQ,mBAAA,GAAsB,GAAGpD,SAAA,GAAYhF,EAAA,CAAGwF,SAAS,CACrD;UACEJ,MAAA,EAAQtC,IAAA;UACR4E,WAAA,EAAaL,MAAA,EAAMK,WAAA,IAAejG;QACpC,GACA;UACE4G,cAAA,EAAgB;QAClB,IACC;QAEH,MAAMC,GAAA,GAAM,MAAM/C,KAAA,CAAM6C,mBAAA,EAAqB;UAC3CrC,IAAA,EAAM,MAAMjF,cAAA,CACVuG,MAAA,CAAKI,SAAS,EACdO,SAAA,EACAzG,cAAA,EACA4B,gBAAA,CAAiB;YAAE5B;UAAe;UAEpCkE,WAAA,EAAa;UACbG,MAAA,EAAQ;QACV;QAEA,MAAMC,MAAA,GAAO,MAAMyC,GAAA,CAAIzC,IAAI;QAE3B,IAAIyC,GAAA,CAAIC,MAAM,KAAK,OAAO1C,MAAA,EAAM2C,GAAA,EAAK;UACnCN,OAAA,CAAQO,IAAI,CAAC5C,MAAA,CAAK2C,GAAG;QACvB;QAEA;QACA,MAAM,CAACE,WAAA,EAAaC,cAAA,CAAe,GAAG,CAAC9C,MAAA,EAAM+C,MAAA,IAAU,EAAE,EAAEC,MAAM,CAC/D,CAAC,CAACC,SAAA,EAAWC,YAAA,CAAa,EAAEC,GAAA;UAC1B,MAAMC,YAAA,GAAsB,EAAE;UAC9B,MAAMC,eAAA,GAAyB,EAAE;UAEjC,IAAIF,GAAA,EAAKG,OAAA,EAAS;YAChBD,eAAA,CAAgBT,IAAI,CAACO,GAAA;UACvB;UAEA,IAAII,KAAA,CAAMC,OAAO,CAACL,GAAA,EAAKM,IAAA,EAAMV,MAAA,GAAS;YACpCI,GAAA,CAAIM,IAAI,EAAEV,MAAA,CAAOW,OAAA,CAASC,SAAA;cACxB,IAAIA,SAAA,EAAWC,IAAA,EAAM;gBACnBR,YAAA,CAAaR,IAAI,CAACe,SAAA;cACpB,OAAO;gBACLN,eAAA,CAAgBT,IAAI,CAACe,SAAA;cACvB;YACF;UACF;UAEA,OAAO,CACL,C,GAAIV,SAAA,E,GAAcG,YAAA,CAAa,EAC/B,C,GAAIF,YAAA,E,GAAiBG,eAAA,CAAgB,CACtC;QACH,GACA,CAAC,EAAE,EAAE,EAAE,CAAC;QAGVjB,YAAY,CAACX,GAAA,CAAE,GAAG;UAChBC,UAAA,EAAYmB,WAAA,CAAYd,MAAM;UAC9BJ,MAAA,EAAQS,YAAY,CAACX,GAAA,CAAE,CAACE,MAAM;UAC9BC,SAAA,EAAWtH,YAAA,CAAa8H,YAAY,CAACX,GAAA,CAAE,CAACG,SAAS,EAAE;YACjDN,IAAA,EAAM;YACNyB,MAAA,EAAQF;UACV;QACF;QAEA,IAAIJ,GAAA,CAAIC,MAAM,KAAK,OAAOD,GAAA,CAAIC,MAAM,KAAK,KAAK;UAC5C;UACAN,YAAY,CAACX,GAAA,CAAE,GAAG;YAChB,GAAGW,YAAY,CAACX,GAAA,CAAE;YAClBC,UAAA,EAAYU,YAAY,CAACX,GAAA,CAAE,CAACC,UAAU,GAAG;UAC3C;UAEArH,KAAA,CAAMwJ,KAAK,CAACf,cAAc,CAAC,EAAE,EAAEQ,OAAA;QACjC;MACF,EAAE,OAAOQ,CAAA,EAAG;QACV;MAAA;IAEJ;IAEArG,eAAA,CAAgB;IAChBuB,cAAA,CAAe;IACfF,cAAA,CAAe;IAEf,MAAMiF,cAAA,GAAiB,EAAE;IAEzB3B,YAAA,CAAasB,OAAO,CAAC,CAAC;MAAEhC,UAAU,EAAVA;IAAU,CAAE,EAAED,GAAA;MACpC,IAAIC,YAAA,EAAY;QACdqC,cAAA,CAAenB,IAAI,CAACR,YAAY,CAACX,GAAA,CAAE;MACrC;IACF;IAEA,MAAMuC,YAAA,GAAeC,IAAA,CAAKC,GAAG,CAAC,GAAG9B,YAAA,CAAaL,MAAM,GAAGgC,cAAA,CAAehC,MAAM;IAC5E,MAAML,YAAA,GAAaU,YAAA,CAAaL,MAAM,GAAGiC,YAAA;IAEzC,IAAIA,YAAA,EAAc;MAChB3J,KAAA,CAAM8J,OAAO,CAAC,sBAAsBH,YAAA,QAAoB;MAExD,IAAI,OAAOrF,SAAA,KAAc,YAAY;QACnCA,SAAA,CAAU0D,OAAA,EAASX,YAAA;MACrB;IACF;IAEA,IAAIA,YAAA,EAAY;MACdrH,KAAA,CAAMwJ,KAAK,CAAC,kBAAkBnC,YAAA,QAAkB;IAClD,OAAO;MACLlD,UAAA,CAAWC,UAAA;IACb;IAEAN,QAAA,CAAS;MACPmD,IAAA,EAAM;MACNpD,KAAA,EAAO;QACL7C,WAAA,EAAa;QACbS,KAAA,EAAOiI,cAAA;QACPvH,eAAA,EAAiBuH,cAAA,CAAef,MAAM,CAAC,CAACoB,GAAA,EAAK;UAAE1C,UAAU,EAAVA;QAAU,CAAE,KAAK0C,GAAA,GAAM1C,YAAA,EAAY;MACpF;IACF;IAEA,IAAIqC,cAAA,CAAehC,MAAM,KAAK,GAAG;MAC/BnD,eAAA,CAAgBhD,SAAA;IAClB;EACF,GACA,CACEgD,eAAA,EACAO,SAAA,EACAzD,cAAA,EACA4B,gBAAA,EACAH,CAAA,EACArB,KAAA,EACAT,WAAA,EACAmD,UAAA,EACAC,UAAA,EACAE,SAAA,EACA1B,IAAA,CACD;EAGH,MAAMxB,cAAA,GAAiBrB,KAAA,CAAMiF,WAAW,CACtC,OAAOgF,aAAA,EAAwCC,gBAAA;IAC7C,KAAK,IAAI7C,GAAA,GAAI,GAAGA,GAAA,GAAI3F,KAAA,CAAMiG,MAAM,EAAEN,GAAA,IAAK;MACrC8C,MAAA,CAAOC,OAAO,CAACH,aAAA,EAAeX,OAAO,CAAC,CAAC,CAACE,IAAA,EAAMa,KAAA,CAAM;QAClD,IAAI3I,KAAK,CAAC2F,GAAA,CAAE,CAACG,SAAS,CAACgC,IAAA,CAAK,EAAE;UAC5B9H,KAAK,CAAC2F,GAAA,CAAE,CAACG,SAAS,CAACgC,IAAA,CAAK,CAACa,KAAK,GAAGA,KAAA;UAEjCtG,QAAA,CAAS;YACPmD,IAAA,EAAM;YACNI,UAAA,EAAY5F,KAAK,CAAC2F,GAAA,CAAE,CAACC,UAAU;YAC/BE,SAAA,EAAW9F,KAAK,CAAC2F,GAAA,CAAE,CAACG,SAAS;YAC7BR,KAAA,EAAOK;UACT;QACF;MACF;MAEA,IAAI,OAAO6C,gBAAA,KAAqB,YAAY;QAC1CA,gBAAA;MACF;MAEA,IAAIpI,YAAA,EAAc;QAChB,MAAM;UAAEgC,KAAK,EAALA;QAAK,CAAE,GAAG,MAAMb,YAAA,CAAa;UACnC3B,cAAA;UACAC,cAAA;UACAkF,cAAA,EAAgB;UAChBe,SAAA,EAAW9F,KAAK,CAAC2F,GAAA,CAAE,CAACG,SAAS;UAC7Bb,SAAA,EAAW;UACXE,UAAA,EAAYvF;QACd;QAEA,MAAMgJ,iBAAA,GAAoBH,MAAA,CAAOI,MAAM,CAACzG,OAAA,EAAO8E,MAAM,CACnD,CAACoB,KAAA,EAAKK,OAAA,KAAWA,OAAA,EAAOG,KAAA,KAAU,QAAQR,KAAA,GAAM,IAAIA,KAAA,EACpD;QAGFjG,QAAA,CAAS;UACPmD,IAAA,EAAM;UACNI,UAAA,EAAYgD,iBAAA;UACZ9C,SAAA,EAAW1D,OAAA;UACXkD,KAAA,EAAOK;QACT;MACF;IACF;EACF,GACA,CAAC/F,cAAA,EAAgBC,cAAA,EAAgBG,KAAA,EAAOuB,YAAA,EAAcnB,YAAA,CAAa;EAGrE,MAAMO,iBAAA,GAAoBrC,KAAA,CAAMiF,WAAW,CACxCwC,WAAA;IACC1D,QAAA,CAAS;MACPmD,IAAA,EAAM;MACNI,UAAA,EAAY5F,KAAK,CAACT,WAAA,CAAY,CAACqG,UAAU;MACzCE,SAAA,EAAW9F,KAAK,CAACT,WAAA,CAAY,CAACuG,SAAS;MACvCR,KAAA,EAAO/F,WAAA;MACPwG;IACF;EACF,GACA,CAACxG,WAAA,EAAaS,KAAA,CAAM;EAGtB,MAAM+I,gBAAA,GAAmBzK,KAAA,CAAMiF,WAAW,CAA0C;IAClFlB,QAAA,CAAS;MACPmD,IAAA,EAAM;MACNpD,KAAA,EAAO;QACLpC,KAAA,EAAOA,KAAA,CAAMyF,GAAG,CAAEC,MAAA,KAAU;UAC1B,GAAGA,MAAI;UACPK,WAAA,EAAa,CAAC;QAChB;MACF;IACF;EACF,GAAG,CAAC/F,KAAA,CAAM;EAEV1B,KAAA,CAAM0K,SAAS,CAAC;IACd,IAAI,CAACpJ,cAAA,EAAgB;MACnB;IACF;IACA,IAAI,CAACmC,mBAAA,EAAqB;MACxB,KAAK2C,yBAAA;IACP;IAEA,IAAI,CAACzC,4BAAA,EAA8B;MACjC,KAAKqB,8BAAA;IACP;IAEA,IAAIV,YAAA,EAAc;MAChB,IAAI,CAACb,mBAAA,IAAuB,CAACE,4BAAA,EAA8B;QACzDE,iBAAA,CAAkB;MACpB,OAAO;QACLA,iBAAA,CAAkB;MACpB;IACF;IAEA,IAAIJ,mBAAA,IAAuBa,YAAA,IAAgB,CAACO,uBAAA,CAAwBjD,OAAO,EAAE;MAC3E,KAAKV,QAAA,CAASoD,YAAA;MACdO,uBAAA,CAAwBjD,OAAO,GAAG;IACpC;IACA;EACF,GAAG,CACDV,QAAA,EACAoD,YAAA,EACA8B,yBAAA,EACApB,8BAAA,EACA1D,cAAA,EACAmC,mBAAA,EACAE,4BAAA,CACD;EAED,oBACEgH,KAAA,CAAC5J,OAAA;IACCsJ,KAAA,EAAO;MACLpJ,WAAA,EAAa6C,KAAA,CAAM7C,WAAW;MAC9BC,QAAA;MACAG,cAAA;MACAC,cAAA;MACAC,cAAA;MACAE,aAAA;MACAC,KAAA;MACAC,cAAA;MACAE,oBAAA;MACArB,iBAAA;MACAsB,YAAA;MACAC,cAAA;MACAC,UAAA;MACAyI,gBAAA;MACAxI,WAAA;MACAC,cAAA;MACAC,sBAAA;MACAC,eAAA;MACAC;IACF;eAECoC,WAAA,iBACCmG,IAAA,CAAClK,cAAA;MACCmK,iBAAA,EAAkB;MAClBlG,WAAA,EAAaA,WAAA;MACbmG,WAAA,EAAY;MACZC,IAAI;QAGPvI,QAAA;;AAGP;AAEA,OAAO,SAASwI,gBAAA;EACd,OAAOhL,KAAA,CAAMiL,GAAG,CAAClK,OAAA;AACnB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useModal","qs","React","toast","fieldReducer","useEffectEvent","useConfig","useLocale","useServerFunctions","useTranslation","useUploadHandlers","hasSavePermission","getHasSavePermission","LoadingOverlay","useLoadingOverlay","useBulkUpload","createFormData","formsManagementReducer","Context","createContext","activeIndex","addFiles","Promise","resolve","bulkUpdateForm","collectionSlug","docPermissions","undefined","documentSlots","forms","getFormDataRef","current","hasPublishPermission","hasSubmitted","isInitializing","removeFile","saveAllDocs","setActiveIndex","setFormTotalErrorCount","totalErrorCount","updateUploadEdits","initialState","FormsManagerProvider","children","config","routes","api","serverURL","code","i18n","t","getDocumentSlots","getFormState","getUploadHandler","setDocumentSlots","useState","setHasSubmitted","setDocPermissions","setHasSavePermission","setHasPublishPermission","hasInitializedState","setHasInitializedState","hasInitializedDocPermissions","setHasInitializedDocPermissions","setIsInitializing","state","dispatch","useReducer","formsRef","useRef","toggleLoadingOverlay","closeModal","drawerSlug","initialFiles","initialForms","onSuccess","setInitialFiles","setInitialForms","setSuccessfullyUploaded","isUploading","setIsUploading","loadingText","setLoadingText","hasInitializedWithFiles","initialStateRef","actionURL","initializeSharedDocPermissions","useCallback","params","locale","docAccessURL","res","fetch","stringify","credentials","headers","language","method","json","publishedAccessJSON","body","JSON","_status","then","isEditing","update","initializeSharedFormState","abortController","signal","abort","formStateWithoutFiles","docPreferences","fields","operation","renderAllFields","schemaPath","skipValidation","_err","index","currentFormsData","type","map","form","i","errorCount","formID","formState","uploadEdits","files","length","isLoading","key","Array","from","file","addFilesEffectEvent","addInitialForms","count","overrides","currentForms","newDocs","total","actionURLWithParams","addQueryPrefix","req","status","doc","push","fieldErrors","nonFieldErrors","errors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","isArray","data","forEach","dataError","path","error","_","remainingForms","successCount","Math","max","success","acc","updatedFields","afterStateUpdate","Object","entries","value","newFormErrorCount","values","valid","resetUploadEdits","useEffect","_jsxs","_jsx","animationDuration","overlayType","show","useFormsManager","use"],"sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"sourcesContent":["'use client'\n\nimport type {\n CollectionSlug,\n Data,\n DocumentSlots,\n FormState,\n JsonObject,\n SanitizedDocumentPermissions,\n UploadEdits,\n} 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 { State } from './reducer.js'\n\nimport { fieldReducer } from '../../../forms/Form/fieldReducer.js'\nimport { useEffectEvent } from '../../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { useUploadHandlers } from '../../../providers/UploadHandlers/index.js'\nimport { hasSavePermission as getHasSavePermission } from '../../../utilities/hasSavePermission.js'\nimport { LoadingOverlay } from '../../Loading/index.js'\nimport { useLoadingOverlay } from '../../LoadingOverlay/index.js'\nimport { useBulkUpload } 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) => Promise<void>\n readonly bulkUpdateForm: (\n updatedFields: Record<string, unknown>,\n afterStateUpdate?: () => void,\n ) => Promise<void>\n readonly collectionSlug: string\n readonly docPermissions?: SanitizedDocumentPermissions\n readonly documentSlots: DocumentSlots\n readonly forms: State['forms']\n getFormDataRef: React.RefObject<() => Data>\n readonly hasPublishPermission: boolean\n readonly hasSavePermission: boolean\n readonly hasSubmitted: boolean\n readonly isInitializing: boolean\n readonly removeFile: (index: number) => void\n readonly resetUploadEdits?: () => 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 readonly updateUploadEdits: (args: UploadEdits) => void\n}\n\nconst Context = React.createContext<FormsManagerContext>({\n activeIndex: 0,\n addFiles: () => Promise.resolve(),\n bulkUpdateForm: () => null,\n collectionSlug: '',\n docPermissions: undefined,\n documentSlots: {},\n forms: [],\n getFormDataRef: { current: () => ({}) },\n hasPublishPermission: false,\n hasSavePermission: false,\n hasSubmitted: false,\n isInitializing: false,\n removeFile: () => {},\n saveAllDocs: () => Promise.resolve(),\n setActiveIndex: () => 0,\n setFormTotalErrorCount: () => {},\n totalErrorCount: 0,\n updateUploadEdits: () => {},\n})\n\nconst initialState: State = {\n activeIndex: 0,\n forms: [],\n totalErrorCount: 0,\n}\n\nexport type InitialForms = Array<{\n file: File\n formID?: string\n initialState?: FormState | null\n}>\n\ntype FormsManagerProps = {\n readonly children: React.ReactNode\n}\n\nexport function FormsManagerProvider({ children }: FormsManagerProps) {\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n const { code } = useLocale()\n const { i18n, t } = useTranslation()\n\n const { getDocumentSlots, getFormState } = useServerFunctions()\n const { getUploadHandler } = useUploadHandlers()\n\n const [documentSlots, setDocumentSlots] = React.useState<DocumentSlots>({})\n const [hasSubmitted, setHasSubmitted] = React.useState(false)\n const [docPermissions, setDocPermissions] = React.useState<SanitizedDocumentPermissions>()\n const [hasSavePermission, setHasSavePermission] = React.useState(false)\n const [hasPublishPermission, setHasPublishPermission] = React.useState(false)\n const [hasInitializedState, setHasInitializedState] = React.useState(false)\n const [hasInitializedDocPermissions, setHasInitializedDocPermissions] = React.useState(false)\n const [isInitializing, setIsInitializing] = React.useState(false)\n const [state, dispatch] = React.useReducer(formsManagementReducer, initialState)\n const { activeIndex, forms, totalErrorCount } = state\n\n const formsRef = React.useRef(forms)\n formsRef.current = forms\n\n const { toggleLoadingOverlay } = useLoadingOverlay()\n const { closeModal } = useModal()\n const {\n collectionSlug,\n drawerSlug,\n initialFiles,\n initialForms,\n onSuccess,\n setInitialFiles,\n setInitialForms,\n setSuccessfullyUploaded,\n } = useBulkUpload()\n\n const [isUploading, setIsUploading] = React.useState(false)\n const [loadingText, setLoadingText] = React.useState('')\n\n const hasInitializedWithFiles = React.useRef(false)\n const initialStateRef = React.useRef<FormState>(null)\n const getFormDataRef = React.useRef<() => Data>(() => ({}))\n\n const actionURL = `${serverURL}${api}/${collectionSlug}`\n\n const initializeSharedDocPermissions = React.useCallback(async () => {\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 })\n\n const json: SanitizedDocumentPermissions = 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)\n setHasInitializedDocPermissions(true)\n }, [api, code, collectionSlug, i18n.language, serverURL])\n\n const initializeSharedFormState = React.useCallback(\n async (abortController?: AbortController) => {\n if (abortController?.signal) {\n abortController.abort('aborting previous fetch for initial form state without files')\n }\n\n // FETCH AND SET THE DOCUMENT SLOTS HERE!\n const documentSlots = await getDocumentSlots({ collectionSlug })\n setDocumentSlots(documentSlots)\n\n try {\n const { state: formStateWithoutFiles } = await getFormState({\n collectionSlug,\n docPermissions,\n docPreferences: { fields: {} },\n locale: code,\n operation: 'create',\n renderAllFields: true,\n schemaPath: collectionSlug,\n skipValidation: true,\n })\n initialStateRef.current = formStateWithoutFiles\n setHasInitializedState(true)\n } catch (_err) {\n // swallow error\n }\n },\n [getDocumentSlots, collectionSlug, getFormState, docPermissions, code],\n )\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 formID: form.formID,\n formState: currentFormsData,\n uploadEdits: form.uploadEdits,\n }\n }\n return form\n }),\n },\n })\n },\n [forms, activeIndex],\n )\n\n const addFiles = React.useCallback(\n async (files: FileList) => {\n if (forms.length) {\n // save the state of the current form before adding new files\n dispatch({\n type: 'UPDATE_FORM',\n errorCount: forms[activeIndex].errorCount,\n formState: getFormDataRef.current(),\n index: activeIndex,\n })\n }\n\n toggleLoadingOverlay({ isLoading: true, key: 'addingDocs' })\n if (!hasInitializedState) {\n await initializeSharedFormState()\n }\n dispatch({\n type: 'ADD_FORMS',\n forms: Array.from(files).map((file) => ({\n file,\n initialState: initialStateRef.current,\n })),\n })\n toggleLoadingOverlay({ isLoading: false, key: 'addingDocs' })\n },\n [initializeSharedFormState, hasInitializedState, toggleLoadingOverlay, activeIndex, forms],\n )\n\n const addFilesEffectEvent = useEffectEvent(addFiles)\n\n const addInitialForms = useEffectEvent(async (initialForms: InitialForms) => {\n toggleLoadingOverlay({ isLoading: true, key: 'addingDocs' })\n\n if (!hasInitializedState) {\n await initializeSharedFormState()\n }\n\n dispatch({\n type: 'ADD_FORMS',\n forms: initialForms.map((form) => ({\n ...form,\n initialState: form?.initialState || initialStateRef.current,\n })),\n })\n\n toggleLoadingOverlay({ isLoading: false, key: 'addingDocs' })\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 formID: currentForms[activeIndex].formID,\n formState: currentFormsData,\n uploadEdits: currentForms[activeIndex].uploadEdits,\n }\n const newDocs: Array<{\n collectionSlug: CollectionSlug\n doc: JsonObject\n /**\n * ID of the form that created this document\n */\n formID: string\n }> = []\n\n setIsUploading(true)\n\n for (let i = 0; i < currentForms.length; i++) {\n try {\n const form = currentForms[i]\n\n setLoadingText(t('general:uploadingBulk', { current: i + 1, total: currentForms.length }))\n\n const actionURLWithParams = `${actionURL}${qs.stringify(\n {\n locale: code,\n uploadEdits: form?.uploadEdits || undefined,\n },\n {\n addQueryPrefix: true,\n },\n )}`\n\n const req = await fetch(actionURLWithParams, {\n body: await createFormData(\n form.formState,\n overrides,\n collectionSlug,\n getUploadHandler({ collectionSlug }),\n ),\n credentials: 'include',\n method: 'POST',\n })\n\n const json = await req.json()\n\n if (req.status === 201 && json?.doc) {\n newDocs.push({\n collectionSlug,\n doc: json.doc,\n formID: form.formID,\n })\n }\n\n // should expose some sort of helper for this\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?.path) {\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 formID: currentForms[i].formID,\n formState: fieldReducer(currentForms[i].formState, {\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n }),\n }\n\n if (req.status === 413 || req.status === 400) {\n // file too large\n currentForms[i] = {\n ...currentForms[i],\n errorCount: currentForms[i].errorCount + 1,\n }\n\n toast.error(nonFieldErrors[0]?.message)\n }\n } catch (_) {\n // swallow\n }\n }\n\n setHasSubmitted(true)\n setLoadingText('')\n setIsUploading(false)\n\n const remainingForms = []\n\n currentForms.forEach(({ errorCount }, i) => {\n if (errorCount) {\n remainingForms.push(currentForms[i])\n }\n })\n\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 setSuccessfullyUploaded(true)\n\n if (typeof onSuccess === 'function') {\n onSuccess(newDocs, errorCount)\n }\n }\n\n if (errorCount) {\n toast.error(`Failed to save ${errorCount} files`)\n } else {\n closeModal(drawerSlug)\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 if (remainingForms.length === 0) {\n setInitialFiles(undefined)\n setInitialForms(undefined)\n }\n },\n [\n forms,\n activeIndex,\n t,\n actionURL,\n code,\n collectionSlug,\n getUploadHandler,\n onSuccess,\n closeModal,\n setSuccessfullyUploaded,\n drawerSlug,\n setInitialFiles,\n setInitialForms,\n ],\n )\n\n const bulkUpdateForm = React.useCallback(\n async (updatedFields: Record<string, unknown>, afterStateUpdate?: () => void) => {\n for (let i = 0; i < forms.length; i++) {\n Object.entries(updatedFields).forEach(([path, value]) => {\n if (forms[i].formState[path]) {\n forms[i].formState[path].value = value\n\n dispatch({\n type: 'UPDATE_FORM',\n errorCount: forms[i].errorCount,\n formState: forms[i].formState,\n index: i,\n })\n }\n })\n\n if (typeof afterStateUpdate === 'function') {\n afterStateUpdate()\n }\n\n if (hasSubmitted) {\n const { state } = await getFormState({\n collectionSlug,\n docPermissions,\n docPreferences: null,\n formState: forms[i].formState,\n operation: 'create',\n schemaPath: collectionSlug,\n })\n\n const newFormErrorCount = Object.values(state).reduce(\n (acc, value) => (value?.valid === false ? acc + 1 : acc),\n 0,\n )\n\n dispatch({\n type: 'UPDATE_FORM',\n errorCount: newFormErrorCount,\n formState: state,\n index: i,\n })\n }\n }\n },\n [collectionSlug, docPermissions, forms, getFormState, hasSubmitted],\n )\n\n const updateUploadEdits = React.useCallback<FormsManagerContext['updateUploadEdits']>(\n (uploadEdits) => {\n dispatch({\n type: 'UPDATE_FORM',\n errorCount: forms[activeIndex].errorCount,\n formState: forms[activeIndex].formState,\n index: activeIndex,\n uploadEdits,\n })\n },\n [activeIndex, forms],\n )\n\n const resetUploadEdits = React.useCallback<FormsManagerContext['resetUploadEdits']>(() => {\n dispatch({\n type: 'REPLACE',\n state: {\n forms: forms.map((form) => ({\n ...form,\n uploadEdits: {},\n })),\n },\n })\n }, [forms])\n\n React.useEffect(() => {\n if (!collectionSlug) {\n return\n }\n if (!hasInitializedState) {\n void initializeSharedFormState()\n }\n\n if (!hasInitializedDocPermissions) {\n void initializeSharedDocPermissions()\n }\n\n if (initialFiles || initialForms) {\n if (!hasInitializedState || !hasInitializedDocPermissions) {\n setIsInitializing(true)\n } else {\n setIsInitializing(false)\n }\n }\n\n if (\n hasInitializedState &&\n (initialForms?.length || initialFiles?.length) &&\n !hasInitializedWithFiles.current\n ) {\n if (initialForms?.length) {\n void addInitialForms(initialForms)\n }\n if (initialFiles?.length) {\n void addFilesEffectEvent(initialFiles)\n }\n hasInitializedWithFiles.current = true\n }\n return\n }, [\n initialFiles,\n initializeSharedFormState,\n initializeSharedDocPermissions,\n collectionSlug,\n hasInitializedState,\n hasInitializedDocPermissions,\n initialForms,\n ])\n\n return (\n <Context\n value={{\n activeIndex: state.activeIndex,\n addFiles,\n bulkUpdateForm,\n collectionSlug,\n docPermissions,\n documentSlots,\n forms,\n getFormDataRef,\n hasPublishPermission,\n hasSavePermission,\n hasSubmitted,\n isInitializing,\n removeFile,\n resetUploadEdits,\n saveAllDocs,\n setActiveIndex,\n setFormTotalErrorCount,\n totalErrorCount,\n updateUploadEdits,\n }}\n >\n {isUploading && (\n <LoadingOverlay\n animationDuration=\"250ms\"\n loadingText={loadingText}\n overlayType=\"fullscreen\"\n show\n />\n )}\n {children}\n </Context>\n )\n}\n\nexport function useFormsManager() {\n return React.use(Context)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FormState, UploadEdits } from 'payload';
|
|
2
|
+
import type { InitialForms } from './index.js';
|
|
2
3
|
export type State = {
|
|
3
4
|
activeIndex: number;
|
|
4
5
|
forms: {
|
|
@@ -21,8 +22,7 @@ type Action = {
|
|
|
21
22
|
updatedFields?: Record<string, unknown>;
|
|
22
23
|
uploadEdits?: UploadEdits;
|
|
23
24
|
} | {
|
|
24
|
-
|
|
25
|
-
initialState: FormState | null;
|
|
25
|
+
forms: InitialForms;
|
|
26
26
|
type: 'ADD_FORMS';
|
|
27
27
|
} | {
|
|
28
28
|
index: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FormsManager/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAIrD,MAAM,MAAM,KAAK,GAAG;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,SAAS,CAAA;QACpB,WAAW,CAAC,EAAE,WAAW,CAAA;KAC1B,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,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,GACD;IACE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FormsManager/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAIrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,MAAM,KAAK,GAAG;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,SAAS,CAAA;QACpB,WAAW,CAAC,EAAE,WAAW,CAAA;KAC1B,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,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,GACD;IACE,KAAK,EAAE,YAAY,CAAA;IACnB,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,CA+F1E"}
|
|
@@ -4,16 +4,16 @@ export function formsManagementReducer(state, action) {
|
|
|
4
4
|
case 'ADD_FORMS':
|
|
5
5
|
{
|
|
6
6
|
const newForms = [];
|
|
7
|
-
for (let i = 0; i < action.
|
|
7
|
+
for (let i = 0; i < action.forms.length; i++) {
|
|
8
8
|
newForms[i] = {
|
|
9
9
|
errorCount: 0,
|
|
10
|
-
formID: crypto.randomUUID ? crypto.randomUUID() : uuidv4(),
|
|
10
|
+
formID: action.forms[i].formID ?? (crypto.randomUUID ? crypto.randomUUID() : uuidv4()),
|
|
11
11
|
formState: {
|
|
12
|
-
...(action.initialState || {}),
|
|
12
|
+
...(action.forms[i].initialState || {}),
|
|
13
13
|
file: {
|
|
14
|
-
initialValue: action.
|
|
14
|
+
initialValue: action.forms[i].file,
|
|
15
15
|
valid: true,
|
|
16
|
-
value: action.
|
|
16
|
+
value: action.forms[i].file
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
uploadEdits: {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.js","names":["v4","uuidv4","formsManagementReducer","state","action","type","newForms","i","
|
|
1
|
+
{"version":3,"file":"reducer.js","names":["v4","uuidv4","formsManagementReducer","state","action","type","newForms","i","forms","length","errorCount","formID","crypto","randomUUID","formState","initialState","file","initialValue","valid","value","uploadEdits","activeIndex","remainingFormStates","removedForm","splice","index","affectedByShift","nextIndex","boundedActiveIndex","Math","min","totalErrorCount","count","reduce","acc","form","updatedForms"],"sources":["../../../../src/elements/BulkUpload/FormsManager/reducer.ts"],"sourcesContent":["import type { FormState, UploadEdits } from 'payload'\n\nimport { v4 as uuidv4 } from 'uuid'\n\nimport type { InitialForms } from './index.js'\n\nexport type State = {\n activeIndex: number\n forms: {\n errorCount: number\n formID: string\n formState: FormState\n uploadEdits?: UploadEdits\n }[]\n totalErrorCount: number\n}\n\ntype Action =\n | {\n count: number\n index: number\n type: 'UPDATE_ERROR_COUNT'\n }\n | {\n errorCount: number\n formState: FormState\n index: number\n type: 'UPDATE_FORM'\n updatedFields?: Record<string, unknown>\n uploadEdits?: UploadEdits\n }\n | {\n forms: InitialForms\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 'ADD_FORMS': {\n const newForms: State['forms'] = []\n for (let i = 0; i < action.forms.length; i++) {\n newForms[i] = {\n errorCount: 0,\n formID: action.forms[i].formID ?? (crypto.randomUUID ? crypto.randomUUID() : uuidv4()),\n formState: {\n ...(action.forms[i].initialState || {}),\n file: {\n initialValue: action.forms[i].file,\n valid: true,\n value: action.forms[i].file,\n },\n },\n uploadEdits: {},\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 '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 '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 case 'UPDATE_FORM': {\n const updatedForms = [...state.forms]\n updatedForms[action.index].errorCount = action.errorCount\n\n // Merge the existing formState with the new formState\n updatedForms[action.index] = {\n ...updatedForms[action.index],\n formState: {\n ...updatedForms[action.index].formState,\n ...action.formState,\n },\n uploadEdits: {\n ...updatedForms[action.index].uploadEdits,\n ...action.uploadEdits,\n },\n }\n\n return {\n ...state,\n forms: updatedForms,\n totalErrorCount: state.forms.reduce((acc, form) => acc + form.errorCount, 0),\n }\n }\n default: {\n return state\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,21 +1,47 @@
|
|
|
1
|
-
import type { JsonObject } from 'payload';
|
|
1
|
+
import type { CollectionSlug, JsonObject } from 'payload';
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import { type InitialForms } from './FormsManager/index.js';
|
|
3
4
|
export type BulkUploadProps = {
|
|
4
5
|
readonly children: React.ReactNode;
|
|
5
6
|
};
|
|
6
7
|
export declare function BulkUploadDrawer(): React.JSX.Element;
|
|
7
|
-
type BulkUploadContext = {
|
|
8
|
-
collectionSlug:
|
|
8
|
+
export type BulkUploadContext = {
|
|
9
|
+
collectionSlug: CollectionSlug;
|
|
9
10
|
drawerSlug: string;
|
|
10
11
|
initialFiles: FileList;
|
|
12
|
+
/**
|
|
13
|
+
* Like initialFiles, but allows manually providing initial form state or the form ID for each file
|
|
14
|
+
*/
|
|
15
|
+
initialForms: InitialForms;
|
|
11
16
|
maxFiles: number;
|
|
12
17
|
onCancel: () => void;
|
|
13
|
-
onSuccess: (
|
|
18
|
+
onSuccess: (uploadedForms: Array<{
|
|
19
|
+
collectionSlug: CollectionSlug;
|
|
20
|
+
doc: JsonObject;
|
|
21
|
+
/**
|
|
22
|
+
* ID of the form that created this document
|
|
23
|
+
*/
|
|
24
|
+
formID: string;
|
|
25
|
+
}>, errorCount: number) => void;
|
|
26
|
+
/**
|
|
27
|
+
* An array of collection slugs that can be selected in the collection dropdown (if applicable)
|
|
28
|
+
* @default null - collection cannot be selected
|
|
29
|
+
*/
|
|
30
|
+
selectableCollections?: null | string[];
|
|
14
31
|
setCollectionSlug: (slug: string) => void;
|
|
15
32
|
setInitialFiles: (files: FileList) => void;
|
|
33
|
+
setInitialForms: (forms: ((forms: InitialForms | undefined) => InitialForms | undefined) | InitialForms) => void;
|
|
16
34
|
setMaxFiles: (maxFiles: number) => void;
|
|
17
35
|
setOnCancel: (onCancel: BulkUploadContext['onCancel']) => void;
|
|
18
36
|
setOnSuccess: (onSuccess: BulkUploadContext['onSuccess']) => void;
|
|
37
|
+
/**
|
|
38
|
+
* Set the collections that can be selected in the collection dropdown (if applicable)
|
|
39
|
+
*
|
|
40
|
+
* @default null - collection cannot be selected
|
|
41
|
+
*/
|
|
42
|
+
setSelectableCollections: (collections: null | string[]) => void;
|
|
43
|
+
setSuccessfullyUploaded: (successfullyUploaded: boolean) => void;
|
|
44
|
+
successfullyUploaded: boolean;
|
|
19
45
|
};
|
|
20
46
|
export declare function BulkUploadProvider({ children, drawerSlugPrefix, }: {
|
|
21
47
|
readonly children: React.ReactNode;
|
|
@@ -23,5 +49,4 @@ export declare function BulkUploadProvider({ children, drawerSlugPrefix, }: {
|
|
|
23
49
|
}): React.JSX.Element;
|
|
24
50
|
export declare const useBulkUpload: () => BulkUploadContext;
|
|
25
51
|
export declare function useBulkUploadDrawerSlug(): string;
|
|
26
|
-
export {};
|
|
27
52
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/BulkUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/BulkUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIzD,OAAO,KAAoB,MAAM,OAAO,CAAA;AAWxC,OAAO,EAAwB,KAAK,YAAY,EAAmB,MAAM,yBAAyB,CAAA;AAqDlG,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AAED,wBAAgB,gBAAgB,sBA+D/B;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,QAAQ,CAAA;IACtB;;OAEG;IACH,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,EAAE,CACT,aAAa,EAAE,KAAK,CAAC;QACnB,cAAc,EAAE,cAAc,CAAA;QAC9B,GAAG,EAAE,UAAU,CAAA;QACf;;WAEG;QACH,MAAM,EAAE,MAAM,CAAA;KACf,CAAC,EACF,UAAU,EAAE,MAAM,KACf,IAAI,CAAA;IACT;;;OAGG;IACH,qBAAqB,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;IACvC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,eAAe,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,eAAe,EAAE,CACf,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,KAAK,YAAY,GAAG,SAAS,CAAC,GAAG,YAAY,KAClF,IAAI,CAAA;IACT,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAC9D,YAAY,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IACjE;;;;OAIG;IACH,wBAAwB,EAAE,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK,IAAI,CAAA;IAChE,uBAAuB,EAAE,CAAC,oBAAoB,EAAE,OAAO,KAAK,IAAI,CAAA;IAChE,oBAAoB,EAAE,OAAO,CAAA;CAC9B,CAAA;AAqBD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC,qBAuDA;AAED,eAAO,MAAM,aAAa,yBAA2B,CAAA;AAErD,wBAAgB,uBAAuB,WAItC"}
|
|
@@ -4,8 +4,9 @@ import { c as _c } from "react/compiler-runtime";
|
|
|
4
4
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { useModal } from '@faceless-ui/modal';
|
|
6
6
|
import { validateMimeType } from 'payload/shared';
|
|
7
|
-
import React from 'react';
|
|
7
|
+
import React, { useEffect } from 'react';
|
|
8
8
|
import { toast } from 'sonner';
|
|
9
|
+
import { useEffectEvent } from '../../hooks/useEffectEvent.js';
|
|
9
10
|
import { useConfig } from '../../providers/Config/index.js';
|
|
10
11
|
import { EditDepthProvider } from '../../providers/EditDepth/index.js';
|
|
11
12
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
@@ -66,13 +67,84 @@ function DrawerContent() {
|
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
export function BulkUploadDrawer() {
|
|
69
|
-
const $ = _c(
|
|
70
|
+
const $ = _c(17);
|
|
70
71
|
const {
|
|
71
|
-
drawerSlug
|
|
72
|
+
drawerSlug,
|
|
73
|
+
onCancel,
|
|
74
|
+
setInitialFiles,
|
|
75
|
+
setInitialForms,
|
|
76
|
+
setOnCancel,
|
|
77
|
+
setOnSuccess,
|
|
78
|
+
setSelectableCollections,
|
|
79
|
+
setSuccessfullyUploaded,
|
|
80
|
+
successfullyUploaded
|
|
72
81
|
} = useBulkUpload();
|
|
82
|
+
const {
|
|
83
|
+
modalState
|
|
84
|
+
} = useModal();
|
|
85
|
+
const previousModalStateRef = React.useRef(modalState);
|
|
73
86
|
let t0;
|
|
74
|
-
if ($[0] !== drawerSlug) {
|
|
75
|
-
t0 =
|
|
87
|
+
if ($[0] !== drawerSlug || $[1] !== onCancel || $[2] !== setInitialFiles || $[3] !== setInitialForms || $[4] !== setOnCancel || $[5] !== setOnSuccess || $[6] !== setSelectableCollections || $[7] !== setSuccessfullyUploaded || $[8] !== successfullyUploaded) {
|
|
88
|
+
t0 = modalState_0 => {
|
|
89
|
+
const previousModalState = previousModalStateRef.current[drawerSlug];
|
|
90
|
+
const currentModalState = modalState_0[drawerSlug];
|
|
91
|
+
if (typeof currentModalState === "undefined" && typeof previousModalState === "undefined") {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (previousModalState?.isOpen !== currentModalState?.isOpen) {
|
|
95
|
+
if (!currentModalState?.isOpen) {
|
|
96
|
+
if (!successfullyUploaded) {
|
|
97
|
+
if (typeof onCancel === "function") {
|
|
98
|
+
onCancel();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
setInitialFiles(undefined);
|
|
102
|
+
setInitialForms(undefined);
|
|
103
|
+
setOnCancel(_temp2);
|
|
104
|
+
setOnSuccess(_temp4);
|
|
105
|
+
setSelectableCollections(null);
|
|
106
|
+
setSuccessfullyUploaded(false);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
previousModalStateRef.current = modalState_0;
|
|
110
|
+
};
|
|
111
|
+
$[0] = drawerSlug;
|
|
112
|
+
$[1] = onCancel;
|
|
113
|
+
$[2] = setInitialFiles;
|
|
114
|
+
$[3] = setInitialForms;
|
|
115
|
+
$[4] = setOnCancel;
|
|
116
|
+
$[5] = setOnSuccess;
|
|
117
|
+
$[6] = setSelectableCollections;
|
|
118
|
+
$[7] = setSuccessfullyUploaded;
|
|
119
|
+
$[8] = successfullyUploaded;
|
|
120
|
+
$[9] = t0;
|
|
121
|
+
} else {
|
|
122
|
+
t0 = $[9];
|
|
123
|
+
}
|
|
124
|
+
const onModalStateChanged = useEffectEvent(t0);
|
|
125
|
+
let t1;
|
|
126
|
+
if ($[10] !== modalState || $[11] !== onModalStateChanged) {
|
|
127
|
+
t1 = () => {
|
|
128
|
+
onModalStateChanged(modalState);
|
|
129
|
+
};
|
|
130
|
+
$[10] = modalState;
|
|
131
|
+
$[11] = onModalStateChanged;
|
|
132
|
+
$[12] = t1;
|
|
133
|
+
} else {
|
|
134
|
+
t1 = $[12];
|
|
135
|
+
}
|
|
136
|
+
let t2;
|
|
137
|
+
if ($[13] !== modalState) {
|
|
138
|
+
t2 = [modalState];
|
|
139
|
+
$[13] = modalState;
|
|
140
|
+
$[14] = t2;
|
|
141
|
+
} else {
|
|
142
|
+
t2 = $[14];
|
|
143
|
+
}
|
|
144
|
+
useEffect(t1, t2);
|
|
145
|
+
let t3;
|
|
146
|
+
if ($[15] !== drawerSlug) {
|
|
147
|
+
t3 = _jsx(Drawer, {
|
|
76
148
|
gutter: false,
|
|
77
149
|
Header: null,
|
|
78
150
|
slug: drawerSlug,
|
|
@@ -84,58 +156,79 @@ export function BulkUploadDrawer() {
|
|
|
84
156
|
})
|
|
85
157
|
})
|
|
86
158
|
});
|
|
87
|
-
$[
|
|
88
|
-
$[
|
|
159
|
+
$[15] = drawerSlug;
|
|
160
|
+
$[16] = t3;
|
|
89
161
|
} else {
|
|
90
|
-
|
|
162
|
+
t3 = $[16];
|
|
91
163
|
}
|
|
92
|
-
return
|
|
164
|
+
return t3;
|
|
165
|
+
}
|
|
166
|
+
function _temp4() {
|
|
167
|
+
return _temp3;
|
|
168
|
+
}
|
|
169
|
+
function _temp3() {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
function _temp2() {
|
|
173
|
+
return _temp;
|
|
174
|
+
}
|
|
175
|
+
function _temp() {
|
|
176
|
+
return null;
|
|
93
177
|
}
|
|
94
178
|
const Context = /*#__PURE__*/React.createContext({
|
|
95
179
|
collectionSlug: '',
|
|
96
180
|
drawerSlug: '',
|
|
97
181
|
initialFiles: undefined,
|
|
182
|
+
initialForms: [],
|
|
98
183
|
maxFiles: undefined,
|
|
99
184
|
onCancel: () => null,
|
|
100
185
|
onSuccess: () => null,
|
|
186
|
+
selectableCollections: null,
|
|
101
187
|
setCollectionSlug: () => null,
|
|
102
188
|
setInitialFiles: () => null,
|
|
189
|
+
setInitialForms: () => null,
|
|
103
190
|
setMaxFiles: () => null,
|
|
104
191
|
setOnCancel: () => null,
|
|
105
|
-
setOnSuccess: () => null
|
|
192
|
+
setOnSuccess: () => null,
|
|
193
|
+
setSelectableCollections: () => null,
|
|
194
|
+
setSuccessfullyUploaded: () => false,
|
|
195
|
+
successfullyUploaded: false
|
|
106
196
|
});
|
|
107
197
|
export function BulkUploadProvider(t0) {
|
|
108
|
-
const $ = _c(
|
|
198
|
+
const $ = _c(17);
|
|
109
199
|
const {
|
|
110
200
|
children,
|
|
111
201
|
drawerSlugPrefix
|
|
112
202
|
} = t0;
|
|
203
|
+
const [selectableCollections, setSelectableCollections] = React.useState(null);
|
|
113
204
|
const [collection, setCollection] = React.useState();
|
|
114
205
|
const [onSuccessFunction, setOnSuccessFunction] = React.useState();
|
|
115
206
|
const [onCancelFunction, setOnCancelFunction] = React.useState();
|
|
116
207
|
const [initialFiles, setInitialFiles] = React.useState(undefined);
|
|
208
|
+
const [initialForms, setInitialForms] = React.useState(undefined);
|
|
117
209
|
const [maxFiles, setMaxFiles] = React.useState(undefined);
|
|
210
|
+
const [successfullyUploaded, setSuccessfullyUploaded] = React.useState(false);
|
|
118
211
|
const drawerSlug = `${drawerSlugPrefix ? `${drawerSlugPrefix}-` : ""}${useBulkUploadDrawerSlug()}`;
|
|
119
212
|
let t1;
|
|
120
213
|
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
121
|
-
t1 =
|
|
122
|
-
|
|
214
|
+
t1 = onSuccess => {
|
|
215
|
+
setOnSuccessFunction(() => onSuccess);
|
|
123
216
|
};
|
|
124
217
|
$[0] = t1;
|
|
125
218
|
} else {
|
|
126
219
|
t1 = $[0];
|
|
127
220
|
}
|
|
128
|
-
const
|
|
221
|
+
const setOnSuccess = t1;
|
|
129
222
|
let t2;
|
|
130
223
|
if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
|
|
131
|
-
t2 =
|
|
132
|
-
|
|
224
|
+
t2 = onCancel => {
|
|
225
|
+
setOnCancelFunction(() => onCancel);
|
|
133
226
|
};
|
|
134
227
|
$[1] = t2;
|
|
135
228
|
} else {
|
|
136
229
|
t2 = $[1];
|
|
137
230
|
}
|
|
138
|
-
const
|
|
231
|
+
const setOnCancel = t2;
|
|
139
232
|
let t3;
|
|
140
233
|
if ($[2] !== onCancelFunction) {
|
|
141
234
|
t3 = () => {
|
|
@@ -150,9 +243,9 @@ export function BulkUploadProvider(t0) {
|
|
|
150
243
|
}
|
|
151
244
|
let t4;
|
|
152
245
|
if ($[4] !== onSuccessFunction) {
|
|
153
|
-
t4 = (
|
|
246
|
+
t4 = (newDocs, errorCount) => {
|
|
154
247
|
if (typeof onSuccessFunction === "function") {
|
|
155
|
-
onSuccessFunction(
|
|
248
|
+
onSuccessFunction(newDocs, errorCount);
|
|
156
249
|
}
|
|
157
250
|
};
|
|
158
251
|
$[4] = onSuccessFunction;
|
|
@@ -161,20 +254,26 @@ export function BulkUploadProvider(t0) {
|
|
|
161
254
|
t4 = $[5];
|
|
162
255
|
}
|
|
163
256
|
let t5;
|
|
164
|
-
if ($[6] !== children || $[7] !== collection || $[8] !== drawerSlug || $[9] !== initialFiles || $[10] !==
|
|
257
|
+
if ($[6] !== children || $[7] !== collection || $[8] !== drawerSlug || $[9] !== initialFiles || $[10] !== initialForms || $[11] !== maxFiles || $[12] !== selectableCollections || $[13] !== successfullyUploaded || $[14] !== t3 || $[15] !== t4) {
|
|
165
258
|
t5 = _jsx(Context, {
|
|
166
259
|
value: {
|
|
167
260
|
collectionSlug: collection,
|
|
168
261
|
drawerSlug,
|
|
169
262
|
initialFiles,
|
|
263
|
+
initialForms,
|
|
170
264
|
maxFiles,
|
|
171
265
|
onCancel: t3,
|
|
172
266
|
onSuccess: t4,
|
|
173
|
-
|
|
267
|
+
selectableCollections,
|
|
268
|
+
setCollectionSlug: setCollection,
|
|
174
269
|
setInitialFiles,
|
|
270
|
+
setInitialForms,
|
|
175
271
|
setMaxFiles,
|
|
176
|
-
setOnCancel
|
|
177
|
-
setOnSuccess
|
|
272
|
+
setOnCancel,
|
|
273
|
+
setOnSuccess,
|
|
274
|
+
setSelectableCollections,
|
|
275
|
+
setSuccessfullyUploaded,
|
|
276
|
+
successfullyUploaded
|
|
178
277
|
},
|
|
179
278
|
children: _jsxs(React.Fragment, {
|
|
180
279
|
children: [children, _jsx(BulkUploadDrawer, {})]
|
|
@@ -184,12 +283,15 @@ export function BulkUploadProvider(t0) {
|
|
|
184
283
|
$[7] = collection;
|
|
185
284
|
$[8] = drawerSlug;
|
|
186
285
|
$[9] = initialFiles;
|
|
187
|
-
$[10] =
|
|
188
|
-
$[11] =
|
|
189
|
-
$[12] =
|
|
190
|
-
$[13] =
|
|
286
|
+
$[10] = initialForms;
|
|
287
|
+
$[11] = maxFiles;
|
|
288
|
+
$[12] = selectableCollections;
|
|
289
|
+
$[13] = successfullyUploaded;
|
|
290
|
+
$[14] = t3;
|
|
291
|
+
$[15] = t4;
|
|
292
|
+
$[16] = t5;
|
|
191
293
|
} else {
|
|
192
|
-
t5 = $[
|
|
294
|
+
t5 = $[16];
|
|
193
295
|
}
|
|
194
296
|
return t5;
|
|
195
297
|
}
|