blob: 0b1b6897a787a22a3eac8c5552f854bee5d8c55b [file] [log] [blame]
Yoshie Muranaka33058572020-06-16 13:21:21 -07001<template>
2 <div class="change-password-container mx-auto ml-md-5 mb-3">
3 <alert variant="danger" class="mb-4">
4 <p>{{ $t('pageChangePassword.changePasswordAlertMessage') }}</p>
5 </alert>
6 <dl>
7 <dt>{{ $t('pageChangePassword.username') }}</dt>
8 <dd>{{ username }}</dd>
9 </dl>
10 <b-form novalidate @submit.prevent="changePassword">
11 <b-form-group
12 label-for="password"
13 :label="$t('pageChangePassword.newPassword')"
14 >
15 <input-password-toggle>
16 <b-form-input
17 id="password"
18 v-model="form.password"
19 autofocus="autofocus"
20 type="password"
21 :state="getValidationState($v.form.password)"
22 @blur="$v.form.password.$touch()"
23 >
24 </b-form-input>
25 <b-form-invalid-feedback role="alert">
26 <template v-if="!$v.form.password.required">
27 {{ $t('global.form.fieldRequired') }}
28 </template>
29 </b-form-invalid-feedback>
30 </input-password-toggle>
31 </b-form-group>
32 <b-form-group
33 label-for="password-confirm"
34 :label="$t('pageChangePassword.confirmNewPassword')"
35 >
36 <input-password-toggle>
37 <b-form-input
38 id="password-confirm"
39 v-model="form.passwordConfirm"
40 type="password"
41 :state="getValidationState($v.form.passwordConfirm)"
42 @blur="$v.form.passwordConfirm.$touch()"
43 >
44 </b-form-input>
45 <b-form-invalid-feedback role="alert">
46 <template v-if="!$v.form.passwordConfirm.required">
47 {{ $t('global.form.fieldRequired') }}
48 </template>
49 <template v-else-if="!$v.form.passwordConfirm.sameAsPassword">
50 {{ $t('global.form.passwordsDoNotMatch') }}
51 </template>
52 </b-form-invalid-feedback>
53 </input-password-toggle>
54 </b-form-group>
55 <div class="text-right">
56 <b-button type="button" variant="link" to="login" @click="goBack">
57 {{ $t('pageChangePassword.goBack') }}
58 </b-button>
59 <b-button type="submit" variant="primary">
60 {{ $t('pageChangePassword.changePassword') }}
61 </b-button>
62 </div>
63 </b-form>
64 </div>
65</template>
66
67<script>
68import { required, sameAs } from 'vuelidate/lib/validators';
69import Alert from '@/components/Global/Alert';
70import VuelidateMixin from '@/components/Mixins/VuelidateMixin';
71import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
72
73export default {
74 name: 'ChangePassword',
75 components: { Alert, InputPasswordToggle },
76 mixins: [VuelidateMixin],
77 data() {
78 return {
79 form: {
80 password: null,
81 passwordConfirm: null
82 },
83 username: this.$store.getters['global/username']
84 };
85 },
86 validations() {
87 return {
88 form: {
89 password: { required },
90 passwordConfirm: {
91 required,
92 sameAsPassword: sameAs('password')
93 }
94 }
95 };
96 },
97 methods: {
98 goBack() {
99 // Remove temporary session created if navigating back
100 // to the Login page
101 this.$store.commit('authentication/logout');
102 },
103 changePassword() {
104 // Should make PATCH request with new password
105 // then reroute to Overview page
106 }
107 }
108};
109</script>
110
111<style lang="scss" scoped>
112.change-password-container {
113 max-width: 360px;
114}
115</style>