aboutsummaryrefslogtreecommitdiff
path: root/src/components/nav_panel/nav_panel.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/nav_panel/nav_panel.js')
-rw-r--r--src/components/nav_panel/nav_panel.js123
1 files changed, 35 insertions, 88 deletions
diff --git a/src/components/nav_panel/nav_panel.js b/src/components/nav_panel/nav_panel.js
index 7cc3122d..10998113 100644
--- a/src/components/nav_panel/nav_panel.js
+++ b/src/components/nav_panel/nav_panel.js
@@ -1,6 +1,8 @@
-import TimelineMenuContent from '../timeline_menu/timeline_menu_content.vue'
-import ListsMenuContent from '../lists_menu/lists_menu_content.vue'
+import { getListEntries, ListsMenuContent } from '../lists_menu/lists_menu_content.vue'
import { mapState, mapGetters } from 'vuex'
+import { TIMELINES, ROOT_ITEMS } from 'src/components/navigation/navigation.js'
+import { filterNavigation } from 'src/components/navigation/filter.js'
+import NavigationEntry from 'src/components/navigation/navigation_entry.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
@@ -30,67 +32,6 @@ library.add(
faStream,
faList
)
-
-export const TIMELINES = {
- home: {
- route: 'friends',
- anonRoute: 'public-timeline',
- icon: 'home',
- label: 'nav.home_timeline',
- criteria: ['!private']
- },
- public: {
- route: 'public-timeline',
- anon: true,
- icon: 'users',
- label: 'nav.public_tl',
- criteria: ['!private']
- },
- twkn: {
- route: 'public-external-timeline',
- anon: true,
- icon: 'globe',
- label: 'nav.twkn',
- criteria: ['!private', 'federating']
- },
- bookmarks: {
- route: 'bookmarks',
- icon: 'bookmark',
- label: 'nav.bookmarks'
- },
- dms: {
- route: 'dms',
- icon: 'envelope',
- label: 'nav.dms'
- }
-}
-export const ROOT_ITEMS = {
- interactions: {
- route: 'interactions',
- icon: 'bell',
- label: 'nav.interactions'
- },
- chats: {
- route: 'chats',
- icon: 'comments',
- label: 'nav.chats',
- badgeGetter: 'unreadChatCount'
- },
- friendRequests: {
- route: 'friend-requests',
- icon: 'user-plus',
- label: 'nav.friend_requests',
- criteria: ['lockedUser'],
- badgeGetter: 'followRequestCount'
- },
- about: {
- route: 'about',
- anon: true,
- icon: 'info-circle',
- label: 'nav.about'
- }
-}
-
const NavPanel = {
created () {
if (this.currentUser && this.currentUser.locked) {
@@ -98,8 +39,8 @@ const NavPanel = {
}
},
components: {
- TimelineMenuContent,
- ListsMenuContent
+ ListsMenuContent,
+ NavigationEntry
},
data () {
return {
@@ -134,6 +75,7 @@ const NavPanel = {
},
computed: {
...mapState({
+ lists: getListEntries,
currentUser: state => state.users.currentUser,
followRequestCount: state => state.api.followRequests.length,
privateMode: state => state.instance.private,
@@ -143,31 +85,36 @@ const NavPanel = {
collapsed: state => state.serverSideStorage.prefsStorage.simple.collapseNav
}),
rootItems () {
- return Object
- .entries({ ...ROOT_ITEMS })
- .map(([k, v]) => ({ ...v, name: k }))
- .filter(({ criteria, anon, anonRoute }) => {
- const set = new Set(criteria || [])
- if (!this.federating && set.has('federating')) return false
- if (this.private && set.has('!private')) return false
- if (!this.currentUser && !(anon || anonRoute)) return false
- if ((!this.currentUser || !this.currentUser.locked) && set.has('lockedUser')) return false
- return true
- })
+ return filterNavigation(
+ Object
+ .entries({ ...ROOT_ITEMS })
+ .map(([k, v]) => ({ ...v, name: k })),
+ {
+ isFederating: this.federating,
+ isPrivate: this.private,
+ currentUser: this.currentUser
+ }
+ )
},
pinnedList () {
- return Object
- .entries({ ...TIMELINES, ...ROOT_ITEMS })
- .filter(([k]) => this.pinnedItems.has(k))
- .map(([k, v]) => ({ ...v, name: k }))
- .filter(({ criteria, anon, anonRoute }) => {
- const set = new Set(criteria || [])
- if (!this.federating && set.has('federating')) return false
- if (this.private && set.has('!private')) return false
- if (!this.currentUser && !(anon || anonRoute)) return false
- if (this.currentUser && !this.currentUser.locked && set.has('locked')) return false
- return true
- })
+ return filterNavigation(
+ [
+ ...Object
+ .entries({
+ ...TIMELINES,
+ ...ROOT_ITEMS
+ })
+ .filter(([k]) => this.pinnedItems.has(k))
+ .map(([k, v]) => ({ ...v, name: k })),
+ ...this.lists.filter((k) => this.pinnedItems.has(k.name))
+
+ ],
+ {
+ isFederating: this.federating,
+ isPrivate: this.private,
+ currentUser: this.currentUser
+ }
+ )
},
...mapGetters(['unreadChatCount'])
}