@salutejs/plasma-new-hope 0.194.0-canary.1562.11852874401.0 → 0.194.0-canary.1565.11870784206.0
Sign up to get free protection for your applications and to get access to all the features.
- package/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -0
- package/cjs/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
- package/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
- package/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js.map +1 -1
- package/cjs/components/Combobox/ComboboxOld/Combobox.css +4 -5
- package/cjs/components/Combobox/ComboboxOld/ui/ComboboxDivider/ComboboxDivider.css +4 -5
- package/cjs/components/Combobox/ComboboxOld/ui/ComboboxFooter/ComboboxFooter.css +4 -5
- package/cjs/components/Combobox/ComboboxOld/ui/ComboboxGroup/ComboboxGroup.css +4 -5
- package/cjs/components/Combobox/ComboboxOld/ui/ComboboxHeader/ComboboxHeader.css +4 -5
- package/cjs/components/Dropdown/Dropdown.css +4 -5
- package/cjs/components/Dropdown/Dropdown.js +2 -4
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.css +4 -5
- package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js +2 -3
- package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js.map +1 -1
- package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +1 -7
- package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js.map +1 -1
- package/cjs/components/Dropdown/ui/DropdownItem/{DropdownItem.styles_14yih1y.css → DropdownItem.styles_1b439rx.css} +0 -1
- package/cjs/components/Select/Select.js +1 -0
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/Select/ui/Inner/ui/Item/Item.js +2 -1
- package/cjs/components/Select/ui/Inner/ui/Item/Item.js.map +1 -1
- package/cjs/components/TextField/TextField.js +27 -3
- package/cjs/components/TextField/TextField.js.map +1 -1
- package/cjs/components/TextField/hooks/useValidation.js +273 -0
- package/cjs/components/TextField/hooks/useValidation.js.map +1 -0
- package/cjs/index.css +4 -5
- package/cjs/utils/constants.js +4 -0
- package/cjs/utils/constants.js.map +1 -1
- package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -0
- package/emotion/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
- package/emotion/cjs/components/Dropdown/Dropdown.js +2 -4
- package/emotion/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js +2 -3
- package/emotion/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +11 -15
- package/emotion/cjs/components/Select/Select.js +1 -0
- package/emotion/cjs/components/Select/ui/Inner/ui/Item/Item.js +2 -1
- package/emotion/cjs/components/TextField/TextField.js +27 -4
- package/emotion/cjs/components/TextField/TextField.template-doc.mdx +330 -0
- package/emotion/cjs/components/TextField/hooks/index.js +8 -1
- package/emotion/cjs/components/TextField/hooks/useValidation.js +276 -0
- package/emotion/cjs/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
- package/emotion/cjs/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
- package/emotion/cjs/utils/constants.js +4 -2
- package/emotion/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
- package/emotion/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
- package/emotion/es/components/Dropdown/Dropdown.js +2 -4
- package/emotion/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
- package/emotion/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +11 -15
- package/emotion/es/components/Select/Select.js +1 -0
- package/emotion/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
- package/emotion/es/components/TextField/TextField.js +28 -5
- package/emotion/es/components/TextField/TextField.template-doc.mdx +330 -0
- package/emotion/es/components/TextField/hooks/index.js +2 -1
- package/emotion/es/components/TextField/hooks/useValidation.js +270 -0
- package/emotion/es/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
- package/emotion/es/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
- package/emotion/es/utils/constants.js +3 -1
- package/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
- package/es/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
- package/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
- package/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js.map +1 -1
- package/es/components/Combobox/ComboboxOld/Combobox.css +4 -5
- package/es/components/Combobox/ComboboxOld/ui/ComboboxDivider/ComboboxDivider.css +4 -5
- package/es/components/Combobox/ComboboxOld/ui/ComboboxFooter/ComboboxFooter.css +4 -5
- package/es/components/Combobox/ComboboxOld/ui/ComboboxGroup/ComboboxGroup.css +4 -5
- package/es/components/Combobox/ComboboxOld/ui/ComboboxHeader/ComboboxHeader.css +4 -5
- package/es/components/Dropdown/Dropdown.css +4 -5
- package/es/components/Dropdown/Dropdown.js +2 -4
- package/es/components/Dropdown/Dropdown.js.map +1 -1
- package/es/components/Dropdown/ui/DropdownItem/DropdownItem.css +4 -5
- package/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
- package/es/components/Dropdown/ui/DropdownItem/DropdownItem.js.map +1 -1
- package/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -7
- package/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js.map +1 -1
- package/es/components/Dropdown/ui/DropdownItem/{DropdownItem.styles_14yih1y.css → DropdownItem.styles_1b439rx.css} +0 -1
- package/es/components/Select/Select.js +1 -0
- package/es/components/Select/Select.js.map +1 -1
- package/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
- package/es/components/Select/ui/Inner/ui/Item/Item.js.map +1 -1
- package/es/components/TextField/TextField.js +27 -3
- package/es/components/TextField/TextField.js.map +1 -1
- package/es/components/TextField/hooks/useValidation.js +269 -0
- package/es/components/TextField/hooks/useValidation.js.map +1 -0
- package/es/index.css +4 -5
- package/es/utils/constants.js +3 -1
- package/es/utils/constants.js.map +1 -1
- package/package.json +2 -3
- package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -0
- package/styled-components/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
- package/styled-components/cjs/components/Dropdown/Dropdown.js +2 -4
- package/styled-components/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js +2 -3
- package/styled-components/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -5
- package/styled-components/cjs/components/Select/Select.js +1 -0
- package/styled-components/cjs/components/Select/ui/Inner/ui/Item/Item.js +2 -1
- package/styled-components/cjs/components/TextField/TextField.js +26 -3
- package/styled-components/cjs/components/TextField/TextField.template-doc.mdx +330 -0
- package/styled-components/cjs/components/TextField/hooks/index.js +8 -1
- package/styled-components/cjs/components/TextField/hooks/useValidation.js +276 -0
- package/styled-components/cjs/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
- package/styled-components/cjs/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
- package/styled-components/cjs/utils/constants.js +4 -2
- package/styled-components/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
- package/styled-components/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
- package/styled-components/es/components/Dropdown/Dropdown.js +2 -4
- package/styled-components/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
- package/styled-components/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -5
- package/styled-components/es/components/Select/Select.js +1 -0
- package/styled-components/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
- package/styled-components/es/components/TextField/TextField.js +27 -4
- package/styled-components/es/components/TextField/TextField.template-doc.mdx +330 -0
- package/styled-components/es/components/TextField/hooks/index.js +2 -1
- package/styled-components/es/components/TextField/hooks/useValidation.js +270 -0
- package/styled-components/es/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
- package/styled-components/es/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
- package/styled-components/es/utils/constants.js +3 -1
- package/types/components/Autocomplete/Autocomplete.types.d.ts +2 -2
- package/types/components/Autocomplete/Autocomplete.types.d.ts.map +1 -1
- package/types/components/Autocomplete/ui/TextField/TextField.styles.d.ts +1676 -92
- package/types/components/Autocomplete/ui/TextField/TextField.styles.d.ts.map +1 -1
- package/types/components/Combobox/ComboboxNew/Combobox.d.ts.map +1 -1
- package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts +2 -1
- package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts.map +1 -1
- package/types/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.d.ts.map +1 -1
- package/types/components/Combobox/ComboboxNew/ui/Target/Target.styles.d.ts +1676 -92
- package/types/components/Combobox/ComboboxNew/ui/Target/Target.styles.d.ts.map +1 -1
- package/types/components/DatePicker/SingleDate/SingleDate.styles.d.ts +1676 -92
- package/types/components/DatePicker/SingleDate/SingleDate.styles.d.ts.map +1 -1
- package/types/components/Dropdown/Dropdown.d.ts +2 -50
- package/types/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/types/components/Dropdown/Dropdown.types.d.ts +6 -11
- package/types/components/Dropdown/Dropdown.types.d.ts.map +1 -1
- package/types/components/Dropdown/index.d.ts +0 -1
- package/types/components/Dropdown/index.d.ts.map +1 -1
- package/types/components/Dropdown/ui/DropdownItem/DropdownItem.d.ts.map +1 -1
- package/types/components/Dropdown/ui/DropdownItem/DropdownItem.styles.d.ts +0 -1
- package/types/components/Dropdown/ui/DropdownItem/DropdownItem.styles.d.ts.map +1 -1
- package/types/components/Range/Range.styles.d.ts +1676 -92
- package/types/components/Range/Range.styles.d.ts.map +1 -1
- package/types/components/Select/Select.d.ts.map +1 -1
- package/types/components/Select/Select.types.d.ts +2 -1
- package/types/components/Select/Select.types.d.ts.map +1 -1
- package/types/components/Select/ui/Inner/ui/Item/Item.d.ts.map +1 -1
- package/types/components/Select/ui/Target/ui/Textfield/Textfield.styles.d.ts +1676 -92
- package/types/components/Select/ui/Target/ui/Textfield/Textfield.styles.d.ts.map +1 -1
- package/types/components/Slider/components/Double/Double.styles.d.ts +1676 -92
- package/types/components/Slider/components/Double/Double.styles.d.ts.map +1 -1
- package/types/components/TextField/TextField.d.ts.map +1 -1
- package/types/components/TextField/TextField.types.d.ts +51 -1
- package/types/components/TextField/TextField.types.d.ts.map +1 -1
- package/types/components/TextField/hooks/index.d.ts +1 -0
- package/types/components/TextField/hooks/index.d.ts.map +1 -1
- package/types/components/TextField/hooks/useValidation.d.ts +7 -0
- package/types/components/TextField/hooks/useValidation.d.ts.map +1 -0
- package/types/examples/plasma_b2c/components/Autocomplete/Autocomplete.d.ts +64 -2
- package/types/examples/plasma_b2c/components/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/types/examples/plasma_b2c/components/Dropdown/Dropdown.d.ts +1 -25
- package/types/examples/plasma_b2c/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/types/examples/plasma_b2c/components/Mask/Mask.d.ts +2732 -92
- package/types/examples/plasma_b2c/components/Mask/Mask.d.ts.map +1 -1
- package/types/examples/plasma_b2c/components/TextField/TextField.d.ts +1676 -92
- package/types/examples/plasma_b2c/components/TextField/TextField.d.ts.map +1 -1
- package/types/examples/plasma_web/components/Autocomplete/Autocomplete.d.ts +64 -2
- package/types/examples/plasma_web/components/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/types/examples/plasma_web/components/Dropdown/Dropdown.d.ts +1 -25
- package/types/examples/plasma_web/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/types/examples/plasma_web/components/Mask/Mask.d.ts +2732 -92
- package/types/examples/plasma_web/components/Mask/Mask.d.ts.map +1 -1
- package/types/examples/plasma_web/components/TextField/TextField.d.ts +1676 -92
- package/types/examples/plasma_web/components/TextField/TextField.d.ts.map +1 -1
- package/types/utils/constants.d.ts +2 -0
- package/types/utils/constants.d.ts.map +1 -1
@@ -0,0 +1,276 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useValidation = void 0;
|
7
|
+
var _react = /*#__PURE__*/require("react");
|
8
|
+
var _utils = /*#__PURE__*/require("../../../utils");
|
9
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
10
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
11
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
12
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
13
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
14
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
15
|
+
var getUniqueKeys = function getUniqueKeys(lengthOptions) {
|
16
|
+
return lengthOptions.map(function (option) {
|
17
|
+
return option.replace(/min|max|Length/g, '');
|
18
|
+
});
|
19
|
+
};
|
20
|
+
var validateLenghtOptions = function validateLenghtOptions(options) {
|
21
|
+
var _options$minLength, _options$maxLength;
|
22
|
+
if (!options) {
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
var minHash = Object.keys(options).filter(function (key) {
|
26
|
+
return key.startsWith('min');
|
27
|
+
});
|
28
|
+
var maxHash = Object.keys(options).filter(function (key) {
|
29
|
+
return key.startsWith('max');
|
30
|
+
});
|
31
|
+
var minMaxUniqueKeys = (minHash === null || minHash === void 0 ? void 0 : minHash.length) >= (maxHash === null || maxHash === void 0 ? void 0 : maxHash.length) ? getUniqueKeys(minHash) : getUniqueKeys(maxHash);
|
32
|
+
var globalMinValue = Number(options === null || options === void 0 || (_options$minLength = options.minLength) === null || _options$minLength === void 0 ? void 0 : _options$minLength.value);
|
33
|
+
var globalMaxValue = Number(options === null || options === void 0 || (_options$maxLength = options.maxLength) === null || _options$maxLength === void 0 ? void 0 : _options$maxLength.value);
|
34
|
+
if (globalMinValue <= 0) {
|
35
|
+
console.error('minLength must be more than 0');
|
36
|
+
}
|
37
|
+
if (globalMaxValue <= 0) {
|
38
|
+
console.error('maxLength must be more than 0');
|
39
|
+
}
|
40
|
+
if (globalMaxValue <= globalMinValue) {
|
41
|
+
console.error('maxLength must be more than minLength');
|
42
|
+
}
|
43
|
+
minMaxUniqueKeys.forEach(function (key) {
|
44
|
+
var _options$optionMinKey, _options$optionMaxKey;
|
45
|
+
var optionMinKey = "min".concat(key, "Length");
|
46
|
+
var optionMaxKey = "max".concat(key, "Length");
|
47
|
+
var minValue = Number(options === null || options === void 0 || (_options$optionMinKey = options[optionMinKey]) === null || _options$optionMinKey === void 0 ? void 0 : _options$optionMinKey.value);
|
48
|
+
var maxValue = Number(options === null || options === void 0 || (_options$optionMaxKey = options[optionMaxKey]) === null || _options$optionMaxKey === void 0 ? void 0 : _options$optionMaxKey.value);
|
49
|
+
if (!minValue || minValue <= 0) {
|
50
|
+
console.error("".concat(optionMinKey, " must be more than 0"));
|
51
|
+
}
|
52
|
+
if (!maxValue || maxValue <= 0) {
|
53
|
+
console.error("".concat(optionMaxKey, " must be more than 0"));
|
54
|
+
}
|
55
|
+
if (maxValue <= minValue) {
|
56
|
+
console.error("".concat(optionMaxKey, " must be more than ").concat(optionMinKey));
|
57
|
+
}
|
58
|
+
});
|
59
|
+
};
|
60
|
+
var validateWithLengthOptions = function validateWithLengthOptions(value, options, optionKey) {
|
61
|
+
var _options$optionMinKey2, _options$optionMaxKey2;
|
62
|
+
var optionMinKey = "min".concat(optionKey, "Length");
|
63
|
+
var optionMaxKey = "max".concat(optionKey, "Length");
|
64
|
+
var minValue = Number((_options$optionMinKey2 = options[optionMinKey]) === null || _options$optionMinKey2 === void 0 ? void 0 : _options$optionMinKey2.value);
|
65
|
+
var maxValue = Number((_options$optionMaxKey2 = options[optionMaxKey]) === null || _options$optionMaxKey2 === void 0 ? void 0 : _options$optionMaxKey2.value);
|
66
|
+
if (minValue && value.length < minValue) {
|
67
|
+
var _options$optionMinKey3;
|
68
|
+
return {
|
69
|
+
isValid: false,
|
70
|
+
errorMessage: ((_options$optionMinKey3 = options[optionMinKey]) === null || _options$optionMinKey3 === void 0 ? void 0 : _options$optionMinKey3.errorMessage) || "".concat(optionMinKey, " is too short")
|
71
|
+
};
|
72
|
+
}
|
73
|
+
if (maxValue && value.length > maxValue) {
|
74
|
+
var _options$optionMaxKey3;
|
75
|
+
return {
|
76
|
+
isValid: false,
|
77
|
+
errorMessage: ((_options$optionMaxKey3 = options[optionMaxKey]) === null || _options$optionMaxKey3 === void 0 ? void 0 : _options$optionMaxKey3.errorMessage) || "".concat(optionMaxKey, " is too long")
|
78
|
+
};
|
79
|
+
}
|
80
|
+
return {
|
81
|
+
isValid: true
|
82
|
+
};
|
83
|
+
};
|
84
|
+
var validateEmailDomainsLists = function validateEmailDomainsLists(blacklistDomains, whitelistDomains) {
|
85
|
+
if (!(blacklistDomains !== null && blacklistDomains !== void 0 && blacklistDomains.length) || !(whitelistDomains !== null && whitelistDomains !== void 0 && whitelistDomains.length)) {
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
var uniqueDomains = new Set([].concat(_toConsumableArray(blacklistDomains), _toConsumableArray(whitelistDomains)));
|
89
|
+
if (uniqueDomains.size !== blacklistDomains.length + whitelistDomains.length) {
|
90
|
+
console.error('Blacklisted domains must not overlap whitelisted domains');
|
91
|
+
}
|
92
|
+
};
|
93
|
+
var validateWithDomainsLists = function validateWithDomainsLists(domainWithZone, options) {
|
94
|
+
var _options$whitelistDom, _options$blacklistDom, _options$blacklistDom2, _options$whitelistDom2;
|
95
|
+
if (!((_options$whitelistDom = options.whitelistDomains) !== null && _options$whitelistDom !== void 0 && (_options$whitelistDom = _options$whitelistDom.value) !== null && _options$whitelistDom !== void 0 && _options$whitelistDom.length) && !((_options$blacklistDom = options.blacklistDomains) !== null && _options$blacklistDom !== void 0 && (_options$blacklistDom = _options$blacklistDom.value) !== null && _options$blacklistDom !== void 0 && _options$blacklistDom.length)) {
|
96
|
+
return {
|
97
|
+
isValid: true
|
98
|
+
};
|
99
|
+
}
|
100
|
+
if (options !== null && options !== void 0 && (_options$blacklistDom2 = options.blacklistDomains) !== null && _options$blacklistDom2 !== void 0 && (_options$blacklistDom2 = _options$blacklistDom2.value) !== null && _options$blacklistDom2 !== void 0 && _options$blacklistDom2.includes(domainWithZone)) {
|
101
|
+
var _options$blacklistDom3;
|
102
|
+
return {
|
103
|
+
isValid: false,
|
104
|
+
errorMessage: ((_options$blacklistDom3 = options.blacklistDomains) === null || _options$blacklistDom3 === void 0 ? void 0 : _options$blacklistDom3.errorMessage) || 'Domain is blacklisted'
|
105
|
+
};
|
106
|
+
}
|
107
|
+
if (!(options !== null && options !== void 0 && (_options$whitelistDom2 = options.whitelistDomains) !== null && _options$whitelistDom2 !== void 0 && (_options$whitelistDom2 = _options$whitelistDom2.value) !== null && _options$whitelistDom2 !== void 0 && _options$whitelistDom2.includes(domainWithZone))) {
|
108
|
+
var _options$whitelistDom3;
|
109
|
+
return {
|
110
|
+
isValid: false,
|
111
|
+
errorMessage: ((_options$whitelistDom3 = options.whitelistDomains) === null || _options$whitelistDom3 === void 0 ? void 0 : _options$whitelistDom3.errorMessage) || 'Domain is not whitelisted'
|
112
|
+
};
|
113
|
+
}
|
114
|
+
return {
|
115
|
+
isValid: true
|
116
|
+
};
|
117
|
+
};
|
118
|
+
var validateEmail = function validateEmail(email, options) {
|
119
|
+
var _options$customEmailR, _options$minLength2, _options$maxLength2;
|
120
|
+
if (!email) {
|
121
|
+
return {
|
122
|
+
isValid: true
|
123
|
+
};
|
124
|
+
}
|
125
|
+
var emailRegex = (options === null || options === void 0 || (_options$customEmailR = options.customEmailRegex) === null || _options$customEmailR === void 0 ? void 0 : _options$customEmailR.value) || _utils.constants.emailPattern;
|
126
|
+
if (!emailRegex.test(email)) {
|
127
|
+
var _options$customEmailR2;
|
128
|
+
return {
|
129
|
+
isValid: false,
|
130
|
+
errorMessage: (options === null || options === void 0 || (_options$customEmailR2 = options.customEmailRegex) === null || _options$customEmailR2 === void 0 ? void 0 : _options$customEmailR2.errorMessage) || 'Invalid email'
|
131
|
+
};
|
132
|
+
}
|
133
|
+
if (!options) {
|
134
|
+
return {
|
135
|
+
isValid: true
|
136
|
+
};
|
137
|
+
}
|
138
|
+
if ((_options$minLength2 = options.minLength) !== null && _options$minLength2 !== void 0 && _options$minLength2.value && email.length < options.minLength.value) {
|
139
|
+
var _options$minLength3;
|
140
|
+
return {
|
141
|
+
isValid: false,
|
142
|
+
errorMessage: ((_options$minLength3 = options.minLength) === null || _options$minLength3 === void 0 ? void 0 : _options$minLength3.errorMessage) || 'Email is too short'
|
143
|
+
};
|
144
|
+
}
|
145
|
+
if ((_options$maxLength2 = options.maxLength) !== null && _options$maxLength2 !== void 0 && _options$maxLength2.value && email.length > options.maxLength.value) {
|
146
|
+
var _options$maxLength3;
|
147
|
+
return {
|
148
|
+
isValid: false,
|
149
|
+
errorMessage: ((_options$maxLength3 = options.maxLength) === null || _options$maxLength3 === void 0 ? void 0 : _options$maxLength3.errorMessage) || 'Email is too long'
|
150
|
+
};
|
151
|
+
}
|
152
|
+
var emailHost = email.split('@')[0];
|
153
|
+
var emailDomainWithZone = email.split('@')[1];
|
154
|
+
var emailZone = emailDomainWithZone.split('.').pop();
|
155
|
+
if (!(emailZone !== null && emailZone !== void 0 && emailZone.length)) {
|
156
|
+
var _options$customEmailR3;
|
157
|
+
return {
|
158
|
+
isValid: false,
|
159
|
+
errorMessage: ((_options$customEmailR3 = options.customEmailRegex) === null || _options$customEmailR3 === void 0 ? void 0 : _options$customEmailR3.errorMessage) || 'Invalid email'
|
160
|
+
};
|
161
|
+
}
|
162
|
+
var emailDomain = emailDomainWithZone.substring(0, emailDomainWithZone.length - (emailZone.length + 1));
|
163
|
+
var hostValidation = validateWithLengthOptions(emailHost, options, 'Host');
|
164
|
+
if (!hostValidation.isValid) {
|
165
|
+
return hostValidation;
|
166
|
+
}
|
167
|
+
var domainValidation = validateWithLengthOptions(emailDomain, options, 'Domain');
|
168
|
+
if (!domainValidation.isValid) {
|
169
|
+
return domainValidation;
|
170
|
+
}
|
171
|
+
var zoneValidation = validateWithLengthOptions(emailZone, options, 'Zone');
|
172
|
+
if (!zoneValidation.isValid) {
|
173
|
+
return zoneValidation;
|
174
|
+
}
|
175
|
+
var domainWithZoneValidation = validateWithDomainsLists(emailDomainWithZone, options);
|
176
|
+
if (!domainWithZoneValidation.isValid) {
|
177
|
+
return domainWithZoneValidation;
|
178
|
+
}
|
179
|
+
return {
|
180
|
+
isValid: true
|
181
|
+
};
|
182
|
+
};
|
183
|
+
var validatePassword = function validatePassword(password, options) {
|
184
|
+
var _options$minLength4, _options$maxLength4, _options$includeUpper, _options$includeLower, _options$includeDigit, _options$includeSpeci;
|
185
|
+
if (!password || !options) {
|
186
|
+
return {
|
187
|
+
isValid: true
|
188
|
+
};
|
189
|
+
}
|
190
|
+
if ((_options$minLength4 = options.minLength) !== null && _options$minLength4 !== void 0 && _options$minLength4.value && password.length < options.minLength.value) {
|
191
|
+
var _options$minLength5;
|
192
|
+
return {
|
193
|
+
isValid: false,
|
194
|
+
errorMessage: ((_options$minLength5 = options.minLength) === null || _options$minLength5 === void 0 ? void 0 : _options$minLength5.errorMessage) || 'Password is too short'
|
195
|
+
};
|
196
|
+
}
|
197
|
+
if ((_options$maxLength4 = options.maxLength) !== null && _options$maxLength4 !== void 0 && _options$maxLength4.value && password.length > options.maxLength.value) {
|
198
|
+
var _options$maxLength5;
|
199
|
+
return {
|
200
|
+
isValid: false,
|
201
|
+
errorMessage: ((_options$maxLength5 = options.maxLength) === null || _options$maxLength5 === void 0 ? void 0 : _options$maxLength5.errorMessage) || 'Password is too long'
|
202
|
+
};
|
203
|
+
}
|
204
|
+
var lowercasedPassword = password.toLowerCase();
|
205
|
+
var uppercasedPassword = password.toUpperCase();
|
206
|
+
if ((_options$includeUpper = options.includeUppercase) !== null && _options$includeUpper !== void 0 && _options$includeUpper.value && password === lowercasedPassword) {
|
207
|
+
var _options$includeUpper2;
|
208
|
+
return {
|
209
|
+
isValid: false,
|
210
|
+
errorMessage: ((_options$includeUpper2 = options.includeUppercase) === null || _options$includeUpper2 === void 0 ? void 0 : _options$includeUpper2.errorMessage) || 'Password must contain at least one uppercase letter'
|
211
|
+
};
|
212
|
+
}
|
213
|
+
if ((_options$includeLower = options.includeLowercase) !== null && _options$includeLower !== void 0 && _options$includeLower.value && password === uppercasedPassword) {
|
214
|
+
var _options$includeLower2;
|
215
|
+
return {
|
216
|
+
isValid: false,
|
217
|
+
errorMessage: ((_options$includeLower2 = options.includeLowercase) === null || _options$includeLower2 === void 0 ? void 0 : _options$includeLower2.errorMessage) || 'Password must contain at least one lowercase letter'
|
218
|
+
};
|
219
|
+
}
|
220
|
+
if ((_options$includeDigit = options.includeDigits) !== null && _options$includeDigit !== void 0 && _options$includeDigit.value && !/\d/.test(password)) {
|
221
|
+
var _options$includeDigit2;
|
222
|
+
return {
|
223
|
+
isValid: false,
|
224
|
+
errorMessage: ((_options$includeDigit2 = options.includeDigits) === null || _options$includeDigit2 === void 0 ? void 0 : _options$includeDigit2.errorMessage) || 'Password must contain digits'
|
225
|
+
};
|
226
|
+
}
|
227
|
+
if ((_options$includeSpeci = options.includeSpecialSymbols) !== null && _options$includeSpeci !== void 0 && _options$includeSpeci.value && !_utils.constants.specialCharacters.test(password)) {
|
228
|
+
var _options$includeSpeci2;
|
229
|
+
return {
|
230
|
+
isValid: false,
|
231
|
+
errorMessage: ((_options$includeSpeci2 = options.includeSpecialSymbols) === null || _options$includeSpeci2 === void 0 ? void 0 : _options$includeSpeci2.errorMessage) || 'Password must contain special characters'
|
232
|
+
};
|
233
|
+
}
|
234
|
+
return {
|
235
|
+
isValid: true
|
236
|
+
};
|
237
|
+
};
|
238
|
+
var validationVariants = {
|
239
|
+
email: validateEmail,
|
240
|
+
password: validatePassword
|
241
|
+
};
|
242
|
+
var useValidation = exports.useValidation = function useValidation(_ref) {
|
243
|
+
var validationType = _ref.validationType,
|
244
|
+
options = _ref.options,
|
245
|
+
onValidate = _ref.onValidate;
|
246
|
+
var handleValidationBlur = function handleValidationBlur(event) {
|
247
|
+
if (!validationType) {
|
248
|
+
return;
|
249
|
+
}
|
250
|
+
var validationResult = validationVariants[validationType](event.target.value, options);
|
251
|
+
onValidate === null || onValidate === void 0 || onValidate(validationResult);
|
252
|
+
};
|
253
|
+
var handleValidationKeyDown = function handleValidationKeyDown(event) {
|
254
|
+
if (!validationType) {
|
255
|
+
return;
|
256
|
+
}
|
257
|
+
if (event.keyCode === _utils.constants.keyCodes.Enter) {
|
258
|
+
event.preventDefault();
|
259
|
+
var _ref2 = event.target,
|
260
|
+
value = _ref2.value;
|
261
|
+
var validationResult = validationVariants[validationType](value, options);
|
262
|
+
onValidate === null || onValidate === void 0 || onValidate(validationResult);
|
263
|
+
}
|
264
|
+
};
|
265
|
+
(0, _react.useEffect)(function () {
|
266
|
+
validateLenghtOptions(options);
|
267
|
+
if (validationType === 'email') {
|
268
|
+
var _whitelistDomains, _blacklistDomains;
|
269
|
+
validateEmailDomainsLists(options === null || options === void 0 || (_whitelistDomains = options.whitelistDomains) === null || _whitelistDomains === void 0 ? void 0 : _whitelistDomains.value, (_blacklistDomains = options.blacklistDomains) === null || _blacklistDomains === void 0 ? void 0 : _blacklistDomains.value);
|
270
|
+
}
|
271
|
+
}, []);
|
272
|
+
return {
|
273
|
+
handleValidationBlur: handleValidationBlur,
|
274
|
+
handleValidationKeyDown: handleValidationKeyDown
|
275
|
+
};
|
276
|
+
};
|
package/styled-components/cjs/examples/plasma_b2c/components/TextField/TextField.stories.tsx
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import React, { ComponentProps, useState } from 'react';
|
2
2
|
import type { StoryObj, Meta } from '@storybook/react';
|
3
3
|
import { action } from '@storybook/addon-actions';
|
4
|
-
import { IconPlaceholder } from '@salutejs/plasma-sb-utils';
|
4
|
+
import { disableProps, IconPlaceholder } from '@salutejs/plasma-sb-utils';
|
5
5
|
|
6
6
|
import { WithTheme } from '../../../_helpers';
|
7
7
|
import { IconCross } from '../../../../components/_Icon';
|
@@ -291,3 +291,255 @@ export const Chips: StoryObj<StoryPropsChips> = {
|
|
291
291
|
},
|
292
292
|
render: (args) => <StoryChips {...args} />,
|
293
293
|
};
|
294
|
+
|
295
|
+
type StoryEmailValidationProps = StoryPropsDefault & {
|
296
|
+
minLengthValue?: number;
|
297
|
+
minLengthErrorMessage?: string;
|
298
|
+
maxLengthValue?: number;
|
299
|
+
maxLengthErrorMessage?: string;
|
300
|
+
minHostLengthValue?: number;
|
301
|
+
minHostLengthErrorMessage?: string;
|
302
|
+
maxHostLengthValue?: number;
|
303
|
+
maxHostLengthErrorMessage?: string;
|
304
|
+
minDomainLengthValue?: number;
|
305
|
+
minDomainLengthErrorMessage?: string;
|
306
|
+
maxDomainLengthValue?: number;
|
307
|
+
maxDomainLengthErrorMessage?: string;
|
308
|
+
minZoneLengthValue?: number;
|
309
|
+
minZoneLengthErrorMessage?: string;
|
310
|
+
maxZoneLengthValue?: number;
|
311
|
+
maxZoneLengthErrorMessage?: string;
|
312
|
+
whitelistDomainsValue?: string;
|
313
|
+
whitelistDomainsErrorMessage?: string;
|
314
|
+
blacklistDomainsValue?: string;
|
315
|
+
blacklistDomainsErrorMessage?: string;
|
316
|
+
};
|
317
|
+
|
318
|
+
const StoryEmailValidation = ({
|
319
|
+
minLengthValue,
|
320
|
+
minLengthErrorMessage,
|
321
|
+
maxLengthValue,
|
322
|
+
maxLengthErrorMessage,
|
323
|
+
minHostLengthValue,
|
324
|
+
minHostLengthErrorMessage,
|
325
|
+
maxHostLengthValue,
|
326
|
+
maxHostLengthErrorMessage,
|
327
|
+
minDomainLengthValue,
|
328
|
+
minDomainLengthErrorMessage,
|
329
|
+
maxDomainLengthValue,
|
330
|
+
maxDomainLengthErrorMessage,
|
331
|
+
minZoneLengthValue,
|
332
|
+
minZoneLengthErrorMessage,
|
333
|
+
maxZoneLengthValue,
|
334
|
+
maxZoneLengthErrorMessage,
|
335
|
+
whitelistDomainsValue,
|
336
|
+
whitelistDomainsErrorMessage,
|
337
|
+
blacklistDomainsValue,
|
338
|
+
blacklistDomainsErrorMessage,
|
339
|
+
...rest
|
340
|
+
}: StoryEmailValidationProps) => {
|
341
|
+
const [error, setError] = useState('');
|
342
|
+
|
343
|
+
const validationOptions = {
|
344
|
+
minLength: {
|
345
|
+
value: minLengthValue || undefined,
|
346
|
+
errorMessage: minLengthErrorMessage || 'Почта слишком короткая',
|
347
|
+
},
|
348
|
+
maxLength: {
|
349
|
+
value: maxLengthValue || undefined,
|
350
|
+
errorMessage: maxLengthErrorMessage || 'Почта слишком длинная',
|
351
|
+
},
|
352
|
+
minHostLength: {
|
353
|
+
value: minHostLengthValue || undefined,
|
354
|
+
errorMessage: minHostLengthErrorMessage || 'Хост слишком короткий',
|
355
|
+
},
|
356
|
+
maxHostLength: {
|
357
|
+
value: maxHostLengthValue || undefined,
|
358
|
+
errorMessage: maxHostLengthErrorMessage || 'Хост слишком длинный',
|
359
|
+
},
|
360
|
+
minDomainLength: {
|
361
|
+
value: minDomainLengthValue || undefined,
|
362
|
+
errorMessage: minDomainLengthErrorMessage || 'Домен слишком короткий',
|
363
|
+
},
|
364
|
+
maxDomainLength: {
|
365
|
+
value: maxDomainLengthValue || undefined,
|
366
|
+
errorMessage: maxDomainLengthErrorMessage || 'Домен слишком длинный',
|
367
|
+
},
|
368
|
+
minZoneLength: {
|
369
|
+
value: minZoneLengthValue || undefined,
|
370
|
+
errorMessage: minZoneLengthErrorMessage || 'Доменная зона слишком короткая',
|
371
|
+
},
|
372
|
+
maxZoneLength: {
|
373
|
+
value: maxZoneLengthValue || undefined,
|
374
|
+
errorMessage: maxZoneLengthErrorMessage || 'Доменная зона слишком длинная',
|
375
|
+
},
|
376
|
+
whitelistDomains: {
|
377
|
+
value: whitelistDomainsValue?.split(',') || undefined,
|
378
|
+
errorMessage: whitelistDomainsErrorMessage || 'Домен не разрешен',
|
379
|
+
},
|
380
|
+
blacklistDomains: {
|
381
|
+
value: blacklistDomainsValue?.split(',') || undefined,
|
382
|
+
errorMessage: blacklistDomainsErrorMessage || 'Домен запрещен',
|
383
|
+
},
|
384
|
+
};
|
385
|
+
|
386
|
+
const handleOnChange = () => {
|
387
|
+
setError('');
|
388
|
+
};
|
389
|
+
|
390
|
+
const handleOnValidate = ({ errorMessage }: { errorMessage?: string }) => {
|
391
|
+
setError(errorMessage || '');
|
392
|
+
};
|
393
|
+
|
394
|
+
return (
|
395
|
+
<TextField
|
396
|
+
label="Валидация почты"
|
397
|
+
validationType="email"
|
398
|
+
options={validationOptions}
|
399
|
+
size="l"
|
400
|
+
view={error ? 'negative' : 'default'}
|
401
|
+
leftHelper={error || 'Валидация почты'}
|
402
|
+
onChange={handleOnChange}
|
403
|
+
onValidate={handleOnValidate}
|
404
|
+
{...rest}
|
405
|
+
/>
|
406
|
+
);
|
407
|
+
};
|
408
|
+
|
409
|
+
export const EmailValidation: StoryObj<StoryEmailValidationProps> = {
|
410
|
+
argTypes: {
|
411
|
+
...disableProps(['view', 'size', 'maxLength', 'required', 'requiredPlacement', 'optional']),
|
412
|
+
},
|
413
|
+
args: {
|
414
|
+
labelPlacement: 'outer',
|
415
|
+
placeholder: 'Заполните поле',
|
416
|
+
minLengthValue: 5,
|
417
|
+
minLengthErrorMessage: 'Почта слишком короткая',
|
418
|
+
maxLengthValue: 25,
|
419
|
+
maxLengthErrorMessage: 'Почта слишком длинная',
|
420
|
+
minHostLengthValue: 1,
|
421
|
+
minHostLengthErrorMessage: 'Хост слишком короткий',
|
422
|
+
maxHostLengthValue: 12,
|
423
|
+
maxHostLengthErrorMessage: 'Хост слишком длинный',
|
424
|
+
minDomainLengthValue: 1,
|
425
|
+
minDomainLengthErrorMessage: 'Домен слишком короткий',
|
426
|
+
maxDomainLengthValue: 6,
|
427
|
+
maxDomainLengthErrorMessage: 'Домен слишком длинный',
|
428
|
+
minZoneLengthValue: 1,
|
429
|
+
minZoneLengthErrorMessage: 'Доменная зона слишком короткая',
|
430
|
+
maxZoneLengthValue: 5,
|
431
|
+
maxZoneLengthErrorMessage: 'Доменная зона слишком длинная',
|
432
|
+
whitelistDomainsValue: 'gmail.com,yandex.ru,mail.ru,mail.com',
|
433
|
+
whitelistDomainsErrorMessage: 'Домен не разрешен',
|
434
|
+
blacklistDomainsValue: 'heh.org,hah.ha',
|
435
|
+
blacklistDomainsErrorMessage: 'Домен запрещен',
|
436
|
+
},
|
437
|
+
render: (args) => <StoryEmailValidation {...args} />,
|
438
|
+
};
|
439
|
+
|
440
|
+
type StoryPasswordValidationProps = StoryPropsDefault & {
|
441
|
+
minLengthValue?: number;
|
442
|
+
minLengthErrorMessage?: string;
|
443
|
+
maxLengthValue?: number;
|
444
|
+
maxLengthErrorMessage?: string;
|
445
|
+
includeUppercase?: boolean;
|
446
|
+
includeUppercaseErrorMessage?: string;
|
447
|
+
includeLowercase?: boolean;
|
448
|
+
includeLowercaseErrorMessage?: string;
|
449
|
+
includeDigits?: boolean;
|
450
|
+
includeDigitsErrorMessage?: string;
|
451
|
+
includeSpecialSymbols?: boolean;
|
452
|
+
includeSpecialSymbolsErrorMessage?: string;
|
453
|
+
};
|
454
|
+
|
455
|
+
const StoryPasswordValidation = ({
|
456
|
+
minLengthValue,
|
457
|
+
minLengthErrorMessage,
|
458
|
+
maxLengthValue,
|
459
|
+
maxLengthErrorMessage,
|
460
|
+
includeUppercase,
|
461
|
+
includeUppercaseErrorMessage,
|
462
|
+
includeLowercase,
|
463
|
+
includeLowercaseErrorMessage,
|
464
|
+
includeDigits,
|
465
|
+
includeDigitsErrorMessage,
|
466
|
+
includeSpecialSymbols,
|
467
|
+
includeSpecialSymbolsErrorMessage,
|
468
|
+
...rest
|
469
|
+
}: StoryPasswordValidationProps) => {
|
470
|
+
const [error, setError] = useState('');
|
471
|
+
|
472
|
+
const validationOptions = {
|
473
|
+
minLength: {
|
474
|
+
value: minLengthValue || undefined,
|
475
|
+
errorMessage: minLengthErrorMessage || 'Пароль слишком короткий',
|
476
|
+
},
|
477
|
+
maxLength: {
|
478
|
+
value: maxLengthValue || undefined,
|
479
|
+
errorMessage: maxLengthErrorMessage || 'Пароль слишком длинный',
|
480
|
+
},
|
481
|
+
includeUppercase: {
|
482
|
+
value: includeUppercase,
|
483
|
+
errorMessage: includeUppercaseErrorMessage || 'Пароль должен содержать хотя бы одну заглавную букву',
|
484
|
+
},
|
485
|
+
includeLowercase: {
|
486
|
+
value: includeLowercase,
|
487
|
+
errorMessage: includeLowercaseErrorMessage || 'Пароль должен содержать хотя бы одну строчную букву',
|
488
|
+
},
|
489
|
+
includeDigits: {
|
490
|
+
value: includeDigits,
|
491
|
+
errorMessage: includeDigitsErrorMessage || 'Пароль должен содержать хотя бы одну цифру',
|
492
|
+
},
|
493
|
+
includeSpecialSymbols: {
|
494
|
+
value: includeSpecialSymbols,
|
495
|
+
errorMessage:
|
496
|
+
includeSpecialSymbolsErrorMessage || 'Пароль должен содержать хотя бы один специальный символ',
|
497
|
+
},
|
498
|
+
};
|
499
|
+
|
500
|
+
const handleOnChange = () => {
|
501
|
+
setError('');
|
502
|
+
};
|
503
|
+
|
504
|
+
const handleOnValidate = ({ errorMessage }: { errorMessage?: string }) => {
|
505
|
+
setError(errorMessage || '');
|
506
|
+
};
|
507
|
+
|
508
|
+
return (
|
509
|
+
<TextField
|
510
|
+
label="Валидация пароля"
|
511
|
+
validationType="password"
|
512
|
+
options={validationOptions}
|
513
|
+
size="l"
|
514
|
+
view={error ? 'negative' : 'default'}
|
515
|
+
leftHelper={error || 'Валидация пароля'}
|
516
|
+
onChange={handleOnChange}
|
517
|
+
onValidate={handleOnValidate}
|
518
|
+
{...rest}
|
519
|
+
/>
|
520
|
+
);
|
521
|
+
};
|
522
|
+
|
523
|
+
export const PasswordValidation: StoryObj<StoryPasswordValidationProps> = {
|
524
|
+
argTypes: {
|
525
|
+
...disableProps(['view', 'size', 'maxLength', 'required', 'requiredPlacement', 'optional']),
|
526
|
+
},
|
527
|
+
args: {
|
528
|
+
labelPlacement: 'outer',
|
529
|
+
placeholder: 'Заполните поле',
|
530
|
+
passwordHidden: false,
|
531
|
+
minLengthValue: 5,
|
532
|
+
minLengthErrorMessage: 'Пароль слишком короткий',
|
533
|
+
maxLengthValue: 25,
|
534
|
+
maxLengthErrorMessage: 'Пароль слишком длинный',
|
535
|
+
includeUppercase: true,
|
536
|
+
includeUppercaseErrorMessage: 'Пароль должен содержать хотя бы одну заглавную букву',
|
537
|
+
includeLowercase: true,
|
538
|
+
includeLowercaseErrorMessage: 'Пароль должен содержать хотя бы одну строчную букву',
|
539
|
+
includeDigits: true,
|
540
|
+
includeDigitsErrorMessage: 'Пароль должен содержать хотя бы одну цифру',
|
541
|
+
includeSpecialSymbols: true,
|
542
|
+
includeSpecialSymbolsErrorMessage: 'Пароль должен содержать хотя бы один специальный символ',
|
543
|
+
},
|
544
|
+
render: (args) => <StoryPasswordValidation {...args} />,
|
545
|
+
};
|