@fishjam-cloud/react-client
Version:
React client library for Fishjam
27 lines (26 loc) • 1.02 kB
JavaScript
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 };
};