@redocly/theme
Version:
Shared UI components lib
50 lines • 2.22 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useConnectMCPButton = useConnectMCPButton;
const react_1 = require("react");
const lodash_debounce_1 = __importDefault(require("lodash.debounce"));
const use_theme_hooks_1 = require("./use-theme-hooks");
const use_mcp_config_1 = require("./use-mcp-config");
const clipboard_service_1 = require("../utils/clipboard-service");
const COPIED_RESET_TIMEOUT = 1000;
function useConnectMCPButton({ options = ['cursor', 'vscode', 'copy'], } = {}) {
const { useTranslate } = (0, use_theme_hooks_1.useThemeHooks)();
const { translate } = useTranslate();
const { serverName, serverUrl, cursorUrl, vscodeUrl } = (0, use_mcp_config_1.useMCPConfig)();
const [isCopied, setIsCopied] = (0, react_1.useState)(false);
// eslint-disable-next-line react-hooks/exhaustive-deps
const resetCopied = (0, react_1.useCallback)((0, lodash_debounce_1.default)(() => setIsCopied(false), COPIED_RESET_TIMEOUT), []);
const handleAction = (0, react_1.useCallback)((action) => {
if (action === 'copy') {
const config = {
[serverName]: {
url: serverUrl,
description: 'MCP Server',
},
};
clipboard_service_1.ClipboardService.copyCustom(JSON.stringify(config, null, 2));
setIsCopied(true);
resetCopied();
return;
}
const urlMap = {
cursor: cursorUrl,
vscode: vscodeUrl,
};
window.open(urlMap[action], '_blank');
}, [cursorUrl, vscodeUrl, serverUrl, serverName, resetCopied]);
const triggerButtonText = (0, react_1.useMemo)(() => translate('page.actions.connectMcp', 'Connect MCP'), [translate]);
const visibleOptions = (0, react_1.useMemo)(() => options.filter(Boolean), [options]);
return {
isCopied,
cursorUrl,
vscodeUrl,
triggerButtonText,
visibleOptions,
handleAction,
};
}
//# sourceMappingURL=use-connect-mcp-button.js.map