Skip to content

Commit 67a924a

Browse files
committed
#101 fixed bug for "more" tab swapping position
1 parent f284bd4 commit 67a924a

File tree

1 file changed

+44
-7
lines changed

1 file changed

+44
-7
lines changed

src/components/TopNav/index.js

+44-7
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,17 @@ const initMenuId = (menu, profileHandle, loggedIn) => {
4343
: (profileHandle ? `/members/${profileHandle}` : '/')
4444
}))
4545
}))
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+
4657
return menu
4758
}
4859

@@ -102,6 +113,27 @@ const TopNav = ({
102113
return menu1 && menu1.subMenu && menu1.subMenu.find(level2 => level2.id === level2Id)
103114
}
104115

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+
}
105137
const activeMenu1 = findLevel1Menu(activeLevel1Id)
106138
const activeMenu2 = findLevel2Menu(activeLevel1Id, activeLevel2Id)
107139

@@ -207,6 +239,11 @@ const TopNav = ({
207239
const createHandleClickLevel3 = menuId => () => {
208240
setActiveLevel3Id(menuId)
209241
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+
}
210247
}
211248

212249
const handleClickMore = () => setOpenMore(x => !x)
@@ -218,9 +255,9 @@ const TopNav = ({
218255
setActiveLevel2Id(menuId)
219256
setShowLevel3(true)
220257
setforceHideLevel3(false)
221-
setChosenArrowPos(moreId)
222258
// let the level 3 menu mounted first for sliding indicator to work
223259
setTimeout(() => {
260+
reArrangeLevel2Menu(activeLevel1Id, menuId)
224261
const menu = findLevel2Menu(activeLevel1Id, menuId)
225262
if (menu && menu.subMenu) {
226263
// select first level 3 item
@@ -344,7 +381,7 @@ const TopNav = ({
344381
let found = { m1: null, m2: null, m3: null }
345382

346383
// If haven't a path just return
347-
if(!path_) return found
384+
if (!path_) return found
348385

349386
menuWithId_.forEach(level1 => {
350387
if (level1.href && path_.indexOf(level1.href) > -1) found = { m1: level1.id, m2: null }
@@ -357,14 +394,14 @@ const TopNav = ({
357394
} else {
358395
found = { m1: level1.id, m2: level2.id, m3: level3.id }
359396
}
360-
if(!activeLevel3Id && level3.collapsed) setforceHideLevel3(true)
397+
if (!activeLevel3Id && level3.collapsed) setforceHideLevel3(true)
361398
}
362399
})
363400
})
364401
level1.secondaryMenu && level1.secondaryMenu.forEach(level3 => {
365402
if (level3.href) {
366403
// 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
368405
if (path_.indexOf(href) > -1) found = { m1: level1.id, m3: level3.id }
369406
}
370407
})
@@ -390,13 +427,13 @@ const TopNav = ({
390427
forceExpand = true
391428
forceM2 = getMenuIdsFromPath(menuWithId, '/challenges').m2
392429
}
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) {
394431
// If My Dashboard and My Profile page
395432
setShowLevel3(true)
396433
} else if (path.indexOf('/community/learn') > -1 || path.indexOf('/thrive/tracks') > -1) {
397434
// 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) {
400437
setShowLevel3(false)
401438
setforceHideLevel3(true)
402439
}

0 commit comments

Comments
 (0)