Skip to content

Commit f8dd348

Browse files
committed
feat: add TaskDatasetsTable component and integrate into task route
1 parent 8ae5304 commit f8dd348

File tree

3 files changed

+79
-1
lines changed

3 files changed

+79
-1
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config';
2+
import { execute } from '@/graphql/pocoBulk/execute';
3+
import { useQuery } from '@tanstack/react-query';
4+
import { DataTable } from '@/components/DataTable';
5+
import { ErrorAlert } from '@/modules/ErrorAlert';
6+
import { columns } from '@/modules/datasets/datasetsTable/columns';
7+
import useUserStore from '@/stores/useUser.store';
8+
import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey';
9+
import { taskDatasetsQuery } from './taskDatasetsPocoBulkQuery';
10+
11+
function useTaskDatasetsData({ taskId }: { taskId: string }) {
12+
const { chainId } = useUserStore();
13+
14+
const queryKey = [chainId, 'task', 'datasets', taskId];
15+
const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery(
16+
{
17+
queryKey,
18+
queryFn: () =>
19+
execute(taskDatasetsQuery, chainId, {
20+
length: DETAIL_TABLE_LENGTH,
21+
taskId,
22+
}),
23+
refetchInterval: TABLE_REFETCH_INTERVAL,
24+
placeholderData: createPlaceholderDataFnForQueryKey(queryKey),
25+
}
26+
);
27+
28+
const formattedDataset =
29+
data?.task?.bulkSlice?.datasets.map((dataset) => ({
30+
...dataset,
31+
destination: `/dataset/${dataset.address}`,
32+
})) ?? [];
33+
34+
return {
35+
data: formattedDataset,
36+
isLoading,
37+
isRefetching,
38+
isError,
39+
hasPastError: isError || errorUpdateCount > 0,
40+
};
41+
}
42+
43+
export function TaskDatasetsTable({ taskId }: { taskId: string }) {
44+
const { data: datasets, hasPastError } = useTaskDatasetsData({ taskId });
45+
46+
return hasPastError && !datasets.length ? (
47+
<ErrorAlert message="An error occurred during task datasets loading." />
48+
) : (
49+
<DataTable columns={columns} data={datasets} />
50+
);
51+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { graphql } from '@/graphql/pocoBulk/gql';
2+
3+
export const taskDatasetsQuery = graphql(`
4+
query Task($taskId: ID!) {
5+
task(id: $taskId) {
6+
bulkSlice {
7+
datasets(first: 10, orderBy: timestamp, orderDirection: desc, skip: 0) {
8+
address: id
9+
owner {
10+
address: id
11+
}
12+
timestamp
13+
name
14+
transfers(orderBy: timestamp, orderDirection: desc) {
15+
transaction {
16+
txHash: id
17+
timestamp
18+
blockNumber
19+
}
20+
}
21+
}
22+
}
23+
}
24+
}
25+
`);

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { ErrorAlert } from '@/modules/ErrorAlert';
1111
import { Tabs } from '@/modules/Tabs';
1212
import { SearcherBar } from '@/modules/search/SearcherBar';
1313
import { TaskBreadcrumbs } from '@/modules/tasks/task/TaskBreadcrumbs';
14+
import { TaskDatasetsTable } from '@/modules/tasks/task/TaskDatasetsTable';
1415
import { TaskRawData } from '@/modules/tasks/task/TaskRawData';
1516
import { buildTaskDetails } from '@/modules/tasks/task/buildTaskDetails';
1617
import { taskQuery } from '@/modules/tasks/task/taskQuery';
@@ -67,7 +68,7 @@ function TasksRoute() {
6768
isValid,
6869
error,
6970
} = useTaskData((taskId as string).toLowerCase(), chainId!);
70-
const tabLabels = ['DETAILS', 'RAW DATA'];
71+
const tabLabels = ['DETAILS', 'RAW DATA', 'DATASETS'];
7172
const [currentTab, setCurrentTab] = useTabParam('dealTab', tabLabels, 0);
7273

7374
const taskDetails = task ? buildTaskDetails({ task }) : undefined;
@@ -122,6 +123,7 @@ function TasksRoute() {
122123
taskId={taskId}
123124
/>
124125
)}
126+
{currentTab === 2 && <TaskDatasetsTable taskId={taskId} />}
125127
</div>
126128
</div>
127129
);

0 commit comments

Comments
 (0)