Skip to content

Commit 8744720

Browse files
fix: history intersection loader issue (#1598)
Co-authored-by: Amir Ekbatanifard <[email protected]>
1 parent 9d22ab9 commit 8744720

File tree

4 files changed

+36
-21
lines changed

4 files changed

+36
-21
lines changed

packages/extension-polkagate/src/popup/history/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export default function TransactionHistory (): React.ReactElement {
4444
setTabIndex ={setTabIndex}
4545
tabIndex={tabIndex}
4646
/>
47-
<Grid container item sx={{ gap: '5px', height: '70%', maxHeight: window.innerHeight - 145, overflowY: 'auto', px: '15px' }}>
47+
<Grid container id='scrollArea' item sx={{ gap: '5px', height: '70%', maxHeight: window.innerHeight - 145, overflowY: 'auto', px: '15px' }}>
4848
{grouped && Object.keys(grouped).length > 0 &&
4949
Object.entries(grouped)?.map((group) => {
5050
const [date, info] = group;
@@ -71,6 +71,7 @@ export default function TransactionHistory (): React.ReactElement {
7171
{(grouped === undefined || (transfersTx.isFetching && tabHistory?.length === 0)) &&
7272
<Progress pt='150px' size={50} title={t('Loading history')} type='grid' />
7373
}
74+
<div id='observerObj' style={{ height: '1px' }} />
7475
{grouped &&
7576
<Grid container justifyContent='center'>
7677
{
@@ -85,7 +86,6 @@ export default function TransactionHistory (): React.ReactElement {
8586
)
8687
}
8788
</Grid>}
88-
<div id='observerObj' />
8989
</Grid>
9090
</>
9191
);

packages/extension-polkagate/src/popup/history/modal/HistoryModal.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export default function HistoryModal ({ address, setDisplayPopup }: Props): Reac
5151
setTabIndex ={setTabIndex}
5252
tabIndex={tabIndex}
5353
/>
54-
<Grid container item sx={{ gap: '5px', height: '70%', maxHeight: 650 - 145, overflowY: 'auto' }}>
54+
<Grid container id='scrollArea' item sx={{ gap: '5px', height: '70%', maxHeight: 650 - 145, overflowY: 'auto' }}>
5555
{grouped && Object.keys(grouped).length > 0 &&
5656
Object.entries(grouped)?.map((group) => {
5757
const [date, info] = group;
@@ -93,7 +93,7 @@ export default function HistoryModal ({ address, setDisplayPopup }: Props): Reac
9393
)
9494
}
9595
</Grid>}
96-
<div id='observerObj' />
96+
<div id='observerObj' style={{ height: '1px' }} />
9797
</Grid>
9898
</>
9999
}

packages/extension-polkagate/src/popup/history/useTransactionHistory.tsx

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,30 +180,48 @@ export default function useTransactionHistory (address: string | undefined, tabI
180180
return;
181181
}
182182

183-
const observerCallback = async (): Promise<void> => {
183+
const observerCallback = (entries: IntersectionObserverEntry[]): void => {
184+
const [entry] = entries;
185+
186+
if (!entry.isIntersecting) {
187+
return; // If the observer object is not in view, do nothing
188+
}
189+
184190
if (receivingTransfers.current?.isFetching) {
185-
return;
191+
return; // If already fetching, do nothing
186192
}
187193

188194
if (!receivingTransfers.current?.hasMore) {
189-
return observerInstance?.current?.disconnect();
195+
observerInstance.current?.disconnect();
196+
console.log('No more data to load, disconnecting observer.');
197+
198+
return;
190199
}
191200

192-
await getTransfers(receivingTransfers.current);
201+
getTransfers(receivingTransfers.current) // Fetch more transfers if available
202+
.catch((error) => {
203+
console.error('Error fetching transfers:', error);
204+
});
193205
};
194206

195207
const options = {
196208
root: document.getElementById('scrollArea'),
197209
rootMargin: '0px',
198-
threshold: 1.0
210+
threshold: 1.0 // Trigger when 100% of the target (observerObj) is visible
199211
};
200212

201-
// eslint-disable-next-line @typescript-eslint/no-misused-promises
202213
observerInstance.current = new IntersectionObserver(observerCallback, options);
214+
203215
const target = document.getElementById('observerObj');
204216

205-
target && observerInstance.current.observe(target);
206-
}, [chainName, formatted, getTransfers, tabHistory]);
217+
if (target) {
218+
observerInstance.current.observe(target); // Start observing the target
219+
}
220+
221+
return () => {
222+
observerInstance.current?.disconnect();
223+
};
224+
}, [chainName, formatted, getTransfers]);
207225

208226
return { grouped, tabHistory, transfersTx };
209227
}

packages/extension-polkagate/src/util/api/getTransfers.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
// Copyright 2019-2024 @polkadot/extension-polkagate authors & contributors
22
// SPDX-License-Identifier: Apache-2.0
3-
// @ts-nocheck
43

5-
/* eslint-disable sort-keys */
4+
import type { TransferRequest } from '../types';
65

76
import request from 'umi-request';
87

9-
import { TransferRequest } from '../types';
10-
118
const nullObject = {
129
code: 0,
13-
message: 'Success',
14-
generated_at: Date.now(),
1510
data: {
1611
count: 0,
1712
transfers: null
18-
}
13+
},
14+
generated_at: Date.now(),
15+
message: 'Success'
1916
} as unknown as TransferRequest;
2017

21-
export function getTxTransfers(chainName: string, address: string, pageNum: number, pageSize: number): Promise<TransferRequest> {
18+
export function getTxTransfers (chainName: string, address: string, pageNum: number, pageSize: number): Promise<TransferRequest> {
2219
if (!chainName) {
2320
return Promise.resolve(nullObject);
2421
}
@@ -46,6 +43,6 @@ export function getTxTransfers(chainName: string, address: string, pageNum: numb
4643
});
4744
}
4845

49-
function postReq(api: string, data: Record<string, unknown> = {}, option?: Record<string, unknown>): Promise<TransferRequest> {
46+
function postReq (api: string, data: Record<string, unknown> = {}, option?: Record<string, unknown>): Promise<TransferRequest> {
5047
return request.post(api, { data, ...option });
5148
}

0 commit comments

Comments
 (0)