fix : #27 gestion des typo

This commit is contained in:
styve Lioumba
2025-12-03 15:48:10 +01:00
parent 0c768296d1
commit 45b4dd1dad
7 changed files with 30 additions and 19 deletions

View File

@@ -65,7 +65,7 @@
<div class="w-full h-full rounded-full overflow-hidden bg-white"> <div class="w-full h-full rounded-full overflow-hidden bg-white">
@if (user().avatar) { @if (user().avatar) {
<img <img
alt="{{ user().username }}" alt="{{ user().name }}"
class="object-cover w-full h-full" class="object-cover w-full h-full"
src="{{ environment.baseUrl }}/api/files/users/{{ user().id }}/{{ src="{{ environment.baseUrl }}/api/files/users/{{ user().id }}/{{
user().avatar user().avatar
@@ -74,7 +74,7 @@
/> />
} @else { } @else {
<img <img
alt="{{ user().username }}" alt="{{ user().name }}"
class="object-cover w-full h-full" class="object-cover w-full h-full"
src="https://api.dicebear.com/9.x/initials/svg?seed={{ user().name }}" src="https://api.dicebear.com/9.x/initials/svg?seed={{ user().name }}"
loading="lazy" loading="lazy"
@@ -96,10 +96,6 @@
<h1 class="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white mb-1"> <h1 class="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white mb-1">
{{ user().name }} {{ user().name }}
</h1> </h1>
} @else if (user().username) {
<h1 class="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white mb-1">
{{ user().username }}
</h1>
} @else { } @else {
<h1 class="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white mb-1"> <h1 class="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white mb-1">
{{ user().email }} {{ user().email }}

View File

@@ -134,7 +134,7 @@
for="profession" for="profession"
class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"
> >
Profession Profession<small class="text-sm font-medium text-red-500"> * </small>
</label> </label>
<div class="relative"> <div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"> <div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
@@ -170,7 +170,7 @@
for="secteur" for="secteur"
class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"
> >
Secteur d'activité Secteur d'activité<small class="text-sm font-medium text-red-500"> * </small>
</label> </label>
<div class="relative"> <div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"> <div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">

View File

@@ -34,7 +34,7 @@
<!-- Champ Nom --> <!-- Champ Nom -->
<div class="space-y-2"> <div class="space-y-2">
<label for="name" class="block text-sm font-medium text-gray-700 dark:text-gray-300"> <label for="name" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
Nom Nom(s)<small class="text-sm font-medium text-red-500"> * </small>
</label> </label>
<div class="relative"> <div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"> <div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
@@ -64,7 +64,7 @@
<!-- Champ Prénom --> <!-- Champ Prénom -->
<div class="space-y-2"> <div class="space-y-2">
<label for="firstname" class="block text-sm font-medium text-gray-700 dark:text-gray-300"> <label for="firstname" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
Prénom Prénom(s)<small class="text-sm font-medium text-red-500"> * </small>
</label> </label>
<div class="relative"> <div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"> <div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
@@ -108,7 +108,11 @@
d="M7.707 10.293a1 1 0 10-1.414 1.414l3 3a1 1 0 001.414 0l3-3a1 1 0 00-1.414-1.414L11 11.586V6h5a2 2 0 012 2v7a2 2 0 01-2 2H4a2 2 0 01-2-2V8a2 2 0 012-2h5v5.586l-1.293-1.293zM9 4a1 1 0 012 0v2H9V4z" d="M7.707 10.293a1 1 0 10-1.414 1.414l3 3a1 1 0 001.414 0l3-3a1 1 0 00-1.414-1.414L11 11.586V6h5a2 2 0 012 2v7a2 2 0 01-2 2H4a2 2 0 01-2-2V8a2 2 0 012-2h5v5.586l-1.293-1.293zM9 4a1 1 0 012 0v2H9V4z"
/> />
</svg> </svg>
@if (userForm.valid) {
Sauvegarder les modifications
} @else {
Modifier mon identité Modifier mon identité
}
</span> </span>
</button> </button>
</form> </form>

View File

@@ -1,9 +1,5 @@
@if (user() !== undefined) { @if (user() !== undefined) {
<a <a [routerLink]="[user().slug]" [state]="{ user: user(), profile }" class="block group">
[routerLink]="[user().username ? user().username : user().id]"
[state]="{ user: user(), profile }"
class="block group"
>
<!-- Card du profil --> <!-- Card du profil -->
<div <div
class="relative bg-white dark:bg-gray-800 rounded-xl shadow-lg overflow-hidden transition-all duration-300 hover:shadow-2xl hover:-translate-y-2" class="relative bg-white dark:bg-gray-800 rounded-xl shadow-lg overflow-hidden transition-all duration-300 hover:shadow-2xl hover:-translate-y-2"
@@ -56,7 +52,7 @@
<h3 <h3
class="text-lg font-bold text-gray-900 dark:text-white mb-2 group-hover:text-indigo-600 dark:group-hover:text-indigo-400 transition-colors" class="text-lg font-bold text-gray-900 dark:text-white mb-2 group-hover:text-indigo-600 dark:group-hover:text-indigo-400 transition-colors"
> >
{{ user().name }} {{ user().firstName }} {{ user().lastName }}
</h3> </h3>
} @else if (user().username) { } @else if (user().username) {
<h3 <h3

View File

@@ -18,7 +18,6 @@ export class VerticalProfileItemComponent implements OnInit {
@Input({ required: true }) profile: ProfileViewModel = {} as ProfileViewModel; @Input({ required: true }) profile: ProfileViewModel = {} as ProfileViewModel;
protected router = inject(Router); protected router = inject(Router);
private readonly facade = inject(UserFacade); private readonly facade = inject(UserFacade);
protected defaultImg = Math.floor(Math.random() * 10) + 1;
protected user = this.facade.user; protected user = this.facade.user;
protected readonly loading = this.facade.loading; protected readonly loading = this.facade.loading;

View File

@@ -6,4 +6,7 @@ export interface UserViewModel {
email: string; email: string;
name: string; name: string;
avatar: string; avatar: string;
firstName?: string;
lastName?: string;
slug?: string;
} }

View File

@@ -3,7 +3,11 @@ import { User } from '@app/domain/users/user.model';
export class UserPresenter { export class UserPresenter {
toViewModel(user: User): UserViewModel { toViewModel(user: User): UserViewModel {
return { const slug = user.name
? user.name.toLowerCase().replace(/\s/g, '-')
: user.email.split('@')[0].toLowerCase().trim();
let userViewModel: UserViewModel = {
id: user.id, id: user.id,
username: user.username, username: user.username,
verified: user.verified, verified: user.verified,
@@ -11,7 +15,16 @@ export class UserPresenter {
email: user.email, email: user.email,
name: user.name, name: user.name,
avatar: user.avatar, avatar: user.avatar,
slug,
}; };
if (user.name) {
const firstName = user.name.split(' ').slice(0, -1).join(' ').toLowerCase().trim() ?? '';
const lastName = user.name.split(' ').slice(-1)[0].toUpperCase().trim() ?? '';
userViewModel = { ...userViewModel, firstName, lastName };
}
return userViewModel;
} }
toViewModels(users: User[]): UserViewModel[] { toViewModels(users: User[]): UserViewModel[] {