{"version":3,"sources":["styles/images/Logo_esri.png","styles/images/twitter.svg","styles/images/facebook-8.svg","styles/images/linkedin-1.svg","components/Header/Header.js","components/DiscreteSlider/DiscreteSlider.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","Header","view","isMapCir","shareMedia","evt","year","visibleLayer","allLayerViews","items","find","i","visible","layer","title","href","currentTarget","center","x","y","zoom","window","open","preventDefault","className","align","src","esrilogo","alt","long_txt","short_txt","target","rel","onClick","facebooklogo","twitterlogo","linkedinlogo","DiscreteSlider","currentlayers","initYear","initPlay","useState","isActive","setIsActive","tileLayers","filter","it","type","id","step","length","marks","forEach","push","value","label","initValue","mark","React","currentValue","setValue","valueLabelFormat","useEffect","interval","index","findIndex","setInterval","clearInterval","childNodes","classList","contains","remove","add","Slider","track","valueLabelDisplay","onChange","newValue","App","props","componentDidMount","a","loadModules","Map","WebMap","Locator","MapView","Search","Zoom","Lod","Point","Compass","VectorTileLayer","urlParams","URLSearchParams","location","search","has","get","Number","l","play","mapPortal","portalItem","mapPortalCir","load","layers","operationalLayerType","layersfiltered","setState","sort","b","parseInt","layersSorted","map","referenceLayerPortal","basemap","referenceLayers","lods","level","resolution","scale","fromJSON","container","constraints","ui","components","status","infoDescription","description","when","promises","Promise","all","pt","spatialReference","wkid","goTo","initialViewProperties","viewpoint","targetGeometry","extent","compass","infoButton","createInfoButton","referenceLayerButton","createReferenceLayerButton","luchtFotoButton","createLuchtFotoButton","state","popupEnabled","width","sources","locator","url","singleLineFieldName","name","placeholder","maxResults","maxSuggestions","suggestionsEnabled","minSuggestCharacters","includeDefaultSources","watch","newVal","zoomWidget","position","toggelLuchtFoto","ReactDOM","render","document","getElementById","console","error","divInfo","createElement","onclick","showInfoModal","bind","spanInfo","appendChild","divReferenceLayer","toggelReferenceLayer","spanReferenceLayer","divLuchtFoto","spanLuchtFoto","openInfoModal","unmountComponentAtNode","style","loaded","layersCirfiltered","layersCirSorted","layersCir","removeAll","addMany","promisesCir","parseHtmlContent","htmlContent","result","innerHTML","this","parentSelector","overlayStyle","dialogStyle","appElement","body","onRequestClose","dangerouslySetInnerHTML","__html","Modal","green","Component","Boolean","hostname","match","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.41073b13.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/Logo_esri.b424e329.png\";","module.exports = __webpack_public_path__ + \"static/media/twitter.d98ae703.svg\";","module.exports = __webpack_public_path__ + \"static/media/facebook-8.50ba0661.svg\";","module.exports = __webpack_public_path__ + \"static/media/linkedin-1.4b475fb3.svg\";","// React\r\nimport React from \"react\";\r\nimport esrilogo from \"../../styles/images/Logo_esri.png\";\r\nimport twitterlogo from \"../../styles/images/twitter.svg\";\r\nimport facebooklogo from \"../../styles/images/facebook-8.svg\";\r\nimport linkedinlogo from \"../../styles/images/linkedin-1.svg\";\r\n\r\n//make an new window from the current href and add query paramters for sharing.\r\nconst Header = ({ view, isMapCir }) => {\r\n const shareMedia = evt => {\r\n let year = \"2012\";\r\n let visibleLayer = view.allLayerViews.items.find(i => i.visible === true);\r\n if (visibleLayer) {\r\n year = visibleLayer.layer.title;\r\n }\r\n\r\n let href = `${evt.currentTarget.href}%3fyear%3d${year}%26x%3d${view.center.x}%26y%3d${view.center.y}%26l%3d${view.zoom}%26isMapCir%3d${isMapCir}`;\r\n window.open(href, \"_blank\");\r\n evt.preventDefault();\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \"\"\r\n \r\n
\r\n
\r\n \r\n
\r\n {/* https://codepen.io/adamcoti/pen/woGwym Social Media Sharing: HTML Links Generator*/}\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\n
\r\n );\r\n};\r\n\r\nexport default Header;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Slider from \"@material-ui/core/Slider\";\r\n//https://material-ui.com/api/slider/\r\n\r\nconst DiscreteSlider = ({\r\n currentlayers,\r\n initYear = null,\r\n initPlay = false\r\n}) => {\r\n const [isActive, setIsActive] = useState(initPlay);\r\n\r\n //Make the markers from the layers inside the view [{value: 0, label: \"2012\"}] for the slider.\r\n var tileLayers = currentlayers.filter(\r\n it => it.type === \"tile\" && it.id !== \"reference\"\r\n );\r\n var countLayers = tileLayers.length;\r\n var step = 100 / (countLayers - 1);\r\n var marks = [];\r\n tileLayers.forEach((layer, i) =>\r\n marks.push({ value: step * i, label: layer.title })\r\n );\r\n\r\n //if the query parameter year is given then find the value of the mark.\r\n let initValue = 0;\r\n if (initYear) {\r\n let mark = marks.find(mark => mark.label === initYear);\r\n if (mark) initValue = mark.value;\r\n }\r\n\r\n const [currentValue, setValue] = React.useState(initValue);\r\n\r\n //lookup the value and get the year as string.\r\n const valueLabelFormat = value => {\r\n let mark = marks.find(mark => mark.value === value);\r\n if (mark) return mark.label;\r\n return \"\";\r\n };\r\n\r\n //Change slider, turn all layer visible false and current year on true.\r\n const handleSliderChange = (evt, newValue) => {\r\n if (currentValue === newValue) return;\r\n setValue(newValue);\r\n let year = valueLabelFormat(newValue);\r\n currentlayers.forEach(layer => {\r\n if (layer.title === year) {\r\n layer.visible = true;\r\n } else {\r\n layer.visible = false;\r\n }\r\n });\r\n };\r\n\r\n const playTimeSlider = evt => {\r\n if (evt.currentTarget.childNodes[0].classList.contains(\"esri-icon-pause\")) {\r\n evt.currentTarget.childNodes[0].classList.remove(\"esri-icon-pause\");\r\n evt.currentTarget.childNodes[0].classList.add(\"esri-icon-play\");\r\n setIsActive(false);\r\n } else {\r\n evt.currentTarget.childNodes[0].classList.remove(\"esri-icon-play\");\r\n evt.currentTarget.childNodes[0].classList.add(\"esri-icon-pause\");\r\n setIsActive(true);\r\n }\r\n };\r\n\r\n useEffect (() => {\r\n let interval = null;\r\n if (isActive) {\r\n let mark = marks[0];\r\n let index = marks.findIndex(mark => mark.value === currentValue);\r\n if (marks.length > index + 1) mark = marks[index + 1];\r\n\r\n interval = setInterval(() => {\r\n setValue(mark.value);\r\n currentlayers.forEach(layer => {\r\n if (layer.title === mark.label) {\r\n layer.visible = true;\r\n } else {\r\n layer.visible = false;\r\n }\r\n });\r\n }, 3000);\r\n } else if (!isActive) {\r\n clearInterval(interval);\r\n }\r\n return () => clearInterval(interval);\r\n }, [isActive, currentValue, marks, currentlayers]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default DiscreteSlider;\r\n","import React, { Component } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { loadModules } from \"esri-loader\";\r\n//import { esriOptions } from \"./config\";\r\n//import \"./App.css\";\r\nimport Header from \"./components/Header\";\r\nimport DiscreteSlider from \"./components/DiscreteSlider\";\r\nimport Button from \"calcite-react/Button\";\r\nimport Modal, { ModalActions } from \"calcite-react/Modal\";\r\nimport { CalciteP, CalciteH1 } from \"calcite-react/Elements\";\r\n//Replace all format(\"woff2\") to format(\"embedded-opentype\").\r\n//import \"./theme/green-theme/main.css\";\r\n//import \"./theme/light-red/main.scss\";\r\n//require(\"./theme/green-theme/main.css\");\r\n\r\n//import \"./theme/red-theme/main.css\";\r\n\r\nexport default class App extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n status: \"loading\",\r\n openInfoModal: false,\r\n referenceLayerPortal: null,\r\n mapPortal: null,\r\n mapPortalCir: null,\r\n isMapCir: false\r\n };\r\n }\r\n\r\n componentDidMount = async () => {\r\n try {\r\n const [\r\n Map,\r\n WebMap,\r\n Locator,\r\n MapView,\r\n Search,\r\n Zoom,\r\n Lod,\r\n TileLayer,\r\n Point,\r\n Compass,\r\n VectorTileLayer\r\n ] = await loadModules(\r\n [\r\n \"esri/Map\",\r\n \"esri/WebMap\",\r\n \"esri/tasks/Locator\",\r\n \"esri/views/MapView\",\r\n \"esri/widgets/Search\",\r\n \"esri/widgets/Zoom\",\r\n \"esri/layers/support/LOD\",\r\n \"esri/layers/TileLayer\",\r\n \"esri/geometry/Point\",\r\n \"esri/widgets/Compass\",\r\n \"esri/layers/VectorTileLayer\"\r\n ]\r\n //esriOptions\r\n );\r\n var year, x, y, l, isMapCir, play;\r\n var urlParams = new URLSearchParams(window.location.search);\r\n if (urlParams.has(\"year\")) {\r\n year = urlParams.get(\"year\");\r\n }\r\n if (urlParams.has(\"x\")) {\r\n x = Number(urlParams.get(\"x\"));\r\n }\r\n if (urlParams.has(\"y\")) {\r\n y = Number(urlParams.get(\"y\"));\r\n }\r\n if (urlParams.has(\"l\")) {\r\n l = Number(urlParams.get(\"l\"));\r\n }\r\n if (urlParams.has(\"isMapCir\")) {\r\n isMapCir = urlParams.get(\"isMapCir\") === \"true\";\r\n }\r\n if (urlParams.has(\"play\")) {\r\n play = urlParams.get(\"play\") === \"true\";\r\n }\r\n\r\n //define the webmap with an portalItem id (luchtfoto's)\r\n const mapPortal = new WebMap({\r\n portalItem: {\r\n id: \"6a8c4ce34fbe460d824e639e095a2128\"\r\n }\r\n });\r\n\r\n //define the webmap with an portalItem id (luchtfoto's Cir)\r\n const mapPortalCir = new WebMap({\r\n portalItem: {\r\n id: \"efc4da390d4f4374977dd84e8fdda381\"\r\n }\r\n });\r\n\r\n //load the webmap and filter based on TiledMapServiceLayers\r\n await mapPortal.load();\r\n var layersfiltered = await mapPortal.layers.filter(\r\n layer => layer.operationalLayerType === \"ArcGISTiledMapServiceLayer\"\r\n );\r\n\r\n this.setState({\r\n mapPortal: mapPortal,\r\n mapPortalCir: mapPortalCir\r\n });\r\n\r\n //Sort the layer based on title. All titles are defined as year number.\r\n //Turn on the visibility on the first layer.\r\n var layersSorted = await layersfiltered.sort((a, b) => parseInt(a.title, 10) - parseInt(b.title, 10));\r\n var layers;\r\n if (year) {\r\n layers = await layersSorted.map(l => {\r\n if (l.title === year) {\r\n l.visible = true;\r\n } else {\r\n l.visible = false;\r\n }\r\n l.id = l.title;\r\n return l;\r\n });\r\n } else {\r\n layers = await layersSorted.map((l, i) => {\r\n if (i === 0) {\r\n l.visible = true;\r\n } else {\r\n l.visible = false;\r\n }\r\n l.id = l.title;\r\n return l;\r\n });\r\n }\r\n\r\n // var referenceLayerPortal = new TileLayer({\r\n // url:\r\n // \"https://services.arcgisonline.nl/arcgis/rest/services/Basiskaarten/Donkergrijze_Canvas_Referentie/MapServer\",\r\n // id: \"reference\",\r\n // visible: false\r\n // });\r\n var referenceLayerPortal = new VectorTileLayer({\r\n portalItem: {\r\n id: \"d3d536e451854a22afca9b350f8d786a\"\r\n },\r\n id: \"reference\",\r\n visible: true\r\n });\r\n\r\n this.setState({\r\n referenceLayerPortal: referenceLayerPortal\r\n });\r\n\r\n var map = new Map({\r\n layers: layers,\r\n basemap: {\r\n referenceLayers: [referenceLayerPortal]\r\n }\r\n });\r\n\r\n var jsonlods = [\r\n { level: 0, resolution: 3251.206502413005, scale: 12288000 },\r\n { level: 1, resolution: 1625.6032512065026, scale: 6144000 },\r\n { level: 2, resolution: 812.8016256032513, scale: 3072000 },\r\n { level: 3, resolution: 406.40081280162565, scale: 1536000 },\r\n { level: 4, resolution: 203.20040640081282, scale: 768000 },\r\n { level: 5, resolution: 101.60020320040641, scale: 384000 },\r\n { level: 6, resolution: 50.800101600203206, scale: 192000 },\r\n { level: 7, resolution: 25.400050800101603, scale: 96000 },\r\n { level: 8, resolution: 12.700025400050801, scale: 48000 },\r\n { level: 9, resolution: 6.350012700025401, scale: 24000 },\r\n { level: 10, resolution: 3.1750063500127004, scale: 12000 },\r\n { level: 11, resolution: 1.5875031750063502, scale: 6000 },\r\n { level: 12, resolution: 0.7937515875031751, scale: 3000 },\r\n { level: 13, resolution: 0.39687579375158755, scale: 1500 },\r\n { level: 14, resolution: 0.19843789687579377, scale: 750 },\r\n { level: 15, resolution: 0.09921894843789689, scale: 375 },\r\n { level: 16, resolution: 0.04960947421894844, scale: 187.5 }\r\n ];\r\n var lods = jsonlods.map(l => Lod.fromJSON(l));\r\n\r\n //define the MapView with custom lods.\r\n var view = new MapView({\r\n container: \"mapContainer\",\r\n map: map,\r\n constraints: {\r\n lods: lods\r\n }\r\n });\r\n\r\n view.ui.components = [\"attribution\"];\r\n\r\n this.setState({\r\n map,\r\n view,\r\n layers,\r\n status: \"loaded\",\r\n infoDescription: mapPortal.portalItem.description\r\n });\r\n\r\n await view.when();\r\n //Wait for all the layers are loaded and then create the Slider on the document.\r\n var promises = [];\r\n layers.forEach(l => promises.push(l.when()));\r\n await Promise.all(promises);\r\n\r\n //if query parameters x and y is given then goto that point, else goto map extend from the webmap.\r\n if (x && y && l) {\r\n //?year=2017&x=229234.85927355892&y=413189.67082550225&l=11&isMapCir=true\r\n var pt = new Point({\r\n x: x,\r\n y: y,\r\n spatialReference: view.spatialReference.wkid\r\n });\r\n await view.goTo({\r\n center: pt,\r\n zoom: l\r\n });\r\n } else {\r\n view.goTo(\r\n mapPortal.initialViewProperties.viewpoint.targetGeometry.extent\r\n );\r\n }\r\n //\r\n // Top Left widgets\r\n //\r\n\r\n const compass = new Compass({\r\n view: view\r\n });\r\n\r\n // adds the compass to the top left corner of the MapView\r\n view.ui.add(compass, \"top-left\");\r\n\r\n const infoButton = this.createInfoButton();\r\n view.ui.add(infoButton, \"top-left\");\r\n\r\n const referenceLayerButton = this.createReferenceLayerButton();\r\n view.ui.add(referenceLayerButton, \"top-left\");\r\n\r\n const luchtFotoButton = this.createLuchtFotoButton();\r\n view.ui.add(luchtFotoButton, \"top-left\");\r\n\r\n //\r\n // Top Right widgets\r\n //\r\n\r\n // create a layerlist with expand widget and add to the view\r\n // var layerList = new LayerList({\r\n // view: view\r\n // });\r\n // const llExpand = new Expand({\r\n // view: view,\r\n // content: layerList,\r\n // expanded: false\r\n // });\r\n // view.ui.add(llExpand, \"top-right\");\r\n\r\n const search = new Search({\r\n view: this.state.view,\r\n popupEnabled: this.state.view.width > 768 ? true : false,\r\n sources: [\r\n {\r\n locator: new Locator({\r\n url:\r\n \"https://geocoder.arcgisonline.nl/arcgis/rest/services/Geocoder_NL_RD/GeocodeServer\"\r\n }),\r\n singleLineFieldName: \"SingleLine\",\r\n name: \"Esri Nederland Geocoder\",\r\n placeholder: \"Zoek op plaats\",\r\n maxResults: 3,\r\n maxSuggestions: 8,\r\n suggestionsEnabled: true,\r\n minSuggestCharacters: 0\r\n }\r\n ],\r\n includeDefaultSources: false\r\n });\r\n this.state.view.ui.add(search, \"top-right\");\r\n\r\n view.watch(\"widthBreakpoint\", newVal => {\r\n if (newVal === \"xsmall\") {\r\n search.popupEnabled = false;\r\n } else if (newVal === \"small\") {\r\n search.popupEnabled = false;\r\n } else if (view.ui.components.length === 1) {\r\n search.popupEnabled = true;\r\n }\r\n });\r\n\r\n const zoomWidget = new Zoom({\r\n view: view\r\n });\r\n\r\n view.ui.add(zoomWidget, {\r\n position: \"top-right\"\r\n });\r\n\r\n //if query parameters isMapCir is true load infrared layers.\r\n if (isMapCir === true) {\r\n this.toggelLuchtFoto(null, year, play);\r\n } else {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(\"discreteSlider\")\r\n );\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n };\r\n\r\n createInfoButton = () => {\r\n // Create a div and let it inherit the esri style from the js-api\r\n const divInfo = document.createElement(\"div\");\r\n divInfo.classList = \"esri-widget--button esri-widget esri-interactive\";\r\n divInfo.onclick = this.showInfoModal.bind(this);\r\n divInfo.title = \"Meer informatie over deze app\";\r\n\r\n // Create an icon with a span element\r\n const spanInfo = document.createElement(\"span\");\r\n spanInfo.classList = \"esri-icon esri-icon-description\";\r\n divInfo.appendChild(spanInfo);\r\n return divInfo;\r\n };\r\n\r\n createReferenceLayerButton = () => {\r\n const divReferenceLayer = document.createElement(\"div\");\r\n divReferenceLayer.classList =\r\n \"esri-widget--button esri-widget esri-interactive\";\r\n divReferenceLayer.onclick = this.toggelReferenceLayer.bind(this);\r\n divReferenceLayer.title = \"Toon of verberg de referentielaag\";\r\n const spanReferenceLayer = document.createElement(\"span\");\r\n spanReferenceLayer.classList = \"esri-icon esri-icon-checkbox-checked\";\r\n divReferenceLayer.appendChild(spanReferenceLayer);\r\n return divReferenceLayer;\r\n };\r\n\r\n createLuchtFotoButton = () => {\r\n const divLuchtFoto = document.createElement(\"div\");\r\n divLuchtFoto.classList = \"esri-widget--button esri-widget esri-interactive\";\r\n divLuchtFoto.onclick = this.toggelLuchtFoto.bind(this);\r\n divLuchtFoto.title = \"Wissel naar luchtfoto of infrarood-beeld\";\r\n const spanLuchtFoto = document.createElement(\"span\");\r\n spanLuchtFoto.classList = \"esri-icon esri-icon-media\";\r\n divLuchtFoto.appendChild(spanLuchtFoto);\r\n return divLuchtFoto;\r\n };\r\n\r\n showInfoModal = () => {\r\n this.setState({ openInfoModal: true });\r\n };\r\n\r\n toggelLuchtFoto = async (evt, year = null, play = false) => {\r\n ReactDOM.unmountComponentAtNode(document.getElementById(\"discreteSlider\"));\r\n\r\n const style = document.getElementById(\"themeLink\");\r\n\r\n if (!this.state.isMapCir && !this.state.mapPortalCir.loaded) {\r\n style.href = \"red.css\";\r\n await this.state.mapPortalCir.load();\r\n let layersCirfiltered = await this.state.mapPortalCir.layers.filter(\r\n layer => layer.operationalLayerType === \"ArcGISTiledMapServiceLayer\"\r\n );\r\n\r\n //Sort the layer based on title. All titles are defined as year number.\r\n //Turn on the visibility on the first layer.\r\n let layersCirSorted = await layersCirfiltered.sort(l => l.title);\r\n let layersCir = null;\r\n if (year) {\r\n layersCir = await layersCirSorted.map(l => {\r\n if (l.title === year) {\r\n l.visible = true;\r\n } else {\r\n l.visible = false;\r\n }\r\n l.id = l.title;\r\n return l;\r\n });\r\n } else {\r\n layersCir = await layersCirSorted.map((l, i) => {\r\n if (i === 0) {\r\n l.visible = true;\r\n } else {\r\n l.visible = false;\r\n }\r\n l.id = l.title;\r\n return l;\r\n });\r\n }\r\n this.setState({\r\n layersCir: layersCir,\r\n isMapCir: true\r\n });\r\n this.state.map.removeAll();\r\n this.state.map.addMany(layersCir);\r\n let promisesCir = [];\r\n layersCir.forEach(l => promisesCir.push(l.when()));\r\n await Promise.all(promisesCir);\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(\"discreteSlider\")\r\n );\r\n this.setState({\r\n isMapCir: true\r\n });\r\n } else if (!this.state.isMapCir) {\r\n style.href = \"red.css\";\r\n this.state.map.removeAll();\r\n this.state.map.addMany(this.state.layersCir);\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(\"discreteSlider\")\r\n );\r\n this.setState({\r\n isMapCir: true\r\n });\r\n } else {\r\n style.href = \"\";\r\n this.state.map.removeAll();\r\n this.state.map.addMany(this.state.layers);\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(\"discreteSlider\")\r\n );\r\n this.setState({\r\n isMapCir: false\r\n });\r\n }\r\n };\r\n\r\n toggelReferenceLayer = async evt => {\r\n if (\r\n evt.currentTarget.childNodes[0].classList.contains(\r\n \"esri-icon-checkbox-unchecked\"\r\n )\r\n ) {\r\n evt.currentTarget.childNodes[0].classList.remove(\r\n \"esri-icon-checkbox-unchecked\"\r\n );\r\n evt.currentTarget.childNodes[0].classList.add(\r\n \"esri-icon-checkbox-checked\"\r\n );\r\n this.state.referenceLayerPortal.visible = true;\r\n } else {\r\n evt.currentTarget.childNodes[0].classList.remove(\r\n \"esri-icon-checkbox-checked\"\r\n );\r\n evt.currentTarget.childNodes[0].classList.add(\r\n \"esri-icon-checkbox-unchecked\"\r\n );\r\n this.state.referenceLayerPortal.visible = false;\r\n }\r\n };\r\n\r\n parseHtmlContent = htmlContent => {\r\n const result = document.createElement(\"div\");\r\n result.innerHTML = htmlContent;\r\n return result;\r\n };\r\n\r\n onReu;\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n document.getElementById(\"root\")}\r\n overlayStyle={{ position: \"absolute\" }}\r\n dialogStyle={{ width: \"90%\" }}\r\n appElement={document.body}\r\n onRequestClose={() => {\r\n this.setState({ openInfoModal: false });\r\n }}\r\n >\r\n Informatie\r\n \r\n \r\n {\r\n this.setState({ openInfoModal: false });\r\n }}\r\n >\r\n Sluiten\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === \"localhost\" ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === \"[::1]\" ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener(\"load\", () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n \"This web app is being served cache-first by a service \" +\r\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === \"installed\") {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n \"New content is available and will be used when all \" +\r\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log(\"Content is cached for offline use.\");\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error(\"Error during service worker registration:\", error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get(\"content-type\");\r\n if (\r\n response.status === 404 ||\r\n (contentType !== null && contentType.indexOf(\"javascript\") === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n \"No internet connection found. App is running in offline mode.\"\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if (\"serviceWorker\" in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport App from \"./App\";\r\nimport CalciteThemeProvider from \"calcite-react/CalciteThemeProvider\";\r\n\r\nimport * as serviceWorker from \"./serviceWorker\";\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}