From 6d11e30b65f67ef16958668924f26d318eb60cac Mon Sep 17 00:00:00 2001
From: Angelina Filippova <linakirsanova@gmail.com>
Date: Wed, 25 Mar 2020 23:21:26 +0000
Subject: [PATCH] Update security settings dialog on user's page

---
 .../components/SecuritySettingsModal.vue      | 151 ++++++++++--------
 src/views/users/show.vue                      |  42 ++---
 2 files changed, 103 insertions(+), 90 deletions(-)

diff --git a/src/views/users/components/SecuritySettingsModal.vue b/src/views/users/components/SecuritySettingsModal.vue
index 58c757b1..9237cc20 100644
--- a/src/views/users/components/SecuritySettingsModal.vue
+++ b/src/views/users/components/SecuritySettingsModal.vue
@@ -4,66 +4,50 @@
     :title="$t('userProfile.securitySettings.securitySettings')"
     :visible="visible"
     class="security-settings-modal">
-    <el-row>
-      <p>
-        <label>
-          {{ $t('userProfile.securitySettings.email') }}
-        </label>
-      </p>
-    </el-row>
-    <el-row>
-      <el-input
-        :placeholder="$t('userProfile.securitySettings.inputNewEmail')"
-        v-model="emailForm.newEmail" />
-    </el-row>
-    <br>
-    <el-row type="flex" justify="end">
-      <el-button
-        :loading="emailForm.isLoading"
-        :disabled="!emailForm.newEmail || emailForm.newEmail === userCredentials.email"
-        type="primary"
-        @click="updateEmail()">
-        {{ $t('userProfile.securitySettings.submit') }}
-      </el-button>
-    </el-row>
-    <el-row>
-      <p>
-        <label>
-          {{ $t('userProfile.securitySettings.password') }}
-        </label>
-      </p>
-    </el-row>
-    <el-row>
-      <el-input
-        :placeholder="$t('userProfile.securitySettings.inputNewPassword')"
-        v-model="passwordForm.newPassword"
-        show-password />
-      <small class="form-text">
-        {{ $t('userProfile.securitySettings.passwordLengthNotice', { minLength: 8 }) }}
-      </small>
-      <br>
+    <el-form :model="securitySettingsForm" :label-width="getLabelWidth">
+      <el-form-item :label="$t('userProfile.securitySettings.email')">
+        <el-input v-model="securitySettingsForm.newEmail" :placeholder="$t('userProfile.securitySettings.inputNewEmail')"/>
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          :loading="securitySettingsForm.isEmailLoading"
+          :disabled="!securitySettingsForm.newEmail || securitySettingsForm.newEmail === userCredentials.email"
+          type="primary"
+          class="security-settings-submit-button"
+          @click="updateEmail()">
+          {{ $t('userProfile.securitySettings.submit') }}
+        </el-button>
+      </el-form-item>
+      <el-form-item :label="$t('userProfile.securitySettings.password')" class="password-input">
+        <el-input v-model="securitySettingsForm.newPassword" :placeholder="$t('userProfile.securitySettings.inputNewPassword')"/>
+        <small class="form-text">
+          {{ $t('userProfile.securitySettings.passwordLengthNotice', { minLength: 8 }) }}
+        </small>
+      </el-form-item>
       <el-alert
         :closable="false"
         type="warning"
-        show-icon>
+        show-icon
+        class="password-alert">
         <p>{{ $t('userProfile.securitySettings.passwordChangeWarning1') }}</p>
         <p>{{ $t('userProfile.securitySettings.passwordChangeWarning2') }}</p>
       </el-alert>
-    </el-row>
-    <br>
-    <el-row type="flex" justify="end">
-      <el-button
-        :loading="passwordForm.isLoading"
-        :disabled="passwordForm.newPassword.length < 8"
-        type="primary"
-        @click="updatePassword()">
-        {{ $t('userProfile.securitySettings.submit') }}
-      </el-button>
-    </el-row>
+      <el-form-item>
+        <el-button
+          :loading="securitySettingsForm.isPasswordLoading"
+          :disabled="securitySettingsForm.newPassword.length < 8"
+          type="primary"
+          class="security-settings-submit-button"
+          @click="updatePassword()">
+          {{ $t('userProfile.securitySettings.submit') }}
+        </el-button>
+      </el-form-item>
+    </el-form>
   </el-dialog>
 </template>
 
 <script>
+import { Message } from 'element-ui'
 
 export default {
   name: 'SecuritySettingsModal',
@@ -81,47 +65,51 @@ export default {
   },
   data() {
     return {
-      emailForm: {
+      securitySettingsForm: {
         newEmail: '',
-        isLoading: false
-      },
-      passwordForm: {
         newPassword: '',
-        isLoading: false
+        isEmailLoading: false,
+        isPasswordLoading: false
       }
     }
   },
   computed: {
+    isDesktop() {
+      return this.$store.state.app.device === 'desktop'
+    },
+    getLabelWidth() {
+      return this.isDesktop ? '120px' : '85px'
+    },
     userCredentials() {
       return this.$store.state.userProfile.userCredentials
     }
   },
   mounted: async function() {
     await this.$store.dispatch('FetchUserCredentials', { nickname: this.user.nickname })
-    this.emailForm.newEmail = this.userCredentials.email
+    this.securitySettingsForm.newEmail = this.userCredentials.email
   },
   methods: {
     async updateEmail() {
-      const credentials = { email: this.emailForm.newEmail }
-      this.emailForm.isLoading = true
+      const credentials = { email: this.securitySettingsForm.newEmail }
+      this.securitySettingsForm.isEmailLoading = true
       await this.$store.dispatch('UpdateUserCredentials', { nickname: this.user.nickname, credentials })
-      this.emailForm.isLoading = false
-      this.$notify.success({
-        title: this.$t('userProfile.securitySettings.success'),
+      this.securitySettingsForm.isEmailLoading = false
+      Message({
         message: this.$t('userProfile.securitySettings.emailUpdated'),
-        duration: 2000
+        type: 'success',
+        duration: 5 * 1000
       })
     },
     async updatePassword() {
-      const credentials = { password: this.passwordForm.newPassword }
-      this.passwordForm.isLoading = true
+      const credentials = { password: this.securitySettingsForm.newPassword }
+      this.securitySettingsForm.isPasswordLoading = true
       await this.$store.dispatch('UpdateUserCredentials', { nickname: this.user.nickname, credentials })
-      this.passwordForm.isLoading = false
-      this.passwordForm.newPassword = ''
-      this.$notify.success({
-        title: this.$t('userProfile.securitySettings.success'),
+      this.securitySettingsForm.isPasswordLoading = false
+      this.securitySettingsForm.newPassword = ''
+      Message({
         message: this.$t('userProfile.securitySettings.passwordUpdated'),
-        duration: 2000
+        type: 'success',
+        duration: 5 * 1000
       })
     },
     close() {
@@ -132,6 +120,31 @@ export default {
 </script>
 
 <style rel='stylesheet/scss' lang='scss'>
+.security-settings-container {
+  display: flex;
+  label {
+    width: 15%;
+    height: 36px;
+  }
+}
+.security-settings-modal {
+  .el-dialog__body {
+    padding-top: 10px;
+  }
+  .el-form-item {
+    margin-bottom: 15px;
+  }
+  .password-alert {
+    margin-bottom: 15px;
+  }
+  .password-input {
+    margin-bottom: 0;
+  }
+}
+.security-settings-submit-button {
+  float: right;
+}
+
 @media all and (max-width: 800px) {
   .security-settings-modal {
     .el-dialog {
diff --git a/src/views/users/show.vue b/src/views/users/show.vue
index 84cfef32..23c87247 100644
--- a/src/views/users/show.vue
+++ b/src/views/users/show.vue
@@ -73,21 +73,16 @@
                   <el-tag v-if="user.deactivated" type="danger">{{ $t('userProfile.deactivated') }}</el-tag>
                 </td>
               </tr>
-              <tr class="el-table__row">
-                <td>
-                  <el-button icon="el-icon-lock" @click="securitySettingsModalVisible = true">
-                    {{ $t('userProfile.securitySettings.securitySettings') }}
-                  </el-button>
-                  <SecuritySettingsModal
-                    :user="user"
-                    :visible="securitySettingsModalVisible"
-                    @close="securitySettingsModalVisible = false" />
-                </td>
-                <td />
-              </tr>
             </tbody>
           </table>
         </div>
+        <el-button icon="el-icon-lock" class="security-setting-button" @click="securitySettingsModalVisible = true">
+          {{ $t('userProfile.securitySettings.securitySettings') }}
+        </el-button>
+        <SecuritySettingsModal
+          :user="user"
+          :visible="securitySettingsModalVisible"
+          @close="securitySettingsModalVisible = false" />
       </el-card>
       <div class="recent-statuses-container">
         <h2 class="recent-statuses">{{ $t('userProfile.recentStatuses') }}</h2>
@@ -165,10 +160,6 @@ export default {
 </script>
 
 <style rel='stylesheet/scss' lang='scss' scoped>
-.avatar-name-container {
-  display: flex;
-  align-items: center;
-}
 header {
   align-items: center;
   display: flex;
@@ -184,14 +175,14 @@ table {
     width: 150px;
   }
 }
+.avatar-name-container {
+  display: flex;
+  align-items: center;
+}
+
 .el-table--border::after, .el-table--group::after, .el-table::before {
   background-color: transparent;
 }
-.poll ul {
-  list-style-type: none;
-  padding: 0;
-  width: 30%;
-}
 .image {
   width: 20%;
   img {
@@ -202,6 +193,11 @@ table {
   margin-left: 28px;
   color: #606266;
 }
+.poll ul {
+  list-style-type: none;
+  padding: 0;
+  width: 30%;
+}
 .recent-statuses-container {
   display: flex;
   flex-direction: column;
@@ -210,6 +206,10 @@ table {
 .recent-statuses-header {
   margin-top: 10px;
 }
+.security-setting-button {
+  margin-top: 20px;
+  width: 100%;
+}
 .statuses {
   padding: 0 20px 0 0;
 }
-- 
GitLab