@gen-epix/ui-client-casedb 4.0.2 → 4.2.0
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/dist/_chunks/AddCasesToEventDialog.js +98 -98
- package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
- package/dist/_chunks/CaseContentForm.js +10 -10
- package/dist/_chunks/CaseDbDownloadUtil.js +1 -1
- package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
- package/dist/_chunks/CaseInfoDialog.js +222 -222
- package/dist/_chunks/CaseInfoDialog.js.map +1 -1
- package/dist/_chunks/CaseSetInfoDialog.js +222 -222
- package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
- package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
- package/dist/_chunks/Dashboard.js +296 -295
- package/dist/_chunks/Dashboard.js.map +1 -1
- package/dist/_chunks/FindSimilarCasesDialog.js +81 -81
- package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
- package/dist/_chunks/HomePageTrends.js.map +1 -1
- package/dist/_chunks/LegendaItem.js.map +1 -1
- package/dist/_chunks/LineListWidget.js +46 -45
- package/dist/_chunks/LineListWidget.js.map +1 -1
- package/dist/_chunks/PanelSeparator.js +3 -3
- package/dist/_chunks/PanelSeparator.js.map +1 -1
- package/dist/_chunks/Upload.js +422 -418
- package/dist/_chunks/Upload.js.map +1 -1
- package/dist/_chunks/UploadUtil.js +44 -40
- package/dist/_chunks/UploadUtil.js.map +1 -1
- package/dist/_chunks/chunk-BV7QT456.js +1 -1
- package/dist/_chunks/chunk-BV7QT456.js.map +1 -1
- package/dist/_chunks/cloneDeep.js +1 -1
- package/dist/_chunks/cloneDeep.js.map +1 -1
- package/dist/_chunks/dashboardStore.js.map +1 -1
- package/dist/_chunks/esm.js +3 -3
- package/dist/_chunks/esm.js.map +1 -1
- package/dist/_chunks/index.module.js +1 -1
- package/dist/_chunks/index.module.js.map +1 -1
- package/dist/_chunks/react.js +1 -1
- package/dist/_chunks/react.js.map +1 -1
- package/dist/_chunks/shallow.js +2 -2
- package/dist/_chunks/shallow.js.map +1 -1
- package/dist/_chunks/vanilla.js +1 -1
- package/dist/_chunks/vanilla.js.map +1 -1
- package/dist/_chunks/yup.js +24 -24
- package/dist/_chunks/yup.js.map +1 -1
- package/dist/classes/services/EventBusService/EventBusService.d.ts +9 -2
- package/dist/classes/services/EventBusService/index.js.map +1 -1
- package/dist/components/form/fields/ArrangementEditor/index.js +30 -30
- package/dist/components/ui/CreateEventDialog/index.js +40 -40
- package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
- package/dist/components/ui/MapWidget/index.js.map +1 -1
- package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
- package/dist/components/ui/SequenceDownloadDialog/index.js +57 -44
- package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
- package/dist/components/ui/TreeWidget/index.js +8 -2
- package/dist/components/ui/TreeWidget/index.js.map +1 -1
- package/dist/locale/en.json +0 -11
- package/dist/locale/nl.json +0 -11
- package/dist/models/config.d.ts +2 -0
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +59 -59
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
- package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -0
- package/package.json +68 -75
- package/dist/_chunks/index.esm.js +0 -1465
- package/dist/_chunks/index.esm.js.map +0 -1
- package/dist/components/ui/FileSelector/FileSelector.d.ts +0 -7
- package/dist/components/ui/FileSelector/index.d.ts +0 -1
- package/dist/components/ui/FileSelector/index.js +0 -206
- package/dist/components/ui/FileSelector/index.js.map +0 -1
- package/dist/utils/FileUtil/FileUtil.d.ts +0 -5
- package/dist/utils/FileUtil/index.d.ts +0 -1
- package/dist/utils/FileUtil/index.js +0 -15
- package/dist/utils/FileUtil/index.js.map +0 -1
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import { t as e } from "../../../_chunks/format.js";
|
|
2
|
-
import { FileUtil as t } from "../../../utils/FileUtil/index.js";
|
|
3
|
-
import { DATE_FORMAT as n } from "@gen-epix/ui-core/constants/date";
|
|
4
|
-
import { Box as r, Chip as i, IconButton as a, Stack as o, Typography as s } from "@mui/material";
|
|
5
|
-
import { useCallback as c, useEffect as l, useId as u, useMemo as d, useRef as f, useState as p } from "react";
|
|
6
|
-
import { useTranslation as m } from "react-i18next";
|
|
7
|
-
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
8
|
-
import v from "@mui/icons-material/Delete";
|
|
9
|
-
import y from "@mui/icons-material/InsertDriveFile";
|
|
10
|
-
import b from "@mui/icons-material/CloudUpload";
|
|
11
|
-
//#region src/components/ui/FileSelector/FileSelector.tsx
|
|
12
|
-
var x = ({ accept: x, initialDataTransfer: S, numFilesAllowed: C = 1, onDataTransferChange: w }) => {
|
|
13
|
-
let { t: T } = m(), E = T(C === 1 ? "Click or drag to upload file ({{accept}})" : "Click or drag to upload files ({{accept}})", { accept: x.split(",").join(", ") }), D = C === 1 ? T`Drop file here` : T`Drop files here`, O = u(), k = f(null), A = d(() => S ?? new DataTransfer(), [S]), [j, M] = p(A), [N, P] = p(E), [F, I] = p(null), [L, R] = p(!1), z = f(!0);
|
|
14
|
-
l(() => {
|
|
15
|
-
if (z.current) {
|
|
16
|
-
z.current = !1;
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
w(j);
|
|
20
|
-
}, [j, w]);
|
|
21
|
-
let B = c((e) => {
|
|
22
|
-
e.stopPropagation(), e.preventDefault();
|
|
23
|
-
}, []), V = c((e) => {
|
|
24
|
-
I(null), B(e), R(!0), P(D);
|
|
25
|
-
}, [B, D]), H = c((e) => {
|
|
26
|
-
B(e), R(!1), P(E);
|
|
27
|
-
}, [B, E]), U = c((e) => {
|
|
28
|
-
B(e);
|
|
29
|
-
}, [B]), W = c((e) => {
|
|
30
|
-
for (let t of e) if (!x.split(",").some((e) => {
|
|
31
|
-
let n = e.trim();
|
|
32
|
-
return n === t.type || n.startsWith(".") && t.name.endsWith(n);
|
|
33
|
-
})) return !1;
|
|
34
|
-
return !0;
|
|
35
|
-
}, [x]), G = c((e) => {
|
|
36
|
-
I(null), M((t) => {
|
|
37
|
-
let n = new DataTransfer();
|
|
38
|
-
return Array.from(t.files).filter((t) => t.name !== e).forEach((e) => n.items.add(e)), n;
|
|
39
|
-
});
|
|
40
|
-
}, []), K = c((e) => {
|
|
41
|
-
I(null), M((t) => {
|
|
42
|
-
if (!e || e.length === 0) return t;
|
|
43
|
-
if (!W(e)) return I(T("Invalid file type. Accepted types: {{accept}}", { accept: x })), t;
|
|
44
|
-
let n = Array.from(e).map((e) => e.name), r = new Set(Array.from(t.files).map((e) => e.name)), i = n.filter((e) => r.has(e)).length;
|
|
45
|
-
if (r.size + (n.length - i) > C) return I(T("Too many files selected. Maximum allowed: {{numFilesAllowed}}", { numFilesAllowed: C })), t;
|
|
46
|
-
let a = new DataTransfer();
|
|
47
|
-
return Array.from(t.files).forEach((e) => {
|
|
48
|
-
n.includes(e.name) || a.items.add(e);
|
|
49
|
-
}), Array.from(e).forEach((e) => {
|
|
50
|
-
a.items.add(e);
|
|
51
|
-
}), a;
|
|
52
|
-
});
|
|
53
|
-
}, [
|
|
54
|
-
x,
|
|
55
|
-
W,
|
|
56
|
-
C,
|
|
57
|
-
T
|
|
58
|
-
]), q = c((e) => {
|
|
59
|
-
B(e), P(E), R(!1);
|
|
60
|
-
let t = e.dataTransfer.files;
|
|
61
|
-
K(t);
|
|
62
|
-
}, [
|
|
63
|
-
B,
|
|
64
|
-
E,
|
|
65
|
-
K
|
|
66
|
-
]), J = c((e) => {
|
|
67
|
-
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), k.current?.click());
|
|
68
|
-
}, []), Y = c((e) => {
|
|
69
|
-
K(e.target.files);
|
|
70
|
-
}, [K]), X = c(() => {
|
|
71
|
-
I(null), M(new DataTransfer());
|
|
72
|
-
}, []);
|
|
73
|
-
return /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(r, {
|
|
74
|
-
accept: x,
|
|
75
|
-
component: "input",
|
|
76
|
-
id: O,
|
|
77
|
-
multiple: C > 1,
|
|
78
|
-
onChange: Y,
|
|
79
|
-
ref: k,
|
|
80
|
-
sx: { display: "none" },
|
|
81
|
-
type: "file"
|
|
82
|
-
}), /* @__PURE__ */ _(r, {
|
|
83
|
-
sx: {
|
|
84
|
-
display: "grid",
|
|
85
|
-
gridTemplateRows: "auto fit-content(50%)",
|
|
86
|
-
height: "100%"
|
|
87
|
-
},
|
|
88
|
-
children: [/* @__PURE__ */ g(r, {
|
|
89
|
-
component: "label",
|
|
90
|
-
htmlFor: O,
|
|
91
|
-
onDragEnter: V,
|
|
92
|
-
onDragLeave: H,
|
|
93
|
-
onDragOver: U,
|
|
94
|
-
onDrop: q,
|
|
95
|
-
onKeyDown: J,
|
|
96
|
-
sx: {
|
|
97
|
-
"&:hover *": { opacity: 1 },
|
|
98
|
-
"& p, & svg": { opacity: L ? 1 : .4 },
|
|
99
|
-
cursor: "pointer",
|
|
100
|
-
display: "flex",
|
|
101
|
-
height: "100%",
|
|
102
|
-
position: "relative",
|
|
103
|
-
textAlign: "center",
|
|
104
|
-
width: "100%"
|
|
105
|
-
},
|
|
106
|
-
tabIndex: 0,
|
|
107
|
-
children: /* @__PURE__ */ g(r, {
|
|
108
|
-
sx: {
|
|
109
|
-
height: "100%",
|
|
110
|
-
pointerEvents: "none",
|
|
111
|
-
position: "relative",
|
|
112
|
-
width: "100%"
|
|
113
|
-
},
|
|
114
|
-
children: /* @__PURE__ */ _(r, {
|
|
115
|
-
sx: {
|
|
116
|
-
alignItems: "center",
|
|
117
|
-
display: "flex",
|
|
118
|
-
flexDirection: "column",
|
|
119
|
-
height: "100%",
|
|
120
|
-
justifyContent: "center",
|
|
121
|
-
position: "absolute",
|
|
122
|
-
width: "100%"
|
|
123
|
-
},
|
|
124
|
-
children: [
|
|
125
|
-
/* @__PURE__ */ g(b, {
|
|
126
|
-
color: "primary",
|
|
127
|
-
fontSize: "large"
|
|
128
|
-
}),
|
|
129
|
-
F && /* @__PURE__ */ g(s, {
|
|
130
|
-
sx: {
|
|
131
|
-
color: "error.main",
|
|
132
|
-
fontWeight: "bold"
|
|
133
|
-
},
|
|
134
|
-
children: F
|
|
135
|
-
}),
|
|
136
|
-
/* @__PURE__ */ g(s, { children: N })
|
|
137
|
-
]
|
|
138
|
-
})
|
|
139
|
-
})
|
|
140
|
-
}), /* @__PURE__ */ g(r, {
|
|
141
|
-
sx: {
|
|
142
|
-
overflow: "auto",
|
|
143
|
-
position: "relative"
|
|
144
|
-
},
|
|
145
|
-
children: /* @__PURE__ */ g(r, { children: j.files.length > 0 && /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ _(r, {
|
|
146
|
-
sx: {
|
|
147
|
-
alignItems: "center",
|
|
148
|
-
backgroundColor: (e) => e.palette.background.paper,
|
|
149
|
-
display: "flex",
|
|
150
|
-
gap: 1,
|
|
151
|
-
paddingY: 1,
|
|
152
|
-
position: "sticky",
|
|
153
|
-
top: 0,
|
|
154
|
-
zIndex: (e) => e.zIndex.tooltip - 1
|
|
155
|
-
},
|
|
156
|
-
children: [/* @__PURE__ */ g(s, {
|
|
157
|
-
variant: "h5",
|
|
158
|
-
children: T("Selected files: {{numFiles}}", { numFiles: j.files.length })
|
|
159
|
-
}), /* @__PURE__ */ g(a, {
|
|
160
|
-
"aria-label": T("Clear all selected files"),
|
|
161
|
-
onClick: X,
|
|
162
|
-
size: "small",
|
|
163
|
-
children: /* @__PURE__ */ g(v, { fontSize: "small" })
|
|
164
|
-
})]
|
|
165
|
-
}), /* @__PURE__ */ g(o, {
|
|
166
|
-
direction: "row",
|
|
167
|
-
sx: { flexWrap: "wrap" },
|
|
168
|
-
children: Array.from(j.files).map((a) => /* @__PURE__ */ g(i, {
|
|
169
|
-
deleteIcon: /* @__PURE__ */ g(v, {
|
|
170
|
-
"aria-hidden": !1,
|
|
171
|
-
"aria-label": T("Clear {{fileName}}", { fileName: a.name }),
|
|
172
|
-
focusable: !0,
|
|
173
|
-
onKeyDown: (e) => {
|
|
174
|
-
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), G(a.name));
|
|
175
|
-
},
|
|
176
|
-
tabIndex: 0
|
|
177
|
-
}),
|
|
178
|
-
icon: /* @__PURE__ */ g(y, {}),
|
|
179
|
-
label: /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(r, {
|
|
180
|
-
component: "span",
|
|
181
|
-
sx: { fontWeight: "bold" },
|
|
182
|
-
children: a.name
|
|
183
|
-
}), /* @__PURE__ */ _(r, {
|
|
184
|
-
component: "span",
|
|
185
|
-
children: [
|
|
186
|
-
" ",
|
|
187
|
-
T("(size: {{size}})", { size: t.getReadableFileSize(a.size) }),
|
|
188
|
-
" ",
|
|
189
|
-
T("(last modified: {{lastModified}})", { lastModified: e(new Date(a.lastModified), n.DATE_TIME) })
|
|
190
|
-
]
|
|
191
|
-
})] }),
|
|
192
|
-
onDelete: () => {
|
|
193
|
-
G(a.name);
|
|
194
|
-
},
|
|
195
|
-
sx: { margin: .25 },
|
|
196
|
-
tabIndex: -1,
|
|
197
|
-
variant: "outlined"
|
|
198
|
-
}, `${a.name}-${a.size}-${a.lastModified}`))
|
|
199
|
-
})] }) })
|
|
200
|
-
})]
|
|
201
|
-
})] });
|
|
202
|
-
};
|
|
203
|
-
//#endregion
|
|
204
|
-
export { x as FileSelector };
|
|
205
|
-
|
|
206
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/ui/FileSelector/FileSelector.tsx"],"sourcesContent":["import {\n Box,\n Chip,\n IconButton,\n Stack,\n Typography,\n} from '@mui/material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\nimport type {\n ChangeEvent,\n DragEvent,\n KeyboardEvent as ReactKeyboardEvent,\n} from 'react';\nimport {\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\nimport { useTranslation } from 'react-i18next';\nimport { format } from 'date-fns';\nimport { DATE_FORMAT } from '@gen-epix/ui-core/constants/date';\n\nimport { FileUtil } from '../../../utils/FileUtil';\n\n\nexport type FileSelectorProps = {\n readonly accept: string;\n readonly initialDataTransfer?: DataTransfer;\n readonly numFilesAllowed?: number;\n readonly onDataTransferChange: (dataTransfer: DataTransfer) => void;\n};\n\nexport const FileSelector = ({\n accept,\n initialDataTransfer: initialDataTransferProp,\n numFilesAllowed = 1,\n onDataTransferChange,\n}: FileSelectorProps) => {\n const { t } = useTranslation();\n const hoverLabel = numFilesAllowed === 1\n ? t('Click or drag to upload file ({{accept}})', { accept: accept.split(',').join(', ') })\n : t('Click or drag to upload files ({{accept}})', { accept: accept.split(',').join(', ') });\n const dropLabel = numFilesAllowed === 1\n ? t`Drop file here`\n : t`Drop files here`;\n\n const inputId = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n\n const initialDataTransfer = useMemo(() => {\n return initialDataTransferProp ?? new DataTransfer();\n }, [initialDataTransferProp]);\n\n const [dataTransfer, setDataTransfer] = useState<DataTransfer>(initialDataTransfer);\n const [labelText, setLabelText] = useState<string>(hoverLabel);\n const [errorText, setErrorText] = useState<string>(null);\n const [isDragOver, setIsDragOver] = useState<boolean>(false);\n const initialDataTransferEffectRef = useRef(true);\n\n useEffect(() => {\n if (initialDataTransferEffectRef.current) {\n initialDataTransferEffectRef.current = false;\n return;\n }\n onDataTransferChange(dataTransfer);\n }, [dataTransfer, onDataTransferChange]);\n\n const stopDefaults = useCallback((e: DragEvent) => {\n e.stopPropagation();\n e.preventDefault();\n }, []);\n\n const onLabelDragEnter = useCallback((event: DragEvent) => {\n setErrorText(null);\n stopDefaults(event);\n setIsDragOver(true);\n setLabelText(dropLabel);\n }, [stopDefaults, dropLabel]);\n\n const onLabelDragLeave = useCallback((event: DragEvent) => {\n stopDefaults(event);\n setIsDragOver(false);\n setLabelText(hoverLabel);\n }, [stopDefaults, hoverLabel]);\n\n const onLabelDragOver = useCallback((event: DragEvent) => {\n stopDefaults(event);\n }, [stopDefaults]);\n\n const areFileTypesValid = useCallback((fileList: FileList) => {\n for (const file of fileList) {\n const isValid = accept.split(',').some(type => {\n const trimmedType = type.trim();\n return (\n trimmedType === file.type ||\n (trimmedType.startsWith('.') && file.name.endsWith(trimmedType))\n );\n });\n if (!isValid) {\n return false;\n }\n }\n return true;\n }, [accept]);\n\n const removeFile = useCallback((fileName: string) => {\n setErrorText(null);\n setDataTransfer((oldDataTransfer) => {\n const newDataTransfer = new DataTransfer();\n Array.from(oldDataTransfer.files)\n .filter(f => f.name !== fileName)\n .forEach(f => newDataTransfer.items.add(f));\n return newDataTransfer;\n });\n }, []);\n\n const addFileList = useCallback((fileList: FileList) => {\n setErrorText(null);\n setDataTransfer((oldDataTransfer) => {\n if (!fileList || fileList.length === 0) {\n return oldDataTransfer;\n }\n if (!areFileTypesValid(fileList)) {\n setErrorText(t('Invalid file type. Accepted types: {{accept}}', { accept }));\n return oldDataTransfer;\n }\n\n const fileNamesToAppend = Array.from(fileList).map(f => f.name);\n const uniqueOldFileNames = new Set(Array.from(oldDataTransfer.files).map(f => f.name));\n const numDuplicates = fileNamesToAppend.filter(name => uniqueOldFileNames.has(name)).length;\n const numNewFileNames = uniqueOldFileNames.size + (fileNamesToAppend.length - numDuplicates);\n\n if (numNewFileNames > numFilesAllowed) {\n setErrorText(t('Too many files selected. Maximum allowed: {{numFilesAllowed}}', { numFilesAllowed }));\n return oldDataTransfer;\n }\n\n const newDataTransfer = new DataTransfer();\n Array.from(oldDataTransfer.files).forEach(file => {\n if (!fileNamesToAppend.includes(file.name)) {\n newDataTransfer.items.add(file);\n }\n });\n Array.from(fileList).forEach(file => {\n newDataTransfer.items.add(file);\n });\n\n return newDataTransfer;\n\n });\n }, [accept, areFileTypesValid, numFilesAllowed, t]);\n\n const onDrop = useCallback((event: DragEvent<HTMLElement>) => {\n stopDefaults(event);\n setLabelText(hoverLabel);\n setIsDragOver(false);\n\n const fileList = event.dataTransfer.files;\n addFileList(fileList);\n\n }, [stopDefaults, hoverLabel, addFileList]);\n\n const onLabelKeyDown = useCallback((event: ReactKeyboardEvent<HTMLElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n inputRef.current?.click();\n }\n }, []);\n\n const onFileInputChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n addFileList(event.target.files);\n }, [addFileList]);\n\n const onClearAllButtonClick = useCallback(() => {\n setErrorText(null);\n setDataTransfer(new DataTransfer());\n }, []);\n\n return (\n <>\n <Box\n accept={accept}\n component={'input'}\n id={inputId}\n multiple={numFilesAllowed > 1}\n onChange={onFileInputChange}\n ref={inputRef}\n sx={{\n display: 'none',\n }}\n type={'file'}\n />\n <Box\n sx={{\n display: 'grid',\n gridTemplateRows: 'auto fit-content(50%)',\n height: '100%',\n }}\n >\n <Box\n component={'label'}\n htmlFor={inputId}\n onDragEnter={onLabelDragEnter}\n onDragLeave={onLabelDragLeave}\n onDragOver={onLabelDragOver}\n onDrop={onDrop}\n onKeyDown={onLabelKeyDown}\n sx={{\n '&:hover *': {\n opacity: 1,\n },\n '& p, & svg': {\n opacity: isDragOver ? 1 : 0.4,\n },\n cursor: 'pointer',\n display: 'flex',\n height: '100%',\n position: 'relative',\n textAlign: 'center',\n width: '100%',\n }}\n tabIndex={0}\n >\n <Box\n sx={{\n height: '100%',\n pointerEvents: 'none',\n position: 'relative',\n width: '100%',\n }}\n >\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n justifyContent: 'center',\n position: 'absolute',\n width: '100%',\n }}\n >\n <CloudUploadIcon\n color={'primary'}\n fontSize={'large'}\n />\n {errorText && (\n <Typography\n sx={{\n color: 'error.main',\n fontWeight: 'bold',\n }}\n >\n {errorText}\n </Typography>\n )}\n <Typography>\n {labelText}\n </Typography>\n\n </Box>\n </Box>\n </Box>\n <Box\n sx={{\n overflow: 'auto',\n position: 'relative',\n }}\n >\n <Box>\n {dataTransfer.files.length > 0 && (\n <>\n <Box\n sx={{\n alignItems: 'center',\n backgroundColor: (theme) => theme.palette.background.paper,\n display: 'flex',\n gap: 1,\n paddingY: 1,\n position: 'sticky',\n top: 0,\n zIndex: (theme) => theme.zIndex.tooltip - 1,\n }}\n >\n <Typography\n variant={'h5'}\n >\n {t('Selected files: {{numFiles}}', { numFiles: dataTransfer.files.length })}\n </Typography>\n <IconButton\n aria-label={t('Clear all selected files')}\n onClick={onClearAllButtonClick}\n size={'small'}\n >\n <DeleteIcon fontSize={'small'} />\n </IconButton>\n </Box>\n <Stack\n direction={'row'}\n sx={{\n flexWrap: 'wrap',\n }}\n >\n {Array.from(dataTransfer.files).map(file => (\n <Chip\n deleteIcon={(\n <DeleteIcon\n aria-hidden={false}\n aria-label={t('Clear {{fileName}}', { fileName: file.name })}\n focusable\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n removeFile(file.name);\n }\n }}\n tabIndex={0}\n />\n )}\n icon={<InsertDriveFileIcon />}\n key={`${file.name}-${file.size}-${file.lastModified}`}\n label={\n (\n <>\n <Box\n component={'span'}\n sx={{ fontWeight: 'bold' }}\n >\n {file.name}\n </Box>\n <Box component={'span'}>\n {' '}\n {t('(size: {{size}})', { size: FileUtil.getReadableFileSize(file.size) })}\n {' '}\n {t('(last modified: {{lastModified}})', { lastModified: format(new Date(file.lastModified), DATE_FORMAT.DATE_TIME) })}\n </Box>\n </>\n )\n }\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onDelete={() => {\n removeFile(file.name);\n }}\n sx={{\n margin: 0.25,\n }}\n tabIndex={-1}\n variant={'outlined'}\n />\n ))}\n </Stack>\n </>\n )}\n </Box>\n </Box>\n </Box>\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './FileUtil';
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { CaseDbFileCompression as e } from "@gen-epix/api-casedb";
|
|
2
|
-
//#region src/utils/FileUtil/FileUtil.ts
|
|
3
|
-
var t = class {
|
|
4
|
-
static getFileCompressionFromFileName(t) {
|
|
5
|
-
let n = t.toLowerCase();
|
|
6
|
-
return n.endsWith(".gz") || n.endsWith(".gzip") ? e.GZIP : e.NONE;
|
|
7
|
-
}
|
|
8
|
-
static getReadableFileSize(e) {
|
|
9
|
-
return e < 1024 ? `${e} B` : e < 1048576 ? `${(e / 1024).toFixed(2)} KB` : e < 1073741824 ? `${(e / 1048576).toFixed(2)} MB` : `${(e / 1073741824).toFixed(2)} GB`;
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
//#endregion
|
|
13
|
-
export { t as FileUtil };
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/FileUtil/FileUtil.ts"],"sourcesContent":["import { CaseDbFileCompression } from '@gen-epix/api-casedb';\n\nexport class FileUtil {\n public static getFileCompressionFromFileName(fileName: string): CaseDbFileCompression {\n const lowerFileName = fileName.toLowerCase();\n if (lowerFileName.endsWith('.gz') || lowerFileName.endsWith('.gzip')) {\n return CaseDbFileCompression.GZIP;\n }\n return CaseDbFileCompression.NONE;\n }\n\n public static getReadableFileSize(sizeInBytes: number): string {\n if (sizeInBytes < 1024) {\n return `${sizeInBytes} B`;\n } else if (sizeInBytes < 1024 * 1024) {\n return `${(sizeInBytes / 1024).toFixed(2)} KB`;\n } else if (sizeInBytes < 1024 * 1024 * 1024) {\n return `${(sizeInBytes / (1024 * 1024)).toFixed(2)} MB`;\n }\n return `${(sizeInBytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n }\n}\n"],"mappings":";;AAEA,IAAa,IAAb,MAAsB;CACpB,OAAc,+BAA+B,GAAyC;EACpF,IAAM,IAAgB,EAAS,YAAY;EAI3C,OAHI,EAAc,SAAS,KAAK,KAAK,EAAc,SAAS,OAAO,IAC1D,EAAsB,OAExB,EAAsB;CAC/B;CAEA,OAAc,oBAAoB,GAA6B;EAQ7D,OAPI,IAAc,OACT,GAAG,EAAY,MACb,IAAc,UAChB,IAAI,IAAc,KAAA,CAAM,QAAQ,CAAC,EAAE,OACjC,IAAc,aAChB,IAAI,IAAe,QAAA,CAAc,QAAQ,CAAC,EAAE,OAE9C,IAAI,IAAe,WAAA,CAAqB,QAAQ,CAAC,EAAE;CAC5D;AACF"}
|