@payloadcms/ui 3.29.0-canary.6 → 3.29.0-canary.7

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 (51) hide show
  1. package/dist/elements/Autosave/index.js +1 -1
  2. package/dist/elements/Autosave/index.js.map +1 -1
  3. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  4. package/dist/elements/BulkUpload/FileSidebar/index.js +5 -5
  5. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  6. package/dist/elements/BulkUpload/FormsManager/index.js +1 -1
  7. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  8. package/dist/elements/DocumentControls/index.js +1 -1
  9. package/dist/elements/DocumentControls/index.js.map +1 -1
  10. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js +1 -1
  11. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -1
  12. package/dist/elements/Table/DefaultCell/fields/Date/index.js +1 -1
  13. package/dist/elements/Table/DefaultCell/fields/Date/index.js.map +1 -1
  14. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +1 -1
  15. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
  16. package/dist/elements/Thumbnail/index.js +1 -1
  17. package/dist/elements/Thumbnail/index.js.map +1 -1
  18. package/dist/elements/ThumbnailCard/index.js +1 -1
  19. package/dist/elements/ThumbnailCard/index.js.map +1 -1
  20. package/dist/exports/client/index.js +11 -11
  21. package/dist/exports/client/index.js.map +4 -4
  22. package/dist/exports/shared/index.d.ts +2 -2
  23. package/dist/exports/shared/index.d.ts.map +1 -1
  24. package/dist/exports/shared/index.js +2 -2
  25. package/dist/exports/shared/index.js.map +4 -4
  26. package/dist/fields/Group/index.scss +12 -6
  27. package/dist/fields/Relationship/optionsReducer.js +1 -1
  28. package/dist/fields/Relationship/optionsReducer.js.map +1 -1
  29. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  30. package/dist/providers/DocumentInfo/index.js +1 -1
  31. package/dist/providers/DocumentInfo/index.js.map +1 -1
  32. package/dist/styles.css +1 -1
  33. package/dist/utilities/{formatDate.d.ts → formatDocTitle/formatDateTitle.d.ts} +1 -1
  34. package/dist/utilities/formatDocTitle/formatDateTitle.d.ts.map +1 -0
  35. package/dist/utilities/{formatDate.js → formatDocTitle/formatDateTitle.js} +1 -1
  36. package/dist/utilities/formatDocTitle/formatDateTitle.js.map +1 -0
  37. package/dist/utilities/formatDocTitle/formatLexicalDocTitle.d.ts +19 -0
  38. package/dist/utilities/formatDocTitle/formatLexicalDocTitle.d.ts.map +1 -0
  39. package/dist/utilities/formatDocTitle/formatLexicalDocTitle.js +19 -0
  40. package/dist/utilities/formatDocTitle/formatLexicalDocTitle.js.map +1 -0
  41. package/dist/utilities/{formatDocTitle.d.ts → formatDocTitle/index.d.ts} +2 -2
  42. package/dist/utilities/formatDocTitle/index.d.ts.map +1 -0
  43. package/dist/utilities/{formatDocTitle.js → formatDocTitle/index.js} +11 -3
  44. package/dist/utilities/formatDocTitle/index.js.map +1 -0
  45. package/dist/views/Edit/SetDocumentTitle/index.js +1 -1
  46. package/dist/views/Edit/SetDocumentTitle/index.js.map +1 -1
  47. package/package.json +5 -5
  48. package/dist/utilities/formatDate.d.ts.map +0 -1
  49. package/dist/utilities/formatDate.js.map +0 -1
  50. package/dist/utilities/formatDocTitle.d.ts.map +0 -1
  51. package/dist/utilities/formatDocTitle.js.map +0 -1
@@ -14,7 +14,7 @@ import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
14
14
  import { useLocale } from '../../providers/Locale/index.js';
15
15
  import './index.scss';
16
16
  import { useTranslation } from '../../providers/Translation/index.js';
17
- import { formatTimeToNow } from '../../utilities/formatDate.js';
17
+ import { formatTimeToNow } from '../../utilities/formatDocTitle/formatDateTitle.js';
18
18
  import { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.js';
19
19
  import { LeaveWithoutSaving } from '../LeaveWithoutSaving/index.js';
20
20
  const baseClass = 'autosave';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dequal","reduceFieldsToValues","versionDefaults","React","useDeferredValue","useEffect","useRef","useState","toast","useAllFormFields","useForm","useFormModified","useFormProcessing","useFormSubmitted","useDebounce","useEffectEvent","useConfig","useDocumentEvents","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","LeaveWithoutSaving","baseClass","minimumAnimationTime","Autosave","id","collection","global","globalDoc","config","routes","api","serverURL","docConfig","incrementVersionCount","lastUpdateTime","mostRecentVersionIsAutosaved","setLastUpdateTime","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","updateSavedDocumentData","queueRef","isProcessingRef","reportUpdate","dispatchFields","isValid","setBackgroundProcessing","setIsValid","setSubmitted","isFormProcessing","fields","modified","submitted","code","locale","i18n","t","versionsConfig","versions","interval","autosaveInterval","drafts","autosave","validateOnDraft","Boolean","validate","_saving","setSaving","saving","debouncedFields","fieldRef","modifiedRef","localeRef","isValidRef","current","processQueue","useCallback","length","latestAction","autosaveTimeoutRef","handleAutosave","undefined","startTimestamp","endTimestamp","hideIndicator","setTimeout","stopAutoSaveIndicator","Date","getTime","url","method","entitySlug","slug","data","valid","_status","skipSubmission","res","fetch","body","JSON","stringify","credentials","headers","language","error","newDate","status","updatedAt","toISOString","prev","json","errors","Array","isArray","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","push","forEach","dataError","field","type","document","doc","result","didMount","previousDebouncedFieldValues","debouncedFieldValues","clearTimeout","_jsxs","className","_jsx","Fragment","distance","date"],"sources":["../../../src/elements/Autosave/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport type { ClientCollectionConfig, ClientGlobalConfig } from 'payload'\n\nimport { dequal } from 'dequal/lite'\nimport { reduceFieldsToValues, versionDefaults } from 'payload/shared'\nimport React, { useDeferredValue, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport './index.scss'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDate.js'\nimport { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.js'\nimport { LeaveWithoutSaving } from '../LeaveWithoutSaving/index.js'\n\nconst baseClass = 'autosave'\n// The minimum time the saving state should be shown\nconst minimumAnimationTime = 1000\n\nexport type Props = {\n collection?: ClientCollectionConfig\n global?: ClientGlobalConfig\n id?: number | string\n publishedDocUpdatedAt: string\n}\n\nexport const Autosave: React.FC<Props> = ({ id, collection, global: globalDoc }) => {\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const {\n docConfig,\n incrementVersionCount,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n setLastUpdateTime,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n updateSavedDocumentData,\n } = useDocumentInfo()\n const queueRef = useRef([])\n const isProcessingRef = useRef(false)\n\n const { reportUpdate } = useDocumentEvents()\n const { dispatchFields, isValid, setBackgroundProcessing, setIsValid, setSubmitted } = useForm()\n const isFormProcessing = useFormProcessing()\n\n const [fields] = useAllFormFields()\n const modified = useFormModified()\n const submitted = useFormSubmitted()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n const versionsConfig = docConfig?.versions\n let interval = versionDefaults.autosaveInterval\n\n if (versionsConfig.drafts && versionsConfig.drafts.autosave) {\n interval = versionsConfig.drafts.autosave.interval\n }\n\n const validateOnDraft = Boolean(\n docConfig?.versions?.drafts && docConfig?.versions?.drafts.validate,\n )\n\n const [_saving, setSaving] = useState(false)\n const saving = useDeferredValue(_saving)\n const debouncedFields = useDebounce(fields, interval)\n const fieldRef = useRef(fields)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n /**\n * Track the validation internally so Autosave can determine when to run queue processing again\n * Helps us prevent infinite loops when the queue is processing and the form is invalid\n */\n const isValidRef = useRef(isValid)\n\n // Store fields in ref so the autosave func\n // can always retrieve the most to date copies\n // after the timeout has executed\n fieldRef.current = fields\n\n // Store modified in ref so the autosave func\n // can bail out if modified becomes false while\n // timing out during autosave\n modifiedRef.current = modified\n\n // Store locale in ref so the autosave func\n // can always retrieve the most to date locale\n localeRef.current = locale\n\n const processQueue = React.useCallback(async () => {\n if (isProcessingRef.current || queueRef.current.length === 0) {\n return\n }\n\n // Do not autosave if the form is already processing (e.g. if the user clicked the publish button\n // right before this autosave runs), as parallel updates could cause conflicts\n if (isFormProcessing) {\n queueRef.current = []\n return\n }\n\n if (!isValidRef.current) {\n // Clear queue so we don't end up in an infinite loop\n queueRef.current = []\n // Reset internal validation state so queue processing can run again\n isValidRef.current = true\n return\n }\n isProcessingRef.current = true\n\n const latestAction = queueRef.current[queueRef.current.length - 1]\n queueRef.current = []\n\n setBackgroundProcessing(true)\n try {\n await latestAction()\n } finally {\n isProcessingRef.current = false\n setBackgroundProcessing(false)\n if (queueRef.current.length > 0) {\n await processQueue()\n }\n }\n setBackgroundProcessing(false)\n }, [isFormProcessing, setBackgroundProcessing])\n\n const autosaveTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n const handleAutosave = useEffectEvent(() => {\n autosaveTimeoutRef.current = undefined\n // We need to log the time in order to figure out if we need to trigger the state off later\n let startTimestamp = undefined\n let endTimestamp = undefined\n\n const hideIndicator = () => {\n // If request was faster than minimum animation time, animate the difference\n if (endTimestamp - startTimestamp < minimumAnimationTime) {\n autosaveTimeoutRef.current = setTimeout(\n () => {\n setSaving(false)\n },\n minimumAnimationTime - (endTimestamp - startTimestamp),\n )\n } else {\n stopAutoSaveIndicator()\n }\n }\n\n const autosave = async () => {\n if (modified) {\n startTimestamp = new Date().getTime()\n\n setSaving(true)\n\n let url: string\n let method: string\n let entitySlug: string\n\n if (collection && id) {\n entitySlug = collection.slug\n url = `${serverURL}${api}/${entitySlug}/${id}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'PATCH'\n }\n\n if (globalDoc) {\n entitySlug = globalDoc.slug\n url = `${serverURL}${api}/globals/${entitySlug}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'POST'\n }\n\n if (url) {\n if (modifiedRef.current) {\n const { data, valid } = reduceFieldsToValuesWithValidation(fieldRef.current, true)\n\n data._status = 'draft'\n\n const skipSubmission =\n submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate\n\n if (!skipSubmission && isValidRef.current) {\n let res\n try {\n res = await fetch(url, {\n body: JSON.stringify(data),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method,\n })\n } catch (error) {\n // Swallow Error\n }\n\n const newDate = new Date()\n // We need to log the time in order to figure out if we need to trigger the state off later\n endTimestamp = newDate.getTime()\n\n if (res.status === 200) {\n setLastUpdateTime(newDate.getTime())\n\n reportUpdate({\n id,\n entitySlug,\n updatedAt: newDate.toISOString(),\n })\n\n if (!mostRecentVersionIsAutosaved) {\n incrementVersionCount()\n setMostRecentVersionIsAutosaved(true)\n setUnpublishedVersionCount((prev) => prev + 1)\n }\n }\n const json = await res.json()\n\n if (versionsConfig?.drafts && versionsConfig?.drafts?.validate && json?.errors) {\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data)) {\n err.data.forEach((dataError) => {\n if (dataError?.field) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n toast.error(err.message || i18n.t('error:unknown'))\n })\n\n // Set valid to false internally so the queue doesn't process\n isValidRef.current = false\n setIsValid(false)\n setSubmitted(true)\n hideIndicator()\n return\n }\n } else {\n // If it's not an error then we can update the document data inside the context\n const document = json?.doc || json?.result\n\n // Manually update the data since this function doesn't fire the `submit` function from useForm\n if (document) {\n setIsValid(true)\n\n // Reset internal state allowing the queue to process\n isValidRef.current = true\n updateSavedDocumentData(document)\n }\n }\n\n hideIndicator()\n }\n }\n }\n }\n }\n\n queueRef.current.push(autosave)\n void processQueue()\n })\n\n const didMount = useRef(false)\n const previousDebouncedFieldValues = useRef(reduceFieldsToValues(debouncedFields))\n // When debounced fields change, autosave\n useEffect(() => {\n /**\n * Ensure autosave doesn't run on mount\n */\n if (!didMount.current) {\n didMount.current = true\n return\n }\n\n /**\n * Ensure autosave only runs if the form data changes, not every time the entire form state changes\n */\n const debouncedFieldValues = reduceFieldsToValues(debouncedFields)\n if (dequal(debouncedFieldValues, previousDebouncedFieldValues)) {\n return\n }\n\n previousDebouncedFieldValues.current = debouncedFieldValues\n\n handleAutosave()\n }, [debouncedFields])\n\n /**\n * If component unmounts, clear the autosave timeout\n */\n useEffect(() => {\n return () => {\n stopAutoSaveIndicator()\n }\n }, [])\n\n const stopAutoSaveIndicator = useEffectEvent(() => {\n if (autosaveTimeoutRef.current) {\n clearTimeout(autosaveTimeoutRef.current)\n }\n\n setSaving(false)\n })\n\n return (\n <div className={baseClass}>\n {validateOnDraft && !isValid && <LeaveWithoutSaving />}\n {saving && t('general:saving')}\n {!saving && Boolean(lastUpdateTime) && (\n <React.Fragment>\n {t('version:lastSavedAgo', {\n distance: formatTimeToNow({ date: lastUpdateTime, i18n }),\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["dequal","reduceFieldsToValues","versionDefaults","React","useDeferredValue","useEffect","useRef","useState","toast","useAllFormFields","useForm","useFormModified","useFormProcessing","useFormSubmitted","useDebounce","useEffectEvent","useConfig","useDocumentEvents","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","LeaveWithoutSaving","baseClass","minimumAnimationTime","Autosave","id","collection","global","globalDoc","config","routes","api","serverURL","docConfig","incrementVersionCount","lastUpdateTime","mostRecentVersionIsAutosaved","setLastUpdateTime","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","updateSavedDocumentData","queueRef","isProcessingRef","reportUpdate","dispatchFields","isValid","setBackgroundProcessing","setIsValid","setSubmitted","isFormProcessing","fields","modified","submitted","code","locale","i18n","t","versionsConfig","versions","interval","autosaveInterval","drafts","autosave","validateOnDraft","Boolean","validate","_saving","setSaving","saving","debouncedFields","fieldRef","modifiedRef","localeRef","isValidRef","current","processQueue","useCallback","length","latestAction","autosaveTimeoutRef","handleAutosave","undefined","startTimestamp","endTimestamp","hideIndicator","setTimeout","stopAutoSaveIndicator","Date","getTime","url","method","entitySlug","slug","data","valid","_status","skipSubmission","res","fetch","body","JSON","stringify","credentials","headers","language","error","newDate","status","updatedAt","toISOString","prev","json","errors","Array","isArray","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","push","forEach","dataError","field","type","document","doc","result","didMount","previousDebouncedFieldValues","debouncedFieldValues","clearTimeout","_jsxs","className","_jsx","Fragment","distance","date"],"sources":["../../../src/elements/Autosave/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport type { ClientCollectionConfig, ClientGlobalConfig } from 'payload'\n\nimport { dequal } from 'dequal/lite'\nimport { reduceFieldsToValues, versionDefaults } from 'payload/shared'\nimport React, { useDeferredValue, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport './index.scss'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDocTitle/formatDateTitle.js'\nimport { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.js'\nimport { LeaveWithoutSaving } from '../LeaveWithoutSaving/index.js'\n\nconst baseClass = 'autosave'\n// The minimum time the saving state should be shown\nconst minimumAnimationTime = 1000\n\nexport type Props = {\n collection?: ClientCollectionConfig\n global?: ClientGlobalConfig\n id?: number | string\n publishedDocUpdatedAt: string\n}\n\nexport const Autosave: React.FC<Props> = ({ id, collection, global: globalDoc }) => {\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const {\n docConfig,\n incrementVersionCount,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n setLastUpdateTime,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n updateSavedDocumentData,\n } = useDocumentInfo()\n const queueRef = useRef([])\n const isProcessingRef = useRef(false)\n\n const { reportUpdate } = useDocumentEvents()\n const { dispatchFields, isValid, setBackgroundProcessing, setIsValid, setSubmitted } = useForm()\n const isFormProcessing = useFormProcessing()\n\n const [fields] = useAllFormFields()\n const modified = useFormModified()\n const submitted = useFormSubmitted()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n const versionsConfig = docConfig?.versions\n let interval = versionDefaults.autosaveInterval\n\n if (versionsConfig.drafts && versionsConfig.drafts.autosave) {\n interval = versionsConfig.drafts.autosave.interval\n }\n\n const validateOnDraft = Boolean(\n docConfig?.versions?.drafts && docConfig?.versions?.drafts.validate,\n )\n\n const [_saving, setSaving] = useState(false)\n const saving = useDeferredValue(_saving)\n const debouncedFields = useDebounce(fields, interval)\n const fieldRef = useRef(fields)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n /**\n * Track the validation internally so Autosave can determine when to run queue processing again\n * Helps us prevent infinite loops when the queue is processing and the form is invalid\n */\n const isValidRef = useRef(isValid)\n\n // Store fields in ref so the autosave func\n // can always retrieve the most to date copies\n // after the timeout has executed\n fieldRef.current = fields\n\n // Store modified in ref so the autosave func\n // can bail out if modified becomes false while\n // timing out during autosave\n modifiedRef.current = modified\n\n // Store locale in ref so the autosave func\n // can always retrieve the most to date locale\n localeRef.current = locale\n\n const processQueue = React.useCallback(async () => {\n if (isProcessingRef.current || queueRef.current.length === 0) {\n return\n }\n\n // Do not autosave if the form is already processing (e.g. if the user clicked the publish button\n // right before this autosave runs), as parallel updates could cause conflicts\n if (isFormProcessing) {\n queueRef.current = []\n return\n }\n\n if (!isValidRef.current) {\n // Clear queue so we don't end up in an infinite loop\n queueRef.current = []\n // Reset internal validation state so queue processing can run again\n isValidRef.current = true\n return\n }\n isProcessingRef.current = true\n\n const latestAction = queueRef.current[queueRef.current.length - 1]\n queueRef.current = []\n\n setBackgroundProcessing(true)\n try {\n await latestAction()\n } finally {\n isProcessingRef.current = false\n setBackgroundProcessing(false)\n if (queueRef.current.length > 0) {\n await processQueue()\n }\n }\n setBackgroundProcessing(false)\n }, [isFormProcessing, setBackgroundProcessing])\n\n const autosaveTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n const handleAutosave = useEffectEvent(() => {\n autosaveTimeoutRef.current = undefined\n // We need to log the time in order to figure out if we need to trigger the state off later\n let startTimestamp = undefined\n let endTimestamp = undefined\n\n const hideIndicator = () => {\n // If request was faster than minimum animation time, animate the difference\n if (endTimestamp - startTimestamp < minimumAnimationTime) {\n autosaveTimeoutRef.current = setTimeout(\n () => {\n setSaving(false)\n },\n minimumAnimationTime - (endTimestamp - startTimestamp),\n )\n } else {\n stopAutoSaveIndicator()\n }\n }\n\n const autosave = async () => {\n if (modified) {\n startTimestamp = new Date().getTime()\n\n setSaving(true)\n\n let url: string\n let method: string\n let entitySlug: string\n\n if (collection && id) {\n entitySlug = collection.slug\n url = `${serverURL}${api}/${entitySlug}/${id}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'PATCH'\n }\n\n if (globalDoc) {\n entitySlug = globalDoc.slug\n url = `${serverURL}${api}/globals/${entitySlug}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'POST'\n }\n\n if (url) {\n if (modifiedRef.current) {\n const { data, valid } = reduceFieldsToValuesWithValidation(fieldRef.current, true)\n\n data._status = 'draft'\n\n const skipSubmission =\n submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate\n\n if (!skipSubmission && isValidRef.current) {\n let res\n try {\n res = await fetch(url, {\n body: JSON.stringify(data),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method,\n })\n } catch (error) {\n // Swallow Error\n }\n\n const newDate = new Date()\n // We need to log the time in order to figure out if we need to trigger the state off later\n endTimestamp = newDate.getTime()\n\n if (res.status === 200) {\n setLastUpdateTime(newDate.getTime())\n\n reportUpdate({\n id,\n entitySlug,\n updatedAt: newDate.toISOString(),\n })\n\n if (!mostRecentVersionIsAutosaved) {\n incrementVersionCount()\n setMostRecentVersionIsAutosaved(true)\n setUnpublishedVersionCount((prev) => prev + 1)\n }\n }\n const json = await res.json()\n\n if (versionsConfig?.drafts && versionsConfig?.drafts?.validate && json?.errors) {\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data)) {\n err.data.forEach((dataError) => {\n if (dataError?.field) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n toast.error(err.message || i18n.t('error:unknown'))\n })\n\n // Set valid to false internally so the queue doesn't process\n isValidRef.current = false\n setIsValid(false)\n setSubmitted(true)\n hideIndicator()\n return\n }\n } else {\n // If it's not an error then we can update the document data inside the context\n const document = json?.doc || json?.result\n\n // Manually update the data since this function doesn't fire the `submit` function from useForm\n if (document) {\n setIsValid(true)\n\n // Reset internal state allowing the queue to process\n isValidRef.current = true\n updateSavedDocumentData(document)\n }\n }\n\n hideIndicator()\n }\n }\n }\n }\n }\n\n queueRef.current.push(autosave)\n void processQueue()\n })\n\n const didMount = useRef(false)\n const previousDebouncedFieldValues = useRef(reduceFieldsToValues(debouncedFields))\n // When debounced fields change, autosave\n useEffect(() => {\n /**\n * Ensure autosave doesn't run on mount\n */\n if (!didMount.current) {\n didMount.current = true\n return\n }\n\n /**\n * Ensure autosave only runs if the form data changes, not every time the entire form state changes\n */\n const debouncedFieldValues = reduceFieldsToValues(debouncedFields)\n if (dequal(debouncedFieldValues, previousDebouncedFieldValues)) {\n return\n }\n\n previousDebouncedFieldValues.current = debouncedFieldValues\n\n handleAutosave()\n }, [debouncedFields])\n\n /**\n * If component unmounts, clear the autosave timeout\n */\n useEffect(() => {\n return () => {\n stopAutoSaveIndicator()\n }\n }, [])\n\n const stopAutoSaveIndicator = useEffectEvent(() => {\n if (autosaveTimeoutRef.current) {\n clearTimeout(autosaveTimeoutRef.current)\n }\n\n setSaving(false)\n })\n\n return (\n <div className={baseClass}>\n {validateOnDraft && !isValid && <LeaveWithoutSaving />}\n {saving && t('general:saving')}\n {!saving && Boolean(lastUpdateTime) && (\n <React.Fragment>\n {t('version:lastSavedAgo', {\n distance: formatTimeToNow({ date: lastUpdateTime, i18n }),\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n"],"mappings":"AAAA;;;AAIA,SAASA,MAAM,QAAQ;AACvB,SAASC,oBAAoB,EAAEC,eAAe,QAAQ;AACtD,OAAOC,KAAA,IAASC,gBAAgB,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AACrE,SAASC,KAAK,QAAQ;AAEtB,SACEC,gBAAgB,EAChBC,OAAO,EACPC,eAAe,EACfC,iBAAiB,EACjBC,gBAAgB,QACX;AACP,SAASC,WAAW,QAAQ;AAC5B,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,eAAe,QAAQ;AAChC,SAASC,SAAS,QAAQ;AAC1B,OAAO;AACP,SAASC,cAAc,QAAQ;AAC/B,SAASC,eAAe,QAAQ;AAChC,SAASC,kCAAkC,QAAQ;AACnD,SAASC,kBAAkB,QAAQ;AAEnC,MAAMC,SAAA,GAAY;AAClB;AACA,MAAMC,oBAAA,GAAuB;AAS7B,OAAO,MAAMC,QAAA,GAA4BA,CAAC;EAAEC,EAAE;EAAEC,UAAU;EAAEC,MAAA,EAAQC;AAAS,CAAE;EAC7E,MAAM;IACJC,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS;EACV,CACF,GAAGlB,SAAA;EACJ,MAAM;IACJmB,SAAS;IACTC,qBAAqB;IACrBC,cAAc;IACdC,4BAA4B;IAC5BC,iBAAiB;IACjBC,+BAA+B;IAC/BC,0BAA0B;IAC1BC;EAAuB,CACxB,GAAGxB,eAAA;EACJ,MAAMyB,QAAA,GAAWrC,MAAA,CAAO,EAAE;EAC1B,MAAMsC,eAAA,GAAkBtC,MAAA,CAAO;EAE/B,MAAM;IAAEuC;EAAY,CAAE,GAAG5B,iBAAA;EACzB,MAAM;IAAE6B,cAAc;IAAEC,OAAO;IAAEC,uBAAuB;IAAEC,UAAU;IAAEC;EAAY,CAAE,GAAGxC,OAAA;EACvF,MAAMyC,gBAAA,GAAmBvC,iBAAA;EAEzB,MAAM,CAACwC,MAAA,CAAO,GAAG3C,gBAAA;EACjB,MAAM4C,QAAA,GAAW1C,eAAA;EACjB,MAAM2C,SAAA,GAAYzC,gBAAA;EAElB,MAAM;IAAE0C,IAAA,EAAMC;EAAM,CAAE,GAAGrC,SAAA;EACzB,MAAM;IAAEsC,IAAI;IAAEC;EAAC,CAAE,GAAGtC,cAAA;EAEpB,MAAMuC,cAAA,GAAiBxB,SAAA,EAAWyB,QAAA;EAClC,IAAIC,QAAA,GAAW3D,eAAA,CAAgB4D,gBAAgB;EAE/C,IAAIH,cAAA,CAAeI,MAAM,IAAIJ,cAAA,CAAeI,MAAM,CAACC,QAAQ,EAAE;IAC3DH,QAAA,GAAWF,cAAA,CAAeI,MAAM,CAACC,QAAQ,CAACH,QAAQ;EACpD;EAEA,MAAMI,eAAA,GAAkBC,OAAA,CACtB/B,SAAA,EAAWyB,QAAA,EAAUG,MAAA,IAAU5B,SAAA,EAAWyB,QAAA,EAAUG,MAAA,CAAOI,QAAA;EAG7D,MAAM,CAACC,OAAA,EAASC,SAAA,CAAU,GAAG9D,QAAA,CAAS;EACtC,MAAM+D,MAAA,GAASlE,gBAAA,CAAiBgE,OAAA;EAChC,MAAMG,eAAA,GAAkBzD,WAAA,CAAYsC,MAAA,EAAQS,QAAA;EAC5C,MAAMW,QAAA,GAAWlE,MAAA,CAAO8C,MAAA;EACxB,MAAMqB,WAAA,GAAcnE,MAAA,CAAO+C,QAAA;EAC3B,MAAMqB,SAAA,GAAYpE,MAAA,CAAOkD,MAAA;EACzB;;;;EAIA,MAAMmB,UAAA,GAAarE,MAAA,CAAOyC,OAAA;EAE1B;EACA;EACA;EACAyB,QAAA,CAASI,OAAO,GAAGxB,MAAA;EAEnB;EACA;EACA;EACAqB,WAAA,CAAYG,OAAO,GAAGvB,QAAA;EAEtB;EACA;EACAqB,SAAA,CAAUE,OAAO,GAAGpB,MAAA;EAEpB,MAAMqB,YAAA,GAAe1E,KAAA,CAAM2E,WAAW,CAAC;IACrC,IAAIlC,eAAA,CAAgBgC,OAAO,IAAIjC,QAAA,CAASiC,OAAO,CAACG,MAAM,KAAK,GAAG;MAC5D;IACF;IAEA;IACA;IACA,IAAI5B,gBAAA,EAAkB;MACpBR,QAAA,CAASiC,OAAO,GAAG,EAAE;MACrB;IACF;IAEA,IAAI,CAACD,UAAA,CAAWC,OAAO,EAAE;MACvB;MACAjC,QAAA,CAASiC,OAAO,GAAG,EAAE;MACrB;MACAD,UAAA,CAAWC,OAAO,GAAG;MACrB;IACF;IACAhC,eAAA,CAAgBgC,OAAO,GAAG;IAE1B,MAAMI,YAAA,GAAerC,QAAA,CAASiC,OAAO,CAACjC,QAAA,CAASiC,OAAO,CAACG,MAAM,GAAG,EAAE;IAClEpC,QAAA,CAASiC,OAAO,GAAG,EAAE;IAErB5B,uBAAA,CAAwB;IACxB,IAAI;MACF,MAAMgC,YAAA;IACR,UAAU;MACRpC,eAAA,CAAgBgC,OAAO,GAAG;MAC1B5B,uBAAA,CAAwB;MACxB,IAAIL,QAAA,CAASiC,OAAO,CAACG,MAAM,GAAG,GAAG;QAC/B,MAAMF,YAAA;MACR;IACF;IACA7B,uBAAA,CAAwB;EAC1B,GAAG,CAACG,gBAAA,EAAkBH,uBAAA,CAAwB;EAE9C,MAAMiC,kBAAA,GAAqB3E,MAAA,CAA8B;EAEzD,MAAM4E,cAAA,GAAiBnE,cAAA,CAAe;IACpCkE,kBAAA,CAAmBL,OAAO,GAAGO,SAAA;IAC7B;IACA,IAAIC,cAAA,GAAiBD,SAAA;IACrB,IAAIE,YAAA,GAAeF,SAAA;IAEnB,MAAMG,aAAA,GAAgBA,CAAA;MACpB;MACA,IAAID,YAAA,GAAeD,cAAA,GAAiB3D,oBAAA,EAAsB;QACxDwD,kBAAA,CAAmBL,OAAO,GAAGW,UAAA,CAC3B;UACElB,SAAA,CAAU;QACZ,GACA5C,oBAAA,IAAwB4D,YAAA,GAAeD,cAAa;MAExD,OAAO;QACLI,qBAAA;MACF;IACF;IAEA,MAAMxB,QAAA,GAAW,MAAAA,CAAA;MACf,IAAIX,QAAA,EAAU;QACZ+B,cAAA,GAAiB,IAAIK,IAAA,GAAOC,OAAO;QAEnCrB,SAAA,CAAU;QAEV,IAAIsB,GAAA;QACJ,IAAIC,MAAA;QACJ,IAAIC,UAAA;QAEJ,IAAIjE,UAAA,IAAcD,EAAA,EAAI;UACpBkE,UAAA,GAAajE,UAAA,CAAWkE,IAAI;UAC5BH,GAAA,GAAM,GAAGzD,SAAA,GAAYD,GAAA,IAAO4D,UAAA,IAAclE,EAAA,oCAAsC+C,SAAA,CAAUE,OAAO,EAAE;UACnGgB,MAAA,GAAS;QACX;QAEA,IAAI9D,SAAA,EAAW;UACb+D,UAAA,GAAa/D,SAAA,CAAUgE,IAAI;UAC3BH,GAAA,GAAM,GAAGzD,SAAA,GAAYD,GAAA,YAAe4D,UAAA,oCAA8CnB,SAAA,CAAUE,OAAO,EAAE;UACrGgB,MAAA,GAAS;QACX;QAEA,IAAID,GAAA,EAAK;UACP,IAAIlB,WAAA,CAAYG,OAAO,EAAE;YACvB,MAAM;cAAEmB,IAAI;cAAEC;YAAK,CAAE,GAAG1E,kCAAA,CAAmCkD,QAAA,CAASI,OAAO,EAAE;YAE7EmB,IAAA,CAAKE,OAAO,GAAG;YAEf,MAAMC,cAAA,GACJ5C,SAAA,IAAa,CAAC0C,KAAA,IAASrC,cAAA,EAAgBI,MAAA,IAAUJ,cAAA,EAAgBI,MAAA,EAAQI,QAAA;YAE3E,IAAI,CAAC+B,cAAA,IAAkBvB,UAAA,CAAWC,OAAO,EAAE;cACzC,IAAIuB,GAAA;cACJ,IAAI;gBACFA,GAAA,GAAM,MAAMC,KAAA,CAAMT,GAAA,EAAK;kBACrBU,IAAA,EAAMC,IAAA,CAAKC,SAAS,CAACR,IAAA;kBACrBS,WAAA,EAAa;kBACbC,OAAA,EAAS;oBACP,mBAAmBhD,IAAA,CAAKiD,QAAQ;oBAChC,gBAAgB;kBAClB;kBACAd;gBACF;cACF,EAAE,OAAOe,KAAA,EAAO;gBACd;cAAA;cAGF,MAAMC,OAAA,GAAU,IAAInB,IAAA;cACpB;cACAJ,YAAA,GAAeuB,OAAA,CAAQlB,OAAO;cAE9B,IAAIS,GAAA,CAAIU,MAAM,KAAK,KAAK;gBACtBtE,iBAAA,CAAkBqE,OAAA,CAAQlB,OAAO;gBAEjC7C,YAAA,CAAa;kBACXlB,EAAA;kBACAkE,UAAA;kBACAiB,SAAA,EAAWF,OAAA,CAAQG,WAAW;gBAChC;gBAEA,IAAI,CAACzE,4BAAA,EAA8B;kBACjCF,qBAAA;kBACAI,+BAAA,CAAgC;kBAChCC,0BAAA,CAA4BuE,IAAA,IAASA,IAAA,GAAO;gBAC9C;cACF;cACA,MAAMC,IAAA,GAAO,MAAMd,GAAA,CAAIc,IAAI;cAE3B,IAAItD,cAAA,EAAgBI,MAAA,IAAUJ,cAAA,EAAgBI,MAAA,EAAQI,QAAA,IAAY8C,IAAA,EAAMC,MAAA,EAAQ;gBAC9E,IAAIC,KAAA,CAAMC,OAAO,CAACH,IAAA,CAAKC,MAAM,GAAG;kBAC9B,MAAM,CAACG,WAAA,EAAaC,cAAA,CAAe,GAAGL,IAAA,CAAKC,MAAM,CAACK,MAAM,CACtD,CAAC,CAACC,SAAA,EAAWC,YAAA,CAAa,EAAEC,GAAA;oBAC1B,MAAMC,YAAA,GAAe,EAAE;oBACvB,MAAMC,eAAA,GAAkB,EAAE;oBAE1B,IAAIF,GAAA,EAAKG,OAAA,EAAS;sBAChBD,eAAA,CAAgBE,IAAI,CAACJ,GAAA;oBACvB;oBAEA,IAAIP,KAAA,CAAMC,OAAO,CAACM,GAAA,EAAK3B,IAAA,GAAO;sBAC5B2B,GAAA,CAAI3B,IAAI,CAACgC,OAAO,CAAEC,SAAA;wBAChB,IAAIA,SAAA,EAAWC,KAAA,EAAO;0BACpBN,YAAA,CAAaG,IAAI,CAACE,SAAA;wBACpB,OAAO;0BACLJ,eAAA,CAAgBE,IAAI,CAACE,SAAA;wBACvB;sBACF;oBACF;oBAEA,OAAO,CACL,C,GAAIR,SAAA,E,GAAcG,YAAA,CAAa,EAC/B,C,GAAIF,YAAA,E,GAAiBG,eAAA,CAAgB,CACtC;kBACH,GACA,CAAC,EAAE,EAAE,EAAE,CAAC;kBAGV9E,cAAA,CAAe;oBACboF,IAAA,EAAM;oBACNhB,MAAA,EAAQG;kBACV;kBAEAC,cAAA,CAAeS,OAAO,CAAEL,KAAA;oBACtBlH,KAAA,CAAMmG,KAAK,CAACe,KAAA,CAAIG,OAAO,IAAIpE,IAAA,CAAKC,CAAC,CAAC;kBACpC;kBAEA;kBACAiB,UAAA,CAAWC,OAAO,GAAG;kBACrB3B,UAAA,CAAW;kBACXC,YAAA,CAAa;kBACboC,aAAA;kBACA;gBACF;cACF,OAAO;gBACL;gBACA,MAAM6C,QAAA,GAAWlB,IAAA,EAAMmB,GAAA,IAAOnB,IAAA,EAAMoB,MAAA;gBAEpC;gBACA,IAAIF,QAAA,EAAU;kBACZlF,UAAA,CAAW;kBAEX;kBACA0B,UAAA,CAAWC,OAAO,GAAG;kBACrBlC,uBAAA,CAAwByF,QAAA;gBAC1B;cACF;cAEA7C,aAAA;YACF;UACF;QACF;MACF;IACF;IAEA3C,QAAA,CAASiC,OAAO,CAACkD,IAAI,CAAC9D,QAAA;IACtB,KAAKa,YAAA;EACP;EAEA,MAAMyD,QAAA,GAAWhI,MAAA,CAAO;EACxB,MAAMiI,4BAAA,GAA+BjI,MAAA,CAAOL,oBAAA,CAAqBsE,eAAA;EACjE;EACAlE,SAAA,CAAU;IACR;;;IAGA,IAAI,CAACiI,QAAA,CAAS1D,OAAO,EAAE;MACrB0D,QAAA,CAAS1D,OAAO,GAAG;MACnB;IACF;IAEA;;;IAGA,MAAM4D,oBAAA,GAAuBvI,oBAAA,CAAqBsE,eAAA;IAClD,IAAIvE,MAAA,CAAOwI,oBAAA,EAAsBD,4BAAA,GAA+B;MAC9D;IACF;IAEAA,4BAAA,CAA6B3D,OAAO,GAAG4D,oBAAA;IAEvCtD,cAAA;EACF,GAAG,CAACX,eAAA,CAAgB;EAEpB;;;EAGAlE,SAAA,CAAU;IACR,OAAO;MACLmF,qBAAA;IACF;EACF,GAAG,EAAE;EAEL,MAAMA,qBAAA,GAAwBzE,cAAA,CAAe;IAC3C,IAAIkE,kBAAA,CAAmBL,OAAO,EAAE;MAC9B6D,YAAA,CAAaxD,kBAAA,CAAmBL,OAAO;IACzC;IAEAP,SAAA,CAAU;EACZ;EAEA,oBACEqE,KAAA,CAAC;IAAIC,SAAA,EAAWnH,SAAA;eACbyC,eAAA,IAAmB,CAAClB,OAAA,iBAAW6F,IAAA,CAACrH,kBAAA,OAChC+C,MAAA,IAAUZ,CAAA,CAAE,mBACZ,CAACY,MAAA,IAAUJ,OAAA,CAAQ7B,cAAA,kBAClBuG,IAAA,CAACzI,KAAA,CAAM0I,QAAQ;gBACZnF,CAAA,CAAE,wBAAwB;QACzBoF,QAAA,EAAUzH,eAAA,CAAgB;UAAE0H,IAAA,EAAM1G,cAAA;UAAgBoB;QAAK;MACzD;;;AAKV","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FileSidebar/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,OAAO,cAAc,CAAA;AASrB,wBAAgB,WAAW,sBA2K1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FileSidebar/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,OAAO,cAAc,CAAA;AASrB,wBAAgB,WAAW,sBA6K1B"}
@@ -111,7 +111,7 @@ export function FileSidebar() {
111
111
  errorCount,
112
112
  formState
113
113
  } = t9;
114
- const currentFile = formState.file.value;
114
+ const currentFile = formState?.file?.value || {};
115
115
  return _jsxs("div", {
116
116
  className: [`${baseClass}__fileRowContainer`, index_0 === activeIndex && `${baseClass}__fileRowContainer--active`, errorCount && errorCount > 0 && `${baseClass}__fileRowContainer--error`].filter(Boolean).join(" "),
117
117
  children: [_jsxs("button", {
@@ -120,18 +120,18 @@ export function FileSidebar() {
120
120
  type: "button",
121
121
  children: [_jsx(Thumbnail, {
122
122
  className: `${baseClass}__thumbnail`,
123
- fileSrc: isImage(currentFile.type) ? thumbnailUrls[index_0] : undefined
123
+ fileSrc: isImage(currentFile.type) ? thumbnailUrls[index_0] : null
124
124
  }), _jsx("div", {
125
125
  className: `${baseClass}__fileDetails`,
126
126
  children: _jsx("p", {
127
127
  className: `${baseClass}__fileName`,
128
128
  title: currentFile.name,
129
- children: currentFile.name
129
+ children: currentFile.name || t("upload:noFile")
130
130
  })
131
- }), _jsx("p", {
131
+ }), currentFile instanceof File ? _jsx("p", {
132
132
  className: `${baseClass}__fileSize`,
133
133
  children: getFileSize(currentFile)
134
- }), _jsx("div", {
134
+ }) : null, _jsx("div", {
135
135
  className: `${baseClass}__remove ${baseClass}__remove--underlay`,
136
136
  children: _jsx(XIcon, {})
137
137
  }), errorCount ? _jsx(ErrorPill, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useModal","useWindowInfo","isImage","React","ChevronIcon","XIcon","useTranslation","AnimateHeight","Button","Drawer","ErrorPill","Pill","ShimmerEffect","Thumbnail","Actions","AddFilesView","useFormsManager","useBulkUpload","addMoreFilesDrawerSlug","baseClass","FileSidebar","$","activeIndex","addFiles","forms","isInitializing","removeFile","setActiveIndex","thumbnailUrls","totalErrorCount","initialFiles","maxFiles","i18n","t","closeModal","openModal","showFiles","setShowFiles","useState","breakpoints","t0","indexToRemove","handleRemoveFile","t1","filelist","handleAddFiles","getFileSize","_temp","totalFileCount","length","t2","t3","filter","Boolean","t4","join","t5","m","t6","Symbol","for","_temp2","t7","t8","t9","index_0","errorCount","formState","currentFile","file","value","_jsxs","className","index","children","onClick","type","_jsx","fileSrc","undefined","title","name","count","withMessage","buttonStyle","direction","gutter","Header","slug","onCancel","onDrop","height","Array","from","map","_temp3","file_0","animationDelay","prev","size","i","Math","floor","log","decimals","formattedSize","pow","toFixed"],"sources":["../../../../src/elements/BulkUpload/FileSidebar/index.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { isImage } from 'payload/shared'\nimport React from 'react'\n\nimport { ChevronIcon } from '../../../icons/Chevron/index.js'\nimport { XIcon } from '../../../icons/X/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { AnimateHeight } from '../../AnimateHeight/index.js'\nimport { Button } from '../../Button/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { ErrorPill } from '../../ErrorPill/index.js'\nimport { Pill } from '../../Pill/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Thumbnail } from '../../Thumbnail/index.js'\nimport { Actions } from '../ActionsBar/index.js'\nimport './index.scss'\nimport { AddFilesView } from '../AddFilesView/index.js'\nimport { useFormsManager } from '../FormsManager/index.js'\nimport { useBulkUpload } from '../index.js'\n\nconst addMoreFilesDrawerSlug = 'bulk-upload-drawer--add-more-files'\n\nconst baseClass = 'file-selections'\n\nexport function FileSidebar() {\n const {\n activeIndex,\n addFiles,\n forms,\n isInitializing,\n removeFile,\n setActiveIndex,\n thumbnailUrls,\n totalErrorCount,\n } = useFormsManager()\n const { initialFiles, maxFiles } = useBulkUpload()\n const { i18n, t } = useTranslation()\n const { closeModal, openModal } = useModal()\n const [showFiles, setShowFiles] = React.useState(false)\n const { breakpoints } = useWindowInfo()\n\n const handleRemoveFile = React.useCallback(\n (indexToRemove: number) => {\n removeFile(indexToRemove)\n },\n [removeFile],\n )\n\n const handleAddFiles = React.useCallback(\n (filelist: FileList) => {\n void addFiles(filelist)\n closeModal(addMoreFilesDrawerSlug)\n },\n [addFiles, closeModal],\n )\n\n const getFileSize = React.useCallback((file: File) => {\n const size = file.size\n const i = size === 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024))\n const decimals = i > 1 ? 1 : 0\n const formattedSize =\n (size / Math.pow(1024, i)).toFixed(decimals) + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]\n return formattedSize\n }, [])\n\n const totalFileCount = isInitializing ? initialFiles.length : forms.length\n\n return (\n <div\n className={[baseClass, showFiles && `${baseClass}__showingFiles`].filter(Boolean).join(' ')}\n >\n {breakpoints.m && showFiles ? <div className={`${baseClass}__mobileBlur`} /> : null}\n <div className={`${baseClass}__header`}>\n <div className={`${baseClass}__headerTopRow`}>\n <div className={`${baseClass}__header__text`}>\n <ErrorPill count={totalErrorCount} i18n={i18n} withMessage />\n <p>\n <strong\n title={`${totalFileCount} ${t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}`}\n >\n {totalFileCount}{' '}\n {t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}\n </strong>\n </p>\n </div>\n\n <div className={`${baseClass}__header__actions`}>\n {(typeof maxFiles === 'number' ? totalFileCount < maxFiles : true) ? (\n <Pill\n className={`${baseClass}__header__addFile`}\n onClick={() => openModal(addMoreFilesDrawerSlug)}\n >\n {t('upload:addFile')}\n </Pill>\n ) : null}\n <Button\n buttonStyle=\"transparent\"\n className={`${baseClass}__toggler`}\n onClick={() => setShowFiles((prev) => !prev)}\n >\n <span className={`${baseClass}__toggler__label`}>\n <strong\n title={`${totalFileCount} ${t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}`}\n >\n {totalFileCount}{' '}\n {t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}\n </strong>\n </span>\n <ChevronIcon direction={showFiles ? 'down' : 'up'} />\n </Button>\n\n <Drawer gutter={false} Header={null} slug={addMoreFilesDrawerSlug}>\n <AddFilesView\n onCancel={() => closeModal(addMoreFilesDrawerSlug)}\n onDrop={handleAddFiles}\n />\n </Drawer>\n </div>\n </div>\n\n <div className={`${baseClass}__header__mobileDocActions`}>\n <Actions />\n </div>\n </div>\n\n <div className={`${baseClass}__animateWrapper`}>\n <AnimateHeight height={!breakpoints.m || showFiles ? 'auto' : 0}>\n <div className={`${baseClass}__filesContainer`}>\n {isInitializing && forms.length === 0 && initialFiles.length > 0\n ? Array.from(initialFiles).map((file, index) => (\n <ShimmerEffect\n animationDelay={`calc(${index} * ${60}ms)`}\n height=\"35px\"\n key={index}\n />\n ))\n : null}\n {forms.map(({ errorCount, formState }, index) => {\n const currentFile = formState.file.value as File\n\n return (\n <div\n className={[\n `${baseClass}__fileRowContainer`,\n index === activeIndex && `${baseClass}__fileRowContainer--active`,\n errorCount && errorCount > 0 && `${baseClass}__fileRowContainer--error`,\n ]\n .filter(Boolean)\n .join(' ')}\n key={index}\n >\n <button\n className={`${baseClass}__fileRow`}\n onClick={() => setActiveIndex(index)}\n type=\"button\"\n >\n <Thumbnail\n className={`${baseClass}__thumbnail`}\n fileSrc={isImage(currentFile.type) ? thumbnailUrls[index] : undefined}\n />\n <div className={`${baseClass}__fileDetails`}>\n <p className={`${baseClass}__fileName`} title={currentFile.name}>\n {currentFile.name}\n </p>\n </div>\n <p className={`${baseClass}__fileSize`}>{getFileSize(currentFile)}</p>\n <div className={`${baseClass}__remove ${baseClass}__remove--underlay`}>\n <XIcon />\n </div>\n\n {errorCount ? (\n <ErrorPill\n className={`${baseClass}__errorCount`}\n count={errorCount}\n i18n={i18n}\n />\n ) : null}\n </button>\n\n <button\n aria-label={t('general:remove')}\n className={`${baseClass}__remove ${baseClass}__remove--overlay`}\n onClick={() => handleRemoveFile(index)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n )\n })}\n </div>\n </AnimateHeight>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useModal","useWindowInfo","isImage","React","ChevronIcon","XIcon","useTranslation","AnimateHeight","Button","Drawer","ErrorPill","Pill","ShimmerEffect","Thumbnail","Actions","AddFilesView","useFormsManager","useBulkUpload","addMoreFilesDrawerSlug","baseClass","FileSidebar","$","activeIndex","addFiles","forms","isInitializing","removeFile","setActiveIndex","thumbnailUrls","totalErrorCount","initialFiles","maxFiles","i18n","t","closeModal","openModal","showFiles","setShowFiles","useState","breakpoints","t0","indexToRemove","handleRemoveFile","t1","filelist","handleAddFiles","getFileSize","_temp","totalFileCount","length","t2","t3","filter","Boolean","t4","join","t5","m","t6","Symbol","for","_temp2","t7","t8","t9","index_0","errorCount","formState","currentFile","file","value","_jsxs","className","index","children","onClick","type","_jsx","fileSrc","title","name","File","count","withMessage","buttonStyle","direction","gutter","Header","slug","onCancel","onDrop","height","Array","from","map","_temp3","file_0","animationDelay","prev","size","i","Math","floor","log","decimals","formattedSize","pow","toFixed"],"sources":["../../../../src/elements/BulkUpload/FileSidebar/index.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { isImage } from 'payload/shared'\nimport React from 'react'\n\nimport { ChevronIcon } from '../../../icons/Chevron/index.js'\nimport { XIcon } from '../../../icons/X/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { AnimateHeight } from '../../AnimateHeight/index.js'\nimport { Button } from '../../Button/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { ErrorPill } from '../../ErrorPill/index.js'\nimport { Pill } from '../../Pill/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Thumbnail } from '../../Thumbnail/index.js'\nimport { Actions } from '../ActionsBar/index.js'\nimport './index.scss'\nimport { AddFilesView } from '../AddFilesView/index.js'\nimport { useFormsManager } from '../FormsManager/index.js'\nimport { useBulkUpload } from '../index.js'\n\nconst addMoreFilesDrawerSlug = 'bulk-upload-drawer--add-more-files'\n\nconst baseClass = 'file-selections'\n\nexport function FileSidebar() {\n const {\n activeIndex,\n addFiles,\n forms,\n isInitializing,\n removeFile,\n setActiveIndex,\n thumbnailUrls,\n totalErrorCount,\n } = useFormsManager()\n const { initialFiles, maxFiles } = useBulkUpload()\n const { i18n, t } = useTranslation()\n const { closeModal, openModal } = useModal()\n const [showFiles, setShowFiles] = React.useState(false)\n const { breakpoints } = useWindowInfo()\n\n const handleRemoveFile = React.useCallback(\n (indexToRemove: number) => {\n removeFile(indexToRemove)\n },\n [removeFile],\n )\n\n const handleAddFiles = React.useCallback(\n (filelist: FileList) => {\n void addFiles(filelist)\n closeModal(addMoreFilesDrawerSlug)\n },\n [addFiles, closeModal],\n )\n\n const getFileSize = React.useCallback((file: File) => {\n const size = file.size\n const i = size === 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024))\n const decimals = i > 1 ? 1 : 0\n const formattedSize =\n (size / Math.pow(1024, i)).toFixed(decimals) + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]\n return formattedSize\n }, [])\n\n const totalFileCount = isInitializing ? initialFiles.length : forms.length\n\n return (\n <div\n className={[baseClass, showFiles && `${baseClass}__showingFiles`].filter(Boolean).join(' ')}\n >\n {breakpoints.m && showFiles ? <div className={`${baseClass}__mobileBlur`} /> : null}\n <div className={`${baseClass}__header`}>\n <div className={`${baseClass}__headerTopRow`}>\n <div className={`${baseClass}__header__text`}>\n <ErrorPill count={totalErrorCount} i18n={i18n} withMessage />\n <p>\n <strong\n title={`${totalFileCount} ${t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}`}\n >\n {totalFileCount}{' '}\n {t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}\n </strong>\n </p>\n </div>\n\n <div className={`${baseClass}__header__actions`}>\n {(typeof maxFiles === 'number' ? totalFileCount < maxFiles : true) ? (\n <Pill\n className={`${baseClass}__header__addFile`}\n onClick={() => openModal(addMoreFilesDrawerSlug)}\n >\n {t('upload:addFile')}\n </Pill>\n ) : null}\n <Button\n buttonStyle=\"transparent\"\n className={`${baseClass}__toggler`}\n onClick={() => setShowFiles((prev) => !prev)}\n >\n <span className={`${baseClass}__toggler__label`}>\n <strong\n title={`${totalFileCount} ${t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}`}\n >\n {totalFileCount}{' '}\n {t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}\n </strong>\n </span>\n <ChevronIcon direction={showFiles ? 'down' : 'up'} />\n </Button>\n\n <Drawer gutter={false} Header={null} slug={addMoreFilesDrawerSlug}>\n <AddFilesView\n onCancel={() => closeModal(addMoreFilesDrawerSlug)}\n onDrop={handleAddFiles}\n />\n </Drawer>\n </div>\n </div>\n\n <div className={`${baseClass}__header__mobileDocActions`}>\n <Actions />\n </div>\n </div>\n\n <div className={`${baseClass}__animateWrapper`}>\n <AnimateHeight height={!breakpoints.m || showFiles ? 'auto' : 0}>\n <div className={`${baseClass}__filesContainer`}>\n {isInitializing && forms.length === 0 && initialFiles.length > 0\n ? Array.from(initialFiles).map((file, index) => (\n <ShimmerEffect\n animationDelay={`calc(${index} * ${60}ms)`}\n height=\"35px\"\n key={index}\n />\n ))\n : null}\n {forms.map(({ errorCount, formState }, index) => {\n const currentFile = (formState?.file?.value as File) || ({} as File)\n\n return (\n <div\n className={[\n `${baseClass}__fileRowContainer`,\n index === activeIndex && `${baseClass}__fileRowContainer--active`,\n errorCount && errorCount > 0 && `${baseClass}__fileRowContainer--error`,\n ]\n .filter(Boolean)\n .join(' ')}\n key={index}\n >\n <button\n className={`${baseClass}__fileRow`}\n onClick={() => setActiveIndex(index)}\n type=\"button\"\n >\n <Thumbnail\n className={`${baseClass}__thumbnail`}\n fileSrc={isImage(currentFile.type) ? thumbnailUrls[index] : null}\n />\n <div className={`${baseClass}__fileDetails`}>\n <p className={`${baseClass}__fileName`} title={currentFile.name}>\n {currentFile.name || t('upload:noFile')}\n </p>\n </div>\n {currentFile instanceof File ? (\n <p className={`${baseClass}__fileSize`}>{getFileSize(currentFile)}</p>\n ) : null}\n <div className={`${baseClass}__remove ${baseClass}__remove--underlay`}>\n <XIcon />\n </div>\n\n {errorCount ? (\n <ErrorPill\n className={`${baseClass}__errorCount`}\n count={errorCount}\n i18n={i18n}\n />\n ) : null}\n </button>\n\n <button\n aria-label={t('general:remove')}\n className={`${baseClass}__remove ${baseClass}__remove--overlay`}\n onClick={() => handleRemoveFile(index)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n )\n })}\n </div>\n </AnimateHeight>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -307,7 +307,7 @@ export function FormsManagerProvider({
307
307
  errors: fieldErrors
308
308
  })
309
309
  };
310
- if (req.status === 413) {
310
+ if (req.status === 413 || req.status === 400) {
311
311
  // file too large
312
312
  currentForms[i_2] = {
313
313
  ...currentForms[i_2],
@@ -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","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","files","isLoading","key","removeThumbnails","indexes","filter","_","includes","count","overrides","currentForms","newDocs","total","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","_jsxs","_jsx","animationDuration","overlayType","show","useFormsManager","use"],"sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Data, DocumentSlots, FormState, SanitizedDocumentPermissions } 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 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}\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})\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 }\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 }\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 req = await fetch(actionURL, {\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) {\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 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 saveAllDocs,\n setActiveIndex,\n setFormTotalErrorCount,\n thumbnailUrls: renderedThumbnails,\n totalErrorCount,\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","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","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","files","isLoading","key","removeThumbnails","indexes","filter","_","includes","count","overrides","currentForms","newDocs","total","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","_jsxs","_jsx","animationDuration","overlayType","show","useFormsManager","use"],"sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Data, DocumentSlots, FormState, SanitizedDocumentPermissions } 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 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}\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})\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 }\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 }\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 req = await fetch(actionURL, {\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 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 saveAllDocs,\n setActiveIndex,\n setFormTotalErrorCount,\n thumbnailUrls: renderedThumbnails,\n totalErrorCount,\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":[]}
@@ -9,7 +9,7 @@ import { useFormInitializing, useFormProcessing } from '../../forms/Form/context
9
9
  import { useConfig } from '../../providers/Config/index.js';
10
10
  import { useEditDepth } from '../../providers/EditDepth/index.js';
11
11
  import { useTranslation } from '../../providers/Translation/index.js';
12
- import { formatDate } from '../../utilities/formatDate.js';
12
+ import { formatDate } from '../../utilities/formatDocTitle/formatDateTitle.js';
13
13
  import { Autosave } from '../Autosave/index.js';
14
14
  import { Button } from '../Button/index.js';
15
15
  import { CopyLocaleData } from '../CopyLocaleData/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","getTranslation","formatAdminURL","React","Fragment","useEffect","useFormInitializing","useFormProcessing","useConfig","useEditDepth","useTranslation","formatDate","Autosave","Button","CopyLocaleData","DeleteDocument","DuplicateDocument","Gutter","Locked","Popup","PopupList","PreviewButton","PublishButton","RenderCustomComponent","SaveButton","SaveDraftButton","Status","baseClass","DocumentControls","props","$","id","slug","customComponents","t0","data","disableActions","disableCreate","hasSavePermission","isAccountView","isEditing","onDelete","onDrawerCreateNew","onDuplicate","onTakeOver","permissions","readOnlyForIncomingUser","redirectAfterDelete","redirectAfterDuplicate","user","t1","undefined","CustomPreviewButton","CustomPublishButton","CustomSaveButton","CustomSaveDraftButton","i18n","t","editDepth","config","getEntityConfig","collectionConfig","collectionSlug","globalConfig","globalSlug","admin","t2","localization","routes","t3","dateFormat","adminRoute","updatedAt","setUpdatedAt","useState","createdAt","setCreatedAt","processing","initializing","t4","t5","date","pattern","hasCreatePermission","create","hasDeletePermission","delete","showDotMenu","Boolean","unsavedDraftWithValidations","versions","drafts","validate","autosaveEnabled","autosave","showCopyToLocale","disableCopyToLocale","t6","_jsx","className","t7","buttonStyle","onClick","size","type","children","_jsxs","label","labels","singular","filter","join","collection","global","publishedDocUpdatedAt","timestamps","title","preview","CustomComponent","Fallback","button","disabled","horizontalAlign","verticalAlign","ButtonGroup","href","path","disableDuplicate","toString","singularLabel","buttonId","useAsTitle"],"sources":["../../../src/elements/DocumentControls/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientUser,\n SanitizedCollectionConfig,\n SanitizedCollectionPermission,\n SanitizedGlobalPermission,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { Fragment, useEffect } from 'react'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useFormInitializing, useFormProcessing } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatDate } from '../../utilities/formatDate.js'\nimport { Autosave } from '../Autosave/index.js'\nimport { Button } from '../Button/index.js'\nimport { CopyLocaleData } from '../CopyLocaleData/index.js'\nimport { DeleteDocument } from '../DeleteDocument/index.js'\nimport { DuplicateDocument } from '../DuplicateDocument/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { Locked } from '../Locked/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { PreviewButton } from '../PreviewButton/index.js'\nimport { PublishButton } from '../PublishButton/index.js'\nimport { RenderCustomComponent } from '../RenderCustomComponent/index.js'\nimport { SaveButton } from '../SaveButton/index.js'\nimport { SaveDraftButton } from '../SaveDraftButton/index.js'\nimport { Status } from '../Status/index.js'\nimport './index.scss'\n\nconst baseClass = 'doc-controls'\n\nexport const DocumentControls: React.FC<{\n readonly apiURL: string\n readonly customComponents?: {\n readonly PreviewButton?: React.ReactNode\n readonly PublishButton?: React.ReactNode\n readonly SaveButton?: React.ReactNode\n readonly SaveDraftButton?: React.ReactNode\n }\n readonly data?: any\n readonly disableActions?: boolean\n readonly disableCreate?: boolean\n readonly hasPublishPermission?: boolean\n readonly hasSavePermission?: boolean\n readonly id?: number | string\n readonly isAccountView?: boolean\n readonly isEditing?: boolean\n readonly onDelete?: DocumentDrawerContextType['onDelete']\n readonly onDrawerCreateNew?: () => void\n /* Only available if `redirectAfterDuplicate` is `false` */\n readonly onDuplicate?: DocumentDrawerContextType['onDuplicate']\n readonly onSave?: DocumentDrawerContextType['onSave']\n readonly onTakeOver?: () => void\n readonly permissions: null | SanitizedCollectionPermission | SanitizedGlobalPermission\n readonly readOnlyForIncomingUser?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly slug: SanitizedCollectionConfig['slug']\n readonly user?: ClientUser\n}> = (props) => {\n const {\n id,\n slug,\n customComponents: {\n PreviewButton: CustomPreviewButton,\n PublishButton: CustomPublishButton,\n SaveButton: CustomSaveButton,\n SaveDraftButton: CustomSaveDraftButton,\n } = {},\n data,\n disableActions,\n disableCreate,\n hasSavePermission,\n isAccountView,\n isEditing,\n onDelete,\n onDrawerCreateNew,\n onDuplicate,\n onTakeOver,\n permissions,\n readOnlyForIncomingUser,\n redirectAfterDelete,\n redirectAfterDuplicate,\n user,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const editDepth = useEditDepth()\n\n const { config, getEntityConfig } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: slug })\n\n const globalConfig = getEntityConfig({ globalSlug: slug })\n\n const {\n admin: { dateFormat },\n localization,\n routes: { admin: adminRoute },\n } = config\n\n // Settings these in state to avoid hydration issues if there is a mismatch between the server and client\n const [updatedAt, setUpdatedAt] = React.useState<string>('')\n const [createdAt, setCreatedAt] = React.useState<string>('')\n\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n\n useEffect(() => {\n if (data?.updatedAt) {\n setUpdatedAt(formatDate({ date: data.updatedAt, i18n, pattern: dateFormat }))\n }\n if (data?.createdAt) {\n setCreatedAt(formatDate({ date: data.createdAt, i18n, pattern: dateFormat }))\n }\n }, [data, i18n, dateFormat])\n\n const hasCreatePermission = permissions && 'create' in permissions && permissions.create\n\n const hasDeletePermission = permissions && 'delete' in permissions && permissions.delete\n\n const showDotMenu = Boolean(\n collectionConfig && id && !disableActions && (hasCreatePermission || hasDeletePermission),\n )\n\n const unsavedDraftWithValidations =\n !id && collectionConfig?.versions?.drafts && collectionConfig.versions?.drafts.validate\n\n const autosaveEnabled =\n (collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave) ||\n (globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave)\n\n const showCopyToLocale = localization && !collectionConfig?.admin?.disableCopyToLocale\n\n return (\n <Gutter className={baseClass}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <ul className={`${baseClass}__meta`}>\n {collectionConfig && !isEditing && !isAccountView && (\n <li className={`${baseClass}__list-item`}>\n <p className={`${baseClass}__value`}>\n {i18n.t('general:creatingNewLabel', {\n label: getTranslation(\n collectionConfig?.labels?.singular ?? i18n.t('general:document'),\n i18n,\n ),\n })}\n </p>\n </li>\n )}\n {user && readOnlyForIncomingUser && (\n <Locked className={`${baseClass}__locked-controls`} user={user} />\n )}\n {(collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts) && (\n <Fragment>\n {(globalConfig || (collectionConfig && isEditing)) && (\n <li\n className={[`${baseClass}__status`, `${baseClass}__list-item`]\n .filter(Boolean)\n .join(' ')}\n >\n <Status />\n </li>\n )}\n {hasSavePermission && autosaveEnabled && !unsavedDraftWithValidations && (\n <li className={`${baseClass}__list-item`}>\n <Autosave\n collection={collectionConfig}\n global={globalConfig}\n id={id}\n publishedDocUpdatedAt={data?.createdAt}\n />\n </li>\n )}\n </Fragment>\n )}\n {collectionConfig?.timestamps && (isEditing || isAccountView) && (\n <Fragment>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={data?.updatedAt ? updatedAt : ''}\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:lastModified')}:&nbsp;</p>\n {data?.updatedAt && <p className={`${baseClass}__value`}>{updatedAt}</p>}\n </li>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={data?.createdAt ? createdAt : ''}\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:created')}:&nbsp;</p>\n {data?.createdAt && <p className={`${baseClass}__value`}>{createdAt}</p>}\n </li>\n </Fragment>\n )}\n </ul>\n </div>\n <div className={`${baseClass}__controls-wrapper`}>\n <div className={`${baseClass}__controls`}>\n {(collectionConfig?.admin.preview || globalConfig?.admin.preview) && (\n <RenderCustomComponent\n CustomComponent={CustomPreviewButton}\n Fallback={<PreviewButton />}\n />\n )}\n {hasSavePermission && (\n <Fragment>\n {collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts ? (\n <Fragment>\n {(unsavedDraftWithValidations || !autosaveEnabled) && (\n <RenderCustomComponent\n CustomComponent={CustomSaveDraftButton}\n Fallback={<SaveDraftButton />}\n />\n )}\n <RenderCustomComponent\n CustomComponent={CustomPublishButton}\n Fallback={<PublishButton />}\n />\n </Fragment>\n ) : (\n <RenderCustomComponent\n CustomComponent={CustomSaveButton}\n Fallback={<SaveButton />}\n />\n )}\n </Fragment>\n )}\n {user && readOnlyForIncomingUser && (\n <Button\n buttonStyle=\"secondary\"\n id=\"take-over\"\n onClick={onTakeOver}\n size=\"medium\"\n type=\"button\"\n >\n {t('general:takeOver')}\n </Button>\n )}\n </div>\n {showDotMenu && !readOnlyForIncomingUser && (\n <Popup\n button={\n <div className={`${baseClass}__dots`}>\n <div />\n <div />\n <div />\n </div>\n }\n className={`${baseClass}__popup`}\n disabled={initializing || processing}\n horizontalAlign=\"right\"\n size=\"large\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {showCopyToLocale && <CopyLocaleData />}\n {hasCreatePermission && (\n <React.Fragment>\n {!disableCreate && (\n <Fragment>\n {editDepth > 1 ? (\n <PopupList.Button id=\"action-create\" onClick={onDrawerCreateNew}>\n {i18n.t('general:createNew')}\n </PopupList.Button>\n ) : (\n <PopupList.Button\n href={formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig?.slug}/create`,\n })}\n id=\"action-create\"\n >\n {i18n.t('general:createNew')}\n </PopupList.Button>\n )}\n </Fragment>\n )}\n {collectionConfig.disableDuplicate !== true && isEditing && (\n <DuplicateDocument\n id={id.toString()}\n onDuplicate={onDuplicate}\n redirectAfterDuplicate={redirectAfterDuplicate}\n singularLabel={collectionConfig?.labels?.singular}\n slug={collectionConfig?.slug}\n />\n )}\n </React.Fragment>\n )}\n {hasDeletePermission && (\n <DeleteDocument\n buttonId=\"action-delete\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n onDelete={onDelete}\n redirectAfterDelete={redirectAfterDelete}\n singularLabel={collectionConfig?.labels?.singular}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n )}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n <div className={`${baseClass}__divider`} />\n </Gutter>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","getTranslation","formatAdminURL","React","Fragment","useEffect","useFormInitializing","useFormProcessing","useConfig","useEditDepth","useTranslation","formatDate","Autosave","Button","CopyLocaleData","DeleteDocument","DuplicateDocument","Gutter","Locked","Popup","PopupList","PreviewButton","PublishButton","RenderCustomComponent","SaveButton","SaveDraftButton","Status","baseClass","DocumentControls","props","$","id","slug","customComponents","t0","data","disableActions","disableCreate","hasSavePermission","isAccountView","isEditing","onDelete","onDrawerCreateNew","onDuplicate","onTakeOver","permissions","readOnlyForIncomingUser","redirectAfterDelete","redirectAfterDuplicate","user","t1","undefined","CustomPreviewButton","CustomPublishButton","CustomSaveButton","CustomSaveDraftButton","i18n","t","editDepth","config","getEntityConfig","collectionConfig","collectionSlug","globalConfig","globalSlug","admin","t2","localization","routes","t3","dateFormat","adminRoute","updatedAt","setUpdatedAt","useState","createdAt","setCreatedAt","processing","initializing","t4","t5","date","pattern","hasCreatePermission","create","hasDeletePermission","delete","showDotMenu","Boolean","unsavedDraftWithValidations","versions","drafts","validate","autosaveEnabled","autosave","showCopyToLocale","disableCopyToLocale","t6","_jsx","className","t7","buttonStyle","onClick","size","type","children","_jsxs","label","labels","singular","filter","join","collection","global","publishedDocUpdatedAt","timestamps","title","preview","CustomComponent","Fallback","button","disabled","horizontalAlign","verticalAlign","ButtonGroup","href","path","disableDuplicate","toString","singularLabel","buttonId","useAsTitle"],"sources":["../../../src/elements/DocumentControls/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientUser,\n SanitizedCollectionConfig,\n SanitizedCollectionPermission,\n SanitizedGlobalPermission,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { Fragment, useEffect } from 'react'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useFormInitializing, useFormProcessing } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatDate } from '../../utilities/formatDocTitle/formatDateTitle.js'\nimport { Autosave } from '../Autosave/index.js'\nimport { Button } from '../Button/index.js'\nimport { CopyLocaleData } from '../CopyLocaleData/index.js'\nimport { DeleteDocument } from '../DeleteDocument/index.js'\nimport { DuplicateDocument } from '../DuplicateDocument/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { Locked } from '../Locked/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { PreviewButton } from '../PreviewButton/index.js'\nimport { PublishButton } from '../PublishButton/index.js'\nimport { RenderCustomComponent } from '../RenderCustomComponent/index.js'\nimport { SaveButton } from '../SaveButton/index.js'\nimport { SaveDraftButton } from '../SaveDraftButton/index.js'\nimport { Status } from '../Status/index.js'\nimport './index.scss'\n\nconst baseClass = 'doc-controls'\n\nexport const DocumentControls: React.FC<{\n readonly apiURL: string\n readonly customComponents?: {\n readonly PreviewButton?: React.ReactNode\n readonly PublishButton?: React.ReactNode\n readonly SaveButton?: React.ReactNode\n readonly SaveDraftButton?: React.ReactNode\n }\n readonly data?: any\n readonly disableActions?: boolean\n readonly disableCreate?: boolean\n readonly hasPublishPermission?: boolean\n readonly hasSavePermission?: boolean\n readonly id?: number | string\n readonly isAccountView?: boolean\n readonly isEditing?: boolean\n readonly onDelete?: DocumentDrawerContextType['onDelete']\n readonly onDrawerCreateNew?: () => void\n /* Only available if `redirectAfterDuplicate` is `false` */\n readonly onDuplicate?: DocumentDrawerContextType['onDuplicate']\n readonly onSave?: DocumentDrawerContextType['onSave']\n readonly onTakeOver?: () => void\n readonly permissions: null | SanitizedCollectionPermission | SanitizedGlobalPermission\n readonly readOnlyForIncomingUser?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly slug: SanitizedCollectionConfig['slug']\n readonly user?: ClientUser\n}> = (props) => {\n const {\n id,\n slug,\n customComponents: {\n PreviewButton: CustomPreviewButton,\n PublishButton: CustomPublishButton,\n SaveButton: CustomSaveButton,\n SaveDraftButton: CustomSaveDraftButton,\n } = {},\n data,\n disableActions,\n disableCreate,\n hasSavePermission,\n isAccountView,\n isEditing,\n onDelete,\n onDrawerCreateNew,\n onDuplicate,\n onTakeOver,\n permissions,\n readOnlyForIncomingUser,\n redirectAfterDelete,\n redirectAfterDuplicate,\n user,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const editDepth = useEditDepth()\n\n const { config, getEntityConfig } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: slug })\n\n const globalConfig = getEntityConfig({ globalSlug: slug })\n\n const {\n admin: { dateFormat },\n localization,\n routes: { admin: adminRoute },\n } = config\n\n // Settings these in state to avoid hydration issues if there is a mismatch between the server and client\n const [updatedAt, setUpdatedAt] = React.useState<string>('')\n const [createdAt, setCreatedAt] = React.useState<string>('')\n\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n\n useEffect(() => {\n if (data?.updatedAt) {\n setUpdatedAt(formatDate({ date: data.updatedAt, i18n, pattern: dateFormat }))\n }\n if (data?.createdAt) {\n setCreatedAt(formatDate({ date: data.createdAt, i18n, pattern: dateFormat }))\n }\n }, [data, i18n, dateFormat])\n\n const hasCreatePermission = permissions && 'create' in permissions && permissions.create\n\n const hasDeletePermission = permissions && 'delete' in permissions && permissions.delete\n\n const showDotMenu = Boolean(\n collectionConfig && id && !disableActions && (hasCreatePermission || hasDeletePermission),\n )\n\n const unsavedDraftWithValidations =\n !id && collectionConfig?.versions?.drafts && collectionConfig.versions?.drafts.validate\n\n const autosaveEnabled =\n (collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave) ||\n (globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave)\n\n const showCopyToLocale = localization && !collectionConfig?.admin?.disableCopyToLocale\n\n return (\n <Gutter className={baseClass}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <ul className={`${baseClass}__meta`}>\n {collectionConfig && !isEditing && !isAccountView && (\n <li className={`${baseClass}__list-item`}>\n <p className={`${baseClass}__value`}>\n {i18n.t('general:creatingNewLabel', {\n label: getTranslation(\n collectionConfig?.labels?.singular ?? i18n.t('general:document'),\n i18n,\n ),\n })}\n </p>\n </li>\n )}\n {user && readOnlyForIncomingUser && (\n <Locked className={`${baseClass}__locked-controls`} user={user} />\n )}\n {(collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts) && (\n <Fragment>\n {(globalConfig || (collectionConfig && isEditing)) && (\n <li\n className={[`${baseClass}__status`, `${baseClass}__list-item`]\n .filter(Boolean)\n .join(' ')}\n >\n <Status />\n </li>\n )}\n {hasSavePermission && autosaveEnabled && !unsavedDraftWithValidations && (\n <li className={`${baseClass}__list-item`}>\n <Autosave\n collection={collectionConfig}\n global={globalConfig}\n id={id}\n publishedDocUpdatedAt={data?.createdAt}\n />\n </li>\n )}\n </Fragment>\n )}\n {collectionConfig?.timestamps && (isEditing || isAccountView) && (\n <Fragment>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={data?.updatedAt ? updatedAt : ''}\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:lastModified')}:&nbsp;</p>\n {data?.updatedAt && <p className={`${baseClass}__value`}>{updatedAt}</p>}\n </li>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={data?.createdAt ? createdAt : ''}\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:created')}:&nbsp;</p>\n {data?.createdAt && <p className={`${baseClass}__value`}>{createdAt}</p>}\n </li>\n </Fragment>\n )}\n </ul>\n </div>\n <div className={`${baseClass}__controls-wrapper`}>\n <div className={`${baseClass}__controls`}>\n {(collectionConfig?.admin.preview || globalConfig?.admin.preview) && (\n <RenderCustomComponent\n CustomComponent={CustomPreviewButton}\n Fallback={<PreviewButton />}\n />\n )}\n {hasSavePermission && (\n <Fragment>\n {collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts ? (\n <Fragment>\n {(unsavedDraftWithValidations || !autosaveEnabled) && (\n <RenderCustomComponent\n CustomComponent={CustomSaveDraftButton}\n Fallback={<SaveDraftButton />}\n />\n )}\n <RenderCustomComponent\n CustomComponent={CustomPublishButton}\n Fallback={<PublishButton />}\n />\n </Fragment>\n ) : (\n <RenderCustomComponent\n CustomComponent={CustomSaveButton}\n Fallback={<SaveButton />}\n />\n )}\n </Fragment>\n )}\n {user && readOnlyForIncomingUser && (\n <Button\n buttonStyle=\"secondary\"\n id=\"take-over\"\n onClick={onTakeOver}\n size=\"medium\"\n type=\"button\"\n >\n {t('general:takeOver')}\n </Button>\n )}\n </div>\n {showDotMenu && !readOnlyForIncomingUser && (\n <Popup\n button={\n <div className={`${baseClass}__dots`}>\n <div />\n <div />\n <div />\n </div>\n }\n className={`${baseClass}__popup`}\n disabled={initializing || processing}\n horizontalAlign=\"right\"\n size=\"large\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {showCopyToLocale && <CopyLocaleData />}\n {hasCreatePermission && (\n <React.Fragment>\n {!disableCreate && (\n <Fragment>\n {editDepth > 1 ? (\n <PopupList.Button id=\"action-create\" onClick={onDrawerCreateNew}>\n {i18n.t('general:createNew')}\n </PopupList.Button>\n ) : (\n <PopupList.Button\n href={formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig?.slug}/create`,\n })}\n id=\"action-create\"\n >\n {i18n.t('general:createNew')}\n </PopupList.Button>\n )}\n </Fragment>\n )}\n {collectionConfig.disableDuplicate !== true && isEditing && (\n <DuplicateDocument\n id={id.toString()}\n onDuplicate={onDuplicate}\n redirectAfterDuplicate={redirectAfterDuplicate}\n singularLabel={collectionConfig?.labels?.singular}\n slug={collectionConfig?.slug}\n />\n )}\n </React.Fragment>\n )}\n {hasDeletePermission && (\n <DeleteDocument\n buttonId=\"action-delete\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n onDelete={onDelete}\n redirectAfterDelete={redirectAfterDelete}\n singularLabel={collectionConfig?.labels?.singular}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n )}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n <div className={`${baseClass}__divider`} />\n </Gutter>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { getTranslation } from '@payloadcms/translations';
3
3
  import React from 'react';
4
- import { formatDate } from '../../../utilities/formatDate.js';
4
+ import { formatDate } from '../../../utilities/formatDocTitle/formatDateTitle.js';
5
5
  import { Button } from '../../Button/index.js';
6
6
  import { Pill } from '../../Pill/index.js';
7
7
  export const buildUpcomingColumns = ({