Skip to content

Commit 6e9495b

Browse files
authored
feat(staking): [LW-8751] show pool rewards in activity (#624)
--------- Signed-off-by: Rafael Korbaš <rafael.korbas@gmail.com>
1 parent 4929bec commit 6e9495b

File tree

68 files changed

+1563
-1133
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1563
-1133
lines changed

apps/browser-extension-wallet/src/api/transformers.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {
44
CoinOverview,
55
CardanoStakePool,
66
CardanoTxOut,
7-
TransactionDetail,
8-
CurrencyInfo
7+
CurrencyInfo,
8+
TransactionActivityDetail
99
} from '../types';
1010
import { Wallet } from '@lace/cardano';
1111
import { addEllipsis, getNumberWithUnit } from '@lace/common';
@@ -111,7 +111,7 @@ const isStakePool = (props: CardanoStakePool | Wallet.Cardano.SlotLeader): props
111111
/**
112112
* format block information
113113
*/
114-
export const blockTransformer = (block: Wallet.BlockInfo): TransactionDetail['blocks'] => ({
114+
export const blockTransformer = (block: Wallet.BlockInfo): TransactionActivityDetail['blocks'] => ({
115115
blockId: block.header.hash.toString(),
116116
epoch: block.epoch.toString(),
117117
block: block.header.blockNo.toString(),

apps/browser-extension-wallet/src/features/activity/components/Activity.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { StateStatus, useWalletStore } from '@src/stores';
55
import { useFetchCoinPrice, useRedirection } from '@hooks';
66
import { Drawer, DrawerNavigation } from '@lace/common';
77
import { GroupedAssetActivityList } from '@lace/core';
8-
import { TransactionDetail } from '@src/views/browser-view/features/activity';
8+
import { ActivityDetail } from '@src/views/browser-view/features/activity';
99
import styles from './Activity.module.scss';
1010
import { FundWalletBanner } from '@src/views/browser-view/components';
1111
import { walletRoutePaths } from '@routes';
@@ -21,7 +21,7 @@ import { useWalletActivities } from '@hooks/useWalletActivities';
2121
export const Activity = (): React.ReactElement => {
2222
const { t } = useTranslation();
2323
const { priceResult } = useFetchCoinPrice();
24-
const { walletInfo, transactionDetail, resetTransactionState } = useWalletStore();
24+
const { walletInfo, activityDetail, resetActivityState } = useWalletStore();
2525
const layoutTitle = `${t('browserView.activity.title')}`;
2626
const redirectToAssets = useRedirection(walletRoutePaths.assets);
2727
const analytics = useAnalyticsContext();
@@ -43,21 +43,21 @@ export const Activity = (): React.ReactElement => {
4343
return (
4444
<ContentLayout title={layoutTitle} titleSideText={layoutSideText} isLoading={isLoading}>
4545
<Drawer
46-
visible={!!transactionDetail}
47-
onClose={resetTransactionState}
46+
visible={!!activityDetail}
47+
onClose={resetActivityState}
4848
navigation={
4949
<DrawerNavigation
50-
onArrowIconClick={resetTransactionState}
50+
onArrowIconClick={resetActivityState}
5151
onCloseIconClick={() => {
5252
analytics.sendEventToPostHog(PostHogAction.ActivityActivityDetailXClick);
53-
resetTransactionState();
53+
resetActivityState();
5454
redirectToAssets();
5555
}}
5656
/>
5757
}
5858
popupView
5959
>
60-
{transactionDetail && priceResult && <TransactionDetail price={priceResult} />}
60+
{activityDetail && priceResult && <ActivityDetail price={priceResult} />}
6161
</Drawer>
6262
<div className={styles.activitiesContainer}>
6363
{hasActivities ? (

apps/browser-extension-wallet/src/lib/translations/en.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
}
2828
}
2929
},
30-
"transactionDetailBrowser": {
30+
"activityDetails": {
3131
"address": "Address",
3232
"sent": "Sent",
3333
"sending": "Sending",
@@ -55,7 +55,8 @@
5555
"from": "From",
5656
"to": "To",
5757
"multipleAddresses": "Multiple addresses",
58-
"pools": "Pool(s)"
58+
"pools": "Pool(s)",
59+
"epoch": "Epoch"
5960
},
6061
"walletNameAndPasswordSetupStep": {
6162
"title": "Let's set up your new wallet",

apps/browser-extension-wallet/src/stores/createWalletStore.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
stakePoolSearchSlice,
99
walletInfoSlice,
1010
lockSlice,
11-
transactionDetailSlice,
11+
activityDetailSlice,
1212
uiSlice,
1313
blockchainProviderSlice
1414
} from './slices';
@@ -34,7 +34,7 @@ export const createWalletStore = (
3434
...networkSlice({ set, get }),
3535
...stakePoolSearchSlice({ set, get }),
3636
...lockSlice({ set, get }),
37-
...transactionDetailSlice({ set, get }),
37+
...activityDetailSlice({ set, get }),
3838
...assetDetailsSlice({ set, get })
3939
}));
4040
};
Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,57 @@
11
/* eslint-disable @typescript-eslint/no-unused-vars */
22
import { renderHook, act } from '@testing-library/react-hooks';
3-
import { BlockchainProviderSlice, TransactionDetailSlice, WalletInfoSlice } from '../../types';
3+
import { BlockchainProviderSlice, ActivityDetailSlice, WalletInfoSlice } from '../../types';
44
import { transactionMock } from '../../../utils/mocks/test-helpers';
5-
import { transactionDetailSlice } from '../transaction-detail-slice';
5+
import { activityDetailSlice } from '../activity-detail-slice';
66
import '@testing-library/jest-dom';
77
import create, { GetState, SetState } from 'zustand';
88
import { mockBlockchainProviders } from '@src/utils/mocks/blockchain-providers';
9+
import { ActivityStatus } from '@lace/core';
910

10-
const mockTransactionDetailSlice = (
11-
set: SetState<TransactionDetailSlice>,
12-
get: GetState<BlockchainProviderSlice & TransactionDetailSlice & WalletInfoSlice>
13-
): TransactionDetailSlice => {
11+
const mockActivityDetailSlice = (
12+
set: SetState<ActivityDetailSlice>,
13+
get: GetState<BlockchainProviderSlice & ActivityDetailSlice & WalletInfoSlice>
14+
): ActivityDetailSlice => {
1415
get = () =>
1516
({ blockchainProvider: mockBlockchainProviders() } as BlockchainProviderSlice &
16-
TransactionDetailSlice &
17+
ActivityDetailSlice &
1718
WalletInfoSlice);
18-
return transactionDetailSlice({ set, get });
19+
return activityDetailSlice({ set, get });
1920
};
2021

2122
describe('Testing createStoreHook slice', () => {
2223
test('should create store hook with transaction slices slice', () => {
23-
const useTransactionsStore = create(mockTransactionDetailSlice);
24+
const useTransactionsStore = create(mockActivityDetailSlice);
2425
const { result } = renderHook(() => useTransactionsStore());
2526
expect(result).toBeDefined();
2627
});
2728

2829
test('should return transaction state and state handlers', () => {
29-
const useTransactionsStore = create(mockTransactionDetailSlice);
30+
const useTransactionsStore = create(mockActivityDetailSlice);
3031
const { result } = renderHook(() => useTransactionsStore());
3132
expect(result.current).toBeDefined();
3233

33-
expect(result.current.transactionDetail).not.toBeDefined();
34-
expect(result.current.fetchingTransactionInfo).toBeDefined();
35-
expect(result.current.getTransactionDetails).toBeDefined();
36-
expect(result.current.resetTransactionState).toBeDefined();
37-
expect(result.current.setTransactionDetail).toBeDefined();
34+
expect(result.current.activityDetail).not.toBeDefined();
35+
expect(result.current.fetchingActivityInfo).toBeDefined();
36+
expect(result.current.getActivityDetail).toBeDefined();
37+
expect(result.current.resetActivityState).toBeDefined();
38+
expect(result.current.setTransactionActivityDetail).toBeDefined();
39+
expect(result.current.setRewardsActivityDetail).toBeDefined();
3840
});
3941

4042
test('should set transaction detail', () => {
41-
const useTransactionsStore = create(mockTransactionDetailSlice);
43+
const useTransactionsStore = create(mockActivityDetailSlice);
4244
const { result, waitForValueToChange } = renderHook(() => useTransactionsStore());
4345

4446
act(() => {
45-
result.current.setTransactionDetail(transactionMock.tx, transactionMock.direction);
47+
result.current.setTransactionActivityDetail({
48+
type: 'incoming',
49+
status: ActivityStatus.SUCCESS,
50+
activity: transactionMock.tx,
51+
direction: transactionMock.direction
52+
});
4653
});
47-
waitForValueToChange(() => result.current.transactionDetail);
48-
expect(result.current.transactionDetail).toBeDefined();
54+
waitForValueToChange(() => result.current.activityDetail);
55+
expect(result.current.activityDetail).toBeDefined();
4956
});
5057
});

apps/browser-extension-wallet/src/stores/slices/__tests__/wallet-activities-slice.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
StateStatus,
66
AssetDetailsSlice,
77
BlockchainProviderSlice,
8-
TransactionDetailSlice,
8+
ActivityDetailSlice,
99
UISlice,
1010
WalletInfoSlice
1111
} from '@stores/types';
@@ -21,7 +21,7 @@ const mockActivitiesSlice = (
2121
get: GetState<
2222
WalletInfoSlice &
2323
WalletActivitiesSlice &
24-
TransactionDetailSlice &
24+
ActivityDetailSlice &
2525
AssetDetailsSlice &
2626
UISlice &
2727
BlockchainProviderSlice
@@ -35,7 +35,7 @@ const mockActivitiesSlice = (
3535
walletInfo: mockWalletInfoTestnet
3636
} as WalletInfoSlice &
3737
WalletActivitiesSlice &
38-
TransactionDetailSlice &
38+
ActivityDetailSlice &
3939
AssetDetailsSlice &
4040
UISlice &
4141
BlockchainProviderSlice);

0 commit comments

Comments
 (0)