diff options
Diffstat (limited to 'src/components/nav_panel/nav_panel.js')
| -rw-r--r-- | src/components/nav_panel/nav_panel.js | 123 |
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']) } |
