frontend/pages/[username]/index.vue

56 lines
1.7 KiB
Vue
Raw Normal View History

<template>
<ErrorsErrorBoundary>
<div class="mx-auto max-w-2xl w-full">
<LazyTimelinesTimelineScroller>
<LazySocialElementsUsersAccount :account="account ?? undefined" />
<LazyTimelinesAccount :id="accountId" :key="accountId" />
</LazyTimelinesTimelineScroller>
</div>
</ErrorsErrorBoundary>
</template>
<script setup lang="ts">
import type { Account } from "@lysand-org/client/types";
definePageMeta({
layout: "app",
});
const route = useRoute();
const client = useClient();
const username = (route.params.username as string).replace("@", "");
const accounts = useAccountSearch(client, username);
watch(accounts, (newValue) => {
if (Array.isArray(newValue)) {
if (!newValue.find((account) => account.acct === username)) {
useEvent("error", {
title: "Account not found",
message: `The account <code>@${username}</code> does not exist.`,
code: "ERR_ACCOUNT_NOT_FOUND",
});
}
}
});
const account = computed<Account | null>(
() => accounts.value?.find((account) => account.acct === username) ?? null,
);
const accountId = computed(() => account.value?.id ?? undefined);
useServerSeoMeta({
title: computed(() =>
account.value ? account.value.display_name : "Loading",
),
ogTitle: computed(() =>
account.value ? account.value.display_name : "Loading",
),
ogImage: computed(() => (account.value ? account.value.avatar : undefined)),
ogType: "profile",
ogDescription: computed(() =>
account.value ? account.value.note : undefined,
),
description: computed(() =>
account.value ? account.value.note : undefined,
),
});
</script>