@altiore/form
Version:
Form helper for building powerful forms
233 lines (232 loc) • 9.27 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getValueByTypeAndTarget = exports.warningsByType = exports.PassWarn = exports.formatValueByType = exports.formatPhone = exports.getInputTypeByFieldType = exports.prepDefValue = exports.prepDefDefault = exports.inputTypeByType = exports.parseValueByType = exports.getValueByNodeName = exports.getNodeByName = void 0;
var get_country_code_1 = require("./get-country-code");
var types_1 = require("./types");
var getNodeByName = function (name, formRef) {
if (formRef === null || formRef === void 0 ? void 0 : formRef.current) {
var input = formRef.current.querySelector("[name=\"" + name + "\"]");
if (input) {
return {
current: input,
};
}
}
else {
var input = document.querySelector("[name=\"" + name + "\"]");
if (input) {
return {
current: input,
};
}
}
return null;
};
exports.getNodeByName = getNodeByName;
var getValueByNodeName = function (name, formRef) {
var foundInputRef = (0, exports.getNodeByName)(name, formRef);
if (foundInputRef) {
return foundInputRef.current.type === 'checkbox'
? foundInputRef.current.checked
: foundInputRef.current.value;
}
return null;
};
exports.getValueByNodeName = getValueByNodeName;
var getValue = function (target) { return target.value; };
var getChecked = function (target) {
return target.checked;
};
var getMultipleSelect = function (target) {
return __spreadArray([], target.options, true).filter(function (el) { return el.selected; })
.map(function (el) { return el.value; });
};
var getValueByType = new Map([
[types_1.FieldType.BOOLEAN, getChecked],
[types_1.FieldType.CHECKBOX, getChecked],
[types_1.FieldType.NUMBER, getValue],
[types_1.FieldType.FLOAT, getValue],
[types_1.FieldType.TEXT, getValue],
[types_1.FieldType.SELECT_MULTIPLE, getMultipleSelect],
[types_1.FieldType.SECRET_CURRENCY, getValue],
]);
var parseBoolean = function (value) {
return typeof value === 'boolean' ? value : value === 'on';
};
var parseNumber = function (value) {
return value === '' ? null : parseInt(value, 10);
};
var parseFloatNumber = function (value) {
return value === '' ? null : parseFloat(value);
};
var parseDefault = function (value) { return (value === '' ? null : value); };
var parsePhone = function (v) {
var value = parseDefault(v);
return typeof value === 'string' ? value.replace(/[()\s\-]/gi, '') : value;
};
var parseDate = function (v) {
var value = parseDefault(v);
return typeof value === 'string' ? new Date(value).getTime() / 1000 : value;
};
var toArray = function (value) {
if (typeof value === 'string') {
return [value];
}
if (Array.isArray(value)) {
return value;
}
return [];
};
var parseSecretCur = function (value) {
return value === '' ? null : Math.round(parseFloat(value) * 10000);
};
exports.parseValueByType = new Map([
[types_1.FieldType.TEXT, parseDefault],
[types_1.FieldType.EMAIL, parseDefault],
[types_1.FieldType.SELECT, parseDefault],
[types_1.FieldType.BOOLEAN, parseBoolean],
[types_1.FieldType.NUMBER, parseNumber],
[types_1.FieldType.FLOAT, parseFloatNumber],
[types_1.FieldType.SELECT_MULTIPLE, toArray],
[types_1.FieldType.PHONE, parsePhone],
[types_1.FieldType.DATE, parseDate],
[types_1.FieldType.DATETIME, parseDate],
[types_1.FieldType.SECRET_CURRENCY, parseSecretCur],
]);
exports.inputTypeByType = new Map([
[types_1.FieldType.BOOLEAN, 'checkbox'],
[types_1.FieldType.CHECKBOX, 'checkbox'],
[types_1.FieldType.ENUM, 'text'],
[types_1.FieldType.PASSWORD, 'password'],
[types_1.FieldType.EMAIL, 'email'],
[types_1.FieldType.TEXT, 'text'],
[types_1.FieldType.NUMBER, 'number'],
[types_1.FieldType.FLOAT, 'number'],
[types_1.FieldType.PHONE, 'tel'],
[types_1.FieldType.DATE, 'date'],
[types_1.FieldType.DATETIME, 'datetime-local'],
[types_1.FieldType.SECRET_CURRENCY, 'number'],
]);
var prepDefDefault = function (v) { return v; };
exports.prepDefDefault = prepDefDefault;
var prepDefSecretCur = function (v) {
if (v) {
return v / 10000;
}
return v;
};
exports.prepDefValue = new Map([
[types_1.FieldType.SECRET_CURRENCY, prepDefSecretCur],
]);
var getInputTypeByFieldType = function (fieldType) {
return exports.inputTypeByType.has(fieldType)
? exports.inputTypeByType.get(fieldType)
: fieldType;
};
exports.getInputTypeByFieldType = getInputTypeByFieldType;
var digitStrArr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
var formatPhone = function formatPhoneNumber(phoneNumberString) {
try {
var match = phoneNumberString.match(/^(\+?38?\s?|\+?7?\s?)?(\s?\(?\d{3}\)?\s?|\s?\(?\d{2}|\s?\(?\d|\s?\(?)?(\d{3}|\d{2}|\d)?(\s?-?\s?\d{2}|\s?-?\s?\d|\s?-?\s?)?(\s?-?\s?\d{4}|\s?-?\s?\d{3}|\s?-?\s?\d{2}|\s?-?\s?\d|\s?-?\s?)?$/);
if (match) {
var res = '';
if (match[1]) {
res += match[1][0] === '+' ? match[1] : "+" + match[1];
}
else if (phoneNumberString.length) {
res = (0, get_country_code_1.getCountryCode)() + res;
}
if (match[2]) {
res =
res.replace(/\s$/gi, '') + ' (' + match[2].replace(/^[\s(]/gi, '');
}
if (match[3]) {
res = res.replace(/\)?\s?$/gi, '') + ') ' + match[3];
}
else if (match[4]) {
res = res.replace(/\)?\s?$/gi, '') + ') ';
}
if (match[4]) {
res =
res.replace(/\s?-?\s?$/gi, '') +
(digitStrArr.includes(match[4][0])
? ' - ' + match[4]
: digitStrArr.includes(match[4][1]) ||
digitStrArr.includes(match[4][2])
? match[4].replace(/^\s?-?\s?/gi, ' - ')
: match[4]);
}
if (match[5]) {
res =
res.replace(/\s?-?\s?$/gi, '') +
(digitStrArr.includes(match[5][0])
? ' - ' + match[5]
: digitStrArr.includes(match[5][1]) ||
digitStrArr.includes(match[5][2])
? match[5].replace(/^\s?-?\s?/gi, ' - ')
: match[5]);
}
return res;
}
if (phoneNumberString.match(/[()\s\-+a-zа-я]/gi)) {
return (0, exports.formatPhone)(phoneNumberString.replace(/[()\s\-+a-zа-я]/gi, ''));
}
}
catch (err) {
console.error('Не удалось форматировать номер телефона');
console.error(err);
}
return phoneNumberString;
};
exports.formatPhone = formatPhone;
exports.formatValueByType = new Map([[types_1.FieldType.PHONE, exports.formatPhone]]);
exports.PassWarn = {
minLength: 'Минимум 8 символов',
// eslint-disable-next-line sort-keys
lowerRequired: 'Минимум 1 буква в нижнем регистре',
// eslint-disable-next-line sort-keys
digitRequired: 'Минимум 1 цифра',
upperRequired: 'Минимум 1 буква в верхнем регистре',
// eslint-disable-next-line sort-keys
specRequired: 'Минимум 1 спец. символ % * ( ) ? ! @ # ₽ ...',
};
var warningPassword = function (value) {
if (!value) {
return Object.values(exports.PassWarn);
}
var warnings = [];
if (value.length < 8) {
warnings.push(exports.PassWarn.minLength);
}
if (!value.match(/[a-zА-Я]+/g)) {
warnings.push(exports.PassWarn.lowerRequired);
}
if (!value.match(/[0-9]+/g)) {
warnings.push(exports.PassWarn.digitRequired);
}
if (!value.match(/[A-ZА-Я]+/g)) {
warnings.push(exports.PassWarn.upperRequired);
}
if (!value.match(/[!"№%:,.;()_+\[\]@#₽$^&*=±§<>?\\|\/~`'\-}{]+/g)) {
warnings.push(exports.PassWarn.specRequired);
}
return warnings;
};
exports.warningsByType = new Map([[types_1.FieldType.PASSWORD, warningPassword]]);
var getValueByTypeAndTarget = function (fieldType, target) {
var _a;
var getCurrentValue = (_a = getValueByType.get(fieldType)) !== null && _a !== void 0 ? _a : getValue;
var value = getCurrentValue(target);
var prepareValue = exports.parseValueByType.get(fieldType || types_1.FieldType.TEXT);
return prepareValue ? prepareValue(value) : value;
};
exports.getValueByTypeAndTarget = getValueByTypeAndTarget;