From 093b5bf9a98161c9d62a22e18b876df5f5b234a6 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 30 Nov 2025 00:57:20 +0800 Subject: [PATCH] :lipstick: Better join realm --- app/pages/realms/[slug].vue | 69 +++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/app/pages/realms/[slug].vue b/app/pages/realms/[slug].vue index 757f94f..d64bc57 100644 --- a/app/pages/realms/[slug].vue +++ b/app/pages/realms/[slug].vue @@ -7,7 +7,9 @@ :style="pageStyle" /> -
+
Join Realm + + + You already joined this realm, + + go to the realm page instead. + +
@@ -160,6 +178,21 @@ > + +
+ + + Join Realm + +
@@ -309,6 +342,8 @@ const api = useSolarNetwork() const notFound = ref(false) const realm = ref(null) const isJoining = ref(false) +const isMember = ref(false) +const checkingMembership = ref(false) // Check if we're in invite mode const isInviteMode = computed(() => { @@ -433,6 +468,24 @@ const cycleIncludeReplies = () => { } } +// Check membership status +async function checkMembership() { + if (!realm.value) return + + checkingMembership.value = true + try { + await api(`/id/realms/${realm.value.slug}/members/me`, { + method: "GET" + }) + isMember.value = true + } catch (err) { + // 404 means not a member + isMember.value = false + } finally { + checkingMembership.value = false + } +} + // Handle join realm async function handleJoin() { if (!realm.value) return @@ -443,8 +496,11 @@ async function handleJoin() { method: "POST" }) message.success(`Successfully joined ${realm.value.name}!`) - // Redirect to the realm page without invite query - await navigateTo(`/realms/${realm.value.slug}`) + isMember.value = true + // Redirect to the realm page without invite query if in invite mode + if (isInviteMode.value) { + await navigateTo(`/realms/${realm.value.slug}`) + } } catch (err) { message.error(err instanceof Error ? err.message : String(err)) } finally { @@ -452,6 +508,13 @@ async function handleJoin() { } } +// Check membership on mount +onMounted(() => { + if (realm.value) { + checkMembership() + } +}) + definePageMeta({ title: "Realms", alias: ["/r/:slug()"]