{"version":3,"file":"../../utils/validation.js","sources":["utils/validation.js"],"sourcesContent":["\"use strict\";\n\nvar validation = function () {\n function setFieldInvalid($valueArea, errorMessage) {\n $valueArea.attr('data-error', errorMessage);\n $valueArea.addClass('-error');\n var $desc = $valueArea.find('.field-label-description');\n $desc.text(errorMessage);\n }\n\n function setFieldValid($valueArea) {\n $valueArea.removeAttr('data-error');\n $valueArea.removeClass('-error');\n var $desc = $valueArea.find('.field-label-description');\n var fieldDesc = $valueArea.attr('data-label-desc') || '';\n $desc.text(fieldDesc);\n }\n\n function setAllValid(validationForm) {\n $(validationForm).find('[data-error]').each(function () {\n var fieldDesc = $(this).attr('data-label-desc') || '';\n $(this).removeAttr('data-error');\n $(this).removeClass('-error');\n $(this).find('.field-label-description').text(fieldDesc);\n });\n }\n\n function setGridItemInvalid($gridItem) {\n if ($gridItem.hasClass('text-required')) {\n $gridItem.addClass('text-invalid');\n } else {\n $gridItem.find('.text-required').addClass('text-invalid');\n }\n }\n\n function setGridValid($grid) {\n $grid.find('.text-invalid').removeClass('text-invalid');\n }\n\n function getPropValue($valueArea, dataSet) {\n var propName = $valueArea.attr('data-prop-name');\n var propNameParts = propName.split('.');\n var value = null;\n\n if (propNameParts.length > 1) {\n value = propNameParts.reduce(function (oldValue, newValue) {\n return oldValue[newValue];\n }, dataSet);\n } else {\n value = dataSet[propName];\n }\n\n return value;\n }\n\n function validateRequiredValues(dataSet, $checkArea) {\n var allValid = true;\n var $requiredFields = $checkArea ? $checkArea.find('[data-required]') : $('[data-required]');\n $requiredFields.each(function (index, valueArea) {\n var $valueArea = $(valueArea);\n var value = getPropValue($valueArea, dataSet);\n var errorMssg = $valueArea.data('custom-required-mssg') || \"\\u041D\\u0435 \\u0437\\u0430\\u043F\\u043E\\u043B\\u043D\\u0435\\u043D\\u043E \\u043E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\";\n\n if (!value) {\n console.log($valueArea);\n setFieldInvalid($valueArea, errorMssg);\n allValid = false;\n }\n });\n return allValid;\n }\n\n function validateRegistrationForm() {\n var allValid = true;\n var personConfirm = $('#personConfirm').is(':checked');\n $('[data-required]').each(function (idx, field) {\n var val = '';\n var $input = $(field).find('input');\n\n switch ($input.attr('type')) {\n case 'tel':\n case 'text':\n val = $input.val().trim();\n break;\n\n case 'checkbox':\n val = $input.is(':checked');\n break;\n\n default:\n console.error('Field type not found');\n break;\n }\n\n if (!val) {\n allValid = false;\n }\n });\n $('.person-contract-list .person-contract-number').each(function (idx, contract) {\n var val = $(contract).val().trim();\n\n if (!val) {\n allValid = false;\n }\n });\n\n if (!personConfirm) {\n allValid = false;\n }\n\n return allValid;\n }\n /* function validateConditionallyRequired(dataSet) {\r\n let allValid = true;\r\n $('[data-conditionaly-required]').each((index, valueArea) => {\r\n const $valueArea = $(valueArea);\r\n const value = getPropValue($valueArea, dataSet);\r\n if (!value) {\r\n setFieldInvalid($valueArea, 'Не заполнено обязательное поле');\r\n allValid = false;\r\n }\r\n });\r\n return allValid;\r\n } */\n\n\n function validateValuesLength(dataSet) {\n var allValid = true;\n $('[data-max-length]').each(function (index, valueArea) {\n var $valueArea = $(valueArea);\n var value = getPropValue($valueArea, dataSet);\n var maxLength = $valueArea.attr('data-max-length');\n var errorMssg = $valueArea.data('custom-maxlen-mssg') || \"\\u041F\\u0440\\u0435\\u0432\\u044B\\u0448\\u0430\\u0435\\u0442 \".concat(maxLength, \" \\u0441\\u0438\\u043C\\u0432\\u043E\\u043B\\u043E\\u0432\");\n\n if (value && value.length > maxLength) {\n setFieldInvalid($valueArea, errorMssg);\n allValid = false;\n }\n });\n return allValid;\n }\n\n function validatePasswEqual(dataSet) {\n var valid = true;\n var $passwArea = $('[data-prop-name=\"passw\"]');\n var $dupPasswArea = $('[data-prop-name=\"dupPassw\"]');\n var passwValue = getPropValue($passwArea, dataSet);\n var dupPasswValue = getPropValue($dupPasswArea, dataSet);\n\n if (dupPasswValue !== passwValue) {\n setFieldInvalid($dupPasswArea, 'Пароли не совпадают');\n valid = false;\n }\n\n return valid;\n }\n\n function validatePattern(dataSet) {\n var allValid = true;\n $('[data-pattern]').each(function (index, valueArea) {\n var $valueArea = $(valueArea);\n var value = getPropValue($valueArea, dataSet);\n var pattern = $valueArea.attr('data-pattern');\n\n switch (pattern) {\n case 'phone':\n {\n var phoneRgx = /^((\\+[\\d]{1,3})[\\- ]?)[\\d]{6,12}$/;\n\n if (value && value.trim() !== '' && !phoneRgx.test(value)) {\n setFieldInvalid($valueArea, 'Некорректный формат номера');\n allValid = false;\n }\n\n break;\n }\n\n case 'email':\n {\n var mailRgx = /^(([^<>()+[\\]\\\\.,;:\\s@\"]+(\\.[^<>()+[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n if (value && value.trim() !== '' && !mailRgx.test(value)) {\n setFieldInvalid($valueArea, 'Некорректный формат эл. почты');\n allValid = false;\n }\n\n break;\n }\n // only numbers\n\n default:\n {\n break;\n }\n }\n });\n return allValid;\n }\n\n function validatePrivacyAgree(dataSet) {\n var valid = true;\n var $privacyConfirmArea = $('[data-prop-name=\"privacyConfirm\"]');\n var privacyConfirmValue = getPropValue($privacyConfirmArea, dataSet);\n\n if (!privacyConfirmValue) {\n setFieldInvalid($privacyConfirmArea, 'Отправляя форму Вы даете согласие на обработку перс. данных');\n valid = false;\n }\n\n return valid;\n }\n\n function validateContracts(dataSet) {\n var contractTypeDict = {\n 'clientContract': 'Договор',\n 'customerAccount': 'Лицевой счет'\n };\n var allValid = true;\n dataSet.ContractBindingList.forEach(function (contract) {\n var $valueArea = $('[data-contracts]');\n var value = contract.ObjectNumber;\n var obj = contract.BuldingObjectId;\n var existingItem = $.grep(dataSet.ExistingContractsList, function (item) {\n return item.ContractOrCa === contractTypeDict[\"\".concat(contract.EntityType)] && item.BuldingObject === contract.BuldingObject && item.ObjectNumber === contract.ObjectNumber;\n })[0];\n\n if (!value) {\n setFieldInvalid($valueArea, \"\\u041D\\u0435 \\u0437\\u0430\\u043F\\u043E\\u043B\\u043D\\u0435\\u043D \\u043D\\u043E\\u043C\\u0435\\u0440 \".concat(contract.EntityType === 'clientContract' ? 'договора' : 'лицевого счета'));\n allValid = false;\n }\n\n if (!obj) {\n setFieldInvalid($valueArea, 'Не выбран объект');\n allValid = false;\n }\n\n if (existingItem) {\n setFieldInvalid($valueArea, 'Информация об этом договоре уже внесена');\n allValid = false;\n }\n });\n return allValid;\n }\n\n function validateFileExt(dataSet) {\n var valid = true;\n var $attachArea = $('[data-prop-name=\"attachment\"]');\n var attachValue = getPropValue($attachArea, dataSet);\n var splittedFileName = attachValue.split('.');\n var fileType = splittedFileName.slice(-1)[0].toLowerCase();\n var allowedFormats = ['png', 'pdf', 'doc', 'docx', 'jpg', 'jpeg'];\n\n if (splittedFileName.length < 2) {\n setFieldInvalid($attachArea, 'Данный формат файла не разрешен для добавления');\n valid = false;\n }\n\n if (allowedFormats.indexOf(fileType) === -1) {\n setFieldInvalid($attachArea, 'Данный формат файла не разрешен для добавления');\n valid = false;\n }\n\n return valid;\n }\n\n function validateFileSize(dataSet) {\n var valid = true;\n var $attachArea = $('[data-prop-name=\"attachment\"]');\n var attachValue = getPropValue($attachArea, dataSet);\n\n if (attachValue > 10 * 1024 * 1024) {\n setFieldInvalid($attachArea, 'Размер файла не должен превышать 10 Мб');\n valid = false;\n }\n\n return valid;\n }\n\n function validatePollGridRowFill(dataSet) {\n var valid = true;\n var $valueArea = dataSet.$el;\n $valueArea.find('.rest-columns .trow').each(function (idx) {\n var $this = $(this);\n var $selectedChoice = $this.find('[data-sf-role=\"multiple-grid-choice-field-input\"]:checked');\n\n if (!$selectedChoice.length) {\n var $gridItem = $valueArea.find(\".fix-column .trow:nth-child(\".concat(idx + 1, \")\"));\n setGridItemInvalid($gridItem);\n valid = false;\n }\n });\n\n if (!valid) {\n setFieldInvalid($valueArea, 'Не заполнены обязательные поля');\n }\n\n return valid;\n }\n\n function validatePollGridColFill(dataSet) {\n var valid = true;\n var $valueArea = dataSet.$el;\n var colsCount = parseInt(dataSet.$el.find('.fixed-tbl-wrapper').data('cols-count'), 10);\n\n for (var i = 0; i < colsCount; i++) {\n var $selectedChoice = dataSet.$el.find(\"[data-dd-col=\\\"\".concat(i, \"\\\"]:checked\"));\n\n if (!$selectedChoice.length) {\n var $gridItem = $valueArea.find(\".rest-columns .th:nth-child(\".concat(i + 1, \")\"));\n setGridItemInvalid($gridItem);\n valid = false;\n }\n }\n\n if (!valid) {\n setFieldInvalid($valueArea, 'Не заполнены обязательные поля');\n }\n\n return valid;\n }\n\n function validatePollGridComment(dataSet) {\n var valid = true;\n var $valueArea = dataSet.$el;\n $valueArea.find('.rest-columns .trow').each(function (idx) {\n var $this = $(this);\n var $comment = $this.find('[data-dd-type=\"Comment\"]');\n\n if ($comment.val() == \"\") {\n var $gridItem = $valueArea.find(\".fix-column .trow:nth-child(\".concat(idx + 1, \")\"));\n setGridItemInvalid($gridItem);\n var $col = $valueArea.find('.-com');\n setGridItemInvalid($col);\n valid = false;\n }\n });\n\n if (!valid) {\n setFieldInvalid($valueArea, 'Не заполнены обязательные комментарии');\n }\n\n return valid;\n }\n\n function validatePollGridAdditionalChoice(dataSet) {\n var valid = true;\n var $valueArea = dataSet.$el;\n $valueArea.find('.rest-columns .trow').each(function (idx) {\n var $this = $(this);\n var $ac = $this.find('[data-dd-type=\"AdditionalChoice\"]');\n\n if ($ac.val() == \"\") {\n var $gridItem = $valueArea.find(\".fix-column .trow:nth-child(\".concat(idx + 1, \")\"));\n setGridItemInvalid($gridItem);\n var $col = $valueArea.find('.-ac');\n setGridItemInvalid($col);\n valid = false;\n }\n });\n\n if (!valid) {\n setFieldInvalid($valueArea, 'Не заполнены обязательные дополнительные варианты');\n }\n\n return valid;\n }\n\n function scrollToFirstError() {\n var scrollAreaSelector = 'html, body';\n $(scrollAreaSelector).animate({\n scrollTop: $('[data-error]:visible:first').offset().top - 100\n }, 500);\n }\n\n function validateRanking(dataSet, $checkArea) {\n var allValid = true;\n var $requiredFields = $checkArea.find('[data-ranking-valid]');\n $requiredFields.each(function (index, valueArea) {\n var $valueArea = $(valueArea);\n var value = $valueArea.find('[data-role=\"choices-select\"] option[value=\"rate_default\"]:selected').length == 0;\n var errorMssg = $valueArea.data('ranking-valid-message') || \"\\u041D\\u0435 \\u0437\\u0430\\u043F\\u043E\\u043B\\u043D\\u0435\\u043D\\u043E \\u043E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\";\n\n if (!value) {\n console.log($valueArea);\n setFieldInvalid($valueArea, errorMssg);\n allValid = false;\n }\n });\n return allValid;\n }\n /* function regexValues() {\r\n // str.replace(//g, '>');\r\n } */\n\n\n return {\n setFieldInvalid: setFieldInvalid,\n setFieldValid: setFieldValid,\n setAllValid: setAllValid,\n setGridValid: setGridValid,\n validateRequiredValues: validateRequiredValues,\n validateRegistrationForm: validateRegistrationForm,\n validateValuesLength: validateValuesLength,\n validatePasswEqual: validatePasswEqual,\n validatePattern: validatePattern,\n validatePrivacyAgree: validatePrivacyAgree,\n validateContracts: validateContracts,\n validateFileExt: validateFileExt,\n validateFileSize: validateFileSize,\n // validateConditionallyRequired,\n validatePollGridRowFill: validatePollGridRowFill,\n validatePollGridColFill: validatePollGridColFill,\n scrollToFirstError: scrollToFirstError,\n // regexValues,\n validatePollGridComment: validatePollGridComment,\n validatePollGridAdditionalChoice: validatePollGridAdditionalChoice,\n validateRanking: validateRanking\n };\n}();"],"names":["validation","setFieldInvalid","$valueArea","errorMessage","attr","addClass","find","text","setGridItemInvalid","$gridItem","hasClass","getPropValue","dataSet","propName","propNameParts","split","length","reduce","oldValue","newValue","setFieldValid","removeAttr","removeClass","$desc","fieldDesc","setAllValid","validationForm","$","each","this","setGridValid","$grid","validateRequiredValues","$checkArea","allValid","index","valueArea","value","errorMssg","data","console","log","validateRegistrationForm","personConfirm","is","idx","field","val","$input","trim","error","contract","validateValuesLength","maxLength","concat","validatePasswEqual","valid","$passwArea","$dupPasswArea","passwValue","validatePattern","test","validatePrivacyAgree","$privacyConfirmArea","validateContracts","contractTypeDict","clientContract","customerAccount","ContractBindingList","forEach","ObjectNumber","obj","BuldingObjectId","existingItem","grep","ExistingContractsList","item","ContractOrCa","EntityType","BuldingObject","validateFileExt","$attachArea","splittedFileName","fileType","slice","toLowerCase","indexOf","validateFileSize","validatePollGridRowFill","$el","validatePollGridColFill","colsCount","parseInt","i","scrollToFirstError","animate","scrollTop","offset","top","validatePollGridComment","validatePollGridAdditionalChoice","validateRanking"],"mappings":"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"}