@payloadcms/ui 3.15.2-canary.ee31a64 → 3.16.1-canary.9004205

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 (74) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/elements/Autosave/index.d.ts.map +1 -1
  3. package/dist/elements/Autosave/index.js +10 -3
  4. package/dist/elements/Autosave/index.js.map +1 -1
  5. package/dist/elements/Localizer/index.d.ts.map +1 -1
  6. package/dist/elements/Localizer/index.js +34 -17
  7. package/dist/elements/Localizer/index.js.map +1 -1
  8. package/dist/elements/Popup/PopupButtonList/index.d.ts +1 -0
  9. package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
  10. package/dist/elements/Popup/PopupButtonList/index.js +30 -27
  11. package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
  12. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  13. package/dist/elements/PublishButton/ScheduleDrawer/index.js +14 -8
  14. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  15. package/dist/elements/RelationshipTable/index.js +1 -1
  16. package/dist/elements/RelationshipTable/index.js.map +1 -1
  17. package/dist/elements/TableColumns/buildColumnState.d.ts +3 -4
  18. package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
  19. package/dist/elements/TableColumns/buildColumnState.js +14 -6
  20. package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
  21. package/dist/elements/TableColumns/getInitialColumns.d.ts +2 -3
  22. package/dist/elements/TableColumns/getInitialColumns.d.ts.map +1 -1
  23. package/dist/elements/TableColumns/getInitialColumns.js.map +1 -1
  24. package/dist/elements/TableColumns/index.d.ts +1 -4
  25. package/dist/elements/TableColumns/index.d.ts.map +1 -1
  26. package/dist/elements/TableColumns/index.js.map +1 -1
  27. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  28. package/dist/elements/Thumbnail/index.js +34 -31
  29. package/dist/elements/Thumbnail/index.js.map +1 -1
  30. package/dist/elements/Upload/index.js +1 -1
  31. package/dist/elements/Upload/index.js.map +1 -1
  32. package/dist/exports/client/index.d.ts +2 -1
  33. package/dist/exports/client/index.d.ts.map +1 -1
  34. package/dist/exports/client/index.js +22 -22
  35. package/dist/exports/client/index.js.map +3 -3
  36. package/dist/exports/shared/index.js +2 -2
  37. package/dist/exports/shared/index.js.map +2 -2
  38. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  39. package/dist/providers/DocumentInfo/index.js +6 -3
  40. package/dist/providers/DocumentInfo/index.js.map +1 -1
  41. package/dist/providers/ListQuery/index.d.ts +0 -2
  42. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  43. package/dist/providers/ListQuery/index.js.map +1 -1
  44. package/dist/providers/Locale/index.d.ts +10 -15
  45. package/dist/providers/Locale/index.d.ts.map +1 -1
  46. package/dist/providers/Locale/index.js +134 -56
  47. package/dist/providers/Locale/index.js.map +1 -1
  48. package/dist/utilities/buildTableState.d.ts +1 -2
  49. package/dist/utilities/buildTableState.d.ts.map +1 -1
  50. package/dist/utilities/buildTableState.js.map +1 -1
  51. package/dist/utilities/fetchPreferences.d.ts +2 -0
  52. package/dist/utilities/fetchPreferences.d.ts.map +1 -0
  53. package/dist/utilities/fetchPreferences.js +2 -0
  54. package/dist/utilities/fetchPreferences.js.map +1 -0
  55. package/dist/utilities/formatDate.d.ts.map +1 -1
  56. package/dist/utilities/formatDate.js +4 -4
  57. package/dist/utilities/formatDate.js.map +1 -1
  58. package/dist/utilities/renderTable.d.ts +3 -4
  59. package/dist/utilities/renderTable.d.ts.map +1 -1
  60. package/dist/utilities/renderTable.js.map +1 -1
  61. package/dist/utilities/upsertPreferences.d.ts +2 -2
  62. package/dist/utilities/upsertPreferences.d.ts.map +1 -1
  63. package/dist/utilities/upsertPreferences.js +30 -22
  64. package/dist/utilities/upsertPreferences.js.map +1 -1
  65. package/dist/views/Edit/index.d.ts.map +1 -1
  66. package/dist/views/Edit/index.js +8 -5
  67. package/dist/views/Edit/index.js.map +1 -1
  68. package/dist/views/List/index.d.ts +1 -1
  69. package/dist/views/List/index.d.ts.map +1 -1
  70. package/dist/views/List/index.js.map +1 -1
  71. package/dist/views/List/types.d.ts +0 -6
  72. package/dist/views/List/types.d.ts.map +1 -1
  73. package/dist/views/List/types.js.map +1 -1
  74. package/package.json +4 -4
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2018-2024 Payload CMS, Inc. <info@payloadcms.com>
3
+ Copyright (c) 2018-2025 Payload CMS, Inc. <info@payloadcms.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
@@ -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;AAGzE,OAAO,KAA2B,MAAM,OAAO,CAAA;AAkB/C,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,CA6QpC,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;AAGzE,OAAO,KAA2B,MAAM,OAAO,CAAA;AAkB/C,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,CAsRpC,CAAA"}
@@ -38,7 +38,8 @@ export const Autosave = ({
38
38
  mostRecentVersionIsAutosaved,
39
39
  setLastUpdateTime,
40
40
  setMostRecentVersionIsAutosaved,
41
- setUnpublishedVersionCount
41
+ setUnpublishedVersionCount,
42
+ updateSavedDocumentData
42
43
  } = useDocumentInfo();
43
44
  const queueRef = useRef([]);
44
45
  const isProcessingRef = useRef(false);
@@ -158,9 +159,8 @@ export const Autosave = ({
158
159
  setMostRecentVersionIsAutosaved(true);
159
160
  setUnpublishedVersionCount(prev => prev + 1);
160
161
  }
161
- } else {
162
- return res.json();
163
162
  }
163
+ return res.json();
164
164
  }).then(json => {
165
165
  if (versionsConfig?.drafts && versionsConfig?.drafts?.validate && json?.errors) {
166
166
  if (Array.isArray(json.errors)) {
@@ -192,6 +192,13 @@ export const Autosave = ({
192
192
  setSaving(false);
193
193
  return;
194
194
  }
195
+ } else {
196
+ // If it's not an error then we can update the document data inside the context
197
+ const document = json?.doc || json?.result;
198
+ // Manually update the data since this function doesn't fire the `submit` function from useForm
199
+ if (document) {
200
+ updateSavedDocumentData(document);
201
+ }
195
202
  }
196
203
  }).then(() => {
197
204
  // If request was faster than minimum animation time, animate the difference
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["versionDefaults","React","useRef","useState","toast","useAllFormFields","useForm","useFormModified","useFormSubmitted","useDebounce","useIgnoredEffect","useConfig","useDocumentEvents","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","baseClass","minimumAnimationTime","Autosave","id","collection","global","globalDoc","config","routes","api","serverURL","docConfig","incrementVersionCount","lastUpdateTime","mostRecentVersionIsAutosaved","setLastUpdateTime","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","queueRef","isProcessingRef","reportUpdate","dispatchFields","setSubmitted","submitted","versionsConfig","versions","fields","modified","code","locale","i18n","t","interval","autosaveInterval","drafts","autosave","saving","setSaving","debouncedFields","fieldRef","modifiedRef","localeRef","debouncedRef","current","processQueue","useCallback","length","latestAction","abortController","AbortController","autosaveTimeout","undefined","startTimestamp","endTimestamp","Date","getTime","url","method","entitySlug","slug","data","valid","_status","skipSubmission","validate","fetch","body","JSON","stringify","credentials","headers","language","signal","then","res","newDate","status","updatedAt","toISOString","prev","json","errors","Array","isArray","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","push","forEach","dataError","field","type","error","setTimeout","clearTimeout","abort","_jsxs","className","Boolean","_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 { versionDefaults } from 'payload/shared'\nimport React, { useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useIgnoredEffect } from '../../hooks/useIgnoredEffect.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 { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDate.js'\nimport { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.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 const {\n docConfig,\n incrementVersionCount,\n lastUpdateTime,\n mostRecentVersionIsAutosaved,\n setLastUpdateTime,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n } = useDocumentInfo()\n const queueRef = useRef([])\n const isProcessingRef = useRef(false)\n\n const { reportUpdate } = useDocumentEvents()\n const { dispatchFields, setSubmitted } = useForm()\n const submitted = useFormSubmitted()\n const versionsConfig = docConfig?.versions\n\n const [fields] = useAllFormFields()\n const modified = useFormModified()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n let interval = versionDefaults.autosaveInterval\n if (versionsConfig.drafts && versionsConfig.drafts.autosave) {\n interval = versionsConfig.drafts.autosave.interval\n }\n\n const [saving, setSaving] = useState(false)\n const debouncedFields = useDebounce(fields, interval)\n const fieldRef = useRef(fields)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n const debouncedRef = useRef(debouncedFields)\n\n debouncedRef.current = debouncedFields\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 isProcessingRef.current = true\n const latestAction = queueRef.current[queueRef.current.length - 1]\n queueRef.current = []\n\n try {\n await latestAction()\n } finally {\n isProcessingRef.current = false\n if (queueRef.current.length > 0) {\n await processQueue()\n }\n }\n }, [])\n\n // When debounced fields change, autosave\n useIgnoredEffect(\n () => {\n const abortController = new AbortController()\n let autosaveTimeout = 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 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 } = {\n ...reduceFieldsToValuesWithValidation(fieldRef.current, true),\n }\n data._status = 'draft'\n const skipSubmission =\n submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate\n\n if (!skipSubmission) {\n 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 signal: abortController.signal,\n })\n .then((res) => {\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 } else {\n return res.json()\n }\n })\n .then((json) => {\n if (\n versionsConfig?.drafts &&\n versionsConfig?.drafts?.validate &&\n json?.errors\n ) {\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 setSubmitted(true)\n setSaving(false)\n return\n }\n }\n })\n .then(() => {\n // If request was faster than minimum animation time, animate the difference\n if (endTimestamp - startTimestamp < minimumAnimationTime) {\n autosaveTimeout = setTimeout(\n () => {\n setSaving(false)\n },\n minimumAnimationTime - (endTimestamp - startTimestamp),\n )\n } else {\n setSaving(false)\n }\n })\n }\n }\n }\n }\n }\n\n queueRef.current.push(autosave)\n void processQueue()\n\n return () => {\n if (autosaveTimeout) {\n clearTimeout(autosaveTimeout)\n }\n if (abortController.signal) {\n try {\n abortController.abort('Autosave closed early.')\n } catch (error) {\n // swallow error\n }\n }\n setSaving(false)\n }\n },\n [debouncedFields],\n [\n api,\n collection,\n dispatchFields,\n globalDoc,\n i18n,\n id,\n interval,\n modified,\n reportUpdate,\n serverURL,\n setSubmitted,\n versionsConfig?.drafts,\n submitted,\n setLastUpdateTime,\n mostRecentVersionIsAutosaved,\n incrementVersionCount,\n setMostRecentVersionIsAutosaved,\n ],\n )\n\n return (\n <div className={baseClass}>\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":["versionDefaults","React","useRef","useState","toast","useAllFormFields","useForm","useFormModified","useFormSubmitted","useDebounce","useIgnoredEffect","useConfig","useDocumentEvents","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","baseClass","minimumAnimationTime","Autosave","id","collection","global","globalDoc","config","routes","api","serverURL","docConfig","incrementVersionCount","lastUpdateTime","mostRecentVersionIsAutosaved","setLastUpdateTime","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","updateSavedDocumentData","queueRef","isProcessingRef","reportUpdate","dispatchFields","setSubmitted","submitted","versionsConfig","versions","fields","modified","code","locale","i18n","t","interval","autosaveInterval","drafts","autosave","saving","setSaving","debouncedFields","fieldRef","modifiedRef","localeRef","debouncedRef","current","processQueue","useCallback","length","latestAction","abortController","AbortController","autosaveTimeout","undefined","startTimestamp","endTimestamp","Date","getTime","url","method","entitySlug","slug","data","valid","_status","skipSubmission","validate","fetch","body","JSON","stringify","credentials","headers","language","signal","then","res","newDate","status","updatedAt","toISOString","prev","json","errors","Array","isArray","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","push","forEach","dataError","field","type","error","document","doc","result","setTimeout","clearTimeout","abort","_jsxs","className","Boolean","_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 { versionDefaults } from 'payload/shared'\nimport React, { useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useIgnoredEffect } from '../../hooks/useIgnoredEffect.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 { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDate.js'\nimport { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.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 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, setSubmitted } = useForm()\n const submitted = useFormSubmitted()\n const versionsConfig = docConfig?.versions\n\n const [fields] = useAllFormFields()\n const modified = useFormModified()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n let interval = versionDefaults.autosaveInterval\n if (versionsConfig.drafts && versionsConfig.drafts.autosave) {\n interval = versionsConfig.drafts.autosave.interval\n }\n\n const [saving, setSaving] = useState(false)\n const debouncedFields = useDebounce(fields, interval)\n const fieldRef = useRef(fields)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n const debouncedRef = useRef(debouncedFields)\n\n debouncedRef.current = debouncedFields\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 isProcessingRef.current = true\n const latestAction = queueRef.current[queueRef.current.length - 1]\n queueRef.current = []\n\n try {\n await latestAction()\n } finally {\n isProcessingRef.current = false\n if (queueRef.current.length > 0) {\n await processQueue()\n }\n }\n }, [])\n\n // When debounced fields change, autosave\n useIgnoredEffect(\n () => {\n const abortController = new AbortController()\n let autosaveTimeout = 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 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 } = {\n ...reduceFieldsToValuesWithValidation(fieldRef.current, true),\n }\n data._status = 'draft'\n const skipSubmission =\n submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate\n\n if (!skipSubmission) {\n 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 signal: abortController.signal,\n })\n .then((res) => {\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\n return res.json()\n })\n .then((json) => {\n if (\n versionsConfig?.drafts &&\n versionsConfig?.drafts?.validate &&\n json?.errors\n ) {\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 setSubmitted(true)\n setSaving(false)\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 updateSavedDocumentData(document)\n }\n }\n })\n .then(() => {\n // If request was faster than minimum animation time, animate the difference\n if (endTimestamp - startTimestamp < minimumAnimationTime) {\n autosaveTimeout = setTimeout(\n () => {\n setSaving(false)\n },\n minimumAnimationTime - (endTimestamp - startTimestamp),\n )\n } else {\n setSaving(false)\n }\n })\n }\n }\n }\n }\n }\n\n queueRef.current.push(autosave)\n void processQueue()\n\n return () => {\n if (autosaveTimeout) {\n clearTimeout(autosaveTimeout)\n }\n if (abortController.signal) {\n try {\n abortController.abort('Autosave closed early.')\n } catch (error) {\n // swallow error\n }\n }\n setSaving(false)\n }\n },\n [debouncedFields],\n [\n api,\n collection,\n dispatchFields,\n globalDoc,\n i18n,\n id,\n interval,\n modified,\n reportUpdate,\n serverURL,\n setSubmitted,\n versionsConfig?.drafts,\n submitted,\n setLastUpdateTime,\n mostRecentVersionIsAutosaved,\n incrementVersionCount,\n setMostRecentVersionIsAutosaved,\n ],\n )\n\n return (\n <div className={baseClass}>\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,eAAe,QAAQ;AAChC,OAAOC,KAAA,IAASC,MAAM,EAAEC,QAAQ,QAAQ;AACxC,SAASC,KAAK,QAAQ;AAEtB,SACEC,gBAAgB,EAChBC,OAAO,EACPC,eAAe,EACfC,gBAAgB,QACX;AACP,SAASC,WAAW,QAAQ;AAC5B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,SAAS,QAAQ;AAC1B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,eAAe,QAAQ;AAChC,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,eAAe,QAAQ;AAChC,SAASC,kCAAkC,QAAQ;AACnD,OAAO;AAEP,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,GAAGjB,SAAA;EACJ,MAAM;IACJkB,SAAS;IACTC,qBAAqB;IACrBC,cAAc;IACdC,4BAA4B;IAC5BC,iBAAiB;IACjBC,+BAA+B;IAC/BC,0BAA0B;IAC1BC;EAAuB,CACxB,GAAGvB,eAAA;EACJ,MAAMwB,QAAA,GAAWnC,MAAA,CAAO,EAAE;EAC1B,MAAMoC,eAAA,GAAkBpC,MAAA,CAAO;EAE/B,MAAM;IAAEqC;EAAY,CAAE,GAAG3B,iBAAA;EACzB,MAAM;IAAE4B,cAAc;IAAEC;EAAY,CAAE,GAAGnC,OAAA;EACzC,MAAMoC,SAAA,GAAYlC,gBAAA;EAClB,MAAMmC,cAAA,GAAiBd,SAAA,EAAWe,QAAA;EAElC,MAAM,CAACC,MAAA,CAAO,GAAGxC,gBAAA;EACjB,MAAMyC,QAAA,GAAWvC,eAAA;EACjB,MAAM;IAAEwC,IAAA,EAAMC;EAAM,CAAE,GAAGlC,SAAA;EACzB,MAAM;IAAEmC,IAAI;IAAEC;EAAC,CAAE,GAAGnC,cAAA;EAEpB,IAAIoC,QAAA,GAAWnD,eAAA,CAAgBoD,gBAAgB;EAC/C,IAAIT,cAAA,CAAeU,MAAM,IAAIV,cAAA,CAAeU,MAAM,CAACC,QAAQ,EAAE;IAC3DH,QAAA,GAAWR,cAAA,CAAeU,MAAM,CAACC,QAAQ,CAACH,QAAQ;EACpD;EAEA,MAAM,CAACI,MAAA,EAAQC,SAAA,CAAU,GAAGrD,QAAA,CAAS;EACrC,MAAMsD,eAAA,GAAkBhD,WAAA,CAAYoC,MAAA,EAAQM,QAAA;EAC5C,MAAMO,QAAA,GAAWxD,MAAA,CAAO2C,MAAA;EACxB,MAAMc,WAAA,GAAczD,MAAA,CAAO4C,QAAA;EAC3B,MAAMc,SAAA,GAAY1D,MAAA,CAAO8C,MAAA;EACzB,MAAMa,YAAA,GAAe3D,MAAA,CAAOuD,eAAA;EAE5BI,YAAA,CAAaC,OAAO,GAAGL,eAAA;EAEvB;EACA;EACA;EACAC,QAAA,CAASI,OAAO,GAAGjB,MAAA;EAEnB;EACA;EACA;EACAc,WAAA,CAAYG,OAAO,GAAGhB,QAAA;EAEtB;EACA;EACAc,SAAA,CAAUE,OAAO,GAAGd,MAAA;EAEpB,MAAMe,YAAA,GAAe9D,KAAA,CAAM+D,WAAW,CAAC;IACrC,IAAI1B,eAAA,CAAgBwB,OAAO,IAAIzB,QAAA,CAASyB,OAAO,CAACG,MAAM,KAAK,GAAG;MAC5D;IACF;IAEA3B,eAAA,CAAgBwB,OAAO,GAAG;IAC1B,MAAMI,YAAA,GAAe7B,QAAA,CAASyB,OAAO,CAACzB,QAAA,CAASyB,OAAO,CAACG,MAAM,GAAG,EAAE;IAClE5B,QAAA,CAASyB,OAAO,GAAG,EAAE;IAErB,IAAI;MACF,MAAMI,YAAA;IACR,UAAU;MACR5B,eAAA,CAAgBwB,OAAO,GAAG;MAC1B,IAAIzB,QAAA,CAASyB,OAAO,CAACG,MAAM,GAAG,GAAG;QAC/B,MAAMF,YAAA;MACR;IACF;EACF,GAAG,EAAE;EAEL;EACArD,gBAAA,CACE;IACE,MAAMyD,eAAA,GAAkB,IAAIC,eAAA;IAC5B,IAAIC,eAAA,GAAkBC,SAAA;IACtB;IACA,IAAIC,cAAA,GAAiBD,SAAA;IACrB,IAAIE,YAAA,GAAeF,SAAA;IAEnB,MAAMhB,QAAA,GAAW,MAAAA,CAAA;MACf,IAAIR,QAAA,EAAU;QACZyB,cAAA,GAAiB,IAAIE,IAAA,GAAOC,OAAO;QAEnClB,SAAA,CAAU;QAEV,IAAImB,GAAA;QACJ,IAAIC,MAAA;QACJ,IAAIC,UAAA;QAEJ,IAAIvD,UAAA,IAAcD,EAAA,EAAI;UACpBwD,UAAA,GAAavD,UAAA,CAAWwD,IAAI;UAC5BH,GAAA,GAAM,GAAG/C,SAAA,GAAYD,GAAA,IAAOkD,UAAA,IAAcxD,EAAA,oCAAsCuC,SAAA,CAAUE,OAAO,EAAE;UACnGc,MAAA,GAAS;QACX;QAEA,IAAIpD,SAAA,EAAW;UACbqD,UAAA,GAAarD,SAAA,CAAUsD,IAAI;UAC3BH,GAAA,GAAM,GAAG/C,SAAA,GAAYD,GAAA,YAAekD,UAAA,oCAA8CjB,SAAA,CAAUE,OAAO,EAAE;UACrGc,MAAA,GAAS;QACX;QAEA,IAAID,GAAA,EAAK;UACP,IAAIhB,WAAA,CAAYG,OAAO,EAAE;YACvB,MAAM;cAAEiB,IAAI;cAAEC;YAAK,CAAE,GAAG;cACtB,GAAG/D,kCAAA,CAAmCyC,QAAA,CAASI,OAAO,EAAE;YAC1D;YACAiB,IAAA,CAAKE,OAAO,GAAG;YACf,MAAMC,cAAA,GACJxC,SAAA,IAAa,CAACsC,KAAA,IAASrC,cAAA,EAAgBU,MAAA,IAAUV,cAAA,EAAgBU,MAAA,EAAQ8B,QAAA;YAE3E,IAAI,CAACD,cAAA,EAAgB;cACnB,MAAME,KAAA,CAAMT,GAAA,EAAK;gBACfU,IAAA,EAAMC,IAAA,CAAKC,SAAS,CAACR,IAAA;gBACrBS,WAAA,EAAa;gBACbC,OAAA,EAAS;kBACP,mBAAmBxC,IAAA,CAAKyC,QAAQ;kBAChC,gBAAgB;gBAClB;gBACAd,MAAA;gBACAe,MAAA,EAAQxB,eAAA,CAAgBwB;cAC1B,GACGC,IAAI,CAAEC,GAAA;gBACL,MAAMC,OAAA,GAAU,IAAIrB,IAAA;gBACpB;gBACAD,YAAA,GAAesB,OAAA,CAAQpB,OAAO;gBAE9B,IAAImB,GAAA,CAAIE,MAAM,KAAK,KAAK;kBACtB9D,iBAAA,CAAkB6D,OAAA,CAAQpB,OAAO;kBAEjCnC,YAAA,CAAa;oBACXlB,EAAA;oBACAwD,UAAA;oBACAmB,SAAA,EAAWF,OAAA,CAAQG,WAAW;kBAChC;kBAEA,IAAI,CAACjE,4BAAA,EAA8B;oBACjCF,qBAAA;oBACAI,+BAAA,CAAgC;oBAChCC,0BAAA,CAA4B+D,IAAA,IAASA,IAAA,GAAO;kBAC9C;gBACF;gBAEA,OAAOL,GAAA,CAAIM,IAAI;cACjB,GACCP,IAAI,CAAEO,IAAA;gBACL,IACExD,cAAA,EAAgBU,MAAA,IAChBV,cAAA,EAAgBU,MAAA,EAAQ8B,QAAA,IACxBgB,IAAA,EAAMC,MAAA,EACN;kBACA,IAAIC,KAAA,CAAMC,OAAO,CAACH,IAAA,CAAKC,MAAM,GAAG;oBAC9B,MAAM,CAACG,WAAA,EAAaC,cAAA,CAAe,GAAGL,IAAA,CAAKC,MAAM,CAACK,MAAM,CACtD,CAAC,CAACC,SAAA,EAAWC,YAAA,CAAa,EAAEC,GAAA;sBAC1B,MAAMC,YAAA,GAAe,EAAE;sBACvB,MAAMC,eAAA,GAAkB,EAAE;sBAE1B,IAAIF,GAAA,EAAKG,OAAA,EAAS;wBAChBD,eAAA,CAAgBE,IAAI,CAACJ,GAAA;sBACvB;sBAEA,IAAIP,KAAA,CAAMC,OAAO,CAACM,GAAA,EAAK7B,IAAA,GAAO;wBAC5B6B,GAAA,CAAI7B,IAAI,CAACkC,OAAO,CAAEC,SAAA;0BAChB,IAAIA,SAAA,EAAWC,KAAA,EAAO;4BACpBN,YAAA,CAAaG,IAAI,CAACE,SAAA;0BACpB,OAAO;4BACLJ,eAAA,CAAgBE,IAAI,CAACE,SAAA;0BACvB;wBACF;sBACF;sBAEA,OAAO,CACL,C,GAAIR,SAAA,E,GAAcG,YAAA,CAAa,EAC/B,C,GAAIF,YAAA,E,GAAiBG,eAAA,CAAgB,CACtC;oBACH,GACA,CAAC,EAAE,EAAE,EAAE,CAAC;oBAGVtE,cAAA,CAAe;sBACb4E,IAAA,EAAM;sBACNhB,MAAA,EAAQG;oBACV;oBAEAC,cAAA,CAAeS,OAAO,CAAEL,KAAA;sBACtBxG,KAAA,CAAMiH,KAAK,CAACT,KAAA,CAAIG,OAAO,IAAI9D,IAAA,CAAKC,CAAC,CAAC;oBACpC;oBAEAT,YAAA,CAAa;oBACbe,SAAA,CAAU;oBACV;kBACF;gBACF,OAAO;kBACL;kBACA,MAAM8D,QAAA,GAAWnB,IAAA,EAAMoB,GAAA,IAAOpB,IAAA,EAAMqB,MAAA;kBAEpC;kBACA,IAAIF,QAAA,EAAU;oBACZlF,uBAAA,CAAwBkF,QAAA;kBAC1B;gBACF;cACF,GACC1B,IAAI,CAAC;gBACJ;gBACA,IAAIpB,YAAA,GAAeD,cAAA,GAAiBpD,oBAAA,EAAsB;kBACxDkD,eAAA,GAAkBoD,UAAA,CAChB;oBACEjE,SAAA,CAAU;kBACZ,GACArC,oBAAA,IAAwBqD,YAAA,GAAeD,cAAa;gBAExD,OAAO;kBACLf,SAAA,CAAU;gBACZ;cACF;YACJ;UACF;QACF;MACF;IACF;IAEAnB,QAAA,CAASyB,OAAO,CAACkD,IAAI,CAAC1D,QAAA;IACtB,KAAKS,YAAA;IAEL,OAAO;MACL,IAAIM,eAAA,EAAiB;QACnBqD,YAAA,CAAarD,eAAA;MACf;MACA,IAAIF,eAAA,CAAgBwB,MAAM,EAAE;QAC1B,IAAI;UACFxB,eAAA,CAAgBwD,KAAK,CAAC;QACxB,EAAE,OAAON,KAAA,EAAO;UACd;QAAA;MAEJ;MACA7D,SAAA,CAAU;IACZ;EACF,GACA,CAACC,eAAA,CAAgB,EACjB,CACE9B,GAAA,EACAL,UAAA,EACAkB,cAAA,EACAhB,SAAA,EACAyB,IAAA,EACA5B,EAAA,EACA8B,QAAA,EACAL,QAAA,EACAP,YAAA,EACAX,SAAA,EACAa,YAAA,EACAE,cAAA,EAAgBU,MAAA,EAChBX,SAAA,EACAT,iBAAA,EACAD,4BAAA,EACAF,qBAAA,EACAI,+BAAA,CACD;EAGH,oBACE0F,KAAA,CAAC;IAAIC,SAAA,EAAW3G,SAAA;eACbqC,MAAA,IAAUL,CAAA,CAAE,mBACZ,CAACK,MAAA,IAAUuE,OAAA,CAAQ/F,cAAA,kBAClBgG,IAAA,CAAC9H,KAAA,CAAM+H,QAAQ;gBACZ9E,CAAA,CAAE,wBAAwB;QACzB+E,QAAA,EAAUjH,eAAA,CAAgB;UAAEkH,IAAA,EAAMnG,cAAA;UAAgBkB;QAAK;MACzD;;;AAKV","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Localizer/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAkDA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Localizer/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAQvC,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAgEA,CAAA"}
@@ -5,9 +5,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import { getTranslation } from '@payloadcms/translations';
6
6
  import { useSearchParams } from 'next/navigation.js';
7
7
  import * as qs from 'qs-esm';
8
- import React from 'react';
8
+ import React, { Fragment } from 'react';
9
9
  import { useConfig } from '../../providers/Config/index.js';
10
- import { useLocale } from '../../providers/Locale/index.js';
10
+ import { useLocale, useLocaleLoading } from '../../providers/Locale/index.js';
11
11
  import { useTranslation } from '../../providers/Translation/index.js';
12
12
  import { parseSearchParams } from '../../utilities/parseSearchParams.js';
13
13
  import { Popup, PopupList } from '../Popup/index.js';
@@ -15,7 +15,7 @@ import { LocalizerLabel } from './LocalizerLabel/index.js';
15
15
  import './index.scss';
16
16
  const baseClass = 'localizer';
17
17
  export const Localizer = props => {
18
- const $ = _c(13);
18
+ const $ = _c(15);
19
19
  const {
20
20
  className
21
21
  } = props;
@@ -26,6 +26,9 @@ export const Localizer = props => {
26
26
  localization
27
27
  } = config;
28
28
  const searchParams = useSearchParams();
29
+ const {
30
+ setLocaleIsLoading
31
+ } = useLocaleLoading();
29
32
  const {
30
33
  i18n
31
34
  } = useTranslation();
@@ -44,9 +47,9 @@ export const Localizer = props => {
44
47
  }
45
48
  const t1 = t0.join(" ");
46
49
  let t2;
47
- if ($[2] !== i18n || $[3] !== locale.code || $[4] !== locales || $[5] !== searchParams || $[6] !== t1) {
50
+ if ($[2] !== i18n || $[3] !== locale.code || $[4] !== locales || $[5] !== searchParams || $[6] !== setLocaleIsLoading || $[7] !== t1) {
48
51
  let t3;
49
- if ($[8] !== i18n || $[9] !== locale.code || $[10] !== locales || $[11] !== searchParams) {
52
+ if ($[9] !== i18n || $[10] !== locale.code || $[11] !== locales || $[12] !== searchParams || $[13] !== setLocaleIsLoading) {
50
53
  t3 = t4 => {
51
54
  const {
52
55
  close
@@ -54,27 +57,40 @@ export const Localizer = props => {
54
57
  return _jsx(PopupList.ButtonGroup, {
55
58
  children: locales.map(localeOption => {
56
59
  const localeOptionLabel = getTranslation(localeOption.label, i18n);
57
- return _jsxs(PopupList.Button, {
60
+ return _jsx(PopupList.Button, {
58
61
  active: locale.code === localeOption.code,
62
+ disabled: locale.code === localeOption.code,
59
63
  href: qs.stringify({
60
64
  ...parseSearchParams(searchParams),
61
65
  locale: localeOption.code
62
66
  }, {
63
67
  addQueryPrefix: true
64
68
  }),
65
- onClick: close,
66
- children: [localeOptionLabel, localeOptionLabel !== localeOption.code && ` (${localeOption.code})`]
69
+ onClick: () => {
70
+ setLocaleIsLoading(true);
71
+ close();
72
+ },
73
+ children: localeOptionLabel !== localeOption.code ? _jsxs(Fragment, {
74
+ children: [localeOptionLabel, "\xA0", _jsx("span", {
75
+ className: `${baseClass}__locale-code`,
76
+ children: `(${localeOption.code})`
77
+ })]
78
+ }) : _jsx("span", {
79
+ className: `${baseClass}__locale-code`,
80
+ children: localeOptionLabel
81
+ })
67
82
  }, localeOption.code);
68
83
  })
69
84
  });
70
85
  };
71
- $[8] = i18n;
72
- $[9] = locale.code;
73
- $[10] = locales;
74
- $[11] = searchParams;
75
- $[12] = t3;
86
+ $[9] = i18n;
87
+ $[10] = locale.code;
88
+ $[11] = locales;
89
+ $[12] = searchParams;
90
+ $[13] = setLocaleIsLoading;
91
+ $[14] = t3;
76
92
  } else {
77
- t3 = $[12];
93
+ t3 = $[14];
78
94
  }
79
95
  t2 = _jsx("div", {
80
96
  className: t1,
@@ -90,10 +106,11 @@ export const Localizer = props => {
90
106
  $[3] = locale.code;
91
107
  $[4] = locales;
92
108
  $[5] = searchParams;
93
- $[6] = t1;
94
- $[7] = t2;
109
+ $[6] = setLocaleIsLoading;
110
+ $[7] = t1;
111
+ $[8] = t2;
95
112
  } else {
96
- t2 = $[7];
113
+ t2 = $[8];
97
114
  }
98
115
  return t2;
99
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","getTranslation","useSearchParams","qs","React","useConfig","useLocale","useTranslation","parseSearchParams","Popup","PopupList","LocalizerLabel","baseClass","Localizer","props","$","className","config","localization","searchParams","i18n","locale","locales","t0","filter","Boolean","t1","join","t2","code","t3","t4","close","_jsx","ButtonGroup","children","map","localeOption","localeOptionLabel","label","_jsxs","Button","active","href","stringify","addQueryPrefix","onClick","button","horizontalAlign","render"],"sources":["../../../src/elements/Localizer/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React from 'react'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { LocalizerLabel } from './LocalizerLabel/index.js'\nimport './index.scss'\n\nconst baseClass = 'localizer'\n\nexport const Localizer: React.FC<{\n className?: string\n}> = (props) => {\n const { className } = props\n const { config } = useConfig()\n const { localization } = config\n const searchParams = useSearchParams()\n\n const { i18n } = useTranslation()\n const locale = useLocale()\n\n if (localization) {\n const { locales } = localization\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n <Popup\n button={<LocalizerLabel />}\n horizontalAlign=\"right\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {locales.map((localeOption) => {\n const localeOptionLabel = getTranslation(localeOption.label, i18n)\n\n return (\n <PopupList.Button\n active={locale.code === localeOption.code}\n href={qs.stringify(\n {\n ...parseSearchParams(searchParams),\n locale: localeOption.code,\n },\n { addQueryPrefix: true },\n )}\n key={localeOption.code}\n onClick={close}\n >\n {localeOptionLabel}\n {localeOptionLabel !== localeOption.code && ` (${localeOption.code})`}\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n showScrollbar\n size=\"large\"\n />\n </div>\n )\n }\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,cAAc,QAAQ;AAC/B,SAASC,eAAe,QAAQ;AAChC,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,MAAW;AAElB,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,KAAK,EAAEC,SAAS,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,SAAA,GAERC,KAAA;EAAA,MAAAC,CAAA,GAAAf,EAAA;EACH;IAAAgB;EAAA,IAAsBF,KAAA;EACtB;IAAAG;EAAA,IAAmBZ,SAAA;EACnB;IAAAa;EAAA,IAAyBD,MAAA;EACzB,MAAAE,YAAA,GAAqBjB,eAAA;EAErB;IAAAkB;EAAA,IAAiBb,cAAA;EACjB,MAAAc,MAAA,GAAef,SAAA;EAAA,IAEXY,YAAA;IACF;MAAAI;IAAA,IAAoBJ,YAAA;IAAA,IAAAK,EAAA;IAAA,IAAAR,CAAA,QAAAC,SAAA;MAGFO,EAAA,IAAAX,SAAA,EAAYI,SAAA,EAAAQ,MAAA,CAAAC,OAAkB;MAAAV,CAAA,MAAAC,SAAA;MAAAD,CAAA,MAAAQ,EAAA;IAAA;MAAAA,EAAA,GAAAR,CAAA;IAAA;IAA9B,MAAAW,EAAA,GAAAH,EAA8B,CAAAI,IAAA,CAAc;IAAA,IAAAC,EAAA;IAAA,IAAAb,CAAA,QAAAK,IAAA,IAAAL,CAAA,QAAAM,MAAA,CAAAQ,IAAA,IAAAd,CAAA,QAAAO,OAAA,IAAAP,CAAA,QAAAI,YAAA,IAAAJ,CAAA,QAAAW,EAAA;MAAA,IAAAI,EAAA;MAAA,IAAAf,CAAA,QAAAK,IAAA,IAAAL,CAAA,QAAAM,MAAA,CAAAQ,IAAA,IAAAd,CAAA,SAAAO,OAAA,IAAAP,CAAA,SAAAI,YAAA;QAIhDW,EAAA,GAAAC,EAAA;UAAC;YAAAC;UAAA,IAAAD,EAAS;UAAA,OAChBE,IAAA,CAAAvB,SAAA,CAAAwB,WAAA;YAAAC,QAAA,EACGb,OAAA,CAAAc,GAAA,CAAAC,YAAA;cACC,MAAAC,iBAAA,GAA0BrC,cAAA,CAAeoC,YAAA,CAAAE,KAAA,EAAoBnB,IAAA;cAAA,OAG3DoB,KAAA,CAAA9B,SAAA,CAAA+B,MAAA;gBAAAC,MAAA,EACUrB,MAAA,CAAAQ,IAAA,KAAgBQ,YAAA,CAAAR,IAAiB;gBAAAc,IAAA,EACnCxC,EAAA,CAAAyC,SAAA;kBAAA,GAECpC,iBAAA,CAAkBW,YAAA,CAAa;kBAAAE,MAAA,EAC1BgB,YAAA,CAAAR;gBAAA;kBAAAgB,cAAA;gBAAA,CAEa;gBAAAC,OAAA,EAGhBd,KAAA;gBAAAG,QAAA,GAERG,iBAAA,EACAA,iBAAA,KAAsBD,YAAA,CAAAR,IAAiB,IAAI,KAAKQ,YAAA,CAAAR,IAAA,GAAoB;cAAA,GAJhEQ,YAAA,CAAAR,IAAiB;YAAA,CAO5B;UAAA,C;;;;;;;;;;MA1BRD,EAAA,GAAAK,IAAA,CAAC;QAAAjB,SAAA,EAAeU,EAA4C;QAAAS,QAAA,EAC1DF,IAAA,CAAAxB,KAAA;UAAAsC,MAAA,EACUd,IAAA,CAAAtB,cAAA,IAAC;UAAAqC,eAAA,EACO;UAAAC,MAAA,EACRnB,E;;gBA0BH;QAAA,C;;;;;;;;;;;WA9BTF,E;;;CAqCN","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","getTranslation","useSearchParams","qs","React","Fragment","useConfig","useLocale","useLocaleLoading","useTranslation","parseSearchParams","Popup","PopupList","LocalizerLabel","baseClass","Localizer","props","$","className","config","localization","searchParams","setLocaleIsLoading","i18n","locale","locales","t0","filter","Boolean","t1","join","t2","code","t3","t4","close","_jsx","ButtonGroup","children","map","localeOption","localeOptionLabel","label","Button","active","disabled","href","stringify","addQueryPrefix","onClick","_jsxs","button","horizontalAlign","render"],"sources":["../../../src/elements/Localizer/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { Fragment } from 'react'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale, useLocaleLoading } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { LocalizerLabel } from './LocalizerLabel/index.js'\nimport './index.scss'\n\nconst baseClass = 'localizer'\n\nexport const Localizer: React.FC<{\n className?: string\n}> = (props) => {\n const { className } = props\n const { config } = useConfig()\n const { localization } = config\n const searchParams = useSearchParams()\n const { setLocaleIsLoading } = useLocaleLoading()\n\n const { i18n } = useTranslation()\n const locale = useLocale()\n\n if (localization) {\n const { locales } = localization\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n <Popup\n button={<LocalizerLabel />}\n horizontalAlign=\"right\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {locales.map((localeOption) => {\n const localeOptionLabel = getTranslation(localeOption.label, i18n)\n\n return (\n <PopupList.Button\n active={locale.code === localeOption.code}\n disabled={locale.code === localeOption.code}\n href={qs.stringify(\n {\n ...parseSearchParams(searchParams),\n locale: localeOption.code,\n },\n { addQueryPrefix: true },\n )}\n key={localeOption.code}\n onClick={() => {\n setLocaleIsLoading(true)\n close()\n }}\n >\n {localeOptionLabel !== localeOption.code ? (\n <Fragment>\n {localeOptionLabel}\n &nbsp;\n <span className={`${baseClass}__locale-code`}>\n {`(${localeOption.code})`}\n </span>\n </Fragment>\n ) : (\n <span className={`${baseClass}__locale-code`}>{localeOptionLabel}</span>\n )}\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n showScrollbar\n size=\"large\"\n />\n </div>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
@@ -11,6 +11,7 @@ type MenuButtonProps = {
11
11
  active?: boolean;
12
12
  children: React.ReactNode;
13
13
  className?: string;
14
+ disabled?: boolean;
14
15
  href?: LinkProps['href'];
15
16
  id?: string;
16
17
  onClick?: (e?: React.MouseEvent) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Popup/PopupButtonList/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAG7C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,cAAc,CAAA;AAMrB,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;CACxC,CAUA,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACxB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;CACzC,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAoD5C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Popup/PopupButtonList/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAG7C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,cAAc,CAAA;AAMrB,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;CACxC,CAUA,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACxB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;CACzC,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAuD5C,CAAA"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  import LinkImport from 'next/link.js';
5
- import * as React from 'react'; // TODO: abstract this out to support all routers
5
+ import * as React from 'react';
6
6
  import './index.scss';
7
7
  const Link = LinkImport.default || LinkImport;
8
8
  const baseClass = 'popup-button-list';
@@ -23,36 +23,39 @@ export const Button = ({
23
23
  active,
24
24
  children,
25
25
  className,
26
+ disabled,
26
27
  href,
27
28
  onClick
28
29
  }) => {
29
30
  const classes = [`${baseClass}__button`, active && `${baseClass}__button--selected`, className].filter(Boolean).join(' ');
30
- if (href) {
31
- return /*#__PURE__*/_jsx(Link, {
32
- className: classes,
33
- href: href,
34
- id: id,
35
- onClick: e => {
36
- if (onClick) {
37
- onClick(e);
38
- }
39
- },
40
- prefetch: false,
41
- children: children
42
- });
43
- }
44
- if (onClick) {
45
- return /*#__PURE__*/_jsx("button", {
46
- className: classes,
47
- id: id,
48
- onClick: e => {
49
- if (onClick) {
50
- onClick(e);
51
- }
52
- },
53
- type: "button",
54
- children: children
55
- });
31
+ if (!disabled) {
32
+ if (href) {
33
+ return /*#__PURE__*/_jsx(Link, {
34
+ className: classes,
35
+ href: href,
36
+ id: id,
37
+ onClick: e => {
38
+ if (onClick) {
39
+ onClick(e);
40
+ }
41
+ },
42
+ prefetch: false,
43
+ children: children
44
+ });
45
+ }
46
+ if (onClick) {
47
+ return /*#__PURE__*/_jsx("button", {
48
+ className: classes,
49
+ id: id,
50
+ onClick: e => {
51
+ if (onClick) {
52
+ onClick(e);
53
+ }
54
+ },
55
+ type: "button",
56
+ children: children
57
+ });
58
+ }
56
59
  }
57
60
  return /*#__PURE__*/_jsx("div", {
58
61
  className: classes,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["LinkImport","React","Link","default","baseClass","ButtonGroup","buttonSize","children","className","textAlign","classes","filter","Boolean","join","_jsx","Button","id","active","href","onClick","e","prefetch","type"],"sources":["../../../../src/elements/Popup/PopupButtonList/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/link` dependency out from this component\nimport type { LinkProps } from 'next/link.js'\n\nimport LinkImport from 'next/link.js'\nimport * as React from 'react' // TODO: abstract this out to support all routers\n\nimport './index.scss'\n\nconst Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default\n\nconst baseClass = 'popup-button-list'\n\nexport const ButtonGroup: React.FC<{\n buttonSize?: 'default' | 'small'\n children: React.ReactNode\n className?: string\n textAlign?: 'center' | 'left' | 'right'\n}> = ({ buttonSize = 'default', children, className, textAlign = 'left' }) => {\n const classes = [\n baseClass,\n className,\n `${baseClass}__text-align--${textAlign}`,\n `${baseClass}__button-size--${buttonSize}`,\n ]\n .filter(Boolean)\n .join(' ')\n return <div className={classes}>{children}</div>\n}\n\ntype MenuButtonProps = {\n active?: boolean\n children: React.ReactNode\n className?: string\n href?: LinkProps['href']\n id?: string\n onClick?: (e?: React.MouseEvent) => void\n}\n\nexport const Button: React.FC<MenuButtonProps> = ({\n id,\n active,\n children,\n className,\n href,\n onClick,\n}) => {\n const classes = [`${baseClass}__button`, active && `${baseClass}__button--selected`, className]\n .filter(Boolean)\n .join(' ')\n\n if (href) {\n return (\n <Link\n className={classes}\n href={href}\n id={id}\n onClick={(e) => {\n if (onClick) {\n onClick(e)\n }\n }}\n prefetch={false}\n >\n {children}\n </Link>\n )\n }\n\n if (onClick) {\n return (\n <button\n className={classes}\n id={id}\n onClick={(e) => {\n if (onClick) {\n onClick(e)\n }\n }}\n type=\"button\"\n >\n {children}\n </button>\n )\n }\n\n return (\n <div className={classes} id={id}>\n {children}\n </div>\n )\n}\n"],"mappings":"AAAA;;;AAIA,OAAOA,UAAA,MAAgB;AACvB,YAAYC,KAAA,MAAW,QAAO,CAAC;AAE/B,OAAO;AAEP,MAAMC,IAAA,GAAQF,UAAA,CAAWG,OAAO,IAAIH,UAAA;AAEpC,MAAMI,SAAA,GAAY;AAElB,OAAO,MAAMC,WAAA,GAKRA,CAAC;EAAEC,UAAA,GAAa,SAAS;EAAEC,QAAQ;EAAEC,SAAS;EAAEC,SAAA,GAAY;AAAM,CAAE;EACvE,MAAMC,OAAA,GAAU,CACdN,SAAA,EACAI,SAAA,EACA,GAAGJ,SAAA,iBAA0BK,SAAA,EAAW,EACxC,GAAGL,SAAA,kBAA2BE,UAAA,EAAY,CAC3C,CACEK,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EACR,oBAAOC,IAAA,CAAC;IAAIN,SAAA,EAAWE,OAAA;cAAUH;;AACnC;AAWA,OAAO,MAAMQ,MAAA,GAAoCA,CAAC;EAChDC,EAAE;EACFC,MAAM;EACNV,QAAQ;EACRC,SAAS;EACTU,IAAI;EACJC;AAAO,CACR;EACC,MAAMT,OAAA,GAAU,CAAC,GAAGN,SAAA,UAAmB,EAAEa,MAAA,IAAU,GAAGb,SAAA,oBAA6B,EAAEI,SAAA,CAAU,CAC5FG,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EAER,IAAIK,IAAA,EAAM;IACR,oBACEJ,IAAA,CAACZ,IAAA;MACCM,SAAA,EAAWE,OAAA;MACXQ,IAAA,EAAMA,IAAA;MACNF,EAAA,EAAIA,EAAA;MACJG,OAAA,EAAUC,CAAA;QACR,IAAID,OAAA,EAAS;UACXA,OAAA,CAAQC,CAAA;QACV;MACF;MACAC,QAAA,EAAU;gBAETd;;EAGP;EAEA,IAAIY,OAAA,EAAS;IACX,oBACEL,IAAA,CAAC;MACCN,SAAA,EAAWE,OAAA;MACXM,EAAA,EAAIA,EAAA;MACJG,OAAA,EAAUC,CAAA;QACR,IAAID,OAAA,EAAS;UACXA,OAAA,CAAQC,CAAA;QACV;MACF;MACAE,IAAA,EAAK;gBAEJf;;EAGP;EAEA,oBACEO,IAAA,CAAC;IAAIN,SAAA,EAAWE,OAAA;IAASM,EAAA,EAAIA,EAAA;cAC1BT;;AAGP","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["LinkImport","React","Link","default","baseClass","ButtonGroup","buttonSize","children","className","textAlign","classes","filter","Boolean","join","_jsx","Button","id","active","disabled","href","onClick","e","prefetch","type"],"sources":["../../../../src/elements/Popup/PopupButtonList/index.tsx"],"sourcesContent":["'use client'\nimport type { LinkProps } from 'next/link.js'\n\nimport LinkImport from 'next/link.js'\nimport * as React from 'react'\n\nimport './index.scss'\n\nconst Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default\n\nconst baseClass = 'popup-button-list'\n\nexport const ButtonGroup: React.FC<{\n buttonSize?: 'default' | 'small'\n children: React.ReactNode\n className?: string\n textAlign?: 'center' | 'left' | 'right'\n}> = ({ buttonSize = 'default', children, className, textAlign = 'left' }) => {\n const classes = [\n baseClass,\n className,\n `${baseClass}__text-align--${textAlign}`,\n `${baseClass}__button-size--${buttonSize}`,\n ]\n .filter(Boolean)\n .join(' ')\n return <div className={classes}>{children}</div>\n}\n\ntype MenuButtonProps = {\n active?: boolean\n children: React.ReactNode\n className?: string\n disabled?: boolean\n href?: LinkProps['href']\n id?: string\n onClick?: (e?: React.MouseEvent) => void\n}\n\nexport const Button: React.FC<MenuButtonProps> = ({\n id,\n active,\n children,\n className,\n disabled,\n href,\n onClick,\n}) => {\n const classes = [`${baseClass}__button`, active && `${baseClass}__button--selected`, className]\n .filter(Boolean)\n .join(' ')\n\n if (!disabled) {\n if (href) {\n return (\n <Link\n className={classes}\n href={href}\n id={id}\n onClick={(e) => {\n if (onClick) {\n onClick(e)\n }\n }}\n prefetch={false}\n >\n {children}\n </Link>\n )\n }\n\n if (onClick) {\n return (\n <button\n className={classes}\n id={id}\n onClick={(e) => {\n if (onClick) {\n onClick(e)\n }\n }}\n type=\"button\"\n >\n {children}\n </button>\n )\n }\n }\n\n return (\n <div className={classes} id={id}>\n {children}\n </div>\n )\n}\n"],"mappings":"AAAA;;;AAGA,OAAOA,UAAA,MAAgB;AACvB,YAAYC,KAAA,MAAW;AAEvB,OAAO;AAEP,MAAMC,IAAA,GAAQF,UAAA,CAAWG,OAAO,IAAIH,UAAA;AAEpC,MAAMI,SAAA,GAAY;AAElB,OAAO,MAAMC,WAAA,GAKRA,CAAC;EAAEC,UAAA,GAAa,SAAS;EAAEC,QAAQ;EAAEC,SAAS;EAAEC,SAAA,GAAY;AAAM,CAAE;EACvE,MAAMC,OAAA,GAAU,CACdN,SAAA,EACAI,SAAA,EACA,GAAGJ,SAAA,iBAA0BK,SAAA,EAAW,EACxC,GAAGL,SAAA,kBAA2BE,UAAA,EAAY,CAC3C,CACEK,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EACR,oBAAOC,IAAA,CAAC;IAAIN,SAAA,EAAWE,OAAA;cAAUH;;AACnC;AAYA,OAAO,MAAMQ,MAAA,GAAoCA,CAAC;EAChDC,EAAE;EACFC,MAAM;EACNV,QAAQ;EACRC,SAAS;EACTU,QAAQ;EACRC,IAAI;EACJC;AAAO,CACR;EACC,MAAMV,OAAA,GAAU,CAAC,GAAGN,SAAA,UAAmB,EAAEa,MAAA,IAAU,GAAGb,SAAA,oBAA6B,EAAEI,SAAA,CAAU,CAC5FG,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EAER,IAAI,CAACK,QAAA,EAAU;IACb,IAAIC,IAAA,EAAM;MACR,oBACEL,IAAA,CAACZ,IAAA;QACCM,SAAA,EAAWE,OAAA;QACXS,IAAA,EAAMA,IAAA;QACNH,EAAA,EAAIA,EAAA;QACJI,OAAA,EAAUC,CAAA;UACR,IAAID,OAAA,EAAS;YACXA,OAAA,CAAQC,CAAA;UACV;QACF;QACAC,QAAA,EAAU;kBAETf;;IAGP;IAEA,IAAIa,OAAA,EAAS;MACX,oBACEN,IAAA,CAAC;QACCN,SAAA,EAAWE,OAAA;QACXM,EAAA,EAAIA,EAAA;QACJI,OAAA,EAAUC,CAAA;UACR,IAAID,OAAA,EAAS;YACXA,OAAA,CAAQC,CAAA;UACV;QACF;QACAE,IAAA,EAAK;kBAEJhB;;IAGP;EACF;EAEA,oBACEO,IAAA,CAAC;IAAIN,SAAA,EAAWE,OAAA;IAASM,EAAA,EAAIA,EAAA;cAC1BT;;AAGP","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,OAAO,CAAA;AAuBzB,OAAO,cAAc,CAAA;AAIrB,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkN1C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAA;AAuBzB,OAAO,cAAc,CAAA;AAIrB,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwN1C,CAAA"}
@@ -3,6 +3,7 @@
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { useModal } from '@faceless-ui/modal';
5
5
  import { getTranslation } from '@payloadcms/translations';
6
+ import * as qs from 'qs-esm';
6
7
  import React from 'react';
7
8
  import { toast } from 'sonner';
8
9
  import { FieldLabel } from '../../../fields/FieldLabel/index.js';
@@ -83,7 +84,7 @@ export const ScheduleDrawer = ({
83
84
  return [];
84
85
  }, [localization, i18n]);
85
86
  const fetchUpcoming = React.useCallback(async () => {
86
- const params = {
87
+ const query = {
87
88
  sort: 'waitUntil',
88
89
  where: {
89
90
  and: [{
@@ -98,19 +99,19 @@ export const ScheduleDrawer = ({
98
99
  }
99
100
  };
100
101
  if (collectionSlug) {
101
- params.where.and.push({
102
+ query.where.and.push({
102
103
  'input.doc.value': {
103
- equals: id
104
+ equals: String(id)
104
105
  }
105
106
  });
106
- params.where.and.push({
107
+ query.where.and.push({
107
108
  'input.doc.relationTo': {
108
109
  equals: collectionSlug
109
110
  }
110
111
  });
111
112
  }
112
113
  if (globalSlug) {
113
- params.where.and.push({
114
+ query.where.and.push({
114
115
  'input.global': {
115
116
  equals: globalSlug
116
117
  }
@@ -118,8 +119,13 @@ export const ScheduleDrawer = ({
118
119
  }
119
120
  const {
120
121
  docs
121
- } = await requests.get(`${serverURL}${api}/payload-jobs`, {
122
- params
122
+ } = await requests.post(`${serverURL}${api}/payload-jobs`, {
123
+ body: qs.stringify(query),
124
+ headers: {
125
+ 'Accept-Language': i18n.language,
126
+ 'Content-Type': 'application/x-www-form-urlencoded',
127
+ 'X-HTTP-Method-Override': 'GET'
128
+ }
123
129
  }).then(res => res.json());
124
130
  setUpcomingColumns(buildUpcomingColumns({
125
131
  dateFormat,
@@ -145,7 +151,7 @@ export const ScheduleDrawer = ({
145
151
  date,
146
152
  doc: collectionSlug ? {
147
153
  relationTo: collectionSlug,
148
- value: id
154
+ value: String(id)
149
155
  } : undefined,
150
156
  global: globalSlug || undefined,
151
157
  locale: publishSpecificLocale
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","getTranslation","React","toast","FieldLabel","Radio","useConfig","useDocumentInfo","useServerFunctions","useTranslation","requests","Banner","DrawerCloseButton","Button","DatePickerField","Drawer","Gutter","ReactSelect","ShimmerEffect","Table","buildUpcomingColumns","baseClass","defaultLocaleOption","label","value","ScheduleDrawer","slug","toggleModal","config","admin","dateFormat","localization","routes","api","serverURL","id","collectionSlug","globalSlug","title","i18n","t","schedulePublish","type","setType","useState","date","setDate","locale","setLocale","processing","setProcessing","modalTitle","upcoming","setUpcoming","upcomingColumns","setUpcomingColumns","localeOptions","useMemo","options","locales","map","code","unshift","fetchUpcoming","useCallback","params","sort","where","and","taskSlug","equals","waitUntil","greater_than","Date","push","docs","get","then","res","json","handleSave","error","publishSpecificLocale","doc","relationTo","undefined","global","success","err","console","message","useEffect","fetchInitialUpcoming","_jsxs","className","gutter","Header","_jsx","onClick","required","isSelected","onChange","option","path","readOnly","minDate","e","pickerAppearance","timeIntervals","length","Fragment","buttonStyle","disabled","appearance","columns","data"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"sourcesContent":["/* eslint-disable no-console */\n'use client'\n\nimport type { Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport type { Column } from '../../Table/index.js'\nimport type { PublishType, UpcomingEvent } from './types.js'\n\nimport { FieldLabel } from '../../../fields/FieldLabel/index.js'\nimport { Radio } from '../../../fields/RadioGroup/Radio/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Banner } from '../../Banner/index.js'\nimport { DrawerCloseButton } from '../../BulkUpload/DrawerCloseButton/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DatePickerField } from '../../DatePicker/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { Gutter } from '../../Gutter/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Table } from '../../Table/index.js'\nimport { buildUpcomingColumns } from './buildUpcomingColumns.js'\nimport './index.scss'\n\nconst baseClass = 'schedule-publish'\n\ntype Props = {\n slug: string\n}\n\nconst defaultLocaleOption = {\n label: 'All',\n value: 'all',\n}\n\nexport const ScheduleDrawer: React.FC<Props> = ({ slug }) => {\n const { toggleModal } = useModal()\n const {\n config: {\n admin: { dateFormat },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, title } = useDocumentInfo()\n const { i18n, t } = useTranslation()\n const { schedulePublish } = useServerFunctions()\n const [type, setType] = React.useState<PublishType>('publish')\n const [date, setDate] = React.useState<Date>()\n const [locale, setLocale] = React.useState<{ label: string; value: string }>(defaultLocaleOption)\n const [processing, setProcessing] = React.useState(false)\n const modalTitle = t('general:schedulePublishFor', { title })\n const [upcoming, setUpcoming] = React.useState<UpcomingEvent[]>()\n const [upcomingColumns, setUpcomingColumns] = React.useState<Column[]>()\n\n const localeOptions = React.useMemo(() => {\n if (localization) {\n const options = localization.locales.map(({ code, label }) => ({\n label: getTranslation(label, i18n),\n value: code,\n }))\n\n options.unshift(defaultLocaleOption)\n\n return options\n }\n\n return []\n }, [localization, i18n])\n\n const fetchUpcoming = React.useCallback(async () => {\n const params: { sort: string; where: Where } = {\n sort: 'waitUntil',\n where: {\n and: [\n {\n taskSlug: {\n equals: 'schedulePublish',\n },\n },\n {\n waitUntil: {\n greater_than: new Date(),\n },\n },\n ],\n },\n }\n\n if (collectionSlug) {\n params.where.and.push({\n 'input.doc.value': {\n equals: id,\n },\n })\n\n params.where.and.push({\n 'input.doc.relationTo': {\n equals: collectionSlug,\n },\n })\n }\n\n if (globalSlug) {\n params.where.and.push({\n 'input.global': {\n equals: globalSlug,\n },\n })\n }\n\n const { docs } = await requests\n .get(`${serverURL}${api}/payload-jobs`, { params })\n .then((res) => res.json())\n\n setUpcomingColumns(buildUpcomingColumns({ dateFormat, docs, i18n, localization, t }))\n setUpcoming(docs)\n }, [api, collectionSlug, dateFormat, globalSlug, i18n, id, serverURL, t, localization])\n\n const handleSave = React.useCallback(async () => {\n if (!date) {\n return toast.error(t('general:noDateSelected'))\n }\n\n setProcessing(true)\n\n let publishSpecificLocale: string\n\n if (typeof locale === 'object' && locale.value !== 'all' && type === 'publish') {\n publishSpecificLocale = locale.value\n }\n\n try {\n await schedulePublish({\n type,\n date,\n doc: collectionSlug\n ? {\n relationTo: collectionSlug,\n value: id,\n }\n : undefined,\n global: globalSlug || undefined,\n locale: publishSpecificLocale,\n })\n\n setDate(undefined)\n toast.success(t('version:scheduledSuccessfully'))\n void fetchUpcoming()\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n\n setProcessing(false)\n }, [date, t, schedulePublish, type, locale, collectionSlug, id, globalSlug, fetchUpcoming])\n\n React.useEffect(() => {\n if (!upcoming) {\n const fetchInitialUpcoming = async () => {\n await fetchUpcoming()\n }\n\n void fetchInitialUpcoming()\n }\n }, [upcoming, fetchUpcoming])\n\n return (\n <Drawer\n className={baseClass}\n gutter={false}\n Header={\n <div className={`${baseClass}__drawer-header`}>\n <h2 title={modalTitle}>{modalTitle}</h2>\n <DrawerCloseButton onClick={() => toggleModal(slug)} />\n </div>\n }\n slug={slug}\n >\n <Gutter className={`${baseClass}__scheduler`}>\n <FieldLabel label={t('version:type')} required />\n <ul className={`${baseClass}__type`}>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'publish'}\n onChange={() => setType('publish')}\n option={{ label: t('version:publish'), value: 'publish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'unpublish'}\n onChange={() => setType('unpublish')}\n option={{ label: t('version:unpublish'), value: 'unpublish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n </ul>\n <br />\n <FieldLabel label={t('general:time')} required />\n <DatePickerField\n minDate={new Date()}\n onChange={(e) => setDate(e)}\n pickerAppearance=\"dayAndTime\"\n readOnly={processing}\n timeIntervals={5}\n value={date}\n />\n <br />\n {localeOptions.length > 0 && type === 'publish' && (\n <React.Fragment>\n <FieldLabel label={t('localization:localeToPublish')} />\n <ReactSelect\n onChange={(e) => setLocale(e as { label: string; value: string })}\n options={localeOptions}\n value={locale}\n />\n <br />\n </React.Fragment>\n )}\n <div className={`${baseClass}__actions`}>\n <Button buttonStyle=\"primary\" disabled={processing} onClick={handleSave} type=\"button\">\n {t('general:save')}\n </Button>\n {processing ? <span>{t('general:saving')}</span> : null}\n </div>\n </Gutter>\n <Gutter className={`${baseClass}__upcoming`}>\n <h4>{t('general:upcomingEvents')}</h4>\n {!upcoming && <ShimmerEffect />}\n {upcoming?.length === 0 && (\n <Banner type=\"info\">{t('general:noUpcomingEventsScheduled')}</Banner>\n )}\n {upcoming?.length > 0 && (\n <Table appearance=\"condensed\" columns={upcomingColumns} data={upcoming} />\n )}\n </Gutter>\n </Drawer>\n )\n}\n"],"mappings":"AAAA,+BACA;;;AAIA,SAASA,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,OAAOC,KAAA,MAAW;AAClB,SAASC,KAAK,QAAQ;AAKtB,SAASC,UAAU,QAAQ;AAC3B,SAASC,KAAK,QAAQ;AACtB,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,QAAQ,QAAQ;AACzB,SAASC,MAAM,QAAQ;AACvB,SAASC,iBAAiB,QAAQ;AAClC,SAASC,MAAM,QAAQ;AACvB,SAASC,eAAe,QAAQ;AAChC,SAASC,MAAM,QAAQ;AACvB,SAASC,MAAM,QAAQ;AACvB,SAASC,WAAW,QAAQ;AAC5B,SAASC,aAAa,QAAQ;AAC9B,SAASC,KAAK,QAAQ;AACtB,SAASC,oBAAoB,QAAQ;AACrC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAMlB,MAAMC,mBAAA,GAAsB;EAC1BC,KAAA,EAAO;EACPC,KAAA,EAAO;AACT;AAEA,OAAO,MAAMC,cAAA,GAAkCA,CAAC;EAAEC;AAAI,CAAE;EACtD,MAAM;IAAEC;EAAW,CAAE,GAAG3B,QAAA;EACxB,MAAM;IACJ4B,MAAA,EAAQ;MACNC,KAAA,EAAO;QAAEC;MAAU,CAAE;MACrBC,YAAY;MACZC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS;EACV,CACF,GAAG5B,SAAA;EACJ,MAAM;IAAE6B,EAAE;IAAEC,cAAc;IAAEC,UAAU;IAAEC;EAAK,CAAE,GAAG/B,eAAA;EAClD,MAAM;IAAEgC,IAAI;IAAEC;EAAC,CAAE,GAAG/B,cAAA;EACpB,MAAM;IAAEgC;EAAe,CAAE,GAAGjC,kBAAA;EAC5B,MAAM,CAACkC,IAAA,EAAMC,OAAA,CAAQ,GAAGzC,KAAA,CAAM0C,QAAQ,CAAc;EACpD,MAAM,CAACC,IAAA,EAAMC,OAAA,CAAQ,GAAG5C,KAAA,CAAM0C,QAAQ;EACtC,MAAM,CAACG,MAAA,EAAQC,SAAA,CAAU,GAAG9C,KAAA,CAAM0C,QAAQ,CAAmCtB,mBAAA;EAC7E,MAAM,CAAC2B,UAAA,EAAYC,aAAA,CAAc,GAAGhD,KAAA,CAAM0C,QAAQ,CAAC;EACnD,MAAMO,UAAA,GAAaX,CAAA,CAAE,8BAA8B;IAAEF;EAAM;EAC3D,MAAM,CAACc,QAAA,EAAUC,WAAA,CAAY,GAAGnD,KAAA,CAAM0C,QAAQ;EAC9C,MAAM,CAACU,eAAA,EAAiBC,kBAAA,CAAmB,GAAGrD,KAAA,CAAM0C,QAAQ;EAE5D,MAAMY,aAAA,GAAgBtD,KAAA,CAAMuD,OAAO,CAAC;IAClC,IAAI1B,YAAA,EAAc;MAChB,MAAM2B,OAAA,GAAU3B,YAAA,CAAa4B,OAAO,CAACC,GAAG,CAAC,CAAC;QAAEC,IAAI;QAAEtC;MAAK,CAAE,MAAM;QAC7DA,KAAA,EAAOtB,cAAA,CAAesB,KAAA,EAAOgB,IAAA;QAC7Bf,KAAA,EAAOqC;MACT;MAEAH,OAAA,CAAQI,OAAO,CAACxC,mBAAA;MAEhB,OAAOoC,OAAA;IACT;IAEA,OAAO,EAAE;EACX,GAAG,CAAC3B,YAAA,EAAcQ,IAAA,CAAK;EAEvB,MAAMwB,aAAA,GAAgB7D,KAAA,CAAM8D,WAAW,CAAC;IACtC,MAAMC,MAAA,GAAyC;MAC7CC,IAAA,EAAM;MACNC,KAAA,EAAO;QACLC,GAAA,EAAK,CACH;UACEC,QAAA,EAAU;YACRC,MAAA,EAAQ;UACV;QACF,GACA;UACEC,SAAA,EAAW;YACTC,YAAA,EAAc,IAAIC,IAAA;UACpB;QACF;MAEJ;IACF;IAEA,IAAIrC,cAAA,EAAgB;MAClB6B,MAAA,CAAOE,KAAK,CAACC,GAAG,CAACM,IAAI,CAAC;QACpB,mBAAmB;UACjBJ,MAAA,EAAQnC;QACV;MACF;MAEA8B,MAAA,CAAOE,KAAK,CAACC,GAAG,CAACM,IAAI,CAAC;QACpB,wBAAwB;UACtBJ,MAAA,EAAQlC;QACV;MACF;IACF;IAEA,IAAIC,UAAA,EAAY;MACd4B,MAAA,CAAOE,KAAK,CAACC,GAAG,CAACM,IAAI,CAAC;QACpB,gBAAgB;UACdJ,MAAA,EAAQjC;QACV;MACF;IACF;IAEA,MAAM;MAAEsC;IAAI,CAAE,GAAG,MAAMjE,QAAA,CACpBkE,GAAG,CAAC,GAAG1C,SAAA,GAAYD,GAAA,eAAkB,EAAE;MAAEgC;IAAO,GAChDY,IAAI,CAAEC,GAAA,IAAQA,GAAA,CAAIC,IAAI;IAEzBxB,kBAAA,CAAmBnC,oBAAA,CAAqB;MAAEU,UAAA;MAAY6C,IAAA;MAAMpC,IAAA;MAAMR,YAAA;MAAcS;IAAE;IAClFa,WAAA,CAAYsB,IAAA;EACd,GAAG,CAAC1C,GAAA,EAAKG,cAAA,EAAgBN,UAAA,EAAYO,UAAA,EAAYE,IAAA,EAAMJ,EAAA,EAAID,SAAA,EAAWM,CAAA,EAAGT,YAAA,CAAa;EAEtF,MAAMiD,UAAA,GAAa9E,KAAA,CAAM8D,WAAW,CAAC;IACnC,IAAI,CAACnB,IAAA,EAAM;MACT,OAAO1C,KAAA,CAAM8E,KAAK,CAACzC,CAAA,CAAE;IACvB;IAEAU,aAAA,CAAc;IAEd,IAAIgC,qBAAA;IAEJ,IAAI,OAAOnC,MAAA,KAAW,YAAYA,MAAA,CAAOvB,KAAK,KAAK,SAASkB,IAAA,KAAS,WAAW;MAC9EwC,qBAAA,GAAwBnC,MAAA,CAAOvB,KAAK;IACtC;IAEA,IAAI;MACF,MAAMiB,eAAA,CAAgB;QACpBC,IAAA;QACAG,IAAA;QACAsC,GAAA,EAAK/C,cAAA,GACD;UACEgD,UAAA,EAAYhD,cAAA;UACZZ,KAAA,EAAOW;QACT,IACAkD,SAAA;QACJC,MAAA,EAAQjD,UAAA,IAAcgD,SAAA;QACtBtC,MAAA,EAAQmC;MACV;MAEApC,OAAA,CAAQuC,SAAA;MACRlF,KAAA,CAAMoF,OAAO,CAAC/C,CAAA,CAAE;MAChB,KAAKuB,aAAA;IACP,EAAE,OAAOyB,GAAA,EAAK;MACZC,OAAA,CAAQR,KAAK,CAACO,GAAA;MACdrF,KAAA,CAAM8E,KAAK,CAACO,GAAA,CAAIE,OAAO;IACzB;IAEAxC,aAAA,CAAc;EAChB,GAAG,CAACL,IAAA,EAAML,CAAA,EAAGC,eAAA,EAAiBC,IAAA,EAAMK,MAAA,EAAQX,cAAA,EAAgBD,EAAA,EAAIE,UAAA,EAAY0B,aAAA,CAAc;EAE1F7D,KAAA,CAAMyF,SAAS,CAAC;IACd,IAAI,CAACvC,QAAA,EAAU;MACb,MAAMwC,oBAAA,GAAuB,MAAAA,CAAA;QAC3B,MAAM7B,aAAA;MACR;MAEA,KAAK6B,oBAAA;IACP;EACF,GAAG,CAACxC,QAAA,EAAUW,aAAA,CAAc;EAE5B,oBACE8B,KAAA,CAAC9E,MAAA;IACC+E,SAAA,EAAWzE,SAAA;IACX0E,MAAA,EAAQ;IACRC,MAAA,eACEH,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGzE,SAAA,iBAA0B;8BAC3C4E,IAAA,CAAC;QAAG3D,KAAA,EAAOa,UAAA;kBAAaA;uBACxB8C,IAAA,CAACrF,iBAAA;QAAkBsF,OAAA,EAASA,CAAA,KAAMvE,WAAA,CAAYD,IAAA;;;IAGlDA,IAAA,EAAMA,IAAA;4BAENmE,KAAA,CAAC7E,MAAA;MAAO8E,SAAA,EAAW,GAAGzE,SAAA,aAAsB;8BAC1C4E,IAAA,CAAC7F,UAAA;QAAWmB,KAAA,EAAOiB,CAAA,CAAE;QAAiB2D,QAAQ;uBAC9CN,KAAA,CAAC;QAAGC,SAAA,EAAW,GAAGzE,SAAA,QAAiB;gCACjC4E,IAAA,CAAC;oBACC,aAAAA,IAAA,CAAC5F,KAAA;YACC8B,EAAA,EAAI,GAAGT,IAAA,OAAW;YAClB0E,UAAA,EAAY1D,IAAA,KAAS;YACrB2D,QAAA,EAAUA,CAAA,KAAM1D,OAAA,CAAQ;YACxB2D,MAAA,EAAQ;cAAE/E,KAAA,EAAOiB,CAAA,CAAE;cAAoBhB,KAAA,EAAO;YAAU;YACxD+E,IAAA,EAAM,GAAG7E,IAAA,OAAW;YACpB8E,QAAA,EAAUvD;;yBAGdgD,IAAA,CAAC;oBACC,aAAAA,IAAA,CAAC5F,KAAA;YACC8B,EAAA,EAAI,GAAGT,IAAA,OAAW;YAClB0E,UAAA,EAAY1D,IAAA,KAAS;YACrB2D,QAAA,EAAUA,CAAA,KAAM1D,OAAA,CAAQ;YACxB2D,MAAA,EAAQ;cAAE/E,KAAA,EAAOiB,CAAA,CAAE;cAAsBhB,KAAA,EAAO;YAAY;YAC5D+E,IAAA,EAAM,GAAG7E,IAAA,OAAW;YACpB8E,QAAA,EAAUvD;;;uBAIhBgD,IAAA,CAAC,W,aACDA,IAAA,CAAC7F,UAAA;QAAWmB,KAAA,EAAOiB,CAAA,CAAE;QAAiB2D,QAAQ;uBAC9CF,IAAA,CAACnF,eAAA;QACC2F,OAAA,EAAS,IAAIhC,IAAA;QACb4B,QAAA,EAAWK,CAAA,IAAM5D,OAAA,CAAQ4D,CAAA;QACzBC,gBAAA,EAAiB;QACjBH,QAAA,EAAUvD,UAAA;QACV2D,aAAA,EAAe;QACfpF,KAAA,EAAOqB;uBAEToD,IAAA,CAAC,WACAzC,aAAA,CAAcqD,MAAM,GAAG,KAAKnE,IAAA,KAAS,0BACpCmD,KAAA,CAAC3F,KAAA,CAAM4G,QAAQ;gCACbb,IAAA,CAAC7F,UAAA;UAAWmB,KAAA,EAAOiB,CAAA,CAAE;yBACrByD,IAAA,CAAChF,WAAA;UACCoF,QAAA,EAAWK,GAAA,IAAM1D,SAAA,CAAU0D,GAAA;UAC3BhD,OAAA,EAASF,aAAA;UACThC,KAAA,EAAOuB;yBAETkD,IAAA,CAAC;uBAGLJ,KAAA,CAAC;QAAIC,SAAA,EAAW,GAAGzE,SAAA,WAAoB;gCACrC4E,IAAA,CAACpF,MAAA;UAAOkG,WAAA,EAAY;UAAUC,QAAA,EAAU/D,UAAA;UAAYiD,OAAA,EAASlB,UAAA;UAAYtC,IAAA,EAAK;oBAC3EF,CAAA,CAAE;YAEJS,UAAA,gBAAagD,IAAA,CAAC;oBAAMzD,CAAA,CAAE;aAA4B;;qBAGvDqD,KAAA,CAAC7E,MAAA;MAAO8E,SAAA,EAAW,GAAGzE,SAAA,YAAqB;8BACzC4E,IAAA,CAAC;kBAAIzD,CAAA,CAAE;UACN,CAACY,QAAA,iBAAY6C,IAAA,CAAC/E,aAAA,OACdkC,QAAA,EAAUyD,MAAA,KAAW,kBACpBZ,IAAA,CAACtF,MAAA;QAAO+B,IAAA,EAAK;kBAAQF,CAAA,CAAE;UAExBY,QAAA,EAAUyD,MAAA,GAAS,kBAClBZ,IAAA,CAAC9E,KAAA;QAAM8F,UAAA,EAAW;QAAYC,OAAA,EAAS5D,eAAA;QAAiB6D,IAAA,EAAM/D;;;;AAKxE","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","getTranslation","qs","React","toast","FieldLabel","Radio","useConfig","useDocumentInfo","useServerFunctions","useTranslation","requests","Banner","DrawerCloseButton","Button","DatePickerField","Drawer","Gutter","ReactSelect","ShimmerEffect","Table","buildUpcomingColumns","baseClass","defaultLocaleOption","label","value","ScheduleDrawer","slug","toggleModal","config","admin","dateFormat","localization","routes","api","serverURL","id","collectionSlug","globalSlug","title","i18n","t","schedulePublish","type","setType","useState","date","setDate","locale","setLocale","processing","setProcessing","modalTitle","upcoming","setUpcoming","upcomingColumns","setUpcomingColumns","localeOptions","useMemo","options","locales","map","code","unshift","fetchUpcoming","useCallback","query","sort","where","and","taskSlug","equals","waitUntil","greater_than","Date","push","String","docs","post","body","stringify","headers","language","then","res","json","handleSave","error","publishSpecificLocale","doc","relationTo","undefined","global","success","err","console","message","useEffect","fetchInitialUpcoming","_jsxs","className","gutter","Header","_jsx","onClick","required","isSelected","onChange","option","path","readOnly","minDate","e","pickerAppearance","timeIntervals","length","Fragment","buttonStyle","disabled","appearance","columns","data"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"sourcesContent":["/* eslint-disable no-console */\n'use client'\n\nimport type { Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport type { Column } from '../../Table/index.js'\nimport type { PublishType, UpcomingEvent } from './types.js'\n\nimport { FieldLabel } from '../../../fields/FieldLabel/index.js'\nimport { Radio } from '../../../fields/RadioGroup/Radio/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Banner } from '../../Banner/index.js'\nimport { DrawerCloseButton } from '../../BulkUpload/DrawerCloseButton/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DatePickerField } from '../../DatePicker/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { Gutter } from '../../Gutter/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Table } from '../../Table/index.js'\nimport { buildUpcomingColumns } from './buildUpcomingColumns.js'\nimport './index.scss'\n\nconst baseClass = 'schedule-publish'\n\ntype Props = {\n slug: string\n}\n\nconst defaultLocaleOption = {\n label: 'All',\n value: 'all',\n}\n\nexport const ScheduleDrawer: React.FC<Props> = ({ slug }) => {\n const { toggleModal } = useModal()\n const {\n config: {\n admin: { dateFormat },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, title } = useDocumentInfo()\n const { i18n, t } = useTranslation()\n const { schedulePublish } = useServerFunctions()\n const [type, setType] = React.useState<PublishType>('publish')\n const [date, setDate] = React.useState<Date>()\n const [locale, setLocale] = React.useState<{ label: string; value: string }>(defaultLocaleOption)\n const [processing, setProcessing] = React.useState(false)\n const modalTitle = t('general:schedulePublishFor', { title })\n const [upcoming, setUpcoming] = React.useState<UpcomingEvent[]>()\n const [upcomingColumns, setUpcomingColumns] = React.useState<Column[]>()\n\n const localeOptions = React.useMemo(() => {\n if (localization) {\n const options = localization.locales.map(({ code, label }) => ({\n label: getTranslation(label, i18n),\n value: code,\n }))\n\n options.unshift(defaultLocaleOption)\n\n return options\n }\n\n return []\n }, [localization, i18n])\n\n const fetchUpcoming = React.useCallback(async () => {\n const query: { sort: string; where: Where } = {\n sort: 'waitUntil',\n where: {\n and: [\n {\n taskSlug: {\n equals: 'schedulePublish',\n },\n },\n {\n waitUntil: {\n greater_than: new Date(),\n },\n },\n ],\n },\n }\n\n if (collectionSlug) {\n query.where.and.push({\n 'input.doc.value': {\n equals: String(id),\n },\n })\n query.where.and.push({\n 'input.doc.relationTo': {\n equals: collectionSlug,\n },\n })\n }\n\n if (globalSlug) {\n query.where.and.push({\n 'input.global': {\n equals: globalSlug,\n },\n })\n }\n\n const { docs } = await requests\n .post(`${serverURL}${api}/payload-jobs`, {\n body: qs.stringify(query),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n })\n .then((res) => res.json())\n\n setUpcomingColumns(buildUpcomingColumns({ dateFormat, docs, i18n, localization, t }))\n setUpcoming(docs)\n }, [api, collectionSlug, dateFormat, globalSlug, i18n, id, serverURL, t, localization])\n\n const handleSave = React.useCallback(async () => {\n if (!date) {\n return toast.error(t('general:noDateSelected'))\n }\n\n setProcessing(true)\n\n let publishSpecificLocale: string\n\n if (typeof locale === 'object' && locale.value !== 'all' && type === 'publish') {\n publishSpecificLocale = locale.value\n }\n\n try {\n await schedulePublish({\n type,\n date,\n doc: collectionSlug\n ? {\n relationTo: collectionSlug,\n value: String(id),\n }\n : undefined,\n global: globalSlug || undefined,\n locale: publishSpecificLocale,\n })\n\n setDate(undefined)\n toast.success(t('version:scheduledSuccessfully'))\n void fetchUpcoming()\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n\n setProcessing(false)\n }, [date, t, schedulePublish, type, locale, collectionSlug, id, globalSlug, fetchUpcoming])\n\n React.useEffect(() => {\n if (!upcoming) {\n const fetchInitialUpcoming = async () => {\n await fetchUpcoming()\n }\n\n void fetchInitialUpcoming()\n }\n }, [upcoming, fetchUpcoming])\n\n return (\n <Drawer\n className={baseClass}\n gutter={false}\n Header={\n <div className={`${baseClass}__drawer-header`}>\n <h2 title={modalTitle}>{modalTitle}</h2>\n <DrawerCloseButton onClick={() => toggleModal(slug)} />\n </div>\n }\n slug={slug}\n >\n <Gutter className={`${baseClass}__scheduler`}>\n <FieldLabel label={t('version:type')} required />\n <ul className={`${baseClass}__type`}>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'publish'}\n onChange={() => setType('publish')}\n option={{ label: t('version:publish'), value: 'publish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'unpublish'}\n onChange={() => setType('unpublish')}\n option={{ label: t('version:unpublish'), value: 'unpublish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n </ul>\n <br />\n <FieldLabel label={t('general:time')} required />\n <DatePickerField\n minDate={new Date()}\n onChange={(e) => setDate(e)}\n pickerAppearance=\"dayAndTime\"\n readOnly={processing}\n timeIntervals={5}\n value={date}\n />\n <br />\n {localeOptions.length > 0 && type === 'publish' && (\n <React.Fragment>\n <FieldLabel label={t('localization:localeToPublish')} />\n <ReactSelect\n onChange={(e) => setLocale(e as { label: string; value: string })}\n options={localeOptions}\n value={locale}\n />\n <br />\n </React.Fragment>\n )}\n <div className={`${baseClass}__actions`}>\n <Button buttonStyle=\"primary\" disabled={processing} onClick={handleSave} type=\"button\">\n {t('general:save')}\n </Button>\n {processing ? <span>{t('general:saving')}</span> : null}\n </div>\n </Gutter>\n <Gutter className={`${baseClass}__upcoming`}>\n <h4>{t('general:upcomingEvents')}</h4>\n {!upcoming && <ShimmerEffect />}\n {upcoming?.length === 0 && (\n <Banner type=\"info\">{t('general:noUpcomingEventsScheduled')}</Banner>\n )}\n {upcoming?.length > 0 && (\n <Table appearance=\"condensed\" columns={upcomingColumns} data={upcoming} />\n )}\n </Gutter>\n </Drawer>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -84,7 +84,7 @@ export const RelationshipTable = props => {
84
84
  if (filterOptions) {
85
85
  newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOptions);
86
86
  }
87
- // map columns from string[] to ColumnPreferences
87
+ // map columns from string[] to ListPreferences['columns']
88
88
  const defaultColumns = field.admin.defaultColumns ? field.admin.defaultColumns.map(accessor => ({
89
89
  accessor,
90
90
  active: true