@payloadcms/ui 3.5.0 → 3.5.1-canary.15a5791

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 (76) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +22 -3
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/elements/CodeEditor/CodeEditor.js +39 -32
  5. package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
  6. package/dist/elements/CodeEditor/types.d.ts +4 -0
  7. package/dist/elements/CodeEditor/types.d.ts.map +1 -1
  8. package/dist/elements/CodeEditor/types.js.map +1 -1
  9. package/dist/elements/EditMany/index.d.ts.map +1 -1
  10. package/dist/elements/EditMany/index.js +66 -44
  11. package/dist/elements/EditMany/index.js.map +1 -1
  12. package/dist/elements/FieldSelect/index.d.ts +2 -2
  13. package/dist/elements/FieldSelect/index.d.ts.map +1 -1
  14. package/dist/elements/FieldSelect/index.js.map +1 -1
  15. package/dist/elements/ListControls/getTextFieldsToBeSearched.d.ts.map +1 -1
  16. package/dist/elements/ListControls/getTextFieldsToBeSearched.js +2 -3
  17. package/dist/elements/ListControls/getTextFieldsToBeSearched.js.map +1 -1
  18. package/dist/elements/TableColumns/buildColumnState.d.ts +3 -3
  19. package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
  20. package/dist/elements/TableColumns/buildColumnState.js +6 -7
  21. package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
  22. package/dist/elements/TableColumns/filterFields.d.ts +4 -0
  23. package/dist/elements/TableColumns/filterFields.d.ts.map +1 -1
  24. package/dist/elements/TableColumns/filterFields.js +11 -6
  25. package/dist/elements/TableColumns/filterFields.js.map +1 -1
  26. package/dist/elements/TableColumns/getInitialColumns.d.ts +7 -2
  27. package/dist/elements/TableColumns/getInitialColumns.d.ts.map +1 -1
  28. package/dist/elements/TableColumns/getInitialColumns.js +5 -0
  29. package/dist/elements/TableColumns/getInitialColumns.js.map +1 -1
  30. package/dist/elements/TableColumns/index.d.ts.map +1 -1
  31. package/dist/elements/TableColumns/index.js +5 -2
  32. package/dist/elements/TableColumns/index.js.map +1 -1
  33. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  34. package/dist/elements/WhereBuilder/Condition/index.js +100 -259
  35. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  36. package/dist/elements/WhereBuilder/reduceClientFields.js +1 -1
  37. package/dist/elements/WhereBuilder/reduceClientFields.js.map +1 -1
  38. package/dist/exports/client/{CodeEditor-FR4GQI3P.js → CodeEditor-W7RSWONH.js} +2 -2
  39. package/dist/exports/client/{chunk-RO7ZK4KN.js → chunk-3MXUY6XL.js} +6 -6
  40. package/dist/exports/client/chunk-3MXUY6XL.js.map +8 -0
  41. package/dist/exports/client/index.d.ts +4 -0
  42. package/dist/exports/client/index.d.ts.map +1 -1
  43. package/dist/exports/client/index.js +10 -10
  44. package/dist/exports/client/index.js.map +4 -4
  45. package/dist/exports/shared/index.js +2 -2
  46. package/dist/exports/shared/index.js.map +3 -3
  47. package/dist/fields/Tabs/index.d.ts +15 -0
  48. package/dist/fields/Tabs/index.d.ts.map +1 -1
  49. package/dist/fields/Tabs/index.js +2 -2
  50. package/dist/fields/Tabs/index.js.map +1 -1
  51. package/dist/forms/Form/index.d.ts.map +1 -1
  52. package/dist/forms/Form/index.js +25 -14
  53. package/dist/forms/Form/index.js.map +1 -1
  54. package/dist/forms/Form/types.d.ts +9 -2
  55. package/dist/forms/Form/types.d.ts.map +1 -1
  56. package/dist/forms/Form/types.js.map +1 -1
  57. package/dist/hooks/useUseAsTitle.d.ts.map +1 -1
  58. package/dist/hooks/useUseAsTitle.js +2 -2
  59. package/dist/hooks/useUseAsTitle.js.map +1 -1
  60. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  61. package/dist/providers/ListQuery/index.js +1 -1
  62. package/dist/providers/ListQuery/index.js.map +1 -1
  63. package/dist/utilities/buildTableState.d.ts.map +1 -1
  64. package/dist/utilities/buildTableState.js +3 -4
  65. package/dist/utilities/buildTableState.js.map +1 -1
  66. package/dist/utilities/renderTable.d.ts +4 -4
  67. package/dist/utilities/renderTable.d.ts.map +1 -1
  68. package/dist/utilities/renderTable.js +6 -5
  69. package/dist/utilities/renderTable.js.map +1 -1
  70. package/package.json +5 -5
  71. package/dist/exports/client/chunk-RO7ZK4KN.js.map +0 -8
  72. package/dist/utilities/flattenFieldMap.d.ts +0 -10
  73. package/dist/utilities/flattenFieldMap.d.ts.map +0 -1
  74. package/dist/utilities/flattenFieldMap.js +0 -26
  75. package/dist/utilities/flattenFieldMap.js.map +0 -1
  76. /package/dist/exports/client/{CodeEditor-FR4GQI3P.js.map → CodeEditor-W7RSWONH.js.map} +0 -0
@@ -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,KAAsC,MAAM,OAAO,CAAA;AAkB1D,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,CAqPpC,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,CA4QpC,CAAA"}
@@ -39,6 +39,8 @@ export const Autosave = ({
39
39
  setLastUpdateTime,
40
40
  setMostRecentVersionIsAutosaved
41
41
  } = useDocumentInfo();
42
+ const queueRef = useRef([]);
43
+ const isProcessingRef = useRef(false);
42
44
  const {
43
45
  reportUpdate
44
46
  } = useDocumentEvents();
@@ -80,6 +82,22 @@ export const Autosave = ({
80
82
  // Store locale in ref so the autosave func
81
83
  // can always retrieve the most to date locale
82
84
  localeRef.current = locale;
85
+ const processQueue = React.useCallback(async () => {
86
+ if (isProcessingRef.current || queueRef.current.length === 0) {
87
+ return;
88
+ }
89
+ isProcessingRef.current = true;
90
+ const latestAction = queueRef.current[queueRef.current.length - 1];
91
+ queueRef.current = [];
92
+ try {
93
+ await latestAction();
94
+ } finally {
95
+ isProcessingRef.current = false;
96
+ if (queueRef.current.length > 0) {
97
+ await processQueue();
98
+ }
99
+ }
100
+ }, []);
83
101
  // When debounced fields change, autosave
84
102
  useIgnoredEffect(() => {
85
103
  const abortController = new AbortController();
@@ -87,7 +105,7 @@ export const Autosave = ({
87
105
  // We need to log the time in order to figure out if we need to trigger the state off later
88
106
  let startTimestamp = undefined;
89
107
  let endTimestamp = undefined;
90
- const autosave = () => {
108
+ const autosave = async () => {
91
109
  if (modified) {
92
110
  startTimestamp = new Date().getTime();
93
111
  setSaving(true);
@@ -115,7 +133,7 @@ export const Autosave = ({
115
133
  data._status = 'draft';
116
134
  const skipSubmission = submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate;
117
135
  if (!skipSubmission) {
118
- void fetch(url, {
136
+ await fetch(url, {
119
137
  body: JSON.stringify(data),
120
138
  credentials: 'include',
121
139
  headers: {
@@ -189,7 +207,8 @@ export const Autosave = ({
189
207
  }
190
208
  }
191
209
  };
192
- void autosave();
210
+ queueRef.current.push(autosave);
211
+ void processQueue();
193
212
  return () => {
194
213
  if (autosaveTimeout) {
195
214
  clearTimeout(autosaveTimeout);
@@ -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","reportUpdate","dispatchFields","setSubmitted","submitted","versionsConfig","versions","fields","formModified","code","locale","i18n","t","interval","autosaveInterval","drafts","autosave","saving","setSaving","debouncedFields","modified","fieldRef","modifiedRef","localeRef","debouncedRef","current","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","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, { useEffect, 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 } = useDocumentInfo()\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 formModified = 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 modified = useDebounce(formModified, 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 // 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 = () => {\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 void 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 }\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 void autosave()\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","queueRef","isProcessingRef","reportUpdate","dispatchFields","setSubmitted","submitted","versionsConfig","versions","fields","formModified","code","locale","i18n","t","interval","autosaveInterval","drafts","autosave","saving","setSaving","debouncedFields","modified","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","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 } = 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 formModified = 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 modified = useDebounce(formModified, 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 }\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":[]}
@@ -10,9 +10,10 @@ import './index.scss';
10
10
  const Editor = EditorImport.default || EditorImport;
11
11
  const baseClass = 'code-editor';
12
12
  const CodeEditor = props => {
13
- const $ = _c(21);
13
+ const $ = _c(24);
14
14
  let className;
15
15
  let maxHeight;
16
+ let minHeight;
16
17
  let options;
17
18
  let readOnly;
18
19
  let rest;
@@ -20,6 +21,7 @@ const CodeEditor = props => {
20
21
  ({
21
22
  className,
22
23
  maxHeight,
24
+ minHeight,
23
25
  options,
24
26
  readOnly,
25
27
  ...rest
@@ -27,52 +29,56 @@ const CodeEditor = props => {
27
29
  $[0] = props;
28
30
  $[1] = className;
29
31
  $[2] = maxHeight;
30
- $[3] = options;
31
- $[4] = readOnly;
32
- $[5] = rest;
32
+ $[3] = minHeight;
33
+ $[4] = options;
34
+ $[5] = readOnly;
35
+ $[6] = rest;
33
36
  } else {
34
37
  className = $[1];
35
38
  maxHeight = $[2];
36
- options = $[3];
37
- readOnly = $[4];
38
- rest = $[5];
39
+ minHeight = $[3];
40
+ options = $[4];
41
+ readOnly = $[5];
42
+ rest = $[6];
39
43
  }
40
- const [dynamicHeight, setDynamicHeight] = useState(20);
44
+ const MIN_HEIGHT = minHeight ?? 56;
45
+ const [dynamicHeight, setDynamicHeight] = useState(MIN_HEIGHT);
41
46
  const {
42
47
  theme
43
48
  } = useTheme();
44
49
  const t0 = rest?.defaultLanguage ? `language--${rest.defaultLanguage}` : "";
45
50
  const t1 = readOnly && "read-only";
46
51
  let t2;
47
- if ($[6] !== className || $[7] !== t0 || $[8] !== t1) {
52
+ if ($[7] !== className || $[8] !== t0 || $[9] !== t1) {
48
53
  t2 = [baseClass, className, t0, t1].filter(Boolean);
49
- $[6] = className;
50
- $[7] = t0;
51
- $[8] = t1;
52
- $[9] = t2;
54
+ $[7] = className;
55
+ $[8] = t0;
56
+ $[9] = t1;
57
+ $[10] = t2;
53
58
  } else {
54
- t2 = $[9];
59
+ t2 = $[10];
55
60
  }
56
61
  const classes = t2.join(" ");
57
62
  let t3;
58
- if ($[10] !== classes || $[11] !== dynamicHeight || $[12] !== maxHeight || $[13] !== options || $[14] !== readOnly || $[15] !== rest || $[16] !== theme) {
63
+ if ($[11] !== MIN_HEIGHT || $[12] !== classes || $[13] !== dynamicHeight || $[14] !== maxHeight || $[15] !== options || $[16] !== readOnly || $[17] !== rest || $[18] !== theme) {
59
64
  let t4;
60
65
  let t5;
61
- if ($[18] !== rest) {
66
+ if ($[20] !== MIN_HEIGHT || $[21] !== rest) {
62
67
  t4 = (value, ev) => {
63
68
  rest.onChange?.(value, ev);
64
- setDynamicHeight(Math.max(56, value.split("\n").length * 18 + 2));
69
+ setDynamicHeight(Math.max(MIN_HEIGHT, value.split("\n").length * 18 + 2));
65
70
  };
66
71
  t5 = (editor, monaco) => {
67
72
  rest.onMount?.(editor, monaco);
68
- setDynamicHeight(Math.max(56, editor.getValue().split("\n").length * 18 + 2));
73
+ setDynamicHeight(Math.max(MIN_HEIGHT, editor.getValue().split("\n").length * 18 + 2));
69
74
  };
70
- $[18] = rest;
71
- $[19] = t4;
72
- $[20] = t5;
75
+ $[20] = MIN_HEIGHT;
76
+ $[21] = rest;
77
+ $[22] = t4;
78
+ $[23] = t5;
73
79
  } else {
74
- t4 = $[19];
75
- t5 = $[20];
80
+ t4 = $[22];
81
+ t5 = $[23];
76
82
  }
77
83
  t3 = _jsx(Editor, {
78
84
  className: classes,
@@ -101,16 +107,17 @@ const CodeEditor = props => {
101
107
  onChange: t4,
102
108
  onMount: t5
103
109
  });
104
- $[10] = classes;
105
- $[11] = dynamicHeight;
106
- $[12] = maxHeight;
107
- $[13] = options;
108
- $[14] = readOnly;
109
- $[15] = rest;
110
- $[16] = theme;
111
- $[17] = t3;
110
+ $[11] = MIN_HEIGHT;
111
+ $[12] = classes;
112
+ $[13] = dynamicHeight;
113
+ $[14] = maxHeight;
114
+ $[15] = options;
115
+ $[16] = readOnly;
116
+ $[17] = rest;
117
+ $[18] = theme;
118
+ $[19] = t3;
112
119
  } else {
113
- t3 = $[17];
120
+ t3 = $[19];
114
121
  }
115
122
  return t3;
116
123
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CodeEditor.js","names":["c","_c","EditorImport","React","useState","useTheme","ShimmerEffect","Editor","default","baseClass","CodeEditor","props","$","className","maxHeight","options","readOnly","rest","dynamicHeight","setDynamicHeight","theme","t0","defaultLanguage","t1","t2","filter","Boolean","classes","join","t3","t4","t5","value","ev","onChange","Math","max","split","length","editor","monaco","onMount","getValue","_jsx","loading","height","scrollbar","alwaysConsumeMouseWheel","scrollBeyondLastLine","tabSize","wordWrap","min"],"sources":["../../../src/elements/CodeEditor/CodeEditor.tsx"],"sourcesContent":["'use client'\nimport EditorImport from '@monaco-editor/react'\nimport React, { useState } from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTheme } from '../../providers/Theme/index.js'\nimport { ShimmerEffect } from '../ShimmerEffect/index.js'\nimport './index.scss'\n\nconst Editor = (EditorImport.default || EditorImport) as unknown as typeof EditorImport.default\n\nconst baseClass = 'code-editor'\n\nconst CodeEditor: React.FC<Props> = (props) => {\n const { className, maxHeight, options, readOnly, ...rest } = props\n const [dynamicHeight, setDynamicHeight] = useState(20)\n const { theme } = useTheme()\n\n const MIN_HEIGHT = 56 // equivalent to 3 lines\n\n const classes = [\n baseClass,\n className,\n rest?.defaultLanguage ? `language--${rest.defaultLanguage}` : '',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <Editor\n className={classes}\n loading={<ShimmerEffect height={dynamicHeight} />}\n options={{\n detectIndentation: true,\n hideCursorInOverviewRuler: true,\n minimap: {\n enabled: false,\n },\n overviewRulerBorder: false,\n readOnly: Boolean(readOnly),\n scrollbar: {\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n tabSize: 2,\n wordWrap: 'on',\n ...options,\n }}\n theme={theme === 'dark' ? 'vs-dark' : 'vs'}\n {...rest}\n // Since we are not building an IDE and the container\n // can already have scrolling, we want the height of the\n // editor to fit its content.\n // See: https://github.com/microsoft/monaco-editor/discussions/3677\n height={maxHeight ? Math.min(dynamicHeight, maxHeight) : dynamicHeight}\n onChange={(value, ev) => {\n rest.onChange?.(value, ev)\n setDynamicHeight(Math.max(MIN_HEIGHT, value.split('\\n').length * 18 + 2))\n }}\n onMount={(editor, monaco) => {\n rest.onMount?.(editor, monaco)\n setDynamicHeight(Math.max(MIN_HEIGHT, editor.getValue().split('\\n').length * 18 + 2))\n }}\n />\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default CodeEditor\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CodeEditor.js","names":["c","_c","EditorImport","React","useState","useTheme","ShimmerEffect","Editor","default","baseClass","CodeEditor","props","$","className","maxHeight","minHeight","options","readOnly","rest","MIN_HEIGHT","dynamicHeight","setDynamicHeight","theme","t0","defaultLanguage","t1","t2","filter","Boolean","classes","join","t3","t4","t5","value","ev","onChange","Math","max","split","length","editor","monaco","onMount","getValue","_jsx","loading","height","scrollbar","alwaysConsumeMouseWheel","scrollBeyondLastLine","tabSize","wordWrap","min"],"sources":["../../../src/elements/CodeEditor/CodeEditor.tsx"],"sourcesContent":["'use client'\nimport EditorImport from '@monaco-editor/react'\nimport React, { useState } from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTheme } from '../../providers/Theme/index.js'\nimport { ShimmerEffect } from '../ShimmerEffect/index.js'\nimport './index.scss'\n\nconst Editor = (EditorImport.default || EditorImport) as unknown as typeof EditorImport.default\n\nconst baseClass = 'code-editor'\n\nconst CodeEditor: React.FC<Props> = (props) => {\n const { className, maxHeight, minHeight, options, readOnly, ...rest } = props\n const MIN_HEIGHT = minHeight ?? 56 // equivalent to 3 lines\n\n const [dynamicHeight, setDynamicHeight] = useState(MIN_HEIGHT)\n const { theme } = useTheme()\n\n const classes = [\n baseClass,\n className,\n rest?.defaultLanguage ? `language--${rest.defaultLanguage}` : '',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <Editor\n className={classes}\n loading={<ShimmerEffect height={dynamicHeight} />}\n options={{\n detectIndentation: true,\n hideCursorInOverviewRuler: true,\n minimap: {\n enabled: false,\n },\n overviewRulerBorder: false,\n readOnly: Boolean(readOnly),\n scrollbar: {\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n tabSize: 2,\n wordWrap: 'on',\n ...options,\n }}\n theme={theme === 'dark' ? 'vs-dark' : 'vs'}\n {...rest}\n // Since we are not building an IDE and the container\n // can already have scrolling, we want the height of the\n // editor to fit its content.\n // See: https://github.com/microsoft/monaco-editor/discussions/3677\n height={maxHeight ? Math.min(dynamicHeight, maxHeight) : dynamicHeight}\n onChange={(value, ev) => {\n rest.onChange?.(value, ev)\n setDynamicHeight(Math.max(MIN_HEIGHT, value.split('\\n').length * 18 + 2))\n }}\n onMount={(editor, monaco) => {\n rest.onMount?.(editor, monaco)\n setDynamicHeight(Math.max(MIN_HEIGHT, editor.getValue().split('\\n').length * 18 + 2))\n }}\n />\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default CodeEditor\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,OAAOC,YAAA,MAAkB;AACzB,OAAOC,KAAA,IAASC,QAAQ,QAAQ;AAIhC,SAASC,QAAQ,QAAQ;AACzB,SAASC,aAAa,QAAQ;AAC9B,OAAO;AAEP,MAAMC,MAAA,GAAUL,YAAA,CAAaM,OAAO,IAAIN,YAAA;AAExC,MAAMO,SAAA,GAAY;AAElB,MAAMC,UAAA,GAA8BC,KAAA;EAAA,MAAAC,CAAA,GAAAX,EAAA;EAAA,IAAAY,SAAA;EAAA,IAAAC,SAAA;EAAA,IAAAC,SAAA;EAAA,IAAAC,OAAA;EAAA,IAAAC,QAAA;EAAA,IAAAC,IAAA;EAAA,IAAAN,CAAA,QAAAD,KAAA;IAClC;MAAAE,SAAA;MAAAC,SAAA;MAAAC,SAAA;MAAAC,OAAA;MAAAC,QAAA;MAAA,GAAAC;IAAA,IAAwEP,KAAA;IAAAC,CAAA,MAAAD,KAAA;IAAAC,CAAA,MAAAC,SAAA;IAAAD,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAG,SAAA;IAAAH,CAAA,MAAAI,OAAA;IAAAJ,CAAA,MAAAK,QAAA;IAAAL,CAAA,MAAAM,IAAA;EAAA;IAAAL,SAAA,GAAAD,CAAA;IAAAE,SAAA,GAAAF,CAAA;IAAAG,SAAA,GAAAH,CAAA;IAAAI,OAAA,GAAAJ,CAAA;IAAAK,QAAA,GAAAL,CAAA;IAAAM,IAAA,GAAAN,CAAA;EAAA;EACxE,MAAAO,UAAA,GAAmBJ,SAAA,MAAa;EAEhC,OAAAK,aAAA,EAAAC,gBAAA,IAA0CjB,QAAA,CAASe,UAAA;EACnD;IAAAG;EAAA,IAAkBjB,QAAA;EAKhB,MAAAkB,EAAA,GAAAL,IAAA,EAAAM,eAAA,GAAwB,aAAaN,IAAA,CAAAM,eAAA,EAAsB,GAAG;EAC9D,MAAAC,EAAA,GAAAR,QAAA,IAAY;EAAA,IAAAS,EAAA;EAAA,IAAAd,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAW,EAAA,IAAAX,CAAA,QAAAa,EAAA;IAJEC,EAAA,IAAAjB,SAAA,EAEdI,SAAA,EACAU,EAA8D,EAC9DE,EAAY,EAAAE,MAAA,CAAAC,OAEJ;IAAAhB,CAAA,MAAAC,SAAA;IAAAD,CAAA,MAAAW,EAAA;IAAAX,CAAA,MAAAa,EAAA;IAAAb,CAAA,OAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EANV,MAAAiB,OAAA,GAAgBH,EAMN,CAAAI,IAAA,CACF;EAAA,IAAAC,EAAA;EAAA,IAAAnB,CAAA,SAAAO,UAAA,IAAAP,CAAA,SAAAiB,OAAA,IAAAjB,CAAA,SAAAQ,aAAA,IAAAR,CAAA,SAAAE,SAAA,IAAAF,CAAA,SAAAI,OAAA,IAAAJ,CAAA,SAAAK,QAAA,IAAAL,CAAA,SAAAM,IAAA,IAAAN,CAAA,SAAAU,KAAA;IAAA,IAAAU,EAAA;IAAA,IAAAC,EAAA;IAAA,IAAArB,CAAA,SAAAO,UAAA,IAAAP,CAAA,SAAAM,IAAA;MA6BMc,EAAA,GAAAA,CAAAE,KAAA,EAAAC,EAAA;QACRjB,IAAA,CAAAkB,QAAA,GAAgBF,KAAA,EAAOC,EAAA;QACvBd,gBAAA,CAAiBgB,IAAA,CAAAC,GAAA,CAASnB,UAAA,EAAYe,KAAA,CAAAK,KAAA,CAAY,MAAAC,MAAA,KAAe,IAAK;MAAA;MAE/DP,EAAA,GAAAA,CAAAQ,MAAA,EAAAC,MAAA;QACPxB,IAAA,CAAAyB,OAAA,GAAeF,MAAA,EAAQC,MAAA;QACvBrB,gBAAA,CAAiBgB,IAAA,CAAAC,GAAA,CAASnB,UAAA,EAAYsB,MAAA,CAAAG,QAAA,CAAe,EAAAL,KAAA,CAAS,MAAAC,MAAA,KAAe,IAAK;MAAA;MACpF5B,CAAA,OAAAO,UAAA;MAAAP,CAAA,OAAAM,IAAA;MAAAN,CAAA,OAAAoB,EAAA;MAAApB,CAAA,OAAAqB,EAAA;IAAA;MAAAD,EAAA,GAAApB,CAAA;MAAAqB,EAAA,GAAArB,CAAA;IAAA;IAjCFmB,EAAA,GAAAc,IAAA,CAAAtC,MAAA;MAAAM,SAAA,EACagB,OAAA;MAAAiB,OAAA,EACFD,IAAA,CAAAvC,aAAA;QAAAyC,MAAA,EAAuB3B;MAAA,C;;;;;;;;kBAQpBQ,OAAA,CAAQX,QAAA;QAAA+B,SAAA;UAAAC,uBAAA;QAAA;QAAAC,oBAAA;QAAAC,OAAA;QAAAC,QAAA,EAMR;QAAA,GACPpC;MAAO;MAAAM,KAAA,EAELA,KAAA,KAAU,SAAS,YAAY;MAAA,GAClCJ,IAAI;MAAA6B,MAAA,EAKAjC,SAAA,GAAYuB,IAAA,CAAAgB,GAAA,CAASjC,aAAA,EAAeN,SAAA,IAAaM,aAAA;MAAAgB,QAAA,EAC/CJ,EAGV;MAAAW,OAAA,EACSV;IAGT,C;;;;;;;;;;;;;SAjCFF,E;CAoCJ;AAEA;AACA,eAAerB,UAAA","ignoreList":[]}
@@ -1,6 +1,10 @@
1
1
  import type { EditorProps } from '@monaco-editor/react';
2
2
  export type Props = {
3
3
  maxHeight?: number;
4
+ /**
5
+ * @default 56 (3 lines)
6
+ */
7
+ minHeight?: number;
4
8
  readOnly?: boolean;
5
9
  } & EditorProps;
6
10
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/CodeEditor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,WAAW,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/CodeEditor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,WAAW,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/CodeEditor/types.ts"],"sourcesContent":["import type { EditorProps } from '@monaco-editor/react'\n\nexport type Props = {\n maxHeight?: number\n readOnly?: boolean\n} & EditorProps\n"],"mappings":"AAEA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/CodeEditor/types.ts"],"sourcesContent":["import type { EditorProps } from '@monaco-editor/react'\n\nexport type Props = {\n maxHeight?: number\n /**\n * @default 56 (3 lines)\n */\n minHeight?: number\n readOnly?: boolean\n} & EditorProps\n"],"mappings":"AAEA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/EditMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAa,MAAM,SAAS,CAAA;AAMhE,OAAO,KAAoD,MAAM,OAAO,CAAA;AAqBxE,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAA;CAC5C,CAAA;AAyED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA8M5C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/EditMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAkC,MAAM,SAAS,CAAA;AAMrF,OAAO,KAAoD,MAAM,OAAO,CAAA;AAqBxE,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAA;CAC5C,CAAA;AAmGD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAiN5C,CAAA"}
@@ -28,11 +28,22 @@ import './index.scss';
28
28
  import { Drawer, DrawerToggler } from '../Drawer/index.js';
29
29
  import { FieldSelect } from '../FieldSelect/index.js';
30
30
  const baseClass = 'edit-many';
31
+ const sanitizeUnselectedFields = (formState, selected) => {
32
+ const filteredData = selected.reduce((acc, field) => {
33
+ const foundState = formState?.[field.path];
34
+ if (foundState) {
35
+ acc[field.path] = formState?.[field.path]?.value;
36
+ }
37
+ return acc;
38
+ }, {});
39
+ return filteredData;
40
+ };
31
41
  const Submit = t0 => {
32
- const $ = _c(7);
42
+ const $ = _c(8);
33
43
  const {
34
44
  action,
35
- disabled
45
+ disabled,
46
+ selected
36
47
  } = t0;
37
48
  const {
38
49
  submit
@@ -41,43 +52,46 @@ const Submit = t0 => {
41
52
  t
42
53
  } = useTranslation();
43
54
  let t1;
44
- if ($[0] !== action || $[1] !== submit) {
55
+ if ($[0] !== action || $[1] !== selected || $[2] !== submit) {
45
56
  t1 = () => {
46
57
  submit({
47
58
  action,
48
59
  method: "PATCH",
60
+ overrides: formState => sanitizeUnselectedFields(formState, selected),
49
61
  skipValidation: true
50
62
  });
51
63
  };
52
64
  $[0] = action;
53
- $[1] = submit;
54
- $[2] = t1;
65
+ $[1] = selected;
66
+ $[2] = submit;
67
+ $[3] = t1;
55
68
  } else {
56
- t1 = $[2];
69
+ t1 = $[3];
57
70
  }
58
71
  const save = t1;
59
72
  let t2;
60
- if ($[3] !== disabled || $[4] !== save || $[5] !== t) {
73
+ if ($[4] !== disabled || $[5] !== save || $[6] !== t) {
61
74
  t2 = _jsx(FormSubmit, {
62
75
  className: `${baseClass}__save`,
63
76
  disabled,
64
77
  onClick: save,
65
78
  children: t("general:save")
66
79
  });
67
- $[3] = disabled;
68
- $[4] = save;
69
- $[5] = t;
70
- $[6] = t2;
80
+ $[4] = disabled;
81
+ $[5] = save;
82
+ $[6] = t;
83
+ $[7] = t2;
71
84
  } else {
72
- t2 = $[6];
85
+ t2 = $[7];
73
86
  }
74
87
  return t2;
75
88
  };
76
89
  const PublishButton = t0 => {
77
- const $ = _c(7);
90
+ const $ = _c(8);
78
91
  const {
79
92
  action,
80
- disabled
93
+ disabled,
94
+ selected
81
95
  } = t0;
82
96
  const {
83
97
  submit
@@ -86,46 +100,49 @@ const PublishButton = t0 => {
86
100
  t
87
101
  } = useTranslation();
88
102
  let t1;
89
- if ($[0] !== action || $[1] !== submit) {
103
+ if ($[0] !== action || $[1] !== selected || $[2] !== submit) {
90
104
  t1 = () => {
91
105
  submit({
92
106
  action,
93
107
  method: "PATCH",
94
- overrides: {
108
+ overrides: formState => ({
109
+ ...sanitizeUnselectedFields(formState, selected),
95
110
  _status: "published"
96
- },
111
+ }),
97
112
  skipValidation: true
98
113
  });
99
114
  };
100
115
  $[0] = action;
101
- $[1] = submit;
102
- $[2] = t1;
116
+ $[1] = selected;
117
+ $[2] = submit;
118
+ $[3] = t1;
103
119
  } else {
104
- t1 = $[2];
120
+ t1 = $[3];
105
121
  }
106
122
  const save = t1;
107
123
  let t2;
108
- if ($[3] !== disabled || $[4] !== save || $[5] !== t) {
124
+ if ($[4] !== disabled || $[5] !== save || $[6] !== t) {
109
125
  t2 = _jsx(FormSubmit, {
110
126
  className: `${baseClass}__publish`,
111
127
  disabled,
112
128
  onClick: save,
113
129
  children: t("version:publishChanges")
114
130
  });
115
- $[3] = disabled;
116
- $[4] = save;
117
- $[5] = t;
118
- $[6] = t2;
131
+ $[4] = disabled;
132
+ $[5] = save;
133
+ $[6] = t;
134
+ $[7] = t2;
119
135
  } else {
120
- t2 = $[6];
136
+ t2 = $[7];
121
137
  }
122
138
  return t2;
123
139
  };
124
140
  const SaveDraftButton = t0 => {
125
- const $ = _c(7);
141
+ const $ = _c(8);
126
142
  const {
127
143
  action,
128
- disabled
144
+ disabled,
145
+ selected
129
146
  } = t0;
130
147
  const {
131
148
  submit
@@ -134,26 +151,28 @@ const SaveDraftButton = t0 => {
134
151
  t
135
152
  } = useTranslation();
136
153
  let t1;
137
- if ($[0] !== action || $[1] !== submit) {
154
+ if ($[0] !== action || $[1] !== selected || $[2] !== submit) {
138
155
  t1 = () => {
139
156
  submit({
140
157
  action,
141
158
  method: "PATCH",
142
- overrides: {
159
+ overrides: formState => ({
160
+ ...sanitizeUnselectedFields(formState, selected),
143
161
  _status: "draft"
144
- },
162
+ }),
145
163
  skipValidation: true
146
164
  });
147
165
  };
148
166
  $[0] = action;
149
- $[1] = submit;
150
- $[2] = t1;
167
+ $[1] = selected;
168
+ $[2] = submit;
169
+ $[3] = t1;
151
170
  } else {
152
- t1 = $[2];
171
+ t1 = $[3];
153
172
  }
154
173
  const save = t1;
155
174
  let t2;
156
- if ($[3] !== disabled || $[4] !== save || $[5] !== t) {
175
+ if ($[4] !== disabled || $[5] !== save || $[6] !== t) {
157
176
  t2 = _jsx(FormSubmit, {
158
177
  buttonStyle: "secondary",
159
178
  className: `${baseClass}__draft`,
@@ -161,12 +180,12 @@ const SaveDraftButton = t0 => {
161
180
  onClick: save,
162
181
  children: t("version:saveDraft")
163
182
  });
164
- $[3] = disabled;
165
- $[4] = save;
166
- $[5] = t;
167
- $[6] = t2;
183
+ $[4] = disabled;
184
+ $[5] = save;
185
+ $[6] = t;
186
+ $[7] = t2;
168
187
  } else {
169
- t2 = $[6];
188
+ t2 = $[7];
170
189
  }
171
190
  return t2;
172
191
  };
@@ -262,7 +281,7 @@ export const EditMany = props => {
262
281
  signal: controller_0.signal
263
282
  });
264
283
  return state;
265
- }, [slug, getFormState, collectionPermissions]);
284
+ }, [getFormState, slug, collectionPermissions]);
266
285
  useEffect(() => {
267
286
  return () => {
268
287
  abortAndIgnore(formStateAbortControllerRef.current);
@@ -361,14 +380,17 @@ export const EditMany = props => {
361
380
  children: collection?.versions?.drafts ? /*#__PURE__*/_jsxs(React.Fragment, {
362
381
  children: [/*#__PURE__*/_jsx(SaveDraftButton, {
363
382
  action: `${serverURL}${apiRoute}/${slug}${queryString}&draft=true`,
364
- disabled: selected.length === 0
383
+ disabled: selected.length === 0,
384
+ selected: selected
365
385
  }), /*#__PURE__*/_jsx(PublishButton, {
366
386
  action: `${serverURL}${apiRoute}/${slug}${queryString}&draft=true`,
367
- disabled: selected.length === 0
387
+ disabled: selected.length === 0,
388
+ selected: selected
368
389
  })]
369
390
  }) : /*#__PURE__*/_jsx(Submit, {
370
391
  action: `${serverURL}${apiRoute}/${slug}${queryString}`,
371
- disabled: selected.length === 0
392
+ disabled: selected.length === 0,
393
+ selected: selected
372
394
  })
373
395
  })
374
396
  })