informed
Version:
A lightweight framework and utility for building powerful forms in React applications
70 lines (63 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
var React = require('react');
var useField = require('../../hooks/useField.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var _excluded = ["id", "onBlur", "multiple", "label", "options", "children"];
var Select = function Select(props) {
var _useField = useField.useField(props),
render = _useField.render,
userProps = _useField.userProps,
fieldState = _useField.fieldState,
fieldApi = _useField.fieldApi,
ref = _useField.ref;
var setValue = fieldApi.setValue,
setTouched = fieldApi.setTouched;
var value = fieldState.value,
showError = fieldState.showError,
error = fieldState.error;
var id = userProps.id,
_onBlur = userProps.onBlur,
multiple = userProps.multiple,
label = userProps.label,
options = userProps.options,
children = userProps.children,
rest = _rollupPluginBabelHelpers.objectWithoutProperties(userProps, _excluded);
var handleChange = function handleChange(e) {
var selected = Array.from(ref.current).filter(function (option) {
return option.selected;
}).map(function (option) {
return option.value;
});
setValue(multiple ? selected : selected[0] || '', e);
};
return render( /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, label ? /*#__PURE__*/React__default["default"].createElement("label", {
htmlFor: id
}, " ", label, " ") : null, /*#__PURE__*/React__default["default"].createElement("select", _rollupPluginBabelHelpers["extends"]({}, rest, {
id: id,
multiple: multiple,
ref: ref,
value: value || (multiple ? [] : ''),
"aria-invalid": !!showError,
"aria-describedby": "".concat(id, "-error"),
onChange: handleChange,
onBlur: function onBlur(e) {
setTouched(true);
if (_onBlur) {
_onBlur(e);
}
}
}), options ? options.map(function (option) {
return /*#__PURE__*/React__default["default"].createElement("option", {
key: option.value,
value: option.value,
disabled: option.disabled
}, option.label);
}) : children), showError ? /*#__PURE__*/React__default["default"].createElement("small", {
role: "alert",
id: "".concat(id, "-error")
}, error) : null));
};
exports.Select = Select;