85 lines
2.4 KiB
Vue
85 lines
2.4 KiB
Vue
<script setup>
|
|
import navItems from '@/navigation/vertical';
|
|
import { themeConfig } from '@themeConfig';
|
|
import { useStore } from 'vuex';
|
|
const store = useStore()
|
|
// Components
|
|
import Footer from '@/layouts/components/Footer.vue';
|
|
import NavBarNotifications from '@/layouts/components/NavBarNotifications.vue';
|
|
import NavSearchBar from '@/layouts/components/NavSearchBar.vue';
|
|
import NavbarShortcuts from '@/layouts/components/NavbarShortcuts.vue';
|
|
import NavbarThemeSwitcher from '@/layouts/components/NavbarThemeSwitcher.vue';
|
|
import UserProfile from '@/layouts/components/UserProfile.vue';
|
|
import NavBarI18n from '@core/components/I18n.vue';
|
|
|
|
// @layouts plugin
|
|
import { VerticalNavLayout } from '@layouts';
|
|
|
|
// SECTION: Loading Indicator
|
|
const isFallbackStateActive = ref(false)
|
|
const refLoadingIndicator = ref(null)
|
|
|
|
watch([
|
|
isFallbackStateActive,
|
|
refLoadingIndicator,
|
|
], () => {
|
|
if (isFallbackStateActive.value && refLoadingIndicator.value)
|
|
refLoadingIndicator.value.fallbackHandle()
|
|
if (!isFallbackStateActive.value && refLoadingIndicator.value)
|
|
refLoadingIndicator.value.resolveHandle()
|
|
}, { immediate: true })
|
|
// !SECTION
|
|
</script>
|
|
|
|
<template>
|
|
|
|
<VerticalNavLayout :nav-items="navItems">
|
|
<!-- 👉 navbar -->
|
|
<template #navbar="{ toggleVerticalOverlayNavActive }">
|
|
<div class="d-flex h-100 align-center">
|
|
<IconBtn
|
|
id="vertical-nav-toggle-btn"
|
|
class="ms-n2 d-lg-none"
|
|
@click="toggleVerticalOverlayNavActive(true)"
|
|
>
|
|
<VIcon icon="ri-menu-line" />
|
|
</IconBtn>
|
|
|
|
<NavSearchBar class="ms-lg-n2" />
|
|
|
|
<VSpacer />
|
|
|
|
<NavBarI18n
|
|
v-if="themeConfig.app.i18n.enable && themeConfig.app.i18n.langConfig?.length"
|
|
:languages="themeConfig.app.i18n.langConfig"
|
|
/>
|
|
<NavbarThemeSwitcher />
|
|
<NavbarShortcuts />
|
|
<NavBarNotifications class="me-2" />
|
|
<UserProfile />
|
|
</div>
|
|
</template>
|
|
|
|
<AppLoadingIndicator ref="refLoadingIndicator" />
|
|
|
|
<!-- 👉 Pages -->
|
|
<RouterView v-slot="{ Component }">
|
|
<Suspense
|
|
:timeout="0"
|
|
@fallback="isFallbackStateActive = true"
|
|
@resolve="isFallbackStateActive = false"
|
|
>
|
|
<Component :is="Component" />
|
|
</Suspense>
|
|
</RouterView>
|
|
|
|
<!-- 👉 Footer -->
|
|
<template #footer>
|
|
<Footer />
|
|
</template>
|
|
|
|
<!-- 👉 Customizer -->
|
|
<TheCustomizer />
|
|
</VerticalNavLayout>
|
|
</template>
|