UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

51 lines (50 loc) 2.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CopyStackTrace = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const Button_1 = require("../../components/Button"); const use_keybinding_1 = require("../../helpers/use-keybinding"); const ShortcutHint_1 = require("./ShortcutHint"); const CopyStackTrace = ({ canHaveKeyboardShortcuts, errorText }) => { const [copyState, setCopyState] = (0, react_1.useState)('idle'); const handleCopyToClipboard = (0, react_1.useCallback)(() => { navigator.clipboard .writeText(errorText) .then(() => { setCopyState('copied'); setTimeout(() => setCopyState('idle'), 2000); }) .catch(() => { setCopyState('failed'); setTimeout(() => setCopyState('idle'), 2000); }); }, [errorText]); const { registerKeybinding } = (0, use_keybinding_1.useKeybinding)(); (0, react_1.useEffect)(() => { if (!canHaveKeyboardShortcuts) { return; } const { unregister } = registerKeybinding({ event: 'keydown', key: 't', callback: handleCopyToClipboard, commandCtrlKey: true, preventDefault: true, triggerIfInputFieldFocused: false, keepRegisteredWhenNotHighestContext: false, }); return () => unregister(); }, [canHaveKeyboardShortcuts, handleCopyToClipboard, registerKeybinding]); const label = (0, react_1.useMemo)(() => { if (copyState === 'copied') { return 'Copied!'; } if (copyState === 'failed') { return 'Failed!'; } return 'Copy Stacktrace'; }, [copyState]); return (jsx_runtime_1.jsxs(Button_1.Button, { onClick: handleCopyToClipboard, children: [label, ' ', copyState === 'idle' && canHaveKeyboardShortcuts ? (jsx_runtime_1.jsx(ShortcutHint_1.ShortcutHint, { cmdOrCtrl: true, keyToPress: "t" })) : null] })); }; exports.CopyStackTrace = CopyStackTrace;