@red-hat-developer-hub/backstage-plugin-lightspeed 2.8.0 → 2.8.2
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 +16 -0
- package/dist/alpha/LightspeedFAB.esm.js +5 -2
- package/dist/alpha/LightspeedFAB.esm.js.map +1 -1
- package/dist/alpha.d.ts +9 -3
- package/dist/components/CollapsedHistoryStrip.esm.js +25 -22
- package/dist/components/CollapsedHistoryStrip.esm.js.map +1 -1
- package/dist/components/DeleteModal.esm.js +1 -1
- package/dist/components/DeleteModal.esm.js.map +1 -1
- package/dist/components/LightSpeedChat.esm.js +43 -14
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/LightspeedChatBoxHeader.esm.js +6 -3
- package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -1
- package/dist/components/LightspeedChatContainer.esm.js +4 -2
- package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
- package/dist/components/LightspeedDrawerProvider.esm.js +6 -3
- package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -1
- package/dist/components/LightspeedFAB.esm.js +5 -2
- package/dist/components/LightspeedFAB.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/McpSettingsIcon.esm.js +14 -22
- package/dist/components/McpSettingsIcon.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/Router.esm.js +13 -4
- package/dist/components/Router.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/DeleteDocumentModal.esm.js +131 -0
- package/dist/components/notebooks/DeleteDocumentModal.esm.js.map +1 -0
- 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 +83 -48
- 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/notebooks/useDocumentStatusPolling.esm.js +2 -1
- package/dist/hooks/notebooks/useDocumentStatusPolling.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/index.d.ts +1 -1
- package/dist/translations/de.esm.js +13 -4
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +13 -6
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +13 -4
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +13 -6
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +13 -4
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +13 -7
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/utils/generateClassName.esm.js +12 -0
- package/dist/utils/generateClassName.esm.js.map +1 -0
- package/dist/utils/lightspeed-chatbox-utils.esm.js +57 -3
- package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -1
- package/package.json +2 -2
|
@@ -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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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
3
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
4
|
+
import Box from '@mui/material/Box';
|
|
5
|
+
import Button from '@mui/material/Button';
|
|
6
|
+
import Dialog from '@mui/material/Dialog';
|
|
7
|
+
import DialogActions from '@mui/material/DialogActions';
|
|
8
|
+
import DialogContent from '@mui/material/DialogContent';
|
|
9
|
+
import DialogTitle from '@mui/material/DialogTitle';
|
|
10
|
+
import IconButton from '@mui/material/IconButton';
|
|
11
|
+
import Typography from '@mui/material/Typography';
|
|
12
|
+
import { useTranslation } from '../../hooks/useTranslation.esm.js';
|
|
13
|
+
import { Trans } from '../Trans.esm.js';
|
|
14
|
+
|
|
15
|
+
const useStyles = makeStyles((theme) => ({
|
|
16
|
+
dialogPaper: {
|
|
17
|
+
borderRadius: 16
|
|
18
|
+
},
|
|
19
|
+
dialogTitle: {
|
|
20
|
+
padding: "16px 20px",
|
|
21
|
+
fontStyle: "inherit"
|
|
22
|
+
},
|
|
23
|
+
dialogContent: {
|
|
24
|
+
paddingTop: 0
|
|
25
|
+
},
|
|
26
|
+
titleRow: {
|
|
27
|
+
display: "flex",
|
|
28
|
+
alignItems: "center",
|
|
29
|
+
gap: theme.spacing(1)
|
|
30
|
+
},
|
|
31
|
+
titleText: {
|
|
32
|
+
fontWeight: "bold"
|
|
33
|
+
},
|
|
34
|
+
closeButton: {
|
|
35
|
+
position: "absolute",
|
|
36
|
+
right: theme.spacing(1),
|
|
37
|
+
top: theme.spacing(1),
|
|
38
|
+
color: theme.palette.text.primary
|
|
39
|
+
},
|
|
40
|
+
dialogActions: {
|
|
41
|
+
justifyContent: "left",
|
|
42
|
+
padding: theme.spacing(2.5),
|
|
43
|
+
gap: theme.spacing(1)
|
|
44
|
+
},
|
|
45
|
+
removeButton: {
|
|
46
|
+
textTransform: "none",
|
|
47
|
+
borderRadius: 999
|
|
48
|
+
},
|
|
49
|
+
cancelButton: {
|
|
50
|
+
textTransform: "none",
|
|
51
|
+
borderRadius: 999
|
|
52
|
+
}
|
|
53
|
+
}));
|
|
54
|
+
const DeleteDocumentModal = ({
|
|
55
|
+
isOpen,
|
|
56
|
+
onClose,
|
|
57
|
+
onConfirm,
|
|
58
|
+
documentName
|
|
59
|
+
}) => {
|
|
60
|
+
const classes = useStyles();
|
|
61
|
+
const { t } = useTranslation();
|
|
62
|
+
return /* @__PURE__ */ jsxs(
|
|
63
|
+
Dialog,
|
|
64
|
+
{
|
|
65
|
+
open: isOpen,
|
|
66
|
+
onClose,
|
|
67
|
+
"aria-labelledby": "delete-document-modal",
|
|
68
|
+
"aria-describedby": "delete-document-modal-body",
|
|
69
|
+
fullWidth: true,
|
|
70
|
+
PaperProps: {
|
|
71
|
+
className: classes.dialogPaper
|
|
72
|
+
},
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ jsx(DialogTitle, { className: classes.dialogTitle, children: /* @__PURE__ */ jsxs(Box, { className: classes.titleRow, children: [
|
|
75
|
+
/* @__PURE__ */ jsx(Typography, { component: "span", className: classes.titleText, children: t("notebook.document.delete.title") }),
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
IconButton,
|
|
78
|
+
{
|
|
79
|
+
"aria-label": "close",
|
|
80
|
+
onClick: onClose,
|
|
81
|
+
title: t("common.close"),
|
|
82
|
+
size: "large",
|
|
83
|
+
className: classes.closeButton,
|
|
84
|
+
children: /* @__PURE__ */ jsx(CloseIcon, {})
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
] }) }),
|
|
88
|
+
/* @__PURE__ */ jsx(
|
|
89
|
+
DialogContent,
|
|
90
|
+
{
|
|
91
|
+
id: "delete-document-modal-body",
|
|
92
|
+
className: classes.dialogContent,
|
|
93
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(
|
|
94
|
+
Trans,
|
|
95
|
+
{
|
|
96
|
+
message: "notebook.document.delete.description",
|
|
97
|
+
components: {
|
|
98
|
+
"<documentName/>": /* @__PURE__ */ jsx("strong", { children: documentName })
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
) })
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
/* @__PURE__ */ jsxs(DialogActions, { className: classes.dialogActions, children: [
|
|
105
|
+
/* @__PURE__ */ jsx(
|
|
106
|
+
Button,
|
|
107
|
+
{
|
|
108
|
+
variant: "contained",
|
|
109
|
+
color: "error",
|
|
110
|
+
className: classes.removeButton,
|
|
111
|
+
onClick: onConfirm,
|
|
112
|
+
children: t("notebook.document.delete.action")
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
Button,
|
|
117
|
+
{
|
|
118
|
+
variant: "outlined",
|
|
119
|
+
className: classes.cancelButton,
|
|
120
|
+
onClick: onClose,
|
|
121
|
+
children: t("common.cancel")
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
] })
|
|
125
|
+
]
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export { DeleteDocumentModal };
|
|
131
|
+
//# sourceMappingURL=DeleteDocumentModal.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteDocumentModal.esm.js","sources":["../../../src/components/notebooks/DeleteDocumentModal.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 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 { useTranslation } from '../../hooks/useTranslation';\nimport { Trans } from '../Trans';\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 },\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 dialogActions: {\n justifyContent: 'left',\n padding: theme.spacing(2.5),\n gap: theme.spacing(1),\n },\n removeButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n cancelButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n}));\n\ntype DeleteDocumentModalProps = {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n documentName: string;\n};\n\nexport const DeleteDocumentModal = ({\n isOpen,\n onClose,\n onConfirm,\n documentName,\n}: DeleteDocumentModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"delete-document-modal\"\n aria-describedby=\"delete-document-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('notebook.document.delete.title')}\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-document-modal-body\"\n className={classes.dialogContent}\n >\n <Typography variant=\"body2\">\n <Trans\n message=\"notebook.document.delete.description\"\n components={{\n '<documentName/>': <strong>{documentName}</strong>,\n }}\n />\n </Typography>\n </DialogContent>\n <DialogActions className={classes.dialogActions}>\n <Button\n variant=\"contained\"\n color=\"error\"\n className={classes.removeButton}\n onClick={onConfirm}\n >\n {t('notebook.document.delete.action')}\n </Button>\n <Button\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":"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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"}
|
|
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
3
3
|
import { useApi, configApiRef } from '@backstage/core-plugin-api';
|
|
4
4
|
import { Typography, makeStyles } from '@material-ui/core';
|
|
5
|
-
import { ChatbotFooter, MessageBar, ChatbotFootnote, ChatbotContent
|
|
5
|
+
import { ChatbotFooter, MessageBar, ChatbotFootnote, ChatbotContent } from '@patternfly/chatbot';
|
|
6
6
|
import { DrawerPanelContent, AlertGroup, Alert, AlertVariant, AlertActionCloseButton, Drawer, DrawerContent, DrawerContentBody, Tooltip, Button } from '@patternfly/react-core';
|
|
7
7
|
import { TimesIcon } from '@patternfly/react-icons';
|
|
8
8
|
import { useQueryClient } from '@tanstack/react-query';
|
|
@@ -11,10 +11,11 @@ import { TEMP_CONVERSATION_ID, UNTITLED_NOTEBOOK_NAME, NOTEBOOK_MAX_FILES } from
|
|
|
11
11
|
import { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage.esm.js';
|
|
12
12
|
import { useDocumentStatusPolling } from '../../hooks/notebooks/useDocumentStatusPolling.esm.js';
|
|
13
13
|
import { useConversationMessages } from '../../hooks/useConversationMessages.esm.js';
|
|
14
|
+
import { useNotebookWelcomePrompts } from '../../hooks/useNotebookWelcomePrompts.esm.js';
|
|
14
15
|
import { useTranslation } from '../../hooks/useTranslation.esm.js';
|
|
15
|
-
import { useWelcomePrompts } from '../../hooks/useWelcomePrompts.esm.js';
|
|
16
16
|
import { LightspeedChatBox } from '../LightspeedChatBox.esm.js';
|
|
17
17
|
import { AddDocumentModal } from './AddDocumentModal.esm.js';
|
|
18
|
+
import { DeleteDocumentModal } from './DeleteDocumentModal.esm.js';
|
|
18
19
|
import { DocumentSidebar } from './DocumentSidebar.esm.js';
|
|
19
20
|
import { OverwriteConfirmModal } from './OverwriteConfirmModal.esm.js';
|
|
20
21
|
import { SidebarExpandIcon, AddCircleFilledIcon } from './SidebarCollapseIcon.esm.js';
|
|
@@ -162,9 +163,28 @@ const useStyles = makeStyles((theme) => ({
|
|
|
162
163
|
paddingTop: theme.spacing(0.5)
|
|
163
164
|
},
|
|
164
165
|
promptSuggestions: {
|
|
166
|
+
display: "flex",
|
|
167
|
+
flexWrap: "wrap",
|
|
168
|
+
gap: theme.spacing(1),
|
|
165
169
|
width: "95%",
|
|
166
170
|
maxWidth: "unset",
|
|
167
|
-
margin:
|
|
171
|
+
margin: `${theme.spacing(3)}px auto ${theme.spacing(3)}px auto`,
|
|
172
|
+
justifyContent: "flex-start"
|
|
173
|
+
},
|
|
174
|
+
promptPill: {
|
|
175
|
+
appearance: "none",
|
|
176
|
+
background: "transparent",
|
|
177
|
+
border: `1px solid var(--pf-t--global--border--color--default)`,
|
|
178
|
+
borderRadius: "999px",
|
|
179
|
+
padding: `${theme.spacing(1)}px ${theme.spacing(2.5)}px`,
|
|
180
|
+
fontSize: "0.875rem",
|
|
181
|
+
color: "var(--pf-t--global--text--color--regular)",
|
|
182
|
+
cursor: "pointer",
|
|
183
|
+
transition: "background-color 0.15s, border-color 0.15s",
|
|
184
|
+
"&:hover": {
|
|
185
|
+
backgroundColor: "var(--pf-t--global--background--color--secondary--default)",
|
|
186
|
+
borderColor: "var(--pf-t--global--border--color--hover)"
|
|
187
|
+
}
|
|
168
188
|
},
|
|
169
189
|
footer: {
|
|
170
190
|
backgroundColor: "var(--pf-t--global--background--color--floating--default)",
|
|
@@ -213,24 +233,10 @@ const NotebookView = ({
|
|
|
213
233
|
const [deletingDocumentIds, setDeletingDocumentIds] = useState(
|
|
214
234
|
/* @__PURE__ */ new Set()
|
|
215
235
|
);
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
await notebooksApi.deleteDocument(sessionId, documentId);
|
|
221
|
-
queryClient.invalidateQueries({
|
|
222
|
-
queryKey: ["notebooks", "documents", sessionId]
|
|
223
|
-
});
|
|
224
|
-
} finally {
|
|
225
|
-
setDeletingDocumentIds((prev) => {
|
|
226
|
-
const next = new Set(prev);
|
|
227
|
-
next.delete(documentId);
|
|
228
|
-
return next;
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
},
|
|
232
|
-
[notebooksApi, sessionId, queryClient]
|
|
233
|
-
);
|
|
236
|
+
const [deleteDocumentTarget, setDeleteDocumentTarget] = useState(null);
|
|
237
|
+
const handleDeleteDocument = useCallback((documentId) => {
|
|
238
|
+
setDeleteDocumentTarget({ id: documentId, name: documentId });
|
|
239
|
+
}, []);
|
|
234
240
|
const onComplete = useCallback(
|
|
235
241
|
(message) => {
|
|
236
242
|
setIsSendButtonDisabled(false);
|
|
@@ -279,15 +285,11 @@ const NotebookView = ({
|
|
|
279
285
|
},
|
|
280
286
|
[handleInputPrompt, t]
|
|
281
287
|
);
|
|
282
|
-
const
|
|
283
|
-
const welcomePrompts =
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
message: p.message,
|
|
288
|
-
onClick: () => sendMessage(p.message)
|
|
289
|
-
};
|
|
290
|
-
}) ?? [];
|
|
288
|
+
const notebookPrompts = useNotebookWelcomePrompts();
|
|
289
|
+
const welcomePrompts = notebookPrompts.map((title) => ({
|
|
290
|
+
title,
|
|
291
|
+
onClick: () => sendMessage(title)
|
|
292
|
+
}));
|
|
291
293
|
const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
|
|
292
294
|
const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);
|
|
293
295
|
const [uploadingFileNames, setUploadingFileNames] = useState([]);
|
|
@@ -300,6 +302,34 @@ const NotebookView = ({
|
|
|
300
302
|
const [filesToOverwrite, setFilesToOverwrite] = useState([]);
|
|
301
303
|
const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);
|
|
302
304
|
const [filesToAddToModal, setFilesToAddToModal] = useState([]);
|
|
305
|
+
const confirmDeleteDocument = useCallback(async () => {
|
|
306
|
+
if (!deleteDocumentTarget) return;
|
|
307
|
+
const { id: documentId, name: documentName } = deleteDocumentTarget;
|
|
308
|
+
setDeleteDocumentTarget(null);
|
|
309
|
+
setDeletingDocumentIds((prev) => new Set(prev).add(documentId));
|
|
310
|
+
try {
|
|
311
|
+
await notebooksApi.deleteDocument(sessionId, documentId);
|
|
312
|
+
queryClient.invalidateQueries({
|
|
313
|
+
queryKey: ["notebooks", "documents", sessionId]
|
|
314
|
+
});
|
|
315
|
+
setToastAlerts((prev) => [
|
|
316
|
+
{
|
|
317
|
+
key: Date.now() + documentId,
|
|
318
|
+
title: t("notebook.document.delete.success", {
|
|
319
|
+
documentName
|
|
320
|
+
}),
|
|
321
|
+
variant: "success"
|
|
322
|
+
},
|
|
323
|
+
...prev
|
|
324
|
+
]);
|
|
325
|
+
} finally {
|
|
326
|
+
setDeletingDocumentIds((prev) => {
|
|
327
|
+
const next = new Set(prev);
|
|
328
|
+
next.delete(documentId);
|
|
329
|
+
return next;
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}, [deleteDocumentTarget, notebooksApi, sessionId, queryClient, t]);
|
|
303
333
|
const handleOpenUploadModal = () => setIsUploadModalOpen(true);
|
|
304
334
|
const handleCloseUploadModal = () => setIsUploadModalOpen(false);
|
|
305
335
|
const handleFilesUploading = (files) => {
|
|
@@ -363,20 +393,13 @@ const NotebookView = ({
|
|
|
363
393
|
if (result.status === "completed") {
|
|
364
394
|
newCompletedNames.add(result.fileName);
|
|
365
395
|
}
|
|
366
|
-
if (result.status
|
|
367
|
-
|
|
368
|
-
key: Date.now() + result.documentId,
|
|
369
|
-
title: t("notebook.upload.success", {
|
|
370
|
-
fileName: result.fileName
|
|
371
|
-
}),
|
|
372
|
-
variant: "success"
|
|
373
|
-
});
|
|
374
|
-
} else {
|
|
396
|
+
if (result.status !== "completed") {
|
|
397
|
+
const errorDetail = result.error ? ` ${result.error}` : "";
|
|
375
398
|
newAlerts.push({
|
|
376
399
|
key: Date.now() + result.documentId,
|
|
377
|
-
title: t("notebook.upload.failed", {
|
|
400
|
+
title: `${t("notebook.upload.failed", {
|
|
378
401
|
fileName: result.fileName
|
|
379
|
-
})
|
|
402
|
+
})}${errorDetail}`,
|
|
380
403
|
variant: "danger"
|
|
381
404
|
});
|
|
382
405
|
}
|
|
@@ -445,19 +468,22 @@ const NotebookView = ({
|
|
|
445
468
|
) });
|
|
446
469
|
}
|
|
447
470
|
return /* @__PURE__ */ jsxs("div", { className: classes.welcomeContainer, children: [
|
|
471
|
+
/* @__PURE__ */ jsx("div", { style: { flex: 1 } }),
|
|
448
472
|
renderNotebookDisclaimerAlert(),
|
|
449
473
|
/* @__PURE__ */ jsxs("div", { className: classes.notebookContentArea, children: [
|
|
450
474
|
/* @__PURE__ */ jsx(Typography, { className: classes.notebookHeading, children: notebookName }),
|
|
451
475
|
topicSummary && /* @__PURE__ */ jsx(Typography, { className: classes.notebookSummary, children: topicSummary })
|
|
452
476
|
] }),
|
|
453
|
-
welcomePrompts.length > 0 && /* @__PURE__ */ jsx("div", { className: classes.promptSuggestions, children: /* @__PURE__ */ jsx(
|
|
454
|
-
|
|
477
|
+
welcomePrompts.length > 0 && /* @__PURE__ */ jsx("div", { className: classes.promptSuggestions, children: welcomePrompts.map((prompt) => /* @__PURE__ */ jsx(
|
|
478
|
+
"button",
|
|
455
479
|
{
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
480
|
+
type: "button",
|
|
481
|
+
className: classes.promptPill,
|
|
482
|
+
onClick: prompt.onClick,
|
|
483
|
+
children: prompt.title
|
|
484
|
+
},
|
|
485
|
+
prompt.title
|
|
486
|
+
)) })
|
|
461
487
|
] });
|
|
462
488
|
};
|
|
463
489
|
return /* @__PURE__ */ jsxs("div", { className: classes.root, children: [
|
|
@@ -613,6 +639,15 @@ const NotebookView = ({
|
|
|
613
639
|
onConfirm: handleOverwriteConfirm,
|
|
614
640
|
fileNames: filesToOverwrite.map((f) => f.name)
|
|
615
641
|
}
|
|
642
|
+
),
|
|
643
|
+
/* @__PURE__ */ jsx(
|
|
644
|
+
DeleteDocumentModal,
|
|
645
|
+
{
|
|
646
|
+
isOpen: deleteDocumentTarget !== null,
|
|
647
|
+
onClose: () => setDeleteDocumentTarget(null),
|
|
648
|
+
onConfirm: confirmDeleteDocument,
|
|
649
|
+
documentName: deleteDocumentTarget?.name ?? ""
|
|
650
|
+
}
|
|
616
651
|
)
|
|
617
652
|
] });
|
|
618
653
|
};
|