@red-hat-developer-hub/backstage-plugin-lightspeed 2.8.0 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/alpha.d.ts +4 -0
- package/dist/components/DeleteModal.esm.js +1 -1
- package/dist/components/DeleteModal.esm.js.map +1 -1
- package/dist/components/LightSpeedChat.esm.js +26 -2
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/McpServersSettings.esm.js +3 -4
- package/dist/components/McpServersSettings.esm.js.map +1 -1
- package/dist/components/RenameConversationModal.esm.js +1 -1
- package/dist/components/RenameConversationModal.esm.js.map +1 -1
- package/dist/components/notebooks/AddDocumentModal.esm.js +1 -1
- package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
- package/dist/components/notebooks/DeleteNotebookModal.esm.js +1 -1
- package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -1
- package/dist/components/notebooks/FileListItem.esm.js +1 -1
- package/dist/components/notebooks/FileListItem.esm.js.map +1 -1
- package/dist/components/notebooks/NotebookView.esm.js +37 -19
- package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js +1 -1
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
- package/dist/components/notebooks/RenameNotebookModal.esm.js +1 -1
- package/dist/components/notebooks/RenameNotebookModal.esm.js.map +1 -1
- package/dist/const.esm.js +6 -1
- package/dist/const.esm.js.map +1 -1
- package/dist/hooks/useConversationMessages.esm.js +7 -3
- package/dist/hooks/useConversationMessages.esm.js.map +1 -1
- package/dist/hooks/useNotebookWelcomePrompts.esm.js +14 -0
- package/dist/hooks/useNotebookWelcomePrompts.esm.js.map +1 -0
- package/dist/translations/de.esm.js +5 -0
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +5 -0
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +5 -0
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +5 -0
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +5 -0
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +5 -0
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/utils/lightspeed-chatbox-utils.esm.js +55 -1
- package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpServersSettings.esm.js","sources":["../../src/components/McpServersSettings.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { configApiRef, fetchApiRef, useApi } from '@backstage/core-plugin-api';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport { makeStyles } from '@material-ui/core';\nimport CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';\nimport CloseOutlinedIcon from '@mui/icons-material/CloseOutlined';\nimport ModeEditOutlineOutlinedIcon from '@mui/icons-material/ModeEditOutlineOutlined';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport {\n Alert,\n Button,\n Modal,\n Switch,\n Title,\n Tooltip,\n} from '@patternfly/react-core';\nimport {\n CheckCircleIcon,\n ExclamationCircleIcon,\n KeyIcon,\n LockIcon,\n OffIcon,\n SortAmountDownIcon,\n SortAmountUpIcon,\n TimesIcon,\n} from '@patternfly/react-icons';\nimport { Table, Tbody, Td, Th, Thead, Tr } from '@patternfly/react-table';\n\nimport { lightspeedMcpManagePermission } from '@red-hat-developer-hub/backstage-plugin-lightspeed-common';\n\nimport { useTranslation } from '../hooks/useTranslation';\n\ntype ServerStatus = 'tokenRequired' | 'disabled' | 'ok' | 'failed' | 'unknown';\n\ntype McpServer = {\n id: string;\n name: string;\n url?: string;\n enabled: boolean;\n status: 'connected' | 'error' | 'unknown';\n toolCount: number;\n hasToken: boolean;\n hasUserToken: boolean;\n validationError?: string;\n};\n\ntype McpServersSettingsProps = {\n onClose: () => void;\n backgroundColor?: string;\n};\n\ntype TokenValidationState = 'idle' | 'validating' | 'success' | 'error';\n\nconst SAVED_TOKEN_MASK = '********************';\n\nconst useStyles = makeStyles(theme => ({\n '@global': {\n '.pf-v6-c-backdrop': {\n zIndex: '1400 !important',\n },\n '.pf-v5-c-backdrop': {\n zIndex: '1400 !important',\n },\n },\n root: {\n padding: 0,\n height: '100%',\n minHeight: '100%',\n width: '100%',\n overflow: 'auto',\n },\n headerRow: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(2),\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(3),\n marginRight: theme.spacing(2),\n },\n selectedCount: {\n color: theme.palette.text.secondary,\n marginTop: theme.spacing(0.5),\n fontSize: '0.75rem',\n },\n title: {\n fontSize: '1.125rem',\n },\n closeButton: {\n marginTop: -theme.spacing(1),\n marginRight: -theme.spacing(1),\n color: theme.palette.text.secondary,\n },\n nameHeaderButton: {\n paddingLeft: 0,\n paddingTop: 0,\n paddingBottom: 0,\n marginLeft: '-0.85rem',\n fontWeight: 600,\n fontSize: '0.75rem',\n lineHeight: '1.25rem',\n minHeight: 'auto',\n color: theme.palette.text.primary,\n textDecoration: 'none !important',\n display: 'inline-flex',\n alignItems: 'center',\n },\n nameHeaderText: {\n paddingLeft: '7px',\n fontSize: '0.75rem',\n lineHeight: '1.25rem',\n fontWeight: 600,\n },\n nameCell: {\n paddingLeft: '8px !important',\n },\n statusHeader: {\n paddingLeft: '0 !important',\n },\n statusColumnCell: {\n paddingLeft: '0 !important',\n },\n rowName: {\n fontSize: '1rem',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n },\n nameValue: {\n fontSize: '0.875rem',\n fontWeight: 500,\n },\n statusCell: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n whiteSpace: 'nowrap',\n },\n statusValue: {\n fontSize: '0.875rem',\n },\n statusOk: {\n color: '#147878',\n },\n statusToken: {\n color: '#147878',\n },\n statusWarn: {\n color: '#B1380B',\n },\n statusDisabled: {\n color: theme.palette.text.secondary,\n },\n actionButton: {\n color: theme.palette.text.secondary,\n },\n modalDescription: {\n color: theme.palette.text.secondary,\n fontSize: '0.875rem',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n modalContent: {\n position: 'relative',\n padding: theme.spacing(3, 0, 3, 3),\n marginRight: theme.spacing(3),\n },\n modalCustomCloseButton: {\n position: 'absolute',\n top: theme.spacing(2),\n right: theme.spacing(-0.5),\n color: '#1F1F1F',\n },\n modalHeading: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n marginBottom: theme.spacing(1),\n fontSize: '1.25rem',\n lineHeight: 1.4,\n fontWeight: 500,\n '& .v5-MuiTypography-root': {\n fontSize: '1.25rem',\n lineHeight: 1.4,\n fontWeight: 500,\n },\n },\n tokenRow: {\n position: 'relative',\n },\n tokenClearButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 1,\n color: theme.palette.text.secondary,\n },\n tokenHelper: {\n color: theme.palette.text.secondary,\n fontSize: '0.75rem',\n marginTop: theme.spacing(0.5),\n },\n tokenInput: {\n marginTop: '1rem !important',\n '& .MuiOutlinedInput-root': {\n height: '3.5rem',\n },\n '& .MuiOutlinedInput-input': {\n padding: '0 0.875rem',\n },\n '& .MuiInputLabel-root': {\n fontSize: '0.875rem',\n },\n },\n tokenInputSuccess: {\n '& .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline': {\n borderColor: '#3E8635',\n borderWidth: 1,\n },\n '& .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: '#3E8635',\n },\n '& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: '#3E8635',\n },\n '& .MuiInputLabel-root.Mui-focused': {\n color: '#3E8635',\n },\n },\n tokenInputError: {\n '& .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline': {\n borderColor: '#C9190B',\n borderWidth: 1,\n },\n '& .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: '#C9190B',\n },\n '& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: '#C9190B',\n },\n '& .MuiInputLabel-root.Mui-focused': {\n color: '#C9190B',\n },\n },\n modalActions: {\n marginTop: theme.spacing(3),\n display: 'flex',\n gap: theme.spacing(1),\n },\n modalActionButton: {\n fontSize: '1rem',\n },\n modalCancelButton: {\n fontSize: '1rem',\n },\n forgetTokenButton: {\n fontSize: '1rem',\n border: '1px solid #B1380B',\n borderRadius: '1.25rem',\n padding: '0.375rem 1rem',\n color: '#B1380B',\n backgroundColor: 'transparent',\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n boxShadow: 'none',\n '&:hover': {\n backgroundColor: 'rgba(201, 25, 11, 0.08)',\n },\n },\n configureModal: {\n '& .pf-v6-c-modal-box': {\n width: '608px',\n maxWidth: '608px',\n height: '326px',\n minHeight: '326px',\n },\n '& .pf-v6-c-modal-box__title, & .pf-v6-c-modal-box__title-text, & .pf-v5-c-modal-box__title, & .pf-v5-c-modal-box__title-text':\n {\n fontSize: '1.25rem !important',\n lineHeight: '1.4 !important',\n },\n '& .pf-v6-c-modal-box__close': {\n display: 'none',\n },\n '& .pf-v5-c-modal-box__close': {\n display: 'none',\n },\n '& .pf-v6-c-button__icon': {\n paddingTop: '5px !important',\n fontSize: '1.25rem !important',\n },\n },\n toggleCell: {\n paddingRight: '0 !important',\n },\n table: {\n width: '100%',\n '& th': {\n borderBottom: 0,\n fontSize: '0.75rem',\n fontWeight: 600,\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n textAlign: 'left',\n },\n '& td': {\n borderBottom: 0,\n paddingTop: theme.spacing(1.5),\n paddingBottom: theme.spacing(1.5),\n verticalAlign: 'middle',\n },\n },\n alert: {\n marginLeft: theme.spacing(3),\n marginRight: theme.spacing(3),\n marginBottom: theme.spacing(2),\n },\n}));\n\ntype McpServerResponse = {\n name: string;\n url?: string;\n enabled: boolean;\n status: 'connected' | 'error' | 'unknown';\n toolCount: number;\n hasToken: boolean;\n hasUserToken: boolean;\n};\n\ntype McpServersListResponse = {\n servers?: McpServerResponse[];\n};\n\ntype McpServersPatchResponse = {\n server?: McpServerResponse;\n validation?: {\n error?: string;\n };\n};\n\ntype McpServersValidateResponse = {\n name: string;\n status: 'connected' | 'error' | 'unknown';\n toolCount: number;\n validation?: {\n error?: string;\n };\n};\n\ntype McpCredentialsValidateResponse = {\n valid: boolean;\n error?: string;\n toolCount: number;\n};\n\nconst getStatusIcon = (status: ServerStatus, className: string) => {\n if (status === 'tokenRequired') return <KeyIcon className={className} />;\n if (status === 'disabled') return <OffIcon className={className} />;\n if (status === 'failed')\n return <ExclamationCircleIcon className={className} />;\n return <CheckCircleIcon className={className} />;\n};\n\nconst getDisplayStatus = (server: McpServer): ServerStatus => {\n if (!server.hasToken) return 'tokenRequired';\n if (!server.enabled) return 'disabled';\n if (server.status === 'error') return 'failed';\n if (server.status === 'connected') return 'ok';\n return 'unknown';\n};\n\nconst toUiServer = (\n server: McpServerResponse,\n validationError?: string,\n): McpServer => ({\n id: server.name,\n name: server.name,\n url: server.url,\n enabled: server.enabled,\n status: server.status,\n toolCount: server.toolCount,\n hasToken: server.hasToken,\n hasUserToken: server.hasUserToken,\n validationError: server.status === 'error' ? validationError : undefined,\n});\nexport const McpServersSettings = ({\n onClose,\n backgroundColor,\n}: McpServersSettingsProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const configApi = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const mcpManagePermission = usePermission({\n permission: lightspeedMcpManagePermission,\n });\n const canManageMcp = mcpManagePermission.allowed;\n const [servers, setServers] = useState<McpServer[]>([]);\n const [sortAsc, setSortAsc] = useState(true);\n const [isLoading, setIsLoading] = useState(true);\n const [isSaving, setIsSaving] = useState<Record<string, boolean>>({});\n const [error, setError] = useState<string | null>(null);\n const [editingServerId, setEditingServerId] = useState<string | null>(null);\n const [tokenInputValue, setTokenInputValue] = useState('');\n const [hasSavedTokenInModal, setHasSavedTokenInModal] = useState(false);\n const [canRemovePersonalToken, setCanRemovePersonalToken] = useState(false);\n const [tokenValidationState, setTokenValidationState] =\n useState<TokenValidationState>('idle');\n const [tokenValidationMessage, setTokenValidationMessage] = useState('');\n\n const getBaseUrl = useCallback(() => {\n return `${configApi.getString('backend.baseUrl')}/api/lightspeed`;\n }, [configApi]);\n\n const fetchJson = useCallback(\n async <T,>(url: string, init?: RequestInit): Promise<T> => {\n const response = await fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n ...init,\n });\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`;\n try {\n const bodyText = await response.text();\n if (bodyText) {\n const parsed = JSON.parse(bodyText);\n if (parsed?.error) {\n message = parsed.error;\n }\n }\n } catch {\n // Keep default message when parsing fails.\n }\n throw new Error(message);\n }\n\n const text = await response.text();\n return (text ? JSON.parse(text) : {}) as T;\n },\n [fetchApi],\n );\n\n const validateServer = useCallback(\n async (serverName: string) => {\n const baseUrl = getBaseUrl();\n const data = await fetchJson<McpServersValidateResponse>(\n `${baseUrl}/mcp-servers/${encodeURIComponent(serverName)}/validate`,\n {\n method: 'POST',\n },\n );\n\n setServers(prev =>\n prev.map(server =>\n server.name === serverName\n ? {\n ...server,\n status: data.status,\n toolCount: data.toolCount,\n validationError:\n data.status === 'error'\n ? (data.validation?.error ?? 'Validation failed')\n : undefined,\n }\n : server,\n ),\n );\n return data;\n },\n [fetchJson, getBaseUrl],\n );\n\n const validateCredentials = useCallback(\n async (url: string, token: string) => {\n const baseUrl = getBaseUrl();\n return await fetchJson<McpCredentialsValidateResponse>(\n `${baseUrl}/mcp-servers/validate`,\n {\n method: 'POST',\n body: JSON.stringify({ url, token }),\n },\n );\n },\n [fetchJson, getBaseUrl],\n );\n const loadServers = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const baseUrl = getBaseUrl();\n const data = await fetchJson<McpServersListResponse>(\n `${baseUrl}/mcp-servers`,\n );\n const uiServers = (data.servers ?? []).map(server => toUiServer(server));\n setServers(uiServers);\n\n if (canManageMcp) {\n const serversToValidate = uiServers.filter(server => server.hasToken);\n void Promise.allSettled(\n serversToValidate.map(async server => {\n try {\n await validateServer(server.name);\n } catch (validationError) {\n setError(\n prev =>\n prev ??\n (validationError instanceof Error\n ? validationError.message\n : `Failed to validate ${server.name}`),\n );\n }\n }),\n );\n }\n } catch (e) {\n setError(\n e instanceof Error ? e.message : 'Failed to load MCP server settings',\n );\n } finally {\n setIsLoading(false);\n }\n }, [canManageMcp, fetchJson, getBaseUrl, validateServer]);\n\n useEffect(() => {\n loadServers();\n }, [loadServers]);\n\n const patchServer = useCallback(\n async (\n serverName: string,\n body: { enabled?: boolean; token?: string | null },\n ) => {\n if (!canManageMcp) {\n return;\n }\n setError(null);\n setIsSaving(prev => ({ ...prev, [serverName]: true }));\n try {\n const baseUrl = getBaseUrl();\n const data = await fetchJson<McpServersPatchResponse>(\n `${baseUrl}/mcp-servers/${encodeURIComponent(serverName)}`,\n {\n method: 'PATCH',\n body: JSON.stringify(body),\n },\n );\n\n if (data.server) {\n setServers(prev =>\n prev.map(server =>\n server.name === serverName\n ? toUiServer(data.server!, data.validation?.error)\n : server,\n ),\n );\n } else {\n await loadServers();\n }\n } catch (e) {\n setError(\n e instanceof Error\n ? e.message\n : `Failed to update ${serverName} settings`,\n );\n throw e;\n } finally {\n setIsSaving(prev => ({ ...prev, [serverName]: false }));\n }\n },\n [canManageMcp, fetchJson, getBaseUrl, loadServers],\n );\n\n const editingServer = useMemo(\n () => servers.find(server => server.id === editingServerId),\n [servers, editingServerId],\n );\n\n const selectedCount = useMemo(\n () =>\n servers.filter(server => {\n const displayStatus = getDisplayStatus(server);\n const isUnavailable =\n displayStatus === 'failed' || displayStatus === 'tokenRequired';\n return server.enabled && !isUnavailable;\n }).length,\n [servers],\n );\n\n const sortedServers = useMemo(() => {\n const next = [...servers];\n next.sort((a, b) =>\n sortAsc ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name),\n );\n return next;\n }, [servers, sortAsc]);\n\n const getDisplayDetail = useCallback(\n (server: McpServer, displayStatus: ServerStatus): string => {\n if (displayStatus === 'disabled')\n return t('mcp.settings.status.disabled');\n if (displayStatus === 'tokenRequired')\n return t('mcp.settings.status.tokenRequired');\n if (displayStatus === 'failed') return t('mcp.settings.status.failed');\n if (displayStatus === 'ok') {\n if (server.toolCount === 1) {\n return t('mcp.settings.status.oneTool' as any, {\n count: String(server.toolCount),\n });\n }\n return t('mcp.settings.status.manyTools' as any, {\n count: String(server.toolCount),\n });\n }\n return t('mcp.settings.status.unknown');\n },\n [t],\n );\n\n const closeConfigureModal = useCallback(() => {\n setEditingServerId(null);\n setTokenInputValue('');\n setHasSavedTokenInModal(false);\n setCanRemovePersonalToken(false);\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n }, []);\n\n const openConfigureModal = (server: McpServer) => {\n setEditingServerId(server.id);\n const hasSavedToken = server.hasToken;\n setHasSavedTokenInModal(hasSavedToken);\n setCanRemovePersonalToken(server.hasUserToken);\n setTokenInputValue(hasSavedToken ? SAVED_TOKEN_MASK : '');\n if (server.status === 'error' && server.validationError) {\n setTokenValidationState('error');\n setTokenValidationMessage(server.validationError);\n } else {\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n }\n };\n\n const onTokenInputChange = (value: string) => {\n if (hasSavedTokenInModal && value !== SAVED_TOKEN_MASK) {\n setHasSavedTokenInModal(false);\n }\n setTokenInputValue(value);\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n };\n\n const clearTokenInput = () => {\n if (hasSavedTokenInModal) {\n setHasSavedTokenInModal(false);\n }\n setTokenInputValue('');\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n };\n\n let tokenInputStateClass = '';\n let tokenHelperColor: string | undefined;\n if (tokenValidationState === 'success') {\n tokenInputStateClass = classes.tokenInputSuccess;\n tokenHelperColor = '#3E8635';\n } else if (tokenValidationState === 'error') {\n tokenInputStateClass = classes.tokenInputError;\n tokenHelperColor = '#C9190B';\n }\n\n let tokenInputAdornment = (\n <IconButton\n aria-label={t('mcp.settings.token.clearAriaLabel')}\n size=\"small\"\n className={classes.tokenClearButton}\n onClick={clearTokenInput}\n >\n <CancelOutlinedIcon\n style={{\n color: '#6A6E73',\n fontSize: 24,\n width: 24,\n height: 24,\n }}\n />\n </IconButton>\n );\n\n if (tokenValidationState === 'success') {\n tokenInputAdornment = (\n <CheckCircleIcon\n style={{\n color: '#3E8635',\n fontSize: 20,\n width: 20,\n height: 20,\n marginRight: 3,\n }}\n />\n );\n } else if (tokenValidationState === 'error') {\n tokenInputAdornment = (\n <ExclamationCircleIcon\n style={{\n color: '#C9190B',\n fontSize: 20,\n width: 20,\n height: 20,\n marginRight: 3,\n }}\n />\n );\n }\n\n const isUsingOrganizationCredentialInModal =\n hasSavedTokenInModal && !canRemovePersonalToken;\n\n const saveServerToken = useCallback(async () => {\n if (!editingServer || !canManageMcp) return;\n\n if (hasSavedTokenInModal && tokenInputValue === SAVED_TOKEN_MASK) {\n closeConfigureModal();\n return;\n }\n\n const token = tokenInputValue.trim();\n const hasToken = token.length > 0;\n\n setTokenValidationState('validating');\n setTokenValidationMessage(t('mcp.settings.token.validating'));\n\n try {\n if (hasToken) {\n if (!editingServer.url) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n t('mcp.settings.token.urlUnavailableForValidation'),\n );\n return;\n }\n\n const credentialValidation = await validateCredentials(\n editingServer.url,\n token,\n );\n if (!credentialValidation.valid) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n credentialValidation.error ??\n t('mcp.settings.token.invalidCredentials'),\n );\n return;\n }\n }\n\n setTokenValidationMessage(t('mcp.settings.token.savingAndValidating'));\n await patchServer(editingServer.name, {\n enabled: editingServer.enabled,\n token: hasToken ? token : null,\n });\n const validationResult = await validateServer(editingServer.name);\n if (validationResult.status === 'error') {\n setTokenValidationState('error');\n setTokenValidationMessage(\n validationResult.validation?.error ??\n t('mcp.settings.token.validationFailed'),\n );\n return;\n }\n setTokenValidationState('success');\n setTokenValidationMessage(t('mcp.settings.token.connectionSuccessful'));\n closeConfigureModal();\n } catch (e) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n e instanceof Error\n ? e.message\n : `Failed to update ${editingServer.name} token`,\n );\n }\n }, [\n canManageMcp,\n closeConfigureModal,\n editingServer,\n hasSavedTokenInModal,\n patchServer,\n t,\n tokenInputValue,\n validateCredentials,\n validateServer,\n ]);\n\n const removePersonalToken = () => {\n setHasSavedTokenInModal(false);\n setCanRemovePersonalToken(false);\n setTokenInputValue('');\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n };\n\n return (\n <div\n className={classes.root}\n style={backgroundColor ? { backgroundColor } : undefined}\n >\n <div className={classes.headerRow}>\n <div>\n <Title headingLevel=\"h2\" size=\"xl\" className={classes.title}>\n {t('mcp.settings.title')}\n </Title>\n <div className={classes.selectedCount}>\n {t('mcp.settings.selectedCount' as any, {\n selectedCount: String(selectedCount),\n totalCount: String(servers.length),\n })}\n </div>\n </div>\n <Button\n aria-label={t('mcp.settings.closeAriaLabel')}\n icon={<TimesIcon />}\n variant=\"plain\"\n className={classes.closeButton}\n onClick={onClose}\n />\n </div>\n {error && (\n <Alert\n variant=\"danger\"\n isInline\n title={error}\n className={classes.alert}\n />\n )}\n {!mcpManagePermission.loading && !canManageMcp && (\n <Alert\n variant=\"info\"\n isInline\n title={t('mcp.settings.readOnlyAccess')}\n className={classes.alert}\n />\n )}\n\n <Table\n variant=\"compact\"\n aria-label={t('mcp.settings.tableAriaLabel')}\n className={classes.table}\n >\n <Thead>\n <Tr>\n <Th width={10} screenReaderText={t('mcp.settings.enabled')} />\n <Th>\n <Button\n variant=\"link\"\n className={classes.nameHeaderButton}\n icon={sortAsc ? <SortAmountDownIcon /> : <SortAmountUpIcon />}\n iconPosition=\"right\"\n onClick={() => setSortAsc(prev => !prev)}\n >\n <Typography component=\"span\" className={classes.nameHeaderText}>\n {t('mcp.settings.name')}\n </Typography>\n </Button>\n </Th>\n <Th className={classes.statusHeader}>{t('mcp.settings.status')}</Th>\n <Th screenReaderText={t('mcp.settings.edit')} />\n </Tr>\n </Thead>\n <Tbody>\n {isLoading && (\n <Tr>\n <Td colSpan={4}>{t('mcp.settings.loading')}</Td>\n </Tr>\n )}\n {!isLoading && sortedServers.length === 0 && (\n <Tr>\n <Td colSpan={4}>{t('mcp.settings.noneAvailable')}</Td>\n </Tr>\n )}\n {sortedServers.map(server => {\n const displayStatus = getDisplayStatus(server);\n const displayDetail = getDisplayDetail(server, displayStatus);\n let statusClass = classes.statusWarn;\n if (displayStatus === 'ok') {\n statusClass = classes.statusOk;\n } else if (displayStatus === 'tokenRequired') {\n statusClass = classes.statusToken;\n } else if (displayStatus === 'disabled') {\n statusClass = classes.statusDisabled;\n }\n\n return (\n <Tr key={server.id}>\n <Td width={10} className={classes.toggleCell}>\n {(() => {\n const isUnavailable =\n displayStatus === 'failed' ||\n displayStatus === 'tokenRequired';\n const isChecked = isUnavailable ? false : server.enabled;\n const isRowSaving = Boolean(isSaving[server.name]);\n const isToggleDisabled =\n isUnavailable || isRowSaving || !canManageMcp;\n const switchControl = (\n <Switch\n id={`mcp-switch-${server.id}`}\n aria-label={t(\n 'mcp.settings.toggleServerAriaLabel' as any,\n {\n serverName: server.name,\n },\n )}\n isChecked={isChecked}\n isDisabled={isToggleDisabled}\n onChange={(_event, checked) => {\n void patchServer(server.name, {\n enabled: checked,\n }).catch(() => {\n // patchServer already updates component error state.\n // Swallow here to avoid unhandled promise rejections\n // from event-handler fire-and-forget usage.\n });\n }}\n />\n );\n\n if (!isToggleDisabled) {\n return switchControl;\n }\n\n return (\n <Tooltip content={displayDetail}>\n <Typography component=\"span\">\n {switchControl}\n </Typography>\n </Tooltip>\n );\n })()}\n </Td>\n <Td\n width={35}\n className={`${classes.rowName} ${classes.nameCell}`}\n >\n <Typography component=\"span\" className={classes.nameValue}>\n {server.name}\n </Typography>\n </Td>\n <Td width={40} className={classes.statusColumnCell}>\n <div className={classes.statusCell}>\n {getStatusIcon(displayStatus, statusClass)}\n {displayStatus === 'failed' ? (\n <Tooltip\n content={\n server.validationError ??\n t('mcp.settings.token.validationFailed')\n }\n >\n <Typography\n component=\"span\"\n className={classes.statusValue}\n >\n {displayDetail}\n </Typography>\n </Tooltip>\n ) : (\n <Typography\n component=\"span\"\n className={classes.statusValue}\n >\n {displayDetail}\n </Typography>\n )}\n </div>\n </Td>\n <Td width={15} isActionCell style={{ textAlign: 'right' }}>\n <Button\n aria-label={t('mcp.settings.editServerAriaLabel' as any, {\n serverName: server.name,\n })}\n icon={<ModeEditOutlineOutlinedIcon fontSize=\"small\" />}\n variant=\"plain\"\n className={classes.actionButton}\n isDisabled={!canManageMcp}\n onClick={() => openConfigureModal(server)}\n />\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n <Modal\n variant=\"small\"\n title={t('mcp.settings.configureServerTitle' as any, {\n serverName: editingServer?.name ?? '',\n })}\n isOpen={Boolean(editingServer)}\n onClose={closeConfigureModal}\n className={classes.configureModal}\n >\n <div className={classes.modalContent}>\n <IconButton\n aria-label={t('mcp.settings.closeConfigureModalAriaLabel')}\n size=\"small\"\n className={classes.modalCustomCloseButton}\n onClick={closeConfigureModal}\n >\n <CloseOutlinedIcon />\n </IconButton>\n <div className={classes.modalHeading}>\n <LockIcon />\n <Typography component=\"div\">\n {t('mcp.settings.configureServerTitle' as any, {\n serverName: editingServer?.name ?? '',\n })}\n </Typography>\n </div>\n <div className={classes.modalDescription}>\n {t('mcp.settings.modalDescription')}\n </div>\n <div className={classes.tokenRow}>\n <TextField\n id=\"mcp-pat-input\"\n type=\"password\"\n variant=\"outlined\"\n fullWidth\n value={tokenInputValue}\n onChange={event => onTokenInputChange(event.target.value)}\n className={`${classes.tokenInput} ${tokenInputStateClass}`}\n label={\n hasSavedTokenInModal\n ? t('mcp.settings.savedToken')\n : t('mcp.settings.personalAccessToken')\n }\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {tokenInputAdornment}\n </InputAdornment>\n ),\n }}\n />\n {(isUsingOrganizationCredentialInModal ||\n !hasSavedTokenInModal ||\n tokenValidationState !== 'idle') && (\n <div\n className={classes.tokenHelper}\n style={{ color: tokenHelperColor }}\n >\n {tokenValidationMessage ||\n (isUsingOrganizationCredentialInModal\n ? t('mcp.settings.usingAdminCredential')\n : t('mcp.settings.enterToken'))}\n </div>\n )}\n </div>\n <div className={classes.modalActions}>\n <Button\n key=\"save\"\n variant=\"primary\"\n onClick={() => void saveServerToken()}\n isDisabled={\n !canManageMcp ||\n Boolean(isSaving[editingServer?.name ?? '']) ||\n tokenValidationState === 'validating'\n }\n className={classes.modalActionButton}\n >\n {t('modal.save')}\n </Button>\n {canRemovePersonalToken && hasSavedTokenInModal && (\n <Button\n key=\"forget-token\"\n variant=\"plain\"\n onClick={removePersonalToken}\n isDisabled={\n !canManageMcp ||\n Boolean(isSaving[editingServer?.name ?? '']) ||\n tokenValidationState === 'validating'\n }\n className={classes.forgetTokenButton}\n >\n {t('mcp.settings.removePersonalToken')}\n </Button>\n )}\n <Button\n key=\"cancel\"\n variant=\"link\"\n onClick={closeConfigureModal}\n className={classes.modalCancelButton}\n >\n {t('common.cancel')}\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"McpServersSettings.esm.js","sources":["../../src/components/McpServersSettings.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { configApiRef, fetchApiRef, useApi } from '@backstage/core-plugin-api';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport { makeStyles } from '@material-ui/core';\nimport CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';\nimport CloseOutlinedIcon from '@mui/icons-material/CloseOutlined';\nimport ModeEditOutlineOutlinedIcon from '@mui/icons-material/ModeEditOutlineOutlined';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport {\n Alert,\n Button,\n Modal,\n Switch,\n Title,\n Tooltip,\n} from '@patternfly/react-core';\nimport {\n CheckCircleIcon,\n ExclamationCircleIcon,\n KeyIcon,\n LockIcon,\n OffIcon,\n SortAmountDownIcon,\n SortAmountUpIcon,\n TimesIcon,\n} from '@patternfly/react-icons';\nimport { Table, Tbody, Td, Th, Thead, Tr } from '@patternfly/react-table';\n\nimport { lightspeedMcpManagePermission } from '@red-hat-developer-hub/backstage-plugin-lightspeed-common';\n\nimport { useTranslation } from '../hooks/useTranslation';\n\ntype ServerStatus = 'tokenRequired' | 'disabled' | 'ok' | 'failed' | 'unknown';\n\ntype McpServer = {\n id: string;\n name: string;\n url?: string;\n enabled: boolean;\n status: 'connected' | 'error' | 'unknown';\n toolCount: number;\n hasToken: boolean;\n hasUserToken: boolean;\n validationError?: string;\n};\n\ntype McpServersSettingsProps = {\n onClose: () => void;\n backgroundColor?: string;\n};\n\ntype TokenValidationState = 'idle' | 'validating' | 'success' | 'error';\n\nconst SAVED_TOKEN_MASK = '********************';\n\nconst useStyles = makeStyles(theme => ({\n '@global': {\n '.pf-v6-c-backdrop': {\n zIndex: '1400 !important',\n },\n '.pf-v5-c-backdrop': {\n zIndex: '1400 !important',\n },\n },\n root: {\n padding: 0,\n height: '100%',\n minHeight: '100%',\n width: '100%',\n overflow: 'auto',\n },\n headerRow: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(2),\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(3),\n marginRight: theme.spacing(2),\n },\n selectedCount: {\n color: theme.palette.text.secondary,\n marginTop: theme.spacing(0.5),\n fontSize: '0.75rem',\n },\n title: {\n fontSize: '1.125rem',\n },\n closeButton: {\n marginTop: -theme.spacing(1),\n marginRight: -theme.spacing(1),\n color: theme.palette.text.primary,\n },\n nameHeaderButton: {\n paddingLeft: 0,\n paddingTop: 0,\n paddingBottom: 0,\n marginLeft: '-0.85rem',\n fontWeight: 600,\n fontSize: '0.75rem',\n lineHeight: '1.25rem',\n minHeight: 'auto',\n color: theme.palette.text.primary,\n textDecoration: 'none !important',\n display: 'inline-flex',\n alignItems: 'center',\n },\n nameHeaderText: {\n paddingLeft: '7px',\n fontSize: '0.75rem',\n lineHeight: '1.25rem',\n fontWeight: 600,\n },\n nameCell: {\n paddingLeft: '8px !important',\n },\n statusHeader: {\n paddingLeft: '0 !important',\n },\n statusColumnCell: {\n paddingLeft: '0 !important',\n },\n rowName: {\n fontSize: '1rem',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n },\n nameValue: {\n fontSize: '0.875rem',\n fontWeight: 500,\n },\n statusCell: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n whiteSpace: 'nowrap',\n },\n statusValue: {\n fontSize: '0.875rem',\n },\n statusOk: {\n color: '#147878',\n },\n statusToken: {\n color: '#147878',\n },\n statusWarn: {\n color: '#B1380B',\n },\n statusDisabled: {\n color: theme.palette.text.secondary,\n },\n actionButton: {\n color: theme.palette.text.secondary,\n },\n modalDescription: {\n color: theme.palette.text.secondary,\n fontSize: '0.875rem',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n modalContent: {\n position: 'relative',\n padding: theme.spacing(3, 0, 3, 3),\n marginRight: theme.spacing(3),\n },\n modalCustomCloseButton: {\n position: 'absolute',\n top: theme.spacing(2),\n right: theme.spacing(-0.5),\n color: theme.palette.text.primary,\n },\n modalHeading: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n marginBottom: theme.spacing(1),\n fontSize: '1.25rem',\n lineHeight: 1.4,\n fontWeight: 500,\n '& .v5-MuiTypography-root': {\n fontSize: '1.25rem',\n lineHeight: 1.4,\n fontWeight: 500,\n },\n },\n tokenRow: {\n position: 'relative',\n },\n tokenClearButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 1,\n color: theme.palette.action.active,\n },\n tokenHelper: {\n color: theme.palette.text.secondary,\n fontSize: '0.75rem',\n marginTop: theme.spacing(0.5),\n },\n tokenInput: {\n marginTop: '1rem !important',\n '& .MuiOutlinedInput-root': {\n height: '3.5rem',\n },\n '& .MuiOutlinedInput-input': {\n padding: '0 0.875rem',\n },\n '& .MuiInputLabel-root': {\n fontSize: '0.875rem',\n },\n },\n tokenInputSuccess: {\n '& .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline': {\n borderColor: '#3E8635',\n borderWidth: 1,\n },\n '& .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: '#3E8635',\n },\n '& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: '#3E8635',\n },\n '& .MuiInputLabel-root.Mui-focused': {\n color: '#3E8635',\n },\n },\n tokenInputError: {\n '& .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline': {\n borderColor: '#C9190B',\n borderWidth: 1,\n },\n '& .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: '#C9190B',\n },\n '& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: '#C9190B',\n },\n '& .MuiInputLabel-root.Mui-focused': {\n color: '#C9190B',\n },\n },\n modalActions: {\n marginTop: theme.spacing(3),\n display: 'flex',\n gap: theme.spacing(1),\n },\n modalActionButton: {\n fontSize: '1rem',\n },\n modalCancelButton: {\n fontSize: '1rem',\n },\n forgetTokenButton: {\n fontSize: '1rem',\n border: '1px solid #B1380B',\n borderRadius: '1.25rem',\n padding: '0.375rem 1rem',\n color: '#B1380B',\n backgroundColor: 'transparent',\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n boxShadow: 'none',\n '&:hover': {\n backgroundColor: 'rgba(201, 25, 11, 0.08)',\n },\n },\n configureModal: {\n '& .pf-v6-c-modal-box': {\n width: '608px',\n maxWidth: '608px',\n height: '326px',\n minHeight: '326px',\n },\n '& .pf-v6-c-modal-box__title, & .pf-v6-c-modal-box__title-text, & .pf-v5-c-modal-box__title, & .pf-v5-c-modal-box__title-text':\n {\n fontSize: '1.25rem !important',\n lineHeight: '1.4 !important',\n },\n '& .pf-v6-c-modal-box__close': {\n display: 'none',\n },\n '& .pf-v5-c-modal-box__close': {\n display: 'none',\n },\n '& .pf-v6-c-button__icon': {\n paddingTop: '5px !important',\n fontSize: '1.25rem !important',\n },\n },\n toggleCell: {\n paddingRight: '0 !important',\n },\n table: {\n width: '100%',\n '& th': {\n borderBottom: 0,\n fontSize: '0.75rem',\n fontWeight: 600,\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n textAlign: 'left',\n },\n '& td': {\n borderBottom: 0,\n paddingTop: theme.spacing(1.5),\n paddingBottom: theme.spacing(1.5),\n verticalAlign: 'middle',\n },\n },\n alert: {\n marginLeft: theme.spacing(3),\n marginRight: theme.spacing(3),\n marginBottom: theme.spacing(2),\n },\n}));\n\ntype McpServerResponse = {\n name: string;\n url?: string;\n enabled: boolean;\n status: 'connected' | 'error' | 'unknown';\n toolCount: number;\n hasToken: boolean;\n hasUserToken: boolean;\n};\n\ntype McpServersListResponse = {\n servers?: McpServerResponse[];\n};\n\ntype McpServersPatchResponse = {\n server?: McpServerResponse;\n validation?: {\n error?: string;\n };\n};\n\ntype McpServersValidateResponse = {\n name: string;\n status: 'connected' | 'error' | 'unknown';\n toolCount: number;\n validation?: {\n error?: string;\n };\n};\n\ntype McpCredentialsValidateResponse = {\n valid: boolean;\n error?: string;\n toolCount: number;\n};\n\nconst getStatusIcon = (status: ServerStatus, className: string) => {\n if (status === 'tokenRequired') return <KeyIcon className={className} />;\n if (status === 'disabled') return <OffIcon className={className} />;\n if (status === 'failed')\n return <ExclamationCircleIcon className={className} />;\n return <CheckCircleIcon className={className} />;\n};\n\nconst getDisplayStatus = (server: McpServer): ServerStatus => {\n if (!server.hasToken) return 'tokenRequired';\n if (!server.enabled) return 'disabled';\n if (server.status === 'error') return 'failed';\n if (server.status === 'connected') return 'ok';\n return 'unknown';\n};\n\nconst toUiServer = (\n server: McpServerResponse,\n validationError?: string,\n): McpServer => ({\n id: server.name,\n name: server.name,\n url: server.url,\n enabled: server.enabled,\n status: server.status,\n toolCount: server.toolCount,\n hasToken: server.hasToken,\n hasUserToken: server.hasUserToken,\n validationError: server.status === 'error' ? validationError : undefined,\n});\nexport const McpServersSettings = ({\n onClose,\n backgroundColor,\n}: McpServersSettingsProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const configApi = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const mcpManagePermission = usePermission({\n permission: lightspeedMcpManagePermission,\n });\n const canManageMcp = mcpManagePermission.allowed;\n const [servers, setServers] = useState<McpServer[]>([]);\n const [sortAsc, setSortAsc] = useState(true);\n const [isLoading, setIsLoading] = useState(true);\n const [isSaving, setIsSaving] = useState<Record<string, boolean>>({});\n const [error, setError] = useState<string | null>(null);\n const [editingServerId, setEditingServerId] = useState<string | null>(null);\n const [tokenInputValue, setTokenInputValue] = useState('');\n const [hasSavedTokenInModal, setHasSavedTokenInModal] = useState(false);\n const [canRemovePersonalToken, setCanRemovePersonalToken] = useState(false);\n const [tokenValidationState, setTokenValidationState] =\n useState<TokenValidationState>('idle');\n const [tokenValidationMessage, setTokenValidationMessage] = useState('');\n\n const getBaseUrl = useCallback(() => {\n return `${configApi.getString('backend.baseUrl')}/api/lightspeed`;\n }, [configApi]);\n\n const fetchJson = useCallback(\n async <T,>(url: string, init?: RequestInit): Promise<T> => {\n const response = await fetchApi.fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n ...init,\n });\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`;\n try {\n const bodyText = await response.text();\n if (bodyText) {\n const parsed = JSON.parse(bodyText);\n if (parsed?.error) {\n message = parsed.error;\n }\n }\n } catch {\n // Keep default message when parsing fails.\n }\n throw new Error(message);\n }\n\n const text = await response.text();\n return (text ? JSON.parse(text) : {}) as T;\n },\n [fetchApi],\n );\n\n const validateServer = useCallback(\n async (serverName: string) => {\n const baseUrl = getBaseUrl();\n const data = await fetchJson<McpServersValidateResponse>(\n `${baseUrl}/mcp-servers/${encodeURIComponent(serverName)}/validate`,\n {\n method: 'POST',\n },\n );\n\n setServers(prev =>\n prev.map(server =>\n server.name === serverName\n ? {\n ...server,\n status: data.status,\n toolCount: data.toolCount,\n validationError:\n data.status === 'error'\n ? (data.validation?.error ?? 'Validation failed')\n : undefined,\n }\n : server,\n ),\n );\n return data;\n },\n [fetchJson, getBaseUrl],\n );\n\n const validateCredentials = useCallback(\n async (url: string, token: string) => {\n const baseUrl = getBaseUrl();\n return await fetchJson<McpCredentialsValidateResponse>(\n `${baseUrl}/mcp-servers/validate`,\n {\n method: 'POST',\n body: JSON.stringify({ url, token }),\n },\n );\n },\n [fetchJson, getBaseUrl],\n );\n const loadServers = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const baseUrl = getBaseUrl();\n const data = await fetchJson<McpServersListResponse>(\n `${baseUrl}/mcp-servers`,\n );\n const uiServers = (data.servers ?? []).map(server => toUiServer(server));\n setServers(uiServers);\n\n if (canManageMcp) {\n const serversToValidate = uiServers.filter(server => server.hasToken);\n void Promise.allSettled(\n serversToValidate.map(async server => {\n try {\n await validateServer(server.name);\n } catch (validationError) {\n setError(\n prev =>\n prev ??\n (validationError instanceof Error\n ? validationError.message\n : `Failed to validate ${server.name}`),\n );\n }\n }),\n );\n }\n } catch (e) {\n setError(\n e instanceof Error ? e.message : 'Failed to load MCP server settings',\n );\n } finally {\n setIsLoading(false);\n }\n }, [canManageMcp, fetchJson, getBaseUrl, validateServer]);\n\n useEffect(() => {\n loadServers();\n }, [loadServers]);\n\n const patchServer = useCallback(\n async (\n serverName: string,\n body: { enabled?: boolean; token?: string | null },\n ) => {\n if (!canManageMcp) {\n return;\n }\n setError(null);\n setIsSaving(prev => ({ ...prev, [serverName]: true }));\n try {\n const baseUrl = getBaseUrl();\n const data = await fetchJson<McpServersPatchResponse>(\n `${baseUrl}/mcp-servers/${encodeURIComponent(serverName)}`,\n {\n method: 'PATCH',\n body: JSON.stringify(body),\n },\n );\n\n if (data.server) {\n setServers(prev =>\n prev.map(server =>\n server.name === serverName\n ? toUiServer(data.server!, data.validation?.error)\n : server,\n ),\n );\n } else {\n await loadServers();\n }\n } catch (e) {\n setError(\n e instanceof Error\n ? e.message\n : `Failed to update ${serverName} settings`,\n );\n throw e;\n } finally {\n setIsSaving(prev => ({ ...prev, [serverName]: false }));\n }\n },\n [canManageMcp, fetchJson, getBaseUrl, loadServers],\n );\n\n const editingServer = useMemo(\n () => servers.find(server => server.id === editingServerId),\n [servers, editingServerId],\n );\n\n const selectedCount = useMemo(\n () =>\n servers.filter(server => {\n const displayStatus = getDisplayStatus(server);\n const isUnavailable =\n displayStatus === 'failed' || displayStatus === 'tokenRequired';\n return server.enabled && !isUnavailable;\n }).length,\n [servers],\n );\n\n const sortedServers = useMemo(() => {\n const next = [...servers];\n next.sort((a, b) =>\n sortAsc ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name),\n );\n return next;\n }, [servers, sortAsc]);\n\n const getDisplayDetail = useCallback(\n (server: McpServer, displayStatus: ServerStatus): string => {\n if (displayStatus === 'disabled')\n return t('mcp.settings.status.disabled');\n if (displayStatus === 'tokenRequired')\n return t('mcp.settings.status.tokenRequired');\n if (displayStatus === 'failed') return t('mcp.settings.status.failed');\n if (displayStatus === 'ok') {\n if (server.toolCount === 1) {\n return t('mcp.settings.status.oneTool' as any, {\n count: String(server.toolCount),\n });\n }\n return t('mcp.settings.status.manyTools' as any, {\n count: String(server.toolCount),\n });\n }\n return t('mcp.settings.status.unknown');\n },\n [t],\n );\n\n const closeConfigureModal = useCallback(() => {\n setEditingServerId(null);\n setTokenInputValue('');\n setHasSavedTokenInModal(false);\n setCanRemovePersonalToken(false);\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n }, []);\n\n const openConfigureModal = (server: McpServer) => {\n setEditingServerId(server.id);\n const hasSavedToken = server.hasToken;\n setHasSavedTokenInModal(hasSavedToken);\n setCanRemovePersonalToken(server.hasUserToken);\n setTokenInputValue(hasSavedToken ? SAVED_TOKEN_MASK : '');\n if (server.status === 'error' && server.validationError) {\n setTokenValidationState('error');\n setTokenValidationMessage(server.validationError);\n } else {\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n }\n };\n\n const onTokenInputChange = (value: string) => {\n if (hasSavedTokenInModal && value !== SAVED_TOKEN_MASK) {\n setHasSavedTokenInModal(false);\n }\n setTokenInputValue(value);\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n };\n\n const clearTokenInput = () => {\n if (hasSavedTokenInModal) {\n setHasSavedTokenInModal(false);\n }\n setTokenInputValue('');\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n };\n\n let tokenInputStateClass = '';\n let tokenHelperColor: string | undefined;\n if (tokenValidationState === 'success') {\n tokenInputStateClass = classes.tokenInputSuccess;\n tokenHelperColor = '#3E8635';\n } else if (tokenValidationState === 'error') {\n tokenInputStateClass = classes.tokenInputError;\n tokenHelperColor = '#C9190B';\n }\n\n let tokenInputAdornment = (\n <IconButton\n aria-label={t('mcp.settings.token.clearAriaLabel')}\n size=\"small\"\n className={classes.tokenClearButton}\n onClick={clearTokenInput}\n >\n <CancelOutlinedIcon\n style={{\n fontSize: 24,\n width: 24,\n height: 24,\n }}\n />\n </IconButton>\n );\n\n if (tokenValidationState === 'success') {\n tokenInputAdornment = (\n <CheckCircleIcon\n style={{\n color: '#3E8635',\n fontSize: 20,\n width: 20,\n height: 20,\n marginRight: 3,\n }}\n />\n );\n } else if (tokenValidationState === 'error') {\n tokenInputAdornment = (\n <ExclamationCircleIcon\n style={{\n color: '#C9190B',\n fontSize: 20,\n width: 20,\n height: 20,\n marginRight: 3,\n }}\n />\n );\n }\n\n const isUsingOrganizationCredentialInModal =\n hasSavedTokenInModal && !canRemovePersonalToken;\n\n const saveServerToken = useCallback(async () => {\n if (!editingServer || !canManageMcp) return;\n\n if (hasSavedTokenInModal && tokenInputValue === SAVED_TOKEN_MASK) {\n closeConfigureModal();\n return;\n }\n\n const token = tokenInputValue.trim();\n const hasToken = token.length > 0;\n\n setTokenValidationState('validating');\n setTokenValidationMessage(t('mcp.settings.token.validating'));\n\n try {\n if (hasToken) {\n if (!editingServer.url) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n t('mcp.settings.token.urlUnavailableForValidation'),\n );\n return;\n }\n\n const credentialValidation = await validateCredentials(\n editingServer.url,\n token,\n );\n if (!credentialValidation.valid) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n credentialValidation.error ??\n t('mcp.settings.token.invalidCredentials'),\n );\n return;\n }\n }\n\n setTokenValidationMessage(t('mcp.settings.token.savingAndValidating'));\n await patchServer(editingServer.name, {\n enabled: editingServer.enabled,\n token: hasToken ? token : null,\n });\n const validationResult = await validateServer(editingServer.name);\n if (validationResult.status === 'error') {\n setTokenValidationState('error');\n setTokenValidationMessage(\n validationResult.validation?.error ??\n t('mcp.settings.token.validationFailed'),\n );\n return;\n }\n setTokenValidationState('success');\n setTokenValidationMessage(t('mcp.settings.token.connectionSuccessful'));\n closeConfigureModal();\n } catch (e) {\n setTokenValidationState('error');\n setTokenValidationMessage(\n e instanceof Error\n ? e.message\n : `Failed to update ${editingServer.name} token`,\n );\n }\n }, [\n canManageMcp,\n closeConfigureModal,\n editingServer,\n hasSavedTokenInModal,\n patchServer,\n t,\n tokenInputValue,\n validateCredentials,\n validateServer,\n ]);\n\n const removePersonalToken = () => {\n setHasSavedTokenInModal(false);\n setCanRemovePersonalToken(false);\n setTokenInputValue('');\n setTokenValidationState('idle');\n setTokenValidationMessage('');\n };\n\n return (\n <div\n className={classes.root}\n style={backgroundColor ? { backgroundColor } : undefined}\n >\n <div className={classes.headerRow}>\n <div>\n <Title headingLevel=\"h2\" size=\"xl\" className={classes.title}>\n {t('mcp.settings.title')}\n </Title>\n <div className={classes.selectedCount}>\n {t('mcp.settings.selectedCount' as any, {\n selectedCount: String(selectedCount),\n totalCount: String(servers.length),\n })}\n </div>\n </div>\n <Button\n aria-label={t('mcp.settings.closeAriaLabel')}\n icon={<TimesIcon />}\n variant=\"plain\"\n className={classes.closeButton}\n onClick={onClose}\n />\n </div>\n {error && (\n <Alert\n variant=\"danger\"\n isInline\n title={error}\n className={classes.alert}\n />\n )}\n {!mcpManagePermission.loading && !canManageMcp && (\n <Alert\n variant=\"info\"\n isInline\n title={t('mcp.settings.readOnlyAccess')}\n className={classes.alert}\n />\n )}\n\n <Table\n variant=\"compact\"\n aria-label={t('mcp.settings.tableAriaLabel')}\n className={classes.table}\n >\n <Thead>\n <Tr>\n <Th width={10} screenReaderText={t('mcp.settings.enabled')} />\n <Th>\n <Button\n variant=\"link\"\n className={classes.nameHeaderButton}\n icon={sortAsc ? <SortAmountDownIcon /> : <SortAmountUpIcon />}\n iconPosition=\"right\"\n onClick={() => setSortAsc(prev => !prev)}\n >\n <Typography component=\"span\" className={classes.nameHeaderText}>\n {t('mcp.settings.name')}\n </Typography>\n </Button>\n </Th>\n <Th className={classes.statusHeader}>{t('mcp.settings.status')}</Th>\n <Th screenReaderText={t('mcp.settings.edit')} />\n </Tr>\n </Thead>\n <Tbody>\n {isLoading && (\n <Tr>\n <Td colSpan={4}>{t('mcp.settings.loading')}</Td>\n </Tr>\n )}\n {!isLoading && sortedServers.length === 0 && (\n <Tr>\n <Td colSpan={4}>{t('mcp.settings.noneAvailable')}</Td>\n </Tr>\n )}\n {sortedServers.map(server => {\n const displayStatus = getDisplayStatus(server);\n const displayDetail = getDisplayDetail(server, displayStatus);\n let statusClass = classes.statusWarn;\n if (displayStatus === 'ok') {\n statusClass = classes.statusOk;\n } else if (displayStatus === 'tokenRequired') {\n statusClass = classes.statusToken;\n } else if (displayStatus === 'disabled') {\n statusClass = classes.statusDisabled;\n }\n\n return (\n <Tr key={server.id}>\n <Td width={10} className={classes.toggleCell}>\n {(() => {\n const isUnavailable =\n displayStatus === 'failed' ||\n displayStatus === 'tokenRequired';\n const isChecked = isUnavailable ? false : server.enabled;\n const isRowSaving = Boolean(isSaving[server.name]);\n const isToggleDisabled =\n isUnavailable || isRowSaving || !canManageMcp;\n const switchControl = (\n <Switch\n id={`mcp-switch-${server.id}`}\n aria-label={t(\n 'mcp.settings.toggleServerAriaLabel' as any,\n {\n serverName: server.name,\n },\n )}\n isChecked={isChecked}\n isDisabled={isToggleDisabled}\n onChange={(_event, checked) => {\n void patchServer(server.name, {\n enabled: checked,\n }).catch(() => {\n // patchServer already updates component error state.\n // Swallow here to avoid unhandled promise rejections\n // from event-handler fire-and-forget usage.\n });\n }}\n />\n );\n\n if (!isToggleDisabled) {\n return switchControl;\n }\n\n return (\n <Tooltip content={displayDetail}>\n <Typography component=\"span\">\n {switchControl}\n </Typography>\n </Tooltip>\n );\n })()}\n </Td>\n <Td\n width={35}\n className={`${classes.rowName} ${classes.nameCell}`}\n >\n <Typography component=\"span\" className={classes.nameValue}>\n {server.name}\n </Typography>\n </Td>\n <Td width={40} className={classes.statusColumnCell}>\n <div className={classes.statusCell}>\n {getStatusIcon(displayStatus, statusClass)}\n {displayStatus === 'failed' ? (\n <Tooltip\n content={\n server.validationError ??\n t('mcp.settings.token.validationFailed')\n }\n >\n <Typography\n component=\"span\"\n className={classes.statusValue}\n >\n {displayDetail}\n </Typography>\n </Tooltip>\n ) : (\n <Typography\n component=\"span\"\n className={classes.statusValue}\n >\n {displayDetail}\n </Typography>\n )}\n </div>\n </Td>\n <Td width={15} isActionCell style={{ textAlign: 'right' }}>\n <Button\n aria-label={t('mcp.settings.editServerAriaLabel' as any, {\n serverName: server.name,\n })}\n icon={<ModeEditOutlineOutlinedIcon fontSize=\"small\" />}\n variant=\"plain\"\n className={classes.actionButton}\n isDisabled={!canManageMcp}\n onClick={() => openConfigureModal(server)}\n />\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n <Modal\n variant=\"small\"\n title={t('mcp.settings.configureServerTitle' as any, {\n serverName: editingServer?.name ?? '',\n })}\n isOpen={Boolean(editingServer)}\n onClose={closeConfigureModal}\n className={classes.configureModal}\n >\n <div className={classes.modalContent}>\n <IconButton\n aria-label={t('mcp.settings.closeConfigureModalAriaLabel')}\n size=\"small\"\n className={classes.modalCustomCloseButton}\n onClick={closeConfigureModal}\n >\n <CloseOutlinedIcon />\n </IconButton>\n <div className={classes.modalHeading}>\n <LockIcon />\n <Typography component=\"div\">\n {t('mcp.settings.configureServerTitle' as any, {\n serverName: editingServer?.name ?? '',\n })}\n </Typography>\n </div>\n <div className={classes.modalDescription}>\n {t('mcp.settings.modalDescription')}\n </div>\n <div className={classes.tokenRow}>\n <TextField\n id=\"mcp-pat-input\"\n type=\"password\"\n variant=\"outlined\"\n fullWidth\n value={tokenInputValue}\n onChange={event => onTokenInputChange(event.target.value)}\n className={`${classes.tokenInput} ${tokenInputStateClass}`}\n label={\n hasSavedTokenInModal\n ? t('mcp.settings.savedToken')\n : t('mcp.settings.personalAccessToken')\n }\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {tokenInputAdornment}\n </InputAdornment>\n ),\n }}\n />\n {(isUsingOrganizationCredentialInModal ||\n !hasSavedTokenInModal ||\n tokenValidationState !== 'idle') && (\n <div\n className={classes.tokenHelper}\n style={{ color: tokenHelperColor }}\n >\n {tokenValidationMessage ||\n (isUsingOrganizationCredentialInModal\n ? t('mcp.settings.usingAdminCredential')\n : t('mcp.settings.enterToken'))}\n </div>\n )}\n </div>\n <div className={classes.modalActions}>\n <Button\n key=\"save\"\n variant=\"primary\"\n onClick={() => void saveServerToken()}\n isDisabled={\n !canManageMcp ||\n Boolean(isSaving[editingServer?.name ?? '']) ||\n tokenValidationState === 'validating'\n }\n className={classes.modalActionButton}\n >\n {t('modal.save')}\n </Button>\n {canRemovePersonalToken && hasSavedTokenInModal && (\n <Button\n key=\"forget-token\"\n variant=\"plain\"\n onClick={removePersonalToken}\n isDisabled={\n !canManageMcp ||\n Boolean(isSaving[editingServer?.name ?? '']) ||\n tokenValidationState === 'validating'\n }\n className={classes.forgetTokenButton}\n >\n {t('mcp.settings.removePersonalToken')}\n </Button>\n )}\n <Button\n key=\"cancel\"\n variant=\"link\"\n onClick={closeConfigureModal}\n className={classes.modalCancelButton}\n >\n {t('common.cancel')}\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenameConversationModal.esm.js","sources":["../../src/components/RenameConversationModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useState } from 'react';\n\nimport { TextField } from '@material-ui/core';\nimport CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useConversations } from '../hooks/useConversations';\nimport { useRenameConversation } from '../hooks/useRenameConversation';\nimport { useTranslation } from '../hooks/useTranslation';\n\nexport const RenameConversationModal = ({\n isOpen,\n onClose,\n conversationId,\n}: {\n isOpen: boolean;\n onClose: () => void;\n conversationId: string;\n}) => {\n const { t } = useTranslation();\n const {\n mutateAsync: renameConversation,\n isError,\n error,\n } = useRenameConversation();\n const { data: conversations } = useConversations();\n const [chatName, setChatName] = useState<string>('');\n const [originalChatName, setOriginalChatName] = useState<string>('');\n\n useEffect(() => {\n if (isOpen && conversations) {\n const conversation = conversations.find(\n c => c.conversation_id === conversationId,\n );\n if (conversation) {\n setChatName(conversation.topic_summary ?? '');\n setOriginalChatName(conversation.topic_summary ?? '');\n } else {\n setChatName('');\n setOriginalChatName('');\n }\n }\n }, [isOpen, conversationId, conversations]);\n\n const handleChatNameChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setChatName(event.target.value);\n };\n\n const handleRename = async () => {\n try {\n await renameConversation({\n conversation_id: conversationId,\n newName: chatName,\n invalidateCache: false,\n });\n onClose();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"rename-modal\"\n aria-describedby=\"rename-modal-confirmation\"\n fullWidth\n >\n <DialogTitle sx={{ p: '16px 20px', fontStyle: 'inherit' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>\n {t('conversation.rename.confirm.title')}\n </Typography>\n\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n title={t('common.close')}\n size=\"large\"\n sx={{\n position: 'absolute',\n right: 1,\n top: 1,\n color: '
|
|
1
|
+
{"version":3,"file":"RenameConversationModal.esm.js","sources":["../../src/components/RenameConversationModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useState } from 'react';\n\nimport { TextField } from '@material-ui/core';\nimport CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useConversations } from '../hooks/useConversations';\nimport { useRenameConversation } from '../hooks/useRenameConversation';\nimport { useTranslation } from '../hooks/useTranslation';\n\nexport const RenameConversationModal = ({\n isOpen,\n onClose,\n conversationId,\n}: {\n isOpen: boolean;\n onClose: () => void;\n conversationId: string;\n}) => {\n const { t } = useTranslation();\n const {\n mutateAsync: renameConversation,\n isError,\n error,\n } = useRenameConversation();\n const { data: conversations } = useConversations();\n const [chatName, setChatName] = useState<string>('');\n const [originalChatName, setOriginalChatName] = useState<string>('');\n\n useEffect(() => {\n if (isOpen && conversations) {\n const conversation = conversations.find(\n c => c.conversation_id === conversationId,\n );\n if (conversation) {\n setChatName(conversation.topic_summary ?? '');\n setOriginalChatName(conversation.topic_summary ?? '');\n } else {\n setChatName('');\n setOriginalChatName('');\n }\n }\n }, [isOpen, conversationId, conversations]);\n\n const handleChatNameChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setChatName(event.target.value);\n };\n\n const handleRename = async () => {\n try {\n await renameConversation({\n conversation_id: conversationId,\n newName: chatName,\n invalidateCache: false,\n });\n onClose();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"rename-modal\"\n aria-describedby=\"rename-modal-confirmation\"\n fullWidth\n >\n <DialogTitle sx={{ p: '16px 20px', fontStyle: 'inherit' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>\n {t('conversation.rename.confirm.title')}\n </Typography>\n\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n title={t('common.close')}\n size=\"large\"\n sx={{\n position: 'absolute',\n right: 1,\n top: 1,\n color: 'text.primary',\n }}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent id=\"rename-modal-body-input\">\n <TextField\n id=\"outlined-chat-name-input\"\n label={t('conversation.rename.placeholder')}\n onChange={handleChatNameChange}\n fullWidth\n value={chatName}\n style={{ marginTop: '10px' }}\n variant=\"outlined\"\n InputProps={{\n autoFocus: true,\n endAdornment: (\n <IconButton\n aria-label=\"clear-input\"\n onClick={() => setChatName('')}\n edge=\"end\"\n >\n <CancelOutlinedIcon />\n </IconButton>\n ),\n }}\n />\n </DialogContent>\n {isError && (\n <Box maxWidth=\"650px\" marginLeft=\"20px\" marginRight=\"20px\">\n <Alert severity=\"error\">{String(error)}</Alert>\n </Box>\n )}\n <DialogActions style={{ justifyContent: 'left', padding: '20px' }}>\n <Button\n variant=\"contained\"\n sx={{\n textTransform: 'none',\n }}\n disabled={\n chatName.trim() === '' ||\n chatName.trim() === originalChatName.trim()\n }\n onClick={handleRename}\n >\n {t('conversation.rename.confirm.action')}\n </Button>\n <Button\n key=\"cancel\"\n variant=\"outlined\"\n sx={{\n textTransform: 'none',\n }}\n onClick={onClose}\n >\n {t('common.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddDocumentModal.esm.js","sources":["../../../src/components/notebooks/AddDocumentModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useState } from 'react';\nimport { FileRejection } from 'react-dropzone';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport {\n MultipleFileUpload,\n MultipleFileUploadMain,\n} from '@patternfly/react-core';\nimport { UploadIcon } from '@patternfly/react-icons';\n\nimport { NOTEBOOK_MAX_FILES } from '../../const';\nimport { useUploadDocument } from '../../hooks/notebooks/useUploadDocument';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport {\n getNotebookAcceptedFileTypes,\n validateFiles,\n} from '../../utils/notebook-upload-utils';\nimport { FileListItem } from './FileListItem';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 24,\n maxWidth: 578,\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '24px 24px 16px',\n },\n titleText: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '1.625rem',\n letterSpacing: '-0.25px',\n },\n closeButton: {\n color: theme.palette.grey[700],\n },\n dialogContent: {\n padding: '0 24px 24px',\n },\n errorAlert: {\n marginBottom: theme.spacing(2),\n },\n dropzone: {\n '& .pf-v6-c-multiple-file-upload__main': {\n borderColor: 'var(--pf-t--global--border--color--brand--default)',\n transition: 'background-color 0.2s ease',\n cursor: 'pointer',\n },\n '& .pf-v6-c-multiple-file-upload__main:hover': {\n backgroundColor:\n 'color-mix(in srgb, var(--pf-t--global--color--brand--default) 10%, transparent)',\n },\n },\n fileListContainer: {\n marginTop: theme.spacing(2),\n maxHeight: 200,\n overflowY: 'auto',\n },\n fileListHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(1),\n },\n fileCount: {\n fontSize: '0.875rem',\n color: theme.palette.text.secondary,\n },\n dialogActions: {\n padding: '16px 24px',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n },\n addButton: {\n textTransform: 'none',\n },\n cancelButton: {\n textTransform: 'none',\n },\n}));\n\ntype AddDocumentModalProps = {\n isOpen: boolean;\n onClose: () => void;\n sessionId: string;\n existingDocumentNames: string[];\n onFilesUploading?: (files: File[]) => void;\n onUploadStarted?: (info: { fileName: string; documentId: string }) => void;\n onUploadFailed?: (fileName: string) => void;\n onDuplicatesFound?: (files: File[]) => void;\n filesToAdd?: File[];\n onFilesAdded?: () => void;\n};\n\nexport const AddDocumentModal = ({\n isOpen,\n onClose,\n sessionId,\n existingDocumentNames,\n onFilesUploading,\n onUploadStarted,\n onUploadFailed,\n onDuplicatesFound,\n filesToAdd,\n onFilesAdded,\n}: AddDocumentModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const uploadMutation = useUploadDocument();\n const [validationErrors, setValidationErrors] = useState<string[]>([]);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n\n const totalExistingAndSelected =\n existingDocumentNames.length + selectedFiles.length;\n const remainingSlots = NOTEBOOK_MAX_FILES - totalExistingAndSelected;\n\n useEffect(() => {\n if (filesToAdd && filesToAdd.length > 0) {\n setSelectedFiles(prev => [...prev, ...filesToAdd]);\n onFilesAdded?.();\n }\n }, [filesToAdd, onFilesAdded]);\n\n const handleFileDrop = (_event: unknown, files: File[]) => {\n setValidationErrors([]);\n\n const { valid, errors } = validateFiles(files, totalExistingAndSelected);\n\n if (errors.length > 0) {\n setValidationErrors(errors);\n return;\n }\n\n if (valid.length === 0) return;\n\n const existingNamesSet = new Set([\n ...existingDocumentNames,\n ...selectedFiles.map(f => f.name),\n ]);\n const newFiles = valid.filter(f => !existingNamesSet.has(f.name));\n const duplicateFiles = valid.filter(f =>\n existingDocumentNames.includes(f.name),\n );\n\n if (duplicateFiles.length > 0) {\n onDuplicatesFound?.(duplicateFiles);\n }\n\n if (newFiles.length > 0) {\n setSelectedFiles(prev => [...prev, ...newFiles]);\n }\n };\n\n const handleRemoveFile = (index: number) => {\n setSelectedFiles(prev => prev.filter((_, i) => i !== index));\n };\n\n const handleAddFiles = () => {\n if (selectedFiles.length === 0) return;\n\n onFilesUploading?.(selectedFiles);\n for (const file of selectedFiles) {\n uploadMutation\n .mutateAsync({ sessionId, file })\n .then(data => {\n onUploadStarted?.({\n fileName: file.name,\n documentId: data.document_id,\n });\n })\n .catch(() => {\n onUploadFailed?.(file.name);\n });\n }\n\n setSelectedFiles([]);\n setValidationErrors([]);\n onClose();\n };\n\n const handleDropRejected = (rejections: FileRejection[]) => {\n const hasInvalidType = rejections.some(r =>\n r.errors.some(e => e.code === 'file-invalid-type'),\n );\n if (hasInvalidType) {\n setValidationErrors(['notebook.upload.error.unsupportedType']);\n }\n };\n\n const handleClose = () => {\n setSelectedFiles([]);\n setValidationErrors([]);\n onClose();\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby=\"add-document-modal-title\"\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Typography component=\"h2\" className={classes.titleText}>\n {t('notebook.upload.modal.title')}\n {selectedFiles.length > 0 &&\n ` (${selectedFiles.length}/${NOTEBOOK_MAX_FILES - existingDocumentNames.length})`}\n </Typography>\n <IconButton\n aria-label={t('common.close')}\n onClick={handleClose}\n className={classes.closeButton}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n\n <DialogContent className={classes.dialogContent}>\n {validationErrors.length > 0 && (\n <Alert severity=\"error\" className={classes.errorAlert}>\n {validationErrors\n .map(errorKey => {\n const message = (t as Function)(errorKey) as string;\n return errorKey === 'notebook.upload.error.tooManyFiles'\n ? message.replace('{{max}}', String(NOTEBOOK_MAX_FILES))\n : message;\n })\n .join('\\n')}\n </Alert>\n )}\n\n {remainingSlots > 0 && (\n <MultipleFileUpload\n className={classes.dropzone}\n dropzoneProps={{\n accept: getNotebookAcceptedFileTypes(),\n onDropRejected: handleDropRejected,\n }}\n onFileDrop={handleFileDrop}\n >\n <MultipleFileUploadMain\n titleIcon={<UploadIcon />}\n titleText={t('notebook.upload.modal.dragDropTitle')}\n titleTextSeparator={t('notebook.upload.modal.separator')}\n infoText={t('notebook.upload.modal.infoText')}\n browseButtonText={t('notebook.upload.modal.browseButton')}\n />\n </MultipleFileUpload>\n )}\n\n {selectedFiles.length > 0 && (\n <Box className={classes.fileListContainer}>\n <Box className={classes.fileListHeader}>\n <Typography className={classes.fileCount}>\n {(t as Function)('notebook.upload.modal.selectedFiles', {\n count: selectedFiles.length,\n max: NOTEBOOK_MAX_FILES - existingDocumentNames.length,\n })}\n </Typography>\n </Box>\n {selectedFiles.map((file, index) => (\n <FileListItem\n key={`${file.name}-${index}`}\n file={file}\n onRemove={() => handleRemoveFile(index)}\n removeAriaLabel={(t as Function)(\n 'notebook.upload.modal.removeFile',\n {\n fileName: file.name,\n },\n )}\n />\n ))}\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className={classes.dialogActions}>\n <Button\n onClick={handleClose}\n className={classes.cancelButton}\n color=\"inherit\"\n >\n {t('common.cancel')}\n </Button>\n <Button\n onClick={handleAddFiles}\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n disabled={selectedFiles.length === 0}\n >\n {(t as Function)('notebook.upload.modal.addButton', {\n count: selectedFiles.length,\n })}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddDocumentModal.esm.js","sources":["../../../src/components/notebooks/AddDocumentModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useState } from 'react';\nimport { FileRejection } from 'react-dropzone';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport {\n MultipleFileUpload,\n MultipleFileUploadMain,\n} from '@patternfly/react-core';\nimport { UploadIcon } from '@patternfly/react-icons';\n\nimport { NOTEBOOK_MAX_FILES } from '../../const';\nimport { useUploadDocument } from '../../hooks/notebooks/useUploadDocument';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport {\n getNotebookAcceptedFileTypes,\n validateFiles,\n} from '../../utils/notebook-upload-utils';\nimport { FileListItem } from './FileListItem';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 24,\n maxWidth: 578,\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '24px 24px 16px',\n },\n titleText: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '1.625rem',\n letterSpacing: '-0.25px',\n },\n closeButton: {\n color: theme.palette.text.primary,\n },\n dialogContent: {\n padding: '0 24px 24px',\n },\n errorAlert: {\n marginBottom: theme.spacing(2),\n },\n dropzone: {\n '& .pf-v6-c-multiple-file-upload__main': {\n borderColor: 'var(--pf-t--global--border--color--brand--default)',\n transition: 'background-color 0.2s ease',\n cursor: 'pointer',\n },\n '& .pf-v6-c-multiple-file-upload__main:hover': {\n backgroundColor:\n 'color-mix(in srgb, var(--pf-t--global--color--brand--default) 10%, transparent)',\n },\n },\n fileListContainer: {\n marginTop: theme.spacing(2),\n maxHeight: 200,\n overflowY: 'auto',\n },\n fileListHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(1),\n },\n fileCount: {\n fontSize: '0.875rem',\n color: theme.palette.text.secondary,\n },\n dialogActions: {\n padding: '16px 24px',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n },\n addButton: {\n textTransform: 'none',\n },\n cancelButton: {\n textTransform: 'none',\n },\n}));\n\ntype AddDocumentModalProps = {\n isOpen: boolean;\n onClose: () => void;\n sessionId: string;\n existingDocumentNames: string[];\n onFilesUploading?: (files: File[]) => void;\n onUploadStarted?: (info: { fileName: string; documentId: string }) => void;\n onUploadFailed?: (fileName: string) => void;\n onDuplicatesFound?: (files: File[]) => void;\n filesToAdd?: File[];\n onFilesAdded?: () => void;\n};\n\nexport const AddDocumentModal = ({\n isOpen,\n onClose,\n sessionId,\n existingDocumentNames,\n onFilesUploading,\n onUploadStarted,\n onUploadFailed,\n onDuplicatesFound,\n filesToAdd,\n onFilesAdded,\n}: AddDocumentModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const uploadMutation = useUploadDocument();\n const [validationErrors, setValidationErrors] = useState<string[]>([]);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n\n const totalExistingAndSelected =\n existingDocumentNames.length + selectedFiles.length;\n const remainingSlots = NOTEBOOK_MAX_FILES - totalExistingAndSelected;\n\n useEffect(() => {\n if (filesToAdd && filesToAdd.length > 0) {\n setSelectedFiles(prev => [...prev, ...filesToAdd]);\n onFilesAdded?.();\n }\n }, [filesToAdd, onFilesAdded]);\n\n const handleFileDrop = (_event: unknown, files: File[]) => {\n setValidationErrors([]);\n\n const { valid, errors } = validateFiles(files, totalExistingAndSelected);\n\n if (errors.length > 0) {\n setValidationErrors(errors);\n return;\n }\n\n if (valid.length === 0) return;\n\n const existingNamesSet = new Set([\n ...existingDocumentNames,\n ...selectedFiles.map(f => f.name),\n ]);\n const newFiles = valid.filter(f => !existingNamesSet.has(f.name));\n const duplicateFiles = valid.filter(f =>\n existingDocumentNames.includes(f.name),\n );\n\n if (duplicateFiles.length > 0) {\n onDuplicatesFound?.(duplicateFiles);\n }\n\n if (newFiles.length > 0) {\n setSelectedFiles(prev => [...prev, ...newFiles]);\n }\n };\n\n const handleRemoveFile = (index: number) => {\n setSelectedFiles(prev => prev.filter((_, i) => i !== index));\n };\n\n const handleAddFiles = () => {\n if (selectedFiles.length === 0) return;\n\n onFilesUploading?.(selectedFiles);\n for (const file of selectedFiles) {\n uploadMutation\n .mutateAsync({ sessionId, file })\n .then(data => {\n onUploadStarted?.({\n fileName: file.name,\n documentId: data.document_id,\n });\n })\n .catch(() => {\n onUploadFailed?.(file.name);\n });\n }\n\n setSelectedFiles([]);\n setValidationErrors([]);\n onClose();\n };\n\n const handleDropRejected = (rejections: FileRejection[]) => {\n const hasInvalidType = rejections.some(r =>\n r.errors.some(e => e.code === 'file-invalid-type'),\n );\n if (hasInvalidType) {\n setValidationErrors(['notebook.upload.error.unsupportedType']);\n }\n };\n\n const handleClose = () => {\n setSelectedFiles([]);\n setValidationErrors([]);\n onClose();\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby=\"add-document-modal-title\"\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Typography component=\"h2\" className={classes.titleText}>\n {t('notebook.upload.modal.title')}\n {selectedFiles.length > 0 &&\n ` (${selectedFiles.length}/${NOTEBOOK_MAX_FILES - existingDocumentNames.length})`}\n </Typography>\n <IconButton\n aria-label={t('common.close')}\n onClick={handleClose}\n className={classes.closeButton}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n\n <DialogContent className={classes.dialogContent}>\n {validationErrors.length > 0 && (\n <Alert severity=\"error\" className={classes.errorAlert}>\n {validationErrors\n .map(errorKey => {\n const message = (t as Function)(errorKey) as string;\n return errorKey === 'notebook.upload.error.tooManyFiles'\n ? message.replace('{{max}}', String(NOTEBOOK_MAX_FILES))\n : message;\n })\n .join('\\n')}\n </Alert>\n )}\n\n {remainingSlots > 0 && (\n <MultipleFileUpload\n className={classes.dropzone}\n dropzoneProps={{\n accept: getNotebookAcceptedFileTypes(),\n onDropRejected: handleDropRejected,\n }}\n onFileDrop={handleFileDrop}\n >\n <MultipleFileUploadMain\n titleIcon={<UploadIcon />}\n titleText={t('notebook.upload.modal.dragDropTitle')}\n titleTextSeparator={t('notebook.upload.modal.separator')}\n infoText={t('notebook.upload.modal.infoText')}\n browseButtonText={t('notebook.upload.modal.browseButton')}\n />\n </MultipleFileUpload>\n )}\n\n {selectedFiles.length > 0 && (\n <Box className={classes.fileListContainer}>\n <Box className={classes.fileListHeader}>\n <Typography className={classes.fileCount}>\n {(t as Function)('notebook.upload.modal.selectedFiles', {\n count: selectedFiles.length,\n max: NOTEBOOK_MAX_FILES - existingDocumentNames.length,\n })}\n </Typography>\n </Box>\n {selectedFiles.map((file, index) => (\n <FileListItem\n key={`${file.name}-${index}`}\n file={file}\n onRemove={() => handleRemoveFile(index)}\n removeAriaLabel={(t as Function)(\n 'notebook.upload.modal.removeFile',\n {\n fileName: file.name,\n },\n )}\n />\n ))}\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className={classes.dialogActions}>\n <Button\n onClick={handleClose}\n className={classes.cancelButton}\n color=\"inherit\"\n >\n {t('common.cancel')}\n </Button>\n <Button\n onClick={handleAddFiles}\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n disabled={selectedFiles.length === 0}\n >\n {(t as Function)('notebook.upload.modal.addButton', {\n count: selectedFiles.length,\n })}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteNotebookModal.esm.js","sources":["../../../src/components/notebooks/DeleteNotebookModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useDeleteNotebook } from '../../hooks/notebooks/useDeleteNotebook';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 16,\n },\n dialogTitle: {\n padding: '16px 20px',\n fontStyle: 'inherit',\n },\n dialogContent: {\n paddingTop: 0,\n paddingBottom: theme.spacing(5),\n },\n titleRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n titleText: {\n fontWeight: 'bold',\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.
|
|
1
|
+
{"version":3,"file":"DeleteNotebookModal.esm.js","sources":["../../../src/components/notebooks/DeleteNotebookModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useDeleteNotebook } from '../../hooks/notebooks/useDeleteNotebook';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 16,\n },\n dialogTitle: {\n padding: '16px 20px',\n fontStyle: 'inherit',\n },\n dialogContent: {\n paddingTop: 0,\n paddingBottom: theme.spacing(5),\n },\n titleRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n titleText: {\n fontWeight: 'bold',\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.text.primary,\n },\n errorBox: {\n maxWidth: 650,\n marginLeft: theme.spacing(2.5),\n marginRight: theme.spacing(2.5),\n },\n dialogActions: {\n justifyContent: 'left',\n padding: theme.spacing(2.5),\n gap: theme.spacing(1),\n },\n deleteButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n cancelButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n}));\n\nexport const DeleteNotebookModal = ({\n isOpen,\n onClose,\n onDeleted,\n sessionId,\n name,\n}: {\n isOpen: boolean;\n onClose: () => void;\n onDeleted: () => void;\n sessionId: string;\n name: string;\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const { mutateAsync: deleteNotebook, isError, error } = useDeleteNotebook();\n\n const handleDelete = async () => {\n try {\n await deleteNotebook(sessionId);\n onDeleted();\n onClose();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"delete-notebook-modal\"\n aria-describedby=\"delete-notebook-modal-body\"\n fullWidth\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Box className={classes.titleRow}>\n <Typography component=\"span\" className={classes.titleText}>\n {t('notebooks.delete.title', { name } as any)}\n </Typography>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n title={t('common.close')}\n size=\"large\"\n className={classes.closeButton}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent\n id=\"delete-notebook-modal-body\"\n className={classes.dialogContent}\n >\n <Typography variant=\"body2\">{t('notebooks.delete.message')}</Typography>\n </DialogContent>\n {isError && (\n <Box className={classes.errorBox}>\n <Alert severity=\"error\">{String(error)}</Alert>\n </Box>\n )}\n <DialogActions className={classes.dialogActions}>\n <Button\n variant=\"contained\"\n color=\"error\"\n className={classes.deleteButton}\n onClick={handleDelete}\n >\n {t('notebooks.delete.action')}\n </Button>\n <Button\n key=\"cancel\"\n variant=\"outlined\"\n className={classes.cancelButton}\n onClick={onClose}\n >\n {t('common.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileListItem.esm.js","sources":["../../../src/components/notebooks/FileListItem.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { FileTypeIcon } from './FileTypeIcon';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n alignItems: 'center',\n padding: '8px 12px',\n borderRadius: 8,\n backgroundColor: theme.palette.type === 'dark' ? '#2a2a2a' : '#f5f5f5',\n marginBottom: 8,\n '&:last-child': {\n marginBottom: 0,\n },\n },\n fileInfo: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n minWidth: 0,\n gap: 12,\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n },\n fileSize: {\n color: theme.palette.text.secondary,\n fontSize: '0.75rem',\n flexShrink: 0,\n marginRight: 8,\n },\n removeButton: {\n padding: 4,\n color: theme.palette.
|
|
1
|
+
{"version":3,"file":"FileListItem.esm.js","sources":["../../../src/components/notebooks/FileListItem.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { FileTypeIcon } from './FileTypeIcon';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n alignItems: 'center',\n padding: '8px 12px',\n borderRadius: 8,\n backgroundColor: theme.palette.type === 'dark' ? '#2a2a2a' : '#f5f5f5',\n marginBottom: 8,\n '&:last-child': {\n marginBottom: 0,\n },\n },\n fileInfo: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n minWidth: 0,\n gap: 12,\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n },\n fileSize: {\n color: theme.palette.text.secondary,\n fontSize: '0.75rem',\n flexShrink: 0,\n marginRight: 8,\n },\n removeButton: {\n padding: 4,\n color: theme.palette.action.active,\n '&:hover': {\n color: theme.palette.error.main,\n },\n },\n}));\n\ntype FileListItemProps = {\n file: File;\n onRemove: () => void;\n removeAriaLabel?: string;\n};\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n};\n\nconst MAX_FILENAME_LENGTH = 30;\n\nconst truncateFileName = (fileName: string, maxLength: number): string => {\n if (fileName.length <= maxLength) return fileName;\n\n const lastDot = fileName.lastIndexOf('.');\n const extension = lastDot >= 0 ? fileName.slice(lastDot) : '';\n const baseName = lastDot >= 0 ? fileName.slice(0, lastDot) : fileName;\n\n const availableLength = maxLength - extension.length - 3;\n if (availableLength <= 0) return fileName;\n\n return `${baseName.slice(0, availableLength)}...${extension}`;\n};\n\nexport const FileListItem = ({\n file,\n onRemove,\n removeAriaLabel = 'Remove file',\n}: FileListItemProps) => {\n const classes = useStyles();\n const displayName = truncateFileName(file.name, MAX_FILENAME_LENGTH);\n\n return (\n <Box className={classes.container}>\n <Box className={classes.fileInfo}>\n <FileTypeIcon fileName={file.name} />\n <Typography className={classes.fileName} title={file.name}>\n {displayName}\n </Typography>\n </Box>\n <Typography className={classes.fileSize}>\n {formatFileSize(file.size)}\n </Typography>\n <IconButton\n className={classes.removeButton}\n onClick={onRemove}\n aria-label={removeAriaLabel}\n size=\"small\"\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|