@payloadcms/ui 3.76.0-canary.4 → 3.76.1

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 (58) hide show
  1. package/dist/elements/Button/index.js +1 -1
  2. package/dist/elements/Button/index.js.map +1 -1
  3. package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
  4. package/dist/elements/CopyLocaleData/index.js +38 -34
  5. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  6. package/dist/elements/Link/index.d.ts.map +1 -1
  7. package/dist/elements/ReactSelect/index.js +1 -1
  8. package/dist/elements/ReactSelect/index.js.map +1 -1
  9. package/dist/elements/Thumbnail/createThumbnail.js +2 -2
  10. package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
  11. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  12. package/dist/elements/UnpublishButton/index.js +41 -40
  13. package/dist/elements/UnpublishButton/index.js.map +1 -1
  14. package/dist/exports/client/{DatePicker-GT6CXMEH.js → DatePicker-YF5TBW3N.js} +2 -2
  15. package/dist/exports/client/chunk-ZPLD37T2.js +29 -0
  16. package/dist/exports/client/{chunk-USMS5YRL.js.map → chunk-ZPLD37T2.js.map} +4 -4
  17. package/dist/exports/client/index.js +12 -12
  18. package/dist/exports/client/index.js.map +3 -3
  19. package/dist/fields/Number/index.js +1 -1
  20. package/dist/fields/Number/index.js.map +1 -1
  21. package/dist/fields/Tabs/index.js +42 -41
  22. package/dist/fields/Tabs/index.js.map +1 -1
  23. package/dist/fields/Text/index.js +1 -1
  24. package/dist/fields/Text/index.js.map +1 -1
  25. package/dist/fields/shared/index.js +1 -1
  26. package/dist/fields/shared/index.js.map +1 -1
  27. package/dist/forms/Form/reduceToSerializableFields.js +1 -1
  28. package/dist/forms/Form/reduceToSerializableFields.js.map +1 -1
  29. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  30. package/dist/forms/WatchChildErrors/index.js +2 -1
  31. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  32. package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js +1 -1
  33. package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js.map +1 -1
  34. package/dist/forms/fieldSchemasToFormState/renderField.js +1 -1
  35. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  36. package/dist/hooks/useQueue.js +1 -1
  37. package/dist/hooks/useQueue.js.map +1 -1
  38. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  39. package/dist/providers/ServerFunctions/index.js +8 -10
  40. package/dist/providers/ServerFunctions/index.js.map +1 -1
  41. package/dist/providers/TableColumns/buildColumnState/index.js +2 -2
  42. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  43. package/dist/providers/TableColumns/buildColumnState/renderCell.js +1 -1
  44. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  45. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +1 -1
  46. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  47. package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
  48. package/dist/utilities/copyDataFromLocale.js +3 -5
  49. package/dist/utilities/copyDataFromLocale.js.map +1 -1
  50. package/dist/utilities/getDisplayedFieldValue.js +3 -3
  51. package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
  52. package/dist/utilities/isURLAllowed.js +2 -2
  53. package/dist/utilities/isURLAllowed.js.map +1 -1
  54. package/dist/views/Edit/index.js +2 -2
  55. package/dist/views/Edit/index.js.map +1 -1
  56. package/package.json +6 -6
  57. package/dist/exports/client/chunk-USMS5YRL.js +0 -29
  58. /package/dist/exports/client/{DatePicker-GT6CXMEH.js.map → DatePicker-YF5TBW3N.js.map} +0 -0
@@ -81,7 +81,7 @@ const NumberFieldComponent = props => {
81
81
  setValue(newVal);
82
82
  }, [onChangeFromProps, setValue]);
83
83
  const [valueToRender, setValueToRender] = useState([]) // Only for hasMany
84
- ;
84
+ ;
85
85
  const handleHasManyChange = useCallback(selectedOption => {
86
86
  if (!(readOnly || disabled)) {
87
87
  let newValue;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","isNumber","React","useCallback","useEffect","useMemo","useState","ReactSelect","RenderCustomComponent","useField","withCondition","useTranslation","FieldDescription","FieldError","FieldLabel","mergeFieldStyles","fieldBaseClass","NumberFieldComponent","props","field","admin","className","description","placeholder","placeholderFromProps","step","hasMany","label","localized","max","Infinity","maxRows","min","required","onChange","onChangeFromProps","path","pathFromProps","readOnly","validate","i18n","t","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","setValue","showError","potentiallyStalePath","handleChange","e","val","parseFloat","target","newVal","Number","isNaN","valueToRender","setValueToRender","handleHasManyChange","selectedOption","newValue","Array","isArray","map","option","index","id","toString","styles","_jsxs","filter","Boolean","join","style","_jsx","CustomComponent","Fallback","replace","filterOption","_","rawInput","isOverHasMany","length","isClearable","isCreatable","isMulti","isSortable","noOptionsMessage","name","onWheel","blur","type","NumberField"],"sources":["../../../src/fields/Number/index.tsx"],"sourcesContent":["'use client'\nimport type { NumberFieldClientComponent, NumberFieldClientProps } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { isNumber } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { Option } from '../../elements/ReactSelect/types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport './index.scss'\nimport { fieldBaseClass } from '../shared/index.js'\n\nconst NumberFieldComponent: NumberFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: {\n className,\n description,\n placeholder: placeholderFromProps,\n step = 1,\n } = {} as NumberFieldClientProps['field']['admin'],\n hasMany = false,\n label,\n localized,\n max = Infinity,\n maxRows = Infinity,\n min = -Infinity,\n required,\n },\n onChange: onChangeFromProps,\n path: pathFromProps,\n readOnly,\n validate,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, max, min, required })\n }\n },\n [validate, min, max, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n path,\n setValue,\n showError,\n value,\n } = useField<number | number[]>({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const handleChange = useCallback(\n (e) => {\n const val = parseFloat(e.target.value)\n let newVal = val\n\n if (Number.isNaN(val)) {\n newVal = null\n }\n\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newVal)\n }\n\n setValue(newVal)\n },\n [onChangeFromProps, setValue],\n )\n\n const [valueToRender, setValueToRender] = useState<\n { id: string; label: string; value: { value: number } }[]\n >([]) // Only for hasMany\n\n const handleHasManyChange = useCallback(\n (selectedOption) => {\n if (!(readOnly || disabled)) {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => Number(option.value?.value || option.value))\n } else {\n newValue = [Number(selectedOption.value?.value || selectedOption.value)]\n }\n\n setValue(newValue)\n }\n },\n [readOnly, disabled, setValue],\n )\n\n // useEffect update valueToRender:\n useEffect(() => {\n if (hasMany && Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n toString: () => `${val}${index}`,\n value: (val as unknown as Record<string, number>)?.value || val,\n }, // You're probably wondering, why the hell is this done that way? Well, React-select automatically uses \"label-value\" as a key, so we will get that react duplicate key warning if we just pass in the value as multiple values can be the same. So we need to append the index to the toString() of the value to avoid that warning, as it uses that as the key.\n }\n }),\n )\n }\n }, [value, hasMany])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n const placeholder = getTranslation(placeholderFromProps, i18n)\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'number',\n className,\n showError && 'error',\n (readOnly || disabled) && 'read-only',\n hasMany && 'has-many',\n ]\n .filter(Boolean)\n .join(' ')}\n style={styles}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n {BeforeInput}\n {hasMany ? (\n <ReactSelect\n className={`field-${path.replace(/\\./g, '__')}`}\n disabled={readOnly || disabled}\n filterOption={(_, rawInput) => {\n const isOverHasMany = Array.isArray(value) && value.length >= maxRows\n return isNumber(rawInput) && !isOverHasMany\n }}\n isClearable\n isCreatable\n isMulti\n isSortable\n noOptionsMessage={() => {\n const isOverHasMany = Array.isArray(value) && value.length >= maxRows\n if (isOverHasMany) {\n return t('validation:limitReached', { max: maxRows, value: value.length + 1 })\n }\n return null\n }}\n // numberOnly\n onChange={handleHasManyChange}\n options={[]}\n placeholder={placeholder}\n showError={showError}\n value={valueToRender as Option[]}\n />\n ) : (\n <div>\n <input\n disabled={readOnly || disabled}\n id={`field-${path.replace(/\\./g, '__')}`}\n max={max}\n min={min}\n name={path}\n onChange={handleChange}\n onWheel={(e) => {\n // @ts-expect-error\n e.target.blur()\n }}\n placeholder={placeholder}\n step={step}\n type=\"number\"\n value={typeof value === 'number' ? value : ''}\n />\n </div>\n )}\n {AfterInput}\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n </div>\n )\n}\n\nexport const NumberField = withCondition(NumberFieldComponent)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","isNumber","React","useCallback","useEffect","useMemo","useState","ReactSelect","RenderCustomComponent","useField","withCondition","useTranslation","FieldDescription","FieldError","FieldLabel","mergeFieldStyles","fieldBaseClass","NumberFieldComponent","props","field","admin","className","description","placeholder","placeholderFromProps","step","hasMany","label","localized","max","Infinity","maxRows","min","required","onChange","onChangeFromProps","path","pathFromProps","readOnly","validate","i18n","t","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","setValue","showError","potentiallyStalePath","handleChange","e","val","parseFloat","target","newVal","Number","isNaN","valueToRender","setValueToRender","handleHasManyChange","selectedOption","newValue","Array","isArray","map","option","index","id","toString","styles","_jsxs","filter","Boolean","join","style","_jsx","CustomComponent","Fallback","replace","filterOption","_","rawInput","isOverHasMany","length","isClearable","isCreatable","isMulti","isSortable","noOptionsMessage","name","onWheel","blur","type","NumberField"],"sources":["../../../src/fields/Number/index.tsx"],"sourcesContent":["'use client'\nimport type { NumberFieldClientComponent, NumberFieldClientProps } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { isNumber } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { Option } from '../../elements/ReactSelect/types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport './index.scss'\nimport { fieldBaseClass } from '../shared/index.js'\n\nconst NumberFieldComponent: NumberFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: {\n className,\n description,\n placeholder: placeholderFromProps,\n step = 1,\n } = {} as NumberFieldClientProps['field']['admin'],\n hasMany = false,\n label,\n localized,\n max = Infinity,\n maxRows = Infinity,\n min = -Infinity,\n required,\n },\n onChange: onChangeFromProps,\n path: pathFromProps,\n readOnly,\n validate,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, max, min, required })\n }\n },\n [validate, min, max, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n path,\n setValue,\n showError,\n value,\n } = useField<number | number[]>({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const handleChange = useCallback(\n (e) => {\n const val = parseFloat(e.target.value)\n let newVal = val\n\n if (Number.isNaN(val)) {\n newVal = null\n }\n\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newVal)\n }\n\n setValue(newVal)\n },\n [onChangeFromProps, setValue],\n )\n\n const [valueToRender, setValueToRender] = useState<\n { id: string; label: string; value: { value: number } }[]\n >([]) // Only for hasMany\n\n const handleHasManyChange = useCallback(\n (selectedOption) => {\n if (!(readOnly || disabled)) {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => Number(option.value?.value || option.value))\n } else {\n newValue = [Number(selectedOption.value?.value || selectedOption.value)]\n }\n\n setValue(newValue)\n }\n },\n [readOnly, disabled, setValue],\n )\n\n // useEffect update valueToRender:\n useEffect(() => {\n if (hasMany && Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n toString: () => `${val}${index}`,\n value: (val as unknown as Record<string, number>)?.value || val,\n }, // You're probably wondering, why the hell is this done that way? Well, React-select automatically uses \"label-value\" as a key, so we will get that react duplicate key warning if we just pass in the value as multiple values can be the same. So we need to append the index to the toString() of the value to avoid that warning, as it uses that as the key.\n }\n }),\n )\n }\n }, [value, hasMany])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n const placeholder = getTranslation(placeholderFromProps, i18n)\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'number',\n className,\n showError && 'error',\n (readOnly || disabled) && 'read-only',\n hasMany && 'has-many',\n ]\n .filter(Boolean)\n .join(' ')}\n style={styles}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n {BeforeInput}\n {hasMany ? (\n <ReactSelect\n className={`field-${path.replace(/\\./g, '__')}`}\n disabled={readOnly || disabled}\n filterOption={(_, rawInput) => {\n const isOverHasMany = Array.isArray(value) && value.length >= maxRows\n return isNumber(rawInput) && !isOverHasMany\n }}\n isClearable\n isCreatable\n isMulti\n isSortable\n noOptionsMessage={() => {\n const isOverHasMany = Array.isArray(value) && value.length >= maxRows\n if (isOverHasMany) {\n return t('validation:limitReached', { max: maxRows, value: value.length + 1 })\n }\n return null\n }}\n // numberOnly\n onChange={handleHasManyChange}\n options={[]}\n placeholder={placeholder}\n showError={showError}\n value={valueToRender as Option[]}\n />\n ) : (\n <div>\n <input\n disabled={readOnly || disabled}\n id={`field-${path.replace(/\\./g, '__')}`}\n max={max}\n min={min}\n name={path}\n onChange={handleChange}\n onWheel={(e) => {\n // @ts-expect-error\n e.target.blur()\n }}\n placeholder={placeholder}\n step={step}\n type=\"number\"\n value={typeof value === 'number' ? value : ''}\n />\n </div>\n )}\n {AfterInput}\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n </div>\n )\n}\n\nexport const NumberField = withCondition(NumberFieldComponent)\n"],"mappings":"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","ignoreList":[]}
@@ -22,7 +22,7 @@ import './index.scss';
22
22
  const baseClass = 'tabs-field';
23
23
  export { TabsProvider };
24
24
  const TabsFieldComponent = props => {
25
- const $ = _c(43);
25
+ const $ = _c(44);
26
26
  const {
27
27
  field: t0,
28
28
  forceRender: t1,
@@ -108,7 +108,7 @@ const TabsFieldComponent = props => {
108
108
  const tabsPrefKey = `tabs-${indexPath}`;
109
109
  const activeTabInfo = tabStates[activeTabIndex];
110
110
  const activeTabConfig = activeTabInfo?.tab;
111
- const activeTabDescription = activeTabConfig.admin?.description ?? activeTabConfig.description;
111
+ const activeTabDescription = activeTabConfig?.admin?.description ?? activeTabConfig?.description;
112
112
  const activeTabStaticDescription = typeof activeTabDescription === "function" ? activeTabDescription({
113
113
  i18n,
114
114
  t: i18n.t
@@ -153,13 +153,13 @@ const TabsFieldComponent = props => {
153
153
  }
154
154
  const handleTabChange = t13;
155
155
  let t14;
156
- if ($[14] !== getPreference || $[15] !== path || $[16] !== preferencesKey || $[17] !== tabsPrefKey) {
156
+ if ($[14] !== getPreference || $[15] !== path || $[16] !== preferencesKey || $[17] !== tabStates.length || $[18] !== tabsPrefKey) {
157
157
  t14 = () => {
158
158
  if (preferencesKey) {
159
159
  const getInitialPref = async () => {
160
160
  const existingPreferences_0 = await getPreference(preferencesKey);
161
161
  const initialIndex = path ? existingPreferences_0?.fields?.[path]?.tabIndex : existingPreferences_0?.fields?.[tabsPrefKey]?.tabIndex;
162
- const newIndex = initialIndex || 0;
162
+ const newIndex = typeof initialIndex === "number" && initialIndex < tabStates.length ? initialIndex : 0;
163
163
  setActiveTabIndex(newIndex);
164
164
  };
165
165
  getInitialPref();
@@ -168,28 +168,29 @@ const TabsFieldComponent = props => {
168
168
  $[14] = getPreference;
169
169
  $[15] = path;
170
170
  $[16] = preferencesKey;
171
- $[17] = tabsPrefKey;
172
- $[18] = t14;
171
+ $[17] = tabStates.length;
172
+ $[18] = tabsPrefKey;
173
+ $[19] = t14;
173
174
  } else {
174
- t14 = $[18];
175
+ t14 = $[19];
175
176
  }
176
177
  let t15;
177
- if ($[19] !== getPreference || $[20] !== parentPath || $[21] !== parentSchemaPath || $[22] !== path || $[23] !== preferencesKey || $[24] !== tabs || $[25] !== tabsPrefKey) {
178
+ if ($[20] !== getPreference || $[21] !== parentPath || $[22] !== parentSchemaPath || $[23] !== path || $[24] !== preferencesKey || $[25] !== tabs || $[26] !== tabsPrefKey) {
178
179
  t15 = [path, getPreference, preferencesKey, tabsPrefKey, tabs, parentPath, parentSchemaPath];
179
- $[19] = getPreference;
180
- $[20] = parentPath;
181
- $[21] = parentSchemaPath;
182
- $[22] = path;
183
- $[23] = preferencesKey;
184
- $[24] = tabs;
185
- $[25] = tabsPrefKey;
186
- $[26] = t15;
180
+ $[20] = getPreference;
181
+ $[21] = parentPath;
182
+ $[22] = parentSchemaPath;
183
+ $[23] = path;
184
+ $[24] = preferencesKey;
185
+ $[25] = tabs;
186
+ $[26] = tabsPrefKey;
187
+ $[27] = t15;
187
188
  } else {
188
- t15 = $[26];
189
+ t15 = $[27];
189
190
  }
190
191
  useEffect(t14, t15);
191
192
  let t16;
192
- if ($[27] !== activeTabInfo?.passesCondition || $[28] !== handleTabChange || $[29] !== tabStates) {
193
+ if ($[28] !== activeTabInfo?.passesCondition || $[29] !== handleTabChange || $[30] !== tabStates) {
193
194
  t16 = () => {
194
195
  if (activeTabInfo?.passesCondition === false) {
195
196
  const nextTab = tabStates.find(_temp3);
@@ -198,38 +199,38 @@ const TabsFieldComponent = props => {
198
199
  }
199
200
  }
200
201
  };
201
- $[27] = activeTabInfo?.passesCondition;
202
- $[28] = handleTabChange;
203
- $[29] = tabStates;
204
- $[30] = t16;
202
+ $[28] = activeTabInfo?.passesCondition;
203
+ $[29] = handleTabChange;
204
+ $[30] = tabStates;
205
+ $[31] = t16;
205
206
  } else {
206
- t16 = $[30];
207
+ t16 = $[31];
207
208
  }
208
209
  let t17;
209
- if ($[31] !== activeTabInfo || $[32] !== handleTabChange || $[33] !== tabStates) {
210
+ if ($[32] !== activeTabInfo || $[33] !== handleTabChange || $[34] !== tabStates) {
210
211
  t17 = [activeTabInfo, tabStates, handleTabChange];
211
- $[31] = activeTabInfo;
212
- $[32] = handleTabChange;
213
- $[33] = tabStates;
214
- $[34] = t17;
212
+ $[32] = activeTabInfo;
213
+ $[33] = handleTabChange;
214
+ $[34] = tabStates;
215
+ $[35] = t17;
215
216
  } else {
216
- t17 = $[34];
217
+ t17 = $[35];
217
218
  }
218
219
  useEffect(t16, t17);
219
220
  const t18 = isWithinCollapsible && `${baseClass}--within-collapsible`;
220
221
  const t19 = !hasVisibleTabs && `${baseClass}--hidden`;
221
222
  let t20;
222
- if ($[35] !== className || $[36] !== t18 || $[37] !== t19) {
223
+ if ($[36] !== className || $[37] !== t18 || $[38] !== t19) {
223
224
  t20 = [fieldBaseClass, className, baseClass, t18, t19].filter(Boolean);
224
- $[35] = className;
225
- $[36] = t18;
226
- $[37] = t19;
227
- $[38] = t20;
225
+ $[36] = className;
226
+ $[37] = t18;
227
+ $[38] = t19;
228
+ $[39] = t20;
228
229
  } else {
229
- t20 = $[38];
230
+ t20 = $[39];
230
231
  }
231
232
  let t21;
232
- if ($[39] !== activeTabIndex || $[40] !== handleTabChange || $[41] !== path) {
233
+ if ($[40] !== activeTabIndex || $[41] !== handleTabChange || $[42] !== path) {
233
234
  t21 = t22 => {
234
235
  const {
235
236
  index: index_0,
@@ -246,12 +247,12 @@ const TabsFieldComponent = props => {
246
247
  tab: tab_0
247
248
  }, index_0);
248
249
  };
249
- $[39] = activeTabIndex;
250
- $[40] = handleTabChange;
251
- $[41] = path;
252
- $[42] = t21;
250
+ $[40] = activeTabIndex;
251
+ $[41] = handleTabChange;
252
+ $[42] = path;
253
+ $[43] = t21;
253
254
  } else {
254
- t21 = $[42];
255
+ t21 = $[43];
255
256
  }
256
257
  return _jsx("div", {
257
258
  className: t20.join(" "),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","getTranslation","getFieldPaths","toKebabCase","React","useCallback","useEffect","useState","useCollapsible","RenderCustomComponent","useFormFields","RenderFields","useField","withCondition","useDocumentInfo","usePreferences","useTranslation","FieldDescription","fieldBaseClass","TabsProvider","TabComponent","baseClass","TabsFieldComponent","props","$","field","t0","forceRender","t1","indexPath","t2","parentPath","t3","parentSchemaPath","t4","path","t5","permissions","readOnly","schemaPath","t6","admin","t7","tabs","t8","t9","undefined","className","t10","getPreference","setPreference","preferencesKey","i18n","isWithinCollapsible","t11","t12","fields","map","tab","index","id","passesCondition","tabStates","filter","_temp","activeTabIndex","setActiveTabIndex","tabsPrefKey","activeTabInfo","activeTabConfig","activeTabDescription","description","activeTabStaticDescription","t","hasVisibleTabs","some","_temp2","t13","incomingTabIndex","existingPreferences","tabIndex","handleTabChange","t14","getInitialPref","existingPreferences_0","initialIndex","newIndex","t15","t16","nextTab","find","_temp3","t17","t18","t19","t20","Boolean","t21","t22","index_0","passesCondition_2","tab_0","_jsx","hidden","isActive","setIsActive","join","children","_jsxs","TabContent","parentIndexPath","name","TabsField","label","customComponents","Field","bb0","AfterInput","BeforeInput","Description","CustomComponent","Fallback","marginPlacement","passesCondition_0","passesCondition_1"],"sources":["../../../src/fields/Tabs/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientComponentProps,\n ClientTab,\n DocumentPreferences,\n SanitizedFieldPermissions,\n StaticDescription,\n TabsFieldClientComponent,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getFieldPaths, toKebabCase } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useCollapsible } from '../../elements/Collapsible/provider.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useFormFields } from '../../forms/Form/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { TabsProvider } from './provider.js'\nimport { TabComponent } from './Tab/index.js'\nimport './index.scss'\n\nconst baseClass = 'tabs-field'\n\nexport { TabsProvider }\n\nconst TabsFieldComponent: TabsFieldClientComponent = (props) => {\n const {\n field: { admin: { className } = {}, tabs = [] },\n forceRender = false,\n indexPath = '',\n parentPath = '',\n parentSchemaPath = '',\n path = '',\n permissions,\n readOnly,\n schemaPath = '',\n } = props\n\n const { getPreference, setPreference } = usePreferences()\n const { preferencesKey } = useDocumentInfo()\n const { i18n } = useTranslation()\n const { isWithinCollapsible } = useCollapsible()\n\n const tabStates = useFormFields(([fields]) => {\n return tabs.map((tab, index) => {\n const id = tab?.id\n\n return {\n index,\n passesCondition: fields?.[id]?.passesCondition ?? true,\n tab,\n }\n })\n })\n\n const [activeTabIndex, setActiveTabIndex] = useState<number>(\n () => tabStates.filter(({ passesCondition }) => passesCondition)?.[0]?.index ?? 0,\n )\n\n const tabsPrefKey = `tabs-${indexPath}`\n\n const activeTabInfo = tabStates[activeTabIndex]\n const activeTabConfig = activeTabInfo?.tab\n const activeTabDescription = activeTabConfig.admin?.description ?? activeTabConfig.description\n\n const activeTabStaticDescription =\n typeof activeTabDescription === 'function'\n ? activeTabDescription({ i18n, t: i18n.t })\n : activeTabDescription\n\n const hasVisibleTabs = tabStates.some(({ passesCondition }) => passesCondition)\n\n const handleTabChange = useCallback(\n async (incomingTabIndex: number): Promise<void> => {\n setActiveTabIndex(incomingTabIndex)\n\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n if (preferencesKey) {\n void setPreference(preferencesKey, {\n ...existingPreferences,\n ...(path\n ? {\n fields: {\n ...(existingPreferences?.fields || {}),\n [path]: {\n ...existingPreferences?.fields?.[path],\n tabIndex: incomingTabIndex,\n },\n },\n }\n : {\n fields: {\n ...existingPreferences?.fields,\n [tabsPrefKey]: {\n ...existingPreferences?.fields?.[tabsPrefKey],\n tabIndex: incomingTabIndex,\n },\n },\n }),\n })\n }\n },\n [getPreference, preferencesKey, setPreference, path, tabsPrefKey],\n )\n\n useEffect(() => {\n if (preferencesKey) {\n const getInitialPref = async () => {\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n const initialIndex = path\n ? existingPreferences?.fields?.[path]?.tabIndex\n : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex\n\n const newIndex = initialIndex || 0\n setActiveTabIndex(newIndex)\n }\n void getInitialPref()\n }\n }, [path, getPreference, preferencesKey, tabsPrefKey, tabs, parentPath, parentSchemaPath])\n\n useEffect(() => {\n if (activeTabInfo?.passesCondition === false) {\n const nextTab = tabStates.find(({ passesCondition }) => passesCondition)\n if (nextTab) {\n void handleTabChange(nextTab.index)\n }\n }\n }, [activeTabInfo, tabStates, handleTabChange])\n\n return (\n <div\n className={[\n fieldBaseClass,\n className,\n baseClass,\n isWithinCollapsible && `${baseClass}--within-collapsible`,\n !hasVisibleTabs && `${baseClass}--hidden`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <TabsProvider>\n <div className={`${baseClass}__tabs-wrap`}>\n <div className={`${baseClass}__tabs`}>\n {tabStates.map(({ index, passesCondition, tab }) => (\n <TabComponent\n hidden={!passesCondition}\n isActive={activeTabIndex === index}\n key={index}\n parentPath={path}\n setIsActive={() => {\n void handleTabChange(index)\n }}\n tab={tab}\n />\n ))}\n </div>\n </div>\n <div className={`${baseClass}__content-wrap`}>\n {activeTabConfig && (\n <TabContent\n description={activeTabStaticDescription}\n field={activeTabConfig}\n forceRender={forceRender}\n hidden={false}\n parentIndexPath={indexPath}\n parentPath={path}\n parentSchemaPath={schemaPath}\n path={path}\n permissions={\n permissions && typeof permissions === 'object' && 'name' in activeTabConfig\n ? permissions[activeTabConfig.name] &&\n typeof permissions[activeTabConfig.name] === 'object' &&\n 'fields' in permissions[activeTabConfig.name]\n ? permissions[activeTabConfig.name].fields\n : permissions[activeTabConfig.name]\n : permissions\n }\n readOnly={readOnly}\n tabIndex={activeTabIndex}\n />\n )}\n </div>\n </TabsProvider>\n </div>\n )\n}\n\nexport const TabsField = withCondition(TabsFieldComponent)\n\ntype ActiveTabProps = {\n readonly description: StaticDescription\n readonly field: ClientTab\n readonly hidden: boolean\n readonly label?: string\n readonly parentIndexPath: string\n readonly parentPath: string\n readonly parentSchemaPath: string\n readonly path: string\n readonly permissions: SanitizedFieldPermissions\n readonly readOnly: boolean\n readonly tabIndex: number\n} & Pick<ClientComponentProps, 'forceRender'>\n\nfunction TabContent({\n description,\n field,\n forceRender,\n hidden,\n label,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n permissions,\n readOnly,\n tabIndex,\n}: ActiveTabProps) {\n const { i18n } = useTranslation()\n\n const { customComponents: { AfterInput, BeforeInput, Description, Field } = {} } = useField()\n\n if (Field) {\n return Field\n }\n\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: tabIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n return (\n <div\n className={[\n hidden && `${baseClass}__tab--hidden`,\n `${baseClass}__tab`,\n label && `${baseClass}__tabConfigLabel-${toKebabCase(getTranslation(label, i18n))}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={\n <FieldDescription description={description} marginPlacement=\"bottom\" path={parentPath} />\n }\n />\n {BeforeInput}\n <RenderFields\n fields={field.fields}\n forceRender={forceRender}\n parentIndexPath={indexPath}\n parentPath={path}\n parentSchemaPath={schemaPath}\n permissions={permissions}\n readOnly={readOnly}\n />\n {AfterInput}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","getTranslation","getFieldPaths","toKebabCase","React","useCallback","useEffect","useState","useCollapsible","RenderCustomComponent","useFormFields","RenderFields","useField","withCondition","useDocumentInfo","usePreferences","useTranslation","FieldDescription","fieldBaseClass","TabsProvider","TabComponent","baseClass","TabsFieldComponent","props","$","field","t0","forceRender","t1","indexPath","t2","parentPath","t3","parentSchemaPath","t4","path","t5","permissions","readOnly","schemaPath","t6","admin","t7","tabs","t8","t9","undefined","className","t10","getPreference","setPreference","preferencesKey","i18n","isWithinCollapsible","t11","t12","fields","map","tab","index","id","passesCondition","tabStates","filter","_temp","activeTabIndex","setActiveTabIndex","tabsPrefKey","activeTabInfo","activeTabConfig","activeTabDescription","description","activeTabStaticDescription","t","hasVisibleTabs","some","_temp2","t13","incomingTabIndex","existingPreferences","tabIndex","handleTabChange","t14","length","getInitialPref","existingPreferences_0","initialIndex","newIndex","t15","t16","nextTab","find","_temp3","t17","t18","t19","t20","Boolean","t21","t22","index_0","passesCondition_2","tab_0","_jsx","hidden","isActive","setIsActive","join","children","_jsxs","TabContent","parentIndexPath","name","TabsField","label","customComponents","Field","bb0","AfterInput","BeforeInput","Description","CustomComponent","Fallback","marginPlacement","passesCondition_0","passesCondition_1"],"sources":["../../../src/fields/Tabs/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientComponentProps,\n ClientTab,\n DocumentPreferences,\n SanitizedFieldPermissions,\n StaticDescription,\n TabsFieldClientComponent,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getFieldPaths, toKebabCase } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useCollapsible } from '../../elements/Collapsible/provider.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useFormFields } from '../../forms/Form/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { TabsProvider } from './provider.js'\nimport { TabComponent } from './Tab/index.js'\nimport './index.scss'\n\nconst baseClass = 'tabs-field'\n\nexport { TabsProvider }\n\nconst TabsFieldComponent: TabsFieldClientComponent = (props) => {\n const {\n field: { admin: { className } = {}, tabs = [] },\n forceRender = false,\n indexPath = '',\n parentPath = '',\n parentSchemaPath = '',\n path = '',\n permissions,\n readOnly,\n schemaPath = '',\n } = props\n\n const { getPreference, setPreference } = usePreferences()\n const { preferencesKey } = useDocumentInfo()\n const { i18n } = useTranslation()\n const { isWithinCollapsible } = useCollapsible()\n\n const tabStates = useFormFields(([fields]) => {\n return tabs.map((tab, index) => {\n const id = tab?.id\n\n return {\n index,\n passesCondition: fields?.[id]?.passesCondition ?? true,\n tab,\n }\n })\n })\n\n const [activeTabIndex, setActiveTabIndex] = useState<number>(\n () => tabStates.filter(({ passesCondition }) => passesCondition)?.[0]?.index ?? 0,\n )\n\n const tabsPrefKey = `tabs-${indexPath}`\n\n const activeTabInfo = tabStates[activeTabIndex]\n const activeTabConfig = activeTabInfo?.tab\n const activeTabDescription = activeTabConfig?.admin?.description ?? activeTabConfig?.description\n\n const activeTabStaticDescription =\n typeof activeTabDescription === 'function'\n ? activeTabDescription({ i18n, t: i18n.t })\n : activeTabDescription\n\n const hasVisibleTabs = tabStates.some(({ passesCondition }) => passesCondition)\n\n const handleTabChange = useCallback(\n async (incomingTabIndex: number): Promise<void> => {\n setActiveTabIndex(incomingTabIndex)\n\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n if (preferencesKey) {\n void setPreference(preferencesKey, {\n ...existingPreferences,\n ...(path\n ? {\n fields: {\n ...(existingPreferences?.fields || {}),\n [path]: {\n ...existingPreferences?.fields?.[path],\n tabIndex: incomingTabIndex,\n },\n },\n }\n : {\n fields: {\n ...existingPreferences?.fields,\n [tabsPrefKey]: {\n ...existingPreferences?.fields?.[tabsPrefKey],\n tabIndex: incomingTabIndex,\n },\n },\n }),\n })\n }\n },\n [getPreference, preferencesKey, setPreference, path, tabsPrefKey],\n )\n\n useEffect(() => {\n if (preferencesKey) {\n const getInitialPref = async () => {\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n const initialIndex = path\n ? existingPreferences?.fields?.[path]?.tabIndex\n : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex\n\n const newIndex = typeof initialIndex === 'number' && initialIndex < tabStates.length ? initialIndex : 0\n setActiveTabIndex(newIndex)\n }\n void getInitialPref()\n }\n }, [path, getPreference, preferencesKey, tabsPrefKey, tabs, parentPath, parentSchemaPath])\n\n useEffect(() => {\n if (activeTabInfo?.passesCondition === false) {\n const nextTab = tabStates.find(({ passesCondition }) => passesCondition)\n if (nextTab) {\n void handleTabChange(nextTab.index)\n }\n }\n }, [activeTabInfo, tabStates, handleTabChange])\n\n return (\n <div\n className={[\n fieldBaseClass,\n className,\n baseClass,\n isWithinCollapsible && `${baseClass}--within-collapsible`,\n !hasVisibleTabs && `${baseClass}--hidden`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <TabsProvider>\n <div className={`${baseClass}__tabs-wrap`}>\n <div className={`${baseClass}__tabs`}>\n {tabStates.map(({ index, passesCondition, tab }) => (\n <TabComponent\n hidden={!passesCondition}\n isActive={activeTabIndex === index}\n key={index}\n parentPath={path}\n setIsActive={() => {\n void handleTabChange(index)\n }}\n tab={tab}\n />\n ))}\n </div>\n </div>\n <div className={`${baseClass}__content-wrap`}>\n {activeTabConfig && (\n <TabContent\n description={activeTabStaticDescription}\n field={activeTabConfig}\n forceRender={forceRender}\n hidden={false}\n parentIndexPath={indexPath}\n parentPath={path}\n parentSchemaPath={schemaPath}\n path={path}\n permissions={\n permissions && typeof permissions === 'object' && 'name' in activeTabConfig\n ? permissions[activeTabConfig.name] &&\n typeof permissions[activeTabConfig.name] === 'object' &&\n 'fields' in permissions[activeTabConfig.name]\n ? permissions[activeTabConfig.name].fields\n : permissions[activeTabConfig.name]\n : permissions\n }\n readOnly={readOnly}\n tabIndex={activeTabIndex}\n />\n )}\n </div>\n </TabsProvider>\n </div>\n )\n}\n\nexport const TabsField = withCondition(TabsFieldComponent)\n\ntype ActiveTabProps = {\n readonly description: StaticDescription\n readonly field: ClientTab\n readonly hidden: boolean\n readonly label?: string\n readonly parentIndexPath: string\n readonly parentPath: string\n readonly parentSchemaPath: string\n readonly path: string\n readonly permissions: SanitizedFieldPermissions\n readonly readOnly: boolean\n readonly tabIndex: number\n} & Pick<ClientComponentProps, 'forceRender'>\n\nfunction TabContent({\n description,\n field,\n forceRender,\n hidden,\n label,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n permissions,\n readOnly,\n tabIndex,\n}: ActiveTabProps) {\n const { i18n } = useTranslation()\n\n const { customComponents: { AfterInput, BeforeInput, Description, Field } = {} } = useField()\n\n if (Field) {\n return Field\n }\n\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: tabIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n return (\n <div\n className={[\n hidden && `${baseClass}__tab--hidden`,\n `${baseClass}__tab`,\n label && `${baseClass}__tabConfigLabel-${toKebabCase(getTranslation(label, i18n))}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={\n <FieldDescription description={description} marginPlacement=\"bottom\" path={parentPath} />\n }\n />\n {BeforeInput}\n <RenderFields\n fields={field.fields}\n forceRender={forceRender}\n parentIndexPath={indexPath}\n parentPath={path}\n parentSchemaPath={schemaPath}\n permissions={permissions}\n readOnly={readOnly}\n />\n {AfterInput}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -76,7 +76,7 @@ const TextFieldComponent = props => {
76
76
  localizationConfig: localizationConfig || undefined
77
77
  });
78
78
  const [valueToRender, setValueToRender] = useState([]) // Only for hasMany
79
- ;
79
+ ;
80
80
  const handleHasManyChange = useCallback(selectedOption => {
81
81
  if (!(readOnly || disabled)) {
82
82
  let newValue;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useMemo","useState","useField","withCondition","useConfig","useLocale","mergeFieldStyles","isFieldRTL","TextInput","TextFieldComponent","props","field","admin","autoComplete","className","description","placeholder","rtl","hasMany","label","localized","maxLength","maxRows","minLength","minRows","required","inputRef","path","pathFromProps","readOnly","validate","locale","config","localization","localizationConfig","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","setValue","showError","potentiallyStalePath","renderRTL","fieldLocalized","fieldRTL","undefined","valueToRender","setValueToRender","handleHasManyChange","selectedOption","newValue","Array","isArray","map","option","val","index","id","toString","styles","_jsx","htmlAttributes","onChange","e","target","style","TextField"],"sources":["../../../src/fields/Text/index.tsx"],"sourcesContent":["'use client'\nimport type { TextFieldClientComponent } from 'payload'\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { Option } from '../../elements/ReactSelect/types.js'\nimport type { TextInputProps } from './types.js'\n\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { isFieldRTL } from '../shared/index.js'\nimport { TextInput } from './Input.js'\nimport './index.scss'\n\nexport { TextInput, TextInputProps }\n\nconst TextFieldComponent: TextFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { autoComplete, className, description, placeholder, rtl } = {},\n hasMany,\n label,\n localized,\n maxLength,\n maxRows,\n minLength,\n minRows,\n required,\n },\n inputRef,\n path: pathFromProps,\n readOnly,\n validate,\n } = props\n\n const locale = useLocale()\n\n const {\n config: { localization: localizationConfig },\n } = useConfig()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxLength, minLength, required })\n }\n },\n [validate, minLength, maxLength, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n path,\n setValue,\n showError,\n value,\n } = useField({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const renderRTL = isFieldRTL({\n fieldLocalized: localized,\n fieldRTL: rtl,\n locale,\n localizationConfig: localizationConfig || undefined,\n })\n\n const [valueToRender, setValueToRender] = useState<\n { id: string; label: string; value: { value: number } }[]\n >([]) // Only for hasMany\n\n const handleHasManyChange = useCallback(\n (selectedOption) => {\n if (!(readOnly || disabled)) {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value?.value || option.value)\n } else {\n newValue = [selectedOption.value?.value || selectedOption.value]\n }\n\n setValue(newValue)\n }\n },\n [readOnly, setValue, disabled],\n )\n\n // useEffect update valueToRender:\n useEffect(() => {\n if (hasMany && Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n // React-select automatically uses \"label-value\" as a key, so we will get that react duplicate key warning if we just pass in the value as multiple values can be the same. So we need to append the index to the toString() of the value to avoid that warning, as it uses that as the key.\n toString: () => `${val}${index}`,\n value: val?.value || val,\n },\n }\n }),\n )\n }\n }, [value, hasMany])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <TextInput\n AfterInput={AfterInput}\n BeforeInput={BeforeInput}\n className={className}\n Description={Description}\n description={description}\n Error={Error}\n hasMany={hasMany}\n htmlAttributes={{\n autoComplete: autoComplete || undefined,\n }}\n inputRef={inputRef}\n Label={Label}\n label={label}\n localized={localized}\n maxRows={maxRows}\n minRows={minRows}\n onChange={\n hasMany\n ? handleHasManyChange\n : (e) => {\n setValue(e.target.value)\n }\n }\n path={path}\n placeholder={placeholder}\n readOnly={readOnly || disabled}\n required={required}\n rtl={renderRTL}\n showError={showError}\n style={styles}\n value={(value as string) || ''}\n valueToRender={valueToRender as Option[]}\n />\n )\n}\n\nexport const TextField = withCondition(TextFieldComponent)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useMemo","useState","useField","withCondition","useConfig","useLocale","mergeFieldStyles","isFieldRTL","TextInput","TextFieldComponent","props","field","admin","autoComplete","className","description","placeholder","rtl","hasMany","label","localized","maxLength","maxRows","minLength","minRows","required","inputRef","path","pathFromProps","readOnly","validate","locale","config","localization","localizationConfig","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","setValue","showError","potentiallyStalePath","renderRTL","fieldLocalized","fieldRTL","undefined","valueToRender","setValueToRender","handleHasManyChange","selectedOption","newValue","Array","isArray","map","option","val","index","id","toString","styles","_jsx","htmlAttributes","onChange","e","target","style","TextField"],"sources":["../../../src/fields/Text/index.tsx"],"sourcesContent":["'use client'\nimport type { TextFieldClientComponent } from 'payload'\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { Option } from '../../elements/ReactSelect/types.js'\nimport type { TextInputProps } from './types.js'\n\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { isFieldRTL } from '../shared/index.js'\nimport { TextInput } from './Input.js'\nimport './index.scss'\n\nexport { TextInput, TextInputProps }\n\nconst TextFieldComponent: TextFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { autoComplete, className, description, placeholder, rtl } = {},\n hasMany,\n label,\n localized,\n maxLength,\n maxRows,\n minLength,\n minRows,\n required,\n },\n inputRef,\n path: pathFromProps,\n readOnly,\n validate,\n } = props\n\n const locale = useLocale()\n\n const {\n config: { localization: localizationConfig },\n } = useConfig()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxLength, minLength, required })\n }\n },\n [validate, minLength, maxLength, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n path,\n setValue,\n showError,\n value,\n } = useField({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const renderRTL = isFieldRTL({\n fieldLocalized: localized,\n fieldRTL: rtl,\n locale,\n localizationConfig: localizationConfig || undefined,\n })\n\n const [valueToRender, setValueToRender] = useState<\n { id: string; label: string; value: { value: number } }[]\n >([]) // Only for hasMany\n\n const handleHasManyChange = useCallback(\n (selectedOption) => {\n if (!(readOnly || disabled)) {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value?.value || option.value)\n } else {\n newValue = [selectedOption.value?.value || selectedOption.value]\n }\n\n setValue(newValue)\n }\n },\n [readOnly, setValue, disabled],\n )\n\n // useEffect update valueToRender:\n useEffect(() => {\n if (hasMany && Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n // React-select automatically uses \"label-value\" as a key, so we will get that react duplicate key warning if we just pass in the value as multiple values can be the same. So we need to append the index to the toString() of the value to avoid that warning, as it uses that as the key.\n toString: () => `${val}${index}`,\n value: val?.value || val,\n },\n }\n }),\n )\n }\n }, [value, hasMany])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <TextInput\n AfterInput={AfterInput}\n BeforeInput={BeforeInput}\n className={className}\n Description={Description}\n description={description}\n Error={Error}\n hasMany={hasMany}\n htmlAttributes={{\n autoComplete: autoComplete || undefined,\n }}\n inputRef={inputRef}\n Label={Label}\n label={label}\n localized={localized}\n maxRows={maxRows}\n minRows={minRows}\n onChange={\n hasMany\n ? handleHasManyChange\n : (e) => {\n setValue(e.target.value)\n }\n }\n path={path}\n placeholder={placeholder}\n readOnly={readOnly || disabled}\n required={required}\n rtl={renderRTL}\n showError={showError}\n style={styles}\n value={(value as string) || ''}\n valueToRender={valueToRender as Option[]}\n />\n )\n}\n\nexport const TextField = withCondition(TextFieldComponent)\n"],"mappings":"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","ignoreList":[]}
@@ -19,6 +19,6 @@ export function isFieldRTL({
19
19
  !fieldLocalized && isCurrentLocaleDefaultLocale) ||
20
20
  // If the current locale is the default locale, but the field is not localized, that field is rtl too
21
21
  fieldRTL === true // If fieldRTL is true. This should be useful for when no localization is set at all in the payload config, but you still want fields to be rtl.
22
- ;
22
+ ;
23
23
  }
24
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["fieldBaseClass","isFieldRTL","fieldLocalized","fieldRTL","locale","localizationConfig","hasMultipleLocales","locales","length","isCurrentLocaleDefaultLocale","code","defaultLocale","rtl"],"sources":["../../../src/fields/shared/index.tsx"],"sourcesContent":["'use client'\nimport type { Locale, SanitizedLocalizationConfig } from 'payload'\n\nexport const fieldBaseClass = 'field-type'\n\n/**\n * Determines whether a field should be displayed as right-to-left (RTL) based on its configuration, payload's localization configuration and the adming user's currently enabled locale.\n\n * @returns Whether the field should be displayed as RTL.\n */\nexport function isFieldRTL({\n fieldLocalized,\n fieldRTL,\n locale,\n localizationConfig,\n}: {\n fieldLocalized: boolean\n fieldRTL: boolean\n locale: Locale\n localizationConfig?: SanitizedLocalizationConfig\n}) {\n const hasMultipleLocales =\n locale &&\n localizationConfig &&\n localizationConfig.locales &&\n localizationConfig.locales.length > 1\n\n const isCurrentLocaleDefaultLocale = locale?.code === localizationConfig?.defaultLocale\n\n return (\n (fieldRTL !== false &&\n locale?.rtl === true &&\n (fieldLocalized ||\n (!fieldLocalized && !hasMultipleLocales) || // If there is only one locale which is also rtl, that field is rtl too\n (!fieldLocalized && isCurrentLocaleDefaultLocale))) || // If the current locale is the default locale, but the field is not localized, that field is rtl too\n fieldRTL === true\n ) // If fieldRTL is true. This should be useful for when no localization is set at all in the payload config, but you still want fields to be rtl.\n}\n"],"mappings":"AAAA;;AAGA,OAAO,MAAMA,cAAA,GAAiB;AAE9B;;;;;AAKA,OAAO,SAASC,WAAW;EACzBC,cAAc;EACdC,QAAQ;EACRC,MAAM;EACNC;AAAkB,CAMnB;EACC,MAAMC,kBAAA,GACJF,MAAA,IACAC,kBAAA,IACAA,kBAAA,CAAmBE,OAAO,IAC1BF,kBAAA,CAAmBE,OAAO,CAACC,MAAM,GAAG;EAEtC,MAAMC,4BAAA,GAA+BL,MAAA,EAAQM,IAAA,KAASL,kBAAA,EAAoBM,aAAA;EAE1E,OACER,QAAC,KAAa,SACZC,MAAA,EAAQQ,GAAA,KAAQ,SACfV,cAAA,IACE,CAACA,cAAA,IAAkB,CAACI,kBAAA;EAAuB;EAC3C,CAACJ,cAAA,IAAkBO,4BAA4B;EAAO;EAC3DN,QAAA,KAAa,KACb;EAAA;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["fieldBaseClass","isFieldRTL","fieldLocalized","fieldRTL","locale","localizationConfig","hasMultipleLocales","locales","length","isCurrentLocaleDefaultLocale","code","defaultLocale","rtl"],"sources":["../../../src/fields/shared/index.tsx"],"sourcesContent":["'use client'\nimport type { Locale, SanitizedLocalizationConfig } from 'payload'\n\nexport const fieldBaseClass = 'field-type'\n\n/**\n * Determines whether a field should be displayed as right-to-left (RTL) based on its configuration, payload's localization configuration and the adming user's currently enabled locale.\n\n * @returns Whether the field should be displayed as RTL.\n */\nexport function isFieldRTL({\n fieldLocalized,\n fieldRTL,\n locale,\n localizationConfig,\n}: {\n fieldLocalized: boolean\n fieldRTL: boolean\n locale: Locale\n localizationConfig?: SanitizedLocalizationConfig\n}) {\n const hasMultipleLocales =\n locale &&\n localizationConfig &&\n localizationConfig.locales &&\n localizationConfig.locales.length > 1\n\n const isCurrentLocaleDefaultLocale = locale?.code === localizationConfig?.defaultLocale\n\n return (\n (fieldRTL !== false &&\n locale?.rtl === true &&\n (fieldLocalized ||\n (!fieldLocalized && !hasMultipleLocales) || // If there is only one locale which is also rtl, that field is rtl too\n (!fieldLocalized && isCurrentLocaleDefaultLocale))) || // If the current locale is the default locale, but the field is not localized, that field is rtl too\n fieldRTL === true\n ) // If fieldRTL is true. This should be useful for when no localization is set at all in the payload config, but you still want fields to be rtl.\n}\n"],"mappings":"AAAA;;AAGA,OAAO,MAAMA,cAAA,GAAiB;AAE9B;;;;;AAKA,OAAO,SAASC,WAAW;EACzBC,cAAc;EACdC,QAAQ;EACRC,MAAM;EACNC;AAAkB,CAMnB;EACC,MAAMC,kBAAA,GACJF,MAAA,IACAC,kBAAA,IACAA,kBAAA,CAAmBE,OAAO,IAC1BF,kBAAA,CAAmBE,OAAO,CAACC,MAAM,GAAG;EAEtC,MAAMC,4BAAA,GAA+BL,MAAA,EAAQM,IAAA,KAASL,kBAAA,EAAoBM,aAAA;EAE1E,OACER,QAAC,KAAa,SACZC,MAAA,EAAQQ,GAAA,KAAQ,SACfV,cAAA,IACE,CAACA,cAAA,IAAkB,CAACI,kBAAA;EAAuB;EAC3C,CAACJ,cAAA,IAAkBO,4BAA4B;EAAO;EAC3DN,QAAA,KAAa,KACb;AAAA;AACJ","ignoreList":[]}
@@ -3,7 +3,7 @@ const sanitizeField = incomingField => {
3
3
  const field = {
4
4
  ...incomingField
5
5
  } // shallow copy, as we only need to remove top-level keys
6
- ;
6
+ ;
7
7
  for (const key of blacklistedKeys) {
8
8
  delete field[key];
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reduceToSerializableFields.js","names":["blacklistedKeys","sanitizeField","incomingField","field","key","reduceToSerializableFields","fields","result"],"sources":["../../../src/forms/Form/reduceToSerializableFields.ts"],"sourcesContent":["import { type FormField, type FormState } from 'payload'\n\ntype BlacklistedKeys = 'customComponents' | 'validate'\nconst blacklistedKeys: BlacklistedKeys[] = ['validate', 'customComponents']\n\nconst sanitizeField = (incomingField: FormField): FormField => {\n const field = { ...incomingField } // shallow copy, as we only need to remove top-level keys\n\n for (const key of blacklistedKeys) {\n delete field[key]\n }\n\n return field\n}\n\n/**\n * Takes in FormState and removes fields that are not serializable.\n * Returns FormState without blacklisted keys.\n */\nexport const reduceToSerializableFields = (\n fields: FormState,\n): {\n [key: string]: Omit<FormField, BlacklistedKeys>\n} => {\n const result: Record<string, Omit<FormField, BlacklistedKeys>> = {}\n\n for (const key in fields) {\n result[key] = sanitizeField(fields[key])\n }\n\n return result\n}\n"],"mappings":"AAGA,MAAMA,eAAA,GAAqC,CAAC,YAAY,mBAAmB;AAE3E,MAAMC,aAAA,GAAiBC,aAAA;EACrB,MAAMC,KAAA,GAAQ;IAAE,GAAGD;EAAc,EAAE;EAAA;EAEnC,KAAK,MAAME,GAAA,IAAOJ,eAAA,EAAiB;IACjC,OAAOG,KAAK,CAACC,GAAA,CAAI;EACnB;EAEA,OAAOD,KAAA;AACT;AAEA;;;;AAIA,OAAO,MAAME,0BAAA,GACXC,MAAA;EAIA,MAAMC,MAAA,GAA2D,CAAC;EAElE,KAAK,MAAMH,GAAA,IAAOE,MAAA,EAAQ;IACxBC,MAAM,CAACH,GAAA,CAAI,GAAGH,aAAA,CAAcK,MAAM,CAACF,GAAA,CAAI;EACzC;EAEA,OAAOG,MAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"reduceToSerializableFields.js","names":["blacklistedKeys","sanitizeField","incomingField","field","key","reduceToSerializableFields","fields","result"],"sources":["../../../src/forms/Form/reduceToSerializableFields.ts"],"sourcesContent":["import { type FormField, type FormState } from 'payload'\n\ntype BlacklistedKeys = 'customComponents' | 'validate'\nconst blacklistedKeys: BlacklistedKeys[] = ['validate', 'customComponents']\n\nconst sanitizeField = (incomingField: FormField): FormField => {\n const field = { ...incomingField } // shallow copy, as we only need to remove top-level keys\n\n for (const key of blacklistedKeys) {\n delete field[key]\n }\n\n return field\n}\n\n/**\n * Takes in FormState and removes fields that are not serializable.\n * Returns FormState without blacklisted keys.\n */\nexport const reduceToSerializableFields = (\n fields: FormState,\n): {\n [key: string]: Omit<FormField, BlacklistedKeys>\n} => {\n const result: Record<string, Omit<FormField, BlacklistedKeys>> = {}\n\n for (const key in fields) {\n result[key] = sanitizeField(fields[key])\n }\n\n return result\n}\n"],"mappings":"AAGA,MAAMA,eAAA,GAAqC,CAAC,YAAY,mBAAmB;AAE3E,MAAMC,aAAA,GAAiBC,aAAA;EACrB,MAAMC,KAAA,GAAQ;IAAE,GAAGD;EAAc,EAAE;AAAA;EAEnC,KAAK,MAAME,GAAA,IAAOJ,eAAA,EAAiB;IACjC,OAAOG,KAAK,CAACC,GAAA,CAAI;EACnB;EAEA,OAAOD,KAAA;AACT;AAEA;;;;AAIA,OAAO,MAAME,0BAAA,GACXC,MAAA;EAIA,MAAMC,MAAA,GAA2D,CAAC;EAElE,KAAK,MAAMH,GAAA,IAAOE,MAAA,EAAQ;IACxBC,MAAM,CAACH,GAAA,CAAI,GAAGH,aAAA,CAAcK,MAAM,CAACF,GAAA,CAAI;EACzC;EAEA,OAAOG,MAAA;AACT","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/WatchChildErrors/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,KAAK,6BAA6B,GAAG;IACnC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB;;;;;OAKG;IACH,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,CAAA;AACD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAwCpE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/WatchChildErrors/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,KAAK,6BAA6B,GAAG;IACnC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB;;;;;OAKG;IACH,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,CAAA;AACD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CA2CpE,CAAA"}
@@ -32,7 +32,8 @@ export const WatchChildErrors = t0 => {
32
32
  const matchingSegment = segmentsToMatch?.some(segment => {
33
33
  const segmentToMatch = [...parentPath, segment].join(".");
34
34
  if (segmentToMatch.endsWith(".")) {
35
- return key.startsWith(segmentToMatch);
35
+ const pathWithoutDot = segmentToMatch.slice(0, -1);
36
+ return key.startsWith(segmentToMatch) || key === pathWithoutDot;
36
37
  }
37
38
  return key === segmentToMatch;
38
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useThrottledEffect","useAllFormFields","useFormSubmitted","buildPathSegments","WatchChildErrors","t0","$","fields","path","parentPath","setErrorCount","formState","hasSubmitted","t1","segmentsToMatch","t2","errorCount","Object","entries","forEach","t3","key","matchingSegment","some","segment","segmentToMatch","join","endsWith","startsWith","pathState","valid"],"sources":["../../../src/forms/WatchChildErrors/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField } from 'payload'\nimport type React from 'react'\n\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAllFormFields, useFormSubmitted } from '../Form/context.js'\nimport { buildPathSegments } from './buildPathSegments.js'\n\ntype TrackSubSchemaErrorCountProps = {\n fields?: ClientField[]\n /**\n * This path should only include path segments that affect data\n * i.e. it should not include _index-0 type segments\n *\n * For collapsibles and tabs you can simply pass their parent path\n */\n path: (number | string)[]\n setErrorCount: (count: number) => void\n}\nexport const WatchChildErrors: React.FC<TrackSubSchemaErrorCountProps> = ({\n fields,\n path: parentPath,\n setErrorCount,\n}) => {\n const [formState] = useAllFormFields()\n const hasSubmitted = useFormSubmitted()\n\n const segmentsToMatch = buildPathSegments(fields)\n\n useThrottledEffect(\n () => {\n if (hasSubmitted) {\n let errorCount = 0\n Object.entries(formState).forEach(([key]) => {\n const matchingSegment = segmentsToMatch?.some((segment) => {\n const segmentToMatch = [...parentPath, segment].join('.')\n // match fields with same parent path\n if (segmentToMatch.endsWith('.')) {\n return key.startsWith(segmentToMatch)\n }\n // match fields with same path\n return key === segmentToMatch\n })\n\n if (matchingSegment) {\n const pathState = formState[key]\n if ('valid' in pathState && !pathState.valid) {\n errorCount += 1\n }\n }\n })\n setErrorCount(errorCount)\n }\n },\n 250,\n [formState, hasSubmitted, fields],\n )\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAIA,SAASC,kBAAkB,QAAQ;AACnC,SAASC,gBAAgB,EAAEC,gBAAgB,QAAQ;AACnD,SAASC,iBAAiB,QAAQ;AAalC,OAAO,MAAMC,gBAAA,GAA4DC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAC;IAAAQ,MAAA;IAAAC,IAAA,EAAAC,UAAA;IAAAC;EAAA,IAAAL,EAIzE;EACC,OAAAM,SAAA,IAAoBV,gBAAA;EACpB,MAAAW,YAAA,GAAqBV,gBAAA;EAAA,IAAAW,EAAA;EAAA,IAAAP,CAAA,QAAAC,MAAA;IAEGM,EAAA,GAAAV,iBAAA,CAAkBI,MAAA;IAAAD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAA1C,MAAAQ,eAAA,GAAwBD,EAAkB;EAAA,IAAAE,EAAA;EAAA,IAAAT,CAAA,QAAAK,SAAA,IAAAL,CAAA,QAAAM,YAAA,IAAAN,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAQ,eAAA,IAAAR,CAAA,QAAAI,aAAA;IAGxCK,EAAA,GAAAA,CAAA;MAAA,IACMH,YAAA;QACF,IAAAI,UAAA;QACAC,MAAA,CAAAC,OAAA,CAAeP,SAAA,EAAAQ,OAAA,CAAAC,EAAA;UAAoB,OAAAC,GAAA,IAAAD,EAAK;UACtC,MAAAE,eAAA,GAAwBR,eAAA,EAAAS,IAAA,CAAAC,OAAA;YACtB,MAAAC,cAAA,GAAuB,IAAIhB,UAAA,EAAYe,OAAA,EAAAE,IAAA,CAAc;YAAA,IAEjDD,cAAA,CAAAE,QAAA,CAAwB;cAAA,OACnBN,GAAA,CAAAO,UAAA,CAAeH,cAAA;YAAA;YAAA,OAGjBJ,GAAA,KAAQI,cAAA;UAAA;UACjB,IAEIH,eAAA;YACF,MAAAO,SAAA,GAAkBlB,SAAS,CAACU,GAAA;YAAI,IAC5B,WAAWQ,SAAA,KAAcA,SAAA,CAAAC,KAAe;cAC1Cd,UAAA,GAAAA,UAAA,IAAc;cAAdA,UAAA;YAAA;UAAA;QAAA,CAGN;QACAN,aAAA,CAAcM,UAAA;MAAA;IAAA;IAElBV,CAAA,MAAAK,SAAA;IAAAL,CAAA,MAAAM,YAAA;IAAAN,CAAA,MAAAG,UAAA;IAAAH,CAAA,MAAAQ,eAAA;IAAAR,CAAA,MAAAI,aAAA;IAAAJ,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,IAAAc,EAAA;EAAA,IAAAd,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAK,SAAA,IAAAL,CAAA,SAAAM,YAAA;IAEAQ,EAAA,IAACT,SAAA,EAAWC,YAAA,EAAcL,MAAA;IAAOD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAK,SAAA;IAAAL,CAAA,OAAAM,YAAA;IAAAN,CAAA,OAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EA1BnCN,kBAAA,CACEe,EAuBA,OAEAK,EAAiC;EAAA;AAAA,CAIrC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useThrottledEffect","useAllFormFields","useFormSubmitted","buildPathSegments","WatchChildErrors","t0","$","fields","path","parentPath","setErrorCount","formState","hasSubmitted","t1","segmentsToMatch","t2","errorCount","Object","entries","forEach","t3","key","matchingSegment","some","segment","segmentToMatch","join","endsWith","pathWithoutDot","slice","startsWith","pathState","valid"],"sources":["../../../src/forms/WatchChildErrors/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField } from 'payload'\nimport type React from 'react'\n\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAllFormFields, useFormSubmitted } from '../Form/context.js'\nimport { buildPathSegments } from './buildPathSegments.js'\n\ntype TrackSubSchemaErrorCountProps = {\n fields?: ClientField[]\n /**\n * This path should only include path segments that affect data\n * i.e. it should not include _index-0 type segments\n *\n * For collapsibles and tabs you can simply pass their parent path\n */\n path: (number | string)[]\n setErrorCount: (count: number) => void\n}\nexport const WatchChildErrors: React.FC<TrackSubSchemaErrorCountProps> = ({\n fields,\n path: parentPath,\n setErrorCount,\n}) => {\n const [formState] = useAllFormFields()\n const hasSubmitted = useFormSubmitted()\n\n const segmentsToMatch = buildPathSegments(fields)\n\n useThrottledEffect(\n () => {\n if (hasSubmitted) {\n let errorCount = 0\n Object.entries(formState).forEach(([key]) => {\n const matchingSegment = segmentsToMatch?.some((segment) => {\n const segmentToMatch = [...parentPath, segment].join('.')\n // match fields with same parent path\n if (segmentToMatch.endsWith('.')) {\n // Match both nested fields (key starts with segmentToMatch)\n // and the field itself (key equals segmentToMatch without trailing dot)\n const pathWithoutDot = segmentToMatch.slice(0, -1)\n return key.startsWith(segmentToMatch) || key === pathWithoutDot\n }\n // match fields with same path\n return key === segmentToMatch\n })\n\n if (matchingSegment) {\n const pathState = formState[key]\n if ('valid' in pathState && !pathState.valid) {\n errorCount += 1\n }\n }\n })\n setErrorCount(errorCount)\n }\n },\n 250,\n [formState, hasSubmitted, fields],\n )\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAIA,SAASC,kBAAkB,QAAQ;AACnC,SAASC,gBAAgB,EAAEC,gBAAgB,QAAQ;AACnD,SAASC,iBAAiB,QAAQ;AAalC,OAAO,MAAMC,gBAAA,GAA4DC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAC;IAAAQ,MAAA;IAAAC,IAAA,EAAAC,UAAA;IAAAC;EAAA,IAAAL,EAIzE;EACC,OAAAM,SAAA,IAAoBV,gBAAA;EACpB,MAAAW,YAAA,GAAqBV,gBAAA;EAAA,IAAAW,EAAA;EAAA,IAAAP,CAAA,QAAAC,MAAA;IAEGM,EAAA,GAAAV,iBAAA,CAAkBI,MAAA;IAAAD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAA1C,MAAAQ,eAAA,GAAwBD,EAAkB;EAAA,IAAAE,EAAA;EAAA,IAAAT,CAAA,QAAAK,SAAA,IAAAL,CAAA,QAAAM,YAAA,IAAAN,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAQ,eAAA,IAAAR,CAAA,QAAAI,aAAA;IAGxCK,EAAA,GAAAA,CAAA;MAAA,IACMH,YAAA;QACF,IAAAI,UAAA;QACAC,MAAA,CAAAC,OAAA,CAAeP,SAAA,EAAAQ,OAAA,CAAAC,EAAA;UAAoB,OAAAC,GAAA,IAAAD,EAAK;UACtC,MAAAE,eAAA,GAAwBR,eAAA,EAAAS,IAAA,CAAAC,OAAA;YACtB,MAAAC,cAAA,GAAuB,IAAIhB,UAAA,EAAYe,OAAA,EAAAE,IAAA,CAAc;YAAA,IAEjDD,cAAA,CAAAE,QAAA,CAAwB;cAG1B,MAAAC,cAAA,GAAuBH,cAAA,CAAAI,KAAA,MAAyB;cAAA,OACzCR,GAAA,CAAAS,UAAA,CAAeL,cAAA,KAAmBJ,GAAA,KAAQO,cAAA;YAAA;YAAA,OAG5CP,GAAA,KAAQI,cAAA;UAAA;UACjB,IAEIH,eAAA;YACF,MAAAS,SAAA,GAAkBpB,SAAS,CAACU,GAAA;YAAI,IAC5B,WAAWU,SAAA,KAAcA,SAAA,CAAAC,KAAe;cAC1ChB,UAAA,GAAAA,UAAA,IAAc;cAAdA,UAAA;YAAA;UAAA;QAAA,CAGN;QACAN,aAAA,CAAcM,UAAA;MAAA;IAAA;IAElBV,CAAA,MAAAK,SAAA;IAAAL,CAAA,MAAAM,YAAA;IAAAN,CAAA,MAAAG,UAAA;IAAAH,CAAA,MAAAQ,eAAA;IAAAR,CAAA,MAAAI,aAAA;IAAAJ,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,IAAAc,EAAA;EAAA,IAAAd,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAK,SAAA,IAAAL,CAAA,SAAAM,YAAA;IAEAQ,EAAA,IAACT,SAAA,EAAWC,YAAA,EAAcL,MAAA;IAAOD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAK,SAAA;IAAAL,CAAA,OAAAM,YAAA;IAAAN,CAAA,OAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EA7BnCN,kBAAA,CACEe,EA0BA,OAEAK,EAAiC;EAAA;AAAA,CAIrC","ignoreList":[]}
@@ -10,7 +10,7 @@ export function isRowCollapsed({
10
10
  // If previousFormState is `undefined`, check preferences
11
11
  if (collapsedPrefs !== undefined) {
12
12
  return collapsedPrefs.includes(row.id) // Check if collapsed in preferences
13
- ;
13
+ ;
14
14
  }
15
15
  // If neither exists, fallback to `field.admin.initCollapsed`
16
16
  return field.admin.initCollapsed;
@@ -1 +1 @@
1
- {"version":3,"file":"isRowCollapsed.js","names":["isRowCollapsed","collapsedPrefs","field","previousRow","row","collapsed","undefined","includes","id","admin","initCollapsed"],"sources":["../../../src/forms/fieldSchemasToFormState/isRowCollapsed.ts"],"sourcesContent":["import type { ArrayField, BlocksField, CollapsedPreferences, Row } from 'payload'\n\nexport function isRowCollapsed({\n collapsedPrefs,\n field,\n previousRow,\n row,\n}: {\n collapsedPrefs: CollapsedPreferences\n field: ArrayField | BlocksField\n previousRow: Row | undefined\n row: Row\n}): boolean {\n if (previousRow && 'collapsed' in previousRow) {\n return previousRow.collapsed ?? false\n }\n\n // If previousFormState is `undefined`, check preferences\n if (collapsedPrefs !== undefined) {\n return collapsedPrefs.includes(row.id) // Check if collapsed in preferences\n }\n\n // If neither exists, fallback to `field.admin.initCollapsed`\n return field.admin.initCollapsed\n}\n"],"mappings":"AAEA,OAAO,SAASA,eAAe;EAC7BC,cAAc;EACdC,KAAK;EACLC,WAAW;EACXC;AAAG,CAMJ;EACC,IAAID,WAAA,IAAe,eAAeA,WAAA,EAAa;IAC7C,OAAOA,WAAA,CAAYE,SAAS,IAAI;EAClC;EAEA;EACA,IAAIJ,cAAA,KAAmBK,SAAA,EAAW;IAChC,OAAOL,cAAA,CAAeM,QAAQ,CAACH,GAAA,CAAII,EAAE,EAAE;IAAA;EACzC;EAEA;EACA,OAAON,KAAA,CAAMO,KAAK,CAACC,aAAa;AAClC","ignoreList":[]}
1
+ {"version":3,"file":"isRowCollapsed.js","names":["isRowCollapsed","collapsedPrefs","field","previousRow","row","collapsed","undefined","includes","id","admin","initCollapsed"],"sources":["../../../src/forms/fieldSchemasToFormState/isRowCollapsed.ts"],"sourcesContent":["import type { ArrayField, BlocksField, CollapsedPreferences, Row } from 'payload'\n\nexport function isRowCollapsed({\n collapsedPrefs,\n field,\n previousRow,\n row,\n}: {\n collapsedPrefs: CollapsedPreferences\n field: ArrayField | BlocksField\n previousRow: Row | undefined\n row: Row\n}): boolean {\n if (previousRow && 'collapsed' in previousRow) {\n return previousRow.collapsed ?? false\n }\n\n // If previousFormState is `undefined`, check preferences\n if (collapsedPrefs !== undefined) {\n return collapsedPrefs.includes(row.id) // Check if collapsed in preferences\n }\n\n // If neither exists, fallback to `field.admin.initCollapsed`\n return field.admin.initCollapsed\n}\n"],"mappings":"AAEA,OAAO,SAASA,eAAe;EAC7BC,cAAc;EACdC,KAAK;EACLC,WAAW;EACXC;AAAG,CAMJ;EACC,IAAID,WAAA,IAAe,eAAeA,WAAA,EAAa;IAC7C,OAAOA,WAAA,CAAYE,SAAS,IAAI;EAClC;EAEA;EACA,IAAIJ,cAAA,KAAmBK,SAAA,EAAW;IAChC,OAAOL,cAAA,CAAeM,QAAQ,CAACH,GAAA,CAAII,EAAE,EAAE;AAAA;EACzC;EAEA;EACA,OAAON,KAAA,CAAMO,KAAK,CAACC,aAAa;AAClC","ignoreList":[]}
@@ -167,7 +167,7 @@ export const renderField = ({
167
167
  {
168
168
  if (!fieldConfig?.editor) {
169
169
  throw new MissingEditorProp(fieldConfig) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
170
- ;
170
+ ;
171
171
  }
172
172
  if (typeof fieldConfig?.editor === 'function') {
173
173
  throw new Error('Attempted to access unsanitized rich text editor.');