UNPKG

remotion

Version:

Make videos programmatically

101 lines (100 loc) 4.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CompositionManagerProvider = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const CompositionManager_1 = require("./CompositionManager"); const CompositionManagerContext_1 = require("./CompositionManagerContext"); const CompositionManagerProvider = ({ children, onlyRenderComposition, currentCompositionMetadata, initialCompositions, initialCanvasContent, }) => { const [folders, setFolders] = (0, react_1.useState)([]); const [canvasContent, setCanvasContent] = (0, react_1.useState)(initialCanvasContent); const [compositions, setCompositions] = (0, react_1.useState)(initialCompositions); // CompositionManagerProvider state const currentcompositionsRef = (0, react_1.useRef)(compositions); const updateCompositions = (0, react_1.useCallback)((updateComps) => { setCompositions((comps) => { const updated = updateComps(comps); currentcompositionsRef.current = updated; return updated; }); }, []); const registerComposition = (0, react_1.useCallback)((comp) => { updateCompositions((comps) => { if (comps.find((c) => c.id === comp.id)) { throw new Error(`Multiple composition with id ${comp.id} are registered.`); } const value = [...comps, comp] .slice() .sort((a, b) => a.nonce - b.nonce); return value; }); }, [updateCompositions]); const unregisterComposition = (0, react_1.useCallback)((id) => { setCompositions((comps) => { return comps.filter((c) => c.id !== id); }); }, []); const registerFolder = (0, react_1.useCallback)((name, parent) => { setFolders((prevFolders) => { return [ ...prevFolders, { name, parent, }, ]; }); }, []); const unregisterFolder = (0, react_1.useCallback)((name, parent) => { setFolders((prevFolders) => { return prevFolders.filter((p) => !(p.name === name && p.parent === parent)); }); }, []); (0, react_1.useImperativeHandle)(CompositionManager_1.compositionsRef, () => { return { getCompositions: () => currentcompositionsRef.current, }; }, []); const updateCompositionDefaultProps = (0, react_1.useCallback)((id, newDefaultProps) => { setCompositions((comps) => { const updated = comps.map((c) => { if (c.id === id) { return { ...c, defaultProps: newDefaultProps, }; } return c; }); return updated; }); }, []); const compositionManagerSetters = (0, react_1.useMemo)(() => { return { registerComposition, unregisterComposition, registerFolder, unregisterFolder, setCanvasContent, updateCompositionDefaultProps, onlyRenderComposition, }; }, [ registerComposition, registerFolder, unregisterComposition, unregisterFolder, updateCompositionDefaultProps, onlyRenderComposition, ]); const compositionManagerContextValue = (0, react_1.useMemo)(() => { return { compositions, folders, currentCompositionMetadata, canvasContent, }; }, [compositions, folders, currentCompositionMetadata, canvasContent]); return ((0, jsx_runtime_1.jsx)(CompositionManagerContext_1.CompositionManager.Provider, { value: compositionManagerContextValue, children: (0, jsx_runtime_1.jsx)(CompositionManagerContext_1.CompositionSetters.Provider, { value: compositionManagerSetters, children: children }) })); }; exports.CompositionManagerProvider = CompositionManagerProvider;