UNPKG

unified-video-framework

Version:

Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more

40 lines 1.67 kB
import { useMemo } from "react"; export function resolveActiveCues(manifest, t, paused) { if (!manifest) return []; return manifest.cues.filter(c => { if (c.trigger.type === "time" && c.trigger.time) { const { start, end } = c.trigger.time; return t >= start && (end == null || t <= end); } if (c.trigger.type === "userAction") { return (c.trigger.userAction === "pause" && paused) || (c.trigger.userAction === "resume" && !paused); } return false; }); } export function useCommerceSync(manifest, time, paused) { const activeCues = useMemo(() => { const cues = resolveActiveCues(manifest, time, paused); if (manifest && cues.length > 0) { console.log(`[COMMERCE] ✅ Active cues at time ${time.toFixed(2)}s (paused=${paused}):`, cues.map(c => c.id)); } return cues; }, [manifest, time, paused]); const activeOverlays = useMemo(() => activeCues.flatMap(c => c.overlays), [activeCues]); const activeProducts = useMemo(() => { if (!manifest) return []; const ids = new Set(); for (const o of activeOverlays) for (const r of o.productRefs) ids.add(r.productId); const products = manifest.products.filter(p => ids.has(p.id)); if (products.length > 0) { console.log(`[COMMERCE] 🛍️ Active products:`, products.map(p => ({ id: p.id, title: p.title }))); } return products; }, [manifest, activeOverlays]); return { activeCues, activeOverlays, activeProducts }; } //# sourceMappingURL=useCommerceSync.js.map