UNPKG

@zohodesk/components

Version:

In this Package, we Provide Some Basic Components to Build Web App

353 lines (283 loc) • 14.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _typeChecker = _interopRequireDefault(require("./typeChecker")); var _objectUtils = require("./objectUtils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } 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."); } 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); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } 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; } var validator = { combinePropsValidation: function combinePropsValidation(currentProps, type, validateOn, validationObj, defaultCheckPropsRules, defaultValidateRules) { var newType = type.toLowerCase(); var newValidation = (0, _objectUtils.clone)({}, validationObj); var validationRules = newValidation.rules; var validationRulesOrder = newValidation.rulesOrder; var validationMessages = newValidation.messages; var newValidationRulesOrder = validationRulesOrder ? _toConsumableArray(validationRulesOrder) : []; var newValidationRules = validationRules ? validationRules : {}; var checkPropsRules = defaultCheckPropsRules; var checkPropsOrder = []; for (var i = 0; i < checkPropsRules.length; i++) { var prop = checkPropsRules[i]; if (Object.prototype.hasOwnProperty.call(currentProps, prop)) { if (newValidationRulesOrder.indexOf(prop) === -1) { checkPropsOrder.push(prop); } if (!Object.prototype.hasOwnProperty.call(newValidationRules, prop)) { newValidationRules[prop] = currentProps[prop]; } } } newValidationRulesOrder = !Object.prototype.hasOwnProperty.call(newValidation, 'rulesOrder') ? checkPropsOrder.concat(newValidationRulesOrder) : validationRulesOrder; var isRulesFound = Object.keys(newValidationRules).length; newValidationRules = isRulesFound ? validator.composeRulesForValidation(newType, defaultValidateRules, newValidationRules) : newValidationRules; return { validate: newValidation.validate, validateOn: Object.prototype.hasOwnProperty.call(newValidation, 'validateOn') ? newValidation.validateOn : validateOn, validationRules: newValidationRules, validationRulesOrder: newValidationRulesOrder, validationMessages: validationMessages }; }, executeValidation: function executeValidation(text, inputTag, validationObj, fieldType) { var validation = validationObj.validation; var validationRulesOrder = validation.validationRulesOrder || []; var validationRules = validation.validationRules || {}; var validationMessages = validation.validationMessages || {}; var onPassValidation = validationObj.onPassValidation; var onFailValidation = validationObj.onFailValidation; var skipIfEmptyField = null; if (validationRules.required === false && (fieldType !== 'radio' || fieldType !== 'checkbox')) { skipIfEmptyField = function skipIfEmptyField(val) { if (fieldType === 'onegroup' || fieldType === 'multigroup') { return !val || !(val.length > 0); } var value = (val || '').trim(); return value.length < 1; }; } if (skipIfEmptyField === null || skipIfEmptyField(text) === false) { for (var i = 0, len = validationRulesOrder.length; i < len; i++) { var rule = validationRulesOrder[i]; if (!validationRules[rule] || !_typeChecker["default"].isFunction(validationRules[rule])) { continue; } var isInValid = validationRules[rule](text, inputTag); if (isInValid) { var message = validationMessages[rule] && _typeChecker["default"].isFunction(validationMessages[rule]) ? validationMessages[rule](text, inputTag) : validationMessages[rule]; onFailValidation && onFailValidation(rule, message, inputTag); return; } } } onPassValidation && onPassValidation(text, inputTag); }, composeRulesForValidation: function composeRulesForValidation(type, defaultValidateRules, newValidationRules) { var defaultPatterns = validator.regexs; var _loop = function _loop(i, len) { var rule = defaultValidateRules[i]; var ruleInfo = newValidationRules[rule] || ''; if (ruleInfo && !_typeChecker["default"].isFunction(ruleInfo)) { if (rule === 'required' && ruleInfo === true) { newValidationRules[rule] = function (val, el) { if (el.willValidate && el.validity.valueMissing) { return true; } if (type === 'radio' || type === 'checkbox') { return el.checked === false; } if (type === 'onegroup' || type === 'multigroup') { return !val || val.length < 1; } var value = (val || '').replace(/\s{2,}/g, ' ').trim(); return value.length < 1; }; } else if (rule === 'maxLength' && !Number.isNaN(ruleInfo) && Number.isFinite(ruleInfo)) { var maxLength = Number(ruleInfo); newValidationRules[rule] = function (val, el) { if (el.willValidate && el.validity.tooLong) { return true; } var value = val || ''; if (type !== 'multigroup') { value = val.trim(); } return !(value.length <= maxLength); }; } else if (rule === 'minLength' && !Number.isNaN(ruleInfo) && Number.isFinite(ruleInfo)) { var minLength = Number(ruleInfo); newValidationRules[rule] = function (val) { var value = val || ''; if (type !== 'multigroup') { value = val.trim(); } return !(value.length >= minLength); }; } else if (rule === 'rangeLength' && /^([-+\d]+)*([,]{1,1}([-+\d]+))$/.test(ruleInfo) === true) { var rangeLength = ruleInfo; rangeLength = rangeLength.split(',').map(function (a) { return Number(a); }); newValidationRules[rule] = function (val) { var value = (val || '').trim(); return !(value.length >= rangeLength[0] && value.length <= rangeLength[1]); }; } else if (rule === 'step' && ruleInfo) { var step = Number(ruleInfo); var stepTypes = ['number', 'range', 'date', 'datetime', 'datetime-local', 'month', 'time', 'week']; newValidationRules[rule] = function (val, el) { if (stepTypes.indexOf(type) !== -1) { if (el.willValidate && el.validity.stepMismatch) { return true; } return false; } var value = (val || '').trim(); value = Number(value); if (Number.isNaN(value) || !Number.isFinite(value) || Number.isNaN(step) || !Number.isFinite(step)) { return true; } return !(value % step === 0); }; } else if (rule === 'max') { var max = Number(ruleInfo); var maxTypes = ['number', 'range', 'date', 'datetime', 'datetime-local', 'month', 'time', 'week']; newValidationRules[rule] = function (val, el) { if (maxTypes.indexOf(type) !== -1) { if (el.willValidate && el.validity.rangeOverflow) { return true; } return false; } var value = (val || '').trim(); value = Number(value); if (Number.isNaN(value) || !Number.isFinite(value) || Number.isNaN(max) || !Number.isFinite(max)) { return true; } return !(value <= max); }; } else if (rule === 'min') { var min = Number(ruleInfo); var minTypes = ['number', 'range', 'date', 'datetime', 'datetime-local', 'month', 'time', 'week']; newValidationRules[rule] = function (val, el) { if (minTypes.indexOf(type) !== -1) { if (el.willValidate && el.validity.rangeUnderflow) { return true; } return false; } var value = (val || '').trim(); value = Number(value); if (Number.isNaN(value) || !Number.isFinite(value) || Number.isNaN(min) || !Number.isFinite(min)) { return true; } return !(value >= min); }; } else if (rule === 'range' && /^([-+\d]+)*([,]{1,1}([-+\d]+))$/.test(ruleInfo) === true) { var ranges; ranges = ranges.split(',').map(function (a) { return Number(a); }); newValidationRules[rule] = function (val) { var value = (val || '').trim(); value = Number(value); if (Number.isNaN(value) || !Number.isFinite(value)) { return true; } return !(value >= ranges[0] && value <= ranges[1]); }; } else if ((rule === 'digits' || rule === 'integer' || rule === 'double') && ruleInfo === true) { newValidationRules[rule] = function (val) { var value = (val || '').trim(); value = Number(value); if (Number.isNaN(value) || !Number.isFinite(value)) { return true; } var condition = true; if (rule === 'integer') { condition = Number.isSafeInteger(value); } if (rule === 'double') { condition = -Number.MAX_VALUE <= value && Number.MAX_VALUE >= value; } return !defaultPatterns[rule].test(value) && condition; }; } else if ((rule === 'timezonedate' || rule === 'datetimezone' || rule === 'date' || rule === 'datetime') && ruleInfo === true) { newValidationRules[rule] = function (val) { var value = (val || '').trim(); if (!defaultPatterns[rule].test(value)) { return true; } if (rule === 'datetime') { var index = 0; value = value.split('T')[index]; //let timings = value[1].replace("Z","").split(":") //let //if( !defaultPatterns[rule].test(value); ) } value = value.replace('/', '-'); value = value.replace(':', '-'); var values = value.split('-'); // Extract the string into month, date and year var yy = parseInt(values[0]); var mm = parseInt(values[1]); var dd = parseInt(values[2]); // Create list of days of a month [assume there is no leap year by default] var ListofDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if (mm === 1 || mm > 2) { if (dd > ListofDays[mm - 1]) { return true; } } if (mm === 2) { var lyear = false; if (!(yy % 4) && yy % 100 || !(yy % 400)) { lyear = true; } if (lyear === false && dd >= 29) { return true; } if (lyear === true && dd > 29) { return true; } } }; } else if (rule === 'pattern' && ruleInfo && ruleInfo.constructor === RegExp) { newValidationRules[rule] = function (val) { var value = (val || '').trim(); return !new RegExp(ruleInfo).test(value); }; } else if ((rule === 'email' || rule === 'month' || rule === 'time' || rule === 'phone' || rule === 'url' || rule === 'hexcode' || rule === 'cleartextpattern') && ruleInfo === true) { newValidationRules[rule] = function (val) { var value = (val || '').trim(); return !defaultPatterns[rule].test(value); }; } } }; for (var i = 0, len = defaultValidateRules.length; i < len; i++) { _loop(i, len); } return newValidationRules; }, regexs: { integer: /^[-+]?[0-9]+$/, digits: /^[0-9]+$/, "double": /^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/, email: /^[\w]([\w\-.+'/]*)@([\w\-.]*)(\.[A-z]{2,22}(\.[a-zA-Z]{2}){0,2})$/, phone: /(\+?( |-|\.)?\d{1,2}( |-|\.)?)?(\(?\d{3}\)?|\d{3})( |-|\.)?(\d{3}( |-|\.)?\d{4})/g, hexcode: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/, month: /^(\d{4,6})[/\-:](1[0-2]|0[1-9])$/, date: /^(\d{4,6})[/-](1[0-2]|0[1-9])[/\-:](0[1-9]|1[0-9]|2[0-9]|3[0-1])$/, time: /^([0-9]|0[0-9]|1[0-9]|2[0-3])[-/:][0-5][0-9]$/, datetime: /^(\d{4,6})[/-](1[0-2]|0[1-9])[/\-:](0[1-9]|1[0-9]|2[0-9]|3[0-1])[T](([0-9]|0[0-9]|1[0-9]|2[0-3])[-/:][0-5][0-9])$/, datetimezone: /^(\d{4,6})[/-](1[0-2]|0[1-9])[/\-:](0[1-9]|1[0-9]|2[0-9]|3[0-1])[T](([0-9]|0[0-9]|1[0-9]|2[0-3])[-/:][0-5][0-9][-/:.][0-9]{3}[Z])$/, url: /^(ht|f)tp(s?):\/\/[-.\w]+[.][\w]+(\/?)([A-z0-9\-.?,:'/+=&%$#_@]*)?$/, cleartextpattern: /^([\t-\r !\$',-:\?-z\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|(?:(?![\0-\x7F])[\s\S]))+$/ } }; var _default = validator; exports["default"] = _default;