Local modifications to ClusterLabs/Anvil by Alteeve
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

99 lines
2.6 KiB

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<OutlinedInputWithLabelProps>;
messageBoxProps?: Partial<MessageBoxProps>;
selectWithLabelProps?: Partial<SelectWithLabelProps>;
};
type OutlinedLabeledInputWithSelectProps =
OutlinedLabeledInputWithSelectOptionalProps & {
id: string;
label: string;
selectItems: SelectItem[];
};
const OUTLINED_LABELED_INPUT_WITH_SELECT_DEFAULT_PROPS: Required<OutlinedLabeledInputWithSelectOptionalProps> =
{
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,
}) => (
<Box>
<Box
sx={{
display: 'flex',
flexDirection: 'row',
'& > :first-child': {
flexGrow: 1,
},
'& > :not(:last-child)': {
marginRight: '.5em',
},
[`&:hover
.${muiFormControlClasses.root}
.${muiOutlinedInputClasses.root}
.${muiOutlinedInputClasses.notchedOutline}`]: {
borderColor: GREY,
},
}}
>
<OutlinedInputWithLabel
// eslint-disable-next-line react/jsx-props-no-spreading
{...{
id,
label,
...inputWithLabelProps,
}}
/>
<SelectWithLabel
// eslint-disable-next-line react/jsx-props-no-spreading
{...{
id: `${id}-nested-select`,
selectItems,
...selectWithLabelProps,
}}
/>
</Box>
{/* eslint-disable-next-line react/jsx-props-no-spreading */}
<InputMessageBox {...messageBoxProps} />
</Box>
);
OutlinedLabeledInputWithSelect.defaultProps =
OUTLINED_LABELED_INPUT_WITH_SELECT_DEFAULT_PROPS;
export type { OutlinedLabeledInputWithSelectProps };
export default OutlinedLabeledInputWithSelect;