49 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-12-11 04:28:29 +04:00
import { PredictResponseType } from '@/shared/types/predict';
import { FormEvent } from 'react';
2024-10-16 10:18:20 +04:00
import classes from './styles.module.scss';
2024-10-30 00:57:52 +04:00
import { Button } from '@/shared/components/button';
import { Selector } from '@/shared/components/selector';
2024-11-06 11:49:14 +04:00
import { Expander } from '@/shared/components/expander';
2024-12-11 04:28:29 +04:00
type FormType<T> = {
selectorsData: T | undefined;
updateField: (field: keyof T, value: string | number) => void;
handleGetPredict: (e: FormEvent) => Promise<void>;
response: PredictResponseType;
};
2024-10-30 00:57:52 +04:00
2024-12-11 04:28:29 +04:00
const Form = <T extends Record<string, string[] | number[]>>({
selectorsData,
updateField,
handleGetPredict,
response,
}: FormType<T>) => {
const fields = selectorsData
? (Object.keys(selectorsData) as Array<keyof T>)
: [];
2024-10-16 10:18:20 +04:00
return (
2024-10-30 00:57:52 +04:00
<form className={classes.form}>
<div className={classes.selectorList}>
{fields.map((field) => (
2024-12-11 04:28:29 +04:00
<Expander key={field as string} title={field as string}>
2024-11-06 11:49:14 +04:00
<Selector
handleSetValue={updateField}
2024-12-11 04:28:29 +04:00
list={selectorsData ? selectorsData[field] : []}
field={field as string}
2024-11-06 11:49:14 +04:00
/>
</Expander>
2024-10-30 00:57:52 +04:00
))}
</div>
2024-11-06 11:49:14 +04:00
<Button onClick={(e: FormEvent) => handleGetPredict(e)}>Submit</Button>
2024-12-11 04:28:29 +04:00
{response.predicted_price !== undefined && (
<span style={{ color: 'white' }}>
Ответ: {response.predicted_price}
</span>
)}
2024-10-16 10:18:20 +04:00
</form>
);
};
export default Form;