{"version":3,"file":"eventsApp.js","sources":["../../../src/modules/models/UIModels/Event.ui.tsx","../../../src/modules/Api/EventApi.tsx","../../../src/modules/Contexts/EventProvider.tsx","../../../src/modules/events/events.tsx","../../../src/eventsApp.tsx"],"sourcesContent":["import React from \"react\";\r\nimport { Event } from \"../../models/Event\";\r\n\r\ninterface EventProps {\r\n event: Event;\r\n}\r\n\r\nexport const EventUI: React.FC = ({ event }) => {\r\n const newTemplate = (\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
{event.title}
\r\n

{event.teaser}

\r\n
\r\n
\r\n
\r\n

\r\n \r\n \r\n {\" \"}\r\n {/* show start time if */}\r\n { event.startDate.toLocaleDateString() === event.EndDate.toLocaleDateString() ? (\r\n event.starteDateLocalString.toLocaleDateString(\"da-DK\", {\r\n day: \"2-digit\",\r\n month: \"long\",\r\n year: \"numeric\",\r\n }) + \" kl. \" + event.formattedStartTime + \" - \" + event.formattedEndTime \r\n ) :(\r\n \"fra \" +\r\n event.startDate.toLocaleDateString(\"da-DK\", {\r\n day: \"2-digit\",\r\n month: \"long\",\r\n year: \"numeric\",\r\n }) + \" kl. \" + event.formattedStartTime\r\n )}\r\n \r\n {// if end date is not the same as start date, show end date}\r\n event.startDate.toLocaleDateString() !== event.EndDate.toLocaleDateString() && (\r\n <>\r\n
\r\n \r\n \r\n {\" til \"} \r\n {\r\n event.EndDate.toLocaleDateString(\"da-DK\", {\r\n day: \"2-digit\",\r\n month: \"long\",\r\n year: \"numeric\",\r\n })}\r\n \r\n \r\n \r\n {\" kl. \" +event.formattedEndTime}\r\n \r\n \r\n )}\r\n

\r\n

\r\n \r\n \r\n {\" \" + event.place}\r\n \r\n

\r\n
\r\n
\r\n
\r\n );\r\n return newTemplate;\r\n};\r\n\r\nexport default EventUI;\r\n","import { getImageCrop } from \"../helpers/ImageCrop.ts\";\r\nimport UmbracoApiResult from \"../models/UmbracoApiResult.tsx\";\r\nimport { Event } from \"../models/Event.tsx\";\r\nimport ImageUmbraco from \"../models/Umbraco/Image.umb.tsx\";\r\nimport { EventUmbraco } from \"../models/Umbraco/Event.umb.tsx\";\r\n\r\nexport const EventApi = {\r\n async getCases(\r\n take?: number,\r\n skip?: number\r\n ): Promise<{\r\n total: number;\r\n items: Event[];\r\n }> {\r\n const takeAmount = take ?? 1000;\r\n const skipAmount = skip ?? 0;\r\n const response = await fetch(\r\n `/umbraco/delivery/api/v2/content?fetch=children:arrangementer&skip=${skipAmount}&take=${takeAmount}&sort=createDate:desc`\r\n );\r\n return response.json().then((data: UmbracoApiResult) => {\r\n return {\r\n items: data.items.map((item: EventUmbraco) => {\r\n const imageCrop = getImageCrop(item);\r\n const startDate = new Date(\r\n item.properties.contentDetailsEventTimeFrom\r\n );\r\n const endTime = new Date(item.properties.contentDetailsEventTimeTo);\r\n //strongly typed object of event\r\n return {\r\n iID: item.id,\r\n title: item.name,\r\n teaser: item.properties.contentSettingsTeaser,\r\n pictures: {\r\n threeTwo: imageCrop,\r\n },\r\n link: item.route.path,\r\n place: item.properties.eventPlace,\r\n startTime: item.properties.contentDetailsEventTimeFrom,\r\n endTime: item.properties.contentDetailsEventTimeTo,\r\n formattedStartTime: `${startDate.getUTCHours()}:${(\r\n \"0\" + startDate.getUTCMinutes()\r\n ).slice(-2)}`,\r\n formattedEndTime: `${endTime.getUTCHours()}:${(\r\n \"0\" + endTime.getUTCMinutes()\r\n ).slice(-2)}`,\r\n startDatetoISOString: new Date(\r\n item.properties.contentDetailsEventTimeFrom\r\n ),\r\n starteDateLocalString: new Date(\r\n item.properties.contentDetailsEventTimeFrom\r\n ),\r\n startDate: new Date(item.properties.contentDetailsEventTimeFrom),\r\n EndDate: new Date(item.properties.contentDetailsEventTimeTo),\r\n };\r\n }),\r\n total: data.total,\r\n };\r\n });\r\n },\r\n};\r\n","import React, { createContext, useEffect} from 'react';\r\nimport { EventApi } from '../Api/EventApi';\r\nimport { Event } from '../models/Event';\r\n\r\ninterface EventProviderProps {\r\n children: React.ReactNode;\r\n}\r\n\r\ninterface EventContextProps {\r\n events:Event[];\r\n upCommingEvents:Event[];\r\n pastEvents:Event[];\r\n}\r\n\r\nexport const EventContext = createContext({\r\n events:[],\r\n upCommingEvents:[],\r\n pastEvents:[]\r\n});\r\n\r\nexport const EventProvider: React.FC = ({children}) => {\r\n const [events, setEvents] = React.useState([]);\r\n const [upCommingEvents, setUpCommingEvents] = React.useState([]);\r\n const [pastEvents, setPastEvents] = React.useState([]);\r\n const [loading, setLoading] = React.useState(true);\r\n useEffect(() => {\r\n EventApi.getCases().then((data) => {\r\n setEvents(data.items)\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n const now = new Date();\r\n // sort by upcoming events ( the closest event first)\r\n const upCommingEvents = events.filter((event) => event.EndDate >= now).sort((a, b) => new Date(a.startDate).getTime() - new Date(b.startDate).getTime());\r\n setUpCommingEvents(upCommingEvents);\r\n // sort by past events ( the closest event first)\r\n const pastEvents = events.filter((event) => new Date(event.EndDate) < now).sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime());\r\n\r\n setPastEvents(pastEvents);\r\n }, [events]);\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};","import React from 'react';\r\nimport { EventUI } from '../models/UIModels/Event.ui';\r\nimport { Event } from '../models/Event';\r\n\r\nimport { EventContext } from '../Contexts/EventProvider';\r\nimport { Skeleton } from 'primereact/skeleton';\r\n\r\nconst App: React.FC = () => {\r\n const { upCommingEvents, pastEvents, events } = React.useContext(EventContext);\r\n const [loading, setLoading] = React.useState(true);\r\n\r\n React.useEffect(() => {\r\n if (events.length > 0) {\r\n setTimeout(() => {\r\n setLoading(false);\r\n }, 500);\r\n }else{\r\n setLoading(true);\r\n }\r\n }, [events]);\r\n const skelleton = (amount: number) => {\r\n // return 12 skeleton items\r\n return Array.from({length: amount}).map((_, index) => (\r\n
\r\n \r\n
\r\n ));\r\n }\r\n return (\r\n
\r\n
\r\n

Aktuelle arrangementer:

\r\n
\r\n {loading ? (\r\n skelleton(events.length > 0 ? events.length : 12)\r\n ) : (\r\n upCommingEvents.length != 0 ? (\r\n upCommingEvents.map((event, index) => (\r\n \r\n ))\r\n ):(\r\n

Pt. ingen aktuelle arrangementer

\r\n ))}\r\n \r\n
\r\n {pastEvents ? (\r\n <>\r\n

Tidligere arrangementer:

\r\n
\r\n {pastEvents.map((event, index) => (\r\n \r\n ))}\r\n
\r\n \r\n ) : (\r\n <>\r\n

Pt. ingen Tidligere arrangementer

\r\n \r\n )}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default App;","\r\nimport React from 'react'\r\nimport ReactDOM from 'react-dom/client'\r\nimport App from './modules/Events/events';\r\nimport { EventProvider } from './modules/Contexts/EventProvider';\r\nimport { PrimeReactProvider } from 'primereact/api';\r\nimport \"primereact/resources/themes/lara-light-cyan/theme.css\";\r\nReactDOM.createRoot(document.getElementById('react-events')!).render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n)"],"names":["EventUI","event","jsx","jsxs","Fragment","EventApi","take","skip","data","item","imageCrop","getImageCrop","startDate","endTime","EventContext","createContext","EventProvider","children","events","setEvents","React","upCommingEvents","setUpCommingEvents","pastEvents","setPastEvents","useEffect","now","a","b","App","loading","setLoading","skelleton","amount","_","index","Skeleton","ReactDOM","PrimeReactProvider"],"mappings":"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"}