From e9a8350b09861e4b0d939ca4fd09a5b5e3e5efe7 Mon Sep 17 00:00:00 2001 From: Nicolas Drolet Date: Thu, 18 Sep 2025 14:40:06 -0400 Subject: [PATCH] feat(profile): Profile module nearly complete, technically modular and could be used in employee list. Mobile friendly. Implement Dark Mode. --- quasar.config.ts | 3 +- src/css/app.scss | 12 +- src/css/quasar.variables.scss | 4 +- src/i18n/en-ca/index.ts | 41 +++-- src/i18n/fr-ca/index.ts | 41 +++-- src/modules/auth/pages/auth-login.vue | 2 +- .../supervisor/supervisor-crew-table-item.vue | 4 +- .../supervisor/supervisor-crew-table.vue | 25 ++- .../types/employee-profile-interface.ts | 15 ++ .../employee/panel-info-employee.vue | 77 --------- .../employee/panel-info-personal.vue | 147 ------------------ .../employee/profile-panel-info-employee.vue | 109 +++++++++++++ .../employee/profile-panel-info-personal.vue | 111 +++++++++++++ .../components/shared/profile-header.vue | 18 +++ .../components/shared/profile-input-field.vue | 46 ------ .../shared/profile-panel-input-field.vue | 36 +++++ .../shared/profile-panel-preferences.vue | 84 ++++++++++ .../shared/profile-panel-select-field.vue | 31 ++++ .../shared/profile-select-field.vue | 40 ----- .../shared/profile-tab-menu-template.vue | 69 ++++---- .../pages/employee/profile-employee.vue | 72 ++++++--- .../profile/pages/profile-container.vue | 33 ++-- .../types/profile-employee-interface.ts | 33 ---- .../shared/components/language-switch.vue | 36 +++-- .../components/navigation/footer-bar.vue | 5 - .../components/navigation/right-drawer.vue | 14 +- ...t-approval-employee-details-shifts-row.vue | 24 +-- ...t-approval-employee-overview-list-item.vue | 21 +-- ...esheet-approval-employee-overview-list.vue | 8 +- .../timesheet-approval-employee-details.vue | 4 +- src/stores/employee-store.ts | 4 +- 31 files changed, 620 insertions(+), 549 deletions(-) delete mode 100644 src/modules/profile/components/employee/panel-info-employee.vue delete mode 100644 src/modules/profile/components/employee/panel-info-personal.vue create mode 100644 src/modules/profile/components/employee/profile-panel-info-employee.vue create mode 100644 src/modules/profile/components/employee/profile-panel-info-personal.vue create mode 100644 src/modules/profile/components/shared/profile-header.vue delete mode 100644 src/modules/profile/components/shared/profile-input-field.vue create mode 100644 src/modules/profile/components/shared/profile-panel-input-field.vue create mode 100644 src/modules/profile/components/shared/profile-panel-preferences.vue create mode 100644 src/modules/profile/components/shared/profile-panel-select-field.vue delete mode 100644 src/modules/profile/components/shared/profile-select-field.vue delete mode 100644 src/modules/profile/types/profile-employee-interface.ts diff --git a/quasar.config.ts b/quasar.config.ts index 93d749d..221df0e 100644 --- a/quasar.config.ts +++ b/quasar.config.ts @@ -105,7 +105,8 @@ export default defineConfig((ctx) => { notify: { color: 'primary', avatar: 'https://cdn.quasar.dev/img/boy-avatar.png', - } + }, + dark: 'auto', }, // iconSet: 'material-icons', // Quasar icon set diff --git a/src/css/app.scss b/src/css/app.scss index 3914f10..d3303c9 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -1,5 +1,5 @@ // app global css in SCSS form -@each $size in (5, 10, 15, 20, 25, 50, 75, 100) { +@each $size in (1, 2, 3, 4, 5, 10, 15, 20, 25, 50, 75, 100) { .rounded-#{$size} { border-radius: #{$size}px !important; } @@ -22,4 +22,14 @@ .q-table tbody tr:hover { background: #00ff260c; +} + +.body--dark { + --q-secondary: #0f1114; + color: $grey-2; +} + +.body--light { + --q-dark: #FFF; + color: $grey-8; } \ No newline at end of file diff --git a/src/css/quasar.variables.scss b/src/css/quasar.variables.scss index 4279286..4ab75c8 100644 --- a/src/css/quasar.variables.scss +++ b/src/css/quasar.variables.scss @@ -20,8 +20,8 @@ $verdigris: #6EBAB0; $mint: #56B586; $dark-font: #1f3a1f; -$dark: #000; -$dark-page: #323232; +$dark: #333; +$dark-page: #343434; $positive: #21ba45; $negative: #e6364b; diff --git a/src/i18n/en-ca/index.ts b/src/i18n/en-ca/index.ts index adbe3a4..01beb59 100644 --- a/src/i18n/en-ca/index.ts +++ b/src/i18n/en-ca/index.ts @@ -115,31 +115,28 @@ export default { }, profilePage: { personalInfo: { - title: 'Profile', - firstName: 'First name', - lastName: 'Last name', - gender: 'Gender', - genderMale: 'Man', - genderFemale: 'Woman', - genderNonBinary: 'Non-binary', - genderUnspecified: 'Unspecified', - phoneNumber: 'Phone number', - jobTitle: 'Job title', - company: 'Company', - supervisor: 'Supervisor', - role: 'Role', - address: 'Address', + title: 'PERSONAL', + firstName: 'FIRST NAME', + lastName: 'LAST NAME', + phoneNumber: 'PHONE NUMBER', + address: 'ADDRESS', addressPlaceholder: '# address, city, region, country', - birthDate: 'Date of birth', - submitInfo: 'Update Profile', + birthDate: 'DATE OF BIRTH', }, employeeInfo: { - title: 'Employee info', - workEmail: 'Work e-mail', - jobTitle: 'Job Title', - companyName: 'Company', - supervisorName: 'Supervisor', - hiredDate: 'Hiring date', + title: 'CAREER', + workEmail: 'E-MAIL', + jobTitle: 'JOB TITLE', + companyName: 'COMPANY', + supervisorName: 'SUPERVISOR', + hiredDate: 'HIRING DATE', + }, + preferences: { + title: 'PREFERENCES', + display_options: "display options", + language_options: "language options", + dark_mode: 'dark', + light_mode: 'light', }, errors: { mustEnterBirthdate: 'You must enter a valid birthdate', diff --git a/src/i18n/fr-ca/index.ts b/src/i18n/fr-ca/index.ts index 3f83584..1654b9e 100644 --- a/src/i18n/fr-ca/index.ts +++ b/src/i18n/fr-ca/index.ts @@ -191,31 +191,28 @@ export default { }, profilePage: { personalInfo: { - title: 'Info personnel', - firstName: 'Prénom', - lastName: 'Nom de famille', - gender: 'Genre', - genderMale: 'Homme', - genderFemale: 'Femme', - genderNonBinary: 'Non-binaire', - genderUnspecified: 'Non-spécifié', - phoneNumber: 'Numéro de téléphone', - jobTitle: 'Titre du poste', - company: 'Entreprise', - supervisor: 'Superviseur', - role: 'Role', - address: 'Adresse', + title: 'PERSONNELLE', + firstName: 'PRENOM', + lastName: 'NOM DE FAMILLE', + phoneNumber: 'NUMERO DE TELEPHONE', + address: 'ADRESSE', addressPlaceholder: '# addresse, ville, région, pays', - birthDate: 'Date de naissance', - submitInfo: 'Modifier Profil', + birthDate: 'DATE DE NAISSANCE', }, employeeInfo: { - title: 'Info Employé', - workEmail: 'Courriel employé', - jobTitle: 'Poste', - companyName: 'Compagnie', - supervisorName: 'Nom du superviseur', - hiredDate: 'Date embauché', + title: 'CARRIÈRE', + workEmail: 'COURRIEL', + jobTitle: 'POSTE', + companyName: 'COMPAGNIE', + supervisorName: 'NOM DU SUPERVISEUR', + hiredDate: 'DATE EMBAUCHE', + }, + preferences: { + title: 'PRÉFÉRENCES', + display_options: "Options d'affichage", + language_options: "Options de langue", + dark_mode: 'sombre', + light_mode: 'clair', }, errors: { mustEnterBirthdate: 'Vous devez entrer une date de naissance valide', diff --git a/src/modules/auth/pages/auth-login.vue b/src/modules/auth/pages/auth-login.vue index 982deea..14fa2a6 100644 --- a/src/modules/auth/pages/auth-login.vue +++ b/src/modules/auth/pages/auth-login.vue @@ -35,7 +35,7 @@
-
+
{{ $t('loginPage.title') }}
diff --git a/src/modules/employee-list/components/supervisor/supervisor-crew-table-item.vue b/src/modules/employee-list/components/supervisor/supervisor-crew-table-item.vue index 70a0874..d5dd1eb 100644 --- a/src/modules/employee-list/components/supervisor/supervisor-crew-table-item.vue +++ b/src/modules/employee-list/components/supervisor/supervisor-crew-table-item.vue @@ -18,7 +18,7 @@ \ No newline at end of file + + + \ No newline at end of file diff --git a/src/modules/employee-list/types/employee-profile-interface.ts b/src/modules/employee-list/types/employee-profile-interface.ts index 8c861d8..9f8cae0 100644 --- a/src/modules/employee-list/types/employee-profile-interface.ts +++ b/src/modules/employee-list/types/employee-profile-interface.ts @@ -9,4 +9,19 @@ export interface EmployeeProfile { first_work_day: string; last_work_day: string; residence: string; + birth_date: string; +} + +export const default_employee_profile: EmployeeProfile = { + first_name: '', + last_name: '', + supervisor_full_name: '', + company_name: -1, + job_title: '', + email: '', + phone_number: '', + first_work_day: '', + last_work_day: '', + residence: '', + birth_date: '', } \ No newline at end of file diff --git a/src/modules/profile/components/employee/panel-info-employee.vue b/src/modules/profile/components/employee/panel-info-employee.vue deleted file mode 100644 index af35594..0000000 --- a/src/modules/profile/components/employee/panel-info-employee.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/profile/components/employee/panel-info-personal.vue b/src/modules/profile/components/employee/panel-info-personal.vue deleted file mode 100644 index 40f73f6..0000000 --- a/src/modules/profile/components/employee/panel-info-personal.vue +++ /dev/null @@ -1,147 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/profile/components/employee/profile-panel-info-employee.vue b/src/modules/profile/components/employee/profile-panel-info-employee.vue new file mode 100644 index 0000000..26e3556 --- /dev/null +++ b/src/modules/profile/components/employee/profile-panel-info-employee.vue @@ -0,0 +1,109 @@ + + + \ No newline at end of file diff --git a/src/modules/profile/components/employee/profile-panel-info-personal.vue b/src/modules/profile/components/employee/profile-panel-info-personal.vue new file mode 100644 index 0000000..07e2f92 --- /dev/null +++ b/src/modules/profile/components/employee/profile-panel-info-personal.vue @@ -0,0 +1,111 @@ + + + \ No newline at end of file diff --git a/src/modules/profile/components/shared/profile-header.vue b/src/modules/profile/components/shared/profile-header.vue new file mode 100644 index 0000000..b63319e --- /dev/null +++ b/src/modules/profile/components/shared/profile-header.vue @@ -0,0 +1,18 @@ + + + \ No newline at end of file diff --git a/src/modules/profile/components/shared/profile-input-field.vue b/src/modules/profile/components/shared/profile-input-field.vue deleted file mode 100644 index 4634c6e..0000000 --- a/src/modules/profile/components/shared/profile-input-field.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/profile/components/shared/profile-panel-input-field.vue b/src/modules/profile/components/shared/profile-panel-input-field.vue new file mode 100644 index 0000000..6aca9af --- /dev/null +++ b/src/modules/profile/components/shared/profile-panel-input-field.vue @@ -0,0 +1,36 @@ + + + \ No newline at end of file diff --git a/src/modules/profile/components/shared/profile-panel-preferences.vue b/src/modules/profile/components/shared/profile-panel-preferences.vue new file mode 100644 index 0000000..8805b86 --- /dev/null +++ b/src/modules/profile/components/shared/profile-panel-preferences.vue @@ -0,0 +1,84 @@ + + + \ No newline at end of file diff --git a/src/modules/profile/components/shared/profile-panel-select-field.vue b/src/modules/profile/components/shared/profile-panel-select-field.vue new file mode 100644 index 0000000..37220ef --- /dev/null +++ b/src/modules/profile/components/shared/profile-panel-select-field.vue @@ -0,0 +1,31 @@ + + + \ No newline at end of file diff --git a/src/modules/profile/components/shared/profile-select-field.vue b/src/modules/profile/components/shared/profile-select-field.vue deleted file mode 100644 index be6a7f3..0000000 --- a/src/modules/profile/components/shared/profile-select-field.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/profile/components/shared/profile-tab-menu-template.vue b/src/modules/profile/components/shared/profile-tab-menu-template.vue index f78e162..af02408 100644 --- a/src/modules/profile/components/shared/profile-tab-menu-template.vue +++ b/src/modules/profile/components/shared/profile-tab-menu-template.vue @@ -1,49 +1,51 @@