@bigbinary/neetoui
Version:
neetoUI drives the experience at all neeto products
141 lines (137 loc) • 5.65 kB
JavaScript
'use strict';
var _extends = require('@babel/runtime/helpers/extends');
var _typeof = require('@babel/runtime/helpers/typeof');
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
var React = require('react');
var formik = require('formik');
var neetoCist = require('@bigbinary/neeto-cist');
var ramda = require('ramda');
var Select = require('../Select.js');
require('@babel/runtime/helpers/defineProperty');
require('classnames');
require('@bigbinary/neeto-icons');
require('../react-select-creatable.esm-Bdv9YAMt.js');
require('@babel/runtime/helpers/esm/extends');
require('@babel/runtime/helpers/esm/objectSpread2');
require('@babel/runtime/helpers/esm/classCallCheck');
require('@babel/runtime/helpers/esm/createClass');
require('@babel/runtime/helpers/esm/inherits');
require('@babel/runtime/helpers/esm/createSuper');
require('@babel/runtime/helpers/esm/toConsumableArray');
require('@babel/runtime/helpers/esm/taggedTemplateLiteral');
require('@babel/runtime/helpers/esm/objectWithoutProperties');
require('@babel/runtime/helpers/esm/slicedToArray');
require('@babel/runtime/helpers/esm/typeof');
require('@babel/runtime/helpers/esm/defineProperty');
require('react-dom');
require('@babel/runtime/helpers/objectSpread2');
require('@babel/runtime/helpers/classCallCheck');
require('@babel/runtime/helpers/createClass');
require('@babel/runtime/helpers/inherits');
require('@babel/runtime/helpers/createSuper');
require('@babel/runtime/helpers/toConsumableArray');
require('@babel/runtime/helpers/taggedTemplateLiteral');
require('../useId-DXHUzdxd.js');
require('react-router-dom');
require('@bigbinary/neeto-hotkeys');
require('../overlayManager.js');
require('../index--BeRLo6L.js');
require('qs');
require('../en-K2ZIAV2F.js');
require('dayjs');
require('dayjs/plugin/localeData');
require('dayjs/plugin/utc');
require('dayjs/plugin/weekday');
require('dayjs/plugin/weekOfYear');
require('../Label.js');
require('../Button.js');
require('../Spinner.js');
require('../Tooltip.js');
require('@tippyjs/react');
require('tippy.js');
require('../Popover.js');
require('../Typography.js');
var _excluded = ["name", "options", "getOptionValue", "isMulti"];
var SelectField = /*#__PURE__*/React.forwardRef(function (props, ref) {
var _props$name = props.name,
name = _props$name === void 0 ? "" : _props$name,
_props$options = props.options,
options = _props$options === void 0 ? [] : _props$options,
_props$getOptionValue = props.getOptionValue,
getOptionValue = _props$getOptionValue === void 0 ? null : _props$getOptionValue,
_props$isMulti = props.isMulti,
isMulti = _props$isMulti === void 0 ? false : _props$isMulti,
otherProps = _objectWithoutProperties(props, _excluded);
var _useField = formik.useField(name),
_useField2 = _slicedToArray(_useField, 3),
field = _useField2[0],
meta = _useField2[1],
_useField2$ = _useField2[2],
setValue = _useField2$.setValue,
setTouched = _useField2$.setTouched;
var _useFormikContext = formik.useFormikContext(),
_useFormikContext$sta = _useFormikContext.status,
status = _useFormikContext$sta === void 0 ? {} : _useFormikContext$sta,
setStatus = _useFormikContext.setStatus;
var fieldStatus = formik.getIn(status, name);
var isMenuOpen = React.useRef(otherProps.defaultMenuIsOpen);
var getRealOptionValue = function getRealOptionValue(option) {
if (typeof getOptionValue !== "function") {
return option.value;
}
return getOptionValue(option);
};
var buildValueObj = function buildValueObj(value, options) {
if (_typeof(value) === "object") return value;
var isGrouped = neetoCist.existsBy({
options: Array.isArray
}, options);
var searchOptions = options;
if (isGrouped) {
searchOptions = ramda.flatten(ramda.pluck("options", options));
}
return searchOptions.filter(function (option) {
return getRealOptionValue(option) === value;
})[0];
};
return /*#__PURE__*/React.createElement(Select, _extends({
options: options,
error: meta.touched ? meta.error || fieldStatus : "",
getOptionValue: getOptionValue || ramda.prop("value"),
innerRef: ref,
isMulti: !!isMulti,
name: field.name,
value: ramda.either(ramda.isNil, ramda.isEmpty)(field.value) ? null : buildValueObj(field.value, options),
onBlur: function onBlur() {
return React.startTransition(function () {
setTouched(true);
});
},
onChange: function onChange(value) {
setStatus(ramda.dissoc(name, status));
setValue(value);
}
}, otherProps, {
onKeyDown: function onKeyDown(event) {
var _otherProps$onKeyDown;
if (event.key === "Enter" && isMenuOpen.current) {
event.stopPropagation();
}
(_otherProps$onKeyDown = otherProps.onKeyDown) === null || _otherProps$onKeyDown === void 0 || _otherProps$onKeyDown.call(otherProps, event);
},
onMenuClose: function onMenuClose() {
var _otherProps$onMenuClo;
isMenuOpen.current = false;
(_otherProps$onMenuClo = otherProps.onMenuClose) === null || _otherProps$onMenuClo === void 0 || _otherProps$onMenuClo.call(otherProps);
},
onMenuOpen: function onMenuOpen() {
var _otherProps$onMenuOpe;
isMenuOpen.current = true;
(_otherProps$onMenuOpe = otherProps.onMenuOpen) === null || _otherProps$onMenuOpe === void 0 || _otherProps$onMenuOpe.call(otherProps);
}
}));
});
SelectField.displayName = "SelectField";
module.exports = SelectField;
//# sourceMappingURL=Select.js.map