const 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 currentEvents = getEvents();
let eventCities = currentEvents.map(event => event.city);
let uniqueCities = new Set(eventCities);
let dropdownChoices = ['All', ...uniqueCities];
const dropdownTemplate = document.getElementById('dropdown-item-template');
const dropdownMenu = document.getElementById('city-dropdown');
dropdownMenu.innerHTML = '';
for ( let i=0; i < dropdownChoices.length; i++) {
let cityName = dropdownChoices[i];
let dropdownItem = dropdownTemplate.content.cloneNode(true);
dropdownItem.querySelector('a').innerText = cityName;
dropdownMenu.appendChild(dropdownItem);
}
displayEvents(currentEvents);
displayStats(currentEvents);
document.getElementById('stats-location').textContent = 'All';
}
function getEvents() {
let eventsJson = localStorage.getItem('rpc-events');
let storedEvents = events;
if (eventsJson == null) {
saveEvents(events);
} else {
storedEvents = JSON.parse(eventsJson);
}
return storedEvents;
}
function saveEvents(events) {
let eventsJson = JSON.stringify(events);
localStorage.setItem('rpc-events', eventsJson);
}
function displayEvents(events) {
const eventTable = document.getElementById('eventsTable');
eventTable.innerHTML = '';
for (let i = 0; i < events.length ; i++) {
let event = events[i];
let eventRow = document.createElement('tr');
let eventName = document.createElement('td');
eventName.innerText = event.event;
eventRow.appendChild(eventName);
let eventCity = document.createElement('td');
eventCity.innerText = event.city;
eventRow.appendChild(eventCity);
let eventState = document.createElement('td');
eventState.innerText = event.state;
eventRow.appendChild(eventState);
let eventAttendance = document.createElement('td');
eventAttendance.innerText = event.attendance.toLocaleString();
eventRow.appendChild(eventAttendance);
let eventDate = document.createElement('td');
let date = new Date(event.date);
eventDate.innerText = date.toLocaleDateString();
eventRow.appendChild(eventDate);
eventTable.appendChild(eventRow);
}
}
function calculateStats(events) {
let sum = 0;
let min = events[0].attendance;
let max = 0;
for(let i = 0; i < events.length; i++) {
let event = events[i];
sum += event.attendance;
if ( event.attendance < min ) {
min = event.attendance;
}
if ( event.attendance > max ) {
max = event.attendance;
}
}
let avg = sum / events.length;
let stats = {
sum,
avg,
min,
max
}
return stats;
}
function displayStats(events) {
let stats = calculateStats(events);
document.getElementById('total-attendance').innerText = stats.sum.toLocaleString();
document.getElementById('avg-attendance').innerText = stats.avg.toLocaleString();
document.getElementById('max-attended').innerText = stats.max.toLocaleString();
document.getElementById('min-attended').innerText = stats.min.toLocaleString();
}
function filterByCity(element) {
let cityName = element.textContent;
document.getElementById('stats-location').textContent = cityName;
let allEvents = getEvents();
let filteredEvents = [];
for (let i = 0; i < allEvents.length; i++) {
let event = allEvents[i];
if ( cityName == event.city || cityName == 'All' ) {
filteredEvents.push(event);
}
}
displayStats(filteredEvents);
displayEvents(filteredEvents);
}
function saveNewEvent() {
let newEventForm = document.getElementById('newEventForm');
let formData = new FormData(newEventForm);
let newEvent = Object.fromEntries(formData.entries());
newEvent.attendance = parseInt(newEvent.attendance);
newEvent.date = new Date(newEvent.date).toLocaleDateString();
let allEvents = getEvents();
allEvents.push(newEvent);
saveEvents(allEvents);
newEventForm.reset();
displayEvents(allEvents);
let modalElement = document.getElementById('addEventModal');
let bsModal = bootstrap.Modal.getInstance(modalElement);
bsModal.hide();
buildDropDown();
}