@braineet/ui
Version:
Braineet design system
232 lines (231 loc) • 10.1 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _formik = require("formik");
var _styledComponents = require("styled-components");
var _utils = require("../../utils");
var _styles = require("./styles");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["theme", "type", "disabled", "addonAfter", "field", "min", "max", "form", "step", "onKeyDown", "onChange", "autoRefresh", "onKeyUp", "debounce", "debouncedVal", "iconBefore", "height", "inputBoxStyle", "inputStyle", "currency", "locale", "wrapperProps"];
/* eslint-disable no-loss-of-precision */
/* eslint-disable no-useless-escape */
/* eslint-disable no-nested-ternary */
/* eslint-disable no-restricted-globals */
/**
* The `Input` component.
*/
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
var Input = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
var theme = _ref.theme,
type = _ref.type,
disabled = _ref.disabled,
addonAfter = _ref.addonAfter,
field = _ref.field,
min = _ref.min,
max = _ref.max,
form = _ref.form,
step = _ref.step,
onKeyDown = _ref.onKeyDown,
onChange = _ref.onChange,
autoRefresh = _ref.autoRefresh,
onKeyUp = _ref.onKeyUp,
debounce = _ref.debounce,
debouncedVal = _ref.debouncedVal,
iconBefore = _ref.iconBefore,
height = _ref.height,
inputBoxStyle = _ref.inputBoxStyle,
inputStyle = _ref.inputStyle,
currency = _ref.currency,
locale = _ref.locale,
wrapperProps = _ref.wrapperProps,
restProps = _objectWithoutPropertiesLoose(_ref, _excluded);
var _useState = (0, _react.useState)(false),
hasFocus = _useState[0],
setFocus = _useState[1];
var _useState2 = (0, _react.useState)(form && form.values ? (0, _formik.getIn)(form.values, field.name) : restProps.value),
value = _useState2[0],
setValue = _useState2[1];
var _useState3 = (0, _react.useState)(null),
valueEvent = _useState3[0],
setValueEvent = _useState3[1];
var valueDebounced = (0, _utils.useDebounce)(valueEvent, debouncedVal);
var valueEventDebounced = debounce ? valueDebounced : valueEvent;
(0, _react.useEffect)(function () {
var newVal = form && form.values ? (0, _formik.getIn)(form.values, field.name) : restProps.value;
if (newVal !== value && autoRefresh) {
setValue(newVal);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [form && form.values ? form.values : restProps.value]);
(0, _react.useEffect)(function () {
if (valueEventDebounced && valueEventDebounced.e) {
if (onChange) {
onChange(valueEventDebounced.e);
} else if (form && form.setFieldValue) {
form.setFieldValue(field.name, valueEventDebounced.valueTarget);
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [valueEventDebounced]);
var onKeyDownEnter = function onKeyDownEnter(e) {
if (e.keyCode === 13) {
if (!onChange && form && form.setFieldValue) {
form.setFieldValue(field.name, value);
}
}
if (onKeyDown) {
return onKeyDown(e);
}
};
var leadingZero = function leadingZero(v) {
var res = '';
if (v.indexOf('0') === 0 || v.indexOf('-0') === 0) {
for (var i = v[0] === '-' ? 1 : 0; i < v.length && v[i] === '0'; i += 1) {
res += '0';
}
}
return res;
};
var onChangeValue = function onChangeValue(e) {
e.persist();
var valueTarget = e.target.value;
var leadingZeroVal = '';
if ((type === 'number' || type === 'currency' || type === 'percentage') && valueTarget !== '-' && valueTarget !== '') {
leadingZeroVal = leadingZero(e.target.value);
var val = e.target.value.replace(',', '.').replace('..', '.');
if (step === 0) {
valueTarget = parseInt(val, 10);
} else {
valueTarget = parseFloat(val);
if (valueTarget === parseInt(val, 10) && val.indexOf('.') !== -1 && val.substr(val.indexOf('.')).length <= step) {
valueTarget += '.';
if (val.indexOf('.') + 1 < val.length && !isNaN(parseInt(val.substr(val.indexOf('.') + 1, step), 10))) {
valueTarget += parseInt(val.substr(val.indexOf('.') + 1, step), 10);
}
} else if (val.indexOf('.') !== -1) {
valueTarget = parseFloat(parseFloat(val).toFixed(step));
}
}
}
if ((min === null && max === null && !((type === 'number' || type === 'currency' || type === 'percentage') && isNaN(parseFloat("" + e.target.value) && e.target.value === '-' && e.target.value === '')) || (!isNaN(parseFloat("" + e.target.value)) || e.target.value === '-' || e.target.value === '') && min <= parseFloat("" + valueTarget) && max === null || (!isNaN(parseFloat("" + e.target.value)) || e.target.value === '-' || e.target.value === '') && min === null && max >= parseFloat("" + valueTarget) || (!isNaN(parseFloat("" + e.target.value)) || e.target.value === '-' || e.target.value === '') && min <= parseFloat("" + valueTarget) && max >= parseFloat("" + valueTarget) || e.target.value === '' || e.target.value === '-' && (min === null || min < 0)) && (type !== 'number' && type !== 'currency' && type !== 'percentage' || e.target.value === '-' || e.target.value === '' || parseFloat("" + valueTarget) < 9223372036854775807 && parseFloat("" + valueTarget) > -9223372036854775806)) {
var _val = "" + valueTarget;
if (_val.length && _val[0] === '-' && (type === 'number' || type === 'currency' || type === 'percentage')) {
if (_val === '-0') {
_val = "-" + leadingZeroVal;
} else {
_val = "-" + leadingZeroVal + _val.substr(1);
}
} else if (type === 'number' || type === 'currency' || type === 'percentage') {
if (_val === '0') {
_val = leadingZeroVal;
} else {
_val = leadingZeroVal + _val;
}
}
setValue(_val);
e.target.value = _val;
e.persist();
setValueEvent({
e: e,
valueTarget: _val
});
}
};
var error = (form == null ? void 0 : form.errors) && (field == null ? void 0 : field.name) && (0, _formik.getIn)(form.errors, field.name);
var touch = (form == null ? void 0 : form.touched) && (field == null ? void 0 : field.name) && (0, _formik.getIn)(form.touched, field.name);
var typeInput = ['text', 'email', 'password', 'hidden'].includes(type) ? type : 'text';
var valInput = form && form.values ? (0, _formik.getIn)(form.values, field.name) : restProps.value;
var localOnChange = function localOnChange(e) {
e.persist();
if (onKeyUp) {
onChange(e);
} else {
onChangeValue(e);
}
};
var localFormat = function localFormat(val) {
if (val === null || val === undefined || val === '') {
return val;
}
if (type === 'currency' && currency && locale) {
return (0, _utils.currencyFormat)(val, currency, locale, step).replace(/\s/g, ' ');
}
if (type === 'percentage') {
return val + " %";
}
return val;
};
var onBlur = function onBlur(e) {
setFocus(false);
if (restProps && restProps.onBlur) {
restProps.onBlur(e);
} else if (field && field.onBlur) {
field.onBlur(e);
}
};
var onFocus = function onFocus(e) {
setFocus(true);
if (restProps && restProps.onFocus) {
restProps.onFocus(e);
} else if (field && field.onFocus) {
field.onFocus(e);
}
};
var inputValue = !hasFocus ? localFormat(onKeyUp !== null ? valInput : value) : onKeyUp !== null ? valInput : value;
if (inputValue === null || inputValue === undefined) {
inputValue = '';
}
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_styles.StyledBox, _extends({
inputBoxStyle: inputBoxStyle
}, wrapperProps, {
children: [iconBefore && /*#__PURE__*/(0, _jsxRuntime.jsx)(_styles.StyledIconBefore, {
name: iconBefore
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_styles.StyledInput, _extends({
type: typeInput,
isInvalid: touch && error,
disabled: disabled,
onKeyDown: onKeyDownEnter,
onKeyUp: onKeyUp,
ref: ref
}, field, restProps, {
onBlur: onBlur,
onFocus: onFocus,
$height: height,
value: inputValue,
onChange: localOnChange,
iconBefore: !!iconBefore,
inputStyle: inputStyle,
min: min,
max: max
})), addonAfter]
}));
});
Input.defaultProps = {
addonAfter: null,
disabled: false,
debounce: true,
onKeyDown: null,
onKeyUp: null,
min: null,
max: null,
autoRefresh: false,
theme: {},
onChange: null,
debouncedVal: 300,
step: 0,
height: 40,
currency: 'EUR',
locale: 'en',
type: 'text',
field: null,
form: null,
iconBefore: null,
inputBoxStyle: {},
wrapperProps: {},
inputStyle: {}
};
var _default = exports.default = (0, _styledComponents.withTheme)(Input);