UNPKG

@fishjam-cloud/react-client

Version:
27 lines (26 loc) 1.02 kB
import { useCallback, useEffect, useRef, useState } from "react"; export const useTrackMiddleware = (rawTrack) => { const [currentMiddleware, setMiddleware] = useState(null); const [processedTrack, setProcessedTrack] = useState(null); const cleanupRef = useRef(undefined); useEffect(() => { if (!rawTrack && processedTrack) { processedTrack.stop(); cleanupRef.current?.(); setProcessedTrack(null); } }, [rawTrack, processedTrack]); const applyMiddleware = useCallback(async (newMiddleware) => { cleanupRef.current?.(); setMiddleware(() => newMiddleware); if (newMiddleware && rawTrack) { const { track, onClear } = await newMiddleware(rawTrack); cleanupRef.current = onClear; setProcessedTrack(track); return track; } setProcessedTrack(null); return rawTrack; }, [rawTrack]); return { processedTrack, applyMiddleware, currentMiddleware }; };