From 43208bf37d499f584d968782665e067fdf53e8d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Thu, 7 Nov 2024 08:36:42 +0100 Subject: [PATCH] User.email UI --- src/main/angular/src/app/api/User/UserPrivate.ts | 2 ++ src/main/angular/src/app/api/User/user.service.ts | 4 ++++ .../src/app/pages/profile/profile.component.html | 11 +++++++++++ .../src/app/pages/profile/profile.component.ts | 6 ++++++ .../angular/src/app/shared/text/text.component.html | 3 ++- .../angular/src/app/shared/text/text.component.ts | 12 ++++++++++++ src/main/java/de/ph87/tools/common/EmailHelper.java | 8 ++++---- 7 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/main/angular/src/app/api/User/UserPrivate.ts b/src/main/angular/src/app/api/User/UserPrivate.ts index 7c44d61..55f91e8 100644 --- a/src/main/angular/src/app/api/User/UserPrivate.ts +++ b/src/main/angular/src/app/api/User/UserPrivate.ts @@ -9,6 +9,7 @@ export class UserPrivate extends UserPublic { readonly created: Date, name: string, readonly password: boolean, + readonly email: string, admin: boolean, ) { super(publicUuid, name, admin); @@ -21,6 +22,7 @@ export class UserPrivate extends UserPublic { validateDate(json['created']), validateString(json['name']), validateBoolean(json['password']), + validateString(json['email']), validateBoolean(json['admin']), ); } diff --git a/src/main/angular/src/app/api/User/user.service.ts b/src/main/angular/src/app/api/User/user.service.ts index 976cd2e..67b11c1 100644 --- a/src/main/angular/src/app/api/User/user.service.ts +++ b/src/main/angular/src/app/api/User/user.service.ts @@ -89,6 +89,10 @@ export class UserService { this.api.postSingle(['User', 'changePassword'], password, UserPrivate.fromJson, next); } + changeEmail(email: string, next?: Next) { + this.api.postSingle(['User', 'changeEmail'], email, UserPrivate.fromJson, next); + } + goto(user: UserPublic) { this.router.navigate(['User', user.publicUuid]); } diff --git a/src/main/angular/src/app/pages/profile/profile.component.html b/src/main/angular/src/app/pages/profile/profile.component.html index b5d9340..1ddd67c 100644 --- a/src/main/angular/src/app/pages/profile/profile.component.html +++ b/src/main/angular/src/app/pages/profile/profile.component.html @@ -32,6 +32,17 @@ +
+
+
+ E-Mail +
+
+ +
+
+
+ diff --git a/src/main/angular/src/app/pages/profile/profile.component.ts b/src/main/angular/src/app/pages/profile/profile.component.ts index 2ffb569..65aa9ed 100644 --- a/src/main/angular/src/app/pages/profile/profile.component.ts +++ b/src/main/angular/src/app/pages/profile/profile.component.ts @@ -38,6 +38,8 @@ export class ProfileComponent implements OnInit, OnDestroy { protected password1: string = ""; + protected email: string = ""; + protected groups: Group[] = []; @ViewChild('p1') @@ -74,6 +76,10 @@ export class ProfileComponent implements OnInit, OnDestroy { return password.length >= USER_PASSWORD_MIN_LENGTH && !/^[a-zA-Z]+$|^[0-9]+$/.test(password); } + protected emailValidator(email: string) { + return /^\w+([-.]\w+)*@\w+([-.]\w+)*\.\w{2,}$/.test(email); + } + protected p0Invalid(): boolean { return this.password0 !== '' && !this.passwordValidator(this.password0); } diff --git a/src/main/angular/src/app/shared/text/text.component.html b/src/main/angular/src/app/shared/text/text.component.html index 2964f92..fcd2968 100644 --- a/src/main/angular/src/app/shared/text/text.component.html +++ b/src/main/angular/src/app/shared/text/text.component.html @@ -1,11 +1,12 @@ diff --git a/src/main/angular/src/app/shared/text/text.component.ts b/src/main/angular/src/app/shared/text/text.component.ts index 8867cce..d7b85fe 100644 --- a/src/main/angular/src/app/shared/text/text.component.ts +++ b/src/main/angular/src/app/shared/text/text.component.ts @@ -26,6 +26,18 @@ export class TextComponent implements OnInit { @Input() set initial(value: string) { this._initial = value; + this.updateFromOutside(); + } + + _placeholder: string = ''; + + @Input() + set placeholder(value: string) { + this._placeholder = value; + this.updateFromOutside(); + } + + private updateFromOutside() { if (!this.editing) { this.model = this._initial; } diff --git a/src/main/java/de/ph87/tools/common/EmailHelper.java b/src/main/java/de/ph87/tools/common/EmailHelper.java index d8ccbdd..2eec8cf 100644 --- a/src/main/java/de/ph87/tools/common/EmailHelper.java +++ b/src/main/java/de/ph87/tools/common/EmailHelper.java @@ -7,7 +7,7 @@ import java.util.regex.Pattern; public class EmailHelper { - private static final Pattern REGEX = Pattern.compile("(?(?[^@])[^@]*)@(?(?[^.]).*(?\\.[^.]+))"); + private static final Pattern REGEX = Pattern.compile("(?\\w+(?:[-.]\\w+)*)@(?\\w+(?:[-.]\\w+)*)\\.(?\\w{2,})"); public static boolean isEmailValid(@NonNull final String email) { return REGEX.matcher(email).matches(); @@ -19,10 +19,10 @@ public class EmailHelper { if (!matcher.find()) { return ""; } - final String usernameFirst = matcher.group("usernameFirst"); - final String domainFirst = matcher.group("domainFirst"); + final String usernameFirst = matcher.group("username"); + final String domainFirst = matcher.group("domain"); final String tld = matcher.group("tld"); - return "%s...@%s...%s".formatted(usernameFirst, domainFirst, tld); + return "%s...@%s...%s".formatted(usernameFirst.charAt(0), domainFirst.charAt(0), tld); } }