diff --git a/components/account/AccountMe.client.vue b/components/account/AccountMe.client.vue index 05979ead..6e3865c2 100644 --- a/components/account/AccountMe.client.vue +++ b/components/account/AccountMe.client.vue @@ -3,10 +3,11 @@ const { currentUser } = useAppStore() </script> <template> - <div p4> + <div flex flex-col gap-4 p4> <!-- TODO: multiple account switcher --> <AccountInfo v-if="currentUser?.account" :account="currentUser.account" /> <!-- TODO: dialog for select server --> <a v-else href="/api/mas.to/login" px2 py1 bg-teal6 text-white m2 rounded>Login</a> + <PublishWidget /> </div> </template> diff --git a/components/publish/PublishWidget.vue b/components/publish/PublishWidget.vue new file mode 100644 index 00000000..80cba750 --- /dev/null +++ b/components/publish/PublishWidget.vue @@ -0,0 +1,14 @@ +<script setup lang="ts"> + +</script> + +<template> + <div flex flex-col gap-4> + <textarea p2 border-rounded w-full h-40 color-black placeholder="What's on your mind?" /> + <div flex justify-end> + <button h-9 w-22 bg-primary border-rounded> + Publish! + </button> + </div> + </div> +</template> diff --git a/layouts/default.vue b/layouts/default.vue index afb19393..406b4e23 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -3,7 +3,7 @@ <main grid="~ lg:cols-[1fr_40rem_1fr]" max-w-70rem mxa h-full> <div> <slot name="left"> - <NavTitle p4 /> + <AccountMe /> </slot> </div> <div h-full of-auto border="l r border"> @@ -11,7 +11,7 @@ </div> <div flex="~ col"> <slot name="right"> - <AccountMe /> + <NavTitle p5 /> <NavSide border="y border" py8 /> <div flex-auto /> <NavFooter /> diff --git a/plugins/store.client.ts b/plugins/store.client.ts index aaba9e4f..4579af90 100644 --- a/plugins/store.client.ts +++ b/plugins/store.client.ts @@ -4,15 +4,24 @@ import type { UserLogin } from '~/types' function createStore() { const { server, token } = useAppCookies() const accounts = useLocalStorage<UserLogin[]>('nuxtodon-accounts', [], { deep: true }) - const currentIndex = useLocalStorage<number>('nuxtodon-current-user', -1) - const currentUser = computed<UserLogin | undefined>(() => accounts.value[currentIndex.value]) + const currentId = useLocalStorage<string>('nuxtodon-current-user', '') + const currentUser = computed<UserLogin | undefined>(() => { + let user: UserLogin | undefined + if (currentId.value) { + user = accounts.value.find(user => user.account?.id === currentId.value) + if (user) + return user + } + // Fallback to the first account + return accounts.value[0] + }) async function login(user: UserLogin) { const existing = accounts.value.findIndex(u => u.server === user.server && u.token === user.token) if (existing !== -1) { - if (currentIndex.value === existing) + if (currentId.value === accounts.value[existing].account?.id) return null - currentIndex.value = existing + currentId.value = user.account?.id server.value = user.server token.value = user.token return true @@ -26,10 +35,9 @@ function createStore() { user.account = me accounts.value.push(user) - currentIndex.value = accounts.value.length + currentId.value = me.id server.value = user.server token.value = user.token - return true }