UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

55 lines (54 loc) 1.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useResolvedStack = void 0; const react_1 = require("react"); const remotion_1 = require("remotion"); const get_stack_1 = require("./TimelineStack/get-stack"); const resolvedCache = new Map(); const inFlight = new Set(); const subscribers = new Map(); const useResolvedStack = (stack) => { const updateResolvedStackTrace = (0, react_1.useContext)(remotion_1.Internals.SequenceStackTracesUpdateContext); const [value, setValue] = (0, react_1.useState)(() => { var _a; if (!stack) { return null; } return (_a = resolvedCache.get(stack)) !== null && _a !== void 0 ? _a : null; }); (0, react_1.useEffect)(() => { if (!stack) { return; } if (resolvedCache.has(stack)) { setValue(resolvedCache.get(stack)); return; } if (!subscribers.has(stack)) { subscribers.set(stack, new Set()); } const subs = subscribers.get(stack); subs.add(setValue); if (!inFlight.has(stack)) { inFlight.add(stack); (0, get_stack_1.getOriginalLocationFromStack)(stack, 'sequence') .then((frame) => { resolvedCache.set(stack, frame); updateResolvedStackTrace(stack, frame); subs.forEach((fn) => fn(frame)); }) .catch((err) => { // eslint-disable-next-line no-console console.error('Could not get original location of Sequence', err); }) .finally(() => { inFlight.delete(stack); }); } return () => { subs.delete(setValue); }; }, [stack, updateResolvedStackTrace]); return value; }; exports.useResolvedStack = useResolvedStack;