Skip to content

Commit 57dcba6

Browse files
Merge pull request #107 from yoution/issue_101
#101 fixed bug for "more" tab swapping position
2 parents f563a4b + b9f3641 commit 57dcba6

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

src/components/TopNav/index.js

+38-1
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 + 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+
4657
return menu
4758
}
4859

@@ -104,6 +115,27 @@ const TopNav = ({
104115
return menu1 && menu1.subMenu && menu1.subMenu.find(level2 => level2.id === level2Id)
105116
}
106117

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

@@ -208,6 +240,11 @@ const TopNav = ({
208240
const createHandleClickLevel3 = menuId => () => {
209241
setActiveLevel3Id(menuId)
210242
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+
}
211248
}
212249

213250
const handleClickMore = () => setOpenMore(x => !x)
@@ -224,9 +261,9 @@ const TopNav = ({
224261
setActiveLevel2Id(menuId)
225262
setShowLevel3(true)
226263
setforceHideLevel3(false)
227-
setChosenArrowPos(moreId)
228264
// let the level 3 menu mounted first for sliding indicator to work
229265
setTimeout(() => {
266+
reArrangeLevel2Menu(activeLevel1Id, menuId)
230267
const menu = findLevel2Menu(activeLevel1Id, menuId)
231268
if (menu && menu.subMenu) {
232269
// this requires the item element to be mounted first

0 commit comments

Comments
 (0)