UNPKG

@redocly/theme

Version:

Shared UI components lib

50 lines 2.22 kB
"use strict"; 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