@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.
- package/dist/elements/Button/index.js +1 -1
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
- package/dist/elements/CopyLocaleData/index.js +38 -34
- package/dist/elements/CopyLocaleData/index.js.map +1 -1
- package/dist/elements/Link/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/index.js +1 -1
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/Thumbnail/createThumbnail.js +2 -2
- package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
- package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
- package/dist/elements/UnpublishButton/index.js +41 -40
- package/dist/elements/UnpublishButton/index.js.map +1 -1
- package/dist/exports/client/{DatePicker-GT6CXMEH.js → DatePicker-YF5TBW3N.js} +2 -2
- package/dist/exports/client/chunk-ZPLD37T2.js +29 -0
- package/dist/exports/client/{chunk-USMS5YRL.js.map → chunk-ZPLD37T2.js.map} +4 -4
- package/dist/exports/client/index.js +12 -12
- package/dist/exports/client/index.js.map +3 -3
- package/dist/fields/Number/index.js +1 -1
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Tabs/index.js +42 -41
- package/dist/fields/Tabs/index.js.map +1 -1
- package/dist/fields/Text/index.js +1 -1
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/shared/index.js +1 -1
- package/dist/fields/shared/index.js.map +1 -1
- package/dist/forms/Form/reduceToSerializableFields.js +1 -1
- package/dist/forms/Form/reduceToSerializableFields.js.map +1 -1
- package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
- package/dist/forms/WatchChildErrors/index.js +2 -1
- package/dist/forms/WatchChildErrors/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js +1 -1
- package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/hooks/useQueue.js +1 -1
- package/dist/hooks/useQueue.js.map +1 -1
- package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
- package/dist/providers/ServerFunctions/index.js +8 -10
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.js +2 -2
- package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
- package/dist/utilities/copyDataFromLocale.js +3 -5
- package/dist/utilities/copyDataFromLocale.js.map +1 -1
- package/dist/utilities/getDisplayedFieldValue.js +3 -3
- package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
- package/dist/utilities/isURLAllowed.js +2 -2
- package/dist/utilities/isURLAllowed.js.map +1 -1
- package/dist/views/Edit/index.js +2 -2
- package/dist/views/Edit/index.js.map +1 -1
- package/package.json +6 -6
- package/dist/exports/client/chunk-USMS5YRL.js +0 -29
- /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":"AAAA;;;AAGA,SAASA,cAAc,QAAQ;AAC/B,SAASC,QAAQ,QAAQ;AACzB,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ;AAIjE,SAASC,WAAW,QAAQ;AAC5B,SAASC,qBAAqB,QAAQ;AACtC,SAASC,QAAQ,QAAQ;AACzB,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,UAAU,QAAQ;AAC3B,SAASC,UAAU,QAAQ;AAC3B,SAASC,gBAAgB,QAAQ;AACjC,OAAO;AACP,SAASC,cAAc,QAAQ;AAE/B,MAAMC,oBAAA,GAAoDC,KAAA;EACxD,MAAM;IACJC,KAAK;IACLA,KAAA,EAAO;MACLC,KAAA,EAAO;QACLC,SAAS;QACTC,WAAW;QACXC,WAAA,EAAaC,oBAAoB;QACjCC,IAAA,GAAO;MAAC,CACT,GAAG,CAAC,CAA6C;MAClDC,OAAA,GAAU,KAAK;MACfC,KAAK;MACLC,SAAS;MACTC,GAAA,GAAMC,QAAQ;MACdC,OAAA,GAAUD,QAAQ;MAClBE,GAAA,GAAM,CAACF,QAAQ;MACfG;IAAQ,CACT;IACDC,QAAA,EAAUC,iBAAiB;IAC3BC,IAAA,EAAMC,aAAa;IACnBC,QAAQ;IACRC;EAAQ,CACT,GAAGrB,KAAA;EAEJ,MAAM;IAAEsB,IAAI;IAAEC;EAAC,CAAE,GAAG9B,cAAA;EAEpB,MAAM+B,gBAAA,GAAmBvC,WAAA,CACvB,CAACwC,KAAA,EAAOC,OAAA;IACN,IAAI,OAAOL,QAAA,KAAa,YAAY;MAClC,OAAOA,QAAA,CAASI,KAAA,EAAO;QAAE,GAAGC,OAAO;QAAEf,GAAA;QAAKG,GAAA;QAAKC;MAAS;IAC1D;EACF,GACA,CAACM,QAAA,EAAUP,GAAA,EAAKH,GAAA,EAAKI,QAAA,CAAS;EAGhC,MAAM;IACJY,gBAAA,EAAkB;MAAEC,UAAU;MAAEC,WAAW;MAAEC,WAAW;MAAEC,KAAK;MAAEC;IAAK,CAAE,GAAG,CAAC,CAAC;IAC7EC,QAAQ;IACRf,IAAI;IACJgB,QAAQ;IACRC,SAAS;IACTV,KAAK,EAALA;EAAK,CACN,GAAGlC,QAAA,CAA4B;IAC9B6C,oBAAA,EAAsBjB,aAAA;IACtBE,QAAA,EAAUG;EACZ;EAEA,MAAMa,YAAA,GAAepD,WAAA,CAClBqD,CAAA;IACC,MAAMC,GAAA,GAAMC,UAAA,CAAWF,CAAA,CAAEG,MAAM,CAAChB,KAAK;IACrC,IAAIiB,MAAA,GAASH,GAAA;IAEb,IAAII,MAAA,CAAOC,KAAK,CAACL,GAAA,GAAM;MACrBG,MAAA,GAAS;IACX;IAEA,IAAI,OAAOzB,iBAAA,KAAsB,YAAY;MAC3CA,iBAAA,CAAkByB,MAAA;IACpB;IAEAR,QAAA,CAASQ,MAAA;EACX,GACA,CAACzB,iBAAA,EAAmBiB,QAAA,CAAS;EAG/B,MAAM,CAACW,aAAA,EAAeC,gBAAA,CAAiB,GAAG1D,QAAA,CAExC,EAAE,EAAE;AAAA;EAEN,MAAM2D,mBAAA,GAAsB9D,WAAA,CACzB+D,cAAA;IACC,IAAI,EAAE5B,QAAA,IAAYa,QAAO,GAAI;MAC3B,IAAIgB,QAAA;MACJ,IAAI,CAACD,cAAA,EAAgB;QACnBC,QAAA,GAAW,EAAE;MACf,OAAO,IAAIC,KAAA,CAAMC,OAAO,CAACH,cAAA,GAAiB;QACxCC,QAAA,GAAWD,cAAA,CAAeI,GAAG,CAAEC,MAAA,IAAWV,MAAA,CAAOU,MAAA,CAAO5B,KAAK,EAAEA,KAAA,IAAS4B,MAAA,CAAO5B,KAAK;MACtF,OAAO;QACLwB,QAAA,GAAW,CAACN,MAAA,CAAOK,cAAA,CAAevB,KAAK,EAAEA,KAAA,IAASuB,cAAA,CAAevB,KAAK,EAAE;MAC1E;MAEAS,QAAA,CAASe,QAAA;IACX;EACF,GACA,CAAC7B,QAAA,EAAUa,QAAA,EAAUC,QAAA,CAAS;EAGhC;EACAhD,SAAA,CAAU;IACR,IAAIsB,OAAA,IAAW0C,KAAA,CAAMC,OAAO,CAAC1B,OAAA,GAAQ;MACnCqB,gBAAA,CACErB,OAAA,CAAM2B,GAAG,CAAC,CAACb,KAAA,EAAKe,KAAA;QACd,OAAO;UACLC,EAAA,EAAI,GAAGhB,KAAA,GAAMe,KAAA,EAAO;UACpB7C,KAAA,EAAO,GAAG8B,KAAA,EAAK;UACfd,KAAA,EAAO;YACL+B,QAAA,EAAUA,CAAA,KAAM,GAAGjB,KAAA,GAAMe,KAAA,EAAO;YAChC7B,KAAA,EAAOc,KAAC,EAA2Cd,KAAA,IAASc;UAC9D;QACF;MACF;IAEJ;EACF,GAAG,CAACd,OAAA,EAAOjB,OAAA,CAAQ;EAEnB,MAAMiD,MAAA,GAAStE,OAAA,CAAQ,MAAMU,gBAAA,CAAiBI,KAAA,GAAQ,CAACA,KAAA,CAAM;EAE7D,MAAMI,WAAA,GAAcvB,cAAA,CAAewB,oBAAA,EAAsBgB,IAAA;EAEzD,oBACEoC,KAAA,CAAC;IACCvD,SAAA,EAAW,CACTL,cAAA,EACA,UACAK,SAAA,EACAgC,SAAA,IAAa,SACZ,CAAAf,QAAA,IAAYa,QAAO,KAAM,aAC1BzB,OAAA,IAAW,WACZ,CACEmD,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;IACRC,KAAA,EAAOL,MAAA;4BAEPM,IAAA,CAACzE,qBAAA;MACC0E,eAAA,EAAiBhC,KAAA;MACjBiC,QAAA,eACEF,IAAA,CAACnE,UAAA;QAAWa,KAAA,EAAOA,KAAA;QAAOC,SAAA,EAAWA,SAAA;QAAWQ,IAAA,EAAMA,IAAA;QAAMH,QAAA,EAAUA;;qBAG1E2C,KAAA,CAAC;MAAIvD,SAAA,EAAW,GAAGL,cAAA,QAAsB;8BACvCiE,IAAA,CAACzE,qBAAA;QACC0E,eAAA,EAAiBjC,KAAA;QACjBkC,QAAA,eAAUF,IAAA,CAACpE,UAAA;UAAWuB,IAAA,EAAMA,IAAA;UAAMiB,SAAA,EAAWA;;UAE9CN,WAAA,EACArB,OAAA,gBACCuD,IAAA,CAAC1E,WAAA;QACCc,SAAA,EAAW,SAASe,IAAA,CAAKgD,OAAO,CAAC,OAAO,OAAO;QAC/CjC,QAAA,EAAUb,QAAA,IAAYa,QAAA;QACtBkC,YAAA,EAAcA,CAACC,CAAA,EAAGC,QAAA;UAChB,MAAMC,aAAA,GAAgBpB,KAAA,CAAMC,OAAO,CAAC1B,OAAA,KAAUA,OAAA,CAAM8C,MAAM,IAAI1D,OAAA;UAC9D,OAAO9B,QAAA,CAASsF,QAAA,KAAa,CAACC,aAAA;QAChC;QACAE,WAAW;QACXC,WAAW;QACXC,OAAO;QACPC,UAAU;QACVC,gBAAA,EAAkBA,CAAA;UAChB,MAAMN,eAAA,GAAgBpB,KAAA,CAAMC,OAAO,CAAC1B,OAAA,KAAUA,OAAA,CAAM8C,MAAM,IAAI1D,OAAA;UAC9D,IAAIyD,eAAA,EAAe;YACjB,OAAO/C,CAAA,CAAE,2BAA2B;cAAEZ,GAAA,EAAKE,OAAA;cAASY,KAAA,EAAOA,OAAA,CAAM8C,MAAM,GAAG;YAAE;UAC9E;UACA,OAAO;QACT;QACA;QACAvD,QAAA,EAAU+B,mBAAA;QACVrB,OAAA,EAAS,EAAE;QACXrB,WAAA,EAAaA,WAAA;QACb8B,SAAA,EAAWA,SAAA;QACXV,KAAA,EAAOoB;wBAGTkB,IAAA,CAAC;kBACC,aAAAA,IAAA,CAAC;UACC9B,QAAA,EAAUb,QAAA,IAAYa,QAAA;UACtBsB,EAAA,EAAI,SAASrC,IAAA,CAAKgD,OAAO,CAAC,OAAO,OAAO;UACxCvD,GAAA,EAAKA,GAAA;UACLG,GAAA,EAAKA,GAAA;UACL+D,IAAA,EAAM3D,IAAA;UACNF,QAAA,EAAUqB,YAAA;UACVyC,OAAA,EAAUxC,GAAA;YACR;YACAA,GAAA,CAAEG,MAAM,CAACsC,IAAI;UACf;UACA1E,WAAA,EAAaA,WAAA;UACbE,IAAA,EAAMA,IAAA;UACNyE,IAAA,EAAK;UACLvD,KAAA,EAAO,OAAOA,OAAA,KAAU,WAAWA,OAAA,GAAQ;;UAIhDG,UAAA,E,aACDmC,IAAA,CAACzE,qBAAA;QACC0E,eAAA,EAAiBlC,WAAA;QACjBmC,QAAA,eAAUF,IAAA,CAACrE,gBAAA;UAAiBU,WAAA,EAAaA,WAAA;UAAac,IAAA,EAAMA;;;;;AAKtE;AAEA,OAAO,MAAM+D,WAAA,GAAczF,aAAA,CAAcO,oBAAA","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(
|
|
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
|
|
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
|
|
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] =
|
|
172
|
-
$[18] =
|
|
171
|
+
$[17] = tabStates.length;
|
|
172
|
+
$[18] = tabsPrefKey;
|
|
173
|
+
$[19] = t14;
|
|
173
174
|
} else {
|
|
174
|
-
t14 = $[
|
|
175
|
+
t14 = $[19];
|
|
175
176
|
}
|
|
176
177
|
let t15;
|
|
177
|
-
if ($[
|
|
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
|
-
$[
|
|
180
|
-
$[
|
|
181
|
-
$[
|
|
182
|
-
$[
|
|
183
|
-
$[
|
|
184
|
-
$[
|
|
185
|
-
$[
|
|
186
|
-
$[
|
|
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 = $[
|
|
189
|
+
t15 = $[27];
|
|
189
190
|
}
|
|
190
191
|
useEffect(t14, t15);
|
|
191
192
|
let t16;
|
|
192
|
-
if ($[
|
|
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
|
-
$[
|
|
202
|
-
$[
|
|
203
|
-
$[
|
|
204
|
-
$[
|
|
202
|
+
$[28] = activeTabInfo?.passesCondition;
|
|
203
|
+
$[29] = handleTabChange;
|
|
204
|
+
$[30] = tabStates;
|
|
205
|
+
$[31] = t16;
|
|
205
206
|
} else {
|
|
206
|
-
t16 = $[
|
|
207
|
+
t16 = $[31];
|
|
207
208
|
}
|
|
208
209
|
let t17;
|
|
209
|
-
if ($[
|
|
210
|
+
if ($[32] !== activeTabInfo || $[33] !== handleTabChange || $[34] !== tabStates) {
|
|
210
211
|
t17 = [activeTabInfo, tabStates, handleTabChange];
|
|
211
|
-
$[
|
|
212
|
-
$[
|
|
213
|
-
$[
|
|
214
|
-
$[
|
|
212
|
+
$[32] = activeTabInfo;
|
|
213
|
+
$[33] = handleTabChange;
|
|
214
|
+
$[34] = tabStates;
|
|
215
|
+
$[35] = t17;
|
|
215
216
|
} else {
|
|
216
|
-
t17 = $[
|
|
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 ($[
|
|
223
|
+
if ($[36] !== className || $[37] !== t18 || $[38] !== t19) {
|
|
223
224
|
t20 = [fieldBaseClass, className, baseClass, t18, t19].filter(Boolean);
|
|
224
|
-
$[
|
|
225
|
-
$[
|
|
226
|
-
$[
|
|
227
|
-
$[
|
|
225
|
+
$[36] = className;
|
|
226
|
+
$[37] = t18;
|
|
227
|
+
$[38] = t19;
|
|
228
|
+
$[39] = t20;
|
|
228
229
|
} else {
|
|
229
|
-
t20 = $[
|
|
230
|
+
t20 = $[39];
|
|
230
231
|
}
|
|
231
232
|
let t21;
|
|
232
|
-
if ($[
|
|
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
|
-
$[
|
|
250
|
-
$[
|
|
251
|
-
$[
|
|
252
|
-
$[
|
|
250
|
+
$[40] = activeTabIndex;
|
|
251
|
+
$[41] = handleTabChange;
|
|
252
|
+
$[42] = path;
|
|
253
|
+
$[43] = t21;
|
|
253
254
|
} else {
|
|
254
|
-
t21 = $[
|
|
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":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAUA,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,EAAEC,WAAW,QAAQ;AAC3C,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAExD,SAASC,cAAc,QAAQ;AAC/B,SAASC,qBAAqB,QAAQ;AACtC,SAASC,aAAa,QAAQ;AAC9B,SAASC,YAAY,QAAQ;AAC7B,SAASC,QAAQ,QAAQ;AACzB,SAASC,aAAa,QAAQ;AAC9B,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAC/B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,SAASC,YAAY,QAAQ;AAC7B,SAASC,YAAY,QAAQ;AAC7B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,SAASF,YAAY;AAErB,MAAMG,kBAAA,GAA+CC,KAAA;EAAA,MAAAC,CAAA,GAAAxB,EAAA;EACnD;IAAAyB,KAAA,EAAAC,EAAA;IAAAC,WAAA,EAAAC,EAAA;IAAAC,SAAA,EAAAC,EAAA;IAAAC,UAAA,EAAAC,EAAA;IAAAC,gBAAA,EAAAC,EAAA;IAAAC,IAAA,EAAAC,EAAA;IAAAC,WAAA;IAAAC,QAAA;IAAAC,UAAA,EAAAC;EAAA,IAUIjB,KAAA;EATK;IAAAkB,KAAA,EAAAC,EAAA;IAAAC,IAAA,EAAAC;EAAA,IAAAlB,EAAwC;EAAA,IAAAmB,EAAA;EAAA,IAAArB,CAAA,QAAAkB,EAAA;IAA/BG,EAAA,GAAAH,EAAkB,KAAAI,SAAA,QAAlBJ,EAAkB;IAAAlB,CAAA,MAAAkB,EAAA;IAAAlB,CAAA,MAAAqB,EAAA;EAAA;IAAAA,EAAA,GAAArB,CAAA;EAAA;EAAlB;IAAAuB;EAAA,IAAAF,EAAkB;EAAA,IAAAG,GAAA;EAAA,IAAAxB,CAAA,QAAAoB,EAAA;IAAEI,GAAA,GAAAJ,EAAS,KAAAE,SAAA,QAATF,EAAS;IAAApB,CAAA,MAAAoB,EAAA;IAAApB,CAAA,MAAAwB,GAAA;EAAA;IAAAA,GAAA,GAAAxB,CAAA;EAAA;EAAT,MAAAmB,IAAA,GAAAK,GAAS;EAC7C,MAAArB,WAAA,GAAAC,EAAmB,KAAAkB,SAAA,WAAnBlB,EAAmB;EACnB,MAAAC,SAAA,GAAAC,EAAc,KAAAgB,SAAA,GAAF,EAAE,GAAdhB,EAAc;EACd,MAAAC,UAAA,GAAAC,EAAe,KAAAc,SAAA,GAAF,EAAE,GAAfd,EAAe;EACf,MAAAC,gBAAA,GAAAC,EAAqB,KAAAY,SAAA,GAAF,EAAE,GAArBZ,EAAqB;EACrB,MAAAC,IAAA,GAAAC,EAAS,KAAAU,SAAA,GAAF,EAAE,GAATV,EAAS;EAGT,MAAAG,UAAA,GAAAC,EAAe,KAAAM,SAAA,GAAF,EAAE,GAAfN,EAAe;EAGjB;IAAAS,aAAA;IAAAC;EAAA,IAAyCnC,cAAA;EACzC;IAAAoC;EAAA,IAA2BrC,eAAA;EAC3B;IAAAsC;EAAA,IAAiBpC,cAAA;EACjB;IAAAqC;EAAA,IAAgC7C,cAAA;EAAA,IAAA8C,GAAA;EAAA,IAAA9B,CAAA,QAAAmB,IAAA;IAEAW,GAAA,GAAAC,GAAA;MAAC,OAAAC,MAAA,IAAAD,GAAQ;MAAA,OAChCZ,IAAA,CAAAc,GAAA,EAAAC,GAAA,EAAAC,KAAA;QACL,MAAAC,EAAA,GAAWF,GAAA,EAAAE,EAAA;QAAK;UAAAD,KAAA;UAAAE,eAAA,EAIGL,MAAA,GAASI,EAAA,GAAAC,eAAA,QAAwB;UAAAH;QAAA;MAAA,CAGtD;IAAA;IACFlC,CAAA,MAAAmB,IAAA;IAAAnB,CAAA,MAAA8B,GAAA;EAAA;IAAAA,GAAA,GAAA9B,CAAA;EAAA;EAVA,MAAAsC,SAAA,GAAkBpD,aAAA,CAAc4C,GAUhC;EAAA,IAAAC,GAAA;EAAA,IAAA/B,CAAA,QAAAsC,SAAA;IAGEP,GAAA,GAAAA,CAAA,KAAMO,SAAA,CAAAC,MAAA,CAAAC,KAA0C,QAAAL,KAAA,KAAgC;IAAAnC,CAAA,MAAAsC,SAAA;IAAAtC,CAAA,MAAA+B,GAAA;EAAA;IAAAA,GAAA,GAAA/B,CAAA;EAAA;EADlF,OAAAyC,cAAA,EAAAC,iBAAA,IAA4C3D,QAAA,CAC1CgD,GAAgF;EAGlF,MAAAY,WAAA,GAAoB,QAAQtC,SAAA,EAAW;EAEvC,MAAAuC,aAAA,GAAsBN,SAAS,CAACG,cAAA;EAChC,MAAAI,eAAA,GAAwBD,aAAA,EAAAV,GAAA;EACxB,MAAAY,oBAAA,GAA6BD,eAAA,CAAA5B,KAAA,EAAA8B,WAAA,IAAsCF,eAAA,CAAAE,WAA2B;EAE9F,MAAAC,0BAAA,GACE,OAAOF,oBAAA,KAAyB,aAC5BA,oBAAA;IAAAlB,IAAA;IAAAqB,CAAA,EAAgCrB,IAAA,CAAAqB;EAAA,CAAO,IACvCH,oBAAA;EAEN,MAAAI,cAAA,GAAuBZ,SAAA,CAAAa,IAAA,CAAAC,MAAwC;EAAA,IAAAC,GAAA;EAAA,IAAArD,CAAA,QAAAyB,aAAA,IAAAzB,CAAA,QAAAW,IAAA,IAAAX,CAAA,SAAA2B,cAAA,IAAA3B,CAAA,SAAA0B,aAAA,IAAA1B,CAAA,SAAA2C,WAAA;IAG7DU,GAAA,SAAAC,gBAAA;MACEZ,iBAAA,CAAkBY,gBAAA;MAElB,MAAAC,mBAAA,SAAuD9B,aAAA,CAAcE,cAAA;MAAA,IAEjEA,cAAA;QACGD,aAAA,CAAcC,cAAA;UAAA,GACd4B,mBAAmB;UAAA,IAClB5C,IAAA;YAAAqB,MAAA;cAAA,IAGQuB,mBAAA,EAAAvB,MAAA,MAAiC;cAAA,CACpCrB,IAAA;gBAAA,GACI4C,mBAAA,EAAAvB,MAAA,GAA8BrB,IAAA;gBAAA6C,QAAA,EACvBF;cAAA;YAAA;UAAA;YAAAtB,MAAA;cAAA,GAMTuB,mBAAA,EAAAvB,MAAA;cAAA,CACFW,WAAA;gBAAA,GACIY,mBAAA,EAAAvB,MAAA,GAA8BW,WAAA;gBAAAa,QAAA,EACvBF;cAAA;YAAA;UAAA,CAGf;QAAA,CACP;MAAA;IAAA;IAEJtD,CAAA,MAAAyB,aAAA;IAAAzB,CAAA,MAAAW,IAAA;IAAAX,CAAA,OAAA2B,cAAA;IAAA3B,CAAA,OAAA0B,aAAA;IAAA1B,CAAA,OAAA2C,WAAA;IAAA3C,CAAA,OAAAqD,GAAA;EAAA;IAAAA,GAAA,GAAArD,CAAA;EAAA;EA9BF,MAAAyD,eAAA,GAAwBJ,GA+B2C;EAAA,IAAAK,GAAA;EAAA,IAAA1D,CAAA,SAAAyB,aAAA,IAAAzB,CAAA,SAAAW,IAAA,IAAAX,CAAA,SAAA2B,cAAA,IAAA3B,CAAA,SAAA2C,WAAA;IAGzDe,GAAA,GAAAA,CAAA;MAAA,IACJ/B,cAAA;QACF,MAAAgC,cAAA,SAAAA,CAAA;UACE,MAAAC,qBAAA,SAAuDnC,aAAA,CAAcE,cAAA;UACrE,MAAAkC,YAAA,GAAqBlD,IAAA,GACjB4C,qBAAA,EAAAvB,MAAA,GAA8BrB,IAAA,GAAA6C,QAAA,GAC9BD,qBAAA,EAAAvB,MAAA,GAA8BW,WAAA,GAAAa,QAAc;UAEhD,MAAAM,QAAA,GAAiBD,YAAA,KAAgB;UACjCnB,iBAAA,CAAkBoB,QAAA;QAAA;QAEfH,cAAA;MAAA;IAAA;IAET3D,CAAA,OAAAyB,aAAA;IAAAzB,CAAA,OAAAW,IAAA;IAAAX,CAAA,OAAA2B,cAAA;IAAA3B,CAAA,OAAA2C,WAAA;IAAA3C,CAAA,OAAA0D,GAAA;EAAA;IAAAA,GAAA,GAAA1D,CAAA;EAAA;EAAA,IAAA+D,GAAA;EAAA,IAAA/D,CAAA,SAAAyB,aAAA,IAAAzB,CAAA,SAAAO,UAAA,IAAAP,CAAA,SAAAS,gBAAA,IAAAT,CAAA,SAAAW,IAAA,IAAAX,CAAA,SAAA2B,cAAA,IAAA3B,CAAA,SAAAmB,IAAA,IAAAnB,CAAA,SAAA2C,WAAA;IAAGoB,GAAA,IAACpD,IAAA,EAAMc,aAAA,EAAeE,cAAA,EAAgBgB,WAAA,EAAaxB,IAAA,EAAMZ,UAAA,EAAYE,gBAAA;IAAiBT,CAAA,OAAAyB,aAAA;IAAAzB,CAAA,OAAAO,UAAA;IAAAP,CAAA,OAAAS,gBAAA;IAAAT,CAAA,OAAAW,IAAA;IAAAX,CAAA,OAAA2B,cAAA;IAAA3B,CAAA,OAAAmB,IAAA;IAAAnB,CAAA,OAAA2C,WAAA;IAAA3C,CAAA,OAAA+D,GAAA;EAAA;IAAAA,GAAA,GAAA/D,CAAA;EAAA;EAbzFlB,SAAA,CAAU4E,GAaV,EAAGK,GAAsF;EAAA,IAAAC,GAAA;EAAA,IAAAhE,CAAA,SAAA4C,aAAA,EAAAP,eAAA,IAAArC,CAAA,SAAAyD,eAAA,IAAAzD,CAAA,SAAAsC,SAAA;IAE/E0B,GAAA,GAAAA,CAAA;MAAA,IACJpB,aAAA,EAAAP,eAAA,UAAmC;QACrC,MAAA4B,OAAA,GAAgB3B,SAAA,CAAA4B,IAAA,CAAAC,MAAwC;QAAA,IACpDF,OAAA;UACGR,eAAA,CAAgBQ,OAAA,CAAA9B,KAAa;QAAA;MAAA;IAAA;IAGxCnC,CAAA,OAAA4C,aAAA,EAAAP,eAAA;IAAArC,CAAA,OAAAyD,eAAA;IAAAzD,CAAA,OAAAsC,SAAA;IAAAtC,CAAA,OAAAgE,GAAA;EAAA;IAAAA,GAAA,GAAAhE,CAAA;EAAA;EAAA,IAAAoE,GAAA;EAAA,IAAApE,CAAA,SAAA4C,aAAA,IAAA5C,CAAA,SAAAyD,eAAA,IAAAzD,CAAA,SAAAsC,SAAA;IAAG8B,GAAA,IAACxB,aAAA,EAAeN,SAAA,EAAWmB,eAAA;IAAgBzD,CAAA,OAAA4C,aAAA;IAAA5C,CAAA,OAAAyD,eAAA;IAAAzD,CAAA,OAAAsC,SAAA;IAAAtC,CAAA,OAAAoE,GAAA;EAAA;IAAAA,GAAA,GAAApE,CAAA;EAAA;EAP9ClB,SAAA,CAAUkF,GAOV,EAAGI,GAA2C;EAQxC,MAAAC,GAAA,GAAAxC,mBAAA,IAAuB,GAAAhC,SAAA,sBAAkC;EACzD,MAAAyE,GAAA,IAACpB,cAAA,IAAkB,GAAArD,SAAA,UAAsB;EAAA,IAAA0E,GAAA;EAAA,IAAAvE,CAAA,SAAAuB,SAAA,IAAAvB,CAAA,SAAAqE,GAAA,IAAArE,CAAA,SAAAsE,GAAA;IALhCC,GAAA,IAAA7E,cAAA,EAET6B,SAAA,EAAA1B,SAAA,EAEAwE,GAAyD,EACzDC,GAAyC,EAAA/B,MAAA,CAAAiC,OAEjC;IAAAxE,CAAA,OAAAuB,SAAA;IAAAvB,CAAA,OAAAqE,GAAA;IAAArE,CAAA,OAAAsE,GAAA;IAAAtE,CAAA,OAAAuE,GAAA;EAAA;IAAAA,GAAA,GAAAvE,CAAA;EAAA;EAAA,IAAAyE,GAAA;EAAA,IAAAzE,CAAA,SAAAyC,cAAA,IAAAzC,CAAA,SAAAyD,eAAA,IAAAzD,CAAA,SAAAW,IAAA;IAMW8D,GAAA,GAAAC,GAAA;MAAC;QAAAvC,KAAA,EAAAwC,OAAA;QAAAtC,eAAA,EAAAuC,iBAAA;QAAA1C,GAAA,EAAA2C;MAAA,IAAAH,GAA+B;MAAA,OAC7CI,IAAA,CAAAlF,YAAA;QAAAmF,MAAA,GACW1C,iBAAA;QAAA2C,QAAA,EACCvC,cAAA,KAAmBN,OAAA;QAAA5B,UAAA,EAEjBI,IAAA;QAAAsE,WAAA,EAAAA,CAAA;UAELxB,eAAA,CAAgBtB,OAAA;QAAA;QAAAD,GAAA,EAElBA;MAAA,GALAC,OAAA;IAAA;IAAAnC,CAAA,OAAAyC,cAAA;IAAAzC,CAAA,OAAAyD,eAAA;IAAAzD,CAAA,OAAAW,IAAA;IAAAX,CAAA,OAAAyE,GAAA;EAAA;IAAAA,GAAA,GAAAzE,CAAA;EAAA;EAAA,OAlBjB8E,IAAA,CAAC;IAAAvD,SAAA,EACYgD,GAOD,CAAAW,IAAA,CACF;IAAAC,QAAA,EAERC,KAAA,CAAAzF,YAAA;MAAAwF,QAAA,GACEL,IAAA,CAAC;QAAAvD,SAAA,EAAe,GAAA1B,SAAA,aAAyB;QAAAsF,QAAA,EACvCL,IAAA,CAAC;UAAAvD,SAAA,EAAe,GAAA1B,SAAA,QAAoB;UAAAsF,QAAA,EACjC7C,SAAA,CAAAL,GAAA,CAAcwC,GAIN;QAAA,C;UAUbK,IAAA,CAAC;QAAAvD,SAAA,EAAe,GAAA1B,SAAA,gBAA4B;QAAAsF,QAAA,EACzCtC,eAAA,IACCiC,IAAA,CAAAO,UAAA;UAAAtC,WAAA,EACeC,0BAAA;UAAA/C,KAAA,EACN4C,eAAA;UAAA1C,WAAA;UAAA4E,MAAA;UAAAO,eAAA,EAGUjF,SAAA;UAAAE,UAAA,EACLI,IAAA;UAAAF,gBAAA,EACMM,UAAA;UAAAJ,IAAA;UAAAE,WAAA,EAGhBA,WAAA,IAAe,OAAOA,WAAA,KAAgB,YAAY,UAAUgC,eAAA,GACxDhC,WAAW,CAACgC,eAAA,CAAA0C,IAAA,KACZ,OAAO1E,WAAW,CAACgC,eAAA,CAAA0C,IAAA,MAA0B,YAC7C,YAAY1E,WAAW,CAACgC,eAAA,CAAA0C,IAAA,CAAqB,GAC3C1E,WAAW,CAACgC,eAAA,CAAA0C,IAAA,EAAAvD,MAAA,GACZnB,WAAW,CAACgC,eAAA,CAAA0C,IAAA,CAAqB,GACnC1E,WAAA;UAAAC,QAAA;UAAA0C,QAAA,EAGIf;QAAA,C;;;;CAOxB;AAEA,OAAO,MAAM+C,SAAA,GAAYnG,aAAA,CAAcS,kBAAA;AAgBvC,SAAAuF,WAAAnF,EAAA;EAAA,MAAAF,CAAA,GAAAxB,EAAA;EAAoB;IAAAuE,WAAA;IAAA9C,KAAA;IAAAE,WAAA;IAAA4E,MAAA;IAAAU,KAAA;IAAAH,eAAA;IAAA/E,UAAA;IAAAE,gBAAA;IAAAI,WAAA;IAAAC,QAAA;IAAA0C;EAAA,IAAAtD,EAYH;EACf;IAAA0B;EAAA,IAAiBpC,cAAA;EAEjB;IAAAkG,gBAAA,EAAAtF;EAAA,IAAmFhB,QAAA;EAAA,IAAAkB,EAAA;EAAA,IAAAE,EAAA;EAAA,IAAAR,CAAA,QAAA+C,WAAA,IAAA/C,CAAA,QAAAC,KAAA,IAAAD,CAAA,QAAAG,WAAA,IAAAH,CAAA,QAAA+E,MAAA,IAAA/E,CAAA,QAAA4B,IAAA,IAAA5B,CAAA,QAAAyF,KAAA,IAAAzF,CAAA,QAAAsF,eAAA,IAAAtF,CAAA,QAAAO,UAAA,IAAAP,CAAA,QAAAS,gBAAA,IAAAT,CAAA,QAAAa,WAAA,IAAAb,CAAA,SAAAc,QAAA,IAAAd,CAAA,SAAAI,EAAA,IAAAJ,CAAA,SAAAwD,QAAA;IAG1EmC,EAAA,CAAAA,CAAA,CAAAA,wCAAA;IAAAC,GAAA;MAHiB;QAAAC,UAAA;QAAAC,WAAA;QAAAC,WAAA;QAAAJ;MAAA,IAAAvF,EAAoD,KAAAkB,SAAA,QAApDlB,EAAoD;MAAA,IAE1EuF,KAAA;QACKA,EAAA,CAAAA,CAAA,CAAAA,KAAA;QAAA,MAAAC,GAAA;MAAA;MAGT;QAAAvF,SAAA;QAAAM,IAAA;QAAAI;MAAA,IAAwCrC,aAAA;QAAAuB,KAAA;QAAAkC,KAAA,EAE/BqB,QAAA;QAAA8B,eAAA;QAAA/E,UAAA;QAAAE;MAAA,CAIT;MAKM,MAAAC,EAAA,GAAAqE,MAAA,IAAU,GAAAlF,SAAA,eAA2B;MAAA,IAAAe,EAAA;MAAA,IAAAZ,CAAA,SAAA4B,IAAA,IAAA5B,CAAA,SAAAyF,KAAA;QAErC7E,EAAA,GAAA6E,KAAA,IAAS,GAAA5F,SAAA,oBAAgClB,WAAA,CAAYF,cAAA,CAAegH,KAAA,EAAO7D,IAAA,IAAQ;QAAA5B,CAAA,OAAA4B,IAAA;QAAA5B,CAAA,OAAAyF,KAAA;QAAAzF,CAAA,OAAAY,EAAA;MAAA;QAAAA,EAAA,GAAAZ,CAAA;MAAA;MAAA,IAAAgB,EAAA;MAAA,IAAAhB,CAAA,SAAAU,EAAA,IAAAV,CAAA,SAAAY,EAAA;QAH1EI,EAAA,IACTN,EAAqC,EACrC,GAAAb,SAAA,OAAmB,EACnBe,EAAmF,EAAA2B,MAAA,CAAAiC,OAE3E;QAAAxE,CAAA,OAAAU,EAAA;QAAAV,CAAA,OAAAY,EAAA;QAAAZ,CAAA,OAAAgB,EAAA;MAAA;QAAAA,EAAA,GAAAhB,CAAA;MAAA;MANZM,EAAA,GAAA8E,KAAA,CAAC;QAAA7D,SAAA,EACYP,EAKD,CAAAkE,IAAA,CACF;QAAAC,QAAA,GAERL,IAAA,CAAA7F,qBAAA;UAAA+G,eAAA,EACmBD,WAAA;UAAAE,QAAA,EAEfnB,IAAA,CAAArF,gBAAA;YAAAsD,WAAA;YAAAmD,eAAA,EAA4D;YAAAvF,IAAA,EAAeJ;UAAA,C;YAG9EuF,WAAA,EACDhB,IAAA,CAAA3F,YAAA;UAAA6C,MAAA,EACU/B,KAAA,CAAA+B,MAAA;UAAA7B,WAAA;UAAAmF,eAAA,EAESjF,SAAA;UAAAE,UAAA,EACLI,IAAA;UAAAF,gBAAA,EACMM,UAAA;UAAAF,WAAA;UAAAC;QAAA,C,GAInB+E,UAAA;MAAA,C;;;;;;;;;;;;;;;;;;;;;;;;SAzBHvF,E;;AAlNiD,SAAAkC,MAAAtC,EAAA;EA+BzB;IAAAmC;EAAA,IAAAnC,EAAmB;EAAA,OAAKmC,eAAA;AAAA;AA/BC,SAAAe,OAAAlD,EAAA;EA6CZ;IAAAmC,eAAA,EAAA8D;EAAA,IAAAjG,EAAmB;EAAA,OAAKmC,iBAAA;AAAA;AA7CZ,SAAA8B,OAAAjE,EAAA;EAkGf;IAAAmC,eAAA,EAAA+D;EAAA,IAAAlG,EAAmB;EAAA,OAAKmC,iBAAA;AAAA","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":"AAAA;;;AAGA,OAAOA,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ;AAKjE,SAASC,QAAQ,QAAQ;AACzB,SAASC,aAAa,QAAQ;AAC9B,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,UAAU,QAAQ;AAC3B,SAASC,SAAS,QAAQ;AAC1B,OAAO;AAEP,SAASA,SAAS;AAElB,MAAMC,kBAAA,GAAgDC,KAAA;EACpD,MAAM;IACJC,KAAK;IACLA,KAAA,EAAO;MACLC,KAAA,EAAO;QAAEC,YAAY;QAAEC,SAAS;QAAEC,WAAW;QAAEC,WAAW;QAAEC;MAAG,CAAE,GAAG,CAAC,CAAC;MACtEC,OAAO;MACPC,KAAK;MACLC,SAAS;MACTC,SAAS;MACTC,OAAO;MACPC,SAAS;MACTC,OAAO;MACPC;IAAQ,CACT;IACDC,QAAQ;IACRC,IAAA,EAAMC,aAAa;IACnBC,QAAQ;IACRC;EAAQ,CACT,GAAGpB,KAAA;EAEJ,MAAMqB,MAAA,GAAS1B,SAAA;EAEf,MAAM;IACJ2B,MAAA,EAAQ;MAAEC,YAAA,EAAcC;IAAkB;EAAE,CAC7C,GAAG9B,SAAA;EAEJ,MAAM+B,gBAAA,GAAmBrC,WAAA,CACvB,CAACsC,KAAA,EAAOC,OAAA;IACN,IAAI,OAAOP,QAAA,KAAa,YAAY;MAClC,OAAOA,QAAA,CAASM,KAAA,EAAO;QAAE,GAAGC,OAAO;QAAEhB,SAAA;QAAWE,SAAA;QAAWE;MAAS;IACtE;EACF,GACA,CAACK,QAAA,EAAUP,SAAA,EAAWF,SAAA,EAAWI,QAAA,CAAS;EAG5C,MAAM;IACJa,gBAAA,EAAkB;MAAEC,UAAU;MAAEC,WAAW;MAAEC,WAAW;MAAEC,KAAK;MAAEC;IAAK,CAAE,GAAG,CAAC,CAAC;IAC7EC,QAAQ;IACRjB,IAAI;IACJkB,QAAQ;IACRC,SAAS;IACTV,KAAK,EAALA;EAAK,CACN,GAAGlC,QAAA,CAAS;IACX6C,oBAAA,EAAsBnB,aAAA;IACtBE,QAAA,EAAUK;EACZ;EAEA,MAAMa,SAAA,GAAYzC,UAAA,CAAW;IAC3B0C,cAAA,EAAgB7B,SAAA;IAChB8B,QAAA,EAAUjC,GAAA;IACVc,MAAA;IACAG,kBAAA,EAAoBA,kBAAA,IAAsBiB;EAC5C;EAEA,MAAM,CAACC,aAAA,EAAeC,gBAAA,CAAiB,GAAGpD,QAAA,CAExC,EAAE,EAAE;
|
|
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;
|
|
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":[]}
|
|
@@ -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;
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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;
|
|
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.');
|