semaphore/src/routes/_store/computations/navComputations.js

106 lines
2.6 KiB
JavaScript

import { mark, stop } from '../../_utils/marks.js'
export function navComputations (store) {
mark('navComputations')
store.compute(
'pinnedListTitle',
['lists', 'pinnedPage'],
(lists, pinnedPage) => {
if (!pinnedPage.startsWith('/lists')) {
return
}
const listId = pinnedPage.split('/').slice(-1)[0]
const list = lists.find(_ => _.id === listId)
return list ? list.title : ''
}
)
store.compute(
'navPages',
['pinnedPage', 'pinnedListTitle'],
(pinnedPage, pinnedListTitle) => {
let pinnedPageObject
if (pinnedPage === '/federated') {
pinnedPageObject = {
name: 'federated',
href: '/federated',
svg: '#fa-globe',
label: 'intl.federated'
}
} else if (pinnedPage === '/direct') {
pinnedPageObject = {
name: 'direct',
href: '/direct',
svg: '#fa-envelope',
label: 'intl.directMessages'
}
} else if (pinnedPage === '/favorites') {
pinnedPageObject = {
name: 'favorites',
href: '/favorites',
svg: '#fa-star',
label: 'intl.favorites'
}
} else if (pinnedPage === '/bookmarks') {
pinnedPageObject = {
name: 'bookmarks',
href: '/bookmarks',
svg: '#fa-bookmark',
label: 'intl.bookmarks'
}
} else if (pinnedPage.startsWith('/lists/')) {
pinnedPageObject = {
name: `lists/${pinnedPage.split('/').slice(-1)[0]}`,
href: pinnedPage,
svg: '#fa-bars',
label: pinnedListTitle
}
} else { // local
pinnedPageObject = {
name: 'local',
href: '/local',
svg: '#fa-users',
label: 'intl.local'
}
}
return [
{
name: 'home',
href: '/',
svg: '#semaphore-logo',
label: 'intl.home'
},
{
name: 'notifications',
href: '/notifications',
svg: '#fa-bell',
label: 'intl.notifications'
},
pinnedPageObject,
{
name: 'community',
href: '/community',
svg: '#fa-comments',
label: 'intl.community'
},
{
name: 'search',
href: '/search',
svg: '#fa-search',
label: 'intl.search'
},
{
name: 'settings',
href: '/settings',
svg: '#fa-gear',
label: 'intl.settings'
}
]
}
)
stop('navComputations')
}