54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
import { fetchEvents } from "./api/ticketmaster.js";
|
|
import { renderEventList } from "./ui/eventList.js";
|
|
import { getFilters } from "./ui/filters.js";
|
|
|
|
const button = document.querySelector("#load-events");
|
|
const container = document.querySelector("#event-list");
|
|
const cityInput = document.querySelector("#city-input");
|
|
|
|
button.addEventListener("click", handleSearch);
|
|
|
|
cityInput.addEventListener("keydown", (event) => {
|
|
if (event.key === "Enter") {
|
|
handleSearch();
|
|
}
|
|
});
|
|
|
|
async function handleSearch() {
|
|
|
|
const { city, dateFrom, dateTo, category } = getFilters();
|
|
|
|
if (!city) {
|
|
container.innerHTML = "Please enter a city.";
|
|
return;
|
|
}
|
|
|
|
container.innerHTML = "Loading events...";
|
|
|
|
const events = await fetchEvents(city);
|
|
|
|
const filteredEvents = applyFilters(events, dateFrom, dateTo, category);
|
|
|
|
renderEventList(filteredEvents, container);
|
|
}
|
|
|
|
function applyFilters(events, dateFrom, dateTo, category) {
|
|
|
|
return events.filter(event => {
|
|
|
|
const eventDate = event.dates.start.localDate;
|
|
|
|
const eventCategory =
|
|
event.classifications?.[0]?.segment?.name?.toLowerCase();
|
|
|
|
const matchDateFrom = dateFrom ? eventDate >= dateFrom : true;
|
|
const matchDateTo = dateTo ? eventDate <= dateTo : true;
|
|
|
|
const matchCategory = category
|
|
? eventCategory === category
|
|
: true;
|
|
|
|
return matchDateFrom && matchDateTo && matchCategory;
|
|
});
|
|
|
|
} |