Fix logic for email address text field

* Update the state of the button for every change to the
email in the textfield so it is disabled as soon as the
email is not valid or new anymore.
* Make empty string the default value of the textfield email
instead of undefined if serviceuser has no email set.
* Make empty string a valid email if serviceuser already
has an email set. To make it possible to remove email from
serviceuser.

Change-Id: I1cc5ae58d97db64af58ac95e895cffe11efe967d
diff --git a/web/gr-serviceuser-detail.ts b/web/gr-serviceuser-detail.ts
index e2d4f94..befa4dd 100644
--- a/web/gr-serviceuser-detail.ts
+++ b/web/gr-serviceuser-detail.ts
@@ -88,7 +88,7 @@
   fullName?: String;
 
   @property({type: String})
-  email?: String;
+  email = '';
 
   @property({type: Array})
   availableOwners?: Array<GroupInfo>;
@@ -273,7 +273,7 @@
           type="text"
           class="wide"
           .value="${this.email}"
-          .placeholder="${this.serviceUser?.email}"
+          .placeholder="${this.serviceUser.email ?? ''}"
           ?disabled="${this.changingPrefs}"
           @input="${this.emailChanged}"
         />
@@ -345,7 +345,7 @@
       this.computeStatusButtonText();
       this.loading = false;
       this.fullName = this.serviceUser?.name;
-      this.email = this.serviceUser?.email;
+      this.email = this.serviceUser.email ?? '';
       this.owner = this.getCurrentOwnerGroup() ?? NOT_FOUND_MESSAGE;
     });
   }
@@ -457,11 +457,11 @@
       : NOT_FOUND_MESSAGE;
   }
 
-  private isEmailValid(email: String) {
-    if (!email) {
-      return false;
+  private isNewValidEmail(email: String) {
+    if (!this.serviceUser.email) {
+      return email.includes('@');
     }
-    return email.includes('@');
+    return email !== this.serviceUser.email && (email.includes('@') || email.length === 0);
   }
 
   private getGroupSuggestions(input: String) {
@@ -506,11 +506,8 @@
   }
 
   private emailChanged() {
-    const newEmail = this.serviceUserEmailInput.value;
-    if (this.isEmailValid(newEmail)) {
-      this.email = this.serviceUserEmailInput.value;
-      this.computePrefsChanged();
-    }
+    this.email = this.serviceUserEmailInput.value;
+    this.computePrefsChanged();
   }
 
   private ownerChanged() {
@@ -530,7 +527,7 @@
 
     if (
       this.owner === this.getCurrentOwnerGroup() &&
-      this.email === this.serviceUser.email &&
+      !this.isNewValidEmail(this.email) &&
       this.fullName === this.serviceUser.name
     ) {
       this.prefsChanged = false;
@@ -548,7 +545,7 @@
   }
 
   private applyNewEmail() {
-    if (!this.isEmailValid(this.email ?? '')) {
+    if (!this.isNewValidEmail(this.email)) {
       return;
     }
     return this.pluginRestApi.put(