var events = [{
event: "ComicCon",
city: "New York",
state: "New York",
attendance: 240000,
date: "06/01/2017",
},
{
event: "ComicCon",
city: "New York",
state: "New York",
attendance: 250000,
date: "06/01/2018",
},
{
event: "ComicCon",
city: "New York",
state: "New York",
attendance: 257000,
date: "06/01/2019",
},
{
event: "ComicCon",
city: "San Diego",
state: "California",
attendance: 130000,
date: "06/01/2017",
},
{
event: "ComicCon",
city: "San Diego",
state: "California",
attendance: 140000,
date: "06/01/2018",
},
{
event: "ComicCon",
city: "San Diego",
state: "California",
attendance: 150000,
date: "06/01/2019",
},
{
event: "HeroesCon",
city: "Charlotte",
state: "North Carolina",
attendance: 40000,
date: "06/01/2017",
},
{
event: "HeroesCon",
city: "Charlotte",
state: "North Carolina",
attendance: 45000,
date: "06/01/2018",
},
{
event: "HeroesCon",
city: "Charlotte",
state: "North Carolina",
attendance: 50000,
date: "06/01/2019",
},
];
function buildDropDown() {
let dropDownMenu = document.getElementById('eventDropDown');
dropDownMenu.innerHTML = '';
let currentEvents = getEventData();
let eventCities = currentEvents.map((event) => event.city);
let distinctCities = [...new Set(eventCities)];
const template = document.getElementById('dropdownItemTemplate');
let dropDownTemplateNode = document.importNode(template.content, true);
let menuItem = dropDownTemplateNode.querySelector('a');
menuItem.innerHTML = 'All Cities';
menuItem.setAttribute('data-string', "All")
dropDownMenu.appendChild(menuItem);
for (let i = 0; i < distinctCities.length; i++) {
let cityMenuItem = document.importNode(template.content, true);
let cityBtn = cityMenuItem.querySelector('a');
cityBtn.innerHTML = distinctCities[i];
cityBtn.setAttribute("data-string", distinctCities[i]);
dropDownMenu.appendChild(cityMenuItem);
}
displayStats(currentEvents);
displayEventData(currentEvents)
}
function displayStats(eventsArr) {
let stats = calculateStats(eventsArr);
document.getElementById('total').innerHTML =
stats.totalAttendance.toLocaleString();
document.getElementById('average').innerHTML =
stats.averageAttendance.toLocaleString(
'en-US', {
maximumFractionDigits: 0,
minimumFractionDigits: 0
}
);
document.getElementById('most').innerHTML =
stats.maximumAttendance.toLocaleString();
document.getElementById('least').innerHTML =
stats.minimumAttendance.toLocaleString();
}
function calculateStats(eventsArr) {
let sum = 0;
let average = 0;
let max = eventsArr[0].attendance;
let min = eventsArr[0].attendance;
for (let i = 0; i < eventsArr.length; i++) {
let currentEvent = eventsArr[i];
sum += currentEvent.attendance;
if (max < currentEvent.attendance) {
max = currentEvent.attendance;
}
if (min > currentEvent.attendance) {
min = currentEvent.attendance;
}
}
average = sum / eventsArr.length;
let stats = {
totalAttendance: sum,
averageAttendance: average,
minimumAttendance: min,
maximumAttendance: max
}
return stats;
}
function displayEventData(eventsArr) {
let tableBody = document.getElementById('eventTableBody');
const tableRowTemplate =
document.getElementById('eventTableRowTemplate');
tableBody.innerHTML = '';
for (let i = 0; i < eventsArr.length; i++)
{
let currentEvent=eventsArr[i];
let eventRow = document.importNode(tableRowTemplate.content, true);
let tableCells = eventRow.querySelectorAll('td');
tableCells[0].innerHTML=currentEvent.event;
tableCells[1].innerHTML=currentEvent.city;
tableCells[2].innerHTML=currentEvent.state;
tableCells[3].innerHTML=currentEvent.attendance.toLocaleString();
tableCells[4].innerHTML=currentEvent.date;
tableBody.appendChild(eventRow);
}
}
function getEventData() {
let currentEvents =
JSON.parse(localStorage.getItem('soiree-eventData'));
if (currentEvents == null) {
currentEvents = events;
localStorage.setItem('soiree-eventData',
JSON.stringify(currentEvents))
}
return currentEvents;
}
function getEvents(element) {
let currentEvents = getEventData();
let cityName = element.getAttribute('data-string');
let filteredEvents = currentEvents;
if (cityName != 'All') {
filteredEvents = currentEvents.filter((event) => {
if (cityName == event.city) {
return event
}
});
}
document.getElementById('statsHeader').innerHTML = cityName;
displayStats(filteredEvents);
displayEventData(filteredEvents);
}
function saveEventData() {
let eventName = document.getElementById('newEventName').value;
let eventCity = document.getElementById('newEventCity').value;
let eventAttendance =
parseInt(document.getElementById('newEventAttendance').value);
let eventDate = document.getElementById('newEventDate').value;
eventDate = `${eventDate} 00:00`;
eventDate = new Date(eventDate).toLocaleDateString();
let stateSelect = document.getElementById('newEventState');
let state = stateSelect.options[stateSelect.selectedIndex].text;
let newEvent = {
event: eventName,
city: eventCity,
state: state,
attendance: eventAttendance,
date: eventDate,
};
let currentEvents = getEventData();
currentEvents.push(newEvent);
localStorage.setItem('soiree-eventData',
JSON.stringify(currentEvents));
buildDropDown();
document.getElementById('statsHeader').innerHTML = 'All';
document.getElementById('newEventForm').reset();
}