@payloadcms/ui 3.52.0-internal.8a9caef → 3.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js.map +1 -1
  3. package/dist/elements/DocumentDrawer/Provider.d.ts +1 -1
  4. package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
  5. package/dist/elements/Status/index.d.ts.map +1 -1
  6. package/dist/elements/Status/index.js +9 -19
  7. package/dist/elements/Status/index.js.map +1 -1
  8. package/dist/exports/client/index.js +24 -24
  9. package/dist/exports/client/index.js.map +3 -3
  10. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  11. package/dist/forms/Form/fieldReducer.js +12 -3
  12. package/dist/forms/Form/fieldReducer.js.map +1 -1
  13. package/dist/forms/Form/index.d.ts.map +1 -1
  14. package/dist/forms/Form/index.js +6 -10
  15. package/dist/forms/Form/index.js.map +1 -1
  16. package/dist/forms/Form/mergeServerFormState.d.ts +1 -2
  17. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  18. package/dist/forms/Form/mergeServerFormState.js +4 -4
  19. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  20. package/dist/forms/Form/types.d.ts +12 -8
  21. package/dist/forms/Form/types.d.ts.map +1 -1
  22. package/dist/forms/Form/types.js.map +1 -1
  23. package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
  24. package/dist/forms/fieldSchemasToFormState/index.js +1 -0
  25. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  26. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
  27. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  28. package/dist/utilities/buildFormState.d.ts.map +1 -1
  29. package/dist/utilities/buildFormState.js.map +1 -1
  30. package/dist/views/Edit/index.d.ts.map +1 -1
  31. package/dist/views/Edit/index.js +7 -4
  32. package/dist/views/Edit/index.js.map +1 -1
  33. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Autosave/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIzE,OAAO,KAAwD,MAAM,OAAO,CAAA;AAkB5E,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwNpC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Autosave/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIzE,OAAO,KAAwD,MAAM,OAAO,CAAA;AAkB5E,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0NpC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dequal","reduceFieldsToValues","versionDefaults","React","useDeferredValue","useEffect","useRef","useState","useAllFormFields","useForm","useFormModified","useFormSubmitted","useDebounce","useEffectEvent","useQueues","useConfig","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","LeaveWithoutSaving","baseClass","minimumAnimationTime","Autosave","id","collection","global","globalDoc","config","routes","api","serverURL","docConfig","incrementVersionCount","lastUpdateTime","mostRecentVersionIsAutosaved","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","isValid","setBackgroundProcessing","submit","formState","modified","submitted","code","locale","i18n","t","versionsConfig","versions","interval","autosaveInterval","drafts","autosave","validateOnDraft","Boolean","validate","_saving","setSaving","saving","debouncedFormState","formStateRef","modifiedRef","localeRef","current","queueTask","autosaveTimeoutRef","handleAutosave","undefined","startTimestamp","endTimestamp","hideIndicator","setTimeout","stopAutoSaveIndicator","Date","getTime","url","method","entitySlug","slug","valid","skipSubmission","result","acceptValues","overrideLocalChanges","action","context","disableFormWhileProcessing","disableSuccessStatus","overrides","_status","skipValidation","res","ok","prev","newDate","afterProcess","beforeProcess","didMount","previousDebouncedData","updatedAt","_","formData","__","prevFormData","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'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueues } from '../../hooks/useQueues.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\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'\nimport './index.scss'\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\n const {\n docConfig,\n incrementVersionCount,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n } = useDocumentInfo()\n\n const { isValid, setBackgroundProcessing, submit } = useForm()\n\n const [formState] = 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\n const saving = useDeferredValue(_saving)\n\n const debouncedFormState = useDebounce(formState, interval)\n\n const formStateRef = useRef(formState)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\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 formStateRef.current = formState\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 { queueTask } = useQueues()\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 queueTask(\n 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 const { valid } = reduceFieldsToValuesWithValidation(formStateRef.current, true)\n\n const skipSubmission =\n submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate\n\n if (!skipSubmission && modifiedRef.current && url) {\n const result = await submit({\n acceptValues: {\n overrideLocalChanges: false,\n },\n action: url,\n context: {\n incrementVersionCount: false,\n },\n disableFormWhileProcessing: false,\n disableSuccessStatus: true,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: versionsConfig?.drafts && !versionsConfig?.drafts?.validate,\n })\n\n if (result && result?.res?.ok && !mostRecentVersionIsAutosaved) {\n incrementVersionCount()\n setMostRecentVersionIsAutosaved(true)\n setUnpublishedVersionCount((prev) => prev + 1)\n }\n\n const newDate = new Date()\n\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 hideIndicator()\n }\n }\n },\n {\n afterProcess: () => {\n setBackgroundProcessing(false)\n },\n beforeProcess: () => {\n setBackgroundProcessing(true)\n },\n },\n )\n })\n\n const didMount = useRef(false)\n const previousDebouncedData = useRef(reduceFieldsToValues(debouncedFormState))\n\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 * Remove `updatedAt` from comparison as it changes on every autosave interval.\n */\n const { updatedAt: _, ...formData } = reduceFieldsToValues(debouncedFormState)\n const { updatedAt: __, ...prevFormData } = previousDebouncedData.current\n\n if (dequal(formData, prevFormData)) {\n return\n }\n\n previousDebouncedData.current = formData\n\n handleAutosave()\n }, [debouncedFormState])\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","useAllFormFields","useForm","useFormModified","useFormSubmitted","useDebounce","useEffectEvent","useQueues","useConfig","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","LeaveWithoutSaving","baseClass","minimumAnimationTime","Autosave","id","collection","global","globalDoc","config","routes","api","serverURL","docConfig","incrementVersionCount","lastUpdateTime","mostRecentVersionIsAutosaved","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","isValid","setBackgroundProcessing","submit","formState","modified","submitted","code","locale","i18n","t","versionsConfig","versions","interval","autosaveInterval","drafts","autosave","validateOnDraft","Boolean","validate","_saving","setSaving","saving","debouncedFormState","formStateRef","modifiedRef","localeRef","current","queueTask","autosaveTimeoutRef","handleAutosave","undefined","startTimestamp","endTimestamp","hideIndicator","setTimeout","stopAutoSaveIndicator","Date","getTime","url","method","entitySlug","slug","valid","skipSubmission","result","acceptValues","overrideLocalChanges","action","context","disableFormWhileProcessing","disableSuccessStatus","overrides","_status","skipValidation","res","ok","prev","newDate","afterProcess","beforeProcess","didMount","previousDebouncedData","updatedAt","_","formData","__","prevFormData","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'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueues } from '../../hooks/useQueues.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\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'\nimport './index.scss'\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\n const {\n docConfig,\n incrementVersionCount,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n } = useDocumentInfo()\n\n const { isValid, setBackgroundProcessing, submit } = useForm()\n\n const [formState] = 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\n const saving = useDeferredValue(_saving)\n\n const debouncedFormState = useDebounce(formState, interval)\n\n const formStateRef = useRef(formState)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\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 formStateRef.current = formState\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 { queueTask } = useQueues()\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 queueTask(\n 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 const { valid } = reduceFieldsToValuesWithValidation(formStateRef.current, true)\n\n const skipSubmission =\n submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate\n\n if (!skipSubmission && modifiedRef.current && url) {\n const result = await submit<{\n incrementVersionCount: boolean\n }>({\n acceptValues: {\n overrideLocalChanges: false,\n },\n action: url,\n context: {\n incrementVersionCount: false,\n },\n disableFormWhileProcessing: false,\n disableSuccessStatus: true,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: versionsConfig?.drafts && !versionsConfig?.drafts?.validate,\n })\n\n if (result && result?.res?.ok && !mostRecentVersionIsAutosaved) {\n incrementVersionCount()\n setMostRecentVersionIsAutosaved(true)\n setUnpublishedVersionCount((prev) => prev + 1)\n }\n\n const newDate = new Date()\n\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 hideIndicator()\n }\n }\n },\n {\n afterProcess: () => {\n setBackgroundProcessing(false)\n },\n beforeProcess: () => {\n setBackgroundProcessing(true)\n },\n },\n )\n })\n\n const didMount = useRef(false)\n const previousDebouncedData = useRef(reduceFieldsToValues(debouncedFormState))\n\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 * Remove `updatedAt` from comparison as it changes on every autosave interval.\n */\n const { updatedAt: _, ...formData } = reduceFieldsToValues(debouncedFormState)\n const { updatedAt: __, ...prevFormData } = previousDebouncedData.current\n\n if (dequal(formData, prevFormData)) {\n return\n }\n\n previousDebouncedData.current = formData\n\n handleAutosave()\n }, [debouncedFormState])\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":[]}
@@ -17,7 +17,7 @@ export type DocumentDrawerContextProps = {
17
17
  readonly onSave?: (args: {
18
18
  collectionConfig?: ClientCollectionConfig;
19
19
  /**
20
- * @experimental - Note: this property is experimental and may change in the future. Use as your own discretion.
20
+ * @experimental - Note: this property is experimental and may change in the future. Use at your own discretion.
21
21
  * If you want to pass additional data to the onSuccess callback, you can use this context object.
22
22
  */
23
23
  context?: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.js","names":["createContext","use","DocumentDrawerCallbacksContext","DocumentDrawerContextProvider","children","rest","_jsx","value","useDocumentDrawerContext","context","Error"],"sources":["../../../src/elements/DocumentDrawer/Provider.tsx"],"sourcesContent":["import type { ClientCollectionConfig, Data, FormState, TypeWithID } from 'payload'\n\nimport { createContext, use } from 'react'\n\nexport type DocumentDrawerContextProps = {\n readonly clearDoc?: () => void\n readonly drawerSlug: string\n readonly onDelete?: (args: {\n collectionConfig?: ClientCollectionConfig\n id: string\n }) => Promise<void> | void\n /* only available if `redirectAfterDuplicate` is `false` */\n readonly onDuplicate?: (args: {\n collectionConfig?: ClientCollectionConfig\n doc: TypeWithID\n }) => Promise<void> | void\n readonly onRestore?: (args: {\n collectionConfig?: ClientCollectionConfig\n id: string\n }) => Promise<void> | void\n readonly onSave?: (args: {\n collectionConfig?: ClientCollectionConfig\n /**\n * @experimental - Note: this property is experimental and may change in the future. Use as your own discretion.\n * If you want to pass additional data to the onSuccess callback, you can use this context object.\n */\n context?: Record<string, unknown>\n doc: TypeWithID\n operation: 'create' | 'update'\n result: Data\n }) => Promise<FormState | void> | void\n}\n\nexport type DocumentDrawerContextType = {} & DocumentDrawerContextProps\n\nexport const DocumentDrawerCallbacksContext = createContext({} as DocumentDrawerContextType)\n\nexport const DocumentDrawerContextProvider: React.FC<\n {\n children: React.ReactNode\n } & DocumentDrawerContextProps\n> = ({ children, ...rest }) => {\n return <DocumentDrawerCallbacksContext value={rest}>{children}</DocumentDrawerCallbacksContext>\n}\n\nexport const useDocumentDrawerContext = (): DocumentDrawerContextType => {\n const context = use(DocumentDrawerCallbacksContext)\n\n if (!context) {\n throw new Error('useDocumentDrawerContext must be used within a DocumentDrawerProvider')\n }\n\n return context\n}\n"],"mappings":";AAEA,SAASA,aAAa,EAAEC,GAAG,QAAQ;AAiCnC,OAAO,MAAMC,8BAAA,gBAAiCF,aAAA,CAAc,CAAC;AAE7D,OAAO,MAAMG,6BAAA,GAITA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAA,CAAM;EACxB,oBAAOC,IAAA,CAACJ,8BAAA;IAA+BK,KAAA,EAAOF,IAAA;cAAOD;;AACvD;AAEA,OAAO,MAAMI,wBAAA,GAA2BA,CAAA;EACtC,MAAMC,OAAA,GAAUR,GAAA,CAAIC,8BAAA;EAEpB,IAAI,CAACO,OAAA,EAAS;IACZ,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,OAAOD,OAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"Provider.js","names":["createContext","use","DocumentDrawerCallbacksContext","DocumentDrawerContextProvider","children","rest","_jsx","value","useDocumentDrawerContext","context","Error"],"sources":["../../../src/elements/DocumentDrawer/Provider.tsx"],"sourcesContent":["import type { ClientCollectionConfig, Data, FormState, TypeWithID } from 'payload'\n\nimport { createContext, use } from 'react'\n\nexport type DocumentDrawerContextProps = {\n readonly clearDoc?: () => void\n readonly drawerSlug: string\n readonly onDelete?: (args: {\n collectionConfig?: ClientCollectionConfig\n id: string\n }) => Promise<void> | void\n /* only available if `redirectAfterDuplicate` is `false` */\n readonly onDuplicate?: (args: {\n collectionConfig?: ClientCollectionConfig\n doc: TypeWithID\n }) => Promise<void> | void\n readonly onRestore?: (args: {\n collectionConfig?: ClientCollectionConfig\n id: string\n }) => Promise<void> | void\n readonly onSave?: (args: {\n collectionConfig?: ClientCollectionConfig\n /**\n * @experimental - Note: this property is experimental and may change in the future. Use at your own discretion.\n * If you want to pass additional data to the onSuccess callback, you can use this context object.\n */\n context?: Record<string, unknown>\n doc: TypeWithID\n operation: 'create' | 'update'\n result: Data\n }) => Promise<FormState | void> | void\n}\n\nexport type DocumentDrawerContextType = {} & DocumentDrawerContextProps\n\nexport const DocumentDrawerCallbacksContext = createContext({} as DocumentDrawerContextType)\n\nexport const DocumentDrawerContextProvider: React.FC<\n {\n children: React.ReactNode\n } & DocumentDrawerContextProps\n> = ({ children, ...rest }) => {\n return <DocumentDrawerCallbacksContext value={rest}>{children}</DocumentDrawerCallbacksContext>\n}\n\nexport const useDocumentDrawerContext = (): DocumentDrawerContextType => {\n const context = use(DocumentDrawerCallbacksContext)\n\n if (!context) {\n throw new Error('useDocumentDrawerContext must be used within a DocumentDrawerProvider')\n }\n\n return context\n}\n"],"mappings":";AAEA,SAASA,aAAa,EAAEC,GAAG,QAAQ;AAiCnC,OAAO,MAAMC,8BAAA,gBAAiCF,aAAA,CAAc,CAAC;AAE7D,OAAO,MAAMG,6BAAA,GAITA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAA,CAAM;EACxB,oBAAOC,IAAA,CAACJ,8BAAA;IAA+BK,KAAA,EAAOF,IAAA;cAAOD;;AACvD;AAEA,OAAO,MAAMI,wBAAA,GAA2BA,CAAA;EACtC,MAAMC,OAAA,GAAUR,GAAA,CAAIC,8BAAA;EAEpB,IAAI,CAACO,OAAA,EAAS;IACZ,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,OAAOD,OAAA;AACT","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Status/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAW1C,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAiN1B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Status/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAW1C,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAyM1B,CAAA"}
@@ -23,7 +23,6 @@ export const Status = () => {
23
23
  hasPublishedDoc,
24
24
  incrementVersionCount,
25
25
  isTrashed,
26
- savedDocumentData: doc,
27
26
  setHasPublishedDoc,
28
27
  setMostRecentVersionIsAutosaved,
29
28
  setUnpublishedVersionCount,
@@ -38,8 +37,7 @@ export const Status = () => {
38
37
  api
39
38
  },
40
39
  serverURL
41
- },
42
- getEntityConfig
40
+ }
43
41
  } = useConfig();
44
42
  const {
45
43
  reset: resetForm
@@ -53,21 +51,13 @@ export const Status = () => {
53
51
  } = useTranslation();
54
52
  const unPublishModalSlug = `confirm-un-publish-${id}`;
55
53
  const revertModalSlug = `confirm-revert-${id}`;
56
- let statusToRender = 'draft';
57
- const collectionConfig = getEntityConfig({
58
- collectionSlug
59
- });
60
- const globalConfig = getEntityConfig({
61
- globalSlug
62
- });
63
- const docConfig = collectionConfig || globalConfig;
64
- const autosaveEnabled = typeof docConfig?.versions?.drafts === 'object' ? docConfig.versions.drafts.autosave : false;
65
- if (autosaveEnabled) {
66
- if (hasPublishedDoc) {
67
- statusToRender = unpublishedVersionCount > 0 ? 'changed' : 'published';
68
- }
69
- } else {
70
- statusToRender = doc._status || 'draft';
54
+ let statusToRender;
55
+ if (unpublishedVersionCount > 0 && hasPublishedDoc) {
56
+ statusToRender = 'changed';
57
+ } else if (!hasPublishedDoc) {
58
+ statusToRender = 'draft';
59
+ } else if (hasPublishedDoc && unpublishedVersionCount <= 0) {
60
+ statusToRender = 'published';
71
61
  }
72
62
  const displayStatusKey = isTrashed ? hasPublishedDoc ? 'previouslyPublished' : 'previouslyDraft' : statusToRender;
73
63
  const performAction = useCallback(async action => {
@@ -164,7 +154,7 @@ export const Status = () => {
164
154
  modalSlug: unPublishModalSlug,
165
155
  onConfirm: () => performAction('unpublish')
166
156
  })]
167
- }), !isTrashed && canUpdate && statusToRender === 'changed' || statusToRender === 'draft' && /*#__PURE__*/_jsxs(React.Fragment, {
157
+ }), !isTrashed && canUpdate && statusToRender === 'changed' && /*#__PURE__*/_jsxs(React.Fragment, {
168
158
  children: [" — ", /*#__PURE__*/_jsx(Button, {
169
159
  buttonStyle: "none",
170
160
  className: `${baseClass}__action`,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","React","useCallback","toast","useForm","useConfig","useDocumentInfo","useLocale","useTranslation","requests","Button","ConfirmationModal","baseClass","Status","id","collectionSlug","docPermissions","globalSlug","hasPublishedDoc","incrementVersionCount","isTrashed","savedDocumentData","doc","setHasPublishedDoc","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","unpublishedVersionCount","toggleModal","config","routes","api","serverURL","getEntityConfig","reset","resetForm","code","locale","i18n","t","unPublishModalSlug","revertModalSlug","statusToRender","collectionConfig","globalConfig","docConfig","autosaveEnabled","versions","drafts","autosave","_status","displayStatusKey","performAction","action","url","method","body","publishedDoc","get","headers","language","then","res","json","JSON","stringify","status","data","result","success","message","errors","error","err","canUpdate","update","_jsx","className","title","_jsxs","Fragment","buttonStyle","onClick","confirmingLabel","heading","modalSlug","onConfirm"],"sources":["../../../src/elements/Status/index.tsx"],"sourcesContent":["'use client'\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { Button } from '../Button/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport './index.scss'\n\nconst baseClass = 'status'\n\nexport const Status: React.FC = () => {\n const {\n id,\n collectionSlug,\n docPermissions,\n globalSlug,\n hasPublishedDoc,\n incrementVersionCount,\n isTrashed,\n savedDocumentData: doc,\n setHasPublishedDoc,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n unpublishedVersionCount,\n } = useDocumentInfo()\n\n const { toggleModal } = useModal()\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const { reset: resetForm } = useForm()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n const unPublishModalSlug = `confirm-un-publish-${id}`\n const revertModalSlug = `confirm-revert-${id}`\n\n let statusToRender: 'changed' | 'draft' | 'published' = 'draft'\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const globalConfig = getEntityConfig({ globalSlug })\n\n const docConfig = collectionConfig || globalConfig\n const autosaveEnabled =\n typeof docConfig?.versions?.drafts === 'object' ? docConfig.versions.drafts.autosave : false\n\n if (autosaveEnabled) {\n if (hasPublishedDoc) {\n statusToRender = unpublishedVersionCount > 0 ? 'changed' : 'published'\n }\n } else {\n statusToRender = doc._status || 'draft'\n }\n const displayStatusKey = isTrashed\n ? hasPublishedDoc\n ? 'previouslyPublished'\n : 'previouslyDraft'\n : statusToRender\n\n const performAction = useCallback(\n async (action: 'revert' | 'unpublish') => {\n let url\n let method\n let body\n\n if (action === 'unpublish') {\n body = {\n _status: 'draft',\n }\n }\n\n if (collectionSlug) {\n url = `${serverURL}${api}/${collectionSlug}/${id}?locale=${locale}&fallback-locale=null&depth=0`\n method = 'patch'\n }\n\n if (globalSlug) {\n url = `${serverURL}${api}/globals/${globalSlug}?locale=${locale}&fallback-locale=null&depth=0`\n method = 'post'\n }\n\n if (action === 'revert') {\n const publishedDoc = await requests\n .get(url, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then((res) => res.json())\n\n body = publishedDoc\n }\n\n const res = await requests[method](url, {\n body: JSON.stringify(body),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n\n if (res.status === 200) {\n let data\n const json = await res.json()\n\n if (globalSlug) {\n data = json.result\n } else if (collectionSlug) {\n data = json.doc\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n resetForm(data)\n toast.success(json.message)\n incrementVersionCount()\n setMostRecentVersionIsAutosaved(false)\n\n if (action === 'unpublish') {\n setHasPublishedDoc(false)\n } else if (action === 'revert') {\n setUnpublishedVersionCount(0)\n }\n } else {\n try {\n const json = await res.json()\n if (json.errors?.[0]?.message) {\n toast.error(json.errors[0].message)\n } else if (json.error) {\n toast.error(json.error)\n } else {\n toast.error(t('error:unPublishingDocument'))\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (err) {\n toast.error(t('error:unPublishingDocument'))\n }\n }\n },\n [\n api,\n collectionSlug,\n globalSlug,\n id,\n i18n.language,\n incrementVersionCount,\n locale,\n resetForm,\n serverURL,\n setUnpublishedVersionCount,\n setMostRecentVersionIsAutosaved,\n t,\n setHasPublishedDoc,\n ],\n )\n\n const canUpdate = docPermissions?.update\n\n if (statusToRender) {\n return (\n <div\n className={baseClass}\n title={`${t('version:status')}: ${t(`version:${displayStatusKey}`)}`}\n >\n <div className={`${baseClass}__value-wrap`}>\n <span className={`${baseClass}__label`}>{t('version:status')}:&nbsp;</span>\n <span className={`${baseClass}__value`}>{t(`version:${displayStatusKey}`)}</span>\n {!isTrashed && canUpdate && statusToRender === 'published' && (\n <React.Fragment>\n &nbsp;&mdash;&nbsp;\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__action`}\n id={`action-unpublish`}\n onClick={() => toggleModal(unPublishModalSlug)}\n >\n {t('version:unpublish')}\n </Button>\n <ConfirmationModal\n body={t('version:aboutToUnpublish')}\n confirmingLabel={t('version:unpublishing')}\n heading={t('version:confirmUnpublish')}\n modalSlug={unPublishModalSlug}\n onConfirm={() => performAction('unpublish')}\n />\n </React.Fragment>\n )}\n {!isTrashed && canUpdate && statusToRender === 'changed' || statusToRender === 'draft' && (\n <React.Fragment>\n &nbsp;&mdash;&nbsp;\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__action`}\n id=\"action-revert-to-published\"\n onClick={() => toggleModal(revertModalSlug)}\n >\n {t('version:revertToPublished')}\n </Button>\n <ConfirmationModal\n body={t('version:aboutToRevertToPublished')}\n confirmingLabel={t('version:reverting')}\n heading={t('version:confirmRevertToSaved')}\n modalSlug={revertModalSlug}\n onConfirm={() => performAction('revert')}\n />\n </React.Fragment>\n )}\n </div>\n </div>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","React","useCallback","toast","useForm","useConfig","useDocumentInfo","useLocale","useTranslation","requests","Button","ConfirmationModal","baseClass","Status","id","collectionSlug","docPermissions","globalSlug","hasPublishedDoc","incrementVersionCount","isTrashed","setHasPublishedDoc","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","unpublishedVersionCount","toggleModal","config","routes","api","serverURL","reset","resetForm","code","locale","i18n","t","unPublishModalSlug","revertModalSlug","statusToRender","displayStatusKey","performAction","action","url","method","body","_status","publishedDoc","get","headers","language","then","res","json","JSON","stringify","status","data","result","doc","success","message","errors","error","err","canUpdate","update","_jsx","className","title","_jsxs","Fragment","buttonStyle","onClick","confirmingLabel","heading","modalSlug","onConfirm"],"sources":["../../../src/elements/Status/index.tsx"],"sourcesContent":["'use client'\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { Button } from '../Button/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport './index.scss'\n\nconst baseClass = 'status'\n\nexport const Status: React.FC = () => {\n const {\n id,\n collectionSlug,\n docPermissions,\n globalSlug,\n hasPublishedDoc,\n incrementVersionCount,\n isTrashed,\n setHasPublishedDoc,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n unpublishedVersionCount,\n } = useDocumentInfo()\n\n const { toggleModal } = useModal()\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { reset: resetForm } = useForm()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n const unPublishModalSlug = `confirm-un-publish-${id}`\n const revertModalSlug = `confirm-revert-${id}`\n\n let statusToRender: 'changed' | 'draft' | 'published'\n\n if (unpublishedVersionCount > 0 && hasPublishedDoc) {\n statusToRender = 'changed'\n } else if (!hasPublishedDoc) {\n statusToRender = 'draft'\n } else if (hasPublishedDoc && unpublishedVersionCount <= 0) {\n statusToRender = 'published'\n }\n\n const displayStatusKey = isTrashed\n ? hasPublishedDoc\n ? 'previouslyPublished'\n : 'previouslyDraft'\n : statusToRender\n\n const performAction = useCallback(\n async (action: 'revert' | 'unpublish') => {\n let url\n let method\n let body\n\n if (action === 'unpublish') {\n body = {\n _status: 'draft',\n }\n }\n\n if (collectionSlug) {\n url = `${serverURL}${api}/${collectionSlug}/${id}?locale=${locale}&fallback-locale=null&depth=0`\n method = 'patch'\n }\n\n if (globalSlug) {\n url = `${serverURL}${api}/globals/${globalSlug}?locale=${locale}&fallback-locale=null&depth=0`\n method = 'post'\n }\n\n if (action === 'revert') {\n const publishedDoc = await requests\n .get(url, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then((res) => res.json())\n\n body = publishedDoc\n }\n\n const res = await requests[method](url, {\n body: JSON.stringify(body),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n\n if (res.status === 200) {\n let data\n const json = await res.json()\n\n if (globalSlug) {\n data = json.result\n } else if (collectionSlug) {\n data = json.doc\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n resetForm(data)\n toast.success(json.message)\n incrementVersionCount()\n setMostRecentVersionIsAutosaved(false)\n\n if (action === 'unpublish') {\n setHasPublishedDoc(false)\n } else if (action === 'revert') {\n setUnpublishedVersionCount(0)\n }\n } else {\n try {\n const json = await res.json()\n if (json.errors?.[0]?.message) {\n toast.error(json.errors[0].message)\n } else if (json.error) {\n toast.error(json.error)\n } else {\n toast.error(t('error:unPublishingDocument'))\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (err) {\n toast.error(t('error:unPublishingDocument'))\n }\n }\n },\n [\n api,\n collectionSlug,\n globalSlug,\n id,\n i18n.language,\n incrementVersionCount,\n locale,\n resetForm,\n serverURL,\n setUnpublishedVersionCount,\n setMostRecentVersionIsAutosaved,\n t,\n setHasPublishedDoc,\n ],\n )\n\n const canUpdate = docPermissions?.update\n\n if (statusToRender) {\n return (\n <div\n className={baseClass}\n title={`${t('version:status')}: ${t(`version:${displayStatusKey}`)}`}\n >\n <div className={`${baseClass}__value-wrap`}>\n <span className={`${baseClass}__label`}>{t('version:status')}:&nbsp;</span>\n <span className={`${baseClass}__value`}>{t(`version:${displayStatusKey}`)}</span>\n {!isTrashed && canUpdate && statusToRender === 'published' && (\n <React.Fragment>\n &nbsp;&mdash;&nbsp;\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__action`}\n id={`action-unpublish`}\n onClick={() => toggleModal(unPublishModalSlug)}\n >\n {t('version:unpublish')}\n </Button>\n <ConfirmationModal\n body={t('version:aboutToUnpublish')}\n confirmingLabel={t('version:unpublishing')}\n heading={t('version:confirmUnpublish')}\n modalSlug={unPublishModalSlug}\n onConfirm={() => performAction('unpublish')}\n />\n </React.Fragment>\n )}\n {!isTrashed && canUpdate && statusToRender === 'changed' && (\n <React.Fragment>\n &nbsp;&mdash;&nbsp;\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__action`}\n id=\"action-revert-to-published\"\n onClick={() => toggleModal(revertModalSlug)}\n >\n {t('version:revertToPublished')}\n </Button>\n <ConfirmationModal\n body={t('version:aboutToRevertToPublished')}\n confirmingLabel={t('version:reverting')}\n heading={t('version:confirmRevertToSaved')}\n modalSlug={revertModalSlug}\n onConfirm={() => performAction('revert')}\n />\n </React.Fragment>\n )}\n </div>\n </div>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}