UNPKG

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