UNPKG

@open-tender/utils

Version:

A library of utils for use with Open Tender applications that utilize our cloud-based Order API.

70 lines (69 loc) 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useCreditCard = void 0; const react_1 = require("react"); const index_1 = require("../index"); const getDefaultCard = (includeAddress, requireCardholderName) => { const defaultCardData = { acct: '', exp: '', cvv: '', zip: '', is_default: false }; if (includeAddress) defaultCardData.addr = ''; if (requireCardholderName) defaultCardData.cardholder_name = ''; return defaultCardData; }; const useCreditCard = (initState, cardErrors = {}, disabled = false, includeAddress = false, requireCardholderName = false) => { const [initCard, initCardType] = (0, index_1.formatCard)(initState); const submitRef = (0, react_1.useRef)(null); const defaultCard = getDefaultCard(includeAddress, requireCardholderName); const [data, setData] = (0, react_1.useState)(initCard || defaultCard); const [cardType, setCardType] = (0, react_1.useState)(initCardType || 'OTHER'); const [errors, setErrors] = (0, react_1.useState)(cardErrors); const { acct, addr, exp, cvv, zip, cardholder_name } = data; const addrComplete = includeAddress ? addr : true; const cardholderNameComplete = requireCardholderName ? cardholder_name : true; const isComplete = !!(acct && exp && cvv && zip && addrComplete && cardholderNameComplete && (0, index_1.isEmpty)(errors)); const handleChange = (name, value) => { if (name === 'acct') { const currentType = (0, index_1.getCardType)(value.replace(/\s/g, '')); setCardType(currentType); } if (name !== 'is_default') { value = (0, index_1.formatCardField)(name, value); } setData(Object.assign(Object.assign({}, data), { [name]: value })); }; const handleBlur = (name) => { const { errors: validationErrors } = (0, index_1.validateCreditCard)(data, cardType, requireCardholderName); if (validationErrors) { const error = validationErrors[name]; setErrors(Object.assign(Object.assign({}, errors), { [name]: error })); } else { setErrors({}); } }; return { submitRef, data, cardType, errors, disabled, setErrors, handleChange, handleBlur, isComplete }; }; exports.useCreditCard = useCreditCard;