import * as React from 'react'; import { NumberInput, TextInput, Tooltip } from '../../presentation'; export interface INumberListConstraints { min: number; max: number; } export interface INumberListProps { constraints?: INumberListConstraints; label: string; model: number[] | string; onChange: (model: number[] | string) => void; } interface INumberListToggleProps { isNumber: boolean; toggle: (mode: boolean) => void; } const NumberListToggle = ({ isNumber, toggle }: INumberListToggleProps) => (
); export const NumberList = ({ constraints, label, model, onChange }: INumberListProps) => { const [isNumList, setIsNumList] = React.useState(typeof model !== 'string'); const [numListModel, setNumListModel] = React.useState(isNumList ? (model as number[]) : []); const spelModel = isNumList ? '' : (model as string); const updateModel = (list: number[]) => { setNumListModel(list); const sortedList = list.filter((n) => n !== null).sort((a, b) => a - b); onChange(sortedList); }; const addNumber = () => { const newNumList = [...numListModel, null]; updateModel(newNumList); }; const removeNumber = (index: number) => { const newNumListModel = numListModel.filter((_, i) => i !== index); updateModel(newNumListModel); }; const updateNumber = (num: string, index: number) => { const newNumList = [...numListModel]; newNumList[index] = Number.parseInt(num, 10); updateModel(newNumList); }; const toggleMode = (isNum: boolean) => { const newModel = isNum ? ([] as number[]) : '${}'; setIsNumList(isNum); onChange(newModel); }; return (
{!isNumList && (
onChange(e.target.value)} />
)} {isNumList && (
{(numListModel || []).map((num, i) => (
updateNumber(e.target.value, i)} /> {i === 0 && } {i > 0 && ( )}
))}
)}
); };