{"version":3,"file":"GenericInputs.mjs","sources":["../../../admin/src/components/GenericInputs.tsx"],"sourcesContent":["/**\n * TODO: we should be using the FormRenderer from the admin to do this,\n * but the CTB has no tests or types, so we can't refactor it safely.\n * So we're just adding this to the tech debt.\n */\n\nimport * as React from 'react';\n\nimport {\n Checkbox,\n DatePicker,\n DateTimePicker,\n Field,\n JSONInput,\n NumberInput,\n SingleSelect,\n SingleSelectOption,\n Textarea,\n TextInput,\n TimePicker,\n Toggle,\n} from '@strapi/design-system';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport formatISO from 'date-fns/formatISO';\nimport isEqual from 'lodash/isEqual';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\n\nimport { parseDateValue } from '../utils/parseDateValue';\nimport { handleTimeChange, handleTimeChangeEvent } from '../utils/timeFormat';\n\nimport type { Schema } from '@strapi/types';\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record;\n}\n\ninterface InputOption {\n metadatas: {\n intlLabel: TranslationMessage;\n disabled: boolean;\n hidden: boolean;\n };\n key: string;\n value: string;\n}\n\ninterface CustomInputProps<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n> {\n attribute?: TAttribute;\n autoComplete?: string;\n description?: TranslationMessage;\n disabled?: boolean;\n error?: string;\n hint?: string | React.JSX.Element | (string | React.JSX.Element)[];\n intlLabel: TranslationMessage;\n labelAction?: React.ReactNode;\n name: string;\n onChange: (\n payload: {\n target: {\n name: string;\n value: Schema.Attribute.Value;\n type?: string;\n };\n },\n shouldSetInitialValue?: boolean\n ) => void;\n onDelete?: () => void;\n options?: InputOption[];\n placeholder?: TranslationMessage;\n required?: boolean;\n step?: number;\n type: string;\n value?: Schema.Attribute.Value;\n autoFocus?: boolean;\n attributeName?: string;\n conditionFields?: Record;\n}\n\ninterface GenericInputProps<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n> {\n attribute?: TAttribute;\n autoComplete?: string;\n customInputs?: Record>>;\n description?: TranslationMessage;\n disabled?: boolean;\n error?: string | TranslationMessage;\n intlLabel: TranslationMessage;\n labelAction?: React.ReactNode;\n name: string;\n onChange: (\n payload: {\n target: {\n name: string;\n value: Schema.Attribute.Value;\n type?: string;\n };\n },\n shouldSetInitialValue?: boolean\n ) => void;\n onDelete?: () => void;\n options?: InputOption[];\n placeholder?: TranslationMessage;\n required?: boolean;\n step?: number;\n type: string;\n // TODO: The value depends on the input type, too complicated to handle all cases here\n value?: Schema.Attribute.Value;\n isNullable?: boolean;\n autoFocus?: boolean;\n attributeName?: string;\n conditionFields?: Record;\n}\n\nconst GenericInput = ({\n autoComplete,\n customInputs,\n description,\n disabled,\n intlLabel,\n labelAction,\n error,\n name,\n onChange,\n onDelete,\n options = [],\n placeholder,\n required,\n step,\n type,\n value: defaultValue,\n isNullable,\n autoFocus,\n attribute,\n attributeName,\n conditionFields,\n ...rest\n}: GenericInputProps) => {\n const { formatMessage } = useIntl();\n\n // TODO: Workaround to get the field hint values if they exist on the type\n const getFieldHintValue = (\n attribute?: Schema.Attribute.AnyAttribute,\n key?: keyof FieldSchema\n ) => {\n if (!attribute) return;\n\n if (key === 'minLength' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'maxLength' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'max' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'min' && key in attribute) {\n return attribute[key];\n }\n };\n\n const { hint } = useFieldHint({\n description,\n fieldSchema: {\n minLength: getFieldHintValue(attribute, 'minLength'),\n maxLength: getFieldHintValue(attribute, 'maxLength'),\n max: getFieldHintValue(attribute, 'max'),\n min: getFieldHintValue(attribute, 'min'),\n },\n type: attribute?.type || type,\n });\n\n const [showPassword, setShowPassword] = React.useState(false);\n\n const CustomInput = customInputs ? customInputs[type] : null;\n\n // the API always returns null, which throws an error in React,\n // therefore we cast this case to undefined\n const value = defaultValue ?? undefined;\n\n /*\n TODO: ideally we should pass in `defaultValue` and `value` for\n inputs, in order to make them controlled components. This variable\n acts as a fallback for now, to prevent React errors in devopment mode\n\n See: https://github.com/strapi/strapi/pull/12861\n */\n const valueWithEmptyStringFallback = value ?? '';\n\n function getErrorMessage(error: string | TranslationMessage | undefined) {\n if (!error) {\n return null;\n }\n\n if (typeof error === 'string') {\n return formatMessage({ id: error, defaultMessage: error });\n }\n\n const values = {\n ...error.values,\n };\n\n return formatMessage(\n {\n id: error.id,\n defaultMessage: error?.defaultMessage ?? error.id,\n },\n values\n );\n }\n\n const errorMessage = getErrorMessage(error) ?? undefined;\n\n if (CustomInput) {\n return (\n \n );\n }\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const getComponent = () => {\n switch (type) {\n case 'json': {\n return (\n {\n // Default to null when the field is not required and there is no input value\n const value =\n attribute && 'required' in attribute && !attribute?.required && !json.length\n ? null\n : json;\n onChange({ target: { name, value } }, false);\n }}\n minHeight=\"25.2rem\"\n maxHeight=\"50.4rem\"\n />\n );\n }\n case 'bool': {\n return (\n {\n onChange({ target: { name, value: e.target.checked } });\n }}\n />\n );\n }\n case 'checkbox': {\n return (\n {\n onChange({ target: { name, value } });\n }}\n checked={Boolean(value)}\n >\n {label}\n \n );\n }\n case 'datetime': {\n const dateValue = parseDateValue(value);\n return (\n {\n // check if date is not null or undefined\n const formattedDate = date ? date.toISOString() : null;\n\n onChange({ target: { name, value: formattedDate, type } });\n }}\n onClear={() => onChange({ target: { name, value: null, type } })}\n placeholder={formattedPlaceholder}\n value={dateValue}\n />\n );\n }\n case 'date': {\n const dateValue = parseDateValue(value);\n return (\n {\n onChange({\n target: {\n name,\n value: date ? formatISO(date, { representation: 'date' }) : null,\n type,\n },\n });\n }}\n onClear={() => onChange({ target: { name, value: null, type } })}\n placeholder={formattedPlaceholder}\n value={dateValue}\n />\n );\n }\n case 'number': {\n return (\n {\n onChange({ target: { name, value, type } });\n }}\n placeholder={formattedPlaceholder}\n step={step}\n value={value}\n autoFocus={autoFocus}\n />\n );\n }\n case 'email': {\n return (\n {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type=\"email\"\n value={valueWithEmptyStringFallback}\n autoFocus={autoFocus}\n />\n );\n }\n case 'timestamp':\n case 'text':\n case 'string': {\n return (\n {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type=\"text\"\n value={valueWithEmptyStringFallback}\n autoFocus={autoFocus}\n />\n );\n }\n case 'password': {\n return (\n {\n setShowPassword((prev) => !prev);\n }}\n style={{\n border: 'none',\n padding: 0,\n background: 'transparent',\n }}\n type=\"button\"\n >\n {showPassword ? : }\n \n }\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type={showPassword ? 'text' : 'password'}\n value={valueWithEmptyStringFallback}\n />\n );\n }\n case 'select': {\n return (\n {\n onChange({ target: { name, value, type: 'select' } });\n }}\n placeholder={formattedPlaceholder}\n value={value}\n >\n {options.map(({ metadatas: { intlLabel, disabled, hidden }, key, value }) => {\n return (\n \n );\n })}\n \n );\n }\n case 'textarea': {\n return (\n onChange({ target: { name, value: event.target.value, type } })}\n placeholder={formattedPlaceholder}\n value={valueWithEmptyStringFallback}\n />\n );\n }\n case 'time': {\n const formattedValue = handleTimeChange({ value, onChange, name, type });\n\n return (\n handleTimeChangeEvent(onChange, name, type, time)}\n onClear={() => handleTimeChangeEvent(onChange, name, type, undefined)}\n value={formattedValue}\n />\n );\n }\n default: {\n /**\n * If there's no component for the given type, we return a disabled text input\n * showing a \"Not supported\" title to illustrate the issue.\n */\n return ;\n }\n }\n };\n\n return (\n \n {type !== 'checkbox' ? {label} : null}\n {getComponent()}\n \n \n \n );\n};\n\ntype FieldSchema = {\n minLength?: number | string;\n maxLength?: number | string;\n max?: number | string;\n min?: number | string;\n};\ninterface UseFieldHintProps {\n description?: MessageDescriptor & { values?: Record };\n fieldSchema?: FieldSchema;\n type?: string;\n}\n\n/**\n * @description\n * A hook for generating the hint for a field\n */\nconst useFieldHint = ({ description, fieldSchema, type }: UseFieldHintProps) => {\n const { formatMessage } = useIntl();\n\n const buildDescription = () =>\n description?.id\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n\n const buildHint = () => {\n const { maximum, minimum } = getMinMax(fieldSchema);\n const units = getFieldUnits({\n type,\n minimum,\n maximum,\n });\n\n const minIsNumber = typeof minimum === 'number';\n const maxIsNumber = typeof maximum === 'number';\n const hasMinAndMax = maxIsNumber && minIsNumber;\n const hasMinOrMax = maxIsNumber || minIsNumber;\n\n if (!description?.id && !hasMinOrMax) {\n return '';\n }\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: buildDescription(),\n unit: units?.message && hasMinOrMax ? formatMessage(units.message, units.values) : null,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: hasMinOrMax ?
: null,\n }\n );\n };\n\n return { hint: buildHint() };\n};\n\nconst getFieldUnits = ({\n type,\n minimum,\n maximum,\n}: {\n type?: string;\n minimum?: number;\n maximum?: number;\n}) => {\n if (type && ['biginteger', 'integer', 'number'].includes(type)) {\n return {};\n }\n const maxValue = Math.max(minimum || 0, maximum || 0);\n\n return {\n message: {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n values: {\n maxValue,\n },\n };\n};\n\nconst getMinMax = (fieldSchema?: FieldSchema) => {\n if (!fieldSchema) {\n return { maximum: undefined, minimum: undefined };\n }\n\n const { minLength, maxLength, max, min } = fieldSchema;\n\n let minimum;\n let maximum;\n\n const parsedMin = Number(min);\n const parsedMinLength = Number(minLength);\n\n if (!Number.isNaN(parsedMin)) {\n minimum = parsedMin;\n } else if (!Number.isNaN(parsedMinLength)) {\n minimum = parsedMinLength;\n }\n\n const parsedMax = Number(max);\n const parsedMaxLength = Number(maxLength);\n\n if (!Number.isNaN(parsedMax)) {\n maximum = parsedMax;\n } else if (!Number.isNaN(parsedMaxLength)) {\n maximum = parsedMaxLength;\n }\n\n return { maximum, minimum };\n};\n\n/**\n * we've memoized this component because we use a context to store all the data in our form in the content-manager.\n * This then causes _every_ component to re-render because there are no selects incurring performance issues\n * in content-types as the content-type gets more complicated.\n */\nconst MemoizedGenericInput = React.memo(GenericInput, isEqual);\n\nexport type { GenericInputProps, CustomInputProps };\nexport { MemoizedGenericInput as GenericInput };\n"],"names":["GenericInput","autoComplete","customInputs","description","disabled","intlLabel","labelAction","error","name","onChange","onDelete","options","placeholder","required","step","type","value","defaultValue","isNullable","autoFocus","attribute","attributeName","conditionFields","rest","formatMessage","useIntl","getFieldHintValue","key","hint","useFieldHint","fieldSchema","minLength","maxLength","max","min","showPassword","setShowPassword","React","useState","CustomInput","undefined","valueWithEmptyStringFallback","getErrorMessage","id","defaultMessage","values","errorMessage","_jsx","label","formattedPlaceholder","getComponent","JSONInput","json","length","target","minHeight","maxHeight","Toggle","checked","offLabel","onLabel","e","Checkbox","onCheckedChange","Boolean","dateValue","parseDateValue","DateTimePicker","clearLabel","date","formattedDate","toISOString","onClear","DatePicker","formatISO","representation","NumberInput","onValueChange","TextInput","endAction","button","aria-label","onClick","prev","style","border","padding","background","Eye","fill","EyeStriked","SingleSelect","map","metadatas","hidden","SingleSelectOption","Textarea","event","formattedValue","handleTimeChange","TimePicker","time","handleTimeChangeEvent","_jsxs","Field","Root","Label","action","Error","Hint","buildDescription","buildHint","maximum","minimum","getMinMax","units","getFieldUnits","minIsNumber","maxIsNumber","hasMinAndMax","hasMinOrMax","unit","message","divider","br","includes","maxValue","Math","parsedMin","Number","parsedMinLength","isNaN","parsedMax","parsedMaxLength","MemoizedGenericInput","memo","isEqual"],"mappings":"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"}