{"version":3,"file":"community-events.bundle.js","mappings":"o/CAKA,WACE,IAEE,IAAMA,EAAa,GACbC,EAAiB,GACvB,EACEC,SAASC,cAAc,wCAAwCC,QADzDC,EAAY,EAAZA,aAAcC,EAAe,EAAfA,gBAAiBC,EAAW,EAAXA,YAIjCC,EAAsBN,SAASO,eACnC,yBAEIC,EAA0BR,SAASO,eACvC,6BAEIE,EAAaT,SAASU,iBAC1B,iCAIF,EAAID,GAAYE,KAAI,SAAUC,GAC5B,ICkBJC,EACAC,EACAC,EDpBUC,EAAQ,IAAIC,KACZC,EAAsB,IAAID,KAAKL,EAAGV,QAAQiB,SAC1CC,EAAwB,IAAIH,KAAKL,EAAGV,QAAQmB,WAClD,ECPC,SAA0CA,EAAWF,EAASN,GACnE,IAAMS,EAAc,IAAIL,KAClBC,EAAsB,IAAID,KAAKE,GAC/BC,EAAwB,IAAIH,KAAKI,GAEvC,QAAQ,GACN,KAAKD,EAAwBE,EAE3B,OADIT,GAASA,EAAQU,aAAa,oBAAqB,kBAChD,CAAET,OAAQ,WAAYC,gBAAiB,WAEhD,KAAKK,GAAyBE,GAC5BJ,GAAuBI,EAEvB,OADIT,GAASA,EAAQU,aAAa,oBAAqB,kBAChD,CAAET,OAAQ,MAAOC,gBAAiB,WAE3C,KAAKO,EAAcJ,EAEjB,OADIL,GAASA,EAAQU,aAAa,oBAAqB,cAChD,CAAET,OAAQ,OAAQC,gBAAiB,WAEhD,CDZ0CS,CAClCZ,EAAGV,QAAQmB,UACXT,EAAGV,QAAQiB,QACXP,GAQF,OCIJC,EDLqCD,ECMrCE,EDhBkB,EAANA,OCiBZC,EDjBmC,EAAfA,gBCmBpB,EAAIF,EAAQH,iBAAiB,kBAAkBe,SAAQ,SAAAC,GACrDA,EAAKC,YAAcb,EAAOc,aAC5B,IACA,EAAIf,EAAQH,iBAAiB,4BAA4Be,SAAQ,SAAAC,GAC/DA,EAAKG,MAAMd,gBAAkBA,CAC/B,KDbY,GACN,KAAKK,EAAwBJ,EAG7B,KAAKI,GAAyBJ,GAASE,GAAuBF,EAC5DjB,EAAe+B,KAAKlB,GACpB,MACF,KAAKM,EAAsBF,EACzBlB,EAAWgC,KAAKlB,GAGtB,IAGwB,SAApBR,GAEFL,EACGgC,MAAK,SAACC,EAAGC,GAGR,OAFc,IAAIhB,KAAKe,EAAE9B,QAAQmB,WACnB,IAAIJ,KAAKgB,EAAE/B,QAAQmB,UAEnC,IACCI,SAAQ,SAACC,EAAMQ,GACVA,GAAS/B,IACXuB,EAAKH,aAAa,4BAA6B,kBAC/CG,EAAKG,MAAMM,QAAU,QAGvB3B,EAAwB4B,YAAYV,EACtC,IAIA3B,EAAesC,OAAS,GACxBrC,SAASO,eAAe,+BAExBP,SAASO,eAAe,8BAA8B+B,SAGtDnC,GAAgBJ,EAAesC,QAC/BrC,SAASO,eAAe,qCAExBP,SAASO,eAAe,oCAAoC+B,UAG9D,EAAI7B,GAAYE,KAAI,SAAUe,GACK,mBAA7BA,EAAKxB,QAAQqC,aAAkCb,EAAKY,QAC1D,IAIkB,SAAhBjC,GACFP,EACGiC,MAAK,SAACC,EAAGC,GACR,IAAMO,EAAQ,IAAIvB,KAAKe,EAAE9B,QAAQmB,WAEjC,OADc,IAAIJ,KAAKgB,EAAE/B,QAAQmB,WAClBmB,CACjB,IACCf,SAAQ,SAACC,EAAMQ,GACVA,GAAS/B,IACXuB,EAAKH,aAAa,4BAA6B,cAC/CG,EAAKG,MAAMM,QAAU,QAGvB7B,EAAoB8B,YAAYV,EAClC,IAIA5B,EAAWuC,OAAS,GACpBrC,SAASO,eAAe,2BAExBP,SAASO,eAAe,0BAA0B+B,SAElDnC,GAAgBL,EAAWuC,QAC3BrC,SAASO,eAAe,iCAExBP,SAASO,eAAe,gCAAgC+B,UAG1D,EAAI7B,GAAYE,KAAI,SAAUe,GACK,eAA7BA,EAAKxB,QAAQqC,aAA8Bb,EAAKY,QACtD,GAIJ,CAFE,MAAOG,GACPC,QAAQC,MAAMF,EAChB,CACD,CA1HD,E","sources":["webpack://developer.gov.sg/./apps/src/communities/community-events.js","webpack://developer.gov.sg/./apps/src/lib/communities.js"],"sourcesContent":["import {\n getEventStatusAndBackgroundColor,\n setEventStatusAndBackgroundColor,\n} from \"../lib/communities\";\n\n(() => {\n try {\n // Variables\n const pastEvents = [];\n const upcomingEvents = [];\n const { contentLimit, displayUpcoming, displayPast } =\n document.querySelector('script[data-id=\"community-overview\"]').dataset;\n\n // Selectors\n const pastEventsContainer = document.getElementById(\n \"past-events-container\"\n );\n const upcomingEventsContainer = document.getElementById(\n \"upcoming-events-container\"\n );\n const eventCards = document.querySelectorAll(\n \".community-section-event-card\"\n );\n\n // Filter events by past and upcoming events into two separate arrays and set the event status and background color\n [...eventCards].map(function (el) {\n const today = new Date();\n const eventEndDateAndTime = new Date(el.dataset.endDate);\n const eventStartDateAndTime = new Date(el.dataset.startDate);\n const { status, backgroundColor } = getEventStatusAndBackgroundColor(\n el.dataset.startDate,\n el.dataset.endDate,\n el\n );\n\n // There are three cases:\n // 1. The event has not started yet\n // 2. The event is currently happening (Now)\n // 3. The event has ended\n setEventStatusAndBackgroundColor(el, status, backgroundColor);\n switch (true) {\n case eventStartDateAndTime > today:\n upcomingEvents.push(el);\n break;\n case eventStartDateAndTime <= today && eventEndDateAndTime >= today:\n upcomingEvents.push(el);\n break;\n case eventEndDateAndTime < today:\n pastEvents.push(el);\n break;\n }\n });\n\n // Display the upcoming events\n if (displayUpcoming === \"true\") {\n // Append the upcoming events to the upcoming events container\n upcomingEvents\n .sort((a, b) => {\n const aDate = new Date(a.dataset.startDate);\n const bDate = new Date(b.dataset.startDate);\n return aDate - bDate;\n })\n .forEach((item, index) => {\n if (index >= contentLimit) {\n item.setAttribute(\"content-visibility-toggle\", \"upcoming-event\");\n item.style.display = \"none\";\n }\n\n upcomingEventsContainer.appendChild(item);\n });\n\n // Upcoming event statuses\n if (\n upcomingEvents.length > 0 &&\n document.getElementById(\"no-upcoming-events-message\")\n )\n document.getElementById(\"no-upcoming-events-message\").remove();\n // Destroy the button with the id 'upcoming-events-view-more-button' if there are no more upcoming events to show\n if (\n contentLimit >= upcomingEvents.length &&\n document.getElementById(\"upcoming-events-view-more-button\")\n )\n document.getElementById(\"upcoming-events-view-more-button\").remove();\n } else {\n // Remove any events with the attribute of data-event-status=\"upcoming-event\"\n [...eventCards].map(function (item) {\n if (item.dataset.eventStatus === \"upcoming-event\") item.remove();\n });\n }\n\n // Append the past events to the past events container\n if (displayPast === \"true\") {\n pastEvents\n .sort((a, b) => {\n const aDate = new Date(a.dataset.startDate);\n const bDate = new Date(b.dataset.startDate);\n return bDate - aDate;\n })\n .forEach((item, index) => {\n if (index >= contentLimit) {\n item.setAttribute(\"content-visibility-toggle\", \"past-event\");\n item.style.display = \"none\";\n }\n\n pastEventsContainer.appendChild(item);\n });\n\n // Past event statuses\n if (\n pastEvents.length > 0 &&\n document.getElementById(\"no-past-events-message\")\n )\n document.getElementById(\"no-past-events-message\").remove();\n if (\n contentLimit >= pastEvents.length &&\n document.getElementById(\"past-events-view-more-button\")\n )\n document.getElementById(\"past-events-view-more-button\").remove();\n } else {\n // Remove any events with the attribute of data-event-status=\"past-event\"\n [...eventCards].map(function (item) {\n if (item.dataset.eventStatus === \"past-event\") item.remove();\n });\n }\n } catch (e) {\n console.error(e);\n }\n})();\n","export function debounce(func, wait, immediate) {\n var timeout;\n\n return function executedFunction() {\n var context = this;\n var args = arguments;\n\n var later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n var callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) func.apply(context, args);\n };\n}\n\nexport function getEventStatusAndBackgroundColor(startDate, endDate, element) {\n const currentDate = new Date();\n const eventEndDateAndTime = new Date(endDate);\n const eventStartDateAndTime = new Date(startDate);\n\n switch (true) {\n case eventStartDateAndTime > currentDate:\n if (element) element.setAttribute(\"data-event-status\", \"upcoming-event\");\n return { status: \"upcoming\", backgroundColor: \"#0161AF\" };\n\n case eventStartDateAndTime <= currentDate &&\n eventEndDateAndTime >= currentDate:\n if (element) element.setAttribute(\"data-event-status\", \"upcoming-event\");\n return { status: \"now\", backgroundColor: \"#D0021B\" };\n\n case currentDate > eventEndDateAndTime:\n if (element) element.setAttribute(\"data-event-status\", \"past-event\");\n return { status: \"past\", backgroundColor: \"#323232\" };\n }\n}\n\nexport function setEventStatusAndBackgroundColor(\n element,\n status,\n backgroundColor\n) {\n [...element.querySelectorAll(\".event-status\")].forEach(item => {\n item.textContent = status.toUpperCase();\n });\n [...element.querySelectorAll(\".event-status-container\")].forEach(item => {\n item.style.backgroundColor = backgroundColor;\n });\n}\n"],"names":["pastEvents","upcomingEvents","document","querySelector","dataset","contentLimit","displayUpcoming","displayPast","pastEventsContainer","getElementById","upcomingEventsContainer","eventCards","querySelectorAll","map","el","element","status","backgroundColor","today","Date","eventEndDateAndTime","endDate","eventStartDateAndTime","startDate","currentDate","setAttribute","getEventStatusAndBackgroundColor","forEach","item","textContent","toUpperCase","style","push","sort","a","b","index","display","appendChild","length","remove","eventStatus","aDate","e","console","error"],"sourceRoot":""}