pleroma-fe/src/components/navigation/navigation_entry.js

48 lines
1.5 KiB
JavaScript
Raw Normal View History

import { mapState } from 'vuex'
import { routeTo } from 'src/components/navigation/navigation.js'
import OptionalRouterLink from 'src/components/optional_router_link/optional_router_link.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faThumbtack } from '@fortawesome/free-solid-svg-icons'
2025-03-23 20:03:25 +02:00
import { mapStores, mapState as mapPiniaState } from 'pinia'
2025-02-03 13:02:14 +02:00
import { useAnnouncementsStore } from 'src/stores/announcements'
2025-03-23 20:03:25 +02:00
import { useServerSideStorageStore } from 'src/stores/serverSideStorage'
library.add(faThumbtack)
const NavigationEntry = {
props: ['item', 'showPin'],
components: {
OptionalRouterLink
},
methods: {
isPinned (value) {
return this.pinnedItems.has(value)
},
togglePin (value) {
if (this.isPinned(value)) {
2025-03-23 20:03:25 +02:00
useServerSideStorageStore().removeCollectionPreference({ path: 'collections.pinnedNavItems', value })
} else {
2025-03-23 20:03:25 +02:00
useServerSideStorageStore().addCollectionPreference({ path: 'collections.pinnedNavItems', value })
}
2025-03-23 20:03:25 +02:00
useServerSideStorageStore().pushServerSideStorage()
}
},
computed: {
2022-08-23 15:36:54 +03:00
routeTo () {
return routeTo(this.item, this.currentUser)
2022-08-23 15:36:54 +03:00
},
getters () {
return this.$store.getters
},
2023-04-06 16:32:21 -06:00
...mapStores(useAnnouncementsStore),
...mapState({
2025-03-23 20:03:25 +02:00
currentUser: state => state.users.currentUser
}),
...mapPiniaState(useServerSideStorageStore, {
pinnedItems: store => new Set(store.prefsStorage.collections.pinnedNavItems)
}),
}
}
export default NavigationEntry