@zohodesk/components
Version:
In this Package, we Provide Some Basic Components to Build Web App
353 lines (283 loc) • 14.2 kB
JavaScript
;
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;