frontend/app/Form/FormSelect.tsx (39 lines of code) (raw):

import React from "react"; import { FormControl, InputLabel, MenuItem, Select, FormHelperText, } from "@material-ui/core"; interface FormSelectProps { label: string; value: string; onChange: (event: any) => void; options: string[]; error?: boolean; required?: boolean; disabled?: boolean; } const FormSelect: React.FC<FormSelectProps> = (props) => { const labelId = `${(props.label || "").toLowerCase()}-label`; const error = props.error && !props.disabled; const required = props.required && !props.disabled; return ( <FormControl disabled={props.disabled} required={required} error={error}> <InputLabel id={labelId}>{props.label}</InputLabel> <Select labelId={labelId} value={props.value} onChange={(event: any) => props.onChange(event)} > {props.options.map((option) => ( <MenuItem value={option} key={option}> {option} </MenuItem> ))} </Select> <FormHelperText> {error ? `${props.label} is required` : ""} </FormHelperText> </FormControl> ); }; export default FormSelect;