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.
72 lines
2.1 KiB
72 lines
2.1 KiB
import { |
|
FormControl as MUIFormControl, |
|
FormControlProps as MUIFormControlProps, |
|
} from '@mui/material'; |
|
|
|
import InputMessageBox from './InputMessageBox'; |
|
import { MessageBoxProps } from './MessageBox'; |
|
import OutlinedInput, { OutlinedInputProps } from './OutlinedInput'; |
|
import OutlinedInputLabel, { |
|
OutlinedInputLabelProps, |
|
} from './OutlinedInputLabel'; |
|
|
|
type OutlinedInputWithLabelOptionalProps = { |
|
formControlProps?: Partial<MUIFormControlProps>; |
|
id?: string; |
|
inputProps?: Partial<OutlinedInputProps>; |
|
inputLabelProps?: Partial<OutlinedInputLabelProps>; |
|
messageBoxProps?: Partial<MessageBoxProps>; |
|
onChange?: OutlinedInputProps['onChange']; |
|
value?: OutlinedInputProps['value']; |
|
}; |
|
|
|
type OutlinedInputWithLabelProps = { |
|
label: string; |
|
} & OutlinedInputWithLabelOptionalProps; |
|
|
|
const OUTLINED_INPUT_WITH_LABEL_DEFAULT_PROPS: Required< |
|
Omit<OutlinedInputWithLabelOptionalProps, 'onChange'> |
|
> & |
|
Pick<OutlinedInputWithLabelOptionalProps, 'onChange'> = { |
|
formControlProps: {}, |
|
id: '', |
|
inputProps: {}, |
|
inputLabelProps: {}, |
|
messageBoxProps: {}, |
|
onChange: undefined, |
|
value: '', |
|
}; |
|
|
|
const OutlinedInputWithLabel = ({ |
|
formControlProps = OUTLINED_INPUT_WITH_LABEL_DEFAULT_PROPS.formControlProps, |
|
id = OUTLINED_INPUT_WITH_LABEL_DEFAULT_PROPS.id, |
|
inputProps = OUTLINED_INPUT_WITH_LABEL_DEFAULT_PROPS.inputProps, |
|
inputLabelProps = OUTLINED_INPUT_WITH_LABEL_DEFAULT_PROPS.inputLabelProps, |
|
label, |
|
messageBoxProps = OUTLINED_INPUT_WITH_LABEL_DEFAULT_PROPS.messageBoxProps, |
|
onChange, |
|
value = OUTLINED_INPUT_WITH_LABEL_DEFAULT_PROPS.value, |
|
}: OutlinedInputWithLabelProps): JSX.Element => ( |
|
<MUIFormControl {...formControlProps}> |
|
<OutlinedInputLabel {...{ htmlFor: id, ...inputLabelProps }}> |
|
{label} |
|
</OutlinedInputLabel> |
|
<OutlinedInput |
|
{...{ |
|
fullWidth: formControlProps.fullWidth, |
|
id, |
|
label, |
|
onChange, |
|
value, |
|
...inputProps, |
|
}} |
|
/> |
|
<InputMessageBox {...messageBoxProps} /> |
|
</MUIFormControl> |
|
); |
|
|
|
OutlinedInputWithLabel.defaultProps = OUTLINED_INPUT_WITH_LABEL_DEFAULT_PROPS; |
|
|
|
export type { OutlinedInputWithLabelProps }; |
|
|
|
export default OutlinedInputWithLabel;
|
|
|