logo

pleroma-fe

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

navigation_pins.js (3206B)


  1. import { mapState } from 'vuex'
  2. import { mapState as mapPiniaState } from 'pinia'
  3. import { TIMELINES, ROOT_ITEMS, routeTo } from 'src/components/navigation/navigation.js'
  4. import { getBookmarkFolderEntries, getListEntries, filterNavigation } from 'src/components/navigation/filter.js'
  5. import StillImage from 'src/components/still-image/still-image.vue'
  6. import { library } from '@fortawesome/fontawesome-svg-core'
  7. import {
  8. faUsers,
  9. faGlobe,
  10. faBookmark,
  11. faEnvelope,
  12. faComments,
  13. faBell,
  14. faInfoCircle,
  15. faStream,
  16. faList
  17. } from '@fortawesome/free-solid-svg-icons'
  18. import { useListsStore } from 'src/stores/lists'
  19. import { useAnnouncementsStore } from 'src/stores/announcements'
  20. import { useBookmarkFoldersStore } from 'src/stores/bookmark_folders'
  21. library.add(
  22. faUsers,
  23. faGlobe,
  24. faBookmark,
  25. faEnvelope,
  26. faComments,
  27. faBell,
  28. faInfoCircle,
  29. faStream,
  30. faList
  31. )
  32. const NavPanel = {
  33. props: ['limit'],
  34. methods: {
  35. getRouteTo (item) {
  36. return routeTo(item, this.currentUser)
  37. }
  38. },
  39. components: {
  40. StillImage
  41. },
  42. computed: {
  43. getters () {
  44. return this.$store.getters
  45. },
  46. ...mapPiniaState(useListsStore, {
  47. lists: getListEntries
  48. }),
  49. ...mapPiniaState(useAnnouncementsStore, {
  50. supportsAnnouncements: store => store.supportsAnnouncements
  51. }),
  52. ...mapPiniaState(useBookmarkFoldersStore, {
  53. bookmarks: getBookmarkFolderEntries
  54. }),
  55. ...mapState({
  56. currentUser: state => state.users.currentUser,
  57. followRequestCount: state => state.api.followRequests.length,
  58. privateMode: state => state.instance.private,
  59. federating: state => state.instance.federating,
  60. pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable,
  61. pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems)
  62. }),
  63. pinnedList () {
  64. if (!this.currentUser) {
  65. return filterNavigation([
  66. { ...TIMELINES.public, name: 'public' },
  67. { ...TIMELINES.twkn, name: 'twkn' },
  68. { ...ROOT_ITEMS.about, name: 'about' }
  69. ],
  70. {
  71. hasChats: this.pleromaChatMessagesAvailable,
  72. hasAnnouncements: this.supportsAnnouncements,
  73. isFederating: this.federating,
  74. isPrivate: this.privateMode,
  75. currentUser: this.currentUser
  76. })
  77. }
  78. return filterNavigation(
  79. [
  80. ...Object
  81. .entries({ ...TIMELINES })
  82. .filter(([k]) => this.pinnedItems.has(k))
  83. .map(([k, v]) => ({ ...v, name: k })),
  84. ...this.lists.filter((k) => this.pinnedItems.has(k.name)),
  85. ...this.bookmarks.filter((k) => this.pinnedItems.has(k.name)),
  86. ...Object
  87. .entries({ ...ROOT_ITEMS })
  88. .filter(([k]) => this.pinnedItems.has(k))
  89. .map(([k, v]) => ({ ...v, name: k }))
  90. ],
  91. {
  92. hasChats: this.pleromaChatMessagesAvailable,
  93. hasAnnouncements: this.supportsAnnouncements,
  94. isFederating: this.federating,
  95. isPrivate: this.privateMode,
  96. currentUser: this.currentUser
  97. }
  98. ).slice(0, this.limit)
  99. }
  100. }
  101. }
  102. export default NavPanel