@@ -31,7 +31,7 @@ const Container = styled.div<{ isOpen: boolean }>`
31
31
top: 0;
32
32
left: 0;
33
33
right: 0;
34
- height: 92 %;
34
+ height: 76 %;
35
35
overflow-y: auto;
36
36
z-index: 1;
37
37
background-color: ${ ( { theme } ) => theme . whiteBackground } ;
@@ -61,23 +61,29 @@ const DisconnectWalletButtonContainer = styled.div`
61
61
align-items: center;
62
62
` ;
63
63
64
- const PopupContainer = styled . div `
64
+ const PopupContainer = styled . div < { isClosing : boolean } > `
65
65
position: fixed;
66
66
top: 0;
67
67
left: 0;
68
68
width: 100%;
69
69
height: 100%;
70
70
z-index: 1;
71
71
background-color: ${ ( { theme } ) => theme . blackLowOpacity } ;
72
+ opacity: ${ ( { isClosing } ) => ( isClosing ? 0 : 1 ) } ;
73
+ transition: opacity 0.2s ease-in-out;
72
74
` ;
73
75
74
- const StyledOverlay = styled . div `
76
+ const NavbarOverlay = styled . div < { hasPopupOpen : boolean ; isClosing : boolean } > `
75
77
position: fixed;
76
78
top: 0;
77
79
left: 0;
78
80
width: 100%;
79
81
height: 64px;
80
- z-index: 1;
82
+ z-index: ${ ( { hasPopupOpen, isClosing } ) => ( hasPopupOpen || isClosing ? - 1 : 1 ) } ;
83
+ ` ;
84
+
85
+ const StyledOverlay = styled ( Overlay ) `
86
+ top: unset;
81
87
` ;
82
88
83
89
export interface ISettings {
@@ -103,19 +109,35 @@ const NavBar: React.FC<INavBar> = ({ isOpen, handleCloseNavbar }) => {
103
109
const [ isDappListOpen , toggleIsDappListOpen ] = useToggle ( false ) ;
104
110
const [ isHelpOpen , toggleIsHelpOpen ] = useToggle ( false ) ;
105
111
const [ isSettingsOpen , toggleIsSettingsOpen ] = useToggle ( false ) ;
112
+ const [ isClosing , toggleIsClosing ] = useToggle ( false ) ;
113
+
114
+ const hasPopupOpen = isDappListOpen || isHelpOpen || isSettingsOpen ;
115
+
116
+ const handleOpenPopup = ( toggleFn : ( ) => void ) => {
117
+ toggleIsClosing ( false ) ;
118
+ toggleFn ( ) ;
119
+ } ;
120
+
121
+ const handleClosePopup = ( ) => {
122
+ toggleIsClosing ( true ) ;
123
+ setTimeout ( ( ) => {
124
+ if ( isDappListOpen ) toggleIsDappListOpen ( false ) ;
125
+ if ( isHelpOpen ) toggleIsHelpOpen ( false ) ;
126
+ if ( isSettingsOpen ) toggleIsSettingsOpen ( false ) ;
127
+ toggleIsClosing ( false ) ;
128
+ } , 200 ) ;
129
+ } ;
106
130
107
131
return (
108
132
< >
109
- { isOpen ? < Overlay { ...{ isOpen } } onClick = { handleCloseNavbar } /> : null }
133
+ { isOpen && < NavbarOverlay onClick = { handleCloseNavbar } { ...{ hasPopupOpen , isClosing } } /> }
110
134
< Wrapper { ...{ isOpen } } >
111
135
< StyledOverlay >
112
136
< Container { ...{ isOpen } } >
113
137
< LightButton
114
138
isMobileNavbar = { true }
115
139
text = "Kleros Solutions"
116
- onClick = { ( ) => {
117
- toggleIsDappListOpen ( ) ;
118
- } }
140
+ onClick = { ( ) => handleOpenPopup ( toggleIsDappListOpen ) }
119
141
Icon = { KlerosSolutionsIcon }
120
142
/>
121
143
< hr />
@@ -130,16 +152,20 @@ const NavBar: React.FC<INavBar> = ({ isOpen, handleCloseNavbar }) => {
130
152
) }
131
153
</ WalletContainer >
132
154
< hr />
133
- < Menu { ...{ toggleIsHelpOpen, toggleIsSettingsOpen } } isMobileNavbar = { true } />
155
+ < Menu
156
+ toggleIsHelpOpen = { ( ) => handleOpenPopup ( toggleIsHelpOpen ) }
157
+ toggleIsSettingsOpen = { ( ) => handleOpenPopup ( toggleIsSettingsOpen ) }
158
+ isMobileNavbar = { true }
159
+ />
134
160
< br />
135
161
</ Container >
136
162
</ StyledOverlay >
137
163
</ Wrapper >
138
- { ( isDappListOpen || isHelpOpen || isSettingsOpen ) && (
139
- < PopupContainer >
140
- { isDappListOpen && < DappList { ... { toggleIsDappListOpen } } /> }
141
- { isHelpOpen && < Help { ... { toggleIsHelpOpen } } /> }
142
- { isSettingsOpen && < Settings { ... { toggleIsSettingsOpen } } /> }
164
+ { hasPopupOpen && (
165
+ < PopupContainer { ... { isClosing } } onTransitionEnd = { ( ) => isClosing && handleClosePopup ( ) } >
166
+ { isDappListOpen && < DappList toggleIsDappListOpen = { handleClosePopup } /> }
167
+ { isHelpOpen && < Help toggleIsHelpOpen = { handleClosePopup } /> }
168
+ { isSettingsOpen && < Settings toggleIsSettingsOpen = { handleClosePopup } /> }
143
169
</ PopupContainer >
144
170
) }
145
171
</ >
0 commit comments