diff --git a/src/components/LoginForm.vue b/src/components/LoginForm.vue index 4f8b255939253b9470ee2170e24759f931c0d5fa..82d0ff7e2022f5779363ad85633f9844f63fd1aa 100644 --- a/src/components/LoginForm.vue +++ b/src/components/LoginForm.vue @@ -1,162 +1,110 @@ -<template> - <div> - <v-col - align="center" - justify="space-around" - > - <v-img - max-width="45%" - :src="require('../assets/logo3.svg')" - align="center" - ></v-img> - </v-col> - - <v-form - ref="form" - v-model="valid" - lazy-validation - > - <v-col> - <v-text-field - v-model="user.email" - :rules="emailRules" - label="E-mail" - required - ></v-text-field> - </v-col> - - - <v-col - align="right" - > - <v-text-field - v-model="user.password" - :append-icon="showPassword ? 'mdi-eye' : 'mdi-eye-off'" - :rules="[rules.required, rules.min]" - :type="showPassword ? 'text' : 'password'" - name="input-10-1" - label="Password" - counter - @click:append="showPassword = !showPassword" - ></v-text-field> - - <div class="text-decoration-underline mt-n4 mr-10"> - Glemt passord - </div> - </v-col> - - - - <v-col - align="center" - justify="space-around" - > - <v-btn - :disabled="!valid" - color="success" - class="mb-4 mt-4" - width="50%" - height="40px" - @click="loginClicked" - > - Logg inn - </v-btn> - - <div> - <a - href="/" - class="text-decoration-none" - >Ny bruker</a> - </div> - </v-col> - - - - </v-form> - </div> - -</template> - -<script> -import useVuelidate from "@vuelidate/core"; -import { required, email, minLength, helpers } from "@vuelidate/validators"; -import { doLogin } from "@/utils/apiutil"; -import { mapState } from "vuex"; - -export default { - name: "LoginForm.vue", - - setup() { - return { v$: useVuelidate() }; - }, - - validations() { - return { - user: { - email: { - required, - email: helpers.withMessage(`E-posten er ugyldig`, email), - }, - password: { - required, - min: helpers.withMessage( - ({ $params }) => `Passordet må inneholde minst ${$params.min} tegn`, - minLength(8) - ), - }, - }, - }; - }, - - computed: mapState({ - token: (state) => state.user.token, - }), - - data() { - return { - message: "", - user: { - email: "", - password: "", - }, - - showPassword: false, - valid : true, - emailRules: [ - v => !!v || 'E-mail is required', - v => /.+@.+\..+/.test(v) || 'E-mail must be valid', - ], - rules: { - required: value => !!value || 'Required.', - min: v => v.length >= 8 || 'Min 8 characters', - }, - }; - }, - - methods: { - async loginClicked() { - console.log(this.user.email + " " + this.user.password); - this.showError = true; - const loginRequest = { - email: this.user.email, - password: this.user.password, - }; - const loginResponse = await doLogin(loginRequest); - - if (loginResponse === "Failed login") { - this.message = "kunne ikke logge inn"; - this.$store.commit('logout'); - return; - } - - this.$store.commit("saveToken", loginResponse); - console.log(loginResponse); - }, - - - validate () { - this.$refs.form.validate() - }, - }, -}; -</script> +<!--suppress HtmlDeprecatedAttribute --> +<template> + <div> + <v-col align="center" justify="space-around" class="mt-16"> + <v-img + max-width="45%" + :src="require('../assets/logo3.svg')" + align="center" + ></v-img> + </v-col> + + <v-form ref="form" v-model="valid" lazy-validation> + <v-col> + <v-text-field + v-model="user.email" + :rules="[rules.email]" + label="Epost" + required + ></v-text-field> + </v-col> + + <v-col align="right"> + <v-text-field + v-model="user.password" + :append-icon="showPassword ? 'mdi-eye' : 'mdi-eye-off'" + :rules="[rules.required, rules.min]" + :type="showPassword ? 'text' : 'password'" + name="input-10-1" + label="Passord" + counter + @click:append="showPassword = !showPassword" + ></v-text-field> + + <div class="text-decoration-underline mt-n4 mr-10">Glemt passord</div> + </v-col> + + <v-col align="center" justify="space-around"> + <v-btn + :disabled="!valid" + color="success" + class="mb-4 mt-4" + width="50%" + height="40px" + @click="loginClicked" + > + Logg inn + </v-btn> + + <div> + <a href="/" class="text-decoration-none">Ny bruker</a> + </div> + </v-col> + </v-form> + </div> +</template> + +<script> +import { doLogin } from "@/utils/apiutil"; +import { mapState } from "vuex"; + +export default { + name: "LoginForm.vue", + + computed: mapState({ + token: (state) => state.user.token, + }), + + data() { + return { + message: "", + user: { + email: "", + password: "", + }, + + showPassword: false, + valid: true, + rules: { + required: (value) => !!value || "Feltet er påkrevd", + min: (v) => v.length >= 8 || "Minimum 8 tegn", + email: (v) => /.+@.+\..+/.test(v) || "Epost adressen må være gyldig", + }, + }; + }, + + methods: { + async loginClicked() { + console.log(this.user.email + " " + this.user.password); + const loginRequest = { + email: this.user.email, + password: this.user.password, + }; + const loginResponse = await doLogin(loginRequest); + + if (loginResponse === "Failed login") { + this.message = "Feil brukernavn/passord"; + this.$store.commit("logout"); + return; + } + + this.$store.commit("saveToken", loginResponse); + console.log(loginResponse); + }, + + validate() { + this.$refs.form.validate(); + }, + }, +}; +</script> diff --git a/src/components/NewPasswordForm.vue b/src/components/NewPasswordForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..5800624d849148ac6043af8f6f908c002f55d61e --- /dev/null +++ b/src/components/NewPasswordForm.vue @@ -0,0 +1,75 @@ +<template> + <div> + <v-col align="center" justify="space-around" class="mt-16"> + <v-img + max-width="45%" + :src="require('../assets/logo3.svg')" + align="center" + /> + </v-col> + + <v-form ref="form" v-model="valid" lazy-validation class="mt-8"> + <v-text-field + v-model="user.password" + :rules="[rules.required, rules.min]" + :type="'password'" + name="input-10-1" + label="Passord" + counter + ></v-text-field> + + <v-text-field + v-model="user.rePassword" + :rules="[rules.required, rules.min, rules.passwordConfirmation]" + :type="'password'" + name="input-10-1" + label="Confirm Password" + counter + ></v-text-field> + + <v-col justify="space-around" align="center"> + <v-btn + :disabled="!valid" + color="success" + class="mb-4 mt-4" + width="50%" + height="40px" + @click="setNewPassword" + > + Endre passord + </v-btn> + </v-col> + </v-form> + </div> +</template> + +<script> +export default { + name: "NewPasswordForm.vue", + + data() { + return { + user: { + password: "", + rePassword: "", + }, + + valid: true, + rules: { + required: (value) => !!value || "Feltet er påkrevd", + min: (v) => v.length >= 8 || "Minimum 8 tegn", + passwordConfirmation: (v) => v === this.user.password || "Passordene må være like" + }, + }; + }, + + methods: { + async setNewPassword() { + + }, + validate() { + this.$refs.form.validate(); + }, + }, +}; +</script> diff --git a/src/router/index.js b/src/router/index.js index ab941a8dfdac0ac33b79511c17842390cdd6efa6..499849a932f5d5db6a9389fa270ee7bda4b03771 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,6 +1,7 @@ import { createRouter, createWebHistory } from "vue-router"; import HomeView from "../views/HomeView.vue"; import LoginView from "../views/LoginView.vue"; +import NewPasswordView from "../views/NewPasswordView"; const routes = [ { @@ -22,6 +23,11 @@ const routes = [ name: "login", component: LoginView, }, + { + path: "/newPassword", + name: "newPassword", + component: NewPasswordView, + }, ]; const router = createRouter({ diff --git a/src/views/NewPasswordView.vue b/src/views/NewPasswordView.vue new file mode 100644 index 0000000000000000000000000000000000000000..bcccd80e96de1cf888b6cc0adb82baa0e48fc8fd --- /dev/null +++ b/src/views/NewPasswordView.vue @@ -0,0 +1,23 @@ +<template> + <div class="newPasswordPage"> + <NewPasswordForm></NewPasswordForm> + </div> +</template> + +<script> +import NewPasswordForm from "@/components/NewPasswordForm"; +export default { + name: "NewPasswordView.vue", + components: { + NewPasswordForm, + }, +}; +</script> + +<style scoped> +.newPasswordPage { + background-color: white; + height: 100%; + overflow: auto; +} +</style>