UNPKG

@malga-checkout-full/core

Version:
135 lines (130 loc) 6.1 kB
'use strict'; 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;