The Code
//Assign local storage to an array
let events = JSON.parse(localStorage.getItem("eventArray")) || eventArray;
filteredEvents = events;
displayAllData(events);
//Filter events by city
function getEvents(element) {
let city = element.getAttribute("data-string");
filteredEvents = events;
document.getElementById("statsHeader").innerHTML = `Stats for ${city} Events`;
if (city != 'All') {
filteredEvents = events.filter(function (item) {
if (item.city == city) {
return item;
}
})
}
displayStat();
}
//Display all stats or by city
function displayStat() {
let total = 0;
let average = 0;
let most = 0;
let least = -1;
let currentAttendance = 0;
//get the current attendance for internal porpuses
for (let i = 0; i < filteredEvents.length; i++) {
currentAttendance=filteredEvents[i].attendance;
total +=currentAttendance;
//set most attended
if (most < currentAttendance) {
most=currentAttendance;
}
//set least attended
if (least> currentAttendance || least < 0) {
least=currentAttendance;
}
}
//set average attended by dividing total and the number of events
average = total / filteredEvents.length;
//converts to integer
average = Math.floor(average);
//print each value
document.getElementById("total").innerHTML = total.toLocaleString();
document.getElementById("most").innerHTML = most.toLocaleString();
document.getElementById("least").innerHTML = least.toLocaleString();
document.getElementById("average").innerHTML = average.toLocaleString();
}
function displayData(events) {
const template = document.getElementById("eventData-template");
const eventBody = document.getElementById("results");
//Clear table first
eventBody.innerHTML = "";
//grab the events from local storage
let curEvents = JSON.parse(localStorage.getItem("eventArray"));
if (curEvents == null) {
curEvents = events;
}
for (let i = 0; i < curEvents.length; i++) {
const eventRow = document.importNode(template.content, true);
//grab only the columns in the template
let eventCols = eventRow.querySelectorAll("td");
eventCols[0].textContent = curEvents[i].event;
eventCols[1].textContent = curEvents[i].city;
eventCols[2].textContent = curEvents[i].state;
eventCols[3].textContent = curEvents[i].attendance;
eventCols[4].textContent = new Date(curEvents[i].date).toLocaleDateString();
eventBody.appendChild(eventRow);
}
}
function addData() {
//get events from local storage
let curEvents = JSON.parse(localStorage.getItem("eventArray"));
let dismissBtn = document.getElementById("dismmisBtn");
if (curEvents == null) {
curEvents = events;
}
let objEvent = {};
//Assign the value of every field to a property in the array
objEvent["event"] = document.getElementById("addEventName").value;
objEvent["city"] = document.getElementById("addEventCity").value;
objEvent["state"] = document.getElementById("addEventState").value;
objEvent["attendance"] = parseInt(document.getElementById("addEventAttendance").value, 10);
let eventDate = document.getElementById("addEventDate").value;
let eventDate2 = `${eventDate} 00:00`
objEvent["date"] = new Date(eventDate2).toLocaleDateString();
//Validates that each field is entered
if (objEvent["event"] == "" || objEvent["city"] == "" || objEvent["state"] == "" ||
objEvent["attendance"] == 0 || objEvent["date"] == "Invalid Date") {
Swal.fire({
icon: 'error',
title: 'Invalid',
text: 'All fields must be entered!',
})
return;
} else {
//Add current object to the array then to local storage
curEvents.push(objEvent);
localStorage.setItem("eventArray", JSON.stringify(curEvents));
events = JSON.parse(localStorage.getItem("eventArray"));
displayStat(events);
displayData(events);
window.location.reload();
}
formClear();
dismissBtn.click();
}
function dropDown() {
//Drop down menu option
let curEvents = JSON.parse(localStorage.getItem("eventArray"));
if (curEvents == null) {
curEvents = events;
}
let eventDD = document.getElementById("eventDropDown");
//distinct events for the events array
let distinctEvents = [...new Set(curEvents.map(event => event.city))]
let linkHTMLEnd = 'All';
let resultHTML = "";
for (let i = 0; i < distinctEvents.length; i++) {
resultHTML +=`${distinctEvents[i]}`;
}
resultHTML += linkHTMLEnd;
eventDD.innerHTML = resultHTML;
}
function displayAllData() {
displayStat(events);
displayData(events);
}
function resetData() {
localStorage.clear();
window.location.reload();
}
function formClear() {
let theForm = document.getElementById("modalForm");
theForm.reset();
}