update basic number input

This commit is contained in:
Alexander Navarro 2023-10-07 12:02:02 -03:00
parent d9636c4fb7
commit 5b6cf900e0
4 changed files with 39 additions and 15 deletions

View file

@ -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<HTMLInputElement> = ({
target,
}): void => {
const value = parseInt(target.value);
onChange(isNaN(value) ? null : value);
};
return (
<input
name={`number-input-${keyData}`}
id="foo"
type="number"
placeholder="1"
onChange={onSelectChange}
/>
);
}

View file

@ -1,6 +1,5 @@
import React, { useMemo, type ChangeEventHandler } from 'react'; import React, { useMemo, type ChangeEventHandler } from 'react';
import type { DataItem } from '.';
export type DataItem = Record<string, any>;
interface Props { interface Props {
onChange: (value: string | string[] | null) => void; onChange: (value: string | string[] | null) => void;
@ -9,7 +8,7 @@ interface Props {
isMultiple?: boolean; isMultiple?: boolean;
} }
export default function Select({ export default function SelectInput({
data, data,
keyData, keyData,
isMultiple = false, isMultiple = false,

View file

@ -0,0 +1,4 @@
export { default as SelectInput } from './SelectInput.tsx';
export { default as NumberInput } from './NumberInput.tsx';
export type DataItem = Record<string, any>;

View file

@ -1,6 +1,6 @@
import React, { useMemo, useState } from 'react'; import React, { useMemo, useState } from 'react';
import usePagination, { Offset } from 'src/hooks/usePagination'; import usePagination, { Offset } from 'src/hooks/usePagination';
import Select from './Inputs/Select'; import { SelectInput, NumberInput } from './Inputs';
export type DataItem = Record<string, any>; export type DataItem = Record<string, any>;
@ -26,7 +26,7 @@ interface Props {
interface Filter { interface Filter {
type: HeaderType; type: HeaderType;
value: string | string[]; value: string | string[] | number | number[];
} }
export default function Table({ data, headers }: Props): JSX.Element { 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: case HeaderType.Number:
return ( return (
<input <NumberInput
type="number" keyData={header.key}
onChange={(e) => { onChange={(value) => {
handleUpdateFilters( handleUpdateFilters(header.key, header.type, value);
header.key,
header.type,
e.target.value !== '' ? parseInt(e.target.value) : null,
);
}} }}
/> />
); );
case HeaderType.Select: case HeaderType.Select:
return ( return (
<Select <SelectInput
data={data} data={data}
keyData={header.key} keyData={header.key}
onChange={(value) => { onChange={(value) => {
@ -142,7 +138,7 @@ export default function Table({ data, headers }: Props): JSX.Element {
); );
case HeaderType.Multiple: case HeaderType.Multiple:
return ( return (
<Select <SelectInput
isMultiple isMultiple
data={data} data={data}
keyData={header.key} keyData={header.key}