{(toast) => (
-
+
{toast.type === 'loading' ? (
) : (
)}
- {toast.title && {toast.title}}
+ {toast.title && {toast.title}}
{toast.description && (
- {toast.description}
+ {toast.description}
)}
{toast.action && (
- {toast.action.label}
+ {toast.action.label}
)}
- {toast.closable && }
+ {toast.closable && }
)}
diff --git a/src/main.jsx b/src/main.jsx
index 1d6b970..5500b43 100644
--- a/src/main.jsx
+++ b/src/main.jsx
@@ -52,20 +52,19 @@ createRoot(document.getElementById('root')).render(
} />
-
-
- } />
-
- } />
- } />
-
-
{/* Protected Pages */}
}>
} />
} />
+
+
+ } />
+ } />
+ } />
+
+
} />
}>
} />
diff --git a/src/pages/ArtefactEditor.jsx b/src/pages/ArtefactEditor.jsx
index 5a297fe..e1f30c5 100644
--- a/src/pages/ArtefactEditor.jsx
+++ b/src/pages/ArtefactEditor.jsx
@@ -1,11 +1,126 @@
-import { Box, Flex } from "@chakra-ui/react";
+import { Box, Flex, Text, Image } from "@chakra-ui/react";
import { useParams } from 'react-router-dom';
+import { useEffect, useRef, useState } from "react";
+import { useSelector } from "react-redux";
+import ToastWizard from "../components/toastWizard";
+import server, { JSONResponse } from "../networking";
+import CentredSpinner from "../components/CentredSpinner";
+import { FaChevronLeft, FaChevronRight } from "react-icons/fa";
+import EditorCard from "../components/DataStudio/editorCard";
+import { FaCircleArrowLeft } from "react-icons/fa6";
function ArtefactEditor() {
const { artID } = useParams();
+ const [metadata, setMetadata] = useState(null);
+ const { loaded } = useSelector(state => state.auth);
+
+ // Metadata fetching function
+ const fetchMetadata = async () => {
+ try {
+ const response = await server.get(`/cdn/artefactMetadata/${artID}`);
+
+ if (response.data instanceof JSONResponse) {
+ if (response.data.isErrorStatus()) {
+ const errObject = {
+ response: {
+ data: response.data
+ }
+ };
+ throw errObject;
+ }
+
+ // Success case
+ setMetadata(response.data.raw.data);
+ } else {
+ throw new Error("Unexpected response format");
+ }
+ } catch (err) {
+ if (err.response && err.response.data instanceof JSONResponse) {
+ console.log("Error response in fetching metadata:", err.response.data.fullMessage());
+ if (err.response.data.userErrorType()) {
+ ToastWizard.standard(
+ "error",
+ "We could not load the details",
+ err.response.data.message || "There was a problem retrieving this item information. Please try again later.",
+ 3000,
+ true,
+ fetchMetadata,
+ 'Retry'
+ );
+ } else {
+ ToastWizard.standard(
+ "error",
+ "Something went wrong",
+ "We are having trouble loading the information. Please try again in a moment.",
+ 3000,
+ true,
+ fetchMetadata,
+ 'Retry'
+ );
+ }
+ } else {
+ console.log("Unexpected error in fetching metadata:", err.response.data.fullMessage());
+ ToastWizard.standard(
+ "error",
+ "Connection issue",
+ "We could not connect to the server. Please check your internet connection or try again later.",
+ 3000,
+ true,
+ fetchMetadata,
+ 'Retry'
+ );
+ }
+ setMetadata(null);
+ }
+ };
+
+ // Fetch metadata if user is loaded
+ useEffect(() => {
+ if (loaded) {
+ fetchMetadata()
+ }
+ }, [loaded]);
+
+ // Show loading spinner while data is being fetched
+ if (!metadata) {
+ return
+ }
+
return (
- ArtefactEditor for {artID}
+
+
+
+
+ Data Studio
+ {metadata.name}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
-export default ArtefactEditor;
+export default ArtefactEditor;
\ No newline at end of file
diff --git a/src/pages/GroupView.jsx b/src/pages/GroupView.jsx
index 575240f..d3fbe4d 100644
--- a/src/pages/GroupView.jsx
+++ b/src/pages/GroupView.jsx
@@ -1,9 +1,9 @@
import { useParams } from 'react-router-dom';
function GroupView() {
- const { artID, colID } = useParams();
+ const { colID } = useParams();
- return GroupView for collection {colID}, {artID}
;
+ return GroupView for collection {colID}
;
}
export default GroupView;