aboutsummaryrefslogtreecommitdiffstats
path: root/src/wwwroot/scripts/front/logginn.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/wwwroot/scripts/front/logginn.js')
-rw-r--r--src/wwwroot/scripts/front/logginn.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/wwwroot/scripts/front/logginn.js b/src/wwwroot/scripts/front/logginn.js
new file mode 100644
index 0000000..f15a323
--- /dev/null
+++ b/src/wwwroot/scripts/front/logginn.js
@@ -0,0 +1,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();
+ }
+ });
+ });
+}