@daimo/pay
Version:
Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.
29 lines (26 loc) • 1.29 kB
JavaScript
import { jsx } from 'react/jsx-runtime';
import { createContext, useState, useMemo, useLayoutEffect } from 'react';
import { attachPaymentEffectHandlers } from '../payment/paymentEffects.js';
import { createPaymentStore } from '../payment/paymentStore.js';
import { createTrpcClient } from '../utils/trpc.js';
const PaymentContext = createContext(null);
function PaymentProvider({ children, payApiUrl, log = console.log, }) {
// Generate unique sessionId for tracking in the backend
const [sessionId] = useState(() => crypto.randomUUID().replaceAll("-", ""));
const trpc = useMemo(() => {
return createTrpcClient(payApiUrl, sessionId);
}, [payApiUrl, sessionId]);
const store = useMemo(() => {
return createPaymentStore();
}, []);
// Attach subscriber to run side effects in response to events. Use a
// layout effect that runs before the first render.
useLayoutEffect(() => {
const unsubscribe = attachPaymentEffectHandlers(store, trpc, log);
log("[EFFECT] subscribed to payment effects");
return unsubscribe;
}, [store, trpc, log]);
return (jsx(PaymentContext.Provider, { value: store, children: children }));
}
export { PaymentContext, PaymentProvider };
//# sourceMappingURL=PaymentProvider.js.map