remotion
Version:
Render videos in React
94 lines • 3.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CompositionManagerProvider = exports.CompositionManager = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
exports.CompositionManager = (0, react_1.createContext)({
compositions: [],
registerComposition: () => undefined,
unregisterComposition: () => undefined,
currentComposition: null,
setCurrentComposition: () => undefined,
registerSequence: () => undefined,
unregisterSequence: () => undefined,
registerAsset: () => undefined,
unregisterAsset: () => undefined,
sequences: [],
assets: [],
});
const CompositionManagerProvider = ({ children }) => {
// Wontfix, expected to have
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const [compositions, setCompositions] = (0, react_1.useState)([]);
const [currentComposition, setCurrentComposition] = (0, react_1.useState)(null);
const [assets, setAssets] = (0, react_1.useState)([]);
const [sequences, setSequences] = (0, react_1.useState)([]);
const registerComposition = (0, react_1.useCallback)((comp) => {
setCompositions((comps) => {
if (comps.find((c) => c.id === comp.id)) {
throw new Error(`Multiple composition with id ${comp.id} are registered.`);
}
return [...comps, comp].slice().sort((a, b) => a.nonce - b.nonce);
});
}, []);
const registerSequence = (0, react_1.useCallback)((seq) => {
setSequences((seqs) => {
return [...seqs, seq];
});
}, []);
const unregisterComposition = (0, react_1.useCallback)((id) => {
setCompositions((comps) => {
return comps.filter((c) => c.id !== id);
});
}, []);
const unregisterSequence = (0, react_1.useCallback)((seq) => {
setSequences((seqs) => seqs.filter((s) => s.id !== seq));
}, []);
const registerAsset = (0, react_1.useCallback)((asset) => {
setAssets((assts) => {
return [...assts, asset];
});
}, []);
const unregisterAsset = (0, react_1.useCallback)((id) => {
setAssets((assts) => {
return assts.filter((a) => a.id !== id);
});
}, []);
(0, react_1.useLayoutEffect)(() => {
if (typeof window !== 'undefined') {
window.remotion_collectAssets = () => {
setAssets([]); // clear assets at next render
return assets;
};
}
}, [assets]);
const contextValue = (0, react_1.useMemo)(() => {
return {
compositions,
registerComposition,
unregisterComposition,
currentComposition,
setCurrentComposition,
registerSequence,
unregisterSequence,
registerAsset,
unregisterAsset,
sequences,
assets,
};
}, [
compositions,
currentComposition,
registerComposition,
registerSequence,
unregisterComposition,
unregisterSequence,
registerAsset,
unregisterAsset,
sequences,
assets,
]);
return ((0, jsx_runtime_1.jsx)(exports.CompositionManager.Provider, Object.assign({ value: contextValue }, { children: children }), void 0));
};
exports.CompositionManagerProvider = CompositionManagerProvider;
//# sourceMappingURL=CompositionManager.js.map