95 lines
5.6 KiB
JavaScript
95 lines
5.6 KiB
JavaScript
(function (window, document) {
|
|
"use strict";
|
|
|
|
const element = (id) => document.getElementById(id);
|
|
const checked = (id) => Boolean(element(id)?.checked);
|
|
const requiredWhen = (id) => () => checked(id);
|
|
const sectionRule = (id, rule = {}) => Object.assign({ when: requiredWhen(id) }, rule);
|
|
const RULES = {
|
|
applno: { required: true, format: "AlphaNumeric", requiredMessage: "Application number is required." },
|
|
bank_branch_id: { required: true, requiredMessage: "Bank branch is required." },
|
|
product: { required: true, requiredMessage: "Product is required." },
|
|
customername: { required: true, format: "AlphaSpace", requiredMessage: "Customer name is required." },
|
|
apptype: { required: true, requiredMessage: "Application type is required." },
|
|
bankcode: { format: "AlphaNumeric" }, fathername: { format: "AlphaSpace" }, dob: { format: "Date" },
|
|
mobileno: { format: "AllowWrong" }, loanamount: { format: "LoanAmount" },
|
|
contactperson: { format: "AlphaSpace" }, specialinst: { format: "SplInstruction" },
|
|
raddr1: sectionRule("rv", { required: true, format: "SplInstruction" }), raddr2: sectionRule("rv", { format: "SplInstruction" }),
|
|
raddr3: sectionRule("rv", { required: true, format: "SplInstruction" }), rlandmark: sectionRule("rv", { format: "SplInstruction" }),
|
|
rcity: sectionRule("rv", { required: true }), colr: sectionRule("rv", { required: true, format: "SplInstruction" }),
|
|
rpincode: sectionRule("rv", { format: "Pincode" }), rphone: sectionRule("rtv", { required: true, format: "Phone" }),
|
|
companyname: sectionRule("ov", { format: "SplInstruction" }), oaddr1: sectionRule("ov", { required: true, format: "SplInstruction" }),
|
|
oaddr2: sectionRule("ov", { format: "SplInstruction" }), oaddr3: sectionRule("ov", { required: true, format: "SplInstruction" }),
|
|
olandmark: sectionRule("ov", { format: "SplInstruction" }), ocity: sectionRule("ov", { required: true }),
|
|
colo: sectionRule("ov", { required: true, format: "SplInstruction" }), opincode: sectionRule("ov", { format: "Pincode" }),
|
|
department: sectionRule("ov", { format: "SplInstruction" }), designation: sectionRule("ov", { format: "SplInstruction" }),
|
|
ophone: sectionRule("otv", { required: true, format: "Phone" }), extension: sectionRule("otv", { format: "Extension" }),
|
|
paddr1: sectionRule("pv", { required: true, format: "SplInstruction" }), paddr2: sectionRule("pv", { format: "SplInstruction" }),
|
|
paddr3: sectionRule("pv", { required: true, format: "SplInstruction" }), plandmark: sectionRule("pv", { format: "SplInstruction" }),
|
|
pcity: sectionRule("pv", { required: true }), colp: sectionRule("pv", { required: true, format: "SplInstruction" }),
|
|
ppincode: sectionRule("pv", { format: "Pincode" }), refname1: sectionRule("refv", { required: true, format: "AlphaSpace" }),
|
|
refaddress1: sectionRule("refv", { format: "SplInstruction" }),
|
|
refcontactno1: sectionRule("refv", { required: true, format: "Phone" }),
|
|
refname2: sectionRule("refv", { format: "AlphaSpace" }), refaddress2: sectionRule("refv", { format: "SplInstruction" }),
|
|
refcontactno2: sectionRule("refv", { format: "Phone" })
|
|
};
|
|
const VERIFICATION_GROUPS = Object.freeze({
|
|
rv: ["raddr1", "raddr2", "raddr3", "rlandmark", "rcity", "colr", "rpincode"],
|
|
rtv: ["rphone"],
|
|
ov: ["companyname", "oaddr1", "oaddr2", "oaddr3", "olandmark", "ocity", "colo",
|
|
"opincode", "department", "designation"],
|
|
otv: ["ophone"],
|
|
pv: ["paddr1", "paddr2", "paddr3", "plandmark", "pcity", "colp", "ppincode"],
|
|
refv: ["refname1", "refaddress1", "refcontactno1"]
|
|
});
|
|
|
|
function registerDynamicRules(form) {
|
|
if (!form) return;
|
|
form.querySelectorAll("#FormPanel6 [data-validation-required]").forEach(function (field) {
|
|
const label = field.closest(".widget")?.querySelector(".lblcontainer")?.textContent.trim();
|
|
RULES[field.id] = {
|
|
required: field.dataset.validationRequired === "true",
|
|
format: field.dataset.validationFormat || "",
|
|
requiredMessage: (label || "This dynamic field") + " is required."
|
|
};
|
|
});
|
|
}
|
|
|
|
function validateField(field) {
|
|
const target = typeof field === "string" ? element(field) : field;
|
|
const rule = target && RULES[target.id];
|
|
return !target || !rule || window.CygnusFormValidation.validateElement(target, rule);
|
|
}
|
|
|
|
function validateForm() {
|
|
return window.CygnusFormValidation.validateRules(RULES);
|
|
}
|
|
|
|
function validateVerification(verificationId) {
|
|
const invalid = [];
|
|
(VERIFICATION_GROUPS[verificationId] || []).forEach(function (fieldId) {
|
|
const field = element(fieldId);
|
|
if (!validateField(field)) invalid.push(field);
|
|
});
|
|
return { valid: invalid.length === 0, invalid: invalid };
|
|
}
|
|
|
|
function bind(form) {
|
|
if (!form || form.dataset.initiationValidationBound === "true") return;
|
|
registerDynamicRules(form);
|
|
form.dataset.initiationValidationBound = "true";
|
|
form.addEventListener("focusout", function (event) {
|
|
window.CygnusFormValidation.sanitizeElement(event.target);
|
|
validateField(event.target);
|
|
});
|
|
}
|
|
|
|
window.CygnusInitiationValidation = Object.freeze({
|
|
rules: RULES,
|
|
bind: bind,
|
|
validateField: validateField,
|
|
validateVerification: validateVerification,
|
|
validateForm: validateForm
|
|
});
|
|
}(window, document));
|