import React from "react" import { IconButton, SvgIcon, TextField } from "@mui/material" import { DataFilterType, FiltersMessage } from "../types/filter.type" import { FilterInputContainer } from "./style" export interface DataTableFilterNumberProps { style?: React.CSSProperties, between?: boolean, messages: FiltersMessage, range: [DataFilterType, DataFilterType], value: DataFilterType | [DataFilterType, DataFilterType] onChange: (value: string | number | null | (string | number | null)[]) => void, } export const DataTableFilterNumber: React.FC = ({ style, between, range, value, onChange }) => { const toString = (num: number | null) => { const result = num !== 0 && !num ? '' : `${num}` return result; } const validate = (newValue: any, currentValue: any = null) => { const result = typeof newValue === 'string' ? !isNaN(Number(`${newValue}0`)) ? newValue : currentValue : typeof newValue === 'boolean' ? newValue ? 1 : 0 : newValue === 0 || (!!newValue && !isNaN(Number(newValue))) ? Number(newValue) : currentValue return range && range.length > 0 ? range.length > 1 ? Math.max(Number(range[0]), Math.min(result, Number(range[1]))) : Math.max(Number(range[0]), result) : result; } const getValue = () => { const result = between ? Array.isArray(value) ? value.length > 0 ? value.length > 1 ? [validate(value[0]), validate(value[1])] : [validate(value[0]), null] : [null, null] : [validate(value), null] : Array.isArray(value) ? value.length > 0 ? validate(value[0]) : null : validate(value) return result; } const handleChange1 = (event: any) => { const val = validate(event.target.value, getValue()); if (between) { const value = getValue(); if (val && value[1] && Number(`${value[1]}0`) < Number(`${val}0`)) { value[0] = value[1]; value[1] = val; } else value[0] = val; onChange(value); } else { onChange(val) } } const handleChange2 = (event: any) => { const val = validate(event.target.value, getValue()); if (between) { const value = getValue(); if (val && value[0] && Number(`${value[0]}0`) > Number(`${val}0`)) { value[1] = value[0]; value[0] = val; } else value[1] = val; onChange(value); } else { onChange(val) } } const handleClear = () => { if (between) { onChange([null, null]); } else { onChange(null) } } return ( { between && } ) } const CloseIcon = () => ( )