import { FC } from 'react'; import { Box, formControlClasses as muiFormControlClasses, outlinedInputClasses as muiOutlinedInputClasses, } from '@mui/material'; import { GREY } from '../lib/consts/DEFAULT_THEME'; import InputMessageBox from './InputMessageBox'; import { MessageBoxProps } from './MessageBox'; import OutlinedInputWithLabel, { OutlinedInputWithLabelProps, } from './OutlinedInputWithLabel'; import SelectWithLabel, { SelectItem, SelectWithLabelProps, } from './SelectWithLabel'; type OutlinedLabeledInputWithSelectOptionalProps = { inputWithLabelProps?: Partial; messageBoxProps?: Partial; selectWithLabelProps?: Partial; }; type OutlinedLabeledInputWithSelectProps = OutlinedLabeledInputWithSelectOptionalProps & { id: string; label: string; selectItems: SelectItem[]; }; const OUTLINED_LABELED_INPUT_WITH_SELECT_DEFAULT_PROPS: Required = { inputWithLabelProps: {}, messageBoxProps: {}, selectWithLabelProps: {}, }; const OutlinedLabeledInputWithSelect: FC< OutlinedLabeledInputWithSelectProps > = ({ id, label, inputWithLabelProps = OUTLINED_LABELED_INPUT_WITH_SELECT_DEFAULT_PROPS.inputWithLabelProps, messageBoxProps = OUTLINED_LABELED_INPUT_WITH_SELECT_DEFAULT_PROPS.messageBoxProps, selectItems, selectWithLabelProps = OUTLINED_LABELED_INPUT_WITH_SELECT_DEFAULT_PROPS.selectWithLabelProps, }) => ( :first-child': { flexGrow: 1, }, '& > :not(:last-child)': { marginRight: '.5em', }, [`&:hover .${muiFormControlClasses.root} .${muiOutlinedInputClasses.root} .${muiOutlinedInputClasses.notchedOutline}`]: { borderColor: GREY, }, }} > {/* eslint-disable-next-line react/jsx-props-no-spreading */} ); OutlinedLabeledInputWithSelect.defaultProps = OUTLINED_LABELED_INPUT_WITH_SELECT_DEFAULT_PROPS; export type { OutlinedLabeledInputWithSelectProps }; export default OutlinedLabeledInputWithSelect;