From 4f50f3a7c37fe917b69d2e35baa5e110ffb7dfef Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Tue, 2 Jul 2024 11:01:44 +0200 Subject: [PATCH] fix:#20 first fix auto dark mode switch --- frontend/src/App.vue | 24 ++++++++++-- frontend/src/components/DarkModeSwitcher.vue | 38 ++++--------------- frontend/src/components/LocaleSwitcher.vue | 6 +-- frontend/src/helpers/theme.ts | 35 +++++++++++++++++ frontend/src/i18n/index.ts | 4 +- frontend/src/main.ts | 10 +++-- .../{localeStore.ts => settingsStore.ts} | 11 +++++- 7 files changed, 83 insertions(+), 45 deletions(-) create mode 100644 frontend/src/helpers/theme.ts rename frontend/src/store/{localeStore.ts => settingsStore.ts} (83%) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 16c3545..843c0d8 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(); @@ -51,12 +56,25 @@ const updateMobile = () => { updateMobile(); window.addEventListener("resize", updateMobile); + +const settings = settingsStore(); +const emit = defineEmits(["dark-mode-toggled"]); + +onMounted(() => { +// set theme matching browser preference + setTheme(settings, primeVue, emit, (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches)); + + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e) => { + setTheme(settings, primeVue, emit, e.matches); + }); +}); +