aboutsummaryrefslogtreecommitdiffstats
path: root/src/wwwroot/scripts/front/logginn.js
blob: f15a3236da47d5d62279a24a02d1fdcaf9669f56 (plain) (blame)
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
import {$, pageInit} from "../base";
import {utilites} from "../utilities";
import {login} from "../api/account-api";
import {strings} from "../i10n.ts";

const submitButton = $("#submit");
const submitButtonSpinner = $("#submit .spinner-border");
const errorContainer = $("#error");
const errorMessage = $("#error-message");
const errorTitle = $("#error-title");
const continueTo = new URL(location.href).searchParams.get("ReturnUrl")
    ? new URL(location.href).searchParams.get("ReturnUrl")
    : "/kontoret";
const email = $("#input-email");
const password = $("#input-password");
const persist = $("#persist-session");
const loginForm = $("#login-form");

const loading = {
    show() {
        submitButton.classList.add("disabled");
        submitButtonSpinner.classList.remove("d-none");
    },
    hide() {
        submitButton.classList.remove("disabled");
        submitButtonSpinner.classList.add("d-none");
    },
};

const error = {
    show(title = strings.languageSpesific.an_error_occured, message = strings.languageSpesific.try_again_soon) {
        errorMessage.innerText = message;
        errorTitle.innerText = title;
        errorContainer.classList.remove("d-none");
    },
    hide() {
        errorMessage.innerText = "";
        errorTitle.innerText = "";
        errorContainer.classList.add("d-none");
    },
};

const form = {
    submit() {
        loading.show();
        error.hide();
        let payload = {
            username: email.value,
            password: password.value,
            persist: persist.checked,
        };
        login(payload, $("input[name=\"xsrf\"]").value).then((response) => {
            if (response.status === 200) {
                error.hide();
                location.href = continueTo;
            } else {
                utilites.handleError(response, {
                    title: strings.languageSpesific.an_unknown_error_occured,
                    message: strings.languageSpesific.try_again_soon,
                });
                loading.hide();
            }
        }).catch((err) => console.log(err));
    },
    isValid() {
        email.removeAttribute("aria-invalid");
        password.removeAttribute("aria-invalid");
        if (!email.value || !utilites.validators.isEmail(email.value)) {
            error.show(undefined, strings.languageSpesific.the_email_address + " " + strings.languageSpesific.is_invalid_LC);
            email.setAttribute("aria-invalid", "true");
            return false;
        }
        if (!password.value) {
            error.show(undefined, strings.languageSpesific.the_password + " " + strings.languageSpesific.is_invalid_LC);
            password.setAttribute("aria-invalid", "true");
            return false;
        }
        return true;
    },
};

if (location.pathname.startsWith("/logginn")) {
    pageInit(() => {
        loginForm.addEventListener("submit", (e) => {
            e.preventDefault();
            e.stopPropagation();
            if (form.isValid()) {
                form.submit();
            }
        });
    });
}