blob: dee8d399596af9326947c67ad676cc5125fc5ac4 [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">
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +05307 <page-section
8 :section-title="$t('pageProfileSettings.profileInfoTitle')"
9 >
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053010 <dl>
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053011 <dt>{{ $t('pageProfileSettings.username') }}</dt>
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053012 <dd>
13 {{ username }}
14 </dd>
15 </dl>
16 </page-section>
17 </b-col>
18 </b-row>
19
20 <b-form @submit.prevent="submitForm">
21 <b-row>
22 <b-col sm="8" md="6" xl="3">
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053023 <page-section
24 :section-title="$t('pageProfileSettings.changePassword')"
25 >
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053026 <b-form-group
27 id="input-group-1"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053028 :label="$t('pageProfileSettings.newPassword')"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053029 label-for="input-1"
30 >
31 <b-form-text id="password-help-block">
32 {{
33 $t('pageLocalUserManagement.modal.passwordMustBeBetween', {
34 min: passwordRequirements.minLength,
35 max: passwordRequirements.maxLength
36 })
37 }}
38 </b-form-text>
39 <input-password-toggle>
40 <b-form-input
41 id="password"
42 v-model="form.newPassword"
43 type="password"
44 aria-describedby="password-help-block"
45 :state="getValidationState($v.form.newPassword)"
Sukanya Pandey4334d262020-07-29 11:12:06 +053046 data-test-id="profileSettings-input-newPassword"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053047 @input="$v.form.newPassword.$touch()"
48 />
49 <b-form-invalid-feedback role="alert">
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053050 <template
51 v-if="
52 !$v.form.newPassword.minLength ||
53 !$v.form.newPassword.maxLength
54 "
55 >
56 {{
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053057 $t('pageProfileSettings.newPassLabelTextInfo', {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053058 min: passwordRequirements.minLength,
59 max: passwordRequirements.maxLength
60 })
61 }}
62 </template>
63 </b-form-invalid-feedback>
64 </input-password-toggle>
65 </b-form-group>
66 <b-form-group
67 id="input-group-2"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053068 :label="$t('pageProfileSettings.confirmPassword')"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053069 label-for="input-2"
70 >
71 <input-password-toggle>
72 <b-form-input
73 id="password-confirmation"
74 v-model="form.confirmPassword"
75 type="password"
76 :state="getValidationState($v.form.confirmPassword)"
Sukanya Pandey4334d262020-07-29 11:12:06 +053077 data-test-id="profileSettings-input-confirmPassword"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053078 @input="$v.form.confirmPassword.$touch()"
79 />
80 <b-form-invalid-feedback role="alert">
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053081 <template v-if="!$v.form.confirmPassword.sameAsPassword">
82 {{ $t('pageProfileSettings.passwordsDoNotMatch') }}
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053083 </template>
84 </b-form-invalid-feedback>
85 </input-password-toggle>
86 </b-form-group>
87 </page-section>
88 </b-col>
89 </b-row>
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053090 <page-section :section-title="$t('pageProfileSettings.timezoneDisplay')">
91 <p>{{ $t('pageProfileSettings.timezoneDisplayDesc') }}</p>
92 <b-row>
93 <b-col md="9" lg="8" xl="9">
94 <b-form-group :label="$t('pageProfileSettings.timezone')">
95 <b-form-radio
96 v-model="form.isUtcDisplay"
97 :value="true"
Sukanya Pandey4334d262020-07-29 11:12:06 +053098 data-test-id="profileSettings-radio-defaultUTC"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053099 @change="$v.form.isUtcDisplay.$touch()"
100 >
101 {{ $t('pageProfileSettings.defaultUTC') }}
102 </b-form-radio>
103 <b-form-radio
104 v-model="form.isUtcDisplay"
105 :value="false"
Sukanya Pandey4334d262020-07-29 11:12:06 +0530106 data-test-id="profileSettings-radio-browserOffset"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530107 @change="$v.form.isUtcDisplay.$touch()"
108 >
109 {{
110 $t('pageProfileSettings.browserOffset', {
111 timezone
112 })
113 }}
114 </b-form-radio>
115 </b-form-group>
116 </b-col>
117 </b-row>
118 </page-section>
Sukanya Pandey4334d262020-07-29 11:12:06 +0530119 <b-button
120 variant="primary"
121 type="submit"
122 data-test-id="profileSettings-button-saveSettings"
123 >
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530124 {{ $t('global.action.saveSettings') }}
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530125 </b-button>
126 </b-form>
127 </b-container>
128</template>
129
130<script>
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530131import i18n from '@/i18n';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530132import BVToastMixin from '@/components/Mixins/BVToastMixin';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530133import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
134import {
135 maxLength,
136 minLength,
137 required,
138 sameAs
139} from 'vuelidate/lib/validators';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530140import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500141import LocalTimezoneLabelMixin from '@/components/Mixins/LocalTimezoneLabelMixin';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530142import PageTitle from '@/components/Global/PageTitle';
143import PageSection from '@/components/Global/PageSection';
144import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530145
146export default {
147 name: 'ProfileSettings',
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530148 components: { InputPasswordToggle, PageSection, PageTitle },
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500149 mixins: [
150 BVToastMixin,
151 LocalTimezoneLabelMixin,
152 LoadingBarMixin,
153 VuelidateMixin
154 ],
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530155 data() {
156 return {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530157 form: {
158 newPassword: '',
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530159 confirmPassword: '',
160 isUtcDisplay: this.$store.getters['global/isUtcDisplay']
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530161 }
162 };
163 },
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530164 computed: {
165 username() {
166 return this.$store.getters['global/username'];
167 },
168 passwordRequirements() {
169 return this.$store.getters['localUsers/accountPasswordRequirements'];
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530170 },
171 timezone() {
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500172 return this.localOffset();
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530173 }
174 },
175 created() {
176 this.startLoader();
177 this.$store
178 .dispatch('localUsers/getAccountSettings')
179 .finally(() => this.endLoader());
180 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530181 validations() {
182 return {
183 form: {
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530184 isUtcDisplay: { required },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530185 newPassword: {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530186 minLength: minLength(this.passwordRequirements.minLength),
187 maxLength: maxLength(this.passwordRequirements.maxLength)
188 },
189 confirmPassword: {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530190 sameAsPassword: sameAs('newPassword')
191 }
192 }
193 };
194 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530195 methods: {
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530196 saveNewPasswordInputData() {
197 this.$v.form.confirmPassword.$touch();
198 this.$v.form.newPassword.$touch();
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530199 if (this.$v.$invalid) return;
200 let userData = {
201 originalUsername: this.username,
202 password: this.form.newPassword
203 };
204
205 this.$store
206 .dispatch('localUsers/updateUser', userData)
Sukanya Pandey9422e1a2020-07-13 19:13:07 +0530207 .then(message => {
208 (this.form.newPassword = ''), (this.form.confirmPassword = '');
209 this.$v.$reset();
210 this.successToast(message);
211 })
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530212 .catch(({ message }) => this.errorToast(message));
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530213 },
214 saveTimeZonePrefrenceData() {
215 localStorage.setItem('storedUtcDisplay', this.form.isUtcDisplay);
216 this.$store.commit('global/setUtcTime', this.form.isUtcDisplay);
217 this.successToast(
218 i18n.t('pageProfileSettings.toast.successSaveSettings')
219 );
220 },
221 submitForm() {
222 if (this.form.confirmPassword || this.form.newPassword) {
223 this.saveNewPasswordInputData();
224 }
225 if (this.$v.form.isUtcDisplay.$anyDirty) {
226 this.saveTimeZonePrefrenceData();
227 }
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530228 }
229 }
230};
231</script>