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
JavaScript
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