Using with React
Setup
1. Wait for ready and sync to state
import { useState, useEffect, useCallback } from 'react';
interface ByobSDK {
steps: any[];
cart: any[];
cartTotalFormatted: string;
canCheckout: boolean;
addToCart: (product: any, variantId: string, stepId?: string) => void;
checkout: (target?: string) => Promise<void>;
formatPrice: (amount: number) => string;
}
function useBundleSDK() {
const [sdk, setSdk] = useState<ByobSDK | null>(null);
const [isReady, setIsReady] = useState(false);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
if (!window.eliteBundle?.sdk) return; // SDK not enabled
function onReady() {
setSdk(window.eliteBundle.sdk.byob);
setIsReady(true);
}
function onError(e: CustomEvent<{ error: string }>) {
setError(e.detail.error);
}
document.addEventListener('elite:byob:ready', onReady);
document.addEventListener('elite:byob:error', onError as EventListener);
// Handle ready already fired
const current = window.eliteBundle.sdk.byob;
if (current && !current.isLoading && !current.error) onReady();
return () => {
document.removeEventListener('elite:byob:ready', onReady);
document.removeEventListener('elite:byob:error', onError as EventListener);
};
}, []);
return { sdk, isReady, error };
}2. Sync cart state from SDK events
3. Example component
4. Per-card quantity state
5. MOB in React
TypeScript
Last updated
Was this helpful?
