Skip to content

Commit 5be1cc1

Browse files
populate diff rows asynchronously
1 parent fd99619 commit 5be1cc1

File tree

1 file changed

+41
-6
lines changed

1 file changed

+41
-6
lines changed

web/renderer/contexts/dataTable/index.tsx

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,20 +65,26 @@ function ProviderForTableName(props: TableProps) {
6565
});
6666

6767
const rowRes = useRowsForDataTableQuery({
68+
variables: { ...props.params },
69+
});
70+
71+
const rowWithDiffRes = useRowsForDataTableQuery({
6872
variables: { ...props.params, withDiff: true },
6973
});
7074

71-
const [rows, setRows] = useState(rowRes.data?.rows.list);
75+
const [rows, setRows] = useState(
76+
rowWithDiffRes.data?.rows.list ?? rowRes.data?.rows.list,
77+
);
7278
const [pendingRow, setPendingRow] = useState<
7379
RowForDataTableFragment | undefined
7480
>(undefined);
7581
const [offset, setOffset] = useState(rowRes.data?.rows.nextOffset);
7682
const [lastOffset, setLastOffset] = useState<Maybe<number>>(undefined);
7783

7884
useEffect(() => {
79-
setRows(rowRes.data?.rows.list);
85+
setRows(rowWithDiffRes.data?.rows.list ?? rowRes.data?.rows.list);
8086
setOffset(rowRes.data?.rows.nextOffset);
81-
}, [rowRes.data]);
87+
}, [rowRes.data, rowWithDiffRes.data]);
8288

8389
const loadMore = useCallback(async () => {
8490
if (offset === undefined) {
@@ -93,14 +99,43 @@ function ProviderForTableName(props: TableProps) {
9399
variables: {
94100
...props.params,
95101
offset,
96-
withDiff: true,
97102
},
98103
});
104+
105+
const prevRowsLength = rows?.length ?? 0;
99106
const newRows = res.data.rows.list;
100107
const newOffset = res.data.rows.nextOffset;
101-
setRows((rows ?? []).concat(newRows));
108+
109+
setRows(prevRows => (prevRows ?? []).concat(newRows));
102110
setOffset(newOffset);
103-
}, [offset, props.params, rowRes.client, rows]);
111+
112+
const diffRes = rowWithDiffRes.client.query<
113+
RowsForDataTableQuery,
114+
RowsForDataTableQueryVariables
115+
>({
116+
query: RowsForDataTableQueryDocument,
117+
variables: {
118+
...props.params,
119+
offset,
120+
withDiff: true,
121+
},
122+
});
123+
124+
diffRes
125+
.then(diffResult => {
126+
setRows(currentRows => {
127+
if (currentRows) {
128+
return [
129+
...currentRows.slice(0, prevRowsLength),
130+
...diffResult.data.rows.list,
131+
];
132+
} else {
133+
return diffResult.data.rows.list;
134+
}
135+
});
136+
})
137+
.catch(console.error);
138+
}, [offset, props.params, rowRes.client, rowWithDiffRes.client, rows]);
104139

105140
const onAddEmptyRow = () => {
106141
const emptyRow = generateEmptyRow(tableRes.data?.table.columns ?? []);

0 commit comments

Comments
 (0)