diff --git a/src/App.jsx b/src/App.jsx
index 8a15e89b..86429ec4 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -4,14 +4,17 @@ import Header from "./components/Header";
import { AuthProvider } from "./contexts/auth.context";
import { ProjectProvider } from "./contexts/project.context";
import Router from "./Router";
+import { BuildProvider } from "./contexts/build.context";
function App() {
return (
diff --git a/src/components/BuildList.tsx b/src/components/BuildList.tsx
index 6328a41b..0586a0b5 100644
--- a/src/components/BuildList.tsx
+++ b/src/components/BuildList.tsx
@@ -9,17 +9,18 @@ import {
Theme,
createStyles,
Chip,
+ Typography,
+ Grid,
} from "@material-ui/core";
import { Delete } from "@material-ui/icons";
-import { Build } from "../types";
-import { buildsService } from "../services";
import { useHistory } from "react-router-dom";
-
-interface IBuildList {
- builds: Build[];
- setBuilds: React.Dispatch>;
- selectedBuildId: string | undefined;
-}
+import {
+ useBuildState,
+ useBuildDispatch,
+ deleteBuild,
+ selectBuild,
+} from "../contexts/build.context";
+import { BuildStatusChip } from "./BuildStatusChip";
const useStyles = makeStyles((theme: Theme) =>
createStyles({
@@ -34,22 +35,21 @@ const useStyles = makeStyles((theme: Theme) =>
})
);
-const BuildList: FunctionComponent = ({
- builds,
- setBuilds,
- selectedBuildId,
-}) => {
+const BuildList: FunctionComponent = () => {
const classes = useStyles();
const history = useHistory();
+ const { buildList, selectedBuildId } = useBuildState();
+ const buildDispatch = useBuildDispatch();
return (
- {builds.map((build) => (
+ {buildList.map((build) => (
{
+ selectBuild(buildDispatch, build.id);
history.push({
search: "buildId=" + build.id,
});
@@ -59,18 +59,39 @@ const BuildList: FunctionComponent = ({
}}
>
+
+ {`#${build.id}`}
+
+
+ }
+ secondary={
+
+
+
+ {build.createdAt}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
/>
-
+
{
- buildsService.remove(build.id).then((isRemoved) => {
- if (isRemoved) {
- setBuilds(builds.filter((item) => item.id !== build.id));
- }
- });
+ deleteBuild(buildDispatch, build.id);
}}
>
diff --git a/src/components/BuildStatusChip.tsx b/src/components/BuildStatusChip.tsx
new file mode 100644
index 00000000..d276d3e4
--- /dev/null
+++ b/src/components/BuildStatusChip.tsx
@@ -0,0 +1,27 @@
+import React from "react";
+import { Chip } from "@material-ui/core";
+import { BuildStatus } from "../types/buildStatus";
+
+export const BuildStatusChip: React.FunctionComponent<{
+ status: BuildStatus;
+}> = ({ status }) => {
+ let color: "inherit" | "primary" | "secondary" | "default" | undefined;
+ let variant: "default" | "outlined" | undefined;
+ switch (status) {
+ case BuildStatus.passed:
+ color = "primary";
+ variant = "outlined";
+ break;
+ case BuildStatus.unresolved:
+ color = "secondary";
+ break;
+ case BuildStatus.failed:
+ color = "secondary";
+ variant = "outlined";
+ break;
+ default:
+ color = undefined;
+ variant = undefined;
+ }
+ return ;
+};
diff --git a/src/components/TestDetailsModal.tsx b/src/components/TestDetailsModal.tsx
index 19c81d9b..fe759a82 100644
--- a/src/components/TestDetailsModal.tsx
+++ b/src/components/TestDetailsModal.tsx
@@ -37,6 +37,7 @@ import { TestRunDetails } from "./TestRunDetails";
import useImage from "use-image";
import { routes } from "../constants";
import { NoImagePlaceholder } from "./NoImageAvailable";
+import { useBuildDispatch, updateBuild } from "../contexts/build.context";
const useStyles = makeStyles((theme) => ({
imageContainer: {
@@ -65,6 +66,7 @@ const TestDetailsModal: React.FunctionComponent<{
}> = ({ testRun, updateTestRun }) => {
const classes = useStyles();
const history = useHistory();
+ const buildDispatch = useBuildDispatch();
const stageWidth = (window.innerWidth / 2) * 0.9;
const stageHeigth = window.innerHeight;
@@ -172,6 +174,7 @@ const TestDetailsModal: React.FunctionComponent<{
onClick={() =>
testRunService.approve(testRun.id).then((testRun) => {
updateTestRun(testRun);
+ updateBuild(buildDispatch, testRun);
})
}
>
@@ -180,9 +183,10 @@ const TestDetailsModal: React.FunctionComponent<{