@remotion/studio
Version:
APIs for interacting with the Remotion Studio
51 lines (50 loc) • 2.1 kB
JavaScript
;
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;