UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

97 lines (96 loc) 4.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VisualControlHandle = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const remotion_1 = require("remotion"); const no_react_1 = require("remotion/no-react"); const VisualControls_1 = require("../../visual-controls/VisualControls"); const get_current_edited_value_1 = require("../../visual-controls/get-current-edited-value"); const NotificationCenter_1 = require("../Notifications/NotificationCenter"); const ZodSwitch_1 = require("../RenderModal/SchemaEditor/ZodSwitch"); const extract_enum_json_paths_1 = require("../RenderModal/SchemaEditor/extract-enum-json-paths"); const local_state_1 = require("../RenderModal/SchemaEditor/local-state"); const actions_1 = require("../RenderQueue/actions"); const get_zod_if_possible_1 = require("../get-zod-if-possible"); const layout_1 = require("../layout"); const VisualControlHandleHeader_1 = require("./VisualControlHandleHeader"); const get_original_stack_trace_1 = require("./get-original-stack-trace"); const VisualControlHandle = ({ value, keyName }) => { const z = (0, get_zod_if_possible_1.useZodIfPossible)(); if (!z) { throw new Error('expected zod'); } const zodTypes = (0, get_zod_if_possible_1.useZodTypesIfPossible)(); const state = (0, react_1.useContext)(VisualControls_1.VisualControlsContext); const { updateValue } = (0, react_1.useContext)(VisualControls_1.SetVisualControlsContext); const { fastRefreshes } = (0, react_1.useContext)(remotion_1.Internals.NonceContext); const { increaseManualRefreshes } = (0, react_1.useContext)(remotion_1.Internals.SetNonceContext); const [saving, setSaving] = (0, react_1.useState)(false); const currentValue = (0, get_current_edited_value_1.getVisualControlEditedValue)({ handles: state.handles, key: keyName, }); const originalFileName = (0, get_original_stack_trace_1.useOriginalFileName)(value.stack); const { localValue, RevisionContextProvider, onChange } = (0, local_state_1.useLocalState)({ schema: value.schema, setValue: (updater) => { updateValue(keyName, updater(currentValue)); increaseManualRefreshes(); }, unsavedValue: currentValue, savedValue: value.valueInCode, }); const disableSave = window.remotion_isReadOnlyStudio || originalFileName.type !== 'loaded'; const onSave = (0, react_1.useCallback)((updater) => { if (disableSave) { return; } if (originalFileName.type !== 'loaded') { throw new Error('Original file name is not loaded'); } const val = updater(value.valueInCode); window.remotion_ignoreFastRefreshUpdate = fastRefreshes + 1; const enumPaths = (0, extract_enum_json_paths_1.extractEnumJsonPaths)({ schema: value.schema, zodRuntime: z, currentPath: [], zodTypes, }); setSaving(true); Promise.resolve() .then(() => { return (0, actions_1.applyVisualControlChange)({ fileName: originalFileName.originalFileName.source, changes: [ { id: keyName, newValueSerialized: no_react_1.NoReactInternals.serializeJSONWithSpecialTypes({ data: val, indent: 2, staticBase: window.remotion_staticBase, }).serializedString, enumPaths, }, ], }); }) .catch((e) => { (0, NotificationCenter_1.showNotification)(`Could not save visual control: ${e.message}`, 3000); }); }, [ disableSave, value.valueInCode, value.schema, fastRefreshes, z, originalFileName, keyName, zodTypes, ]); (0, react_1.useEffect)(() => { setSaving(false); }, [fastRefreshes]); return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(VisualControlHandleHeader_1.VisualControlHandleHeader, { originalFileName: originalFileName }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { block: true, y: 0.5 }), (0, jsx_runtime_1.jsx)(RevisionContextProvider, { children: (0, jsx_runtime_1.jsx)(ZodSwitch_1.ZodSwitch, { mayPad: true, schema: value.schema, showSaveButton: !disableSave, saving: saving, saveDisabledByParent: false, onSave: onSave, jsonPath: [keyName], value: localValue.value, defaultValue: value.valueInCode, setValue: onChange, onRemove: null }) })] })); }; exports.VisualControlHandle = VisualControlHandle;