diff --git a/src/Dashboard.jsx b/src/Dashboard.jsx
index a43ede5..f1d82e1 100644
--- a/src/Dashboard.jsx
+++ b/src/Dashboard.jsx
@@ -1,7 +1,7 @@
// Import Contexts
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
-import { JobProvider } from "./ctx/JobContext.jsx";
-import { StoreProvider } from "./ctx/StoreContext.jsx";
+import { JobProvider } from "@qltr/jobs";
+import { StoreProvider } from "@qltr/store";
import { BrowserRouter } from "react-router-dom";
// Import Views
import Views from "./views/Views.jsx";
diff --git a/src/ctx/JobContext.jsx b/src/ctx/JobContext.jsx
index 9834eb9..ba65db3 100644
--- a/src/ctx/JobContext.jsx
+++ b/src/ctx/JobContext.jsx
@@ -1,5 +1,5 @@
import React, { useReducer, createContext, useMemo } from "react";
-import Initiator from "../../lib/sockets/clients/Initiator.js";
+import Initiator from "@qltr/initiator";
const JobContext = createContext();
export const jobStatus = {
diff --git a/src/util/JobTools.jsx b/src/util/JobTools.jsx
new file mode 100644
index 0000000..74571e7
--- /dev/null
+++ b/src/util/JobTools.jsx
@@ -0,0 +1,56 @@
+import { useContext } from "react";
+import JobContext, { jobStatus } from "@qltr/jobs";
+
+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 ReplayIcon from "@mui/icons-material/Replay";
+
+function statusIcon(status) {
+ 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 ;
+ }
+}
+export const pipelineJobs = (pipeline, jobs) =>
+ jobs.filter((j) => j.isPipeline && j.pipelineId === pipeline.id);
+
+export const useJobIconState = (job) => statusIcon(job.status);
+
+export const usePipelineIconState = (pipeline) => {
+ const { state: jobState } = useContext(JobContext);
+ const jobStatuses = pipelineJobs(pipeline, jobState.jobs).map(
+ (j) => j.status
+ );
+ if (jobStatuses.includes(jobStatus.ERROR)) return statusIcon(jobStatus.ERROR);
+
+ if (jobStatuses.includes(jobStatus.ACTIVE))
+ return statusIcon(jobStatus.ACTIVE);
+ if (jobStatuses.includes(jobStatus.PENDING))
+ return statusIcon(jobStatus.PENDING);
+ if (pipeline.isCanceled) return statusIcon(jobStatus.CANCELED);
+ return statusIcon(jobStatus.QUEUED);
+};
+
+export const selectedPipelineBranches = (pipeline) =>
+ pipeline.branches.map((b) =>
+ b.filter((t) => pipeline.selectedBranches.includes(t))
+ );
+
+export const findPipelineJobByTestName = (pipeline, jobs, testName) =>
+ pipelineJobs(pipeline, jobs).find((j) => j.branchId === testName);
diff --git a/lib/jobs/pipelines.js b/src/util/pipelines.js
similarity index 100%
rename from lib/jobs/pipelines.js
rename to src/util/pipelines.js
diff --git a/src/Queries.jsx b/src/util/queries.js
similarity index 100%
rename from src/Queries.jsx
rename to src/util/queries.js
diff --git a/src/views/Navbar.jsx b/src/views/Navbar.jsx
index 7fc2db3..1c1f4ed 100644
--- a/src/views/Navbar.jsx
+++ b/src/views/Navbar.jsx
@@ -1,7 +1,7 @@
import { useContext, useState } from "react";
-import { useCurrentlyFailing } from "../Queries.jsx";
-import JobContext from "../ctx/JobContext.jsx";
-import StoreContext from "../ctx/StoreContext.jsx";
+import { useCurrentlyFailing } from "@qltr/queries";
+import JobContext from "@qltr/jobs";
+import StoreContext from "@qltr/store";
import { Link, useLocation } from "react-router-dom";
import AppBar from "@mui/material/AppBar";
@@ -28,7 +28,7 @@ import SentimentSatisfiedAltIcon from "@mui/icons-material/SentimentSatisfiedAlt
const drawerWidth = 250;
-export default function Navbar(props) {
+export default function Navbar() {
const { state: jobState } = useContext(JobContext);
const { state: store } = useContext(StoreContext);
const { isLoading, data: failing } = useCurrentlyFailing();
diff --git a/src/views/Views.jsx b/src/views/Views.jsx
index 6c7bb9a..7dd7657 100644
--- a/src/views/Views.jsx
+++ b/src/views/Views.jsx
@@ -2,7 +2,7 @@ import { useContext } from "react";
import { Routes, Route, Navigate } from "react-router-dom";
import Box from "@mui/material/Box";
import Toolbar from "@mui/material/Toolbar";
-import StoreContext from "../ctx/StoreContext.jsx";
+import StoreContext from "@qltr/store";
// Import Navbar
import Navbar from "./Navbar.jsx";
// Import Pages
diff --git a/src/views/alerting/Alerting.jsx b/src/views/alerting/Alerting.jsx
index 9eeb6d7..a591dab 100644
--- a/src/views/alerting/Alerting.jsx
+++ b/src/views/alerting/Alerting.jsx
@@ -1,6 +1,6 @@
import React, { useState, useContext } from "react";
-import { useSilencedAlerts } from "../../Queries.jsx";
-import StoreContext from "../../ctx/StoreContext.jsx";
+import { useSilencedAlerts } from "@qltr/queries";
+import StoreContext from "@qltr/store";
import SilencedBox from "./SilencedBox.jsx";
import SilenceDialog from "./SilenceDialog.jsx";
diff --git a/src/views/alerting/SilenceDialog.jsx b/src/views/alerting/SilenceDialog.jsx
index fd7fe4f..75d8b8c 100644
--- a/src/views/alerting/SilenceDialog.jsx
+++ b/src/views/alerting/SilenceDialog.jsx
@@ -1,5 +1,5 @@
import { useState, useContext, useEffect } from "react";
-import StoreContext from "../../ctx/StoreContext.jsx";
+import StoreContext from "@qltr/store";
import useMediaQuery from "@mui/material/useMediaQuery";
import { useTheme } from "@mui/material/styles";
diff --git a/src/views/alerting/SilencedBox.jsx b/src/views/alerting/SilencedBox.jsx
index 7413dd8..b48c44d 100644
--- a/src/views/alerting/SilencedBox.jsx
+++ b/src/views/alerting/SilencedBox.jsx
@@ -1,5 +1,5 @@
import React, { useState, useContext } from "react";
-import StoreContext from "../../ctx/StoreContext.jsx";
+import StoreContext from "@qltr/store";
import Accordion from "@mui/material/Accordion";
import AccordionSummary from "@mui/material/AccordionSummary";
@@ -8,7 +8,6 @@ import Typography from "@mui/material/Typography";
import IconButton from "@mui/material/IconButton";
import DeleteIcon from "@mui/icons-material/Delete";
import EditIcon from "@mui/icons-material/Edit";
-
import Stack from "@mui/material/Stack";
export default function SilencingBox(props) {
diff --git a/src/views/catalog/Catalog.jsx b/src/views/catalog/Catalog.jsx
index 764f688..d0f0388 100644
--- a/src/views/catalog/Catalog.jsx
+++ b/src/views/catalog/Catalog.jsx
@@ -1,13 +1,14 @@
import { useEffect, useContext } from "react";
-import StoreContext from "../../ctx/StoreContext.jsx";
-import JobContext from "../../ctx/JobContext.jsx";
+import StoreContext from "@qltr/store";
+import JobContext from "@qltr/jobs";
import CatalogBox from "./CatalogBox.jsx";
import CatalogSearch from "./CatalogSearch.jsx";
-import { useCatalogTests } from "../../Queries.jsx";
+import { useCatalogTests } from "@qltr/queries";
import TextField from "@mui/material/TextField";
export default function Catalog() {
const { state: store, updateStore } = useContext(StoreContext);
+ const { state: jobState } = useContext(JobContext);
const { isLoading, data: tests } = useCatalogTests();
const handleSearchChange = (e) =>
updateStore({ catalogSearch: e.target.value });
@@ -20,6 +21,31 @@ export default function Catalog() {
};
}, []);
+ const catalogWithJobs = () => {
+ for (var test of tests) {
+ if (test.isPipeline) {
+ const pipeline = jobState.pipelines.find((p) =>
+ p.selectedBranches.includes(test.name)
+ );
+ if (!pipeline) continue;
+ const pipelineJob = jobState.jobs.find(
+ (j) =>
+ j.isPipeline &&
+ j.pipelineId === pipeline.id &&
+ j.branchId === test.name
+ );
+ if (!pipelineJob) test.pipeline = pipeline;
+ test.job = pipelineJob;
+ continue;
+ }
+ const job = jobState.jobs.find(
+ (j) => !j.isPipeline && j.builderCache.testNames.includes(test.name)
+ );
+ if (job) test.job = job;
+ }
+ return tests;
+ };
+
return (
{store.catalogSearch}
{isLoading
? null
- : tests.map((v, i) => )}
+ : catalogWithJobs().map((v, i) => (
+
+ ))}
);
}
diff --git a/src/views/catalog/CatalogBox.jsx b/src/views/catalog/CatalogBox.jsx
index e49bf11..0898abb 100644
--- a/src/views/catalog/CatalogBox.jsx
+++ b/src/views/catalog/CatalogBox.jsx
@@ -1,8 +1,9 @@
import React, { useState, useContext } from "react";
import { useNavigate } from "react-router-dom";
-import { usePipelineMappings } from "../../Queries.jsx";
-import StoreContext from "../../ctx/StoreContext.jsx";
-import JobContext from "../../ctx/JobContext.jsx";
+import { usePipelineMappings } from "@qltr/queries";
+import StoreContext from "@qltr/store";
+import JobContext, { jobStatus } from "@qltr/jobs";
+import { useJobIconState, usePipelineIconState } from "@qltr/util/JobTools";
import Accordion from "@mui/material/Accordion";
import AccordionDetails from "@mui/material/AccordionDetails";
@@ -11,15 +12,11 @@ import Typography from "@mui/material/Typography";
import IconButton from "@mui/material/IconButton";
import PlayArrowIcon from "@mui/icons-material/PlayArrow";
+import ViewColumnIcon from "@mui/icons-material/ViewColumn";
import Box from "@mui/material/Box";
import Stack from "@mui/material/Stack";
-import {
- selectBranch,
- asTree,
- asBranches,
- as1d,
-} from "../../../lib/jobs/pipelines.js";
+import { asTree, asBranches, as1d } from "@qltr/util/pipelines.js";
export default function CatalogBox(props) {
const { catalogTest } = props;
@@ -30,24 +27,28 @@ export default function CatalogBox(props) {
repo: testRepo,
isPipeline,
type: testType,
+ job,
+ pipeline,
} = catalogTest;
const navigate = useNavigate();
const { data: pipelineMappings, isLoading } = usePipelineMappings();
- const { state: store, updateStore } = useContext(StoreContext);
+ const { state: store } = useContext(StoreContext);
- const { state: jobState, jobFactory } = useContext(JobContext);
+ const { jobFactory } = useContext(JobContext);
const [open, setOpen] = useState(false);
const toggleOpen = () => setOpen(!open);
- const runTest = (e) => {
- e.preventDefault();
- e.stopPropagation();
- console.log(catalogTest);
+ const navigateToJob = () => {
+ if (pipeline) return navigate(`/qualiteer/jobs#p${pipeline.id}`);
+ navigate(`/qualiteer/jobs#${job.jobId}`);
+ };
+
+ const runTest = () => {
if (isPipeline) return runPipelineTest();
- const jobId = jobFactory({ testNames: [testName] });
+ const jobId = jobFactory({ testNames: [testName], isTriage: true });
if (store.focusJob) navigate(`/qualiteer/jobs#${jobId}`);
};
@@ -63,6 +64,20 @@ export default function CatalogBox(props) {
if (store.focusJob) navigate(`/qualiteer/jobs#p${pipeline.id}`);
};
+ const jobOnClick = (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ if (pipeline) return navigateToJob();
+ if (!job) return runTest();
+ navigateToJob();
+ };
+
+ function jobIcon() {
+ if (pipeline) return usePipelineIconState(pipeline);
+ if (!job) return ;
+ return useJobIconState(job);
+ }
+
function Actions() {
return (
@@ -70,9 +85,9 @@ export default function CatalogBox(props) {
color="success"
aria-label="play"
component="span"
- onClick={runTest}
+ onClick={jobOnClick}
>
-
+ {jobIcon()}
);
@@ -98,6 +113,11 @@ export default function CatalogBox(props) {
{`${testClass}#`}
{testName}
+ {isPipeline && (
+
+
+
+ )}
@@ -119,7 +139,7 @@ export default function CatalogBox(props) {
- {JSON.stringify(catalogTest)}
+ {"Test info"}
diff --git a/src/views/failing/Failing.jsx b/src/views/failing/Failing.jsx
index 6b349e3..c6ee25f 100644
--- a/src/views/failing/Failing.jsx
+++ b/src/views/failing/Failing.jsx
@@ -1,8 +1,8 @@
import { useState, useContext } from "react";
import { useNavigate } from "react-router-dom";
-import { useCurrentlyFailing, useSilencedAlerts } from "../../Queries.jsx";
-import StoreContext from "../../ctx/StoreContext.jsx";
-import JobContext from "../../ctx/JobContext.jsx";
+import { useCurrentlyFailing, useSilencedAlerts } from "@qltr/queries";
+import StoreContext from "@qltr/store";
+import JobContext from "@qltr/jobs";
import SilenceDialog from "../alerting/SilenceDialog.jsx";
import FailingBox from "./FailingBox.jsx";
@@ -14,20 +14,14 @@ import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import DialogContentText from "@mui/material/DialogContentText";
import DialogTitle from "@mui/material/DialogTitle";
-
import ReplayIcon from "@mui/icons-material/Replay";
import Box from "@mui/material/Box";
-
import Typography from "@mui/material/Typography";
export default function Failing() {
const { state: jobState, retryAll } = useContext(JobContext);
const navigate = useNavigate();
- const {
- state: store,
- updateStore,
- silenceRequest,
- } = useContext(StoreContext);
+ const { state: store, silenceRequest } = useContext(StoreContext);
const { isLoading, data: failing } = useCurrentlyFailing();
const { isSilencedLoading, data: silencedAlerts } = useSilencedAlerts();
const [silenceEntry, setSilenceEntry] = useState({ open: false });
diff --git a/src/views/failing/FailingBox.jsx b/src/views/failing/FailingBox.jsx
index 355aeac..6d6ad3f 100644
--- a/src/views/failing/FailingBox.jsx
+++ b/src/views/failing/FailingBox.jsx
@@ -1,8 +1,9 @@
import React, { useState, useContext } from "react";
import { useNavigate } from "react-router-dom";
-import { usePipelineMappings } from "../../Queries.jsx";
-import StoreContext from "../../ctx/StoreContext.jsx";
-import JobContext, { jobStatus } from "../../ctx/JobContext.jsx";
+import { usePipelineMappings } from "@qltr/queries";
+import StoreContext from "@qltr/store";
+import JobContext, { jobStatus } from "@qltr/jobs";
+import { useJobIconState, usePipelineIconState } from "@qltr/util/JobTools";
import Accordion from "@mui/material/Accordion";
import AccordionDetails from "@mui/material/AccordionDetails";
@@ -33,12 +34,7 @@ import Badge from "@mui/material/Badge";
import Stack from "@mui/material/Stack";
import Box from "@mui/material/Box";
-import {
- selectBranch,
- asTree,
- asBranches,
- as1d,
-} from "../../../lib/jobs/pipelines.js";
+import { asTree, asBranches, as1d } from "@qltr/util/pipelines.js";
const stopPropagation = (e) => e.stopPropagation() && e.preventDefault();
@@ -112,45 +108,13 @@ export default function FailingBox(props) {
const jobOnClick = () => {
if (pipeline) return navigateToJob;
if (!job) return retryTest;
- switch (job.status) {
- case jobStatus.OK:
- return navigateToJob;
- case jobStatus.ERROR:
- return retryTest;
- case jobStatus.PENDING:
- return navigateToJob;
- case jobStatus.ACTIVE:
- return navigateToJob;
- case jobStatus.CANCELED:
- return navigateToJob;
- case jobStatus.QUEUED:
- return navigateToJob;
- default:
- return retryTest;
- }
+ navigateToJob();
};
function jobIcon() {
- if (pipeline && pipeline.isCanceled)
- return ;
- if (pipeline) return ;
+ if (pipeline) return usePipelineIconState(pipeline);
if (!job) return ;
- switch (job.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 useJobIconState(job);
}
function Actions() {
diff --git a/src/views/jobs/JobBox.jsx b/src/views/jobs/JobBox.jsx
index bb97db4..26bcc64 100644
--- a/src/views/jobs/JobBox.jsx
+++ b/src/views/jobs/JobBox.jsx
@@ -1,21 +1,12 @@
-import React, { useState, useContext } from "react";
-import StoreContext from "../../ctx/StoreContext.jsx";
-import JobContext, { jobStatus } from "../../ctx/JobContext.jsx";
+import React from "react";
+import { useJobIconState } from "@qltr/util/JobTools";
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) {
@@ -23,25 +14,6 @@ export default function JobBox(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 (
- {jobIcon()}
+ {useJobIconState(job)}
diff --git a/src/views/jobs/JobLogView.jsx b/src/views/jobs/JobLogView.jsx
index a61fbc7..2bfd06a 100644
--- a/src/views/jobs/JobLogView.jsx
+++ b/src/views/jobs/JobLogView.jsx
@@ -1,5 +1,5 @@
import React from "react";
-import { jobStatus } from "../../ctx/JobContext.jsx";
+import { jobStatus } from "@qltr/jobs";
import Box from "@mui/material/Box";
import Typography from "@mui/material/Typography";
diff --git a/src/views/jobs/JobPipelineBox.jsx b/src/views/jobs/JobPipelineBox.jsx
index b05b262..bf98a7b 100644
--- a/src/views/jobs/JobPipelineBox.jsx
+++ b/src/views/jobs/JobPipelineBox.jsx
@@ -1,6 +1,7 @@
import React, { useState, useContext } from "react";
-import StoreContext from "../../ctx/StoreContext.jsx";
-import JobContext, { jobStatus } from "../../ctx/JobContext.jsx";
+import StoreContext from "@qltr/store";
+import JobContext, { jobStatus } from "@qltr/jobs";
+import { usePipelineIconState } from "@qltr/util/JobTools";
import Accordion from "@mui/material/Accordion";
import AccordionDetails from "@mui/material/AccordionDetails";
@@ -20,10 +21,7 @@ import Stack from "@mui/material/Stack";
export default function JobPipelineBox(props) {
const { pipeline } = props;
-
- function jobIcon() {
- return ;
- }
+ const pipelineIcon = usePipelineIconState(pipeline);
return (
@@ -41,7 +39,7 @@ export default function JobPipelineBox(props) {
- {jobIcon()}
+ {pipelineIcon}
diff --git a/src/views/jobs/JobPipelineDisplay.jsx b/src/views/jobs/JobPipelineDisplay.jsx
index 9046bc6..8fed670 100644
--- a/src/views/jobs/JobPipelineDisplay.jsx
+++ b/src/views/jobs/JobPipelineDisplay.jsx
@@ -1,6 +1,12 @@
import React, { useContext } from "react";
import { useNavigate } from "react-router-dom";
-import JobContext, { jobStatus } from "../../ctx/JobContext.jsx";
+import JobContext, { jobStatus } from "@qltr/jobs";
+import {
+ selectedPipelineBranches,
+ pipelineJobs,
+ findPipelineJobByTestName,
+ useJobIconState,
+} from "@qltr/util/JobTools";
import Box from "@mui/material/Box";
import AppBar from "@mui/material/AppBar";
@@ -44,20 +50,8 @@ function JobPipelineDisplay(props) {
setAnchorEl(null);
};
- const pipelineJobs = jobState.jobs.filter(
- (j) => j.isPipeline && j.pipelineId === pipeline.id
- );
- const selectedBranches = () => {
- return pipeline.branches.map((b) => {
- return b.filter((t) => pipeline.selectedBranches.includes(t));
- });
- };
-
- const findJob = (testName) =>
- pipelineJobs.find((j) => j.branchId === testName);
-
const selectJob = (testName) => () => {
- const job = findJob(testName);
+ const job = findPipelineJobByTestName(pipeline, jobState.jobs, testName);
if (!job) return;
navigate(`/qualiteer/jobs#${job.jobId}`);
};
@@ -80,31 +74,16 @@ function JobPipelineDisplay(props) {
};
function pipelineActive() {
- return pipelineJobs.find(
+ return pipelineJobs(pipeline, jobState.jobs).find(
(j) => j.status === jobStatus.ACTIVE || j.status === jobStatus.PENDING
);
}
function jobIcon(name) {
- const job = findJob(name);
- const status = job ? job.status : null;
if (pipeline.isCanceled) return ;
- 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 ;
- }
+ const job = findPipelineJobByTestName(pipeline, jobState.jobs, name);
+ if (!job) return ;
+ return useJobIconState(job);
}
return (
@@ -133,7 +112,7 @@ function JobPipelineDisplay(props) {
- {selectedBranches().map((track, i) => (
+ {selectedPipelineBranches(pipeline).map((track, i) => (
{i + 1}
diff --git a/src/views/jobs/JobView.jsx b/src/views/jobs/JobView.jsx
index 8af2554..af01fcd 100644
--- a/src/views/jobs/JobView.jsx
+++ b/src/views/jobs/JobView.jsx
@@ -1,7 +1,7 @@
import React, { useContext, useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";
-import JobContext, { jobStatus } from "../../ctx/JobContext.jsx";
-import StoreContext from "../../ctx/StoreContext.jsx";
+import JobContext, { jobStatus } from "@qltr/jobs";
+import StoreContext from "@qltr/store";
import Box from "@mui/material/Box";
import AppBar from "@mui/material/AppBar";
import Toolbar from "@mui/material/Toolbar";
diff --git a/src/views/jobs/Jobs.jsx b/src/views/jobs/Jobs.jsx
index 3be29b0..0d744b7 100644
--- a/src/views/jobs/Jobs.jsx
+++ b/src/views/jobs/Jobs.jsx
@@ -1,7 +1,7 @@
import React, { useState, useContext, useEffect } from "react";
import { useLocation, useNavigate } from "react-router-dom";
-import JobContext from "../../ctx/JobContext.jsx";
+import JobContext from "@qltr/jobs";
import JobBox from "./JobBox.jsx";
import JobPipelineBox from "./JobPipelineBox.jsx";
import JobView from "./JobView.jsx";
diff --git a/src/views/jobs/builder/JobBuilder.jsx b/src/views/jobs/builder/JobBuilder.jsx
index e4147ec..b281d2d 100644
--- a/src/views/jobs/builder/JobBuilder.jsx
+++ b/src/views/jobs/builder/JobBuilder.jsx
@@ -1,7 +1,7 @@
import React, { useContext, useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";
-import StoreContext from "../../../ctx/StoreContext.jsx";
-import JobContext from "../../../ctx/JobContext.jsx";
+import StoreContext from "@qltr/store";
+import JobContext from "@qltr/jobs";
import Dialog from "@mui/material/Dialog";
import Toolbar from "@mui/material/Toolbar";
diff --git a/src/views/jobs/builder/PipelineSelector.jsx b/src/views/jobs/builder/PipelineSelector.jsx
index 1d5e489..f2f111f 100644
--- a/src/views/jobs/builder/PipelineSelector.jsx
+++ b/src/views/jobs/builder/PipelineSelector.jsx
@@ -1,5 +1,5 @@
-import React, { useContext } from "react";
-import { usePipelineMappings } from "../../../Queries.jsx";
+import React from "react";
+import { usePipelineMappings } from "@qltr/queries";
import Button from "@mui/material/Button";
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
diff --git a/src/views/jobs/builder/PipelineTrackSelector.jsx b/src/views/jobs/builder/PipelineTrackSelector.jsx
index 11c84c4..5addfe1 100644
--- a/src/views/jobs/builder/PipelineTrackSelector.jsx
+++ b/src/views/jobs/builder/PipelineTrackSelector.jsx
@@ -13,7 +13,7 @@ import {
asTree,
asBranches,
as1d,
-} from "../../../../lib/jobs/pipelines.js";
+} from "@qltr/util/pipelines.js";
function PipelineTrackSelector(props) {
const { cache, setCache, back, next } = props;
diff --git a/vite.config.js b/vite.config.js
index 2a03780..17e8015 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -1,5 +1,6 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
+import path from "node:path";
export default () => {
return defineConfig({
@@ -10,16 +11,25 @@ export default () => {
port: 443,
},
proxy: {
- '/api': 'http://localhost:52000',
- '/socket.io': {
- target: 'ws://localhost:52000',
- ws: true
- }
- }
+ "/api": "http://localhost:52000",
+ "/socket.io": {
+ target: "ws://localhost:52000",
+ ws: true,
+ },
+ },
},
build: {
outDir: "./build",
},
base: "/qualiteer/",
+ resolve: {
+ alias: {
+ "@qltr/util": path.resolve("./src/util/"),
+ "@qltr/queries": path.resolve("./src/util/queries"),
+ "@qltr/jobs": path.resolve("./src/ctx/JobContext.jsx"),
+ "@qltr/store": path.resolve("./src/ctx/StoreContext.jsx"),
+ "@qltr/initiator": path.resolve("./lib/sockets/clients/Initiator.js"),
+ },
+ },
});
};