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"
/>
-
+
@@ -81,6 +84,21 @@
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()"]