UNPKG

@altiore/form

Version:

Form helper for building powerful forms

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