blob: 32278b247255d29be495982956eba56a7d23b07f [file] [log] [blame]
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +05301<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 Pandeyb1f559f2020-04-28 20:18:28 +053098import BVToastMixin from '@/components/Mixins/BVToastMixin';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053099import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
100import {
101 maxLength,
102 minLength,
103 required,
104 sameAs
105} from 'vuelidate/lib/validators';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530106import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
107import PageTitle from '@/components/Global/PageTitle';
108import PageSection from '@/components/Global/PageSection';
109import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530110
111export default {
112 name: 'ProfileSettings',
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530113 components: { InputPasswordToggle, PageSection, PageTitle },
114 mixins: [BVToastMixin, LoadingBarMixin, VuelidateMixin],
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530115 data() {
116 return {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530117 form: {
118 newPassword: '',
119 confirmPassword: ''
120 }
121 };
122 },
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530123 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 Pandeyb1f559f2020-04-28 20:18:28 +0530137 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 Pandeyb1f559f2020-04-28 20:18:28 +0530152 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>