Skip to content

Commit 4542ca9

Browse files
authored
feature(wallet-mobile): token details dialog for new tx review (#3672)
1 parent 82900d0 commit 4542ca9

File tree

25 files changed

+999
-1165
lines changed

25 files changed

+999
-1165
lines changed

apps/wallet-mobile/.storybook/storybook.requires.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/wallet-mobile/src/features/Portfolio/common/MediaPreview/MediaPreview.tsx apps/wallet-mobile/src/components/MediaPreview/MediaPreview.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import React from 'react'
55
import {ImageStyle, StyleSheet, View} from 'react-native'
66
import SkeletonPlaceholder from 'react-native-skeleton-placeholder'
77

8-
import placeholderLight from '../../../../assets/img/nft-placeholder.png'
9-
import placeholderDark from '../../../../assets/img/nft-placeholder-dark.png'
10-
import {useSelectedWallet} from '../../../WalletManager/common/hooks/useSelectedWallet'
8+
import placeholderLight from '../../assets/img/nft-placeholder.png'
9+
import placeholderDark from '../../assets/img/nft-placeholder-dark.png'
10+
import {useSelectedWallet} from '../../features/WalletManager/common/hooks/useSelectedWallet'
1111

1212
type MediaPreviewProps = {
1313
info: Portfolio.Token.Info
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import {action} from '@storybook/addon-actions'
2+
import {storiesOf} from '@storybook/react-native'
3+
import * as React from 'react'
4+
import {View} from 'react-native'
5+
6+
import {SimpleTab} from './SimpleTab'
7+
8+
storiesOf('SimpleTab', module)
9+
.add('Active', () => <Active />)
10+
.add('Inactive', () => <Inactive />)
11+
12+
const Active = () => {
13+
return (
14+
<View style={{flexDirection: 'row'}}>
15+
<SimpleTab name="Active" isActive={true} onPress={action('onPress')} />
16+
</View>
17+
)
18+
}
19+
20+
const Inactive = () => {
21+
return (
22+
<View style={{flexDirection: 'row'}}>
23+
<SimpleTab name="Inactive" isActive={false} onPress={action('onPress')} />
24+
</View>
25+
)
26+
}
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type Props = {
88
onPress: () => void
99
}
1010

11-
export const DAppExplorerTabItem = ({name, onPress, isActive}: Props) => {
11+
export const SimpleTab = ({name, onPress, isActive}: Props) => {
1212
const {styles} = useStyles()
1313
return (
1414
<TouchableOpacity onPress={onPress} style={[styles.container, isActive && styles.containerActive]}>
@@ -34,5 +34,5 @@ const useStyles = () => {
3434
},
3535
})
3636

37-
return {styles}
37+
return {styles} as const
3838
}

apps/wallet-mobile/src/features/Discover/useCases/SelectDappFromList/DAppExplorerTabItem/DAppExplorerTabItem.stories.tsx

-26
This file was deleted.

apps/wallet-mobile/src/features/Discover/useCases/SelectDappFromList/SelectDappFromListScreen.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {useTheme} from '@yoroi/theme'
33
import * as React from 'react'
44
import {FlatList, StyleSheet, View} from 'react-native'
55

6+
import {SimpleTab} from '../../../../components/SimpleTab/SimpleTab'
67
import {Spacer} from '../../../../components/Spacer/Spacer'
78
import {useMetrics} from '../../../../kernel/metrics/metricsManager'
89
import {useSearch, useSearchOnNavBar} from '../../../Search/SearchContext'
@@ -13,7 +14,6 @@ import {useDAppsConnected} from '../../common/useDAppsConnected'
1314
import {useStrings} from '../../common/useStrings'
1415
import {CountDAppsAvailable} from './CountDAppsAvailable/CountDAppsAvailable'
1516
import {CountDAppsConnected} from './CountDAppsConnected/CountDAppsConnected'
16-
import {DAppExplorerTabItem} from './DAppExplorerTabItem/DAppExplorerTabItem'
1717
import {DAppListItem} from './DAppListItem/DAppListItem'
1818
import {DAppTypes} from './DAppTypes/DAppTypes'
1919
import {WelcomeDAppModal} from './WelcomeDAppModal'
@@ -153,13 +153,13 @@ const HeaderControl = ({
153153
<>
154154
{hasConnectedDapps && (
155155
<View style={styles.tabsContainer}>
156-
<DAppExplorerTabItem
156+
<SimpleTab
157157
name={strings.connected}
158158
isActive={currentTab === DAppTabs.connected}
159159
onPress={() => onTabChange(DAppTabs.connected)}
160160
/>
161161

162-
<DAppExplorerTabItem
162+
<SimpleTab
163163
name={strings.recommended}
164164
isActive={currentTab === DAppTabs.recommended}
165165
onPress={() => onTabChange(DAppTabs.recommended)}

apps/wallet-mobile/src/features/Portfolio/common/MediaDetailsScreen/MediaDetailsScreen.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {Boundary} from '../../../../components/Boundary/Boundary'
2020
import {CopyButton} from '../../../../components/CopyButton'
2121
import {FadeIn} from '../../../../components/FadeIn'
2222
import {Hr} from '../../../../components/Hr/Hr'
23+
import {MediaPreview} from '../../../../components/MediaPreview/MediaPreview'
2324
import {Spacer} from '../../../../components/Spacer/Spacer'
2425
import {Tab, TabPanel, TabPanels, Tabs} from '../../../../components/Tabs/Tabs'
2526
import {Text} from '../../../../components/Text'
@@ -28,7 +29,6 @@ import {useMetrics} from '../../../../kernel/metrics/metricsManager'
2829
import {NftRoutes} from '../../../../kernel/navigation'
2930
import {useSelectedWallet} from '../../../WalletManager/common/hooks/useSelectedWallet'
3031
import {usePortfolioImageInvalidate} from '../hooks/usePortfolioImage'
31-
import {MediaPreview} from '../MediaPreview/MediaPreview'
3232
import {useNavigateTo} from '../navigation'
3333

3434
export const MediaDetailsScreen = () => {

apps/wallet-mobile/src/features/Portfolio/common/MediaGallery/MediaGallery.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {Balance, Portfolio} from '@yoroi/types'
44
import * as React from 'react'
55
import {StyleSheet, Text, TouchableOpacity, useWindowDimensions, View} from 'react-native'
66

7+
import {MediaPreview} from '../../../../components/MediaPreview/MediaPreview'
78
import {Spacer} from '../../../../components/Spacer/Spacer'
8-
import {MediaPreview} from '../MediaPreview/MediaPreview'
99

1010
type Props = {
1111
amounts: ReadonlyArray<Portfolio.Token.Amount>

apps/wallet-mobile/src/features/Portfolio/useCases/PortfolioDashboard/DashboardNFTsList/DashboardNFTsList.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import {FlatList, Image, StyleSheet, Text, TouchableOpacity, useWindowDimensions
55
import placeholderLight from '../../../../../assets/img/nft-placeholder.png'
66
import placeholderDark from '../../../../../assets/img/nft-placeholder-dark.png'
77
import {Icon} from '../../../../../components/Icon'
8+
import {MediaPreview} from '../../../../../components/MediaPreview/MediaPreview'
89
import {Spacer} from '../../../../../components/Spacer/Spacer'
910
import {useSelectedWallet} from '../../../../WalletManager/common/hooks/useSelectedWallet'
1011
import {useNavigateTo} from '../../../common/hooks/useNavigateTo'
1112
import {usePortfolioBalances} from '../../../common/hooks/usePortfolioBalances'
1213
import {useStrings} from '../../../common/hooks/useStrings'
13-
import {MediaPreview} from '../../../common/MediaPreview/MediaPreview'
1414

1515
export const DashboardNFTsList = () => {
1616
const {styles, cardItemWidth} = useStyles()

apps/wallet-mobile/src/features/Portfolio/useCases/PortfolioTokensList/PortfolioWalletTokenList/ListMediaGalleryScreen/ZoomMediaImageScreen.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import {StyleSheet, useWindowDimensions, View} from 'react-native'
66
import ViewTransformer from 'react-native-easy-view-transformer'
77

88
import {FadeIn} from '../../../../../../components/FadeIn'
9+
import {MediaPreview} from '../../../../../../components/MediaPreview/MediaPreview'
910
import {useMetrics} from '../../../../../../kernel/metrics/metricsManager'
1011
import {NftRoutes, useParams} from '../../../../../../kernel/navigation'
1112
import {isEmptyString} from '../../../../../../kernel/utils'
1213
import {useSelectedWallet} from '../../../../../WalletManager/common/hooks/useSelectedWallet'
13-
import {MediaPreview} from '../../../../common/MediaPreview/MediaPreview'
1414

1515
type Params = NftRoutes['nft-details']
1616

apps/wallet-mobile/src/features/ReviewTx/common/CollapsibleSection.tsx apps/wallet-mobile/src/features/ReviewTx/common/Accordion.tsx

+6-8
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {Animated, LayoutAnimation, StyleSheet, Text, TouchableOpacity, View} fro
44

55
import {Icon} from '../../../components/Icon'
66

7-
export const CollapsibleSection = ({label, children}: {label: string; children: React.ReactNode}) => {
7+
export const Accordion = ({label, children}: {label: string; children: React.ReactNode}) => {
88
const {styles, colors} = useStyles()
99
const [isOpen, setIsOpen] = React.useState(false)
1010
const animatedHeight = React.useRef(new Animated.Value(0)).current
@@ -20,14 +20,12 @@ export const CollapsibleSection = ({label, children}: {label: string; children:
2020
}
2121

2222
return (
23-
<>
24-
<View style={styles.sectionHeader}>
23+
<View>
24+
<TouchableOpacity activeOpacity={0.5} onPress={toggleSection} style={styles.sectionHeader}>
2525
<Text style={styles.sectionHeaderText}>{label}</Text>
2626

27-
<TouchableOpacity activeOpacity={0.5} onPress={toggleSection}>
28-
<Icon.Chevron direction={isOpen ? 'up' : 'down'} size={28} color={colors.chevron} />
29-
</TouchableOpacity>
30-
</View>
27+
<Icon.Chevron direction={isOpen ? 'up' : 'down'} size={28} color={colors.chevron} />
28+
</TouchableOpacity>
3129

3230
<Animated.View
3331
style={[
@@ -43,7 +41,7 @@ export const CollapsibleSection = ({label, children}: {label: string; children:
4341
>
4442
{children}
4543
</Animated.View>
46-
</>
44+
</View>
4745
)
4846
}
4947

apps/wallet-mobile/src/features/ReviewTx/common/Address.tsx

-73
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import {useTheme} from '@yoroi/theme'
2+
import * as React from 'react'
3+
import {StyleSheet, TouchableOpacity, View} from 'react-native'
4+
5+
import {Icon} from '../../../components/Icon'
6+
import {useCopy} from '../../../hooks/useCopy'
7+
8+
export const CopiableText = ({children, textToCopy}: {children: React.ReactNode; textToCopy: string}) => {
9+
const {styles, colors} = useStyles()
10+
const [, copy] = useCopy()
11+
12+
return (
13+
<View style={styles.text}>
14+
{children}
15+
16+
<TouchableOpacity onPress={() => copy(textToCopy)} activeOpacity={0.5}>
17+
<Icon.Copy size={24} color={colors.copy} />
18+
</TouchableOpacity>
19+
</View>
20+
)
21+
}
22+
23+
const useStyles = () => {
24+
const {atoms, color} = useTheme()
25+
const styles = StyleSheet.create({
26+
text: {
27+
...atoms.flex_row,
28+
...atoms.justify_between,
29+
},
30+
})
31+
32+
const colors = {
33+
copy: color.gray_900,
34+
}
35+
36+
return {styles, colors} as const
37+
}

0 commit comments

Comments
 (0)