@red-hat-developer-hub/backstage-plugin-lightspeed 2.8.5 → 2.9.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 +20 -0
- package/dist/alpha.d.ts +3 -0
- package/dist/components/LightSpeedChat.esm.js +2 -3
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/PermissionRequiredIcon.esm.js +2 -1
- package/dist/components/PermissionRequiredIcon.esm.js.map +1 -1
- package/dist/components/PermissionRequiredState.esm.js +42 -7
- package/dist/components/PermissionRequiredState.esm.js.map +1 -1
- package/dist/components/notebooks/AddDocumentModal.esm.js +3 -1
- package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
- package/dist/components/notebooks/DocumentSidebar.esm.js +3 -2
- package/dist/components/notebooks/DocumentSidebar.esm.js.map +1 -1
- package/dist/components/notebooks/NotebookView.esm.js +23 -7
- package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
- package/dist/components/notebooks/UploadResourceScreen.esm.js +33 -15
- package/dist/components/notebooks/UploadResourceScreen.esm.js.map +1 -1
- package/dist/images/permission-required.svg +319 -48
- package/dist/index.esm.js +5 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/translations/de.esm.js +2 -0
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +2 -0
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +2 -0
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +2 -0
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +2 -0
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +3 -0
- package/dist/translations/ref.esm.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { Fragment as Fragment$1 } from 'react';
|
|
3
3
|
import { EmptyState } from '@backstage/core-components';
|
|
4
|
-
import { Typography } from '@material-ui/core';
|
|
5
4
|
import { makeStyles, createStyles } from '@material-ui/core/styles';
|
|
6
5
|
import { useTranslation } from '../hooks/useTranslation.esm.js';
|
|
7
6
|
import { PermissionRequiredIcon } from './PermissionRequiredIcon.esm.js';
|
|
@@ -9,12 +8,48 @@ import { Trans } from './Trans.esm.js';
|
|
|
9
8
|
|
|
10
9
|
const useStyles = makeStyles(
|
|
11
10
|
(theme) => createStyles({
|
|
12
|
-
|
|
11
|
+
root: {
|
|
13
12
|
display: "flex",
|
|
13
|
+
flexDirection: "column",
|
|
14
|
+
width: "100%",
|
|
14
15
|
height: "100%",
|
|
16
|
+
minHeight: "100%",
|
|
17
|
+
flex: 1,
|
|
15
18
|
alignItems: "center",
|
|
16
|
-
|
|
17
|
-
backgroundColor: theme.palette.background.default
|
|
19
|
+
justifyContent: "center",
|
|
20
|
+
backgroundColor: theme.palette.background.default,
|
|
21
|
+
containerType: "inline-size",
|
|
22
|
+
'& [class*="BackstageEmptyState-root"]': {
|
|
23
|
+
alignItems: "center",
|
|
24
|
+
padding: theme.spacing(4)
|
|
25
|
+
},
|
|
26
|
+
'& [class*="MuiTypography-h5"]': {
|
|
27
|
+
fontSize: "clamp(1.875rem, 3.75cqi, 3.125rem)",
|
|
28
|
+
fontWeight: 400
|
|
29
|
+
},
|
|
30
|
+
'& [class*="MuiTypography-body1"]': {
|
|
31
|
+
fontSize: "1em",
|
|
32
|
+
color: theme.palette.text.secondary,
|
|
33
|
+
"& b": {
|
|
34
|
+
fontWeight: 500,
|
|
35
|
+
color: theme.palette.text.primary
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"@container (max-width: 899px)": {
|
|
39
|
+
'& [class*="BackstageEmptyState-root"]': {
|
|
40
|
+
textAlign: "center"
|
|
41
|
+
},
|
|
42
|
+
'& [class*="MuiGrid-grid-md-6"]': {
|
|
43
|
+
maxWidth: "100%",
|
|
44
|
+
flexBasis: "100%"
|
|
45
|
+
},
|
|
46
|
+
'& [class*="BackstageEmptyState-imageContainer"]': {
|
|
47
|
+
order: -1,
|
|
48
|
+
display: "flex",
|
|
49
|
+
justifyContent: "center",
|
|
50
|
+
marginBottom: theme.spacing(-4)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
18
53
|
}
|
|
19
54
|
})
|
|
20
55
|
);
|
|
@@ -29,11 +64,11 @@ const PermissionRequiredState = ({
|
|
|
29
64
|
/* @__PURE__ */ jsx("b", { children: perm }),
|
|
30
65
|
i < permissions.length - 1 && " and "
|
|
31
66
|
] }, perm)) });
|
|
32
|
-
return /* @__PURE__ */ jsx("div", { className: classes.
|
|
67
|
+
return /* @__PURE__ */ jsx("div", { className: classes.root, children: /* @__PURE__ */ jsx(
|
|
33
68
|
EmptyState,
|
|
34
69
|
{
|
|
35
70
|
title: t("permission.required.title"),
|
|
36
|
-
description: /* @__PURE__ */ jsx(
|
|
71
|
+
description: /* @__PURE__ */ jsx(
|
|
37
72
|
Trans,
|
|
38
73
|
{
|
|
39
74
|
message: "permission.required.description",
|
|
@@ -42,7 +77,7 @@ const PermissionRequiredState = ({
|
|
|
42
77
|
"<permissions/>": permissionsList
|
|
43
78
|
}
|
|
44
79
|
}
|
|
45
|
-
)
|
|
80
|
+
),
|
|
46
81
|
missing: { customImage: /* @__PURE__ */ jsx(PermissionRequiredIcon, {}) },
|
|
47
82
|
action
|
|
48
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionRequiredState.esm.js","sources":["../../src/components/PermissionRequiredState.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 { Fragment } from 'react';\n\nimport { EmptyState } from '@backstage/core-components';\n\nimport {
|
|
1
|
+
{"version":3,"file":"PermissionRequiredState.esm.js","sources":["../../src/components/PermissionRequiredState.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 { Fragment } from 'react';\n\nimport { EmptyState } from '@backstage/core-components';\n\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\n\nimport { useTranslation } from '../hooks/useTranslation';\nimport { PermissionRequiredIcon } from './PermissionRequiredIcon';\nimport { Trans } from './Trans';\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: '100%',\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.palette.background.default,\n containerType: 'inline-size',\n '& [class*=\"BackstageEmptyState-root\"]': {\n alignItems: 'center',\n padding: theme.spacing(4),\n },\n '& [class*=\"MuiTypography-h5\"]': {\n fontSize: 'clamp(1.875rem, 3.75cqi, 3.125rem)',\n fontWeight: 400,\n },\n '& [class*=\"MuiTypography-body1\"]': {\n fontSize: '1em',\n color: theme.palette.text.secondary,\n '& b': {\n fontWeight: 500,\n color: theme.palette.text.primary,\n },\n },\n '@container (max-width: 899px)': {\n '& [class*=\"BackstageEmptyState-root\"]': {\n textAlign: 'center',\n },\n '& [class*=\"MuiGrid-grid-md-6\"]': {\n maxWidth: '100%',\n flexBasis: '100%',\n },\n '& [class*=\"BackstageEmptyState-imageContainer\"]': {\n order: -1,\n display: 'flex',\n justifyContent: 'center',\n marginBottom: theme.spacing(-4),\n },\n },\n },\n }),\n);\n\ninterface PermissionRequiredStateProps {\n subject: string;\n permissions: string[];\n action: JSX.Element;\n}\n\nconst PermissionRequiredState = ({\n subject,\n permissions,\n action,\n}: PermissionRequiredStateProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const permissionsList = (\n <>\n {permissions.map((perm, i) => (\n <Fragment key={perm}>\n <b>{perm}</b>\n {i < permissions.length - 1 && ' and '}\n </Fragment>\n ))}\n </>\n );\n\n return (\n <div className={classes.root}>\n <EmptyState\n title={t('permission.required.title')}\n description={\n <Trans\n message=\"permission.required.description\"\n components={{\n '<subject/>': <>{subject}</>,\n '<permissions/>': permissionsList,\n }}\n />\n }\n missing={{ customImage: <PermissionRequiredIcon /> }}\n action={action}\n />\n </div>\n );\n};\nexport default PermissionRequiredState;\n"],"names":["Fragment"],"mappings":";;;;;;;;AA0BA,MAAM,SAAA,GAAY,UAAA;AAAA,EAAW,WAC3B,YAAA,CAAa;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe,QAAA;AAAA,MACf,KAAA,EAAO,MAAA;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,SAAA,EAAW,MAAA;AAAA,MACX,IAAA,EAAM,CAAA;AAAA,MACN,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,OAAA;AAAA,MAC1C,aAAA,EAAe,aAAA;AAAA,MACf,uCAAA,EAAyC;AAAA,QACvC,UAAA,EAAY,QAAA;AAAA,QACZ,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,OAC1B;AAAA,MACA,+BAAA,EAAiC;AAAA,QAC/B,QAAA,EAAU,oCAAA;AAAA,QACV,UAAA,EAAY;AAAA,OACd;AAAA,MACA,kCAAA,EAAoC;AAAA,QAClC,QAAA,EAAU,KAAA;AAAA,QACV,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,QAC1B,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAAA;AAC5B,OACF;AAAA,MACA,+BAAA,EAAiC;AAAA,QAC/B,uCAAA,EAAyC;AAAA,UACvC,SAAA,EAAW;AAAA,SACb;AAAA,QACA,gCAAA,EAAkC;AAAA,UAChC,QAAA,EAAU,MAAA;AAAA,UACV,SAAA,EAAW;AAAA,SACb;AAAA,QACA,iDAAA,EAAmD;AAAA,UACjD,KAAA,EAAO,EAAA;AAAA,UACP,OAAA,EAAS,MAAA;AAAA,UACT,cAAA,EAAgB,QAAA;AAAA,UAChB,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,EAAE;AAAA;AAChC;AACF;AACF,GACD;AACH,CAAA;AAQA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,OAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,KAAoC;AAClC,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,MAAM,eAAA,mCAED,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACtB,IAAA,CAACA,UAAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAG,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IACR,CAAA,GAAI,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK;AAAA,GAAA,EAAA,EAFlB,IAGf,CACD,CAAA,EACH,CAAA;AAGF,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,IAAA,EACtB,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,WAAA,kBACE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,iCAAA;AAAA,UACR,UAAA,EAAY;AAAA,YACV,YAAA,kCAAiB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,YACzB,gBAAA,EAAkB;AAAA;AACpB;AAAA,OACF;AAAA,MAEF,OAAA,EAAS,EAAE,WAAA,kBAAa,GAAA,CAAC,0BAAuB,CAAA,EAAG;AAAA,MACnD;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -87,6 +87,7 @@ const AddDocumentModal = ({
|
|
|
87
87
|
onClose,
|
|
88
88
|
sessionId,
|
|
89
89
|
existingDocumentNames,
|
|
90
|
+
hasUploadsInProgress,
|
|
90
91
|
onFilesUploading,
|
|
91
92
|
onUploadStarted,
|
|
92
93
|
onUploadFailed,
|
|
@@ -194,6 +195,7 @@ const AddDocumentModal = ({
|
|
|
194
195
|
const message = t(errorKey);
|
|
195
196
|
return errorKey === "notebook.upload.error.tooManyFiles" ? message.replace("{{max}}", String(NOTEBOOK_MAX_FILES)) : message;
|
|
196
197
|
}).join("\n") }),
|
|
198
|
+
hasUploadsInProgress && /* @__PURE__ */ jsx(Alert, { severity: "info", className: classes.errorAlert, children: t("notebook.view.documents.uploadsInProgress") }),
|
|
197
199
|
remainingSlots > 0 && /* @__PURE__ */ jsx(
|
|
198
200
|
MultipleFileUpload,
|
|
199
201
|
{
|
|
@@ -253,7 +255,7 @@ const AddDocumentModal = ({
|
|
|
253
255
|
className: classes.addButton,
|
|
254
256
|
variant: "contained",
|
|
255
257
|
color: "primary",
|
|
256
|
-
disabled: selectedFiles.length === 0,
|
|
258
|
+
disabled: selectedFiles.length === 0 || hasUploadsInProgress,
|
|
257
259
|
children: t("notebook.upload.modal.addButton", {
|
|
258
260
|
count: selectedFiles.length
|
|
259
261
|
})
|
|
@@ -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.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
|
+
{"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 hasUploadsInProgress?: boolean;\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 hasUploadsInProgress,\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 {hasUploadsInProgress && (\n <Alert severity=\"info\" className={classes.errorAlert}>\n {t('notebook.view.documents.uploadsInProgress')}\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 || hasUploadsInProgress}\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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"}
|
|
@@ -102,6 +102,7 @@ const DocumentSidebar = ({
|
|
|
102
102
|
completedFileNames,
|
|
103
103
|
deletingDocumentIds,
|
|
104
104
|
collapsed,
|
|
105
|
+
hasUploadsInProgress,
|
|
105
106
|
onToggleCollapse,
|
|
106
107
|
onAddDocument,
|
|
107
108
|
onDeleteDocument
|
|
@@ -139,9 +140,9 @@ const DocumentSidebar = ({
|
|
|
139
140
|
isAddDisabled ? /* @__PURE__ */ jsx(
|
|
140
141
|
Tooltip,
|
|
141
142
|
{
|
|
142
|
-
content: t("notebook.view.documents.maxReached"),
|
|
143
|
+
content: hasUploadsInProgress ? t("notebook.view.documents.uploadsInProgress") : t("notebook.view.documents.maxReached"),
|
|
143
144
|
position: "top",
|
|
144
|
-
children: /* @__PURE__ */ jsx("
|
|
145
|
+
children: /* @__PURE__ */ jsx(Typography, { component: "div", children: /* @__PURE__ */ jsx(
|
|
145
146
|
Button,
|
|
146
147
|
{
|
|
147
148
|
variant: "link",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentSidebar.esm.js","sources":["../../../src/components/notebooks/DocumentSidebar.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 { useState } from 'react';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n Spinner,\n Tooltip,\n} from '@patternfly/react-core';\nimport { EllipsisVIcon, PlusCircleIcon } from '@patternfly/react-icons';\n\nimport { NOTEBOOK_MAX_FILES } from '../../const';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { SessionDocument } from '../../types';\nimport { FileTypeIcon } from './FileTypeIcon';\nimport { SidebarCollapseIcon } from './SidebarCollapseIcon';\n\nconst useStyles = makeStyles(theme => ({\n sidebar: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n padding: theme.spacing(2),\n overflow: 'hidden',\n },\n titleRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(2),\n gap: theme.spacing(1),\n },\n title: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '2rem',\n letterSpacing: '-0.25px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: 1,\n minWidth: 0,\n },\n collapseButton: {\n flexShrink: 0,\n },\n documentsRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n documentCount: {\n fontWeight: 700,\n fontSize: '1.125rem',\n lineHeight: '2rem',\n },\n addButton: {\n textTransform: 'none',\n },\n documentsList: {\n marginTop: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n overflowY: 'auto',\n flex: 1,\n },\n documentItem: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: `${theme.spacing(1)}px ${theme.spacing(0.5)}px`,\n borderRadius: 4,\n },\n fileIcon: {\n flexShrink: 0,\n color: theme.palette.grey[500],\n fontSize: '1rem',\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n },\n spinnerContainer: {\n flexShrink: 0,\n },\n kebabToggle: {\n padding: 0,\n flexShrink: 0,\n },\n kebabDropdownMenu: {\n '& .pf-v6-c-menu__list': {\n paddingInlineStart: 0,\n marginBlockStart: 0,\n marginBlockEnd: 0,\n },\n },\n}));\n\ntype DocumentSidebarProps = {\n notebookName: string;\n documents: SessionDocument[];\n uploadingFileNames: string[];\n completedFileNames?: Set<string>;\n deletingDocumentIds?: Set<string>;\n collapsed: boolean;\n onToggleCollapse: () => void;\n onAddDocument: () => void;\n onDeleteDocument?: (documentId: string) => void;\n};\n\nexport const DocumentSidebar = ({\n notebookName,\n documents,\n uploadingFileNames,\n completedFileNames,\n deletingDocumentIds,\n collapsed,\n onToggleCollapse,\n onAddDocument,\n onDeleteDocument,\n}: DocumentSidebarProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [openMenuDocId, setOpenMenuDocId] = useState<string | null>(null);\n\n if (collapsed) {\n return null;\n }\n\n const uploadedNames = new Set(documents.map(d => d.title));\n const activePending = uploadingFileNames.filter(\n name => !uploadedNames.has(name),\n );\n const totalCount = documents.length + activePending.length;\n const isAddDisabled = totalCount >= NOTEBOOK_MAX_FILES;\n\n return (\n <div className={classes.sidebar}>\n <div className={classes.titleRow}>\n <Typography className={classes.title}>{notebookName}</Typography>\n <Tooltip content={t('notebook.view.sidebar.collapse')} position=\"right\">\n <Button\n variant=\"plain\"\n className={classes.collapseButton}\n onClick={onToggleCollapse}\n aria-label={t('notebook.view.sidebar.collapse')}\n >\n <SidebarCollapseIcon />\n </Button>\n </Tooltip>\n </div>\n\n <div className={classes.documentsRow}>\n <Typography className={classes.documentCount}>\n {t('notebook.view.documents.count', {\n count: totalCount,\n } as any)}\n </Typography>\n {isAddDisabled ? (\n <Tooltip\n content={t('notebook.view.documents.maxReached')}\n position=\"top\"\n >\n <span>\n <Button\n variant=\"link\"\n className={classes.addButton}\n icon={<PlusCircleIcon />}\n isDisabled\n >\n {t('notebook.view.documents.add')}\n </Button>\n </span>\n </Tooltip>\n ) : (\n <Button\n variant=\"link\"\n className={classes.addButton}\n icon={<PlusCircleIcon />}\n onClick={onAddDocument}\n >\n {t('notebook.view.documents.add')}\n </Button>\n )}\n </div>\n\n {(documents.length > 0 || activePending.length > 0) && (\n <div className={classes.documentsList}>\n {documents.map(doc => (\n <div key={doc.document_id} className={classes.documentItem}>\n <FileTypeIcon fileName={doc.title} />\n <Typography className={classes.fileName}>{doc.title}</Typography>\n {deletingDocumentIds?.has(doc.document_id) ? (\n <div className={classes.spinnerContainer}>\n <Spinner\n size=\"md\"\n aria-label={t('notebook.document.delete')}\n />\n </div>\n ) : (\n <Dropdown\n className={classes.kebabDropdownMenu}\n isOpen={openMenuDocId === doc.document_id}\n popperProps={{\n position: 'end',\n preventOverflow: true,\n }}\n onOpenChange={isOpen =>\n setOpenMenuDocId(isOpen ? doc.document_id : null)\n }\n toggle={toggleRef => (\n <MenuToggle\n ref={toggleRef}\n variant=\"plain\"\n className={classes.kebabToggle}\n isExpanded={openMenuDocId === doc.document_id}\n onClick={event => {\n event.stopPropagation();\n setOpenMenuDocId(current =>\n current === doc.document_id ? null : doc.document_id,\n );\n }}\n aria-label={t('notebook.document.delete')}\n >\n <EllipsisVIcon />\n </MenuToggle>\n )}\n >\n <DropdownList>\n <DropdownItem\n key=\"delete\"\n onClick={event => {\n event.stopPropagation();\n setOpenMenuDocId(null);\n onDeleteDocument?.(doc.document_id);\n }}\n >\n {t('notebook.document.delete')}\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n )}\n </div>\n ))}\n {activePending.map(fileName => (\n <div key={`pending-${fileName}`} className={classes.documentItem}>\n <FileTypeIcon fileName={fileName} />\n <Typography className={classes.fileName}>{fileName}</Typography>\n {!completedFileNames?.has(fileName) && (\n <div className={classes.spinnerContainer}>\n <Spinner\n size=\"md\"\n aria-label={t('notebook.view.documents.uploading')}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocumentSidebar.esm.js","sources":["../../../src/components/notebooks/DocumentSidebar.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 { useState } from 'react';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n Spinner,\n Tooltip,\n} from '@patternfly/react-core';\nimport { EllipsisVIcon, PlusCircleIcon } from '@patternfly/react-icons';\n\nimport { NOTEBOOK_MAX_FILES } from '../../const';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { SessionDocument } from '../../types';\nimport { FileTypeIcon } from './FileTypeIcon';\nimport { SidebarCollapseIcon } from './SidebarCollapseIcon';\n\nconst useStyles = makeStyles(theme => ({\n sidebar: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n padding: theme.spacing(2),\n overflow: 'hidden',\n },\n titleRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(2),\n gap: theme.spacing(1),\n },\n title: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '2rem',\n letterSpacing: '-0.25px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: 1,\n minWidth: 0,\n },\n collapseButton: {\n flexShrink: 0,\n },\n documentsRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n documentCount: {\n fontWeight: 700,\n fontSize: '1.125rem',\n lineHeight: '2rem',\n },\n addButton: {\n textTransform: 'none',\n },\n documentsList: {\n marginTop: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n overflowY: 'auto',\n flex: 1,\n },\n documentItem: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: `${theme.spacing(1)}px ${theme.spacing(0.5)}px`,\n borderRadius: 4,\n },\n fileIcon: {\n flexShrink: 0,\n color: theme.palette.grey[500],\n fontSize: '1rem',\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n },\n spinnerContainer: {\n flexShrink: 0,\n },\n kebabToggle: {\n padding: 0,\n flexShrink: 0,\n },\n kebabDropdownMenu: {\n '& .pf-v6-c-menu__list': {\n paddingInlineStart: 0,\n marginBlockStart: 0,\n marginBlockEnd: 0,\n },\n },\n}));\n\ntype DocumentSidebarProps = {\n notebookName: string;\n documents: SessionDocument[];\n uploadingFileNames: string[];\n completedFileNames?: Set<string>;\n deletingDocumentIds?: Set<string>;\n collapsed: boolean;\n hasUploadsInProgress?: boolean;\n onToggleCollapse: () => void;\n onAddDocument: () => void;\n onDeleteDocument?: (documentId: string) => void;\n};\n\nexport const DocumentSidebar = ({\n notebookName,\n documents,\n uploadingFileNames,\n completedFileNames,\n deletingDocumentIds,\n collapsed,\n hasUploadsInProgress,\n onToggleCollapse,\n onAddDocument,\n onDeleteDocument,\n}: DocumentSidebarProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [openMenuDocId, setOpenMenuDocId] = useState<string | null>(null);\n\n if (collapsed) {\n return null;\n }\n\n const uploadedNames = new Set(documents.map(d => d.title));\n const activePending = uploadingFileNames.filter(\n name => !uploadedNames.has(name),\n );\n const totalCount = documents.length + activePending.length;\n const isAddDisabled = totalCount >= NOTEBOOK_MAX_FILES;\n\n return (\n <div className={classes.sidebar}>\n <div className={classes.titleRow}>\n <Typography className={classes.title}>{notebookName}</Typography>\n <Tooltip content={t('notebook.view.sidebar.collapse')} position=\"right\">\n <Button\n variant=\"plain\"\n className={classes.collapseButton}\n onClick={onToggleCollapse}\n aria-label={t('notebook.view.sidebar.collapse')}\n >\n <SidebarCollapseIcon />\n </Button>\n </Tooltip>\n </div>\n\n <div className={classes.documentsRow}>\n <Typography className={classes.documentCount}>\n {t('notebook.view.documents.count', {\n count: totalCount,\n } as any)}\n </Typography>\n {isAddDisabled ? (\n <Tooltip\n content={\n hasUploadsInProgress\n ? t('notebook.view.documents.uploadsInProgress')\n : t('notebook.view.documents.maxReached')\n }\n position=\"top\"\n >\n <Typography component=\"div\">\n <Button\n variant=\"link\"\n className={classes.addButton}\n icon={<PlusCircleIcon />}\n isDisabled\n >\n {t('notebook.view.documents.add')}\n </Button>\n </Typography>\n </Tooltip>\n ) : (\n <Button\n variant=\"link\"\n className={classes.addButton}\n icon={<PlusCircleIcon />}\n onClick={onAddDocument}\n >\n {t('notebook.view.documents.add')}\n </Button>\n )}\n </div>\n\n {(documents.length > 0 || activePending.length > 0) && (\n <div className={classes.documentsList}>\n {documents.map(doc => (\n <div key={doc.document_id} className={classes.documentItem}>\n <FileTypeIcon fileName={doc.title} />\n <Typography className={classes.fileName}>{doc.title}</Typography>\n {deletingDocumentIds?.has(doc.document_id) ? (\n <div className={classes.spinnerContainer}>\n <Spinner\n size=\"md\"\n aria-label={t('notebook.document.delete')}\n />\n </div>\n ) : (\n <Dropdown\n className={classes.kebabDropdownMenu}\n isOpen={openMenuDocId === doc.document_id}\n popperProps={{\n position: 'end',\n preventOverflow: true,\n }}\n onOpenChange={isOpen =>\n setOpenMenuDocId(isOpen ? doc.document_id : null)\n }\n toggle={toggleRef => (\n <MenuToggle\n ref={toggleRef}\n variant=\"plain\"\n className={classes.kebabToggle}\n isExpanded={openMenuDocId === doc.document_id}\n onClick={event => {\n event.stopPropagation();\n setOpenMenuDocId(current =>\n current === doc.document_id ? null : doc.document_id,\n );\n }}\n aria-label={t('notebook.document.delete')}\n >\n <EllipsisVIcon />\n </MenuToggle>\n )}\n >\n <DropdownList>\n <DropdownItem\n key=\"delete\"\n onClick={event => {\n event.stopPropagation();\n setOpenMenuDocId(null);\n onDeleteDocument?.(doc.document_id);\n }}\n >\n {t('notebook.document.delete')}\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n )}\n </div>\n ))}\n {activePending.map(fileName => (\n <div key={`pending-${fileName}`} className={classes.documentItem}>\n <FileTypeIcon fileName={fileName} />\n <Typography className={classes.fileName}>{fileName}</Typography>\n {!completedFileNames?.has(fileName) && (\n <div className={classes.spinnerContainer}>\n <Spinner\n size=\"md\"\n aria-label={t('notebook.view.documents.uploading')}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAoCA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,eAAA;AAAA,IAChB,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC7B,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GACtB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU,SAAA;AAAA,IACV,UAAA,EAAY,MAAA;AAAA,IACZ,aAAA,EAAe,SAAA;AAAA,IACf,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc,UAAA;AAAA,IACd,UAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,UAAA,EAAY;AAAA,GACd;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,aAAA,EAAe;AAAA,IACb,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU,UAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,SAAA,EAAW;AAAA,IACT,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,aAAA,EAAe;AAAA,IACb,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC1B,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,IACtB,SAAA,EAAW,MAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACpB,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,IACpD,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,UAAA,EAAY,CAAA;AAAA,IACZ,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,IAC7B,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc,UAAA;AAAA,IACd,UAAA,EAAY,QAAA;AAAA,IACZ,QAAA,EAAU,UAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,UAAA,EAAY;AAAA,GACd;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,uBAAA,EAAyB;AAAA,MACvB,kBAAA,EAAoB,CAAA;AAAA,MACpB,gBAAA,EAAkB,CAAA;AAAA,MAClB,cAAA,EAAgB;AAAA;AAClB;AAEJ,CAAA,CAAE,CAAA;AAeK,MAAM,kBAAkB,CAAC;AAAA,EAC9B,YAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,KAA4B;AAC1B,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAwB,IAAI,CAAA;AAEtE,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,KAAK,CAAC,CAAA;AACzD,EAAA,MAAM,gBAAgB,kBAAA,CAAmB,MAAA;AAAA,IACvC,CAAA,IAAA,KAAQ,CAAC,aAAA,CAAc,GAAA,CAAI,IAAI;AAAA,GACjC;AACA,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,MAAA,GAAS,aAAA,CAAc,MAAA;AACpD,EAAA,MAAM,gBAAgB,UAAA,IAAc,kBAAA;AAEpC,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,QAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,KAAA,EAAQ,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,0BACnD,OAAA,EAAA,EAAQ,OAAA,EAAS,EAAE,gCAAgC,CAAA,EAAG,UAAS,OAAA,EAC9D,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,OAAA;AAAA,UACR,WAAW,OAAA,CAAQ,cAAA;AAAA,UACnB,OAAA,EAAS,gBAAA;AAAA,UACT,YAAA,EAAY,EAAE,gCAAgC,CAAA;AAAA,UAE9C,8BAAC,mBAAA,EAAA,EAAoB;AAAA;AAAA,OACvB,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,YAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,aAAA,EAC5B,YAAE,+BAAA,EAAiC;AAAA,QAClC,KAAA,EAAO;AAAA,OACD,CAAA,EACV,CAAA;AAAA,MACC,aAAA,mBACC,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SACE,oBAAA,GACI,CAAA,CAAE,2CAA2C,CAAA,GAC7C,EAAE,oCAAoC,CAAA;AAAA,UAE5C,QAAA,EAAS,KAAA;AAAA,UAET,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,KAAA,EACpB,QAAA,kBAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,MAAA;AAAA,cACR,WAAW,OAAA,CAAQ,SAAA;AAAA,cACnB,IAAA,sBAAO,cAAA,EAAA,EAAe,CAAA;AAAA,cACtB,UAAA,EAAU,IAAA;AAAA,cAET,YAAE,6BAA6B;AAAA;AAAA,WAClC,EACF;AAAA;AAAA,OACF,mBAEA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,IAAA,sBAAO,cAAA,EAAA,EAAe,CAAA;AAAA,UACtB,OAAA,EAAS,aAAA;AAAA,UAER,YAAE,6BAA6B;AAAA;AAAA;AAClC,KAAA,EAEJ,CAAA;AAAA,IAAA,CAEE,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,aAAA,CAAc,MAAA,GAAS,sBAC/C,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,aAAA,EACrB,QAAA,EAAA;AAAA,MAAA,SAAA,CAAU,IAAI,CAAA,GAAA,qBACb,IAAA,CAAC,KAAA,EAAA,EAA0B,SAAA,EAAW,QAAQ,YAAA,EAC5C,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAU,GAAA,CAAI,KAAA,EAAO,CAAA;AAAA,4BAClC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,QAAA,EAAW,cAAI,KAAA,EAAM,CAAA;AAAA,QACnD,mBAAA,EAAqB,IAAI,GAAA,CAAI,WAAW,oBACvC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,gBAAA,EACtB,QAAA,kBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,YAAA,EAAY,EAAE,0BAA0B;AAAA;AAAA,WAE5C,CAAA,mBAEA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,WAAW,OAAA,CAAQ,iBAAA;AAAA,YACnB,MAAA,EAAQ,kBAAkB,GAAA,CAAI,WAAA;AAAA,YAC9B,WAAA,EAAa;AAAA,cACX,QAAA,EAAU,KAAA;AAAA,cACV,eAAA,EAAiB;AAAA,aACnB;AAAA,YACA,cAAc,CAAA,MAAA,KACZ,gBAAA,CAAiB,MAAA,GAAS,GAAA,CAAI,cAAc,IAAI,CAAA;AAAA,YAElD,QAAQ,CAAA,SAAA,qBACN,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,SAAA;AAAA,gBACL,OAAA,EAAQ,OAAA;AAAA,gBACR,WAAW,OAAA,CAAQ,WAAA;AAAA,gBACnB,UAAA,EAAY,kBAAkB,GAAA,CAAI,WAAA;AAAA,gBAClC,SAAS,CAAA,KAAA,KAAS;AAChB,kBAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,kBAAA,gBAAA;AAAA,oBAAiB,CAAA,OAAA,KACf,OAAA,KAAY,GAAA,CAAI,WAAA,GAAc,OAAO,GAAA,CAAI;AAAA,mBAC3C;AAAA,gBACF,CAAA;AAAA,gBACA,YAAA,EAAY,EAAE,0BAA0B,CAAA;AAAA,gBAExC,8BAAC,aAAA,EAAA,EAAc;AAAA;AAAA,aACjB;AAAA,YAGF,8BAAC,YAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBAEC,SAAS,CAAA,KAAA,KAAS;AAChB,kBAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,kBAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,kBAAA,gBAAA,GAAmB,IAAI,WAAW,CAAA;AAAA,gBACpC,CAAA;AAAA,gBAEC,YAAE,0BAA0B;AAAA,eAAA;AAAA,cAPzB;AAAA,aAQN,EACF;AAAA;AAAA;AACF,OAAA,EAAA,EAnDM,GAAA,CAAI,WAqDd,CACD,CAAA;AAAA,MACA,cAAc,GAAA,CAAI,CAAA,QAAA,0BAChB,KAAA,EAAA,EAAgC,SAAA,EAAW,QAAQ,YAAA,EAClD,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,gBAAa,QAAA,EAAoB,CAAA;AAAA,wBAClC,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,UAAW,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,QAClD,CAAC,oBAAoB,GAAA,CAAI,QAAQ,qBAChC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,gBAAA,EACtB,QAAA,kBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,YAAA,EAAY,EAAE,mCAAmC;AAAA;AAAA,SACnD,EACF;AAAA,OAAA,EAAA,EATM,CAAA,QAAA,EAAW,QAAQ,CAAA,CAW7B,CACD;AAAA,KAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -209,6 +209,7 @@ const NotebookView = ({
|
|
|
209
209
|
sessionId,
|
|
210
210
|
notebookName = UNTITLED_NOTEBOOK_NAME,
|
|
211
211
|
documents = [],
|
|
212
|
+
isDocumentsFetching = false,
|
|
212
213
|
metadata,
|
|
213
214
|
topicSummary,
|
|
214
215
|
userName,
|
|
@@ -420,9 +421,10 @@ const NotebookView = ({
|
|
|
420
421
|
const handleRemoveToastAlert = (key) => {
|
|
421
422
|
setToastAlerts((prev) => prev.filter((a) => a.key !== key));
|
|
422
423
|
};
|
|
423
|
-
const hasDocuments = documents.length > 0 || uploadingFileNames.length > 0;
|
|
424
424
|
const totalDocumentCount = documents.length + uploadingFileNames.length;
|
|
425
|
-
const
|
|
425
|
+
const hasUploadsInProgress = pendingUploads.length > 0 || isDocumentsFetching;
|
|
426
|
+
const hasNoDocuments = documents.length === 0;
|
|
427
|
+
const isAddDisabled = totalDocumentCount >= NOTEBOOK_MAX_FILES || hasUploadsInProgress;
|
|
426
428
|
const panelContent = /* @__PURE__ */ jsx(
|
|
427
429
|
DrawerPanelContent,
|
|
428
430
|
{
|
|
@@ -440,6 +442,7 @@ const NotebookView = ({
|
|
|
440
442
|
completedFileNames,
|
|
441
443
|
deletingDocumentIds,
|
|
442
444
|
collapsed: sidebarCollapsed,
|
|
445
|
+
hasUploadsInProgress,
|
|
443
446
|
onToggleCollapse: () => setSidebarCollapsed((prev) => !prev),
|
|
444
447
|
onAddDocument: handleOpenUploadModal,
|
|
445
448
|
onDeleteDocument: handleDeleteDocument
|
|
@@ -449,8 +452,14 @@ const NotebookView = ({
|
|
|
449
452
|
);
|
|
450
453
|
const renderNotebookDisclaimerAlert = () => /* @__PURE__ */ jsx("div", { className: classes.notebookDisclaimerStrip, children: /* @__PURE__ */ jsx("div", { className: classes.notebookDisclaimerInner, children: /* @__PURE__ */ jsx(Alert, { isInline: true, variant: "info", title: t("aria.important"), children: t("disclaimer.withoutValidation") }) }) });
|
|
451
454
|
const renderMainContent = () => {
|
|
452
|
-
if (
|
|
453
|
-
return /* @__PURE__ */ jsx(Typography, { component: "span", className: classes.notebookEmptyUpload, children: /* @__PURE__ */ jsx(
|
|
455
|
+
if (hasNoDocuments && messages.length === 0) {
|
|
456
|
+
return /* @__PURE__ */ jsx(Typography, { component: "span", className: classes.notebookEmptyUpload, children: /* @__PURE__ */ jsx(
|
|
457
|
+
UploadResourceScreen,
|
|
458
|
+
{
|
|
459
|
+
onUploadClick: handleOpenUploadModal,
|
|
460
|
+
isProcessing: uploadingFileNames.length > 0
|
|
461
|
+
}
|
|
462
|
+
) });
|
|
454
463
|
}
|
|
455
464
|
if (messages.length > 0) {
|
|
456
465
|
return /* @__PURE__ */ jsx(ChatbotContent, { className: classes.chatContent, children: /* @__PURE__ */ jsx(
|
|
@@ -549,7 +558,13 @@ const NotebookView = ({
|
|
|
549
558
|
/* @__PURE__ */ jsx(
|
|
550
559
|
Tooltip,
|
|
551
560
|
{
|
|
552
|
-
content:
|
|
561
|
+
content: (() => {
|
|
562
|
+
if (hasUploadsInProgress)
|
|
563
|
+
return t("notebook.view.documents.uploadsInProgress");
|
|
564
|
+
if (isAddDisabled)
|
|
565
|
+
return t("notebook.view.documents.maxReached");
|
|
566
|
+
return t("notebook.view.documents.add");
|
|
567
|
+
})(),
|
|
553
568
|
position: "right",
|
|
554
569
|
children: /* @__PURE__ */ jsx(Typography, { component: "span", children: /* @__PURE__ */ jsx(
|
|
555
570
|
Button,
|
|
@@ -578,9 +593,9 @@ const NotebookView = ({
|
|
|
578
593
|
}
|
|
579
594
|
) }),
|
|
580
595
|
/* @__PURE__ */ jsx("div", { className: classes.mainContent, children: renderMainContent() }),
|
|
581
|
-
|
|
596
|
+
hasNoDocuments && messages.length === 0 && renderNotebookDisclaimerAlert(),
|
|
582
597
|
/* @__PURE__ */ jsxs(ChatbotFooter, { className: classes.footer, children: [
|
|
583
|
-
|
|
598
|
+
hasNoDocuments ? /* @__PURE__ */ jsx(
|
|
584
599
|
Tooltip,
|
|
585
600
|
{
|
|
586
601
|
content: t("notebook.view.input.disabledTooltip"),
|
|
@@ -624,6 +639,7 @@ const NotebookView = ({
|
|
|
624
639
|
onClose: handleCloseUploadModal,
|
|
625
640
|
sessionId,
|
|
626
641
|
existingDocumentNames: documents.map((d) => d.title),
|
|
642
|
+
hasUploadsInProgress,
|
|
627
643
|
onFilesUploading: handleFilesUploading,
|
|
628
644
|
onUploadStarted: handleUploadStarted,
|
|
629
645
|
onUploadFailed: handleUploadFailed,
|