mui-rff
Version:
Set of modern wrapper components to facilitate using Material UI with React Final Form
967 lines (863 loc) • 33.4 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var TextField$1 = _interopDefault(require('@material-ui/core/TextField'));
var MuiAutocomplete = _interopDefault(require('@material-ui/lab/Autocomplete'));
var React = _interopDefault(require('react'));
var reactFinalForm = require('react-final-form');
var core = require('@material-ui/core');
var pickers = require('@material-ui/pickers');
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function ErrorMessage(_ref) {
var showError = _ref.showError,
meta = _ref.meta,
formHelperTextProps = _ref.formHelperTextProps,
helperText = _ref.helperText;
if (showError) {
return React.createElement(core.FormHelperText, Object.assign({}, formHelperTextProps), meta.error || meta.submitError);
} else if (!!helperText) {
return React.createElement(core.FormHelperText, Object.assign({}, formHelperTextProps), helperText);
} else {
return React.createElement(React.Fragment, null);
}
}
var config = {
subscription: {
error: true,
submitError: true,
dirtySinceLastSubmit: true,
touched: true,
modified: true
}
};
function useFieldForErrors(name) {
return reactFinalForm.useField(name, config);
}
function showErrorOnChange(_ref2) {
var _ref2$meta = _ref2.meta,
submitError = _ref2$meta.submitError,
dirtySinceLastSubmit = _ref2$meta.dirtySinceLastSubmit,
error = _ref2$meta.error,
touched = _ref2$meta.touched,
modified = _ref2$meta.modified;
return !!((submitError && !dirtySinceLastSubmit || error) && (touched || modified));
}
function showErrorOnBlur(_ref3) {
var _ref3$meta = _ref3.meta,
submitError = _ref3$meta.submitError,
dirtySinceLastSubmit = _ref3$meta.dirtySinceLastSubmit,
error = _ref3$meta.error,
touched = _ref3$meta.touched;
return !!((submitError && !dirtySinceLastSubmit || error) && touched);
}
function Autocomplete(props) {
var name = props.name,
fieldProps = props.fieldProps,
rest = _objectWithoutPropertiesLoose(props, ["name", "fieldProps"]);
return React.createElement(reactFinalForm.Field, Object.assign({
name: name,
render: function render(fieldRenderProps) {
return React.createElement(AutocompleteWrapper, Object.assign({}, fieldRenderProps, rest));
}
}, fieldProps));
}
function AutocompleteWrapper(props) {
var _props$input = props.input,
name = _props$input.name,
onChange = _props$input.onChange,
value = _props$input.value,
meta = props.meta,
options = props.options,
label = props.label,
required = props.required,
multiple = props.multiple,
textFieldProps = props.textFieldProps,
getOptionValue = props.getOptionValue,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
placeholder = props.placeholder,
onChangeCallback = props.onChange,
rest = _objectWithoutPropertiesLoose(props, ["input", "meta", "options", "label", "required", "multiple", "textFieldProps", "getOptionValue", "showError", "placeholder", "onChange"]);
function getValue(values) {
if (!getOptionValue) {
return values;
} // ternary hell...
return multiple ? values ? values.map(getOptionValue) : null : values ? getOptionValue(values) : null;
}
var helperText = rest.helperText,
lessrest = _objectWithoutPropertiesLoose(rest, ["helperText"]);
var _ref = textFieldProps || {},
variant = _ref.variant,
restTextFieldProps = _objectWithoutPropertiesLoose(_ref, ["variant"]); // yuck...
var defaultValue;
if (!getOptionValue) {
defaultValue = value;
} else if (value !== null) ; else if (value) {
options.forEach(function (option) {
var optionValue = getOptionValue(option);
if (multiple) {
if (!defaultValue) {
defaultValue = [];
}
value.forEach(function (v) {
if (v === optionValue) {
defaultValue.push(option);
}
});
} else {
if (value === optionValue) {
defaultValue = option;
}
}
});
}
var onChangeFunc = function onChangeFunc( // eslint-disable-next-line @typescript-eslint/ban-types
event, value, reason, details) {
var gotValue = getValue(value);
onChange(gotValue);
if (onChangeCallback) {
onChangeCallback(event, value, reason, details);
}
};
var error = meta.error,
submitError = meta.submitError;
var isError = showError({
meta: meta
});
return React.createElement(MuiAutocomplete, Object.assign({
multiple: multiple,
onChange: onChangeFunc,
options: options,
value: defaultValue,
renderInput: function renderInput(params) {
return React.createElement(TextField$1, Object.assign({
label: label,
required: required,
helperText: isError ? error || submitError : helperText,
error: isError,
name: name,
placeholder: placeholder,
variant: variant
}, params, restTextFieldProps, {
fullWidth: true
}));
}
}, lessrest));
}
function Checkboxes(props) {
var required = props.required,
label = props.label,
data = props.data,
name = props.name,
helperText = props.helperText,
fieldProps = props.fieldProps,
formControlProps = props.formControlProps,
formGroupProps = props.formGroupProps,
formLabelProps = props.formLabelProps,
formControlLabelProps = props.formControlLabelProps,
formHelperTextProps = props.formHelperTextProps,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
restCheckboxes = _objectWithoutPropertiesLoose(props, ["required", "label", "data", "name", "helperText", "fieldProps", "formControlProps", "formGroupProps", "formLabelProps", "formControlLabelProps", "formHelperTextProps", "showError"]);
var itemsData = !Array.isArray(data) ? [data] : data;
var single = itemsData.length === 1;
var field = useFieldForErrors(name);
var isError = showError(field);
return React.createElement(core.FormControl, Object.assign({
required: required,
error: isError
}, formControlProps), label ? React.createElement(core.FormLabel, Object.assign({}, formLabelProps), label) : React.createElement(React.Fragment, null), React.createElement(core.FormGroup, Object.assign({}, formGroupProps), itemsData.map(function (item, idx) {
return React.createElement(core.FormControlLabel, Object.assign({
key: idx,
name: name,
label: item.label,
value: single ? undefined : item.value,
disabled: item.disabled,
control: React.createElement(reactFinalForm.Field, Object.assign({
type: "checkbox",
name: name,
render: function render(_ref) {
var _ref$input = _ref.input,
name = _ref$input.name,
value = _ref$input.value,
onChange = _ref$input.onChange,
checked = _ref$input.checked,
restInput = _objectWithoutPropertiesLoose(_ref$input, ["name", "value", "onChange", "checked"]);
return React.createElement(core.Checkbox, Object.assign({
name: name,
value: value,
onChange: onChange,
checked: checked,
disabled: item.disabled,
inputProps: _extends({
required: required
}, restInput)
}, restCheckboxes));
}
}, fieldProps))
}, formControlLabelProps));
})), React.createElement(ErrorMessage, {
showError: isError,
meta: field.meta,
formHelperTextProps: formHelperTextProps,
helperText: helperText
}));
}
function Switches(props) {
var name = props.name,
data = props.data,
label = props.label,
required = props.required,
helperText = props.helperText,
fieldProps = props.fieldProps,
formControlProps = props.formControlProps,
formGroupProps = props.formGroupProps,
formLabelProps = props.formLabelProps,
formControlLabelProps = props.formControlLabelProps,
formHelperTextProps = props.formHelperTextProps,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
restSwitches = _objectWithoutPropertiesLoose(props, ["name", "data", "label", "required", "helperText", "fieldProps", "formControlProps", "formGroupProps", "formLabelProps", "formControlLabelProps", "formHelperTextProps", "showError"]);
var itemsData = !Array.isArray(data) ? [data] : data;
var single = itemsData.length === 1;
var field = useFieldForErrors(name);
var isError = showError(field);
return React.createElement(core.FormControl, Object.assign({
required: required,
error: isError
}, formControlProps), label ? React.createElement(core.FormLabel, Object.assign({}, formLabelProps), label) : React.createElement(React.Fragment, null), React.createElement(core.FormGroup, Object.assign({}, formGroupProps), itemsData.map(function (item, idx) {
return React.createElement(core.FormControlLabel, Object.assign({
key: idx,
name: name,
label: item.label,
value: single ? undefined : item.value,
disabled: item.disabled,
control: React.createElement(reactFinalForm.Field, Object.assign({
type: "checkbox",
name: name,
render: function render(_ref) {
var _ref$input = _ref.input,
name = _ref$input.name,
value = _ref$input.value,
onChange = _ref$input.onChange,
checked = _ref$input.checked,
restInput = _objectWithoutPropertiesLoose(_ref$input, ["name", "value", "onChange", "checked"]);
return React.createElement(core.Switch, Object.assign({
name: name,
value: value,
onChange: onChange,
checked: checked,
disabled: item.disabled,
required: required,
inputProps: _extends({
required: required
}, restInput)
}, restSwitches));
}
}, fieldProps))
}, formControlLabelProps));
})), React.createElement(ErrorMessage, {
showError: isError,
meta: field.meta,
formHelperTextProps: formHelperTextProps,
helperText: helperText
}));
}
function Radios(props) {
var name = props.name,
data = props.data,
label = props.label,
required = props.required,
helperText = props.helperText,
formLabelProps = props.formLabelProps,
formControlLabelProps = props.formControlLabelProps,
fieldProps = props.fieldProps,
formControlProps = props.formControlProps,
radioGroupProps = props.radioGroupProps,
formHelperTextProps = props.formHelperTextProps,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
restRadios = _objectWithoutPropertiesLoose(props, ["name", "data", "label", "required", "helperText", "formLabelProps", "formControlLabelProps", "fieldProps", "formControlProps", "radioGroupProps", "formHelperTextProps", "showError"]);
var field = useFieldForErrors(name);
var isError = showError(field);
return React.createElement(core.FormControl, Object.assign({
required: required,
error: isError
}, formControlProps), !!label && React.createElement(core.FormLabel, Object.assign({}, formLabelProps), label), React.createElement(core.RadioGroup, Object.assign({}, radioGroupProps), data.map(function (item, idx) {
return React.createElement(core.FormControlLabel, Object.assign({
key: idx,
name: name,
label: item.label,
value: item.value,
disabled: item.disabled,
control: React.createElement(reactFinalForm.Field, Object.assign({
name: name,
type: "radio",
render: function render(_ref) {
var _ref$input = _ref.input,
name = _ref$input.name,
value = _ref$input.value,
onChange = _ref$input.onChange,
checked = _ref$input.checked,
restInput = _objectWithoutPropertiesLoose(_ref$input, ["name", "value", "onChange", "checked", "disabled"]);
return React.createElement(core.Radio, Object.assign({
name: name,
value: value,
onChange: onChange,
checked: checked,
disabled: item.disabled,
required: required,
inputProps: _extends({
required: required
}, restInput)
}, restRadios));
}
}, fieldProps))
}, formControlLabelProps));
})), React.createElement(ErrorMessage, {
showError: isError,
meta: field.meta,
formHelperTextProps: formHelperTextProps,
helperText: helperText
}));
}
function Select(props) {
var name = props.name,
label = props.label,
data = props.data,
children = props.children,
required = props.required,
multiple = props.multiple,
helperText = props.helperText,
fieldProps = props.fieldProps,
inputLabelProps = props.inputLabelProps,
formControlProps = props.formControlProps,
formHelperTextProps = props.formHelperTextProps,
menuItemProps = props.menuItemProps,
labelWidth = props.labelWidth,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
restSelectProps = _objectWithoutPropertiesLoose(props, ["name", "label", "data", "children", "required", "multiple", "helperText", "fieldProps", "inputLabelProps", "formControlProps", "formHelperTextProps", "menuItemProps", "labelWidth", "showError"]);
if (!data && !children) {
throw new Error('Please specify either children or data as an attribute.');
} // This is for supporting the special case of variant="outlined"
// Fixes: https://github.com/lookfirst/mui-rff/issues/91
var variant = restSelectProps.variant;
var inputLabel = React.useRef(null);
var _React$useState = React.useState(0),
labelWidthState = _React$useState[0],
setLabelWidthState = _React$useState[1];
React.useEffect(function () {
if (label) {
setLabelWidthState(inputLabel.current.offsetWidth);
}
}, [label]);
var field = useFieldForErrors(name);
var isError = showError(field);
return React.createElement(core.FormControl, Object.assign({
required: required,
error: isError,
fullWidth: true,
variant: variant
}, formControlProps), !!label && React.createElement(core.InputLabel, Object.assign({
ref: inputLabel,
htmlFor: name
}, inputLabelProps), label), React.createElement(reactFinalForm.Field, Object.assign({
name: name,
render: function render(_ref) {
var _ref$input = _ref.input,
name = _ref$input.name,
value = _ref$input.value,
onChange = _ref$input.onChange,
restInput = _objectWithoutPropertiesLoose(_ref$input, ["name", "value", "onChange", "checked"]);
// prevents an error that happens if you don't have initialValues defined in advance
var finalValue = multiple && !value ? [] : value;
return React.createElement(core.Select, Object.assign({
name: name,
value: finalValue,
onChange: onChange,
multiple: multiple,
label: label,
labelWidth: variant === 'outlined' && !!label ? labelWidthState : labelWidth,
inputProps: _extends({
required: required
}, restInput)
}, restSelectProps), data ? data.map(function (item) {
return React.createElement(core.MenuItem, Object.assign({
value: item.value,
key: item.value,
disabled: item.disabled
}, menuItemProps), item.label);
}) : children);
}
}, fieldProps)), React.createElement(ErrorMessage, {
showError: isError,
meta: field.meta,
formHelperTextProps: formHelperTextProps,
helperText: helperText
}));
}
function pickerProviderWrapper(dateFunsUtils, component) {
return dateFunsUtils ? React.createElement(pickers.MuiPickersUtilsProvider, {
utils: dateFunsUtils
}, component) : component;
}
function KeyboardDatePicker(props) {
var name = props.name,
fieldProps = props.fieldProps,
rest = _objectWithoutPropertiesLoose(props, ["name", "fieldProps"]);
return React.createElement(reactFinalForm.Field, Object.assign({
name: name,
render: function render(fieldRenderProps) {
return React.createElement(KeyboardDatePickerWrapper, Object.assign({}, fieldRenderProps, rest));
}
}, fieldProps));
}
function KeyboardDatePickerWrapper(props) {
var _props$input = props.input,
name = _props$input.name,
onChange = _props$input.onChange,
value = _props$input.value,
restInput = _objectWithoutPropertiesLoose(_props$input, ["name", "onChange", "value"]),
meta = props.meta,
dateFunsUtils = props.dateFunsUtils,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
rest = _objectWithoutPropertiesLoose(props, ["input", "meta", "dateFunsUtils", "showError"]);
var error = meta.error,
submitError = meta.submitError;
var isError = showError({
meta: meta
});
var helperText = rest.helperText,
lessrest = _objectWithoutPropertiesLoose(rest, ["helperText"]);
return pickerProviderWrapper(dateFunsUtils, React.createElement(pickers.KeyboardDatePicker, Object.assign({
disableToolbar: true,
fullWidth: true,
autoOk: true,
helperText: isError ? error || submitError : helperText,
error: isError,
onChange: onChange,
name: name,
value: value === '' ? null : value,
inputProps: restInput
}, lessrest)));
}
function KeyboardDateTimePicker(props) {
var name = props.name,
fieldProps = props.fieldProps,
rest = _objectWithoutPropertiesLoose(props, ["name", "fieldProps"]);
return React.createElement(reactFinalForm.Field, Object.assign({
name: name,
render: function render(fieldRenderProps) {
return React.createElement(KeyboardDateTimePickerWrapper, Object.assign({}, fieldRenderProps, rest));
}
}, fieldProps));
}
function KeyboardDateTimePickerWrapper(props) {
var _props$input = props.input,
name = _props$input.name,
onChange = _props$input.onChange,
value = _props$input.value,
restInput = _objectWithoutPropertiesLoose(_props$input, ["name", "onChange", "value"]),
meta = props.meta,
dateFunsUtils = props.dateFunsUtils,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
rest = _objectWithoutPropertiesLoose(props, ["input", "meta", "dateFunsUtils", "showError"]);
var error = meta.error,
submitError = meta.submitError;
var isError = showError({
meta: meta
});
var helperText = rest.helperText,
lessrest = _objectWithoutPropertiesLoose(rest, ["helperText"]);
return pickerProviderWrapper(dateFunsUtils, React.createElement(pickers.KeyboardDateTimePicker, Object.assign({
fullWidth: true,
autoOk: true,
helperText: isError ? error || submitError : helperText,
error: isError,
onChange: onChange,
name: name,
value: value === '' ? null : value,
inputProps: restInput
}, lessrest)));
}
function DatePicker(props) {
var name = props.name,
fieldProps = props.fieldProps,
rest = _objectWithoutPropertiesLoose(props, ["name", "fieldProps"]);
return React.createElement(reactFinalForm.Field, Object.assign({
name: name,
render: function render(fieldRenderProps) {
return React.createElement(DatePickerWrapper, Object.assign({}, fieldRenderProps, rest));
}
}, fieldProps));
}
function DatePickerWrapper(props) {
var _props$input = props.input,
name = _props$input.name,
onChange = _props$input.onChange,
value = _props$input.value,
restInput = _objectWithoutPropertiesLoose(_props$input, ["name", "onChange", "value"]),
meta = props.meta,
dateFunsUtils = props.dateFunsUtils,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
rest = _objectWithoutPropertiesLoose(props, ["input", "meta", "dateFunsUtils", "showError"]);
var error = meta.error,
submitError = meta.submitError;
var isError = showError({
meta: meta
});
var helperText = rest.helperText,
lessrest = _objectWithoutPropertiesLoose(rest, ["helperText"]);
return pickerProviderWrapper(dateFunsUtils, React.createElement(pickers.DatePicker, Object.assign({
fullWidth: true,
autoOk: true,
helperText: isError ? error || submitError : helperText,
error: isError,
onChange: onChange,
name: name,
value: value === '' ? null : value
}, lessrest, {
inputProps: restInput
})));
}
function DateTimePicker(props) {
var name = props.name,
fieldProps = props.fieldProps,
rest = _objectWithoutPropertiesLoose(props, ["name", "fieldProps"]);
return React.createElement(reactFinalForm.Field, Object.assign({
name: name,
render: function render(fieldRenderProps) {
return React.createElement(DateTimePickerWrapper, Object.assign({}, fieldRenderProps, rest));
}
}, fieldProps));
}
function DateTimePickerWrapper(props) {
var _props$input = props.input,
name = _props$input.name,
onChange = _props$input.onChange,
value = _props$input.value,
restInput = _objectWithoutPropertiesLoose(_props$input, ["name", "onChange", "value"]),
meta = props.meta,
dateFunsUtils = props.dateFunsUtils,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
rest = _objectWithoutPropertiesLoose(props, ["input", "meta", "dateFunsUtils", "showError"]);
var error = meta.error,
submitError = meta.submitError;
var isError = showError({
meta: meta
});
var helperText = rest.helperText,
lessrest = _objectWithoutPropertiesLoose(rest, ["helperText"]);
return pickerProviderWrapper(dateFunsUtils, React.createElement(pickers.DateTimePicker, Object.assign({
fullWidth: true,
autoOk: true,
helperText: isError ? error || submitError : helperText,
error: isError,
onChange: onChange,
name: name,
value: value === '' ? null : value
}, lessrest, {
inputProps: restInput
})));
}
function KeyboardTimePicker(props) {
var name = props.name,
fieldProps = props.fieldProps,
rest = _objectWithoutPropertiesLoose(props, ["name", "fieldProps"]);
return React.createElement(reactFinalForm.Field, Object.assign({
name: name,
render: function render(fieldRenderProps) {
return React.createElement(KeyboardTimePickerWrapper, Object.assign({}, fieldRenderProps, rest));
}
}, fieldProps));
}
function KeyboardTimePickerWrapper(props) {
var _props$input = props.input,
name = _props$input.name,
onChange = _props$input.onChange,
value = _props$input.value,
restInput = _objectWithoutPropertiesLoose(_props$input, ["name", "onChange", "value"]),
meta = props.meta,
dateFunsUtils = props.dateFunsUtils,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
rest = _objectWithoutPropertiesLoose(props, ["input", "meta", "dateFunsUtils", "showError"]);
var error = meta.error,
submitError = meta.submitError;
var isError = showError({
meta: meta
});
var helperText = rest.helperText,
lessrest = _objectWithoutPropertiesLoose(rest, ["helperText"]);
return pickerProviderWrapper(dateFunsUtils, React.createElement(pickers.KeyboardTimePicker, Object.assign({
fullWidth: true,
autoOk: true,
helperText: isError ? error || submitError : helperText,
error: isError,
onChange: onChange,
name: name,
value: value === '' ? null : value
}, lessrest, {
inputProps: restInput
})));
}
function TimePicker(props) {
var name = props.name,
fieldProps = props.fieldProps,
rest = _objectWithoutPropertiesLoose(props, ["name", "fieldProps"]);
return React.createElement(reactFinalForm.Field, Object.assign({
name: name,
render: function render(fieldRenderProps) {
return React.createElement(TimePickerWrapper, Object.assign({}, fieldRenderProps, rest));
}
}, fieldProps));
}
function TimePickerWrapper(props) {
var _props$input = props.input,
name = _props$input.name,
onChange = _props$input.onChange,
value = _props$input.value,
restInput = _objectWithoutPropertiesLoose(_props$input, ["name", "onChange", "value"]),
meta = props.meta,
dateFunsUtils = props.dateFunsUtils,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
rest = _objectWithoutPropertiesLoose(props, ["input", "meta", "dateFunsUtils", "showError"]);
var error = meta.error,
submitError = meta.submitError;
var isError = showError({
meta: meta
});
var helperText = rest.helperText,
lessrest = _objectWithoutPropertiesLoose(rest, ["helperText"]);
return pickerProviderWrapper(dateFunsUtils, React.createElement(pickers.TimePicker, Object.assign({
fullWidth: true,
autoOk: true,
helperText: isError ? error || submitError : helperText,
error: isError,
onChange: onChange,
name: name,
value: value === '' ? null : value
}, lessrest, {
inputProps: restInput
})));
}
function TextField(props) {
var name = props.name,
type = props.type,
fieldProps = props.fieldProps,
rest = _objectWithoutPropertiesLoose(props, ["name", "type", "fieldProps"]);
return React.createElement(reactFinalForm.Field, Object.assign({
name: name,
type: type,
render: function render(_ref) {
var input = _ref.input,
meta = _ref.meta;
return React.createElement(TextFieldWrapper, Object.assign({
input: input,
meta: meta,
name: name,
type: type
}, rest));
}
}, fieldProps));
}
function TextFieldWrapper(props) {
var _props$input = props.input,
name = _props$input.name,
value = _props$input.value,
type = _props$input.type,
onChange = _props$input.onChange,
restInput = _objectWithoutPropertiesLoose(_props$input, ["name", "value", "type", "onChange"]),
meta = props.meta,
required = props.required,
_props$fullWidth = props.fullWidth,
fullWidth = _props$fullWidth === void 0 ? true : _props$fullWidth,
helperText = props.helperText,
_props$showError = props.showError,
showError = _props$showError === void 0 ? showErrorOnChange : _props$showError,
rest = _objectWithoutPropertiesLoose(props, ["input", "meta", "required", "fullWidth", "helperText", "showError"]);
var error = meta.error,
submitError = meta.submitError;
var isError = showError({
meta: meta
});
return React.createElement(core.TextField, Object.assign({
fullWidth: fullWidth,
helperText: isError ? error || submitError : helperText,
error: isError,
onChange: onChange,
name: name,
value: value,
type: type,
required: required,
inputProps: _extends({
required: required
}, restInput)
}, rest));
}
// A type of promise-like that resolves synchronously and supports only one observer
const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
// Asynchronously call a function and send errors to recovery continuation
function _catch(body, recover) {
try {
var result = body();
} catch(e) {
return recover(e);
}
if (result && result.then) {
return result.then(void 0, recover);
}
return result;
}
// https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_get
function get(obj, path, defaultValue) {
var result = String.prototype.split.call(path, /[,[\].]+?/).filter(Boolean).reduce(function (res, key) {
return res !== null && res !== undefined ? res[key] : res;
}, obj);
return result === undefined || result === obj ? defaultValue : result;
} // https://stackoverflow.com/questions/54733539/javascript-implementation-of-lodash-set-method
function set(obj, path, value) {
if (Object(obj) !== obj) return obj; // When obj is not an object
// If not yet an array, get the keys from the string-path
if (!Array.isArray(path)) path = path.toString().match(/[^.[\]]+/g) || [];
path.slice(0, -1).reduce(function (a, c, i) {
return Object(a[c]) === a[c] // Does the key exist and is its value an object?
? // Yes: then follow that path
a[c] : // No: create the key. Is the next key a potential array-index?
a[c] = Math.abs(path[i + 1]) >> 0 === +path[i + 1] ? [] // Yes: assign a new array object
: {};
}, // No: assign a new plain object
obj)[path[path.length - 1]] = value; // Finally assign the value to the last key
return obj; // Return the top-level object to allow chaining
}
function normalizeValidationError(err, translator) {
return err.inner.reduce(function (errors, innerError) {
var el;
var path = innerError.path,
message = innerError.message;
el = translator ? translator(innerError) : message;
if (errors.hasOwnProperty(path)) {
var prev = get(errors, path);
prev.push(el);
set(errors, path, prev);
} else {
set(errors, path, [el]);
}
return errors;
}, {});
}
/**
* Wraps the execution of a Yup schema to return an Promise<ValidationError>
* where the key is the form field and the value is the error string.
*/
function makeValidate(validator, translator) {
return function (values) {
try {
return Promise.resolve(_catch(function () {
return Promise.resolve(validator.validate(values, {
abortEarly: false
})).then(function () {
return {};
});
}, function (err) {
return normalizeValidationError(err, translator);
}));
} catch (e) {
return Promise.reject(e);
}
};
}
/**
* Wraps the sync execution of a Yup schema to return an ValidationError
* where the key is the form field and the value is the error string.
*/
function makeValidateSync(validator, translator) {
return function (values) {
try {
validator.validateSync(values, {
abortEarly: false
});
return {};
} catch (err) {
return normalizeValidationError(err, translator);
}
};
}
/**
* Uses the private _exclusive field in the schema to get whether or not
* the field is marked as required or not.
*/
function makeRequired(schema) {
var fields = schema.fields;
return Object.keys(fields).reduce(function (accu, field) {
if (fields[field].fields) {
accu[field] = makeRequired(fields[field]);
} else {
accu[field] = !!fields[field]._exclusive.required;
}
return accu;
}, {});
}
function Debug() {
return React.createElement(reactFinalForm.FormSpy, {
subscription: {
values: true
}
}, function (_ref) {
var values = _ref.values;
return React.createElement("pre", null, JSON.stringify(values, undefined, 2));
});
}
exports.Autocomplete = Autocomplete;
exports.Checkboxes = Checkboxes;
exports.DatePicker = DatePicker;
exports.DateTimePicker = DateTimePicker;
exports.Debug = Debug;
exports.ErrorMessage = ErrorMessage;
exports.KeyboardDatePicker = KeyboardDatePicker;
exports.KeyboardDateTimePicker = KeyboardDateTimePicker;
exports.KeyboardTimePicker = KeyboardTimePicker;
exports.Radios = Radios;
exports.Select = Select;
exports.Switches = Switches;
exports.TextField = TextField;
exports.TimePicker = TimePicker;
exports.makeRequired = makeRequired;
exports.makeValidate = makeValidate;
exports.makeValidateSync = makeValidateSync;
exports.showErrorOnBlur = showErrorOnBlur;
exports.showErrorOnChange = showErrorOnChange;
exports.useFieldForErrors = useFieldForErrors;
//# sourceMappingURL=mui-rff.cjs.development.js.map