11<script setup lang="ts">
22import { onMounted , ref } from ' vue'
3- import { useRoute } from ' vue-router'
3+ import { useRouter , useRoute } from ' vue-router'
44import { useAuthStore } from ' @/stores/auth'
55import AppSidebar from ' @/components/AppSidebar.vue'
66import AppLayoutHeader from ' @/components/AppLayoutHeader.vue'
77import DialogContainer from ' @/components/DialogContainer.vue'
88import { SidebarInset , SidebarProvider } from ' @/components/ui/sidebar'
99import { TooltipProvider } from ' @/components/ui/tooltip'
10+ import { client } from ' @/client/client.gen'
1011
1112import ' vue-sonner/style.css'
1213import { Toaster } from ' @/components/ui/sonner'
1314
1415const authStore = useAuthStore ()
16+ const router = useRouter ()
1517const route = useRoute ()
1618const isCheckingAuth = ref (true )
19+ const isCheckingSetup = ref (true )
20+ const needsSetup = ref (false )
1721
1822onMounted (async () => {
23+ // Check setup status once on page load
24+ try {
25+ const response = await client .get ({ url: ' /v1/setup/status' })
26+ needsSetup .value = ! (response as any ).data .initialized
27+ if (needsSetup .value && route .path !== ' /setup' ) {
28+ router .push (' /setup' )
29+ }
30+ } catch {
31+ // If setup check fails, assume initialized
32+ needsSetup .value = false
33+ }
34+ isCheckingSetup .value = false
35+
1936 // Rehydrate auth token from localStorage
2037 if (! authStore .token ) {
2138 await authStore .rehydrate ()
@@ -28,7 +45,7 @@ onMounted(async () => {
2845 <TooltipProvider >
2946 <Toaster position =" top-center" />
3047 <DialogContainer />
31- <div v-if =" isCheckingAuth" class =" flex min-h-svh items-center justify-center" >
48+ <div v-if =" isCheckingAuth || isCheckingSetup " class =" flex min-h-svh items-center justify-center" >
3249 <div class =" text-muted-foreground" >Loading...</div >
3350 </div >
3451 <router-view v-else-if =" route.meta.public" />
0 commit comments