dsg
Copy This
import {
    fetchVenue,
    maybeFollowVenue
} from "./api/discover.js";
import app from "./app.js";

var $ = Dom7;

//DISCOVER - VIEW EVENT
$(document).on(\'page:init\', \'.page[data-name="discover-view-venue"]\', async function (e) {
    var venueId = e.detail.route.params.id

    if (!venueId || venueId === \'-1\') {
        return;
    }

    $(\'.loading-fullscreen\').show()
    const venueData = await fetchVenue(venueId);

    $(\'.loading-fullscreen\').hide()

    $(\'#copy-venue-link\').attr(\'data-venue-id\', venueId);
    $(\'#share-email-venue-link\').attr(\'data-venue-id\', venueId);

    const mainContainer = $(\'.discover-view-event\');

    if (!venueData) {
        mainContainer.html(\'<div class="text-align-center">No event found</div>\');
        return;
    }

    // Populating the Event Title
    mainContainer.find(\'.event-detail-title\').text(venueData.title);

    // Populating the Event Location
    mainContainer.find(\'.event-time-address span\').text(venueData.location);

    // Populating the Cover Image
    mainContainer.find(\'.event-detail-img-box .swiper-slide .swiper-image\')
        .css(\'background-image\', `url(\'${venueData.cover_photo.url}\')`)
        .attr(\'alt\', venueData.cover_photo.alt);

    // Populating the "About" Tab Content
    mainContainer.find(\'#tab-about .event-des-wrap\').html(`<p>${venueData.description}</p>`);

    // Populating the "Follow" button state
    const followButton = mainContainer.find(\'.event-list-btn .btn.bg-dark\');
    if (venueData.is_following) {
        followButton.text(\'Following\');
    } else {
        followButton.text(\'Follow\');
    }

    // Populating the "Upcoming Events" Tab (if there are any events)
    const eventsContainer = mainContainer.find(\'#tab-events .grid.event-listing\');
    eventsContainer.empty(); // Clear any placeholder content

    if (venueData.events.length > 0) {
        venueData.events.forEach(event => {
            const startDate = new Date(event.start_date);
            const endDate = new Date(event.end_date);

            const startMonth = startDate.toLocaleString(\'default\', {
                month: \'short\'
            });
            const startDay = startDate.getDate();

            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 eventItem = `
            <a href="/discover-view-event/${event.id}" 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>${startMonth}</p>
                            <h5>${startDay}</h5>
                        </div>
                        ${endDateString}
                    </div>
                </div>
                <div class="card-content">
                    <h3 class="event-title">${event.title}</h3>
                    <p class="event-info">Starts ${event.start_date}</p>
                    <div class="event-info">${event.location}</div>
                </div>
            </a>
        `;
            eventsContainer.append(eventItem);
        });
    } else {
        eventsContainer.html(\'<div class="text-align-center">No upcoming events</div>\');
    }

    // follow button
    const is_following = venueData.is_following

    if (is_following) {
        mainContainer.find(\'.venue-follow-btn\').text(\'Following\')
    }

    mainContainer.find(\'.venue-follow-btn\').on(\'click\', async function () {
        const followButton = $(this);
        const isFollowing = followButton.text() === \'Following\';

        // change the button text
        followButton.text(isFollowing ? \'Follow\' : \'Following\');
        const response = await maybeFollowVenue(venueId)
    });
})

$(document).on(\'click\', \'#copy-venue-link\', function () {
    const venueId = $(this).attr(\'data-venue-id\');
    const eventLink = `${window.location.origin}/discover-view-venue/${venueId}`;

    navigator.clipboard.writeText(eventLink);

    app.toast.create({
        text: \'Link copied to clipboard\',
        closeTimeout: 2000
    }).open()
});

// #share-email-venue-link click event
$(document).on(\'click\', \'#share-email-venue-link\', function () {
    const venueId = $(this).attr(\'data-venue-id\');
    const eventLink = `${window.location.origin}/discover-view-venue/${venueId}`;

    window.open(`mailto:?subject=Check out this venue&body=${eventLink}`);
});
Add JS Function Name