@payloadcms/ui 3.44.0-canary.9 → 3.44.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.
Files changed (65) hide show
  1. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  2. package/dist/elements/BulkUpload/FileSidebar/index.js +74 -29
  3. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  4. package/dist/elements/BulkUpload/FileSidebar/index.scss +5 -4
  5. package/dist/elements/BulkUpload/FormsManager/index.d.ts +0 -1
  6. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  7. package/dist/elements/BulkUpload/FormsManager/index.js +37 -64
  8. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  9. package/dist/elements/BulkUpload/FormsManager/reducer.d.ts +1 -0
  10. package/dist/elements/BulkUpload/FormsManager/reducer.d.ts.map +1 -1
  11. package/dist/elements/BulkUpload/FormsManager/reducer.js +1 -0
  12. package/dist/elements/BulkUpload/FormsManager/reducer.js.map +1 -1
  13. package/dist/elements/LeaveWithoutSaving/usePreventLeave.d.ts.map +1 -1
  14. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +14 -10
  15. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
  16. package/dist/elements/RelationshipTable/AddNewButton.d.ts +17 -0
  17. package/dist/elements/RelationshipTable/AddNewButton.d.ts.map +1 -0
  18. package/dist/elements/RelationshipTable/AddNewButton.js +64 -0
  19. package/dist/elements/RelationshipTable/AddNewButton.js.map +1 -0
  20. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  21. package/dist/elements/RelationshipTable/index.js +35 -49
  22. package/dist/elements/RelationshipTable/index.js.map +1 -1
  23. package/dist/elements/RelationshipTable/index.scss +4 -0
  24. package/dist/elements/ShimmerEffect/index.d.ts +2 -0
  25. package/dist/elements/ShimmerEffect/index.d.ts.map +1 -1
  26. package/dist/elements/ShimmerEffect/index.js +5 -3
  27. package/dist/elements/ShimmerEffect/index.js.map +1 -1
  28. package/dist/elements/Table/index.scss +1 -0
  29. package/dist/elements/Thumbnail/createThumbnail.d.ts.map +1 -1
  30. package/dist/elements/Thumbnail/createThumbnail.js +8 -2
  31. package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
  32. package/dist/exports/client/{CodeEditor-Z3ZZJH7C.js → CodeEditor-YP63NRLU.js} +2 -2
  33. package/dist/exports/client/{chunk-CNCOIY3Y.js → chunk-5EP6VERX.js} +4 -4
  34. package/dist/exports/client/{chunk-CNCOIY3Y.js.map → chunk-5EP6VERX.js.map} +3 -3
  35. package/dist/exports/client/index.d.ts +1 -1
  36. package/dist/exports/client/index.js +10 -10
  37. package/dist/exports/client/index.js.map +4 -4
  38. package/dist/exports/shared/index.js +1 -1
  39. package/dist/exports/shared/index.js.map +2 -2
  40. package/dist/fields/DateTime/index.d.ts.map +1 -1
  41. package/dist/fields/DateTime/index.js +1 -0
  42. package/dist/fields/DateTime/index.js.map +1 -1
  43. package/dist/providers/ListQuery/types.d.ts +2 -2
  44. package/dist/providers/ListQuery/types.d.ts.map +1 -1
  45. package/dist/providers/ListQuery/types.js.map +1 -1
  46. package/dist/providers/TableColumns/buildColumnState/index.d.ts +3 -3
  47. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  48. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  49. package/dist/providers/TableColumns/getInitialColumns.d.ts +2 -2
  50. package/dist/providers/TableColumns/getInitialColumns.d.ts.map +1 -1
  51. package/dist/providers/TableColumns/getInitialColumns.js.map +1 -1
  52. package/dist/providers/TableColumns/types.d.ts +2 -2
  53. package/dist/providers/TableColumns/types.d.ts.map +1 -1
  54. package/dist/providers/TableColumns/types.js.map +1 -1
  55. package/dist/styles.css +1 -1
  56. package/dist/utilities/buildTableState.d.ts +2 -2
  57. package/dist/utilities/buildTableState.d.ts.map +1 -1
  58. package/dist/utilities/buildTableState.js +4 -4
  59. package/dist/utilities/buildTableState.js.map +1 -1
  60. package/dist/utilities/renderTable.d.ts +3 -3
  61. package/dist/utilities/renderTable.d.ts.map +1 -1
  62. package/dist/utilities/renderTable.js.map +1 -1
  63. package/package.json +5 -5
  64. package/dist/elements/BulkUpload/index.scss +0 -0
  65. /package/dist/exports/client/{CodeEditor-Z3ZZJH7C.js.map → CodeEditor-YP63NRLU.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","isImage","qs","React","toast","fieldReducer","useConfig","useLocale","useServerFunctions","useTranslation","useUploadHandlers","hasSavePermission","getHasSavePermission","LoadingOverlay","useLoadingOverlay","createThumbnail","useBulkUpload","createFormData","formsManagementReducer","Context","createContext","activeIndex","addFiles","Promise","resolve","bulkUpdateForm","collectionSlug","docPermissions","undefined","documentSlots","forms","getFormDataRef","current","hasPublishPermission","hasSubmitted","isInitializing","removeFile","saveAllDocs","setActiveIndex","setFormTotalErrorCount","thumbnailUrls","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","formsCount","length","thumbnailUrlsRef","processedFiles","Set","renderedThumbnails","setRenderedThumbnails","useEffect","newThumbnails","i","file","formState","value","has","type","add","thumbnailUrl","setTimeout","toggleLoadingOverlay","closeModal","drawerSlug","initialFiles","onSuccess","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","map","form","errorCount","uploadEdits","files","isLoading","key","removeThumbnails","indexes","filter","_","includes","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","thumbnailIndexesToRemove","successCount","Math","max","success","acc","updatedFields","afterStateUpdate","Object","entries","newFormErrorCount","values","valid","resetUploadEdits","_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 { isImage } from 'payload/shared'\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 { createThumbnail } from '../../Thumbnail/createThumbnail.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 thumbnailUrls: string[]\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 thumbnailUrls: [],\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 const formsCount = forms.length\n\n const thumbnailUrlsRef = React.useRef<string[]>([])\n const processedFiles = React.useRef(new Set()) // Track already-processed files\n const [renderedThumbnails, setRenderedThumbnails] = React.useState<string[]>([])\n\n React.useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n ;(async () => {\n const newThumbnails = [...thumbnailUrlsRef.current]\n\n for (let i = 0; i < formsCount; i++) {\n const file = formsRef.current[i].formState.file.value as File\n\n // Skip if already processed\n if (processedFiles.current.has(file) || !file || !isImage(file.type)) {\n continue\n }\n processedFiles.current.add(file)\n\n // Generate thumbnail and update ref\n const thumbnailUrl = await createThumbnail(file)\n newThumbnails[i] = thumbnailUrl\n thumbnailUrlsRef.current = newThumbnails\n\n // Trigger re-render in batches\n setRenderedThumbnails([...newThumbnails])\n await new Promise((resolve) => setTimeout(resolve, 100))\n }\n })()\n }, [formsCount])\n\n const { toggleLoadingOverlay } = useLoadingOverlay()\n const { closeModal } = useModal()\n const { collectionSlug, drawerSlug, initialFiles, onSuccess } = 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 = `${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 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 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],\n )\n\n const removeThumbnails = React.useCallback((indexes: number[]) => {\n thumbnailUrlsRef.current = thumbnailUrlsRef.current.filter((_, i) => !indexes.includes(i))\n setRenderedThumbnails([...thumbnailUrlsRef.current])\n }, [])\n\n const removeFile: FormsManagerContext['removeFile'] = React.useCallback(\n (index) => {\n dispatch({ type: 'REMOVE_FORM', index })\n removeThumbnails([index])\n },\n [removeThumbnails],\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 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 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 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 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 const thumbnailIndexesToRemove = []\n\n currentForms.forEach(({ errorCount }, i) => {\n if (errorCount) {\n remainingForms.push(currentForms[i])\n } else {\n thumbnailIndexesToRemove.push(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 if (remainingForms.length && thumbnailIndexesToRemove.length) {\n removeThumbnails(thumbnailIndexesToRemove)\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 [\n actionURL,\n activeIndex,\n forms,\n removeThumbnails,\n onSuccess,\n collectionSlug,\n getUploadHandler,\n t,\n closeModal,\n drawerSlug,\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 thumbnailUrls: renderedThumbnails,\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
+ {"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","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","thumbnailIndexesToRemove","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 } = 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 = `${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 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 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 const thumbnailIndexesToRemove = []\n\n currentForms.forEach(({ errorCount }, i) => {\n if (errorCount) {\n remainingForms.push(currentForms[i])\n } else {\n thumbnailIndexesToRemove.push(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 [\n actionURL,\n collectionSlug,\n getUploadHandler,\n t,\n forms,\n activeIndex,\n closeModal,\n drawerSlug,\n onSuccess,\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":"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","ignoreList":[]}
@@ -3,6 +3,7 @@ export type State = {
3
3
  activeIndex: number;
4
4
  forms: {
5
5
  errorCount: number;
6
+ formID: string;
6
7
  formState: FormState;
7
8
  uploadEdits?: UploadEdits;
8
9
  }[];
@@ -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;AAErD,MAAM,MAAM,KAAK,GAAG;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAA;QAClB,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,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,CA8F1E"}
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;AAErD,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,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,CA+F1E"}
@@ -6,6 +6,7 @@ export function formsManagementReducer(state, action) {
6
6
  for (let i = 0; i < action.files.length; i++) {
7
7
  newForms[i] = {
8
8
  errorCount: 0,
9
+ formID: crypto.randomUUID(),
9
10
  formState: {
10
11
  ...(action.initialState || {}),
11
12
  file: {
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.js","names":["formsManagementReducer","state","action","type","newForms","i","files","length","errorCount","formState","initialState","file","initialValue","valid","value","uploadEdits","activeIndex","forms","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\nexport type State = {\n activeIndex: number\n forms: {\n errorCount: number\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 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 '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 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":"AA4CA,OAAO,SAASA,uBAAuBC,KAAY,EAAEC,MAAc;EACjE,QAAQA,MAAA,CAAOC,IAAI;IACjB,KAAK;MAAa;QAChB,MAAMC,QAAA,GAA2B,EAAE;QACnC,KAAK,IAAIC,CAAA,GAAI,GAAGA,CAAA,GAAIH,MAAA,CAAOI,KAAK,CAACC,MAAM,EAAEF,CAAA,IAAK;UAC5CD,QAAQ,CAACC,CAAA,CAAE,GAAG;YACZG,UAAA,EAAY;YACZC,SAAA,EAAW;cACT,IAAIP,MAAA,CAAOQ,YAAY,IAAI,CAAC,CAAC;cAC7BC,IAAA,EAAM;gBACJC,YAAA,EAAcV,MAAA,CAAOI,KAAK,CAACD,CAAA,CAAE;gBAC7BQ,KAAA,EAAO;gBACPC,KAAA,EAAOZ,MAAA,CAAOI,KAAK,CAACD,CAAA;cACtB;YACF;YACAU,WAAA,EAAa,CAAC;UAChB;QACF;QAEA,OAAO;UACL,GAAGd,KAAK;UACRe,WAAA,EAAa;UACbC,KAAA,EAAO,C,GAAIb,QAAA,E,GAAaH,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,CAAOmB,KAAK,EAAE;QAE/D,MAAMC,eAAA,GAAkBrB,KAAA,CAAMe,WAAW,IAAId,MAAA,CAAOmB,KAAK;QACzD,MAAME,SAAA,GACJtB,KAAA,CAAMe,WAAW,KAAKd,MAAA,CAAOmB,KAAK,GAC9BnB,MAAA,CAAOmB,KAAK,GACZC,eAAA,GACErB,KAAA,CAAMe,WAAW,GAAG,IACpBf,KAAA,CAAMe,WAAW;QACzB,MAAMQ,kBAAA,GAAqBC,IAAA,CAAKC,GAAG,CAACR,mBAAA,CAAoBX,MAAM,GAAG,GAAGgB,SAAA;QAEpE,OAAO;UACL,GAAGtB,KAAK;UACRe,WAAA,EAAaM,eAAA,GAAkBE,kBAAA,GAAqBvB,KAAA,CAAMe,WAAW;UACrEC,KAAA,EAAOC,mBAAA;UACPS,eAAA,EAAiB1B,KAAA,CAAM0B,eAAe,GAAGR,WAAA,CAAYX;QACvD;MACF;IACA,KAAK;MAAW;QACd,OAAO;UACL,GAAGP,KAAK;UACR,GAAGC,MAAA,CAAOD;QACZ;MACF;IACA,KAAK;MAAoB;QACvB,OAAO;UACL,GAAGA,KAAK;UACRe,WAAA,EAAad,MAAA,CAAOmB;QACtB;MACF;IACA,KAAK;MAAsB;QACzB,MAAMJ,KAAA,GAAQ,C,GAAIhB,KAAA,CAAMgB,KAAK,CAAC;QAC9BA,KAAK,CAACf,MAAA,CAAOmB,KAAK,CAAC,CAACb,UAAU,GAAGN,MAAA,CAAO0B,KAAK;QAE7C,OAAO;UACL,GAAG3B,KAAK;UACRgB,KAAA;UACAU,eAAA,EAAiB1B,KAAA,CAAMgB,KAAK,CAACY,MAAM,CAAC,CAACC,GAAA,EAAKC,IAAA,KAASD,GAAA,GAAMC,IAAA,CAAKvB,UAAU,EAAE;QAC5E;MACF;IACA,KAAK;MAAe;QAClB,MAAMwB,YAAA,GAAe,C,GAAI/B,KAAA,CAAMgB,KAAK,CAAC;QACrCe,YAAY,CAAC9B,MAAA,CAAOmB,KAAK,CAAC,CAACb,UAAU,GAAGN,MAAA,CAAOM,UAAU;QAEzD;QACAwB,YAAY,CAAC9B,MAAA,CAAOmB,KAAK,CAAC,GAAG;UAC3B,GAAGW,YAAY,CAAC9B,MAAA,CAAOmB,KAAK,CAAC;UAC7BZ,SAAA,EAAW;YACT,GAAGuB,YAAY,CAAC9B,MAAA,CAAOmB,KAAK,CAAC,CAACZ,SAAS;YACvC,GAAGP,MAAA,CAAOO;UACZ;UACAM,WAAA,EAAa;YACX,GAAGiB,YAAY,CAAC9B,MAAA,CAAOmB,KAAK,CAAC,CAACN,WAAW;YACzC,GAAGb,MAAA,CAAOa;UACZ;QACF;QAEA,OAAO;UACL,GAAGd,KAAK;UACRgB,KAAA,EAAOe,YAAA;UACPL,eAAA,EAAiB1B,KAAA,CAAMgB,KAAK,CAACY,MAAM,CAAC,CAACC,GAAA,EAAKC,IAAA,KAASD,GAAA,GAAMC,IAAA,CAAKvB,UAAU,EAAE;QAC5E;MACF;IACA;MAAS;QACP,OAAOP,KAAA;MACT;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"reducer.js","names":["formsManagementReducer","state","action","type","newForms","i","files","length","errorCount","formID","crypto","randomUUID","formState","initialState","file","initialValue","valid","value","uploadEdits","activeIndex","forms","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\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 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 'ADD_FORMS': {\n const newForms: State['forms'] = []\n for (let i = 0; i < action.files.length; i++) {\n newForms[i] = {\n errorCount: 0,\n formID: crypto.randomUUID(),\n formState: {\n ...(action.initialState || {}),\n file: {\n initialValue: action.files[i],\n valid: true,\n value: action.files[i],\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 +1 @@
1
- {"version":3,"file":"usePreventLeave.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"names":[],"mappings":"AA4BA,eAAO,MAAM,eAAe,aAAa,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,YAAmB,MAAM,SA6B1F,CAAA;AAED,eAAO,MAAM,eAAe,4DAMzB;IACD,WAAW,EAAE,OAAO,CAAA;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,SAsFA,CAAA"}
1
+ {"version":3,"file":"usePreventLeave.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"names":[],"mappings":"AA4BA,eAAO,MAAM,eAAe,aAAa,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,YAAmB,MAAM,SA6B1F,CAAA;AAED,eAAO,MAAM,eAAe,4DAMzB;IACD,WAAW,EAAE,OAAO,CAAA;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,SA0FA,CAAA"}
@@ -79,14 +79,18 @@ export const usePreventLeave = ({
79
79
  // check when page is about to be changed
80
80
  useEffect(() => {
81
81
  function isAnchorOfCurrentUrl(currentUrl, newUrl) {
82
- const currentUrlObj = new URL(currentUrl);
83
- const newUrlObj = new URL(newUrl);
84
- // Compare hostname, pathname, and search parameters
85
- if (currentUrlObj.hostname === newUrlObj.hostname && currentUrlObj.pathname === newUrlObj.pathname && currentUrlObj.search === newUrlObj.search) {
86
- // Check if the new URL is just an anchor of the current URL page
87
- const currentHash = currentUrlObj.hash;
88
- const newHash = newUrlObj.hash;
89
- return currentHash !== newHash && currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '');
82
+ try {
83
+ const currentUrlObj = new URL(currentUrl);
84
+ const newUrlObj = new URL(newUrl);
85
+ // Compare hostname, pathname, and search parameters
86
+ if (currentUrlObj.hostname === newUrlObj.hostname && currentUrlObj.pathname === newUrlObj.pathname && currentUrlObj.search === newUrlObj.search) {
87
+ // Check if the new URL is just an anchor of the current URL page
88
+ const currentHash = currentUrlObj.hash;
89
+ const newHash = newUrlObj.hash;
90
+ return currentHash !== newHash && currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '');
91
+ }
92
+ } catch (err) {
93
+ console.log('Unexpected exception thrown in LeaveWithoutSaving:isAnchorOfCurrentUrl', err);
90
94
  }
91
95
  return false;
92
96
  }
@@ -118,8 +122,8 @@ export const usePreventLeave = ({
118
122
  }
119
123
  }
120
124
  }
121
- } catch (err) {
122
- alert(err);
125
+ } catch (err_0) {
126
+ console.log('Unexpected exception thrown in LeaveWithoutSaving:usePreventLeave', err_0);
123
127
  }
124
128
  }
125
129
  // Add the global click event listener
@@ -1 +1 @@
1
- {"version":3,"file":"usePreventLeave.js","names":["c","_c","useRouter","useCallback","useEffect","useRef","useRouteTransition","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","t0","message","$","enabled","undefined","t1","event","finalEnabled","preventDefault","returnValue","handler","t2","t3","window","usePreventLeave","hasAccepted","onAccept","onPrevent","prevent","startRouteTransition","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isNewTab","metaKey","ctrlKey","isPageLeaving","confirm","current","stopPropagation","err","alert","document","push"],"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["'use client'\n// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['addEventListener']>\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>))\n }\n}\n\nfunction off<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['removeEventListener']>\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>))\n }\n}\n\nexport const useBeforeUnload = (enabled: (() => boolean) | boolean = true, message?: string) => {\n const handler = useCallback(\n (event: BeforeUnloadEvent) => {\n const finalEnabled = typeof enabled === 'function' ? enabled() : true\n\n if (!finalEnabled) {\n return\n }\n\n event.preventDefault()\n\n if (message) {\n event.returnValue = message\n }\n\n return message\n },\n [enabled, message],\n )\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n on(window, 'beforeunload', handler)\n\n return () => off(window, 'beforeunload', handler)\n }, [enabled, handler])\n}\n\nexport const usePreventLeave = ({\n hasAccepted = false,\n message = 'Are you sure want to leave this page?',\n onAccept,\n onPrevent,\n prevent = true,\n}: {\n hasAccepted: boolean\n // if no `onPrevent` is provided, the message will be displayed in a confirm dialog\n message?: string\n onAccept?: () => void\n // to use a custom confirmation dialog, provide a function that returns a boolean\n onPrevent?: () => void\n prevent: boolean\n}) => {\n // check when page is about to be reloaded\n useBeforeUnload(prevent, message)\n const { startRouteTransition } = useRouteTransition()\n\n const router = useRouter()\n const cancelledURL = useRef<string>('')\n\n // check when page is about to be changed\n useEffect(() => {\n function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string) {\n const currentUrlObj = new URL(currentUrl)\n const newUrlObj = new URL(newUrl)\n // Compare hostname, pathname, and search parameters\n if (\n currentUrlObj.hostname === newUrlObj.hostname &&\n currentUrlObj.pathname === newUrlObj.pathname &&\n currentUrlObj.search === newUrlObj.search\n ) {\n // Check if the new URL is just an anchor of the current URL page\n const currentHash = currentUrlObj.hash\n const newHash = newUrlObj.hash\n return (\n currentHash !== newHash &&\n currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '')\n )\n }\n return false\n }\n\n function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null {\n while (element && element.tagName.toLowerCase() !== 'a') {\n element = element.parentElement\n }\n return element as HTMLAnchorElement\n }\n\n function handleClick(event: MouseEvent) {\n try {\n const target = event.target as HTMLElement\n const anchor = findClosestAnchor(target)\n if (anchor) {\n const currentUrl = window.location.href\n const newUrl = anchor.href\n const isAnchor = isAnchorOfCurrentUrl(currentUrl, newUrl)\n const isDownloadLink = anchor.download !== ''\n const isNewTab = anchor.target === '_blank' || event.metaKey || event.ctrlKey\n\n const isPageLeaving = !(newUrl === currentUrl || isAnchor || isDownloadLink || isNewTab)\n\n if (isPageLeaving && prevent && (!onPrevent ? !window.confirm(message) : true)) {\n // Keep a reference of the href\n cancelledURL.current = newUrl\n\n // Cancel the route change\n event.preventDefault()\n event.stopPropagation()\n\n if (typeof onPrevent === 'function') {\n onPrevent()\n }\n }\n }\n } catch (err) {\n alert(err)\n }\n }\n\n // Add the global click event listener\n document.addEventListener('click', handleClick, true)\n\n // Clean up the global click event listener when the component is unmounted\n return () => {\n document.removeEventListener('click', handleClick, true)\n }\n }, [onPrevent, prevent, message])\n\n useEffect(() => {\n if (hasAccepted && cancelledURL.current) {\n if (onAccept) {\n onAccept()\n }\n\n startRouteTransition(() => router.push(cancelledURL.current))\n }\n }, [hasAccepted, onAccept, router, startRouteTransition])\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"usePreventLeave.js","names":["c","_c","useRouter","useCallback","useEffect","useRef","useRouteTransition","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","t0","message","$","enabled","undefined","t1","event","finalEnabled","preventDefault","returnValue","handler","t2","t3","window","usePreventLeave","hasAccepted","onAccept","onPrevent","prevent","startRouteTransition","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","err","console","log","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isNewTab","metaKey","ctrlKey","isPageLeaving","confirm","current","stopPropagation","document","push"],"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["'use client'\n// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['addEventListener']>\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>))\n }\n}\n\nfunction off<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['removeEventListener']>\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>))\n }\n}\n\nexport const useBeforeUnload = (enabled: (() => boolean) | boolean = true, message?: string) => {\n const handler = useCallback(\n (event: BeforeUnloadEvent) => {\n const finalEnabled = typeof enabled === 'function' ? enabled() : true\n\n if (!finalEnabled) {\n return\n }\n\n event.preventDefault()\n\n if (message) {\n event.returnValue = message\n }\n\n return message\n },\n [enabled, message],\n )\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n on(window, 'beforeunload', handler)\n\n return () => off(window, 'beforeunload', handler)\n }, [enabled, handler])\n}\n\nexport const usePreventLeave = ({\n hasAccepted = false,\n message = 'Are you sure want to leave this page?',\n onAccept,\n onPrevent,\n prevent = true,\n}: {\n hasAccepted: boolean\n // if no `onPrevent` is provided, the message will be displayed in a confirm dialog\n message?: string\n onAccept?: () => void\n // to use a custom confirmation dialog, provide a function that returns a boolean\n onPrevent?: () => void\n prevent: boolean\n}) => {\n // check when page is about to be reloaded\n useBeforeUnload(prevent, message)\n const { startRouteTransition } = useRouteTransition()\n\n const router = useRouter()\n const cancelledURL = useRef<string>('')\n\n // check when page is about to be changed\n useEffect(() => {\n function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string) {\n try {\n const currentUrlObj = new URL(currentUrl)\n const newUrlObj = new URL(newUrl)\n // Compare hostname, pathname, and search parameters\n if (\n currentUrlObj.hostname === newUrlObj.hostname &&\n currentUrlObj.pathname === newUrlObj.pathname &&\n currentUrlObj.search === newUrlObj.search\n ) {\n // Check if the new URL is just an anchor of the current URL page\n const currentHash = currentUrlObj.hash\n const newHash = newUrlObj.hash\n return (\n currentHash !== newHash &&\n currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '')\n )\n }\n } catch (err) {\n console.log('Unexpected exception thrown in LeaveWithoutSaving:isAnchorOfCurrentUrl', err)\n }\n return false\n }\n\n function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null {\n while (element && element.tagName.toLowerCase() !== 'a') {\n element = element.parentElement\n }\n return element as HTMLAnchorElement\n }\n\n function handleClick(event: MouseEvent) {\n try {\n const target = event.target as HTMLElement\n const anchor = findClosestAnchor(target)\n if (anchor) {\n const currentUrl = window.location.href\n const newUrl = anchor.href\n const isAnchor = isAnchorOfCurrentUrl(currentUrl, newUrl)\n const isDownloadLink = anchor.download !== ''\n const isNewTab = anchor.target === '_blank' || event.metaKey || event.ctrlKey\n\n const isPageLeaving = !(newUrl === currentUrl || isAnchor || isDownloadLink || isNewTab)\n\n if (isPageLeaving && prevent && (!onPrevent ? !window.confirm(message) : true)) {\n // Keep a reference of the href\n cancelledURL.current = newUrl\n\n // Cancel the route change\n event.preventDefault()\n event.stopPropagation()\n\n if (typeof onPrevent === 'function') {\n onPrevent()\n }\n }\n }\n } catch (err) {\n console.log('Unexpected exception thrown in LeaveWithoutSaving:usePreventLeave', err)\n }\n }\n\n // Add the global click event listener\n document.addEventListener('click', handleClick, true)\n\n // Clean up the global click event listener when the component is unmounted\n return () => {\n document.removeEventListener('click', handleClick, true)\n }\n }, [onPrevent, prevent, message])\n\n useEffect(() => {\n if (hasAccepted && cancelledURL.current) {\n if (onAccept) {\n onAccept()\n }\n\n startRouteTransition(() => router.push(cancelledURL.current))\n }\n }, [hasAccepted, onAccept, router, startRouteTransition])\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ import type { I18nClient } from '@payloadcms/translations';
2
+ import type { ClientCollectionConfig, SanitizedPermissions } from 'payload';
3
+ import type { Props as ButtonProps } from '../../elements/Button/types.js';
4
+ export declare const AddNewButton: ({ allowCreate, baseClass, buttonStyle, className, collections, i18n, icon, label, onClick, permissions, relationTo, }: {
5
+ allowCreate: boolean;
6
+ baseClass: string;
7
+ buttonStyle?: ButtonProps["buttonStyle"];
8
+ className?: string;
9
+ collections: ClientCollectionConfig[];
10
+ i18n: I18nClient;
11
+ icon?: ButtonProps["icon"];
12
+ label: string;
13
+ onClick: (selectedCollection?: string) => void;
14
+ permissions: SanitizedPermissions;
15
+ relationTo: string | string[];
16
+ }) => import("react").JSX.Element;
17
+ //# sourceMappingURL=AddNewButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddNewButton.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/AddNewButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAI3E,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAK1E,eAAO,MAAM,YAAY,0HAYtB;IACD,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAA;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,sBAAsB,EAAE,CAAA;IACrC,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,WAAW,EAAE,oBAAoB,CAAA;IACjC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC9B,gCAsDA,CAAA"}
@@ -0,0 +1,64 @@
1
+ 'use client';
2
+
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ import { getTranslation } from '@payloadcms/translations';
5
+ import { Button } from '../../elements/Button/index.js';
6
+ import { Popup, PopupList } from '../Popup/index.js';
7
+ export const AddNewButton = ({
8
+ allowCreate,
9
+ baseClass,
10
+ buttonStyle,
11
+ className,
12
+ collections,
13
+ i18n,
14
+ icon,
15
+ label,
16
+ onClick,
17
+ permissions,
18
+ relationTo
19
+ }) => {
20
+ if (!allowCreate) {
21
+ return null;
22
+ }
23
+ const isPolymorphic = Array.isArray(relationTo);
24
+ if (!isPolymorphic) {
25
+ return /*#__PURE__*/_jsx(Button, {
26
+ buttonStyle: buttonStyle,
27
+ className: className,
28
+ onClick: () => onClick(),
29
+ children: label
30
+ });
31
+ }
32
+ return /*#__PURE__*/_jsx("div", {
33
+ className: `${baseClass}__add-new-polymorphic-wrapper`,
34
+ children: /*#__PURE__*/_jsx(Popup, {
35
+ button: /*#__PURE__*/_jsx(Button, {
36
+ buttonStyle: buttonStyle,
37
+ className: className,
38
+ icon: icon,
39
+ children: label
40
+ }),
41
+ buttonType: "custom",
42
+ horizontalAlign: "center",
43
+ render: ({
44
+ close: closePopup
45
+ }) => /*#__PURE__*/_jsx(PopupList.ButtonGroup, {
46
+ children: relationTo.map(relatedCollection => {
47
+ if (permissions.collections[relatedCollection]?.create) {
48
+ return /*#__PURE__*/_jsx(PopupList.Button, {
49
+ className: `${baseClass}__relation-button--${relatedCollection}`,
50
+ onClick: () => {
51
+ closePopup();
52
+ onClick(relatedCollection);
53
+ },
54
+ children: getTranslation(collections.find(each => each.slug === relatedCollection).labels.singular, i18n)
55
+ }, relatedCollection);
56
+ }
57
+ return null;
58
+ })
59
+ }),
60
+ size: "medium"
61
+ })
62
+ });
63
+ };
64
+ //# sourceMappingURL=AddNewButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddNewButton.js","names":["getTranslation","Button","Popup","PopupList","AddNewButton","allowCreate","baseClass","buttonStyle","className","collections","i18n","icon","label","onClick","permissions","relationTo","isPolymorphic","Array","isArray","_jsx","button","buttonType","horizontalAlign","render","close","closePopup","ButtonGroup","map","relatedCollection","create","find","each","slug","labels","singular","size"],"sources":["../../../src/elements/RelationshipTable/AddNewButton.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient } from '@payloadcms/translations'\nimport type { ClientCollectionConfig, SanitizedPermissions } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { Props as ButtonProps } from '../../elements/Button/types.js'\n\nimport { Button } from '../../elements/Button/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\n\nexport const AddNewButton = ({\n allowCreate,\n baseClass,\n buttonStyle,\n className,\n collections,\n i18n,\n icon,\n label,\n onClick,\n permissions,\n relationTo,\n}: {\n allowCreate: boolean\n baseClass: string\n buttonStyle?: ButtonProps['buttonStyle']\n className?: string\n collections: ClientCollectionConfig[]\n i18n: I18nClient\n icon?: ButtonProps['icon']\n label: string\n onClick: (selectedCollection?: string) => void\n permissions: SanitizedPermissions\n relationTo: string | string[]\n}) => {\n if (!allowCreate) {\n return null\n }\n\n const isPolymorphic = Array.isArray(relationTo)\n\n if (!isPolymorphic) {\n return (\n <Button buttonStyle={buttonStyle} className={className} onClick={() => onClick()}>\n {label}\n </Button>\n )\n }\n\n return (\n <div className={`${baseClass}__add-new-polymorphic-wrapper`}>\n <Popup\n button={\n <Button buttonStyle={buttonStyle} className={className} icon={icon}>\n {label}\n </Button>\n }\n buttonType=\"custom\"\n horizontalAlign=\"center\"\n render={({ close: closePopup }) => (\n <PopupList.ButtonGroup>\n {relationTo.map((relatedCollection) => {\n if (permissions.collections[relatedCollection]?.create) {\n return (\n <PopupList.Button\n className={`${baseClass}__relation-button--${relatedCollection}`}\n key={relatedCollection}\n onClick={() => {\n closePopup()\n onClick(relatedCollection)\n }}\n >\n {getTranslation(\n collections.find((each) => each.slug === relatedCollection).labels.singular,\n i18n,\n )}\n </PopupList.Button>\n )\n }\n\n return null\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"medium\"\n />\n </div>\n )\n}\n"],"mappings":"AAAA;;;AAIA,SAASA,cAAc,QAAQ;AAI/B,SAASC,MAAM,QAAQ;AACvB,SAASC,KAAK,EAAEC,SAAS,QAAQ;AAEjC,OAAO,MAAMC,YAAA,GAAeA,CAAC;EAC3BC,WAAW;EACXC,SAAS;EACTC,WAAW;EACXC,SAAS;EACTC,WAAW;EACXC,IAAI;EACJC,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC,WAAW;EACXC;AAAU,CAaX;EACC,IAAI,CAACV,WAAA,EAAa;IAChB,OAAO;EACT;EAEA,MAAMW,aAAA,GAAgBC,KAAA,CAAMC,OAAO,CAACH,UAAA;EAEpC,IAAI,CAACC,aAAA,EAAe;IAClB,oBACEG,IAAA,CAAClB,MAAA;MAAOM,WAAA,EAAaA,WAAA;MAAaC,SAAA,EAAWA,SAAA;MAAWK,OAAA,EAASA,CAAA,KAAMA,OAAA;gBACpED;;EAGP;EAEA,oBACEO,IAAA,CAAC;IAAIX,SAAA,EAAW,GAAGF,SAAA,+BAAwC;cACzD,aAAAa,IAAA,CAACjB,KAAA;MACCkB,MAAA,eACED,IAAA,CAAClB,MAAA;QAAOM,WAAA,EAAaA,WAAA;QAAaC,SAAA,EAAWA,SAAA;QAAWG,IAAA,EAAMA,IAAA;kBAC3DC;;MAGLS,UAAA,EAAW;MACXC,eAAA,EAAgB;MAChBC,MAAA,EAAQA,CAAC;QAAEC,KAAA,EAAOC;MAAU,CAAE,kBAC5BN,IAAA,CAAChB,SAAA,CAAUuB,WAAW;kBACnBX,UAAA,CAAWY,GAAG,CAAEC,iBAAA;UACf,IAAId,WAAA,CAAYL,WAAW,CAACmB,iBAAA,CAAkB,EAAEC,MAAA,EAAQ;YACtD,oBACEV,IAAA,CAAChB,SAAA,CAAUF,MAAM;cACfO,SAAA,EAAW,GAAGF,SAAA,sBAA+BsB,iBAAA,EAAmB;cAEhEf,OAAA,EAASA,CAAA;gBACPY,UAAA;gBACAZ,OAAA,CAAQe,iBAAA;cACV;wBAEC5B,cAAA,CACCS,WAAA,CAAYqB,IAAI,CAAEC,IAAA,IAASA,IAAA,CAAKC,IAAI,KAAKJ,iBAAA,EAAmBK,MAAM,CAACC,QAAQ,EAC3ExB,IAAA;eARGkB,iBAAA;UAYX;UAEA,OAAO;QACT;;MAGJO,IAAA,EAAK;;;AAIb","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAqD,MAAM,OAAO,CAAA;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAoBrE,OAAO,cAAc,CAAA;AAIrB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAoUvE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAqD,MAAM,OAAO,CAAA;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAiBrE,OAAO,cAAc,CAAA;AAKrB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CA0SvE,CAAA"}
@@ -4,11 +4,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { getTranslation } from '@payloadcms/translations';
5
5
  import { hoistQueryParamsToAnd, transformColumnsToPreferences } from 'payload/shared';
6
6
  import React, { Fragment, useCallback, useEffect, useState } from 'react';
7
- import { Button } from '../../elements/Button/index.js';
8
7
  import { Pill } from '../../elements/Pill/index.js';
9
8
  import { useEffectEvent } from '../../hooks/useEffectEvent.js';
10
9
  import { ChevronIcon } from '../../icons/Chevron/index.js';
11
- import { PlusIcon } from '../../icons/Plus/index.js';
12
10
  import { useAuth } from '../../providers/Auth/index.js';
13
11
  import { useConfig } from '../../providers/Config/index.js';
14
12
  import { ListQueryProvider } from '../../providers/ListQuery/index.js';
@@ -18,11 +16,11 @@ import { useTranslation } from '../../providers/Translation/index.js';
18
16
  import { AnimateHeight } from '../AnimateHeight/index.js';
19
17
  import { ColumnSelector } from '../ColumnSelector/index.js';
20
18
  import { useDocumentDrawer } from '../DocumentDrawer/index.js';
21
- import { Popup, PopupList } from '../Popup/index.js';
22
19
  import { RelationshipProvider } from '../Table/RelationshipProvider/index.js';
20
+ import { AddNewButton } from './AddNewButton.js';
23
21
  import { DrawerLink } from './cells/DrawerLink/index.js';
24
- import { RelationshipTablePagination } from './Pagination.js';
25
22
  import './index.scss';
23
+ import { RelationshipTablePagination } from './Pagination.js';
26
24
  const baseClass = 'relationship-table';
27
25
  export const RelationshipTable = props => {
28
26
  const {
@@ -71,7 +69,8 @@ export const RelationshipTable = props => {
71
69
  const [collectionConfig] = useState(() => getEntityConfig({
72
70
  collectionSlug: relationTo
73
71
  }));
74
- const [selectedCollection, setSelectedCollection] = useState(Array.isArray(relationTo) ? undefined : relationTo);
72
+ const isPolymorphic = Array.isArray(relationTo);
73
+ const [selectedCollection, setSelectedCollection] = useState(isPolymorphic ? undefined : relationTo);
75
74
  const [isLoadingTable, setIsLoadingTable] = useState(!disableTable);
76
75
  const [data, setData] = useState(initialData);
77
76
  const [columnState, setColumnState] = useState();
@@ -90,7 +89,7 @@ export const RelationshipTable = props => {
90
89
  if (filterOptions) {
91
90
  newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOptions);
92
91
  }
93
- // map columns from string[] to ListPreferences['columns']
92
+ // map columns from string[] to CollectionPreferences['columns']
94
93
  const defaultColumns = field.admin.defaultColumns ? field.admin.defaultColumns.map(accessor => ({
95
94
  accessor,
96
95
  active: true
@@ -123,7 +122,7 @@ export const RelationshipTable = props => {
123
122
  useEffect(() => {
124
123
  handleTableRender(query, disableTable);
125
124
  }, [query, disableTable]);
126
- const [DocumentDrawer, DocumentDrawerToggler, {
125
+ const [DocumentDrawer,, {
127
126
  closeDrawer,
128
127
  isDrawerOpen,
129
128
  openDrawer
@@ -150,14 +149,14 @@ export const RelationshipTable = props => {
150
149
  const newDocs = data.docs.filter(doc => doc.id !== args.id);
151
150
  void renderTable(newDocs);
152
151
  }, [data?.docs, renderTable]);
153
- const canCreate = allowCreate !== false && permissions?.collections?.[Array.isArray(relationTo) ? relationTo[0] : relationTo]?.create;
152
+ const canCreate = allowCreate !== false && permissions?.collections?.[isPolymorphic ? relationTo[0] : relationTo]?.create;
154
153
  useEffect(() => {
155
- if (Array.isArray(relationTo) && selectedCollection) {
154
+ if (isPolymorphic && selectedCollection) {
156
155
  openDrawer();
157
156
  }
158
- }, [selectedCollection, openDrawer, relationTo]);
157
+ }, [selectedCollection, openDrawer, isPolymorphic]);
159
158
  useEffect(() => {
160
- if (Array.isArray(relationTo) && !isDrawerOpen && selectedCollection) {
159
+ if (isPolymorphic && !isDrawerOpen && selectedCollection) {
161
160
  setSelectedCollection(undefined);
162
161
  }
163
162
  // eslint-disable-next-line react-compiler/react-compiler -- TODO: fix
@@ -169,37 +168,18 @@ export const RelationshipTable = props => {
169
168
  className: `${baseClass}__header`,
170
169
  children: [Label, /*#__PURE__*/_jsxs("div", {
171
170
  className: `${baseClass}__actions`,
172
- children: [!Array.isArray(relationTo) && canCreate && /*#__PURE__*/_jsx(DocumentDrawerToggler, {
173
- className: `${baseClass}__add-new`,
174
- children: i18n.t('fields:addNew')
175
- }), Array.isArray(relationTo) && /*#__PURE__*/_jsx(Fragment, {
176
- children: /*#__PURE__*/_jsx(Popup, {
177
- button: /*#__PURE__*/_jsxs(Button, {
178
- buttonStyle: "none",
179
- className: `${baseClass}__add-new-polymorphic`,
180
- children: [i18n.t('fields:addNew'), /*#__PURE__*/_jsx(PlusIcon, {})]
181
- }),
182
- buttonType: "custom",
183
- horizontalAlign: "center",
184
- render: ({
185
- close: closePopup
186
- }) => /*#__PURE__*/_jsx(PopupList.ButtonGroup, {
187
- children: relationTo.map(relatedCollection => {
188
- if (permissions.collections[relatedCollection].create) {
189
- return /*#__PURE__*/_jsx(PopupList.Button, {
190
- className: `${baseClass}__relation-button--${relatedCollection}`,
191
- onClick: () => {
192
- closePopup();
193
- setSelectedCollection(relatedCollection);
194
- },
195
- children: getTranslation(config.collections.find(each => each.slug === relatedCollection).labels.singular, i18n)
196
- }, relatedCollection);
197
- }
198
- return null;
199
- })
200
- }),
201
- size: "medium"
202
- })
171
+ children: [/*#__PURE__*/_jsx(AddNewButton, {
172
+ allowCreate: allowCreate !== false,
173
+ baseClass: baseClass,
174
+ buttonStyle: "none",
175
+ className: `${baseClass}__add-new${isPolymorphic ? '-polymorphic' : ' doc-drawer__toggler'}`,
176
+ collections: config.collections,
177
+ i18n: i18n,
178
+ icon: isPolymorphic ? 'plus' : undefined,
179
+ label: i18n.t('fields:addNew'),
180
+ onClick: isPolymorphic ? setSelectedCollection : openDrawer,
181
+ permissions: permissions,
182
+ relationTo: relationTo
203
183
  }), /*#__PURE__*/_jsx(Pill, {
204
184
  "aria-controls": `${baseClass}-columns`,
205
185
  "aria-expanded": openColumnSelector,
@@ -220,13 +200,19 @@ export const RelationshipTable = props => {
220
200
  className: `${baseClass}__no-results`,
221
201
  children: [/*#__PURE__*/_jsx("p", {
222
202
  children: i18n.t('general:noResults', {
223
- label: Array.isArray(relationTo) ? i18n.t('general:documents') : getTranslation(collectionConfig?.labels?.plural, i18n)
224
- })
225
- }), canCreate && /*#__PURE__*/_jsx(Button, {
226
- onClick: openDrawer,
227
- children: i18n.t('general:createNewLabel', {
228
- label: getTranslation(collectionConfig?.labels?.singular, i18n)
203
+ label: isPolymorphic ? i18n.t('general:documents') : getTranslation(collectionConfig?.labels?.plural, i18n)
229
204
  })
205
+ }), /*#__PURE__*/_jsx(AddNewButton, {
206
+ allowCreate: canCreate,
207
+ baseClass: baseClass,
208
+ collections: config.collections,
209
+ i18n: i18n,
210
+ label: i18n.t('general:createNewLabel', {
211
+ label: isPolymorphic ? i18n.t('general:document') : getTranslation(collectionConfig?.labels?.singular, i18n)
212
+ }),
213
+ onClick: isPolymorphic ? setSelectedCollection : openDrawer,
214
+ permissions: permissions,
215
+ relationTo: relationTo
230
216
  })]
231
217
  }), data?.docs && data.docs.length > 0 && /*#__PURE__*/_jsx(RelationshipProvider, {
232
218
  children: /*#__PURE__*/_jsx(ListQueryProvider, {
@@ -238,7 +224,7 @@ export const RelationshipTable = props => {
238
224
  onQueryChange: setQuery,
239
225
  orderableFieldName: !field.orderable || Array.isArray(field.collection) ? undefined : `_${field.collection}_${fieldPath.replaceAll('.', '_')}_order`,
240
226
  children: /*#__PURE__*/_jsxs(TableColumnsProvider, {
241
- collectionSlug: Array.isArray(relationTo) ? relationTo[0] : relationTo,
227
+ collectionSlug: isPolymorphic ? relationTo[0] : relationTo,
242
228
  columnState: columnState,
243
229
  LinkedCellOverride: /*#__PURE__*/_jsx(DrawerLink, {
244
230
  onDrawerDelete: onDrawerDelete,