Skip to content

Commit 487862b

Browse files
committed
feat: implement pagination for task datasets
1 parent 6bbf1ee commit 487862b

File tree

2 files changed

+76
-17
lines changed

2 files changed

+76
-17
lines changed

src/modules/tasks/task/TaskDatasetsTable.tsx

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import { DatasetsQuery } from '@/graphql/poco/graphql';
55
import { useQuery } from '@tanstack/react-query';
66
import { useEffect } from 'react';
77
import { DataTable } from '@/components/DataTable';
8+
import { PaginatedNavigation } from '@/components/PaginatedNavigation';
9+
import { usePageParam } from '@/hooks/usePageParam';
810
import { ErrorAlert } from '@/modules/ErrorAlert';
911
import { columns } from '@/modules/datasets/datasetsTable/columns';
1012
import { useDatasetsSchemas } from '@/modules/datasets/hooks/useDatasetsSchemas';
1113
import { SchemaFilter } from '@/modules/datasets/schemaFilters';
1214
import useUserStore from '@/stores/useUser.store';
1315
import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey';
16+
import { getAdditionalPages } from '@/utils/format';
1417
import { taskDatasetsQuery } from './taskDatasetsQuery';
1518

1619
function formatDataset({
@@ -32,22 +35,32 @@ function formatDataset({
3235
owner: { address: dataset.owner?.address ?? '' },
3336
timestamp: dataset.timestamp,
3437
transfers:
35-
dataset.transfers ??
36-
('transactionHash' in dataset && dataset.transactionHash
37-
? [
38-
{
39-
transaction: {
40-
txHash: dataset.transactionHash,
38+
'transfers' in dataset && dataset.transfers
39+
? dataset.transfers
40+
: 'transactionHash' in dataset && dataset.transactionHash
41+
? [
42+
{
43+
transaction: {
44+
txHash: dataset.transactionHash,
45+
},
4146
},
42-
},
43-
]
44-
: []),
47+
]
48+
: [],
4549
destination: `/dataset/${dataset.address}`,
4650
};
4751
}
4852

49-
function useTaskDatasetsData({ taskId }: { taskId: string }) {
53+
function useTaskDatasetsData({
54+
taskId,
55+
currentPage,
56+
}: {
57+
taskId: string;
58+
currentPage: number;
59+
}) {
5060
const { chainId } = useUserStore();
61+
const skip = currentPage * DETAIL_TABLE_LENGTH;
62+
const nextSkip = skip + DETAIL_TABLE_LENGTH;
63+
const nextNextSkip = skip + 2 * DETAIL_TABLE_LENGTH;
5164

5265
const queryKey = [chainId, 'task', 'datasets', taskId];
5366
const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery(
@@ -56,6 +69,9 @@ function useTaskDatasetsData({ taskId }: { taskId: string }) {
5669
queryFn: () =>
5770
execute(taskDatasetsQuery, chainId, {
5871
length: DETAIL_TABLE_LENGTH,
72+
skip,
73+
nextSkip,
74+
nextNextSkip,
5975
taskId,
6076
}),
6177
refetchInterval: TABLE_REFETCH_INTERVAL,
@@ -76,12 +92,17 @@ function useTaskDatasetsData({ taskId }: { taskId: string }) {
7692
isSchemasLoading,
7793
})
7894
);
95+
const additionalPages = getAdditionalPages(
96+
Boolean(data?.task?.bulkSlice?.datasetsHasNext?.length),
97+
Boolean(data?.task?.bulkSlice?.datasetsHasNextNext?.length)
98+
);
7999

80100
return {
81101
data: formattedDatasets,
82102
isLoading,
83103
isRefetching,
84104
isError,
105+
additionalPages,
85106
hasPastError: isError || errorUpdateCount > 0,
86107
};
87108
}
@@ -95,13 +116,15 @@ export function TaskDatasetsTable({
95116
setLoading: (loading: boolean) => void;
96117
setOutdated: (outdated: boolean) => void;
97118
}) {
119+
const [currentPage, setCurrentPage] = usePageParam('taskDatasetsPage');
98120
const {
99121
data: datasets,
100122
hasPastError,
101123
isLoading,
102124
isRefetching,
103125
isError,
104-
} = useTaskDatasetsData({ taskId });
126+
additionalPages,
127+
} = useTaskDatasetsData({ taskId, currentPage: currentPage - 1 });
105128

106129
useEffect(
107130
() => setLoading(isLoading || isRefetching),
@@ -112,9 +135,18 @@ export function TaskDatasetsTable({
112135
[datasets.length, isError, setOutdated]
113136
);
114137

115-
return hasPastError && !datasets.length ? (
116-
<ErrorAlert message="An error occurred during task datasets loading." />
117-
) : (
118-
<DataTable columns={columns} data={datasets} />
138+
return (
139+
<div className="space-y-6">
140+
{hasPastError && !datasets.length ? (
141+
<ErrorAlert message="An error occurred during task datasets loading." />
142+
) : (
143+
<DataTable columns={columns} data={datasets} />
144+
)}
145+
<PaginatedNavigation
146+
currentPage={currentPage}
147+
totalPages={currentPage + additionalPages}
148+
onPageChange={setCurrentPage}
149+
/>
150+
</div>
119151
);
120152
}

src/modules/tasks/task/taskDatasetsQuery.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
import { graphql } from '@/graphql/poco/gql';
22

33
export const taskDatasetsQuery = graphql(`
4-
query TaskDatasets($taskId: ID!) {
4+
query TaskDatasets(
5+
$taskId: ID!
6+
$length: Int!
7+
$skip: Int!
8+
$nextSkip: Int!
9+
$nextNextSkip: Int!
10+
) {
511
task(id: $taskId) {
612
bulkSlice {
7-
datasets(first: 10, orderBy: timestamp, orderDirection: desc, skip: 0) {
13+
datasets(
14+
first: $length
15+
orderBy: timestamp
16+
orderDirection: desc
17+
skip: $skip
18+
) {
819
address: id
920
owner {
1021
address: id
@@ -19,6 +30,22 @@ export const taskDatasetsQuery = graphql(`
1930
}
2031
}
2132
}
33+
datasetsHasNext: datasets(
34+
first: 1
35+
orderBy: timestamp
36+
orderDirection: desc
37+
skip: $nextSkip
38+
) {
39+
address: id
40+
}
41+
datasetsHasNextNext: datasets(
42+
first: 1
43+
orderBy: timestamp
44+
orderDirection: desc
45+
skip: $nextNextSkip
46+
) {
47+
address: id
48+
}
2249
}
2350
}
2451
}

0 commit comments

Comments
 (0)