import app from "./app.js";
import store from "./store.js";
var $ = Dom7;
var trendingEventsStore = store.getters.getTrendingEvents;
var trendingVenuesStore = store.getters.getTrendingVenues;
var eventCategories = store.getters.getEventCategories;
var filteredEventsStore = store.getters.getFilteredEvents;
var filteredVenuesStore = store.getters.getFilteredVenues;
var trendingUsersStore = store.getters.getTrendingUsers;
var isFetchingPosts = false
var currentEventsPage = 1
var currentVenuesPage = 1
var currentUsersPage = 1
var refreshed = false
var totalEventPages = 1
var totalVenuesPages = 1
var totalUsersPages = 1
var autocomplete;
var filters = {};
//AUTOCOMPLETE FUNCTIONS
function initAutocomplete() {
autocomplete = new google.maps.places.Autocomplete(
document.getElementById("autocomplete"), {
types: ["establishment", "geocode"],
componentRestrictions: {
country: \'GB\'
}
}
);
autocomplete.setFields(["geometry", "address_component"]);
autocomplete.addListener("place_changed", fillInAddress);
}
function fillInAddress() {
const place = autocomplete.getPlace();
console.log(place);
document.getElementById(\'lat\').value = place.geometry.location.lat();
document.getElementById(\'lng\').value = place.geometry.location.lng();
}
function populateEventCard(data = [], isSwiper = true) {
const swiperContainer = document.querySelector(\'#trending-events\');
if (isSwiper) swiperContainer.innerHTML = \'\';
const eventsTabContainer = document.querySelector(\'#filtered-events-tab\');
if (refreshed) {
eventsTabContainer.innerHTML = \'\';
}
data.forEach(event => {
const startDate = new Date(event.start_date);
const endDate = new Date(event.end_date);
// const startDate = new Date(event.dates[0].start_date);
// const endDate = new Date(event.dates[0].end_date);
let endDateString = \'\';
if (startDate.getDate() !== endDate.getDate()) {
endDateString = `
<div class="event-date-item">
<p>${endDate.toLocaleString(\'default\', { month: \'short\' })}</p>
<h5>${endDate.getDate()}</h5>
</div>
`
}
const card = `
<a href="/discover-view-event/${event.id}">
<div class="card event-item">
<div class="event-image position-relative">
<div class="image-rectangle" style="background-image: url(\'${event.thumbnail}\');"></div>
<div class="event-dates">
<div class="event-date-item">
<p>${startDate.toLocaleString(\'default\', { month: \'short\' })}</p>
<h5>${startDate.getDate()}</h5>
</div>
${endDateString}
</div>
</div>
<div class="card-content">
<h3 class="event-title">${event.title}</h3>
<p class="event-info">Starts ${startDate.toLocaleString(\'default\', { weekday: \'short\' })}, ${startDate.getDate()} ${startDate.toLocaleString(\'default\', { month: \'short\' })} ${startDate.getFullYear()}</p>
<div class="event-info">
${event.location}
</div>
</div>
</div>
</a>
`;
if (isSwiper) {
const swiperSlide = document.createElement(\'swiper-slide\');
swiperSlide.innerHTML = card;
swiperContainer.appendChild(swiperSlide);
}
eventsTabContainer.innerHTML += card;
});
}
function populateVenueCard(data = [], isSwiper = true) {
const swiperContainer = document.querySelector(\'#trending-venues\');
if (isSwiper) swiperContainer.innerHTML = \'\';
const eventsTabContainer = document.querySelector(\'#filtered-venues-tab\');
data.forEach(event => {
const swiperSlide = document.createElement(\'swiper-slide\');
const card = `
<a href="/discover-view-venue/${event.ID}">
<div class="card event-item">
<div class="event-image position-relative">
<div class="image-rectangle" style="background-image: url(\'${event.cover_image}\');"></div>
</div>
<div class="card-content">
<h3 class="event-title">${event.title}</h3>
<div class="event-info">
${event.venue_location}
</div>
<div class="event-info">
Apprx. ${event.distance} miles away
</div>
</div>
</div>
</a>
`;
if (isSwiper) {
swiperSlide.innerHTML = card;
swiperContainer.appendChild(swiperSlide);
}
eventsTabContainer.innerHTML += card;
});
}
function populateUsersCard(data = []) {
const tabContainer = document.querySelector(\'#users-vehicles-tab\');
data.forEach(user => {
let linkTo = user.type === \'user\' ? `/profile-view/${user.id}` : `/profile-garage-vehicle-view/${user.id}`;
let title;
if (user.type === \'user\') {
title = user.name;
}
if (user.type === \'vehicle\') {
const userName = user.owner.username;
const vehicleName = user.title;
title = `${vehicleName} <br/> Owner ${userName}`;
}
const card = `
<li>
<a class="item-link search-result item-content" href="${linkTo}">
<div class="item-media">
<div class="image-square image-rounded"
style="background-image:url(\'${user.thumbnail}\')">
</div>
</div>
<div class="item-inner">
<div class="item-title">${title}</div>
</div>
</a>
</li>
`;
tabContainer.innerHTML += card;
});
}
function addCategoryOptions(categories) {
const categoryFilters = document.querySelector(\'#category-filters ul\');
categories.forEach(category => {
const listItem = document.createElement(\'li\');
listItem.innerHTML = `
<label class="item-checkbox item-content">
<input type="checkbox" name="${category.slug}" value="${category.id}" />
<i class="icon icon-checkbox"></i>
<div class="item-inner">
<div class="item-title">${category.name}</div>
</div>
</label>
`;
categoryFilters.appendChild(listItem);
});
}
// Event listener for the submit button
$(document).on(\'click\', \'.apply-filters\', function (e) {
const dateFilters = document.querySelector(\'#date-filters ul\');
const locationFilters = document.querySelector(\'#location-filters ul\');
const categoryFilters = document.querySelector(\'#category-filters ul\');
e.preventDefault(); // Prevent form submission if you\'re handling it via JavaScript
const selectedCats = [...categoryFilters.querySelectorAll(\'input[type="checkbox"]:checked\')].map(cb => cb.value);
const selectedLocation = [...locationFilters.querySelectorAll(\'input[type="radio"]:checked\')].map(cb => cb.value);
const dateFilter = [...dateFilters.querySelectorAll(\'input[type="checkbox"]:checked\')].map(cb => cb.value);
filters = {
\'event_location\': selectedLocation,
// \'custom_location\': location,
\'event_date\': dateFilter,
// \'event_start\': customDateRange?.start,
// \'event_end\': customDateRange?.end,
\'event_category\': !selectedCats?.includes(0) ? selectedCats : undefined,
};
// get active tab
const activeTab = document.querySelector(\'.tabbar-nav .tab-link-active\').getAttribute(\'data-id\');
if (activeTab === \'events\') {
store.dispatch(\'filterEvents\', {
page: 1,
filters
})
currentEventsPage = 1
isFetchingPosts = false
const eventsTabContainer = document.querySelector(\'#filtered-events-tab\');
eventsTabContainer.innerHTML = \'\';
}
if (activeTab === \'venues\') {
store.dispatch(\'filterVenues\', {
page: 1,
filters
})
currentVenuesPage = 1
isFetchingPosts = false
const venuesTabContainer = document.querySelector(\'#filtered-venues-tab\');
venuesTabContainer.innerHTML = \'\';
}
// close popup
app.popup.close()
});
$(document).on(\'change\', \'#category-filters ul\', function (e) {
const categoryFilters = document.querySelector(\'#category-filters ul\');
var allCheckbox = categoryFilters.querySelector(\'input[name="all"]\');
const targetCheckbox = e.target;
if (targetCheckbox.name !== "all") {
// If any other checkbox is selected, uncheck "All"
if (targetCheckbox.checked) {
allCheckbox.checked = false;
} else {
// If all other checkboxes are unchecked, check "All"
const allUnchecked = [...categoryFilters.querySelectorAll(\'input[type="checkbox"]\')]
.filter(cb => cb.name !== "all")
.every(cb => !cb.checked);
if (allUnchecked) {
allCheckbox.checked = true;
}
}
} else {
// If "All" is selected, uncheck all other checkboxes
if (targetCheckbox.checked) {
[...categoryFilters.querySelectorAll(\'input[type="checkbox"]\')]
.filter(cb => cb.name !== "all")
.forEach(cb => cb.checked = false);
}
}
});
eventCategories.onUpdated((data) => {
addCategoryOptions(data);
})
trendingVenuesStore.onUpdated((data) => {
totalVenuesPages = data.total_pages
populateVenueCard(data.data);
});
trendingEventsStore.onUpdated((data) => {
totalEventPages = data.total_pages
populateEventCard(data.data);
});
trendingUsersStore.onUpdated((data) => {
const tabContainer = document.querySelector(\'#users-vehicles-tab\');
if (!data || data.data.length === 0) {
tabContainer.innerHTML = `
<div class="no-events">
<h3>No trending users found for you</h3>
</div>
`;
return
}
totalUsersPages = data.total_pages
if ((totalUsersPages == data.page) || (totalUsersPages == 0) || (data.new_data.length < 10)) {
$(\'.infinite-scroll-preloader.users-tab\').hide()
} else {
$(\'.infinite-scroll-preloader.users-tab\').show()
}
populateUsersCard(data.new_data);
});
// Filtered views
filteredEventsStore.onUpdated((data) => {
const eventsTabContainer = document.querySelector(\'#filtered-events-tab\');
if (!data || data.data.length === 0) {
eventsTabContainer.innerHTML = `
<div class="no-events">
<h3>No events found</h3>
</div>
`;
return
}
totalEventPages = data.total_pages
if ((totalEventPages == data.page) || (totalEventPages == 0) || (data.new_data.length < 10)) {
$(\'.infinite-scroll-preloader.events-tab\').hide()
} else {
$(\'.infinite-scroll-preloader.events-tab\').show()
}
populateEventCard(data.new_data, false);
});
filteredVenuesStore.onUpdated((data) => {
const tabContainer = document.querySelector(\'#filtered-venues-tab\');
if (!data || data.data.length === 0) {
tabContainer.innerHTML = `
<div class="no-venues">
<h3>No venues found</h3>
</div>
`;
totalVenuesPages = 0
return
}
if ((totalVenuesPages == data.page) || (totalVenuesPages == 0) || (data.new_data.length == 0)) {
$(\'.infinite-scroll-preloader.venues-tab\').hide()
totalVenuesPages = 0
} else {
$(\'.infinite-scroll-preloader.venues-tab\').show()
totalVenuesPages = data.total_pages
populateVenueCard(data.new_data, false);
}
});
$(document).on(\'page:init\', \'.page[data-name="discover"]\', function (e) {
//Date Filters
app.calendar.create({
inputEl: \'#date-from\',
openIn: \'customModal\',
header: true,
footer: true,
});
app.calendar.create({
inputEl: \'#date-to\',
openIn: \'customModal\',
header: true,
footer: true,
});
//Filter Date Popup
app.popup.create({
el: \'.filter-bydate-popup\',
swipeToClose: \'to-bottom\'
});
//Filter Category Popup
app.popup.create({
el: \'.filter-bycategory-popup\',
swipeToClose: \'to-bottom\'
});
//Filter Location Popup
app.popup.create({
el: \'.filter-bylocation-popup\',
swipeToClose: \'to-bottom\'
});
//SEARCH BAR
$(\'.discover-search\').on(\'mousedown\', function (event) {
event.preventDefault();
app.views.discover.router.navigate(\'/search/\');
});
const dateFilters = document.querySelector(\'#date-filters ul\');
const locationFilters = document.querySelector(\'#location-filters ul\');
// Event listener for checkbox selection
dateFilters.addEventListener(\'change\', function (e) {
const targetCheckbox = e.target;
// Uncheck all checkboxes except the one that was clicked
if (targetCheckbox.type === "checkbox") {
[...dateFilters.querySelectorAll(\'input[type="checkbox"]\')].forEach(checkbox => {
if (checkbox !== targetCheckbox) {
checkbox.checked = false;
}
});
}
});
locationFilters.addEventListener(\'change\', function (e) {
const targetCheckbox = e.target;
// Uncheck all checkboxes except the one that was clicked
if (targetCheckbox.type === "checkbox") {
[...locationFilters.querySelectorAll(\'input[type="checkbox"]\')].forEach(checkbox => {
if (checkbox !== targetCheckbox) {
checkbox.checked = false;
}
});
}
});
initAutocomplete();
});
$(document).on(\'infinite\', \'.discover-page.infinite-scroll-content\', async function (e) {
if (isFetchingPosts) return
// get active tab
const activeTabId = $(\'.tabbar-nav .tab-link-active\').attr(\'data-id\');
if (!activeTabId) return
isFetchingPosts = true
if (activeTabId == \'events\') {
currentEventsPage++
if (currentEventsPage <= totalEventPages) {
await store.dispatch(\'filterEvents\', {
page: currentEventsPage,
filters
})
isFetchingPosts = false
}
} else if (activeTabId == \'venues\') {
currentVenuesPage++
if (currentVenuesPage <= totalVenuesPages) {
await store.dispatch(\'filterVenues\', {
page: currentVenuesPage,
filters
})
isFetchingPosts = false
}
} else {
isFetchingPosts = false
}
})
// $(document).on(\'page:beforein\', \'.page[data-name="discover"]\', function (e) {
// const eventCats = eventCategories.value
// const trendingEvents = trendingEventsStore.value
// const trendingVenues = trendingVenuesStore.value
// const trendingUsers = trendingUsersStore.value
// if (!eventCats || eventCats.length === 0) {
// store.dispatch(\'fetchEventCategories\')
// } else {
// addCategoryOptions(eventCats);
// }
// if (!trendingEvents || trendingEvents.length === 0) {
// store.dispatch(\'fetchTrendingEvents\')
// } else {
// totalEventPages = trendingEvents.total_pages
// populateEventCard(trendingEvents.data);
// }
// if (!trendingVenues || trendingVenues.length === 0) {
// store.dispatch(\'fetchTrendingVenues\')
// } else {
// totalVenuesPages = trendingVenues.total_pages
// populateVenueCard(trendingVenues.data);
// }
// if (!trendingUsers || trendingUsers.length === 0) {
// store.dispatch(\'fetchTrendingUsers\')
// } else {
// totalUsersPages = trendingUsers.total_pages
// populateUsersCard(trendingUsers.data);
// }
// });
$(document).on(\'page:init\', \'.page[data-name="discover-view-event"]\', function (e) {
// Init slider
new Swiper(\'.swiper-container\', {
pagination: {
el: \'.swiper-pagination\',
clickable: true,
},
})
app.popup.create({
el: \'.share-listing-popup\',
swipeToClose: \'to-bottom\'
});
});
$(document).on(\'ptr:refresh\', \'.discover-page.ptr-content\', async function (e) {
refreshed = true
currentEventsPage = 1
currentVenuesPage = 1
try {
await store.dispatch(\'getTrendingEvents\')
await store.dispatch(\'getTrendingVenues\')
await store.dispatch(\'filterTrendingUsers\')
await store.dispatch(\'fetchEventCategories\')
} catch (error) {
console.log(error);
}
refreshed = false
app.ptr.get(\'.discover-page.ptr-content\').done()
})
$(document).on(\'click\', \'#featured-event-link\', function (e) {
e.preventDefault();
window.open(e.target.href, \'_blank\');
});