@remotion/studio
Version:
APIs for interacting with the Remotion Studio
55 lines (54 loc) • 1.91 kB
JavaScript
;
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;