2022-12-06 22:17:58 +00:00
|
|
|
<script setup lang="ts">
|
2024-03-07 14:33:25 +00:00
|
|
|
import { STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE, STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE } from '~/constants'
|
2024-03-06 22:00:07 +00:00
|
|
|
|
2022-12-29 19:31:29 +00:00
|
|
|
const { command } = defineProps<{
|
|
|
|
command?: boolean
|
|
|
|
}>()
|
2022-12-02 02:21:10 +00:00
|
|
|
const { notifications } = useNotifications()
|
2023-05-06 15:52:33 +00:00
|
|
|
const useStarFavoriteIcon = usePreferences('useStarFavoriteIcon')
|
2024-03-06 22:00:07 +00:00
|
|
|
const lastAccessedNotificationRoute = useLocalStorage(STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE, '')
|
2024-03-07 14:33:25 +00:00
|
|
|
const lastAccessedExploreRoute = useLocalStorage(STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE, '')
|
2024-09-25 15:55:32 +00:00
|
|
|
|
|
|
|
const notificationsLink = computed(() => {
|
|
|
|
const hydrated = isHydrated.value
|
|
|
|
const user = currentUser.value
|
|
|
|
const lastRoute = lastAccessedNotificationRoute.value
|
|
|
|
if (!hydrated || !user || !lastRoute) {
|
|
|
|
return '/notifications'
|
|
|
|
}
|
|
|
|
|
|
|
|
return `/notifications/${lastRoute}`
|
|
|
|
})
|
|
|
|
const exploreLink = computed(() => {
|
|
|
|
const hydrated = isHydrated.value
|
|
|
|
const server = currentServer.value
|
|
|
|
let lastRoute = lastAccessedExploreRoute.value
|
|
|
|
if (!hydrated) {
|
|
|
|
return '/explore'
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lastRoute.length) {
|
|
|
|
lastRoute = `/${lastRoute}`
|
|
|
|
}
|
|
|
|
|
|
|
|
return server ? `/${server}/explore${lastRoute}` : `/explore${lastRoute}`
|
|
|
|
})
|
2022-12-02 02:21:10 +00:00
|
|
|
</script>
|
|
|
|
|
2022-11-15 17:14:10 +00:00
|
|
|
<template>
|
2023-05-01 15:58:37 +00:00
|
|
|
<nav sm:px3 flex="~ col gap2" shrink text-size-base leading-normal md:text-lg h-full mt-1 overflow-y-auto>
|
2023-05-07 15:41:18 +00:00
|
|
|
<NavSideItem :text="$t('nav.search')" to="/search" icon="i-ri:search-line" xl:hidden :command="command" />
|
2023-01-05 11:33:00 +00:00
|
|
|
|
2023-05-16 07:38:25 +00:00
|
|
|
<div class="spacer" shrink xl:hidden />
|
2022-12-29 19:31:29 +00:00
|
|
|
<NavSideItem :text="$t('nav.home')" to="/home" icon="i-ri:home-5-line" user-only :command="command" />
|
2024-09-25 15:55:32 +00:00
|
|
|
<NavSideItem :text="$t('nav.notifications')" :to="notificationsLink" icon="i-ri:notification-4-line" user-only :command="command">
|
2022-12-22 08:31:12 +00:00
|
|
|
<template #icon>
|
|
|
|
<div flex relative>
|
2023-01-16 00:57:31 +00:00
|
|
|
<div class="i-ri:notification-4-line" text-xl />
|
2022-12-22 08:31:12 +00:00
|
|
|
<div v-if="notifications" class="top-[-0.3rem] right-[-0.3rem]" absolute font-bold rounded-full h-4 w-4 text-xs bg-primary text-inverted flex items-center justify-center>
|
|
|
|
{{ notifications < 10 ? notifications : '•' }}
|
2022-12-02 02:21:10 +00:00
|
|
|
</div>
|
2022-12-22 08:31:12 +00:00
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</NavSideItem>
|
2023-01-06 09:44:02 +00:00
|
|
|
<NavSideItem :text="$t('nav.conversations')" to="/conversations" icon="i-ri:at-line" user-only :command="command" />
|
2023-05-06 15:52:33 +00:00
|
|
|
<NavSideItem :text="$t('nav.favourites')" to="/favourites" :icon="useStarFavoriteIcon ? 'i-ri:star-line' : 'i-ri:heart-3-line'" user-only :command="command" />
|
2023-01-06 09:44:02 +00:00
|
|
|
<NavSideItem :text="$t('nav.bookmarks')" to="/bookmarks" icon="i-ri:bookmark-line" user-only :command="command" />
|
2023-05-08 06:45:27 +00:00
|
|
|
|
|
|
|
<div class="spacer" shrink hidden sm:block />
|
2023-01-06 10:41:47 +00:00
|
|
|
<NavSideItem :text="$t('action.compose')" to="/compose" icon="i-ri:quill-pen-line" user-only :command="command" />
|
2022-12-27 21:41:44 +00:00
|
|
|
|
2023-05-01 15:58:37 +00:00
|
|
|
<div class="spacer" shrink hidden sm:block />
|
2024-09-25 15:55:32 +00:00
|
|
|
<NavSideItem :text="$t('nav.explore')" :to="exploreLink" icon="i-ri:compass-3-line" :command="command" />
|
2023-01-15 08:38:02 +00:00
|
|
|
<NavSideItem :text="$t('nav.local')" :to="isHydrated ? `/${currentServer}/public/local` : '/public/local'" icon="i-ri:group-2-line " :command="command" />
|
|
|
|
<NavSideItem :text="$t('nav.federated')" :to="isHydrated ? `/${currentServer}/public` : '/public'" icon="i-ri:earth-line" :command="command" />
|
2023-02-03 14:19:08 +00:00
|
|
|
<NavSideItem :text="$t('nav.lists')" :to="isHydrated ? `/${currentServer}/lists` : '/lists'" icon="i-ri:list-check" user-only :command="command" />
|
2024-03-05 10:27:10 +00:00
|
|
|
<NavSideItem :text="$t('nav.hashtags')" to="/hashtags" icon="i-ri:hashtag" user-only :command="command" />
|
2023-01-06 09:44:02 +00:00
|
|
|
|
2023-05-01 15:58:37 +00:00
|
|
|
<div class="spacer" shrink hidden sm:block />
|
2023-01-03 17:16:04 +00:00
|
|
|
<NavSideItem :text="$t('nav.settings')" to="/settings" icon="i-ri:settings-3-line" :command="command" />
|
2022-11-27 03:13:39 +00:00
|
|
|
</nav>
|
2022-11-15 17:14:10 +00:00
|
|
|
</template>
|
2023-05-01 15:58:37 +00:00
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
.spacer {
|
|
|
|
margin-top: 0.5em;
|
|
|
|
}
|
2023-05-16 07:38:25 +00:00
|
|
|
@media screen and ( max-height: 920px ) and ( min-width: 640px ) {
|
2023-05-01 15:58:37 +00:00
|
|
|
.spacer {
|
|
|
|
margin-top: 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|