diff --git a/components/account/AccountMe.client.vue b/components/account/AccountMe.client.vue index 6e3865c2..c60f29ab 100644 --- a/components/account/AccountMe.client.vue +++ b/components/account/AccountMe.client.vue @@ -1,13 +1,17 @@ <script setup lang="ts"> -const { currentUser } = useAppStore() +const { currentUser } = $(useAppStore()) + +const account = $computed(() => currentUser?.account) </script> <template> <div flex flex-col gap-4 p4> <!-- TODO: multiple account switcher --> - <AccountInfo v-if="currentUser?.account" :account="currentUser.account" /> + <template v-if="account"> + <AccountInfo :account="account" /> + <PublishWidget /> + </template> <!-- 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 index 80cba750..d15d0ba1 100644 --- a/components/publish/PublishWidget.vue +++ b/components/publish/PublishWidget.vue @@ -1,12 +1,26 @@ <script setup lang="ts"> +const masto = await useMasto() +let draftPost = $ref('') +let isSending = $ref(false) + +async function publish() { + try { + isSending = true + await masto.statuses.create({ status: draftPost }) + draftPost = '' + } + finally { + isSending = false + } +} </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 flex-col gap-4 :class="isSending ? ' pointer-events-none' : ''"> + <textarea v-model="draftPost" 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> + <button h-9 w-22 bg-primary border-rounded :disabled="draftPost === ''" @click="publish"> Publish! </button> </div>