import React from 'react'; import { observer } from 'mobx-react'; import { FieldState } from 'formstate'; import { StandardTextFieldProps, TextField, SelectProps, Select, MenuItem } from '@material-ui/core'; export interface TextFieldWithFormStateProps extends StandardTextFieldProps { fieldState?: FieldState<string>; } export interface SelectWithFormStateProps extends SelectProps { fieldState?: FieldState<string>; selectItems: { value: string; text: string }[]; } export const TextFieldWithFormState = observer( (props: TextFieldWithFormStateProps) => { const { fieldState, ...otherProps } = props; return ( <TextField value={fieldState?.value} onChange={(e: React.ChangeEvent<HTMLInputElement>) => { fieldState?.onChange(e.target.value); }} error={fieldState?.hasError} helperText={fieldState?.error} {...otherProps} /> ); } ); export const SelectFieldWithFormState = observer( (props: SelectWithFormStateProps) => { const { fieldState, selectItems, ...otherProps } = props; return ( <Select value={fieldState?.value} onChange={(e: React.ChangeEvent<{ value: unknown }>) => { fieldState?.onChange((e.target.value as string) || ''); }} error={fieldState?.hasError} {...otherProps} > {selectItems.map(item => { return ( <MenuItem key={item.value} value={item.value}> {item.text} </MenuItem> ); })} </Select> ); } );