diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 16c3545..ff32417 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -21,8 +21,13 @@ import MenuBar from "./components/MenuBar.vue"; import { RouteRecordName, RouterView } from "vue-router"; import CalendarPreview from "./components/CalendarPreview.vue"; import moduleStore from "./store/moduleStore.ts"; -import { provide, ref } from "vue"; +import { onMounted, provide, ref } from "vue"; import { VueQueryDevtools } from "@tanstack/vue-query-devtools"; +import settingsStore from "@/store/settingsStore.ts"; +import { setTheme } from "@/helpers/theme.ts"; +import { usePrimeVue } from "primevue/config"; + +const primeVue = usePrimeVue(); const disabledPages = [ "room-finder", @@ -33,7 +38,7 @@ const disabledPages = [ "edit-calendar", "rooms", "free-rooms", - "room-schedule", + "room-schedule" ]; const store = moduleStore(); @@ -49,14 +54,26 @@ const updateMobile = () => { }; updateMobile(); - window.addEventListener("resize", updateMobile); + +const settings = settingsStore(); +const emit = defineEmits(["dark-mode-toggled"]); + +onMounted(() => { +// set theme matching browser preference + settings.setDarkMode(window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) + setTheme(settings, primeVue, emit); + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e) => { + settings.setDarkMode(e.matches) + setTheme(settings, primeVue, emit); + }); +});