blob: 5d84ccef2da298dc23a04c423238e92589eb0730 [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
Damian Celicobcb0ab42022-08-23 03:18:58 +020027 id="input-group-0"
28 :label="$t('pageProfileSettings.currentPassword')"
29 label-for="input-0"
30 >
31 <input-password-toggle>
32 <b-form-input
33 id="old-password"
34 v-model="form.currentPassword"
35 type="password"
36 data-test-id="profileSettings-input-ocurrentPassword"
37 class="form-control-with-button"
38 />
39 </input-password-toggle>
40 </b-form-group>
41 <b-form-group
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053042 id="input-group-1"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053043 :label="$t('pageProfileSettings.newPassword')"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053044 label-for="input-1"
45 >
46 <b-form-text id="password-help-block">
47 {{
Sandeepa Singhb4406162021-07-26 15:05:39 +053048 $t('pageUserManagement.modal.passwordMustBeBetween', {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053049 min: passwordRequirements.minLength,
Derick Montague602e98a2020-10-21 16:20:00 -050050 max: passwordRequirements.maxLength,
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053051 })
52 }}
53 </b-form-text>
54 <input-password-toggle>
55 <b-form-input
56 id="password"
57 v-model="form.newPassword"
58 type="password"
59 aria-describedby="password-help-block"
60 :state="getValidationState($v.form.newPassword)"
Sukanya Pandey4334d262020-07-29 11:12:06 +053061 data-test-id="profileSettings-input-newPassword"
Dixsie Wolmers5ea16782020-07-27 17:50:43 -050062 class="form-control-with-button"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053063 @input="$v.form.newPassword.$touch()"
64 />
65 <b-form-invalid-feedback role="alert">
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053066 <template
67 v-if="
68 !$v.form.newPassword.minLength ||
Derick Montague602e98a2020-10-21 16:20:00 -050069 !$v.form.newPassword.maxLength
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053070 "
71 >
72 {{
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053073 $t('pageProfileSettings.newPassLabelTextInfo', {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053074 min: passwordRequirements.minLength,
Derick Montague602e98a2020-10-21 16:20:00 -050075 max: passwordRequirements.maxLength,
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053076 })
77 }}
78 </template>
79 </b-form-invalid-feedback>
80 </input-password-toggle>
81 </b-form-group>
82 <b-form-group
83 id="input-group-2"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053084 :label="$t('pageProfileSettings.confirmPassword')"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053085 label-for="input-2"
86 >
87 <input-password-toggle>
88 <b-form-input
89 id="password-confirmation"
90 v-model="form.confirmPassword"
91 type="password"
92 :state="getValidationState($v.form.confirmPassword)"
Sukanya Pandey4334d262020-07-29 11:12:06 +053093 data-test-id="profileSettings-input-confirmPassword"
Dixsie Wolmers5ea16782020-07-27 17:50:43 -050094 class="form-control-with-button"
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053095 @input="$v.form.confirmPassword.$touch()"
96 />
97 <b-form-invalid-feedback role="alert">
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053098 <template v-if="!$v.form.confirmPassword.sameAsPassword">
99 {{ $t('pageProfileSettings.passwordsDoNotMatch') }}
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530100 </template>
101 </b-form-invalid-feedback>
102 </input-password-toggle>
103 </b-form-group>
104 </page-section>
105 </b-col>
106 </b-row>
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530107 <page-section :section-title="$t('pageProfileSettings.timezoneDisplay')">
108 <p>{{ $t('pageProfileSettings.timezoneDisplayDesc') }}</p>
109 <b-row>
110 <b-col md="9" lg="8" xl="9">
111 <b-form-group :label="$t('pageProfileSettings.timezone')">
112 <b-form-radio
113 v-model="form.isUtcDisplay"
114 :value="true"
Sukanya Pandey4334d262020-07-29 11:12:06 +0530115 data-test-id="profileSettings-radio-defaultUTC"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530116 >
117 {{ $t('pageProfileSettings.defaultUTC') }}
118 </b-form-radio>
119 <b-form-radio
120 v-model="form.isUtcDisplay"
121 :value="false"
Sukanya Pandey4334d262020-07-29 11:12:06 +0530122 data-test-id="profileSettings-radio-browserOffset"
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530123 >
124 {{
125 $t('pageProfileSettings.browserOffset', {
Derick Montague602e98a2020-10-21 16:20:00 -0500126 timezone,
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530127 })
128 }}
129 </b-form-radio>
130 </b-form-group>
131 </b-col>
132 </b-row>
133 </page-section>
Sukanya Pandey4334d262020-07-29 11:12:06 +0530134 <b-button
135 variant="primary"
136 type="submit"
137 data-test-id="profileSettings-button-saveSettings"
138 >
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530139 {{ $t('global.action.saveSettings') }}
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530140 </b-button>
141 </b-form>
142 </b-container>
143</template>
144
145<script>
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530146import BVToastMixin from '@/components/Mixins/BVToastMixin';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530147import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
Sukanya Pandey570a74f2020-12-21 16:12:05 +0530148import { maxLength, minLength, sameAs } from 'vuelidate/lib/validators';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530149import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500150import LocalTimezoneLabelMixin from '@/components/Mixins/LocalTimezoneLabelMixin';
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530151import PageTitle from '@/components/Global/PageTitle';
152import PageSection from '@/components/Global/PageSection';
153import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530154
155export default {
156 name: 'ProfileSettings',
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530157 components: { InputPasswordToggle, PageSection, PageTitle },
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500158 mixins: [
159 BVToastMixin,
160 LocalTimezoneLabelMixin,
161 LoadingBarMixin,
Derick Montague602e98a2020-10-21 16:20:00 -0500162 VuelidateMixin,
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500163 ],
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530164 data() {
165 return {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530166 form: {
167 newPassword: '',
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530168 confirmPassword: '',
Damian Celicobcb0ab42022-08-23 03:18:58 +0200169 currentPassword: '',
Derick Montague602e98a2020-10-21 16:20:00 -0500170 isUtcDisplay: this.$store.getters['global/isUtcDisplay'],
171 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530172 };
173 },
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530174 computed: {
175 username() {
176 return this.$store.getters['global/username'];
177 },
178 passwordRequirements() {
Sandeepa Singhb4406162021-07-26 15:05:39 +0530179 return this.$store.getters['userManagement/accountPasswordRequirements'];
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530180 },
181 timezone() {
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500182 return this.localOffset();
Derick Montague602e98a2020-10-21 16:20:00 -0500183 },
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530184 },
185 created() {
186 this.startLoader();
187 this.$store
Sandeepa Singhb4406162021-07-26 15:05:39 +0530188 .dispatch('userManagement/getAccountSettings')
Sukanya Pandeyb93608d2020-07-10 18:51:58 +0530189 .finally(() => this.endLoader());
190 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530191 validations() {
192 return {
193 form: {
194 newPassword: {
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530195 minLength: minLength(this.passwordRequirements.minLength),
Derick Montague602e98a2020-10-21 16:20:00 -0500196 maxLength: maxLength(this.passwordRequirements.maxLength),
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530197 },
198 confirmPassword: {
Derick Montague602e98a2020-10-21 16:20:00 -0500199 sameAsPassword: sameAs('newPassword'),
200 },
201 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530202 };
203 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530204 methods: {
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530205 saveNewPasswordInputData() {
206 this.$v.form.confirmPassword.$touch();
207 this.$v.form.newPassword.$touch();
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530208 if (this.$v.$invalid) return;
209 let userData = {
210 originalUsername: this.username,
Derick Montague602e98a2020-10-21 16:20:00 -0500211 password: this.form.newPassword,
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530212 };
213
214 this.$store
Sandeepa Singhb4406162021-07-26 15:05:39 +0530215 .dispatch('userManagement/updateUser', userData)
Derick Montague602e98a2020-10-21 16:20:00 -0500216 .then((message) => {
Damian Celicobcb0ab42022-08-23 03:18:58 +0200217 (this.form.newPassword = ''),
218 (this.form.confirmPassword = ''),
219 (this.form.currentPassword = '');
Sukanya Pandey9422e1a2020-07-13 19:13:07 +0530220 this.$v.$reset();
221 this.successToast(message);
Damian Celicobcb0ab42022-08-23 03:18:58 +0200222 this.$store.dispatch('authentication/logout');
Sukanya Pandey9422e1a2020-07-13 19:13:07 +0530223 })
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530224 .catch(({ message }) => this.errorToast(message));
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530225 },
226 saveTimeZonePrefrenceData() {
227 localStorage.setItem('storedUtcDisplay', this.form.isUtcDisplay);
228 this.$store.commit('global/setUtcTime', this.form.isUtcDisplay);
229 this.successToast(
Ed Tanous81323992024-02-27 11:26:24 -0800230 this.$t('pageProfileSettings.toast.successUpdatingTimeZone'),
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530231 );
232 },
233 submitForm() {
Damian Celicobcb0ab42022-08-23 03:18:58 +0200234 if (
235 this.form.confirmPassword &&
236 this.form.newPassword &&
237 this.form.currentPassword
238 ) {
239 this.confirmAuthenticate();
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +0530240 }
Damian Celicobcb0ab42022-08-23 03:18:58 +0200241 if (
242 this.$store.getters['global/isUtcDisplay'] != this.form.isUtcDisplay
243 ) {
244 this.saveTimeZonePrefrenceData();
245 }
246 },
247 confirmAuthenticate() {
248 this.$v.form.newPassword.$touch();
249 if (this.$v.$invalid) return;
250
251 const username = this.username;
252 const password = this.form.currentPassword;
253
254 this.$store
255 .dispatch('authentication/login', { username, password })
256 .then(() => {
257 this.saveNewPasswordInputData();
258 })
259 .catch(() => {
260 this.$v.$reset();
261 this.errorToast(
Ed Tanous81323992024-02-27 11:26:24 -0800262 this.$t('pageProfileSettings.toast.wrongCredentials'),
Damian Celicobcb0ab42022-08-23 03:18:58 +0200263 );
264 });
Derick Montague602e98a2020-10-21 16:20:00 -0500265 },
266 },
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530267};
268</script>