diff --git a/src/components/Catalogue/catalogueItemView.jsx b/src/components/Catalogue/catalogueItemView.jsx
index e75adc7..e7623bb 100644
--- a/src/components/Catalogue/catalogueItemView.jsx
+++ b/src/components/Catalogue/catalogueItemView.jsx
@@ -356,7 +356,7 @@ const CatalogueItemView = ({ isOpen, onClose, title, sectionId, items, setDialog
gap={2}
>
{item.title}
@@ -491,8 +491,8 @@ const CatalogueItemView = ({ isOpen, onClose, title, sectionId, items, setDialog
>
- {metadata.figureInfo[id] || "No Label"}
+ {metadata.figureInfo[id] && metadata.figureInfo[id].length <= 20 ? metadata.figureInfo[id] : "No Label"}
))}
diff --git a/src/components/DataImport/ArtefactUploadView.jsx b/src/components/DataImport/ArtefactUploadView.jsx
index 5a06d0c..6a9dc9a 100644
--- a/src/components/DataImport/ArtefactUploadView.jsx
+++ b/src/components/DataImport/ArtefactUploadView.jsx
@@ -1,7 +1,7 @@
import { Button, Flex, Box, Text, Field, Input } from "@chakra-ui/react";
import { useEffect, useRef, useState } from "react";
import { HiUpload } from "react-icons/hi";
-import server from "../../networking";
+import server, { JSONResponse } from "../../networking";
import ToastWizard from "../toastWizard";
import FileItem from "./FileItem";
import { IoArrowBackCircleSharp } from "react-icons/io5";
@@ -101,6 +101,14 @@ function ArtefactUploadView({ batch, setBatchID, fetchBatches, onBackToPending }
);
} catch (err) {
console.log(`Non-success response in file upload to batch ${batchID || 'New Batch'}`, err)
+
+ if (err.response && err.response.data instanceof JSONResponse) {
+ if (err.response.data.userErrorType()) {
+ ToastWizard.standard("error", "Upload Failed", err.response.data.message);
+ return;
+ }
+ }
+
const updates = err?.response?.data?.raw?.updates;
if (updates) {
setFileStatuses(updates);
diff --git a/src/components/DataImport/BatchCard.jsx b/src/components/DataImport/BatchCard.jsx
index e9121a9..174bc6e 100644
--- a/src/components/DataImport/BatchCard.jsx
+++ b/src/components/DataImport/BatchCard.jsx
@@ -137,11 +137,10 @@ function BatchCard({ batchData, formatTimestamp, fetchBatches }) {
}
}
- console.log(batchData)
-
useEffect(() => {
if (batchData) {
var newContent = { ...content };
+ newContent.name = batchData.name || "No name";
if (batchData.stage === "upload_pending") {
newContent.displayMessage = `${batchData.artefactSummary.total || 0} Uploaded (Upload more if you wish)`
// newContent.progress = Math.round((batchData.artefactSummary.unprocessed || 0) / (batchData.artefactSummary.total || 1) * 100);
@@ -184,8 +183,6 @@ function BatchCard({ batchData, formatTimestamp, fetchBatches }) {
}
}, [batchData]);
- console.log(content);
-
return (
diff --git a/src/components/DataStudio/figureDisplay.jsx b/src/components/DataStudio/figureDisplay.jsx
index df6a7d7..e8992b2 100644
--- a/src/components/DataStudio/figureDisplay.jsx
+++ b/src/components/DataStudio/figureDisplay.jsx
@@ -178,7 +178,7 @@ function FigureDisplaySection({ artefactId, figureInfo, getArtefactData, isEditi
fontSize={10}
lineClamp={1}
>
- {figureInfo[id] || "No Label"}
+ {figureInfo[id] && figureInfo[id].length <= 20 ? figureInfo[id] : "No Label"}
))}
diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx
index f50511a..51dd4df 100644
--- a/src/components/Navbar.jsx
+++ b/src/components/Navbar.jsx
@@ -12,7 +12,11 @@ function Navbar() {
const { username, accountID } = useSelector(state => state.auth);
const handleLogoClick = () => {
- navigate('/');
+ if (username) {
+ navigate('/catalogue')
+ } else {
+ navigate('/');
+ }
}
const handleProfileClick = () => {
diff --git a/src/pages/ArtefactEditor.jsx b/src/pages/ArtefactEditor.jsx
index bf222cf..5f1120d 100644
--- a/src/pages/ArtefactEditor.jsx
+++ b/src/pages/ArtefactEditor.jsx
@@ -1,4 +1,4 @@
-import { Box, Flex, Text, Image, useBreakpointValue } from "@chakra-ui/react";
+import { Box, Flex, Text, Image, useBreakpointValue, Button, Spacer } from "@chakra-ui/react";
import { useParams, useNavigate } from 'react-router-dom';
import { useEffect, useState } from "react";
import { useSelector } from "react-redux";
@@ -16,6 +16,8 @@ function ArtefactEditor() {
const { loaded } = useSelector(state => state.auth);
const navigate = useNavigate();
const [isInvalid, setIsInvalid] = useState(false);
+ const [vetted, setVetted] = useState(true);
+ const [markingVetted, setMarkingVetted] = useState(false);
// Responsive layout values
const isMobile = useBreakpointValue({ base: true, md: false });
@@ -120,7 +122,7 @@ function ArtefactEditor() {
// Metadata fetching function
const fetchMetadata = async () => {
try {
- const response = await server.get(`/cdn/artefactMetadata/${artID}`);
+ const response = await server.get(`/cdn/artefactMetadata/${artID}?colID=${colID}`);
if (response.data instanceof JSONResponse) {
if (response.data.isErrorStatus()) {
@@ -137,6 +139,10 @@ function ArtefactEditor() {
...response.data.raw.data,
figureInfo: response.data.raw.figureInfo || {}
});
+ console.log("New vetted info:", response.data.raw.vetted);
+ if (response.data.raw.vetted !== null && response.data.raw.vetted !== undefined) {
+ setVetted(response.data.raw.vetted);
+ }
} else {
throw new Error("Unexpected response format");
}
@@ -211,6 +217,53 @@ function ArtefactEditor() {
}
}, [collection, metadata, artID]);
+ const handleMarkVetted = async () => {
+ if (vetted) {
+ ToastWizard.standard("error", "Already vetted", "This artefact has already been marked as vetted.");
+ return;
+ }
+
+ setMarkingVetted(true);
+
+ try {
+ const response = await server.post('/dataImport/vetting/confirm', {
+ batchID: colID,
+ artefactID: artID
+ })
+
+ if (response.data instanceof JSONResponse) {
+ if (response.data.isErrorStatus()) {
+ const errObject = {
+ response: {
+ data: response.data
+ }
+ };
+ throw new Error(errObject);
+ }
+
+ // Success case
+ fetchMetadata();
+ ToastWizard.standard("success", "Marked as vetted", "Artefact marked as vetted successfully!");
+ } else {
+ throw new Error("Unexpected response format");
+ }
+ } catch (err) {
+ if (err.response && err.response.data instanceof JSONResponse) {
+ console.log("Error response in mark vetted request:", err.response.data.fullMessage());
+ if (err.response.data.userErrorType()) {
+ ToastWizard.standard("error", "Login failed.", err.response.data.message);
+ } else {
+ ToastWizard.standard("error", "Something went wrong", "Couldn't mark artefact as vetted. Please try again.")
+ }
+ } else {
+ console.log("Unexpected error in mark vetted request:", err);
+ ToastWizard.standard("error", "Something went wrong", "Couldn't mark artefact as vetted. Please try again.");
+ }
+ } finally {
+ setMarkingVetted(false);
+ }
+ }
+
// Show loading spinner while data is being fetched
if (!metadata || !collection || isInvalid) {
return
@@ -223,24 +276,28 @@ function ArtefactEditor() {
navigate(-1)} size={40} color='darkBlue' />
- Data Studio
- {metadata.name}
+ Data Studio
+ {metadata.name}
+
+
+
+ {!vetted && }
{isMobile ? (
-
-
+
-
+
-
-
+
) : (
-
-
+
-