@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
JavaScript
;
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;