import type { PropTypes } from '@material-ui/core'; import Checkbox, { CheckboxProps } from '@material-ui/core/Checkbox'; import FormControlLabel from '@material-ui/core/FormControlLabel'; import FormGroup from '@material-ui/core/FormGroup'; import FormLabel from '@material-ui/core/FormLabel'; import Switch, { SwitchProps } from '@material-ui/core/Switch'; import useTheme from '@material-ui/core/styles/useTheme'; import omit from 'lodash/omit'; import React, { Ref } from 'react'; import { FieldProps, connectField, filterDOMProps } from 'uniforms'; import wrapField from './wrapField'; export type BoolFieldProps = FieldProps< boolean, CheckboxProps | SwitchProps, { appearance?: 'checkbox' | 'switch'; fullWidth?: boolean; helperText?: string; legend?: string; margin?: PropTypes.Margin; } >; function Bool(props: BoolFieldProps) { const { appearance, disabled, inputRef, label, legend, name, onChange, readOnly, value, } = props; const theme = useTheme(); const formControlThemeProps = theme.props?.MuiFormControl; const SelectionControl = appearance === 'checkbox' || appearance === undefined ? Checkbox : Switch; return wrapField( { ...(formControlThemeProps?.fullWidth === undefined && { fullWidth: true, }), ...(formControlThemeProps?.margin === undefined && { margin: 'dense' }), ...props, component: 'fieldset', }, legend && ( {legend} ), !disabled && !readOnly && onChange && onChange(event.target.checked) } ref={inputRef as Ref} value={name} {...omit(filterDOMProps(props), ['helperText', 'fullWidth'])} /> } label={label} /> , ); } export default connectField(Bool, { kind: 'leaf' });