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"), + }, + }, }); };