DigitalConsumer.ISS/src/helpers/global-rule-definer.js

130 lines
4.3 KiB
JavaScript

import { defineRule } from 'vee-validate';
import errorMessages from '@/constants/error-messages';
import globalRules from '@/constants/global-rules';
import { required, regex } from '@/helpers/validation-rules';
/**
* @summary Define global rules related to names
*/
function defineGlobalNameRules() {
defineRule(globalRules.FIRST_NAME_REQUIRED, required(errorMessages.FIRST_NAME_REQUIRED));
defineRule(globalRules.LAST_NAME_REQUIRED, required(errorMessages.LAST_NAME_REQUIRED));
defineRule(
globalRules.POLICYHOLDER_FIRST_NAME_REQUIRED,
required(errorMessages.POLICYHOLDER_FIRST_NAME_REQUIRED)
);
defineRule(
globalRules.POLICYHOLDER_LAST_NAME_REQUIRED,
required(errorMessages.POLICYHOLDER_LAST_NAME_REQUIRED)
);
}
/**
* @summary Define global rules related to email addresses
*/
function defineGlobalEmailRules() {
defineRule(globalRules.EMAIL_ADDRESS_REQUIRED, required(errorMessages.EMAIL_ADDRESS_REQUIRED));
defineRule(
globalRules.EMAIL_ADDRESS_FORMAT,
regex(
/^([a-zA-Z0-9_\-.+]+)@([a-zA-Z0-9_\-.]+)\.([a-zA-Z]{2,})$/,
errorMessages.EMAIL_ADDRESS_FORMAT
)
);
}
/**
* @summary Define global rules related to date/location of loss information
*/
function defineGlobalDateOfLossRules() {
defineRule(globalRules.DATE_OF_LOSS_REQUIRED, required(errorMessages.LOSS_DATE_REQUIRED));
defineRule(globalRules.DATE_OF_LOSS_NOT_TEN_YEARS_PAST, (value) => {
const lossDate = new Date(Date.parse(`${value}T00:00:00`));
const today = new Date();
const tenYearsAgo = new Date(today.getFullYear() - 10, today.getMonth(), today.getDate(), 0, 0, 0, 0);
if (lossDate < tenYearsAgo) {
return errorMessages.DAMAGE_DATE_REQUIREMENT;
}
return true;
});
defineRule(globalRules.DATE_OF_LOSS_NOT_FUTURE, (value) => {
const lossDate = new Date(Date.parse(`${value}T00:00:00`));
const today = new Date();
const tomorrow = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1, 0, 0, 0, 0);
if (lossDate >= tomorrow) {
return errorMessages.DAMAGE_DATE_NO_FUTURE_DATE;
}
return true;
});
defineRule(globalRules.DATE_OF_LOSS_CITY_REQUIRED, required(errorMessages.LOSS_CITY_REQUIRED));
defineRule(
globalRules.DATE_OF_LOSS_CITY_FORMAT,
regex(/^[a-zA-Z .'-]+$/, errorMessages.LOSS_CITY_FORMAT)
);
defineRule(globalRules.DATE_OF_LOSS_STATE_REQUIRED, required(errorMessages.LOSS_STATE_REQUIRED));
}
/**
* @summary Define global rules related to phone numbers
*/
function defineGlobalPhoneNumberRules() {
defineRule(globalRules.PHONE_NUMBER_REQUIRED, required(errorMessages.PHONE_NUMBER_REQUIRED));
defineRule(
globalRules.PHONE_NUMBER_FORMAT,
regex(
/^(\([0-9]{3}\)|[0-9]{3}) *[-.]? *[0-9]{3} *[-.]? *[0-9]{4}$/,
errorMessages.PHONE_NUMBER_FORMAT
)
);
}
/**
* @summary Define global rules related to policy numbers
*/
function defineGlobalPolicyNumberRules() {
defineRule(globalRules.POLICY_NUMBER_REQUIRED, required(errorMessages.POLICY_NUMBER_REQUIRED));
defineRule(
globalRules.POLICY_NUMBER_FORMAT,
regex(
/^~?[a-zA-Z0-9]+$/,
errorMessages.POLICY_NUMBER_FORMAT
)
);
}
/**
* @summary Define global rules related to policy zip codes
*/
function defineGlobalPolicyZipCodeRules() {
defineRule(globalRules.POLICY_ZIP_REQUIRED, required(errorMessages.POLICY_ZIP_REQUIRED));
defineRule(
globalRules.POLICY_ZIP_FORMAT,
regex(/^\d{5}$/, errorMessages.POLICY_ZIP_FORMAT)
);
}
/**
* @summary Define global rules related to zip codes
*/
function defineGlobalZipCodeRules() {
defineRule(globalRules.ZIP_CODE_REQUIRED, required(errorMessages.ZIP_REQUIRED));
defineRule(globalRules.ZIP_CODE_SEARCH_FORMAT, regex(/^\d{5}$/, errorMessages.ZIP_FORMAT));
}
/**
* @function defineGlobalRules
* @summary Define all global rules
*/
export default function defineGlobalRules() {
defineGlobalNameRules();
defineGlobalDateOfLossRules();
defineGlobalEmailRules();
defineGlobalPhoneNumberRules();
defineGlobalPolicyNumberRules();
defineGlobalPolicyZipCodeRules();
defineGlobalZipCodeRules();
defineRule(globalRules.OPTION_REQUIRED, required(errorMessages.OPTION_REQUIRED));
}