1
- import React , { useEffect , useRef } from 'react' ;
1
+ import React , { useEffect , useRef , useState } from 'react' ;
2
2
import classnames from 'classnames' ;
3
3
import PropTypes from 'prop-types' ;
4
+ import { useSelector } from 'react-redux' ;
4
5
import {
5
6
AlignItems ,
6
7
BackgroundColor ,
7
8
BlockSize ,
8
9
BorderRadius ,
9
10
Color ,
10
11
Display ,
11
- IconColor ,
12
12
JustifyContent ,
13
- Size ,
14
13
TextColor ,
14
+ Size ,
15
+ IconColor ,
15
16
} from '../../../helpers/constants/design-system' ;
16
17
import {
17
18
AvatarNetwork ,
18
19
Box ,
19
20
ButtonIcon ,
21
+ ButtonIconSize ,
20
22
IconName ,
21
23
Text ,
22
24
} from '../../component-library' ;
23
25
import { useI18nContext } from '../../../hooks/useI18nContext' ;
24
26
import { getAvatarNetworkColor } from '../../../helpers/utils/accounts' ;
25
27
import Tooltip from '../../ui/tooltip/tooltip' ;
28
+ import { NetworkListItemMenu } from '../network-list-item-menu' ;
29
+ import { getLocalNetworkMenuRedesignFeatureFlag } from '../../../helpers/utils/feature-flags' ;
26
30
27
31
const MAXIMUM_CHARACTERS_WITHOUT_TOOLTIP = 20 ;
28
32
@@ -33,10 +37,52 @@ export const NetworkListItem = ({
33
37
focus = true ,
34
38
onClick,
35
39
onDeleteClick,
40
+ onEditClick,
36
41
} ) => {
37
42
const t = useI18nContext ( ) ;
38
43
const networkRef = useRef ( ) ;
39
44
45
+ const [ networkListItemMenuElement , setNetworkListItemMenuElement ] =
46
+ useState ( ) ;
47
+ const setNetworkListItemMenuRef = ( ref ) => {
48
+ setNetworkListItemMenuElement ( ref ) ;
49
+ } ;
50
+ const [ networkOptionsMenuOpen , setNetworkOptionsMenuOpen ] = useState ( false ) ;
51
+ const networkMenuRedesign = useSelector (
52
+ getLocalNetworkMenuRedesignFeatureFlag ,
53
+ ) ;
54
+
55
+ const renderButton = ( ) => {
56
+ if ( networkMenuRedesign ) {
57
+ return onDeleteClick || onEditClick ? (
58
+ < ButtonIcon
59
+ iconName = { IconName . MoreVertical }
60
+ ref = { setNetworkListItemMenuRef }
61
+ data-testid = "network-list-item-options-button"
62
+ ariaLabel = { t ( 'networkOptions' ) }
63
+ onClick = { ( e ) => {
64
+ e . stopPropagation ( ) ;
65
+ setNetworkOptionsMenuOpen ( true ) ;
66
+ } }
67
+ size = { ButtonIconSize . Sm }
68
+ />
69
+ ) : null ;
70
+ }
71
+
72
+ return onDeleteClick ? (
73
+ < ButtonIcon
74
+ className = "multichain-network-list-item__delete"
75
+ color = { IconColor . errorDefault }
76
+ iconName = { IconName . Trash }
77
+ ariaLabel = { t ( 'deleteNetwork' ) }
78
+ size = { Size . SM }
79
+ onClick = { ( e ) => {
80
+ e . stopPropagation ( ) ;
81
+ onDeleteClick ( ) ;
82
+ } }
83
+ />
84
+ ) : null ;
85
+ } ;
40
86
useEffect ( ( ) => {
41
87
if ( networkRef . current && focus ) {
42
88
networkRef . current . focus ( ) ;
@@ -103,19 +149,14 @@ export const NetworkListItem = ({
103
149
) }
104
150
</ Text >
105
151
</ Box >
106
- { onDeleteClick ? (
107
- < ButtonIcon
108
- className = "multichain-network-list-item__delete"
109
- color = { IconColor . errorDefault }
110
- iconName = { IconName . Trash }
111
- ariaLabel = { t ( 'deleteNetwork' ) }
112
- size = { Size . SM }
113
- onClick = { ( e ) => {
114
- e . stopPropagation ( ) ;
115
- onDeleteClick ( ) ;
116
- } }
117
- />
118
- ) : null }
152
+ { renderButton ( ) }
153
+ < NetworkListItemMenu
154
+ anchorElement = { networkListItemMenuElement }
155
+ isOpen = { networkOptionsMenuOpen }
156
+ onDeleteClick = { onDeleteClick }
157
+ onEditClick = { onEditClick }
158
+ onClose = { ( ) => setNetworkOptionsMenuOpen ( false ) }
159
+ />
119
160
</ Box >
120
161
) ;
121
162
} ;
@@ -141,6 +182,10 @@ NetworkListItem.propTypes = {
141
182
* Executes when the delete icon is clicked
142
183
*/
143
184
onDeleteClick : PropTypes . func ,
185
+ /**
186
+ * Executes when the edit icon is clicked
187
+ */
188
+ onEditClick : PropTypes . func ,
144
189
/**
145
190
* Represents if the network item should be keyboard selected
146
191
*/
0 commit comments