react-hook-form-chakra-fields
Version:
A collection of form fields on top of simple and accessible react component library [Chakra UI](https://chakra-ui.com/) and performant form library [React Hook Form](https://react-hook-form.com/), integrated with many other js/ts libraries.
1,008 lines (894 loc) • 33.4 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = require('react');
var React__default = _interopDefault(React);
var reactHookForm = require('react-hook-form');
var lodash = require('lodash');
var react = require('@chakra-ui/react');
var icons = require('@chakra-ui/icons');
var NumberFormat = _interopDefault(require('react-number-format'));
var currency = _interopDefault(require('currency.js'));
var dayjs = _interopDefault(require('dayjs'));
var ReactDate = require('react-datepicker');
var ReactDate__default = _interopDefault(ReactDate);
var en = _interopDefault(require('date-fns/locale/en-GB'));
require('react-datepicker/dist/react-datepicker.css');
var styled = _interopDefault(require('@emotion/styled'));
var TextMaskedInput = _interopDefault(require('react-text-mask'));
var ReactSelect = _interopDefault(require('react-select'));
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 _taggedTemplateLiteralLoose(strings, raw) {
if (!raw) {
raw = strings.slice(0);
}
strings.raw = raw;
return strings;
}
var FieldControl = function FieldControl(_ref) {
var errorText = _ref.errorText,
helperText = _ref.helperText,
label = _ref.label,
children = _ref.children,
tip = _ref.tip,
id = _ref.id,
isRequired = _ref.isRequired,
props = _objectWithoutPropertiesLoose(_ref, ["errorText", "helperText", "label", "children", "tip", "id", "isRequired"]);
var infoIconColor = react.useColorModeValue('blue.500', 'blue.200');
return React__default.createElement(react.FormControl, Object.assign({
as: react.GridItem,
mb: 4,
id: id,
"data-testid": id,
isRequired: isRequired
}, props), React__default.createElement(react.HStack, {
spacing: 0
}, label && React__default.createElement(react.FormLabel, {
mr: "5px",
lineHeight: 'auto',
fontSize: 'md',
color: 'auto'
}, label), tip && React__default.createElement(react.Tooltip, {
textAlign: "center",
label: tip
}, React__default.createElement(icons.InfoIcon, {
mb: "5px",
w: "13px",
h: "13px",
color: infoIconColor
}))), children, React__default.createElement(react.FormErrorMessage, {
lineHeight: "1rem"
}, errorText), React__default.createElement(react.FormHelperText, {
lineHeight: "1rem"
}, helperText));
};
var FieldPrototype = function FieldPrototype(_ref) {
var _get;
var children = _ref.children,
name = _ref.name,
_ref$isRequired = _ref.isRequired,
isRequired = _ref$isRequired === void 0 ? true : _ref$isRequired,
props = _objectWithoutPropertiesLoose(_ref, ["children", "name", "isRequired"]);
var methods = reactHookForm.useFormContext();
var isInvalid = Boolean(lodash.get(methods.errors, name));
return React__default.createElement(FieldControl, Object.assign({
errorText: (_get = lodash.get(methods.errors, name)) == null ? void 0 : _get.message,
isInvalid: isInvalid,
name: name,
isRequired: isRequired
}, props), React__default.createElement(reactHookForm.Controller, {
name: name,
render: function render(props) {
return children(methods, props, {
isInvalid: isInvalid
});
}
}));
};
var MoneyInput = function MoneyInput(_ref) {
var hasError = _ref.hasError,
value = _ref.value,
props = _objectWithoutPropertiesLoose(_ref, ["hasError", "value"]);
var formatProps = {
thousandSeparator: ',',
decimalSeparator: '.',
decimalScale: 2,
fixedDecimalScale: true,
placeholder: '0.00'
};
return (// @ts-ignore
React__default.createElement(react.Input, Object.assign({
as: NumberFormat
}, formatProps, props, {
hasError: hasError,
value: value ? currency(value, {
precision: 10
}).value : '',
allowNegative: false,
isAllowed: function isAllowed(_ref2) {
var floatValue = _ref2.floatValue;
if (!floatValue) {
return true;
}
return floatValue >= 0 && floatValue <= 999999999999.99;
}
}))
);
};
var _templateObject;
var DatePickerStyles = /*#__PURE__*/styled(react.Box)(_templateObject || (_templateObject = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n .react-datepicker {\n background-color: ", ";\n font-family: inherit;\n border-color: ", ";\n }\n .react-datepicker-wrapper,\n .react-datepicker__input-container {\n display: block;\n }\n\n .react-datepicker__input-container {\n height: 2.5rem;\n }\n\n .react-datepicker__input-container > input {\n width: 100%;\n height: 100%;\n border-radius: 7px;\n border: ", ";\n }\n\n .react-datepicker__input-container > input:focus {\n border: ", ";\n }\n\n .react-datepicker__close-icon {\n right: 3px;\n }\n\n .react-datepicker__close-icon::after {\n width: 21px;\n height: 21px;\n background-color: ", ";\n color: ", ";\n font-size: 1.1rem;\n }\n\n .react-datepicker__input-time-container {\n background-color: transparent;\n filter: ", ";\n }\n\n .react-datepicker-time__input {\n background-color: transparent;\n }\n\n .react-datepicker__month-container,\n .react-datepicker__header {\n background: ", ";\n * {\n color: ", ";\n }\n\n .react-datepicker__day:hover {\n background: ", ";\n }\n\n .react-datepicker__day--selected {\n color: white;\n background: ", ";\n font-weight: bold;\n }\n\n .react-datepicker__day--keyboard-selected {\n background-color: transparent;\n }\n\n .react-datepicker__day--disabled {\n opacity: 0.4;\n }\n }\n"])), function (props) {
return props.calendarBackground;
}, function (props) {
return props.calendarSelectedBackground;
}, function (props) {
return props.isInvalid ? "2.5px solid " + props.borderColor + " !important" : "1px solid " + props.borderColor + " !important";
}, function (props) {
return "2px solid " + props.focusColor + " !important";
}, function (props) {
return props.clearBtnBackground;
}, function (props) {
return props.clearBtnColor;
}, function (props) {
return props.isDarkMode ? 'invert(1)' : 'invert(0)';
}, function (props) {
return props.calendarBackground;
}, function (props) {
return props.calendarColor;
}, function (props) {
return props.calendarDayHover;
}, function (props) {
return props.calendarSelectedBackground;
});
ReactDate.registerLocale('en-GB', en);
var DateInput = function DateInput(_ref) {
var _props$dateFormat, _props$timeInputLabel;
var _ref$isInvalid = _ref.isInvalid,
isInvalid = _ref$isInvalid === void 0 ? false : _ref$isInvalid,
value = _ref.value,
_onChange = _ref.onChange,
_ref$isClearable = _ref.isClearable,
isClearable = _ref$isClearable === void 0 ? true : _ref$isClearable,
props = _objectWithoutPropertiesLoose(_ref, ["isInvalid", "value", "onChange", "isClearable"]);
var _useTheme = react.useTheme(),
colors = _useTheme.colors;
var _useColorMode = react.useColorMode(),
colorMode = _useColorMode.colorMode;
var invalidColor = react.useColorModeValue(colors.red[500], colors.red[300]);
var validColor = react.useColorModeValue(colors.gray[200], colors.gray[600]);
var clearBtnBackground = react.useColorModeValue(colors.blue[500], colors.blue[300]);
var clearBtnColor = react.useColorModeValue(colors.white, colors.gray[900]);
var calendarBackground = react.useColorModeValue(colors.white, colors.gray[700]);
var calendarColor = react.useColorModeValue(colors.gray[700], colors.white);
var calendarSelectedBackground = react.useColorModeValue(colors.blue[500], colors.blue[300]);
var calendarDayHover = react.useColorModeValue(colors.gray[200], colors.gray[600]);
var dateFormat = (_props$dateFormat = props.dateFormat) != null ? _props$dateFormat : 'YYYY-MM-DDTHH:mm:ssZ';
return React__default.createElement(DatePickerStyles, {
isDarkMode: colorMode === 'dark',
isInvalid: isInvalid,
borderColor: isInvalid ? invalidColor : validColor,
focusColor: colors.blue[500],
clearBtnColor: clearBtnColor,
clearBtnBackground: clearBtnBackground,
calendarBackground: calendarBackground,
calendarColor: calendarColor,
calendarSelectedBackground: calendarSelectedBackground,
calendarDayHover: calendarDayHover
}, React__default.createElement(react.Input, Object.assign({
as: ReactDate__default,
autoComplete: "off",
minDate: new Date(1900, 1, 1),
maxDate: new Date(2999, 1, 1),
isClearable: isClearable
}, props, {
locale: "en",
dateFormat: props.showTimeInput ? 'yyy/MM/dd h:mm aa' : 'yyyy/MM/dd',
timeInputLabel: (_props$timeInputLabel = props.timeInputLabel) != null ? _props$timeInputLabel : 'Time:',
showPopperArrow: false,
selected: value ? new Date(value) : null,
// @ts-ignore
onChange: function onChange(value, event) {
if (!value || Array.isArray(value)) {
_onChange(value, event);
return;
}
var date = dayjs(value).hour(0).minute(0).second(0);
_onChange(date.format(dateFormat), event);
}
})));
};
var MaskedInput = function MaskedInput(props) {
return React__default.createElement(react.Input, Object.assign({
as: TextMaskedInput,
guide: true
}, props));
};
var TimeInput = function TimeInput(_ref) {
var _props$value;
var onChangeTime = _ref.onChangeTime,
props = _objectWithoutPropertiesLoose(_ref, ["onChangeTime"]);
var valueToInteger = function valueToInteger(val) {
return parseInt(val, 10);
};
var valueToString = function valueToString(val) {
return val.toString().padStart(2, '0');
};
return React__default.createElement(MaskedInput, Object.assign({
mask: [/\d/, /\d/, ':', /\d/, /\d/],
placeholder: "00:00",
maxW: "120px"
}, props, {
onBlur: function onBlur(e) {
if (props.onBlur) {
props.onBlur(e);
}
if (onChangeTime) {
var value = e.target.value;
var _value$split = value.split(':'),
hour = _value$split[0],
minute = _value$split[1];
var date = dayjs(new Date()).hour(valueToInteger(hour)).minute(valueToInteger(minute));
if (date.isValid()) {
onChangeTime(valueToString(date.hour()) + ":" + valueToString(date.minute()));
return;
}
onChangeTime('');
}
},
value: (_props$value = props.value) != null ? _props$value : ''
}));
};
var DateTimeInput = function DateTimeInput(_ref) {
var id = _ref.id,
_ref$value = _ref.value,
value = _ref$value === void 0 ? null : _ref$value,
onChange = _ref.onChange,
props = _objectWithoutPropertiesLoose(_ref, ["id", "value", "onChange"]);
var valueToString = function valueToString(val) {
return val.toString().padStart(2, '0');
};
var getTime = function getTime() {
var date = dayjs(value != null ? value : undefined);
if (date.isValid()) {
return valueToString(date.hour()) + ":" + valueToString(date.minute());
}
return null;
};
var insertTimeToDate = function insertTimeToDate(date, time) {
var _time$split = time.split(':'),
hour = _time$split[0],
minute = _time$split[1];
return dayjs(date).hour(Number(hour)).minute(Number(minute)).format('YYYY-MM-DDTHH:mm:ssZ');
};
var _useState = React.useState(value),
dateValue = _useState[0],
setDateValue = _useState[1];
var _useState2 = React.useState(getTime()),
timeValue = _useState2[0],
setTimeValue = _useState2[1];
var _useState3 = React.useState(value),
dateTimeValue = _useState3[0],
setDateTimeValue = _useState3[1];
React.useEffect(function () {
if (onChange) {
onChange(dateTimeValue);
}
}, [dateTimeValue]);
var removeDate = function removeDate() {
setDateValue(null);
setTimeValue(null);
setDateTimeValue(null);
};
var insertDate = function insertDate(date) {
setDateValue(date);
setTimeValue(!timeValue ? '00:00' : timeValue);
setDateTimeValue(!timeValue ? insertTimeToDate(date, '00:00') : insertTimeToDate(date, timeValue));
};
var removeTime = function removeTime() {
setTimeValue('00:00');
setDateTimeValue(dayjs(dateTimeValue).hour(0).minute(0).second(0).format('YYYY-MM-DDTHH:mm:ssZ'));
};
var insertTime = function insertTime(time) {
setTimeValue(time);
setDateTimeValue(insertTimeToDate(dateTimeValue, time));
};
return React__default.createElement(react.HStack, null, React__default.createElement(react.Box, null, React__default.createElement(DateInput, Object.assign({
id: id
}, props, {
onChange: function onChange(date) {
return lodash.isEmpty(date) ? removeDate() : insertDate(date.toString());
},
value: dateValue
}))), React__default.createElement(react.Box, null, React__default.createElement(TimeInput, {
id: id + "-time",
value: dateValue ? timeValue : undefined,
isDisabled: !dateTimeValue,
onChangeTime: function onChangeTime(time) {
return lodash.isEmpty(time) ? removeTime() : insertTime(time);
}
})));
};
var DateTimeOnlyInput = function DateTimeOnlyInput(_ref) {
var id = _ref.id,
_ref$initDate = _ref.initDate,
initDate = _ref$initDate === void 0 ? dayjs().hour(0).minute(0).toString() : _ref$initDate,
_ref$value = _ref.value,
value = _ref$value === void 0 ? null : _ref$value,
onChange = _ref.onChange,
props = _objectWithoutPropertiesLoose(_ref, ["id", "initDate", "value", "onChange"]);
var insertTimeToDate = function insertTimeToDate(date, time) {
var _time$split = time.split(':'),
hour = _time$split[0],
minute = _time$split[1];
return dayjs(date).hour(Number(hour)).minute(Number(minute)).format('YYYY-MM-DDTHH:mm:ssZ');
};
var _useState = React.useState(value ? value : initDate),
dateTimeValue = _useState[0],
setDateTimeValue = _useState[1];
var _useState2 = React.useState(value ? dayjs(value).format('HH:mm') : null),
timeValue = _useState2[0],
setTimeValue = _useState2[1];
React.useEffect(function () {
if (onChange) {
if (timeValue === null) {
return;
}
if (timeValue === '') {
onChange(dateTimeValue, '');
return;
}
onChange(insertTimeToDate(dateTimeValue, timeValue), timeValue);
}
}, [timeValue]);
var removeTime = function removeTime() {
setTimeValue('');
setDateTimeValue(dayjs(dateTimeValue).hour(0).minute(0).second(0).format('YYYY-MM-DDTHH:mm:ssZ').toString());
};
var insertTime = function insertTime(time) {
setTimeValue(time);
setDateTimeValue(insertTimeToDate(dateTimeValue, time));
};
return React__default.createElement(react.Box, null, React__default.createElement(TimeInput, Object.assign({
id: id,
value: value ? timeValue : undefined,
onChangeTime: function onChangeTime(time) {
return lodash.isEmpty(time) ? removeTime() : insertTime(time);
}
}, props)));
};
var Input = function Input(props) {
return React__default.createElement(react.Input, Object.assign({}, props));
};
var getValue = function getValue(value, isMulti) {
if (value === null || value === undefined) {
if (isMulti) {
return [];
}
return null;
}
return value;
};
var findOptions = function findOptions(selectedValues, options) {
if (options.length === 0) {
return [];
}
if (selectedValues.length === 0) {
return [];
}
return selectedValues.map(function (selectedValue) {
var result = options.find(function (option) {
return option.value === selectedValue;
});
if (result === undefined) {
return {
label: selectedValue,
value: selectedValue
};
}
return result;
});
};
var findOption = function findOption(selectedValue, options) {
if (selectedValue === null) {
return null;
}
if (selectedValue === '') {
return null;
}
if (typeof selectedValue === 'object') {
throw new Error("FormSelect: incorrect value type");
}
return options.find(function (option) {
if (typeof option.value === 'object') {
throw new Error("FormSelect: incorrect value type");
}
return option.value === selectedValue;
}) || {
label: selectedValue,
value: selectedValue
};
};
var getReadValue = function getReadValue(value, options, isMulti) {
if (isMulti) {
return findOptions(getValue(value, isMulti), options).map(function (opt) {
return opt.label;
}).join(', ');
}
var option = findOption(getValue(value, isMulti), options) || {
label: ''
};
return option.label;
};
var SelectInput = function SelectInput(_ref) {
var id = _ref.id,
isInvalid = _ref.isInvalid,
_ref$isClearable = _ref.isClearable,
isClearable = _ref$isClearable === void 0 ? true : _ref$isClearable,
_ref$noOptionsMessage = _ref.noOptionsMessage,
noOptionsMessage = _ref$noOptionsMessage === void 0 ? function () {
return 'No options';
} : _ref$noOptionsMessage,
_ref$loadingMessage = _ref.loadingMessage,
loadingMessage = _ref$loadingMessage === void 0 ? function () {
return 'Loading...';
} : _ref$loadingMessage,
props = _objectWithoutPropertiesLoose(_ref, ["id", "isInvalid", "isClearable", "noOptionsMessage", "loadingMessage"]);
var _useTheme = react.useTheme(),
colors = _useTheme.colors;
var textColor = react.useColorModeValue(colors.gray[700], colors.white);
var focusColor = react.useColorModeValue(colors.blue[500], colors.blue[300]);
var boxShadowColor = react.useColorModeValue(colors.gray[200], colors.gray[600]);
var multiValueLabelBg = react.useColorModeValue(colors.gray[100], colors.gray[400]);
var listBgColor = react.useColorModeValue(colors.white, colors.gray[700]);
var selectedBgColor = react.useColorModeValue(colors.blue[500], colors.blue[300]);
var invalidColor = react.useColorModeValue(colors.red[500], colors.red[300]);
var placeholderColor = react.useColorModeValue(colors.gray[400], colors.gray[600]);
var inputColor = react.useColorModeValue(colors.gray[900], colors.gray[100]);
return React__default.createElement(ReactSelect, Object.assign({
placeholder: "",
isClearable: isClearable,
noOptionsMessage: noOptionsMessage,
loadingMessage: loadingMessage,
className: "react-select-container",
classNamePrefix: "react-select",
inputId: id,
id: "select-container-" + id
}, props, {
styles: {
control: function control(base, _ref2) {
var isFocused = _ref2.isFocused,
isDisabled = _ref2.isDisabled;
return _extends({}, base, {
opacity: isDisabled ? '.55' : '1',
backgroundColor: 'transparent',
border: 'none',
outline: 'none',
boxShadow: "0 0 0 " + (isFocused || isInvalid ? '2px' : '1px') + " " + (isFocused ? focusColor : isInvalid ? invalidColor : boxShadowColor)
});
},
singleValue: function singleValue(base) {
return _extends({}, base, {
color: textColor
});
},
input: function input(base) {
return _extends({}, base, {
color: inputColor
});
},
indicatorsContainer: function indicatorsContainer(base) {
return _extends({}, base, {
color: 'red'
});
},
option: function option(base, _ref3) {
var isSelected = _ref3.isSelected;
return _extends({}, base, {
backgroundColor: isSelected ? selectedBgColor : listBgColor
});
},
menu: function menu(base) {
return _extends({}, base, {
backgroundColor: listBgColor
});
},
placeholder: function placeholder(base) {
return _extends({}, base, {
color: placeholderColor
});
},
multiValueLabel: function multiValueLabel(base) {
return _extends({}, base, {
backgroundColor: multiValueLabelBg
});
},
multiValueRemove: function multiValueRemove(base) {
return _extends({}, base, {
backgroundColor: multiValueLabelBg,
borderRadius: '0'
});
}
}
}));
};
var DateTimeField = function DateTimeField(_ref) {
var name = _ref.name,
label = _ref.label,
_ref$required = _ref.required,
required = _ref$required === void 0 ? true : _ref$required,
disabled = _ref.disabled,
helperText = _ref.helperText,
id = _ref.id,
tip = _ref.tip,
colSpan = _ref.colSpan,
colStart = _ref.colStart,
colEnd = _ref.colEnd,
rowSpan = _ref.rowSpan,
rowStart = _ref.rowStart,
rowEnd = _ref.rowEnd,
props = _objectWithoutPropertiesLoose(_ref, ["name", "label", "required", "disabled", "helperText", "id", "tip", "colSpan", "colStart", "colEnd", "rowSpan", "rowStart", "rowEnd"]);
return React__default.createElement(FieldPrototype, {
name: name,
isRequired: required,
isDisabled: disabled,
helperText: helperText,
tip: tip,
id: id,
label: label,
rowSpan: rowSpan,
rowStart: rowStart,
rowEnd: rowEnd,
colSpan: colSpan,
colStart: colStart,
colEnd: colEnd
}, function (_, fieldProps, _ref2) {
var isInvalid = _ref2.isInvalid;
return React__default.createElement(DateTimeInput, Object.assign({}, props, fieldProps, {
id: id,
isInvalid: isInvalid,
onChange: function onChange(dateTimeValue) {
fieldProps.onChange(dateTimeValue);
}
}));
});
};
var DateTimeOnlyField = function DateTimeOnlyField(_ref) {
var name = _ref.name,
label = _ref.label,
_ref$required = _ref.required,
required = _ref$required === void 0 ? true : _ref$required,
disabled = _ref.disabled,
helperText = _ref.helperText,
id = _ref.id,
tip = _ref.tip,
colSpan = _ref.colSpan,
colStart = _ref.colStart,
colEnd = _ref.colEnd,
rowSpan = _ref.rowSpan,
rowStart = _ref.rowStart,
rowEnd = _ref.rowEnd,
props = _objectWithoutPropertiesLoose(_ref, ["name", "label", "required", "disabled", "helperText", "id", "tip", "colSpan", "colStart", "colEnd", "rowSpan", "rowStart", "rowEnd"]);
return React__default.createElement(FieldPrototype, {
name: name,
isRequired: required,
isDisabled: disabled,
helperText: helperText,
tip: tip,
id: id,
label: label,
rowSpan: rowSpan,
rowStart: rowStart,
rowEnd: rowEnd,
colSpan: colSpan,
colStart: colStart,
colEnd: colEnd
}, function (_, fieldProps, _ref2) {
var isInvalid = _ref2.isInvalid;
return React__default.createElement(DateTimeOnlyInput, Object.assign({}, props, fieldProps, {
id: id,
isInvalid: isInvalid,
onChange: function onChange(dateTimeValue, timeValue) {
fieldProps.onChange(timeValue ? dateTimeValue : '');
}
}));
});
};
var InputField = function InputField(_ref) {
var name = _ref.name,
label = _ref.label,
_ref$required = _ref.required,
required = _ref$required === void 0 ? true : _ref$required,
disabled = _ref.disabled,
helperText = _ref.helperText,
id = _ref.id,
tip = _ref.tip,
as = _ref.as,
colSpan = _ref.colSpan,
colStart = _ref.colStart,
colEnd = _ref.colEnd,
rowSpan = _ref.rowSpan,
rowStart = _ref.rowStart,
rowEnd = _ref.rowEnd,
props = _objectWithoutPropertiesLoose(_ref, ["name", "label", "required", "disabled", "helperText", "id", "tip", "as", "colSpan", "colStart", "colEnd", "rowSpan", "rowStart", "rowEnd"]);
var invalidColor = react.useColorModeValue('red.500', 'red.300');
var validColor = react.useColorModeValue('green.500', 'green.300');
return React__default.createElement(FieldPrototype, {
name: name,
isRequired: required,
isDisabled: disabled,
helperText: helperText,
tip: tip,
id: id,
label: label,
colSpan: colSpan,
colStart: colStart,
colEnd: colEnd,
rowSpan: rowSpan,
rowStart: rowStart,
rowEnd: rowEnd
}, function (_ref2, fieldProps, _ref3) {
var touched = _ref2.formState.touched;
var isInvalid = _ref3.isInvalid;
var isTextarea = as === 'textarea';
var iconColor = isInvalid ? invalidColor : validColor;
return React__default.createElement(react.InputGroup, null, React__default.createElement(Input, Object.assign({}, props, fieldProps, {
as: isTextarea ? react.Textarea : as,
id: id
})), touched[name] && !isTextarea && React__default.createElement(react.InputRightElement, null, isInvalid ? React__default.createElement(icons.WarningIcon, {
color: iconColor,
w: "20px",
h: "20px"
}) : React__default.createElement(icons.CheckCircleIcon, {
color: iconColor,
w: "20px",
h: "20px"
})));
});
};
var MaskedInputField = function MaskedInputField(_ref) {
var name = _ref.name,
props = _objectWithoutPropertiesLoose(_ref, ["name"]);
var _useFormContext = reactHookForm.useFormContext(),
watch = _useFormContext.watch;
return React__default.createElement(InputField, Object.assign({
as: MaskedInput,
name: name,
value: watch(name),
guide: true
}, props));
};
var SelectField = function SelectField(_ref) {
var name = _ref.name,
label = _ref.label,
_ref$required = _ref.required,
required = _ref$required === void 0 ? true : _ref$required,
disabled = _ref.disabled,
helperText = _ref.helperText,
id = _ref.id,
tip = _ref.tip,
_ref$isMulti = _ref.isMulti,
isMulti = _ref$isMulti === void 0 ? false : _ref$isMulti,
options = _ref.options,
onChangeEffect = _ref.onChangeEffect,
colSpan = _ref.colSpan,
colStart = _ref.colStart,
colEnd = _ref.colEnd,
rowSpan = _ref.rowSpan,
rowStart = _ref.rowStart,
rowEnd = _ref.rowEnd,
_ref$requiredFieldMes = _ref.requiredFieldMessage,
requiredFieldMessage = _ref$requiredFieldMes === void 0 ? 'Field is required' : _ref$requiredFieldMes,
selectProps = _objectWithoutPropertiesLoose(_ref, ["name", "label", "required", "disabled", "helperText", "id", "tip", "isMulti", "options", "onChangeEffect", "colSpan", "colStart", "colEnd", "rowSpan", "rowStart", "rowEnd", "requiredFieldMessage"]);
return React__default.createElement(FieldPrototype, {
name: name,
isRequired: required,
isDisabled: disabled,
helperText: helperText,
tip: tip,
id: id,
label: label,
rowSpan: rowSpan,
rowStart: rowStart,
rowEnd: rowEnd,
colSpan: colSpan,
colStart: colStart,
colEnd: colEnd
}, function (_ref2, _ref3, _ref4) {
var isSubmitting = _ref2.formState.isSubmitting,
setValue = _ref2.setValue,
clearErrors = _ref2.clearErrors,
setError = _ref2.setError;
var value = _ref3.value,
fieldProps = _objectWithoutPropertiesLoose(_ref3, ["value"]);
var isInvalid = _ref4.isInvalid;
return React__default.createElement(SelectInput, Object.assign({
isDisabled: isSubmitting || disabled
}, fieldProps, selectProps, {
id: id,
isMulti: isMulti,
isInvalid: isInvalid,
options: options,
value: isMulti ? findOptions(getValue(value, true), options) : findOption(getValue(value, false), options),
onChange: function onChange(option) {
if (onChangeEffect) {
onChangeEffect(option);
}
if (option) {
clearErrors(name);
}
var onClear = function onClear() {
if (isMulti && required) {
setError(name, {
message: requiredFieldMessage
});
}
setValue(name, null, {
shouldDirty: true
});
};
if (!option) {
onClear();
return;
}
if (Array.isArray(option) && option.length === 0) {
onClear();
return;
}
if (Array.isArray(option)) {
setValue(name, option.map(function (opt) {
return opt.value;
}), {
shouldDirty: true
});
return;
}
setValue(name, option.value, {
shouldDirty: true
});
}
}));
});
};
var DateField = function DateField(_ref) {
var name = _ref.name,
label = _ref.label,
_ref$required = _ref.required,
required = _ref$required === void 0 ? true : _ref$required,
disabled = _ref.disabled,
helperText = _ref.helperText,
id = _ref.id,
tip = _ref.tip,
colSpan = _ref.colSpan,
colStart = _ref.colStart,
colEnd = _ref.colEnd,
rowSpan = _ref.rowSpan,
rowStart = _ref.rowStart,
rowEnd = _ref.rowEnd,
props = _objectWithoutPropertiesLoose(_ref, ["name", "label", "required", "disabled", "helperText", "id", "tip", "colSpan", "colStart", "colEnd", "rowSpan", "rowStart", "rowEnd"]);
return React__default.createElement(FieldPrototype, {
name: name,
isRequired: required,
isDisabled: disabled,
helperText: helperText,
tip: tip,
id: id,
label: label,
rowSpan: rowSpan,
rowStart: rowStart,
rowEnd: rowEnd,
colSpan: colSpan,
colStart: colStart,
colEnd: colEnd
}, function (_, fieldProps, _ref2) {
var isInvalid = _ref2.isInvalid;
return React__default.createElement(DateInput, Object.assign({
isInvalid: isInvalid,
id: id
}, props, fieldProps));
});
};
var MoneyField = function MoneyField(_ref) {
var name = _ref.name,
label = _ref.label,
_ref$required = _ref.required,
required = _ref$required === void 0 ? true : _ref$required,
disabled = _ref.disabled,
helperText = _ref.helperText,
id = _ref.id,
tip = _ref.tip,
css = _ref.css,
children = _ref.children,
colSpan = _ref.colSpan,
colStart = _ref.colStart,
colEnd = _ref.colEnd,
rowSpan = _ref.rowSpan,
rowStart = _ref.rowStart,
rowEnd = _ref.rowEnd,
props = _objectWithoutPropertiesLoose(_ref, ["name", "label", "required", "disabled", "helperText", "id", "tip", "css", "children", "colSpan", "colStart", "colEnd", "rowSpan", "rowStart", "rowEnd"]);
var invalidColor = react.useColorModeValue('red.500', 'red.300');
var validColor = react.useColorModeValue('green.500', 'green.300');
return React__default.createElement(FieldPrototype, {
name: name,
isRequired: required,
isDisabled: disabled,
helperText: helperText,
tip: tip,
id: id,
label: label,
css: css,
colSpan: colSpan,
colStart: colStart,
colEnd: colEnd,
rowSpan: rowSpan,
rowStart: rowStart,
rowEnd: rowEnd
}, function (_ref2, fieldProps, _ref3) {
var touched = _ref2.formState.touched;
var isInvalid = _ref3.isInvalid;
var iconColor = isInvalid ? invalidColor : validColor;
return React__default.createElement(react.InputGroup, null, React__default.createElement(react.Flex, {
w: "100%"
}, React__default.createElement(react.chakra.div, {
flex: children ? '.7' : '1'
}, React__default.createElement(MoneyInput, Object.assign({}, props, fieldProps, {
id: id
})), lodash.get(touched, name) && !children && React__default.createElement(react.InputRightElement, null, isInvalid ? React__default.createElement(icons.WarningIcon, {
color: iconColor,
w: "20px",
h: "20px"
}) : React__default.createElement(icons.CheckCircleIcon, {
color: iconColor,
w: "20px",
h: "20px"
}))), children && React__default.createElement(react.chakra.div, {
flex: ".3",
ml: 4
}, children)));
});
};
exports.DateField = DateField;
exports.DateInput = DateInput;
exports.DateTimeField = DateTimeField;
exports.DateTimeInput = DateTimeInput;
exports.DateTimeOnlyField = DateTimeOnlyField;
exports.DateTimeOnlyInput = DateTimeOnlyInput;
exports.FieldControl = FieldControl;
exports.FieldPrototype = FieldPrototype;
exports.Input = Input;
exports.InputField = InputField;
exports.MaskedInput = MaskedInput;
exports.MaskedInputField = MaskedInputField;
exports.MoneyField = MoneyField;
exports.MoneyInput = MoneyInput;
exports.SelectField = SelectField;
exports.SelectInput = SelectInput;
exports.TimeInput = TimeInput;
exports.findOption = findOption;
exports.findOptions = findOptions;
exports.getReadValue = getReadValue;
exports.getValue = getValue;
//# sourceMappingURL=react-hook-form-chakra-fields.cjs.development.js.map