From 5aab02495703198d790c4d66e8e78fe4a60c8795 Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Sun, 7 Jul 2024 23:03:25 +0200 Subject: [PATCH 1/3] feat:#18 added default page setting --- frontend/src/App.vue | 13 ++++-- .../src/components/DefaultPageSwitcher.vue | 41 +++++++++++++++++++ frontend/src/helpers/theme.ts | 13 ++---- frontend/src/i18n/translations/de.json | 3 +- frontend/src/i18n/translations/en.json | 3 +- frontend/src/i18n/translations/ja.json | 3 +- frontend/src/store/settingsStore.ts | 21 +++++++++- frontend/src/view/SettingsView.vue | 9 ++++ 8 files changed, 89 insertions(+), 17 deletions(-) create mode 100644 frontend/src/components/DefaultPageSwitcher.vue diff --git a/frontend/src/App.vue b/frontend/src/App.vue index ff32417..faf17a4 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -26,6 +26,7 @@ import { VueQueryDevtools } from "@tanstack/vue-query-devtools"; import settingsStore from "@/store/settingsStore.ts"; import { setTheme } from "@/helpers/theme.ts"; import { usePrimeVue } from "primevue/config"; +import router from "@/router"; const primeVue = usePrimeVue(); @@ -56,17 +57,23 @@ const updateMobile = () => { updateMobile(); window.addEventListener("resize", updateMobile); -const settings = settingsStore(); +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) + 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) + settings().setDarkMode(e.matches) setTheme(settings, primeVue, emit); }); + + // check if default page is set + if (settings().defaultPage != "") { + router.push({ name: settings().defaultPage }); + } + }); diff --git a/frontend/src/components/DefaultPageSwitcher.vue b/frontend/src/components/DefaultPageSwitcher.vue new file mode 100644 index 0000000..6055ec0 --- /dev/null +++ b/frontend/src/components/DefaultPageSwitcher.vue @@ -0,0 +1,41 @@ + + + + diff --git a/frontend/src/helpers/theme.ts b/frontend/src/helpers/theme.ts index 43b0c8f..07f5643 100644 --- a/frontend/src/helpers/theme.ts +++ b/frontend/src/helpers/theme.ts @@ -15,26 +15,21 @@ //along with this program. If not, see . import { ref } from "vue"; -import { Store } from "pinia"; import { PrimeVueChangeTheme } from "primevue/config"; import { EmitFn } from "primevue/ts-helpers"; -import { RemovableRef } from "@vueuse/core"; +import settingsStore from "@/store/settingsStore.ts"; const darkTheme = ref("lara-dark-blue"), lightTheme = ref("lara-light-blue"); -type SettingsStore = Store<"settingsStore", { locale: RemovableRef, isDark: boolean }, NonNullable, { - setLocale(locale: string): void, - setDarkMode(isDark: boolean): void, - getDarkMode(): boolean -}>; +export type SettingsStore = typeof settingsStore; export function toggleTheme( store: SettingsStore, primeVue: { changeTheme: PrimeVueChangeTheme }, emit: EmitFn<"dark-mode-toggled"[]>, ): void { - store.setDarkMode(!store.isDark); + store().setDarkMode(!store().isDark); setTheme(store, primeVue, emit); } @@ -43,7 +38,7 @@ export function setTheme( { changeTheme }: { changeTheme: PrimeVueChangeTheme }, emit: EmitFn<"dark-mode-toggled"[]> ) { - const isDark = ref(store.isDark); + const isDark = ref(store().isDark); const newTheme = isDark.value ? darkTheme.value : lightTheme.value, oldTheme = isDark.value ? lightTheme.value : darkTheme.value; changeTheme(oldTheme, newTheme, "theme-link", () => { }); diff --git a/frontend/src/i18n/translations/de.json b/frontend/src/i18n/translations/de.json index 70af13d..42d7a80 100644 --- a/frontend/src/i18n/translations/de.json +++ b/frontend/src/i18n/translations/de.json @@ -254,6 +254,7 @@ "headline": "Einstellungen", "subTitle": "Hier kannst du deine Einstellungen bearbeiten.", "language": "Sprache einstellen", - "darkMode": "Design auswählen" + "darkMode": "Design auswählen", + "defaultPage": "Standardseite" } } diff --git a/frontend/src/i18n/translations/en.json b/frontend/src/i18n/translations/en.json index 5db0af9..ecfe217 100644 --- a/frontend/src/i18n/translations/en.json +++ b/frontend/src/i18n/translations/en.json @@ -254,6 +254,7 @@ "headline": "Settings", "subTitle": "Here you can change your settings.", "language": "Choose your language", - "darkMode": "Switch page theme" + "darkMode": "Switch page theme", + "defaultPage": "Default page" } } diff --git a/frontend/src/i18n/translations/ja.json b/frontend/src/i18n/translations/ja.json index b223c11..76e6751 100644 --- a/frontend/src/i18n/translations/ja.json +++ b/frontend/src/i18n/translations/ja.json @@ -254,6 +254,7 @@ "headline": "設定", "subTitle": "ここで設定を編集できます。", "language": "言語", - "darkMode": "ダークモード" + "darkMode": "ダークモード", + "defaultPage": "デフォルトページ" } } diff --git a/frontend/src/store/settingsStore.ts b/frontend/src/store/settingsStore.ts index 55021be..106f675 100644 --- a/frontend/src/store/settingsStore.ts +++ b/frontend/src/store/settingsStore.ts @@ -16,12 +16,14 @@ import { defineStore } from "pinia"; import { useLocalStorage } from "@vueuse/core"; +import router from "@/router"; const settingsStore = defineStore("settingsStore", { state: () => { return { locale: useLocalStorage("locale", "en"), //useLocalStorage takes in a key of 'count' and default value of 0 isDark: true, + defaultPage: useLocalStorage("defaultPage", ""), }; }, actions: { @@ -33,8 +35,23 @@ const settingsStore = defineStore("settingsStore", { }, getDarkMode(): boolean { return this.isDark; - } + }, + setDefaultPage(page: string) { + this.defaultPage = page; + }, + getDefaultPageOptions(): string[] { + // get a string array of all the route names + const options: string[] = []; + router.getRoutes().forEach((route) => { + if (route.name) { + if (typeof route.name === "string") { + options.push(route.name); + } + } + }); + return options; + }, }, }); -export default settingsStore; +export default settingsStore; \ No newline at end of file diff --git a/frontend/src/view/SettingsView.vue b/frontend/src/view/SettingsView.vue index b52550f..65a3cb4 100644 --- a/frontend/src/view/SettingsView.vue +++ b/frontend/src/view/SettingsView.vue @@ -3,6 +3,7 @@ import LocaleSwitcher from "@/components/LocaleSwitcher.vue"; import { ref } from "vue"; import DarkModeSwitcher from "@/components/DarkModeSwitcher.vue"; +import DefaultPageSwitcher from "@/components/DefaultPageSwitcher.vue"; const icon = "pi pi-cog"; const isDark = ref(true); @@ -44,6 +45,14 @@ class="opacity-100 transition-all transition-duration-500 transition-ease-in-out +
+
+ {{ $t("settings.defaultPage") }} +
+
+ +
+
{{ $t("settings.darkMode") }} From 059b8ca24bb680c5a1884dcc7d3b89e93d16b47a Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Sun, 7 Jul 2024 23:08:04 +0200 Subject: [PATCH 2/3] feat:#18 fixed type --- frontend/src/components/DarkModeSwitcher.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/DarkModeSwitcher.vue b/frontend/src/components/DarkModeSwitcher.vue index 452825e..cba77f8 100644 --- a/frontend/src/components/DarkModeSwitcher.vue +++ b/frontend/src/components/DarkModeSwitcher.vue @@ -26,9 +26,9 @@ const primeVue = usePrimeVue(); const emit = defineEmits(["dark-mode-toggled"]); -const store = settingsStore(); +const store = settingsStore; -const isDark = computed(() => store.isDark); +const isDark = computed(() => store().isDark); From 5330ade54e1766eb88ff6c74e9b41efbb9e0f084 Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Sun, 21 Jul 2024 22:21:14 +0200 Subject: [PATCH 3/3] fix:#18 reroute for default page only applies to empty paths --- frontend/src/App.vue | 8 ----- .../src/components/DefaultPageSwitcher.vue | 10 ++++-- frontend/src/i18n/translations/de.json | 4 +++ frontend/src/i18n/translations/en.json | 4 +++ frontend/src/i18n/translations/ja.json | 4 +++ frontend/src/router/index.ts | 31 ++++++++++++++++--- frontend/src/store/settingsStore.ts | 26 +++++++++++----- frontend/src/view/NotFound.vue | 16 ++++++++++ 8 files changed, 80 insertions(+), 23 deletions(-) create mode 100644 frontend/src/view/NotFound.vue diff --git a/frontend/src/App.vue b/frontend/src/App.vue index faf17a4..c617135 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -26,8 +26,6 @@ import { VueQueryDevtools } from "@tanstack/vue-query-devtools"; import settingsStore from "@/store/settingsStore.ts"; import { setTheme } from "@/helpers/theme.ts"; import { usePrimeVue } from "primevue/config"; -import router from "@/router"; - const primeVue = usePrimeVue(); const disabledPages = [ @@ -68,12 +66,6 @@ onMounted(() => { settings().setDarkMode(e.matches) setTheme(settings, primeVue, emit); }); - - // check if default page is set - if (settings().defaultPage != "") { - router.push({ name: settings().defaultPage }); - } - }); diff --git a/frontend/src/components/DefaultPageSwitcher.vue b/frontend/src/components/DefaultPageSwitcher.vue index 6055ec0..8e44937 100644 --- a/frontend/src/components/DefaultPageSwitcher.vue +++ b/frontend/src/components/DefaultPageSwitcher.vue @@ -17,14 +17,17 @@ along with this program. If not, see . --> + + + + \ No newline at end of file