update basic number input
This commit is contained in:
parent
d9636c4fb7
commit
5b6cf900e0
4 changed files with 39 additions and 15 deletions
25
src/components/Table/Inputs/NumberInput.tsx
Normal file
25
src/components/Table/Inputs/NumberInput.tsx
Normal 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}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -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,
|
||||||
4
src/components/Table/Inputs/index.tsx
Normal file
4
src/components/Table/Inputs/index.tsx
Normal 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>;
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue