<template> <v-app dark> <AppSidebar v-model="sidebar" absolute :top-link="topLinks" :bottom-links="bottomLinks" :user="{ data: true }" :secondary-header="$t('sidebar.developer')" :secondary-links="developerLinks" /> <TheSnackbar /> <AppHeader> <v-btn icon @click.stop="sidebar = !sidebar"> <v-icon> {{ $globals.icons.menu }}</v-icon> </v-btn> </AppHeader> <v-main> <v-scroll-x-transition> <Nuxt /> </v-scroll-x-transition> </v-main> </v-app> </template> <script lang="ts"> import { defineComponent, ref, useContext, onMounted } from "@nuxtjs/composition-api"; import AppHeader from "@/components/Layout/LayoutParts/AppHeader.vue"; import AppSidebar from "@/components/Layout/LayoutParts/AppSidebar.vue"; import TheSnackbar from "~/components/Layout/LayoutParts/TheSnackbar.vue"; import { SidebarLinks } from "~/types/application-types"; export default defineComponent({ components: { AppHeader, AppSidebar, TheSnackbar }, middleware: ["auth", "admin-only"], auth: true, setup() { const { $globals, i18n, $vuetify } = useContext(); const sidebar = ref<boolean | null>(null); onMounted(() => { sidebar.value = !$vuetify.breakpoint.md; }); const topLinks: SidebarLinks = [ { icon: $globals.icons.cog, to: "/admin/site-settings", title: i18n.tc("sidebar.site-settings"), restricted: true, }, // { // icon: $globals.icons.chart, // to: "/admin/analytics", // title: "Analytics", // restricted: true, // }, { icon: $globals.icons.user, to: "/admin/manage/users", title: i18n.tc("user.users"), restricted: true, }, { icon: $globals.icons.household, to: "/admin/manage/households", title: i18n.tc("household.households"), restricted: true, }, { icon: $globals.icons.group, to: "/admin/manage/groups", title: i18n.tc("group.groups"), restricted: true, }, { icon: $globals.icons.database, to: "/admin/backups", title: i18n.tc("sidebar.backups"), restricted: true, }, ]; const developerLinks: SidebarLinks = [ { icon: $globals.icons.wrench, to: "/admin/maintenance", title: i18n.tc("sidebar.maintenance"), restricted: true, }, { icon: $globals.icons.robot, title: i18n.tc("recipe.debug"), restricted: true, children: [ { icon: $globals.icons.robot, to: "/admin/debug/openai", title: i18n.tc("admin.openai"), restricted: true, }, { icon: $globals.icons.slotMachine, to: "/admin/debug/parser", title: i18n.tc("sidebar.parser"), restricted: true, }, ] }, ]; const bottomLinks: SidebarLinks = [ { icon: $globals.icons.heart, title: i18n.tc("about.support"), href: "https://github.com/sponsors/hay-kot", restricted: true, }, ]; return { sidebar, topLinks, bottomLinks, developerLinks, }; }, }); </script>