{"version":3,"sources":["state/actions/index.js","state/reducers/application.js","state/reducers/database.js","state/reducers/firebase.js","state/reducers/index.js","state/async-actions/mangrove.js","state/async-actions/application.js","state/async-actions/database.js","state/async-actions/vega.js","state/async-actions/index.js","components/HKVDialog/2.0/HKVDialog.js","components/HKVDrawer/1.0/HKVDrawer.js","components/HKVMap/utils/TopoJSON.js","components/HKVMap/3.0/HKVMap.js","components/HKVVega/3.0/vegaUtils.js","components/HKVVega/3.0/HKVVega.js","components/HKVFirebase/2.0/Authentication/firebase.js","components/HKVFirebase/2.0/Authentication/Functions.js","components/HKVFirebase/2.0/Authentication/Login.js","lib/utils.js","i18n.js","App.js","serviceWorker.js","components/HKVFirebase/2.0/Messaging/push-notification.js","index.js","components/HKVMap/assets/marker.png","components/HKVMap/assets/marker-shadow.png"],"names":["SET_ERROR","SET_APP_INFO","LOADING_STATE","SET_RAINFALLFORECAST","SET_SCHEDULED_NOTIFICATIONS","SET_AUTH_USER","SET_SUBSCRIPTION","combineReducers","appinfo","state","action","type","actions","error","subscription","active","token","forecast","loading","notifications","userinfo","uid","name","email","application","database","firebase","getAppType","process","apptype","getServices","server","getWebServices","getContentUrl","service","getDataUrl","functionName","parameters","contentType","encodeURIComponent","JSON","stringify","getUploadUrl","getLocalUploadUrl","getUrl","getLocalUrl","setLoader","counter","dispatch","a","getAppInfo","appname","url","fetch","then","response","json","setAppInfoInState","catch","message","duration","sendPushNotification","exception","setOrderId","setCategory","deleteContent","deleteLayers","getContent","REACT_APP_TYPE","Promise","resolve","reject","xhr","XMLHttpRequest","onload","responseText","open","send","text","getRainfallForecast","setRainfallForecastInState","getScheduledNotifications","setScheduledNotificationsinState","getSlides","UploadImageToServer","file","uploadUrl","formData","FormData","appid","key","plain","append","method","body","setLayer","addScheduledNotification","getVegaSpec","local","sendSignal","view","signalName","value","getState","signals","hasOwnProperty","signal","runAsync","getVegaData","updateVegaData","data","remove","vega","insert","mangrove","HKVDialog","this","props","classes","config","onClose","Dialog","paper","root","size","children","React","Component","withTranslation","withStyles","theme","width","maxHeight","extraSmall","maxWidth","breakpoints","down","spacing","margin","up","small","medium","large","full","height","borderRadius","withTheme","connect","HKVDrawer","componentDidMount","drawerStateChanged","placement","defaultOpen","determineDrawerClass","toggleDrawer","setState","determineButtonClass","className","drawerButtonLeft","drawerButtonRight","drawerButtonBottom","drawerButton","drawerBottom","document","getElementById","buttonBottom","classList","add","determineIcon","ChevronRight","ChevronLeft","KeyboardArrowDown","KeyboardArrowUp","Fragment","Drawer","id","anchor","variant","drawerPaperBottom","drawerPaper","AppBar","header","dir","image","src","headerimage","alt","title","Typography","toggleButton","Fab","color","onClick","style","alignSelf","flexShrink","boxShadow","window","innerWidth","background","textAlign","padding","boxSizing","transition","flexDirection","position","top","palette","primary","main","left","right","bottom","overflow","textOverflow","whiteSpace","withLeaflet","layerRef","useRef","defProps","useEffect","layer","jsonData","objects","geojson","topojson","addData","current","leafletElement","GeoJSON","ref","L","Icon","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","require","iconUrl","shadowUrl","BaseLayer","LayersControl","Overlay","HKVMap","mapDidMount","mapRef","fetchFeatures","layers","forEach","index","length","asyncActions","features","onEachFeature","event","feature","determineFeatureStyle","Marker","Polyline","Polygon","setStyle","pointToLayer","latlng","determineFeatureOptions","pointerType","circleMarker","marker","onFeatureGroupUpdate","i","map","group","target","zoomTo","getBounds","isValid","fitBounds","onFeatureGroupAdd","featureGroupDidAdd","renderControl","control","t","baseLayers","baseLayer","checked","TileLayer","attribution","workspace","WMSTileLayer","onAdd","styles","format","transparent","FeatureGroup","featureGroupRef","onlayeradd","onMouseOver","handleFeatureMouseOver","onMouseOut","handleFeatureMouseOut","handleFeatureClick","ZoomControl","ScaleControl","imperial","metric","handleMapClick","originalEvent","DomEvent","stopPropagation","createRef","lat","lng","Map","center","zoom","zoomControl","controls","element","spec","callback","locale","timeFormatLocale","vegaEmbed","renderer","result","console","HKVVega","vegaDidMount","viewObject","initialSizes","handleResize","offsetWidth","offsetHeight","vegaRef","dateTime","date","time","periods","days","shortDays","months","shortMonths","specName","specUrl","fetchedSpec","createVega","onResize","apps","initializeApp","auth","firestore","doSignOut","signOut","verified","Copyright","align","Link","href","Date","getFullYear","Login","handleChangeEmail","dialogAccount","dialogPassword","keyCode","handlePasswordRequest","handleCreateAccount","handleLogin","handleChangeName","handleChangePassword","password","signInWithEmailAndPassword","firebaseUser","user","xa","displayName","emailVerified","doSignInWithEmailAndPassword","openForgotPassword","openNoAccount","createUserWithEmailAndPassword","alert","updateProfile","doCreateUserWithEmailAndPassword","closeDialog","sendPasswordResetEmail","doPasswordReset","display","Avatar","avatar","LockOutlined","component","FormControl","form","TextField","autoFocus","autoComplete","required","fullWidth","label","marginBottom","onKeyUp","Button","justifyContent","cursor","DialogTitle","DialogContent","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","alignItems","shadows","backgroundColor","marginTop","makeRequest","headers","filecontent","content","compressedString","LZString","compressToBase64","XDomainRequest","status","statusText","onerror","withCredentials","i18n","languages","use","Backend","initReactI18next","init","fallbackLng","ns","defaultNS","loadPath","debug","keySeparator","nsSeparator","interpolation","escapeValue","App","changeLanguage","that","moment","selectedLanguage","localStorage","mapRefs","getFirestoreData","counters","documents","field","locationKey","location","collection","doc","onSnapshot","snapshot","exists","find","d","push","isInitialized","c","vegaRefs","groupRef","featureGroupRefs","getInfoSlides","zoomToEnd","editorStateInfo","converter","Converter","slides","filter","obj","infoSlides","slide","currentNotification","notification","currentNotificationStartTime","currentNotificationEndTime","starttime","endtime","orderid","category","notificationId","occurrence","html","makeHtml","contentBlock","htmlToDraft","contentState","ContentState","createFromBlockArray","contentBlocks","editorState","EditorState","createWithContent","activeStep","renderAnalytics","flexWrap","Paper","square","vegaContainer","flexGrow","fontSize","typography","pxToRem","onLayerChange","mapConfig","l","onResizeTextArea","rainfallTableHeight","changePushNotificationTitle","pushNotificationTitle","changePushNotificationText","pushNotificationText","topic","valueOf","renderForecast","forecastData","locations","columns","period1","period2","period3","borderCollapse","column","tableCell","tableRow","placeholder","textField","onChange","TextareaAutosize","textArea","onMouseDown","disabled","marginLeft","beforeRemoveSlide","removeDialog","removeSlide","infoSlide","splice","addSlide","fileName","newFile","newFileParsed","parse","blocksFromHTML","convertFromHTML","entityMap","goToStep","uploadImageCallback","link","reorder","list","startIndex","endIndex","Array","from","removed","getItemStyle","isDragging","draggableStyle","userSelect","border","fontWeight","onDragEnd","destination","source","changeSlideCategory","renderSlideCategory","InputLabel","Select","option","MenuItem","renderSlideOrder","styleSheet","styleSheets","insertRule","cssRules","gutterBottom","droppableId","provided","droppableProps","innerRef","isDraggingOver","draggableId","draggableProps","dragHandleProps","changePushCheckedState","changePushDate","changeOccurrence","renderLiteracy","toolbar","options","urlEnabled","uploadCallback","previewImage","present","mandatory","inputAccept","linkCallback","onChangeIndex","indexLatest","handleStep","Tooltip","IconButton","Delete","Add","wrapperClassName","editorClassName","onEditorStateChange","onInfoEditorStateChange","handlePastedText","defaultValue","InputLabelProps","shrink","marginRight","lineHeight","Checkbox","minWidth","e","MobileStepper","steps","backButton","nextButton","publishInfo","renderFloodRiskMaps","layerButtonContainer","layerButtons","onDisclaimerStateChange","editorStateDisclaimer","onbeforeunload","targetOption","renderDisclaimerEditor","publishDisclaimer","renderContent","viewerType","drawerStates","onUploaded","riskSituationLayers","uploadFile","handleButtonClick","funct","selectedLayers","publishLayers","getElementsByClassName","click","low","moderate","high","clearSelectedLayer","renderGeoFiles","RadioGroup","FormControlLabel","setSelectedLayer","includes","accept","allowedFileExtensions","multiple","uploadMode","geoFilesButton","selectedLayer","clearPublishLayer","setPublishLayer","updateLayer","floodRiskLayer","riskSituationLayer","description","customContentStateConverter","newBlockMap","getBlockMap","block","entityKey","getEntityAt","entityBlock","getEntity","getType","merge","set","rawContentState","convertToRaw","getCurrentContent","draftToHtml","rawEditor","markdownString","draftToMarkdown","firebaseProvider","renderSelectedGeoFiles","floodRiskLayers","publishedLayerNames","Object","keys","renderUser","onMouseEnter","userInfoHoverState","onMouseLeave","logoutDialog","ExitToApp","VerifiedUser","closeSnackbar","reason","zoomto","uploadedImages","bind","admin","language","preference","short","overlay","onAuthStateChanged","Snackbar","autoHideDuration","zIndex","anchorOriginBottomCenter","Alert","elevation","severity","toString","container","List","listItem","ListItem","button","Divider","minHeight","fontFamily","outline","Boolean","hostname","match","createMuiTheme","contrastText","secondary","store","createStore","rootReducer","applyMiddleware","thunk","render","fallback","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.d49a4281.chunk.js","sourcesContent":["// General\r\nexport const SET_ERROR = \"SET_ERROR\"\r\nexport const SET_APP_INFO = \"SET_APP_INFO\"\r\n\r\n// Database\r\nexport const LOADING_STATE = \"LOADING_STATE\"\r\nexport const SET_RAINFALLFORECAST = \"SET_RAINFALLFORECAST\"\r\nexport const SET_SCHEDULED_NOTIFICATIONS = \"SET_SCHEDULED_NOTIFICATIONS\"\r\n\r\n// Firebase \r\nexport const SET_AUTH_USER = \"SET_AUTH_USER\"\r\nexport const SET_SUBSCRIPTION = \"SET_SUBSCRIPTION\"\r\n","import { combineReducers } from \"redux\"\r\nimport * as actions from \"../actions\"\r\n\r\nfunction appinfo(state = null, action) {\r\n switch (action.type) {\r\n case actions.SET_APP_INFO:\r\n return action.appinfo\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nfunction error(state = null, action) {\r\n switch (action.type) {\r\n case actions.SET_ERROR:\r\n return action.error\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nfunction subscription(state = { active: false, token: null }, action) {\r\n switch (action.type) {\r\n case actions.SET_SUBSCRIPTION:\r\n return action.subscription\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default combineReducers({\r\n appinfo,\r\n error,\r\n subscription\r\n})\r\n","import { combineReducers } from \"redux\"\r\nimport * as actions from \"../actions\"\r\n\r\nfunction forecast(state = null, action) {\r\n switch (action.type) {\r\n case actions.SET_RAINFALLFORECAST:\r\n return action.forecast\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nfunction loading(state = 0, action) {\r\n switch (action.type) {\r\n case actions.LOADING_STATE:\r\n return action.loading\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nfunction notifications(state = null, action) {\r\n switch (action.type) {\r\n case actions.SET_SCHEDULED_NOTIFICATIONS:\r\n return action.notifications\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default combineReducers({\r\n forecast,\r\n loading,\r\n notifications\r\n})\r\n","import { combineReducers } from \"redux\"\r\nimport * as actions from \"../actions\"\r\n\r\nfunction userinfo(state = { uid: \"\", token: \"\", name: \"\", email: \"\" }, action) {\r\n switch (action.type) {\r\n case actions.SET_AUTH_USER:\r\n return action.userinfo\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nfunction subscription(state = { active: false, token: null }, action) {\r\n switch (action.type) {\r\n case actions.SET_SUBSCRIPTION:\r\n return action.subscription\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default combineReducers({\r\n userinfo,\r\n subscription\r\n})\r\n","import { combineReducers } from \"redux\"\r\n\r\nimport application from \"./application\"\r\nimport database from \"./database\"\r\nimport firebase from \"./firebase\"\r\n\r\nexport default combineReducers({\r\n application,\r\n database,\r\n firebase\r\n})\r\n","export function getAppType() {\r\n return process.env.apptype\r\n}\r\n\r\nexport function getServices(server) {\r\n return `https://${server}.hkvservices.nl`\r\n /// return \"http://localhost\"\r\n // return `http://172.17.18.11`\r\n}\r\n\r\nexport function getWebServices(server) {\r\n switch (server) {\r\n case \"tsws\":\r\n return \"https://tsgeo.hkv.nl\"\r\n\r\n case \"dmws\":\r\n return \"https://dmgeo.hkv.nl\"\r\n\r\n default:\r\n return \"https://geo.hkv.nl\"\r\n }\r\n}\r\n\r\nexport function getContentUrl(server, application) {\r\n const service = getServices(server)\r\n\r\n return `${service}/mangrove.data${application}/content`\r\n}\r\n\r\nexport function getDataUrl(server, functionName, parameters, contentType) {\r\n const service = getServices(server)\r\n\r\n return `${service}/mangrove_accra.ws/data.ashx?function=${functionName}¶meters=${encodeURIComponent(JSON.stringify(parameters))}&${contentType}`\r\n}\r\n\r\nexport function getUploadUrl(server) {\r\n const service = getServices(server)\r\n\r\n return `${service}/mangrove_accra.ws/entry.asmx/Upload`\r\n}\r\n\r\nexport function getLocalUploadUrl() {\r\n return \"http://localhost/mangrove.ws/entry.asmx/Upload\"\r\n}\r\n\r\nexport function getUrl(server, functionName, parameters) {\r\n parameters.apptype = getAppType()\r\n const service = getServices(server)\r\n\r\n return `${service}/mangrove_accra.ws/entry.asmx/Call?function=${functionName}¶meters=${encodeURIComponent(JSON.stringify(parameters))}`\r\n}\r\n\r\nexport function getLocalUrl(server, functionName, parameters) {\r\n return `http://localhost/mangrove.ws/entry.asmx/Call?function=${functionName}¶meters=${encodeURIComponent(JSON.stringify(parameters))}`\r\n}\r\n","import * as actions from \"../actions\"\r\n\r\nimport { getUrl } from \"./mangrove\"\r\n\r\nexport function setLoader(counter) {\r\n return async function (dispatch) {\r\n dispatch({ type: actions.LOADING_STATE, loading: counter })\r\n }\r\n}\r\n\r\nexport function getAppInfo(server, appname, parameters) {\r\n const functionName = `${appname}.appfunctions.getAppInfo`\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n dispatch(setAppInfoInState(json))\r\n return json\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function getAppInfo`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function sendPushNotification(server, appname, parameters) {\r\n const functionName = `${appname}.appfunctions.SendPushToTopic`\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n if (json.exception) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${json.exception} in function sendPushNotification`, type: \"error\", duration: 4000 } })\r\n } else {\r\n return json\r\n }\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function sendPushNotification`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function setOrderId(server, appname, parameters) {\r\n const functionName = `${appname}.appfunctions.SetOrderId`\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n if (json.exception) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${json.exception} in function setOrderId`, type: \"error\", duration: 4000 } })\r\n } else {\r\n return json\r\n }\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function setOrderId`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function setCategory(server, appname, parameters) {\r\n const functionName = `${appname}.appfunctions.SetCategory`\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n if (json.exception) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${json.exception} in function setCategory`, type: \"error\", duration: 4000 } })\r\n } else {\r\n return json\r\n }\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function setCategory`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function setAppInfoInState(appinfo) {\r\n return {\r\n type: actions.SET_APP_INFO,\r\n appinfo\r\n }\r\n}\r\n","import * as actions from \"../actions\"\r\nimport { getDataUrl, getUrl, getUploadUrl } from \"./mangrove\"\r\n\r\nexport function deleteContent(server, parameters) {\r\n const functionName = \"myfloodrisk.appfunctions.DeleteContent\"\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return fetch(url)\r\n .then(response => response.json())\r\n .then(json => { return json })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function deleteContent`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function deleteLayers(server, parameters) {\r\n const functionName = \"myfloodrisk.appfunctions.DeleteLayer\"\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => { return json })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function deleteLayers`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function getContent(server, parameters, contentType) {\r\n const functionName = \"myfloodrisk.appfunctions.GetContent\"\r\n const url = getDataUrl(server, functionName, parameters, contentType)\r\n\r\n if (process.env.REACT_APP_TYPE === \"app\") {\r\n return async function (dispatch) {\r\n return new Promise(function (resolve, reject) {\r\n const xhr = new XMLHttpRequest()\r\n xhr.onload = function () {\r\n resolve(xhr.responseText)\r\n }\r\n xhr.open(\"GET\", url)\r\n xhr.send(null)\r\n })\r\n }\r\n } else {\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.text())\r\n .then(text => { return text })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function getContent`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport function getRainfallForecast(server) {\r\n const functionName = \"myfloodrisk.appfunctions.GetRainfallForecast\"\r\n const url = getUrl(server, functionName, {})\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n dispatch(setRainfallForecastInState(json))\r\n return json\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function getRainfallForecast`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function getScheduledNotifications(server, parameters) {\r\n const functionName = \"myfloodrisk.appfunctions.GetScheduledNotifications\"\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n dispatch(setScheduledNotificationsinState(json))\r\n return json\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function getScheduledNotifications`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function getSlides(server, parameters) {\r\n const functionName = \"myfloodrisk.appfunctions.GetSlides\"\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n if (process.env.REACT_APP_TYPE === \"app\") {\r\n return async function (dispatch) {\r\n return new Promise(function (resolve, reject) {\r\n const xhr = new XMLHttpRequest()\r\n xhr.onload = function () {\r\n resolve(xhr.responseText)\r\n }\r\n xhr.open(\"GET\", url)\r\n xhr.send(null)\r\n })\r\n }\r\n } else {\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => { return json })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function getSlides`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport function UploadImageToServer(file, name) {\r\n return async function (dispatch) {\r\n const uploadUrl = getUploadUrl(\"tsws\")\r\n const formData = new FormData()\r\n \r\n const parameters = {\r\n appid: 42,\r\n key: name,\r\n plain: true\r\n }\r\n \r\n formData.append(\"File\", file)\r\n formData.append(\"function\", \"myfloodrisk.appfunctions.SetImage\")\r\n formData.append(\"parameters\", JSON.stringify(parameters))\r\n \r\n return await fetch(uploadUrl,\r\n {\r\n method: \"POST\",\r\n body: formData\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n return json \r\n })\r\n .catch((error) => {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function SetImage`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function setLayer(server, parameters) {\r\n const functionName = \"myfloodrisk.appfunctions.SetLayer\"\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return fetch(url)\r\n .then(response => response.json())\r\n .then(json => { return json })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function setLayer`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function addScheduledNotification(server, parameters) {\r\n const functionName = \"myfloodrisk.appfunctions.AddScheduledNotification\"\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n return json\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function addScheduledNotification`, type: \"error\", duration: 4000 } })\r\n })\r\n }\r\n}\r\n\r\nexport function setRainfallForecastInState(forecast) {\r\n return {\r\n type: actions.SET_RAINFALLFORECAST,\r\n forecast\r\n }\r\n}\r\n\r\nexport function setScheduledNotificationsinState(notifications) {\r\n return {\r\n type: actions.SET_SCHEDULED_NOTIFICATIONS,\r\n notifications\r\n }\r\n}\r\n","\r\nimport * as actions from \"../actions\"\r\nimport * as vega from \"vega\"\r\n\r\nexport function getVegaSpec(file, local) {\r\n return async function (dispatch) {\r\n let url = file\r\n if (local) {\r\n url = `/static/specs/${file}.json`\r\n }\r\n return fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n if (json.exception) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${json.exception} in function getVegaSpec`, type: \"error\", duration: 4000 } })\r\n } else {\r\n return json\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport function sendSignal(view, { signalName, value }) {\r\n return async function (dispatch) {\r\n if (view) {\r\n if (view.getState().signals.hasOwnProperty(signalName)) {\r\n await view.signal(signalName, value).runAsync()\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function getVegaData(view, key, url) {\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n dispatch(updateVegaData(view, key, json))\r\n return json\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function getVegaData`, type: \"error\" } })\r\n })\r\n }\r\n}\r\n\r\nexport function updateVegaData(view, key, data) {\r\n return async function (dispatch) {\r\n if (view) {\r\n await view.remove(key, vega.truthy).runAsync()\r\n await view.insert(key, data).runAsync()\r\n\r\n // await view.insert(key, data).runAsync()\r\n // await view.change(key, vega.changeset().remove(vega.truthy)).runAsync();\r\n // await view.change(key, vega.changeset().insert(data).remove(view.data(key))).runAsync()\r\n // await view.remove(key, function() { return true }).runAsync()\r\n return data\r\n }\r\n }\r\n}\r\n","import * as application from \"./application\"\r\nimport * as database from \"./database\"\r\nimport * as mangrove from \"./mangrove\"\r\nimport * as vega from \"./vega\"\r\n\r\n// eslint-disable-next-line\r\nexport default { ...application, ...database, ...mangrove, ...vega }\r\n","import React from \"react\"\r\nimport { connect } from \"react-redux\"\r\nimport { withStyles } from \"@material-ui/core/styles\"\r\nimport { withTranslation } from \"react-i18next\"\r\n\r\nimport {\r\n Dialog\r\n} from \"@material-ui/core\"\r\n\r\nimport \"./HKVDialog.css\"\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: \"100%\",\r\n maxHeight: \"100%\"\r\n },\r\n extraSmall: {\r\n maxWidth: 440,\r\n [theme.breakpoints.down(440 + theme.spacing(4))]: {\r\n margin: 0\r\n },\r\n [theme.breakpoints.up(440 + theme.spacing(4))]: {\r\n margin: theme.spacing(4)\r\n }\r\n },\r\n small: {\r\n maxWidth: 680,\r\n [theme.breakpoints.down(680 + theme.spacing(4))]: {\r\n margin: 0\r\n },\r\n [theme.breakpoints.up(680 + theme.spacing(4))]: {\r\n margin: theme.spacing(4)\r\n }\r\n },\r\n medium: {\r\n maxWidth: 960,\r\n [theme.breakpoints.down(960 + theme.spacing(4))]: {\r\n maxHeight: \"100%\",\r\n margin: 0\r\n },\r\n [theme.breakpoints.up(960 + theme.spacing(4))]: {\r\n maxHeight: `calc(100% - ${theme.spacing(8 * 2)}px)`,\r\n margin: theme.spacing(4)\r\n }\r\n },\r\n large: {\r\n [theme.breakpoints.down(\"md\")]: {\r\n maxWidth: \"100%\",\r\n maxHeight: \"100%\",\r\n margin: 0\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n maxWidth: `calc(100% - ${theme.spacing(8 * 2)}px)`,\r\n maxHeight: `calc(100% - ${theme.spacing(8 * 2)}px)`,\r\n margin: theme.spacing(4)\r\n }\r\n },\r\n full: {\r\n maxWidth: \"100%\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n borderRadius: 0,\r\n margin: 0\r\n }\r\n})\r\n\r\nclass HKVDialog extends React.Component {\r\n render() {\r\n const { classes, config, onClose } = this.props\r\n\r\n if (!config) return null\r\n\r\n return (\r\n onClose(config)}\r\n classes={{\r\n paper: `${classes.root} ${classes[config.size]}`\r\n }}\r\n >\r\n {this.props.children}\r\n \r\n )\r\n }\r\n}\r\n\r\nHKVDialog = withTranslation(\"translation\")(HKVDialog)\r\nHKVDialog = withStyles(styles, { withTheme: true })(HKVDialog)\r\nexport default connect(state => state)(HKVDialog)\r\n","import React from \"react\"\r\nimport { connect } from \"react-redux\"\r\nimport { withStyles } from \"@material-ui/core/styles\"\r\nimport { withTranslation } from \"react-i18next\"\r\n\r\nimport {\r\n AppBar,\r\n Drawer,\r\n Fab,\r\n Typography\r\n} from \"@material-ui/core\"\r\n\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n KeyboardArrowDown,\r\n KeyboardArrowUp\r\n} from \"@material-ui/icons\"\r\n\r\nimport \"./HKVDrawer.css\"\r\n\r\nconst styles = theme => ({\r\n drawerPaper: {\r\n background: \"#f5f5f5\",\r\n boxShadow: \"1px 0px 10px rgba(0,0,0,0.3)\",\r\n textAlign: \"left\",\r\n padding: theme.spacing(1),\r\n boxSizing: \"border-box\",\r\n [theme.breakpoints.up(\"xs\")]: {\r\n width: \"95%\"\r\n },\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: 280\r\n },\r\n [theme.breakpoints.up(1500)]: {\r\n width: 360\r\n }\r\n },\r\n drawerPaperBottom: {\r\n background: \"#f5f5f5\",\r\n boxShadow: \"1px 0px 10px rgba(0,0,0,0.3)\",\r\n textAlign: \"left\",\r\n padding: theme.spacing(1),\r\n height: 280,\r\n // normaal zit de transition alleen op de transform, maar deze willen we ook op de margin-left en de margin-right\r\n transition: \"transform 225ms cubic-bezier(0, 0, 0.2, 1) 0ms, margin-left 225ms cubic-bezier(0, 0, 0.2, 1) 0ms, margin-right 225ms cubic-bezier(0, 0, 0.2, 1) 0ms !important\"\r\n },\r\n header: {\r\n flexDirection: \"row\",\r\n position: \"sticky\",\r\n top: 0,\r\n padding: theme.spacing(0.5, 1),\r\n background: theme.palette.primary.main,\r\n width: \"100%\"\r\n },\r\n headerimage: {\r\n height: 40,\r\n width: \"auto\"\r\n },\r\n drawerButton: {\r\n position: \"absolute\",\r\n transition: \"225ms cubic-bezier(0, 0, 0.2, 1) 0ms\"\r\n },\r\n drawerButtonLeft: {\r\n left: theme.spacing(1),\r\n top: theme.spacing(1)\r\n },\r\n drawerButtonRight: {\r\n right: theme.spacing(1),\r\n top: theme.spacing(1)\r\n },\r\n drawerButtonBottom: {\r\n left: theme.spacing(1),\r\n bottom: theme.spacing(1)\r\n },\r\n title: {\r\n width: \"100%\",\r\n alignSelf: \"center\",\r\n margin: theme.spacing(0, 1),\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\"\r\n }\r\n})\r\n\r\nclass HKVDrawer extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n const { config } = this.props\r\n\r\n this.state = {\r\n open: config.defaultOpen\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n const { config, drawerStateChanged } = this.props\r\n\r\n drawerStateChanged(config.placement, config.defaultOpen)\r\n this.determineDrawerClass(config.placement)\r\n }\r\n\r\n toggleDrawer = () => {\r\n const { config, drawerStateChanged } = this.props\r\n\r\n drawerStateChanged(config.placement, !this.state.open)\r\n this.setState({ open: !this.state.open }, () => {\r\n this.determineDrawerClass(config.placement)\r\n })\r\n }\r\n\r\n determineButtonClass = (placement) => {\r\n const { classes } = this.props\r\n\r\n let className = \"\"\r\n switch (placement) {\r\n case \"left\": className = classes.drawerButtonLeft; break\r\n case \"right\": className = classes.drawerButtonRight; break\r\n case \"bottom\": className = classes.drawerButtonBottom; break\r\n default: break\r\n }\r\n\r\n return `${className} ${classes.drawerButton}`\r\n }\r\n\r\n determineDrawerClass = (placement) => {\r\n const { open } = this.state\r\n\r\n const drawerBottom = document.getElementById(\"drawer-bottom\")\r\n const buttonBottom = document.getElementById(\"button-bottom\")\r\n\r\n switch (placement) {\r\n case \"left\":\r\n if (drawerBottom) {\r\n if (open) {\r\n drawerBottom.classList.add(\"drawerPaperBottomOpenLeft\")\r\n buttonBottom.classList.add(\"drawerButtonOpenLeft\")\r\n } else {\r\n drawerBottom.classList.remove(\"drawerPaperBottomOpenLeft\")\r\n buttonBottom.classList.remove(\"drawerButtonOpenLeft\")\r\n }\r\n }\r\n break\r\n\r\n case \"right\":\r\n if (drawerBottom) {\r\n if (open) {\r\n drawerBottom.classList.add(\"drawerPaperBottomOpenRight\")\r\n } else {\r\n drawerBottom.classList.remove(\"drawerPaperBottomOpenRight\")\r\n }\r\n }\r\n break\r\n \r\n default:\r\n break\r\n }\r\n }\r\n\r\n determineIcon = (placement) => {\r\n const { open } = this.state\r\n\r\n switch (placement) {\r\n case \"right\":\r\n return open ? : \r\n\r\n case \"bottom\":\r\n return open ? : \r\n\r\n case \"left\":\r\n default:\r\n return open ? : \r\n }\r\n }\r\n\r\n render() {\r\n const { classes, config } = this.props\r\n const { open } = this.state\r\n\r\n return (\r\n \r\n \r\n \r\n {config.image && {config.title}}\r\n {config.title}\r\n {config.toggleButton && this.toggleDrawer()}\r\n style={{ alignSelf: \"center\", flexShrink: 0, boxShadow: \"none\" }}\r\n >\r\n {this.determineIcon(config.placement)}\r\n }\r\n \r\n {this.props.children}\r\n \r\n {\r\n (window.innerWidth <= 600 || config.toggleButton !== false) && this.toggleDrawer()}\r\n >\r\n {this.determineIcon(config.placement)}\r\n \r\n }\r\n \r\n )\r\n }\r\n}\r\n\r\nHKVDrawer = withTranslation(\"translation\")(HKVDrawer)\r\nHKVDrawer = withStyles(styles, { withTheme: true })(HKVDrawer)\r\nexport default connect(state => state)(HKVDrawer)\r\n","import React, { useRef, useEffect } from \"react\"\r\nimport { GeoJSON, withLeaflet } from \"react-leaflet\"\r\nimport * as topojson from \"topojson-client\"\r\n\r\nfunction TopoJSON(props) {\r\n const layerRef = useRef(null)\r\n const { data, ...defProps } = props\r\n\r\n function addData(layer, jsonData) {\r\n if (jsonData.type === \"Topology\") {\r\n for (const key in jsonData.objects) {\r\n const geojson = topojson.feature(jsonData, jsonData.objects[key])\r\n layer.addData(geojson)\r\n }\r\n } else {\r\n layer.addData(jsonData)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n const layer = layerRef.current.leafletElement\r\n addData(layer, props.data)\r\n }, [props.data])\r\n\r\n return \r\n}\r\n\r\nexport default withLeaflet(TopoJSON)\r\n","import React from \"react\"\r\nimport { connect } from \"react-redux\"\r\nimport { withTranslation } from \"react-i18next\"\r\n\r\nimport asyncActions from \"../../../state/async-actions\"\r\n\r\nimport { FeatureGroup, Map, LayersControl, ScaleControl, TileLayer, ZoomControl, WMSTileLayer } from \"react-leaflet\"\r\n\r\nimport TopoJSON from \"../utils/TopoJSON\"\r\n\r\nimport L from \"leaflet\"\r\n\r\nimport \"leaflet/dist/leaflet.css\"\r\nimport \"./HKVMap.css\"\r\n\r\n// Verwijderen van standaard leaflet markers\r\ndelete L.Icon.Default.prototype._getIconUrl\r\n\r\n// Default markers toekennen aan leaflet\r\nL.Icon.Default.mergeOptions({\r\n iconRetinaUrl: require(\"../assets/marker.png\"),\r\n iconUrl: require(\"../assets/marker.png\"),\r\n shadowUrl: require(\"../assets/marker-shadow.png\")\r\n})\r\n\r\nconst { BaseLayer, Overlay } = LayersControl\r\n\r\nclass HKVMap extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n // Aanmaken van mapReferences\r\n this.mapRef = React.createRef()\r\n this.featureGroupRef = React.createRef()\r\n }\r\n\r\n componentDidMount = () => {\r\n const { config, mapDidMount } = this.props\r\n\r\n // Ophalen van features opbasis van meegegeven URL\r\n // this.fetchFeatures(config)\r\n\r\n // MapReference meegeven aan je App.js zodat je altijd bij de layers kan\r\n this.mapRef.current.key = `mapRef${config.key}`\r\n\r\n mapDidMount(this.mapRef.current)\r\n }\r\n\r\n // Ophalen van features opbasis van meegegeven URL\r\n fetchFeatures = (config) => {\r\n config.layers.forEach((layer, index) => {\r\n if (layer.url.length === 0) return null\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\r\n .then(() => {\r\n fetch(layer.url)\r\n .then(response => response.json())\r\n .then(json => {\r\n // Opgehaalde features plaatsen in de betreffende layer zijn lege features array\r\n config.layers[index].features = json.features\r\n\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\r\n })\r\n })\r\n })\r\n }\r\n\r\n // Functie die wordt aangeroepen voor het toevoegen van de feature aan de \r\n onEachFeature = (event, feature) => {\r\n const { determineFeatureStyle } = this.props\r\n\r\n if (feature instanceof L.Marker) {\r\n // Do niks\r\n } else if ((feature instanceof L.Polyline) || (feature instanceof L.Polygon)) {\r\n // Wanneer je een determineFeatureStyle functie meegeeft aan het HKVMap component\r\n if (determineFeatureStyle) {\r\n // Feature stylen in App.js\r\n feature.setStyle(determineFeatureStyle(feature, \"polyline\"))\r\n }\r\n } else {\r\n // Do niks\r\n }\r\n }\r\n\r\n // Functie die wordt aangeroepen voor het toevoegen van pointers aan de \r\n pointToLayer = (feature, latlng, layer) => {\r\n const { determineFeatureOptions } = this.props\r\n\r\n // Switch op bases van de in de config meegegeven layerType, keuze uit circle en marker\r\n switch (layer.pointerType) {\r\n case \"circle\":\r\n // Wanneer je een determineFeatureOptions functie meegeeft aan het HKVMap component\r\n if (determineFeatureOptions) {\r\n // CircleMarker options in App.js bepalen\r\n return L.circleMarker(latlng, determineFeatureOptions(feature, \"circle\"))\r\n } else {\r\n // Standaard circleMarker creeëren\r\n return L.circleMarker(latlng, {})\r\n }\r\n\r\n case \"marker\":\r\n default:\r\n // Wanneer je een determineFeatureOptions functie meegeeft aan het HKVMap component\r\n if (determineFeatureOptions) {\r\n // Marker options in App.js bepalen\r\n return L.marker(latlng, determineFeatureOptions(feature, \"marker\"))\r\n } else {\r\n // Standaard marker creeëren\r\n return L.marker(latlng, {})\r\n }\r\n }\r\n }\r\n\r\n onFeatureGroupUpdate = (event, layer, i) => {\r\n const map = this.mapRef.current.leafletElement // get native Map instance\r\n const group = event.target\r\n\r\n // Op basis van config bepalen of we zoomen of niet\r\n if (layer && layer.zoomTo) {\r\n if (layer.features.length === i) {\r\n if (group.getBounds().isValid()) {\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\r\n .then(() => {\r\n map.fitBounds(group.getBounds())\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\r\n })\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Na aanmaken van featureGroup\r\n onFeatureGroupAdd = (event, layer) => {\r\n const map = this.mapRef.current.leafletElement // get native Map instance\r\n const group = event.target // get native featureGroup instance\r\n\r\n group.name = layer.name\r\n group.key = layer.key\r\n \r\n if (this.props.featureGroupDidAdd) {\r\n this.props.featureGroupDidAdd(group)\r\n }\r\n\r\n // Op basis van config bepalen of we zoomen of niet\r\n if (layer && layer.zoomTo) {\r\n const bounds = group.getBounds()\r\n if (bounds.isValid()) {\r\n // Alleen zoomen wanneer bounds valide zijn\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\r\n .then(() => {\r\n map.fitBounds(group.getBounds())\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\r\n })\r\n }\r\n }\r\n }\r\n\r\n // Renderen van verschillende controls op basis van layer zijn config\r\n renderControl = (control, index) => {\r\n const { config, t } = this.props\r\n\r\n switch (control.name) {\r\n case \"LayersControl\":\r\n return (\r\n \r\n {config.baseLayers.map((baseLayer, index) => (\r\n \r\n \r\n \r\n ))}\r\n {config.layers.map((layer, index) => {\r\n if (layer.features.length === 0) {\r\n if (layer.type === \"wms\") {\r\n let layers = layer.layer\r\n\r\n if (layer.workspace) {\r\n if (layer.workspace.length > 0) {\r\n layers = `${layer.workspace}:${layer.layer}`\r\n }\r\n }\r\n return (\r\n \r\n this.onFeatureGroupAdd(event, layer)}\r\n url={layer.url}\r\n layers={layers}\r\n styles={layer.styles}\r\n format=\"image/png\"\r\n transparent\r\n />\r\n \r\n )\r\n } else {\r\n return null\r\n }\r\n }\r\n let i = 1\r\n return (\r\n \r\n this.onFeatureGroupAdd(event, layer)}>\r\n this.onFeatureGroupUpdate(event, layer)}\r\n onlayeradd={(event) => this.onFeatureGroupUpdate(event, layer, i++)}\r\n key={layer.features.length}\r\n data={layer.features}\r\n onEachFeature={this.onEachFeature}\r\n pointToLayer={(feature, latlng) => this.pointToLayer(feature, latlng, layer)}\r\n onMouseOver={this.handleFeatureMouseOver}\r\n onMouseOut={this.handleFeatureMouseOut}\r\n onClick={this.handleFeatureClick}\r\n />\r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n\r\n case \"ZoomControl\":\r\n return \r\n\r\n case \"ScaleControl\":\r\n return \r\n\r\n default:\r\n return null\r\n }\r\n }\r\n\r\n // Click on map functie\r\n handleMapClick = (event) => {\r\n const { handleMapClick } = this.props\r\n\r\n // Wanneer je een handleMapClick functie meegeeft aan het HKVMap component\r\n if (handleMapClick) {\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\r\n .then(() => {\r\n handleMapClick(this.mapRef.current, event)\r\n })\r\n }\r\n }\r\n\r\n // Click on feature functie\r\n handleFeatureClick = (event) => {\r\n const { handleFeatureClick } = this.props\r\n\r\n // Click op map functie preventen (https://stackoverflow.com/questions/50736530/react-leaflet-stop-propagation-when-click-on-a-drawn-polygon)\r\n event.originalEvent.view.L.DomEvent.stopPropagation(event)\r\n\r\n if (handleFeatureClick) {\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\r\n .then(() => {\r\n handleFeatureClick(this.mapRef.current, event)\r\n })\r\n }\r\n }\r\n\r\n // Mouse over Feature functie\r\n onMouseOver = (event) => {\r\n const { handleFeatureMouseOver } = this.props\r\n\r\n // Wanneer je een handleFeatureMouseOver functie meegeeft aan het HKVMap component\r\n if (handleFeatureMouseOver) {\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\r\n .then(() => {\r\n handleFeatureMouseOver(this.mapRef.current, event)\r\n })\r\n }\r\n }\r\n\r\n // Mouse out Feature functie\r\n onMouseOut = (event) => {\r\n const { handleFeatureMouseOut } = this.props\r\n\r\n // Wanneer je een handleFeatureMouseOut functie meegeeft aan het HKVMap component\r\n if (handleFeatureMouseOut) {\r\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\r\n .then(() => {\r\n handleFeatureMouseOut(this.mapRef.current, event)\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { config } = this.props\r\n\r\n if (!config) return null\r\n\r\n const position = [config.lat, config.lng]\r\n\r\n return (\r\n \r\n {config.controls.map((control, index) => (\r\n this.renderControl(control, index)\r\n ))}\r\n \r\n )\r\n }\r\n}\r\n\r\nHKVMap = withTranslation(\"translation\")(HKVMap)\r\nexport default connect(state => state)(HKVMap)\r\n","import vegaEmbed, { vega } from \"vega-embed\"\r\n\r\nexport async function createVega(element, spec, callback, config, locale) {\r\n vega.timeFormatLocale(locale)\r\n\r\n return vegaEmbed(element, spec, {\r\n renderer: \"canvas\",\r\n actions: false\r\n // actions: true,\r\n // i18n: {\r\n // CLICK_TO_VIEW_ACTIONS: t('clickaction'),\r\n // PNG_ACTION: t('pngaction'),\r\n // SVG_ACTION: t('svgaction')\r\n // }\r\n })\r\n .then(function (result) {\r\n result.view.key = config.key\r\n\r\n callback(result.view, config.key)\r\n })\r\n .catch(console.error)\r\n}\r\n","import React from \"react\"\r\nimport { connect } from \"react-redux\"\r\nimport { withTranslation } from \"react-i18next\"\r\n\r\nimport asyncActions from \"../../../state/async-actions\"\r\nimport * as actions from \"../../../state/actions\"\r\n\r\nimport ReactResizeDetector from \"react-resize-detector\"\r\n\r\nimport { createVega } from \"./vegaUtils\"\r\n\r\nimport \"./HKVVega.css\"\r\n\r\nclass HKVVega extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.vegaRef = React.createRef()\r\n\r\n this.state = {}\r\n\r\n const { config, t } = this.props\r\n\r\n const locale = {\r\n dateTime: \"%a %e %B %Y %T\",\r\n date: \"%d-%m-%Y\",\r\n time: \"%H:%M:%S\",\r\n periods: [\"AM\", \"PM\"],\r\n days: [t(\"sunday\"), t(\"monday\"), t(\"tuesday\"), t(\"wednesday\"), t(\"thursday\"), t(\"friday\"), t(\"saturday\")],\r\n shortDays: [t(\"shortsunday\"), t(\"shortmonday\"), t(\"shorttuesday\"), t(\"shortwednesday\"), t(\"shortthursday\"), t(\"shortfriday\"), t(\"shortsaturday\")],\r\n months: [t(\"january\"), t(\"february\"), t(\"march\"), t(\"april\"), t(\"may\"), t(\"june\"), t(\"july\"), t(\"august\"), t(\"september\"), t(\"october\"), t(\"november\"), t(\"december\")],\r\n shortMonths: [t(\"jan\"), t(\"feb\"), t(\"mar\"), t(\"apr\"), t(\"may\"), t(\"jun\"), t(\"jul\"), t(\"aug\"), t(\"sep\"), t(\"oct\"), t(\"nov\"), t(\"dec\")]\r\n }\r\n\r\n // this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\r\n // .then(() => {\r\n let file = config.specName\r\n let local = true\r\n\r\n if (config.specUrl) {\r\n file = config.specUrl\r\n local = false\r\n }\r\n\r\n if (file) {\r\n this.props.dispatch(asyncActions.getVegaSpec(file, local))\r\n .then((spec) => {\r\n this.setState({ fetchedSpec: spec }, () => {\r\n createVega(this.vegaRef.current, spec, this.vegaDidMount, config, locale)\r\n // this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\r\n })\r\n })\r\n } else {\r\n this.props.dispatch({ type: actions.SET_ERROR, error: { message: \"Er is geen vega spec-name/ url meegegeven\", type: \"error\", duration: 4000 } })\r\n // this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\r\n }\r\n // })\r\n }\r\n\r\n vegaDidMount = (viewObject, key) => {\r\n const { config, vegaDidMount } = this.props\r\n const { initialSizes } = this.state\r\n\r\n this.viewObject = viewObject\r\n\r\n // Als vega is \"gemount\" run de handleResize\r\n if (initialSizes) {\r\n this.handleResize(viewObject, initialSizes.width, initialSizes.height)\r\n } else {\r\n const element = document.getElementById(`vega-container-${config.key}`)\r\n this.handleResize(viewObject, element.offsetWidth, element.offsetHeight)\r\n }\r\n\r\n vegaDidMount(viewObject, key)\r\n }\r\n\r\n handleResize = (viewObject, width, height) => {\r\n // Als er nog geen vega viewObject is gemount, zet de size in state zodat we deze na de mount kunnen gebruiken\r\n if (!viewObject) {\r\n this.setState({ initialSizes: { width: width, height: height } })\r\n }\r\n\r\n this.props.dispatch(asyncActions.sendSignal(viewObject, { signalName: \"width\", value: width }))\r\n this.props.dispatch(asyncActions.sendSignal(viewObject, { signalName: \"height\", value: height }))\r\n }\r\n\r\n render() {\r\n const { config } = this.props\r\n const { fetchedSpec } = this.state\r\n\r\n if (!fetchedSpec) return null\r\n\r\n return (\r\n this.handleResize(this.viewObject, width, height)}>\r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nHKVVega = withTranslation(\"translation\")(HKVVega)\r\nexport default connect(state => state)(HKVVega)\r\n","import firebase from \"firebase/app\"\r\nimport \"firebase/auth\"\r\nimport \"firebase/database\"\r\nimport \"firebase/firestore\"\r\n\r\nimport config from \"../configAccra.json\"\r\n\r\nif (!firebase.apps.length) {\r\n firebase.initializeApp(config)\r\n}\r\n\r\nconst auth = firebase.auth()\r\nconst db = firebase.database()\r\nconst firestore = firebase.firestore()\r\n\r\nexport { auth, db, firestore }\r\n","import { auth } from \"./firebase\"\r\n\r\nimport { getUrl } from \"../../../../state/async-actions/mangrove\"\r\n\r\nimport * as actions from \"../../../../state/actions\"\r\n\r\n// Versturen van registratie verzoek\r\nexport function sendRegisterEmail(server, appid, firebaseUser, callback) {\r\n const parameters = {\r\n appid: appid,\r\n name: firebaseUser.user.displayName,\r\n email: firebaseUser.user.email,\r\n uid: firebaseUser.user.uid\r\n }\r\n\r\n const functionName = \"mangrove.appfunctions.SendRegisterEmail\"\r\n const url = getUrl(server, functionName, parameters)\r\n\r\n return async function (dispatch) {\r\n return await fetch(url)\r\n .then(response => {\r\n if (callback) {\r\n callback(firebaseUser)\r\n }\r\n return null\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: `${error} in function sendRegisterEmail`, type: \"error\" } })\r\n })\r\n }\r\n}\r\n\r\n// Account aanmaken met email en wachtwoord\r\nexport const doCreateUserWithEmailAndPassword = (email, name, password, dispatch, callback) => {\r\n auth.createUserWithEmailAndPassword(email, password)\r\n .then(function (firebaseUser) {\r\n if (firebaseUser) {\r\n if (!firebaseUser.user.emailVerified) {\r\n alert(\"gebruiker is niet verified\")\r\n // Als email niet verified is moet er een email worden verzonden...\r\n // sendRegisterEmail(\"tsws\", 999, firebaseUser)\r\n }\r\n\r\n firebaseUser.user.updateProfile({\r\n displayName: name\r\n })\r\n .then(function () {\r\n const userinfo = {\r\n uid: firebaseUser.user.uid,\r\n token: firebaseUser.user.xa,\r\n name: name,\r\n email: firebaseUser.user.email,\r\n verified: firebaseUser.user.emailVerified\r\n }\r\n\r\n if (callback) {\r\n callback(firebaseUser)\r\n }\r\n\r\n dispatch({ type: actions.SET_ERROR, error: { message: \"Er is een account verzoek verstuurd.\", type: \"info\", duration: 6000 } })\r\n dispatch({ type: actions.SET_AUTH_USER, userinfo: userinfo })\r\n })\r\n }\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: error, type: \"error\", duration: 6000 } })\r\n })\r\n}\r\n\r\n// Wachtwoord resetten\r\nexport const doPasswordReset = (email, dispatch, callback) => {\r\n auth.sendPasswordResetEmail(email)\r\n .then(function (firebaseUser) {\r\n if (callback) {\r\n callback(firebaseUser)\r\n }\r\n dispatch({ type: actions.SET_ERROR, error: { message: \"Er is een e-mail verzonden naar het opgegeven account\", type: \"info\", duration: 6000 } })\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: error, type: \"error\", duration: 6000 } })\r\n })\r\n}\r\n\r\n// Opnieuw authenticeren\r\nexport function reAuthenticate(dispatch, callback) {\r\n const currentUser = auth.currentUser\r\n if (currentUser) {\r\n currentUser.getIdToken(true)\r\n .then(function (idToken) {\r\n const userinfo = {\r\n uid: currentUser.uid,\r\n token: idToken,\r\n name: currentUser.displayName,\r\n email: currentUser.email,\r\n verified: currentUser.verified\r\n }\r\n\r\n if (callback) {\r\n callback(userinfo)\r\n }\r\n\r\n dispatch({ type: actions.SET_AUTH_USER, userinfo: userinfo })\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: error, type: \"error\", duration: 6000 } })\r\n })\r\n }\r\n}\r\n\r\n// Anoniem inloggen\r\nexport function doSignInAnonymously(dispatch, callback) {\r\n auth.signInAnonymously()\r\n .then(function (firebaseUser) {\r\n if (firebaseUser) {\r\n const userinfo = {\r\n uid: firebaseUser.user.uid,\r\n token: firebaseUser.user.xa\r\n }\r\n\r\n if (callback) {\r\n callback(userinfo)\r\n }\r\n\r\n dispatch({ type: actions.SET_AUTH_USER, userinfo: userinfo })\r\n }\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: error, type: \"error\", duration: 6000 } })\r\n })\r\n}\r\n\r\n// Uitloggen\r\nexport function doSignOut(dispatch, callback) {\r\n auth.signOut()\r\n .then(() => {\r\n const userinfo = { uid: \"\", token: \"\", name: \"\", email: \"\", verified: \"\" }\r\n\r\n if (callback) {\r\n callback(userinfo)\r\n }\r\n\r\n dispatch({ type: actions.SET_AUTH_USER, userinfo: userinfo })\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: error, type: \"error\", duration: 6000 } })\r\n })\r\n}\r\n\r\n// observer van firebase authenticatie\r\nexport function onAuthStateChanged(dispatch, callback) {\r\n auth.onAuthStateChanged((firebaseUser) => {\r\n let userinfo = { uid: \"\", token: \"\", name: \"\", email: \"\", verified: \"\" }\r\n\r\n if (firebaseUser) {\r\n userinfo = {\r\n uid: firebaseUser.uid,\r\n token: firebaseUser.xa,\r\n name: firebaseUser.displayName,\r\n email: firebaseUser.email,\r\n verified: firebaseUser.emailVerified\r\n }\r\n }\r\n\r\n if (callback) {\r\n callback(userinfo)\r\n }\r\n\r\n dispatch({ type: actions.SET_AUTH_USER, userinfo: userinfo })\r\n })\r\n}\r\n\r\n// Login met email en wachtwoord\r\nexport function doSignInWithEmailAndPassword(email, password, dispatch, callback) {\r\n auth.signInWithEmailAndPassword(email, password)\r\n .then(function (firebaseUser) {\r\n if (firebaseUser) {\r\n const userinfo = {\r\n uid: firebaseUser.user.uid,\r\n token: firebaseUser.user.xa,\r\n name: firebaseUser.user.displayName,\r\n email: firebaseUser.user.email,\r\n verified: firebaseUser.user.emailVerified\r\n }\r\n\r\n if (callback) {\r\n callback(userinfo)\r\n }\r\n\r\n dispatch({ type: actions.SET_AUTH_USER, userinfo: userinfo })\r\n }\r\n })\r\n .catch(function (error) {\r\n dispatch({ type: actions.SET_ERROR, error: { message: error, type: \"error\", duration: 6000 } })\r\n })\r\n}\r\n","import React from \"react\"\r\nimport { connect } from \"react-redux\"\r\nimport { withStyles } from \"@material-ui/core/styles\"\r\nimport { withTranslation } from \"react-i18next\"\r\n\r\nimport {\r\n Avatar,\r\n Button,\r\n DialogContent,\r\n DialogTitle,\r\n FormControl,\r\n Link,\r\n TextField,\r\n Typography\r\n} from \"@material-ui/core\"\r\n\r\nimport { LockOutlined } from \"@material-ui/icons\"\r\n\r\nimport HKVDialog from \"../../../HKVDialog/2.0\"\r\n\r\nimport { doCreateUserWithEmailAndPassword, doPasswordReset, doSignInWithEmailAndPassword } from \"./Functions\"\r\n\r\nfunction Copyright() {\r\n return (\r\n \r\n {\"Copyright © \"}\r\n \r\n HKV Services\r\n \r\n {\" \"}\r\n {new Date().getFullYear()}\r\n {\".\"}\r\n \r\n )\r\n}\r\n\r\nconst styles = theme => ({\r\n image: {\r\n backgroundImage: \"url(\\\"/static/images/login.jpg\\\")\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n [theme.breakpoints.down(\"md\")]: {\r\n display: \"none\"\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n width: \"50%\",\r\n display: \"block\"\r\n },\r\n [theme.breakpoints.up(\"lg\")]: {\r\n width: \"75%\",\r\n display: \"block\"\r\n }\r\n },\r\n paper: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: theme.spacing(8, 4),\r\n boxShadow: theme.shadows[5],\r\n [theme.breakpoints.down(\"md\")]: {\r\n width: \"100%\"\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n width: \"50%\"\r\n },\r\n [theme.breakpoints.up(\"lg\")]: {\r\n width: \"25%\"\r\n }\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.primary.main\r\n },\r\n form: {\r\n width: \"100%\",\r\n marginTop: theme.spacing(1)\r\n }\r\n})\r\n\r\nclass Login extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n dialogAccount: null,\r\n dialogPassword: null,\r\n userinfo: {}\r\n }\r\n }\r\n\r\n handleChangeEmail = (event, type) => {\r\n const { dialogAccount, dialogPassword, userinfo } = this.state\r\n\r\n // 13 = enter\r\n if (event.keyCode === 13) {\r\n // Bepalen welke functie we moeten uitvoeren afhankelijk van welk textfield type we komen\r\n switch (type) {\r\n case \"forgot\":\r\n this.handlePasswordRequest(dialogPassword)\r\n break\r\n\r\n case \"create\":\r\n this.handleCreateAccount(dialogAccount)\r\n break\r\n \r\n default:\r\n this.handleLogin()\r\n break\r\n }\r\n }\r\n\r\n userinfo.email = event.target.value\r\n this.setState({ userinfo })\r\n }\r\n\r\n handleChangeName = (event) => {\r\n const { dialogAccount, userinfo } = this.state\r\n\r\n // 13 = enter\r\n if (event.keyCode === 13) {\r\n this.handleCreateAccount(dialogAccount)\r\n }\r\n\r\n userinfo.name = event.target.value\r\n this.setState({ userinfo })\r\n }\r\n\r\n handleChangePassword = (event, type) => {\r\n const { dialogAccount, userinfo } = this.state\r\n\r\n // 13 = enter\r\n if (event.keyCode === 13) {\r\n // Bepalen welke functie we moeten uitvoeren afhankelijk van welk textfield type we komen\r\n switch (type) {\r\n case \"create\":\r\n this.handleCreateAccount(dialogAccount)\r\n break\r\n \r\n default:\r\n this.handleLogin()\r\n break\r\n }\r\n }\r\n\r\n userinfo.password = event.target.value\r\n this.setState({ userinfo })\r\n }\r\n\r\n handleLogin = () => {\r\n const { dispatch } = this.props\r\n const { email, password } = this.state.userinfo\r\n\r\n // Inloggen met opgegeven credentials\r\n doSignInWithEmailAndPassword(email, password, dispatch)\r\n }\r\n\r\n openForgotPassword = () => {\r\n this.setState({ dialogPassword: { open: true, size: \"medium\" } })\r\n }\r\n\r\n openNoAccount = () => {\r\n this.setState({ dialogAccount: { open: true, size: \"medium\" } })\r\n }\r\n\r\n handleCreateAccount = (config) => {\r\n const { dispatch } = this.props\r\n const { email, name, password } = this.state.userinfo\r\n\r\n // functie voor aanmaken account\r\n doCreateUserWithEmailAndPassword(email, name, password, dispatch)\r\n this.closeDialog(config)\r\n }\r\n\r\n handlePasswordRequest = (config) => {\r\n const { dispatch } = this.props\r\n const { email } = this.state.userinfo\r\n\r\n // functie voor wachtwoord reset\r\n doPasswordReset(email, dispatch)\r\n this.closeDialog(config)\r\n }\r\n\r\n closeDialog = (config) => {\r\n config.open = false\r\n this.setState({ config })\r\n }\r\n\r\n render() {\r\n const { classes, t, theme } = this.props\r\n const { dialogAccount, dialogPassword } = this.state\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {t(\"Log in\")}\r\n \r\n \r\n this.handleChangeEmail(event)}\r\n />\r\n this.handleChangePassword(event)}\r\n />\r\n this.handleLogin()}\r\n >\r\n {t(\"Log in\")}\r\n \r\n
\r\n this.openForgotPassword()}\r\n >\r\n {t(\"Wachtwoord vergeten\")}\r\n \r\n {/* this.openNoAccount()}\r\n >\r\n {t(\"Account aanmaken\")}\r\n */}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {t(\"Account aanmaken\")}\r\n \r\n {t(\"Vul je gegevens in om een account aan te vragen.\")}\r\n \r\n this.handleChangeEmail(event, \"create\")}\r\n />\r\n this.handleChangeName(event)}\r\n />\r\n this.handleChangePassword(event, \"create\")}\r\n />\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {t(\"Wachtwoord vergeten\")}\r\n \r\n {t(\"Voer je e-mailadres in en we sturen je een link om je wachtwoord opnieuw in te stellen.\")}\r\n \r\n this.handleChangeEmail(event, \"forgot\")}\r\n />\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nLogin = withTranslation(\"translation\")(Login)\r\nLogin = withStyles(styles, { withTheme: true })(Login)\r\nexport default connect(state => state)(Login)\r\n","import LZString from \"lz-string\"\r\n\r\nexport async function makeRequest(method, url, headers, file, callback) {\r\n return await new Promise(function (resolve, reject) {\r\n const filecontent = file.content\r\n const compressedString = LZString.compressToBase64(filecontent)\r\n\r\n const formData = new FormData()\r\n\r\n formData.append(\"name\", file.value.name)\r\n formData.append(\"file\", compressedString)\r\n\r\n headers.forEach(header => {\r\n formData.append(header.key, header.value)\r\n })\r\n\r\n let xhr = new XMLHttpRequest()\r\n\r\n if (\"withCredentials\" in xhr) {\r\n // Most browsers.\r\n xhr.open(method, url, true)\r\n } else if (typeof XDomainRequest !== \"undefined\") {\r\n // // IE8 & IE9\r\n // xhr = new XDomainRequest()\r\n // xhr.open(method, url)\r\n } else {\r\n // CORS not supported.\r\n xhr = null\r\n }\r\n\r\n xhr.onload = function () {\r\n if (this.status >= 200 && this.status < 300) {\r\n file.responseText = xhr.response\r\n if (callback) {\r\n callback(file)\r\n }\r\n } else {\r\n reject({\r\n status: this.status,\r\n statusText: xhr.statusText\r\n })\r\n }\r\n }\r\n xhr.onerror = function () {\r\n reject({\r\n status: this.status,\r\n statusText: xhr.statusText\r\n })\r\n }\r\n\r\n xhr.withCredentials = false\r\n xhr.send(formData)\r\n })\r\n}\r\n","import i18n from \"i18next\"\r\nimport { initReactI18next } from \"react-i18next\"\r\n\r\nimport Backend from \"i18next-http-backend\"\r\n\r\ni18n.languages = [\"nl\", \"en\"]\r\n\r\ni18n\r\n .use(Backend)\r\n .use(initReactI18next)\r\n .init({\r\n fallbackLng: \"nl\",\r\n ns: [\"translation\"],\r\n defaultNS: \"translation\",\r\n loadPath: \"../public/locales/{{lng}}/{{ns}}.json\",\r\n debug: false,\r\n keySeparator: \">\",\r\n nsSeparator: \"|\",\r\n interpolation: {\r\n escapeValue: false // not needed for react as it escapes by default\r\n }\r\n })\r\n\r\nexport default i18n\r\n","import React from \"react\"\nimport { connect } from \"react-redux\"\nimport { withStyles } from \"@material-ui/core/styles\"\nimport { withTranslation } from \"react-i18next\"\n\nimport asyncActions from \"./state/async-actions\"\nimport * as actions from \"./state/actions\"\n\nimport {\n Button,\n Checkbox,\n DialogContent,\n DialogTitle,\n Divider,\n FormControl,\n FormControlLabel,\n IconButton,\n InputLabel,\n List,\n ListItem,\n MenuItem,\n MobileStepper,\n Paper,\n RadioGroup,\n Select,\n Snackbar,\n TextareaAutosize,\n TextField,\n Tooltip,\n Typography\n} from \"@material-ui/core\"\n\nimport {\n Add,\n ChevronLeft,\n ChevronRight,\n Delete,\n ExitToApp,\n VerifiedUser\n} from \"@material-ui/icons\"\n\nimport Alert from \"@material-ui/lab/Alert\"\n\n// Hieronder componenten importeren\nimport HKVDialog from \"./components/HKVDialog/2.0\"\nimport HKVDrawer from \"./components/HKVDrawer/1.0\"\nimport HKVMap from \"./components/HKVMap/3.0\"\nimport HKVVega from \"./components/HKVVega/3.0\"\n\nimport Login from \"./components/HKVFirebase/2.0/Authentication/Login\"\n\n// import { getPushTokenStatus, toggleSubscription } from \"./components/HKVFirebase/2.0/Messaging/Functions\"\nimport { doSignOut, onAuthStateChanged } from \"./components/HKVFirebase/2.0/Authentication/Functions\"\nimport { firestore } from \"./components/HKVFirebase/2.0/Authentication/firebase\"\n\nimport { getUploadUrl } from \"./state/async-actions/mangrove\"\n\nimport { makeRequest } from \"./lib/utils\"\n\nimport { convertFromHTML, convertToRaw, ContentState, EditorState } from \"draft-js\"\nimport htmlToDraft from \"html-to-draftjs\"\nimport { draftToMarkdown } from \"markdown-draft-js\"\nimport { Editor } from \"react-draft-wysiwyg\"\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\"\n\nimport { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\"\n\nimport SwipeableViews from \"react-swipeable-views\"\n\nimport { FileUploader } from \"devextreme-react\"\n\nimport i18n from \"./i18n\"\n\nimport moment from \"moment\"\nimport \"moment/locale/nl\"\n\nimport \"./App.css\"\nimport draftToHtml from \"draftjs-to-html\"\n\nconst styles = theme => ({\n container: {\n height: \"100%\",\n padding: theme.spacing(2),\n boxSizing: \"border-box\"\n },\n vegaContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n // flexGrow: 1,\n [theme.breakpoints.down(\"lg\")]: {\n width: \"100%\",\n height: 300,\n margin: theme.spacing(1, 0, 0, 0),\n \"&:first-of-type\": {\n margin: theme.spacing(0)\n }\n },\n [theme.breakpoints.up(\"lg\")]: {\n width: `calc(50% - ${theme.spacing(1)}px)`,\n height: 300,\n margin: theme.spacing(2, 2, 0, 0),\n \"&:nth-child(2n+2)\": {\n margin: theme.spacing(2, 0, 0, 0)\n },\n \"&:nth-of-type(1)\": {\n margin: theme.spacing(0, 2, 0, 0)\n },\n \"&:nth-of-type(2)\": {\n margin: theme.spacing(0)\n }\n }\n },\n geoFilesButton: {\n \"&:first-of-type\": {\n [theme.breakpoints.down(1500)]: {\n margin: theme.spacing(0, 0.5, 0, 0),\n padding: \"4px 6px\"\n },\n [theme.breakpoints.up(1500)]: {\n margin: theme.spacing(0, 1, 0, 0),\n padding: \"4px 10px\"\n }\n },\n \"&:last-of-type\": {\n [theme.breakpoints.down(1500)]: {\n padding: \"4px 6px\"\n },\n [theme.breakpoints.up(1500)]: {\n padding: \"4px 10px\"\n }\n }\n },\n layerButtonContainer: {\n display: \"flex\",\n justifyContent: \"center\",\n marginTop: theme.spacing(2)\n },\n layerButtons: {\n marginLeft: theme.spacing(2),\n \"&:first-of-type\": {\n marginLeft: 0\n }\n },\n anchorOriginBottomCenter: {\n bottom: 56\n },\n header: {\n background: theme.palette.primary.main,\n color: \"white\",\n fontWeight: 500,\n width: \"100%\",\n padding: theme.spacing(0.5, 1),\n boxSizing: \"border-box\",\n boxShadow: theme.shadows[2],\n marginBottom: theme.spacing(1)\n },\n tableRow: {\n \"&:nth-child(odd)\": {\n backgroundColor: \"#eeeeee\"\n }\n },\n tableCell: {\n border: \"1px solid #dddddd\",\n textAlign: \"left\",\n padding: theme.spacing(1)\n },\n textArea: {\n minWidth: 300,\n minHeight: 81,\n maxHeight: \"100%\",\n padding: theme.spacing(1),\n boxSizing: \"border-box\",\n borderRadius: 4,\n border: \"1px solid #dddddd\",\n fontFamily: \"unset\",\n fontSize: \"unset\",\n outline: \"none\",\n \"&:hover, &:focus\": {\n border: \"1px solid #aaaaaa\"\n }\n }\n})\n\nclass App extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n activeStep: 0,\n drawerStates: {},\n editorStateInfo: {},\n mapConfig: {\n key: \"main\",\n lat: 5.598624,\n lng: -0.217034,\n zoom: 11,\n baseLayers: [\n {\n name: \"Map\",\n checked: true,\n attribution: \"© Esri, | HKV Services\",\n url: \"https://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}\"\n },\n {\n name: \"Satalite\",\n checked: false,\n attribution: \"© Esri, | HKV Services\",\n url: \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}\"\n }\n ],\n layers: [\n {\n type: \"wms\",\n name: \"low_risk\",\n key: \"low\",\n checked: true,\n zoomto: false,\n url: \"https://tsgeo.hkvservices.nl/geoserver/wms\",\n layer: \"layer1\",\n workspace: \"myfloodrisk_accra\",\n styles: [\n \"waterdepth\"\n ],\n features: []\n },\n {\n type: \"wms\",\n name: \"moderate_risk\",\n key: \"moderate\",\n checked: false,\n zoomto: false,\n url: \"https://tsgeo.hkvservices.nl/geoserver/wms\",\n layer: \"layer2\",\n workspace: \"myfloodrisk_accra\",\n styles: [\n \"waterdepth\"\n ],\n features: []\n },\n {\n type: \"wms\",\n name: \"high_risk\",\n key: \"high\",\n checked: false,\n zoomto: false,\n url: \"https://tsgeo.hkvservices.nl/geoserver/wms\",\n layer: \"layer3\",\n workspace: \"myfloodrisk_accra\",\n styles: [\n \"waterdepth\"\n ],\n features: []\n },\n {\n type: \"wms\",\n name: \"App Area\",\n key: \"Area\",\n checked: true,\n zoomto: false,\n url: \"https://tsgeo.hkvservices.nl/geoserver/wms\",\n layer: \"App_area\",\n workspace: \"myfloodrisk_accra\",\n styles: [\n \"countries\"\n ],\n features: []\n }\n ],\n controls: [\n { name: \"LayersControl\", position: \"topright\" },\n { name: \"ZoomControl\", position: \"bottomright\" },\n { name: \"ScaleControl\", position: \"bottomleft\", metric: true }\n ]\n },\n publishLayers: { low: \"\", moderate: \"\", high: \"\" },\n selectedLayers: [],\n uploadedImages: [],\n viewerType: \"dashboard\",\n counters: [\n { name: \"Number of downloads from the stores\", key: \"downloads\" },\n { name: \"Number of automatic push notifications sent (Rainfall forecast)\", key: \"pushnotifications\" },\n { name: \"How often each menu item is opened\", key: \"menuitems\", spec: \"bar-chart\" },\n { name: \"How often are locations in MMDAs shown requested\", key: \"locationrequests\", spec: \"bar-chart\" },\n { name: \"How often is the returned risk (low/moderate/high)\", key: \"floodrisk\", spec: \"bar-chart\" },\n { name: \"Combination of risk per MMDA\", key: \"combination\", spec: \"bar-chart-combination\" }\n ]\n }\n\n this.mapRefs = {}\n this.vegaRefs = {}\n this.featureGroupRefs = {}\n\n const that = this\n const { dispatch } = this.props\n\n const showdown = require(\"showdown\")\n const converter = new showdown.Converter()\n\n this.onDragEnd = this.onDragEnd.bind(this)\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 2 + that.state.counters.length))\n .then(() => {\n // Checken of gebruiker is ingelogd\n onAuthStateChanged(dispatch, function (userinfo) {\n // Als gebruiker verified is haal locaties op\n if (userinfo.verified) {\n that.props.dispatch(asyncActions.getAppInfo(\"tsws\", \"myfloodrisk\", { appid: 42, admin: true }))\n .then((appinfo) => {\n if (JSON.stringify(window.localStorage.selectedLanguage)) {\n that.changeLanguage(that, window.localStorage.selectedLanguage)\n } else {\n if (appinfo && appinfo.languages) {\n that.changeLanguage(that, appinfo.languages.find(language => language.preference === true).short)\n } else {\n that.changeLanguage(that, \"en\")\n }\n }\n\n that.props.dispatch(asyncActions.getRainfallForecast(\"tsws\"))\n .then(() => {\n that.props.dispatch(asyncActions.setLoader(that.props.database.loading - 1))\n })\n\n that.state.counters.forEach(counter => {\n that.getFirestoreData(counter, function () {\n that.props.dispatch(asyncActions.setLoader(that.props.database.loading - 1))\n })\n })\n\n that.props.dispatch(asyncActions.getContent(\"tsws\", { appid: 42, key: \"DISCLAIMER\", uid: userinfo.uid, token: userinfo.token }, \"contentType=text/plain\"))\n .then(text => {\n const html = converter.makeHtml(text)\n // const blocksFromHTML = convertFromHTML(html)\n const blocksFromHTML = htmlToDraft(html)\n\n const state = ContentState.createFromBlockArray(blocksFromHTML.contentBlocks, blocksFromHTML.entityMap)\n\n that.setState({ editorStateDisclaimer: EditorState.createWithContent(state) })\n })\n\n appinfo.riskSituationLayers.forEach(layer => {\n const floodRiskLayer = that.state.mapConfig.layers.find(overlay => overlay.key === layer.key)\n\n if (floodRiskLayer) {\n that.state.publishLayers[layer.key] = layer.layer\n that.setState({ publishLayers: that.state.publishLayers })\n\n floodRiskLayer.description = layer.description\n floodRiskLayer.layer = layer.layer\n floodRiskLayer.workspace = layer.workspace\n floodRiskLayer.styles = [layer.styles]\n }\n })\n\n that.props.dispatch(asyncActions.getScheduledNotifications(\"tsws\", { appid: 42 }))\n .then(() => {\n that.setState({ mapConfig: that.state.mapConfig }, () => {\n // Slides ophalen (voor Literacy information)\n that.getInfoSlides()\n })\n })\n })\n } else {\n // Als user niet verified is (bijvoorbeeld wanneer je op een app anoniem bent ingelogd), loguit\n doSignOut(dispatch, function (userinfo) {\n that.props.dispatch(asyncActions.setLoader(that.props.database.loading - (2 + that.state.counters.length)))\n })\n }\n })\n })\n }\n\n changeLanguage = (that, lng) => {\n i18n.changeLanguage(lng)\n\n // Moment (tijdzones etc) lang zetten\n moment.locale(lng)\n\n that.state.selectedLanguage = lng\n window.localStorage.selectedLanguage = lng\n }\n\n mapDidMount = (mapRef) => {\n this.mapRefs[mapRef.key] = mapRef\n }\n\n getFirestoreData = (counter, callback) => {\n const { counters } = this.state\n\n let documents = []\n const data = []\n\n const that = this\n\n switch (counter.key) {\n case \"downloads\":\n documents = [\n { name: \"App store (iOS)\", key: \"storeDownloads\", field: \"iOS\" },\n { name: \"Play store (Android)\", key: \"storeDownloads\", field: \"Android\" }\n ]; break\n\n case \"pushnotifications\":\n documents = [\n { name: \"Send push notifications\", key: \"pushNotifications\", field: \"count\" }\n ]; break\n\n case \"menuitems\":\n documents = [\n { name: \"House\", key: \"menuItems\", field: \"house\" },\n { name: \"Map\", key: \"menuItems\", field: \"map\" },\n { name: \"Information\", key: \"menuItems\", field: \"information\" },\n { name: \"Disclaimer\", key: \"menuItems\", field: \"disclaimer\" },\n { name: \"Demo\", key: \"menuItems\", field: \"demo\" },\n { name: \"Rainfall\", key: \"menuItems\", field: \"rainfall\" }\n ]; break\n\n case \"locationrequests\":\n documents = [\n { name: \"Accra Metropolitan\", key: \"Accra_Metropolitan_MMDA\", field: \"count\" },\n { name: \"GA East Municipal\", key: \"Ga_East_Municipal_MMDA\", field: \"count\" },\n { name: \"GA West Municipal\", key: \"Ga_West_Municipal_MMDA\", field: \"count\" }\n ]; break\n\n case \"floodrisk\":\n documents = [\n { name: \"Low\", key: \"returnedRiskLow\", field: \"count\" },\n { name: \"Moderate\", key: \"returnedRiskModerate\", field: \"count\" },\n { name: \"High\", key: \"returnedRiskHigh\", field: \"count\" }\n ]; break\n\n case \"combination\":\n documents = [\n { name: \"Total\", locationKey: \"Accra - Total\", key: \"Accra_Metropolitan_MMDA\", field: \"count\", location: \"Accra Metropolitan\" },\n { name: \"Low\", locationKey: \"Accra - Low\", key: \"Accra_Metropolitan_MMDA\", field: \"low\", location: \"Accra Metropolitan\" },\n { name: \"Moderate\", locationKey: \"Accra - Moderate\", key: \"Accra_Metropolitan_MMDA\", field: \"moderate\", location: \"Accra Metropolitan\" },\n { name: \"High\", locationKey: \"Accra - High\", key: \"Accra_Metropolitan_MMDA\", field: \"high\", location: \"Accra Metropolitan\" },\n { name: \"Total\", locationKey: \"GA East - Total\", key: \"Ga_East_Municipal_MMDA\", field: \"count\", location: \"Ga East Municipal\" },\n { name: \"Low\", locationKey: \"GA East - Low\", key: \"Ga_East_Municipal_MMDA\", field: \"low\", location: \"Ga East Municipal\" },\n { name: \"Moderate\", locationKey: \"GA East - Moderate\", key: \"Ga_East_Municipal_MMDA\", field: \"moderate\", location: \"Ga East Municipal\" },\n { name: \"High\", locationKey: \"GA East - High\", key: \"Ga_East_Municipal_MMDA\", field: \"high\", location: \"Ga East Municipal\" },\n { name: \"Total\", locationKey: \"GA West - Total\", key: \"Ga_West_Municipal_MMDA\", field: \"count\", location: \"Ga West Municipal\" },\n { name: \"Low\", locationKey: \"GA West - Low\", key: \"Ga_West_Municipal_MMDA\", field: \"low\", location: \"Ga West Municipal\" },\n { name: \"Moderate\", locationKey: \"GA West - Moderate\", key: \"Ga_West_Municipal_MMDA\", field: \"moderate\", location: \"Ga West Municipal\" },\n { name: \"High\", locationKey: \"GA West - High\", key: \"Ga_West_Municipal_MMDA\", field: \"high\", location: \"Ga West Municipal\" }\n ]; break\n\n default:\n break\n }\n\n let type = \"counter\"\n if (counter.spec) {\n type = \"vega\"\n }\n\n // Document zijn ref ophalen\n if (documents.length > 0) {\n documents.forEach(document => {\n const ref = firestore.collection(\"counters\").doc(document.key)\n\n if (ref) {\n ref.onSnapshot(snapshot => {\n if (snapshot.exists) {\n // Als document bestaat zet field waardes in data array\n // Bij combinatio nis de name niet unique dus moeten we de locationKey gebruiken\n if (counter.key === \"combination\") {\n if (data.find(d => d.locationKey === document.locationKey)) {\n data.find(d => d.locationKey === document.locationKey).value = snapshot.data()[document.field]\n } else {\n data.push({ name: document.name, value: snapshot.data()[document.field], location: document.location })\n }\n } else {\n if (data.find(d => d.name === document.name)) {\n data.find(d => d.name === document.name).value = snapshot.data()[document.field]\n } else {\n data.push({ name: document.name, value: snapshot.data()[document.field] })\n }\n }\n\n // Als we evenveel data hebben als dat we documenten hebben pushen we de data naar vega\n // Behalve wanneer we al een keer geinitialiseerd hebben, dan veranderen alleen bepaalde objecten real time\n if (data.length === documents.length || counter.isInitialized) {\n counters.find(c => c.key === counter.key).data = data\n that.setState({ counters }, () => {\n if (type === \"vega\") {\n const viewObject = that.vegaRefs[counter.key]\n\n that.props.dispatch(asyncActions.updateVegaData(viewObject, \"table\", data))\n }\n })\n\n // Als we een update doen hoeven we niet de callback uit te voeren\n if (callback && !counter.isInitialized) {\n counter.isInitialized = true\n callback(data)\n }\n }\n }\n })\n } else {\n if (callback) {\n callback()\n }\n }\n })\n }\n }\n\n vegaDidMount = (viewObject) => {\n const { counters } = this.state\n\n this.vegaRefs[viewObject.key] = viewObject\n\n const data = counters.find(vega => vega.key === viewObject.key).data\n\n let title = \"\"\n switch (viewObject.key) {\n case \"downloads\": title = \"Amount of downloads\"; break\n case \"pushnotifications\": title = \"Send push notifications\"; break\n case \"menuitems\": title = \"Menu clicks\"; break\n case \"locationrequests\": title = \"Region's\"; break\n case \"floodrisk\": title = \"Risks returned\"; break\n case \"combination\": title = \"Risks returned per region\"; break\n default: break\n }\n\n if (data && data.length > 0) {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.props.dispatch(asyncActions.sendSignal(viewObject, { signalName: \"xscaleTitle\", value: title }))\n this.props.dispatch(asyncActions.sendSignal(viewObject, { signalName: \"xscaleAlign\", value: data.length > 6 ? \"right\" : \"center\" }))\n this.props.dispatch(asyncActions.sendSignal(viewObject, { signalName: \"labelAngle\", value: data.length > 6 ? -25 : 0 }))\n .then(() => {\n this.props.dispatch(asyncActions.updateVegaData(viewObject, \"table\", data))\n .then(() => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n })\n })\n }\n }\n\n featureGroupDidAdd = (groupRef) => {\n this.featureGroupRefs[groupRef.key] = groupRef\n }\n\n getInfoSlides = (zoomToEnd) => {\n const { database } = this.props\n const { editorStateInfo } = this.state\n\n const showdown = require(\"showdown\")\n const converter = new showdown.Converter()\n\n this.props.dispatch(asyncActions.getSlides(\"tsws\", { appid: 42 }))\n .then((json) => {\n const slides = json.filter(obj => obj.key !== \"DISCLAIMER\")\n\n // Steps zijn de keys \n const infoSlides = []\n slides.forEach((slide, index) => {\n const currentNotification = database.notifications && database.notifications.find(notification => notification.key === slide.key)\n\n let currentNotificationStartTime = null\n let currentNotificationEndTime = null\n if (currentNotification) {\n currentNotificationStartTime = currentNotification.starttime\n currentNotificationEndTime = currentNotification.endtime\n }\n\n infoSlides.push({\n id: `item-${slide.orderid}`,\n category: slide.category,\n orderid: slide.orderid,\n key: slide.key,\n starttime: moment(currentNotificationStartTime).format(\"YYYY-MM-DD\"),\n endtime: moment(currentNotificationEndTime).format(\"YYYY-MM-DD\"),\n active: currentNotification ? currentNotification.active : false,\n notificationId: currentNotification && currentNotification.id,\n occurrence: currentNotification && currentNotification.occurrence\n })\n\n const html = converter.makeHtml(slide.text)\n\n const contentBlock = htmlToDraft(html)\n // const blocksFromHTML = convertFromHTML(html)\n // const state = ContentState.createFromBlockArray(\n // blocksFromHTML.contentBlocks,\n // blocksFromHTML.entityMap\n // )\n\n if (contentBlock) {\n const contentState = ContentState.createFromBlockArray(contentBlock.contentBlocks)\n const editorState = EditorState.createWithContent(contentState)\n\n editorStateInfo[slide.key] = editorState\n }\n\n // editorStateInfo[slide.key] = EditorState.createWithContent(state)\n\n if (index + 1 === slides.length) {\n this.setState({ editorStateInfo, infoSlides }, () => {\n if (zoomToEnd) {\n this.setState({ activeStep: slides.length - 1 }, () => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n } else {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n }\n })\n }\n })\n })\n }\n\n renderAnalytics = () => {\n const { classes, theme } = this.props\n const { counters } = this.state\n\n return (\n
\n {counters.map((counter, index) => {\n if (counter.spec) {\n return (\n \n \n {counter.name}\n \n
\n {counter.data && }\n
\n
\n )\n } else {\n if (counter.key === \"downloads\") {\n return (\n \n \n {counter.name}\n \n
\n {counter.data && counter.data.map((data, index) => (\n
\n {data.value}\n {data.name}\n
\n ))}\n
\n
\n )\n } else {\n return (\n \n \n {counter.name}\n \n
\n {counter.data && {counter.data[0].value}}\n
\n
\n )\n }\n }\n })}\n
\n )\n }\n\n onLayerChange = (layers, layer, type) => {\n const { mapConfig } = this.state\n\n switch (type) {\n case \"radio\":\n // Alle layers op checked false zetten behalve geselecteerde layer\n layers.forEach(l => { l.checked = false })\n layer.checked = true\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.setState({ mapConfig }, () => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n })\n break\n\n case \"checkbox\":\n default:\n // Zoek in config naar layer en zet deze op checked true/ false\n layers.find(l => l.key === layer.key).checked = !layer.checked\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.setState({ mapConfig }, () => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n })\n break\n }\n }\n\n onResizeTextArea = () => {\n const element = document.getElementById(\"forecastTable\")\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.setState({ rainfallTableHeight: element.offsetHeight }, () => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n })\n }\n\n changePushNotificationTitle = (event) => {\n const title = event.target.value\n\n if (title.length > 40) return null\n\n this.setState({ pushNotificationTitle: title })\n }\n\n changePushNotificationText = (event) => {\n const text = event.target.value\n\n if (text.length > 80) return null\n\n this.setState({ pushNotificationText: text })\n }\n\n sendPushNotification = () => {\n const { pushNotificationText, pushNotificationTitle } = this.state\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.props.dispatch(asyncActions.sendPushNotification(\"tsws\", \"myfloodrisk\", { appid: 42, topic: \"literacyInformation\", title: pushNotificationTitle, message: pushNotificationText }))\n .then((json) => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n this.props.dispatch({ type: actions.SET_ERROR, error: { message: \"Push Notification has been sent\", type: \"success\", duration: 3000, key: moment().valueOf() } })\n })\n })\n }\n\n renderForecast = () => {\n const { classes, database, theme } = this.props\n const { pushNotificationText, pushNotificationTitle, rainfallTableHeight } = this.state\n\n const forecastData = database.forecast.locations.filter(location => location.name === \"Accra\")\n\n const columns = [\n { name: \"Name\", value: \"name\" },\n { name: database.forecast.period1, value: \"valuePeriod1\" },\n { name: database.forecast.period2, value: \"valuePeriod2\" },\n { name: database.forecast.period3, value: \"valuePeriod3\" }\n ]\n\n return (\n
\n \n Rainfall Forecast Accra\n \n \n \n {columns.map((column, index) => (\n \n ))}\n \n \n \n {forecastData.map((data, index) => (\n \n {columns.map((column, i) => (\n \n ))}\n \n ))}\n \n
{column.name}
{forecastData[index][column.value]}
\n
\n \n Send push notification\n
\n \n
\n {pushNotificationTitle ? pushNotificationTitle.length : 0} out of 40 characters\n {/* 32px voor titel 32px voor push title, 2x 19px voor chars tekst, 2x theme spacing voor margin */}\n
\n \n this.sendPushNotification()}\n >\n Send\n \n
\n {pushNotificationText ? pushNotificationText.length : 0} out of 80 characters\n
\n
\n )\n }\n\n beforeRemoveSlide = (key) => {\n this.setState({ removeDialog: { open: true, size: \"small\", key: key } })\n }\n\n removeSlide = (config) => {\n const { activeStep, infoSlides } = this.state\n\n this.closeDialog(config)\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.props.dispatch(asyncActions.deleteContent(\"tsws\", { appid: 42, key: config.key }))\n .then(() => {\n // Als gebruiker de laatste slide delete, ga 1 stap terug\n if (activeStep + 1 === infoSlides.length) {\n this.setState({ activeStep: activeStep === 0 ? 0 : activeStep - 1 })\n }\n\n infoSlides.forEach((infoSlide, index) => {\n // De verwijderde slide ook uit de state verwijderen\n if (index === activeStep) {\n infoSlides.splice(index, 1)\n\n this.setState({ infoSlides }, () => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n }\n })\n\n this.props.dispatch({ type: actions.SET_ERROR, error: { message: \"Literacy information slide has been removed\", type: \"info\", duration: 3000, key: moment().valueOf() } })\n })\n })\n }\n\n addSlide = () => {\n const { firebase } = this.props\n const { editorStateInfo, infoSlides } = this.state\n\n const showdown = require(\"showdown\")\n const converter = new showdown.Converter()\n\n const that = this\n\n const uploadUrl = getUploadUrl(\"tsws\")\n\n let key = \"\"\n let fileName = \"\"\n\n const time = moment().valueOf()\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n key = `INFO${time}`\n fileName = `info${time}.json`\n\n const markdownString = \"## Hello world!\"\n\n // De laatste infoSlide zijn orderid + 1\n const parameters = { appid: 42, key: key, category: \"literacyEarlyWarningModule\", orderid: infoSlides[infoSlides.length - 1].orderid + 1 }\n\n const headers = [\n { key: \"function\", value: \"myfloodrisk.appfunctions.SetContent\" },\n { key: \"parameters\", value: JSON.stringify(parameters) },\n { key: \"uid\", value: firebase.userinfo.uid },\n { key: \"token\", value: firebase.userinfo.token }\n ]\n\n const file = { value: { name: fileName }, content: markdownString }\n\n makeRequest(\"POST\", uploadUrl, headers, file, function (newFile) {\n const newFileParsed = JSON.parse(newFile.responseText)\n\n const html = converter.makeHtml(newFileParsed.text)\n\n const blocksFromHTML = convertFromHTML(html)\n const state = ContentState.createFromBlockArray(\n blocksFromHTML.contentBlocks,\n blocksFromHTML.entityMap\n )\n\n editorStateInfo[newFileParsed.key] = EditorState.createWithContent(state)\n\n // In infoSlides willen we nu een nieuw object pushen\n infoSlides.push({ id: `item-${newFileParsed.orderid}`, category: newFileParsed.category, orderid: newFileParsed.orderid, key: newFileParsed.key })\n\n // Daarna gaan we naar de laatst toegevoegde slide\n that.setState({ editorStateInfo, infoSlides }, () => {\n that.goToStep(infoSlides.length)\n that.props.dispatch(asyncActions.setLoader(that.props.database.loading - 1))\n })\n\n that.props.dispatch({ type: actions.SET_ERROR, error: { message: \"Literacy information slide has been added\", type: \"success\", duration: 3000, key: moment().valueOf() } })\n })\n })\n }\n\n uploadImageCallback = (file) => {\n return new Promise((resolve, reject) => {\n this.props.dispatch(asyncActions.UploadImageToServer(file, file.name))\n .then((result) => {\n const url = result.url\n resolve({ data: { link: url } })\n })\n })\n }\n\n reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list)\n const [removed] = result.splice(startIndex, 1)\n result.splice(endIndex, 0, removed)\n\n return result\n }\n\n getItemStyle = (isDragging, draggableStyle, index) => {\n const { theme } = this.props\n const { activeStep } = this.state\n\n return ({\n userSelect: \"none\",\n padding: theme.spacing(0.5, 1),\n margin: index === 0 ? 0 : `${theme.spacing(1)}px 0 0 0`,\n border: isDragging ? \"1px dashed black\" : \"unset\",\n fontWeight: activeStep === index ? 600 : 400,\n\n // Styles we need to apply on draggables\n ...draggableStyle\n })\n }\n\n onDragEnd = (result) => {\n // Wanneer buiten dropzone gedropt\n if (!result.destination) {\n return\n }\n\n const infoSlides = this.reorder(\n this.state.infoSlides,\n result.source.index,\n result.destination.index\n )\n\n infoSlides.forEach((slide, index) => {\n slide.orderid = (index + 1)\n\n this.setState({ infoSlides })\n\n // Nieuwe slide order naar de database sturen\n this.props.dispatch(asyncActions.setOrderId(\"tsws\", \"myfloodrisk\", { appid: 42, key: slide.key, orderid: slide.orderid }))\n })\n }\n\n changeSlideCategory = (event, slide) => {\n const { infoSlides } = this.state\n\n infoSlides.find(infoSlide => infoSlide.key === slide.key).category = event.target.value\n\n // Nieuwe slide category naar de database sturen\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.props.dispatch(asyncActions.setCategory(\"tsws\", \"myfloodrisk\", { appid: 42, key: slide.key, category: event.target.value }))\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n }\n\n renderSlideCategory = () => {\n const { classes, theme } = this.props\n const { activeStep, infoSlides } = this.state\n\n const options = [\n \"literacyEarlyWarningModule\",\n \"literacyICRM\",\n \"literacyInformation\"\n ]\n\n return (\n \n \n Current slide category\n \n
\n Category\n this.changeSlideCategory(event, infoSlides[activeStep])}\n >\n {options.map((option, index) => (\n {option}\n ))}\n \n
\n
\n )\n }\n\n renderSlideOrder = () => {\n const { classes, theme } = this.props\n const { infoSlides } = this.state\n\n const styleSheet = document.styleSheets[0]\n\n const keyframes = `@-webkit-keyframes up-down {\n 0% {top: 10%}\n 50% {top: calc(90% - 26px)}\n 100% {top: 10%}\n }`\n\n styleSheet.insertRule(keyframes, styleSheet.cssRules.length)\n\n return (\n \n \n IDRM Literacy Information\n \n
\n Drag the items below to change its order, and click them to navigate.\n \n \n {(provided, snapshot) => (\n \n {infoSlides.map((slide, index) => (\n \n {(provided, snapshot) => (\n this.goToStep(index)}\n >\n {slide.key}\n \n )}\n \n ))}\n {provided.placeholder}\n
\n )}\n \n \n
\n \n )\n }\n\n changePushCheckedState = (event, slide) => {\n const { infoSlides } = this.state\n\n slide.active = event.target.checked\n\n this.setState({ infoSlides: infoSlides })\n }\n\n changePushDate = (event, slide, type) => {\n const { infoSlides } = this.state\n\n slide[`${type}time`] = moment(event.target.value).valueOf()\n\n this.setState({ infoSlides: infoSlides })\n }\n\n addScheduledNotification = (slide) => {\n const { infoSlides } = this.state\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.props.dispatch(asyncActions.addScheduledNotification(\"tsws\", {\n appid: 42,\n key: slide.key,\n title: \"New Literacy Information slide\",\n message: \"There is a new Literacy Information available\",\n starttime: moment(slide.starttime).valueOf(),\n endtime: slide.occurrence === \"once\" ? 0 : moment(slide.endtime).valueOf(),\n active: slide.active,\n id: slide.notificationId,\n occurrence: slide.occurrence\n }))\n .then((notifications) => {\n slide.notificationId = notifications[notifications.length - 1].id\n\n this.setState({ infoSlides: infoSlides })\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n })\n }\n\n changeOccurrence = (event, slide) => {\n const { infoSlides } = this.state\n\n slide.occurrence = event.target.value\n\n this.setState({ infoSlides: infoSlides })\n }\n\n renderLiteracy = () => {\n const { classes, t, theme } = this.props\n const { activeStep, editorStateInfo, infoSlides } = this.state\n\n const toolbar = {\n options: [\"inline\", \"blockType\", \"fontSize\", \"list\", \"textAlign\", \"colorPicker\", \"image\", \"link\"],\n image: {\n urlEnabled: false,\n uploadCallback: this.uploadImageCallback,\n previewImage: true,\n alt: { present: true, mandatory: false },\n inputAccept: \"image/gif,image/jpeg,image/jpg,image/png,image/svg,video/mp4\"\n },\n link: {\n linkCallback: this.linkCallback\n }\n }\n\n return (\n
\n \n this.handleStep(index > indexLatest ? \"next\" : \"back\")} style={{ flexGrow: 1 }}>\n {infoSlides.map((slide, index) => {\n let disabled = true\n if (slide.occurrence === \"once\") {\n disabled = !slide.starttime || slide.starttime === \"Invalid date\"\n } else {\n disabled = !slide.starttime || slide.starttime === \"Invalid date\" || !slide.endtime || slide.endtime === \"Invalid date\" || !slide.occurrence\n }\n return (\n
\n
\n Literacy information slide\n
\n \n \n this.beforeRemoveSlide(slide.key)}>\n \n \n \n \n \n this.addSlide()}>\n \n \n \n
\n
\n this.onInfoEditorStateChange(editorState, slide.key)}\n toolbar={toolbar}\n // https://github.com/jpuri/react-draft-wysiwyg/issues/697\n handlePastedText={() => false}\n />\n
\n To set a scheduled notification for this slide, select a date and mark active. When active a push notification will be send to the app users on the selected day.\n this.changePushDate(event, slide, \"start\")}\n InputLabelProps={{\n shrink: true\n }}\n label={t(\"Start_date\")}\n style={{ marginRight: theme.spacing(2) }}\n />\n this.changePushDate(event, slide, \"end\")}\n InputLabelProps={{\n shrink: true\n }}\n label={t(\"End_date\")}\n style={{ marginRight: theme.spacing(2) }}\n />\n
\n {t(\"Active\")}\n this.changePushCheckedState(event, slide)}\n color=\"primary\"\n style={{ margin: \"11px 0 0\", padding: 0 }}\n />\n
\n \n {t(\"Occurrence\")}\n this.changeOccurrence(e, slide)}\n >\n {t(\"Once\")}\n {t(\"Daily\")}\n {t(\"Weekly\")}\n {t(\"Monthly\")}\n {t(\"Yearly\")}\n \n \n this.addScheduledNotification(slide)}\n >\n {t(\"Set_scheduled_notification\")}\n \n
\n
\n )\n })}\n
\n
\n
\n this.handleStep(\"back\")} disabled={activeStep === 0}>{t(\"Previous\")}}\n nextButton={}\n />\n this.publishInfo()}\n >\n Publish\n \n
\n
\n )\n }\n\n renderFloodRiskMaps = () => {\n const { classes } = this.props\n const { mapConfig } = this.state\n\n const layers = [\n { name: \"Low risk\", value: \"low\" },\n { name: \"Moderate risk\", value: \"moderate\" },\n { name: \"High risk\", value: \"high\" }\n ]\n\n return (\n
\n \n \n \n
\n {layers.map((layer, index) => (\n l.key === layer.value).checked && \"#005686\"\n }}\n onClick={() => this.onLayerChange(mapConfig.layers.filter(l => l.key !== \"Area\"), mapConfig.layers.find(l => l.key === layer.value), \"radio\")}\n >\n {layer.name}\n \n ))}\n
\n
\n )\n }\n\n onDisclaimerStateChange = (editorState) => {\n let { editorStateDisclaimer } = this.state\n\n // Om er voor te zorgen dat je de melding 'Changes you made may not be saved' te tonen wanneer je de pagina sluit zonder op te slaan\n window.onbeforeunload = () => \"\"\n\n editorStateDisclaimer = editorState\n\n this.setState({ editorStateDisclaimer })\n }\n\n onInfoEditorStateChange = (editorState, key) => {\n const { editorStateInfo } = this.state\n\n // Om er voor te zorgen dat je de melding 'Changes you made may not be saved' te tonen wanneer je de pagina sluit zonder op te slaan\n window.onbeforeunload = () => \"\"\n\n editorStateInfo[key] = editorState\n this.setState({ editorStateInfo })\n }\n\n linkCallback = (e) => {\n return { title: e.title, target: e.target, targetOption: e.targetOption }\n }\n\n renderDisclaimerEditor = () => {\n const { theme } = this.props\n const { editorStateDisclaimer } = this.state\n\n const toolbar = {\n options: [\"inline\", \"blockType\", \"fontSize\", \"list\", \"textAlign\", \"colorPicker\", \"image\", \"link\"],\n image: {\n urlEnabled: false,\n uploadCallback: this.uploadImageCallback,\n previewImage: true,\n alt: { present: true, mandatory: false },\n inputAccept: \"image/gif,image/jpeg,image/jpg,image/png,image/svg,video/mp4\"\n },\n link: {\n linkCallback: this.linkCallback\n }\n }\n\n return (\n
\n false}\n />\n this.publishDisclaimer()}\n >\n Publish\n \n
\n )\n }\n\n renderContent = (viewerType) => {\n switch (viewerType) {\n case \"dashboard\": return this.renderAnalytics()\n case \"forecast\": return this.renderForecast()\n case \"literacy\": return this.renderLiteracy()\n case \"floodriskmaps\": return this.renderFloodRiskMaps()\n case \"disclaimer\": return this.renderDisclaimerEditor()\n default: return null\n }\n }\n\n drawerStateChanged = (placement, state) => {\n const { drawerStates } = this.state\n\n drawerStates[placement] = state\n this.setState({ drawerStates })\n }\n\n onUploaded = (file) => {\n const { application } = this.props\n // const riskSituationLayers = JSON.parse(file.responseText)\n const riskSituationLayers = file.responseText\n\n application.appinfo.riskSituationLayers = riskSituationLayers\n this.props.dispatch({ type: actions.SET_APP_INFO, appinfo: application.appinfo })\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n }\n\n uploadFile = (file) => {\n const { firebase } = this.props\n const that = this\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n const uploadUrl = getUploadUrl(\"tsws\")\n const formData = new FormData()\n const parameters = {\n appid: 42,\n debug: true,\n style: \"myfloodrisk_accra:waterdepth\",\n plain: true\n }\n\n formData.append(\"File\", file)\n formData.append(\"function\", \"myfloodrisk.appfunctions.AddLayer\")\n formData.append(\"parameters\", JSON.stringify(parameters))\n formData.append(\"uid\", firebase.userinfo.uid)\n formData.append(\"token\", firebase.userinfo.token)\n\n fetch(\n uploadUrl,\n {\n method: \"POST\",\n body: formData\n })\n .then((response) => response.json())\n .then((result) => {\n file.responseText = result\n that.onUploaded(file)\n })\n .catch((error) => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n this.props.dispatch({ type: actions.SET_ERROR, error: { message: error, type: \"error\", duration: 4000, key: moment().valueOf() } })\n })\n })\n }\n\n handleButtonClick = (funct) => {\n const { selectedLayers, publishLayers } = this.state\n\n switch (funct) {\n case \"addFile\": document.getElementsByClassName(\"dx-fileuploader-button\")[0].click(); break\n case \"publishLayers\": this.publishLayers(publishLayers.low, publishLayers.moderate, publishLayers.high); break\n case \"deleteFile\": this.deleteLayers(selectedLayers); break\n default: break\n }\n }\n\n deleteLayers = (selectedLayers) => {\n const { application } = this.props\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.props.dispatch(asyncActions.deleteLayers(\"tsws\", { appid: 42, layers: JSON.stringify(selectedLayers) }))\n .then(riskSituationLayers => {\n this.clearSelectedLayer()\n application.appinfo.riskSituationLayers = riskSituationLayers\n this.props.dispatch({ type: actions.SET_APP_INFO, appinfo: application.appinfo })\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n })\n }\n\n renderGeoFiles = () => {\n const { application, classes, theme } = this.props\n const { selectedLayers } = this.state\n\n return (\n \n \n GeoFiles\n \n \n {application.appinfo.riskSituationLayers.map((layer, index) => (\n this.setSelectedLayer(event)}\n />\n }\n label={layer.name}\n value={layer.name}\n style={{ margin: index === 0 ? 0 : theme.spacing(1, 0, 0, 0) }}\n disabled={layer.name === \"T2\" || layer.name === \"T10\" || layer.name === \"T100\" || layer.key === \"low\" || layer.key === \"moderate\" || layer.key === \"high\"}\n checked={!(layer.name === \"T2\" || layer.name === \"T10\" || layer.name === \"T100\" || layer.key === \"low\" || layer.key === \"moderate\" || layer.key === \"high\") &&\n selectedLayers.includes(layer.name)}\n />\n ))}\n \n
\n \n this.handleButtonClick(\"addFile\")}\n >\n Add .tif file\n \n this.handleButtonClick(\"deleteFile\")}\n >\n Delete selected\n \n
\n
\n )\n }\n\n clearSelectedLayer = () => {\n this.setState({ selectedLayers: [] })\n }\n\n setSelectedLayer = (event) => {\n const { selectedLayers } = this.state\n\n // Als laag al geselecteerd is, deselecteer deze\n if (selectedLayers.find(layer => layer === event.target.value)) {\n selectedLayers.forEach((selectedLayer, index) => {\n if (selectedLayer === event.target.value) {\n selectedLayers.splice(index, 1)\n }\n })\n } else {\n selectedLayers.push(event.target.value)\n }\n\n this.setState({ selectedLayers: selectedLayers })\n }\n\n clearPublishLayer = () => {\n this.setState({ publishLayers: { low: \"\", moderate: \"\", high: \"\" } })\n }\n\n setPublishLayer = (key, layer) => {\n const { publishLayers } = this.state\n publishLayers[key] = layer\n\n this.setState({ publishLayers: publishLayers })\n }\n\n publishLayers = (low, moderate, high) => {\n const { application } = this.props\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n this.props.dispatch(asyncActions.setLayer(\"tsws\", { appid: 42, low: low, moderate: moderate, high: high }))\n .then(riskSituationLayers => {\n if (riskSituationLayers) {\n // this.clearPublishLayer()\n this.clearSelectedLayer()\n application.appinfo.riskSituationLayers = riskSituationLayers\n this.props.dispatch({ type: actions.SET_APP_INFO, appinfo: application.appinfo })\n }\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n })\n }\n\n updateLayer = (event) => {\n const { application } = this.props\n\n // file name\n const layer = event.target.value\n\n // low / moderate / high\n const key = event.target.name\n\n this.setPublishLayer(key, layer)\n\n const floodRiskLayers = this.state.mapConfig.layers.filter(layer => layer.key !== \"Area\")\n const floodRiskLayer = floodRiskLayers.find(l => l.key === key)\n const riskSituationLayer = application.appinfo.riskSituationLayers.find(riskSituationLayer => riskSituationLayer.layer === layer)\n\n if (floodRiskLayer && riskSituationLayer) {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n floodRiskLayer.description = riskSituationLayer.description\n floodRiskLayer.layer = riskSituationLayer.layer\n floodRiskLayer.workspace = riskSituationLayer.workspace\n floodRiskLayer.styles = [riskSituationLayer.styles]\n\n // Map config overschrijven zodat we de geselecteerde laag op kaart renderen\n this.setState({ mapConfig: this.state.mapConfig }, () => {\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading - 1))\n })\n })\n }\n }\n\n customContentStateConverter = (contentState) => {\n // changes block type of images to 'atomic'\n // otherwise the WYSIG will not render and/or save image tags\n const newBlockMap = contentState.getBlockMap().map((block) => {\n const entityKey = block.getEntityAt(0)\n if (entityKey !== null) {\n const entityBlock = contentState.getEntity(entityKey)\n const entityType = entityBlock.getType()\n switch (entityType) {\n case \"IMAGE\": {\n // Het kan voorkomen dat de gebruiker een afbeelding delete maar dat hij toch in de editorstate blijft hangen,\n // in dit geval returnen we het originele block\n if (!entityBlock.data.height && !entityBlock.data.width) {\n return block\n }\n\n const newBlock = block.merge({\n type: \"atomic\",\n // text: `![${entityBlock.data.alt}](${entityBlock.data.src})`,\n text: `\"${entityBlock.data.alt}\"`\n })\n return newBlock\n }\n default:\n return block\n }\n }\n return block\n })\n const newContentState = contentState.set(\"blockMap\", newBlockMap)\n return newContentState\n }\n\n publishDisclaimer = () => {\n const { firebase } = this.props\n const { editorStateDisclaimer } = this.state\n\n const that = this\n\n const uploadUrl = getUploadUrl(\"tsws\")\n\n let rawContentState = \"\"\n let key = \"\"\n let fileName = \"\"\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + 1))\n .then(() => {\n rawContentState = convertToRaw(editorStateDisclaimer.getCurrentContent())\n key = \"DISCLAIMER\"\n fileName = \"disclaimer.md\"\n\n const html = draftToHtml(rawContentState) // create HTML from the contentState, this saves the image block\n const content = htmlToDraft(html) // create draft from HTML\n\n const contentState = ContentState.createFromBlockArray(content.contentBlocks, content.entityMap) // create a new contentstate based on the new draft\n\n const editorState = EditorState.createWithContent(this.customContentStateConverter(contentState)) // use a custom converter that saves the image as markdown\n const rawEditor = convertToRaw(editorState.getCurrentContent())\n\n const markdownString = draftToMarkdown(rawEditor) // create markdown string from the new content based on the draft from the HTML\n\n // Disclaimer heeft geen category en zijn orderid is altijd 1\n const parameters = { appid: 42, key: key, category: \"\", orderid: 1, firebaseProvider: \"accra\" }\n\n const headers = [\n { key: \"function\", value: \"myfloodrisk.appfunctions.SetContent\" },\n { key: \"parameters\", value: JSON.stringify(parameters) },\n { key: \"uid\", value: firebase.userinfo.uid },\n { key: \"token\", value: firebase.userinfo.token }\n ]\n\n const file = { value: { name: fileName }, content: markdownString }\n\n makeRequest(\"POST\", uploadUrl, headers, file, function () {\n // Om er voor te zorgen dat je de melding 'Changes you made may not be saved' niet meer te tonen wanneer je de pagina sluit\n window.onbeforeunload = null\n\n that.props.dispatch(asyncActions.setLoader(that.props.database.loading - 1))\n })\n })\n }\n\n publishInfo = () => {\n const { firebase } = this.props\n const { editorStateInfo, infoSlides } = this.state\n\n const that = this\n\n const uploadUrl = getUploadUrl(\"tsws\")\n\n let rawContentState = \"\"\n let fileName = \"\"\n\n this.props.dispatch(asyncActions.setLoader(this.props.database.loading + infoSlides.length))\n .then(() => {\n infoSlides.forEach(slide => {\n rawContentState = convertToRaw(editorStateInfo[slide.key].getCurrentContent())\n\n fileName = `${slide.key}.json`\n\n const html = draftToHtml(rawContentState) // create HTML from the contentState, this saves the image block\n const content = htmlToDraft(html) // create draft from HTML\n\n const contentState = ContentState.createFromBlockArray(content.contentBlocks, content.entityMap) // create a new contentstate based on the new draft\n const editorState = EditorState.createWithContent(this.customContentStateConverter(contentState)) // use a custom converter that saves the image as markdown\n const rawEditor = convertToRaw(editorState.getCurrentContent())\n\n const markdownString = draftToMarkdown(rawEditor) // create markdown string from the new content based on the draft from the HTML\n\n const parameters = { appid: 42, key: slide.key, category: slide.category, orderid: slide.orderid, firebaseProvider: \"accra\" }\n\n const headers = [\n { key: \"function\", value: \"myfloodrisk.appfunctions.SetContent\" },\n { key: \"parameters\", value: JSON.stringify(parameters) },\n { key: \"uid\", value: firebase.userinfo.uid },\n { key: \"token\", value: firebase.userinfo.token }\n ]\n\n const file = { value: { name: fileName }, content: markdownString }\n\n makeRequest(\"POST\", uploadUrl, headers, file, function () {\n // Om er voor te zorgen dat je de melding 'Changes you made may not be saved' niet meer te tonen wanneer je de pagina sluit\n window.onbeforeunload = null\n\n that.props.dispatch(asyncActions.setLoader(that.props.database.loading - 1))\n })\n })\n })\n }\n\n renderSelectedGeoFiles = () => {\n const { application, classes, t, theme } = this.props\n const { mapConfig, publishLayers } = this.state\n\n const floodRiskLayers = mapConfig.layers.filter(layer => layer.key !== \"Area\")\n const layers = application.appinfo.riskSituationLayers\n\n const publishedLayerNames = []\n Object.keys(publishLayers).forEach(l => {\n publishedLayerNames.push(publishLayers[l])\n })\n\n return (\n \n \n Selected Files\n \n
\n {floodRiskLayers.map((floodRiskLayer, index) => (\n
\n {t(floodRiskLayer.name)}\n layer.key === floodRiskLayer.key) && mapConfig.layers.find(layer => layer.key === floodRiskLayer.key).layer}\n onChange={(e) => this.updateLayer(e)}\n name={floodRiskLayer.key}\n style={{ width: \"100%\" }}\n size=\"small\"\n >\n {layers.map((layer, i) => (\n \n {layer.name}\n \n ))}\n \n
\n ))}\n
\n
\n this.handleButtonClick(\"publishLayers\")}\n >\n Publish\n \n
\n
\n )\n }\n\n handleStep = (dir) => {\n let activeStep = this.state.activeStep\n activeStep = dir === \"next\" ? activeStep + 1 : activeStep - 1\n this.setState({ activeStep: activeStep })\n }\n\n goToStep = (index) => {\n this.setState({ activeStep: index })\n }\n\n renderUser = () => {\n const { firebase, theme } = this.props\n\n return (\n
\n \n this.setState({ userInfoHoverState: true })}\n onMouseLeave={() => this.setState({ userInfoHoverState: false })}\n onClick={() => this.setState({ logoutDialog: { open: true, size: \"small\" } })}\n >\n {this.state.userInfoHoverState ? : }\n User: {firebase.userinfo.name ? firebase.userinfo.name : firebase.userinfo.email}\n
\n \n
\n )\n }\n\n doSignOut = (config, dispatch) => {\n this.closeDialog(config)\n\n doSignOut(dispatch)\n }\n\n closeDialog = (config) => {\n config.open = false\n this.setState({ config })\n }\n\n closeSnackbar = (event, reason) => {\n if (reason === \"clickaway\") return null\n\n this.props.dispatch({ type: actions.SET_ERROR, error: null })\n }\n\n render() {\n const { application, classes, dispatch, firebase, t, theme } = this.props\n const { drawerStates, logoutDialog, removeDialog, viewerType } = this.state\n\n if (firebase.userinfo.verified !== true) {\n return (\n
\n {this.props.database.loading > 0 &&
\n HKV loader\n
}\n {application.error && \n \n {t(application.error.message.toString())}\n \n }\n \n
\n )\n }\n\n // Wanneer er geen appinfo, userinfo of servers zijn gefetched, return null, of een loader wanneer loader aanstaat\n if (!application.appinfo) {\n return this.props.database.loading > 0 ?
HKV loader
: null\n }\n\n const listItems = [\n { name: \"Dashboard\", value: \"dashboard\" },\n { name: \"Rainfall forecast\", value: \"forecast\" },\n { name: \"Literacy information\", value: \"literacy\" },\n { name: \"Floodrisk maps\", value: \"floodriskmaps\" },\n { name: \"Disclaimer\", value: \"disclaimer\" }\n ]\n\n return (\n
\n {this.props.database.loading > 0 &&
\n \"HKV\n
}\n {application.error && \n \n {t(application.error.message.toString())}\n \n }\n {/* Vanaf hier eigen componenten */}\n
\n {this.renderContent(viewerType)}\n
\n \n \n {listItems.map((listItem, index) => (\n this.setState({ viewerType: listItem.value })}>\n {listItem.name}\n \n ))}\n \n {(viewerType === \"floodriskmaps\" || viewerType === \"literacy\") && }\n {viewerType === \"floodriskmaps\" && this.renderGeoFiles()}\n {viewerType === \"floodriskmaps\" && this.renderSelectedGeoFiles()}\n {viewerType === \"literacy\" && this.renderSlideOrder()}\n {/* {viewerType === \"literacy\" && this.renderSlideCategory()} */}\n {this.renderUser()}\n \n \n Delete this slide?\n \n You will not be able to recover it\n
\n \n \n
\n
\n
\n \n Are you sure you want to logout?\n \n
\n \n \n
\n
\n
\n
\n )\n }\n}\n\nApp = withTranslation(\"translation\")(App)\nApp = withStyles(styles, { withTheme: true })(App)\nexport default connect(state => state)(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\nexport function register(config) {\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(process.env.PUBLIC_URL, window.location.href)\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 if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\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 } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl, 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, 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 (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\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() {\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 firebase from \"firebase/app\"\r\n\r\nimport config from \"../configAccra.json\"\r\n\r\nexport const initializeMyFirebase = () => {\r\n if (!firebase.apps.length) {\r\n firebase.initializeApp(config)\r\n }\r\n}\r\n\r\nexport const askForPermissioToReceiveNotifications = async () => {\r\n try {\r\n const messaging = firebase.messaging()\r\n\r\n await messaging.requestPermission()\r\n // const token = await messaging.getToken();\r\n\r\n // return token\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n}\r\n","import React, { Suspense } from \"react\"\nimport { render } from \"react-dom\"\n\nimport { Provider } from \"react-redux\"\nimport { applyMiddleware, createStore } from \"redux\"\nimport rootReducer from \"./state/reducers\"\nimport thunk from \"redux-thunk\"\n\nimport App from \"./App\"\n\nimport * as serviceWorker from \"./serviceWorker\"\n\nimport { createMuiTheme, MuiThemeProvider } from \"@material-ui/core/styles\"\n\nimport \"./index.css\"\n\nimport { initializeMyFirebase } from \"./components/HKVFirebase/2.0/Messaging/push-notification\"\n\n// initialiseer firebase voor push messaging\ninitializeMyFirebase()\n\nconst theme = createMuiTheme({\n fontFamily: \"Roboto, sans-serif\",\n palette: {\n primary: {\n main: \"#007CC0\",\n contrastText: \"#FFFFFF\"\n },\n secondary: {\n main: \"#FFFFFF\"\n }\n }\n})\n\nconst store = createStore(\n rootReducer,\n applyMiddleware(thunk)\n)\n\nrender(\n \n \n \n \n \n \n ,\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\nserviceWorker.unregister()\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjI1IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNDEiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIyNSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNDEiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjAtMTAt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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC\""],"sourceRoot":""}