{"version":3,"sources":["Constants.ts","store/Events/ActionTypes.ts","store/Events/Actions.ts","components/navigation/VisitUrls.tsx","images/ronneby/ronneby-kommun.svg","utils/helpers/ImageHelper.tsx","images/olofstrom/olofstrom_kommun.png","auth-config.ts","services/auth-context.tsx","components/navigation/TopNavigation.tsx","pages/NotFound.tsx","utils/prismic/LinkResolver.ts","pages/InternetExplorer.tsx","components/map/google/CustomStyles.tsx","components/map/controls/ZoomControl.tsx","components/map/controls/PositionControl.tsx","store/Filters/Selector.ts","store/Settings/Selector.ts","store/Markers/Marker.ts","utils/helpers/MarkerHelper.ts","components/map/marker/Dot.tsx","store/Markers/Selector.ts","utils/helpers/ObjectHelper.ts","components/map/marker/Pin.tsx","utils/hooks/DeviceDetect.ts","components/common/live/Live.tsx","components/common/share/Share.tsx","store/Markers/ActionTypes.ts","store/AppState/ActionTypes.ts","store/Markers/Actions.ts","components/common/seo/SEO.tsx","components/map/marker/InfoBox.tsx","images/Train.svg","images/Astrid.svg","constants/VehicleConstants.ts","images/Bus.svg","images/Fyrskar.svg","components/map/marker/Polyline.tsx","components/map/marker/Vehicle/Vehicle.tsx","components/map/marker/Marker.tsx","components/common/loader/Loader.tsx","components/map/marker/MobileInfoBox.tsx","store/Filters/ActionTypes.ts","store/Filters/Actions.ts","components/map/google/GoogleMaps.tsx","components/map/filter/FilterButton.tsx","components/map/filter/FilterOptions.tsx","components/map/filter/ToggleMenuButton.tsx","components/map/filter/FilterToggle.tsx","components/map/filter/SubFilter.tsx","components/map/filter/SubFilters.tsx","components/map/filter/MapFilter.tsx","store/Events/Selector.ts","images/default-img.gif","components/event/EventTile.tsx","components/event/EventList.tsx","components/common/datepicker/DateList.tsx","store/Breadcrumbs/ActionTypes.ts","components/event/EventDetails.tsx","store/Breadcrumbs/Actions.ts","components/tableau/Report.tsx","components/common/prismic/PrismicRichText.tsx","components/about/AboutLive.tsx","store/Settings/Settings.ts","components/admin/tools/admin/AdminTool.tsx","store/Settings/ActionTypes.ts","components/admin/tools/filter/FilterTool.tsx","store/Settings/Actions.ts","components/admin/AdminToolbox.tsx","components/navigation/routes.tsx","pages/Home.tsx","pages/Events.tsx","pages/Event.tsx","pages/ViewReport.tsx","pages/About.tsx","pages/Admin.tsx","store/Breadcrumbs/Selector.ts","components/navigation/Breadcrumbs.tsx","components/event/filters/CategoryFilterItem.tsx","components/event/filters/CategoryFilter.tsx","components/common/datepicker/DatePicker.tsx","components/event/filters/DateFilter.tsx","components/event/filters/SearchBar.tsx","components/event/filters/FilterItem.tsx","components/event/EventFilter.tsx","components/error/ErrorBanner.tsx","store/AppState/Selector.ts","App.tsx","serviceWorker.ts","store/AppState/Reducer.ts","store/Markers/Reducer.ts","store/Events/Reducer.ts","store/Filters/Reducer.ts","store/Settings/Reducer.ts","store/Breadcrumbs/Reducer.ts","store/RootReducer.ts","store/Store.ts","i18n.ts","index.tsx"],"names":["API_ROOT","process","PRISMIC_URL","PRISMIC_TOKEN","THEME_KEY","GOOGLE_MAP_Position","_process$env$REACT_AP","COOKIE_URL","_process$env$REACT_AP2","_process$env$REACT_AP3","AUTH_CLIENT_ID","_process$env$REACT_AP4","AUTH_AUTHORITY","_process$env$REACT_AP5","AUTH_SCOPE","_process$env$REACT_AP6","ADMIN_GROUP_ID","_process$env$REACT_AP7","GET_EVENTS_BEGIN","_process$env$REACT_AP8","GET_EVENTS_SUCCESS","GET_EVENTS_FAILURE","SET_FILTERED_EVENTS","SET_FILTERED_EVENTS_FAILURE","SET_EVENTS_PAGE_SCROLL_POSITION","SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE","SET_EVENTS_PAGE_FILTERS","SET_EVENTS_PAGE_FILTERS_FAILURE","CLEAR_EVENTS_PAGE_FILTERS","CLEAR_EVENTS_PAGE_FILTERS_FAILURE","getEvents","async","dispatch","type","EventActions","result","axios","get","concat","payload","data","error","console","setEventsPageScrollPosition","scrollPosition","urlArray","id","name","url","menuMapItems","title","active","GetImageLogo","React","createElement","src","logoRonneby","alt","msalConfig","auth","clientId","authority","redirectUri","postLogoutRedirectUri","system","allowNativeBroker","loginRequest","scopes","AuthContext","createContext","msalInstance","PublicClientApplication","accessToken","addEventCallback","event","eventType","EventType","LOGIN_SUCCESS","account","setActiveAccount","useAuth","useContext","AuthProvider","props","_accessToken","token","setToken","useState","user","setUser","setAccount","refreshTokensAndUserInfo","_accountInfo","_accountInfo$homeAcco","_accountInfo4","_accountInfo5","initialize","redirectResponse","handleRedirectPromise","accountInfo","expiresOn","Date","accessTokenRequest","accessTokenResponse","acquireTokenSilent","getActiveAccount","loginRedirect","window","location","reload","homeAccountIdParts","homeAccountId","split","userTenantId","userFromCurrentTenant","_accountInfo2","_accountInfo3","length","tenantId","login","username","fromValidTenant","idTokenClaims","groups","includes","aadAccess","Provider","value","logOut","logoutRedirect","getApiToken","children","TopNavigation","showDrawer","setShowDrawer","useDispatch","useLocation","toggleDrawer","open","onEventsPageClick","pathname","isHomePage","mainListItems","List","className","ListItem","onClick","NavLink","to","exact","activeClassName","FontAwesomeIcon","icon","faAngleRight","getLangString","map","_ref","key","href","target","rel","faLink","subMainListItems","_ref2","aria-disabled","Fragment","Hidden","mdUp","faBars","Drawer","anchor","PaperProps","sx","minWidth","faTimes","Button","mdDown","height","margin","borderRadius","overflow","NotFound","Container","role","Grid","container","direction","item","xs","LinkResolver","doc","uid","InternetExplorer","client","Prismic","setDocData","useEffect","getSingle","fetchData","RichText","asText","render","body","linkResolver","CustomOption","styles","toLowerCase","fullscreenControl","backgroundColor","zoomControl","gestureHandling","ZoomControl","handleZoom","zoomLevel","faPlus","faMinus","PositionControl","navigator","geolocation","getCurrentPosition","position","coords","lat","latitude","lng","longitude","handleCenter","faCrosshairs","Filters","state","filters","filterList","FiltersLoading","loading","SelectedFilters","selectedFilters","SelectedFilterTitle","selectedFilterTitle","SettingsLoading","settings","Settings","MarkerIsLiveHours","markerIsLiveHours","SettingsErrors","MarkerSource","MarkerIsLive","marker","_marker$subTypes","_marker$types","shouldHaveDynamicContent","arguments","undefined","timeLimit","setHours","getHours","modifiedWithinTimeLimit","modified","toString","toISOString","hasDynamicContent","dynamicContent","properties","liveMarkerSource","source","Iot","Event","liveMarkerType","subTypes","some","f","isHolidayActivities","types","t","Dot","_props$color","useSelector","markerIsLive","setMarkerIsLive","find","color","class","onKeyDown","e","tabIndex","faCircle","aria-label","Markers","markers","markersList","MarkerDialogOpen","markerWithDialogOpen","MarkerIndexDialogOpen","markerIndexWithDialogOpen","Polylines","polylines","ClickedOnPolyline","clickedOnPolyline","ShowAllLiveMarkers","showAllLiveMarkers","isNullEmptyOrUndefined","valueToValidate","Object","prototype","hasOwnProperty","call","keys","Pin","_type$class","_type$icon","_type$class2","getType","markerType","markerHasTypes","markerisAlwaysAvailable","_props$marker","_props$marker2","_props$marker3","description","siblings","useDeviceDetect","isMobile","setMobile","mobile","innerWidth","Live","Share","pageTitle","menuOpen","setMenuOpen","onInfoBox","text","handleMenuClick","socialMedia","preventDefault","ReactGA","category","action","stopPropagation","share","log","handleClick","Link","showIcon","faShare","spacing","FacebookShareButton","quote","FacebookIcon","round","size","WhatsappShareButton","WhatsappIcon","EmailShareButton","subject","separator","beforeOnClick","faEnvelope","clipboard","writeText","GET_MARKERS_BEGIN","GET_MARKERS_SUCCESS","GET_MARKERS_FAILURE","SIGNALR_CONNECTING","SIGNALR_DISCONNECTED","SIGNALR_CONNECTED","SIGNALR_FAILURE","SIGNALR_MARKER_UPDATED","UPDATE_POLYLINES","UPDATE_POLYLINES_FAILURE","CLEAN_POLYLINES","CLICKED_ON_POLYLINE","SET_MARKER_DIALOG_OPEN","SET_MARKER_INDEX_DIALOG_OPEN","SET_SHOW_ALL_LIVE_MARKERS","SET_ERROR","SET_ERROR_FAILURE","CLEAR_ERROR","CLEAR_ERROR_FAILURE","getMarkers","AppStateActions","MarkerActions","message","errorMessage","setMarkerDialogAsOpen","setMarkerIndexDialogAsOpen","index","setShowAllLiveMarkers","updatePolylines","polyline","setClickedOnPolyline","SEO","_props$title","_props$description","_props$imageUrl","useTranslation","pageTilge","pageDescription","imageUrl","Helmet","content","property","InfoBox","indexOpen","setIndex","infoBoxInfo","setInfoBoxInfo","infoBoxRef","useRef","history","useHistory","library","add","fas","handleScroll","infoBox","current","addEventListener","removeEventListener","_props$marker$sibling","setSiblingAsInfoBox","handleInfoBox","_props$marker$sibling2","address","link","detailsUrl","bookingLink","nextIndex","_props$marker$sibling3","siblingIndex","handleChangeInfoBoxInformation","isNext","setShowInfoBox","params","URLSearchParams","search","set","push","ref","lang","subtype","street","zip","city","Naturkartan","Hjartstartarregistret","CityBreak","ReactMarkdown","rehypePlugins","rehypeRaw","GIS","Trafikverket","DataScraping","SvenskaLag","getMarkerSourceLabel","prop","style","transform","label","faExternalLinkAlt","disabled","faArrowLeft","faArrowRight","vehicles","image","trainImage","astridImage","Polyline","listOfVertices","maps","handleClickOnPolyline","v","append","handleClickOnMap","newPolyline","forEach","vertice","geodesicPolyline","addNewPolyline","vertices","lineSymbol","path","strokeOpacity","scale","geodesic","strokeColor","strokeWeight","icons","offset","repeat","setMap","addListener","Vehicle","_vehicle$color","vehicle","setVehicle","setLng","movingEast","setMovingEast","typeOfVehicle","_props$marker$lng","Marker","_getColorForTourMarke","showInfoBox","polylinePath","setPolylinePath","polylineId","setPolylineId","markerDialogOpen","markerIndexOpen","handleSiblings","handlePolylines","removeVehicles","polylinesToClean","filter","poly","newPolylines","handlePath","markerShapes","unlisten","listen","pinId","handleClickOnMarker","newPolylinePath","markerShape","markerIndex","getColorForMarkerShape","getColorForTourMarker","isVehicle","smDown","Loader","getEmptyMarker","Other","deleted","published","MobileInfoBox","openMarker","setOpenMarker","_marker$siblings","GET_FILTERS_BEGIN","GET_FILTERS_SUCCESS","GET_FILTERS_FAILURE","UPDATE_SELECTED_FILTERS","UPDATE_SELECTED_FILTERS_FAILURE","CLEAN_SELECTED_FILTERS","SET_SELECTED_FILTER_TITLE","getFilters","FilterActions","updateSelectedFilters","setSelectedFilterTitle","GoogleMaps","connection","HubConnectionBuilder","withUrl","withAutomaticReconnect","configureLogging","LogLevel","Information","build","on","JSON","parse","onclose","onreconnecting","onreconnected","start","then","catch","_URLSearchParams$get","_URLSearchParams$get2","_Number","Number","setZoomLevel","markersOnMap","setMarkersOnMap","bounds","setBounds","center","setCenter","getMainPosition","markersLoaded","setMarkersLoaded","googleMap","setGoogleMap","googleMaps","setGoogleMaps","filterMarkersOnMapBounds","useCallback","filteredMarkers","se","ne","nw","sw","isInsideMapBounds","newFilteredMarkers","selectedFilter","markersFromFilter","subFilters","subType","subFilter","filterMarkersByFilter","handlePolyline","startMarker","m","inArray","startFilter","defaultZoom","zoom","parseFloat","GoogleMap","bootstrapURLKeys","defaultCenter","onZoomAnimationStart","onDrag","options","disableDoubleClickZoom","closeInfoBox","onChange","changeEvent","stringify","yesIWantToUseGoogleMapApiInternals","onGoogleApiLoaded","handleApiLoaded","smUp","level","FilterButton","activeFilter","setActiveFilter","showFilterOption","setShowFilterOption","showOption","setShowOption","handleActive","i","handleSelectedFilter","newSelectedFilters","disableTouchRipple","disableRipple","handleClose","showCategoriesForFilter","showSubFilters","FilterOptions","alignItems","justifyContent","md","sm","lg","xl","addAllFilters","cleanSelectedFilters","ToggleMenuButton","showingMenu","FilterToggle","SubFilter","activeSubFilter","setActiveSubFilter","faCheckCircle","SubFilters","rowGap","subfilter","s","MapFilter","faCoffee","faMapMarkerAlt","showFilterMenu","setShowFilterMenu","filtersWithMarkers","setFiltersWithMarkers","setSelectedFilter","setShowSubFilters","setDefaultFilters","setFiltersToShow","filtersToShow","_filter$subFilters","defaultFilters","defaultFilter","filterMenuRef","toggleRef","toggleOnOutsideClick","handleClickOutside","contains","document","RedSwitch","styled","Switch","theme","alpha","palette","hoverOpacity","alignContent","variant","faChevronLeft","checked","toggleShowAllLiveMarkers","zeroMinWidth","handleSelectedCategory","removeSubFilters","newFilters","addAllSubFilters","fullSelectedFilter","removeFilters","cleanPolylines","toggleFilterMenu","Events","events","eventList","FilteredEvents","filteredEventList","Categories","categoryList","EventsLoading","EventsPageScrollPosition","eventsPageState","EventsPageFilters","EventTile","_props$event","replaceAll","moment","format","defaultImage","EventList","filteredEvents","eventsLoading","eventsPageScrollPosition","scrollTo","top","scrollY","behavior","DateList","relatedEvents","eventStart","eventsCurrentMonth","setEventsCurrentMonth","getMonth","currentMonth","setCurrentMonth","handleDates","nextMonth","eventCurrentMonth","prevMonth","setMonth","faChevronRight","end","SET_TITLE","SET_TITLE_FAILURE","CLEAR_TITLE","CLEAR_TITLE_FAILURE","EventDetails","useParams","setEvent","setRelatedEvents","dateList","setDateList","fixedId","fixedStart","eventId","decodeURIComponent","startDate","eventToShow","getTime","BreadcrumbsActionTypes","ingress","categories","phoneNumber","email","webpage","tableau","Report","Viz","PrismicRichText","AboutLive","contacts","contact","contacttitle","contactbody","AdminTools","AdminTool","faTools","GET_SETTINGS_BEGIN","GET_SETTINGS_SUCCESS","GET_SETTINGS_FAILURE","SET_SETTINGS_BEGIN","SET_SETTINGS_SUCCESS","SET_SETTINGS_FAILURE","FilterTool","setSelectedFilters","setLoading","setSettings","setFilters","setError","disableSaveBtn","setDisableSaveBtn","storeSettings","storeLoadingSettings","storeSettingErrors","storeFilters","storeLoadingFilters","_settings$defaultFilt2","every","_settings$defaultFilt","faExclamationTriangle","handleSelecteFilter","updatedSettings","updateSettings","SettingsActions","headers","Authorization","queryString","post","AdminToolbox","currentTool","setCurrentTool","Admin","handleToolChange","tool","Filter","paths","Component","ViewReport","About","Title","breadcrumbs","Breadcrumbs","CategoryFilterItem","onKeyUp","c","keyCode","CategoryFilter","_props$selectedCatego","selectedCategories","setSelectedCategories","refCategoryFilter","onChangeCategory","handleClickRef","_refCategoryFilter$cu","_props$selectedCatego2","faChevronDown","cat","handleClickItem","DatePicker","setDate","LocalizaitonProvider","dateAdapter","AdapterDateFns","locale","svLocale","DayPicker","reduceAnimations","allowKeyboardControl","date","newDate","onYearChange","disablePast","renderDay","day","higlightedDays","DayComponentProps","outDated","outsideCurrentMonth","getDate","PickersDay","assign","DateFilter","_props$selectedDate","selectedDate","setSelectedDate","refDateFilter","handleClickDate","onChangeDate","_refDateFilter$curren","toLocaleDateString","month","year","SearchBar","_props$filterText","filterText","setFilterText","faSearch","TextField","onChangeText","FilterItem","onDelete","EventFilter","_eventsPageFilters$te","_eventsPageFilters$da","_eventsPageFilters$ca","eventsPageFilters","mobileMenuOpen","setMobileMenuOpen","eventsToFilter","handleTextFilter","eCategory","handleCategoryFilter","handleDateFilter","setEventsPageFilters","Paper","faSortAmountDownAlt","ErrorBanner","Error","appState","errorSummary","App","send","hitType","page","_document$querySelect","_document$querySelect2","_document$querySelect3","_document$querySelect4","_document$querySelect5","_document$querySelect6","_document$querySelect7","querySelector","setAttribute","Suspense","fallback","isIE","routes","Route","crumbs","match","_ref3","reduce","param","replace","CookieConsent","buttonText","expires","containerClasses","buttonClasses","isError","isLocalhost","Boolean","hostname","initialState","errors","appStateReducer","connected","markerReducer","_action$payload","newMarkers","_state$markersList","_newMarkers","_newMarkers2","eventReducer","filterReducer","defaultEventCategories","settingsReducer","breadcrumbsReducer","reducer","combineReducers","eventsReducer","logger","createLogger","collapsed","Store","createStore","composeWithDevTools","applyMiddleware","thunk","common_se","common_se_olofstrom","common_se_ronneby","i18n","use","Backend","LanguageDetector","initReactI18next","init","resources","common","fallbackLng","debug","whitelist","interpolation","escapeValue","ReactDOM","store","StrictMode","Router","getElementById","config","URL","origin","swUrl","fetch","response","contentType","status","indexOf","serviceWorker","ready","registration","unregister","register","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","registerValidSW","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.afb72829.chunk.js","sourcesContent":["export const API_ROOT = process.env.REACT_APP_API_ROOT;\nexport const FUNCTIONS_ROOT: string = process.env.REACT_APP_FUNTIONS_ROOT == null ? '' : process.env.REACT_APP_FUNTIONS_ROOT;\nexport const LOCAL_DB_ROOT = process.env.REACT_APP_LOCAL_DB_ROOT;\nexport const GOOGLE_MAP_KEY: string = process.env.REACT_APP_GOOGLE_MAP_API_KEY == null ? '' : process.env.REACT_APP_GOOGLE_MAP_API_KEY;\nexport const GOOGLE_ANALYTICS_KEY: string = process.env.REACT_APP_GOOGLE_ANALYTICS_KEY == null ? '' : process.env.REACT_APP_GOOGLE_ANALYTICS_KEY;\nexport const PRISMIC_URL: string = process.env.REACT_APP_PRISMIC_URL == null ? '' : process.env.REACT_APP_PRISMIC_URL;\nexport const PRISMIC_TOKEN: string = process.env.REACT_APP_PRISMIC_TOKEN == null ? '' : process.env.REACT_APP_PRISMIC_TOKEN;\nexport const THEME_KEY : string = process.env.REACT_APP_THEME_KEY == null ? 'ronneby': process.env.REACT_APP_THEME_KEY;\nexport const GOOGLE_MAP_Position = process.env.REACT_APP_MapPosition ?? '';\nexport const CACHE_NAME: string = process.env.REACT_APP_CACHE_NAME ?? '';\nexport const COOKIE_URL: string = process.env.REACT_APP_COOKIE_URL ?? '' ;\nexport const AUTH_CLIENT_ID: string = process.env.REACT_APP_AUTH_CLIENT_ID ?? '';\nexport const AUTH_AUTHORITY: string = process.env.REACT_APP_AUTH_AUTHORITY ?? '';\nexport const AUTH_SCOPE: string = process.env.REACT_APP_AUTH_SCOPE ?? '';\nexport const ADMIN_GROUP_ID: string = process.env.REACT_APP_ADMIN_GROUP_ID ?? '';\nexport const AUTH_REDIRECT_URI: string = process.env.REACT_APP_AUTH_REDIRECT_URI ?? '';","import { ICategory, IEvent, IEventResponse } from \"./Event\";\n\nexport const GET_EVENTS_BEGIN = 'GET_EVENTS_BEGIN';\nexport const GET_EVENTS_SUCCESS = 'GET_EVENTS_SUCCESS';\nexport const GET_EVENTS_FAILURE = 'GET_EVENTS_FAILURE';\nexport const SET_FILTERED_EVENTS = 'SET_FILTERED_EVENTS';\nexport const SET_FILTERED_EVENTS_FAILURE = 'SET_FILTERED_EVENTS_FAILURE';\nexport const SET_EVENTS_PAGE_SCROLL_POSITION = 'SET_EVENTS_PAGE_SCROLL_POSITION';\nexport const SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE = 'SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE';\nexport const SET_EVENTS_PAGE_FILTERS = 'SET_EVENTS_PAGE_FILTERS';\nexport const SET_EVENTS_PAGE_FILTERS_FAILURE = 'SET_EVENTS_PAGE_FILTERS_FAILURE';\nexport const CLEAR_EVENTS_PAGE_FILTERS = 'CLEAR_EVENTS_PAGE_FILTERS';\nexport const CLEAR_EVENTS_PAGE_FILTERS_FAILURE = 'CLEAR_EVENTS_PAGE_FILTERS_FAILURE';\n\nexport interface IEventState {\n eventList: IEvent[],\n filteredEventList: IEvent[],\n categoryList: ICategory[],\n loading: boolean,\n error?: string,\n eventsPageState: {\n scrollPosition: number;\n filters?: IEventFilters\n };\n}\n\nexport interface IEventFilters {\n date?: Date;\n categories?: ICategory[];\n text?: string;\n}\n\ninterface GetEventsBeginAction {\n type: typeof GET_EVENTS_BEGIN\n}\n\ninterface GetEventsSuccessAction {\n type: typeof GET_EVENTS_SUCCESS,\n payload: IEventResponse\n}\n\ninterface GetEventsFailure {\n type: typeof GET_EVENTS_FAILURE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any\n}\n\ninterface SetFilteredEvents {\n type: typeof SET_FILTERED_EVENTS,\n payload: IEvent[]\n}\n\ninterface SetFilteredEventsFailure {\n type: typeof SET_FILTERED_EVENTS_FAILURE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any\n}\n\n\ninterface SetEventsPageScrollPosition {\n type: typeof SET_EVENTS_PAGE_SCROLL_POSITION,\n payload: number;\n}\n\ninterface SetEventsPageScrollPositionFailure {\n type: typeof SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE,\n payload: string\n}\n\ninterface SetEventsPageFilters {\n type: typeof SET_EVENTS_PAGE_FILTERS,\n payload: IEventFilters;\n}\n\ninterface SetEventsPageFiltersFailure {\n type: typeof SET_EVENTS_PAGE_FILTERS_FAILURE,\n payload: string\n}\n\ninterface ClearEventsPageFilters {\n type: typeof CLEAR_EVENTS_PAGE_FILTERS,\n}\n\ninterface ClearEventsPageFiltersFailure {\n type: typeof CLEAR_EVENTS_PAGE_FILTERS_FAILURE,\n payload: string\n}\n\nexport type EventActionTypes = GetEventsBeginAction |\n GetEventsSuccessAction |\n GetEventsFailure |\n SetFilteredEvents |\n SetFilteredEventsFailure |\n SetEventsPageScrollPosition |\n SetEventsPageScrollPositionFailure |\n SetEventsPageFilters |\n SetEventsPageFiltersFailure |\n ClearEventsPageFilters |\n ClearEventsPageFiltersFailure;","import axios from 'axios';\nimport { API_ROOT } from '../../Constants';\n\nimport { ThunkAction } from 'redux-thunk'\nimport { RootState } from '../RootReducer';\nimport { Action } from 'redux';\nimport * as EventActions from './ActionTypes'\nimport { IEvent } from './Event';\n\nexport const getEvents = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({ type: EventActions.GET_EVENTS_BEGIN });\n\n const result = await axios.get(`${API_ROOT}/event`);\n dispatch({\n type: EventActions.GET_EVENTS_SUCCESS,\n payload: result.data\n });\n } catch (error) {\n console.error(error);\n dispatch({ type: EventActions.GET_EVENTS_FAILURE, payload: error })\n }\n}\n\nexport const setFilteredEvents = (filteredEvents: IEvent[]): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({\n type: EventActions.SET_FILTERED_EVENTS,\n payload: filteredEvents\n });\n\n } catch (error) {\n console.error(error);\n dispatch({ type: EventActions.SET_FILTERED_EVENTS_FAILURE, payload: error })\n }\n}\n\nexport const setEventsPageScrollPosition = (scrollPosition: number): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({\n type: EventActions.SET_EVENTS_PAGE_SCROLL_POSITION,\n payload: scrollPosition\n });\n\n } catch (error) {\n console.error(error);\n dispatch({ type: EventActions.SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE, payload: error })\n }\n}\n\nexport const setEventsPageFilters = (eventsPageFilters: EventActions.IEventFilters): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({\n type: EventActions.SET_EVENTS_PAGE_FILTERS,\n payload: eventsPageFilters\n });\n\n } catch (error) {\n console.error(error);\n dispatch({ type: EventActions.SET_EVENTS_PAGE_FILTERS_FAILURE, payload: error })\n }\n}\n\nexport const clearEventsPageFilters = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({\n type: EventActions.CLEAR_EVENTS_PAGE_FILTERS\n });\n\n } catch (error) {\n console.error(error);\n dispatch({ type: EventActions.CLEAR_EVENTS_PAGE_FILTERS_FAILURE, payload: error })\n }\n}","import { THEME_KEY } from '../../Constants';\n\n// Define the array of URLs\nexport const urlArray = THEME_KEY === 'olofstrom'\n ? [\n { id: 1, name: 'Olofstrom.se', url: 'https://olofstrom.se/' },\n { id: 2, name: 'Visitolofstrom.se', url: 'http://www.visitolofstrom.se' },\n ]\n : [\n { id: 1, name: 'Ronneby.se', url: 'https://ronneby.se' },\n { id: 2, name: 'Visitronneby.se', url: 'http://www.visitronneby.se' },\n ];\nexport const menuMapItems = THEME_KEY === 'olofstrom'\n ? [\n {\n id: '1',\n title: 'Olofström',\n url: 'https://live.olofstrom.se',\n active: false,\n },\n {\n id: '2',\n title: 'Ronneby',\n url: 'https://live.ronneby.se',\n active: true,\n },\n ]\n : [\n {\n id: '1',\n title: 'Ronneby',\n url: 'https://live.ronneby.se',\n active: false,\n },\n {\n id: '2',\n title: 'Olofström',\n url: 'https://live.olofstrom.se',\n active: true,\n },\n ];\n","export default __webpack_public_path__ + \"static/media/ronneby-kommun.c41425b1.svg\";","import React from 'react';\nimport logoRonneby from '../../images/ronneby/ronneby-kommun.svg';\nimport logoOlofstrom from '../../images/olofstrom/olofstrom_kommun.png';\nimport { THEME_KEY } from '../../Constants';\n\nexport function GetImageLogo(): JSX.Element | null {\n switch (THEME_KEY) {\n case 'ronneby':\n return <img src={logoRonneby} alt=\"Ronneby kommun\" />;\n case 'olofstrom':\n return <img src={logoOlofstrom} alt=\"Olofström kommun \" />;\n default:\n return null;\n }\n}\nexport function GetDefaultMapImage(): string {\n return `${process.env.PUBLIC_URL}/images/${THEME_KEY}/map.png`;\n}\n","export default \"data:image/png;base64,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\"","import { Configuration, RedirectRequest } from \"@azure/msal-browser\";\nimport { AUTH_AUTHORITY, AUTH_CLIENT_ID, AUTH_SCOPE } from \"./Constants\";\n\n// Config object to be passed to Msal on creation\nexport const msalConfig: Configuration = {\n auth: {\n clientId: AUTH_CLIENT_ID,\n authority: AUTH_AUTHORITY,\n redirectUri: \"/admin\",\n postLogoutRedirectUri: \"/\"\n },\n system: {\n allowNativeBroker: false // Disables WAM Broker\n }\n};\n\n//Add here scopes for id token to be used at MS Identity Platform endpoints.\nexport const loginRequest: RedirectRequest = {\n scopes: [AUTH_SCOPE]\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n PublicClientApplication,\n EventType,\n EventMessage,\n AuthenticationResult,\n AccountInfo,\n SilentRequest,\n} from \"@azure/msal-browser\";\nimport { loginRequest, msalConfig } from \"../auth-config\";\nimport { createContext, useContext, useState } from \"react\";\nimport React from \"react\";\nimport { ADMIN_GROUP_ID } from \"../Constants\";\nexport interface Account {\n name: string | undefined;\n login: string | undefined;\n aadAccess?: boolean;\n fromValidTenant: boolean;\n}\n\nconst AuthContext = createContext<{\n user: Account | null | undefined;\n logOut(): void;\n getApiToken(): Promise<string>;\n refreshTokensAndUserInfo(): Promise<void>;\n}>({} as any);\n\nconst msalInstance = new PublicClientApplication(msalConfig);\n\nlet accessToken: string;\n\nmsalInstance.addEventCallback((event: EventMessage) => {\n if (event.eventType === EventType.LOGIN_SUCCESS && event.payload) {\n const payload = event.payload as AuthenticationResult;\n const account = payload.account;\n msalInstance.setActiveAccount(account);\n }\n});\n\nexport const useAuth = (): any => {\n return useContext(AuthContext);\n}\n\nexport interface IAuthProviderProps {\n children: React.ReactNode;\n}\n\nexport const AuthProvider = (props: IAuthProviderProps): JSX.Element => {\n // handle auth redired/do all initial setup for msal\n const [token, setToken] = useState<string>(accessToken ?? \"\");\n const [user, setUser] = useState<Account | null>();\n const [account, setAccount] = useState<AccountInfo | null>();\n\n const refreshTokensAndUserInfo = async () => {\n await msalInstance.initialize();\n const redirectResponse = await msalInstance.handleRedirectPromise();\n let accountInfo: AccountInfo | null = null;\n try {\n if (redirectResponse !== null) {\n\n // Check if the redirectResponse have expired\n if (redirectResponse.expiresOn && redirectResponse.expiresOn < new Date()) {\n // console.log('redirect response was expired');\n // The token is expired, let's try to get a new one\n const accessTokenRequest: SilentRequest = {\n ...loginRequest,\n account: redirectResponse.account,\n };\n\n // console.log('Aquire accesstoken silently.. ');\n const accessTokenResponse = await msalInstance.acquireTokenSilent(\n accessTokenRequest\n );\n\n // console.log('Got the access token response from the slient request, when the redirect isnt null...', accessTokenResponse);\n accessToken = accessTokenResponse.accessToken;\n } else {\n // console.log('redirect response was not expired');\n accessToken = redirectResponse.accessToken;\n // console.log('Got the access token from redirect response', redirectResponse);\n }\n\n accountInfo = msalInstance.getActiveAccount();\n\n // console.log('Account information', accountInfo);\n\n } else {\n // console.log('redirect response was null');\n // Check if user signed in\n accountInfo = msalInstance.getActiveAccount();\n\n if (accountInfo === null) {\n // console.log('Account info was null .. so starting redirect!');\n msalInstance.loginRedirect(loginRequest);\n return;\n }\n\n const accessTokenRequest: SilentRequest = {\n ...loginRequest,\n account: accountInfo,\n };\n\n // console.log('Aquire accesstoken silently.. ');\n const accessTokenResponse = await msalInstance.acquireTokenSilent(\n accessTokenRequest\n );\n\n // console.log('Got the access token response from the slient request', accessTokenResponse);\n accessToken = accessTokenResponse.accessToken;\n }\n } catch (error) {\n console.error('Error when trying to get the access token', error);\n\n // Reload the browser to force a new login, we have seen some \n // strange errors when the user is logged in for a long time and the\n // refresh fails.\n window.location.reload();\n }\n\n // Split the home account id to get the id for the tenant for the user. That is the secound \n // part of the home account id. Check that against the tenant id, if they are the same, the user \n // is from the current tenant.\n const homeAccountIdParts = accountInfo?.homeAccountId?.split('.');\n let userTenantId = \"\";\n let userFromCurrentTenant = false;\n if (homeAccountIdParts?.length !== 2) {\n console.error('The home account id was not in the expected format, letting all users in. The home account id was:', accountInfo?.homeAccountId);\n userFromCurrentTenant = true;\n } else {\n userTenantId = homeAccountIdParts[1];\n userFromCurrentTenant = userTenantId === accountInfo?.tenantId;\n }\n setAccount(accountInfo);\n const user: Account = {\n name: accountInfo?.name,\n login: accountInfo?.username,\n fromValidTenant: userFromCurrentTenant\n };\n \n if (\n accountInfo != null &&\n accountInfo.idTokenClaims != null &&\n accountInfo.idTokenClaims.groups != null &&\n accountInfo.idTokenClaims[\"groups\"] != null\n ) {\n\n // OK, so the user are memeber of a group that are assigned to the APP in AAD\n // let's check if the user is a member of the beta group\n const groups = accountInfo.idTokenClaims[\"groups\"] as string[];\n\n if (groups.includes(ADMIN_GROUP_ID)) {\n user.aadAccess = true;\n }\n }\n\n setUser(user);\n\n // Only set the access token if the user is from the valid tenant, this \n // is to prevent unnecessary calls to the API.\n if (user?.aadAccess) {\n setToken(accessToken);\n }\n };\n\n // anropa denna metoden - \n const getApiToken = async (): Promise<string> => {\n await refreshTokensAndUserInfo();\n return token;\n };\n\n const logOut = async () => {\n msalInstance.logoutRedirect({ account: account });\n };\n\n return (\n <AuthContext.Provider value={{ user, logOut, getApiToken, refreshTokensAndUserInfo }}>\n {props.children}\n </AuthContext.Provider>\n );\n}","import React, { useState } from 'react';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faAngleRight, faBars, faLink, faTimes } from '@fortawesome/free-solid-svg-icons';\n\nimport './ThemeTopNavigation.scss';\nimport { Hidden, Drawer, List, ListItem, Button } from '@material-ui/core';\nimport { clearEventsPageFilters, setEventsPageScrollPosition } from '../../store/Events/Actions';\nimport { useDispatch } from 'react-redux';\nimport { menuMapItems, urlArray } from './VisitUrls';\nimport { GetImageLogo } from '../../utils/helpers/ImageHelper';\nimport { useAuth } from '../../services/auth-context';\n\nexport interface ITopNavigationProps {\n getLangString: (value: string) => string;\n}\n\nexport const TopNavigation = (props: ITopNavigationProps): JSX.Element => {\n const [showDrawer, setShowDrawer] = useState(false);\n const dispatch = useDispatch();\n const location = useLocation();\n\n const { user, logOut } = useAuth();\n\n const toggleDrawer = (open: boolean) => {\n setShowDrawer(open);\n };\n\n const onEventsPageClick = () => {\n if (location.pathname !== '/events') {\n dispatch(setEventsPageScrollPosition(0));\n dispatch(clearEventsPageFilters());\n }\n };\n\n const isHomePage = location.pathname === '/';\n\n const mainListItems = () => {\n return (\n <List className=\"drawer-list\">\n <ListItem className=\"drawer-list-item \" onClick={() => toggleDrawer(false)}>\n <NavLink\n to=\"/\"\n exact\n className=\"drawer-link dark livemap\"\n activeClassName=\"active\"\n onClick={() => onEventsPageClick()}\n >\n <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n\n {props.getLangString('topNavigation.liveMap')}\n </NavLink>\n </ListItem>\n <ListItem className=\"drawer-list-item\" onClick={() => toggleDrawer(false)}>\n <NavLink\n to=\"/events\"\n className=\"drawer-link dark\"\n activeClassName=\"active\"\n onClick={() => onEventsPageClick()}\n >\n <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n\n {props.getLangString('topNavigation.whatHappensInRonneby')}\n </NavLink>\n </ListItem>\n\n <ListItem className=\"drawer-list-item \" onClick={() => toggleDrawer(false)}>\n <NavLink to=\"/about\" className=\"drawer-link dark\" activeClassName=\"active\">\n <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n\n {props.getLangString('topNavigation.aboutRonneby')}\n </NavLink>\n </ListItem>\n\n {urlArray.map(({ url, name }, id) => (\n <ListItem key={id} className=\"drawer-list-item \" onClick={() => toggleDrawer(false)}>\n <a href={url} className=\"drawer-link dark\" target=\"_blank\" rel=\"noreferrer\">\n <FontAwesomeIcon icon={faLink} className=\"drawer-item-icon\" />\n {name}\n </a>\n </ListItem>\n ))}\n </List>\n );\n };\n\n const subMainListItems = () => {\n return (\n <List className=\"drawer-list\">\n {menuMapItems.map(({ url, title, active }, id) => (\n <ListItem key={id} className=\"drawer-list-item has-border\" onClick={() => toggleDrawer(false)}>\n {active && (\n <a href={url} className={`drawer-link light`} target=\"_blank\" rel=\"noreferrer\">\n <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n {title}\n </a>\n )}\n {!active && (\n <a className={`drawer-link-disable`} aria-disabled=\"true\">\n <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n {title}\n </a>\n )}\n </ListItem>\n ))}\n </List>\n );\n };\n return (\n <React.Fragment>\n <Hidden mdUp>\n <div className=\"nav\">\n <div onClick={() => toggleDrawer(true)} className=\"drawer-toggle-div\">\n <FontAwesomeIcon icon={faBars} className=\"drawer-toggle-icon\" />\n </div>\n <Drawer\n anchor=\"left\"\n open={showDrawer}\n onClick={() => setShowDrawer(false)}\n PaperProps={{\n sx: {\n minWidth: '300px',\n },\n }}\n >\n <div onClick={() => toggleDrawer(false)} className=\"drawer-menu-close-cross\">\n <FontAwesomeIcon icon={faTimes} />\n </div>\n <div className=\"nav-logo-container \">\n <NavLink to=\"/\" exact id=\"nav-logo\">\n <GetImageLogo />\n </NavLink>\n </div>\n\n <div className=\"drawer-menu\">\n {mainListItems()}\n <div className=\"drawer-menu-header\">\n <div className=\"drawer-menu-header-title\">{props.getLangString('menu.title')}</div>\n </div>\n {subMainListItems()}\n </div>\n </Drawer>\n </div>\n {user &&\n <div className=\"logout-button-container\">\n <Button className=\"logout-button\" onClick={() => logOut()}>{props.getLangString('admin.logOut')}</Button>\n </div>\n }\n {isHomePage && (\n <div className=\"logo-container\">\n <GetImageLogo />\n </div>\n )}\n </Hidden>\n\n <Hidden mdDown>\n <div className=\"nav\">\n <div className=\"nav-item\">\n <NavLink to=\"/\" exact id=\"nav-logo\">\n <GetImageLogo />\n </NavLink>\n </div>\n\n <div className=\"nav-item\">\n {user &&\n <div className=\"logout-button-container\">\n <Button className=\"logout-button large\" onClick={() => logOut()}>{props.getLangString('admin.logOut')}</Button>\n </div>\n }\n <div onClick={() => toggleDrawer(!showDrawer)} className=\"drawer-toggle-div\">\n <FontAwesomeIcon icon={faBars} className=\"drawer-toggle-icon \" />\n </div>\n </div>\n <Drawer\n className=\"rightdrawer\"\n anchor=\"right\"\n open={showDrawer}\n onClick={() => setShowDrawer(!showDrawer)}\n PaperProps={{\n sx: {\n height: '300px',\n minWidth: '350px',\n margin: '100px 0px 0px 0px',\n borderRadius: '0px 0px 0px 12px',\n overflow: 'hidden',\n },\n }}\n >\n <div className=\"drawer-menu\">\n {mainListItems()}\n <div className=\"drawer-menu-header\">\n <div className=\"drawer-menu-header-title\">{props.getLangString('menu.title')}</div>\n </div>\n {subMainListItems()}\n </div>\n </Drawer>\n </div>\n </Hidden>\n </React.Fragment>\n );\n};\n","import React from 'react'\nimport { Grid, Container, Button } from '@material-ui/core';\nimport './ThemeNotFound.scss';\n\nexport interface INotFoundProps {\n getLangString: (value: string) => string;\n}\n\nexport const NotFound = (props: INotFoundProps) : JSX.Element => {\n return (\n <Container role=\"main\">\n <div className=\"not-found-wrapper\" role=\"article\">\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <h1>{props.getLangString('errorHandling.cantFindPage')}</h1>\n\n <Button href=\"/\" className=\"back-button\">\n <span> {props.getLangString('errorHandling.backToStartPage')} </span>\n </Button >\n </Grid>\n </Grid>\n </div>\n </Container>\n );\n};","import { Document } from '@prismicio/client/types/documents';\n\n\n\nexport const LinkResolver = (doc: Document): string => {\n // Define the url depending on the document type\n if (doc.type === 'page') {\n return '/page/' + doc.uid;\n } else if (doc.type === 'blog_post') {\n return '/blog/' + doc.uid;\n }\n\n // Default to homepage\n return '/';\n}","import React from 'react';\nimport { Grid, Container } from '@material-ui/core';\nimport Prismic from '@prismicio/client'\nimport { RichText } from 'prismic-reactjs'\nimport { Document } from '@prismicio/client/types/documents';\nimport { LinkResolver } from '../utils/prismic/LinkResolver';\nimport { PRISMIC_URL, PRISMIC_TOKEN } from '../Constants';\n\nexport const InternetExplorer = (): JSX.Element => {\n const client = Prismic.client(PRISMIC_URL, { accessToken: PRISMIC_TOKEN })\n const [doc, setDocData] = React.useState<Document | undefined>()\n\n React.useEffect(() => {\n const fetchData = async () => {\n const doc = await client.getSingle('notsuported', {});\n setDocData(doc);\n }\n fetchData()\n }, []);\n\n return (\n <React.Fragment>\n { doc &&\n\n <Container role=\"main\">\n <div className=\"not-found-wrapper\" role=\"article\">\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <h1>{RichText.asText(doc.data.title)}</h1>\n\n <RichText render={doc.data.body} linkResolver={LinkResolver} />\n </Grid>\n </Grid>\n </div>\n </Container>\n }\n </React.Fragment>\n );\n}","import { MapTypeStyle, MapOptions } from 'google-map-react'\nimport { THEME_KEY } from '../../../Constants';\n\nconst CustomStyles: MapTypeStyle[] =\n(THEME_KEY.toLowerCase() === (\"olofstrom\").toLowerCase())?\n[\n {\n \"featureType\": \"administrative\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#444444\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.locality\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#124d67\"\n }\n ]\n },\n \n {\n \"featureType\": \"landscape\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"hue\": \"#00b8ff\"\n }\n ]\n },\n {\n \"featureType\": \"landscape.natural.landcover\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#ffffff\"\n }\n ]\n },\n {\n \"featureType\": \"landscape.man_made\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"hue\": \"#000eff\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"lightness\": \"0\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#e83184\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#F3BED3\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"weight\": \"1.05\"\n },\n {\n \"color\": \"#1c2b7c\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#FAE2EA\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#1c2b7c\"\n }\n ]\n },\n {\n \"featureType\": \"transit\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#B5D1E2\"\n },\n {\n \"visibility\": \"on\"\n }\n ]\n }\n \n]\n:\n//Default Ronneby\n[\n {\n \"featureType\": \"administrative\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#444444\"\n }\n ]\n },\n {\n \"featureType\": \"landscape\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"hue\": \"#00b8ff\"\n }\n ]\n },\n {\n \"featureType\": \"landscape.man_made\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"hue\": \"#000eff\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"lightness\": \"0\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#0087cb\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#65bce8\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"weight\": \"1.05\"\n },\n {\n \"color\": \"#1c2b7c\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#acc6d6\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#1f2770\"\n }\n ]\n },\n {\n \"featureType\": \"transit\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"all\",\n \"stylers\": [\n {\n \"color\": \"#92d0f0\"\n },\n {\n \"visibility\": \"on\"\n }\n ]\n }\n]\n;\n\nconst CustomOption: MapOptions = {\n styles: CustomStyles,\n fullscreenControl: false,\n backgroundColor: '#D5E2E7',\n zoomControl: false,\n gestureHandling: 'greedy'\n};\n\nexport default CustomOption;\n","import React from 'react';\nimport './ThemeControl.scss';\nimport { faMinus, faPlus } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@material-ui/core';\n\nexport interface IZoomControlProps {\n zoomLevel: number;\n handleZoom: (zoomLevel: number) => void;\n}\n\nexport const ZoomControl = (props: IZoomControlProps): JSX.Element => {\n return (\n <div className=\"zoom control\">\n <Button className=\"plus-control\" onClick={() => props.handleZoom(props.zoomLevel + 1)}>\n <FontAwesomeIcon icon={faPlus} className=\"control-icon\" />\n </Button>\n <hr className=\"solid\" />\n <Button className=\"minus-control\" onClick={() => props.handleZoom(props.zoomLevel - 1)}>\n <FontAwesomeIcon icon={faMinus} className=\"control-icon\" />\n </Button>\n </div >\n );\n}\n","import React from 'react';\nimport GoogleMap from 'google-map-react';\nimport './ThemeControl.scss';\nimport { faCrosshairs } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@material-ui/core';\n\nexport interface IPositionControlProps {\n handleCenter: (position: GoogleMap.Coords) => void;\n}\n\nexport const PositionControl = (props: IPositionControlProps): JSX.Element => {\n const centerMap = () => {\n navigator.geolocation.getCurrentPosition((position) => {\n const coords: GoogleMap.Coords = {\n lat: position.coords.latitude,\n lng: position.coords.longitude\n }\n props.handleCenter(coords);\n })\n }\n\n return (\n <div className=\"position control\">\n <Button className=\"position-control\" onClick={() => centerMap()}>\n <FontAwesomeIcon icon={faCrosshairs} className=\"control-icon\" />\n </Button>\n </div>\n );\n}\n\n","import { RootState } from \"../RootReducer\";\nimport { IFilter } from \"./Filter\";\n\nexport const Filters = (state: RootState): IFilter[] => state.filters.filterList;\nexport const FiltersLoading = (state: RootState): boolean => state.filters.loading;\nexport const SelectedFilters = (state: RootState): IFilter[] => state.filters.selectedFilters;\nexport const SelectedFilterTitle = (state: RootState): string | undefined => state.filters.selectedFilterTitle;","import { RootState } from \"../RootReducer\";\nimport { ISettingsState } from \"./ActionTypes\";\n\nexport const SettingsLoading = (state: RootState): boolean => state.settings.loading;\nexport const DefaultFilters = (state: RootState): string[] => state.settings.defaultFilters;\nexport const DefaultEventCategories = (state: RootState): string[] => state.settings.defaultEventCategories;\nexport const Settings = (state: RootState): ISettingsState => state.settings;\nexport const MarkerIsLiveHours = (state: RootState): number => state.settings.markerIsLiveHours;\nexport const SettingsErrors = (state: RootState): string | undefined => state.settings.error;\n","export interface IMarker {\n title: string;\n id: string;\n lat?: number;\n lng?: number;\n address?: IAddress;\n description: string;\n link: string;\n types: IMarkerType[];\n subTypes?: IMarkerType[];\n markerShapes: IMarkerShape[];\n imageUrl: string;\n detailsUrl: string;\n bookingLink?: string;\n deleted: boolean;\n published: boolean;\n source: MarkerSource;\n dynamicContent?: IDynamicContent;\n modified: Date;\n siblings?: IMarkerSibling[];\n icon?: string;\n}\n\nexport interface IMarkerSibling {\n title: string;\n id: string;\n address?: IAddress;\n description: string;\n link: string;\n types: IMarkerType[];\n subTypes?: IMarkerType[];\n markerShapes: IMarkerShape[];\n imageUrl: string;\n detailsUrl: string;\n source: MarkerSource;\n dynamicContent?: IDynamicContent;\n bookingLink?: string;\n}\n\nexport interface IInfoBox {\n title: string;\n id: string;\n description: string;\n imageUrl: string;\n address?: IAddress;\n link?: string;\n detailsUrl: string;\n bookingLink?: string;\n dynamicContent?: IDynamicContent;\n subTypes?: IMarkerType[];\n source: MarkerSource;\n}\n\nexport interface IMarkerType {\n title: string;\n name: string;\n icon: string;\n class: string;\n}\n\nexport interface IMarkerShape {\n type: string;\n class: string;\n vertices: IVertices[];\n}\n\nexport interface IVertices {\n lat: number;\n lng: number;\n}\n\nexport interface IDynamicContent {\n numberOfColumns: number;\n dividerBetweenColumns: boolean;\n dividerBetweenRows: boolean;\n properties: IProperty[];\n}\n\nexport interface IProperty {\n label: string;\n icon: string;\n link: string;\n value: number;\n class: string;\n}\n\nexport interface IAddress {\n street: string;\n zip: string;\n city: string;\n}\n\nexport interface IPolyline {\n id: string;\n color: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n polylines: any[];\n}\n\nexport enum MarkerSource {\n Naturkartan,\n Iot,\n Event,\n Trafikverket,\n CityBreak,\n DataScraping,\n SvenskaLag,\n GIS,\n Hjartstartarregistret,\n Other\n}\n\nexport type VehicleType = 'fyrskar' | 'karoline' | 'astrid' | 'train' | 'bus';\n\nexport interface IVehicle {\n name: string;\n type: VehicleType;\n image: string;\n color: string;\n}","import { IMarker, MarkerSource } from '../../store/Markers/Marker';\n\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nexport const MarkerIsLive = (marker: IMarker, markerIsLiveHours: number, shouldHaveDynamicContent: boolean = true): boolean => {\n const timeLimit = new Date();\n timeLimit.setHours(timeLimit.getHours() - markerIsLiveHours);\n\n const modifiedWithinTimeLimit = marker.modified.toString() > timeLimit.toISOString();\n const hasDynamicContent = marker.dynamicContent !== undefined && marker.dynamicContent !== null && marker.dynamicContent.properties.length > 0;\n const liveMarkerSource = marker.source === MarkerSource.Iot || marker.source === MarkerSource.Event;\n const liveMarkerType = marker.subTypes ? marker.subTypes?.some(f => f.title === \"Olycka\") : false;\n const isHolidayActivities = marker.types?.some(t => t.title === \"Lovaktiviteter\") ? true : false;\n\n return (((shouldHaveDynamicContent && hasDynamicContent) || !shouldHaveDynamicContent) &&\n modifiedWithinTimeLimit &&\n liveMarkerSource && !isHolidayActivities) ||\n liveMarkerType;\n}","import { faCircle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { MouseEvent, KeyboardEvent, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\nimport { IMarker } from '../../../store/Markers/Marker';\nimport { MarkerIsLiveHours } from '../../../store/Settings/Selector';\nimport { MarkerIsLive } from '../../../utils/helpers/MarkerHelper';\n\nexport interface IDotProps {\n getLangString: (value: string) => string;\n marker: IMarker;\n onClick: (e?: MouseEvent | KeyboardEvent) => void;\n active: boolean;\n color?: string;\n}\n\nexport const Dot = (props: IDotProps): JSX.Element => {\n\n const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n const [markerIsLive, setMarkerIsLive] = useState<boolean>(false);\n const selectedFilters = useSelector(SelectedFilters);\n const type = selectedFilters && props.marker && props.marker.types.length > 0 ?\n props.marker.types.find(t => selectedFilters.find(f => t.title === f.title)) :\n !selectedFilters && props.marker && props.marker.types.length > 0 ?\n props.marker.types[0] :\n undefined;\n const color = props.color ?? type?.class ?? '';\n\n useEffect(() => {\n setMarkerIsLive(MarkerIsLive(props.marker, markerIsLiveHours, false));\n }, [props.marker]);\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e?.key === 'Enter') {\n props.onClick(e);\n }\n }\n\n return (\n <React.Fragment>\n <div className=\"dot-marker\" onKeyDown={handleKeyDown} tabIndex={0}>\n <div className={'dot-container' + (markerIsLive ? ' live' : '')}>\n <div>\n <FontAwesomeIcon\n icon={faCircle}\n className={'circle ' + color + (props.active ? ' active' : '')}\n onClick={(event) => props.onClick(event)} aria-label={props.getLangString('filter.dot')}\n />\n </div>\n </div>\n </div>\n </React.Fragment>\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RootState } from \"../RootReducer\";\nimport { IMarker, IPolyline } from \"./Marker\";\n\nexport const Markers = (state: RootState) : IMarker[] => state.markers.markersList;\nexport const MarkerDialogOpen = (state: RootState) : string | undefined => state.markers.markerWithDialogOpen;\nexport const MarkerIndexDialogOpen = (state: RootState): number | undefined => state.markers.markerIndexWithDialogOpen;\nexport const Polylines = (state: RootState) : IPolyline[] => state.markers.polylines;\nexport const ClickedOnPolyline = (state: RootState): boolean => state.markers.clickedOnPolyline;\nexport const ShowAllLiveMarkers = (state: RootState): boolean => state.markers.showAllLiveMarkers;\n","// eslint-disable-next-line\nexport const isNullEmptyOrUndefined = (valueToValidate: any): boolean => {\n if (valueToValidate === null) {\n return true;\n }\n if (valueToValidate == null) {\n return true;\n }\n if (valueToValidate === undefined) {\n return true;\n }\n if (valueToValidate === '') {\n return true;\n }\n if (Object.prototype.hasOwnProperty.call(valueToValidate, 'length') && valueToValidate.length === 0) {\n return true;\n }\n if (Object.keys(valueToValidate).length === 0) {\n return true;\n }\n return false;\n};","import React, { KeyboardEvent, MouseEvent, useEffect, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCircle, IconName } from '@fortawesome/free-solid-svg-icons'\nimport { IMarker, IMarkerType } from '../../../store/Markers/Marker';\nimport { useSelector } from 'react-redux';\nimport { MarkerIsLiveHours } from '../../../store/Settings/Selector';\nimport { MarkerIsLive } from '../../../utils/helpers/MarkerHelper';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\nimport { ShowAllLiveMarkers } from '../../../store/Markers/Selector';\nimport { isNullEmptyOrUndefined } from '../../../utils/helpers/ObjectHelper';\n\nexport interface IPinProps {\n getLangString: (value: string) => string;\n marker: IMarker,\n onClick: (e?: MouseEvent | KeyboardEvent) => void;\n active: boolean;\n}\n\nexport const Pin = (props: IPinProps): JSX.Element => {\n\n const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n const showAllLiveMarkers = useSelector(ShowAllLiveMarkers);\n const [markerIsLive, setMarkerIsLive] = useState<boolean>(false);\n const selectedFilters = useSelector(SelectedFilters);\n\n const getType = () => {\n let markerType: IMarkerType | undefined = undefined;\n const markerHasTypes = props.marker && props.marker.types.length > 0;\n if (selectedFilters && markerHasTypes)\n {\n markerType = props.marker.types.find(t => selectedFilters.find(f => t.title === f.title));\n\n if (isNullEmptyOrUndefined(markerType) && showAllLiveMarkers)\n {\n markerType = props.marker.types[0];\n }\n } else if (!selectedFilters && markerHasTypes)\n {\n markerType = props.marker.types[0]\n }\n return markerType;\n }\n\n const type = getType();\n\n useEffect(() => {\n setMarkerIsLive(MarkerIsLive(props.marker, markerIsLiveHours));\n }, [props.marker]);\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event?.key === 'Enter') {\n props.onClick(event);\n }\n }\n\n const markerisAlwaysAvailable = () => {\n return props?.marker?.description != null && (\n props?.marker?.description === \"<div><b>Tillgänglighetstider</b></div><div>01 January-31 December</div><div>Alltid tillgänglig</div>\" ||\n props?.marker?.description === \"<div><b>Tillgänglighetstider</b></div><div>Alltid tillgänglig</div>\");\n };\n\n return (\n\n <React.Fragment>\n <div\n tabIndex={0}\n className={'marker ' + (type?.class ?? '') + (props.active ? ' active' : '') + (markerIsLive ? ' live' : '')}\n onClick={(event) => props.onClick(event)} onKeyDown={handleKeyDown}>\n <div className=\"icon-container\">\n <div><FontAwesomeIcon icon={['fas', (type?.icon ?? 'list-ul') as IconName]} aria-label={props.getLangString('filter.dot')} /></div>\n </div>\n {markerIsLive &&\n <div className=\"live-pin\" role=\"complementary\">\n <FontAwesomeIcon icon={faCircle} className=\"circle\" />\n </div>\n }\n\n {markerisAlwaysAvailable() &&\n <div className=\"live-pin live\" role=\"complementary\">\n <FontAwesomeIcon icon={faCircle} className=\"circle always-available\" />\n </div>\n }\n\n {props.marker.siblings && props.marker.siblings.length > 0 &&\n <div className={`multiple-pins ${props.active ? 'active' : '' + (type?.class ?? '')}`}>\n <span className=\"text\">\n {props.marker.siblings.length + 1}\n </span>\n </div>\n }\n </div>\n\n </React.Fragment>\n\n );\n}","// utils/useDeviceDetect.js\nimport React, { useState } from \"react\";\n\nexport default function useDeviceDetect() : { isMobile: boolean } {\n const [isMobile, setMobile] = useState(false);\n\n React.useEffect(() => {\n\n const mobile = window.innerWidth <= 991;\n setMobile(mobile);\n\n }, []);\n\n return { isMobile };\n}","import React from 'react';\nimport './ThemeLive.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCircle } from '@fortawesome/free-solid-svg-icons'\n\nexport interface ILiveProps {\n getLangString: (value: string) => string;\n}\n\nexport const Live = (props: ILiveProps): JSX.Element => {\n return (\n <div className=\"live live-logo\" role=\"complementary\" aria-label={props.getLangString('global.live')}>\n {props.getLangString('global.live')} <FontAwesomeIcon icon={faCircle} className=\"circle\" />\n </div>\n )\n}","import React, { useEffect, useState } from 'react';\nimport ReactGA from 'react-ga4';\nimport { EmailShareButton, FacebookIcon, FacebookShareButton, WhatsappIcon, WhatsappShareButton } from 'react-share';\nimport { faEnvelope, faLink, faShare } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, Grid, Link } from '@material-ui/core';\nimport './ThemeShare.scss';\nimport useDeviceDetect from '../../../utils/hooks/DeviceDetect';\n\ninterface IShareProps {\n getLangString: (value: string) => string;\n title: string;\n onInfoBox?: boolean;\n showIcon?: boolean;\n className?: string;\n}\n\nexport const Share = (props: IShareProps): JSX.Element => {\n const pageTitle = props.getLangString('global.pageTitle');\n const { isMobile } = useDeviceDetect();\n const [menuOpen, setMenuOpen] = useState((props.onInfoBox || isMobile) ? false : true); \n const title = props.title + ' | '+ pageTitle;\n const text = `Tips! Klicka på länken för att läsa mer om ${props.title} på ${pageTitle}:`\n const url = window.location.href;\n\n useEffect(() => {\n setMenuOpen((props.onInfoBox || isMobile) ? false : true);\n }, [isMobile]);\n\n const handleClick = async (event: React.MouseEvent<HTMLDivElement | HTMLButtonElement| MouseEvent>) => {\n preventDefault(event);\n if (isMobile) {\n if (navigator.share) {\n try {\n await navigator.share({ title: title, url: url, text: text });\n ReactGA.event({ category: 'Share', action: `Shared page on mobile, ${props.title}` });\n } catch (error) {\n console.log('Error sharing', error);\n }\n }\n } else {\n setMenuOpen(!menuOpen);\n }\n }\n\n const handleMenuClick = (socialMedia: string, event?: React.MouseEvent<HTMLDivElement|HTMLButtonElement|MouseEvent>) => {\n if (event) preventDefault(event);\n ReactGA.event({ category: 'Share', action: `Shared page with ${socialMedia}, ${props.title}` });\n }\n\n const preventDefault = (event: React.MouseEvent<HTMLDivElement|HTMLButtonElement|MouseEvent>) => {\n event?.stopPropagation();\n event?.preventDefault();\n }\n\n return (\n <div className={`share`}>\n {(props.onInfoBox || isMobile) &&\n <div className={`${props.className}`} onClick={(event: React.MouseEvent<HTMLDivElement|MouseEvent>) => handleClick(event)}>\n <Link>\n {props.getLangString('global.share')}\n {props.showIcon &&\n <FontAwesomeIcon icon={faShare} className={'icon'} />\n }\n </Link>\n </div>\n }\n {menuOpen &&\n <div className={`share-menu ${props.onInfoBox ? 'infoBox' : ''} ${props.className}`}>\n <Grid container spacing={props.onInfoBox ? 1 : 0}>\n <Grid item xs={props.onInfoBox ? 3 : 1} className=\"button-social\" title={'Facebook'}>\n <FacebookShareButton url={url} quote={text} onClick={(event: React.MouseEvent<HTMLButtonElement|MouseEvent>) => handleMenuClick('Facebook', event)}>\n <FacebookIcon round size={25} />\n </FacebookShareButton>\n </Grid>\n <Grid item xs={props.onInfoBox ? 3 : 1} className=\"button-social\" title={'WhatsApp'}>\n <WhatsappShareButton url={url} title={text} onClick={(event: React.MouseEvent<HTMLButtonElement|MouseEvent>) => handleMenuClick('WhatsApp', event)}>\n <WhatsappIcon round size={25} />\n </WhatsappShareButton>\n </Grid>\n <Grid item xs={props.onInfoBox ? 3 : 1} className=\"button-social\" title={'E-post'} onClick={(event: React.MouseEvent<HTMLDivElement|MouseEvent>) => handleMenuClick('Email', event)}>\n <EmailShareButton url={url} subject={title} body={text} separator={'\\n'} beforeOnClick={() => handleMenuClick('Email')}>\n <FontAwesomeIcon icon={faEnvelope} className='menu-icon' size='lg' />\n </EmailShareButton>\n </Grid>\n <Grid item xs={props.onInfoBox ? 3 : 1} className=\"button-social\" title={'Kopiera'}>\n <Button onClick={(event: React.MouseEvent<HTMLButtonElement|MouseEvent>) => { navigator.clipboard.writeText(url); handleMenuClick('Copy link', event) }}>\n <FontAwesomeIcon icon={faLink} className=\"menu-icon\" size=\"lg\" />\n </Button>\n </Grid>\n </Grid >\n </div>\n }\n </div>\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { IMarker, IPolyline } from \"./Marker\";\n\nexport const GET_MARKERS_BEGIN = 'GET_MARKERS_BEGIN';\nexport const GET_MARKERS_SUCCESS = 'GET_MARKERS_SUCCESS';\nexport const GET_MARKERS_FAILURE = 'GET_MARKERS_FAILURE';\nexport const SIGNALR_CONNECTING = 'SIGNALR_CONNECTING';\nexport const SIGNALR_DISCONNECTED = 'SIGNALR_DISCONNECTED';\nexport const SIGNALR_CONNECTED = 'SIGNALR_CONNECTED';\nexport const SIGNALR_FAILURE = 'SIGNALR_FAILURE';\nexport const SIGNALR_MARKER_UPDATED = 'SIGNALR_MARKER_UPDATED';\nexport const UPDATE_POLYLINES = 'UPDATE_POLYLINES';\nexport const UPDATE_POLYLINES_FAILURE = 'UPDATE_POLYLINES_FAILURE';\nexport const CLEAN_POLYLINES = 'CLEAN_POLYLINES';\nexport const CLICKED_ON_POLYLINE = 'CLICKED_ON_POLYLINE';\nexport const SET_MARKER_DIALOG_OPEN = 'SET_MARKER_DIALOG_OPEN';\nexport const SET_MARKER_INDEX_DIALOG_OPEN = 'SET_MARKER_INDEX_DIALOG_OPEN';\nexport const SET_SHOW_ALL_LIVE_MARKERS = 'SET_SHOW_ALL_LIVE_MARKERS';\n\nexport interface IMarkerState {\n markersList: IMarker[],\n polylines: IPolyline[],\n loading: boolean,\n connected: boolean,\n clickedOnPolyline: boolean,\n markerWithDialogOpen?: string,\n markerIndexWithDialogOpen?: number,\n showAllLiveMarkers: boolean,\n error?: string\n}\n\ninterface GetMarkersBeginAction {\n type: typeof GET_MARKERS_BEGIN\n}\n\ninterface GetMarkersSuccessAction {\n type: typeof GET_MARKERS_SUCCESS,\n payload: IMarker[]\n}\n\ninterface GetMarkersFailure {\n type: typeof GET_MARKERS_FAILURE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any\n}\n\ninterface SignalRConnecting {\n type: typeof SIGNALR_CONNECTING\n}\n\ninterface SignalRConnected {\n type: typeof SIGNALR_CONNECTED\n}\n\ninterface SignalRDisconnected {\n type: typeof SIGNALR_DISCONNECTED\n}\n\ninterface SignalRFailure {\n type: typeof SIGNALR_FAILURE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any\n}\n\ninterface SignalRMarkerUpdated {\n type: typeof SIGNALR_MARKER_UPDATED,\n payload: IMarker[]\n}\n\ninterface UpdatePolylines {\n type: typeof UPDATE_POLYLINES,\n payload: any\n}\n\ninterface UpdatePolylinesFailure {\n type: typeof UPDATE_POLYLINES_FAILURE,\n payload: any\n}\n\ninterface CleanPolylines {\n type: typeof CLEAN_POLYLINES,\n payload: IPolyline\n}\n\ninterface ClickedOnPolyline {\n type: typeof CLICKED_ON_POLYLINE,\n payload: boolean\n}\n\ninterface SetMarkerDialogOpen {\n type: typeof SET_MARKER_DIALOG_OPEN,\n payload: string\n}\n\ninterface SetMarkerIndexDialogOpen {\n type: typeof SET_MARKER_INDEX_DIALOG_OPEN,\n payload: number\n}\n\ninterface setShowAllLiveMarkers {\n type: typeof SET_SHOW_ALL_LIVE_MARKERS,\n payload: boolean\n}\n\nexport type MarkerActionTypes = GetMarkersBeginAction |\n GetMarkersSuccessAction |\n GetMarkersFailure |\n SignalRConnected |\n SignalRConnecting |\n SignalRDisconnected |\n SignalRFailure |\n SignalRMarkerUpdated |\n UpdatePolylines |\n UpdatePolylinesFailure |\n CleanPolylines |\n ClickedOnPolyline |\n SetMarkerDialogOpen |\n SetMarkerIndexDialogOpen |\n setShowAllLiveMarkers;","import { IError } from './Error';\n\nexport const SET_ERROR = 'SET_ERROR';\nexport const SET_ERROR_FAILURE = 'SET_ERROR_FAILURE';\nexport const CLEAR_ERROR = 'CLEAR_ERROR';\nexport const CLEAR_ERROR_FAILURE = 'CLEAR_ERROR_FAILURE';\n\nexport interface IAppState {\n errorSummary: IErrorSummary;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error?: any;\n}\n\nexport interface IErrorSummary {\n isError: boolean;\n errorMessage: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n errors: any[];\n}\n\ninterface SetError {\n type: typeof SET_ERROR,\n payload: IError;\n}\n\ninterface SetErrorFailure {\n type: typeof SET_ERROR_FAILURE,\n payload: string\n}\n\ninterface ClearError {\n type: typeof CLEAR_ERROR,\n}\n\ninterface ClearErrorFailure {\n type: typeof CLEAR_ERROR_FAILURE,\n payload: string\n}\n\nexport type AppStateActionTypes = SetError | SetErrorFailure | ClearError | ClearErrorFailure;","import axios from 'axios';\nimport { API_ROOT, FUNCTIONS_ROOT } from '../../Constants';\nimport * as MarkerActions from './ActionTypes';\nimport * as AppStateActions from '../AppState/ActionTypes';\nimport { ThunkAction } from 'redux-thunk'\nimport { Action } from 'redux';\nimport { RootState } from '../RootReducer';\nimport { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';\nimport { IPolyline } from './Marker';\nimport { isNullEmptyOrUndefined } from '../../utils/helpers/ObjectHelper';\n\nexport const getMarkers = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({ type: AppStateActions.CLEAR_ERROR });\n dispatch({ type: MarkerActions.GET_MARKERS_BEGIN });\n\n const result = await axios.get(`${API_ROOT}/marker`);\n dispatch({\n type: MarkerActions.GET_MARKERS_SUCCESS,\n payload: result.data\n });\n } catch (error: any) {\n console.error(error);\n dispatch({ type: MarkerActions.GET_MARKERS_FAILURE, payload: error });\n if (error.message === \"Network Error\") {\n dispatch({ type: AppStateActions.SET_ERROR, payload: { errorMessage: 'Network Error', error: error } });\n } else {\n dispatch({ type: AppStateActions.SET_ERROR, payload: { errorMessage: 'Get markers failure', error: error } });\n }\n }\n}\n\nexport const getUpdatesForMarkers = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n const connection = new HubConnectionBuilder()\n .withUrl(FUNCTIONS_ROOT)\n .withAutomaticReconnect()\n .configureLogging(LogLevel.Information)\n .build();\n\n const newMessage = (message: string) => {\n const markers = JSON.parse(message);\n console.log('GOT NEW MESSASGE!!!', markers);\n\n dispatch({ type: MarkerActions.SIGNALR_MARKER_UPDATED, payload: markers });\n }\n\n // Events for the SignalR Connection\n connection.on('updatedMarker', newMessage);\n connection.onclose(() => console.log('disconnected'));\n connection.onreconnecting(() => {\n console.log('Reconnected to the hub, need to fetch all the markers from server to get changes from the unconnected period')\n dispatch(getMarkers());\n dispatch({ type: MarkerActions.SIGNALR_CONNECTING });\n })\n connection.onreconnected(() => {\n dispatch({ type: MarkerActions.SIGNALR_CONNECTED });\n });\n\n console.log('connecting...');\n dispatch({ type: MarkerActions.SIGNALR_CONNECTING });\n\n connection.start()\n .then(() => {\n console.log(\"connected..\");\n dispatch({ type: MarkerActions.SIGNALR_CONNECTED });\n })\n .catch((error) => {\n console.error(error);\n dispatch({ type: MarkerActions.SIGNALR_FAILURE, payload: error });\n });\n}\n\nexport const setMarkerDialogAsOpen = (id: string): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n dispatch({ type: MarkerActions.SET_MARKER_DIALOG_OPEN, payload: id });\n}\n\nexport const setMarkerIndexDialogAsOpen = (index: number): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n dispatch({ type: MarkerActions.SET_MARKER_INDEX_DIALOG_OPEN, payload: index });\n}\n\nexport const setShowAllLiveMarkers = (showAllLiveMarkers: boolean): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n dispatch({ type: MarkerActions.SET_SHOW_ALL_LIVE_MARKERS, payload: showAllLiveMarkers });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const updatePolylines= (polyline: IPolyline[]): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({\n type: MarkerActions.UPDATE_POLYLINES,\n payload: polyline\n });\n\n } catch (error) {\n console.error(error);\n dispatch({ type: MarkerActions.UPDATE_POLYLINES_FAILURE, payload: error })\n }\n}\n\nexport const cleanPolylines = (polylines: IPolyline[]): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n polylines.forEach((polyline: IPolyline) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n polyline.polylines.forEach((poly: any) => {\n if (!isNullEmptyOrUndefined(poly)) {\n poly.setMap(null);\n }\n })\n })\n \n dispatch({\n type: MarkerActions.CLEAN_POLYLINES,\n });\n\n } catch (error) {\n console.error(error);\n }\n}\n\nexport const setClickedOnPolyline = (clickedOnPolyline: boolean): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n dispatch({ type: MarkerActions.CLICKED_ON_POLYLINE, payload: clickedOnPolyline });\n}\n\n\n\n","import React from \"react\";\nimport { Helmet } from \"react-helmet\"\nimport { useTranslation } from 'react-i18next';\nimport { GetDefaultMapImage } from \"../../../utils/helpers/ImageHelper\";\n\ninterface ISEOProps {\n title?: string;\n description?: string;\n imageUrl?: string;\n}\n\nexport const SEO = (props: ISEOProps): JSX.Element => {\n const { t } = useTranslation('common');\n const pageTilge = t('global.pageTitle');\n const pageDescription = t('global.pageDescription');\n const title = props.title ?? pageTilge;\n const description = props.description ?? pageDescription;\n const imageUrl = props.imageUrl ?? GetDefaultMapImage();\n return (\n <Helmet>\n <meta name=\"title\" content={title} />\n <meta name=\"description\" content={description} />\n <meta name=\"image\" content={imageUrl} />\n\n {/* Open Graph - Facebook */}\n <meta property=\"og:type\" content=\"website\" />\n <meta property=\"og:url\" content=\"\" />\n <meta property=\"og:title\" content={title} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:image\" content={imageUrl} />\n\n {/* Twitter */}\n <meta property=\"twitter:card\" content=\"summary_large_image\" />\n <meta property=\"twitter:url\" content=\"\" />\n <meta property=\"twitter:title\" content={title} />\n <meta property=\"twitter:description\" content={description} />\n <meta property=\"twitter:image\" content={imageUrl} />\n </Helmet>\n )\n}\n\n","import React, { useEffect, useState, MouseEvent, KeyboardEvent, useRef } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Link, useHistory } from 'react-router-dom';\nimport { IInfoBox, IMarker, IProperty, MarkerSource } from '../../../store/Markers/Marker';\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n faArrowLeft,\n faArrowRight,\n faExternalLinkAlt,\n fas,\n IconName,\n} from '@fortawesome/free-solid-svg-icons';\nimport useDeviceDetect from '../../../utils/hooks/DeviceDetect';\nimport { Live } from '../../common/live/Live';\nimport { Button, Grid } from '@material-ui/core';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MarkerIsLiveHours } from '../../../store/Settings/Selector';\nimport { MarkerIsLive } from '../../../utils/helpers/MarkerHelper';\nimport { Share } from '../../common/share/Share';\nimport { setMarkerIndexDialogAsOpen } from '../../../store/Markers/Actions';\nimport { MarkerIndexDialogOpen } from '../../../store/Markers/Selector';\nimport { SEO } from '../../common/seo/SEO';\nimport { THEME_KEY } from '../../../Constants';\n\n// Add all icons to the library so you can use it in your page\n\nexport interface IInfoBoxProps {\n getLangString: (value: string) => string;\n marker: IMarker;\n setShowInfoBox: (value: boolean) => void;\n markerType?: string;\n}\n\nexport const InfoBox = (props: IInfoBoxProps): JSX.Element => {\n const indexOpen = useSelector(MarkerIndexDialogOpen);\n const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n const { isMobile } = useDeviceDetect();\n const [index, setIndex] = useState(indexOpen ?? 0);\n const [infoBoxInfo, setInfoBoxInfo] = useState<IInfoBox>();\n const [markerIsLive, setMarkerIsLive] = useState(false);\n const infoBoxRef = useRef<HTMLDivElement>(null);\n const history = useHistory();\n const dispatch = useDispatch();\n\n // Need to add all the icons to be able to load them dynamicly below.\n library.add(fas);\n\n const handleClick = (event: MouseEvent | KeyboardEvent | undefined) => {\n event?.stopPropagation();\n };\n\n useEffect(() => {\n const handleScroll = (event: any) => {\n event.stopPropagation();\n };\n\n const infoBox = infoBoxRef.current;\n if (infoBox) {\n infoBox?.addEventListener('wheel', handleScroll);\n }\n\n return () => {\n if (infoBox) {\n infoBox?.removeEventListener('wheel', handleScroll);\n }\n };\n }, []);\n\n useEffect(() => {\n if (indexOpen && indexOpen > 0 && props.marker.siblings && props.marker.siblings?.length >= indexOpen) {\n setSiblingAsInfoBox(indexOpen);\n } else {\n handleInfoBox();\n }\n setMarkerIsLive(MarkerIsLive(props.marker, markerIsLiveHours));\n }, [props.marker]);\n\n useEffect(() => {\n if (\n indexOpen &&\n indexOpen > 0 &&\n props.marker.siblings &&\n props.marker.siblings?.length >= indexOpen &&\n props.marker.siblings[indexOpen - 1].id !== infoBoxInfo?.id\n ) {\n setSiblingAsInfoBox(indexOpen);\n }\n }, [indexOpen]);\n\n const handleInfoBox = () => {\n setInfoBoxInfo({\n title: props.marker.title,\n id: props.marker.id,\n description: props.marker.description,\n address: props.marker.address,\n imageUrl: props.marker.imageUrl,\n link: props.marker.link,\n detailsUrl: props.marker.detailsUrl,\n bookingLink: props.marker.bookingLink,\n dynamicContent: props.marker.dynamicContent,\n subTypes: props.marker.subTypes,\n source: props.marker.source,\n });\n };\n\n const setSiblingAsInfoBox = (nextIndex: number) => {\n const siblingIndex = nextIndex - 1;\n if (props.marker.siblings && props.marker.siblings?.length >= siblingIndex) {\n setInfoBoxInfo({\n title: props.marker.siblings[siblingIndex].title,\n id: props.marker.siblings[siblingIndex].id,\n description: props.marker.siblings[siblingIndex].description,\n imageUrl: props.marker.siblings[siblingIndex].imageUrl,\n link: props.marker.siblings[siblingIndex].link,\n detailsUrl: props.marker.siblings[siblingIndex].detailsUrl,\n address: props.marker.siblings[siblingIndex].address,\n dynamicContent: props.marker.siblings[siblingIndex].dynamicContent,\n bookingLink: props.marker.siblings[siblingIndex].bookingLink,\n source: props.marker.siblings[siblingIndex].source,\n subTypes: props.marker.siblings[siblingIndex].subTypes\n });\n }\n };\n\n const handleChangeInfoBoxInformation = (isNext: boolean) => {\n if (props.marker.siblings && props.marker.siblings.length > 0) {\n const nextIndex = isNext ? index + 1 : index - 1;\n if (nextIndex <= props.marker.siblings.length && nextIndex >= 0) {\n if (nextIndex === 0) {\n handleInfoBox();\n } else {\n setSiblingAsInfoBox(nextIndex);\n }\n props.setShowInfoBox(true);\n setIndex(nextIndex);\n\n const params = new URLSearchParams(history.location.search);\n params.set('index', nextIndex.toString());\n history.push({ search: params.toString() });\n dispatch(setMarkerIndexDialogAsOpen(nextIndex));\n }\n }\n };\n\n const getMarkerSourceLabel = (source: MarkerSource): string => {\n switch (source) {\n case MarkerSource.Naturkartan:\n return 'Naturkartan';\n case MarkerSource.Iot: \n case MarkerSource.GIS:\n return 'Ronneby Kommun';\n case MarkerSource.Event:\n case MarkerSource.CityBreak:\n if (THEME_KEY === 'olofstrom') {\n return 'Visit Olofström';\n } else {\n return 'Visit Ronneby';\n }\n case MarkerSource.Trafikverket:\n return 'Trafikverket';\n case MarkerSource.DataScraping:\n return 'Centrumbiografen';\n case MarkerSource.SvenskaLag:\n return 'Svenska Lag';\n case MarkerSource.Hjartstartarregistret:\n return 'Hjärtstartarregistret';\n default:\n return '';\n }\n };\n\n return (\n <div\n tabIndex={0}\n className={`info-box-container ${isMobile ? 'bottom' : 'right'} ${props.markerType ? props.markerType : ''} `}\n onClick={event => handleClick(event)}\n >\n <div className='info-box'> \n {infoBoxInfo && (\n <SEO\n title={`${infoBoxInfo?.title} | ${props.getLangString('global.pageTitle')}`}\n description={infoBoxInfo?.description}\n imageUrl={infoBoxInfo?.imageUrl}\n />\n )}\n\n {markerIsLive && <Live getLangString={props.getLangString} />}\n\n <div id=\"scroll-container\" ref={infoBoxRef}>\n <div className=\"scroll-box\">\n {infoBoxInfo && infoBoxInfo.imageUrl != null && (\n <div className=\"image-container\">\n <img src={infoBoxInfo.imageUrl} alt={infoBoxInfo.title} className=\"image\" />\n </div>\n )}\n\n {infoBoxInfo && infoBoxInfo.title && <div className=\"title\" lang=\"sv\">{infoBoxInfo.title}</div>}\n {infoBoxInfo && infoBoxInfo.subTypes && infoBoxInfo.subTypes.length > 0 && (\n <React.Fragment>\n {infoBoxInfo.subTypes.map((subtype, index) => (\n <React.Fragment key={index}>\n <div className=\"subTypes\">{subtype.title}</div>\n </React.Fragment>\n ))}\n </React.Fragment>\n )}\n {infoBoxInfo && infoBoxInfo.address && (\n <div className=\"address\">\n {infoBoxInfo.address.street}\n {infoBoxInfo.address.street && (infoBoxInfo.address.zip || infoBoxInfo.address.city) ? (\n <span>,</span>\n ) : (\n ''\n )}{' '}\n {infoBoxInfo.address.zip} {infoBoxInfo.address.city}\n </div>\n )}\n {infoBoxInfo && infoBoxInfo.description && (\n <div className={`description`}>\n {props.marker.source === MarkerSource.Naturkartan ||\n props.marker.source === MarkerSource.Hjartstartarregistret ||\n props.marker.source === MarkerSource.Iot ||\n props.marker.source === MarkerSource.CityBreak ||\n props.marker.source === MarkerSource.Event ? (\n <ReactMarkdown rehypePlugins={[rehypeRaw]}>{infoBoxInfo.description}</ReactMarkdown>\n ) : (\n <React.Fragment>{infoBoxInfo.description}</React.Fragment>\n )}\n </div>\n )}\n </div>\n </div>\n {infoBoxInfo && infoBoxInfo.source in MarkerSource && (\n <Grid container>\n <Grid item xs={12}>\n <div className=\"source\">\n <span>{props.getLangString('map.infoBox.source') + getMarkerSourceLabel(infoBoxInfo.source)}</span>\n </div>\n </Grid>\n </Grid>\n )}\n {infoBoxInfo &&\n infoBoxInfo.dynamicContent &&\n ((markerIsLive && props.marker.source === MarkerSource.Iot) || props.marker.source !== MarkerSource.Iot) &&\n infoBoxInfo.dynamicContent.properties.length > 0 && (\n <Grid container className=\"icon-container\">\n {infoBoxInfo.dynamicContent.properties.map((prop: IProperty, index: number) => (\n <React.Fragment key={index}>\n <Grid item xs={1} className=\"icon-col\">\n <FontAwesomeIcon\n icon={['fas', prop.icon as IconName]}\n className={`icon ${prop.class}`}\n style={{ transform: `rotate(${prop.value}deg)` }}\n />\n </Grid>\n <Grid item xs={11} className=\"\">\n {prop.link != null ? (\n <Link className={`icon-label`} to={{ pathname: prop.link }} target=\"_blank\">\n {' '}\n {prop.label}{' '}\n </Link>\n ) : (\n <div className=\"icon-label\">{prop.label}</div>\n )}\n </Grid>\n </React.Fragment>\n ))}\n </Grid>\n )}\n {infoBoxInfo && infoBoxInfo.bookingLink && (\n <Grid container>\n <Grid item xs={12}>\n <Button href={infoBoxInfo.bookingLink} target=\"_blank\" className=\"booking-link\">\n <span>{props.getLangString('map.bookTicket')}</span>\n </Button>\n </Grid>\n </Grid>\n )}\n <Grid container>\n <Grid item xs={6}>\n {infoBoxInfo && infoBoxInfo.detailsUrl && (\n <div className=\"details-url\">\n <Link to={{ pathname: infoBoxInfo.detailsUrl }} target=\"_blank\">\n {props.getLangString('map.readMore')}\n </Link>\n <FontAwesomeIcon icon={faExternalLinkAlt} className=\"icon\" />\n </div>\n )}\n {infoBoxInfo && (!infoBoxInfo.detailsUrl || infoBoxInfo.detailsUrl.length === 0) && infoBoxInfo.link && (\n <div className=\"details-url\">\n <Link to={{ pathname: infoBoxInfo.link }} target=\"_blank\">\n {props.getLangString('map.link')}\n </Link>\n <FontAwesomeIcon icon={faExternalLinkAlt} className=\"icon\" />\n </div>\n )}\n </Grid>\n <Grid item xs={6} className=\"share-url\">\n {infoBoxInfo && (\n <Share title={infoBoxInfo.title} getLangString={props.getLangString} onInfoBox={true} showIcon={true} />\n )}\n </Grid>\n </Grid>\n\n {props.marker.siblings && props.marker.siblings.length > 0 && (\n <Grid container className=\"multiple-events\">\n <Grid item xs={12} className=\"hr-grid-item\">\n <div className=\"horizontalRow\">\n <hr></hr>\n </div>\n </Grid>\n <Grid item xs={3}>\n <Button\n className=\"button left\"\n disabled={index <= 0 ? true : false}\n onClick={() => handleChangeInfoBoxInformation(false)}\n >\n <FontAwesomeIcon icon={faArrowLeft} className=\"icon\" size=\"lg\" />\n </Button>\n </Grid>\n <Grid item xs={6} className=\"info-text\">\n <span>{`${props.getLangString('map.show')} ${index + 1} ${props.getLangString('map.of')} ${\n props.marker.siblings.length + 1\n } ${props.getLangString('filter.pins')}`}</span>\n </Grid>\n <Grid item xs={3}>\n <Button\n className=\"button right\"\n disabled={index >= props.marker.siblings.length ? true : false}\n onClick={() => handleChangeInfoBoxInformation(true)}\n >\n <FontAwesomeIcon icon={faArrowRight} className=\"icon\" size=\"lg\" />\n </Button>\n </Grid>\n </Grid>\n )}\n </div>\n </div>\n );\n};\n","export default __webpack_public_path__ + \"static/media/Train.916cc0d0.svg\";","export default __webpack_public_path__ + \"static/media/Astrid.44c487a5.svg\";","import { IVehicle } from \"../store/Markers/Marker\";\nimport trainImage from '../images/Train.svg'\nimport astridImage from '../images/Astrid.svg';\nimport busImage from '../images/Bus.svg';\nimport fyrskarImage from '../images/Fyrskar.svg';\n\nexport const vehicles: IVehicle[] = [\n {\n name: 'train',\n image: trainImage,\n type: 'train',\n color: 'red'\n },\n {\n name: 'astrid',\n image: astridImage,\n type: 'astrid',\n color: 'dark-blue'\n },\n {\n name: 'karoline',\n image: astridImage,\n type: 'karoline',\n color: 'dark-blue'\n },\n {\n name: 'bus',\n image: busImage,\n type: 'bus',\n color: 'grey'\n },\n {\n name: 'fyrskar',\n image: fyrskarImage,\n type: 'fyrskar',\n color: 'dark-blue'\n }\n]","export default __webpack_public_path__ + \"static/media/Bus.77d97fdd.svg\";","export default __webpack_public_path__ + \"static/media/Fyrskar.782d89fd.svg\";","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { setClickedOnPolyline, setMarkerDialogAsOpen, updatePolylines } from \"../../../store/Markers/Actions\";\nimport { IPolyline, IVertices } from \"../../../store/Markers/Marker\";\nimport { Polylines } from \"../../../store/Markers/Selector\";\nimport { isNullEmptyOrUndefined } from \"../../../utils/helpers/ObjectHelper\";\nimport { vehicles } from \"../../../constants/VehicleConstants\";\ninterface IPolylineProps {\n listOfVertices: IVertices[][];\n map: any;\n maps: any;\n id: string;\n color: string;\n}\n\nexport const Polyline = (props: IPolylineProps): JSX.Element => {\n const { listOfVertices, map, maps, id, color } = props;\n const polylines = useSelector(Polylines);\n \n const dispatch = useDispatch();\n const history = useHistory();\n\n const handleClickOnPolyline = () => {\n if (vehicles.some(v => id.includes(v.name))) {\n const params = new URLSearchParams();\n dispatch(setClickedOnPolyline(true));\n dispatch(setMarkerDialogAsOpen(id));\n params.append('pin', id);\n history.push({ search: params.toString() })\n\n } else {\n dispatch(setClickedOnPolyline(false));\n }\n };\n\n const handleClickOnMap = () => {\n dispatch(setClickedOnPolyline(false));\n }\n\n useEffect(() => {\n if (map && maps && id && listOfVertices && color && polylines) {\n if (!polylines.some(polyline => polyline.id === id) && !isNullEmptyOrUndefined(id)) {\n const newPolyline: IPolyline = {\n id: id,\n polylines: [],\n color: color\n };\n listOfVertices.forEach(vertice => {\n const geodesicPolyline = addNewPolyline(vertice);\n if (!isNullEmptyOrUndefined(geodesicPolyline)) {\n newPolyline.polylines.push(geodesicPolyline);\n }\n });\n\n polylines.push(newPolyline);\n dispatch(updatePolylines(polylines));\n\n }\n }\n }, [id, listOfVertices]);\n\n const addNewPolyline = (vertices: IVertices[]): any[] => {\n let geodesicPolyline = maps.Polyline;\n if (vertices.length > 0) {\n const lineSymbol = {\n path: \"M 0,0 0,1\",\n strokeOpacity: 1,\n scale: 3,\n };\n geodesicPolyline = new maps.Polyline({\n key: id,\n path: vertices,\n geodesic: true,\n strokeColor: props.color,\n strokeOpacity: 0,\n strokeWeight: 4,\n icons: [\n {\n icon: lineSymbol,\n offset: \"0\",\n repeat: \"10px\",\n },\n ],\n });\n\n geodesicPolyline.setMap(map);\n geodesicPolyline.addListener(\"click\", handleClickOnPolyline);\n map.addListener(\"click\", handleClickOnMap);\n }\n\n return geodesicPolyline;\n }\n\n return (\n <React.Fragment />\n );\n};\n\n","import React, { useEffect, useState } from \"react\";\nimport { IMarker, IVehicle } from \"../../../../store/Markers/Marker\";\nimport '../ThemeMarker.scss';\nimport { MarkerIsLiveHours } from \"../../../../store/Settings/Selector\";\nimport { useSelector } from \"react-redux\";\nimport { MarkerIsLive } from \"../../../../utils/helpers/MarkerHelper\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { vehicles } from \"../../../../constants/VehicleConstants\";\n\ninterface IVehicleProps {\n active: boolean;\n getLangString: (value: string) => string;\n marker: IMarker;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClick: (e?: any) => void;\n typeOfVehicle: string;\n color: string;\n}\n\n\nexport const Vehicle = (props: IVehicleProps): JSX.Element => {\n\n const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n const [markerIsLive, setMarkerIsLive] = useState<boolean>(false);\n const [vehicle, setVehicle] = useState<IVehicle | null>(null);\n const [lng, setLng] = useState<number>(0);\n const [movingEast, setMovingEast] = useState<boolean>(false);\n\n useEffect(() => {\n setVehicle(vehicles.find((vehicle) => vehicle.type === props.typeOfVehicle) || null);\n }, [props.typeOfVehicle]);\n\n useEffect(() => {\n setMarkerIsLive(MarkerIsLive(props.marker, markerIsLiveHours, false));\n }, [props.marker]);\n\n useEffect(() => {\n if (props.marker.lng !== lng) {\n if (props.marker.lng && (props.marker.lng > lng)) {\n setMovingEast(true);\n } else if (props.marker.lng && (props.marker.lng < lng)) {\n setMovingEast(false);\n }\n\n setLng(props.marker.lng ?? 0);\n }\n }, [props.marker.lng]);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleClickOnVehicle = (e: any) => {\n if (e?.key === 'Enter') {\n props.onClick(e);\n }\n }\n\n return (\n <React.Fragment>\n <div\n tabIndex={0}\n className={'marker vehicle ' + (vehicle?.color ?? '') + (props.active ? ' active' : '') + (markerIsLive ? ' live' : '')}\n onClick={(event) => props.onClick(event)}\n onKeyDown={handleClickOnVehicle}\n >\n <div className=\"icon-container\">\n <img\n src={vehicle?.image}\n className={`img-vehicle ${movingEast ? '' : 'left'}`}\n onClick={(event) => props.onClick(event)}\n />\n </div>\n {markerIsLive &&\n <div className=\"live-pin\" role=\"complementary\">\n <FontAwesomeIcon icon={faCircle} className=\"circle\" />\n </div>\n }\n </div>\n </React.Fragment>\n );\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useState, MouseEvent, KeyboardEvent } from 'react';\nimport './ThemeMarker.scss';\nimport { Dot } from './Dot';\nimport { Pin } from './Pin';\nimport { IMarker, IMarkerShape, IPolyline, IVertices } from '../../../store/Markers/Marker';\nimport { InfoBox } from './InfoBox';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MarkerDialogOpen, MarkerIndexDialogOpen, Polylines } from '../../../store/Markers/Selector';\nimport { setMarkerDialogAsOpen, setMarkerIndexDialogAsOpen, updatePolylines } from '../../../store/Markers/Actions';\nimport ReactGA from 'react-ga4';\nimport { Hidden } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport { Polyline } from './Polyline';\nimport { isNullEmptyOrUndefined } from '../../../utils/helpers/ObjectHelper';\nimport { Vehicle } from './Vehicle/Vehicle';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\nimport { vehicles } from '../../../constants/VehicleConstants';\n\nexport interface IMarkerProps {\n getLangString: (value: string) => string;\n marker: IMarker;\n isVehicle: boolean;\n zoomLevel: number;\n lat?: number;\n lng?: number;\n map: any;\n maps: any;\n}\n\nexport const Marker = (props: IMarkerProps): JSX.Element => {\n const [showInfoBox, setShowInfoBox] = useState<boolean>(false);\n const [polylinePath, setPolylinePath] = useState<IVertices[][]>([]);\n const [polylineId, setPolylineId] = useState<string>('');\n\n const dispatch = useDispatch();\n const markerDialogOpen = useSelector(MarkerDialogOpen);\n const markerIndexOpen = useSelector(MarkerIndexDialogOpen);\n const selectedFilters = useSelector(SelectedFilters);\n const polylines = useSelector(Polylines);\n const history = useHistory();\n\n useEffect(() => {\n if (markerDialogOpen !== props.marker.id) {\n setShowInfoBox(false);\n } else {\n setShowInfoBox(true);\n handleSiblings(markerIndexOpen ?? 0);\n }\n }, [markerDialogOpen, props.marker.id, markerIndexOpen]);\n\n\n const handlePolylines = (removeVehicles: boolean) => {\n if (!isNullEmptyOrUndefined(polylines) && polylines.length > 0) {\n const polylinesToClean = removeVehicles ? polylines.filter(poly => vehicles.some(v => poly.id.includes(v.name))) : polylines.filter(poly => !vehicles.some(v => poly.id.includes(v.name)));\n if (!isNullEmptyOrUndefined(polylinesToClean) && polylinesToClean.length > 0) {\n polylinesToClean.forEach((polyline: IPolyline) => {\n polyline.polylines.forEach((poly: any) => {\n if (!isNullEmptyOrUndefined(poly)) {\n poly.setMap(null);\n }\n })\n })\n const newPolylines = polylines.filter(polyline => !polylinesToClean.some(poly => poly.id === polyline.id));\n dispatch(updatePolylines(newPolylines));\n }\n }\n };\n\n useEffect(() => {\n if (selectedFilters.some(filter => filter.title === 'Turer')) {\n if (props.marker.icon !== null) {\n handlePath(props.marker.markerShapes, 0);\n }\n } else {\n handlePolylines(true);\n }\n }, [selectedFilters]);\n\n useEffect(() => {\n const unlisten = history.listen((location) => {\n const pinId = new URLSearchParams(location.search).get('pin');\n if (pinId) {\n dispatch(setMarkerDialogAsOpen(pinId));\n } else {\n dispatch(setMarkerDialogAsOpen('close'));\n }\n });\n\n return () => {\n unlisten();\n };\n }, [history]);\n\n const handleClickOnMarker = (event: MouseEvent | KeyboardEvent | undefined) => {\n const params = new URLSearchParams();\n if (showInfoBox) {\n handlePolylines(false);\n dispatch(setMarkerDialogAsOpen('close'));\n dispatch(setMarkerIndexDialogAsOpen(0));\n } else {\n handlePolylines(false);\n dispatch(setMarkerDialogAsOpen(props.marker.id));\n dispatch(setMarkerIndexDialogAsOpen(0));\n params.append('pin', props.marker.id);\n }\n history.push({ search: params.toString() });\n event?.stopPropagation();\n event?.preventDefault();\n ReactGA.event({ category: 'Marker', action: `Clicked on marker: ${props.marker.title}` });\n };\n\n const handlePath = (markerShapes: IMarkerShape[], siblingIndex: number) => {\n setPolylinePath([]);\n const newPolylinePath: IVertices[][] = [];\n if (!isNullEmptyOrUndefined(markerShapes)) {\n markerShapes.forEach((markerShape: IMarkerShape) => {\n if (!isNullEmptyOrUndefined(markerShape.vertices) && markerShape.vertices.length > 0) {\n newPolylinePath.push(markerShape.vertices);\n }\n });\n setPolylinePath(newPolylinePath);\n setPolylineId(\n `${props.marker.types.some(t => t.title === 'Turer') ? props.marker.icon + '-' : ''}${\n props.marker.id\n }-${siblingIndex}`\n );\n } else {\n setPolylinePath([]);\n }\n };\n\n const handleSiblings = (markerIndex: number) => {\n const siblingIndex = markerIndex - 1;\n handlePolylines(false);\n if (siblingIndex === -1) {\n handlePath(props.marker.markerShapes, 0);\n } else if (\n props.marker.siblings &&\n props.marker.siblings?.length > 0 &&\n props.marker.siblings[siblingIndex].markerShapes &&\n props.marker.siblings[siblingIndex].markerShapes.length > 0\n ) {\n handlePath(props.marker.siblings[siblingIndex].markerShapes, siblingIndex);\n } else {\n handlePath([], 0);\n }\n };\n\n const getColorForMarkerShape = () => {\n const type =\n selectedFilters && props.marker && props.marker.types.length > 0\n ? props.marker.types.find(t => selectedFilters.find(f => t.title === f.title))\n : !selectedFilters && props.marker && props.marker.types.length > 0\n ? props.marker.types[0]\n : undefined;\n\n const vehicle = vehicles.find(v => v.type === props.marker.icon);\n const color = type?.title !== \"Turer\" ? type?.class : vehicle ? vehicle.color : undefined;\n\n switch (color) {\n case 'dark-blue':\n return '#035e8e';\n case 'light-blue':\n return '#037dba';\n case 'light-blue-2':\n return '#00AAFF';\n case 'dark-green-2':\n return '#017033';\n case 'grey':\n return '#808080';\n case 'brown':\n return '#B59243';\n case 'dark-brown':\n return '#6d5827';\n case 'red':\n return '#D3454E'; \n default:\n return '#035e8e';\n }\n };\n\n const getColorForTourMarker = () => {\n const type = selectedFilters && props.marker && props.marker.types.length > 0 ?\n props.marker.types.find(t => selectedFilters.find(f => t.title === f.title)) :\n !selectedFilters && props.marker && props.marker.types.length > 0 ?\n props.marker.types[0] :\n undefined;\n \n const vehicle = vehicles.find(v => v.type === props.marker.icon);\n const color = type?.title !== \"Turer\" ? type?.class : vehicle ? vehicle.color : undefined;\n \n return color;\n };\n\n const markerType = props.zoomLevel >= 7 && props.zoomLevel < 12 ? 'dot-type' : \n props.zoomLevel >= 12 && props.isVehicle ? 'vehicle-type' : \n props.zoomLevel >= 12 ? 'pin-type' : '';\n\n return (\n <React.Fragment>\n <Hidden smDown>\n {showInfoBox && (\n <React.Fragment>\n <InfoBox\n getLangString={props.getLangString}\n marker={props.marker}\n markerType={markerType}\n setShowInfoBox={setShowInfoBox}\n />\n {polylinePath && polylinePath.length > 0 && !props.isVehicle ? (\n <Polyline\n id={polylineId}\n color={getColorForMarkerShape()}\n listOfVertices={polylinePath}\n map={props.map}\n maps={props.maps}\n />\n ) : (\n <React.Fragment />\n )}\n </React.Fragment>\n )}\n </Hidden>\n {props.zoomLevel >= 12 &&\n <React.Fragment>\n {props.isVehicle ?\n <React.Fragment>\n <Vehicle\n active={showInfoBox}\n getLangString={props.getLangString}\n marker={props.marker}\n onClick={(event) => { handleClickOnMarker(event); return false; }}\n typeOfVehicle={props.marker.icon ? props.marker.icon : ''}\n color={getColorForTourMarker() ?? ''}\n />\n {polylinePath && polylinePath.length > 0 &&\n <Polyline\n id={polylineId}\n color={getColorForMarkerShape()}\n listOfVertices={polylinePath}\n map={props.map}\n maps={props.maps}\n />\n }\n </React.Fragment>\n :\n <Pin getLangString={props.getLangString} marker={props.marker} active={showInfoBox} onClick={(event) => { handleClickOnMarker(event); return false; }} />\n }\n </React.Fragment>\n }\n {(props.zoomLevel >= 7 && props.zoomLevel < 12) &&\n <Dot getLangString={props.getLangString} \n marker={props.marker} \n active={showInfoBox} \n onClick={(event) => handleClickOnMarker(event)} \n color={getColorForTourMarker()} />\n }\n </React.Fragment>\n );\n};\n","import React from 'react'\nimport './ThemeLoader.scss'\n\nexport interface ILoaderProps{\n getLangString: (value: string) => string;\n}\n\nexport const Loader = (props: ILoaderProps) : JSX.Element => {\n return (\n <div className=\"loader-large\" aria-label={props.getLangString('global.loading')}>\n <div className=\"sk-fading-circle\">\n <div className=\"sk-circle1 sk-circle\"></div>\n <div className=\"sk-circle2 sk-circle\"></div>\n <div className=\"sk-circle3 sk-circle\"></div>\n <div className=\"sk-circle4 sk-circle\"></div>\n <div className=\"sk-circle5 sk-circle\"></div>\n <div className=\"sk-circle6 sk-circle\"></div>\n <div className=\"sk-circle7 sk-circle\"></div>\n <div className=\"sk-circle8 sk-circle\"></div>\n <div className=\"sk-circle9 sk-circle\"></div>\n <div className=\"sk-circle10 sk-circle\"></div>\n <div className=\"sk-circle11 sk-circle\"></div>\n <div className=\"sk-circle12 sk-circle\"></div>\n </div>\n </div>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport './ThemeMarker.scss';\nimport { IMarker, IMarkerShape, IPolyline, IVertices, MarkerSource } from '../../../store/Markers/Marker';\nimport { InfoBox } from './InfoBox';\nimport { MarkerDialogOpen, MarkerIndexDialogOpen, Polylines } from '../../../store/Markers/Selector';\nimport { isNullEmptyOrUndefined } from \"../../../utils/helpers/ObjectHelper\";\nimport { Polyline } from \"./Polyline\";\nimport { updatePolylines } from \"../../../store/Markers/Actions\";\nimport { SelectedFilters } from \"../../../store/Filters/Selector\";\nimport { vehicles } from \"../../../constants/VehicleConstants\";\n\nexport interface IMobileInfoBoxProps {\n getLangString: (value: string) => string;\n markers: IMarker[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n map: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n maps: any;\n}\n\nconst getEmptyMarker = (): IMarker => {\n return ({\n title: '',\n id: '',\n description: '',\n link: '',\n types: [],\n subTypes: [],\n source: MarkerSource.Other,\n markerShapes: [],\n deleted: false,\n published: true,\n detailsUrl: '',\n imageUrl: '',\n modified: new Date()\n });\n}\n\nexport const MobileInfoBox = (props: IMobileInfoBoxProps): JSX.Element => {\n\n const [openMarker, setOpenMarker] = useState<IMarker>(getEmptyMarker());\n const [polylinePath, setPolylinePath] = useState<IVertices[][]>([]);\n const [showInfoBox, setShowInfoBox] = useState(false);\n\n const markerDialogOpen = useSelector(MarkerDialogOpen);\n const indexOpen = useSelector(MarkerIndexDialogOpen);\n const polylines = useSelector(Polylines);\n const selectedFilters = useSelector(SelectedFilters);\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n const marker = props.markers.find(marker => marker.id === markerDialogOpen);\n if (marker) {\n handlePath(marker.markerShapes);\n setOpenMarker(marker);\n setShowInfoBox(true);\n } else {\n handlePolylines();\n setOpenMarker(getEmptyMarker());\n setShowInfoBox(false);\n }\n }, [markerDialogOpen, props.markers]);\n\n useEffect(() => {\n const marker = props.markers.find(marker => marker.id === markerDialogOpen);\n if (indexOpen && indexOpen > 0 && marker?.siblings && marker.siblings?.length >= indexOpen) {\n const siblingIndex = indexOpen - 1;\n const markerShapes = marker.siblings[siblingIndex].markerShapes;\n handlePath(markerShapes);\n } else if (marker) {\n handlePath(marker.markerShapes);\n }\n }, [indexOpen]);\n\n const handlePath = (markerShapes: IMarkerShape[]) => {\n setPolylinePath([]);\n const newPolylinePath: IVertices[][] = [];\n if (!isNullEmptyOrUndefined(markerShapes)) {\n markerShapes.forEach((markerShape: IMarkerShape) => {\n if (!isNullEmptyOrUndefined(markerShape.vertices) && markerShape.vertices.length > 0) {\n newPolylinePath.push(markerShape.vertices)\n }\n });\n setPolylinePath(newPolylinePath);\n } else {\n setPolylinePath([]);\n }\n };\n\n const handlePolylines = () => {\n if (!isNullEmptyOrUndefined(polylines) && polylines.length > 0) {\n const polylinesToClean = polylines.filter(poly => !vehicles.some(v => poly.id.includes(v.name)));\n if (!isNullEmptyOrUndefined(polylinesToClean) && polylinesToClean.length > 0) {\n polylinesToClean.forEach((polyline: IPolyline) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n polyline.polylines.forEach((poly: any) => {\n if (!isNullEmptyOrUndefined(poly)) {\n poly.setMap(null);\n }\n })\n })\n const newPolylines = polylines.filter(polyline => !polylinesToClean.some(poly => poly.id === polyline.id));\n dispatch(updatePolylines(newPolylines));\n }\n }\n }\n\n const getColorForMarkerShape = (marker: IMarker) => {\n const type = selectedFilters && marker && marker.types.length > 0 ?\n marker.types.find(t => selectedFilters.find(f => t.title === f.title)) :\n !selectedFilters && marker && marker.types.length > 0 ?\n marker.types[0] :\n undefined;\n\n const vehicle = vehicles.find(v => v.type === marker.icon);\n const color = type?.title !== \"Turer\" ? type?.class : vehicle ? vehicle.color : undefined;\n\n switch (color) {\n case 'dark-blue':\n return '#035e8e';\n case 'light-blue':\n return '#037dba';\n case 'light-blue-2':\n return '#00AAFF';\n case 'dark-green-2':\n return '#017033';\n case 'grey':\n return '#808080';\n case 'brown':\n return '#B59243';\n case 'dark-brown':\n return '#6d5827';\n case 'red':\n return '#D3454E';\n default:\n return '#035e8e';\n }\n };\n\n return (\n <React.Fragment>\n {showInfoBox &&\n <React.Fragment>\n <InfoBox getLangString={props.getLangString} marker={openMarker} markerType={'mobile'} setShowInfoBox={setShowInfoBox} />\n {polylinePath && polylinePath.length > 0 ?\n <Polyline\n id={openMarker.id}\n listOfVertices={polylinePath}\n map={props.map}\n maps={props.maps}\n color={getColorForMarkerShape(openMarker)}\n />\n :\n <React.Fragment />\n }\n </React.Fragment>\n }\n </React.Fragment>\n )\n}\n","import { IFilter } from \"./Filter\";\n\nexport const GET_FILTERS_BEGIN = 'GET_FILTERS_BEGIN';\nexport const GET_FILTERS_SUCCESS = 'GET_FILTERS_SUCCESS';\nexport const GET_FILTERS_FAILURE = 'GET_FILTERS_FAILURE';\nexport const UPDATE_SELECTED_FILTERS = 'UPDATE_SELECTED_FILTERS';\nexport const UPDATE_SELECTED_FILTERS_FAILURE = 'UPDATE_SELECTED_FILTERS_FAILURE';\nexport const UPDATE_SELECTED_SUBFILTERS = 'UPDATE_SELECTED_SUBFILTERS';\nexport const UPDATE_SELECTED_SUBFILTERS_FAILURE = 'UPDATE_SELECTED_SUBFILTERS_FAILURE';\nexport const CLEAN_SELECTED_FILTERS = 'CLEAN_SELECTED_FILTERS';\nexport const CLEAN_SELECTED_SUBFILTERS = 'CLEAN_SELECTED_SUBFILTERS';\nexport const SET_SELECTED_FILTER_TITLE = 'SET_SELECTED_FILTER_TITLE';\n\nexport interface IFilterState {\n filterList: IFilter[],\n loading: boolean,\n selectedFilters: IFilter[],\n error?: string,\n selectedFilterTitle?: string,\n}\n\ninterface GetFiltersBeginAction {\n type: typeof GET_FILTERS_BEGIN\n}\n\ninterface GetFiltersSuccessAction {\n type: typeof GET_FILTERS_SUCCESS,\n payload: IFilter[]\n}\n\ninterface GetFiltersFailure {\n type: typeof GET_FILTERS_FAILURE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any\n}\n\ninterface UpdateSelectedFilters {\n type: typeof UPDATE_SELECTED_FILTERS,\n payload: IFilter[]\n}\n\ninterface UpdateSelectedFiltersFailure {\n type: typeof UPDATE_SELECTED_FILTERS_FAILURE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any\n}\n\ninterface SetSelectedFilterTitle {\n type: typeof SET_SELECTED_FILTER_TITLE,\n payload: string\n}\n\ninterface CleanSelectedFilters {\n type: typeof CLEAN_SELECTED_FILTERS,\n payload: IFilter[]\n}\n\nexport type FilterActionTypes = GetFiltersBeginAction |\n GetFiltersSuccessAction |\n GetFiltersFailure |\n UpdateSelectedFilters | \n UpdateSelectedFiltersFailure |\n CleanSelectedFilters |\n SetSelectedFilterTitle;\n\n","import axios from 'axios';\nimport { API_ROOT } from '../../Constants';\nimport { IFilter } from \"./Filter\";\nimport { ThunkAction } from 'redux-thunk'\nimport { RootState } from '../RootReducer';\nimport { Action } from 'redux';\nimport * as FilterActions from './ActionTypes'\n\n// Fetch all filters from backend \nexport const getFilters = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({ type: FilterActions.GET_FILTERS_BEGIN });\n\n const result = await axios.get(`${API_ROOT}/filter`);\n dispatch({\n type: FilterActions.GET_FILTERS_SUCCESS,\n payload: result.data\n });\n } catch (error) {\n console.error(error);\n dispatch({ type: FilterActions.GET_FILTERS_FAILURE, payload: error })\n }\n} \n\nexport const updateSelectedFilters = (selectedFilters: IFilter[]): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({ \n type: FilterActions.UPDATE_SELECTED_FILTERS,\n payload: selectedFilters\n });\n\n } catch (error) {\n console.error(error);\n dispatch({ type: FilterActions.UPDATE_SELECTED_FILTERS_FAILURE, payload: error })\n }\n}\n\nexport const cleanSelectedFilters = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({ \n type: FilterActions.CLEAN_SELECTED_FILTERS,\n });\n\n } catch (error) {\n console.error(error);\n }\n}\n\nexport const setSelectedFilterTitle = (title: string): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n dispatch({ type: FilterActions.SET_SELECTED_FILTER_TITLE, payload: title });\n}\n\n\n\n\n\n","import React, { useCallback, useEffect, useState } from 'react'\nimport GoogleMap, { Bounds } from 'google-map-react';\nimport './ThemeGoogleMaps.scss';\nimport CustomOption from './CustomStyles'\n\nimport { ZoomControl } from '../controls/ZoomControl';\nimport { PositionControl } from '../controls/PositionControl'\nimport { Marker } from '../marker/Marker';\nimport { ClickedOnPolyline, MarkerDialogOpen, Markers, Polylines, ShowAllLiveMarkers } from '../../../store/Markers/Selector';\nimport { setMarkerDialogAsOpen, getMarkers, getUpdatesForMarkers, setMarkerIndexDialogAsOpen, updatePolylines } from '../../../store/Markers/Actions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { IMarker, IPolyline } from '../../../store/Markers/Marker';\nimport { GOOGLE_MAP_KEY, GOOGLE_MAP_Position } from '../../../Constants';\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { fas } from '@fortawesome/free-solid-svg-icons'\nimport { SelectedFilters, Filters, SelectedFilterTitle } from '../../../store/Filters/Selector';\nimport { Loader } from '../../common/loader/Loader';\nimport { MobileInfoBox } from '../marker/MobileInfoBox';\nimport { Hidden } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport { setSelectedFilterTitle, updateSelectedFilters } from '../../../store/Filters/Actions';\nimport { isNullEmptyOrUndefined } from '../../../utils/helpers/ObjectHelper';\nimport { MarkerIsLive } from '../../../utils/helpers/MarkerHelper';\nimport { MarkerIsLiveHours } from '../../../store/Settings/Selector';\nimport { vehicles } from '../../../constants/VehicleConstants';\n\n\n\nexport interface IGoogleMapsProps {\n getLangString: (value: string) => string;\n}\n\nexport const GoogleMaps = (props: IGoogleMapsProps): JSX.Element => {\n\n // Need to add all the icons to be able to load them dynamicly below.\n library.add(fas);\n\n const dispatch = useDispatch();\n const history = useHistory();\n\n useEffect(() => {\n dispatch(getMarkers());\n dispatch(getUpdatesForMarkers());\n }, [dispatch]);\n\n useEffect(() => {\n if (history) {\n if (new URLSearchParams(history.location.search).get('category')) {\n dispatch(setSelectedFilterTitle(new URLSearchParams(history.location.search).get('category') ?? ''));\n }\n if (new URLSearchParams(history.location.search).get('pin')) {\n dispatch(setMarkerDialogAsOpen(new URLSearchParams(history.location.search).get('pin') ?? ''));\n }\n if (new URLSearchParams(history.location.search).get('index')) {\n dispatch(setMarkerIndexDialogAsOpen(Number(new URLSearchParams(history.location.search).get('index')) ?? 0));\n }\n }\n }, [history]);\n\n const markers = useSelector(Markers);\n const filters = useSelector(Filters);\n const selectedFilters = useSelector(SelectedFilters);\n const markerDialogOpen = useSelector(MarkerDialogOpen);\n const selectedFilterTitle = useSelector(SelectedFilterTitle);\n const polylines = useSelector(Polylines);\n const clickedOnPolyline = useSelector(ClickedOnPolyline);\n const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n const showAllLiveMarkers = useSelector(ShowAllLiveMarkers);\n\n const [zoomLevel, setZoomLevel] = useState(12);\n const [markersOnMap, setMarkersOnMap] = useState<IMarker[]>([]);\n const [bounds, setBounds] = useState<Bounds>();\n const [center, setCenter] = useState(getMainPosition());\n const [markersLoaded, setMarkersLoaded] = useState(false);\n const [googleMap, setGoogleMap] = useState(null);\n const [googleMaps, setGoogleMaps] = useState(null);\n \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleApiLoaded = (map: any, maps: any) => {\n setGoogleMap(map);\n setGoogleMaps(maps);\n };\n\n const filterMarkersOnMapBounds = useCallback((markers: IMarker[]) => {\n const filteredMarkers: IMarker[] = [];\n const filterMarkersByFilter = (markers: IMarker[]) => {\n let newFilteredMarkers: IMarker[] = [];\n selectedFilters.forEach(selectedFilter => {\n let markersFromFilter = markers.filter(marker => marker.types.some(type => type.title === selectedFilter.title) || (showAllLiveMarkers && MarkerIsLive(marker, markerIsLiveHours, false)));\n markersFromFilter = markersFromFilter.filter(marker => (\n ((isNullEmptyOrUndefined(selectedFilter.subFilters) && filters.find(filter => filter.title === marker.title && filter.subFilters.length > 0) ||\n (filters.find(filter => (filter.title === selectedFilter.title) && filter.subFilters.length === selectedFilter.subFilters.length)))) ||\n marker.subTypes?.some(subType => selectedFilter.subFilters.some(subFilter => subFilter.title === subType.title))\n ));\n markersFromFilter.forEach(marker => {\n if (!newFilteredMarkers.includes(marker) && marker.published) {\n newFilteredMarkers = [...newFilteredMarkers, marker];\n }\n });\n });\n if (selectedFilters.length === 0 && showAllLiveMarkers)\n {\n const markersFromFilter = markers.filter(marker => MarkerIsLive(marker, markerIsLiveHours, false));\n markersFromFilter.forEach(marker => {\n if (!newFilteredMarkers.includes(marker) && marker.published) {\n newFilteredMarkers = [...newFilteredMarkers, marker];\n }\n });\n }\n setMarkersOnMap(newFilteredMarkers);\n setMarkersLoaded(true);\n }\n\n const isInsideMapBounds = (marker: IMarker) => {\n if (!bounds || !marker.lat || !marker.lng) {\n return false;\n }\n\n const { se, ne, nw, sw } = bounds;\n return (\n (marker.lat > se.lat && sw.lat) &&\n (marker.lat < ne.lat && nw.lat) &&\n (marker.lng > nw.lng && sw.lng) &&\n (marker.lng < ne.lng && se.lng)\n )\n }\n markers.forEach(marker => {\n if (isInsideMapBounds(marker)) {\n filteredMarkers.push(marker);\n }\n });\n\n filterMarkersByFilter(filteredMarkers);\n }, [bounds, selectedFilters, showAllLiveMarkers])\n\n useEffect(() => {\n if (bounds && markers.length > 0) {\n filterMarkersOnMapBounds(markers);\n }\n }, [bounds, filterMarkersOnMapBounds, markers]);\n\n useEffect(() => {\n if (bounds && markers.length > 0) {\n filterMarkersOnMapBounds(markers);\n }\n }, [bounds, filterMarkersOnMapBounds, markers]);\n\n useEffect(() => {\n if (bounds && markers.length > 0) {\n filterMarkersOnMapBounds(markers);\n }\n }, [bounds, filterMarkersOnMapBounds, selectedFilters, markers]);\n\n useEffect(() => {\n if (!markersOnMap.find(marker => polylines.some(polyline => polyline.id.includes(marker.id)))) {\n handlePolyline();\n }\n }, [markersOnMap]);\n\n useEffect(() => {\n if (markersLoaded && markers && markerDialogOpen && markerDialogOpen !== 'close') {\n const startMarker = markers.find(m => m.id === markerDialogOpen);\n if (startMarker) {\n const inArray = selectedFilters.find(selectedFilter => startMarker.types.some(type => type.title === selectedFilter.title));\n const filter = filters.find(filter => startMarker.types.find(type => type.title === filter.title));\n if (!inArray && filter) {\n dispatch(updateSelectedFilters([...selectedFilters, filter]));\n }\n if (startMarker?.lat && startMarker.lng) {\n setCenter({ lat: startMarker?.lat, lng: startMarker?.lng });\n }\n }\n } else if (markersLoaded && markers && selectedFilterTitle && selectedFilterTitle !== '') {\n const startFilter = filters.find(f => f.title === selectedFilterTitle)\n if (startFilter) {\n dispatch(updateSelectedFilters([startFilter]));\n }\n }\n }, [markersLoaded]);\n\n const defaultZoom = {\n center: getMainPosition(),\n zoom: 12\n };\n function getMainPosition(): GoogleMap.Coords { \n \n const position = JSON.parse(GOOGLE_MAP_Position);\n const latFloatValue = parseFloat(position.lat);\n const lngFloatValue = parseFloat(position.lng); \n return {\n lat: latFloatValue,\n lng: lngFloatValue\n };\n }\n\n const handleZoom = (zoomLevel: number) => {\n setZoomLevel(zoomLevel);\n };\n\n const handleCenter = (coords: GoogleMap.Coords) => {\n setCenter(coords);\n };\n\n const onMapChanged = (changeEvent: GoogleMap.ChangeEventValue) => {\n if (!changeEvent) {\n return;\n }\n if (changeEvent.bounds && JSON.stringify(changeEvent.bounds) !== JSON.stringify(bounds)) {\n setBounds(changeEvent.bounds);\n }\n }\n\n const handleCustomOption = () => {\n if (markerDialogOpen === \"close\") {\n return { ...CustomOption, disableDoubleClickZoom: false };\n } else {\n return { ...CustomOption, disableDoubleClickZoom: true };\n }\n }\n\n const closeInfoBox = () => {\n handlePolyline();\n if (!clickedOnPolyline)\n {\n dispatch(setMarkerDialogAsOpen(\"close\"));\n dispatch(setMarkerIndexDialogAsOpen(0));\n const params = new URLSearchParams();\n history.push({ search: params.toString() });\n }\n };\n\n const handlePolyline = () => {\n if (!isNullEmptyOrUndefined(polylines) && polylines.length > 0) {\n const polylinesToClean = polylines.filter(poly => !vehicles.some(v => poly.id.includes(v.name)));\n if (!isNullEmptyOrUndefined(polylinesToClean) && polylinesToClean.length > 0) {\n polylinesToClean.forEach((polyline: IPolyline) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n polyline.polylines.forEach((poly: any) => {\n if (!isNullEmptyOrUndefined(poly)) {\n poly.setMap(null);\n }\n })\n })\n const newPolylines = polylines.filter(polyline => !polylinesToClean.some(poly => poly.id === polyline.id));\n dispatch(updatePolylines(newPolylines));\n }\n }\n }\n\n return (\n <div id=\"map-container\" role=\"main\" aria-label={props.getLangString('filter.map')}>\n {!markersLoaded &&\n <div className=\"loading-container\">\n <Loader getLangString={props.getLangString} />\n </div>\n }\n <GoogleMap\n bootstrapURLKeys={{ key: GOOGLE_MAP_KEY }}\n defaultCenter={defaultZoom.center}\n defaultZoom={defaultZoom.zoom}\n onZoomAnimationStart={handleZoom}\n onDrag={handleCenter}\n zoom={zoomLevel}\n center={center}\n options={handleCustomOption()}\n onClick={closeInfoBox}\n onChange={onMapChanged}\n yesIWantToUseGoogleMapApiInternals={true}\n onGoogleApiLoaded={({ map, maps }) => handleApiLoaded(map, maps)}\n >\n {markersLoaded &&\n markersOnMap.map((m: IMarker, index: number) =>\n <Marker\n getLangString={props.getLangString}\n lat={m.lat}\n lng={m.lng}\n zoomLevel={zoomLevel}\n marker={m}\n key={index}\n map={googleMap}\n maps={googleMaps}\n isVehicle={m.types.find(type => type.title === \"Turer\") ? true : false}\n />\n )}\n </GoogleMap>\n <Hidden smUp>\n <MobileInfoBox\n getLangString={props.getLangString}\n markers={markersOnMap}\n map={googleMap}\n maps={googleMaps}\n />\n </Hidden>\n\n <ZoomControl\n zoomLevel={zoomLevel}\n handleZoom={(level) => handleZoom(level)}\n />\n <PositionControl handleCenter={(coords) => handleCenter(coords)} />\n </div>\n )\n}\n","import { IFilter } from \"../../../store/Filters/Filter\";\nimport { updateSelectedFilters } from \"../../../store/Filters/Actions\"\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { fas, faTimes, IconName } from '@fortawesome/free-solid-svg-icons'\nimport { SelectedFilters } from \"../../../store/Filters/Selector\"\nimport React, { useState, useEffect } from 'react'\nimport Button from '@material-ui/core/Button';\nimport { Link } from \"@material-ui/core\";\nimport { Share } from \"../../common/share/Share\";\n\nexport interface IFilterProps {\n getLangString: (value: string) => string;\n filter: IFilter;\n handleSelectedFilter: () => void;\n selectedFilter: IFilter;\n showCategoriesForFilter: () => void;\n}\nexport const FilterButton = (props: IFilterProps): JSX.Element => {\n\n library.add(fas);\n const [activeFilter, setActiveFilter] = useState(false);\n const [showFilterOption, setShowFilterOption] = useState<boolean>(false);\n const [showOption, setShowOption] = useState<boolean>(false);\n const dispatch = useDispatch();\n\n const selectedFilters = useSelector(SelectedFilters);\n\n useEffect(() => {\n handleActive();\n }, [selectedFilters, props.filter])\n\n const handleClick = () => {\n props.handleSelectedFilter();\n // If the clicked filter is not in the list, add it. Otherwise, remove.\n const inArray = selectedFilters.find(i => i.title === props.filter.title)\n const newSelectedFilters = !inArray\n ? [...selectedFilters, props.filter]\n : selectedFilters.filter(f => f.title !== props.filter.title)\n dispatch(updateSelectedFilters(newSelectedFilters))\n handleActive();\n console.log(\"click\");\n\n }\n\n const handleActive = () => { \n if (selectedFilters.find(i => i.title === props.filter.title)) {\n setActiveFilter(true);\n setShowOption(true);\n if (props.filter.subFilters.length > 0) {\n setShowFilterOption(true);\n }\n } else {\n setActiveFilter(false);\n setShowOption(false);\n setShowFilterOption(false);\n }\n\n }\n\n const handleClose = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n event?.stopPropagation();\n event?.preventDefault();\n props.handleSelectedFilter();\n setShowOption(false);\n setShowFilterOption(false);\n }\n\n const showSubFilters = (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n event?.stopPropagation();\n event?.preventDefault();\n props.showCategoriesForFilter();\n }\n return (\n <React.Fragment>\n <Button\n className={`filter-button ${activeFilter ? props.selectedFilter.title === props.filter.title ? \"selected\" : \"active\" : \"\"}`}\n onClick={handleClick}\n disableTouchRipple={true}\n disableRipple={true}\n >\n {props.selectedFilter.title === props.filter.title &&\n <div className={'filter-button-close'} onClick={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) => handleClose(event)}>\n <FontAwesomeIcon icon={faTimes} />\n </div>\n }\n <div className=\"filter-button-icon-container\">\n <div className=\"filter-button-icon\">\n <FontAwesomeIcon icon={['fas', props.filter.icon as IconName]} className={'icon ' + (props.filter.class ? props.filter.class : '')} aria-label={`${props.getLangString('global.icon')} ${props.filter.title}`} />\n </div>\n <span className=\"filter-button-label\" > \n {props.filter.title}\n </span>\n </div>\n {props.selectedFilter.title === props.filter.title &&\n <div className={`sub-menu-options`}>\n {showOption &&\n <React.Fragment>\n <hr className=\"sub-menu-divider\" />\n <Share title={props.filter.title} getLangString={props.getLangString} onInfoBox={true} showIcon={false} className={'categories'} />\n {showFilterOption &&\n <Link onClick={(event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => showSubFilters(event)} className=\"sub-menu-option-link white\">\n\n {'Filtrera'}\n </Link>\n }\n </React.Fragment>\n }\n </div>\n }\n </Button>\n </React.Fragment>\n )\n}\n","import React from 'react'\nimport Grid from '@material-ui/core/Grid';\nimport Button from '@material-ui/core/Button';\n\nexport interface IFilterOptionsProps {\n getLangString: (value: string) => string;\n cleanSelectedFilters: (e?: Event) => void;\n addAllFilters: (e?: Event) => void;\n}\n\nexport const FilterOptions = (props: IFilterOptionsProps): JSX.Element => {\n\n return (\n <Grid container direction=\"row\" alignItems=\"center\" justifyContent=\"center\" className=\"filter-panel-options-container\">\n <Grid item xs={12} md={6} className=\"filter-panel-option\">\n <Grid item xs={6} sm={6} md={6} lg={6} xl={6}>\n <Button onClick={() => props.addAllFilters()} className=\"filter-panel-option-button blue\">{props.getLangString('filter.allFilters')}</Button>\n </Grid>\n <Grid item xs={6} sm={6} md={6} lg={6} xl={6}>\n <Button onClick={() => props.cleanSelectedFilters()} className=\"filter-panel-option-button white\">{props.getLangString('filter.cleanFilter')}</Button>\n </Grid>\n </Grid>\n </Grid>\n )\n}","import React from 'react';\nimport Button from '@material-ui/core/Button';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconName } from '@fortawesome/free-solid-svg-icons'\nimport './ThemeMapFilter.scss';\n\n\nexport interface IToggleMenuButtonProps {\n getLangString: (value: string) => string;\n showingMenu: boolean\n onClick: (e?: Event) => void\n}\n\nexport const ToggleMenuButton = (props: IToggleMenuButtonProps): JSX.Element => {\n\n\n const text = props.showingMenu ? props.getLangString('filter.hidePins') : props.getLangString('filter.showPins')\n const icon = props.showingMenu ? \"map-marked-alt\" : \"map-marker-alt\"\n\n return (\n <Button onClick={() => props.onClick()} className=\"filter-toggle-button\">\n <span>\n <FontAwesomeIcon size=\"lg\" icon={['fas', icon as IconName]} />\n </span>\n <span>\n {text}\n </span>\n </Button>\n )\n}","import React from 'react'\nimport Grid from '@material-ui/core/Grid';\nimport { ToggleMenuButton } from './ToggleMenuButton'\n\nexport interface IFilterToggleProps {\n getLangString: (value: string) => string;\n showingMenu: boolean\n onClick: (e?: Event) => void\n}\n\nexport const FilterToggle = (props: IFilterToggleProps): JSX.Element => {\n\n return (\n <div className=\"filter-toggle\" role=\"complementary\">\n <Grid container spacing={0} className=\"filter-toggle-container\">\n <Grid item xs={2} sm={2} md={2} lg={2} xl={2} className=\"filter-toggle-item filter-panel-toggle-item\">\n <ToggleMenuButton getLangString={props.getLangString} showingMenu={props.showingMenu} onClick={() => { props.onClick() }} />\n </Grid>\n </Grid>\n </div>\n )\n}","import { faCheckCircle, faCircle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { IFilter, ISubFilter } from '../../../store/Filters/Filter';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\n\nexport interface ISubFilterProps {\n getLangString: (value: string) => string;\n subFilter: ISubFilter;\n handleClick: () => void;\n selectedFilter: IFilter | undefined;\n}\n\nexport const SubFilter = (props: ISubFilterProps): JSX.Element => {\n\n const [activeSubFilter, setActiveSubFilter] = useState<boolean>(false);\n const selectedFilters = useSelector(SelectedFilters);\n\n useEffect(() => {\n handleActive();\n }, [props.subFilter, selectedFilters]);\n\n const handleActive = () => {\n if (props.selectedFilter &&\n props.selectedFilter.subFilters.find(i => i.title === props.subFilter.title)) {\n setActiveSubFilter(true)\n } else {\n setActiveSubFilter(false);\n }\n };\n\n return (\n <h4 className=\"category-items-title\" onClick={() => props.handleClick()} >\n <FontAwesomeIcon \n icon={activeSubFilter ? faCheckCircle : faCircle} \n className={`check-circle-icon ${activeSubFilter ? '' : 'circle-border'}`} \n />\n {props.subFilter.title}\n </h4>\n );\n};","import React from 'react';\nimport Grid from '@material-ui/core/Grid';\nimport { SubFilter } from './SubFilter';\nimport { IFilter, ISubFilter } from '../../../store/Filters/Filter';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\nimport { updateSelectedFilters } from '../../../store/Filters/Actions';\n\nexport interface ISubfiltersProps {\n getLangString: (value: string) => string;\n selectedFilter: IFilter;\n}\n\nexport const SubFilters = (props: ISubfiltersProps): JSX.Element => {\n\n const dispatch = useDispatch();\n const selectedFilters = useSelector(SelectedFilters);\n\n const handleClick = (subFilter: ISubFilter) => {\n const selectedFilter = selectedFilters.find(filter => filter.title === props.selectedFilter.title);\n const isSelected = selectedFilter?.subFilters.some(filter => filter.title === subFilter.title);\n const newSelectedFilters = !isSelected\n ? selectedFilters.map(f => f.title === props.selectedFilter.title ? {...f, subFilters : [...f.subFilters, subFilter]} : f)\n : selectedFilters.map(f => f.title === props.selectedFilter.title ? {...f, subFilters : selectedFilter ? selectedFilter.subFilters.filter(s => s.title !== subFilter.title) : []} : f)\n dispatch(updateSelectedFilters(newSelectedFilters))\n }\n\n return (\n <React.Fragment>\n <Grid container direction={'row'} role=\"list\" rowGap={3}>\n {props.selectedFilter.subFilters && props.selectedFilter.subFilters.map((subfilter: ISubFilter, index: number) => {\n return (\n <Grid item key={index} xs={12} md={6} className=\"category-items\">\n <SubFilter \n getLangString={props.getLangString} \n subFilter={subfilter} \n handleClick={() => handleClick(subfilter)} \n selectedFilter={selectedFilters.find(filter => filter.title === props.selectedFilter.title)}\n />\n </Grid>\n )\n })\n }\n </Grid>\n </React.Fragment>\n );\n};","import React, { useState, useEffect, useRef } from 'react';\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getFilters, cleanSelectedFilters, updateSelectedFilters, setSelectedFilterTitle } from \"../../../store/Filters/Actions\";\n\nimport Grid from '@material-ui/core/Grid';\nimport { IFilter } from '../../../store/Filters/Filter';\nimport { Settings } from '../../../store/Settings/Selector';\nimport { FilterButton } from './FilterButton'\nimport { FilterOptions } from './FilterOptions'\nimport { FilterToggle } from './FilterToggle'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faChevronLeft, fas } from '@fortawesome/free-solid-svg-icons'\nimport { faCoffee, faMapMarkerAlt, faTimes } from '@fortawesome/free-solid-svg-icons'\n\nimport './ThemeMapFilter.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { alpha, Button, styled, Switch } from '@material-ui/core';\nimport { SubFilters } from './SubFilters';\nimport { SelectedFilters, Filters } from '../../../store/Filters/Selector';\nimport { Markers, Polylines, ShowAllLiveMarkers } from '../../../store/Markers/Selector';\nimport { isNullEmptyOrUndefined } from '../../../utils/helpers/ObjectHelper';\nimport { cleanPolylines, setShowAllLiveMarkers } from '../../../store/Markers/Actions';\nimport { useHistory } from 'react-router-dom';\nexport interface IMapFilterProps {\n getLangString: (value: string) => string;\n}\n\nexport const MapFilter = (props: IMapFilterProps): JSX.Element => {\n\n library.add(fas, faCoffee, faMapMarkerAlt, faTimes);\n const dispatch = useDispatch();\n const history = useHistory();\n\n useEffect(() => {\n dispatch(getFilters());\n }, [dispatch]);\n\n const settings = useSelector(Settings);\n const filters = useSelector(Filters);\n const selectedFilters = useSelector(SelectedFilters);\n const markers = useSelector(Markers);\n const polylines = useSelector(Polylines);\n const showAllLiveMarkers = useSelector(ShowAllLiveMarkers);\n const [showFilterMenu, setShowFilterMenu] = useState(false);\n const [filtersWithMarkers, setFiltersWithMarkers] = useState<IFilter[]>([]);\n const [selectedFilter, setSelectedFilter] = useState<IFilter>({} as IFilter);\n const [showSubFilters, setShowSubFilters] = useState<boolean>(false);\n\n useEffect(() => {\n setDefaultFilters();\n }, [settings, filters]);\n\n useEffect(() => {\n setFiltersToShow();\n }, [markers, filters]);\n\n const setFiltersToShow = () => {\n const filtersToShow = filters?.filter(filter => markers?.some(marker => marker.types?.some(type => type.title === filter.title)));\n filtersToShow.forEach(filter => {\n filter.subFilters = filter.subFilters?.filter(subFilter => markers?.some(marker => marker.subTypes?.some(subType => subType.title === subFilter.title)));\n });\n setFiltersWithMarkers(filtersToShow);\n }\n\n const setDefaultFilters = () => {\n const defaultFilters = filters.filter(filter =>\n settings.defaultFilters.some(defaultFilter => defaultFilter === filter.title));\n if (defaultFilters && selectedFilters.length === 0) {\n dispatch(updateSelectedFilters(defaultFilters));\n }\n }\n\n const removeFilters = () => {\n const params = new URLSearchParams();\n history.push({ search: params.toString() });\n setSelectedFilter({} as IFilter);\n dispatch(cleanSelectedFilters());\n dispatch(setShowAllLiveMarkers(false));\n dispatch(setSelectedFilterTitle(''));\n if (!isNullEmptyOrUndefined(polylines) && polylines.length > 0) {\n dispatch(cleanPolylines(polylines));\n }\n }\n\n const removeSubFilters = () => {\n const newFilters = selectedFilters.map(filter => filter.title === selectedFilter.title ? { ...selectedFilter, subFilters: [] } : filter);\n dispatch(updateSelectedFilters(newFilters));\n }\n\n const addAllFilters = () => {\n dispatch(setSelectedFilterTitle(''));\n dispatch(updateSelectedFilters(filters));\n dispatch(setShowAllLiveMarkers(true));\n }\n\n const addAllSubFilters = () => {\n const fullSelectedFilter = filters.find(filter => filter.title === selectedFilter.title);\n if (fullSelectedFilter) {\n const newFilters = selectedFilters.map(filter => filter.title === selectedFilter.title ? fullSelectedFilter : filter);\n dispatch(updateSelectedFilters(newFilters));\n }\n }\n\n const toggleShowAllLiveMarkers = () => {\n dispatch(setShowAllLiveMarkers(!showAllLiveMarkers));\n }\n\n const toggleFilterMenu = () => {\n setShowFilterMenu(!showFilterMenu);\n }\n\n const handleSelectedCategory = (filter: IFilter) => {\n const params = new URLSearchParams();\n\n if (selectedFilter.title !== filter.title &&\n !selectedFilters.find(f => f.title === filter.title)) {\n setSelectedFilter(filter);\n dispatch(setSelectedFilterTitle(filter.title));\n params.append('category', filter.title);\n } else {\n setSelectedFilter({} as IFilter);\n dispatch(setSelectedFilterTitle(''));\n }\n history.push({ search: params.toString() });\n }\n\n const showSubFiltersForFilter = () => {\n setShowSubFilters(true);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const toggleOnOutsideClick = (filterMenuRef: any, toggleRef: any) => {\n useEffect(() => {\n function handleClickOutside(event: Event) {\n if (filterMenuRef.current && !filterMenuRef.current.contains(event.target) && !toggleRef.current.contains(event.target)) {\n setShowFilterMenu(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [filterMenuRef, toggleRef]);\n }\n\n const filterMenuRef = useRef(null);\n const toggleRef = useRef(null);\n toggleOnOutsideClick(filterMenuRef, toggleRef);\n\n const RedSwitch = styled(Switch)(({ theme }) => ({\n '& .MuiSwitch-switchBase.Mui-checked': {\n color: \"#de0b2c\",\n '&:hover': {\n backgroundColor: alpha(\"#de0b2c\", theme.palette.action.hoverOpacity),\n },\n },\n '& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': {\n backgroundColor: \"#de0b2c\",\n },\n }));\n \n\n return (\n <React.Fragment>\n {showFilterMenu &&\n <React.Fragment>\n \n <div className={` filter-panel`} role=\"contentinfo\" ref={filterMenuRef}>\n <Grid container direction={'row'} alignContent={'flex-start'} className=\"filter-panel-container\" role=\"list\">\n <Grid className={`filter-container`} item xs={12}>\n <Grid container direction={'row'} className=\"list-container\" role=\"list\">\n {showSubFilters &&\n <React.Fragment>\n <Grid item xs={1}>\n <Button variant=\"contained\" onClick={() => setShowSubFilters(false)} className=\"filter-toggle-icon back\">\n <FontAwesomeIcon size=\"lg\" icon={faChevronLeft} />\n </Button>\n </Grid>\n <Grid item xs={10}>\n <h4 className=\"filter-title\"> {selectedFilter.title}</h4>\n <h4 className='filter-description'>{props.getLangString('filter.description')}</h4>\n <hr className=\"title-divider\" />\n </Grid>\n </React.Fragment>\n }\n {!showSubFilters &&\n <Grid item xs={10}>\n <RedSwitch checked={showAllLiveMarkers} onClick={toggleShowAllLiveMarkers} className=\"filter-panel-switch\"/>\n <span className=\"switch-label\">{props.getLangString('filter.showAllLiveMarkers')}</span>\n </Grid>\n }\n <Grid item xs={showSubFilters ? 1 : 2}>\n <Button variant=\"contained\" onClick={() => setShowFilterMenu(false)} className=\"filter-toggle-icon\">\n <FontAwesomeIcon size=\"lg\" icon={faTimes} />\n </Button>\n </Grid>\n {showSubFilters ?\n <SubFilters getLangString={props.getLangString} selectedFilter={selectedFilter} />\n :\n <React.Fragment>\n {filtersWithMarkers.map((filter: IFilter, index: number) => {\n return (\n <Grid key={index} item zeroMinWidth xs={4} sm={2} md={2} lg={2} xl={2} className={`filter-panel-item`} role=\"listitem\">\n <FilterButton\n getLangString={props.getLangString}\n filter={filter}\n key={index}\n handleSelectedFilter={() => handleSelectedCategory(filter)}\n selectedFilter={selectedFilter}\n showCategoriesForFilter={() => showSubFiltersForFilter()}\n />\n </Grid>\n )\n })}\n </React.Fragment>\n }\n </Grid>\n </Grid>\n {showSubFilters ?\n <Grid className=\"filter-button-container\" item xs={12}>\n <FilterOptions getLangString={props.getLangString}\n cleanSelectedFilters={removeSubFilters}\n addAllFilters={addAllSubFilters}\n // toggleShowAllLiveMarkers={toggleShowAllLiveMarkers}\n />\n </Grid>\n :\n <Grid className=\"filter-button-container\" item xs={12}>\n <FilterOptions getLangString={props.getLangString}\n cleanSelectedFilters={removeFilters}\n addAllFilters={addAllFilters}\n // toggleShowAllLiveMarkers={toggleShowAllLiveMarkers}\n />\n </Grid>\n }\n </Grid>\n </div>\n \n </React.Fragment>\n }\n <div ref={toggleRef}>\n <FilterToggle getLangString={props.getLangString} showingMenu={showFilterMenu} onClick={toggleFilterMenu} />\n </div>\n </React.Fragment >\n );\n};\n","import { RootState } from \"../RootReducer\";\nimport { IEventFilters } from \"./ActionTypes\";\nimport { ICategory, IEvent } from \"./Event\";\n\nexport const Events = (state: RootState): IEvent[] => state.events.eventList;\nexport const FilteredEvents = (state: RootState): IEvent[] => state.events.filteredEventList;\nexport const Categories = (state: RootState): ICategory[] => state.events.categoryList;\nexport const EventsLoading = (state: RootState): boolean => state.events.loading;\nexport const EventsPageScrollPosition = (state: RootState): number => state.events.eventsPageState.scrollPosition;\nexport const EventsPageFilters = (state: RootState): IEventFilters | undefined => state.events.eventsPageState.filters;","export default \"data:image/gif;base64,R0lGODlh6ANYAsQAAOTk5N7e3ufn5+jo6Ozs7Obm5vPz89/f3/T09ODg4PHx8e/v7/Dw8PLy8uPj4+3t7eLi4u7u7urq6uHh4eXl5enp6evr693d3fX19QAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAADoA1gCAAX/ICaOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wADChxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhT/6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/gw4sfT768+fPo06tfz769+/fw48ufT7++/fv48+vfz7+///8ABijggAQWaOCBCCao4P+CDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptwxinnnHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeghirqqKSWauqpqKaq6qqsturqq7DGKuurCDBgQQEOAKDrrrz26uuvwAYrLK8OFCDBAgjM+pIBFjiQQAAXRCvttNRWa+3/tdhm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\"","import { IEvent } from \"../../store/Events/Event\";\nimport React from 'react';\nimport moment from 'moment';\nimport defaultImage from '../../images/default-img.gif';\nimport { Link } from \"react-router-dom\";\nimport { Grid } from \"@material-ui/core\";\nimport ReactGA from 'react-ga4';\n\nexport interface IEventTileProps {\n getLangString: (value: string) => string;\n event: IEvent;\n}\n\nexport const EventTile = (props: IEventTileProps): JSX.Element => {\n // const dateFormatOptions = {\n // hour12: true,\n // day: 'numeric',\n // month: 'long',\n // year: '2-digit',\n // minute: '2-digit',\n // second: '2-digit',\n // };\n\n // try {\n // const formatedDate = moment(props.event.start).format('D MMMM HH:mm');\n // console.log(formatedDate);\n // } catch (e) {\n // console.error('Falied to convert date: ', props.event.start);\n // // console.error(e);\n // }\n\n return (\n <Grid item xs={12} md={6} lg={4} className=\"event-tile-container\" role=\"article\">\n <Link onClick={() => ReactGA.event({ category: 'Event', action: `Clicked on event: ${props.event.title}` })} to={'/events/' + props.event.id.replaceAll(':', '_') + '/' + props.event.start.toString().replaceAll(':', '_')}>\n <div className=\"event-tile\">\n <div className=\"event-date-container\">\n <div className=\"event-date\">\n {/* {new Intl.DateTimeFormat(\"sv\", dateFormatOptions).format(props.event.start)} */}\n {moment(props.event.start).format('D MMMM')}\n </div>\n <div className=\"event-date\">\n {moment(props.event.start).format('HH:mm') !== '00:00' && moment(props.event.start).format('HH:mm')}\n </div>\n </div>\n\n <h3 className=\"event-title\">{props.event.title}</h3>\n\n <div className=\"event-image\">\n <img src={props.event.imageUrl == null ? defaultImage : props.event.imageUrl} alt={`${props.getLangString('global.image')} ${props.event?.title}`} className=\"img-fluid\" />\n </div>\n\n </div>\n </Link>\n </Grid>\n );\n}","import React from 'react'\nimport { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getEvents } from \"../../store/Events/Actions\";\nimport { IEvent } from '../../store/Events/Event';\nimport { Events, EventsLoading, FilteredEvents } from \"../../store/Events/Selector\";\nimport { EventTile } from './EventTile'\nimport { Loader } from '../common/loader/Loader';\nimport './ThemeEvent.scss';\nimport { Grid, Button } from '@material-ui/core';\nimport { EventsPageScrollPosition } from '../../store/Events/Selector';\nimport { setEventsPageScrollPosition } from '../../store/Events/Actions';\n\nexport interface IEventListProps {\n getLangString: (value: string) => string;\n}\n\nexport const EventList = (props: IEventListProps): JSX.Element => {\n\n const dispatch = useDispatch();\n const events = useSelector(Events);\n const filteredEvents = useSelector(FilteredEvents);\n const eventsLoading = useSelector(EventsLoading);\n const eventsPageScrollPosition = useSelector(EventsPageScrollPosition);\n\n useEffect(() => {\n if ((!events || events.length === 0) && !eventsLoading) {\n dispatch(getEvents());\n }\n }, [dispatch, events, eventsLoading]);\n\n useEffect(() => {\n if (filteredEvents.length > 0 && eventsPageScrollPosition > 0) {\n window.scrollTo({ top: eventsPageScrollPosition });\n dispatch(setEventsPageScrollPosition(0));\n }\n }, [filteredEvents, eventsPageScrollPosition]);\n\n useEffect(() => {\n return () => {\n dispatch(setEventsPageScrollPosition(window.scrollY));\n }\n }, []);\n\n return (\n <React.Fragment>\n {eventsLoading ?\n <Loader getLangString={props.getLangString} />\n :\n <React.Fragment>\n <Grid container direction=\"row\" className=\"eventlist-container\" role=\"feed\">\n {filteredEvents && filteredEvents.map((event: IEvent, index: number) =>\n <EventTile getLangString={props.getLangString} event={event} key={index} />\n )}\n {(filteredEvents && filteredEvents.length === 0) &&\n <React.Fragment>\n <h4>{props.getLangString('event.noEvents')}</h4>\n </React.Fragment>\n }\n </Grid>\n <Grid container direction=\"row\" className=\"eventlist-button-container\">\n <Grid item xs={12} className=\"navigation-option\">\n <Button variant=\"outlined\" onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })} className=\"back-to-top-button blue\">{'Tillbaka till toppen'}</Button>\n </Grid>\n </Grid>\n </React.Fragment>\n }\n </React.Fragment>\n )\n}\n","import React from 'react';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons'\nimport { IEvent } from '../../../store/Events/Event';\nimport './ThemeDatePicker.scss';\nimport { Button, Grid } from '@material-ui/core';\nimport moment from 'moment';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport interface IDatePickerProps {\n getLangString: (value: string) => string;\n eventStart: Date;\n relatedEvents?: IEvent[] | undefined;\n}\n\nexport const DateList = (props: IDatePickerProps): JSX.Element => {\n const { relatedEvents, eventStart, getLangString } = props;\n const [eventsCurrentMonth, setEventsCurrentMonth] = React.useState<IEvent[] | undefined>(relatedEvents?.filter((e) => new Date(eventStart).getMonth() === new Date(e.start).getMonth()));\n const [currentMonth, setCurrentMonth] = React.useState<number | undefined>(new Date(eventStart).getMonth());\n\n const handleDates = (nextMonth: boolean) => {\n if (relatedEvents && currentMonth) {\n if (nextMonth) {\n const nextMonth = currentMonth + 1;\n setCurrentMonth(nextMonth);\n const eventCurrentMonth = relatedEvents?.filter((e) => nextMonth === new Date(e.start).getMonth());\n setEventsCurrentMonth(eventCurrentMonth);\n } else {\n const prevMonth = currentMonth - 1;\n setCurrentMonth(prevMonth);\n const eventCurrentMonth = relatedEvents?.filter((e) => prevMonth === new Date(e.start).getMonth());\n setEventsCurrentMonth(eventCurrentMonth);\n }\n }\n }\n\n return (\n <Grid container direction=\"row\" justifyContent=\"flex-start\" alignItems=\"flex-start\" className=\"date-list-container\">\n {currentMonth &&\n <React.Fragment>\n <Grid container direction=\"row\" className=\"date-title\">\n <Grid item xs={6}>\n {moment(new Date().setMonth(currentMonth)).format('MMMM YYYY')}\n </Grid>\n <Grid item xs={6}>\n <div className=\"button-container\">\n <Button className=\"button\" disabled={currentMonth <= new Date().getMonth()} onClick={() => handleDates(false)}><FontAwesomeIcon icon={faChevronLeft} className=\"icon\" size=\"sm\" /></Button>\n <Button className=\"button\" onClick={() => handleDates(true)}><FontAwesomeIcon icon={faChevronRight} className=\"icon\" size=\"sm\" /></Button>\n </div>\n </Grid>\n </Grid>\n {eventsCurrentMonth && eventsCurrentMonth.length > 0 ?\n <React.Fragment>\n {eventsCurrentMonth?.map((event: IEvent, index: number) =>\n <React.Fragment key={index}>\n <Grid item xs={6}>\n {moment(event.start).format('D MMMM')}\n </Grid>\n <Grid item xs={6}>\n {moment(event?.start).format('HH:mm') === '00:00' && moment(event?.end).format('HH:mm') === '00:00' ?\n <span className=\"details-time\">\n {getLangString('event.aroundTheClock')}\n </span>\n :\n <React.Fragment>\n <span className=\"details-time\">\n {moment(event?.start).format('HH:mm')} - {moment(event?.end).format('HH:mm')}\n </span>\n </React.Fragment>\n }\n </Grid>\n </React.Fragment>\n )}\n </React.Fragment>\n :\n <span>\n {props.getLangString('event.noEventsThisMonth')}\n </span>\n }\n\n </React.Fragment>\n }\n\n </Grid>\n )\n}","export const SET_TITLE = 'SET_TITLE';\nexport const SET_TITLE_FAILURE = 'SET_TITLE_FAILURE';\nexport const CLEAR_TITLE = 'CLEAR_TITLE';\nexport const CLEAR_TITLE_FAILURE = 'CLEAR_TITLE_FAILURE';\n\nexport interface IBreadcrumbs {\n title: string;\n error?: string;\n}\n\ninterface SetTitle {\n type: typeof SET_TITLE,\n payload: string;\n}\n\ninterface SetTitleFailure {\n type: typeof SET_TITLE_FAILURE,\n payload: string;\n}\n\ninterface ClearTitle {\n type: typeof CLEAR_TITLE,\n}\n\ninterface ClearTitleFailure {\n type: typeof CLEAR_TITLE_FAILURE,\n payload: string;\n}\n\nexport type BreadcrumbsActionTypes = SetTitle | SetTitleFailure | ClearTitle | ClearTitleFailure;","import moment from 'moment';\nimport 'moment/locale/sv';\nimport React, { useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport { ICategory, IEvent } from '../../store/Events/Event';\nimport { Events, EventsLoading } from '../../store/Events/Selector';\nimport defaultImage from '../../images/default-img.gif';\nimport './ThemeEvent.scss';\nimport { getEvents } from '../../store/Events/Actions';\nimport { Button, Grid, Hidden, Link } from '@material-ui/core';\nimport { DateList } from '../common/datepicker/DateList';\nimport useDeviceDetect from '../../utils/hooks/DeviceDetect';\nimport { setTitle, clearTitle } from '../../store/Breadcrumbs/Actions';\nimport { Share } from '../common/share/Share';\nimport { SEO } from '../common/seo/SEO';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\n\ninterface ParamTypes {\n id: string,\n start: string\n}\n\nexport interface IEventDetailsProps {\n getLangString: (value: string) => string;\n}\n\nexport const EventDetails = (props: IEventDetailsProps): JSX.Element => {\n const { id, start } = useParams<ParamTypes>();\n const events = useSelector(Events);\n const eventsLoading = useSelector(EventsLoading);\n const [event, setEvent] = useState<IEvent | undefined>();\n const [relatedEvents, setRelatedEvents] = useState<IEvent[] | undefined>();\n const [dateList, setDateList] = React.useState(false);\n\n const { isMobile } = useDeviceDetect();\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n if ((!events || events.length === 0) && !eventsLoading) {\n dispatch(getEvents());\n }\n window.scrollTo(0, 0);\n\n }, [dispatch]);\n\n useEffect(() => {\n const fixedId = id.replaceAll('_', ':');\n const fixedStart = start.replaceAll('_', ':');\n const eventId = decodeURIComponent(fixedId);\n const startDate = new Date(decodeURIComponent(fixedStart));\n const eventToShow = events.find(e => e.id === eventId && new Date(e.start).getTime() === startDate.getTime());\n if (eventToShow != null) {\n setEvent(eventToShow);\n }\n // Related events\n const relatedEvents = events.filter((e) => e.id === eventId);\n if (relatedEvents != null) {\n setRelatedEvents(relatedEvents);\n }\n\n }, [events, id, start, event]);\n\n useEffect(() => {\n if (event) {\n dispatch(setTitle(event?.title));\n }\n\n return function cleanup() {\n dispatch(clearTitle());\n }\n }, [event]);\n\n return (\n <div className=\"event-details-wrapper\" role=\"article\">\n {event &&\n <SEO title={`${event?.title} | ${props.getLangString('global.pageTitle')}`} description={event?.description} imageUrl={event?.imageUrl} />\n }\n\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <div className=\"event-date-container\">\n <div className=\"event-date\">\n {/* {new Intl.DateTimeFormat(\"sv\", dateFormatOptions).format(props.event.start)} */}\n {moment(event?.start).format('D MMMM')}\n </div>\n <div className=\"event-date\">\n {moment(event?.start).format('HH:mm') !== '00:00' &&\n <React.Fragment>\n {moment(event?.start).format('HH:mm')} - {moment(event?.end).format('HH:mm') !== '00:00' && moment(event?.end).format('HH:mm')}\n </React.Fragment>\n }\n </div>\n </div>\n <Grid item xs={12} md={8}>\n <h1 className=\"event-title\">{event?.title}</h1>\n </Grid>\n\n <Hidden mdUp={true}>\n <div className=\"event-image\">\n <img src={event?.imageUrl == null ? defaultImage : event?.imageUrl} alt={`${props.getLangString('global.image')} ${event?.title}`} className=\"img-fluid\" />\n </div>\n </Hidden>\n </Grid>\n </Grid>\n\n <Grid container direction=\"row\">\n <Grid item xs={12} md={8} className=\"event-main\">\n <div className=\"event-ingress\">\n {event?.ingress}\n </div>\n {event && \n <ReactMarkdown rehypePlugins={[rehypeRaw]} className=\"event-description\">\n {event?.description}\n </ReactMarkdown>\n }\n <Hidden mdDown={true}>\n <div className=\"event-image\">\n <img src={event?.imageUrl == null ? defaultImage : event?.imageUrl} alt={`${props.getLangString('global.image')} ${event?.title}`} className=\"img-fluid\" />\n </div>\n </Hidden>\n </Grid>\n\n <Grid item xs={12} md={4} className=\"event-tile\">\n {isMobile &&\n <Grid item xs={12} className=\"hr-grid-item\">\n <div className=\"horizontalRow\">\n <hr></hr>\n </div>\n </Grid>\n }\n <h3 className=\"sub-title main\">{props.getLangString('event.dateAndTime')}</h3>\n <h4 className=\"event-details-title\">{props.getLangString('global.date')}</h4>\n <div className=\"event-details\"> {moment(event?.start).format('D MMMM YYYY')}</div>\n {moment(event?.start).format('HH:mm') !== '00:00' &&\n <React.Fragment>\n <h4 className=\"event-details-title\">{props.getLangString('global.time')}</h4>\n <div className=\"event-details\">\n {moment(event?.start).format('HH:mm')} - {moment(event?.end).format('HH:mm') !== '00:00' && moment(event?.end).format('HH:mm')}\n </div>\n </React.Fragment>\n }\n {event?.location &&\n <React.Fragment>\n <h4 className=\"event-details-title\">{props.getLangString('event.location')}</h4>\n <div className=\"event-details\">\n {event?.location.name}\n </div>\n </React.Fragment>\n }\n {event?.categories && event?.categories.length > 0 &&\n <React.Fragment>\n <h4 className=\"event-details-title\">{props.getLangString('event.category')}</h4>\n <div className=\"event-details\">\n {event?.categories.map((category: ICategory, index: number) =>\n <React.Fragment key={index}>\n {category.title}\n <div className={`${event?.categories && event?.categories.length - 1 === index ? 'hide' : 'inline'}`}>\n {', '}\n </div>\n </React.Fragment>\n )}\n </div>\n </React.Fragment>\n }\n {relatedEvents && relatedEvents.length > 1 &&\n <React.Fragment>\n <h4 className=\"event-details-title\">{props.getLangString('event.furtherDates')}</h4>\n <button className=\"day-picker-btn\" onClick={() => setDateList(!dateList)}><span className=\"day-picker-btn-text\">{`${dateList ? props.getLangString('event.hideDates') : props.getLangString('event.showOtherDates')}`}</span></button>\n {dateList &&\n <DateList getLangString={props.getLangString} relatedEvents={relatedEvents} eventStart={event?.start ? event.start : new Date()} />\n }\n </React.Fragment>\n }\n\n {(event?.phoneNumber || event?.email) && isMobile &&\n <Grid item xs={12} className=\"hr-grid-item\">\n <div className=\"horizontalRow\">\n <hr></hr>\n </div>\n </Grid>\n }\n\n {(event?.phoneNumber || event?.email) &&\n <h3 className=\"sub-title\">{props.getLangString('event.contactInformation')}</h3>\n }\n {event?.phoneNumber &&\n <React.Fragment>\n <h4 className=\"event-details-title\">{props.getLangString('event.phoneNumber')}</h4>\n <div className=\"event-details\">\n <a href={`tel: ${event?.phoneNumber}`} className={'contact_info_link'}>{event?.phoneNumber}</a>\n </div>\n </React.Fragment>\n }\n {event?.email &&\n <React.Fragment>\n <h4 className=\"event-details-title\">{props.getLangString('event.email')}</h4>\n <div className=\"event-details breakline\">\n <a href={`mailto: ${event?.email}`} className={'contact_info_link'}>{event?.email}</a>\n </div>\n </React.Fragment>\n }\n\n {event?.webpage && isMobile &&\n <Grid item xs={12} className=\"hr-grid-item\">\n <div className=\"horizontalRow\">\n <hr></hr>\n </div>\n </Grid>\n }\n\n {event?.webpage &&\n <React.Fragment>\n <h3 className=\"sub-title\">{props.getLangString('event.links')}</h3>\n <h4 className=\"event-details-title\">{props.getLangString('event.webpage')}</h4>\n <div className=\"event-details breakline\">\n <Link href={event?.webpage} target=\"_blank\" rel=\"noopener\">{event?.webpage}</Link>\n </div>\n </React.Fragment>\n }\n {event?.bookingLink &&\n <React.Fragment>\n <div className=\"event-details breakline\">\n <Button href={event?.bookingLink} target=\"_blank\" className=\"booking-link\">\n <span>\n {props.getLangString('map.bookTicket')}\n </span>\n </Button>\n </div>\n </React.Fragment>\n }\n\n {event?.title &&\n <Share title={event?.title} getLangString={props.getLangString} />\n }\n\n </Grid>\n </Grid>\n </div>\n )\n}\n","import { ThunkAction } from 'redux-thunk'\nimport { RootState } from '../RootReducer';\nimport { Action } from 'redux';\nimport * as BreadcrumbsActionTypes from './ActionTypes'\n\nexport const setTitle = (title: string): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({\n type: BreadcrumbsActionTypes.SET_TITLE,\n payload: title\n });\n\n } catch (error) {\n console.error(error);\n dispatch({ type: BreadcrumbsActionTypes.SET_TITLE_FAILURE, payload: error })\n }\n}\n\nexport const clearTitle = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({\n type: BreadcrumbsActionTypes.CLEAR_TITLE\n });\n\n } catch (error) {\n console.error(error);\n dispatch({ type: BreadcrumbsActionTypes.CLEAR_TITLE_FAILURE, payload: error })\n }\n}","import React, { useRef, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport './ThemeReport.scss';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n interface Window { tableau: any; }\n}\n\nwindow.tableau = window.tableau || {};\n\n// Hack to make the Tableau embed code work inte TypeScript.. \ndeclare const window: Window;\ninterface ParamTypes {\n id: string\n}\nexport const Report = (): JSX.Element => {\n const { tableau } = window;\n const ref = useRef(null);\n const { id } = useParams<ParamTypes>();\n\n useEffect(() => {\n const url = 'https://public.tableau.com/views/' + decodeURIComponent(id); // id.replaceAll('|', '/'); //?:language=en&:display_count=y&publish=yes&:origin=viz_share_link\n new tableau.Viz(ref.current, url);\n }, [tableau.Viz, id]);\n\n return (\n <div ref={ref} className=\"report-container\"></div>\n )\n}","import React from 'react'\nimport { RichText, RichTextBlock } from 'prismic-reactjs'\nimport { LinkResolver } from '../../../utils/prismic/LinkResolver';\nimport './PrismicRichText.scss';\n\nexport interface IPrismicRichTextProps {\n render: RichTextBlock[]\n}\nexport const PrismicRichText = (props: IPrismicRichTextProps): JSX.Element => {\n return (\n <div className=\"prismic\">\n <RichText render={props.render} linkResolver={LinkResolver} />\n </div>\n );\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from 'react';\nimport { Grid } from '@material-ui/core';\nimport './ThemeAboutLive.scss';\nimport Prismic from '@prismicio/client';\nimport { RichText } from 'prismic-reactjs';\nimport { Document } from '@prismicio/client/types/documents';\nimport { PRISMIC_URL, PRISMIC_TOKEN } from '../../Constants';\nimport { PrismicRichText } from '../common/prismic/PrismicRichText';\nimport { SEO } from '../common/seo/SEO';\nimport { useTranslation } from 'react-i18next';\n\nexport const AboutLive = (): JSX.Element => {\n const client = Prismic.client(PRISMIC_URL, { accessToken: PRISMIC_TOKEN });\n const [doc, setDocData] = React.useState<Document | undefined>();\n const { t } = useTranslation('common');\n\n React.useEffect(() => {\n const fetchData = async () => {\n const doc = await client.getSingle('about', {});\n setDocData(doc);\n };\n fetchData();\n }, []);\n\n return (\n <React.Fragment>\n <SEO title={t('topNavigation.aboutRonneby')} />\n {doc && (\n <React.Fragment>\n <div className=\"about-wrapper\" role=\"article\">\n <Grid container direction=\"row\" role=\"feed\">\n <Grid item xs={12} role=\"article\">\n <Grid item xs={12} md={8}>\n <h1>{RichText.asText(doc.data.title)}</h1>\n </Grid>\n </Grid>\n </Grid>\n <Grid container direction=\"row\">\n <Grid item xs={12} md={8} className=\"about-main\">\n <PrismicRichText render={doc.data.body} />\n </Grid>\n <Grid item xs={12} md={4} className=\"about-tile\">\n {doc.data.contacts &&\n doc.data.contacts.map((contact: any, index: number) => {\n return (\n <div key={index}>\n <PrismicRichText render={contact.contacttitle} />\n <PrismicRichText render={contact.contactbody} />\n </div>\n );\n })}\n </Grid>\n </Grid>\n </div>\n </React.Fragment>\n )}\n </React.Fragment>\n );\n};\n","export interface ISettings {\n defaultFilters: string[];\n defaultEventCategories: string[];\n markerIsLiveHours: number;\n}\n\nexport enum AdminTools {\n Admin = 1,\n Filter = 2\n}\n","import React from 'react'\nimport './ThemeAdminTool.scss';\nimport { faTools } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport interface IAdminToolProps {\n getLangString: (value: string) => string;\n}\n\nexport const AdminTool = (props: IAdminToolProps): JSX.Element => {\n return (\n <div className=\"admin-tool-container\">\n <span className=\"admin-title\">{props.getLangString('admin.adminTitle')}</span>\n <span className=\"admin-text\">{props.getLangString('admin.adminSubTitle')}</span>\n <span className=\"admin-text\">{props.getLangString('admin.adminDescription')}</span>\n <FontAwesomeIcon icon={faTools} className=\"admin-tool-icon\" />\n </div>\n );\n}","import { ISettings } from \"./Settings\";\n\nexport const GET_SETTINGS_BEGIN = 'GET_SETTINGS_BEGIN';\nexport const GET_SETTINGS_SUCCESS = 'GET_SETTINGS_SUCCESS';\nexport const GET_SETTINGS_FAILURE = 'GET_SETTINGS_FAILURE';\nexport const SET_SETTINGS_BEGIN = 'SET_SETTINGS_BEGIN';\nexport const SET_SETTINGS_SUCCESS = 'SET_SETTINGS_SUCCESS';\nexport const SET_SETTINGS_FAILURE = 'SET_SETTINGS_FAILURE';\n\nexport interface ISettingsState {\n defaultFilters: string[];\n defaultEventCategories: string[];\n markerIsLiveHours: number;\n loading: boolean,\n error?: string\n}\n\ninterface GetSettingsBeginAction {\n type: typeof GET_SETTINGS_BEGIN\n}\n\ninterface GetSettingsSuccessAction {\n type: typeof GET_SETTINGS_SUCCESS,\n payload: ISettings\n}\n\ninterface GetSettingsFailure {\n type: typeof GET_SETTINGS_FAILURE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any\n}\n\ninterface SetSettingsBeginAction {\n type: typeof SET_SETTINGS_BEGIN\n}\n\ninterface SetSettingsSuccessAction {\n type: typeof SET_SETTINGS_SUCCESS,\n payload: ISettings\n}\n\ninterface SetSettingsFailure {\n type: typeof SET_SETTINGS_FAILURE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any\n}\n\nexport type SettingsActionTypes = GetSettingsBeginAction | GetSettingsSuccessAction | GetSettingsFailure | SetSettingsBeginAction | SetSettingsSuccessAction | SetSettingsFailure;\n","import React, { useEffect, useState } from 'react'\nimport './ThemeFilterTool.scss';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Settings, SettingsErrors, SettingsLoading } from '../../../../store/Settings/Selector';\nimport { IFilter } from '../../../../store/Filters/Filter';\nimport { Filters, FiltersLoading } from '../../../../store/Filters/Selector';\nimport { getFilters } from '../../../../store/Filters/Actions';\nimport { Button } from '@material-ui/core';\nimport { Loader } from '../../../common/loader/Loader';\nimport { updateSettings } from '../../../../store/Settings/Actions';\nimport { ISettings } from '../../../../store/Settings/Settings';\nimport { useAuth } from '../../../../services/auth-context';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport interface IFilterToolProps {\n getLangString: (value: string) => string;\n}\n\nexport const FilterTool = (props: IFilterToolProps): JSX.Element => {\n const [selectedFilters, setSelectedFilters] = useState<string[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const [settings, setSettings] = useState<ISettings>({} as ISettings);\n const [filters, setFilters] = useState<IFilter[]>([]);\n const [error, setError] = useState<string>(\"\");\n const [disableSaveBtn, setDisableSaveBtn] = useState<boolean>(false);\n\n const dispatch = useDispatch();\n const { getApiToken } = useAuth();\n\n const storeSettings = useSelector(Settings);\n const storeLoadingSettings = useSelector(SettingsLoading);\n const storeSettingErrors = useSelector(SettingsErrors);\n const storeFilters = useSelector(Filters);\n const storeLoadingFilters = useSelector(FiltersLoading);\n\n useEffect(() => {\n dispatch(getFilters());\n }, []);\n\n useEffect(() => {\n setSettings(storeSettings);\n }, [storeSettings]);\n\n useEffect(() => {\n setFilters(storeFilters);\n }, [storeFilters]);\n\n useEffect(() => {\n setSelectedFilters(settings.defaultFilters);\n }, [settings])\n\n useEffect(() => {\n if (storeLoadingFilters || storeLoadingSettings) {\n setLoading(true);\n } else {\n setLoading(false);\n }\n }, [storeLoadingFilters, storeLoadingSettings]);\n\n useEffect(() => {\n if (storeSettingErrors) {\n setError(storeSettingErrors);\n }\n }, [storeSettingErrors]);\n\n useEffect(() => {\n if (selectedFilters?.every(selectedFilter => settings.defaultFilters?.includes(selectedFilter)) &&\n settings.defaultFilters?.every(defaultFilter => selectedFilters?.includes(defaultFilter))) {\n setDisableSaveBtn(true);\n } else {\n setDisableSaveBtn(false);\n }\n }, [selectedFilters]);\n\n const handleSelecteFilter = (filter: IFilter) => {\n if (selectedFilters.find(selectedFilter => selectedFilter === filter.title)) {\n setSelectedFilters(selectedFilters.filter(selectedFilter => selectedFilter !== filter.title));\n } else {\n setSelectedFilters([...selectedFilters, filter.title]);\n }\n };\n\n const handleSaveDefaultFilters = async () => {\n const token = await getApiToken();\n const updatedSettings = { ...settings, defaultFilters: selectedFilters };\n dispatch(updateSettings(updatedSettings, token));\n };\n\n return (\n <div className=\"filter-tool-container\">\n <span className=\"filter-tool-title\">{props.getLangString('admin.filterTitle')}</span>\n <span className=\"filter-tool-text\">{props.getLangString('admin.filterSubTitle')}</span>\n {loading ?\n <div className=\"loading-filter-container\">\n <Loader getLangString={props.getLangString} />\n </div>\n :\n error ?\n <div className=\"error-tool-container\">\n <FontAwesomeIcon icon={faExclamationTriangle} className=\"error-tool-icon\" />\n <span className=\"error-tools-title\">{error}</span>\n </div>\n :\n <>\n <div className=\"filter-tool-list\">\n {filters.map((filter: IFilter, index: number) =>\n <div className=\"filter-tool-list-container\" key={index}>\n <div className=\"filter-tool-list-item\" onClick={() => handleSelecteFilter(filter)}>\n <div className={`filter-tool-list-icon ${selectedFilters?.find(selectedFilter => selectedFilter === filter.title) && \"selected\"}`}></div>\n <span className=\"filter-tool-list-text\">{filter.title}</span>\n </div>\n </div>\n )}\n </div>\n <div className=\"filter-tool-button-container\">\n <Button\n className={`filter-tool-button ${disableSaveBtn && \"disabled\"}`}\n onClick={handleSaveDefaultFilters}\n disabled={disableSaveBtn}\n >\n {props.getLangString('admin.save')}\n </Button>\n </div>\n </>\n }\n </div>\n );\n}","import axios from 'axios';\nimport { API_ROOT } from '../../Constants';\nimport { ThunkAction } from 'redux-thunk'\nimport { RootState } from '../RootReducer';\nimport { Action } from 'redux';\nimport * as SettingsActions from './ActionTypes'\nimport { ISettings } from './Settings';\n\nexport const getSettings = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n dispatch({ type: SettingsActions.GET_SETTINGS_BEGIN });\n\n const result = await axios.get(`${API_ROOT}/Setting`);\n dispatch({\n type: SettingsActions.GET_SETTINGS_SUCCESS,\n payload: result.data\n });\n } catch (error) {\n console.error(error);\n dispatch({ type: SettingsActions.GET_SETTINGS_FAILURE, payload: error })\n }\n}\n\nexport const updateSettings = (updatedSettings: ISettings, accessToken: string): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n try {\n \n dispatch({ type: SettingsActions.SET_SETTINGS_BEGIN });\n\n if (accessToken === \"\" || accessToken === undefined) {\n dispatch({ type: SettingsActions.SET_SETTINGS_FAILURE, payload: \"You do not have access to perform this action\" })\n } else {\n const headers = {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n }\n const queryString: string = JSON.stringify(updatedSettings);\n\n const result = await axios.post(`${API_ROOT}/Setting`, queryString, { headers: headers });\n\n dispatch({ type: SettingsActions.SET_SETTINGS_SUCCESS, payload: result.data });\n }\n\n } catch (error) {\n console.error(error);\n dispatch({ type: SettingsActions.SET_SETTINGS_FAILURE, payload: \"Failed to update default filters, please contact administrator\" })\n }\n} ","import React from 'react'\nimport './ThemeAdminToolbox.scss';\nimport { Grid } from '@material-ui/core';\nimport { AdminTools } from '../../store/Settings/Settings';\nimport { AdminTool } from './tools/admin/AdminTool';\nimport { FilterTool } from './tools/filter/FilterTool';\n\nexport interface IAdminToolboxProps {\n getLangString: (value: string) => string;\n}\n\nexport const AdminToolbox = (props: IAdminToolboxProps): JSX.Element => {\n const [currentTool, setCurrentTool] = React.useState<AdminTools>(AdminTools.Admin);\n\n const handleToolChange = (tool: AdminTools) => {\n setCurrentTool(tool);\n };\n\n return (\n <Grid container className=\"admin-container\">\n <Grid item xs={12} md={2}>\n <div className=\"admin-options-container\">\n <div className={`tool-option ${currentTool === AdminTools.Admin && \"selected\"}`} onClick={() => handleToolChange(AdminTools.Admin)}>\n {props.getLangString('admin.admin')}\n </div>\n <div className={`tool-option ${currentTool === AdminTools.Filter && \"selected\"}`} onClick={() => handleToolChange(AdminTools.Filter)}>\n {props.getLangString('admin.filter')}\n </div>\n </div>\n </Grid>\n <Grid item xs={12} md={10}>\n <div className=\"admin-view-container\">\n {currentTool === AdminTools.Admin &&\n <AdminTool getLangString={props.getLangString} />\n }\n {currentTool === AdminTools.Filter &&\n <FilterTool getLangString={props.getLangString} />\n }\n </div>\n </Grid>\n </Grid>\n )\n}\n","import { Home } from '../../pages/Home';\nimport { Events } from '../../pages/Events';\nimport { Event } from '../../pages/Event';\nimport { ViewReport } from '../../pages/ViewReport';\nimport { About } from '../../pages/About';\nimport { Admin } from '../../pages/Admin';\n\n\nconst paths = [\n { path: \"/\", name: \"topNavigation.liveMap\", Component: Home },\n { path: \"/events\", name: \"topNavigation.whatHappensInRonneby\", Component: Events },\n { path: \"/events/:id/:start\", name: \"\", Component: Event },\n { path: \"/live/report/:id\", name: \"\", Component: ViewReport },\n { path: \"/about\", name: \"topNavigation.aboutRonneby\", Component: About },\n { path: \"/admin\", name: \"Admin\", Component: Admin },\n];\n\nexport default paths;","import React from \"react\";\nimport { GoogleMaps } from '../components/map/google/GoogleMaps';\nimport { MapFilter } from '../components/map/filter/MapFilter';\nimport { Live } from '../components/common/live/Live';\n\nexport interface IHomeProps {\n getLangString: (value: string) => string;\n}\n\nexport const Home = (props: IHomeProps) : JSX.Element => {\n return (\n <React.Fragment>\n <Live getLangString={props.getLangString}/>\n <GoogleMaps getLangString={props.getLangString}/>\n <MapFilter getLangString={props.getLangString}/>\n </React.Fragment>\n );\n};","import React from 'react';\nimport { Container } from '@material-ui/core';\nimport { EventList } from '../components/event/EventList'\n\nexport interface IEventsProps{\n getLangString: (value: string) => string;\n}\n\nexport const Events = (props: IEventsProps) : JSX.Element => {\n return (\n <Container role=\"main\">\n <EventList getLangString={props.getLangString}/>\n </Container>\n );\n};","import React from 'react';\nimport { Container } from '@material-ui/core';\nimport { EventDetails } from '../components/event/EventDetails'\n\nexport interface IEventProps{\n getLangString: (value: string) => string;\n}\n\nexport const Event = (props: IEventProps) : JSX.Element => {\n return (\n <Container role=\"main\">\n <EventDetails getLangString={props.getLangString}/>\n </Container>\n );\n};","import { Grid, Container } from '@material-ui/core';\nimport React from 'react';\nimport { Report } from '../components/tableau/Report';\n\nexport const ViewReport = () : JSX.Element => {\n return (\n <Container>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <Report />\n </Grid>\n </Grid>\n </Container>\n );\n}","import React from 'react';\nimport { Container } from '@material-ui/core';\nimport { AboutLive } from '../components/about/AboutLive';\n\nexport const About = (): JSX.Element => {\n return (\n <Container role=\"main\">\n <AboutLive />\n </Container>\n );\n};","import React, { useEffect } from 'react';\nimport { Container } from '@material-ui/core';\nimport { AdminToolbox } from '../components/admin/AdminToolbox';\nimport './ThemeAdmin.scss';\nimport { useAuth } from '../services/auth-context';\nimport { Loader } from '../components/common/loader/Loader';\n\nexport interface IAdminProps {\n getLangString: (value: string) => string;\n}\n\nexport const Admin = (props: IAdminProps): JSX.Element => {\n const { user, refreshTokensAndUserInfo } = useAuth();\n\n useEffect(() => {\n refreshTokensAndUserInfo();\n }, []);\n\n return (\n user == null ?\n <Loader getLangString={props.getLangString} />\n :\n user?.aadAccess ?\n <Container role=\"main\">\n <AdminToolbox getLangString={props.getLangString} />\n </Container>\n :\n <div className=\"no-access-wrapper\">\n <span className=\"no-access-title\">{props.getLangString('admin.noAccessTitle')}</span>\n <span className=\"no-access-description\">{props.getLangString('admin.noAccessDescription')}</span>\n </div>\n );\n};","import { RootState } from \"../RootReducer\";\n\nexport const Title = (state: RootState): string => state.breadcrumbs.title;\n","\nimport React from \"react\";\nimport { useTranslation } from 'react-i18next';\nimport { Link } from \"react-router-dom\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons'\nimport './ThemeBreadcrumbs.scss';\nimport { Container } from \"@material-ui/core\";\nimport { useSelector } from \"react-redux\";\nimport { Title } from '../../store/Breadcrumbs/Selector';\n\n\nexport interface IBreadcrumbsProps {\n breadcrumbs: IBreadCrumb[];\n}\n\nexport interface IBreadCrumb {\n path: string;\n name: string;\n}\n\nexport const Breadcrumbs = (props: IBreadcrumbsProps): JSX.Element | null => {\n const title = useSelector(Title);\n const { t } = useTranslation('common');\n if (props.breadcrumbs.length <= 1) {\n return null;\n }\n\n return (\n <Container>\n <div className=\"breadcrumbs-wrapper\" role=\"complementary\">\n {props.breadcrumbs.map(({ name, path }: IBreadCrumb, key: number) =>\n key + 1 === props.breadcrumbs.length ? (\n <span key={key} className=\"breadcrumb-last\">\n {title ? title : t(name)}\n </span>\n ) : (\n <React.Fragment key={key}>\n <Link className=\"breadcrumbs-link\" to={path}>\n {t(name)}\n </Link>\n\n <FontAwesomeIcon\n icon={faChevronRight}\n className=\"breadcrumbs-icon\"\n size=\"xs\"\n />\n </React.Fragment>\n )\n )}\n </div>\n </Container>\n )\n}\n\nexport default Breadcrumbs;","import React, { KeyboardEvent } from \"react\";\nimport { ICategory } from \"../../../store/Events/Event\";\n\ninterface ICategoryFilterItemProps {\n category: ICategory;\n active: boolean;\n onClick: (category: ICategory) => void;\n}\n\nexport const CategoryFilterItem = (props: ICategoryFilterItemProps): JSX.Element => {\n const onKeyUp = (e: KeyboardEvent<HTMLInputElement>, c: ICategory) => {\n if (e.keyCode === 13) {\n props.onClick(c);\n }\n }\n\n return (\n <div\n tabIndex={0}\n className={`category-picker-item ${props.active ? 'active' : ''} `}\n onClick={() => props.onClick(props.category)}\n onKeyUp={(event: KeyboardEvent<HTMLInputElement>) => onKeyUp(event, props.category)}\n >\n {props.category.title}\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { ICategory } from '../../../store/Events/Event';\nimport { Button } from '@material-ui/core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\nimport { CategoryFilterItem } from './CategoryFilterItem';\nimport useDeviceDetect from '../../../utils/hooks/DeviceDetect';\n\nexport interface ICategoryFilterProps {\n categories: ICategory[];\n selectedCategories?: ICategory[];\n onChangeCategory: (categories: ICategory[]) => void;\n getLangString: (value: string) => string;\n}\n\nexport const CategoryFilter = (props: ICategoryFilterProps): JSX.Element => {\n const [selectedCategories, setSelectedCategories] = useState<ICategory[]>(props.selectedCategories ?? []);\n const [menuOpen, setMenuOpen] = useState(false);\n const refCategoryFilter = useRef<HTMLDivElement>(null);\n const { isMobile } = useDeviceDetect();\n\n const handleClickFilter = (categories: ICategory[]) => {\n props.onChangeCategory(categories); \n }\n\n const handleClickItem = (category: ICategory) => {\n if (selectedCategories.some(c => c.id === category.id)) {\n setSelectedCategories(selectedCategories.filter(c => c.id !== category.id));\n } else {\n setSelectedCategories(selectedCategories.concat([category]));\n }\n \n }\n useEffect(()=>{\n handleClickFilter(selectedCategories);\n }, [selectedCategories]);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleClickRef = (e: { target: any }) => {\n if (refCategoryFilter.current && !refCategoryFilter.current?.contains(e.target)) {\n setMenuOpen(false);\n }\n }\n useEffect(() => {\n setSelectedCategories(props.selectedCategories ?? []);\n }, [props.selectedCategories]);\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickRef);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickRef);\n };\n }, []);\n\n return (\n <div ref={refCategoryFilter} className={`select category ${menuOpen ? 'open' : 'closed'}`}>\n <Button onClick={() => setMenuOpen(!menuOpen)}>\n {(isMobile || menuOpen || (selectedCategories && selectedCategories.length === 0)) ?\n props.getLangString('event.filter.selectCategories') :\n (!isMobile && selectedCategories && selectedCategories.length === 1) ?\n selectedCategories[0].title :\n selectedCategories?.length + props.getLangString('event.filter.categoriesPicked')\n }\n\n <FontAwesomeIcon icon={faChevronDown} className={`chevron-down ${menuOpen ? 'open' : ''}`} />\n </Button>\n {menuOpen &&\n <React.Fragment>\n <hr className=\"solid\" />\n {props.categories && props.categories.map((c: ICategory, i: number) => (\n <CategoryFilterItem\n key={i}\n category={c}\n active={selectedCategories.some(cat => cat.id === c.id) ? true : false}\n onClick={(category) => handleClickItem(category)}\n />\n ))}\n\n \n </React.Fragment>\n }\n </div>\n );\n}\n","import React from 'react';\nimport AdapterDateFns from '@material-ui/lab/AdapterDateFns';\nimport LocalizaitonProvider from '@material-ui/lab/LocalizationProvider';\nimport svLocale from 'date-fns/locale/sv';\nimport { PickersDay, DayPicker } from '@material-ui/lab';\nimport './ThemeDatePicker.scss';\nimport { Grid } from '@material-ui/core';\n\nexport interface IDatePickerProps {\n getLangString: (value: string) => string;\n date: Date | null;\n setDate: (selectedValue: Date | null) => void;\n}\n\nexport const DatePicker = (props: IDatePickerProps): JSX.Element => {\n const { setDate } = props;\n\n return (\n <Grid container direction=\"row\" justifyContent=\"flex-start\" alignItems=\"flex-start\">\n <Grid item xs={12}>\n <LocalizaitonProvider dateAdapter={AdapterDateFns} locale={svLocale}>\n <DayPicker\n reduceAnimations={true}\n allowKeyboardControl={false}\n date={props.date}\n onChange={(newDate) => setDate(newDate)}\n onYearChange={(newDate) => setDate(newDate)}\n disablePast={true}\n renderDay={(day, higlightedDays, DayComponentProps) => {\n const outDated = !DayComponentProps.outsideCurrentMonth && day < new Date();\n return (\n <React.Fragment key={day.getDate()}>\n <PickersDay aria-label={`${props.getLangString('event.selectDate')} ${day.getDate()}`} {...DayComponentProps} className={outDated ? 'outdated' : ''} />\n </React.Fragment>\n );\n }}\n />\n </LocalizaitonProvider>\n </Grid>\n </Grid>\n )\n}","import React, { useEffect, useRef, useState } from 'react';\nimport { DatePicker } from '../../common/datepicker/DatePicker';\nimport { Button } from \"@material-ui/core\";\nimport { faChevronDown } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport interface IDateFilterProps {\n date: Date;\n selectedDate?: Date;\n onChangeDate: (date: Date | null) => void;\n getLangString: (value: string) => string;\n}\n\nexport const DateFilter = (props: IDateFilterProps): JSX.Element => {\n const [selectedDate, setSelectedDate] = useState<Date | null>(props.selectedDate ?? null);\n const [menuOpen, setMenuOpen] = useState(false);\n const refDateFilter = useRef<HTMLDivElement>(null);\n\n const handleClickDate = (date: Date | null) => {\n setSelectedDate(date);\n props.onChangeDate(date);\n setMenuOpen(false)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleClickRef = (e: { target: any }) => {\n if (refDateFilter.current && !refDateFilter.current?.contains(e.target)) {\n setMenuOpen(false);\n }\n }\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickRef);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickRef);\n };\n }, []);\n\n return (\n <div ref={refDateFilter} className={`select date ${menuOpen ? 'open' : 'closed'}`}>\n <Button onClick={() => setMenuOpen(!menuOpen)}>\n \n {!menuOpen && selectedDate ?\n selectedDate.toLocaleDateString('sv-SE', { day: 'numeric', month: 'long', year: 'numeric' })\n :\n props.getLangString('event.filter.showToDate')\n }\n {!menuOpen && <FontAwesomeIcon icon={faChevronDown} className=\"chevron-down\" />}\n </Button>\n {menuOpen &&\n <React.Fragment>\n <hr className=\"solid\" />\n <DatePicker\n getLangString={props.getLangString}\n date={selectedDate}\n setDate={handleClickDate}\n />\n\n <div className=\"filter-btn-container\">\n <Button onClick={() => handleClickDate(null)} className=\"filter-btn border-btn\">\n {props.getLangString('event.filter.cleanDateFilter')}\n </Button>\n </div>\n </React.Fragment>\n }\n </div>\n );\n}\n","import React, { KeyboardEvent, useState } from \"react\";\nimport { faSearch } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Grid, TextField, Button } from \"@material-ui/core\";\n\ninterface ISearchProps {\n filterText?: string;\n onChangeText: (filterText: string) => void;\n getLangString: (value: string) => string;\n}\n\nexport const SearchBar = (props: ISearchProps): JSX.Element => {\n const [filterText, setFilterText] = useState(props.filterText ?? '');\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n props.onChangeText(filterText);\n }\n }\n\n return (\n <Grid container direction=\"row\">\n <Grid item xs={12} className=\"search-item\">\n <div className=\"select search-field\">\n <FontAwesomeIcon icon={faSearch} className=\"search-icon\" />\n <TextField\n className=\"search-input\"\n value={filterText}\n onChange={(event) => setFilterText(event?.target.value)}\n onKeyUp={onKeyUp}\n />\n </div>\n <Button className=\"primary-btn search-btn\" onClick={() => props.onChangeText(filterText)}>\n {props.getLangString('event.filter.search')}\n </Button>\n </Grid>\n </Grid>\n );\n}\n","import React from \"react\";\n\nexport interface IFilterItemProps {\n title: string;\n id: string;\n onDelete: (id: string) => void;\n}\n\nexport const FilterItem = (props: IFilterItemProps): JSX.Element => {\n return (\n <div className=\"filter-item\">\n {props.title}\n <span className=\"delete\" onClick={() => props.onDelete(props.id)}> x </span>\n </div>\n )\n};","import React, { useCallback, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { CategoryFilter } from './filters/CategoryFilter';\nimport { DateFilter } from './filters/DateFilter';\nimport { SearchBar } from './filters/SearchBar';\nimport { Button, Grid, Hidden, Paper } from \"@material-ui/core\";\nimport { Categories, Events } from \"../../store/Events/Selector\";\nimport { ICategory, IEvent } from \"../../store/Events/Event\";\nimport { setFilteredEvents } from \"../../store/Events/Actions\";\nimport useDeviceDetect from '../../utils/hooks/DeviceDetect';\nimport { faSortAmountDownAlt, faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { FilterItem } from './filters/FilterItem';\nimport './ThemeEventFilter.scss';\nimport { EventsPageFilters } from \"../../store/Events/Selector\";\nimport { setEventsPageFilters } from \"../../store/Events/Actions\";\n\nexport interface IEventFilterProps {\n getLangString: (value: string) => string;\n}\n\nexport const EventFilter = (props: IEventFilterProps): JSX.Element => {\n const eventsPageFilters = useSelector(EventsPageFilters);\n const categories = useSelector(Categories);\n const events = useSelector(Events);\n const [filterText, setFilterText] = useState(eventsPageFilters?.text ?? '');\n const [selectedDate, setSelectedDate] = useState<Date | null>(eventsPageFilters?.date ?? null);\n const [selectedCategories, setSelectedCategories] = useState<ICategory[]>(eventsPageFilters?.categories ?? []);\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const { isMobile } = useDeviceDetect();\n const dispatch = useDispatch();\n\n const search = useCallback(() => {\n\n const handleTextFilter = (eventsToFilter: IEvent[]) => {\n return eventsToFilter.filter((event) => JSON.stringify(event).toLowerCase().includes(filterText.toLowerCase()));\n }\n\n const handleCategoryFilter = (eventsToFilter: IEvent[]) => {\n return eventsToFilter.filter((event: IEvent) => {\n return event.categories.some((eCategory: ICategory) => {\n return selectedCategories.some((category: ICategory) => {\n return eCategory.id === category.id;\n });\n });\n });\n }\n\n const handleDateFilter = (eventsToFilter: IEvent[]) => {\n if (!selectedDate) {\n return eventsToFilter;\n }\n return eventsToFilter.filter((event) => new Date(event.start).setHours(0, 0, 0, 0) <= selectedDate.setHours(0, 0, 0, 0));\n }\n\n let eventsToFilter: IEvent[] = events;\n\n if (filterText.length > 0) {\n eventsToFilter = handleTextFilter(eventsToFilter);\n }\n if (selectedCategories.length > 0) {\n eventsToFilter = handleCategoryFilter(eventsToFilter);\n }\n if (selectedDate) {\n eventsToFilter = handleDateFilter(eventsToFilter);\n }\n\n if (eventsPageFilters?.date !== selectedDate || eventsPageFilters?.categories !== selectedCategories || eventsPageFilters?.text !== filterText) {\n dispatch(setEventsPageFilters({ date: selectedDate ?? undefined, categories: selectedCategories, text: filterText }));\n }\n dispatch(setFilteredEvents(eventsToFilter));\n\n }, [dispatch, events, filterText, selectedCategories, selectedDate, isMobile, eventsPageFilters])\n\n const searchOnMobile = () => {\n search();\n setMobileMenuOpen(false);\n window.scrollTo({ top: 0 });\n }\n\n useEffect(() => {\n if (!isMobile) {\n search();\n }\n }, [isMobile, selectedCategories, selectedDate])\n\n useEffect(() => {\n search();\n }, [events, filterText])\n\n return (\n <React.Fragment>\n <Hidden mdDown>\n <Paper className=\"event-filter\">\n <Grid container direction=\"row\">\n <Grid item xs={8} lg={7} xl={6} className=\"select-container\">\n <DateFilter date={new Date()} selectedDate={selectedDate ?? undefined} onChangeDate={setSelectedDate} getLangString={props.getLangString} />\n <CategoryFilter categories={categories} selectedCategories={selectedCategories} onChangeCategory={setSelectedCategories} getLangString={props.getLangString} />\n </Grid>\n <Grid item xs={4} lg={5} xl={6} className=\"search-container\">\n <SearchBar filterText={filterText} onChangeText={setFilterText} getLangString={props.getLangString} />\n </Grid>\n </Grid>\n </Paper >\n </Hidden>\n\n <Hidden mdUp>\n <Paper className=\"event-filter\">\n {mobileMenuOpen &&\n <div className=\"overlay\">\n <div className=\"filter-menu-container\">\n <Grid container className=\"filter-menu\">\n <Grid item xs={12} className=\"select-container\">\n <DateFilter date={new Date()} selectedDate={selectedDate ?? undefined} onChangeDate={setSelectedDate} getLangString={props.getLangString} />\n <CategoryFilter categories={categories} selectedCategories={selectedCategories} onChangeCategory={setSelectedCategories} getLangString={props.getLangString} />\n\n <div className=\"picked-categories\">\n {selectedCategories && selectedCategories.map((category: ICategory, index: number) =>\n <FilterItem key={index} title={category.title} id={category.id} onDelete={(id) => setSelectedCategories(selectedCategories.filter(c => c.id !== id))} />\n )}\n </div>\n </Grid>\n <Grid item xs={12} className=\"filter-btn-container\">\n <Button onClick={() => searchOnMobile()} className=\"filter-menu-btn filter-btn primary-btn\">{props.getLangString('event.filter.searchWithFilter')}</Button>\n </Grid>\n </Grid>\n </div>\n </div>\n }\n\n <div className=\"search-container\">\n <SearchBar filterText={filterText} onChangeText={setFilterText} getLangString={props.getLangString} />\n </div>\n\n <div className=\"filter-btn-container\">\n {mobileMenuOpen ?\n <Button className=\"filter-btn icon-btn\" onClick={() => setMobileMenuOpen(!mobileMenuOpen)}>\n <FontAwesomeIcon icon={faTimes} className=\"icon\" />\n <span> {props.getLangString('event.filter.hideFilter')} </span>\n </Button >\n :\n <Button className=\"filter-btn icon-btn\" onClick={() => setMobileMenuOpen(!mobileMenuOpen)}>\n <FontAwesomeIcon icon={faSortAmountDownAlt} className=\"icon\" />\n <span> {props.getLangString('event.filter.showFilter')} </span>\n </Button >\n }\n </div>\n </Paper>\n </Hidden>\n </React.Fragment>\n );\n}","import React from 'react';\nimport './ThemeError.scss';\nimport { Button, Container } from '@material-ui/core';\n\ninterface IErrorBannerProps {\n getLangString: (value: string) => string;\n errorMessage: string;\n}\n\nconst ErrorBanner = (props: IErrorBannerProps): JSX.Element => {\n\n return (\n <div className=\"overlay\">\n <Container className=\"error-banner\">\n {props.errorMessage === \"Network Error\" ?\n <React.Fragment>\n <h1>{props.getLangString('errorHandling.networkError')}</h1>\n <h4> {props.getLangString('errorHandling.tryAgain')} </h4>\n </React.Fragment>\n :\n <React.Fragment>\n <h1>{props.getLangString('errorHandling.error')}</h1>\n <h4> {props.getLangString('errorHandling.noContact')} </h4>\n </React.Fragment>\n }\n <Button href=\"/\" className=\"back-button\">\n <span> {props.getLangString('errorHandling.reloadStartPage')} </span>\n </Button >\n </Container>\n </div>\n )\n}\n\nexport default ErrorBanner;","import { RootState } from \"../RootReducer\";\nimport { IErrorSummary } from \"./ActionTypes\";\n\nexport const Error = (state: RootState): IErrorSummary => state.appState.errorSummary;\n","/* eslint-disable react/prop-types */\nimport React, { Suspense, useEffect } from 'react';\nimport './style/ThemeApp.scss';\nimport { TopNavigation } from './components/navigation/TopNavigation';\nimport { NotFound } from './pages/NotFound';\nimport { InternetExplorer } from './pages/InternetExplorer';\nimport routes from './components/navigation/routes';\nimport { Breadcrumbs } from './components/navigation/Breadcrumbs';\nimport { Switch, Route, useLocation } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport ReactGA from 'react-ga4';\nimport { Hidden } from '@material-ui/core';\nimport { EventFilter } from './components/event/EventFilter';\nimport { isIE } from 'react-device-detect';\nimport ErrorBanner from './components/error/ErrorBanner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getSettings } from './store/Settings/Actions';\nimport { Error } from './store/AppState/Selector';\nimport { GOOGLE_ANALYTICS_KEY, COOKIE_URL } from './Constants';\nimport CookieConsent from 'react-cookie-consent';\n\nfunction App(): JSX.Element {\n const { t } = useTranslation('common');\n const location = useLocation();\n const error = useSelector(Error);\n\n useEffect(() => {\n ReactGA.initialize(GOOGLE_ANALYTICS_KEY);\n }, []);\n\n useEffect(() => {\n ReactGA.send({ hitType: \"pageview\", page: location.pathname, title: `Viewed page: ${location.pathname}` });\n }, [location]);\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(getSettings());\n }, [dispatch]);\n\n useEffect(() => {\n const pageTitle = t('global.pageTitle');\n const pageDescription = t('global.pageDescription');\n console.log('Setting page title and description', pageTitle, pageDescription);\n\n document.title = pageTitle;\n document.querySelector('meta[name=\"title\"]')?.setAttribute('content', `${pageTitle}`);\n document.querySelector('meta[name=\"description\"]')?.setAttribute('content', `${pageDescription}`);\n document.querySelector('meta[property=\"og:title\"]')?.setAttribute('content', `${pageTitle}`);\n document.querySelector('meta[property=\"og:description\"]')?.setAttribute('content', `${pageDescription}`);\n document.querySelector('meta[property=\"twitter:title\"]')?.setAttribute('content', `${pageTitle}`);\n document.querySelector('meta[property=\"twitter:description\"]')?.setAttribute('content', `${pageDescription}`);\n document.querySelector('meta[name=\"apple-mobile-web-app-title\"]')?.setAttribute('content', `${pageTitle}`);\n }, []);\n\n return (\n <div>\n <Suspense fallback={<div>{t('global.loading')}</div>}>\n <TopNavigation getLangString={t} />\n {isIE ? (\n <InternetExplorer />\n ) : (\n <Switch>\n {routes.map(({ path, Component }, key) => (\n <Route\n exact\n path={path}\n key={key}\n render={props => {\n const crumbs = routes\n .filter(({ path }) => props.match.path.includes(path))\n .map(({ path, name }) => ({\n path: Object.keys(props.match.params).length\n ? Object.keys(props.match.params).reduce(\n (path, param) => path.replace(`:${param}`, props.match.params[param]),\n path\n )\n : path,\n name,\n }));\n return (\n <React.Fragment>\n <CookieConsent\n location=\"bottom\"\n buttonText={t('cookies.cookieApproval')}\n expires={30}\n containerClasses=\"cookie-consent-container\"\n buttonClasses=\"cookie-consent-button\"\n >\n <span>{t('cookies.useOfCookies')} </span>\n <a className=\"cookie-consent-link\" href={COOKIE_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n {t('cookies.aboutCookies')}\n </a>\n </CookieConsent>\n {error.isError && <ErrorBanner getLangString={t} errorMessage={error.errorMessage} />}\n {path === '/events' ? (\n <React.Fragment>\n <Hidden mdDown>\n <EventFilter getLangString={t} />\n </Hidden>\n <Breadcrumbs breadcrumbs={crumbs} />\n <Hidden mdUp>\n <EventFilter getLangString={t} />\n </Hidden>\n </React.Fragment>\n ) : (\n <Breadcrumbs breadcrumbs={crumbs} />\n )}\n <Component getLangString={t} />\n </React.Fragment>\n );\n }}\n />\n ))}\n <Route>\n <NotFound getLangString={t} />\n </Route>\n </Switch>\n )}\n </Suspense>\n </div>\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config): void {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n process.env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n // Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n if (isLocalhost) {\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister(): void {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import { IAppState, AppStateActionTypes, SET_ERROR, SET_ERROR_FAILURE, CLEAR_ERROR, CLEAR_ERROR_FAILURE } from \"./ActionTypes\";\n\nconst initialState: IAppState = {\n errorSummary: {\n isError: false,\n errorMessage: '',\n errors: []\n }\n};\n\nconst appStateReducer = (state = initialState, action: AppStateActionTypes): IAppState => {\n switch (action.type) {\n case SET_ERROR:\n return {\n ...state,\n errorSummary: {\n isError: true,\n errorMessage: action.payload.errorMessage,\n errors: [...state.errorSummary.errors, action.payload.error]\n }\n }\n\n case SET_ERROR_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n\n case CLEAR_ERROR:\n return {\n ...state,\n errorSummary: {\n isError: false,\n errorMessage: '',\n errors: [...state.errorSummary.errors]\n }\n }\n\n case CLEAR_ERROR_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n\n default:\n return state;\n }\n}\n\nexport default appStateReducer;","import {\n IMarkerState,\n MarkerActionTypes,\n GET_MARKERS_BEGIN,\n GET_MARKERS_FAILURE,\n GET_MARKERS_SUCCESS,\n SIGNALR_CONNECTING,\n SIGNALR_CONNECTED,\n SIGNALR_DISCONNECTED,\n SIGNALR_FAILURE,\n SIGNALR_MARKER_UPDATED,\n SET_MARKER_DIALOG_OPEN,\n SET_MARKER_INDEX_DIALOG_OPEN,\n UPDATE_POLYLINES,\n UPDATE_POLYLINES_FAILURE,\n CLEAN_POLYLINES,\n CLICKED_ON_POLYLINE,\n SET_SHOW_ALL_LIVE_MARKERS\n} from './ActionTypes';\nimport { IMarker } from './Marker';\n\n\n\nconst initialState: IMarkerState = {\n markersList: [],\n polylines: [],\n loading: false,\n connected: false,\n clickedOnPolyline: false,\n showAllLiveMarkers: false,\n}\n\nconst markerReducer = (state = initialState, action: MarkerActionTypes): IMarkerState => {\n switch (action.type) {\n case GET_MARKERS_BEGIN:\n return {\n ...state,\n loading: true\n };\n case GET_MARKERS_SUCCESS:\n return {\n ...state,\n markersList: action.payload,\n loading: false\n }\n case GET_MARKERS_FAILURE:\n return {\n ...state,\n loading: false,\n error: action.payload\n }\n case SIGNALR_CONNECTING:\n return {\n ...state,\n connected: false\n }\n case SIGNALR_CONNECTED:\n return {\n ...state,\n connected: true\n }\n case SIGNALR_DISCONNECTED:\n return {\n ...state,\n connected: false\n }\n case SIGNALR_FAILURE:\n return {\n ...state,\n connected: false,\n error: action.payload\n }\n case SIGNALR_MARKER_UPDATED:\n // Check if the marker exists in the array or not\n console.log('MARKERS UPDATED', action.payload);\n\n if (state.markersList === null) {\n return {\n ...state,\n markersList: action.payload\n }\n } else {\n let newMarkers = [ ...state.markersList ];\n \n action.payload?.forEach((marker: IMarker) => {\n if (state.markersList?.some(e => e.id === marker.id)) {\n console.log('Found the maker in the array..');\n \n // The item is in the array, check if this is a delete, we are using \n // soft deleted in the backend, but we remove the item in the store\n if (marker.deleted) {\n console.log('The marker from back-end was deleted, removing marker');\n newMarkers = newMarkers?.filter(m => m.id !== marker.id)\n } else {\n newMarkers = newMarkers?.map((m) => {\n if (marker.id !== m.id) {\n return m;\n }\n return {\n ...m,\n ...marker\n }\n })\n }\n } else {\n console.log('Marker not found in the array, adding .. ');\n newMarkers = [...newMarkers, marker]\n }\n });\n\n return {\n ...state,\n markersList: newMarkers\n }\n }\n case UPDATE_POLYLINES: \n return {\n ...state,\n polylines: action.payload\n }\n case UPDATE_POLYLINES_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n case CLEAN_POLYLINES:\n return {\n ...state,\n polylines: []\n }\n case CLICKED_ON_POLYLINE:\n return {\n ...state,\n clickedOnPolyline: action.payload\n }\n case SET_MARKER_DIALOG_OPEN:\n return {\n ...state,\n markerWithDialogOpen: action.payload\n }\n case SET_MARKER_INDEX_DIALOG_OPEN:\n return {\n ...state,\n markerIndexWithDialogOpen: action.payload\n }\n case SET_SHOW_ALL_LIVE_MARKERS:\n return {\n ...state,\n showAllLiveMarkers: action.payload\n }\n default:\n return state;\n }\n}\n\nexport default markerReducer;\n","import {\n CLEAR_EVENTS_PAGE_FILTERS, CLEAR_EVENTS_PAGE_FILTERS_FAILURE, EventActionTypes, GET_EVENTS_BEGIN, GET_EVENTS_FAILURE, GET_EVENTS_SUCCESS,\n IEventState, SET_EVENTS_PAGE_FILTERS, SET_EVENTS_PAGE_FILTERS_FAILURE, SET_EVENTS_PAGE_SCROLL_POSITION, SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE,\n SET_FILTERED_EVENTS, SET_FILTERED_EVENTS_FAILURE\n} from './ActionTypes';\n\nconst initialState: IEventState = {\n eventList: [],\n filteredEventList: [],\n categoryList: [],\n loading: false,\n eventsPageState: {\n scrollPosition: 0\n }\n};\n\nconst eventReducer = (state = initialState, action: EventActionTypes): IEventState => {\n switch (action.type) {\n case GET_EVENTS_BEGIN:\n return {\n ...state,\n loading: true\n };\n\n case GET_EVENTS_SUCCESS:\n return {\n ...state,\n loading: false,\n eventList: action.payload.events,\n categoryList: action.payload.categories\n }\n\n case GET_EVENTS_FAILURE:\n return {\n ...state,\n loading: false,\n error: action.payload\n }\n\n case SET_FILTERED_EVENTS:\n return {\n ...state,\n filteredEventList: action.payload\n }\n\n case SET_FILTERED_EVENTS_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n case SET_EVENTS_PAGE_SCROLL_POSITION:\n return {\n ...state,\n eventsPageState: { ...state.eventsPageState, scrollPosition: action.payload }\n }\n\n case SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n\n case SET_EVENTS_PAGE_FILTERS:\n return {\n ...state,\n eventsPageState: {\n ...state.eventsPageState,\n filters: {\n date: action.payload.date,\n categories: action.payload.categories,\n text: action.payload.text\n }\n }\n }\n\n case SET_EVENTS_PAGE_FILTERS_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n\n case CLEAR_EVENTS_PAGE_FILTERS:\n return {\n ...state,\n eventsPageState: {\n ...state.eventsPageState,\n filters: undefined\n }\n }\n\n case CLEAR_EVENTS_PAGE_FILTERS_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n default:\n return state;\n }\n}\n\nexport default eventReducer;","import { FilterActionTypes, GET_FILTERS_BEGIN, GET_FILTERS_SUCCESS, GET_FILTERS_FAILURE, UPDATE_SELECTED_FILTERS, UPDATE_SELECTED_FILTERS_FAILURE, CLEAN_SELECTED_FILTERS, IFilterState, SET_SELECTED_FILTER_TITLE } from './ActionTypes';\n\nconst initialState: IFilterState = {\n filterList: [],\n loading: false,\n selectedFilters: [],\n};\n\nconst filterReducer = (state = initialState, action: FilterActionTypes) : IFilterState => {\n switch (action.type) {\n case GET_FILTERS_BEGIN:\n return {\n ...state,\n loading: true\n };\n\n case GET_FILTERS_SUCCESS:\n return {\n ...state,\n loading: false,\n filterList: action.payload\n }\n\n case GET_FILTERS_FAILURE:\n return {\n ...state,\n loading: false,\n error: action.payload\n }\n\n case UPDATE_SELECTED_FILTERS: \n return {\n ...state,\n selectedFilters: action.payload\n }\n \n case UPDATE_SELECTED_FILTERS_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n\n case CLEAN_SELECTED_FILTERS:\n return {\n ...state,\n selectedFilters: []\n }\n case SET_SELECTED_FILTER_TITLE:\n return {\n ...state,\n selectedFilterTitle: action.payload\n }\n default:\n return state;\n }\n}\n\nexport default filterReducer;","import { SettingsActionTypes, GET_SETTINGS_BEGIN, GET_SETTINGS_FAILURE, GET_SETTINGS_SUCCESS, ISettingsState, SET_SETTINGS_BEGIN, SET_SETTINGS_SUCCESS, SET_SETTINGS_FAILURE } from './ActionTypes';\n\nconst initialState: ISettingsState = {\n defaultFilters: [],\n defaultEventCategories: [],\n markerIsLiveHours: 0,\n loading: false,\n};\n\nconst settingsReducer = (state = initialState, action: SettingsActionTypes): ISettingsState => {\n switch (action.type) {\n case GET_SETTINGS_BEGIN:\n return {\n ...state,\n loading: true\n };\n\n case GET_SETTINGS_SUCCESS:\n return {\n ...state,\n loading: false,\n defaultFilters: action.payload.defaultFilters,\n defaultEventCategories: action.payload.defaultEventCategories,\n markerIsLiveHours: action.payload.markerIsLiveHours\n }\n\n case GET_SETTINGS_FAILURE:\n return {\n ...state,\n loading: false,\n error: action.payload\n }\n case SET_SETTINGS_BEGIN:\n return {\n ...state,\n loading: true\n }\n case SET_SETTINGS_SUCCESS:\n return {\n ...state,\n loading: false,\n defaultFilters: action.payload.defaultFilters,\n defaultEventCategories: action.payload.defaultEventCategories,\n markerIsLiveHours: action.payload.markerIsLiveHours,\n }\n case SET_SETTINGS_FAILURE:\n return {\n ...state,\n loading: false,\n error: action.payload,\n }\n default:\n return state;\n }\n}\n\nexport default settingsReducer;\n","import { IBreadcrumbs, BreadcrumbsActionTypes, SET_TITLE, SET_TITLE_FAILURE, CLEAR_TITLE, CLEAR_TITLE_FAILURE } from \"./ActionTypes\";\n\nconst initialState: IBreadcrumbs = {\n title: ''\n};\n\nconst breadcrumbsReducer = (state = initialState, action: BreadcrumbsActionTypes): IBreadcrumbs => {\n switch (action.type) {\n case SET_TITLE:\n return {\n ...state,\n title: action.payload\n }\n\n case SET_TITLE_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n\n case CLEAR_TITLE:\n return {\n ...state,\n title: \"\"\n }\n\n case CLEAR_TITLE_FAILURE:\n return {\n ...state,\n error: action.payload\n }\n default:\n return state;\n }\n}\n\nexport default breadcrumbsReducer;","import { combineReducers } from 'redux'\nimport appStateReducer from './AppState/Reducer'\nimport markerReducer from './Markers/Reducer'\nimport eventsReducer from './Events/Reducer'\nimport filterReducer from './Filters/Reducer'\nimport settingsReducer from './Settings/Reducer'\nimport breadcrumbsReducer from './Breadcrumbs/Reducer'\n\n\nconst reducer = combineReducers({\n appState: appStateReducer,\n markers: markerReducer,\n events: eventsReducer,\n filters: filterReducer,\n settings: settingsReducer,\n breadcrumbs: breadcrumbsReducer\n});\n\nexport default reducer;\n\nexport type RootState = ReturnType<typeof reducer>\n","import { applyMiddleware, createStore } from \"redux\";\nimport reducer from \"./RootReducer\";\nimport thunk from 'redux-thunk';\nimport { createLogger } from 'redux-logger'\n\nimport { composeWithDevTools } from 'redux-devtools-extension';\n\nconst logger = createLogger({\n collapsed: true\n});\n\nconst Store = createStore(reducer, undefined, composeWithDevTools(applyMiddleware(thunk, logger)));\n\nexport default Store;","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport Backend from 'i18next-http-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport common_se_ronneby from './translations/se/commonRonneby.json';\nimport common_se_olofstrom from './translations/se/commonOlofstrom.json';\nimport { THEME_KEY } from './Constants';\n\nconst languages = ['se'];\nconst selectedlang = 'se';\nconst common_se = THEME_KEY === 'olofstrom' ? common_se_olofstrom : common_se_ronneby;\n\ni18n\n // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)\n // learn more: https://github.com/i18next/i18next-http-backend\n .use(Backend)\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n\n lng: selectedlang,\n resources: {\n se: {\n common: common_se, // 'common' is our custom namespace\n }\n },\n fallbackLng: selectedlang,\n debug: true,\n whitelist: languages,\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n }\n });\n\nexport default i18n;","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport './ThemeIndex.scss';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport Store from './store/Store';\nimport { Provider } from 'react-redux';\nimport './i18n';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport { AuthProvider } from './services/auth-context';\n\nReactDOM.render(\n <AuthProvider>\n <Provider store={Store} >\n <React.StrictMode>\n <Router>\n <App />\n </Router>\n </React.StrictMode>\n </Provider>\n </AuthProvider>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nif (!process.env.NODE_ENV || process.env.NODE_ENV === \"development\") {\n serviceWorker.unregister();\n} else {\n serviceWorker.register();\n}"],"sourceRoot":""}