{"version":3,"sources":["redux/constants.js","redux/actions/actionFetchMarkers.js","components/InfoWindowComponent.js","components/MarkerComponent.js","containers/Map.js","mapStyle.js","components/Header.js","images/logo.png","ClearCache.js","App.js","reportWebVitals.js","redux/reducers/reducerFetchMarkers.js","redux/store.js","index.js"],"names":["FETCH_MARKERS_LOADING","FETCH_MARKERS_SUCCESS","FETCH_MARKERS_ERROR","fetchMarkers","axios","defaults","headers","get","process","disatch","type","then","res","markersArray","data","markers","payload","catch","error","fetchMarkersError","message","InfoWindowComponent","props","selected","email","contact","phone","astreintePhone","displayEmail","displayPhone","displayAstreintePhone","isOpen","allowGestInfo","position","lat","latitude","lng","longitude","onCloseClick","name","isWa","busySlots","totalSlots","toFixed","style","color","Moment","format","lastUpdate","MarkerComponent","marker","icon","url","ratio","isLargePassageArea","isWA","pourcent","handlePinImgPath","scaledSize","window","google","maps","Size","origin","Point","anchor","animation","onClick","mapContainerStyle","width","height","center","options","styles","disableDefaultUI","zoomControl","Map","state","useSelector","dispatch","useDispatch","useState","setSelected","mapRef","useRef","useLoadScript","googleMapsApiKey","isLoaded","loadError","onMapLoad","useCallback","map","current","useEffect","zoom","onLoad","isLoading","className","console","log","Header","id","to","src","alt","withClearCache","ClearCacheComponent","Component","isLatestBuildDate","setIsLatestBuildDate","fetch","response","json","meta","latestDate","currentDate","momLatestDateTime","moment","momCurrentDateTime","isAfter","buildDateGreaterThan","buildDate","packageJson","refreshCacheAndReload","caches","keys","names","delete","location","reload","Fragment","exact","path","component","App","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","initialState","reducerFetchMarkers","action","rootreducer","combineReducers","store","createStore","applyMiddleware","thunk","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.2a751ebf.chunk.js","sourcesContent":["// FET MARKERS\r\nexport const FETCH_MARKERS_LOADING = 'FETCH_MARKERS_LOADING'\r\nexport const FETCH_MARKERS_SUCCESS = 'FETCH_MARKERS_SUCCESS'\r\nexport const FETCH_MARKERS_ERROR = 'FETCH_MARKERS_ERROR'","import {FETCH_MARKERS_LOADING, FETCH_MARKERS_SUCCESS, FETCH_MARKERS_ERROR} from '../constants'\r\nimport axios from 'axios'\r\n\r\nconst fetchMarkersLoading = () => {\r\n return {\r\n type: FETCH_MARKERS_LOADING\r\n }\r\n}\r\n\r\nconst fetchMarkersSuccess = data => {\r\n return {\r\n type: FETCH_MARKERS_SUCCESS,\r\n payload: data\r\n }\r\n}\r\n\r\nconst fetchMarkersError = error => {\r\n return {\r\n type: FETCH_MARKERS_ERROR,\r\n payload: error\r\n }\r\n}\r\n\r\nexport const fetchMarkers = () => {\r\n\r\n axios.defaults.headers.get['ApiKey'] = process.env.REACT_APP_WA3_API_KEY;\r\n \r\n return disatch => {\r\n disatch(fetchMarkersLoading())\r\n\r\n axios.get(`${process.env.REACT_APP_API}Markers/GetMarkers`)\r\n .then(res => {\r\n const markersArray = res.data.markers;\r\n disatch(fetchMarkersSuccess(markersArray))\r\n })\r\n .catch(error => {\r\n disatch(fetchMarkersError(error.message))\r\n })\r\n }\r\n}","import React from 'react'\r\nimport { InfoWindow } from '@react-google-maps/api'\r\nimport Moment from 'moment';\r\n\r\nconst InfoWindowComponent = (props) => {\r\n\r\n const selected = props.selected;\r\n const email = selected.contact.email;\r\n const phone = selected.contact.phone;\r\n const astreintePhone = selected.contact.astreintePhone;\r\n\r\n const displayEmail = email &&\r\n
\r\n Email:\r\n \r\n   {email}\r\n \r\n \r\n
\r\n
;\r\n\r\n const displayPhone = phone &&\r\n
\r\n Téléphone:\r\n \r\n   {phone}\r\n \r\n \r\n
\r\n
;\r\n\r\n const displayAstreintePhone = astreintePhone &&\r\n
\r\n Astreinte:\r\n \r\n   {astreintePhone}\r\n \r\n \r\n
\r\n
;\r\n\r\nif (selected.isOpen === 1) {\r\n if (selected.allowGestInfo) {\r\n return (\r\n \r\n
\r\n {selected.name}

\r\n \r\n Fermée\r\n \r\n {displayEmail}\r\n {displayPhone}\r\n {displayAstreintePhone}\r\n
\r\n \r\n ) \r\n }else{\r\n return (\r\n \r\n
\r\n {selected.name}

\r\n \r\n Fermée\r\n \r\n
\r\n \r\n ) \r\n }\r\n \r\n}else{\r\n if (selected.isWa && selected.name === \"Sainte Savine\") {\r\n return (\r\n \r\n
\r\n {selected.name}

\r\n \r\n Taux d'occupation:\r\n \r\n   {(selected.busySlots / selected.totalSlots * 100).toFixed(0)}%\r\n \r\n \r\n
\r\n Emplacements disponibles:\r\n \r\n   {selected.totalSlots - selected.busySlots}/{selected.totalSlots}\r\n \r\n   (Sous réserve de confirmation)\r\n \r\n
\r\n {displayEmail}\r\n {displayPhone}\r\n {displayAstreintePhone}\r\n
\r\n \r\n \r\n Date:\r\n \r\n   {Moment().format('YYYY-MM-DD HH:mm')}\r\n \r\n \r\n
\r\n \r\n \r\n )\r\n }\r\n if (selected.isWa) {\r\n return (\r\n \r\n
\r\n {selected.name}

\r\n \r\n Taux d'occupation:\r\n \r\n   {(selected.busySlots / selected.totalSlots * 100).toFixed(0)}%\r\n \r\n \r\n
\r\n Emplacements disponibles:\r\n \r\n   {selected.totalSlots - selected.busySlots}/{selected.totalSlots}\r\n \r\n \r\n
\r\n {displayEmail}\r\n {displayPhone}\r\n {displayAstreintePhone}\r\n
\r\n \r\n \r\n Date:\r\n \r\n   {Moment().format('YYYY-MM-DD HH:mm')}\r\n \r\n \r\n
\r\n \r\n \r\n )\r\n }else{\r\n return (\r\n \r\n
\r\n {selected.name}

\r\n \r\n Taux d'occupation:\r\n \r\n   {(selected.busySlots / selected.totalSlots * 100).toFixed(0)}%\r\n \r\n \r\n
\r\n Emplacements disponibles:\r\n \r\n   {selected.totalSlots - selected.busySlots}/{selected.totalSlots}\r\n \r\n \r\n
\r\n {displayEmail}\r\n {displayPhone}\r\n {displayAstreintePhone}\r\n
\r\n \r\n \r\n Date:\r\n \r\n   {Moment(selected.lastUpdate).format('YYYY-MM-DD HH:mm')}\r\n \r\n \r\n
\r\n \r\n \r\n )\r\n }\r\n \r\n }\r\n}\r\n\r\nexport default InfoWindowComponent\r\n","import React from 'react'\r\nimport { Marker } from '@react-google-maps/api'\r\n\r\n\r\nconst MarkerComponent = (props) => {\r\n\r\n const marker = props.marker;\r\n\r\n const handlePinImgPath = (ratio, isLargePassageArea, isWA, isOpen) => {\r\n\r\n let pourcent = 0;\r\n\r\n if (ratio === 0)\r\n pourcent = 0;\r\n else if (ratio <= 10)\r\n pourcent = 10;\r\n else if (ratio <= 20)\r\n pourcent = 20;\r\n else if (ratio <= 30)\r\n pourcent = 30;\r\n else if (ratio <= 40)\r\n pourcent = 40;\r\n else if (ratio <= 50)\r\n pourcent = 50;\r\n else if (ratio <= 60)\r\n pourcent = 60;\r\n else if (ratio <= 70)\r\n pourcent = 70;\r\n else if (ratio <= 80)\r\n pourcent = 80;\r\n else if (ratio <= 90)\r\n pourcent = 90;\r\n else if (ratio <= 100)\r\n pourcent = 100;\r\n else\r\n pourcent = 0;\r\n\r\n if (isLargePassageArea) {\r\n if (ratio === 0)\r\n return \"/google-pins/marqueur_gp_tout-libre_etat-normal@2x.png\";\r\n return `/google-pins/marqueur_gp_occupation-${pourcent}pct_etat-normal@2x.png`;\r\n }\r\n else if (!isWA){\r\n if (ratio === 0 && isOpen === 0)\r\n return \"/google-pins/marqueur_non_aire_tout-libre_etat-normal@2x.png\";\r\n if (isOpen === 1) \r\n return \"/google-pins/marqueur_non_aire_tout-libre_ferme_etat-normal@2x.png\"; \r\n \r\n return `/google-pins/marqueur_non_aire_occupation-${pourcent}pct_etat-normal@2x.png`\r\n }\r\n else {\r\n if (ratio === 0 && isOpen === 0)\r\n return \"/google-pins/marqueur_aire_tout-libre_etat-normal@2x.png\";\r\n if (isOpen === 1) \r\n return \"/google-pins/marqueur_aire_tout-libre_etat-ferme-normal@2x.png\"; \r\n return `/google-pins/marqueur_aire_occupation-${pourcent}pct_etat-normal@2x.png`\r\n }\r\n }\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default MarkerComponent\r\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { GoogleMap, useLoadScript } from '@react-google-maps/api';\r\nimport Loader from 'react-loader-spinner';\r\nimport { fetchMarkers } from '../redux/actions/actionFetchMarkers';\r\nimport InfoWindowComponent from '../components/InfoWindowComponent';\r\nimport MarkerComponent from '../components/MarkerComponent';\r\nimport mapStyles from '../mapStyle';\r\n\r\nconst mapContainerStyle = {\r\n width: \"100vw\",\r\n height: \"100vh\"\r\n}\r\n\r\nconst center = {\r\n lat: 47.227638,\r\n lng: 2.213749\r\n}\r\n\r\nconst options = {\r\n styles: mapStyles,\r\n disableDefaultUI: true,\r\n zoomControl: true\r\n}\r\n\r\nconst Map = () => {\r\n\r\n const state = useSelector(state => state.markers)\r\n const dispatch = useDispatch()\r\n const [selected, setSelected] = useState(null)\r\n const mapRef = useRef([])\r\n\r\n const { isLoaded, loadError } = useLoadScript({\r\n googleMapsApiKey: process.env.REACT_APP_GOOGLE_API_KEY\r\n })\r\n\r\n const onMapLoad = useCallback((map) => {\r\n mapRef.current = map;\r\n }, [])\r\n\r\n useEffect(() => {\r\n dispatch(fetchMarkers());\r\n\r\n }, [dispatch])\r\n\r\n if (loadError)\r\n return \"Error loading map\"\r\n if (!isLoaded)\r\n return \"Map is loading...\"\r\n return (\r\n \r\n {state.isLoading ? ()\r\n : state.error !== '' ? (

{console.log(state.error)}

)\r\n : state.fetchMarkers.map(marker => { setSelected(marker) }} key={marker.name} />)}\r\n\r\n {selected ? ( { setSelected(null) }} />) : null}\r\n\r\n \r\n )\r\n}\r\n\r\nexport default Map\r\n","const mapStyle = [\r\n {\r\n \"featureType\": \"all\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"invert_lightness\": true\r\n },\r\n {\r\n \"saturation\": 10\r\n },\r\n {\r\n \"lightness\": 50\r\n },\r\n {\r\n \"gamma\": 0.5\r\n },\r\n {\r\n \"hue\": \"#435158\"\r\n }\r\n ]\r\n }\r\n]\r\n\r\nexport default mapStyle;\r\n\r\n","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport logo from '../images/logo.png'\r\n\r\nconst Header = () => {\r\n return (\r\n
\r\n \"logo\"\r\n
\r\n )\r\n}\r\n\r\nexport default Header\r\n","export default \"data:image/png;base64,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\"","import React, { useState, useEffect } from \"react\";\r\nimport packageJson from \"../package.json\";\r\nimport moment from 'moment';\r\n\r\nconst buildDateGreaterThan = (latestDate, currentDate) => {\r\n const momLatestDateTime = moment(latestDate);\r\n const momCurrentDateTime = moment(currentDate);\r\n\r\n if (momLatestDateTime.isAfter(momCurrentDateTime)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n};\r\n\r\nfunction withClearCache(Component) {\r\n function ClearCacheComponent(props) {\r\n const [isLatestBuildDate, setIsLatestBuildDate] = useState(false);\r\n\r\n useEffect(() => {\r\n fetch(\"/meta.json\")\r\n .then((response) => response.json())\r\n .then((meta) => {\r\n const latestVersionDate = meta.buildDate;\r\n const currentVersionDate = packageJson.buildDate;\r\n\r\n const shouldForceRefresh = buildDateGreaterThan(\r\n latestVersionDate,\r\n currentVersionDate\r\n );\r\n if (shouldForceRefresh) {\r\n setIsLatestBuildDate(false);\r\n refreshCacheAndReload();\r\n } else {\r\n setIsLatestBuildDate(true);\r\n }\r\n });\r\n }, []);\r\n\r\n const refreshCacheAndReload = () => {\r\n if (caches) {\r\n // Service worker cache should be cleared with caches.delete()\r\n caches.keys().then((names) => {\r\n for (const name of names) {\r\n caches.delete(name);\r\n }\r\n });\r\n }\r\n // delete browser cache and hard reload\r\n window.location.reload(true);\r\n };\r\n\r\n return (\r\n \r\n {isLatestBuildDate ? : null}\r\n \r\n );\r\n }\r\n\r\n return ClearCacheComponent;\r\n}\r\n\r\nexport default withClearCache;\r\n\r\n","import Map from './containers/Map';\r\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom'\r\nimport Header from './components/Header';\r\nimport './App.css'\r\nimport withClearCache from \"./ClearCache\";\r\n\r\nconst ClearCacheComponent = withClearCache(MainApp);\r\n\r\nfunction App() {\r\n return ;\r\n}\r\n\r\nfunction MainApp(props) {\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","const reportWebVitals = onPerfEntry => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import {FETCH_MARKERS_LOADING, FETCH_MARKERS_SUCCESS, FETCH_MARKERS_ERROR} from '../constants'\r\n\r\nconst initialState = {\r\n isLoading: false,\r\n fetchMarkers: [],\r\n error: ''\r\n}\r\n\r\nfunction reducerFetchMarkers(state = initialState, action) {\r\n switch (action.type) {\r\n case FETCH_MARKERS_LOADING:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n fetchMarkers: [],\r\n error: ''\r\n }\r\n\r\n case FETCH_MARKERS_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n fetchMarkers: action.payload,\r\n error: ''\r\n }\r\n case FETCH_MARKERS_ERROR:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n fetchMarkers: [],\r\n error: action.payload\r\n }\r\n \r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport default reducerFetchMarkers\r\n","import {createStore, combineReducers, applyMiddleware} from 'redux'\r\nimport reducerFetchMarkers from './reducers/reducerFetchMarkers'\r\nimport thunk from 'redux-thunk'\r\n\r\nconst rootreducer = combineReducers({\r\n markers: reducerFetchMarkers\r\n})\r\n\r\nconst store = createStore(rootreducer, applyMiddleware(thunk))\r\n\r\nexport default store","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux'\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport store from './redux/store'\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}