diff --git a/src/runner/JobDisplay.jsx b/dev/runner/JobDisplay.jsx
similarity index 100%
rename from src/runner/JobDisplay.jsx
rename to dev/runner/JobDisplay.jsx
diff --git a/src/runner/JobView.jsx b/dev/runner/JobView.jsx
similarity index 100%
rename from src/runner/JobView.jsx
rename to dev/runner/JobView.jsx
diff --git a/src/Dashboard.jsx b/src/Dashboard.jsx
index fa66f17..bbe9ee3 100644
--- a/src/Dashboard.jsx
+++ b/src/Dashboard.jsx
@@ -3,7 +3,7 @@ import { JobProvider } from "./ctx/JobContext.jsx";
import { StoreProvider } from "./ctx/StoreContext.jsx";
import { BrowserRouter } from "react-router-dom";
// Import Views
-import Views from "./Views.jsx";
+import Views from "./views/Views.jsx";
export default function Dashboard() {
return (
diff --git a/src/Views.jsx b/src/Views.jsx
deleted file mode 100644
index d2e077e..0000000
--- a/src/Views.jsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { useContext, useState } from "react";
-import StoreContext from "./ctx/StoreContext.jsx";
-import JobContext from "./ctx/JobContext.jsx";
-import Navbar from "./Navbar.jsx";
-
-import { Routes, Route, Navigate } from "react-router-dom";
-import Box from "@mui/material/Box";
-import Toolbar from "@mui/material/Toolbar";
-import IconButton from "@mui/material/IconButton";
-import Typography from "@mui/material/Typography";
-import MenuIcon from "@mui/icons-material/Menu";
-import Avatar from "@mui/material/Avatar";
-import Drawer from "@mui/material/Drawer";
-import ListItemIcon from "@mui/material/ListItemIcon";
-import ListItemText from "@mui/material/ListItemText";
-import List from "@mui/material/List";
-import ListItemButton from "@mui/material/ListItemButton";
-import NotificationsIcon from "@mui/icons-material/Notifications";
-import WorkIcon from "@mui/icons-material/Work";
-import FormatListBulletedIcon from "@mui/icons-material/FormatListBulleted";
-import SettingsIcon from "@mui/icons-material/Settings";
-import WarningIcon from "@mui/icons-material/Warning";
-import InfoIcon from "@mui/icons-material/Info";
-// Import Pages
-import Failing from "./views/Failing.jsx";
-import Alerting from "./views/Alerting.jsx";
-import Jobs from "./views/Jobs.jsx";
-import Catalog from "./views/Catalog.jsx";
-import Settings from "./views/Settings.jsx";
-import About from "./views/About.jsx";
-
-const drawerWidth = 240;
-
-export default function Views() {
- const { state: jobState } = useContext(JobContext);
- const { state: store } = useContext(StoreContext);
-
- return (
-
-
-
-
-
-
- } />
- } />
- } />
- } />
- } />
- } />
- } />
-
-
-
- );
-}
diff --git a/src/views/Jobs.jsx b/src/views/Jobs.jsx
deleted file mode 100644
index 0b78c12..0000000
--- a/src/views/Jobs.jsx
+++ /dev/null
@@ -1,119 +0,0 @@
-import { useState, useContext, useEffect } from "react";
-import { useLocation } from "react-router-dom";
-
-import StoreContext from "../ctx/StoreContext.jsx";
-import JobContext from "../ctx/JobContext.jsx";
-import JobBox from "./components/JobBox.jsx";
-import JobTestSelector from "./components/JobTestSelector.jsx";
-import JobView from "./components/JobView.jsx";
-
-import Button from "@mui/material/Button";
-import Dialog from "@mui/material/Dialog";
-import DialogActions from "@mui/material/DialogActions";
-import DialogContent from "@mui/material/DialogContent";
-import Toolbar from "@mui/material/Toolbar";
-import DialogTitle from "@mui/material/DialogTitle";
-
-import ClickAwayListener from "@mui/material/ClickAwayListener";
-import SpeedDial from "@mui/material/SpeedDial";
-import SpeedDialAction from "@mui/material/SpeedDialAction";
-import SpeedDialIcon from "@mui/material/SpeedDialIcon";
-
-import PageviewIcon from "@mui/icons-material/Pageview";
-import ViewColumnIcon from "@mui/icons-material/ViewColumn";
-import ViewCarouselIcon from "@mui/icons-material/ViewCarousel";
-
-export default function Jobs() {
- const {
- state: jobState,
- dispatch: jobDispatch,
- jobBuilder,
- } = useContext(JobContext);
- const location = useLocation();
- const { state: store, updateStore } = useContext(StoreContext);
- const [quickOpen, setQuickOpen] = useState(false);
- const [jobDialogOpen, setJobDialogOpen] = useState(false);
-
- const actions = [
- { name: "Suite", icon: },
- { name: "Compound", icon: },
- { name: "Manual", icon: },
- ];
-
- const quickOpenClick = (e) => {
- e.preventDefault();
- e.stopPropagation();
- if (!store.simplifiedControls) return setQuickOpen(!quickOpen);
- setJobDialogOpen(true);
- };
- const quickOpenClose = () => setQuickOpen(false);
-
- const handleClickOpen = () => setJobDialogOpen(true);
-
- const [queued, setQueued] = useState([]);
- useEffect(() => {}, [jobState.jobs, location]);
-
- const handleClose = (confirmed) => () => {
- setJobDialogOpen(false);
- if (!confirmed) return;
- jobBuilder(queued);
- };
-
- return (
-
- {location.hash === "" &&
- jobState.jobs.map((v, i) => (
-
-
-
- ))}
- {jobState.jobs.find((job) => job.name === location.hash.slice(1)) && (
-
job.name === location.hash.slice(1))}
- />
- )}
-
-
-
-
- }
- onClick={quickOpenClick}
- open={quickOpen}
- >
- {actions.map((action) => (
-
- ))}
-
-
-
- );
-}
diff --git a/src/Navbar.jsx b/src/views/Navbar.jsx
similarity index 88%
rename from src/Navbar.jsx
rename to src/views/Navbar.jsx
index 2ee89ec..63147c1 100644
--- a/src/Navbar.jsx
+++ b/src/views/Navbar.jsx
@@ -1,13 +1,9 @@
import { useContext, useState } from "react";
-import StoreContext from "./ctx/StoreContext.jsx";
-import JobContext from "./ctx/JobContext.jsx";
+import StoreContext from "../ctx/StoreContext.jsx";
+import JobContext from "../ctx/JobContext.jsx";
import {
- Routes,
- Route,
Link,
- BrowserRouter,
- Navigate,
useLocation,
} from "react-router-dom";
import AppBar from "@mui/material/AppBar";
@@ -30,15 +26,8 @@ import FormatListBulletedIcon from "@mui/icons-material/FormatListBulleted";
import SettingsIcon from "@mui/icons-material/Settings";
import WarningIcon from "@mui/icons-material/Warning";
import InfoIcon from "@mui/icons-material/Info";
-// Import Pages
-import Failing from "./views/Failing.jsx";
-import Alerting from "./views/Alerting.jsx";
-import Jobs from "./views/Jobs.jsx";
-import Catalog from "./views/Catalog.jsx";
-import Settings from "./views/Settings.jsx";
-import About from "./views/About.jsx";
-const drawerWidth = 240;
+const drawerWidth = 250;
export default function Navbar(props) {
const { state: jobState } = useContext(JobContext);
@@ -112,7 +101,7 @@ export default function Navbar(props) {
sx={{ zIndex: drawerIndex(true) }}
>
-
+
{pages.map((text, index) => (
+
+
+
+
+
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+
+
+ );
+}
diff --git a/src/views/About.jsx b/src/views/about/About.jsx
similarity index 100%
rename from src/views/About.jsx
rename to src/views/about/About.jsx
diff --git a/src/views/Alerting.jsx b/src/views/alerting/Alerting.jsx
similarity index 94%
rename from src/views/Alerting.jsx
rename to src/views/alerting/Alerting.jsx
index 431b03f..d2de54a 100644
--- a/src/views/Alerting.jsx
+++ b/src/views/alerting/Alerting.jsx
@@ -1,7 +1,7 @@
import { useState, useContext } from "react";
-import StoreContext from "../ctx/StoreContext.jsx";
-import SilencedBox from "./components/SilencedBox.jsx";
-import SilenceDialog from "./components/SilenceDialog.jsx";
+import StoreContext from "../../ctx/StoreContext.jsx";
+import SilencedBox from "./SilencedBox.jsx";
+import SilenceDialog from "./SilenceDialog.jsx";
import SpeedDial from "@mui/material/SpeedDial";
import SpeedDialAction from "@mui/material/SpeedDialAction";
diff --git a/src/views/components/SilenceDialog.jsx b/src/views/alerting/SilenceDialog.jsx
similarity index 100%
rename from src/views/components/SilenceDialog.jsx
rename to src/views/alerting/SilenceDialog.jsx
diff --git a/src/views/components/SilencedBox.jsx b/src/views/alerting/SilencedBox.jsx
similarity index 100%
rename from src/views/components/SilencedBox.jsx
rename to src/views/alerting/SilencedBox.jsx
diff --git a/src/views/alt-comps/JobManualSelector.jsx b/src/views/alt-comps/JobManualSelector.jsx
deleted file mode 100644
index d2c17af..0000000
--- a/src/views/alt-comps/JobManualSelector.jsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { useState, useEffect } from "react";
-import Box from "@mui/material/Box";
-import List from "@mui/material/List";
-import ListItem from "@mui/material/ListItem";
-import ListItemButton from "@mui/material/ListItemButton";
-import ListItemText from "@mui/material/ListItemText";
-import ListItemAvatar from "@mui/material/ListItemAvatar";
-import Checkbox from "@mui/material/Checkbox";
-
-export default function JobManualSelector(props) {
- const { availableTests } = props;
- const [queued, setQueued] = useState([]);
- useEffect(() => {}, [availableTests]);
-
- const queueTest = (test) => () => {
- const q = [...queued];
- const testIndex = q.indexOf(test);
- if (testIndex === -1) q.push(test);
- else q.splice(testIndex, 1);
- setQueued(q);
- };
-
- return (
-
-
- {availableTests.map((v, i) => (
-
- }
- disablePadding
- onClick={queueTest(v)}
- >
-
-
- {v.class}#{v.name}
-
- }
- style={{ wordBreak: "break-word" }}
- />
-
-
- ))}
-
-
- );
-}
diff --git a/src/views/alt-comps/JobTestSelector.jsx b/src/views/alt-comps/JobTestSelector.jsx
deleted file mode 100644
index 05a3408..0000000
--- a/src/views/alt-comps/JobTestSelector.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useState, useEffect } from "react";
-
-import Button from "@mui/material/Button";
-import Dialog from "@mui/material/Dialog";
-import DialogActions from "@mui/material/DialogActions";
-import DialogContent from "@mui/material/DialogContent";
-import DialogTitle from "@mui/material/DialogTitle";
-
-export default function JobTestSelector(props) {
- const { jobDialogOpen, handleClose, dialogTitle, testSelector } = props;
- return (
-
- );
-}
diff --git a/src/views/Catalog.jsx b/src/views/catalog/Catalog.jsx
similarity index 80%
rename from src/views/Catalog.jsx
rename to src/views/catalog/Catalog.jsx
index 8c7aa1b..1edf101 100644
--- a/src/views/Catalog.jsx
+++ b/src/views/catalog/Catalog.jsx
@@ -1,11 +1,12 @@
import { useEffect, useContext } from "react";
-import StoreContext from "../ctx/StoreContext.jsx";
-import JobContext from "../ctx/JobContext.jsx";
-import CatalogBox from "./components/CatalogBox.jsx";
+import StoreContext from "../../ctx/StoreContext.jsx";
+import JobContext from "../../ctx/JobContext.jsx";
+import CatalogBox from "./CatalogBox.jsx";
+import CatalogSearch from "./CatalogSearch.jsx";
import TextField from "@mui/material/TextField";
-import CatalogSearch from "./components/CatalogSearch.jsx";
+
export default function Catalog() {
const {
diff --git a/src/views/components/CatalogBox.jsx b/src/views/catalog/CatalogBox.jsx
similarity index 100%
rename from src/views/components/CatalogBox.jsx
rename to src/views/catalog/CatalogBox.jsx
diff --git a/src/views/components/CatalogSearch.jsx b/src/views/catalog/CatalogSearch.jsx
similarity index 100%
rename from src/views/components/CatalogSearch.jsx
rename to src/views/catalog/CatalogSearch.jsx
diff --git a/src/views/components/JobBox.jsx b/src/views/components/JobBox.jsx
deleted file mode 100644
index bb97db4..0000000
--- a/src/views/components/JobBox.jsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React, { useState, useContext } from "react";
-import StoreContext from "../../ctx/StoreContext.jsx";
-import JobContext, { jobStatus } from "../../ctx/JobContext.jsx";
-
-import Accordion from "@mui/material/Accordion";
-import AccordionDetails from "@mui/material/AccordionDetails";
-import AccordionSummary from "@mui/material/AccordionSummary";
-import Typography from "@mui/material/Typography";
-
-import IconButton from "@mui/material/IconButton";
-import CheckIcon from "@mui/icons-material/Check";
-import ClearIcon from "@mui/icons-material/Clear";
-import ViewColumnIcon from "@mui/icons-material/ViewColumn";
-import PendingIcon from "@mui/icons-material/Pending";
-import VisibilityIcon from "@mui/icons-material/Visibility";
-import DoNotDisturbIcon from "@mui/icons-material/DoNotDisturb";
-
-import Box from "@mui/material/Box";
-import Stack from "@mui/material/Stack";
-
-export default function JobBox(props) {
- const { job } = props;
-
- const { name, status } = job;
-
- function jobIcon() {
- switch (status) {
- case jobStatus.OK:
- return ;
- case jobStatus.ERROR:
- return ;
- case jobStatus.PENDING:
- return ;
- case jobStatus.ACTIVE:
- return ;
- case jobStatus.CANCELED:
- return ;
- case jobStatus.QUEUED:
- return ;
- default:
- return ;
- }
- }
-
- return (
-
-
-
- {name}
-
-
-
- {jobIcon()}
-
-
-
-
- );
-}
diff --git a/src/views/components/JobLogView.jsx b/src/views/components/JobLogView.jsx
deleted file mode 100644
index 65b4d5c..0000000
--- a/src/views/components/JobLogView.jsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import { useContext, useState, useEffect } from "react";
-import JobContext from "../../ctx/JobContext.jsx";
-
-import Box from "@mui/material/Box";
-import Typography from "@mui/material/Typography";
-import Skeleton from "@mui/material/Skeleton";
-import Stack from "@mui/material/Stack";
-
-export default function JobLogView(props) {
- const { log } = props;
-
- const LoadingDot = () => (
-
- );
-
- return (
-
- {log.map((l, i) => (
-
-
-
- {i + 1}
-
-
- {" "}
- {l}
-
-
-
- ))}
-
-
-
-
-
-
- );
-}
diff --git a/src/views/components/JobTestSelector.jsx b/src/views/components/JobTestSelector.jsx
deleted file mode 100644
index cf6dbce..0000000
--- a/src/views/components/JobTestSelector.jsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import { useState, useEffect } from "react";
-import Box from "@mui/material/Box";
-import List from "@mui/material/List";
-import ListItem from "@mui/material/ListItem";
-import ListItemButton from "@mui/material/ListItemButton";
-import ListItemText from "@mui/material/ListItemText";
-import Checkbox from "@mui/material/Checkbox";
-
-export default function JobTestSelector(props) {
- const { availableTests, queued, setQueued } = props;
-
- useEffect(() => {}, [availableTests]);
-
- const queueTest = (test) => () => {
- const q = [...queued];
- const testIndex = q.indexOf(test);
- if (testIndex === -1) q.push(test);
- else q.splice(testIndex, 1);
- setQueued(q);
- };
-
- return (
-
-
- {availableTests.map((v, i) => (
-
- }
- disablePadding
- onClick={queueTest(v)}
- >
-
-
- {v.class}#{v.name}
-
- }
- style={{ wordBreak: "break-word" }}
- />
-
-
- ))}
-
-
- );
-}
diff --git a/src/views/components/JobView.jsx b/src/views/components/JobView.jsx
deleted file mode 100644
index 18030c8..0000000
--- a/src/views/components/JobView.jsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import React, { useContext, useState, useEffect } from "react";
-import { useNavigate } from "react-router-dom";
-import JobContext from "../../ctx/JobContext.jsx";
-import Box from "@mui/material/Box";
-import AppBar from "@mui/material/AppBar";
-import Toolbar from "@mui/material/Toolbar";
-import Button from "@mui/material/Button";
-import Typography from "@mui/material/Typography";
-
-import JobLogView from "./JobLogView.jsx";
-
-export default function JobView(props) {
- const navigate = useNavigate();
- const { state: jobState } = useContext(JobContext);
- const { job: initJob } = props;
- const [job, setJob] = useState({ log: [initJob.name] });
-
- function retryJob() {}
-
- function downloadLog() {}
-
- function navigateToJobs() {
- navigate("/jobs");
- }
-
- function onLog(d) {
- const j = { ...job };
- j.log.push(d);
- setJob(j);
- }
-
- return (
-
-
-
-
-
-
-
- {initJob.name}
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/views/Failing.jsx b/src/views/failing/Failing.jsx
similarity index 92%
rename from src/views/Failing.jsx
rename to src/views/failing/Failing.jsx
index 3c299e3..0786385 100644
--- a/src/views/Failing.jsx
+++ b/src/views/failing/Failing.jsx
@@ -1,7 +1,8 @@
import { useState, useContext } from "react";
-import StoreContext from "../ctx/StoreContext.jsx";
-import JobContext from "../ctx/JobContext.jsx";
-import SilenceDialog from "./components/SilenceDialog.jsx";
+import StoreContext from "../../ctx/StoreContext.jsx";
+import JobContext from "../../ctx/JobContext.jsx";
+import SilenceDialog from "../alerting/SilenceDialog.jsx";
+import FailingBox from "./FailingBox.jsx";
import SpeedDial from "@mui/material/SpeedDial";
import SpeedDialAction from "@mui/material/SpeedDialAction";
@@ -16,7 +17,6 @@ import DialogTitle from "@mui/material/DialogTitle";
import ReplayIcon from "@mui/icons-material/Replay";
-import FailingBox from "./components/FailingBox.jsx";
export default function Failing() {
const { state: jobState, retryAll, activeJobStates } = useContext(JobContext);
diff --git a/src/views/components/FailingBox.jsx b/src/views/failing/FailingBox.jsx
similarity index 100%
rename from src/views/components/FailingBox.jsx
rename to src/views/failing/FailingBox.jsx
diff --git a/src/views/components/MultiOptionDialog.jsx b/src/views/settings/MultiOptionDialog.jsx
similarity index 100%
rename from src/views/components/MultiOptionDialog.jsx
rename to src/views/settings/MultiOptionDialog.jsx
diff --git a/src/views/Settings.jsx b/src/views/settings/Settings.jsx
similarity index 97%
rename from src/views/Settings.jsx
rename to src/views/settings/Settings.jsx
index fde36bc..9713af6 100644
--- a/src/views/Settings.jsx
+++ b/src/views/settings/Settings.jsx
@@ -1,7 +1,7 @@
import React, { useContext, useState, useEffect } from "react";
-import StoreContext from "../ctx/StoreContext.jsx";
+import StoreContext from "../../ctx/StoreContext.jsx";
-import MultiOptionDialog from "./components/MultiOptionDialog.jsx";
+import MultiOptionDialog from "./MultiOptionDialog.jsx";
import Box from "@mui/material/Box";
import Button from "@mui/material/Button";