async function login() { // tell the user the app is loading document.getElementById("loginSubmit").value = "Loading"; // this.preventDefault(); // get login details let name = document.getElementById("name").value; let password = document.getElementById("password").value; // request login let response = await fetch("/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ name: name, password: password }) }); // if failed red button // else switch screen if (response.status !== 200) { document.getElementById("loginSubmit").classList.add("error"); document.getElementById("loginSubmit").value = "Failed"; return; } else { // switch screen document.getElementById("login").setAttribute("style", "display: none;"); document.getElementById("mainPage").setAttribute("style", ""); } // store user data in session storage let data = await response.json(); sessionStorage.setItem("uid", data.uid); sessionStorage.setItem("name", data.name); sessionStorage.setItem("role", data.role); // if role is admin, keep auto styling if (sessionStorage.getItem("role") !== "admin") { document.getElementById("addButton").setAttribute("style", "display: none;"); document.getElementById("taskButton").classList.value = "half"; document.getElementById("historyButton").classList.value = "half"; document.getElementById("menu").classList.value = "flex two"; } await populateScreen(); } async function populateScreen() { // get task data let taskPage = document.getElementById("tasks"); taskPage.innerHTML = ""; let response = await fetch("/getTasks"); let tasksRaw = await response.json(); let tasks = tasksRaw.tasks; // get historical data let historyPage = document.getElementById("historyContent"); historyPage.innerHTML = ""; response = await fetch("/getHistory"); let historyRaw = await response.json(); let history = historyRaw.history; // get points data let statsPage = document.getElementById("statData"); statsPage.innerText = ""; response = await fetch("/getUserPoints"); let statsRaw = await response.json(); let stats = statsRaw.userPoints; // if it is a user make the tasks add points // or if admin make it do nothing if (sessionStorage.getItem("role") === "user") { for (let i = 0; i < tasks.length; i++) { taskPage.innerHTML += `

${tasks[i].name}

${tasks[i].points} points

` } } else if (sessionStorage.getItem("role") === "admin") { for (let i = 0; i < tasks.length; i++) { taskPage.innerHTML += `

${tasks[i].name}

${tasks[i].points} points

` } } for (let i = (history.length -1); i >= 0; i-=1) { historyPage.innerHTML += `

User: ${history[i].user}

Task: ${history[i].task}

Time: ${history[i].time}

Points gained: ${history[i].pointsGained}

` } for (let i = 0; i < stats.length; i++) { // put user points in box statsPage.innerText += `${stats[i].name}: ${stats[i].points} \n` } } async function completeTask(taskID) { let points = document.getElementById(`${taskID}-p`).innerText.split(" ")[0]; let time = new Date().toISOString().split(".")[0]; let uid = sessionStorage.getItem("uid"); await fetch("/completeTask", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ uid: Number(uid), tid: Number(taskID), time: time, pointsGained: Number(points) }) }); } async function switchScreen(button) { await populateScreen(); document.getElementById("tasks").setAttribute("style", "display: none;"); document.getElementById("history").setAttribute("style", "display: none;"); document.getElementById("addTask").setAttribute("style", "display: none;"); if (button === "task") { document.getElementById("tasks").setAttribute("style", ""); } else if (button === "history") { document.getElementById("history").setAttribute("style", ""); } else if (button === "add") { document.getElementById("addTask").setAttribute("style", ""); } }