{"version":3,"sources":["webpack:///./scripts/components/events-calendar.js"],"names":["s","component","momentModule","window","moment","EventsCalendar","init","settings","name","$container","$","$btnPrev","$btnNext","today","Date","yearsBeforeToRender","yearsAheadToRender","this","location","search","length","yearAgo","setFullYear","getFullYear","setDate","yearFromNow","generate","fetchData","setupInteractions","$eventWrapper","on","$this","siblings","removeClass","addClass","hasClass","hide","show","error","fromDate","toDate","that","apiUrl","data","origin","StartDate","toISOString","EndDate","Id","ajax","type","url","dataType","success","response","status","getSummaryData","eventData","nextLink","eventsWithoutSummary","eventsSummaries","value","filter","event","eventUrlName","EventUrl","split","pop","matchingEventSummary","summaryItem","UrlName","isNullUndefinedEmpty","Summary","startsWith","replace","forEach","populateEvents","getEventHtml","eventFullUrl","href","Title","addEventToDay","day","$dayLi","format","find","ul","append","startDate","utc","Start","local","endDate","End","isAfter","currentDate","isBefore","add","each","after","startMonth","currentMonth","getMonth","currentYear","monthsToRender","i","buildMonth","daysHtml","totalFeb","monthNames","totalDays","tempDate","tempweekday","getDay","cmonthTotalDays","parseInt","date","getDate","totalDaysRendered","prevBtnText","nextBtnText","calendarMonthClass","calendarMonth","innerHTML","closeCalendar","slideUp","remove","$eventcalendar","first","last","Index","click","e","eq","document","$activeItem","parent","prev","$li","$ul","dateFormatted","text","eventHTMLString","$event","attr","index","children","rowIndex","Math","ceil","next","focus","slideDown","$target","target","is","parents"],"mappings":"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","file":"17.241bc791c9fbbf223f0a.js","sourcesContent":["import { isNullUndefinedEmpty } from '../helpers/helpers';\n\nexport const component = async () => {\n const momentModule = await import('moment-mini');\n window.moment = momentModule.default;\n\n EventsCalendar.init();\n};\n\nlet s;\nlet EventsCalendar = EventsCalendar || {};\n\nEventsCalendar = {\n settings: {\n name: 'equ-eventscalendar',\n $container: $('[data-equ-eventscalendar]'),\n $btnPrev: null,\n $btnNext: null,\n today: new Date(),\n yearsBeforeToRender: 1,\n yearsAheadToRender: 1, //Not in use for Dfes...\n },\n\n init() {\n s = this.settings;\n const search = window.location.search;\n\n if (s.$container.length) {\n try {\n var yearAgo = new Date();\n yearAgo.setFullYear(yearAgo.getFullYear() - s.yearsBeforeToRender);\n yearAgo.setDate(1);\n var yearFromNow = new Date();\n yearFromNow.setFullYear(yearFromNow.getFullYear() + s.yearsAheadToRender);\n yearFromNow.setDate(1);\n\n this.generate();\n this.fetchData(yearAgo, yearFromNow);\n this.setupInteractions();\n\n const $eventWrapper = $('.events-page-wrapper');\n\n $('.js-view-toggle').on('click', function () {\n const $this = $(this);\n $this.siblings().removeClass('is-active');\n $this.addClass('is-active');\n\n if ($(this).hasClass('-calendar')) {\n //list view\n $('.events_container, .search-main-container').hide();\n //calendar view\n $('.events-calendar').show();\n\n if ($eventWrapper.hasClass('has-searchquery')) {\n $eventWrapper.show();\n $('.search-results-events').hide();\n }\n } else {\n //list view\n $('.search-main-container').show();\n //calendar view\n $('.events-calendar').hide();\n if ($eventWrapper.hasClass('has-searchquery')) {\n $eventWrapper.show();\n $('.search-results-events').show();\n } else {\n $('.events_container').show();\n }\n }\n });\n } catch (error) {\n console.error('There was an error generating the calendar: ', error);\n }\n }\n },\n\n fetchData(fromDate, toDate) {\n //Get the Events from the default sitefinity calendar API,\n //then get summary data from a custom Sitefinity API\n //These can't be combined as the default API is difficult to customise\n //but the custom one does not provide recurring events\n const that = this;\n\n var apiUrl = s.$container.data('sf-controller-events');\n var calendarApiUrl = window.location.origin + s.$container.data('sf-controller-calendars');\n\n var data = {\n StartDate: fromDate.toISOString(),\n EndDate: toDate.toISOString(),\n Id: 'c55a5b00-40ee-404a-b58c-b5e0b18b682c', //Hard coded to main calendar. Requires additional API call to calendarApiUrl to handle multiple calendars\n };\n\n getEventData();\n\n function getEventData() {\n $.ajax({\n type: 'GET',\n url: apiUrl,\n data: data,\n dataType: 'JSON',\n success: function (response, status) {\n console.log(response);\n\n if (response.length > 0) {\n getSummaryData(response);\n }\n },\n error: function (data) {\n console.error('Calendar event API call failed.');\n },\n });\n }\n //Now get summaries and match them by Id\n function getSummaryData(eventData, nextLink, eventsWithoutSummary) {\n eventsWithoutSummary = eventsWithoutSummary || eventData;\n \n $.ajax({\n type: 'GET',\n // if nextLink is null, get the first 50 events by api call\n url: nextLink ? nextLink : '/api/public/events?$select=Title,Summary,UrlName',\n dataType: 'JSON',\n success: function (response, status) {\n console.log('Summary data returned: ', response);\n const eventsSummaries = response.value;\n\n //Populate Event data with summaries\n if (eventsSummaries.length > 0) {\n eventsWithoutSummary = eventsWithoutSummary.filter((event) => {\n //Match with Url name, as the Ids do not match\n const eventUrlName = event.EventUrl.split('/').pop();\n var matchingEventSummary = eventsSummaries.filter((summaryItem) => summaryItem.UrlName === eventUrlName)[0];\n\n if (!isNullUndefinedEmpty(matchingEventSummary)) {\n event.Summary = matchingEventSummary.Summary;\n return false; // Remove this event from eventsWithoutSummary\n }\n return true; // Keep this event in eventsWithoutSummary\n });\n }\n \n // Check if there are still events without summaries and if there's a next link\n var nextLink = response['@odata.nextLink'];\n if (eventsWithoutSummary.length > 0 && nextLink) {\n //check if window.location.origin is https and handle for http in nextLink\n if (window.location.origin.startsWith('https')) {\n nextLink = nextLink.replace('http', 'https');\n }\n //strip the first section from nextLink\n nextLink = nextLink.replace(window.location.origin, '');\n getSummaryData(eventData, nextLink, eventsWithoutSummary);\n } else {\n // We've either found all summaries or there are no more pages to check\n eventsWithoutSummary.forEach(event => {\n if (isNullUndefinedEmpty(event.Summary)) {\n console.warn(`A summary could not be found for the event id: ${event.Id}`);\n }\n });\n \n console.log('Events with summaries: ', eventData);\n that.populateEvents(eventData);\n }\n },\n error: function (data) {\n console.error('Custom event API call failed.');\n },\n });\n }\n },\n\n getEventHtml(event) {\n const eventFullUrl = window.location.href + '/event-details' + event.EventUrl;\n return `\n
  • \n ${event.Title}\n
  • \n `;\n },\n\n addEventToDay(day, event) {\n const $dayLi = $(`[data-calendar-date=\"${day.format('D/M/YYYY')}\"]`);\n\n if ($dayLi.find('ul').length === 0) {\n //No events exist yet, add required UL\n const ul = $('