| Sukanya Pandey | b1f559f | 2020-04-28 20:18:28 +0530 | [diff] [blame] | 1 | <template> | 
 | 2 |   <b-container fluid="xl"> | 
 | 3 |     <page-title /> | 
 | 4 |  | 
 | 5 |     <b-row> | 
 | 6 |       <b-col md="8" lg="8" xl="6"> | 
 | 7 |         <page-section :section-title="$t('profileSettings.profileInfoTitle')"> | 
 | 8 |           <dl> | 
 | 9 |             <dt>{{ $t('profileSettings.username') }}</dt> | 
 | 10 |             <dd> | 
 | 11 |               {{ username }} | 
 | 12 |             </dd> | 
 | 13 |           </dl> | 
 | 14 |         </page-section> | 
 | 15 |       </b-col> | 
 | 16 |     </b-row> | 
 | 17 |  | 
 | 18 |     <b-form @submit.prevent="submitForm"> | 
 | 19 |       <b-row> | 
 | 20 |         <b-col sm="8" md="6" xl="3"> | 
 | 21 |           <page-section :section-title="$t('profileSettings.changePassword')"> | 
 | 22 |             <b-form-group | 
 | 23 |               id="input-group-1" | 
 | 24 |               :label="$t('profileSettings.newPassword')" | 
 | 25 |               label-for="input-1" | 
 | 26 |             > | 
 | 27 |               <b-form-text id="password-help-block"> | 
 | 28 |                 {{ | 
 | 29 |                   $t('pageLocalUserManagement.modal.passwordMustBeBetween', { | 
 | 30 |                     min: passwordRequirements.minLength, | 
 | 31 |                     max: passwordRequirements.maxLength | 
 | 32 |                   }) | 
 | 33 |                 }} | 
 | 34 |               </b-form-text> | 
 | 35 |               <input-password-toggle> | 
 | 36 |                 <b-form-input | 
 | 37 |                   id="password" | 
 | 38 |                   v-model="form.newPassword" | 
 | 39 |                   type="password" | 
 | 40 |                   aria-describedby="password-help-block" | 
 | 41 |                   :state="getValidationState($v.form.newPassword)" | 
 | 42 |                   @input="$v.form.newPassword.$touch()" | 
 | 43 |                 /> | 
 | 44 |                 <b-form-invalid-feedback role="alert"> | 
 | 45 |                   <template v-if="!$v.form.newPassword.required"> | 
 | 46 |                     {{ $t('global.form.fieldRequired') }} | 
 | 47 |                   </template> | 
 | 48 |                   <template | 
 | 49 |                     v-if=" | 
 | 50 |                       !$v.form.newPassword.minLength || | 
 | 51 |                         !$v.form.newPassword.maxLength | 
 | 52 |                     " | 
 | 53 |                   > | 
 | 54 |                     {{ | 
 | 55 |                       $t('profileSettings.newPassLabelTextInfo', { | 
 | 56 |                         min: passwordRequirements.minLength, | 
 | 57 |                         max: passwordRequirements.maxLength | 
 | 58 |                       }) | 
 | 59 |                     }} | 
 | 60 |                   </template> | 
 | 61 |                 </b-form-invalid-feedback> | 
 | 62 |               </input-password-toggle> | 
 | 63 |             </b-form-group> | 
 | 64 |             <b-form-group | 
 | 65 |               id="input-group-2" | 
 | 66 |               :label="$t('profileSettings.confirmPassword')" | 
 | 67 |               label-for="input-2" | 
 | 68 |             > | 
 | 69 |               <input-password-toggle> | 
 | 70 |                 <b-form-input | 
 | 71 |                   id="password-confirmation" | 
 | 72 |                   v-model="form.confirmPassword" | 
 | 73 |                   type="password" | 
 | 74 |                   :state="getValidationState($v.form.confirmPassword)" | 
 | 75 |                   @input="$v.form.confirmPassword.$touch()" | 
 | 76 |                 /> | 
 | 77 |                 <b-form-invalid-feedback role="alert"> | 
 | 78 |                   <template v-if="!$v.form.confirmPassword.required"> | 
 | 79 |                     {{ $t('global.form.fieldRequired') }} | 
 | 80 |                   </template> | 
 | 81 |                   <template v-else-if="!$v.form.confirmPassword.sameAsPassword"> | 
 | 82 |                     {{ $t('profileSettings.passwordsDoNotMatch') }} | 
 | 83 |                   </template> | 
 | 84 |                 </b-form-invalid-feedback> | 
 | 85 |               </input-password-toggle> | 
 | 86 |             </b-form-group> | 
 | 87 |           </page-section> | 
 | 88 |         </b-col> | 
 | 89 |       </b-row> | 
 | 90 |       <b-button variant="primary" type="submit"> | 
 | 91 |         {{ $t('global.action.save') }} | 
 | 92 |       </b-button> | 
 | 93 |     </b-form> | 
 | 94 |   </b-container> | 
 | 95 | </template> | 
 | 96 |  | 
 | 97 | <script> | 
| Sukanya Pandey | b1f559f | 2020-04-28 20:18:28 +0530 | [diff] [blame] | 98 | import BVToastMixin from '@/components/Mixins/BVToastMixin'; | 
| Sukanya Pandey | b1f559f | 2020-04-28 20:18:28 +0530 | [diff] [blame] | 99 | import InputPasswordToggle from '@/components/Global/InputPasswordToggle'; | 
 | 100 | import { | 
 | 101 |   maxLength, | 
 | 102 |   minLength, | 
 | 103 |   required, | 
 | 104 |   sameAs | 
 | 105 | } from 'vuelidate/lib/validators'; | 
| Sukanya Pandey | b93608d | 2020-07-10 18:51:58 +0530 | [diff] [blame] | 106 | import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin'; | 
 | 107 | import PageTitle from '@/components/Global/PageTitle'; | 
 | 108 | import PageSection from '@/components/Global/PageSection'; | 
 | 109 | import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js'; | 
| Sukanya Pandey | b1f559f | 2020-04-28 20:18:28 +0530 | [diff] [blame] | 110 |  | 
 | 111 | export default { | 
 | 112 |   name: 'ProfileSettings', | 
| Sukanya Pandey | b93608d | 2020-07-10 18:51:58 +0530 | [diff] [blame] | 113 |   components: { InputPasswordToggle, PageSection, PageTitle }, | 
 | 114 |   mixins: [BVToastMixin, LoadingBarMixin, VuelidateMixin], | 
| Sukanya Pandey | b1f559f | 2020-04-28 20:18:28 +0530 | [diff] [blame] | 115 |   data() { | 
 | 116 |     return { | 
| Sukanya Pandey | b1f559f | 2020-04-28 20:18:28 +0530 | [diff] [blame] | 117 |       form: { | 
 | 118 |         newPassword: '', | 
 | 119 |         confirmPassword: '' | 
 | 120 |       } | 
 | 121 |     }; | 
 | 122 |   }, | 
| Sukanya Pandey | b93608d | 2020-07-10 18:51:58 +0530 | [diff] [blame] | 123 |   computed: { | 
 | 124 |     username() { | 
 | 125 |       return this.$store.getters['global/username']; | 
 | 126 |     }, | 
 | 127 |     passwordRequirements() { | 
 | 128 |       return this.$store.getters['localUsers/accountPasswordRequirements']; | 
 | 129 |     } | 
 | 130 |   }, | 
 | 131 |   created() { | 
 | 132 |     this.startLoader(); | 
 | 133 |     this.$store | 
 | 134 |       .dispatch('localUsers/getAccountSettings') | 
 | 135 |       .finally(() => this.endLoader()); | 
 | 136 |   }, | 
| Sukanya Pandey | b1f559f | 2020-04-28 20:18:28 +0530 | [diff] [blame] | 137 |   validations() { | 
 | 138 |     return { | 
 | 139 |       form: { | 
 | 140 |         newPassword: { | 
 | 141 |           required, | 
 | 142 |           minLength: minLength(this.passwordRequirements.minLength), | 
 | 143 |           maxLength: maxLength(this.passwordRequirements.maxLength) | 
 | 144 |         }, | 
 | 145 |         confirmPassword: { | 
 | 146 |           required, | 
 | 147 |           sameAsPassword: sameAs('newPassword') | 
 | 148 |         } | 
 | 149 |       } | 
 | 150 |     }; | 
 | 151 |   }, | 
| Sukanya Pandey | b1f559f | 2020-04-28 20:18:28 +0530 | [diff] [blame] | 152 |   methods: { | 
 | 153 |     submitForm() { | 
 | 154 |       this.$v.$touch(); | 
 | 155 |       if (this.$v.$invalid) return; | 
 | 156 |       let userData = { | 
 | 157 |         originalUsername: this.username, | 
 | 158 |         password: this.form.newPassword | 
 | 159 |       }; | 
 | 160 |  | 
 | 161 |       this.$store | 
 | 162 |         .dispatch('localUsers/updateUser', userData) | 
 | 163 |         .then(message => this.successToast(message)) | 
 | 164 |         .catch(({ message }) => this.errorToast(message)); | 
 | 165 |     } | 
 | 166 |   } | 
 | 167 | }; | 
 | 168 | </script> |