Skip to content

Commit 244f71a

Browse files
committed
refactor: remove no longer used stake pools browsing pagination
1 parent 19ec30b commit 244f71a

File tree

2 files changed

+48
-62
lines changed

2 files changed

+48
-62
lines changed

packages/staking/src/features/BrowsePools/BrowsePools.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Box } from '@input-output-hk/lace-ui-toolkit';
22
import { Search } from '@lace/common';
33
import { USE_MULTI_DELEGATION_STAKING_GRID_VIEW } from 'featureFlags';
4+
import { useEffect } from 'react';
45
import { useTranslation } from 'react-i18next';
56
import { useDelegationPortfolioStore } from '../store';
67
import * as styles from './BrowsePools.css';
@@ -15,7 +16,7 @@ import { BrowsePoolsView } from './types';
1516
const LACE_APP_ID = 'lace-app';
1617

1718
export const BrowsePools = () => {
18-
const { totalPoolsCount, status, searchQuery, setSearchQuery, setSort, sort, pools, paginatePools } =
19+
const { totalPoolsCount, status, searchQuery, setSearchQuery, setSort, sort, pools, paginatePools, performQuery } =
1920
useQueryStakePools();
2021
const { poolsView, switchPoolsView } = useBrowsePoolsView();
2122

@@ -26,6 +27,10 @@ export const BrowsePools = () => {
2627

2728
const fetching = status === 'fetching';
2829

30+
useEffect(() => {
31+
performQuery();
32+
}, [performQuery]);
33+
2934
return (
3035
<>
3136
<Box className={styles.browsePools} testId="stake-pool-table">
Lines changed: 42 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
/* eslint-disable no-console */
2-
import { PostHogAction } from '@lace/common';
3-
import { StateStatus, useOutsideHandles } from 'features/outside-handles-provider';
1+
import { QueryStakePoolsArgs } from '@cardano-sdk/core';
2+
import { PostHogAction, logger } from '@lace/common';
3+
import { useOutsideHandles } from 'features/outside-handles-provider';
44
import { StakePoolDetails, mapStakePoolToDisplayData, useDelegationPortfolioStore } from 'features/store';
55
import debounce from 'lodash/debounce';
6-
import isEqual from 'lodash/isEqual';
7-
import { useCallback, useMemo, useRef } from 'react';
6+
import { useCallback, useMemo, useState } from 'react';
87
import { ListRange } from 'react-virtuoso';
98
import { SEARCH_DEBOUNCE_IN_MS } from '../constants';
109
import { StakePoolSortOptions } from '../types';
@@ -14,6 +13,7 @@ type QueryStatus = 'idle' | 'fetching' | 'paginating';
1413
type UseQueryStakePoolsResult = {
1514
status: QueryStatus;
1615
paginatePools: (range: ListRange) => Promise<void>;
16+
performQuery: () => void;
1717
pools: (StakePoolDetails | undefined)[];
1818
searchQuery: string;
1919
setSearchQuery: (searchString: string) => void;
@@ -22,57 +22,43 @@ type UseQueryStakePoolsResult = {
2222
totalPoolsCount: number;
2323
};
2424

25+
// Pagination is no longer needed with the client side StakePoolProvider
26+
const pagination = { limit: 100_000_000, startAt: 0 };
27+
2528
export const useQueryStakePools = () => {
26-
const portfolioMutators = useDelegationPortfolioStore((s) => s.mutators);
29+
const portfolioStore = useDelegationPortfolioStore();
30+
const { portfolioMutators, searchQuery, sort } = useMemo(() => {
31+
const { mutators, searchQuery: searchQueryStore, sortField, sortOrder } = portfolioStore;
32+
33+
return {
34+
portfolioMutators: mutators,
35+
searchQuery: searchQueryStore || '',
36+
sort: sortField && sortOrder && { field: sortField, order: sortOrder },
37+
};
38+
}, [portfolioStore]);
39+
2740
const {
28-
walletStoreStakePoolSearchResults: { pageResults, totalResultCount: totalPoolsCount },
29-
walletStoreStakePoolSearchResultsStatus,
30-
walletStoreFetchStakePools: fetchStakePools,
3141
analytics,
42+
walletStoreBlockchainProvider: { stakePoolProvider },
3243
} = useOutsideHandles();
3344

34-
const { searchQuery, sortField, sortOrder } = useDelegationPortfolioStore((store) => ({
35-
searchQuery: store.searchQuery || '',
36-
sortField: store.sortField,
37-
sortOrder: store.sortOrder,
38-
}));
39-
40-
const previousRequest = useRef<{ searchQuery: string; sortField?: string; sortOrder?: string } | null>(null);
41-
const status = useMemo(() => {
42-
const nextRequest = { searchQuery, sortField, sortOrder };
43-
const requestChanged = !isEqual(previousRequest.current, nextRequest);
44-
const statusIdle =
45-
walletStoreStakePoolSearchResultsStatus === StateStatus.LOADED ||
46-
walletStoreStakePoolSearchResultsStatus === StateStatus.IDLE;
47-
48-
return statusIdle ? 'idle' : requestChanged ? 'fetching' : 'paginating';
49-
}, [searchQuery, sortField, sortOrder, walletStoreStakePoolSearchResultsStatus]);
45+
const [pools, setPools] = useState<StakePoolDetails[]>([]);
46+
const [status, setStatus] = useState<'fetching' | 'idle'>('fetching');
47+
const [totalPoolsCount, setTotalPoolsCount] = useState<number>(0);
5048

5149
const debouncedSearch = useMemo(
5250
() =>
53-
debounce(async (params: Parameters<typeof fetchStakePools>[0]) => {
54-
await fetchStakePools(params);
55-
previousRequest.current = {
56-
searchQuery: params.searchString,
57-
sortField: params.sort?.field,
58-
sortOrder: params.sort?.order,
59-
};
51+
debounce((params: QueryStakePoolsArgs) => {
52+
stakePoolProvider
53+
.queryStakePools(params)
54+
.then(({ pageResults, totalResultCount }) => {
55+
setPools(pageResults.map((pool) => mapStakePoolToDisplayData({ stakePool: pool })));
56+
setTotalPoolsCount(totalResultCount);
57+
setStatus('idle');
58+
})
59+
.catch((error) => logger.error(error));
6060
}, SEARCH_DEBOUNCE_IN_MS),
61-
[fetchStakePools]
62-
);
63-
64-
const paginatePools = useCallback(
65-
async ({ startIndex, endIndex }: { startIndex: number; endIndex: number }) => {
66-
if (startIndex === endIndex) return;
67-
68-
debouncedSearch({
69-
limit: endIndex,
70-
searchString: searchQuery ?? '',
71-
skip: startIndex,
72-
...(sortField && sortOrder && { sort: { field: sortField, order: sortOrder } }),
73-
});
74-
},
75-
[debouncedSearch, searchQuery, sortField, sortOrder]
61+
[stakePoolProvider]
7662
);
7763

7864
const setSearchQuery = useCallback(
@@ -89,11 +75,6 @@ export const useQueryStakePools = () => {
8975
[analytics, portfolioMutators, searchQuery]
9076
);
9177

92-
const pools = useMemo(
93-
() => pageResults.map((pool) => (pool ? mapStakePoolToDisplayData({ stakePool: pool }) : undefined)),
94-
[pageResults]
95-
);
96-
9778
const setSort = useCallback(
9879
(data: StakePoolSortOptions) =>
9980
portfolioMutators.executeCommand({
@@ -103,23 +84,23 @@ export const useQueryStakePools = () => {
10384
[portfolioMutators]
10485
);
10586

87+
const performQuery = useCallback(() => {
88+
setStatus('fetching');
89+
debouncedSearch({ filters: { pledgeMet: true, text: searchQuery }, pagination, sort });
90+
}, [debouncedSearch, searchQuery, sort]);
91+
10692
return useMemo<UseQueryStakePoolsResult>(
10793
() => ({
108-
paginatePools,
94+
paginatePools: () => Promise.resolve(),
95+
performQuery,
10996
pools,
11097
searchQuery,
11198
setSearchQuery,
11299
setSort,
113-
...(sortField &&
114-
sortOrder && {
115-
sort: {
116-
field: sortField,
117-
order: sortOrder,
118-
},
119-
}),
100+
sort,
120101
status,
121102
totalPoolsCount,
122103
}),
123-
[paginatePools, pools, searchQuery, setSearchQuery, setSort, sortField, sortOrder, status, totalPoolsCount]
104+
[pools, searchQuery, setSearchQuery, sort, setSort, status, totalPoolsCount, performQuery]
124105
);
125106
};

0 commit comments

Comments
 (0)