diff --git a/src/components/Table/Inputs/NumberInput.tsx b/src/components/Table/Inputs/NumberInput.tsx new file mode 100644 index 0000000..20e461a --- /dev/null +++ b/src/components/Table/Inputs/NumberInput.tsx @@ -0,0 +1,25 @@ +import React, { type ChangeEventHandler } from 'react'; + +interface Props { + onChange: (value: string | string[] | number | number[] | null) => void; + keyData: string; +} + +export default function NumberInput({ keyData, onChange }: Props): JSX.Element { + const onSelectChange: ChangeEventHandler = ({ + target, + }): void => { + const value = parseInt(target.value); + onChange(isNaN(value) ? null : value); + }; + + return ( + + ); +} diff --git a/src/components/Table/Inputs/Select.tsx b/src/components/Table/Inputs/SelectInput.tsx similarity index 95% rename from src/components/Table/Inputs/Select.tsx rename to src/components/Table/Inputs/SelectInput.tsx index 0a50312..dae3c59 100644 --- a/src/components/Table/Inputs/Select.tsx +++ b/src/components/Table/Inputs/SelectInput.tsx @@ -1,6 +1,5 @@ import React, { useMemo, type ChangeEventHandler } from 'react'; - -export type DataItem = Record; +import type { DataItem } from '.'; interface Props { onChange: (value: string | string[] | null) => void; @@ -9,7 +8,7 @@ interface Props { isMultiple?: boolean; } -export default function Select({ +export default function SelectInput({ data, keyData, isMultiple = false, diff --git a/src/components/Table/Inputs/index.tsx b/src/components/Table/Inputs/index.tsx new file mode 100644 index 0000000..bb9a46a --- /dev/null +++ b/src/components/Table/Inputs/index.tsx @@ -0,0 +1,4 @@ +export { default as SelectInput } from './SelectInput.tsx'; +export { default as NumberInput } from './NumberInput.tsx'; + +export type DataItem = Record; diff --git a/src/components/Table/Table.tsx b/src/components/Table/Table.tsx index 61e8a4c..c5c8842 100644 --- a/src/components/Table/Table.tsx +++ b/src/components/Table/Table.tsx @@ -1,6 +1,6 @@ import React, { useMemo, useState } from 'react'; import usePagination, { Offset } from 'src/hooks/usePagination'; -import Select from './Inputs/Select'; +import { SelectInput, NumberInput } from './Inputs'; export type DataItem = Record; @@ -26,7 +26,7 @@ interface Props { interface Filter { type: HeaderType; - value: string | string[]; + value: string | string[] | number | number[]; } export default function Table({ data, headers }: Props): JSX.Element { @@ -119,20 +119,16 @@ export default function Table({ data, headers }: Props): JSX.Element { ); case HeaderType.Number: return ( - { - handleUpdateFilters( - header.key, - header.type, - e.target.value !== '' ? parseInt(e.target.value) : null, - ); + { + handleUpdateFilters(header.key, header.type, value); }} /> ); case HeaderType.Select: return ( -