blob: 3b0bdc2ca7fc6247eabca3f2882865f361fadc03 [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 >
102 {{ $t('pageProfileSettings.defaultUTC') }}
103 </b-form-radio>
104 <b-form-radio
105 v-model="form.isUtcDisplay"
106 :value="false"
Sukanya Pandey4334d262020-07-29 11:12:06 +0530107 data-test-id="profileSettings-radio-browserOffset"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530108 >
109 {{
110 $t('pageProfileSettings.browserOffset', {
Derick Montague602e98a2020-10-21 16:20:00 -0500111 timezone,
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530112 })
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';
Sukanya Pandey570a74f2020-12-21 16:12:05 +0530134import { maxLength, minLength, sameAs } from 'vuelidate/lib/validators';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530135import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500136import LocalTimezoneLabelMixin from '@/components/Mixins/LocalTimezoneLabelMixin';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530137import PageTitle from '@/components/Global/PageTitle';
138import PageSection from '@/components/Global/PageSection';
139import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530140
141export default {
142 name: 'ProfileSettings',
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530143 components: { InputPasswordToggle, PageSection, PageTitle },
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500144 mixins: [
145 BVToastMixin,
146 LocalTimezoneLabelMixin,
147 LoadingBarMixin,
Derick Montague602e98a2020-10-21 16:20:00 -0500148 VuelidateMixin,
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500149 ],
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530150 data() {
151 return {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530152 form: {
153 newPassword: '',
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530154 confirmPassword: '',
Derick Montague602e98a2020-10-21 16:20:00 -0500155 isUtcDisplay: this.$store.getters['global/isUtcDisplay'],
156 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530157 };
158 },
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530159 computed: {
160 username() {
161 return this.$store.getters['global/username'];
162 },
163 passwordRequirements() {
164 return this.$store.getters['localUsers/accountPasswordRequirements'];
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530165 },
166 timezone() {
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500167 return this.localOffset();
Derick Montague602e98a2020-10-21 16:20:00 -0500168 },
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530169 },
170 created() {
171 this.startLoader();
172 this.$store
173 .dispatch('localUsers/getAccountSettings')
174 .finally(() => this.endLoader());
175 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530176 validations() {
177 return {
178 form: {
179 newPassword: {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530180 minLength: minLength(this.passwordRequirements.minLength),
Derick Montague602e98a2020-10-21 16:20:00 -0500181 maxLength: maxLength(this.passwordRequirements.maxLength),
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530182 },
183 confirmPassword: {
Derick Montague602e98a2020-10-21 16:20:00 -0500184 sameAsPassword: sameAs('newPassword'),
185 },
186 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530187 };
188 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530189 methods: {
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530190 saveNewPasswordInputData() {
191 this.$v.form.confirmPassword.$touch();
192 this.$v.form.newPassword.$touch();
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530193 if (this.$v.$invalid) return;
194 let userData = {
195 originalUsername: this.username,
Derick Montague602e98a2020-10-21 16:20:00 -0500196 password: this.form.newPassword,
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530197 };
198
199 this.$store
200 .dispatch('localUsers/updateUser', userData)
Derick Montague602e98a2020-10-21 16:20:00 -0500201 .then((message) => {
Sukanya Pandey9422e1a2020-07-13 19:13:07 +0530202 (this.form.newPassword = ''), (this.form.confirmPassword = '');
203 this.$v.$reset();
204 this.successToast(message);
205 })
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530206 .catch(({ message }) => this.errorToast(message));
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530207 },
208 saveTimeZonePrefrenceData() {
209 localStorage.setItem('storedUtcDisplay', this.form.isUtcDisplay);
210 this.$store.commit('global/setUtcTime', this.form.isUtcDisplay);
211 this.successToast(
212 i18n.t('pageProfileSettings.toast.successSaveSettings')
213 );
214 },
215 submitForm() {
216 if (this.form.confirmPassword || this.form.newPassword) {
217 this.saveNewPasswordInputData();
218 }
Sukanya Pandey570a74f2020-12-21 16:12:05 +0530219 this.saveTimeZonePrefrenceData();
Derick Montague602e98a2020-10-21 16:20:00 -0500220 },
221 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530222};
223</script>