@@ -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 + 8000 > ( 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
@@ -102,6 +113,27 @@ const TopNav = ({
102
113
return menu1 && menu1 . subMenu && menu1 . subMenu . find ( level2 => level2 . id === level2Id )
103
114
}
104
115
116
+ // if click level2 menu from 'more', exchange to the first place
117
+ const reArrangeLevel2Menu = ( level1Id , menuId ) => {
118
+ var menu1 = findLevel1Menu ( level1Id )
119
+ if ( menu1 && menu1 . subMenu ) {
120
+ let subMenu = menu1 . subMenu
121
+ let pos = _ . findIndex ( subMenu , ( level2 ) => {
122
+ return level2 . id === menuId
123
+ } )
124
+ let t = subMenu [ 0 ]
125
+ subMenu [ 0 ] = subMenu [ pos ]
126
+ subMenu [ pos ] = t
127
+
128
+ pos = _ . findIndex ( moreMenu , ( level2 ) => {
129
+ return level2 . id === menuId
130
+ } )
131
+ moreMenu [ pos ] = t
132
+ window . localStorage . setItem ( '__top_nav_bar_state' , JSON . stringify ( _ . assign ( { } , menu1 ) ) )
133
+ setMoreMenu ( moreMenu )
134
+ setChosenArrowPos ( menuId )
135
+ }
136
+ }
105
137
const activeMenu1 = findLevel1Menu ( activeLevel1Id )
106
138
const activeMenu2 = findLevel2Menu ( activeLevel1Id , activeLevel2Id )
107
139
@@ -207,6 +239,11 @@ const TopNav = ({
207
239
const createHandleClickLevel3 = menuId => ( ) => {
208
240
setActiveLevel3Id ( menuId )
209
241
setIconSelectPos ( menuId )
242
+
243
+ let cacheMenu = JSON . parse ( window . localStorage . getItem ( '__top_nav_bar_state' ) )
244
+ if ( cacheMenu ) {
245
+ window . localStorage . setItem ( '__top_nav_bar_state' , JSON . stringify ( _ . assign ( { } , cacheMenu , { date : ( new Date ( ) . getTime ( ) ) } ) ) )
246
+ }
210
247
}
211
248
212
249
const handleClickMore = ( ) => setOpenMore ( x => ! x )
@@ -218,9 +255,9 @@ const TopNav = ({
218
255
setActiveLevel2Id ( menuId )
219
256
setShowLevel3 ( true )
220
257
setforceHideLevel3 ( false )
221
- setChosenArrowPos ( moreId )
222
258
// let the level 3 menu mounted first for sliding indicator to work
223
259
setTimeout ( ( ) => {
260
+ reArrangeLevel2Menu ( activeLevel1Id , menuId )
224
261
const menu = findLevel2Menu ( activeLevel1Id , menuId )
225
262
if ( menu && menu . subMenu ) {
226
263
// select first level 3 item
@@ -344,7 +381,7 @@ const TopNav = ({
344
381
let found = { m1 : null , m2 : null , m3 : null }
345
382
346
383
// If haven't a path just return
347
- if ( ! path_ ) return found
384
+ if ( ! path_ ) return found
348
385
349
386
menuWithId_ . forEach ( level1 => {
350
387
if ( level1 . href && path_ . indexOf ( level1 . href ) > - 1 ) found = { m1 : level1 . id , m2 : null }
@@ -357,14 +394,14 @@ const TopNav = ({
357
394
} else {
358
395
found = { m1 : level1 . id , m2 : level2 . id , m3 : level3 . id }
359
396
}
360
- if ( ! activeLevel3Id && level3 . collapsed ) setforceHideLevel3 ( true )
397
+ if ( ! activeLevel3Id && level3 . collapsed ) setforceHideLevel3 ( true )
361
398
}
362
399
} )
363
400
} )
364
401
level1 . secondaryMenu && level1 . secondaryMenu . forEach ( level3 => {
365
402
if ( level3 . href ) {
366
403
// Check if path have parameters
367
- const href = level3 . href . indexOf ( "?" ) > - 1 ? level3 . href . split ( "?" ) [ 0 ] : level3 . href ;
404
+ const href = level3 . href . indexOf ( '?' ) > - 1 ? level3 . href . split ( '?' ) [ 0 ] : level3 . href
368
405
if ( path_ . indexOf ( href ) > - 1 ) found = { m1 : level1 . id , m3 : level3 . id }
369
406
}
370
407
} )
@@ -390,13 +427,13 @@ const TopNav = ({
390
427
forceExpand = true
391
428
forceM2 = getMenuIdsFromPath ( menuWithId , '/challenges' ) . m2
392
429
}
393
- } else if ( path . indexOf ( '/my-dashboard' ) > - 1 || path . indexOf ( '/members/' + profileHandle ) > - 1 ) {
430
+ } else if ( path . indexOf ( '/my-dashboard' ) > - 1 || path . indexOf ( '/members/' + profileHandle ) > - 1 ) {
394
431
// If My Dashboard and My Profile page
395
432
setShowLevel3 ( true )
396
433
} else if ( path . indexOf ( '/community/learn' ) > - 1 || path . indexOf ( '/thrive/tracks' ) > - 1 ) {
397
434
// Show 3rd level menu to Community [ Overview - How It Works ]
398
- forceM2 = getMenuIdsFromPath ( menuWithId , '/community' ) . m2 ;
399
- } else if ( ! m2 ) {
435
+ forceM2 = getMenuIdsFromPath ( menuWithId , '/community' ) . m2
436
+ } else if ( ! m2 ) {
400
437
setShowLevel3 ( false )
401
438
setforceHideLevel3 ( true )
402
439
}
0 commit comments