koval-ui
Version:
React components collection with minimalistic design. Supports theming, layout, and input validation.
1 lines • 3.31 kB
Source Map (JSON)
{"version":3,"file":"NumberRangeField.cjs","sources":["../../../../../src/lib/DataTable/dialogs/NumberRangeField.tsx"],"sourcesContent":["import type {FC, ChangeEvent} from 'react';\nimport {useEffect} from 'react';\nimport {useCallback, useState} from 'react';\n\nimport {FormField, InputNumeric} from '@/lib';\n\nimport classes from './Dialog.module.css';\nimport type {ColumnFormatOptions, FilterValue} from './../types.ts';\n\nexport type Props = {\n value: FilterValue;\n onChange: (value: FilterValue) => void;\n cellProps?: ColumnFormatOptions;\n step?: number;\n};\n\nconst normalizeValue = (value: FilterValue) => {\n if (!Array.isArray(value)) {\n return ['', ''];\n } else {\n return value.map(filter => String(filter));\n }\n};\n\nconst valueToNumber = (value: string[]) => {\n return value.map(filter => Number(filter));\n};\n\nexport const NumberRangeField: FC<Props> = ({value: valueProp, onChange}) => {\n const [value, setValue] = useState(normalizeValue(valueProp));\n\n const [from, to] = value;\n\n const handleMinChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const nextValue = [event.target.value, to];\n setValue(nextValue);\n },\n [to]\n );\n const handleMaxChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const nextValue = [from, event.target.value];\n setValue(nextValue);\n },\n [from]\n );\n\n useEffect(() => {\n onChange(valueToNumber(value));\n }, [onChange, value]);\n return (\n <div className={classes.numberRange}>\n <FormField className={classes.numberField} label=\"From:\">\n <InputNumeric mode=\"floating\" value={from} onChange={handleMinChange} />\n </FormField>\n <FormField className={classes.numberField} label=\"To:\">\n <InputNumeric mode=\"floating\" value={to} onChange={handleMaxChange} />\n </FormField>\n </div>\n );\n};\n"],"names":["normalizeValue","value","filter","valueToNumber","NumberRangeField","valueProp","onChange","setValue","useState","from","to","handleMinChange","useCallback","event","nextValue","handleMaxChange","useEffect","jsxs","classes","jsx","FormField","InputNumeric"],"mappings":"gUAgBMA,EAAkBC,GACf,MAAM,QAAQA,CAAK,EAGbA,EAAM,IAAIC,GAAU,OAAOA,CAAM,CAAC,EAFlC,CAAC,GAAI,EAAE,EAMhBC,EAAiBF,GACZA,EAAM,IAAIC,GAAU,OAAOA,CAAM,CAAC,EAGhCE,EAA8B,CAAC,CAAC,MAAOC,EAAW,SAAAC,KAAc,CACzE,KAAM,CAACL,EAAOM,CAAQ,EAAIC,EAAAA,SAASR,EAAeK,CAAS,CAAC,EAEtD,CAACI,EAAMC,CAAE,EAAIT,EAEbU,EAAkBC,EAAAA,YACnBC,GAAyC,CACtC,MAAMC,EAAY,CAACD,EAAM,OAAO,MAAOH,CAAE,EACzCH,EAASO,CAAS,CACtB,EACA,CAACJ,CAAE,CAAA,EAEDK,EAAkBH,EAAAA,YACnBC,GAAyC,CACtC,MAAMC,EAAY,CAACL,EAAMI,EAAM,OAAO,KAAK,EAC3CN,EAASO,CAAS,CACtB,EACA,CAACL,CAAI,CAAA,EAGTO,OAAAA,EAAAA,UAAU,IAAM,CACZV,EAASH,EAAcF,CAAK,CAAC,CACjC,EAAG,CAACK,EAAUL,CAAK,CAAC,EAEhBgB,EAAAA,KAAC,MAAA,CAAI,UAAWC,EAAAA,QAAQ,YACpB,SAAA,CAAAC,MAACC,EAAAA,UAAA,CAAU,UAAWF,EAAAA,QAAQ,YAAa,MAAM,QAC7C,SAAAC,EAAAA,IAACE,EAAAA,aAAA,CAAa,KAAK,WAAW,MAAOZ,EAAM,SAAUE,EAAiB,EAC1E,EACAQ,EAAAA,IAACC,EAAAA,UAAA,CAAU,UAAWF,EAAAA,QAAQ,YAAa,MAAM,MAC7C,SAAAC,EAAAA,IAACE,eAAA,CAAa,KAAK,WAAW,MAAOX,EAAI,SAAUK,EAAiB,CAAA,CACxE,CAAA,EACJ,CAER"}