Newer
Older
class="w-full max-w-md mx-auto mb-auto md:ring-1 ring-gray-300 overflow-hidden rounded-xl p-4"
class="text-xl md:text-2xl font-medium text-center text-primary-light mt-4 mb-8"
Titus Netland
committed
<div class="grid grid-cols-1 gap-6 mt-4">
<div>
<input
class="block w-full px-4 py-2 mt-2 text-gray-700 placeholder-gray-500 bg-white border rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-primary-light dark:focus:border-primary-light focus:ring-opacity-40 focus:outline-none focus:ring focus:ring-primary-light"
v-model="email"
id="email"
<div class="text-error-medium text-sm" v-show="showError">
{{ error.$message }}
</div>
</div>
<div class="text-error-medium text-sm" v-show="errorMessage">
{{ errorMessage }}
</div>
<input
class="block w-full px-4 py-2 mt-2 text-gray-700 placeholder-gray-500 bg-white border rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-primary-light dark:focus:border-primary-light focus:ring-opacity-40 focus:outline-none focus:ring focus:ring-primary-light"
v-model="password"
id="password"
>
{{ error.$message }}
</div>
</div>
<input
class="block w-full px-4 py-2 mt-2 text-gray-700 placeholder-gray-500 bg-white border rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-primary-light dark:focus:border-primary-light focus:ring-opacity-40 focus:outline-none focus:ring focus:ring-primary-light"
v-model="confirmPassword"
>
{{ error.$message }}
</div>
</div>
<input
class="block w-full px-4 py-2 mt-2 text-gray-700 placeholder-gray-500 bg-white border rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-primary-light dark:focus:border-primary-light focus:ring-opacity-40 focus:outline-none focus:ring focus:ring-primary-light"
data-test="firstNameTest"
v-model="firstName"
id="firstName"
>
{{ error.$message }}
</div>
</div>
<input
class="block w-full px-4 py-2 mt-2 text-gray-700 placeholder-gray-500 bg-white border rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-primary-light dark:focus:border-primary-light focus:ring-opacity-40 focus:outline-none focus:ring focus:ring-primary-light"
v-model="lastName"
>
{{ error.$message }}
</div>
</div>
<input
class="block w-full px-4 py-2 mt-2 text-gray-700 placeholder-gray-500 bg-white border rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-primary-light dark:focus:border-primary-light focus:ring-opacity-40 focus:outline-none focus:ring focus:ring-primary-light"
v-model="address"
>
{{ error.$message }}
</div>
</div>
</div>
</div>
<div class="flex justify-end mt-6">
<Button @click="submit" :text="'Opprett'"></Button>
import useVuelidate from "@vuelidate/core";
import { doLogin } from "@/utils/apiutil";
import {
required,
email,
minLength,
sameAs,
helpers,
} from "@vuelidate/validators";
import Button from "@/components/BaseComponents/ColoredButton";
import UserService from "@/services/user.service";
// const isEmailTaken = (value) =>
// fetch(`/api/unique/${value}`).then((r) => r.json()); // check the email in the server
setup: () => ({ v$: useVuelidate() }),
data() {
return {
password: "",
confirmPassword: "",
firstName: "",
lastName: "",
address: "",
};
},
validations() {
return {
email: {
required: helpers.withMessage(`Feltet må være utfylt`, required),
// isUnique: helpers.withAsync(isEmailTaken),
},
required: helpers.withMessage(`Feltet må være utfylt`, required),
minLength: helpers.withMessage(
"Passordet må være minst 8 karakterer lang",
minLength(8)
),
sameAs: helpers.withMessage(
"Passordene må være like",
sameAs(this.password)
),
required: helpers.withMessage(`Feltet må være utfylt`, required),
},
firstName: {
required: helpers.withMessage(`Feltet må være utfylt`, required),
},
lastName: {
required: helpers.withMessage(`Feltet må være utfylt`, required),
},
address: {
required: helpers.withMessage(`Feltet må være utfylt`, required),
//Validate form
const result = await this.v$.$validate();
if (!result) {
this.loading = false;
return;
}
//Send a request to create a user and save success as a bool
const userCreated = await this.sendRegisterRequest();
//If a user is created succsessfully, try to login
//If we get this far, we will be pushed anyway so there is no point updating "loading"
const loginRequest = {
email: this.email,
};
const loginResponse = await doLogin(loginRequest);
this.errorMessage = "Failed to log in with new user";
this.$store.commit("logout");
const adminList = await UserService.getAdminList();
this.$store.commit("addAdminList", adminList);
},
async sendRegisterRequest() {
const res = await UserService.registerUser(userInfo);
this.errorMessage = res;
return res.status === 200;