diff --git a/app.vue b/app.vue
index e0ffddf9..4d44ed25 100644
--- a/app.vue
+++ b/app.vue
@@ -6,12 +6,15 @@ provideGlobalCommands()
// We want to trigger rerendering the page when account changes
const key = computed(() => `${currentUser.value?.server ?? currentServer.value}:${currentUser.value?.account.id || ''}`)
+
+const { params } = useRoute()
-
+
+
diff --git a/components/common/CommonRouteTabs.vue b/components/common/CommonRouteTabs.vue
index 65d8864b..d596b889 100644
--- a/components/common/CommonRouteTabs.vue
+++ b/components/common/CommonRouteTabs.vue
@@ -5,6 +5,7 @@ const { options, command, replace, preventScrollTop = false } = $defineProps<{
options: {
to: RouteLocationRaw
display: string
+ disabled?: boolean
name?: string
icon?: string
}[]
@@ -28,18 +29,25 @@ useCommands(() => command
-
- {{ option.display }}
-
+
+ {{ option.display }}
+
+
+ {{ option.display }}
+
+
diff --git a/components/timeline/TimelineBlocks.vue b/components/timeline/TimelineBlocks.vue
new file mode 100644
index 00000000..5b20b337
--- /dev/null
+++ b/components/timeline/TimelineBlocks.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/components/timeline/TimelineBookmarks.vue b/components/timeline/TimelineBookmarks.vue
new file mode 100644
index 00000000..f99ba34c
--- /dev/null
+++ b/components/timeline/TimelineBookmarks.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/components/timeline/TimelineConversations.vue b/components/timeline/TimelineConversations.vue
new file mode 100644
index 00000000..a9af6ba3
--- /dev/null
+++ b/components/timeline/TimelineConversations.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/components/timeline/TimelineDomainBlocks.vue b/components/timeline/TimelineDomainBlocks.vue
new file mode 100644
index 00000000..a0f564f8
--- /dev/null
+++ b/components/timeline/TimelineDomainBlocks.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
diff --git a/components/timeline/TimelineFavourites.vue b/components/timeline/TimelineFavourites.vue
new file mode 100644
index 00000000..b5e286a5
--- /dev/null
+++ b/components/timeline/TimelineFavourites.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/components/timeline/TimelineHome.vue b/components/timeline/TimelineHome.vue
new file mode 100644
index 00000000..c9792b9b
--- /dev/null
+++ b/components/timeline/TimelineHome.vue
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/components/timeline/TimelineMentions.vue b/components/timeline/TimelineMentions.vue
new file mode 100644
index 00000000..8e0a925b
--- /dev/null
+++ b/components/timeline/TimelineMentions.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/components/timeline/TimelineMutes.vue b/components/timeline/TimelineMutes.vue
new file mode 100644
index 00000000..303c10ff
--- /dev/null
+++ b/components/timeline/TimelineMutes.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/components/timeline/TimelineNotifications.vue b/components/timeline/TimelineNotifications.vue
new file mode 100644
index 00000000..53c067ec
--- /dev/null
+++ b/components/timeline/TimelineNotifications.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/components/timeline/TimelinePinned.vue b/components/timeline/TimelinePinned.vue
new file mode 100644
index 00000000..e0862f01
--- /dev/null
+++ b/components/timeline/TimelinePinned.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/pages/[[server]]/explore.vue b/pages/[[server]]/explore.vue
index eed38e1b..ca3446a7 100644
--- a/pages/[[server]]/explore.vue
+++ b/pages/[[server]]/explore.vue
@@ -17,15 +17,11 @@ const tabs = $computed(() => [
display: t('tab.news'),
},
// This section can only be accessed after logging in
- ...invoke(() => currentUser.value
- ? [
- {
- to: `/${currentServer.value}/explore/users`,
- display: t('tab.for_you'),
- },
- ]
- : [],
- ),
+ {
+ to: `/${currentServer.value}/explore/users`,
+ display: t('tab.for_you'),
+ disabled: !isMastoInitialised.value || !currentUser.value,
+ },
] as const)
@@ -41,6 +37,6 @@ const tabs = $computed(() => [
-
+
diff --git a/pages/blocks.vue b/pages/blocks.vue
index 010e2012..5e460657 100644
--- a/pages/blocks.vue
+++ b/pages/blocks.vue
@@ -3,8 +3,6 @@ definePageMeta({
middleware: 'auth',
})
-const paginator = useMasto().blocks.iterate()
-
useHeadFixed({
title: 'Blocked users',
})
@@ -15,6 +13,7 @@ useHeadFixed({
{{ $t('account.blocked_users') }}
-
+
+
diff --git a/pages/bookmarks.vue b/pages/bookmarks.vue
index fd578689..c1921a5c 100644
--- a/pages/bookmarks.vue
+++ b/pages/bookmarks.vue
@@ -3,8 +3,6 @@ definePageMeta({
middleware: 'auth',
})
-const paginator = useMasto().bookmarks.iterate()
-
const { t } = useI18n()
useHeadFixed({
@@ -21,8 +19,6 @@ useHeadFixed({
-
-
-
+
diff --git a/pages/conversations.vue b/pages/conversations.vue
index 31d54ec3..13654581 100644
--- a/pages/conversations.vue
+++ b/pages/conversations.vue
@@ -3,8 +3,6 @@ definePageMeta({
middleware: 'auth',
})
-const paginator = useMasto().conversations.iterate()
-
const { t } = useI18n()
useHeadFixed({
@@ -21,8 +19,6 @@ useHeadFixed({
-
-
-
+
diff --git a/pages/domain_blocks.vue b/pages/domain_blocks.vue
index ed25088f..e91b7e16 100644
--- a/pages/domain_blocks.vue
+++ b/pages/domain_blocks.vue
@@ -1,18 +1,13 @@
@@ -21,15 +16,6 @@ const unblock = async (domain: string) => {
{{ $t('account.blocked_domains') }}
-
-
-
- {{ item }}
-
-
-
-
-
-
+
diff --git a/pages/favourites.vue b/pages/favourites.vue
index b0f97722..23685701 100644
--- a/pages/favourites.vue
+++ b/pages/favourites.vue
@@ -3,7 +3,6 @@ definePageMeta({
middleware: 'auth',
})
-const paginator = useMasto().favourites.iterate()
const { t } = useI18n()
useHeadFixed({
@@ -19,8 +18,7 @@ useHeadFixed({
{{ t('nav_side.favourites') }}
-
-
-
+
+
diff --git a/pages/home.vue b/pages/home.vue
index f0249840..22c0fcd4 100644
--- a/pages/home.vue
+++ b/pages/home.vue
@@ -6,16 +6,6 @@ definePageMeta({
alias: ['/signin/callback'],
})
-if (useRoute().path === '/signin/callback') {
- // This only cleans up the URL; page content should stay the same
- useRouter().push('/home')
-}
-
-const masto = useMasto()
-const paginator = masto.timelines.iterateHome()
-const stream = await masto.stream.streamUser()
-onBeforeUnmount(() => stream.disconnect())
-
const { t } = useI18n()
useHeadFixed({
title: () => t('nav_side.home'),
@@ -30,9 +20,7 @@ useHeadFixed({
{{ $t('nav_side.home') }}
-
-
-
-
+
+
diff --git a/pages/mutes.vue b/pages/mutes.vue
index c26a24a9..4e773bb7 100644
--- a/pages/mutes.vue
+++ b/pages/mutes.vue
@@ -2,9 +2,6 @@
definePageMeta({
middleware: 'auth',
})
-
-const paginator = useMasto().mutes.iterate()
-
useHeadFixed({
title: 'Muted users',
})
@@ -15,6 +12,7 @@ useHeadFixed({
{{ $t('account.muted_users') }}
-
+
+
diff --git a/pages/notifications.vue b/pages/notifications.vue
index 4e6e63ea..795b4577 100644
--- a/pages/notifications.vue
+++ b/pages/notifications.vue
@@ -53,6 +53,7 @@ onActivated(() => {
+
diff --git a/pages/notifications/index.vue b/pages/notifications/index.vue
index 08bf4aab..ce586d62 100644
--- a/pages/notifications/index.vue
+++ b/pages/notifications/index.vue
@@ -1,20 +1,10 @@
-
+
diff --git a/pages/notifications/mention.vue b/pages/notifications/mention.vue
index 97a50781..a85c87c8 100644
--- a/pages/notifications/mention.vue
+++ b/pages/notifications/mention.vue
@@ -1,20 +1,10 @@
-
+
diff --git a/pages/pinned.vue b/pages/pinned.vue
index 7094b55f..a88a16e6 100644
--- a/pages/pinned.vue
+++ b/pages/pinned.vue
@@ -18,6 +18,6 @@ useHeadFixed({
{{ t('account.pinned') }}
-
+
diff --git a/plugins/masto.ts b/plugins/masto.ts
index 1fd0ac5b..a3cecbed 100644
--- a/plugins/masto.ts
+++ b/plugins/masto.ts
@@ -2,7 +2,8 @@ export default defineNuxtPlugin(async (nuxtApp) => {
const masto = createMasto()
if (process.client) {
- const { query } = useRoute()
+ const { query, path } = useRoute()
+ const router = useRouter()
const user = typeof query.server === 'string' && typeof query.token === 'string'
? {
server: query.server,
@@ -13,8 +14,13 @@ export default defineNuxtPlugin(async (nuxtApp) => {
nuxtApp.hook('app:suspense:resolve', () => {
// TODO: improve upstream to make this synchronous (delayed auth)
- if (!masto.loggedIn.value)
- masto.loginTo(user)
+ if (!masto.loggedIn.value) {
+ masto.loginTo(user).then(() => {
+ // This only cleans up the URL; page content should stay the same
+ if (path === '/signin/callback')
+ router.push('/home')
+ })
+ }
})
}