@open-tender/utils
Version:
A library of utils for use with Open Tender applications that utilize our cloud-based Order API.
67 lines (66 loc) • 2.67 kB
JavaScript
import { __awaiter } from "tslib";
import { useState, useEffect, useRef } from 'react';
import { makeFormErrors, validateCreditCard } from '../';
export const useCreditCardForm = (loading, error, data, cardType, addCard, callback, includeRecaptcha, revenue_center_id, kountSessionId, requireCardholderName = false, getRecaptchaToken) => {
const submitRef = useRef(null);
const [submitting, setSubmitting] = useState(false);
const [errors, setErrors] = useState({});
useEffect(() => {
if (loading === 'idle') {
setSubmitting(false);
if (error) {
setErrors(makeFormErrors(error));
}
}
}, [loading, error]);
const handleSubmit = (evt) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
evt === null || evt === void 0 ? void 0 : evt.preventDefault();
setErrors({});
if (!data || !cardType)
return;
const { card, errors: cardErrors } = validateCreditCard(data, cardType, requireCardholderName);
if (cardErrors) {
setErrors(cardErrors);
setSubmitting(false);
}
else {
const cardRc = revenue_center_id ? Object.assign(Object.assign({}, card), { revenue_center_id }) : card;
if (kountSessionId)
cardRc.kount_device_session_id = kountSessionId;
if (includeRecaptcha) {
try {
const token = yield (getRecaptchaToken === null || getRecaptchaToken === void 0 ? void 0 : getRecaptchaToken());
if (!token) {
setSubmitting(false);
setErrors({
form: 'Please complete the recaptcha before submitting'
});
}
else {
setSubmitting(true);
addCard(Object.assign(Object.assign({}, cardRc), { token }), callback);
}
}
catch (err) {
setSubmitting(false);
setErrors({
form: 'Please complete the recaptcha before submitting'
});
}
}
else {
setSubmitting(true);
addCard(cardRc, callback);
}
}
((_a = submitRef.current) === null || _a === void 0 ? void 0 : _a.blur) && ((_b = submitRef.current) === null || _b === void 0 ? void 0 : _b.blur());
});
return {
submitRef,
data,
errors,
submitting,
handleSubmit
};
};