UNPKG

@braineet/ui

Version:

Braineet design system

230 lines (228 loc) 10.5 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"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _extends() { _extends = Object.assign ? Object.assign.bind() : 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; } /** * The `Input` component. */ 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 = (0, _styledComponents.withTheme)(Input); exports.default = _default;