Skip to content

Commit 320529e

Browse files
authored
Fix tasks after backend updates (#4852)
* fix tasks and add all tasks link * update tasks columns * update variants * add access test * update test
1 parent 366ff71 commit 320529e

File tree

6 files changed

+75
-36
lines changed

6 files changed

+75
-36
lines changed

frontend/app/src/graphql/queries/tasks/getTasksItemDetails.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ query GetTaskDetails {
66
count
77
edges {
88
node {
9-
conclusion
109
created_at
1110
id
1211
related_node
1312
related_node_kind
1413
title
1514
updated_at
15+
state
16+
progress
1617
logs {
1718
edges {
1819
node {

frontend/app/src/graphql/queries/tasks/getTasksItems.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@ import Handlebars from "handlebars";
22

33
export const getTasksItems = Handlebars.compile(`
44
query GetTasks($offset: Int, $limit: Int) {
5-
{{kind}}(offset: $offset, limit: $limit, {{#if relatedNode}}related_node__ids: ["{{relatedNode}}"]{{/if}}) {
5+
{{kind}}(offset: $offset, limit: $limit {{#if relatedNode}}, related_node__ids: ["{{relatedNode}}"]{{/if}}) {
66
count
77
edges {
88
node {
9-
conclusion
109
created_at
1110
id
1211
related_node
1312
related_node_kind
1413
title
1514
updated_at
15+
state
16+
progress
1617
}
1718
}
1819
}

frontend/app/src/pages/tasks/task-details.tsx

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Link } from "@/components/ui/link";
12
import { TASK_OBJECT } from "@/config/constants";
23
import { getTaskItemDetailsTitle } from "@/graphql/queries/tasks/getTasksItemDetailsTitle";
34
import useQuery from "@/hooks/useQuery";
@@ -6,12 +7,13 @@ import ErrorScreen from "@/screens/errors/error-screen";
67
import Content from "@/screens/layout/content";
78
import LoadingScreen from "@/screens/loading-screen/loading-screen";
89
import { TaskItemDetails } from "@/screens/tasks/task-item-details";
10+
import { constructPath } from "@/utils/fetch";
911
import { gql } from "@apollo/client";
12+
import { Icon } from "@iconify-icon/react";
1013
import { useParams } from "react-router-dom";
1114

1215
const TaskDetailsPage = () => {
1316
useTitle("Task Details");
14-
1517
const { task: taskId } = useParams();
1618

1719
const query = gql(
@@ -32,17 +34,25 @@ const TaskDetailsPage = () => {
3234

3335
const taskData = data?.[TASK_OBJECT]?.edges?.[0]?.node;
3436

37+
const title = (
38+
<div className="flex items-center gap-2">
39+
<div className="flex bg-custom-white text-sm font-normal">
40+
<Link to={constructPath("/tasks")} className="flex items-center p-2 ">
41+
<Icon icon={"mdi:chevron-left"} />
42+
All tasks
43+
</Link>
44+
</div>
45+
{taskData.title}
46+
</div>
47+
);
48+
3549
if (!taskData) {
3650
return <ErrorScreen message={`Task with ID ${taskId} not found.`} />;
3751
}
3852

3953
return (
4054
<Content.Card>
41-
<Content.CardTitle
42-
title={taskData.title}
43-
isReloadLoading={loading}
44-
reload={() => refetch()}
45-
/>
55+
<Content.CardTitle title={title} isReloadLoading={loading} reload={() => refetch()} />
4656

4757
<TaskItemDetails />
4858
</Content.Card>

frontend/app/src/screens/tasks/task-item-details.tsx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ import { TASK_OBJECT } from "@/config/constants";
22
import useQuery from "@/hooks/useQuery";
33
import { gql } from "@apollo/client";
44

5-
import { BADGE_TYPES, Badge } from "@/components/display/badge";
65
import { DateDisplay } from "@/components/display/date-display";
7-
import { DurationDisplay } from "@/components/display/duration-display";
86
import { List } from "@/components/table/list";
7+
import { Badge } from "@/components/ui/badge";
98
import { Id } from "@/components/ui/id";
109
import { SearchInput } from "@/components/ui/search-input";
1110
import { QSP } from "@/config/qsp";
@@ -17,10 +16,16 @@ import { useParams } from "react-router-dom";
1716
import { StringParam, useQueryParam } from "use-query-params";
1817
import { Logs, tLog } from "./logs";
1918

20-
export const getConclusionBadge: { [key: string]: any } = {
21-
success: <Badge type={BADGE_TYPES.VALIDATE}>success</Badge>,
22-
unknown: <Badge type={BADGE_TYPES.LIGHT}>unknown</Badge>,
23-
failure: <Badge type={BADGE_TYPES.CANCEL}>failure</Badge>,
19+
export const getStateBadge: { [key: string]: any } = {
20+
SCHEDULED: <Badge variant={"blue"}>SCHEDULED</Badge>,
21+
PENDING: <Badge variant={"blue-outline"}>PENDING</Badge>,
22+
RUNNING: <Badge variant={"green-outline"}>RUNNING</Badge>,
23+
COMPLETED: <Badge variant={"green"}>COMPLETED</Badge>,
24+
FAILED: <Badge variant={"red"}>FAILED</Badge>,
25+
CANCELLED: <Badge variant={"red-outline"}>CANCELLED</Badge>,
26+
CRASHED: <Badge variant={"yellow"}>CRASHED</Badge>,
27+
PAUSED: <Badge variant={"blue-outline"}>PAUSED</Badge>,
28+
CANCELLING: <Badge variant={"gray"}>CANCELLING</Badge>,
2429
};
2530

2631
export const TaskItemDetails = forwardRef((props, ref) => {
@@ -65,16 +70,16 @@ export const TaskItemDetails = forwardRef((props, ref) => {
6570
label: "Title",
6671
},
6772
{
68-
name: "conclusion",
69-
label: "Conclusion",
73+
name: "state",
74+
label: "State",
7075
},
7176
{
7277
name: "related_node",
7378
label: "Related node",
7479
},
7580
{
76-
name: "duration",
77-
label: "Duration",
81+
name: "progress",
82+
label: "Progress",
7883
},
7984
{
8085
name: "updated_at",
@@ -88,10 +93,11 @@ export const TaskItemDetails = forwardRef((props, ref) => {
8893
values: {
8994
id: object.id,
9095
title: object.title,
91-
conclusion: getConclusionBadge[object.conclusion],
92-
related_node: <Id id={object.related_node} kind={object.related_node_kind} preventCopy />,
93-
related_node_kind: object.related_node_kind,
94-
duration: <DurationDisplay date={object.created_at} endDate={object.updated_at} />,
96+
state: getStateBadge[object.state],
97+
related_node: object.related_node_kind && (
98+
<Id id={object.related_node} kind={object.related_node_kind} preventCopy />
99+
),
100+
progress: object.progress,
95101
updated_at: <DateDisplay date={object.updated_at} />,
96102
},
97103
};

frontend/app/src/screens/tasks/task-items.tsx

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import useQuery from "@/hooks/useQuery";
55
import { gql } from "@apollo/client";
66

77
import { DateDisplay } from "@/components/display/date-display";
8-
import { DurationDisplay } from "@/components/display/duration-display";
98
import { Id } from "@/components/ui/id";
109
import { QSP } from "@/config/qsp";
1110
import { getTasksItems } from "@/graphql/queries/tasks/getTasksItems";
@@ -14,7 +13,7 @@ import LoadingScreen from "@/screens/loading-screen/loading-screen";
1413
import { constructPath } from "@/utils/fetch";
1514
import { forwardRef, useImperativeHandle } from "react";
1615
import { useLocation, useParams } from "react-router-dom";
17-
import { getConclusionBadge } from "./task-item-details";
16+
import { getStateBadge } from "./task-item-details";
1817

1918
interface TaskItemsProps {
2019
hideRelatedNode?: boolean;
@@ -58,16 +57,16 @@ export const TaskItems = forwardRef(({ hideRelatedNode }: TaskItemsProps, ref) =
5857
label: "Title",
5958
},
6059
{
61-
name: "conclusion",
62-
label: "Conclusion",
60+
name: "state",
61+
label: "State",
6362
},
6463
!hideRelatedNode && {
6564
name: "related_node",
6665
label: "Related node",
6766
},
6867
{
69-
name: "duration",
70-
label: "Duration",
68+
name: "progress",
69+
label: "Progress",
7170
},
7271
{
7372
name: "updated_at",
@@ -91,13 +90,23 @@ export const TaskItems = forwardRef(({ hideRelatedNode }: TaskItemsProps, ref) =
9190
const rows = edges.map((edge: any) => ({
9291
link: getUrl(edge.node.id),
9392
values: {
94-
title: edge.node.title,
95-
conclusion: getConclusionBadge[edge.node.conclusion],
96-
related_node: (
97-
<Id id={edge.node.related_node} kind={edge.node.related_node_kind} preventCopy />
98-
),
99-
duration: <DurationDisplay date={edge.node.created_at} endDate={edge.node.updated_at} />,
100-
updated_at: <DateDisplay date={edge.node.updated_at} />,
93+
title: {
94+
display: edge.node.title,
95+
},
96+
state: {
97+
display: getStateBadge[edge.node.state],
98+
},
99+
related_node: {
100+
display: edge.node.related_node_kind && (
101+
<Id id={edge.node.related_node} kind={edge.node.related_node_kind} preventCopy />
102+
),
103+
},
104+
duration: {
105+
display: edge.node.progress,
106+
},
107+
updated_at: {
108+
display: <DateDisplay date={edge.node.updated_at} />,
109+
},
101110
},
102111
}));
103112

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { expect, test } from "@playwright/test";
2+
3+
test.describe("Tasks - READ", () => {
4+
test("should correctly access to the tasks list and details", async ({ page }) => {
5+
await page.goto("/tasks");
6+
await expect(page.getByRole("heading", { name: "Task Overview" })).toBeVisible();
7+
await page.getByRole("row", { name: "SCHEDULED" }).getByRole("link").nth(1).click();
8+
await expect(page.getByRole("link", { name: "All tasks" })).toBeVisible();
9+
await expect(page.getByText("StateSCHEDULED")).toBeVisible();
10+
await expect(page.getByRole("heading", { name: "Task Logs (0)" })).toBeVisible();
11+
});
12+
});

0 commit comments

Comments
 (0)