intelicoreact 1.5.2 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js +77 -62
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.js +109 -0
- package/dist/Atomic/FormElements/InputMask3/InputMask3.js +27 -6
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +8 -1
- package/dist/Functions/utils.js +62 -2
- package/package.json +1 -1
|
@@ -9,94 +9,109 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _reactFeather = require("react-feather");
|
|
11
11
|
var _utils = require("../../../Functions/utils");
|
|
12
|
-
var
|
|
12
|
+
var _InputMask = _interopRequireDefault(require("../InputMask3/InputMask3"));
|
|
13
13
|
require("./FormattedRawSSN.scss");
|
|
14
14
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
15
|
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 && Object.prototype.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; }
|
|
16
|
+
const DEFAULT_SSN_MASK = "DDD-DD-DDDD";
|
|
17
|
+
const SIGNIFICANT_CHARACTERS = ['D'];
|
|
16
18
|
const FormattedRawSSN = _ref => {
|
|
17
|
-
var _value$substring;
|
|
18
19
|
let {
|
|
19
20
|
value = "",
|
|
20
|
-
postfix = "",
|
|
21
21
|
onChange: onChangeProp = () => {},
|
|
22
|
-
maskChar = "*",
|
|
23
22
|
testId,
|
|
23
|
+
// ! ВСЕ "пляшет" от fullSnnMask и significantChars
|
|
24
|
+
// Маска для полного snn (технически ограничений нет, НО нужно передавать то, что понимает InputMask3)
|
|
25
|
+
fullSnnMask = DEFAULT_SSN_MASK,
|
|
26
|
+
// Значащие символы в fullSnnMask
|
|
27
|
+
// Технически ограничений нет, НО нужно передавать
|
|
28
|
+
// - массив ОДИНОЧНЫХ символов
|
|
29
|
+
// - массив тех символов, которые правильно трактуются в InputMask3 (смотри InputMask3/config)
|
|
30
|
+
significantChars = SIGNIFICANT_CHARACTERS,
|
|
31
|
+
// Символ для маскировки
|
|
32
|
+
maskChar = "*",
|
|
33
|
+
// Инициализационное значение (сразу скрывать или нет)
|
|
24
34
|
isHiddenDefault = true,
|
|
35
|
+
// Максимальное значение ВВОДИМЫХ цифр
|
|
25
36
|
maxLen = 9,
|
|
37
|
+
// ? Речь о значащих символах
|
|
38
|
+
// Сколько из ПЕРВЫХ вводимых нужно прятать при включении мода маскировки
|
|
39
|
+
countOfFirstDigitsToHide = 5,
|
|
40
|
+
// ? Речь о значащих символах
|
|
41
|
+
// Статическая часть
|
|
42
|
+
postfix = "",
|
|
26
43
|
...args
|
|
27
44
|
} = _ref;
|
|
28
|
-
|
|
45
|
+
// ? Будем пользоваться своим (верхним относительно InputMask3) стейтом
|
|
46
|
+
// ? Это потребует отрисовки триггера "поверх" InputMask3.
|
|
29
47
|
const [isHidden, setIsHidden] = (0, _react.useState)(isHiddenDefault);
|
|
30
48
|
const wrapperRef = (0, _react.useRef)(null);
|
|
31
|
-
(0, _react.useEffect)(() => {
|
|
32
|
-
var _value$toString$subst, _value$toString;
|
|
33
|
-
setSSN((_value$toString$subst = value === null || value === void 0 || (_value$toString = value.toString()) === null || _value$toString === void 0 ? void 0 : _value$toString.substring(0, maxLen)) !== null && _value$toString$subst !== void 0 ? _value$toString$subst : "");
|
|
34
|
-
}, [value]);
|
|
35
49
|
const onChange = value => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const last = SSN.length - 1;
|
|
39
|
-
setSSN(SSN.slice(0, last));
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const numValue = value.replace(/\D/g, "");
|
|
43
|
-
let newSSN = "";
|
|
44
|
-
if (isHidden) {
|
|
45
|
-
if (SSN.length > 5) {
|
|
46
|
-
newSSN = SSN.slice(0, 5) + numValue;
|
|
47
|
-
} else {
|
|
48
|
-
newSSN = SSN + numValue;
|
|
49
|
-
}
|
|
50
|
-
} else {
|
|
51
|
-
newSSN = numValue;
|
|
52
|
-
}
|
|
53
|
-
if (newSSN.length > maxLen) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
setSSN(newSSN);
|
|
50
|
+
const newValue = !value && value !== "" ? '' : value === null || value === void 0 ? void 0 : value.toString();
|
|
51
|
+
onChangeProp(newValue);
|
|
57
52
|
};
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
53
|
+
|
|
54
|
+
// ? Пересчитываем маску с учетом переданного maxLen.
|
|
55
|
+
// ? Если maxLen меньше количества значащих символов в fullSnnMask, то маска корректно обрежется.
|
|
56
|
+
// ? Передаем опцию isOnlyMask: false, чтобы получить НЕ только новую маску, а еще и статистику.
|
|
57
|
+
// ? В этом случае приходит объект формата: { mask, countOfSignificantChars, countOfNotSignificantChars }
|
|
58
|
+
const infoAboutMask = (0, _utils.getLimitedMask)({
|
|
59
|
+
mask: fullSnnMask,
|
|
60
|
+
significantChars: significantChars,
|
|
61
|
+
limit: maxLen,
|
|
62
|
+
isOnlyMask: false
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// ? Расчитываем ИНДЕКС крайнего символа части маски, которая подлежит скрытию,
|
|
66
|
+
// ? исходя из countOfFirstDigitsToHide
|
|
67
|
+
const maxHiddenIndex = (() => {
|
|
68
|
+
// если не приводится к числу или ноль (передавать ноль лишено смысла)
|
|
69
|
+
if (isNaN(+countOfFirstDigitsToHide) || !+countOfFirstDigitsToHide) return -1;
|
|
70
|
+
// если больше чем значимых символов
|
|
71
|
+
if (countOfFirstDigitsToHide > infoAboutMask.countOfSignificantChars) return infoAboutMask.mask.length;
|
|
72
|
+
|
|
73
|
+
// ? Для расчетов получаем дополнительно корректно "обрезанную" маску (до уровня скрываемой части)
|
|
74
|
+
// ? на основе ранее полученной "обрезанной" по maxLen. Нам нужна НЕ сама маска, а статистика по ней.
|
|
75
|
+
// ? В частности - количество "незначащих" символов содержащихся в скрываемой части
|
|
76
|
+
const infoAboutMaskOfHidden = (0, _utils.getLimitedMask)({
|
|
77
|
+
mask: infoAboutMask.mask,
|
|
78
|
+
significantChars: significantChars,
|
|
79
|
+
limit: countOfFirstDigitsToHide,
|
|
80
|
+
isOnlyMask: false
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// ? Для InputMask3 maxHiddenIndex должен быть передан относительно длины ВСЕЙ применяемой маски (наша "обрезанная" по maxLen).
|
|
84
|
+
// ? Поэтому к количеству "скрываемых" символов добавляем количество "незначащих", входящих в скрываемую часть маски.
|
|
85
|
+
// ? Т.к. расчитываем НЕ длинну, а индекс - отнимаем 1
|
|
86
|
+
return countOfFirstDigitsToHide + infoAboutMaskOfHidden.countOfNotSignificantChars - 1;
|
|
87
|
+
})();
|
|
84
88
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
85
89
|
className: "formatted-raw-ssn",
|
|
86
90
|
ref: wrapperRef
|
|
87
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
88
|
-
value:
|
|
91
|
+
}, /*#__PURE__*/_react.default.createElement(_InputMask.default, (0, _extends2.default)({}, args, {
|
|
92
|
+
value: value,
|
|
89
93
|
onChange: onChange,
|
|
90
|
-
testId: "formattedRawSNN--input--key-".concat(testId)
|
|
94
|
+
testId: "formattedRawSNN--input--key-".concat(testId),
|
|
95
|
+
maskPattern: infoAboutMask.mask,
|
|
96
|
+
maskPlaceholder: "X",
|
|
97
|
+
focusSelector: "input",
|
|
98
|
+
isNumericMobileKeyboard: true,
|
|
99
|
+
blinkErrors: true,
|
|
100
|
+
showErrors: false,
|
|
101
|
+
withHiddenMode: true,
|
|
102
|
+
isValueHiddenDefault: isHiddenDefault,
|
|
103
|
+
hiddenChar: maskChar,
|
|
104
|
+
maxHiddenIndex: maxHiddenIndex,
|
|
105
|
+
isHide: isHidden
|
|
91
106
|
})), postfix && /*#__PURE__*/_react.default.createElement("span", {
|
|
92
107
|
className: "formatted-raw-ssn-postfix",
|
|
93
108
|
onClick: () => {
|
|
94
|
-
var _wrapperRef$
|
|
95
|
-
return wrapperRef === null || wrapperRef === void 0 || (_wrapperRef$
|
|
109
|
+
var _wrapperRef$current;
|
|
110
|
+
return wrapperRef === null || wrapperRef === void 0 || (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 || (_wrapperRef$current = _wrapperRef$current.querySelector("input")) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.focus();
|
|
96
111
|
}
|
|
97
112
|
}, postfix), /*#__PURE__*/_react.default.createElement("span", {
|
|
98
113
|
className: "formatted-raw-ssn-eye-holder",
|
|
99
|
-
onClick:
|
|
114
|
+
onClick: () => setIsHidden(!isHidden),
|
|
100
115
|
"data-testid": "formattedRawSNN--eye--key-".concat(testId, "--container")
|
|
101
116
|
}, " ", isHidden ? /*#__PURE__*/_react.default.createElement(_reactFeather.Eye, {
|
|
102
117
|
strokeWidth: 1,
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _reactFeather = require("react-feather");
|
|
11
|
+
var _utils = require("../../../Functions/utils");
|
|
12
|
+
var _Input = _interopRequireDefault(require("../Input/Input"));
|
|
13
|
+
require("./FormattedRawSSN.scss");
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
|
+
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 && Object.prototype.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; }
|
|
16
|
+
const FormattedRawSSN = _ref => {
|
|
17
|
+
var _value$substring;
|
|
18
|
+
let {
|
|
19
|
+
value = "",
|
|
20
|
+
postfix = "",
|
|
21
|
+
onChange: onChangeProp = () => {},
|
|
22
|
+
maskChar = "*",
|
|
23
|
+
testId,
|
|
24
|
+
isHiddenDefault = true,
|
|
25
|
+
maxLen = 9,
|
|
26
|
+
...args
|
|
27
|
+
} = _ref;
|
|
28
|
+
const [SSN, setSSN] = (0, _react.useState)((_value$substring = value === null || value === void 0 ? void 0 : value.substring(0, maxLen)) !== null && _value$substring !== void 0 ? _value$substring : "");
|
|
29
|
+
const [isHidden, setIsHidden] = (0, _react.useState)(isHiddenDefault);
|
|
30
|
+
const wrapperRef = (0, _react.useRef)(null);
|
|
31
|
+
(0, _react.useEffect)(() => {
|
|
32
|
+
var _value$toString$subst, _value$toString;
|
|
33
|
+
setSSN((_value$toString$subst = value === null || value === void 0 || (_value$toString = value.toString()) === null || _value$toString === void 0 ? void 0 : _value$toString.substring(0, maxLen)) !== null && _value$toString$subst !== void 0 ? _value$toString$subst : "");
|
|
34
|
+
}, [value]);
|
|
35
|
+
const onChange = value => {
|
|
36
|
+
if (!value && value !== "") return "";
|
|
37
|
+
if (value.replace(/-/g, "").length < SSN.length) {
|
|
38
|
+
const last = SSN.length - 1;
|
|
39
|
+
setSSN(SSN.slice(0, last));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const numValue = value.replace(/\D/g, "");
|
|
43
|
+
let newSSN = "";
|
|
44
|
+
if (isHidden) {
|
|
45
|
+
if (SSN.length > 5) {
|
|
46
|
+
newSSN = SSN.slice(0, 5) + numValue;
|
|
47
|
+
} else {
|
|
48
|
+
newSSN = SSN + numValue;
|
|
49
|
+
}
|
|
50
|
+
} else {
|
|
51
|
+
newSSN = numValue;
|
|
52
|
+
}
|
|
53
|
+
if (newSSN.length > maxLen) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
setSSN(newSSN);
|
|
57
|
+
};
|
|
58
|
+
const switchView = () => {
|
|
59
|
+
var _wrapperRef$current;
|
|
60
|
+
const input = wrapperRef === null || wrapperRef === void 0 || (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.querySelector("input");
|
|
61
|
+
input === null || input === void 0 || input.focus();
|
|
62
|
+
(0, _utils.setCarretToEnd)(input);
|
|
63
|
+
setIsHidden(!isHidden);
|
|
64
|
+
};
|
|
65
|
+
const getFormatedValue = v => {
|
|
66
|
+
if (!v) return "";
|
|
67
|
+
v = v.slice(0, 11).replace(/-/g, "");
|
|
68
|
+
if (v.length <= 3) {
|
|
69
|
+
return v;
|
|
70
|
+
}
|
|
71
|
+
if (v.length > 3 && v.length <= 5) {
|
|
72
|
+
return "".concat(v.slice(0, 3), "-").concat(v.slice(3));
|
|
73
|
+
}
|
|
74
|
+
if (v.length > 5) {
|
|
75
|
+
return "".concat(v.slice(0, 3), "-").concat(v.slice(3, 5), "-").concat(v.slice(5));
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const getMaskedValue = v => {
|
|
79
|
+
return isHidden ? v.slice(0, 7).replace(/[0-9]/g, maskChar).concat(v.slice(7)) : v;
|
|
80
|
+
};
|
|
81
|
+
(0, _react.useEffect)(() => {
|
|
82
|
+
if (SSN) onChangeProp === null || onChangeProp === void 0 || onChangeProp(SSN.concat(SSN.length === maxLen ? postfix : "").replace(/-/g, ""));
|
|
83
|
+
}, [SSN]);
|
|
84
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
85
|
+
className: "formatted-raw-ssn",
|
|
86
|
+
ref: wrapperRef
|
|
87
|
+
}, /*#__PURE__*/_react.default.createElement(_Input.default, (0, _extends2.default)({}, args, {
|
|
88
|
+
value: getMaskedValue(getFormatedValue(SSN)),
|
|
89
|
+
onChange: onChange,
|
|
90
|
+
testId: "formattedRawSNN--input--key-".concat(testId)
|
|
91
|
+
})), postfix && /*#__PURE__*/_react.default.createElement("span", {
|
|
92
|
+
className: "formatted-raw-ssn-postfix",
|
|
93
|
+
onClick: () => {
|
|
94
|
+
var _wrapperRef$current2;
|
|
95
|
+
return wrapperRef === null || wrapperRef === void 0 || (_wrapperRef$current2 = wrapperRef.current) === null || _wrapperRef$current2 === void 0 || (_wrapperRef$current2 = _wrapperRef$current2.querySelector("input")) === null || _wrapperRef$current2 === void 0 ? void 0 : _wrapperRef$current2.focus();
|
|
96
|
+
}
|
|
97
|
+
}, postfix), /*#__PURE__*/_react.default.createElement("span", {
|
|
98
|
+
className: "formatted-raw-ssn-eye-holder",
|
|
99
|
+
onClick: switchView,
|
|
100
|
+
"data-testid": "formattedRawSNN--eye--key-".concat(testId, "--container")
|
|
101
|
+
}, " ", isHidden ? /*#__PURE__*/_react.default.createElement(_reactFeather.Eye, {
|
|
102
|
+
strokeWidth: 1,
|
|
103
|
+
className: "password-icon"
|
|
104
|
+
}) : /*#__PURE__*/_react.default.createElement(_reactFeather.EyeOff, {
|
|
105
|
+
strokeWidth: 1,
|
|
106
|
+
className: "password-icon"
|
|
107
|
+
})));
|
|
108
|
+
};
|
|
109
|
+
var _default = exports.default = FormattedRawSSN;
|
|
@@ -35,10 +35,21 @@ function InputMask3() {
|
|
|
35
35
|
adaptTextCase,
|
|
36
36
|
isUseAutoSelect = true,
|
|
37
37
|
isLoading = false,
|
|
38
|
-
|
|
38
|
+
// Включает/отключает режим скрытия в принциепе.
|
|
39
39
|
withHiddenMode = false,
|
|
40
|
+
// Символ которым скрывааеются символы
|
|
41
|
+
hiddenChar = "*",
|
|
42
|
+
// Индекс последнего скрываемогосимвола
|
|
43
|
+
// Индекс нужно передавать с УЧЕТОМ не значащих символов маски,
|
|
44
|
+
// при этом не значащие символы скрываться НЕ будут
|
|
40
45
|
maxHiddenIndex = -1,
|
|
46
|
+
// Инициализационнное значение положения "скрыть" (если НЕ управляется сверху)
|
|
41
47
|
isValueHiddenDefault = false,
|
|
48
|
+
// ? Если передана как булева, то режим скрытия управляется ей, здешний триггер (глазик) НЕ рендерится
|
|
49
|
+
// ? Если НЕ передана ка булева, то режим скрытия обеспечиватся своим внутренним стором, здешний триггер (глазик) рендерится
|
|
50
|
+
isHide,
|
|
51
|
+
// булева пропа для управления сверху
|
|
52
|
+
|
|
42
53
|
icon,
|
|
43
54
|
showIcon,
|
|
44
55
|
isIconLeft,
|
|
@@ -81,7 +92,8 @@ function InputMask3() {
|
|
|
81
92
|
const [isFocused, setFocused] = (0, _react.useState)(false);
|
|
82
93
|
const [isInitValue, setIsInitValue] = (0, _react.useState)(false);
|
|
83
94
|
const [selectedLength, setSelectedLength] = (0, _react.useState)(0);
|
|
84
|
-
|
|
95
|
+
//? Если управляется сверху, то инициируемся текущим внешним значением
|
|
96
|
+
const [isValueHidden, setIsValueHidden] = (0, _react.useState)(typeof isHide === 'boolean' ? isHide : isValueHiddenDefault);
|
|
85
97
|
const inputRef = (0, _react.useRef)(null);
|
|
86
98
|
const keyDownRef = (0, _react.useRef)(null);
|
|
87
99
|
const setKeyDown = keyCode => keyDownRef.current = keyCode;
|
|
@@ -428,7 +440,9 @@ function InputMask3() {
|
|
|
428
440
|
}
|
|
429
441
|
const numValue = value.replace(/\D/g, "");
|
|
430
442
|
let newSSN = "";
|
|
431
|
-
|
|
443
|
+
|
|
444
|
+
//! maxHiddenIndex - это индекс, НЕ length. Поэтому нужно добавить 1
|
|
445
|
+
const staticLength = maxHiddenIndex !== -1 ? maxHiddenIndex + 1 : (_maskPattern3 = maskPattern) === null || _maskPattern3 === void 0 ? void 0 : _maskPattern3.length;
|
|
432
446
|
if (SSN.length > staticLength) {
|
|
433
447
|
newSSN = SSN.slice(0, staticLength) + numValue;
|
|
434
448
|
} else {
|
|
@@ -465,9 +479,11 @@ function InputMask3() {
|
|
|
465
479
|
setCaret(0);
|
|
466
480
|
clearErrorMessage();
|
|
467
481
|
};
|
|
468
|
-
const onHiddenToggle =
|
|
482
|
+
const onHiddenToggle = value => {
|
|
469
483
|
var _inputRef$current2;
|
|
470
|
-
|
|
484
|
+
// ? Добавлена возможность принудительной установки велью (опционально)
|
|
485
|
+
const newValue = typeof value === 'boolean' ? value : !isValueHidden;
|
|
486
|
+
setIsValueHidden(newValue);
|
|
471
487
|
inputRef === null || inputRef === void 0 || (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.focus();
|
|
472
488
|
};
|
|
473
489
|
const onFocus = () => {
|
|
@@ -550,6 +566,11 @@ function InputMask3() {
|
|
|
550
566
|
setError(customError !== "");
|
|
551
567
|
setErrorMessage(customError === "" ? errors.default : customError);
|
|
552
568
|
}, [customError, isError]);
|
|
569
|
+
(0, _react.useEffect)(() => {
|
|
570
|
+
if (typeof isHide === 'boolean') {
|
|
571
|
+
onHiddenToggle(isHide);
|
|
572
|
+
}
|
|
573
|
+
}, [isHide]);
|
|
553
574
|
|
|
554
575
|
/// --- RENDER ---///
|
|
555
576
|
|
|
@@ -677,7 +698,7 @@ function InputMask3() {
|
|
|
677
698
|
tabIndex: -1
|
|
678
699
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
679
700
|
className: "\n input-mask\n ".concat(isError ? "input-mask_error" : "", "\n ").concat(isFocused ? "input-mask_focus" : "", "\n ").concat(blinkError ? "input-mask_blink-error" : "", "\n ")
|
|
680
|
-
}, showHint && isHintLeft && renderHint(), isIconLeft && showIcon && renderIcon("left"), renderMask(), renderInput(), withHiddenMode && renderHideToggler(), isClearable && renderClearButton(), isIconRight && showIcon && renderIcon("right"), showHint && isHintRight && renderHint()), showErrors && errorMessage && /*#__PURE__*/_react.default.createElement("div", {
|
|
701
|
+
}, showHint && isHintLeft && renderHint(), isIconLeft && showIcon && renderIcon("left"), renderMask(), renderInput(), withHiddenMode && typeof isHide !== 'boolean' && renderHideToggler(), isClearable && renderClearButton(), isIconRight && showIcon && renderIcon("right"), showHint && isHintRight && renderHint()), showErrors && errorMessage && /*#__PURE__*/_react.default.createElement("div", {
|
|
681
702
|
className: "input-mask_error-text"
|
|
682
703
|
}, errorMessage), isLoading && /*#__PURE__*/_react.default.createElement(_Spinner.default, {
|
|
683
704
|
size: "small"
|
|
@@ -71,7 +71,14 @@ const WidgetWithSwitchableRows = props => {
|
|
|
71
71
|
label: cell.label
|
|
72
72
|
})
|
|
73
73
|
},
|
|
74
|
-
onChange: (
|
|
74
|
+
onChange: (key, value, propName, innerFieldKey, additional) => onChange({
|
|
75
|
+
value,
|
|
76
|
+
additional,
|
|
77
|
+
propName,
|
|
78
|
+
innerFieldKey,
|
|
79
|
+
key: cell.key || key,
|
|
80
|
+
rowId: row.id
|
|
81
|
+
})
|
|
75
82
|
})))))) : /*#__PURE__*/_react.default.createElement("div", {
|
|
76
83
|
className: (0, _classnames.default)("".concat(RC, "__row")),
|
|
77
84
|
"data-id": "empty-row"
|
package/dist/Functions/utils.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.disableDefaultBehavior = exports.debounce = exports.compareAlphabetical = exports.compare = exports.clone = exports.checkedRef = exports.changeMeta = exports.capitalized = exports.addBitDepthPoints = void 0;
|
|
8
8
|
exports.downloadEmulation = downloadEmulation;
|
|
9
|
-
exports.throttle = exports.setCarretToEnd = exports.renderFileSize = exports.omitKeys = exports.logout = exports.handleObjectChange = exports.getUniqueFileExtensions = exports.getStyles = exports.getResponseClone = exports.getOS = exports.getIsOnlyAnObject = exports.getCorrectTestId = exports.getColorById = exports.getBase64 = exports.firstLetterCapital = exports.downloadFile = void 0;
|
|
9
|
+
exports.throttle = exports.setCarretToEnd = exports.renderFileSize = exports.omitKeys = exports.logout = exports.handleObjectChange = exports.getUniqueFileExtensions = exports.getStyles = exports.getResponseClone = exports.getOS = exports.getLimitedMask = exports.getIsOnlyAnObject = exports.getCorrectTestId = exports.getColorById = exports.getBase64 = exports.firstLetterCapital = exports.downloadFile = void 0;
|
|
10
10
|
exports.transformDateOrTimeOrTogetherToFormat = transformDateOrTimeOrTogetherToFormat;
|
|
11
11
|
exports.transformDateOrTimeOrTogetherToFormattedLocal = transformDateOrTimeOrTogetherToFormattedLocal;
|
|
12
12
|
exports.transformLocalTimeToUTC = transformLocalTimeToUTC;
|
|
@@ -443,4 +443,64 @@ const getCorrectTestId = _ref3 => {
|
|
|
443
443
|
} = _ref3;
|
|
444
444
|
return testId && testId !== undefined ? "".concat(withTier ? "-" : "").concat(testId) : "";
|
|
445
445
|
};
|
|
446
|
-
|
|
446
|
+
|
|
447
|
+
//? Метод возращает корректно обрезанную маску с учетом лимита значащих символов
|
|
448
|
+
exports.getCorrectTestId = getCorrectTestId;
|
|
449
|
+
const getLimitedMask = props => {
|
|
450
|
+
const {
|
|
451
|
+
mask = '',
|
|
452
|
+
significantChars = [],
|
|
453
|
+
limit,
|
|
454
|
+
isOnlyMask = true
|
|
455
|
+
} = props;
|
|
456
|
+
|
|
457
|
+
// ? Проверяем основные входные пропы
|
|
458
|
+
if (typeof mask !== 'string' || !Array.isArray(significantChars) || !significantChars.every(item => typeof item === 'string' && item.length === 1)) {
|
|
459
|
+
// ? Если нужна только маска возвращаем никакую маску,
|
|
460
|
+
// ? иначе - объект с никакой маской и нулевой статистикой
|
|
461
|
+
return isOnlyMask ? '' : {
|
|
462
|
+
mask: '',
|
|
463
|
+
countOfSignificantChars: 0,
|
|
464
|
+
countOfNotSignificantChars: 0
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
// Ф-я расчёта количества "значащих" символов в маске
|
|
469
|
+
const getCountOfSignificantChars = mask => mask.split('').filter(sym => significantChars.includes(sym)).length;
|
|
470
|
+
|
|
471
|
+
// ? Расчитываем безопасный лимит
|
|
472
|
+
const safelyLimit = (() => {
|
|
473
|
+
const COUNT_OF_SIGNIFICANT_CHARS = getCountOfSignificantChars(mask);
|
|
474
|
+
|
|
475
|
+
//? Если нельзя привести к числу, то лимитом считаем ВСЕ "значащие" символы в маске
|
|
476
|
+
const outputLimit = isNaN(+limit) ? COUNT_OF_SIGNIFICANT_CHARS : +limit;
|
|
477
|
+
|
|
478
|
+
//? Если выходной лимит ноль или больше количества "значащих" символов в маске,
|
|
479
|
+
//? то лимитом считаем ВСЕ "значащие" символы в маске
|
|
480
|
+
if (!outputLimit || outputLimit > COUNT_OF_SIGNIFICANT_CHARS) return COUNT_OF_SIGNIFICANT_CHARS;
|
|
481
|
+
return outputLimit;
|
|
482
|
+
})();
|
|
483
|
+
|
|
484
|
+
// ? Корректно "обрезаем" маску с учетом того, сколько "значащих" символов должно в нее войти
|
|
485
|
+
const limitedMask = mask.split('').reduce((acc, sym) => {
|
|
486
|
+
// ? "Нарасчиваем" маску до тех пор, пока счетчик не достигнет лимита
|
|
487
|
+
if (acc.count < safelyLimit) {
|
|
488
|
+
acc.result += sym;
|
|
489
|
+
// ? Если добавленный символ "значащий" - увеличиваем счетчик
|
|
490
|
+
if (significantChars.includes(sym)) acc.count += 1;
|
|
491
|
+
}
|
|
492
|
+
return acc;
|
|
493
|
+
}, {
|
|
494
|
+
result: '',
|
|
495
|
+
count: 0
|
|
496
|
+
}).result;
|
|
497
|
+
|
|
498
|
+
// ? Если нужна только маска - возвращаем только маску,
|
|
499
|
+
// ? иначе - объект с новой маской и статистикой по ней
|
|
500
|
+
return isOnlyMask ? limitedMask : {
|
|
501
|
+
mask: limitedMask,
|
|
502
|
+
countOfSignificantChars: safelyLimit,
|
|
503
|
+
countOfNotSignificantChars: limitedMask.length - safelyLimit
|
|
504
|
+
};
|
|
505
|
+
};
|
|
506
|
+
exports.getLimitedMask = getLimitedMask;
|