aboutsummaryrefslogtreecommitdiff
path: root/src/components/navigation/filter.js
blob: 9b8f43cbadeb82c8441b0f3c920024b086c159fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
export const filterNavigation = (list = [], { hasChats, hasAnnouncements, isFederating, isPrivate, currentUser, supportsBookmarkFolders }) => {
  return list.filter(({ criteria, anon, anonRoute }) => {
    const set = new Set(criteria || [])
    if (!isFederating && set.has('federating')) return false
    if (!currentUser && isPrivate && set.has('!private')) return false
    if (!currentUser && !(anon || anonRoute)) return false
    if ((!currentUser || !currentUser.locked) && set.has('lockedUser')) return false
    if (!hasChats && set.has('chats')) return false
    if (!hasAnnouncements && set.has('announcements')) return false
    if (supportsBookmarkFolders && set.has('!supportsBookmarkFolders')) return false
    return true
  })
}

export const getListEntries = state => state.lists.allLists.map(list => ({
  name: 'list-' + list.id,
  routeObject: { name: 'lists-timeline', params: { id: list.id } },
  labelRaw: list.title,
  iconLetter: list.title[0]
}))

export const getBookmarkFolderEntries = state => state.bookmarkFolders.allFolders.map(folder => ({
  name: 'bookmark-folder-' + folder.id,
  routeObject: { name: 'bookmark-folder', params: { id: folder.id } },
  labelRaw: folder.name,
  iconEmoji: folder.emoji,
  iconEmojiUrl: folder.emoji_url,
  iconLetter: folder.name[0]
}))