UNPKG

@braineet/ui

Version:

Braineet design system

232 lines (231 loc) 10.1 kB
"use strict"; 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);