{"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\ntype ConditionField = {\n name: string;\n type: string;\n enum?: 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?: unknown;\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?: unknown;\n autoFocus?: boolean;\n attributeName?: string;\n conditionFields?: ConditionField[];\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?: unknown;\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?: unknown;\n isNullable?: boolean;\n autoFocus?: boolean;\n attributeName?: string;\n conditionFields?: ConditionField[];\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: _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\n ? (customInputs[type] as React.ComponentType | undefined)\n : 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 const stringValue =\n typeof value === 'string' || typeof value === 'number' ? value.toString() : '';\n const numberValue = (() => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value === 'string' && value.trim() !== '') {\n const parsedValue = Number(value);\n\n return Number.isFinite(parsedValue) ? parsedValue : undefined;\n }\n\n return undefined;\n })();\n const selectValue =\n typeof value === 'string' || typeof value === 'number' || value === null ? value : undefined;\n const jsonValue =\n value !== undefined &&\n (typeof value === 'object' || typeof value === 'boolean' || typeof value === 'number')\n ? JSON.stringify(value, null, 2)\n : typeof value === 'string'\n ? value\n : 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 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={numberValue}\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={stringValue}\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={stringValue}\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={stringValue}\n />\n );\n }\n case 'select': {\n return (\n {\n onChange({ target: { name, value, type: 'select' } });\n }}\n placeholder={formattedPlaceholder}\n value={selectValue}\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={stringValue}\n />\n );\n }\n case 'time': {\n const formattedValue = handleTimeChange({ value: stringValue, 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 && !['string', 'uid', 'richtext', 'email', 'password', 'text'].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","_isNullable","autoFocus","attribute","attributeName","conditionFields","rest","formatMessage","useIntl","getFieldHintValue","key","hint","useFieldHint","fieldSchema","minLength","maxLength","max","min","showPassword","setShowPassword","React","useState","CustomInput","undefined","stringValue","toString","numberValue","Number","isFinite","trim","parsedValue","selectValue","jsonValue","JSON","stringify","getErrorMessage","id","defaultMessage","values","errorMessage","_jsx","label","formattedPlaceholder","getComponent","JSONInput","json","length","target","minHeight","maxHeight","Toggle","checked","Boolean","offLabel","onLabel","e","Checkbox","onCheckedChange","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","parsedMinLength","isNaN","parsedMax","parsedMaxLength","MemoizedGenericInput","memo","isEqual"],"mappings":"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"}