@malga-checkout-full/core
Version:
Core components for Malga Checkout Full
135 lines (130 loc) • 6.1 kB
JavaScript
;
const settings = require('./settings-09c3a01e.js');
const object = require('./object-c85308b9.js');
const index = require('./index-98d471a6.js');
const i18n_es = require('./i18n.es-377a9cbb.js');
const schema = (locale) => {
return object.create().shape({
cardNumber: object.create$1()
.required(i18n_es.Z('paymentMethods.card.newCard.fields.cardNumber.errorMessageRequired', locale))
.test('isMin', i18n_es.Z('paymentMethods.card.newCard.fields.cardNumber.errorMessageMin', locale), (value) => {
if (!value)
return true;
return value.length >= 14;
})
.test('isMax', i18n_es.Z('paymentMethods.card.newCard.fields.cardNumber.errorMessageInvalidFormat', locale), (value) => {
if (!value)
return true;
return value.length <= 22;
})
.test('isNumber', i18n_es.Z('paymentMethods.card.newCard.fields.cardNumber.errorMessageInvalidFormat', locale), (value) => {
if (!value.length || value.length < 14)
return true;
return index.src_default.valid.number(value).isValid;
}),
expirationDate: object.create$1()
.required(i18n_es.Z('paymentMethods.card.newCard.fields.expirationDate.errorMessageRequired', locale))
.test('invalidMonth', i18n_es.Z('paymentMethods.card.newCard.fields.expirationDate.errorMessageMonthInvalid', locale), (value) => {
if (!value)
return true;
const month = value.slice(0, 2);
const parsedMonth = parseInt(month, 10);
return parsedMonth >= 1 && parsedMonth <= 12;
})
.test('isMinDate', i18n_es.Z('paymentMethods.card.newCard.fields.expirationDate.errorMessageMin', locale), (value) => {
const normalizedValue = value.replace(/\D/g, '').trim();
const lengthDate = normalizedValue.length;
if (!lengthDate)
return true;
return lengthDate === 4;
})
.test('isValidDate', i18n_es.Z('paymentMethods.card.newCard.fields.expirationDate.errorMessageInvalidFormat', locale), (value) => {
const normalizedValue = value.replace(/\D/g, '').trim();
const monthParsed = parseInt(value.slice(0, 2), 10);
if (!normalizedValue.length ||
normalizedValue.length < 4 ||
monthParsed < 1 ||
monthParsed > 12)
return true;
const [month, year] = value.split('/');
const parsedMonth = parseInt(month) - 1;
const parsedYear = parseInt(`20${year}`);
const today = new Date();
const months = Array.from({ length: 12 }).map((_, index) => index);
const isValidMonthOfCurrentYear = parsedMonth >= today.getMonth() && months.includes(parsedMonth);
const isValidMonth = parsedYear === today.getFullYear()
? isValidMonthOfCurrentYear
: months.includes(parsedMonth);
const isValidYear = parsedYear >= today.getFullYear();
return isValidMonth && isValidYear;
}),
cvv: object.create$1()
.required(i18n_es.Z('paymentMethods.card.newCard.fields.cvv.errorMessageRequired', locale))
.test('isMin', i18n_es.Z('paymentMethods.card.newCard.fields.cvv.errorMessageMin', locale), (value) => {
if (!value)
return true;
return value.length >= 3;
})
.test('isMax', i18n_es.Z('paymentMethods.card.newCard.fields.cvv.errorMessageInvalidFormat', locale), (value) => {
if (!value)
return true;
return value.length <= 4;
}),
name: object.create$1()
.required(i18n_es.Z('paymentMethods.card.newCard.fields.name.errorMessageRequired', locale))
.test('isValidName', i18n_es.Z('paymentMethods.card.newCard.fields.name.errorMessageInvalidFormat', locale), (value) => {
const normalizedValue = value.replace(/[^A-Za-z]+/g, '');
const comparedValue = value.replace(/\s/g, '');
return normalizedValue.length === comparedValue.length;
}),
installments: object.create$1().when('$hasInstallments', {
is: (hasInstallments) => hasInstallments,
then: object.create$1()
.required(i18n_es.Z('paymentMethods.card.newCard.fields.installments.errorMessageRequired', locale))
.min(1),
}),
});
};
const handleSubmitValidation = async () => {
var _a, _b, _c, _d;
const hasInstallments = (_d = (_c = (_b = (_a = settings.state.paymentMethods) === null || _a === void 0 ? void 0 : _a.credit) === null || _b === void 0 ? void 0 : _b.installments) === null || _c === void 0 ? void 0 : _c.show) !== null && _d !== void 0 ? _d : false;
const validation = await validateCreditForm(object.state$1.form, {
hasInstallments,
});
if (!validation.isValid) {
object.state$1.validations.fields = Object.assign(Object.assign({}, object.state$1.validations.fields), validation.errors);
const checkedIfAllFieldsIsBlank = checkIfAllFieldsIsBlank(object.state$1.form);
if (checkedIfAllFieldsIsBlank) {
object.state$1.validations.allFieldsIsBlank = true;
}
}
return validation.isValid;
};
const normalizeValidationErrors = (errors) => {
const normalizedErrors = errors.reduce((accumulatorErrors, currentError) => (Object.assign(Object.assign({}, accumulatorErrors), { [currentError.path]: currentError.message })), {});
return normalizedErrors;
};
const checkIfAllFieldsIsBlank = (data) => {
const fields = Object.entries(data);
const filteredBlankFieldValues = fields
.map(([field, value]) => {
const isMaskedField = ['expirationDate', 'cvv'].includes(field);
const normalizedValue = field.replace(/\D/g, '').trim();
return isMaskedField ? normalizedValue : value;
})
.filter((field) => !field || field === 'none');
return fields.length === filteredBlankFieldValues.length;
};
const validateCreditForm = async (data, context, locale) => {
try {
const cardSchema = schema(locale);
await cardSchema.validate(data, { abortEarly: false, context });
return { isValid: true };
}
catch (error) {
const errors = normalizeValidationErrors(error.inner);
return { isValid: false, errors };
}
};
exports.handleSubmitValidation = handleSubmitValidation;
exports.validateCreditForm = validateCreditForm;