@remotion/studio
Version:
APIs for interacting with the Remotion Studio
121 lines (120 loc) • 4.95 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.ObserveDefaultProps = exports.ObserveDefaultPropsContext = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = __importStar(require("react"));
const remotion_1 = require("remotion");
const client_id_1 = require("../helpers/client-id");
const call_api_1 = require("./call-api");
exports.ObserveDefaultPropsContext = react_1.default.createContext(null);
const ObserveDefaultProps = ({ compositionId, readOnlyStudio, children }) => {
const { previewServerState, subscribeToEvent } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
const { updateProps } = (0, react_1.useContext)(remotion_1.Internals.EditorPropsContext);
const [canSaveDefaultPropsObjectState, setCanSaveDefaultProps] = (0, react_1.useState)({});
const canSaveDefaultProps = (0, react_1.useMemo)(() => {
var _a;
if (compositionId === null) {
return null;
}
return (_a = canSaveDefaultPropsObjectState[compositionId]) !== null && _a !== void 0 ? _a : null;
}, [canSaveDefaultPropsObjectState, compositionId]);
const clientId = previewServerState.type === 'connected'
? previewServerState.clientId
: null;
const applyResult = (0, react_1.useCallback)((compId, result) => {
if (result.canUpdate) {
setCanSaveDefaultProps((prevState) => ({
...prevState,
[compId]: { canUpdate: true },
}));
updateProps({
id: compId,
defaultProps: result.currentDefaultProps,
newProps: result.currentDefaultProps,
});
}
else {
setCanSaveDefaultProps((prevState) => ({
...prevState,
[compId]: {
canUpdate: false,
reason: result.reason,
determined: true,
},
}));
}
}, [updateProps]);
(0, react_1.useEffect)(() => {
if (readOnlyStudio || !clientId || compositionId === null) {
return;
}
(0, call_api_1.callApi)('/api/subscribe-to-default-props', { compositionId, clientId })
.then((can) => {
applyResult(compositionId, can);
})
.catch((err) => {
applyResult(compositionId, {
canUpdate: false,
reason: err.message,
});
});
return () => {
(0, call_api_1.callApi)('/api/unsubscribe-from-default-props', {
compositionId,
clientId,
}).catch(() => {
// Ignore errors during cleanup
});
};
}, [readOnlyStudio, clientId, compositionId, applyResult]);
(0, react_1.useEffect)(() => {
const unsub = subscribeToEvent('default-props-updatable-changed', (e) => {
if (e.type !== 'default-props-updatable-changed') {
return;
}
if (e.compositionId !== compositionId) {
return;
}
applyResult(e.compositionId, e.result);
});
return () => {
unsub();
};
}, [subscribeToEvent, compositionId, applyResult]);
const value = (0, react_1.useMemo)(() => ({ canSaveDefaultProps }), [canSaveDefaultProps]);
return (jsx_runtime_1.jsx(exports.ObserveDefaultPropsContext.Provider, { value: value, children: children }));
};
exports.ObserveDefaultProps = ObserveDefaultProps;