@@ -43,6 +43,17 @@ const initMenuId = (menu, profileHandle, loggedIn) => {
43
43
: ( profileHandle ? `/members/${ profileHandle } ` : '/' )
44
44
} ) )
45
45
} ) )
46
+
47
+ let cacheMenu = JSON . parse ( window . localStorage . getItem ( '__top_nav_bar_state' ) )
48
+ if ( cacheMenu && cacheMenu . date + 16000 > ( new Date ( ) ) . getTime ( ) ) {
49
+ let menuItem = _ . find ( menu , ( m ) => {
50
+ return m . id === cacheMenu . id
51
+ } )
52
+ if ( menuItem ) {
53
+ menuItem . subMenu = cacheMenu . subMenu
54
+ }
55
+ }
56
+
46
57
return menu
47
58
}
48
59
@@ -104,6 +115,27 @@ const TopNav = ({
104
115
return menu1 && menu1 . subMenu && menu1 . subMenu . find ( level2 => level2 . id === level2Id )
105
116
}
106
117
118
+ // if click level2 menu from 'more', exchange to the first place
119
+ const reArrangeLevel2Menu = ( level1Id , menuId ) => {
120
+ var menu1 = findLevel1Menu ( level1Id )
121
+ if ( menu1 && menu1 . subMenu ) {
122
+ let subMenu = menu1 . subMenu
123
+ let pos = _ . findIndex ( subMenu , ( level2 ) => {
124
+ return level2 . id === menuId
125
+ } )
126
+ let t = subMenu [ 0 ]
127
+ subMenu [ 0 ] = subMenu [ pos ]
128
+ subMenu [ pos ] = t
129
+
130
+ pos = _ . findIndex ( moreMenu , ( level2 ) => {
131
+ return level2 . id === menuId
132
+ } )
133
+ moreMenu [ pos ] = t
134
+ window . localStorage . setItem ( '__top_nav_bar_state' , JSON . stringify ( _ . assign ( { } , menu1 ) ) )
135
+ setMoreMenu ( moreMenu )
136
+ setChosenArrowPos ( menuId )
137
+ }
138
+ }
107
139
const activeMenu1 = findLevel1Menu ( activeLevel1Id )
108
140
const activeMenu2 = findLevel2Menu ( activeLevel1Id , activeLevel2Id )
109
141
@@ -208,6 +240,11 @@ const TopNav = ({
208
240
const createHandleClickLevel3 = menuId => ( ) => {
209
241
setActiveLevel3Id ( menuId )
210
242
setIconSelectPos ( menuId )
243
+
244
+ let cacheMenu = JSON . parse ( window . localStorage . getItem ( '__top_nav_bar_state' ) )
245
+ if ( cacheMenu ) {
246
+ window . localStorage . setItem ( '__top_nav_bar_state' , JSON . stringify ( _ . assign ( { } , cacheMenu , { date : ( new Date ( ) . getTime ( ) ) } ) ) )
247
+ }
211
248
}
212
249
213
250
const handleClickMore = ( ) => setOpenMore ( x => ! x )
@@ -224,9 +261,9 @@ const TopNav = ({
224
261
setActiveLevel2Id ( menuId )
225
262
setShowLevel3 ( true )
226
263
setforceHideLevel3 ( false )
227
- setChosenArrowPos ( moreId )
228
264
// let the level 3 menu mounted first for sliding indicator to work
229
265
setTimeout ( ( ) => {
266
+ reArrangeLevel2Menu ( activeLevel1Id , menuId )
230
267
const menu = findLevel2Menu ( activeLevel1Id , menuId )
231
268
if ( menu && menu . subMenu ) {
232
269
// this requires the item element to be mounted first
0 commit comments