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-10-30 02:15:26 +04:00
|
|
|
|
|
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 && (
|
2024-10-30 02:15:26 +04:00
|
|
|
|
<span style={{ color: 'white' }}>
|
|
|
|
|
Ответ: {response.predicted_price}
|
|
|
|
|
</span>
|
|
|
|
|
)}
|
2024-10-16 10:18:20 +04:00
|
|
|
|
</form>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default Form;
|