import { useGlobal, useContext } from "reactn"; import firebase from "../config/firebase"; import { checkBillingDetails } from "../helpers"; import { StripeEmbeddedContext } from "../providers/StripeEmbeddedProvider"; import { useWebView } from "../providers/WebViewProvider"; import useLayoutType from "./useLayoutType"; const usePaymentSession = () => { const [, setIsLoading] = useGlobal("_isLoading"); const [, setTooltip] = useGlobal("_tooltip"); const { isNative } = useLayoutType(); const { setWebViewUrl } = useWebView(); const [currentProjectID] = useGlobal("currentProjectID"); const { setClientSecret } = useContext(StripeEmbeddedContext); const onCreatePaymentSession = async ({ numberOfCoin = 0, taskList = [], } = {}) => { checkBillingDetails({ onValidBillingDetails: () => { triggerPayment({ numberOfCoin, taskList }); }, }); }; const triggerPayment = async ({ numberOfCoin = 0, taskList = [] }) => { try { setIsLoading(true); const { data } = await firebase .functions() .httpsCallable("coins-createPaymentSession")({ numberOfCoin, taskList, projectID: currentProjectID, type: "CHECKOUT", isEmbedded: !isNative, }); if (data) { if (isNative) { setWebViewUrl(data); } else { setClientSecret(data); } } else { throw new Error("Erreur lors de la création du paiement"); } } catch (error) { console.log(error); setTooltip({ type: "error", text: error.message, }); } finally { setIsLoading(false); } }; return { onCreatePaymentSession, }; }; export default usePaymentSession;