Skip to content

Commit 1eed7e6

Browse files
committed
feat(mobile): clean-er code
1 parent 897ee48 commit 1eed7e6

File tree

7 files changed

+116
-105
lines changed

7 files changed

+116
-105
lines changed

apps/mobile/src/app/account/[accountId]/activity.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export default function AccountActivityScreen() {
4343
})}
4444
</Screen.Title>
4545
}
46-
data={activity.value as OnChainActivity[]} // TODO: Unclear why was this cast. Needs clearing up.
46+
data={activity.value.filter(activity => activity && 'asset' in activity)}
4747
renderItem={({ item }) => <ActivityListItem activity={item} />}
4848
keyExtractor={(_, index) => `activity.${index}`}
4949
ListEmptyComponent={<ActivityEmpty />}

apps/mobile/src/app/activity/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export default function ActivityScreen() {
2222
<Screen.List
2323
refreshControl={<RefreshControl />}
2424
ListHeaderComponent={<Screen.Title>{pageTitle}</Screen.Title>}
25-
data={activity.value as OnChainActivity[]} // TODO: Unclear why was this cast. Needs clearing up.
25+
data={activity.value.filter(activity => activity && 'asset' in activity)}
2626
renderItem={({ item }) => <ActivityListItem activity={item} />}
2727
keyExtractor={(_, index) => `activity.${index}`}
2828
ListEmptyComponent={<ActivityEmpty />}

apps/mobile/src/features/balances/balances.tsx

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
import { RunesBalance, RunesBalanceByAccount } from '@/features/balances/bitcoin/runes-balance';
88
import { Sip10Balance, Sip10BalanceByAccount } from '@/features/balances/stacks/sip10-balance';
99
import { StacksBalance, StacksBalanceByAccount } from '@/features/balances/stacks/stacks-balance';
10-
import { useRunesFlag } from '@/features/feature-flags';
10+
import { useRunesFlag, useTokenDetailsFlag } from '@/features/feature-flags';
1111
import { TokenSheet, TokenSheetData } from '@/features/token/token-sheet';
1212
import { ViewMode } from '@/shared/types';
1313

@@ -28,6 +28,7 @@ export interface OnOpenTokenProps {
2828
export function AllAccountBalances({ mode }: BalanceViewProps) {
2929
const [sheetData, setSheetData] = useState<TokenSheetData | null>(null);
3030
const runesFlag = useRunesFlag();
31+
const tokenDetailsFlag = useTokenDetailsFlag();
3132

3233
const tokenSheetRef = useRef<SheetRef>(null);
3334

@@ -37,25 +38,14 @@ export function AllAccountBalances({ mode }: BalanceViewProps) {
3738
tokenSheetRef.current?.present();
3839
}
3940

41+
const onPressToken = tokenDetailsFlag ? onOpenToken : undefined;
42+
4043
return (
4144
<>
4245
<Box flex={1} height="100%">
43-
<BitcoinBalance
44-
onPress={({ asset, availableBalance, quoteBalance }: OnOpenTokenProps) =>
45-
onOpenToken({ asset, availableBalance, quoteBalance })
46-
}
47-
/>
48-
<StacksBalance
49-
onPress={({ asset, availableBalance, quoteBalance }: OnOpenTokenProps) =>
50-
onOpenToken({ asset, availableBalance, quoteBalance })
51-
}
52-
/>
53-
<Sip10Balance
54-
mode={mode}
55-
onPress={({ asset, availableBalance, quoteBalance }: OnOpenTokenProps) =>
56-
onOpenToken({ asset, availableBalance, quoteBalance })
57-
}
58-
/>
46+
<BitcoinBalance onPress={onPressToken} />
47+
<StacksBalance onPress={onPressToken} />
48+
<Sip10Balance mode={mode} onPress={onPressToken} />
5949
{runesFlag && <RunesBalance mode={mode} />}
6050
</Box>
6151
<TokenSheet data={sheetData} sheetRef={tokenSheetRef} />
@@ -68,40 +58,35 @@ export function AccountBalances({ mode, fingerprint, accountIndex }: AccountId &
6858
const runesFlag = useRunesFlag();
6959

7060
const tokenSheetRef = useRef<SheetRef>(null);
61+
const tokenDetailsFlag = useTokenDetailsFlag();
7162

7263
function onOpenToken(data: TokenSheetData) {
7364
setSheetData(data);
74-
console.log('onOpenToken', data);
7565
// analytics.track('token_sheet_opened', { source: 'action_bar' });
7666
tokenSheetRef.current?.present();
7767
}
7868

79-
// > FIXME LEA-3015: investigate passing the balance data needed from BitcoinBalanceByAccount etc.
69+
const onPressToken = tokenDetailsFlag ? onOpenToken : undefined;
8070

8171
return (
8272
<>
8373
<Box>
8474
<BitcoinBalanceByAccount
85-
onPress={({ asset, availableBalance, quoteBalance }) =>
86-
onOpenToken({
87-
asset,
88-
accountIndex,
89-
fingerprint,
90-
availableBalance,
91-
quoteBalance,
92-
})
93-
}
75+
onPress={onPressToken}
9476
fingerprint={fingerprint}
9577
accountIndex={accountIndex}
9678
/>
9779
<StacksBalanceByAccount
98-
onPress={({ asset, availableBalance, quoteBalance }) =>
99-
onOpenToken({ asset, accountIndex, fingerprint, availableBalance, quoteBalance })
100-
}
80+
onPress={onPressToken}
81+
fingerprint={fingerprint}
82+
accountIndex={accountIndex}
83+
/>
84+
<Sip10BalanceByAccount
85+
mode={mode}
10186
fingerprint={fingerprint}
10287
accountIndex={accountIndex}
88+
onPress={onPressToken}
10389
/>
104-
<Sip10BalanceByAccount mode={mode} fingerprint={fingerprint} accountIndex={accountIndex} />
10590
{runesFlag && (
10691
<RunesBalanceByAccount
10792
mode={mode}

apps/mobile/src/features/feature-flags/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,7 @@ export function useDappSuggestions() {
7575
export function useSendPasteButton() {
7676
return useBoolVariation('send_paste_button', false);
7777
}
78+
79+
export function useTokenDetailsFlag() {
80+
return useBoolVariation('token_details', true);
81+
}

apps/mobile/src/features/token/components/token-activity.tsx

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@ interface TokenActivityProps {
1919
fingerprint?: string;
2020
}
2121

22-
const filterByTicker = (activity: OnChainActivity, ticker: string) =>
23-
'asset' in activity && 'symbol' in activity.asset && activity.asset.symbol === ticker;
24-
25-
const filterByAccount = (activity: OnChainActivity, accountIndex: number, fingerprint: string) =>
26-
'account' in activity &&
27-
activity.account.accountIndex === accountIndex &&
28-
activity.account.fingerprint === fingerprint;
22+
function filterByTicker(activity: OnChainActivity, ticker: string) {
23+
return 'asset' in activity && 'symbol' in activity.asset && activity.asset.symbol === ticker;
24+
}
25+
function filterByAccount(activity: OnChainActivity, accountIndex: number, fingerprint: string) {
26+
return (
27+
'account' in activity &&
28+
activity.account.accountIndex === accountIndex &&
29+
activity.account.fingerprint === fingerprint
30+
);
31+
}
2932

3033
export function TokenActivity({
3134
ListHeader,
@@ -53,17 +56,15 @@ export function TokenActivity({
5356
<Screen.List
5457
refreshControl={<RefreshControl progressViewOffset={scrollViewAdjustmentOffset} />}
5558
style={{ marginTop: -scrollViewAdjustmentOffset }}
56-
data={
57-
activity.value
58-
.filter((activity): activity is OnChainActivity => activity && 'asset' in activity)
59-
.filter(activity => filterByTicker(activity, ticker))
60-
.filter(activity => {
61-
if (isDefined(accountIndex) && isDefined(fingerprint)) {
62-
return filterByAccount(activity, accountIndex, fingerprint);
63-
}
64-
return true;
65-
}) as OnChainActivity[]
66-
} // TODO: Unclear why was this cast. Needs clearing up.
59+
data={activity.value
60+
.filter(activity => activity && 'asset' in activity)
61+
.filter(activity => filterByTicker(activity, ticker))
62+
.filter(activity => {
63+
if (isDefined(accountIndex) && isDefined(fingerprint)) {
64+
return filterByAccount(activity, accountIndex, fingerprint);
65+
}
66+
return true;
67+
})}
6768
renderItem={({ item }) => <ActivityListItem activity={item} />}
6869
keyExtractor={(_, index) => `activity.${index}`}
6970
ListHeaderComponent={() => ListHeader}

apps/mobile/src/features/token/token-sheet.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { analytics } from '@/utils/analytics';
55

66
import { FungibleCryptoAsset, Money } from '@leather.io/models';
77
import { SheetRef, useHaptics } from '@leather.io/ui/native';
8-
import { createMoney } from '@leather.io/utils';
98

109
import { Token } from './token';
1110

Lines changed: 74 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useRef, useState } from 'react';
22

3+
import { useTokenDetailsFlag } from '@/features/feature-flags';
34
import { TokenIcon } from '@/features/token/components/token-icon';
45
import {
56
useAssetDescriptionQuery,
@@ -17,6 +18,53 @@ import { TokenActivity } from './components/token-activity';
1718
import { TokenDetails } from './components/token-details';
1819
import { TokenSheet, TokenSheetData } from './token-sheet';
1920

21+
function AccountDetails({
22+
accountIndex,
23+
fingerprint,
24+
asset,
25+
availableBalance,
26+
quoteBalance,
27+
}: TokenProps) {
28+
const tokenDetailsFlag = useTokenDetailsFlag();
29+
30+
const tokenSheetRef = useRef<SheetRef>(null);
31+
const [sheetData, setSheetData] = useState<TokenSheetData | null>(null);
32+
33+
function onOpenToken(data: TokenSheetData) {
34+
setSheetData(data);
35+
// analytics.track('token_sheet_opened', { source: 'action_bar' });
36+
tokenSheetRef.current?.present();
37+
}
38+
39+
return (
40+
<>
41+
{accountIndex !== undefined ? (
42+
<AccountAddressList
43+
tokenId={asset.symbol}
44+
accountIndex={accountIndex}
45+
fingerprint={fingerprint ?? ''}
46+
/>
47+
) : (
48+
<AccountList
49+
tokenId={asset.symbol}
50+
selectAccount={({ accountIndex, fingerprint }) =>
51+
tokenDetailsFlag
52+
? onOpenToken({
53+
asset,
54+
accountIndex,
55+
fingerprint,
56+
availableBalance,
57+
quoteBalance,
58+
})
59+
: undefined
60+
}
61+
/>
62+
)}
63+
<TokenSheet data={sheetData} sheetRef={tokenSheetRef} />
64+
</>
65+
);
66+
}
67+
2068
interface TokenProps {
2169
asset: FungibleCryptoAsset;
2270
accountIndex?: number;
@@ -31,63 +79,37 @@ export function Token({
3179
availableBalance,
3280
quoteBalance,
3381
}: TokenProps) {
34-
const [sheetData, setSheetData] = useState<TokenSheetData | null>(null);
35-
3682
const marketData = useMarketDataQuery(asset);
3783
const price = marketData.data?.price;
3884
const { data: assetDescription } = useAssetDescriptionQuery(asset);
3985
const { data: assetPriceChange } = useAssetPriceChangeQuery(asset);
40-
const tokenSheetRef = useRef<SheetRef>(null);
41-
42-
function onOpenToken(data: TokenSheetData) {
43-
setSheetData(data);
44-
// analytics.track('token_sheet_opened', { source: 'action_bar' });
45-
tokenSheetRef.current?.present();
46-
}
4786

4887
return (
49-
<>
50-
<TokenActivity
51-
ticker={asset.symbol}
52-
accountIndex={accountIndex}
53-
fingerprint={fingerprint}
54-
// TokenDetails is Activity ListHeader to avoid nested scrolling errors
55-
ListHeader={
56-
<TokenDetails
57-
accountDetails={
58-
accountIndex !== undefined ? (
59-
<AccountAddressList
60-
tokenId={asset.symbol}
61-
accountIndex={accountIndex}
62-
fingerprint={fingerprint ?? ''}
63-
/>
64-
) : (
65-
<AccountList
66-
tokenId={asset.symbol}
67-
selectAccount={({ accountIndex, fingerprint }) =>
68-
onOpenToken({
69-
asset,
70-
accountIndex,
71-
fingerprint,
72-
availableBalance,
73-
quoteBalance,
74-
})
75-
}
76-
/>
77-
)
78-
}
79-
availableBalance={availableBalance ?? createMoney(0, 'BTC')}
80-
assetDescription={assetDescription?.description ?? ''}
81-
price={price ?? createMoney(0, 'USD')}
82-
changePercent={assetPriceChange?.changePercent ?? 0}
83-
quoteBalance={quoteBalance ?? createMoney(0, 'USD')}
84-
icon={<TokenIcon ticker={asset.symbol} asset={asset} />}
85-
asset={asset}
86-
/>
87-
}
88-
/>
89-
90-
<TokenSheet data={sheetData} sheetRef={tokenSheetRef} />
91-
</>
88+
<TokenActivity
89+
ticker={asset.symbol}
90+
accountIndex={accountIndex}
91+
fingerprint={fingerprint}
92+
// TokenDetails is Activity ListHeader to avoid nested scrolling errors
93+
ListHeader={
94+
<TokenDetails
95+
accountDetails={
96+
<AccountDetails
97+
accountIndex={accountIndex}
98+
fingerprint={fingerprint}
99+
asset={asset}
100+
availableBalance={availableBalance}
101+
quoteBalance={quoteBalance}
102+
/>
103+
}
104+
availableBalance={availableBalance ?? createMoney(0, 'BTC')}
105+
assetDescription={assetDescription?.description ?? ''}
106+
price={price ?? createMoney(0, 'USD')}
107+
changePercent={assetPriceChange?.changePercent ?? 0}
108+
quoteBalance={quoteBalance ?? createMoney(0, 'USD')}
109+
icon={<TokenIcon ticker={asset.symbol} asset={asset} />}
110+
asset={asset}
111+
/>
112+
}
113+
/>
92114
);
93115
}

0 commit comments

Comments
 (0)