From 0f20374d66ded5431367f6d622a400b933be1704 Mon Sep 17 00:00:00 2001 From: PetJer Date: Tue, 4 Feb 2025 18:34:06 +0100 Subject: [PATCH 1/6] Add notifications UI/UX --- website/package.json | 2 + website/src/App.vue | 2 + .../src/components/NotificationsSetTime.vue | 45 + website/src/components/SettingsBaseAction.vue | 12 +- website/src/components/SettingsBaseSwitch.vue | 14 +- .../src/components/SettingsSelectEntity.vue | 5 + .../components/SettingsSelectMenuLunch.vue | 6 + .../components/SettingsSelectMenuSnack.vue | 6 + website/src/main.ts | 3 + website/src/plugins/firebase.ts | 12 + website/src/plugins/vuetify.ts | 5 + website/src/router/index.ts | 2 + website/src/stores/notifications.ts | 49 + website/src/views/ViewNotifications.vue | 136 +++ website/yarn.lock | 845 +++++++++++++++++- 15 files changed, 1131 insertions(+), 13 deletions(-) create mode 100644 website/src/components/NotificationsSetTime.vue create mode 100644 website/src/plugins/firebase.ts create mode 100644 website/src/stores/notifications.ts create mode 100644 website/src/views/ViewNotifications.vue diff --git a/website/package.json b/website/package.json index bff2ddd..551eeeb 100644 --- a/website/package.json +++ b/website/package.json @@ -30,11 +30,13 @@ "@sentry/core": "^8.47.0", "@sentry/vue": "^8.47.0", "@vueuse/core": "^12.2.0", + "firebase": "^11.1.0", "pinia": "^2.3.0", "pinia-plugin-persistedstate": "^4.2.0", "pulltorefreshjs": "^0.1.22", "vue": "^3.5.13", "vue-router": "^4.5.0", + "vuefire": "^3.2.1", "vuetify": "^3.7.6" }, "devDependencies": { diff --git a/website/src/App.vue b/website/src/App.vue index 5db4f12..a9e8779 100644 --- a/website/src/App.vue +++ b/website/src/App.vue @@ -1,5 +1,6 @@ + + + + diff --git a/website/src/components/SettingsBaseAction.vue b/website/src/components/SettingsBaseAction.vue index 3a929a8..9593ff7 100644 --- a/website/src/components/SettingsBaseAction.vue +++ b/website/src/components/SettingsBaseAction.vue @@ -2,9 +2,10 @@ const model = defineModel() const { callback } = defineProps<{ - icon: string - messages?: string label: string + messages?: string + icon: string + disabled?: boolean callback?: () => void }>() @@ -18,6 +19,7 @@ function doAction() { .v-input__control { + opacity: var(--v-disabled-opacity); +} diff --git a/website/src/components/SettingsBaseSwitch.vue b/website/src/components/SettingsBaseSwitch.vue index cb8bdd2..d656cf0 100644 --- a/website/src/components/SettingsBaseSwitch.vue +++ b/website/src/components/SettingsBaseSwitch.vue @@ -1,14 +1,20 @@ diff --git a/website/src/components/SettingsSelectEntity.vue b/website/src/components/SettingsSelectEntity.vue index 70e4d38..bf71e62 100644 --- a/website/src/components/SettingsSelectEntity.vue +++ b/website/src/components/SettingsSelectEntity.vue @@ -6,6 +6,7 @@ import { useRouter } from 'vue-router' import { useSnackbarStore } from '@/composables/snackbar' import { useListsStore } from '@/stores/lists' +import { useNotificationsStore } from '@/stores/notifications' import { EntityType, useSettingsStore } from '@/stores/settings' import { sortEntities } from '@/utils/entities' import { localizeSelectEntityNotSelected, localizeSelectEntityTitle } from '@/utils/localization' @@ -16,6 +17,8 @@ const { fullPage } = defineProps<{ fullPage?: boolean }>() const router = useRouter() +const notificationsStore = useNotificationsStore() + const settingsStore = useSettingsStore() const { displaySnackbar } = useSnackbarStore() @@ -197,6 +200,8 @@ function handleSaveEntityList() { // Navigate to the correct timetable route or close the dialog if (fullPage) router.push(generateTimetableRoute(selectedType.value, selectedList.value)) else displayed.value = false + + notificationsStore.updateUserFirestoreData() } diff --git a/website/src/components/SettingsSelectMenuLunch.vue b/website/src/components/SettingsSelectMenuLunch.vue index ccd8583..db5413b 100644 --- a/website/src/components/SettingsSelectMenuLunch.vue +++ b/website/src/components/SettingsSelectMenuLunch.vue @@ -1,12 +1,18 @@