@@ -138,14 +148,14 @@
\ No newline at end of file
diff --git a/src/router/router-constants.ts b/src/router/router-constants.ts
index 83c0364..9114cd2 100644
--- a/src/router/router-constants.ts
+++ b/src/router/router-constants.ts
@@ -3,8 +3,9 @@ export enum RouteNames {
LOGIN = 'login',
LOGIN_SUCCESS = 'login-success',
DASHBOARD = 'dashboard',
- TIMESHEET_APPROVALS = 'timesheet-approvals',
- EMPLOYEE_LIST = 'employee-list',
- PROFILE = 'user/profile',
- TIMESHEET = 'timesheet'
+ TIMESHEET_APPROVALS = 'timesheets_approval',
+ EMPLOYEE_LIST = 'employee_list',
+ EMPLOYEE_MANAGEMENT = 'employee_management',
+ PROFILE = 'personal_profile',
+ TIMESHEET = 'timesheets'
}
\ No newline at end of file
diff --git a/src/stores/employee-store.ts b/src/stores/employee-store.ts
index b25bf58..f0711a0 100644
--- a/src/stores/employee-store.ts
+++ b/src/stores/employee-store.ts
@@ -1,13 +1,13 @@
import { ref } from "vue";
import { defineStore } from "pinia";
import { EmployeeListService } from "src/modules/employee-list/services/employee-list-service";
-import { default_employee_profile, type EmployeeProfile } from "src/modules/employee-list/models/employee-profile.models";
+import { EmployeeProfile } from "src/modules/employee-list/models/employee-profile.models";
-export const useEmployeeStore = defineStore('employee', () => {
- const employee = ref
( default_employee_profile );
+export const useEmployeeStore = defineStore('employee', () => {
+ const employee = ref(new EmployeeProfile);
const employee_list = ref([]);
const isShowingEmployeeAddModifyWindow = ref(false);
- const isLoadingEmployeeProfile = ref(false);
+ const is_loading = ref(false);
const isLoadingEmployeeList = ref(false);
const getEmployeeList = async () => {
@@ -22,19 +22,24 @@ export const useEmployeeStore = defineStore('employee', () => {
isLoadingEmployeeList.value = false;
};
- const getEmployeeDetails = async (email: string) => {
- isLoadingEmployeeProfile.value = true;
+ const getEmployeeDetails = async (email?: string) => {
+ is_loading.value = true;
try {
- const response = await EmployeeListService.getEmployeeDetails(email);
- employee.value = response;
+ if (email === undefined) {
+ const response = await EmployeeListService.getEmployeeDetails();
+ employee.value = response;
+ } else{
+ const response = await EmployeeListService.getEmployeeDetailsWithEmployeeEmail(email);
+ employee.value = response;
+ }
} catch (error) {
console.error('There was an error retrieving employee info: ', error);
//TODO: trigger an alert window with an error message here!
}
- isLoadingEmployeeProfile.value = false;
+ is_loading.value = false;
};
- return { employee, employee_list, isShowingEmployeeAddModifyWindow, isLoadingEmployeeList, isLoadingEmployeeProfile, getEmployeeList, getEmployeeDetails };
+ return { employee, employee_list, isShowingEmployeeAddModifyWindow, isLoadingEmployeeList, is_loading, getEmployeeList, getEmployeeDetails };
});
diff --git a/src/stores/ui-store.ts b/src/stores/ui-store.ts
index ecad784..f991db7 100644
--- a/src/stores/ui-store.ts
+++ b/src/stores/ui-store.ts
@@ -1,22 +1,81 @@
import { defineStore } from 'pinia';
-import { useQuasar } from 'quasar';
+import { Notify, LocalStorage, useQuasar, Dark } from 'quasar';
import { computed, ref } from 'vue';
+import { Preferences } from 'src/modules/profile/models/preferences.models';
+import { ProfileService } from 'src/modules/profile/services/profile-service';
+import { useI18n, type ComposerTranslation } from 'vue-i18n';
export const useUiStore = defineStore('ui', () => {
const q = useQuasar();
- const is_left_drawer_open = ref(true);
+ const { locale } = useI18n();
+ const is_left_drawer_open = ref(false);
const focus_next_component = ref(false);
const is_mobile_mode = computed(() => q.screen.lt.md);
+ const user_preferences = ref(new Preferences);
+
const toggleRightDrawer = () => {
is_left_drawer_open.value = !is_left_drawer_open.value;
+ };
+
+ const getUserPreferences = async () => {
+ try {
+ const local_user_preferences = LocalStorage.getItem('user_preferences');
+
+ if (local_user_preferences !== null) {
+ if (local_user_preferences.id !== -1) {
+ Object.assign(user_preferences.value, local_user_preferences);
+ setPreferences();
+ return;
+ }
+ }
+
+ const response = await ProfileService.getUserPreferences();
+
+ if (response.success && response.data) {
+ LocalStorage.setItem('user_preferences', response.data);
+ Object.assign(user_preferences.value, response.data);
+ setPreferences();
+ }
+ } catch (error) {
+ user_preferences.value = new Preferences;
+ console.error('Could not retrieve user preferences: ', error);
+ }
+ };
+
+ const updateUserPreferences = async (t: ComposerTranslation) => {
+ try {
+ if (user_preferences.value.id === -1) return;
+
+ const response = await ProfileService.updateUserPreferences(user_preferences.value);
+ if (response.success && response.data) {
+ Object.assign(user_preferences.value, response.data);
+ LocalStorage.setItem('user_preferences', response.data);
+ setPreferences();
+ Notify.create({ message: t('profile.preferences.update_successful'), color: 'accent' });
+ return;
+ }
+ } catch (error) {
+ console.error('Could not update user preferences: ', error);
+ }
+ Notify.create({ message: t('profile.preferences.update_failed'), color: 'negative' })
+ };
+
+ const setPreferences = () => {
+ if (user_preferences.value !== undefined) {
+ Dark.set(user_preferences.value.is_dark_mode ?? 'auto');
+ locale.value = user_preferences.value.display_language;
+ }
}
- return {
+ return {
is_mobile_mode,
focus_next_component,
- is_left_drawer_open,
- toggleRightDrawer
+ is_left_drawer_open,
+ user_preferences,
+ toggleRightDrawer,
+ getUserPreferences,
+ updateUserPreferences,
};
});