app/FieldControls/DropdownField.tsx (75 lines of code) (raw):

import React from "react"; import { FieldControlProps } from "./FieldControlsCommon"; import { FormControl, Grid, InputLabel, MenuItem, Select, Typography, } from "@material-ui/core"; const DropdownField: React.FC<FieldControlProps> = (props) => { if (props.viewHints.values) { return ( <FormControl classes={{ root: props.classes.inputField }}> <InputLabel id={props.controlId}>{props.viewHints.name}</InputLabel> <Select labelId={props.controlId} readOnly={ props.ignoreHintsReadonly ? false : props.viewHints.readonly || props.parentReadonly } value={ props.maybeValues ? props.maybeValues.length > 0 ? props.maybeValues[0] : "" : "" } onChange={(event) => props.valueDidChange(props.fieldname, [ event.target.value as string, ]) } > <MenuItem value="">(not set)</MenuItem> {props.viewHints.values.map((dataPair, index) => ( <MenuItem value={dataPair.key} key={dataPair.key}> {dataPair.value} </MenuItem> ))} </Select> {props.viewHints.readonly && !props.parentReadonly && !props.ignoreHintsReadonly ? ( <Typography variant="caption"> You can't edit this, it's read-only </Typography> ) : null} </FormControl> ); } else { return ( <Grid container direction="row" justify="flex-start" alignItems="flex-start" spacing={1} > <Grid item sm={6}> <Typography>{props.viewHints.name}</Typography> </Grid> <Grid item sm={6}> <Typography variant="caption" id={props.controlId} classes={{ root: props.classes.root, }} > Warning: field is a dropdown but has no values configured </Typography> </Grid> </Grid> ); } }; export default DropdownField;