tolulope-od/banka

View on GitHub
www/js/loginAuth.js

Summary

Maintainability
A
2 hrs
Test Coverage
/* global window, document, fetch, localStorage, Headers */
/* eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsFor": ["errors"] }] */

const API_PREFIX = 'https://bankaa-app.herokuapp.com/api/v1/';

const loginBtn = document.getElementById('login-btn');
const error = document.getElementById('login-error');

const clearErrors = errors => {
  errors.innerHTML = '';
};

const loginUser = e => {
  e.preventDefault();
  clearErrors(error);
  loginBtn.value = 'LOADING..';
  loginBtn.disabled = true;
  loginBtn.style.backgroundColor = 'grey';
  error.innerHTML =
    '<center><img src="https://res.cloudinary.com/tolulope-od/image/upload/v1557908999/loading_o1y5v6.gif" width="150" /></center>';
  const email = document.getElementById('user-email').value;
  const password = document.getElementById('user-password').value;
  const headers = new Headers();
  headers.append('Content-Type', 'application/json');
  fetch(`${API_PREFIX}auth/signin`, {
    method: 'POST',
    headers,
    body: JSON.stringify({ email, password })
  })
    .then(res => res.json())
    .then(response => {
      const { data } = response;
      loginBtn.value = 'LOGIN';
      loginBtn.disabled = false;
      loginBtn.style.backgroundColor = null;
      if (response.status === 200) {
        const now = Date.now();
        const tokenExp = parseInt(now, 10) + 3600000;
        localStorage.setItem('banka-app-token', data[0].token);
        localStorage.setItem('banka-app-token:exp', tokenExp);
        localStorage.setItem('banka-app-user-type', data[0].type);
        localStorage.setItem('banka-app-user-firstName', data[0].firstName);
        localStorage.setItem('banka-app-user-lastName', data[0].lastName);

        if (data[0].type === 'client') {
          window.location = 'dashboard.html';
        }

        if (data[0].type === 'staff') {
          window.location = 'admin/dashboard.html';
        }
      }

      if (response.status === 400) {
        error.innerHTML = `${response.error}`;
      }

      if (response.status === 404) {
        error.innerHTML = `${response.error}`;
      }
    })
    .catch(err => {
      const { log } = console;
      loginBtn.value = 'LOGIN';
      loginBtn.disabled = false;
      loginBtn.style.backgroundColor = null;
      error.innerHTML = 'An error occurred';
      log(err);
    });
};

// eslint-disable-next-line no-unused-vars
const checkToken = () => {
  const isToken = localStorage.getItem('banka-app-token');
  const tokenExp = localStorage.getItem('banka-app-token:exp');
  const now = Date.now();
  if (isToken && parseInt(tokenExp, 10) > now) {
    const userType = localStorage.getItem('banka-app-user-type');
    if (userType === 'staff') {
      window.location = 'admin/dashboard.html';
    } else {
      window.location = 'dashboard.html';
    }
  }
};

document.getElementById('login-form').addEventListener('submit', loginUser);