From a4904ee80dcc050ba41e8a97adae510ae1a9200d Mon Sep 17 00:00:00 2001 From: Nicolas Drolet Date: Fri, 28 Nov 2025 10:54:38 -0500 Subject: [PATCH] feat(profile): finalize get/update of user preferences, begin planning for employee-management module --- src/App.vue | 8 +- src/i18n/en-ca/index.ts | 6 +- src/i18n/fr-ca/index.ts | 6 +- src/layouts/main-layout.vue | 55 +++++++--- .../components/login-connection-panel.vue | 24 ++--- .../components/employee-list-table.vue | 36 ++++--- .../employee-list-add-modify-dialog.vue | 6 +- .../models/employee-profile.models.ts | 100 ++++++++++-------- .../services/employee-list-service.ts | 11 +- .../components/employee/menu-employee.vue | 4 +- .../employee/menu-panel-employee.vue | 61 ++++++----- .../employee/menu-panel-personal.vue | 39 ++++--- .../shared/menu-panel-input-field.vue | 20 ++-- .../shared/menu-panel-preferences.vue | 95 +++++++---------- .../shared/menu-panel-select-field.vue | 32 ++++-- .../components/shared/menu-template.vue | 48 ++++----- .../profile/models/preferences.models.ts | 21 ++++ .../profile/services/profile-service.ts | 15 +++ .../shared/components/language-switch.vue | 71 +++++++------ .../shared/models/backend-response.models.ts | 5 + src/pages/profile-page.vue | 23 +++- src/router/router-constants.ts | 9 +- src/stores/employee-store.ts | 25 +++-- src/stores/ui-store.ts | 69 +++++++++++- 24 files changed, 493 insertions(+), 296 deletions(-) create mode 100644 src/modules/profile/models/preferences.models.ts create mode 100644 src/modules/profile/services/profile-service.ts create mode 100644 src/modules/shared/models/backend-response.models.ts diff --git a/src/App.vue b/src/App.vue index dfc3050..337fe3b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,7 +1,9 @@ - \ No newline at end of file diff --git a/src/i18n/en-ca/index.ts b/src/i18n/en-ca/index.ts index 842d03a..1b03a4a 100644 --- a/src/i18n/en-ca/index.ts +++ b/src/i18n/en-ca/index.ts @@ -61,10 +61,14 @@ export default { }, preferences: { tab_title: "preferences", - display_options: "display options", + display_options: "Color mode", language_options: "language options", + 'fr-FR': "French", + 'en-CA': "English", dark_mode: "dark", light_mode: "light", + update_successful: "Preferences saved", + update_failed: "Failed to save preferences", }, schedule_presets: { tab_title: "Schedule", diff --git a/src/i18n/fr-ca/index.ts b/src/i18n/fr-ca/index.ts index 3283e4e..929145d 100644 --- a/src/i18n/fr-ca/index.ts +++ b/src/i18n/fr-ca/index.ts @@ -61,10 +61,14 @@ export default { }, preferences: { tab_title: "préférences", - display_options: "Options d'affichage", + display_options: "Mode d'affichage", language_options: "Options de langue", + 'fr-FR': "Français", + 'en-CA': "Anglais", dark_mode: "sombre", light_mode: "clair", + update_successful: "Préférences enregistrées", + update_failed: "Échec de sauvegarde", }, schedule_presets: { tab_title: "horaire", diff --git a/src/layouts/main-layout.vue b/src/layouts/main-layout.vue index 90b6276..d202b83 100644 --- a/src/layouts/main-layout.vue +++ b/src/layouts/main-layout.vue @@ -1,17 +1,46 @@ - \ No newline at end of file diff --git a/src/modules/auth/components/login-connection-panel.vue b/src/modules/auth/components/login-connection-panel.vue index 4cfb8c9..8bf798f 100644 --- a/src/modules/auth/components/login-connection-panel.vue +++ b/src/modules/auth/components/login-connection-panel.vue @@ -55,18 +55,14 @@ color="accent" class="col-auto" /> - - - {{ $t('login.button.remember_me') }} - + {{ $t('login.button.remember_me') }} + + @@ -90,14 +86,14 @@ - {{ + {{ $t('shared.misc.or') }} diff --git a/src/modules/employee-list/components/employee-list-table.vue b/src/modules/employee-list/components/employee-list-table.vue index c6b9390..bbfb6bb 100644 --- a/src/modules/employee-list/components/employee-list-table.vue +++ b/src/modules/employee-list/components/employee-list-table.vue @@ -2,18 +2,20 @@ setup lang="ts" > - import { onMounted, ref } from 'vue'; - import { useEmployeeListApi } from 'src/modules/employee-list/composables/use-employee-api'; - import { useEmployeeStore } from 'src/stores/employee-store'; import EmployeeListTableItem from 'src/modules/employee-list/components/employee-list-table-item.vue'; - import { employee_list_columns } from 'src/modules/employee-list/models/employee-profile.models'; + + import { onMounted, ref } from 'vue'; + import { useUiStore } from 'src/stores/ui-store'; + import { useEmployeeStore } from 'src/stores/employee-store'; + import { useEmployeeListApi } from 'src/modules/employee-list/composables/use-employee-api'; + import { employee_list_columns, getCompanyName } from 'src/modules/employee-list/models/employee-profile.models'; const employee_list_api = useEmployeeListApi(); const employee_store = useEmployeeStore(); + const ui_store = useUiStore(); const is_loading_list = ref(true); const filter = ref(""); - const is_grid_mode = ref(true); onMounted(async () => { is_loading_list.value = true; @@ -26,7 +28,6 @@
+ +