Skip to content

Commit cb220ed

Browse files
committed
feat: enhance task page with loading and outdated state management like workerpool, app and dataset pages
1 parent ac2fd19 commit cb220ed

File tree

3 files changed

+60
-7
lines changed

3 files changed

+60
-7
lines changed

src/modules/tasks/task/TaskDatasetsTable.tsx

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { SchemaSearchPaginatedQuery } from '@/graphql/dataprotector/graphql';
33
import { DatasetsQuery } from '@/graphql/poco/graphql';
44
import { execute } from '@/graphql/pocoBulk/execute';
55
import { useQuery } from '@tanstack/react-query';
6+
import { useEffect } from 'react';
67
import { DataTable } from '@/components/DataTable';
78
import { ErrorAlert } from '@/modules/ErrorAlert';
89
import { columns } from '@/modules/datasets/datasetsTable/columns';
@@ -85,8 +86,31 @@ function useTaskDatasetsData({ taskId }: { taskId: string }) {
8586
};
8687
}
8788

88-
export function TaskDatasetsTable({ taskId }: { taskId: string }) {
89-
const { data: datasets, hasPastError } = useTaskDatasetsData({ taskId });
89+
export function TaskDatasetsTable({
90+
taskId,
91+
setLoading,
92+
setOutdated,
93+
}: {
94+
taskId: string;
95+
setLoading: (loading: boolean) => void;
96+
setOutdated: (outdated: boolean) => void;
97+
}) {
98+
const {
99+
data: datasets,
100+
hasPastError,
101+
isLoading,
102+
isRefetching,
103+
isError,
104+
} = useTaskDatasetsData({ taskId });
105+
106+
useEffect(
107+
() => setLoading(isLoading || isRefetching),
108+
[isLoading, isRefetching, setLoading]
109+
);
110+
useEffect(
111+
() => setOutdated(datasets.length > 0 && isError),
112+
[datasets.length, isError, setOutdated]
113+
);
90114

91115
return hasPastError && !datasets.length ? (
92116
<ErrorAlert message="An error occurred during task datasets loading." />

src/modules/tasks/task/TaskRawData.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TABLE_REFETCH_INTERVAL } from '@/config';
22
import { useQuery } from '@tanstack/react-query';
3+
import { useEffect } from 'react';
34
import { Button } from '@/components/ui/button';
45
import { getIExec } from '@/externals/iexecSdkClient';
56
import { useLoginLogout } from '@/hooks/useLoginLogout';
@@ -52,15 +53,30 @@ function useTaskRawData({
5253
export function TaskRawData({
5354
taskWorkerpoolId,
5455
taskId,
56+
setLoading,
57+
setOutdated,
5558
}: {
5659
taskWorkerpoolId?: string;
5760
taskId: string;
61+
setLoading: (loading: boolean) => void;
62+
setOutdated: (outdated: boolean) => void;
5863
}) {
5964
const {
6065
data: tasks,
6166
hasPastError,
6267
isLoading,
68+
isRefetching,
69+
isError,
6370
} = useTaskRawData({ taskWorkerpoolId, taskId });
71+
72+
useEffect(
73+
() => setLoading(isLoading || isRefetching),
74+
[isLoading, isRefetching, setLoading]
75+
);
76+
useEffect(
77+
() => setOutdated(Boolean(tasks) && !isLoading && isError),
78+
[tasks, isLoading, isError, setOutdated]
79+
);
6480
const { address: userAddress } = useUserStore();
6581
const { login } = useLoginLogout();
6682

src/routes/$chainSlug/_layout/task/$taskId.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { execute } from '@/graphql/poco/execute';
33
import { useQuery } from '@tanstack/react-query';
44
import { createFileRoute } from '@tanstack/react-router';
55
import { LoaderCircle } from 'lucide-react';
6+
import { useState } from 'react';
67
import TaskIcon from '@/components/icons/TaskIcon';
78
import { BackButton } from '@/components/ui/BackButton';
89
import { useTabParam } from '@/hooks/usePageParam';
@@ -71,6 +72,9 @@ function TasksRoute() {
7172
const tabLabels = ['DETAILS', 'RAW DATA', 'DATASETS'];
7273
const [currentTab, setCurrentTab] = useTabParam('dealTab', tabLabels, 0);
7374

75+
const [isLoadingChild, setIsLoadingChild] = useState(false);
76+
const [isOutdatedChild, setIsOutdatedChild] = useState(false);
77+
7478
const taskDetails = task ? buildTaskDetails({ task }) : undefined;
7579

7680
if (!isValid) {
@@ -81,6 +85,9 @@ function TasksRoute() {
8185
return <ErrorAlert message="Task not found." />;
8286
}
8387

88+
const showOutdated = task && (isError || isOutdatedChild);
89+
const showLoading = isLoading || isRefetching || isLoadingChild;
90+
8491
return (
8592
<div className="mt-8 flex flex-col gap-6">
8693
<div className="mt-6 flex flex-col justify-between lg:flex-row">
@@ -89,14 +96,12 @@ function TasksRoute() {
8996
<h1 className="flex items-center gap-2 font-sans text-2xl font-extrabold">
9097
<TaskIcon size={24} />
9198
Task details
92-
{!task && isError && (
99+
{showOutdated && (
93100
<span className="text-muted-foreground text-sm font-light">
94101
(outdated)
95102
</span>
96103
)}
97-
{(isLoading || isRefetching) && (
98-
<LoaderCircle className="animate-spin" />
99-
)}
104+
{showLoading && <LoaderCircle className="animate-spin" />}
100105
</h1>
101106
<div className="flex items-center gap-2">
102107
<BackButton />
@@ -121,9 +126,17 @@ function TasksRoute() {
121126
<TaskRawData
122127
taskWorkerpoolId={task?.deal.workerpool.address}
123128
taskId={taskId}
129+
setLoading={setIsLoadingChild}
130+
setOutdated={setIsOutdatedChild}
131+
/>
132+
)}
133+
{currentTab === 2 && (
134+
<TaskDatasetsTable
135+
taskId={taskId}
136+
setLoading={setIsLoadingChild}
137+
setOutdated={setIsOutdatedChild}
124138
/>
125139
)}
126-
{currentTab === 2 && <TaskDatasetsTable taskId={taskId} />}
127140
</div>
128141
</div>
129142
);

0 commit comments

Comments
 (0)