logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://anongit.hacktivis.me/git/pleroma-fe.git/

nav_panel.js (4460B)


  1. import BookmarkFoldersMenuContent from 'src/components/bookmark_folders_menu/bookmark_folders_menu_content.vue'
  2. import ListsMenuContent from 'src/components/lists_menu/lists_menu_content.vue'
  3. import { mapState, mapGetters } from 'vuex'
  4. import { mapState as mapPiniaState } from 'pinia'
  5. import { TIMELINES, ROOT_ITEMS } from 'src/components/navigation/navigation.js'
  6. import { filterNavigation } from 'src/components/navigation/filter.js'
  7. import NavigationEntry from 'src/components/navigation/navigation_entry.vue'
  8. import NavigationPins from 'src/components/navigation/navigation_pins.vue'
  9. import Checkbox from 'src/components/checkbox/checkbox.vue'
  10. import { useAnnouncementsStore } from 'src/stores/announcements'
  11. import { library } from '@fortawesome/fontawesome-svg-core'
  12. import {
  13. faUsers,
  14. faGlobe,
  15. faBookmark,
  16. faEnvelope,
  17. faChevronDown,
  18. faChevronUp,
  19. faComments,
  20. faBell,
  21. faInfoCircle,
  22. faStream,
  23. faList,
  24. faBullhorn,
  25. faFilePen
  26. } from '@fortawesome/free-solid-svg-icons'
  27. library.add(
  28. faUsers,
  29. faGlobe,
  30. faBookmark,
  31. faEnvelope,
  32. faChevronDown,
  33. faChevronUp,
  34. faComments,
  35. faBell,
  36. faInfoCircle,
  37. faStream,
  38. faList,
  39. faBullhorn,
  40. faFilePen
  41. )
  42. const NavPanel = {
  43. props: ['forceExpand', 'forceEditMode'],
  44. created () {
  45. },
  46. components: {
  47. BookmarkFoldersMenuContent,
  48. ListsMenuContent,
  49. NavigationEntry,
  50. NavigationPins,
  51. Checkbox
  52. },
  53. data () {
  54. return {
  55. editMode: false,
  56. showTimelines: false,
  57. showLists: false,
  58. showBookmarkFolders: false,
  59. timelinesList: Object.entries(TIMELINES).map(([k, v]) => ({ ...v, name: k })),
  60. rootList: Object.entries(ROOT_ITEMS).map(([k, v]) => ({ ...v, name: k }))
  61. }
  62. },
  63. methods: {
  64. toggleTimelines () {
  65. this.showTimelines = !this.showTimelines
  66. },
  67. toggleLists () {
  68. this.showLists = !this.showLists
  69. },
  70. toggleBookmarkFolders () {
  71. this.showBookmarkFolders = !this.showBookmarkFolders
  72. },
  73. toggleEditMode () {
  74. this.editMode = !this.editMode
  75. },
  76. toggleCollapse () {
  77. this.$store.commit('setPreference', { path: 'simple.collapseNav', value: !this.collapsed })
  78. this.$store.dispatch('pushServerSideStorage')
  79. },
  80. isPinned (item) {
  81. return this.pinnedItems.has(item)
  82. },
  83. togglePin (item) {
  84. if (this.isPinned(item)) {
  85. this.$store.commit('removeCollectionPreference', { path: 'collections.pinnedNavItems', value: item })
  86. } else {
  87. this.$store.commit('addCollectionPreference', { path: 'collections.pinnedNavItems', value: item })
  88. }
  89. this.$store.dispatch('pushServerSideStorage')
  90. }
  91. },
  92. computed: {
  93. ...mapPiniaState(useAnnouncementsStore, {
  94. unreadAnnouncementCount: 'unreadAnnouncementCount',
  95. supportsAnnouncements: store => store.supportsAnnouncements
  96. }),
  97. ...mapState({
  98. currentUser: state => state.users.currentUser,
  99. followRequestCount: state => state.api.followRequests.length,
  100. privateMode: state => state.instance.private,
  101. federating: state => state.instance.federating,
  102. pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable,
  103. pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems),
  104. collapsed: state => state.serverSideStorage.prefsStorage.simple.collapseNav,
  105. bookmarkFolders: state => state.instance.pleromaBookmarkFoldersAvailable
  106. }),
  107. timelinesItems () {
  108. return filterNavigation(
  109. Object
  110. .entries({ ...TIMELINES })
  111. .map(([k, v]) => ({ ...v, name: k })),
  112. {
  113. hasChats: this.pleromaChatMessagesAvailable,
  114. hasAnnouncements: this.supportsAnnouncements,
  115. isFederating: this.federating,
  116. isPrivate: this.privateMode,
  117. currentUser: this.currentUser,
  118. supportsBookmarkFolders: this.bookmarkFolders
  119. }
  120. )
  121. },
  122. rootItems () {
  123. return filterNavigation(
  124. Object
  125. .entries({ ...ROOT_ITEMS })
  126. .map(([k, v]) => ({ ...v, name: k })),
  127. {
  128. hasChats: this.pleromaChatMessagesAvailable,
  129. hasAnnouncements: this.supportsAnnouncements,
  130. isFederating: this.federating,
  131. isPrivate: this.privateMode,
  132. currentUser: this.currentUser,
  133. supportsBookmarkFolders: this.bookmarkFolders
  134. }
  135. )
  136. },
  137. ...mapGetters(['unreadChatCount'])
  138. }
  139. }
  140. export default NavPanel