{"version":3,"file":"js/TodayPageEvents.bundle.js","mappings":"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","sources":["webpack://rp-majoitus-client/./src/views/TodayPageEvents/TodayPageEventResult.js","webpack://rp-majoitus-client/./src/views/TodayPageEvents/TodayPageEvents.js","webpack://rp-majoitus-client/./src/views/TodayPageEvents/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst TodayPageEventResult = (props) => {\n let displayTime = false;\n\n // Midnight start and endtimes mean the event is all day, and\n // the times don't need to be displayed.\n if (props.startTime !== '0.00.00' && props.endTime !== '0.00.00') {\n displayTime = true;\n }\n\n function formatTime(time) {\n const timeArray = time.split('.');\n\n // If the hour is single-digit, add zero to the start.\n let formattedTime =\n timeArray[0].length === 1 ? `0${timeArray[0]}` : timeArray[0];\n\n // Minutes need to be displayed only if they aren't 00.\n if (timeArray[1] !== '00') {\n formattedTime = `${timeArray[0]}:${timeArray[1]}`;\n }\n\n return formattedTime;\n }\n\n return (\n
\n
\n
\n

{props.title}

\n
\n {displayTime && (\n

\n {formatTime(props.startTime)}-{formatTime(props.endTime)}\n

\n )}\n
\n \n
\n );\n};\n\nTodayPageEventResult.propTypes = {\n title: PropTypes.string,\n url: PropTypes.string,\n startTime: PropTypes.string,\n endTime: PropTypes.string,\n};\n\nexport default TodayPageEventResult;\n","import React, { useState, useEffect } from 'react';\nimport Moment from 'moment';\nimport { extendMoment } from 'moment-range';\nimport { rrulestr } from 'rrule';\n\nimport TodayPageEventResult from './TodayPageEventResult';\nimport Spinner from '../../components/Spinner';\n\nconst moment = extendMoment(Moment);\n\nmoment.locale(drupalSettings.path.currentLanguage);\n\nconst TodayPageEvents = () => {\n const currentTime = new Date();\n\n const API_DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ss';\n const UTC_DATE_FORMAT = 'YYYYMMDDTHHmmss[Z]';\n\n const currentDate = moment().format(API_DATE_FORMAT);\n\n const { today_page_events } = drupalSettings;\n\n const [events, setEvents] = useState();\n const [isLoading, setIsLoading] = useState(true);\n\n function filterTodayDates({ start_date, end_date, rrule }) {\n if (!start_date || !end_date) {\n return false;\n }\n\n if (currentDate) {\n // rrule needs dates in very specific format.\n const startDateUtc = moment(start_date, API_DATE_FORMAT).format(\n UTC_DATE_FORMAT\n );\n const endDateUtc = moment(end_date, API_DATE_FORMAT).format(\n UTC_DATE_FORMAT\n );\n\n const ruleString = `DTSTART:${startDateUtc}\\n${\n rrule && rrule[0].length > 0 ? rrule : 'FREQ=DAILY'\n };UNTIL=${endDateUtc}`;\n const rule = rrulestr(ruleString);\n\n const occurrences = rule.between(\n new Date(moment(currentDate).startOf('day').utc()),\n new Date(moment(currentDate).endOf('day').utc()),\n true\n );\n return occurrences.length > 0;\n } else {\n return true;\n }\n }\n\n // The dates for events are not stored in local time, so they're\n // bit tricky when comparing to current time.\n function getLocalTime(date) {\n const formattedDate = new Date(date + 'Z').toLocaleTimeString('fi-FI', {\n timeZone: 'Europe/Helsinki',\n });\n\n return formattedDate;\n }\n\n function filterEnded(unfilteredResult) {\n const endTime = getLocalTime(unfilteredResult.end_date);\n const endTimeHours = endTime.split('.')[0];\n const endTimeMinutes = endTime.split('.')[1];\n\n // Show events that end before 6am.\n if (endTimeHours >= 1 && endTimeHours <= 6) {\n return true;\n }\n\n if (endTimeHours > currentTime.getHours()) {\n return true;\n } else if (\n endTimeHours === currentTime.getHours() &&\n endTimeMinutes > currentTime.getMinutes()\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n function filteredResults(unfilteredResults) {\n unfilteredResults.forEach((f) => f.categories);\n const results = unfilteredResults\n .filter(filterTodayDates)\n .filter(filterEnded);\n\n return results;\n }\n\n function sortByTime(a, b) {\n const aDate = new Date(a.start_date);\n const bDate = new Date(b.start_date);\n\n if (aDate.getHours() > bDate.getHours()) {\n return 1;\n } else if (\n aDate.getHours() === bDate.getHours() &&\n aDate.getMinutes() > bDate.getMinutes()\n ) {\n return 1;\n } else {\n return -1;\n }\n }\n\n useEffect(() => {\n const eventsSorted = filteredResults(today_page_events).sort(sortByTime);\n setEvents(eventsSorted);\n setIsLoading(false);\n }, []);\n\n return (\n
\n

{Drupal.t('Activities and events of the day')}

\n\n \n
\n );\n};\n\nexport default TodayPageEvents;\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\n\nimport TodayPageEvents from './TodayPageEvents';\n\nconst root = ReactDOM.createRoot(document.getElementById('today_page_events'));\n\nroot.render(\n \n \n \n);\n"],"names":["TodayPageEventResult","props","displayTime","formatTime","time","timeArray","split","formattedTime","length","concat","startTime","endTime","React","className","title","href","url","propTypes","PropTypes","moment","extendMoment","Moment","locale","drupalSettings","path","currentLanguage","currentTime","Date","API_DATE_FORMAT","UTC_DATE_FORMAT","currentDate","format","today_page_events","_useState","useState","_useState2","_slicedToArray","events","setEvents","_useState3","_useState4","isLoading","setIsLoading","filterTodayDates","_ref","start_date","end_date","rrule","startDateUtc","endDateUtc","ruleString","rrulestr","between","startOf","utc","endOf","getLocalTime","date","toLocaleTimeString","timeZone","filterEnded","unfilteredResult","endTimeHours","endTimeMinutes","getHours","getMinutes","sortByTime","a","b","aDate","bDate","useEffect","unfilteredResults","eventsSorted","forEach","f","categories","filter","sort","Drupal","t","Spinner","map","event","i","key","ReactDOM","document","getElementById","render","TodayPageEvents"],"sourceRoot":""}