1
1
import React , { useRef , useState } from 'react' ;
2
+ import { useSelector } from 'react-redux' ;
3
+ import { getCurrentNetwork , getPreferences } from '../../../../../selectors' ;
2
4
import {
3
5
Box ,
4
6
ButtonBase ,
@@ -25,62 +27,124 @@ import {
25
27
ENVIRONMENT_TYPE_NOTIFICATION ,
26
28
ENVIRONMENT_TYPE_POPUP ,
27
29
} from '../../../../../../shared/constants/app' ;
30
+ import NetworkFilter from '../network-filter' ;
28
31
29
32
type AssetListControlBarProps = {
30
33
showTokensLinks ?: boolean ;
31
34
} ;
32
35
33
36
const AssetListControlBar = ( { showTokensLinks } : AssetListControlBarProps ) => {
34
37
const t = useI18nContext ( ) ;
35
- const controlBarRef = useRef < HTMLDivElement > ( null ) ; // Create a ref
36
- const [ isPopoverOpen , setIsPopoverOpen ] = useState ( false ) ;
38
+ const popoverRef = useRef < HTMLDivElement > ( null ) ;
39
+ const currentNetwork = useSelector ( getCurrentNetwork ) ;
40
+ const { tokenNetworkFilter } = useSelector ( getPreferences ) ;
41
+ const [ isTokenSortPopoverOpen , setIsTokenSortPopoverOpen ] = useState ( false ) ;
42
+ const [ isNetworkFilterPopoverOpen , setIsNetworkFilterPopoverOpen ] =
43
+ useState ( false ) ;
44
+
45
+ const allNetworksFilterShown = Object . keys ( tokenNetworkFilter ?? { } ) . length ;
37
46
38
47
const windowType = getEnvironmentType ( ) ;
39
48
const isFullScreen =
40
49
windowType !== ENVIRONMENT_TYPE_NOTIFICATION &&
41
50
windowType !== ENVIRONMENT_TYPE_POPUP ;
42
51
43
- const handleOpenPopover = ( ) => {
44
- setIsPopoverOpen ( ! isPopoverOpen ) ;
52
+ const toggleTokenSortPopover = ( ) => {
53
+ setIsNetworkFilterPopoverOpen ( false ) ;
54
+ setIsTokenSortPopoverOpen ( ! isTokenSortPopoverOpen ) ;
55
+ } ;
56
+
57
+ const toggleNetworkFilterPopover = ( ) => {
58
+ setIsTokenSortPopoverOpen ( false ) ;
59
+ setIsNetworkFilterPopoverOpen ( ! isNetworkFilterPopoverOpen ) ;
45
60
} ;
46
61
47
62
const closePopover = ( ) => {
48
- setIsPopoverOpen ( false ) ;
63
+ setIsTokenSortPopoverOpen ( false ) ;
64
+ setIsNetworkFilterPopoverOpen ( false ) ;
49
65
} ;
50
66
51
67
return (
52
68
< Box
53
69
className = "asset-list-control-bar"
54
- ref = { controlBarRef }
55
- display = { Display . Flex }
56
- justifyContent = { JustifyContent . spaceBetween }
57
70
marginLeft = { 4 }
58
71
marginRight = { 4 }
59
72
paddingTop = { 4 }
73
+ ref = { popoverRef }
60
74
>
61
- < ButtonBase
62
- data-testid = "sort-by-popover-toggle"
63
- className = "asset-list-control-bar__button"
64
- onClick = { handleOpenPopover }
65
- size = { ButtonBaseSize . Sm }
66
- endIconName = { IconName . ArrowDown }
67
- backgroundColor = {
68
- isPopoverOpen
69
- ? BackgroundColor . backgroundPressed
70
- : BackgroundColor . backgroundDefault
75
+ < Box
76
+ display = { Display . Flex }
77
+ justifyContent = {
78
+ isFullScreen ? JustifyContent . flexStart : JustifyContent . spaceBetween
71
79
}
72
- borderColor = { BorderColor . borderMuted }
73
- borderStyle = { BorderStyle . solid }
74
- color = { TextColor . textDefault }
75
80
>
76
- { t ( 'sortBy' ) }
77
- </ ButtonBase >
78
- < ImportControl showTokensLinks = { showTokensLinks } />
81
+ { process . env . FILTER_TOKENS_TOGGLE && (
82
+ < ButtonBase
83
+ data-testid = "sort-by-popover-toggle"
84
+ className = "asset-list-control-bar__button"
85
+ onClick = { toggleNetworkFilterPopover }
86
+ size = { ButtonBaseSize . Sm }
87
+ endIconName = { IconName . ArrowDown }
88
+ backgroundColor = {
89
+ isNetworkFilterPopoverOpen
90
+ ? BackgroundColor . backgroundPressed
91
+ : BackgroundColor . backgroundDefault
92
+ }
93
+ borderColor = { BorderColor . borderMuted }
94
+ borderStyle = { BorderStyle . solid }
95
+ color = { TextColor . textDefault }
96
+ marginRight = { isFullScreen ? 2 : null }
97
+ ellipsis
98
+ >
99
+ { allNetworksFilterShown
100
+ ? currentNetwork ?. nickname ?? t ( 'currentNetwork' )
101
+ : t ( 'allNetworks' ) }
102
+ </ ButtonBase >
103
+ ) }
104
+
105
+ < ButtonBase
106
+ data-testid = "sort-by-popover-toggle"
107
+ className = "asset-list-control-bar__button"
108
+ onClick = { toggleTokenSortPopover }
109
+ size = { ButtonBaseSize . Sm }
110
+ endIconName = { IconName . ArrowDown }
111
+ backgroundColor = {
112
+ isTokenSortPopoverOpen
113
+ ? BackgroundColor . backgroundPressed
114
+ : BackgroundColor . backgroundDefault
115
+ }
116
+ borderColor = { BorderColor . borderMuted }
117
+ borderStyle = { BorderStyle . solid }
118
+ color = { TextColor . textDefault }
119
+ marginRight = { isFullScreen ? 2 : null }
120
+ >
121
+ { t ( 'sortBy' ) }
122
+ </ ButtonBase >
123
+
124
+ < ImportControl showTokensLinks = { showTokensLinks } />
125
+ </ Box >
126
+
127
+ < Popover
128
+ onClickOutside = { closePopover }
129
+ isOpen = { isNetworkFilterPopoverOpen }
130
+ position = { PopoverPosition . BottomStart }
131
+ referenceElement = { popoverRef . current }
132
+ matchWidth = { ! isFullScreen }
133
+ style = { {
134
+ zIndex : 10 ,
135
+ display : 'flex' ,
136
+ flexDirection : 'column' ,
137
+ padding : 0 ,
138
+ minWidth : isFullScreen ? '325px' : '' ,
139
+ } }
140
+ >
141
+ < NetworkFilter handleClose = { closePopover } />
142
+ </ Popover >
79
143
< Popover
80
144
onClickOutside = { closePopover }
81
- isOpen = { isPopoverOpen }
145
+ isOpen = { isTokenSortPopoverOpen }
82
146
position = { PopoverPosition . BottomStart }
83
- referenceElement = { controlBarRef . current }
147
+ referenceElement = { popoverRef . current }
84
148
matchWidth = { ! isFullScreen }
85
149
style = { {
86
150
zIndex : 10 ,
0 commit comments