Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
12 KiB
Plaintext
1 line
12 KiB
Plaintext
{"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":[]} |