Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<script lang="ts" setup>
import { computed, ref, watch } from 'vue'
import { useUserStore } from '@/stores/userStore'
import ModalComponent from '@/components/ModalComponent.vue'
import axios from 'axios'
const username = ref<string>('')
const password = ref<string>('')
const showPassword = ref<boolean>(false)
const errorMessage = ref<string>('')
const isModalOpen = ref<boolean>(false)
const resetEmail = ref<string>('')
const emailRegex = /^[a-zA-Z0-9_+&*-]+(?:\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,7}$/
const userStore = useUserStore()
const isEmailValid = computed(() => emailRegex.test(resetEmail.value))
const isSendingEmail = ref(false)
const successMessage = ref<string | null>(null)
const modalErrorMessage = ref<string | null>(null)
const submitForm = () => {
userStore.login(username.value, password.value)
}
const toggleShowPassword = () => {
showPassword.value = !showPassword.value
}
const submitReset = async () => {
isSendingEmail.value = true
await axios
.post('http://localhost:8080/forgotPassword/changePasswordRequest', {
email: resetEmail.value
})
.then(() => {
successMessage.value =
'E-posten er sendt. Vennligst sjekk innboksen din for instrukser. OBS: E-posten kan havne i spam-mappen'
})
.catch((error) => {
console.error(error)
modalErrorMessage.value = 'Noe gikk galt. Vennligst prøv igjen.'
})
isSendingEmail.value = false
}
const closeModal = () => {
isModalOpen.value = false
isSendingEmail.value = false
modalErrorMessage.value = null
resetEmail.value = ''
successMessage.value = null
}
watch(
() => userStore.errorMessage,
(newValue: string) => {
errorMessage.value = newValue
}
)
</script>
<template>
<div class="flex flex-col justify-center gap-5 w-full">
<div class="flex flex-col">
<p class="mx-4">Brukernavn</p>
<input
v-model="username"
name="username"
placeholder="Skriv inn brukernavn"
type="text"
/>
</div>
<div class="flex flex-col">
<p class="mx-4">Passord</p>
<div class="relative">
<input
name="password"
v-model="password"
:type="showPassword ? 'text' : 'password'"
class="w-full"
placeholder="Skriv inn passord"
/>
<button
class="absolute right-0 top-1 bg-transparent hover:bg-transparent mr-4 mt-1"
@click="toggleShowPassword"
>
{{ showPassword ? '🔓' : '🔒' }}
</button>
</div>
<a
class="hover:underline hover:bg-transparent hover:transition-none hover:p-0 cursor-pointer text-right text-sm mr-4"
@click="isModalOpen = true"
>Glemt passord?</a
>
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
</div>
<div class="flex flex-row gap-5">
<button
name="submit"
:disabled="'' == username.valueOf() || '' == password.valueOf()"
class="primary grow-0"
@click="submitForm"
>
Logg inn
</button>
<p>{{ errorMessage }}</p>
</div>
</div>
<modal-component
v-if="isModalOpen"
:title="'Glemt passord'"
:message="'Vennligst skriv inn e-posten din for å endre passordet.'"
>
<div v-if="isSendingEmail" class="flex justify-center items-center">
<div
class="p-3 animate-spin bg-gradient-to-r from-lime-500 from-30% to-green-600 to-90% md:w-18 md:h-20 h-20 w-20 aspect-square rounded-full"
>
<div class="rounded-full h-full w-full bg-slate-100"></div>
</div>
</div>
<div v-else-if="successMessage">
<p class="text-green-500 text-center">{{ successMessage }}</p>
<button
class="active-button font-bold py-2 px-4 w-1/2 mt-4 border-2 disabled:border-transparent"
@click="closeModal"
>
Lukk
</button>
</div>
<div v-else-if="modalErrorMessage">
<p class="text-red-500 text-center">{{ modalErrorMessage }}</p>
<button
class="active-button font-bold py-2 px-4 w-1/2 mt-4 border-2 disabled:border-transparent"
@click="closeModal"
>
Lukk
</button>
</div>
<div v-else>
<input
v-model="resetEmail"
class="border border-gray-300 p-2 w-full mb-7"
placeholder="Skriv e-postadressen din her"
type="email"
/>
<div class="flex gap-5 mt-4">
<button
:disabled="!isEmailValid"
class="active-button font-bold py-2 px-4 w-1/2 border-2 disabled:border-transparent"
@click="submitReset"
>
Send mail
</button>
<button
class="active-button font-bold py-2 px-4 w-1/2 border-2 disabled:border-transparent"
@click="closeModal"
>
Lukk
</button>
</div>
</div>
</modal-component>
</template>