elearning/Frontend-Learner/app.vue

39 lines
1.2 KiB
Vue
Raw Normal View History

<script setup lang="ts">
/**
* @file app.vue
* @description Root application component.
* Handles initialization of authentication and theme settings.
*/
// Initialize composables
2026-01-14 15:15:31 +07:00
const { fetchUserProfile, isAuthenticated } = useAuth()
const { isDark, set: setTheme } = useThemeMode()
2026-01-14 15:15:31 +07:00
// App initialization logic
2026-01-14 15:15:31 +07:00
onMounted(() => {
// 1. Fetch user profile if tokens exist
2026-01-14 15:15:31 +07:00
if (isAuthenticated.value) {
fetchUserProfile()
}
2026-01-23 13:27:19 +07:00
// 2. Initialize theme from persistent storage or system preference
2026-01-23 13:27:19 +07:00
const savedTheme = localStorage.getItem('theme')
if (savedTheme) {
setTheme(savedTheme === 'dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
setTheme(true)
2026-01-23 13:27:19 +07:00
}
2026-01-14 15:15:31 +07:00
})
</script>
2026-01-13 10:46:40 +07:00
<template>
<!-- แสดง Loader ระหวางเปลยนหน หรอโหลดขอม -->
2026-01-13 12:55:21 +07:00
<GlobalLoader />
<!-- NuxtLayout: แสดง Layout กำหนดในแตละเพจ (default: layouts/default.vue) -->
2026-01-13 10:46:40 +07:00
<NuxtLayout>
<!-- NuxtPage: แสดงเนอหาของเพจปจจ (ตาม URL routng) -->
2026-01-13 10:46:40 +07:00
<NuxtPage />
</NuxtLayout>
</template>