Skip to content

Commit d4822df

Browse files
committed
refactor(wallet-mobile): split banners responsability
1 parent c343d52 commit d4822df

File tree

9 files changed

+89
-36
lines changed

9 files changed

+89
-36
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {action} from '@storybook/addon-actions'
2+
import {storiesOf} from '@storybook/react-native'
3+
import * as React from 'react'
4+
5+
import {DelegateToYoroiDRepBanner} from './DelegateToYoroiDRepBanner'
6+
7+
storiesOf('DelegateToYoroiDRepBanner', module).add('Initial', () => (
8+
<DelegateToYoroiDRepBanner isVisible onDismiss={action('onDismiss')} />
9+
))
+11-18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import {shouldShowDRep2UsOnStakingCenter, useBanner, useBanners} from '@yoroi/banners'
21
import {useTheme} from '@yoroi/theme'
3-
import {Banners} from '@yoroi/types'
42
import * as React from 'react'
53
import {StyleSheet, TouchableOpacity, View} from 'react-native'
64
import LinearGradient from 'react-native-linear-gradient'
@@ -9,30 +7,25 @@ import {Button} from '../../../../components/Button/Button'
97
import {DismissibleView} from '../../../../components/DismissableView'
108
import {Icon} from '../../../../components/Icon'
119
import {Text} from '../../../../components/Text'
12-
import {yoroiDRepIdHex} from '../../../../kernel/constants'
13-
import {useStrings} from '../../common/strings'
10+
import {useStrings} from '../strings'
1411

15-
export const ConsiderDelegatingToYoroiBanner = () => {
12+
type Props = {
13+
isVisible: boolean
14+
onDismiss: () => void
15+
}
16+
17+
export const DelegateToYoroiDRepBanner = ({onDismiss, isVisible}: Props) => {
1618
const {styles, colors} = useStyles()
1719
const {title, description, cta} = useStrings()
18-
const {manager} = useBanners<Banners.StorageKey>()
19-
const {dismiss, dismissedAt} = useBanner({id: Banners.Id.DRep2UsStakingCenter, manager})
2020

21-
const handleOnClose = React.useCallback(() => dismiss(), [dismiss])
21+
const handleOnDismiss = React.useCallback(() => onDismiss(), [onDismiss])
2222
const handleOnCta = React.useCallback(() => console.log('cta'), [])
2323

24-
const shouldShow = shouldShowDRep2UsOnStakingCenter({
25-
yoroiDRepIdHex,
26-
currentDRepIdHex: 'hi',
27-
isStaking: true,
28-
dismissedAt,
29-
})
30-
3124
return (
32-
<DismissibleView isVisible={shouldShow}>
25+
<DismissibleView isVisible={isVisible}>
3326
<LinearGradient start={{x: 1, y: 1}} end={{x: 0, y: 0}} colors={colors.gradient} style={styles.gradient}>
3427
<View style={styles.root}>
35-
<TouchableOpacity onPress={handleOnClose} style={styles.closeButton}>
28+
<TouchableOpacity onPress={handleOnDismiss} style={styles.dismiss}>
3629
<Icon.Close color={colors.icon} size={20} />
3730
</TouchableOpacity>
3831

@@ -50,7 +43,7 @@ export const ConsiderDelegatingToYoroiBanner = () => {
5043
const useStyles = () => {
5144
const {color, atoms} = useTheme()
5245
const styles = StyleSheet.create({
53-
closeButton: {
46+
dismiss: {
5447
width: 20,
5548
height: 20,
5649
right: atoms.px_lg.paddingRight,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {shouldShowDRep2UsOnStakingCenter, useBanner} from '@yoroi/banners'
2+
import {Banners} from '@yoroi/types'
3+
import * as React from 'react'
4+
5+
import {useSelectedWallet} from '../../WalletManager/common/hooks/useSelectedWallet'
6+
import {DelegateToYoroiDRepBanner} from '../common/DelegateToYoroiDRepBanner/DelegateToYoroiDRepBanner'
7+
8+
export const ConsiderDRepToUsStakingCenterBanner = () => {
9+
const {
10+
wallet: {bannersManager: manager},
11+
} = useSelectedWallet()
12+
const {dismiss, dismissedAt} = useBanner({id: Banners.Id.DRep2UsStakingCenter, manager})
13+
14+
const isVisible = shouldShowDRep2UsOnStakingCenter({
15+
yoroiDRepIdHex: '1',
16+
currentDRepIdHex: 'hi',
17+
isStaking: true,
18+
dismissedAt,
19+
})
20+
21+
return <DelegateToYoroiDRepBanner onDismiss={dismiss} isVisible={isVisible} />
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import {shouldShowDRep2UsOnTxHistory, useBanner} from '@yoroi/banners'
2+
import {Banners} from '@yoroi/types'
3+
import * as React from 'react'
4+
5+
import {useSelectedWallet} from '../../WalletManager/common/hooks/useSelectedWallet'
6+
import {DelegateToYoroiDRepBanner} from '../common/DelegateToYoroiDRepBanner/DelegateToYoroiDRepBanner'
7+
8+
export const ConsiderDRepToUsTxHistoryBanner = () => {
9+
const {
10+
wallet: {bannersManager: manager},
11+
} = useSelectedWallet()
12+
const {dismiss, dismissedAt} = useBanner({id: Banners.Id.DRep2UsTxHistory, manager})
13+
14+
const isVisible = shouldShowDRep2UsOnTxHistory({
15+
yoroiDRepIdHex: '1',
16+
currentDRepIdHex: 'hi',
17+
isStaking: true,
18+
dismissedAt,
19+
ptBalance: 0n,
20+
ptMinBalance: 0n,
21+
})
22+
23+
return <DelegateToYoroiDRepBanner onDismiss={dismiss} isVisible={isVisible} />
24+
}

apps/wallet-mobile/src/features/Banners/useCases/ConsiderDelegatingToYoroiBanner/ConsiderDelegatingToYoroiBanner.stories.tsx

-8
This file was deleted.

apps/wallet-mobile/src/features/Dev/Playground.tsx

+1-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {SafeAreaView} from 'react-native-safe-area-context'
88
import {Button} from '../../components/Button/Button'
99
import {Spacer} from '../../components/Spacer/Spacer'
1010
import {logger} from '../../kernel/logger/logger'
11-
import {ConsiderDelegatingToYoroiBanner} from '../Banners/useCases/ConsiderDelegatingToYoroiBanner/ConsiderDelegatingToYoroiBanner'
1211
import {useSelectedWallet} from '../WalletManager/common/hooks/useSelectedWallet'
1312

1413
// --------------------------------------------------------------------------------------------------
@@ -44,9 +43,7 @@ export const Playground = () => {
4443

4544
<Spacer height={20} />
4645

47-
<BannersProvider manager={bannersManager} key={refresh}>
48-
<ConsiderDelegatingToYoroiBanner />
49-
</BannersProvider>
46+
<BannersProvider manager={bannersManager} key={refresh}></BannersProvider>
5047
</SafeAreaView>
5148
)
5249
}

apps/wallet-mobile/src/yoroi-wallets/cardano/cardano-wallet.ts

+15-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import * as CSL from '@emurgo/cross-csl-core'
44
import {createSignedLedgerTxFromCbor, signRawTransaction} from '@emurgo/yoroi-lib'
55
import {Datum} from '@emurgo/yoroi-lib/dist/internals/models'
66
import {AppApi} from '@yoroi/api'
7+
import {bannersManagerMaker} from '@yoroi/banners'
78
import {cardanoConfig, derivationConfig, protocolParamsPlaceholder} from '@yoroi/blockchains'
8-
import {isNonNullable} from '@yoroi/common'
9-
import {Api, App, Balance, HW, Network, Portfolio, Wallet} from '@yoroi/types'
9+
import {isNonNullable, observableStorageMaker} from '@yoroi/common'
10+
import {Api, App, Balance, Banners, HW, Network, Portfolio, Wallet} from '@yoroi/types'
1011
import {BigNumber} from 'bignumber.js'
1112
import {Buffer} from 'buffer'
1213
import {freeze} from 'immer'
@@ -89,6 +90,8 @@ export const makeCardanoWallet = (networkManager: Network.Manager, implementatio
8990
private readonly transactionManager: TransactionManager
9091
private readonly memosManager: MemosManager
9192

93+
readonly bannersManager: Readonly<Banners.Manager<Banners.StorageKey>>
94+
9295
readonly balanceManager: Readonly<Portfolio.Manager.Balance>
9396
readonly balance$: Observable<Portfolio.Event.BalanceManager>
9497
readonly portfolioPrimaryTokenInfo: Readonly<Portfolio.Token.Info>
@@ -158,6 +161,12 @@ export const makeCardanoWallet = (networkManager: Network.Manager, implementatio
158161
// the calculation of locked deposit, since the cost can change
159162
const protocolParams = await networkManager.api.protocolParams()
160163

164+
const walletStorage = networkManager.rootStorage.join(`${id}/`)
165+
const bannersStorage = observableStorageMaker<false, Banners.StorageKey>(walletStorage.join('banners/'))
166+
const bannersManager = bannersManagerMaker<Banners.StorageKey>({
167+
storage: bannersStorage,
168+
})
169+
161170
const wallet = new CardanoWallet({
162171
id,
163172
accountPubKeyHex,
@@ -170,6 +179,7 @@ export const makeCardanoWallet = (networkManager: Network.Manager, implementatio
170179
portfolioPrimaryTokenInfo: primaryTokenInfo,
171180
accountVisual,
172181
protocolParams,
182+
bannersManager,
173183
})
174184
if (!isYoroiWallet(wallet)) throwLoggedError('ShelleyWallet: build invalid wallet')
175185

@@ -190,6 +200,7 @@ export const makeCardanoWallet = (networkManager: Network.Manager, implementatio
190200
memosManager,
191201
balanceManager,
192202
accountManager,
203+
bannersManager,
193204

194205
portfolioPrimaryTokenInfo,
195206
protocolParams,
@@ -204,6 +215,7 @@ export const makeCardanoWallet = (networkManager: Network.Manager, implementatio
204215
memosManager: MemosManager
205216
balanceManager: Readonly<Portfolio.Manager.Balance>
206217
accountManager: AccountManager
218+
bannersManager: Readonly<Banners.Manager<Banners.StorageKey>>
207219

208220
portfolioPrimaryTokenInfo: Readonly<Portfolio.Token.Info>
209221
protocolParams: Api.Cardano.ProtocolParams
@@ -222,6 +234,7 @@ export const makeCardanoWallet = (networkManager: Network.Manager, implementatio
222234
this.balance$ = balanceManager.observable$
223235
this.accountManager = accountManager
224236
this.portfolioPrimaryTokenInfo = portfolioPrimaryTokenInfo
237+
this.bannersManager = bannersManager
225238

226239
this.protocolParams = protocolParams
227240

apps/wallet-mobile/src/yoroi-wallets/cardano/types.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ export interface YoroiWallet {
7979
// account
8080
readonly accountVisual: number
8181

82+
// banners
83+
readonly bannersManager: Readonly<Banners.Manager<Banners.StorageKey>>
84+
8285
// sync
8386
resync(): Promise<void>
8487
clear(): Promise<void>
@@ -271,7 +274,3 @@ export namespace CardanoTypes {
271274

272275
export {RegistrationStatus} from '@emurgo/yoroi-lib'
273276
export {NoOutputsError, NotEnoughMoneyToSendError} from '@emurgo/yoroi-lib/dist/errors'
274-
275-
export interface WithBanners {
276-
bannersManager: Banners.Manager<Banners.StorageKey>
277-
}

apps/wallet-mobile/src/yoroi-wallets/mocks/wallet.ts

+4
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ const wallet: YoroiWallet = {
8787
lockedAsStorageCost: 0n,
8888
totalFromTxs: 0n,
8989
},
90+
bannersManager: {
91+
dismiss: noop,
92+
dismissedAt: () => 0,
93+
},
9094

9195
isMainnet: true,
9296
portfolioPrimaryTokenInfo: primaryTokenInfoMainnet,

0 commit comments

Comments
 (0)