2022-08-06 21:21:41 +00:00
|
|
|
import React, { useState, useContext, useEffect } from "react";
|
2022-08-05 13:03:48 +00:00
|
|
|
import { useLocation, useNavigate } from "react-router-dom";
|
2022-07-18 21:43:10 +00:00
|
|
|
|
|
|
|
import JobContext from "../../ctx/JobContext.jsx";
|
|
|
|
import JobBox from "./JobBox.jsx";
|
|
|
|
import JobView from "./JobView.jsx";
|
2022-08-01 14:58:11 +00:00
|
|
|
import JobBuilder from "./builder/JobBuilder.jsx";
|
2022-08-06 21:21:41 +00:00
|
|
|
import Typography from "@mui/material/Typography";
|
|
|
|
import Box from "@mui/material/Box";
|
2022-07-18 21:43:10 +00:00
|
|
|
|
|
|
|
export default function Jobs() {
|
2022-08-05 13:03:48 +00:00
|
|
|
const { state: jobState } = useContext(JobContext);
|
2022-07-18 21:43:10 +00:00
|
|
|
const location = useLocation();
|
2022-08-05 13:03:48 +00:00
|
|
|
const navigate = useNavigate();
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
const jobName = location.hash.slice(1);
|
|
|
|
if (!jobName || jobState.jobs.find((job) => job.name === jobName)) return;
|
|
|
|
navigate("/qualiteer/jobs");
|
|
|
|
});
|
2022-07-18 21:43:10 +00:00
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="jobs">
|
2022-08-06 21:21:41 +00:00
|
|
|
{jobState.jobs.length === 0? (
|
|
|
|
<React.Fragment>
|
|
|
|
<Box
|
|
|
|
display="flex"
|
|
|
|
alignItems="center"
|
|
|
|
justifyContent="center"
|
|
|
|
sx={{flexFlow: "wrap"}}
|
|
|
|
>
|
|
|
|
|
|
|
|
<Typography variant="h4">No jobs found! </Typography> </Box>
|
|
|
|
<Box
|
|
|
|
display="flex"
|
|
|
|
alignItems="center"
|
|
|
|
justifyContent="center"
|
|
|
|
sx={{flexFlow: "wrap"}}
|
|
|
|
> <Typography variant="h5">Click the '+' to start a new one!
|
|
|
|
</Typography>
|
|
|
|
</Box>
|
|
|
|
</React.Fragment>
|
|
|
|
): null}
|
2022-08-01 14:58:11 +00:00
|
|
|
<JobBuilder />
|
2022-07-18 21:43:10 +00:00
|
|
|
{location.hash === "" &&
|
|
|
|
jobState.jobs.map((v, i) => (
|
|
|
|
<a
|
|
|
|
key={i}
|
|
|
|
href={`/qualiteer/jobs#${v.name}`}
|
|
|
|
style={{ textDecoration: "none" }}
|
|
|
|
>
|
|
|
|
<JobBox job={v} />
|
|
|
|
</a>
|
|
|
|
))}
|
|
|
|
{jobState.jobs.find((job) => job.name === location.hash.slice(1)) && (
|
|
|
|
<JobView
|
|
|
|
job={jobState.jobs.find((job) => job.name === location.hash.slice(1))}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|