blob: 65c722ab15c3639608602922ca55b83ee6ad89e3 [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,
Derick Montague602e98a2020-10-21 16:20:00 -050035 max: passwordRequirements.maxLength,
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053036 })
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"
Dixsie Wolmers5ea16782020-07-27 17:50:43 -050047 class="form-control-with-button"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053048 @input="$v.form.newPassword.$touch()"
49 />
50 <b-form-invalid-feedback role="alert">
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053051 <template
52 v-if="
53 !$v.form.newPassword.minLength ||
Derick Montague602e98a2020-10-21 16:20:00 -050054 !$v.form.newPassword.maxLength
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053055 "
56 >
57 {{
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053058 $t('pageProfileSettings.newPassLabelTextInfo', {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053059 min: passwordRequirements.minLength,
Derick Montague602e98a2020-10-21 16:20:00 -050060 max: passwordRequirements.maxLength,
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053061 })
62 }}
63 </template>
64 </b-form-invalid-feedback>
65 </input-password-toggle>
66 </b-form-group>
67 <b-form-group
68 id="input-group-2"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053069 :label="$t('pageProfileSettings.confirmPassword')"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053070 label-for="input-2"
71 >
72 <input-password-toggle>
73 <b-form-input
74 id="password-confirmation"
75 v-model="form.confirmPassword"
76 type="password"
77 :state="getValidationState($v.form.confirmPassword)"
Sukanya Pandey4334d262020-07-29 11:12:06 +053078 data-test-id="profileSettings-input-confirmPassword"
Dixsie Wolmers5ea16782020-07-27 17:50:43 -050079 class="form-control-with-button"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053080 @input="$v.form.confirmPassword.$touch()"
81 />
82 <b-form-invalid-feedback role="alert">
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053083 <template v-if="!$v.form.confirmPassword.sameAsPassword">
84 {{ $t('pageProfileSettings.passwordsDoNotMatch') }}
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053085 </template>
86 </b-form-invalid-feedback>
87 </input-password-toggle>
88 </b-form-group>
89 </page-section>
90 </b-col>
91 </b-row>
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053092 <page-section :section-title="$t('pageProfileSettings.timezoneDisplay')">
93 <p>{{ $t('pageProfileSettings.timezoneDisplayDesc') }}</p>
94 <b-row>
95 <b-col md="9" lg="8" xl="9">
96 <b-form-group :label="$t('pageProfileSettings.timezone')">
97 <b-form-radio
98 v-model="form.isUtcDisplay"
99 :value="true"
Sukanya Pandey4334d262020-07-29 11:12:06 +0530100 data-test-id="profileSettings-radio-defaultUTC"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530101 @change="$v.form.isUtcDisplay.$touch()"
102 >
103 {{ $t('pageProfileSettings.defaultUTC') }}
104 </b-form-radio>
105 <b-form-radio
106 v-model="form.isUtcDisplay"
107 :value="false"
Sukanya Pandey4334d262020-07-29 11:12:06 +0530108 data-test-id="profileSettings-radio-browserOffset"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530109 @change="$v.form.isUtcDisplay.$touch()"
110 >
111 {{
112 $t('pageProfileSettings.browserOffset', {
Derick Montague602e98a2020-10-21 16:20:00 -0500113 timezone,
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530114 })
115 }}
116 </b-form-radio>
117 </b-form-group>
118 </b-col>
119 </b-row>
120 </page-section>
Sukanya Pandey4334d262020-07-29 11:12:06 +0530121 <b-button
122 variant="primary"
123 type="submit"
124 data-test-id="profileSettings-button-saveSettings"
125 >
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530126 {{ $t('global.action.saveSettings') }}
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530127 </b-button>
128 </b-form>
129 </b-container>
130</template>
131
132<script>
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530133import i18n from '@/i18n';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530134import BVToastMixin from '@/components/Mixins/BVToastMixin';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530135import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
136import {
137 maxLength,
138 minLength,
139 required,
Derick Montague602e98a2020-10-21 16:20:00 -0500140 sameAs,
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530141} from 'vuelidate/lib/validators';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530142import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500143import LocalTimezoneLabelMixin from '@/components/Mixins/LocalTimezoneLabelMixin';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530144import PageTitle from '@/components/Global/PageTitle';
145import PageSection from '@/components/Global/PageSection';
146import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530147
148export default {
149 name: 'ProfileSettings',
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530150 components: { InputPasswordToggle, PageSection, PageTitle },
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500151 mixins: [
152 BVToastMixin,
153 LocalTimezoneLabelMixin,
154 LoadingBarMixin,
Derick Montague602e98a2020-10-21 16:20:00 -0500155 VuelidateMixin,
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500156 ],
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530157 data() {
158 return {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530159 form: {
160 newPassword: '',
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530161 confirmPassword: '',
Derick Montague602e98a2020-10-21 16:20:00 -0500162 isUtcDisplay: this.$store.getters['global/isUtcDisplay'],
163 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530164 };
165 },
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530166 computed: {
167 username() {
168 return this.$store.getters['global/username'];
169 },
170 passwordRequirements() {
171 return this.$store.getters['localUsers/accountPasswordRequirements'];
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530172 },
173 timezone() {
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500174 return this.localOffset();
Derick Montague602e98a2020-10-21 16:20:00 -0500175 },
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530176 },
177 created() {
178 this.startLoader();
179 this.$store
180 .dispatch('localUsers/getAccountSettings')
181 .finally(() => this.endLoader());
182 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530183 validations() {
184 return {
185 form: {
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530186 isUtcDisplay: { required },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530187 newPassword: {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530188 minLength: minLength(this.passwordRequirements.minLength),
Derick Montague602e98a2020-10-21 16:20:00 -0500189 maxLength: maxLength(this.passwordRequirements.maxLength),
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530190 },
191 confirmPassword: {
Derick Montague602e98a2020-10-21 16:20:00 -0500192 sameAsPassword: sameAs('newPassword'),
193 },
194 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530195 };
196 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530197 methods: {
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530198 saveNewPasswordInputData() {
199 this.$v.form.confirmPassword.$touch();
200 this.$v.form.newPassword.$touch();
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530201 if (this.$v.$invalid) return;
202 let userData = {
203 originalUsername: this.username,
Derick Montague602e98a2020-10-21 16:20:00 -0500204 password: this.form.newPassword,
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530205 };
206
207 this.$store
208 .dispatch('localUsers/updateUser', userData)
Derick Montague602e98a2020-10-21 16:20:00 -0500209 .then((message) => {
Sukanya Pandey9422e1a2020-07-13 19:13:07 +0530210 (this.form.newPassword = ''), (this.form.confirmPassword = '');
211 this.$v.$reset();
212 this.successToast(message);
213 })
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530214 .catch(({ message }) => this.errorToast(message));
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530215 },
216 saveTimeZonePrefrenceData() {
217 localStorage.setItem('storedUtcDisplay', this.form.isUtcDisplay);
218 this.$store.commit('global/setUtcTime', this.form.isUtcDisplay);
219 this.successToast(
220 i18n.t('pageProfileSettings.toast.successSaveSettings')
221 );
222 },
223 submitForm() {
224 if (this.form.confirmPassword || this.form.newPassword) {
225 this.saveNewPasswordInputData();
226 }
227 if (this.$v.form.isUtcDisplay.$anyDirty) {
228 this.saveTimeZonePrefrenceData();
229 }
Derick Montague602e98a2020-10-21 16:20:00 -0500230 },
231 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530232};
233</script>