From 9dc3c69027aa2bcce48fa897cbf8cc2463302400 Mon Sep 17 00:00:00 2001 From: Dimitri FAJAL Date: Mon, 25 May 2026 19:52:22 +0200 Subject: [PATCH] feat(settings): design and implement settings page with sub-navigation and layout --- src/app/features/settings/settings.html | 131 +++++++++++++++++++++++- src/app/features/settings/settings.scss | 68 ++++++++++++ src/app/features/settings/settings.ts | 11 +- 3 files changed, 203 insertions(+), 7 deletions(-) diff --git a/src/app/features/settings/settings.html b/src/app/features/settings/settings.html index abbe72f..d3369bd 100755 --- a/src/app/features/settings/settings.html +++ b/src/app/features/settings/settings.html @@ -1,8 +1,129 @@
-

Paramètres

+

Paramètres du compte

-
-

Compte

-

Aucun paramètre n'est disponible pour le moment.

+
+ + + + + person + Mon profil + + + lock + Sécurité + + + groups + Mes classes + + + notifications + Notifications + + + download + Mes données + + + + + + +
+ + @switch (activeTab()) { + @case ('profile') { +

Mon profil

+ + + +
+ person +
+
{{user.username}}
+
+ {{user.role_display}} + · + {{user.class_name}} +
+
+ +
+
+
+ + +
+

Compte

+ +
+ +

Nom d'utilisateur : {{user.username}}

+

Email : {{user.email}}

+
+
+ } + + @case ('security') { +

Sécurité

+ +
+

Mot de passe

+ +
+ + Dernière modification : {{user.password_last_changed}}. + +
+ } + + @case ('classes') { +

Mes classes

+ +
+

+ {{user.class_name}} + — + {{user.academic_year}} +

+ +
+ + Rejointe le {{user.class_join_date}} + · Prof : {{user.class_teacher}} + +
+ +
+

Rejoindre une classe

+ +
+
+ } + + @case ('notifications') { +

Notifications

+ + Préférences de notifications — à configurer. + + } + + @case ('data') { +

Mes données

+ +
+

Exporter mes données

+ +
+ Reçois une copie de tes données au format JSON. +
+ } + } + +
-
\ No newline at end of file +
diff --git a/src/app/features/settings/settings.scss b/src/app/features/settings/settings.scss index e69de29..e9c20b1 100644 --- a/src/app/features/settings/settings.scss +++ b/src/app/features/settings/settings.scss @@ -0,0 +1,68 @@ +:host { + display: block; +} + +.settings-container { + max-width: 960px; + padding: 1.5rem 2rem 3rem; + + @media (max-width: 700px) { + padding: 1rem 1rem 2rem; + } +} + +.settings-layout { + display: grid; + grid-template-columns: 240px 1fr; + gap: 2rem; + + @media (max-width: 700px) { + grid-template-columns: 1fr; + gap: 1.5rem; + } +} + +.delete-account-item { + color: var(--mat-sys-error); + + mat-icon { + color: var(--mat-sys-error); + } +} + +.settings-content { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.profile-header { + display: flex; + align-items: center; + gap: 1rem; + + .profile-avatar { + font-size: 48px; + width: 48px; + height: 48px; + } + + .profile-details { + flex: 1; + } +} + +.card-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1rem 1rem 0; + + h3 { + margin: 0; + } + + &.full-padding { + padding: 1rem; + } +} diff --git a/src/app/features/settings/settings.ts b/src/app/features/settings/settings.ts index 5d9f363..56e30dd 100755 --- a/src/app/features/settings/settings.ts +++ b/src/app/features/settings/settings.ts @@ -1,10 +1,17 @@ -import { Component } from '@angular/core'; +import { Component, signal } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatListModule } from '@angular/material/list'; + +type Tab = 'profile' | 'security' | 'classes' | 'notifications' | 'data'; @Component({ selector: 'app-settings', - imports: [], + imports: [MatButtonModule, MatCardModule, MatIconModule, MatListModule], templateUrl: './settings.html', styleUrl: './settings.scss', }) export class Settings { + activeTab = signal('profile'); }