{"version":3,"sources":["assets/images/finalCheckmark.svg","assets/images/icon_dem.png","assets/images/icon_frequency.png","assets/images/icon_extent.png","assets/images/DHI_Logo_Blue.png","assets/images/dhi_logo_white.png","assets/images/flood_metrics_banner.jpg","assets/images/error.svg","assets/images/flood_frequency_legend.jpg","containers/partials/Navbar.js","styles/landingpage.js","containers/partials/About.js","containers/partials/Banner.js","containers/partials/BulletPoints.js","containers/partials/Contact.js","containers/partials/ContactForm/ContactConfirmation.js","containers/partials/ContactForm/ContactFormComponentDynamics.js","containers/partials/ContactForm/ContactError.js","containers/partials/ContactForm/ContactForm.js","containers/partials/DEM.js","containers/partials/FloodExtent.js","containers/partials/FloodFrequency.js","containers/partials/Intro.js","containers/partials/ProductOverview.js","containers/partials/Testimonial.js","containers/partials/UseCases.js","containers/partials/Visit.js","data/utils.js","containers/Landingpage.js","containers/IEnotification.js","serviceWorker.js","styles/theme.js","styles/mixins.js","components/Loader/Loader.js","components/Loader/styles.js","styles/global.js","components/Map/DHIMapControl/partials/BaseLayerControl.js","components/Map/DHIMapControl/partials/ResetViewControl.js","components/Map/DHIMapControl/partials/SearchControl.js","components/Map/DHIMapControl/partials/ZoomControl.js","components/Map/DHIMapControl/partials/ZoomToAreaControl.js","components/Map/DHIMapControl/DHIMapControl.js","components/Map/Map.js","components/Sidebar/Introduction/partials/DemonstrationData.js","components/Sidebar/Info/defaultProducts.js","components/Sidebar/Introduction/Introduction.js","components/Sidebar/ProductList/GetQuoteButton/GetQuoteButton.js","components/Sidebar/ProductList/ProductListHeader/ProjectListHeader.js","components/Sidebar/ProductList/VolumeDisclaimers/VolumeDisclaimerTotalPrice.js","components/Sidebar/ProductList/TotalPrice/TotalPrice.js","components/Sidebar/ProductList/VolumeDisclaimers/VolumeDisclaimerAccordion.js","components/Sidebar/ProductList/ProductList.js","components/Sidebar/QuoteDetails/AreaDetails.js","components/Sidebar/QuoteDetails/ContactDetails.js","components/Sidebar/QuoteDetails/DemDetails.js","components/Sidebar/QuoteDetails/FloodExtentDetails.js","components/Sidebar/QuoteDetails/FloodFrequencyDetails.js","components/Sidebar/QuoteDetails/QuoteDetails.js","components/Sidebar/Confirmation/Confirmation.js","components/Sidebar/DataComponent/DataComponent.js","components/Sidebar/Info/Info.js","components/Sidebar/Support/partials/About/About.js","components/Sidebar/Support/Support.js","components/Sidebar/Support/partials/FAQ/FAQ.js","components/Sidebar/Support/partials/Contact/Contact.js","components/Sidebar/Support/partials/Disclaimer/Disclaimer.js","components/Sidebar/Support/partials/Privacy/Privacy.js","components/Sidebar/Support/partials/Privacy/styles.js","components/Sidebar/Support/partials/Terms/Terms.js","components/Sidebar/Title/Title.js","components/Sidebar/Sidebar.js","components/SidebarControl/SidebarControl.js","components/Sidebar/Dialogs/DialogWindow.js","components/Map/partials/DrawRectangle.js","components/Map/partials/DrawRadius.js","components/Map/MapboxDraw.js","data/index.js","Home.js","components/DemoMap/partials/DataLayer.js","components/DemoMap/partials/ProductMarkers.js","components/DemoMap/DemoMap.js","components/DemoSidebar/ProductComponents/FloodExtent.js","components/DemoSidebar/partials/DemoFloodExtent.js","components/DemoSidebar/ProductComponents/FloodFrequency.js","components/DemoSidebar/partials/DemoFloodFrequency.js","components/DemoSidebar/partials/DemoDEM.js","components/DemoSidebar/partials/DemoIntroduction.js","components/DemoSidebar/partials/DemoTabControl.js","components/DemoSidebar/partials/DemoTitle.js","components/DemoSidebar/partials/LinkToFloodMetrics.js","components/DemoSidebar/DemoSidebar.js","components/DemoSidebar/DemoSidebarControl.js","Demo.js","components/Sidebar/ProductList/DEMFloods/DEMcheckboxes.js","components/Sidebar/ProductList/FloodExtent/ResolutionSelector.js","components/Sidebar/ProductList/FloodExtent/DateSelector.js","components/Sidebar/ProductList/FloodExtent/FloodExtent.js","components/Sidebar/ProductList/FloodFrequency/MonthPicker.js","components/Sidebar/ProductList/FloodFrequency/YearPicker.js","components/Sidebar/ProductList/FloodFrequency/FloodFrequency.js","App.js","components/Sidebar/ProductList/DEMFloods/DEM.js","data/history.js","index.js","assets/images/product_dem.jpg","assets/images/product_flood_extent.png","assets/images/product_flood_frequency.jpg"],"names":["module","exports","linkStyle","color","fontSize","fontWeight","paddingTop","Navbar","Grid","container","spacing","style","backgroundColor","padding","item","xs","sm","src","DHILogo","alt","alignItems","justify","direction","Link","href","landingpageStyle","makeStyles","theme","landingPage","maxWidth","media","width","height","box","h4","icon","fill","palette","secondary","main","rootGrey","flexGrow","overflow","productTitle","About","landingpage","Paper","className","root","Box","m","p","textAlign","Typography","variant","useStyles","background","BG","backgroundSize","backgroundPosition","description","primary","window","innerWidth","lineHeight","title","paddingBottom","Banner","classes","firstColumn","secondColumn","BulletPoints","paragraph","map","point","i","Fragment","key","text","textStyle","ContactConfirmation","py","finalCheckmark","pt","gutterBottom","target","rel","option","marginRight","countries","code","label","phone","suggested","ContactForm","email","details","handleSendMail","setDetails","updateDetails","TextField","name","id","onChange","Autocomplete","event","newValue","country","onInputChange","newInputValue","display","options","autoHighlight","getOptionLabel","renderOption","isoCode","String","fromCodePoint","toUpperCase","replace","char","charCodeAt","renderInput","params","inputProps","autoComplete","multiline","Button","disabled","first_name","last_name","company","test","message","onClick","errorIcon","defaultDetails","contactStyle","override","css","contactConfirmed","loading","React","useState","justifyContent","borderRadius","pb","size","ContactError","minHeight","e","obj","value","DEM","my","imageDEM","FloodExtent","imageExtent","FloodFrequency","imageFloodFrequency","products","iconExtent","iconDem","iconFrequency","textCenter","ProductOverview","length","italic","fontStyle","Testimonial","DotIcon","body","Icon","video","position","top","left","videoWrapper","border","Visit","frameBorder","allow","allowFullScreen","polygonArea","geojson","area","getWindowDimensions","document","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","useEffect","handleResize","addEventListener","removeEventListener","sendMail","a","axios","post","headers","response","Error","data","Promise","resolve","console","error","Sentry","reject","LandingPage","setLoading","setConfirmed","application","request_date","formatISO","Date","now","Intro","UseCases","align","Boolean","location","hostname","match","DHITheme","createMuiTheme","medium","grey","light","dark","normal","flexLayout","flexDirection","flex","typography","h6","borderTop","borderBottom","subtitle1","body2","drawerColor","drawerWidth","overrides","MuiButton","textTransform","containedSecondary","MuiCardContent","MuiCheckbox","MuiSvgIcon","MuiAccordion","margin","MuiAccordionDetails","MuiAccordionSummary","content","MuiAutocomplete","inputRoot","MuiFormControlLabel","marginLeft","opacity","paddingLeft","MuiIconButton","MuiInputBase","input","MuiInputLabel","MuiPaper","rounded","elevation1","boxShadow","MuiPickersBasePicker","pickerView","MuiPickersCalendar","transitionContainer","MuiPickersDay","day","daySelected","MuiToolbar","regular","MuiTooltip","tooltip","directionColumn","justifyCenter","alignCenter","enhancer","compose","withStyles","minorLoading","zIndex","majorLoading","withTheme","isLoading","isMajorLoading","CircularProgress","thickness","LinearProgress","checkboxStyle","boxSizing","checkedIcon","backgroundImage","iconStyle","button","activeIcon","disabledIcon","productStyle","addDays","marginTop","pointer","banner","cursor","clearDays","disclaimer","popupLink","textDecoration","readMore","regionContainer","regionTitleMain","regionTitleArea","svg","totalPrice","totalPriceTitle","titleStyle","titleMain","fontFamily","subTitle","productIconStyle","borderRight","stroke","buttonSelected","BaseLayerControl","satelliteBase","setSatelliteBase","Tooltip","placement","IconButton","MapView","classnames","ResetViewControl","resetView","Expand","SearchControl","setBounds","accessToken","searchbar","toggleSearchbar","Search","mapboxApiAccessToken","viewport","onSelected","bbox","center","hideOnSelect","queryParams","clearOnBlur","initialInputValue","ZoomControl","setZoom","zoom","Plus","Minus","ZoomToAreaControl","drawMode","useContext","HomeContext","actions","ZoomToArea","DHIMapControl","mt","require","token","styles","DEFAULT_BOUNDS","Mapbox","ReactMapboxGl","minZoom","maxZoom","Map","mobile","onStyleLoad","zoomBounds","state","bounds","containerStyle","fitBounds","onZoomEnd","getZoom","satellite","buttonStyle","buttonSecondary","link","DemonstrationData","to","defaultProducts","image","active","viewBox","points","iconDEM","imageFrequency","d","buttonMain","dialogueLinks","product","detailLinks","Introduction","setDialogue","GetQuoteButton","AppContext","setShowQuote","sum","ProductListHeader","CloseXS","sqm","parseInt","toLocaleString","volumeDisclaimer","volumeDisclaimerStyle","VolumeDisclaimerTotalPrice","stopPropagation","TotalPrice","VolumeDisclaimerTitle","priceStyle","ProductList","productExtent","productDEM","productFrequency","expanded","setExpanded","panel","Component","component","price","priceCap","Accordion","isExpanded","AccordionSummary","expandIcon","aria-controls","VolumeDisclaimerAccordion","showPrice","AccordionDetails","AreaDetails","ContactDetails","noValidate","DemDetails","resolutionRange","res","min","max","FloodExtentDetails","dates","formattedDates","date","resolution","str","format","checked","FloodFrequencyDetails","months","years","year","Object","keys","filter","toString","QuoteDetails","Confirmation","setShowConfirmation","productString","prod","join","px","marginBottom","DataComponent","showConfirmation","showQuote","tabs","tab","minWidth","appbar","Info","setValue","AppBar","Tabs","TabIndicatorProps","index","Tab","panels","Support","ExpansionPanel","ExpansionPanelSummary","ExpansionPanelDetails","Title","Sidebar","sidebarComponent","overflowX","overflowY","icons","DownloadIcon","InfoIcon","SupportIcon","SidebarControl","setOpenDrawer","setSidebarComponent","openDrawer","Right","Left","Down","Up","handleClick","DialogTitle","closeButton","right","props","children","onClose","other","disableTypography","aria-label","DialogContent","MuiDialogContent","DialogWindow","handleClose","open","Dialog","aria-labelledby","dividers","doubleClickZoom","ctx","setTimeout","_ctx","store","getInitialConfigValue","enable","disable","DrawRectangle","onSetup","opts","rectangle","this","newFeature","type","properties","geometry","coordinates","addFeature","clearSelectedFeatures","updateUIClasses","mouse","setActionableState","trash","onTap","startPoint","onMouseMove","lngLat","lng","lat","endPoint","changeMode","featuresId","updateCoordinate","onKeyUp","keyCode","onStop","activateUIButton","undefined","getFeature","removeCoordinate","isValid","fire","features","toGeoJSON","deleteFeature","silent","toDisplayFeatures","isActivePolygon","onTrash","RadiusMode","_","extend","MapboxDraw","modes","draw_line_string","call","circle","meta","clickAnywhere","currentVertexPosition","line","addCoordinate","featureIds","circleFeature","radiusInKm","parentId","theta","x","y","coords","latitude","longitude","km","ret","distanceX","Math","cos","PI","distanceY","sin","push","parent","createGeoJSONCircle","lineDistance","setCoordinates","path","isActiveLine","coord_path","displayMeasurements","feature","metricMeasurement","standardMeasurement","drawnLength","metricUnits","metricFormat","standardUnits","standardFormat","metric","numeral","standard","getDisplayMeasurements","radiusMetric","radiusStandard","draw","displayControlsDefault","assign","draw_rectangle","draw_circle","apiBaseUrls","mail","sendContactInformation","baseUrl","endpoint","log","createContext","Home","resetProducts","setArea","setZoomBounds","enqueueSnackbar","useSnackbar","dialogue","loadEvent","addControl","on","createArea","deleteArea","updateArea","getProductDetails","flood_extent","dem_floods","flood_frequency","geometries","resolutions","getMode","coord","deleteAll","Provider","shape","innerHeight","borderLeft","DataLayer","DemoContext","url","setUrl","pathname","useLocation","updateRaster","urlParam","split","comp","find","category","tiles","locations","band","colormap","attribution","getFullYear","tileSize","tileJsonSource","sourceId","markerStyle","marker","transition","markerSmall","markerLarge","ProductMarkers","setLocation","demoProductsExtent","demoProductsDEM","demoProductsFrequency","useRouteMatch","latLng","anchor","DemoMap","forEach","legendStyle","FloodExtentProduct","moment","DemoFloodExtent","handleChange","legendRange","colorbarStyle","tableStyle","FloodFrequencyLegend","v","DemoFloodFrequency","DemoDEM","DemoIntroduction","iconLink","iconLinkActive","iconTitle","iconWrapper","DemoTabControl","orderedProducts","selection","DemoTitle","LinkToFloodMetrics","DemoSidebar","exact","render","DemoSidebarControl","computeColormap","range","demoExtent","encodeURIComponent","demoDEM","demoFrequency","JSON","stringify","Demo","dispatchEvent","Event","initiated","DEMCheckboxes","setProductDEM","initiate","cloneDeep","compPrice","recalculatePrices","sqmPrice","pow","Checkbox","ResolutionSelector","handleCheckbox","DateSelector","setProductExtent","calcNewPrices","calcPrice","handleDateChange","_date","_obj","discount","formula","low","high","placeholder","disableToolbar","keyboardIcon","Calendar","MonthPicker","setProductFrequency","month","monthKey","datepicker__checkbox","datepicker__checkboxSelected","datepicker__monthTitle","datepicker__monthTitleSelected","DatepickerCheckbox","yearRange","includes","splice","indexOf","dateTemplate","sqkm","defaultExtent","floodExtentProduct","_price","calcSum","reduce","acc","defaultDEM","DEMproduct","updatePrice","priceMin","priceMax","pr","defaultFrequency","frequencyProduct","last3years","_years","_months","totalYears","totalMonths","discountFactor","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","App","setSum","process","createBrowserHistory","CustomSnackbarProvider","variantSuccess","variantError","variantWarning","variantInfo","SnackbarProvider","isIE","documentMode","ReactDOM","IEnotification","history","ThemeProvider","utils","DateFnsUtils","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.40120b18.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/finalCheckmark.c133935d.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/flood_metrics_banner.6c454004.jpg\";","module.exports = __webpack_public_path__ + \"static/media/error.7ef72805.svg\";","module.exports = \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4RDyRXhpZgAATU0AKgAAAAgABAE7AAIAAAANAAAISodpAAQAAAABAAAIWJydAAEAAAAaAAAQ0OocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEplcm9lbiBEZXJrcwAAAAWQAwACAAAAFAAAEKaQBAACAAAAFAAAELqSkQACAAAAAzE0AACSkgACAAAAAzE0AADqHAAHAAAIDAAACJoAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMDIwOjA1OjI3IDEyOjM3OjU4ADIwMjA6MDU6MjcgMTI6Mzc6NTgAAABKAGUAcgBvAGUAbgAgAEQAZQByAGsAcwAAAP/hCx9odHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIi8+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4bXA6Q3JlYXRlRGF0ZT4yMDIwLTA1LTI3VDEyOjM3OjU4LjEzNjwveG1wOkNyZWF0ZURhdGU+PC9yZGY6RGVzY3JpcHRpb24+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpjcmVhdG9yPjxyZGY6U2VxIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpsaT5KZXJvZW4gRGVya3M8L3JkZjpsaT48L3JkZjpTZXE+DQoJCQk8L2RjOmNyZWF0b3I+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSd3Jz8+/9sAQwAHBQUGBQQHBgUGCAcHCAoRCwoJCQoVDxAMERgVGhkYFRgXGx4nIRsdJR0XGCIuIiUoKSssKxogLzMvKjInKisq/9sAQwEHCAgKCQoUCwsUKhwYHCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq/8AAEQgAEgGzAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+iTTTTjTTWJAw9aYaeetMNSSNNNNONNNIkYaaacaaaRIw0004001IhppppxpppEjTTDTzTDUkjWqM1I1RmglkbUw09qYaZmyM0w080w0zNkbUw09qYauJmyNqjNSNUZraJjIjamGntTDXREyZGajNSGozW0TFkbVE3WpWqJutdETJkZqI1KaiNdETNkbd6iapW71E1dETJkTVC9TNUL1qiSFqhapmqFqtAQtUL96maoX71aGQtUL1M1QvVoCFqiapWqJqpCIXqFqmeoWrRARNULVM1QtVICJqjapGqNqTNYkRqJqlNRNUM3iRNUbVI1RtUs3iMoooqTQ+3DTTRRXxJ9GMPWmGiipJGmmmiikSMNNNFFIkYaaaKKkQ0000UUiRpphooqSRrVGaKKCWRtTDRRTM2RmmGiimZsjamGiiriZsjaozRRW0TGRG1MNFFdETJkZqM0UVtExZG1RN1ooroiZMjNRGiiuiJmyNu9RNRRXREyZE1QvRRWqJIWqFqKKtAQtUL96KKtDIWqF6KKtAQtUTUUVSEQvULUUVogImqFqKKpARNUbUUUmaxIjUTUUVDN4kTVG1FFSzeIyiiipND//2Q==\"","import React from 'react';\r\nimport { Grid, Link } from '@material-ui/core';\r\nimport DHILogo from 'assets/images/dhi_logo_white.png';\r\n\r\nconst linkStyle = {\r\n color: '#fff',\r\n fontSize: 14,\r\n fontWeight: 500,\r\n paddingTop: 10,\r\n};\r\n\r\nconst Navbar = () => {\r\n return (\r\n \r\n \r\n \"DHI\r\n \r\n\r\n \r\n \r\n \r\n Visit viewer\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Navbar;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const landingpageStyle = makeStyles(theme => ({\r\n landingPage: {\r\n maxWidth: 1080,\r\n padding: '20vh, 0',\r\n media: {\r\n width: 540,\r\n height: 320,\r\n },\r\n },\r\n box: {\r\n maxWidth: 1080,\r\n backgroundColor: 'transparent',\r\n },\r\n h4: {\r\n fontSize: 24,\r\n fontWeight: 700,\r\n color: '#0B4566',\r\n },\r\n icon: {\r\n width: 32,\r\n height: 32,\r\n '& path': {\r\n fill: theme.palette.secondary.main,\r\n },\r\n },\r\n rootGrey: {\r\n flexGrow: 1,\r\n overflow: 'hidden',\r\n backgroundColor: '#F2F5F7 !important',\r\n },\r\n productTitle: {\r\n color: '#00A4EC',\r\n fontSize: 32,\r\n fontWeight: 700,\r\n },\r\n}));\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nconst About = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n About DHI GRAS\r\n \r\n \r\n \r\n \r\n DHI GRAS is specialized in satellite image and data processing.\r\n DHI GRAS handles the entire data flow from the reception and\r\n processing of satellite images to the delivery of the requested\r\n final information products.\r\n \r\n \r\n \r\n \r\n The company was established in 2000 and has completed projects and\r\n delivered services in over 75 countries worldwide for a range of\r\n different clients. For more information about DHI GRAS please\r\n visit{' '}\r\n \r\n www.dhi-gras.com\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default About;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\nimport BG from 'assets/images/flood_metrics_banner.jpg';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n flexGrow: 1,\r\n overflow: 'hidden',\r\n background: `url(${BG})`,\r\n backgroundSize: 'cover',\r\n backgroundPosition: 'left center',\r\n },\r\n description: {\r\n color: theme.palette.primary.main,\r\n fontSize: window.innerWidth < 600 ? 24 : 32,\r\n lineHeight: window.innerWidth < 600 && 1,\r\n fontWeight: 'bold',\r\n },\r\n title: {\r\n fontSize: window.innerWidth < 600 ? 60 : 120,\r\n lineHeight: window.innerWidth < 600 ? 0.8 : 0.7,\r\n paddingBottom: 16,\r\n fontWeight: 'bold',\r\n color: theme.palette.primary.main,\r\n },\r\n}));\r\n\r\nconst Banner = () => {\r\n const classes = useStyles();\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n DHI Flood Metrics\r\n \r\n \r\n \r\n High-quality, cost-efficient and operational information for your\r\n flood monitoring needs\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Banner;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\nimport { ReactComponent as DotIcon } from '@mike/mike-shared-frontend/media/icons/ColorCircle.svg';\r\n\r\nconst firstColumn = [\r\n 'Search, request and purchase Accurate flood products and DEM data directly from our online store',\r\n 'Keep your data costs low Search for data covering your area of interest and pay by the square kilometer',\r\n 'Ready-to-use data We provide easy access to the most advanced satellite-based flood products, delivered in ready-to-use data formats',\r\n];\r\n\r\nconst secondColumn = [\r\n 'Operational flood data unaffected by clouds and weather We fuse both optical and radar satellite data to ensure seamless coverage of your area, regardless of cloud cover, and we deliver flood extent products in under an hour after we receive the raw satellite data.',\r\n 'Globally available and local scale data Our products are available anywhere in the world and we provide both medium and very high-resolution data products for your local area.',\r\n];\r\n\r\nconst BulletPoints = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Easy access to high quality flood products and Digital Elevation\r\n Models (DEM)\r\n \r\n \r\n \r\n \r\n Flood Metrics puts our operational flood products and DEM’s at\r\n your fingertips. It enables you to:\r\n \r\n \r\n \r\n {firstColumn &&\r\n firstColumn.map((point, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {point}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n {secondColumn &&\r\n secondColumn.map((point, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {point}\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 BulletPoints;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n flexGrow: 1,\r\n overflow: 'hidden',\r\n background: theme.palette.primary.main,\r\n },\r\n text: {\r\n fontSize: 12,\r\n color: '#fff',\r\n },\r\n}));\r\n\r\nconst About = () => {\r\n const classes = useStyles();\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n DHI GRAS\r\n \r\n \r\n \r\n gras@dhigroup.com\r\n +45 4516 9100\r\n \r\n \r\n Agern Alle 5,\r\n 2970 Hørsholm,\r\n Denmark\r\n \r\n \r\n CVR: 25621646\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default About;\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport finalCheckmark from 'assets/images/finalCheckmark.svg';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nconst linkStyle = {\r\n color: '#00A4EC',\r\n};\r\n\r\nconst textStyle = {\r\n color: '#0B4566',\r\n};\r\n\r\nconst ContactConfirmation = () => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Thanks!\r\n \r\n \r\n One of our employees will get back to you as soon as possible.\r\n \r\n \r\n If you want to find out more about DHI GRAS services, you can visit our\r\n website:{' '}\r\n \r\n www.dhi-gras.com\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ContactConfirmation;\r\n","import React from 'react';\r\nimport { Box, Button, TextField, makeStyles } from '@material-ui/core';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\n\r\nconst useStyles = makeStyles({\r\n option: {\r\n fontSize: 12,\r\n '& > span': {\r\n marginRight: 8,\r\n fontSize: 14,\r\n },\r\n },\r\n});\r\n\r\nconst countries = [\r\n { code: 'AD', label: 'Andorra', phone: '376' },\r\n { code: 'AE', label: 'United Arab Emirates', phone: '971' },\r\n { code: 'AF', label: 'Afghanistan', phone: '93' },\r\n { code: 'AG', label: 'Antigua and Barbuda', phone: '1-268' },\r\n { code: 'AI', label: 'Anguilla', phone: '1-264' },\r\n { code: 'AL', label: 'Albania', phone: '355' },\r\n { code: 'AM', label: 'Armenia', phone: '374' },\r\n { code: 'AO', label: 'Angola', phone: '244' },\r\n { code: 'AQ', label: 'Antarctica', phone: '672' },\r\n { code: 'AR', label: 'Argentina', phone: '54' },\r\n { code: 'AS', label: 'American Samoa', phone: '1-684' },\r\n { code: 'AT', label: 'Austria', phone: '43' },\r\n { code: 'AU', label: 'Australia', phone: '61', suggested: true },\r\n { code: 'AW', label: 'Aruba', phone: '297' },\r\n { code: 'AX', label: 'Alland Islands', phone: '358' },\r\n { code: 'AZ', label: 'Azerbaijan', phone: '994' },\r\n { code: 'BA', label: 'Bosnia and Herzegovina', phone: '387' },\r\n { code: 'BB', label: 'Barbados', phone: '1-246' },\r\n { code: 'BD', label: 'Bangladesh', phone: '880' },\r\n { code: 'BE', label: 'Belgium', phone: '32' },\r\n { code: 'BF', label: 'Burkina Faso', phone: '226' },\r\n { code: 'BG', label: 'Bulgaria', phone: '359' },\r\n { code: 'BH', label: 'Bahrain', phone: '973' },\r\n { code: 'BI', label: 'Burundi', phone: '257' },\r\n { code: 'BJ', label: 'Benin', phone: '229' },\r\n { code: 'BL', label: 'Saint Barthelemy', phone: '590' },\r\n { code: 'BM', label: 'Bermuda', phone: '1-441' },\r\n { code: 'BN', label: 'Brunei Darussalam', phone: '673' },\r\n { code: 'BO', label: 'Bolivia', phone: '591' },\r\n { code: 'BR', label: 'Brazil', phone: '55' },\r\n { code: 'BS', label: 'Bahamas', phone: '1-242' },\r\n { code: 'BT', label: 'Bhutan', phone: '975' },\r\n { code: 'BV', label: 'Bouvet Island', phone: '47' },\r\n { code: 'BW', label: 'Botswana', phone: '267' },\r\n { code: 'BY', label: 'Belarus', phone: '375' },\r\n { code: 'BZ', label: 'Belize', phone: '501' },\r\n { code: 'CA', label: 'Canada', phone: '1', suggested: true },\r\n { code: 'CC', label: 'Cocos (Keeling) Islands', phone: '61' },\r\n { code: 'CD', label: 'Congo, Democratic Republic of the', phone: '243' },\r\n { code: 'CF', label: 'Central African Republic', phone: '236' },\r\n { code: 'CG', label: 'Congo, Republic of the', phone: '242' },\r\n { code: 'CH', label: 'Switzerland', phone: '41' },\r\n { code: 'CI', label: \"Cote d'Ivoire\", phone: '225' },\r\n { code: 'CK', label: 'Cook Islands', phone: '682' },\r\n { code: 'CL', label: 'Chile', phone: '56' },\r\n { code: 'CM', label: 'Cameroon', phone: '237' },\r\n { code: 'CN', label: 'China', phone: '86' },\r\n { code: 'CO', label: 'Colombia', phone: '57' },\r\n { code: 'CR', label: 'Costa Rica', phone: '506' },\r\n { code: 'CU', label: 'Cuba', phone: '53' },\r\n { code: 'CV', label: 'Cape Verde', phone: '238' },\r\n { code: 'CW', label: 'Curacao', phone: '599' },\r\n { code: 'CX', label: 'Christmas Island', phone: '61' },\r\n { code: 'CY', label: 'Cyprus', phone: '357' },\r\n { code: 'CZ', label: 'Czech Republic', phone: '420' },\r\n { code: 'DE', label: 'Germany', phone: '49', suggested: true },\r\n { code: 'DJ', label: 'Djibouti', phone: '253' },\r\n { code: 'DK', label: 'Denmark', phone: '45' },\r\n { code: 'DM', label: 'Dominica', phone: '1-767' },\r\n { code: 'DO', label: 'Dominican Republic', phone: '1-809' },\r\n { code: 'DZ', label: 'Algeria', phone: '213' },\r\n { code: 'EC', label: 'Ecuador', phone: '593' },\r\n { code: 'EE', label: 'Estonia', phone: '372' },\r\n { code: 'EG', label: 'Egypt', phone: '20' },\r\n { code: 'EH', label: 'Western Sahara', phone: '212' },\r\n { code: 'ER', label: 'Eritrea', phone: '291' },\r\n { code: 'ES', label: 'Spain', phone: '34' },\r\n { code: 'ET', label: 'Ethiopia', phone: '251' },\r\n { code: 'FI', label: 'Finland', phone: '358' },\r\n { code: 'FJ', label: 'Fiji', phone: '679' },\r\n { code: 'FK', label: 'Falkland Islands (Malvinas)', phone: '500' },\r\n { code: 'FM', label: 'Micronesia, Federated States of', phone: '691' },\r\n { code: 'FO', label: 'Faroe Islands', phone: '298' },\r\n { code: 'FR', label: 'France', phone: '33', suggested: true },\r\n { code: 'GA', label: 'Gabon', phone: '241' },\r\n { code: 'GB', label: 'United Kingdom', phone: '44' },\r\n { code: 'GD', label: 'Grenada', phone: '1-473' },\r\n { code: 'GE', label: 'Georgia', phone: '995' },\r\n { code: 'GF', label: 'French Guiana', phone: '594' },\r\n { code: 'GG', label: 'Guernsey', phone: '44' },\r\n { code: 'GH', label: 'Ghana', phone: '233' },\r\n { code: 'GI', label: 'Gibraltar', phone: '350' },\r\n { code: 'GL', label: 'Greenland', phone: '299' },\r\n { code: 'GM', label: 'Gambia', phone: '220' },\r\n { code: 'GN', label: 'Guinea', phone: '224' },\r\n { code: 'GP', label: 'Guadeloupe', phone: '590' },\r\n { code: 'GQ', label: 'Equatorial Guinea', phone: '240' },\r\n { code: 'GR', label: 'Greece', phone: '30' },\r\n {\r\n code: 'GS',\r\n label: 'South Georgia and the South Sandwich Islands',\r\n phone: '500',\r\n },\r\n { code: 'GT', label: 'Guatemala', phone: '502' },\r\n { code: 'GU', label: 'Guam', phone: '1-671' },\r\n { code: 'GW', label: 'Guinea-Bissau', phone: '245' },\r\n { code: 'GY', label: 'Guyana', phone: '592' },\r\n { code: 'HK', label: 'Hong Kong', phone: '852' },\r\n { code: 'HM', label: 'Heard Island and McDonald Islands', phone: '672' },\r\n { code: 'HN', label: 'Honduras', phone: '504' },\r\n { code: 'HR', label: 'Croatia', phone: '385' },\r\n { code: 'HT', label: 'Haiti', phone: '509' },\r\n { code: 'HU', label: 'Hungary', phone: '36' },\r\n { code: 'ID', label: 'Indonesia', phone: '62' },\r\n { code: 'IE', label: 'Ireland', phone: '353' },\r\n { code: 'IL', label: 'Israel', phone: '972' },\r\n { code: 'IM', label: 'Isle of Man', phone: '44' },\r\n { code: 'IN', label: 'India', phone: '91' },\r\n { code: 'IO', label: 'British Indian Ocean Territory', phone: '246' },\r\n { code: 'IQ', label: 'Iraq', phone: '964' },\r\n { code: 'IR', label: 'Iran, Islamic Republic of', phone: '98' },\r\n { code: 'IS', label: 'Iceland', phone: '354' },\r\n { code: 'IT', label: 'Italy', phone: '39' },\r\n { code: 'JE', label: 'Jersey', phone: '44' },\r\n { code: 'JM', label: 'Jamaica', phone: '1-876' },\r\n { code: 'JO', label: 'Jordan', phone: '962' },\r\n { code: 'JP', label: 'Japan', phone: '81', suggested: true },\r\n { code: 'KE', label: 'Kenya', phone: '254' },\r\n { code: 'KG', label: 'Kyrgyzstan', phone: '996' },\r\n { code: 'KH', label: 'Cambodia', phone: '855' },\r\n { code: 'KI', label: 'Kiribati', phone: '686' },\r\n { code: 'KM', label: 'Comoros', phone: '269' },\r\n { code: 'KN', label: 'Saint Kitts and Nevis', phone: '1-869' },\r\n { code: 'KP', label: \"Korea, Democratic People's Republic of\", phone: '850' },\r\n { code: 'KR', label: 'Korea, Republic of', phone: '82' },\r\n { code: 'KW', label: 'Kuwait', phone: '965' },\r\n { code: 'KY', label: 'Cayman Islands', phone: '1-345' },\r\n { code: 'KZ', label: 'Kazakhstan', phone: '7' },\r\n { code: 'LA', label: \"Lao People's Democratic Republic\", phone: '856' },\r\n { code: 'LB', label: 'Lebanon', phone: '961' },\r\n { code: 'LC', label: 'Saint Lucia', phone: '1-758' },\r\n { code: 'LI', label: 'Liechtenstein', phone: '423' },\r\n { code: 'LK', label: 'Sri Lanka', phone: '94' },\r\n { code: 'LR', label: 'Liberia', phone: '231' },\r\n { code: 'LS', label: 'Lesotho', phone: '266' },\r\n { code: 'LT', label: 'Lithuania', phone: '370' },\r\n { code: 'LU', label: 'Luxembourg', phone: '352' },\r\n { code: 'LV', label: 'Latvia', phone: '371' },\r\n { code: 'LY', label: 'Libya', phone: '218' },\r\n { code: 'MA', label: 'Morocco', phone: '212' },\r\n { code: 'MC', label: 'Monaco', phone: '377' },\r\n { code: 'MD', label: 'Moldova, Republic of', phone: '373' },\r\n { code: 'ME', label: 'Montenegro', phone: '382' },\r\n { code: 'MF', label: 'Saint Martin (French part)', phone: '590' },\r\n { code: 'MG', label: 'Madagascar', phone: '261' },\r\n { code: 'MH', label: 'Marshall Islands', phone: '692' },\r\n {\r\n code: 'MK',\r\n label: 'Macedonia, the Former Yugoslav Republic of',\r\n phone: '389',\r\n },\r\n { code: 'ML', label: 'Mali', phone: '223' },\r\n { code: 'MM', label: 'Myanmar', phone: '95' },\r\n { code: 'MN', label: 'Mongolia', phone: '976' },\r\n { code: 'MO', label: 'Macao', phone: '853' },\r\n { code: 'MP', label: 'Northern Mariana Islands', phone: '1-670' },\r\n { code: 'MQ', label: 'Martinique', phone: '596' },\r\n { code: 'MR', label: 'Mauritania', phone: '222' },\r\n { code: 'MS', label: 'Montserrat', phone: '1-664' },\r\n { code: 'MT', label: 'Malta', phone: '356' },\r\n { code: 'MU', label: 'Mauritius', phone: '230' },\r\n { code: 'MV', label: 'Maldives', phone: '960' },\r\n { code: 'MW', label: 'Malawi', phone: '265' },\r\n { code: 'MX', label: 'Mexico', phone: '52' },\r\n { code: 'MY', label: 'Malaysia', phone: '60' },\r\n { code: 'MZ', label: 'Mozambique', phone: '258' },\r\n { code: 'NA', label: 'Namibia', phone: '264' },\r\n { code: 'NC', label: 'New Caledonia', phone: '687' },\r\n { code: 'NE', label: 'Niger', phone: '227' },\r\n { code: 'NF', label: 'Norfolk Island', phone: '672' },\r\n { code: 'NG', label: 'Nigeria', phone: '234' },\r\n { code: 'NI', label: 'Nicaragua', phone: '505' },\r\n { code: 'NL', label: 'Netherlands', phone: '31' },\r\n { code: 'NO', label: 'Norway', phone: '47' },\r\n { code: 'NP', label: 'Nepal', phone: '977' },\r\n { code: 'NR', label: 'Nauru', phone: '674' },\r\n { code: 'NU', label: 'Niue', phone: '683' },\r\n { code: 'NZ', label: 'New Zealand', phone: '64' },\r\n { code: 'OM', label: 'Oman', phone: '968' },\r\n { code: 'PA', label: 'Panama', phone: '507' },\r\n { code: 'PE', label: 'Peru', phone: '51' },\r\n { code: 'PF', label: 'French Polynesia', phone: '689' },\r\n { code: 'PG', label: 'Papua New Guinea', phone: '675' },\r\n { code: 'PH', label: 'Philippines', phone: '63' },\r\n { code: 'PK', label: 'Pakistan', phone: '92' },\r\n { code: 'PL', label: 'Poland', phone: '48' },\r\n { code: 'PM', label: 'Saint Pierre and Miquelon', phone: '508' },\r\n { code: 'PN', label: 'Pitcairn', phone: '870' },\r\n { code: 'PR', label: 'Puerto Rico', phone: '1' },\r\n { code: 'PS', label: 'Palestine, State of', phone: '970' },\r\n { code: 'PT', label: 'Portugal', phone: '351' },\r\n { code: 'PW', label: 'Palau', phone: '680' },\r\n { code: 'PY', label: 'Paraguay', phone: '595' },\r\n { code: 'QA', label: 'Qatar', phone: '974' },\r\n { code: 'RE', label: 'Reunion', phone: '262' },\r\n { code: 'RO', label: 'Romania', phone: '40' },\r\n { code: 'RS', label: 'Serbia', phone: '381' },\r\n { code: 'RU', label: 'Russian Federation', phone: '7' },\r\n { code: 'RW', label: 'Rwanda', phone: '250' },\r\n { code: 'SA', label: 'Saudi Arabia', phone: '966' },\r\n { code: 'SB', label: 'Solomon Islands', phone: '677' },\r\n { code: 'SC', label: 'Seychelles', phone: '248' },\r\n { code: 'SD', label: 'Sudan', phone: '249' },\r\n { code: 'SE', label: 'Sweden', phone: '46' },\r\n { code: 'SG', label: 'Singapore', phone: '65' },\r\n { code: 'SH', label: 'Saint Helena', phone: '290' },\r\n { code: 'SI', label: 'Slovenia', phone: '386' },\r\n { code: 'SJ', label: 'Svalbard and Jan Mayen', phone: '47' },\r\n { code: 'SK', label: 'Slovakia', phone: '421' },\r\n { code: 'SL', label: 'Sierra Leone', phone: '232' },\r\n { code: 'SM', label: 'San Marino', phone: '378' },\r\n { code: 'SN', label: 'Senegal', phone: '221' },\r\n { code: 'SO', label: 'Somalia', phone: '252' },\r\n { code: 'SR', label: 'Suriname', phone: '597' },\r\n { code: 'SS', label: 'South Sudan', phone: '211' },\r\n { code: 'ST', label: 'Sao Tome and Principe', phone: '239' },\r\n { code: 'SV', label: 'El Salvador', phone: '503' },\r\n { code: 'SX', label: 'Sint Maarten (Dutch part)', phone: '1-721' },\r\n { code: 'SY', label: 'Syrian Arab Republic', phone: '963' },\r\n { code: 'SZ', label: 'Swaziland', phone: '268' },\r\n { code: 'TC', label: 'Turks and Caicos Islands', phone: '1-649' },\r\n { code: 'TD', label: 'Chad', phone: '235' },\r\n { code: 'TF', label: 'French Southern Territories', phone: '262' },\r\n { code: 'TG', label: 'Togo', phone: '228' },\r\n { code: 'TH', label: 'Thailand', phone: '66' },\r\n { code: 'TJ', label: 'Tajikistan', phone: '992' },\r\n { code: 'TK', label: 'Tokelau', phone: '690' },\r\n { code: 'TL', label: 'Timor-Leste', phone: '670' },\r\n { code: 'TM', label: 'Turkmenistan', phone: '993' },\r\n { code: 'TN', label: 'Tunisia', phone: '216' },\r\n { code: 'TO', label: 'Tonga', phone: '676' },\r\n { code: 'TR', label: 'Turkey', phone: '90' },\r\n { code: 'TT', label: 'Trinidad and Tobago', phone: '1-868' },\r\n { code: 'TV', label: 'Tuvalu', phone: '688' },\r\n { code: 'TW', label: 'Taiwan, Province of China', phone: '886' },\r\n { code: 'TZ', label: 'United Republic of Tanzania', phone: '255' },\r\n { code: 'UA', label: 'Ukraine', phone: '380' },\r\n { code: 'UG', label: 'Uganda', phone: '256' },\r\n { code: 'US', label: 'United States', phone: '1', suggested: true },\r\n { code: 'UY', label: 'Uruguay', phone: '598' },\r\n { code: 'UZ', label: 'Uzbekistan', phone: '998' },\r\n { code: 'VA', label: 'Holy See (Vatican City State)', phone: '379' },\r\n { code: 'VC', label: 'Saint Vincent and the Grenadines', phone: '1-784' },\r\n { code: 'VE', label: 'Venezuela', phone: '58' },\r\n { code: 'VG', label: 'British Virgin Islands', phone: '1-284' },\r\n { code: 'VI', label: 'US Virgin Islands', phone: '1-340' },\r\n { code: 'VN', label: 'Vietnam', phone: '84' },\r\n { code: 'VU', label: 'Vanuatu', phone: '678' },\r\n { code: 'WF', label: 'Wallis and Futuna', phone: '681' },\r\n { code: 'WS', label: 'Samoa', phone: '685' },\r\n { code: 'XK', label: 'Kosovo', phone: '383' },\r\n { code: 'YE', label: 'Yemen', phone: '967' },\r\n { code: 'YT', label: 'Mayotte', phone: '262' },\r\n { code: 'ZA', label: 'South Africa', phone: '27' },\r\n { code: 'ZM', label: 'Zambia', phone: '260' },\r\n { code: 'ZW', label: 'Zimbabwe', phone: '263' },\r\n];\r\n\r\nfunction countryToFlag(isoCode) {\r\n return typeof String.fromCodePoint !== 'undefined'\r\n ? isoCode\r\n .toUpperCase()\r\n .replace(/./g, char =>\r\n String.fromCodePoint(char.charCodeAt(0) + 127397)\r\n )\r\n : isoCode;\r\n}\r\n\r\nfunction validateEmail(email) {\r\n const regexp = /.+@.+\\..+/;\r\n return regexp.test(email);\r\n}\r\n\r\nconst ContactForm = ({\r\n details,\r\n handleSendMail,\r\n setDetails,\r\n updateDetails,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {\r\n // console.log(newValue);\r\n setDetails({\r\n ...details,\r\n country: newValue !== null ? newValue.label : '',\r\n });\r\n }}\r\n onInputChange={(event, newInputValue) => {\r\n // console.log(newInputValue);\r\n setDetails({\r\n ...details,\r\n country: newInputValue !== null ? newInputValue : '',\r\n });\r\n }}\r\n id=\"country-select\"\r\n style={{ width: '50%', display: 'inline-flex' }}\r\n options={countries}\r\n classes={{\r\n option: classes.option,\r\n }}\r\n autoHighlight\r\n getOptionLabel={option => option.label}\r\n renderOption={option => (\r\n \r\n {countryToFlag(option.code)}\r\n {option.label} ({option.code}) +{option.phone}\r\n \r\n )}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n handleSendMail(details)}\r\n >\r\n Submit request\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ContactForm;\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport errorIcon from 'assets/images/error.svg';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nconst linkStyle = {\r\n color: '#00A4EC',\r\n};\r\n\r\nconst textStyle = {\r\n color: '#0B4566',\r\n};\r\n\r\nconst ContactConfirmation = () => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \"error\"\r\n \r\n \r\n Something has gone wrong\r\n \r\n \r\n \r\n Please try to contact us again, and if the problem persist contact us\r\n through{' '}\r\n \r\n www.dhi-gras.com\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ContactConfirmation;\r\n","import React from 'react';\r\nimport BounceLoader from 'react-spinners/BounceLoader';\r\nimport ContactConfirmation from './ContactConfirmation';\r\nimport ContactFormComponent from './ContactFormComponentDynamics';\r\nimport ContactError from './ContactError';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport { css } from '@emotion/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nconst defaultDetails = {\r\n company: '',\r\n country: '',\r\n email: '',\r\n first_name: '',\r\n last_name: '',\r\n message: '',\r\n};\r\n\r\nconst contactStyle = {\r\n color: '#00A4EC',\r\n textAlign: 'center',\r\n};\r\n\r\nconst override = css`\r\n margin: 0 auto;\r\n`;\r\n\r\nconst ContactForm = ({\r\n contactConfirmed,\r\n handleSendMail,\r\n loading,\r\n padding,\r\n}) => {\r\n const [details, setDetails] = React.useState({ ...defaultDetails });\r\n const landingpage = landingpageStyle();\r\n\r\n const updateDetails = e => {\r\n let obj = details;\r\n obj[e.target.id] = e.target.value;\r\n setDetails({ ...obj });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Contact us for more information about Flood Metrics\r\n \r\n \r\n\r\n {loading ? (\r\n \r\n \r\n \r\n ) : contactConfirmed === true ? (\r\n \r\n \r\n \r\n ) : contactConfirmed === false ? (\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 ContactForm;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\nimport imageDEM from 'assets/images/product_dem.jpg';\r\n\r\nconst DEM = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Digital Elevation Model\r\n \r\n \r\n \r\n \r\n \r\n Updated and tailormade Digital Elevation Models (DEM), delivered\r\n in any ready-to-use GIS format, can be ordered through Flood\r\n Metrics.\r\n \r\n \r\n \r\n The products are delivered by leading global service providers and\r\n created from stereoscopic satellite imagery, which is a highly\r\n cost-efficient alternative to traditional land and aerial based\r\n surveying approaches.\r\n \r\n \r\n \r\n The product can be delivered as both a digital surface model (DSM)\r\n which includes surface features such as vegetation and man-made\r\n structures, as well as a bare-earth representation without above\r\n ground objects (DTM) – both options ranging from 1 m to 12 m in\r\n spatial resolution.\r\n \r\n \r\n \r\n \r\n \r\n Digital Elevation Model for region around Nissum Fjord, Denmark\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DEM;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\nimport imageExtent from 'assets/images/product_flood_extent.png';\r\n\r\nconst FloodExtent = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Flood extents\r\n \r\n \r\n \r\n \r\n \r\n We use the latest machine learning technology and advanced image\r\n analysis to accurately map the spatial extent of floodings.\r\n \r\n \r\n \r\n By fusing both optical and radar satellite data, we map flooded\r\n areas with high precision, and regardless of weather conditions,\r\n cloud cover and time of day.\r\n \r\n \r\n \r\n Our optimized and automated processing chains ensures fast,\r\n consistent, reliable and timely delivery of flood extent products.\r\n The product is available at any location, globally, and can be\r\n delivered in near-real time for ongoing flooding events or any\r\n historical flooding in the last 25 years (depending on data\r\n availability).\r\n \r\n \r\n \r\n \r\n \r\n Water extent of flood after cyclone Idai, Mozambique 2019\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FloodExtent;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\nimport imageFloodFrequency from 'assets/images/product_flood_frequency.jpg';\r\n\r\nconst FloodFrequency = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Surface water frequency\r\n \r\n \r\n \r\n \r\n \r\n The surface water frequency data provides information about the\r\n inundation frequency at any given area of interest\r\n \r\n \r\n \r\n It is a measure of the number of times an area has been observed\r\n as water covered, within a given period, measured in percentage of\r\n the total observations.\r\n \r\n \r\n \r\n The product is available at any location, globally, and is\r\n tailored to specific client needs to provide information about\r\n inundation frequency for specific months, seasons or years.\r\n \r\n \r\n \r\n \r\n \r\n Wetness presence over period 2016 – 2019 in Mawlamyine area,\r\n Myanmar\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FloodFrequency;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nconst About = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n DHI’s novel image processing methods, advanced machine learning\r\n algorithms and automated processing workflows of best in class\r\n satellite imagery fuels a new generation of operational flood\r\n monitoring products.\r\n \r\n \r\n \r\n \r\n Flood Metrics is your all-in-one interface for DHI’s\r\n state-of-the-art satellite-based flood monitoring products,\r\n allowing you to search, request and purchase satellite-based flood\r\n products and Digital Elevation Models (DEM) from a single source.\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default About;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nimport iconDem from 'assets/images/icon_dem.png';\r\nimport iconFrequency from 'assets/images/icon_frequency.png';\r\nimport iconExtent from 'assets/images/icon_extent.png';\r\n\r\nconst products = [\r\n { title: 'Flood extents', icon: iconExtent },\r\n { title: 'Digital elevation Model', icon: iconDem },\r\n { title: 'Surface water frequency ', icon: iconFrequency },\r\n];\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n flexGrow: 1,\r\n overflow: 'hidden',\r\n },\r\n});\r\n\r\nconst textCenter = { textAlign: 'center' };\r\n\r\nconst ProductOverview = ({ padding }) => {\r\n const classes = useStyles();\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n 3 different flooding products in a single portal\r\n \r\n \r\n \r\n \r\n \r\n Flood Metrics uses best-in-class satellite imagery for accurate\r\n flood extent and surface water frequency mapping and provides\r\n access to industry leading Digital Elevation Models.\r\n \r\n \r\n \r\n {products.map(({ title, icon }, i) => (\r\n \r\n \r\n {title}\r\n \r\n \r\n {title}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProductOverview;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nconst italic = {\r\n fontStyle: 'italic',\r\n};\r\n\r\nconst Testimonial = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Testimonial\r\n \r\n \r\n \r\n \r\n \r\n \"The Shoalhaven Local Government Area (LGA), along with many\r\n regions of Australia, experienced an unprecedented 2019 / 20\r\n bushfire season which resulted in approximately 75% of the\r\n Shoalhaven LGA being impacted by bushfire, including large areas\r\n of the Shoalhaven River catchment.\r\n \r\n \r\n This was closely followed by a flood event in early February 2020\r\n which inundated a number of homes and resulted in large quantities\r\n of sediment, ash and bushfire debris being deposited along the\r\n banks of waterways, estuaries and the regions beaches.\r\n \r\n \r\n Shoalhaven City Council became aware that DHI GRAS had already\r\n mapped the extent of the February 2020 Shoalhaven River flood\r\n event, using an innovative satellite-based approach.\r\n \r\n \r\n Whilst the timing of satellite imagery missed the peak of this\r\n particular flood event, the ability to capture flood inundation\r\n extents over large areas using satellite based mapping would be\r\n beneficial to assist with the validation / calibration of existing\r\n hydraulic models (if the imagery roughly coincides with the\r\n recorded flood peak), to quickly identify areas to survey flood\r\n debris marks and if this data was available relatively quickly\r\n after a flood event it would assist in deploying resources to\r\n remove flood debris.\"\r\n \r\n \r\n Shoalhaven City Council Floodplain Unit\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Testimonial;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography, Paper } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\nimport { ReactComponent as DotIcon } from '@mike/mike-shared-frontend/media/icons/ColorCircle.svg';\r\n\r\nconst firstColumn = [\r\n {\r\n icon: DotIcon,\r\n title: 'Disaster response and emergency planning',\r\n body:\r\n 'Flood maps provide a spatial overview of the extent of flood events, and this information is critical in supporting emergency response efforts, including identification of risk zones, affected communities and vulnerable areas.',\r\n },\r\n {\r\n icon: DotIcon,\r\n title: 'Public awareness',\r\n body:\r\n 'Flood maps are an efficient tool for awareness raising efforts to strengthen the ability of communities to respond efficiently to ongoing flood events as well as to protect themselves from future events.',\r\n },\r\n {\r\n icon: DotIcon,\r\n title: 'Insurance industry',\r\n body:\r\n 'Flood maps and surface water frequency maps provide critical knowledge which can be used as a parameter to calculate insurance premiums, as well as validate, or substantiate, insurance claims.',\r\n },\r\n];\r\n\r\nconst secondColumn = [\r\n {\r\n icon: DotIcon,\r\n title: 'Hydrological modeling',\r\n body:\r\n 'Flood maps can be used as an integrated parameter to calibrate and validate hydrological models. Knowledge about the actual extent of floods at a given time is, among other things, a critical parameter that can be used to fine-tune flood models to increase the performance and accuracy of flood predictions. Digital elevation models are also an essential parameter in hydrological models.',\r\n },\r\n {\r\n icon: DotIcon,\r\n title: 'Physical planning',\r\n body:\r\n 'Knowledge about the extent of current and past flooding’s, as well as the historical frequency, provides guidance which can be used to support spatial planning processes, i.e. through the identification of suitable areas for different types of development. This knowledge can also be included climate adaptation/mitigation plans, municipal development plans and environmental and nature protection plans.',\r\n },\r\n];\r\n\r\nconst BulletPoints = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Use Cases\r\n \r\n \r\n \r\n {firstColumn &&\r\n firstColumn.map(({ icon: Icon, title, body }, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n {body}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n {secondColumn &&\r\n secondColumn.map(({ icon: Icon, title, body }, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n {body}\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 BulletPoints;\r\n","import React from 'react';\r\nimport { Box, Button, Link, Paper, Typography } from '@material-ui/core';\r\nimport { landingpageStyle } from 'styles/landingpage';\r\n\r\nconst linkStyle = {\r\n color: '#fff',\r\n fontSize: 14,\r\n fontWeight: 500,\r\n};\r\n\r\nconst video = {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n};\r\n\r\nconst videoWrapper = {\r\n position: 'relative',\r\n width: '100%',\r\n height: 0,\r\n paddingBottom: '56.25%',\r\n border: '8px solid #fff',\r\n borderRadius: 4,\r\n};\r\n\r\nconst Visit = ({ padding }) => {\r\n const landingpage = landingpageStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n See for yourself\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 Visit;\r\n","import { useState, useEffect } from 'react';\r\nimport area from '@turf/area';\r\n\r\nimport axios from 'axios';\r\nimport * as Sentry from '@sentry/browser';\r\n\r\nexport const polygonArea = geojson => {\r\n return area(geojson) / 1000 ** 2;\r\n};\r\n\r\nfunction getWindowDimensions() {\r\n const { clientWidth: width, clientHeight: height } = document.body;\r\n return {\r\n width,\r\n height,\r\n };\r\n}\r\n\r\nexport const useWindowDimensions = () => {\r\n const [windowDimensions, setWindowDimensions] = useState(\r\n getWindowDimensions()\r\n );\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return windowDimensions;\r\n};\r\n\r\nconst apiBaseUrl =\r\n 'https://dna-sendmail.azurewebsites.net/api/sendmail';\r\n\r\nexport const sendMail = async ({ body }) => {\r\n // console.log(body);\r\n try {\r\n const endpoint = apiBaseUrl;\r\n const response = await axios.post(endpoint, body, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (!response) throw Error(`Request rejected`);\r\n const { data } = response || {};\r\n\r\n return Promise.resolve(data);\r\n } catch (error) {\r\n console.error(error);\r\n Sentry.captureMessage(error);\r\n return Promise.reject(error);\r\n }\r\n};\r\n\r\nexport const kazakhstanColormap = {\r\n '0': 'F3FBEE',\r\n '1': 'F3FBEE',\r\n '2': 'F1F9EB',\r\n '3': 'EDF8E7',\r\n '4': 'EDF8E7',\r\n '5': 'EBF6E5',\r\n '6': 'E9F6E3',\r\n '7': 'E7F6E1',\r\n '8': 'E6F5E0',\r\n '9': 'E5F4DF',\r\n '10': 'E1F4DB',\r\n '11': 'DFF3DA',\r\n '12': 'DFF3DA',\r\n '13': 'DEF2D9',\r\n '14': 'DAF1D5',\r\n '15': 'D9F0D4',\r\n '16': 'D8EFD3',\r\n '17': 'D7EED2',\r\n '18': 'D5EED0',\r\n '19': 'D4EDCF',\r\n '20': 'D3ECCE',\r\n '21': 'D1ECCB',\r\n '22': 'CEECC8',\r\n '23': 'CDEBC7',\r\n '24': 'CCEAC6',\r\n '25': 'CAEBC6',\r\n '26': 'C8E8C3',\r\n '27': 'C4E6C1',\r\n '28': 'C2E6C0',\r\n '29': 'BFE5C0',\r\n '30': 'BBE3BE',\r\n '31': 'B9E3BD',\r\n '32': 'B6E3BC',\r\n '33': 'B2E0BB',\r\n '34': 'B0E0BA',\r\n '35': 'ACDEB8',\r\n '36': 'AADDB6',\r\n '37': 'A6DCB5',\r\n '38': 'A3DBB8',\r\n '39': 'A1DABA',\r\n '40': '9DD8B8',\r\n '41': '9AD7B8',\r\n '42': '95D5BA',\r\n '43': '91D5BC',\r\n '44': '8ED3BE',\r\n '45': '89D0BE',\r\n '46': '87CFC1',\r\n '47': '84CFC2',\r\n '48': '80CEC0',\r\n '49': '7DCDC2',\r\n '50': '79CAC3',\r\n '51': '76C9C5',\r\n '52': '71C7C6',\r\n '53': '6EC6C8',\r\n '54': '69C2C8',\r\n '55': '66C0C9',\r\n '56': '65BFCA',\r\n '57': '5FBCCB',\r\n '58': '5EBBCD',\r\n '59': '58B8CE',\r\n '60': '55B7D0',\r\n '61': '51B4D1',\r\n '62': '4EB2D2',\r\n '63': '4BAFCF',\r\n '64': '49ADCF',\r\n '65': '46AACE',\r\n '66': '43A6CC',\r\n '67': '40A3CA',\r\n '68': '3DA0C9',\r\n '69': '3B9EC8',\r\n '70': '3999C4',\r\n '71': '3697C4',\r\n '72': '3494C4',\r\n '73': '3191C3',\r\n '74': '2E8EC0',\r\n '75': '2B8BBE',\r\n '76': '2988BE',\r\n '77': '2584BA',\r\n '78': '2182B8',\r\n '79': '1F80B5',\r\n '80': '1D7DB7',\r\n '81': '1B7BB5',\r\n '82': '1777B3',\r\n '83': '1473B3',\r\n '84': '1271B1',\r\n '85': '0F6EAE',\r\n '86': '0D6CAC',\r\n '87': '0A69AB',\r\n '88': '0867AB',\r\n '89': '0764A8',\r\n '90': '0760A3',\r\n '91': '0A5D9F',\r\n '92': '095A9C',\r\n '93': '07569A',\r\n '94': '095497',\r\n '95': '095092',\r\n '96': '084D8E',\r\n '97': '08498D',\r\n '98': '0A4788',\r\n '99': '0A4386',\r\n '100': '0A4386',\r\n};\r\n","import React from 'react';\r\nimport Navbar from './partials/Navbar';\r\nimport About from './partials/About';\r\nimport Banner from './partials/Banner';\r\nimport BulletPoints from './partials/BulletPoints';\r\nimport Contact from './partials/Contact';\r\nimport ContactForm from './partials/ContactForm';\r\nimport DEM from './partials/DEM';\r\nimport FloodExtent from './partials/FloodExtent';\r\nimport FloodFrequency from './partials/FloodFrequency';\r\nimport Intro from './partials/Intro';\r\nimport ProductOverview from './partials/ProductOverview';\r\nimport Testimonial from './partials/Testimonial';\r\nimport UseCases from './partials/UseCases';\r\nimport Visit from './partials/Visit';\r\n\r\nimport formatISO from 'date-fns/formatISO';\r\nimport * as Sentry from '@sentry/browser';\r\nimport { sendMail } from 'data/utils';\r\nimport { useWindowDimensions } from 'data/utils';\r\n\r\nconst LandingPage = () => {\r\n const [loading, setLoading] = React.useState(false);\r\n const [contactConfirmed, setConfirmed] = React.useState();\r\n const { width } = useWindowDimensions();\r\n const padding = width > 600 ? '12.5vh 0' : '20vh 0';\r\n\r\n const handleSendMail = async details => {\r\n try {\r\n setLoading(true);\r\n const response = await sendMail({\r\n body: {\r\n ...details,\r\n application: 'floodmetrics',\r\n request_date: formatISO(new Date(Date.now())),\r\n },\r\n });\r\n if (!response) throw Error(`Request rejected`);\r\n setLoading(false);\r\n setConfirmed(true);\r\n } catch (error) {\r\n setLoading(false);\r\n setConfirmed(false);\r\n Sentry.captureMessage(error);\r\n console.error(error);\r\n }\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 \r\n \r\n \r\n\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LandingPage;\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\n\r\nconst LandingPage = () => {\r\n return (\r\n \r\n \r\n This site is not optimized for Internet Explorer.\r\n \r\n \r\n For the best experience, use Chrome, Firefox or Edge.\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LandingPage;\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 { createMuiTheme } from '@material-ui/core';\r\n\r\nconst DHITheme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0B4566', // DHI Primary color\r\n },\r\n secondary: {\r\n main: '#00A4EC', // Automatically generated secondary color\r\n '&:hover': '#0076C8',\r\n },\r\n medium: {\r\n grey: {\r\n light: {\r\n color: '#F2F5F7',\r\n },\r\n dark: '#557A8F',\r\n normal: '#86A2B3',\r\n },\r\n },\r\n },\r\n flexLayout: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flex: 1,\r\n },\r\n typography: {\r\n h6: {\r\n color: '#0B4566',\r\n fontSize: 14,\r\n backgroundColor: '#F2F5F7',\r\n padding: '8px 16px',\r\n borderTop: '1px solid #DBE4E9',\r\n borderBottom: '1px solid #DBE4E9',\r\n },\r\n p: {\r\n fontSize: 12,\r\n },\r\n subtitle1: {\r\n fontSize: 12,\r\n fontWeight: 'bold',\r\n },\r\n body2: {\r\n fontSize: 12,\r\n },\r\n },\r\n drawerColor: '#ffffff',\r\n drawerWidth: '50vw',\r\n overrides: {\r\n MuiButton: {\r\n root: {\r\n backgroundColor: '#00A4EC',\r\n color: '#fff',\r\n fontSize: 12,\r\n textTransform: 'initial',\r\n padding: '8px 16px',\r\n '&:disabled': {\r\n backgroundColor: '#97DBF9',\r\n color: '#fff',\r\n },\r\n '&:hover': {\r\n backgroundColor: '#0076C8',\r\n },\r\n },\r\n containedSecondary: {\r\n backgroundColor: '#00A4EC',\r\n color: '#fff',\r\n '&:disabled': {\r\n backgroundColor: 'rgb(242, 245, 247)',\r\n color: 'rgba(207,219,226)',\r\n },\r\n },\r\n },\r\n MuiCardContent: {\r\n root: {\r\n padding: 0,\r\n '&:last-child': {\r\n paddingBottom: 0,\r\n },\r\n },\r\n },\r\n MuiCheckbox: {\r\n root: {\r\n padding: '0px',\r\n MuiSvgIcon: {\r\n root: {\r\n width: '12px',\r\n },\r\n },\r\n },\r\n },\r\n MuiAccordion: {\r\n root: {\r\n '&$expanded': {\r\n margin: 0,\r\n },\r\n '&:before': {\r\n backgroundColor: 'none',\r\n },\r\n },\r\n },\r\n MuiAccordionDetails: {\r\n root: {\r\n borderBottom: '1px solid #DBE4E9',\r\n padding: 16,\r\n },\r\n },\r\n MuiAccordionSummary: {\r\n content: {\r\n margin: '8px 0px ',\r\n '&$expanded': {\r\n margin: '8px 0px ',\r\n },\r\n },\r\n root: {\r\n backgroundColor: '#F8F8F8',\r\n borderBottom: '1px solid #DBE4E9',\r\n padding: '0px 16px',\r\n minHeight: 0,\r\n '&$expanded': {\r\n minHeight: 0,\r\n backgroundColor: '#F2F5F7',\r\n },\r\n '&:hover': {\r\n backgroundColor: '#F2F5F7',\r\n },\r\n },\r\n },\r\n MuiAutocomplete: {\r\n inputRoot: {\r\n '&&& input:first-child': {\r\n padding: '2.5px 0',\r\n },\r\n },\r\n },\r\n MuiFormControlLabel: {\r\n root: {\r\n width: '50%',\r\n marginLeft: '0px',\r\n marginRight: '0px',\r\n 'Mui-disabled': {\r\n '-webkit-text-fill-color': 'rgba(207,219,226)',\r\n opacity: 1,\r\n },\r\n },\r\n label: {\r\n fontSize: '12px',\r\n paddingLeft: '.2rem',\r\n },\r\n },\r\n MuiIconButton: {\r\n root: {\r\n width: 36,\r\n height: 36,\r\n padding: 0,\r\n borderRadius: 0,\r\n },\r\n },\r\n MuiInputBase: {\r\n root: {\r\n fontSize: 12,\r\n color: '#0B4566',\r\n padding: '6px 0px',\r\n },\r\n input: {\r\n padding: 0,\r\n color: '#0B4566',\r\n },\r\n },\r\n MuiInputLabel: {\r\n root: {\r\n color: '#0B4566',\r\n fontSize: 12,\r\n padding: 2,\r\n },\r\n },\r\n\r\n MuiPaper: {\r\n root: {\r\n color: '#0B4566',\r\n },\r\n rounded: {\r\n borderRadius: 0,\r\n },\r\n elevation1: {\r\n boxShadow: 'none',\r\n },\r\n },\r\n MuiPickersBasePicker: {\r\n pickerView: { minHeight: 0 },\r\n },\r\n MuiPickersCalendar: {\r\n transitionContainer: { minHeight: 170 },\r\n },\r\n MuiPickersDay: {\r\n day: {\r\n height: 32,\r\n padding: '8px 0px',\r\n },\r\n daySelected: {\r\n borderRadius: 4,\r\n },\r\n },\r\n MuiToolbar: {\r\n regular: {\r\n minHeight: 56,\r\n '@media (min-width: 600px)': {\r\n minHeight: 56,\r\n },\r\n },\r\n },\r\n MuiTooltip: {\r\n tooltip: {\r\n color: '#fff',\r\n backgroundColor: '#0B4566',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default DHITheme;\r\n","export const directionRow = {\r\n display: 'flex',\r\n flexDirection: 'row'\r\n};\r\n\r\nexport const directionColumn = {\r\n display: 'flex',\r\n flexDirection: 'column'\r\n};\r\n\r\nexport const justifySpaceBetween = {\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n};\r\n\r\nexport const justifySpaceAround = {\r\n display: 'flex',\r\n justifyContent: 'space-around'\r\n};\r\n\r\nexport const justifyEnd = {\r\n display: 'flex',\r\n justifyContent: 'flex-end'\r\n};\r\n\r\nexport const justifyCenter = {\r\n display: 'flex',\r\n justifyContent: 'center'\r\n};\r\n\r\nexport const alignCenter = {\r\n display: 'flex',\r\n alignItems: 'center'\r\n};\r\n","import React from 'react';\r\nimport { compose } from 'recompose';\r\nimport {\r\n CircularProgress,\r\n LinearProgress,\r\n withStyles,\r\n} from '@material-ui/core';\r\nimport styles from './styles';\r\n\r\nconst enhancer = compose(withStyles(styles, { withTheme: true }));\r\n\r\nconst Loader = ({ classes, isLoading, isMajorLoading }) => {\r\n if (!isLoading) return null;\r\n return (\r\n <>\r\n {isMajorLoading ? (\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 enhancer(Loader);\r\n","import { directionColumn, justifyCenter, alignCenter } from 'styles/mixins';\r\n\r\nexport default () => ({\r\n minorLoading: {\r\n position: 'fixed',\r\n width: '100%',\r\n top: 0,\r\n height: 4,\r\n zIndex: '1000',\r\n backgroundColor: 'white',\r\n },\r\n majorLoading: {\r\n position: 'fixed',\r\n width: '100%',\r\n height: '100vh',\r\n zIndex: '1000',\r\n ...directionColumn,\r\n ...justifyCenter,\r\n ...alignCenter,\r\n backgroundColor: 'rgba(13,57,88,0.9)',\r\n color: 'white',\r\n },\r\n});\r\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport DHITheme from 'styles/theme';\r\n\r\nconst { primary } = DHITheme.palette;\r\n\r\nexport const checkboxStyle = makeStyles({\r\n root: {\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n icon: {\r\n borderRadius: 1,\r\n width: 12,\r\n height: 12,\r\n border: '1px solid #86A2B3',\r\n boxSizing: 'border-box',\r\n backgroundColor: '#ffffff',\r\n 'input:hover ~ &': {\r\n backgroundColor: '#ebf1f5',\r\n },\r\n 'input:disabled ~ &': {\r\n boxShadow: 'none',\r\n background: 'rgba(206,217,224,.5)',\r\n },\r\n },\r\n checkedIcon: {\r\n borderRadius: 1,\r\n backgroundColor: '#61C051',\r\n backgroundImage:\r\n 'linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))',\r\n '&:before': {\r\n display: 'block',\r\n width: 12,\r\n height: 12,\r\n boxSizing: 'border-box',\r\n border: '1px solid #86A2B3',\r\n backgroundImage:\r\n \"url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath\" +\r\n \" fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 \" +\r\n \"1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z' fill='%23fff'/%3E%3C/svg%3E\\\")\",\r\n content: '\"\"',\r\n },\r\n 'input:hover ~ &': {\r\n backgroundColor: '#61C051',\r\n },\r\n 'input:disabled ~ &': {\r\n boxShadow: 'none',\r\n background: 'rgba(207,219,226)',\r\n },\r\n },\r\n});\r\n\r\nexport const iconStyle = makeStyles({\r\n button: {\r\n width: 36,\r\n padding: 0,\r\n borderRadius: 0,\r\n },\r\n icon: {\r\n backgroundColor: '#fff',\r\n height: 36,\r\n '&:hover': {\r\n backgroundColor: '#F8F8F8',\r\n },\r\n },\r\n activeIcon: {\r\n backgroundColor: '#0b4566',\r\n '& path': {\r\n fill: '#fff',\r\n },\r\n '&:hover': {\r\n backgroundColor: '#0b4566',\r\n },\r\n },\r\n disabledIcon: {\r\n '& path': {\r\n fill: '#cfdbe2',\r\n },\r\n },\r\n});\r\n\r\nexport const productStyle = makeStyles({\r\n addDays: {\r\n fontSize: 10,\r\n textAlign: 'right',\r\n marginTop: 8,\r\n pointer: 'cursor',\r\n color: 'rgb(134, 162, 179)',\r\n '&:hover': {\r\n color: '#00A4EC',\r\n },\r\n },\r\n banner: {\r\n padding: ' 8px 16px',\r\n cursor: 'pointer',\r\n '& p': {\r\n fontSize: 12,\r\n },\r\n '&:hover': {\r\n backgroundColor: ' #F2F5F7',\r\n },\r\n },\r\n clearDays: {\r\n fontSize: 10,\r\n marginTop: 16,\r\n color: 'rgb(134, 162, 179)',\r\n pointer: 'cursor',\r\n '&:hover': {\r\n color: '#FD3F75',\r\n },\r\n },\r\n container: {\r\n borderBottom: '1px solid #DBE4E9',\r\n },\r\n disclaimer: {\r\n fontSize: 10,\r\n marginTop: 16,\r\n textAlign: 'right',\r\n color: 'rgb(134, 162, 179)',\r\n },\r\n popupLink: {\r\n color: `${primary.main}`,\r\n cursor: 'pointer',\r\n fontWeight: 700,\r\n '&:hover': {\r\n textDecoration: 'underline',\r\n },\r\n },\r\n readMore: {\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n textDecoration: 'underline',\r\n },\r\n },\r\n regionContainer: {\r\n backgroundColor: '#F2F5F7',\r\n borderTop: '1px solid #DBE4E9',\r\n borderBottom: '1px solid #DBE4E9',\r\n padding: '8px 16px',\r\n },\r\n regionTitleMain: {\r\n fontSize: 14,\r\n fontWeight: 500,\r\n },\r\n regionTitleArea: {\r\n fontSize: 10,\r\n margin: 0,\r\n },\r\n svg: {\r\n paddingLeft: 8,\r\n width: 24,\r\n height: 24,\r\n },\r\n totalPrice: {\r\n backgroundColor: '#F2F5F7',\r\n borderBottom: '1px solid #DBE4E9',\r\n },\r\n totalPriceTitle: {\r\n fontSize: 16,\r\n fontWeight: 500,\r\n },\r\n});\r\n\r\nexport const titleStyle = makeStyles({\r\n container: {\r\n padding: 16,\r\n },\r\n titleMain: {\r\n color: '#0b4566',\r\n fontFamily: 'Roboto',\r\n fontSize: 20,\r\n fontWeight: 500,\r\n padding: 0,\r\n margin: 0,\r\n },\r\n subTitle: {\r\n color: 'rgb(134, 162, 179)',\r\n fontSize: 12,\r\n padding: 0,\r\n margin: 0,\r\n },\r\n});\r\n\r\nexport const productIconStyle = makeStyles({\r\n button: {\r\n width: '33.33%',\r\n borderRight: '1px solid #dbe4e9',\r\n display: 'inline-block',\r\n boxSizing: 'border-box',\r\n padding: '10px 0px 4px',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#F2F5F7',\r\n },\r\n '& svg ': {\r\n stroke: '#0b4566',\r\n },\r\n },\r\n buttonSelected: {\r\n backgroundColor: '#0b4566',\r\n '&:hover': {\r\n backgroundColor: '#0b4566',\r\n },\r\n '& p': {\r\n color: '#fff',\r\n },\r\n '& svg ': {\r\n stroke: '#fff',\r\n },\r\n },\r\n title: {\r\n fontSize: 10,\r\n textAlign: 'center',\r\n color: '#86a2b3',\r\n },\r\n});\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport { ReactComponent as MapViewIcon } from '@mike/mike-shared-frontend/media/icons/MapView.svg';\r\nimport { IconButton, Grid, Tooltip } from '@material-ui/core';\r\nimport { iconStyle } from 'styles/global';\r\n\r\nimport 'styles/searchbar.css';\r\n\r\nconst BaseLayerControl = ({ satelliteBase, setSatelliteBase }) => {\r\n const classes = iconStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n setSatelliteBase(!satelliteBase)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default BaseLayerControl;\r\n","import React from 'react';\r\nimport { ReactComponent as ExpandIcon } from '@mike/mike-shared-frontend/media/icons/Expand.svg';\r\nimport { IconButton, Grid, Tooltip } from '@material-ui/core';\r\nimport { iconStyle } from 'styles/global';\r\n\r\nconst ResetViewControl = ({ resetView }) => {\r\n const classes = iconStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n resetView()}>\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ResetViewControl;\r\n","import React from 'react';\r\nimport Geocoder from 'react-mapbox-gl-geocoder';\r\nimport { ReactComponent as CloseIcon } from '@mike/mike-shared-frontend/media/icons/CloseS.svg';\r\nimport { ReactComponent as SearchIcon } from '@mike/mike-shared-frontend/media/icons/Search.svg';\r\nimport { IconButton, Grid } from '@material-ui/core';\r\nimport { iconStyle } from 'styles/global';\r\n\r\nimport 'styles/searchbar.css';\r\n\r\nconst SearchControl = ({ setBounds, accessToken }) => {\r\n const [searchbar, toggleSearchbar] = React.useState(true);\r\n const classes = iconStyle();\r\n\r\n const onSelected = item => {\r\n if (item.bbox)\r\n setBounds([\r\n [item.bbox[0], item.bbox[1]],\r\n [item.bbox[2], item.bbox[3]],\r\n ]);\r\n else\r\n setBounds([\r\n [item.center[0] - 0.0001, item.center[1] - 0.0001],\r\n [item.center[0] + 0.0001, item.center[1] + 0.0001],\r\n ]);\r\n toggleSearchbar(false);\r\n };\r\n\r\n return (\r\n \r\n \r\n toggleSearchbar(!searchbar)}\r\n >\r\n \r\n \r\n \r\n\r\n {searchbar && (\r\n <>\r\n \r\n onSelected(item)}\r\n hideOnSelect={true}\r\n queryParams={{ country: '' }}\r\n clearOnBlur={true}\r\n initialInputValue={'Search by location'}\r\n />\r\n \r\n \r\n toggleSearchbar(false)}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default SearchControl;\r\n","import React from 'react';\r\nimport { ReactComponent as MinusIcon } from '@mike/mike-shared-frontend/media/icons/Minus.svg';\r\nimport { ReactComponent as PlusIcon } from '@mike/mike-shared-frontend/media/icons/Plus.svg';\r\nimport { IconButton, Grid, Tooltip } from '@material-ui/core';\r\nimport { iconStyle } from 'styles/global';\r\n\r\nimport 'styles/searchbar.css';\r\n\r\nconst ZoomControl = ({ setZoom, zoom }) => {\r\n const classes = iconStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n setZoom([zoom[0] + 1])}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n setZoom([zoom[0] - 1])}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ZoomControl;\r\n","import React from 'react';\r\nimport { ReactComponent as ZoomToAreaIcon } from '@mike/mike-shared-frontend/media/icons/ZoomToArea.svg';\r\nimport { IconButton, Grid, Tooltip } from '@material-ui/core';\r\nimport { iconStyle } from 'styles/global';\r\nimport { HomeContext } from 'Home';\r\n\r\nconst ZoomToAreaControl = () => {\r\n const {\r\n actions: { drawMode },\r\n } = React.useContext(HomeContext);\r\n\r\n const classes = iconStyle();\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\n\r\nexport default ZoomToAreaControl;\r\n","import React from 'react';\r\nimport BaseLayerControl from './partials/BaseLayerControl';\r\nimport ResetViewControl from './partials/ResetViewControl';\r\nimport SearchControl from './partials/SearchControl';\r\nimport ZoomControl from './partials/ZoomControl';\r\nimport ZoomToAreaControl from './partials/ZoomToAreaControl';\r\nimport { Box } from '@material-ui/core';\r\n\r\nconst DHIMapControl = ({\r\n accessToken,\r\n resetView,\r\n satelliteBase,\r\n setBounds,\r\n setSatelliteBase,\r\n setZoom,\r\n zoom,\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\n );\r\n};\r\n\r\nexport default DHIMapControl;\r\n","import React from 'react';\r\nimport Loader from 'components/Loader';\r\nimport ReactMapboxGl from 'react-mapbox-gl';\r\nimport DHIMapControl from './DHIMapControl';\r\nimport { HomeContext } from 'Home';\r\n\r\nimport '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';\r\n\r\nconst { token: accessToken, styles } = require('config.json');\r\nconst DEFAULT_BOUNDS = [\r\n [147, 76],\r\n [-120, -42],\r\n];\r\n\r\nconst Mapbox = ReactMapboxGl({\r\n accessToken,\r\n minZoom: 2,\r\n maxZoom: 15,\r\n});\r\n\r\nconst Map = ({ mobile, onStyleLoad, zoomBounds }) => {\r\n const {\r\n state: { loading },\r\n } = React.useContext(HomeContext);\r\n\r\n const [bounds, setBounds] = React.useState(DEFAULT_BOUNDS);\r\n const [satelliteBase, setSatelliteBase] = React.useState(false);\r\n const [zoom, setZoom] = React.useState([8]);\r\n\r\n React.useEffect(() => {\r\n zoomBounds && setBounds(zoomBounds);\r\n }, [zoomBounds]);\r\n\r\n const resetView = () => setBounds([...DEFAULT_BOUNDS]);\r\n\r\n // const [loading, setLoading] = React.useState(true);\r\n\r\n return (\r\n <>\r\n \r\n setZoom([map.getZoom()])}\r\n style={satelliteBase ? styles.satellite : styles.light}\r\n zoom={zoom}\r\n >\r\n {mobile !== true && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Map;\r\n","import React from 'react';\r\nimport { Box, Button, Typography, makeStyles } from '@material-ui/core';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst buttonStyle = makeStyles({\r\n buttonSecondary: {\r\n backgroundColor: '#fff',\r\n border: '2px solid #00A4EC ',\r\n boxSizing: 'border-box',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 164, 236, 0.08)',\r\n },\r\n },\r\n link: {\r\n color: '#00A4EC',\r\n fontWeight: 700,\r\n textDecoration: 'none',\r\n },\r\n});\r\n\r\nexport default function DemonstrationData() {\r\n const classes = buttonStyle();\r\n\r\n return (\r\n \r\n Demonstration data\r\n \r\n \r\n Explore examples of the 3 data products\r\n \r\n \r\n Click the button below to access an interactive data viewer to explore\r\n examples of flood extent, surface water frequency and digital\r\n elevation data.\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport iconDEM from 'assets/images/icon_dem.png';\r\nimport iconExtent from 'assets/images/icon_extent.png';\r\nimport iconFrequency from 'assets/images/icon_frequency.png';\r\n\r\nimport imageDEM from 'assets/images/product_dem.jpg';\r\nimport imageExtent from 'assets/images/product_flood_extent.png';\r\nimport imageFrequency from 'assets/images/product_flood_frequency.jpg';\r\n\r\nconst defaultProducts = [\r\n {\r\n id: 'floodExtent',\r\n icon: iconExtent,\r\n title: 'Flood extent',\r\n image: imageExtent,\r\n link: 'floodextent',\r\n media: (\r\n {'floodextent'}\r\n ),\r\n active: true,\r\n svg: (\r\n \r\n \r\n \r\n ),\r\n description: (\r\n <>\r\n \r\n The latest machine learning technology and advanced image analysis is\r\n used to accurately map the spatial extent of flooding’s on a given\r\n day.\r\n \r\n \r\n By fusing both optical and radar satellite data, we map flooded areas\r\n with high precision, and regardless of weather conditions, cloud cover\r\n and time of day.\r\n \r\n \r\n Our optimized and automated processing chains ensures fast,\r\n consistent, reliable and timely delivery of flood extent products. The\r\n product is available at any location, globally, and can be delivered\r\n in near-real time for ongoing flooding events or any historical\r\n flooding in the last 25 years (depending on data availability).\r\n \r\n \r\n ),\r\n },\r\n {\r\n id: 'DEM4Floods',\r\n icon: iconDEM,\r\n title: 'Digital Elevation Model',\r\n active: false,\r\n image: imageDEM,\r\n link: 'dem',\r\n media: (\r\n \r\n ),\r\n svg: (\r\n \r\n \r\n \r\n \r\n ),\r\n description: (\r\n <>\r\n \r\n Up to date and tailormade Digital Elevation Models (DEM), delivered in\r\n any ready-to-use GIS format, can be ordered through Flood Metrics.\r\n \r\n \r\n The products are delivered by leading global service providers and\r\n created from stereoscopic satellite imagery, which is a highly\r\n cost-efficient alternative to traditional land and aerial based\r\n surveying approaches.\r\n \r\n \r\n The product can be delivered as both a digital surface model (DSM)\r\n which includes surface features such as vegetation and man-made\r\n structures, as well as a bare-earth representation without above\r\n ground objects (DTM) – both options ranging from 1 m to 12 m in\r\n spatial resolution.\r\n \r\n \r\n ),\r\n },\r\n {\r\n id: 'FloodFrequency',\r\n icon: iconFrequency,\r\n title: 'Surface Water Frequency',\r\n image: imageFrequency,\r\n link: 'floodfrequency',\r\n media: (\r\n \r\n ),\r\n active: false,\r\n svg: (\r\n \r\n \r\n \r\n ),\r\n description: (\r\n <>\r\n \r\n State-of-the-art machine learning algorithms and optimised processing\r\n workflows allows for seamless analysis of long time-series of water\r\n extent data.\r\n \r\n \r\n This is used to generate our surface water frequency product, which\r\n provides information about the frequency of water observations, at any\r\n given area of interest.\r\n \r\n \r\n The product is available at any location, globally, and is tailored to\r\n specific client needs to provide information about occurrence rates\r\n for specific months, seasons or years.\r\n \r\n \r\n ),\r\n },\r\n // {\r\n // id: 'eventImagery',\r\n // icon: 'imagery',\r\n // title: 'Event imagery',\r\n // active: false,\r\n // imgPath: 'event_imagery.jpg',\r\n // svg: (\r\n // \r\n // \r\n // \r\n // ),\r\n // description: (\r\n // <>\r\n // \r\n // Satellites pass over regularly and frequently. But did you know that\r\n // you can order a satellite to be at your location at your desired time?\r\n // \r\n // \r\n // In case of future flooding events, you can preorder a satellite to\r\n // your location and observe and assess your situation from the sky.\r\n // \r\n // \r\n // This will provide valuable information for instructing your safety\r\n // teams and water management operations\r\n // \r\n // \"\"\r\n // \r\n // This data is not available through this web viewer, but feel free to\r\n // contact us and we will take care of the rest.\r\n // \r\n // \r\n // ),\r\n // },\r\n];\r\n\r\nexport { defaultProducts };\r\n","import React from 'react';\r\nimport DemostrationData from './partials/DemonstrationData';\r\nimport { Box, Button, Typography, makeStyles } from '@material-ui/core';\r\nimport { HomeContext } from 'Home';\r\nimport { productStyle } from 'styles/global';\r\nimport { defaultProducts } from 'components/Sidebar/Info/defaultProducts';\r\n// import FloodExtent from 'components/Sidebar/ProductList/FloodExtent';\r\n\r\nconst buttonStyle = makeStyles({\r\n buttonMain: {\r\n width: '100%',\r\n backgroundColor: '#00A4EC',\r\n '&:hover': {\r\n backgroundColor: '#008BEC',\r\n },\r\n },\r\n link: {\r\n color: '#00A4EC',\r\n fontWeight: 700,\r\n textDecoration: 'none',\r\n },\r\n});\r\n\r\nconst dialogueLinks = [\r\n { title: 'Flood extent', product: defaultProducts[0] },\r\n { title: 'Digital Elevation Models', product: defaultProducts[1] },\r\n { title: 'Surface Water Frequency', product: defaultProducts[2] },\r\n];\r\n\r\nconst detailLinks = [\r\n {\r\n title: '1. Define your area of interest',\r\n description: (\r\n \r\n Click the ‘Start Drawing’ button below to draw a polygon outlining the\r\n boundaries of your area of interest.'\r\n \r\n ),\r\n },\r\n {\r\n title: '2. Select your products',\r\n description: (\r\n \r\n Select your products and define your specific product requirements to\r\n retrieve an instant price estimate.\r\n \r\n ),\r\n },\r\n {\r\n title: '3. Get detailed quote',\r\n description: (\r\n \r\n Click the ‘Get detailed quote’ button to send a request for more\r\n information on the exact costs and availability of your selected\r\n products.\r\n \r\n ),\r\n },\r\n];\r\n\r\n// const tutorial = {\r\n// title: 'Tutorial',\r\n// description: null,\r\n// media: (\r\n//
\r\n// \r\n//
\r\n// ),\r\n// };\r\n\r\nexport default function Introduction() {\r\n const {\r\n actions: { drawMode, setDialogue },\r\n state: { loading },\r\n } = React.useContext(HomeContext);\r\n\r\n const classes = buttonStyle();\r\n const styles = productStyle();\r\n\r\n return (\r\n \r\n Introduction\r\n \r\n \r\n Welcome to Flood Metrics by DHI\r\n \r\n \r\n Flood Metrics is your all-in-one interface for DHI’s state-of-the-art\r\n satellite-based flood monitoring products, allowing you to search,\r\n request and purchase our novel satellite-based flood products and\r\n Digital Elevation Models (DEM) from a single source.\r\n \r\n \r\n Flood Metrics provides instant price range estimates for 3 different\r\n products (\r\n {dialogueLinks.map(({ title, product }, i) => (\r\n \r\n setDialogue(product)}\r\n className={styles.popupLink}\r\n >\r\n {title}\r\n \r\n {i === 0 ? ', ' : i === 1 ? ' and ' : ''}\r\n \r\n ))}\r\n ), allowing you to quickly assess costs for your specific area of\r\n interest. The prices are individually tailored and customized to your\r\n specific product requirements in terms of spatial resolution, date\r\n range(s) and other relevant parameters.\r\n \r\n \r\n It’s as easy as 1-2-3:\r\n \r\n\r\n {detailLinks &&\r\n detailLinks.map(({ title }, i) => (\r\n setDialogue(detailLinks[i])}\r\n className={styles.popupLink}\r\n >\r\n {title}\r\n \r\n ))}\r\n\r\n {/* \r\n You can also watch this{' '}\r\n setDialogue(tutorial)}\r\n className={styles.readMore}\r\n >\r\n tutorial video\r\n {' '}\r\n for a quick introduction to the process and steps outlined above.\r\n */}\r\n \r\n \r\n Start Drawing\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Box, Button, Typography } from '@material-ui/core';\r\nimport { AppContext } from 'App';\r\n\r\nconst GetQuoteButton = () => {\r\n const {\r\n actions: { setShowQuote },\r\n state: { sum },\r\n } = React.useContext(AppContext);\r\n\r\n return (\r\n \r\n setShowQuote(true)}\r\n >\r\n Get detailed quote and our advice\r\n \r\n \r\n \r\n NB. by clicking the button above you will be directed to a confirmation\r\n page where you can provide your contact details and see the details of\r\n your request. When ready, click ‘Submit request’ to submit your request\r\n to our experts. We will get back to you within 24 hours with further\r\n information about prices and availability of your requested products.\r\n \r\n \r\n );\r\n};\r\n\r\nexport default GetQuoteButton;\r\n","import React from 'react';\r\n\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { ReactComponent as CloseXSIcon } from '@mike/mike-shared-frontend/media/icons/CloseXS.svg';\r\nimport { productStyle } from 'styles/global';\r\n\r\nimport { AppContext } from 'App';\r\nimport { HomeContext } from 'Home';\r\n\r\nconst ProductListHeader = () => {\r\n const {\r\n state: { area },\r\n } = React.useContext(AppContext);\r\n\r\n const {\r\n actions: { drawMode },\r\n } = React.useContext(HomeContext);\r\n\r\n const classes = productStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n Product selection\r\n \r\n \r\n \r\n \r\n \r\n \r\n {area && area.sqm && parseInt(area.sqm).toLocaleString() + ' km²'}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProductListHeader;\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { HomeContext } from 'Home';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport { productStyle } from 'styles/global';\r\n\r\nconst volumeDisclaimer = {\r\n title: 'Volume discount applies, contact us for pricing',\r\n description: (\r\n \r\n The product selected for your area of interest qualifies for a volume\r\n discount. Please proceed with your quote request to receive a detailed\r\n quote and our expert advice on preferred product options for your selected\r\n area. We will respond to your request within 24 hours\r\n \r\n ),\r\n};\r\n\r\nconst volumeDisclaimerStyle = makeStyles({\r\n link: {\r\n textAlign: 'right',\r\n fontSize: 14,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n textDecoration: 'underline',\r\n },\r\n },\r\n});\r\n\r\nconst VolumeDisclaimerTotalPrice = () => {\r\n const {\r\n actions: { setDialogue },\r\n } = React.useContext(HomeContext);\r\n\r\n const classes = volumeDisclaimerStyle();\r\n const style = productStyle();\r\n\r\n const handleClick = e => {\r\n e.stopPropagation();\r\n setDialogue(volumeDisclaimer);\r\n };\r\n\r\n return (\r\n \r\n Volume discount applies\r\n \r\n );\r\n};\r\n\r\nexport default VolumeDisclaimerTotalPrice;\r\n","import React from 'react';\r\nimport VolumeDisclaimerTotalPrice from '../VolumeDisclaimers/VolumeDisclaimerTotalPrice';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { productStyle } from 'styles/global';\r\nimport { AppContext } from 'App';\r\n\r\nconst TotalPrice = () => {\r\n const {\r\n state: { sum },\r\n } = React.useContext(AppContext);\r\n\r\n const classes = productStyle();\r\n const hardCodedPriceCap = 75000;\r\n\r\n const showSum = () => {\r\n if (sum) {\r\n if (sum[0] === null || sum[0] === 0) return '€0';\r\n else if (sum[0] >= hardCodedPriceCap)\r\n return `€ ${sum[1].toLocaleString()} +`;\r\n else if (sum[0] === sum[1]) return '€' + sum[1].toLocaleString();\r\n else\r\n return '€' + sum[0].toLocaleString() + ' - €' + sum[1].toLocaleString();\r\n } else return '€0';\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n Total estimated price\r\n \r\n \r\n \r\n {sum[0] >= hardCodedPriceCap ? (\r\n \r\n ) : (\r\n \r\n {showSum()}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TotalPrice;\r\n","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { HomeContext } from 'Home';\r\nimport { makeStyles } from '@material-ui/core';\r\n\r\nconst volumeDisclaimer = {\r\n title: 'Volume discount applies, contact us for pricing',\r\n description: (\r\n \r\n The product selected for your area of interest qualifies for a volume\r\n discount. Please proceed with your quote request to receive a detailed\r\n quote and our expert advice on preferred product options for your selected\r\n area. We will respond to your request within 24 hours\r\n \r\n ),\r\n};\r\n\r\nconst volumeDisclaimerStyle = makeStyles({\r\n link: {\r\n textAlign: 'right',\r\n fontSize: 12,\r\n '&:hover': {\r\n textDecoration: 'underline',\r\n },\r\n },\r\n});\r\n\r\nconst VolumeDisclaimerTitle = () => {\r\n const {\r\n actions: { setDialogue },\r\n } = React.useContext(HomeContext);\r\n\r\n const classes = volumeDisclaimerStyle();\r\n\r\n const handleClick = e => {\r\n e.stopPropagation();\r\n setDialogue(volumeDisclaimer);\r\n };\r\n\r\n return (\r\n \r\n Volume discount applies\r\n \r\n );\r\n};\r\n\r\nexport default VolumeDisclaimerTitle;\r\n","import React from 'react';\r\n\r\nimport GetQuoteButton from './GetQuoteButton';\r\nimport ProductListHeader from './ProductListHeader';\r\nimport TotalPrice from './TotalPrice';\r\nimport VolumeDisclaimerAccordion from './VolumeDisclaimers/VolumeDisclaimerAccordion';\r\n\r\nimport Box from '@material-ui/core/Box';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { AppContext } from 'App';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nconst priceStyle = {\r\n textAlign: 'right',\r\n fontSize: 12,\r\n};\r\n\r\nconst ProductList = () => {\r\n const {\r\n state: { productExtent, productDEM, productFrequency },\r\n } = React.useContext(AppContext);\r\n\r\n const [expanded, setExpanded] = React.useState(false);\r\n const products = [productExtent, productDEM, productFrequency];\r\n\r\n const handleChange = panel => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const showPrice = price => {\r\n if (price) {\r\n if (price[0] === null || price[0] === 0) return '€0';\r\n else if (price[0] === price[1]) return `€${price[1].toLocaleString()}`;\r\n else\r\n return `€${price[0].toLocaleString()} - €${price[1].toLocaleString()}`;\r\n } else return '€0';\r\n };\r\n\r\n return (\r\n \r\n \r\n\r\n {products &&\r\n products.map(({ component: Component, title, price, priceCap }, i) => (\r\n \r\n \r\n }\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n {price[0] >= priceCap || price[1] >= priceCap ? (\r\n \r\n ) : (\r\n \r\n {showPrice(price)}\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\n\r\nexport default ProductList;\r\n","import React from 'react';\r\nimport { Paper, Typography } from '@material-ui/core';\r\nimport { AppContext } from 'App';\r\n\r\nexport default function AreaDetails() {\r\n const {\r\n state: { area, sum },\r\n } = React.useContext(AppContext);\r\n\r\n const hardcodedPriceCap = 75000;\r\n\r\n return (\r\n <>\r\n {sum && sum[1] && (\r\n <>\r\n Total price range:\r\n \r\n {sum[0] >= hardcodedPriceCap\r\n ? 'Price: Volume discount applies'\r\n : `Price range: €${sum[0].toLocaleString()} - €${sum[1].toLocaleString()}`}\r\n \r\n \r\n )}\r\n {area && area.sqm && (\r\n \r\n \r\n Area in km²:\r\n \r\n \r\n {parseInt(area.sqm).toLocaleString() + ' km²'}\r\n \r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Button, Paper, TextField, Typography } from '@material-ui/core';\r\nimport { productStyle } from 'styles/global';\r\nimport { HomeContext } from 'Home';\r\n\r\nconst defaultDetails = {\r\n name: null,\r\n company: null,\r\n email: null,\r\n message: null,\r\n};\r\n\r\nconst ContactDetails = () => {\r\n const {\r\n actions: { handleSendMail },\r\n } = React.useContext(HomeContext);\r\n\r\n const [details, setDetails] = React.useState({ ...defaultDetails });\r\n const classes = productStyle();\r\n\r\n const updateDetails = e => {\r\n let obj = details;\r\n obj[e.target.id] = e.target.value;\r\n setDetails({ ...obj });\r\n };\r\n\r\n function validateEmail(email) {\r\n const regexp = /.+@.+\\..+/;\r\n return regexp.test(email);\r\n }\r\n\r\n return (\r\n \r\n \r\n Your contact details:\r\n \r\n
\r\n updateDetails(e)}\r\n />\r\n updateDetails(e)}\r\n />\r\n updateDetails(e)}\r\n />\r\n updateDetails(e)}\r\n />\r\n \r\n \r\n {\r\n handleSendMail(details);\r\n setDetails({ ...defaultDetails });\r\n }}\r\n >\r\n Submit request\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ContactDetails;\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport { AppContext } from 'App';\r\n\r\nexport default function DemDetails() {\r\n const {\r\n state: { productDEM },\r\n } = React.useContext(AppContext);\r\n\r\n const { price, priceCap, resolutionRange } = productDEM;\r\n\r\n return (\r\n \r\n {productDEM && price && price[1] !== null && price[0] !== 0 && (\r\n <>\r\n \r\n \r\n Digital Elevation Model:\r\n \r\n\r\n \r\n {price[0] >= priceCap\r\n ? 'Price: Volume discount applies'\r\n : `Price range: €${price[0].toLocaleString()} - €${price[1].toLocaleString()}`}\r\n \r\n \r\n\r\n {resolutionRange.map(\r\n ({ res, sum }, i) =>\r\n sum.min !== null &&\r\n sum.min !== 0 && (\r\n \r\n {sum.min >= priceCap\r\n ? `${res} meter resolution = Volume discount applies`\r\n : `${res} meter resolution = €${sum.min.toLocaleString()} - €${sum.max.toLocaleString()}`}\r\n \r\n )\r\n )}\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { format } from 'date-fns';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport { AppContext } from 'App';\r\n\r\nexport default function FloodExtentDetails() {\r\n const {\r\n state: { productExtent },\r\n } = React.useContext(AppContext);\r\n\r\n const { dates, price, priceCap } = productExtent;\r\n\r\n const formattedDates = dates.map(({ date, price, resolution }) => {\r\n let str = '';\r\n if (date && date !== null) {\r\n str += `Date: ${format(date, 'dd MMM yyyy')}, `;\r\n if (resolution[0].checked) str += `${resolution[0].title}`;\r\n if (resolution[0].checked && resolution[1].checked) str += ` and `;\r\n if (resolution[1].checked) str += `${resolution[1].title}`;\r\n if (price[0] === priceCap) str += ` = Volume discount applies`;\r\n else if (price[0])\r\n str += ` = €${price[0].toLocaleString()} - €${price[1].toLocaleString()}`;\r\n }\r\n if (resolution[0].checked === false && resolution[1].checked === false)\r\n str = '';\r\n return str;\r\n });\r\n\r\n return (\r\n <>\r\n {price && price[0] !== null && price[0] !== 0 && (\r\n \r\n Flood extent:\r\n \r\n {price[0] === priceCap\r\n ? 'Price: Volume discount applies'\r\n : 'Price range: €' +\r\n price[0].toLocaleString() +\r\n ' - €' +\r\n price[1].toLocaleString()}\r\n \r\n {formattedDates &&\r\n formattedDates.map((date, i) => (\r\n \r\n {date}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport { AppContext } from 'App';\r\n\r\nexport default function FloodFrequencyDetails() {\r\n const {\r\n state: { productFrequency },\r\n } = React.useContext(AppContext);\r\n\r\n const { months, years, price, priceCap } = productFrequency;\r\n\r\n return (\r\n <>\r\n {years && years[0] && (years[0] !== 0 || years[0] !== null) && (\r\n \r\n Surface water frequency:\r\n\r\n \r\n {price && price[0] !== null && price[0] === priceCap\r\n ? 'Price: Volume discount applies'\r\n : 'Price range: €' +\r\n price[0].toLocaleString() +\r\n ' - €' +\r\n price[1].toLocaleString()}\r\n \r\n\r\n \r\n {'Years:' + years.map(year => ` ${year}`)}\r\n \r\n\r\n {months && (\r\n \r\n {'Include months: ' +\r\n Object.keys(months)\r\n .filter(key => months[key] && key)\r\n .toString()\r\n .replace(/,/g, ', ')}\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\n\r\nimport AreaDetails from './AreaDetails';\r\nimport ContactDetails from './ContactDetails';\r\nimport DemDetails from './DemDetails';\r\nimport FloodExtentDetails from './FloodExtentDetails';\r\nimport FloodFrequencyDetails from './FloodFrequencyDetails';\r\n\r\nimport { productIconStyle } from 'styles/global';\r\nimport { productStyle } from 'styles/global';\r\nimport { AppContext } from 'App';\r\n\r\nconst QuoteDetails = () => {\r\n const {\r\n actions: { setShowQuote },\r\n state: { productExtent, productDEM, productFrequency },\r\n } = React.useContext(AppContext);\r\n\r\n const classes = productStyle();\r\n const styles = productIconStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Product overview\r\n \r\n \r\n setShowQuote(false)}\r\n style={{ cursor: 'pointer', textAlign: 'right', paddingTop: 4 }}\r\n >\r\n Go back\r\n \r\n \r\n \r\n \r\n {productExtent.price[0] !== null && }\r\n {productDEM.price[0] !== null && }\r\n {productFrequency.price[0] !== null && }\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default QuoteDetails;\r\n","import React from 'react';\r\nimport { Box, Typography, makeStyles } from '@material-ui/core';\r\n\r\nimport { AppContext } from 'App';\r\nimport { HomeContext } from 'Home';\r\nimport finalCheckmark from 'assets/images/finalCheckmark.svg';\r\n\r\nconst buttonStyle = makeStyles({\r\n buttonMain: {\r\n width: '100%',\r\n backgroundColor: '#00A4EC',\r\n '&:hover': {\r\n backgroundColor: '#008BEC',\r\n },\r\n },\r\n buttonSecondary: {\r\n width: '50%',\r\n backgroundColor: '#fff',\r\n border: '2px solid #00A4EC ',\r\n boxSizing: 'border-box',\r\n color: '#00A4EC',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 164, 236, 0.08)',\r\n },\r\n },\r\n link: {\r\n color: '#00A4EC',\r\n fontSize: 12,\r\n fontWeight: 700,\r\n textDecoration: 'none',\r\n cursor: 'pointer',\r\n },\r\n});\r\n\r\nexport default function Confirmation() {\r\n const {\r\n actions: { drawMode, setShowConfirmation },\r\n } = React.useContext(HomeContext);\r\n\r\n const {\r\n state: { productDEM, productExtent, productFrequency },\r\n } = React.useContext(AppContext);\r\n\r\n const classes = buttonStyle();\r\n\r\n const products = [productDEM, productExtent, productFrequency];\r\n\r\n const selectedProducts = products\r\n .filter(prod => prod.price[0] !== null && prod.price[0] !== 0)\r\n .map(prod => prod.title);\r\n\r\n const productString = selectedProducts\r\n .join(', ')\r\n .replace(/,(?!.*,)/gim, ' and');\r\n\r\n const reset = () => {\r\n drawMode('clear')();\r\n setShowConfirmation(false);\r\n };\r\n\r\n return (\r\n \r\n Confirmation\r\n \r\n \r\n \r\n \r\n Thank you for your request!\r\n \r\n We appreciate you contacting us about {productString} data in your\r\n area of interest. One of our flood mapping specialists will process\r\n your request and get back to you shortly with further information\r\n about data availability and delivery timing.\r\n \r\n \r\n In the meantime, you can check out the following resources for further\r\n information:\r\n \r\n \r\n Latest news\r\n \r\n \r\n Have a great day!\r\n

reset()}>\r\n Back to start\r\n

\r\n
\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport Introduction from 'components/Sidebar/Introduction';\r\nimport ProductList from 'components/Sidebar/ProductList';\r\nimport QuoteDetails from 'components/Sidebar/QuoteDetails';\r\nimport Confirmation from 'components/Sidebar/Confirmation';\r\nimport { Box } from '@material-ui/core';\r\nimport { AppContext } from 'App';\r\n\r\nimport 'styles/scrollbar.css';\r\n\r\nconst DataComponent = () => {\r\n const {\r\n state: { area, showConfirmation, showQuote },\r\n } = React.useContext(AppContext);\r\n\r\n return (\r\n \r\n {showConfirmation === true ? (\r\n \r\n ) : area.sqm === null ? (\r\n \r\n ) : showQuote === false ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default DataComponent;\r\n","import React from 'react';\r\nimport { defaultProducts } from './defaultProducts';\r\nimport {\r\n AppBar,\r\n Box,\r\n Button,\r\n Tab,\r\n Tabs,\r\n Typography,\r\n Paper,\r\n} from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst a11yProps = index => {\r\n return {\r\n id: `simple-tab-${index}`,\r\n 'aria-controls': `simple-tabpanel-${index}`,\r\n };\r\n};\r\n\r\nconst useStyles = makeStyles(() => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n tabs: {\r\n backgroundColor: '#fff',\r\n borderBottom: '1px solid #DBE4E9',\r\n color: '#0B4566',\r\n minHeight: 40,\r\n },\r\n tab: {\r\n fontSize: 9,\r\n minHeight: 40,\r\n minWidth: '33.3%',\r\n padding: 0,\r\n textTransform: 'capitalize',\r\n '&:hover': {\r\n fontWeight: 700,\r\n },\r\n },\r\n appbar: {\r\n boxShadow: 'none',\r\n },\r\n\r\n // textLink: {\r\n // color: '#00A4EC',\r\n // fontWeight: 700,\r\n // textDecoration: 'none',\r\n // '&:hover': {\r\n // textDecoration: 'underline',\r\n // },\r\n // },\r\n\r\n buttonSecondary: {\r\n width: '50%',\r\n backgroundColor: '#fff',\r\n border: '2px solid #00A4EC ',\r\n boxSizing: 'border-box',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 164, 236, 0.08)',\r\n },\r\n },\r\n link: {\r\n color: '#00A4EC',\r\n fontWeight: 700,\r\n textDecoration: 'none',\r\n },\r\n}));\r\n\r\nexport default function Info() {\r\n const products = [defaultProducts[0], defaultProducts[1], defaultProducts[2]];\r\n const classes = useStyles();\r\n const [value, setValue] = React.useState(0);\r\n\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n return (\r\n \r\n Info about the flood products\r\n\r\n \r\n \r\n {products.map(({ title }, i) => (\r\n \r\n ))}\r\n \r\n \r\n\r\n \r\n {products &&\r\n products.map(({ description, image, link, title }, i) => (\r\n \r\n {i === value && (\r\n <>\r\n {title}\r\n {description}\r\n {title}\r\n\r\n {/* \r\n \r\n \r\n Visit showcase for {title}\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\n","import React from 'react';\r\nimport { Box, Link, Typography } from '@material-ui/core';\r\nimport { defaultProducts } from 'components/Sidebar/Info/defaultProducts';\r\nimport { productStyle } from 'styles/global';\r\nimport { HomeContext } from 'Home';\r\n\r\nconst dialogueLinks = [\r\n { title: 'Flood extent', product: defaultProducts[0] },\r\n { title: 'Digital Elevation Models', product: defaultProducts[1] },\r\n { title: 'Surface water frequency ', product: defaultProducts[2] },\r\n];\r\n\r\nconst About = () => {\r\n const {\r\n actions: { setDialogue },\r\n } = React.useContext(HomeContext);\r\n\r\n const styles = productStyle();\r\n\r\n return (\r\n \r\n About Flood Metrics\r\n \r\n Flood Metrics is your all-in-one interface for DHI’s state-of-the-art\r\n satellite-based flood monitoring products, allowing you to search,\r\n request and purchase our novel satellite-based flood products and\r\n Digital Elevation Models (DEM) from a single source.\r\n \r\n \r\n Flood Metrics provides instant price range estimates for 3 different\r\n products (\r\n {dialogueLinks.map(({ title, product }, i) => (\r\n \r\n setDialogue(product)}\r\n className={styles.popupLink}\r\n >\r\n {title}\r\n \r\n {i === 0 ? ', ' : i === 1 ? ' and ' : ''}\r\n \r\n ))}\r\n ), allowing you to quickly assess costs for your specific area of\r\n interest. The prices are individually tailored and customized to your\r\n specific product requirements in terms of spatial resolution, date\r\n range(s) and other relevant parameters.\r\n \r\n How to use it\r\n \r\n Using Flood Metrics is as easy as 1-2-3:\r\n \r\n \r\n \r\n 1) Define your area of interest:{' '}\r\n \r\n Click the ‘Start Drawing’ button below to draw a polygon outlining the\r\n boundaries of your area of interest.\r\n \r\n \r\n 2) Select your products: \r\n Select your products and define your specific product requirements to\r\n retrieve an instant price estimate.\r\n \r\n \r\n 3) Get detailed quote: \r\n Click the ‘Get detailed quote’ button to send a request for more\r\n information on the exact costs and availability of your selected\r\n products.”\r\n \r\n\r\n About DHI\r\n \r\n DHI are the first people you should call when you have a tough challenge\r\n to solve in a water environment – be it a river, a reservoir, an ocean,\r\n a coastline, or an aquifer. Our knowledge of water environments is\r\n second-to-none. It represents 50 years of dedicated research and\r\n real-life experience from more than 140 countries. We strive to make\r\n this knowledge globally accessible to clients and partners by\r\n channelling it through our local teams and unique software. Our world is\r\n water. So whether you need to save water, share it fairly, improve its\r\n quality, quantify its impact or manage its flow, we can help. Our\r\n knowledge, combined with our team's expertise and the power of our\r\n technology, holds the key to unlocking the right solution. Read more on\r\n dhigroup.com\r\n \r\n \r\n );\r\n};\r\n\r\nexport default About;\r\n","import React from 'react';\r\nimport {\r\n Box,\r\n ExpansionPanel,\r\n ExpansionPanelDetails,\r\n ExpansionPanelSummary,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { About, Contact, Disclaimer, FAQ, Privacy, Terms } from './partials';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport DHITheme from 'styles/theme';\r\n\r\nconst panels = [\r\n {\r\n title: 'FAQ',\r\n component: FAQ,\r\n },\r\n {\r\n title: 'About',\r\n component: About,\r\n },\r\n {\r\n title: 'Contact',\r\n component: Contact,\r\n },\r\n {\r\n title: 'Disclaimer',\r\n component: Disclaimer,\r\n },\r\n\r\n {\r\n title: 'Privacy',\r\n component: Privacy,\r\n },\r\n {\r\n title: 'Terms',\r\n component: Terms,\r\n },\r\n];\r\n\r\nexport default function Support() {\r\n const [expanded, setExpanded] = React.useState();\r\n const { primary } = DHITheme.palette;\r\n\r\n const handleChange = panel => (e, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n return (\r\n \r\n Support\r\n {panels.map(({ title, component: Component }) => (\r\n \r\n \r\n }\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\n\r\nconst FAQ = () => {\r\n return (\r\n \r\n \r\n Can I get such information from my area?\r\n \r\n \r\n Yes satellites and our services are global!\r\n \r\n \r\n How often can I get this type of maps?\r\n \r\n \r\n Potentially daily (and in some cases a few times per day), but this\r\n depends on the overpass schedule of the different satelittes.\r\n \r\n \r\n Can I always get information about historical flood events?\r\n \r\n \r\n Yes sometimes, but this depends on the availibility of archived imagery\r\n \r\n What costs are associated?\r\n \r\n Use this viewer to get an estimate of the associated costs and contact\r\n us for a more detailed quote.\r\n \r\n \r\n How quickly after the flooding can I get the information?\r\n \r\n \r\n The raw satellite image is typically available within hours after the\r\n image acqusition. The time needed for analysis and production maps\r\n depends can vary from a few hours to days depending on the area size.\r\n \r\n \r\n Can we get data from future flood events?\r\n \r\n \r\n Yes! Simply let us know in advance where and when you expect a flooding\r\n to occur, then we can initiate a tasking of new satellite images of the\r\n needed area/time\r\n \r\n \r\n );\r\n};\r\n\r\nexport default FAQ;\r\n","import React from 'react';\r\nimport { Box, Link, Typography } from '@material-ui/core';\r\n\r\nconst Contact = () => {\r\n return (\r\n \r\n \r\n With our global network of offices, we make sure you get the right\r\n answers to your local needs.\r\n \r\n\r\n \r\n DHI A/S\r\n \r\n Agern Alle 5, 2970 Hørsholm, Denmark\r\n \r\n \r\n gras@dhigroup.com\r\n \r\n +45 4516 9100\r\n CVR no: 36466871\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Contact;\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\n\r\nconst Disclaimer = () => {\r\n return (\r\n \r\n \r\n \r\n We provide this website as a service and for informational purposes\r\n only.\r\n \r\n \r\n \r\n The transmission of this information does not create any form of\r\n relationship with us. You should not act upon information provided on\r\n this site without seeking our personal assistance. While we have\r\n attempted to maintain the information, the software and any other\r\n services on this site as accurately as possible, the site may contain\r\n errors or omissions for which we disclaim any and all liability. The\r\n material and contents posted on this site is provided without warranty\r\n of any kind.\r\n \r\n \r\n We are not responsible for any loss of hardware, software or files,\r\n caused by the use of the web site or elements downloaded or used from/on\r\n the web site. Hence we make no warranty, that the web site or product or\r\n services provided on the web site, either by us or on our behalf\r\n (including free software downloads) will meet your requirements or will\r\n be uninterrupted, timely, secure or without errors, or that the website\r\n or the servers we use are free of viruses or bugs or are fully\r\n functional or accurate.\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Disclaimer;\r\n","import React from 'react';\r\nimport { Box, Typography, Link, withStyles } from '@material-ui/core';\r\n\r\nimport styles from './styles';\r\n\r\nconst Privacy = ({ classes }) => {\r\n return (\r\n \r\n \r\n \r\n At DHI (\"DHI\", \"we\" or “us”) data protection and confidentiality is a\r\n high priority. This privacy policy sets out clear guidelines for how\r\n DHI processes your personal data. Further, we explain how we use the\r\n personal data that you leave and/or provide when you visit our\r\n websites or when you interact with us with various business relations.\r\n \r\n \r\n \r\n \r\n 1. DATA CONTROLLER AND CONTACT INFORMATION\r\n \r\n \r\n This website is operated and owned by:\r\n \r\n DHI A/S\r\n Agern Alle 5\r\n 2970 Hørsholm\r\n CVR no: 36466871 +45 4516 9200\r\n info@dhigroup.com\r\n \r\n \r\n \r\n 2. COLLECTION OF PERSONAL DATA\r\n \r\n \r\n You will always be informed in connection with collection of personal\r\n data about you. The personal data collected by us may include, for\r\n instance, your name, your email address, IP address and similar\r\n identification data, including information about your navigation on\r\n the website.\r\n \r\n \r\n In connection with the submission of your data it will always be\r\n stated whether the submission is voluntary or necessary for completing\r\n the desired action.\r\n \r\n \r\n Your personal data is collected in one or several of the below cases:\r\n \r\n \r\n * When you sign up for DHI newsletter. The legal basis for such\r\n processing is the GDPR art. 6(1)(a).\r\n \r\n \r\n * When you use DHI’s websites. The legal basis for such processing is\r\n the GDPR art. 6(1)(f). The legitimate interest under (f) is for us to\r\n improve our websites and to understand how our users use the websites.\r\n \r\n \r\n * When you download our software or applications. The legal basis for\r\n such processing is the GDPR art. 6(1)(b).\r\n \r\n \r\n * When you sign up for an event. The legal basis for such processing\r\n is the GDPR art. 6(1)(b).\r\n \r\n \r\n * When you sign up for an online or physical training course. The\r\n legal basis for such processing is the GDPR art. 6(1)(b).\r\n \r\n \r\n * When you download our eBooks. The legal basis for such processing is\r\n the GDPR art. 6(1)(b).\r\n \r\n \r\n * When you create an account at DHI webshops. The legal basis for such\r\n processing is the GDPR art. 6(1)(b).\r\n \r\n \r\n * When you buy products or services at our webshops. The legal basis\r\n for such processing is the GDPR art. 6(1)(b).\r\n \r\n \r\n * When you contact us. The legal basis for such processing is the GDPR\r\n art. 6(1)(b) and/or (f). The legitimate interest under (f) is for us\r\n to be able to respond to your inquiry.\r\n \r\n \r\n \r\n \r\n 3. USE OF PERSONAL DATA\r\n \r\n \r\n We will use personal information only in ways that are compatible with\r\n the purposes for which it was collected or subsequently authorised by\r\n you. DHI will take reasonable steps to ensure that personal\r\n information is relevant to its intended use, accurate, complete, and\r\n current.\r\n \r\n \r\n Please note, that we will only use your personal data to send\r\n marketing material if you have given your explicit consent, unless\r\n legislation allows us to contact you without your prior consent.\r\n \r\n \r\n DHI keeps statistics about which areas of the site our users visit.\r\n This information is used to improve the website. We do use data about\r\n how our users navigate, to better understand how our users use our\r\n websites and from that we try to improve the user experience.\r\n Furthermore, we collect information about what our users, as a unit,\r\n prefer. This information is also used to improve the website. We do\r\n not sell or otherwise disclose information about how our users\r\n navigate and use our website.\r\n \r\n \r\n \r\n \r\n 4. SHARING OF PERSONAL DATA\r\n \r\n \r\n We do not transfer your personal data to any third parties, except for\r\n what is described in this section, without your consent.\r\n \r\n \r\n Your personal data may be disclosed to partners of DHI (providers who\r\n deliver services on behalf of DHI), for example IT service providers,\r\n and in relation to sending out newsletters. These partners only\r\n process the personal data on behalf of DHI and in accordance with\r\n DHI’s instructions. Furthermore, your personal data may be shared with\r\n business partners, e.g. freight companies, for the delivery of goods\r\n you buy in our webshop.\r\n \r\n \r\n Your personal data may also be shared within the DHI group with all\r\n DHI affiliated companies. A list of all affiliated companies may be\r\n found on the following link:{' '}\r\n \r\n https://www.dhigroup.com/privacy/sharing-of-personal-data#companies\r\n \r\n \r\n \r\n Under specific circumstances and with reference to legislation, it\r\n might be necessary to transfer information to public authorities or\r\n the police. For example, information may be disclosed to the police in\r\n case of suspicion of credit card fraud.\r\n \r\n \r\n In the case of a re-organization, full or partial sale of the company,\r\n any disclosure in such connection will be in accordance with current\r\n legislation for the processing of personal data.\r\n \r\n \r\n If your personal data are transferred to data controllers or data\r\n processors, which are located in countries outside the EU/EEA not\r\n ensuring an adequate level of data protection, such transfers will be\r\n adequately safeguarded by DHI, e.g. via the EU Commission’s Standard\r\n Contractual Clauses. Please contact us if you wish further\r\n information.\r\n \r\n \r\n \r\n \r\n 5. DELETION OF PERSONAL DATA\r\n \r\n \r\n We will delete your personal data when we no longer need to process\r\n them in relation to one or more of the purposes set out above.\r\n However, the data may be processed and stored for a longer period in\r\n anonymized form.\r\n \r\n \r\n We take appropriate measures to ensure that we process and store your\r\n personal data based on:\r\n \r\n \r\n * as a minimum for the time period in which we deliver a service to\r\n you,\r\n \r\n \r\n * in accordance with law, contract, or our legal obligations,\r\n \r\n \r\n * or as long as the data are necessary in order for the purposes for\r\n which they are collected, or longer if it is required by contract,\r\n applicable law, or for statistical purposes governed by appropriate\r\n security measures.\r\n \r\n \r\n \r\n \r\n 6. COOKIES\r\n \r\n \r\n We use cookies on our website. You can read more about the use of\r\n cookies in our Cookie Policy, which you can find on the following\r\n link:\r\n \r\n https://www.dhigroup.com/cookie-page\r\n \r\n \r\n \r\n \r\n \r\n 7. SECURITY\r\n \r\n \r\n We have implemented security measures to ensure that our internal\r\n procedures meet our high security policy standards. For example, we\r\n use encryption. Further, we strive to ensure the ongoing\r\n confidentiality, integrity, availability and resilience when\r\n processing your personal data. In the event of physical or technical\r\n incidents, we make every effort to restore the availability and access\r\n to your personal data in a timely manner. We also have processes for\r\n assessing and evaluating the effectiveness in order to ensure that the\r\n security level is sufficient.\r\n \r\n \r\n \r\n \r\n 8. YOUR RIGHTS\r\n \r\n \r\n You are at any time entitled to be informed of the personal data about\r\n you that we process, but with certain legislative exceptions. You also\r\n have the right to object to the collection and further processing of\r\n your personal data including profiling/automated decision-making.\r\n Furthermore, you have the right to have your personal data rectified,\r\n erased or blocked according to the rules. Moreover, you have the right\r\n to receive information about you that you have provided to us, and the\r\n right to have this information transmitted to another data controller\r\n (data portability).\r\n \r\n \r\n \r\n \r\n 9. WITHDRAWAL OF CONSENT\r\n \r\n \r\n You may, at any time, withdraw any consent you have given and we will\r\n delete your personal data, unless we can continue the processing based\r\n on another purpose. If you wish to withdraw your consent, please\r\n contact us at\r\n \r\n info@dhigroup.com\r\n \r\n or +45 4516 9200.\r\n \r\n \r\n \r\n \r\n 10. LINKS TO OTHER WEBSITES ETC.\r\n \r\n \r\n Our website may contain links to other websites or to integrated\r\n sites. We are not responsible for the contents of the websites of\r\n other companies or for the practices of such companies regarding the\r\n collection of personal data. When you visit other websites, you should\r\n read the owners' policies on the protection of personal data and other\r\n relevant policies.\r\n \r\n \r\n \r\n \r\n 11. CHANGES TO OUR PRIVACY POLICY\r\n \r\n \r\n We reserve the right to change this privacy policy based on material\r\n changes in legislation, new technological solutions, new or improved\r\n features, or to improve our websites.\r\n \r\n \r\n \r\n \r\n 12. AMENDMENT OF DATA ETC.\r\n \r\n \r\n If you want us to update, amend or delete the personal data that we\r\n have recorded about you, or if you wish to get access to the data\r\n being processed about you, or if you have any questions concerning the\r\n above guidelines, you may contact us at{' '}\r\n \r\n info@dhigroup.com\r\n {' '}\r\n or +45 4516 9200. You may also write to us at the following\r\n address:DHI, Agern Allé 5, 2970 Hørsholm, Denmark\r\n \r\n \r\n \r\n \r\n 13. COMPLAINTS\r\n \r\n \r\n If you wish to appeal against the processing of your personal data,\r\n please contact us by email, telephone or letter as indicated above.\r\n You may also contact the Data Protection Agency, Borgergade 28, 5.,\r\n 1300 Copenhagen K, Denmark.\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(Privacy);\r\n","export default {\r\n link: {\r\n color: 'blue',\r\n },\r\n};\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\n\r\nconst Terms = () => {\r\n return (\r\n \r\n \r\n \r\n At DHI (\"DHI\", \"we\" or “us”) data protection and confidentiality is a\r\n high priority. This privacy policy sets out clear guidelines for how\r\n DHI processes your personal data. Further, we explain how we use the\r\n personal data that you leave and/or provide when you visit our\r\n websites or when you interact with us with various business relations.\r\n \r\n \r\n The Terms addresses your legal rights and obligations and includes\r\n important disclaimers and choice of law and forum provisions. Please\r\n read carefully. The Terms apply to all websites of DHI Group,\r\n including sites for registered users.\r\n \r\n \r\n \r\n \r\n OWNERSHIP OF THE WEBSITE\r\n \r\n \r\n The website is owned and operated by DHI (referred as we/us in these\r\n Terms), a corporation incorporated under the laws of Denmark, having\r\n its principal office in Hørsholm.\r\n \r\n \r\n \r\n \r\n USE LICENSE\r\n \r\n \r\n Please feel free to browse the website. We grant you permission to\r\n view this website and to print or download material displayed on the\r\n website for your own personal, non-commercial use, provided that you\r\n agree to and accept without modification the notices, terms and\r\n conditions set forth in this agreement and provided that you keep\r\n intact all copyright, trademark and other proprietary notices. You may\r\n not however copy, reproduce, republish, upload, transmit or distribute\r\n in any way the contents of this website, including the text, images,\r\n audio and video for public or commercial purposes, without written\r\n permission from us. You are also prohibited from using any content of\r\n this website in a frame on any other internet site in any way.\r\n \r\n \r\n Your use of this website constitutes your agreement and acceptance\r\n without modification of the notices, terms and conditions set forth\r\n herein. In addition as a condition of your use of this website, you\r\n represent and warrant to us that you will not use this website for any\r\n purpose that is unlawful, immoral or prohibited by these terms,\r\n conditions and notices.\r\n \r\n \r\n \r\n \r\n USER SUBMISSIONS\r\n \r\n \r\n Any communication or material that you transmit to the website by\r\n e-mail or otherwise is, and will be treated as non-confidential and\r\n non-proprietary information. Anything you transmit or post may be used\r\n by us for any purpose. You are prohibited from posting or transmitting\r\n to or from this Site any unlawful, threatening, libellous, defamatory,\r\n obscene, pornographic, or other material that may violate any law.\r\n \r\n \r\n \r\n \r\n LINKS TO AND FROM OTHER MATERIALS\r\n \r\n \r\n We may provide hyperlinks to third party sites. The linked sites are\r\n not under our control and in no way are we responsible for the content\r\n of any such linked site or for the content of any site linked to such\r\n linked site. We do not endorse companies or products to which it may\r\n provide hyperlinks and we reserve the right to note as such on our\r\n Site. We reserve the unilateral right to terminate any link or linking\r\n program at any time. If you decide to access any of the third party\r\n sites linked to this website, you do so at your own risk. Third\r\n parties may only provide hyperlinks to our main homepage. Any links to\r\n underlying sites require a prior written approval from us.\r\n \r\n \r\n \r\n \r\n CONTENT\r\n \r\n \r\n We take great care in creating and maintaining this website, and in\r\n providing accurate and up-to-date content. However, the content of\r\n this website is subject to frequent modifications without prior\r\n notice. Therefore, we do not guarantee the correct and actual status\r\n of said content. The visitors to the website accept our exoneration of\r\n any liability whatsoever for the content of the website, the software\r\n on the website or for any use made of it.\r\n \r\n \r\n \r\n \r\n INTELLECTUAL PROPERTY\r\n \r\n \r\n The texts, layouts, drawings, databases and other items on this\r\n website, as well as the website itself, are protected by copyright and\r\n by the right of the producer of the database. Some of the names, signs\r\n and logos on this website are protected trademarks or trade names.\r\n Nothing contained on the website should be construed as granting any\r\n license or right to use any trademark, displayed on the website\r\n without the written permission from us or such third party that may\r\n own the trademarks displayed on the website. Any copy, adaptation,\r\n translation, arrangement, modification, or any use whatsoever of the\r\n whole or of any part of this website of its protected elements, in any\r\n form and by any means, is strictly prohibited.\r\n \r\n \r\n \r\n \r\n DATA PROTECTION\r\n \r\n \r\n We collect and process information on the behaviour of the users of\r\n this Site for statistical and marketing purposes. The user has the\r\n right to oppose, free of charge, the processing for marketing purposes\r\n of the data concerning him, and has the right to access personal data\r\n and correct such data. For more information regarding the data that we\r\n collect and the measures we take to protect the privacy of our user\r\n data please refer to our Privacy Policy.\r\n \r\n \r\n \r\n \r\n LIABILITY\r\n \r\n \r\n Your use of and browsing in this Site is at your own risk. DHI does\r\n not warrant that the software used for this Site, and the information,\r\n the on-line applications, or any other services provided by means of\r\n this Site are error-free, or that their use will be uninterrupted. DHI\r\n expressly disclaims all warranties related to the above-mentioned\r\n subject matter, including, without limitation, those of accuracy,\r\n condition, merchantability and fitness for particular purpose.\r\n Notwithstanding anything to the contrary in this Site, in no event\r\n shall DHI be liable for any loss of profits, revenues, indirect,\r\n special, incidental, consequential, or other similar damages arising\r\n out of or in connection with this Site or out of the use of any of the\r\n services proposed by means of this Site.\r\n \r\n \r\n \r\n \r\n PRODUCT ORDERS\r\n \r\n \r\n While we will use our best efforts to fulfill all orders, we cannot\r\n guarantee the availability of any particular product displayed on this\r\n website. We reserve the right to discontinue the sale of any product\r\n listed on this website at any time without notice.\r\n \r\n \r\n \r\n \r\n UPDATES\r\n \r\n \r\n We reserve the unilateral right to update, modify, change and alter\r\n our Terms and Privacy Policy at any time. All such updates,\r\n modifications, changes and alterations are binding on all users and\r\n browsers of our website and will be posted here.\r\n \r\n \r\n \r\n \r\n SOFTWARE LICENSES\r\n \r\n \r\n You shall have no rights to the proprietary software and related\r\n documentation, or any enhancements or modifications thereto, which may\r\n be provided to you in order to access specified areas within the\r\n website. You may not sublicense, assign or transfer any licenses\r\n granted by us, and any attempt at such sublicense, assignment or\r\n transfer shall be null and void. You may not otherwise copy,\r\n distribute, modify, reverse engineer, or create derivative works from\r\n such software.\r\n \r\n \r\n \r\n \r\n CHOICE OF LAW AND FORUM PROVISIONS\r\n \r\n \r\n This website resides on a server in Hørsholm, Denmark. You agree that\r\n these Terms and your use of this website are governed by the laws of\r\n Denmark. You hereby consent to the jurisdiction and venue of the\r\n Municipal Court of Lyngby, Denmark in all disputes (a) arising out of,\r\n relating to, or concerning this website and/or these Terms, (b) in\r\n which this website and/or these Terms is an issue or a material fact,\r\n or (c) in which this website and/or these Terms is referenced in a\r\n paper filed in a court, tribunal, agency or other dispute resolution\r\n organisation. We have endeavoured to comply with all legal\r\n requirements known to us in creating and maintaining this website, but\r\n make no representation that materials on this website are appropriate\r\n or available for use in any particular jurisdiction. You are\r\n responsible for compliance with applicable laws. Any use in\r\n contravention of this provision or any provision of these Terms is at\r\n your own risk and, if any part of these Terms is invalid or\r\n unenforceable under applicable law, the invalid or unenforceable\r\n provision will be deemed superseded by a valid, enforceable provision\r\n that most closely matches the intent of the original provision and the\r\n remainder of these Terms shall govern such use.\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Terms;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport { titleStyle } from 'styles/global';\r\nimport DHILogo from 'assets/images/DHI_Logo_Blue.png';\r\n\r\nexport default function Title() {\r\n const classes = titleStyle();\r\n return (\r\n \r\n \r\n \r\n Flood Metrics\r\n \r\n \r\n {'DHI\r\n \r\n \r\n\r\n \r\n Easy access to flood data\r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport DataComponent from './DataComponent';\r\nimport Info from './Info';\r\nimport Support from './Support';\r\nimport Title from './Title/Title';\r\n\r\nimport { AppContext } from 'App';\r\nimport { Paper } from '@material-ui/core';\r\n\r\nimport 'styles/scrollbar.css';\r\n\r\nconst Sidebar = () => {\r\n const {\r\n state: { sidebarComponent },\r\n } = React.useContext(AppContext);\r\n\r\n return (\r\n \r\n \r\n {sidebarComponent === 0 && <Info />}\r\n {sidebarComponent === 1 && <DataComponent />}\r\n {sidebarComponent === 2 && <Support />}\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default Sidebar;\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\n\r\nimport { AppContext } from 'App';\r\nimport { Box, Grid, IconButton, Tooltip } from '@material-ui/core';\r\nimport { iconStyle } from 'styles/global';\r\n\r\nimport { ReactComponent as DownloadIcon } from '@mike/mike-shared-frontend/media/icons/Download.svg';\r\nimport { ReactComponent as InfoIcon } from '@mike/mike-shared-frontend/media/icons/Info.svg';\r\nimport { ReactComponent as LeftIcon } from '@mike/mike-shared-frontend/media/icons/Left.svg';\r\nimport { ReactComponent as RightIcon } from '@mike/mike-shared-frontend/media/icons/Right.svg';\r\nimport { ReactComponent as SupportIcon } from '@mike/mike-shared-frontend/media/icons/Support.svg';\r\nimport { ReactComponent as UpIcon } from '@mike/mike-shared-frontend/media/icons/Up.svg';\r\nimport { ReactComponent as DownIcon } from '@mike/mike-shared-frontend/media/icons/Down.svg';\r\n\r\nconst icons = [\r\n { id: 1, component: DownloadIcon, tooltip: 'Get your data' },\r\n { id: 0, component: InfoIcon, tooltip: 'Information' },\r\n { id: 2, component: SupportIcon, tooltip: 'Support and legal' },\r\n];\r\n\r\nconst SidebarControl = ({ mobile }) => {\r\n const {\r\n actions: { setOpenDrawer, setSidebarComponent },\r\n state: { openDrawer, sidebarComponent },\r\n } = React.useContext(AppContext);\r\n\r\n const classes = iconStyle();\r\n\r\n const handleClick = id => {\r\n sidebarComponent !== id && setSidebarComponent(id);\r\n !openDrawer && setOpenDrawer(true);\r\n };\r\n\r\n return (\r\n <Box\r\n flexGrow={1}\r\n display=\"flex\"\r\n flexDirection={mobile === true ? 'row' : 'column'}\r\n style={{ overflowY: 'auto', height: ' 100%', backgroundColor: '#fff' }}\r\n justifyContent=\"space-between\"\r\n >\r\n <Box>\r\n <IconButton\r\n className={classes.button}\r\n onClick={() => setOpenDrawer(!openDrawer)}\r\n >\r\n {openDrawer === true && mobile !== true && (\r\n <RightIcon className={classes.icon} />\r\n )}\r\n {openDrawer === false && mobile !== true && (\r\n <LeftIcon className={classes.icon} />\r\n )}\r\n {openDrawer === true && mobile === true && (\r\n <DownIcon className={classes.icon} />\r\n )}\r\n {openDrawer === false && mobile === true && (\r\n <UpIcon className={classes.icon} />\r\n )}\r\n </IconButton>\r\n </Box>\r\n <Box p={0} m={0}>\r\n <Grid container spacing={0}>\r\n {icons.map(({ id, component: Component, tooltip }) => (\r\n // <Grid key={id} item xs={mobile === true ? 4 : 12}>\r\n <Tooltip placement=\"left\" title={tooltip} key={id}>\r\n <IconButton\r\n className={classes.button}\r\n onClick={() => handleClick(id)}\r\n >\r\n <Component\r\n className={classnames({\r\n [classes.icon]: true,\r\n [classes.activeIcon]: openDrawer && sidebarComponent === id,\r\n })}\r\n />\r\n </IconButton>\r\n </Tooltip>\r\n // </Grid>\r\n ))}\r\n </Grid>\r\n </Box>\r\n <Box></Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default SidebarControl;\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport MuiDialogTitle from '@material-ui/core/DialogTitle';\r\nimport MuiDialogContent from '@material-ui/core/DialogContent';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { ReactComponent as CloseIcon } from '@mike/mike-shared-frontend/media/icons/CloseS.svg';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(2),\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.palette.primary.main,\r\n },\r\n title: {\r\n fontSize: 14,\r\n fontWeight: 500,\r\n },\r\n});\r\n\r\nconst DialogTitle = withStyles(styles)(props => {\r\n const { children, classes, onClose, ...other } = props;\r\n return (\r\n <MuiDialogTitle disableTypography className={classes.root} {...other}>\r\n <Typography variant=\"h5\" className={classes.title}>\r\n {children}\r\n </Typography>\r\n {onClose ? (\r\n <IconButton\r\n aria-label=\"close\"\r\n className={classes.closeButton}\r\n onClick={onClose}\r\n >\r\n <CloseIcon style={{ width: 36, height: 36 }} />\r\n </IconButton>\r\n ) : null}\r\n </MuiDialogTitle>\r\n );\r\n});\r\n\r\nconst DialogContent = withStyles(theme => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n}))(MuiDialogContent);\r\n\r\nexport default function DialogWindow({ handleClose, open, product }) {\r\n const { description, media, title } = product;\r\n\r\n return (\r\n <Dialog\r\n onClose={handleClose}\r\n aria-labelledby=\"customized-dialog-title\"\r\n open={open}\r\n >\r\n <DialogTitle id=\"customized-dialog-title\" onClose={handleClose}>\r\n {title}\r\n </DialogTitle>\r\n <DialogContent dividers>\r\n {description && description}\r\n {media && media}\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n}\r\n","const doubleClickZoom = {\r\n enable: ctx => {\r\n setTimeout(() => {\r\n // First check we've got a map and some context.\r\n if (\r\n !ctx.map ||\r\n !ctx.map.doubleClickZoom ||\r\n !ctx._ctx ||\r\n !ctx._ctx.store ||\r\n !ctx._ctx.store.getInitialConfigValue\r\n )\r\n return;\r\n // Now check initial state wasn't false (we leave it disabled if so)\r\n if (!ctx._ctx.store.getInitialConfigValue('doubleClickZoom')) return;\r\n ctx.map.doubleClickZoom.enable();\r\n }, 0);\r\n },\r\n disable(ctx) {\r\n setTimeout(() => {\r\n if (!ctx.map || !ctx.map.doubleClickZoom) return;\r\n // Always disable here, as it's necessary in some cases.\r\n ctx.map.doubleClickZoom.disable();\r\n }, 0);\r\n },\r\n};\r\n\r\nconst DrawRectangle = {\r\n // When the mode starts this function will be called.\r\n onSetup: function(opts) {\r\n const rectangle = this.newFeature({\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Polygon',\r\n coordinates: [[]],\r\n },\r\n });\r\n this.addFeature(rectangle);\r\n this.clearSelectedFeatures();\r\n doubleClickZoom.disable(this);\r\n this.updateUIClasses({ mouse: 'add' });\r\n this.setActionableState({\r\n trash: true,\r\n });\r\n return {\r\n rectangle,\r\n };\r\n },\r\n // support mobile taps\r\n onTap: function(state, e) {\r\n // emulate 'move mouse' to update feature coords\r\n if (state.startPoint) this.onMouseMove(state, e);\r\n // emulate onClick\r\n this.onClick(state, e);\r\n },\r\n // Whenever a user clicks on the map, Draw will call `onClick`\r\n onClick: function(state, e) {\r\n // if state.startPoint exist, means its second click\r\n //change to simple_select mode\r\n if (\r\n state.startPoint &&\r\n state.startPoint[0] !== e.lngLat.lng &&\r\n state.startPoint[1] !== e.lngLat.lat\r\n ) {\r\n this.updateUIClasses({ mouse: 'pointer' });\r\n state.endPoint = [e.lngLat.lng, e.lngLat.lat];\r\n this.changeMode('simple_select', { featuresId: state.rectangle.id });\r\n }\r\n // on first click, save clicked point coords as starting for rectangle\r\n const startPoint = [e.lngLat.lng, e.lngLat.lat];\r\n state.startPoint = startPoint;\r\n },\r\n onMouseMove: function(state, e) {\r\n // if startPoint, update the feature coordinates, using the bounding box concept\r\n // we are simply using the startingPoint coordinates and the current Mouse Position\r\n // coordinates to calculate the bounding box on the fly, which will be our rectangle\r\n if (state.startPoint) {\r\n state.rectangle.updateCoordinate(\r\n '0.0',\r\n state.startPoint[0],\r\n state.startPoint[1]\r\n ); //minX, minY - the starting point\r\n state.rectangle.updateCoordinate(\r\n '0.1',\r\n e.lngLat.lng,\r\n state.startPoint[1]\r\n ); // maxX, minY\r\n state.rectangle.updateCoordinate('0.2', e.lngLat.lng, e.lngLat.lat); // maxX, maxY\r\n state.rectangle.updateCoordinate(\r\n '0.3',\r\n state.startPoint[0],\r\n e.lngLat.lat\r\n ); // minX,maxY\r\n state.rectangle.updateCoordinate(\r\n '0.4',\r\n state.startPoint[0],\r\n state.startPoint[1]\r\n ); //minX,minY - ending point (equals to starting point)\r\n }\r\n },\r\n // Whenever a user clicks on a key while focused on the map, it will be sent here\r\n onKeyUp: function(state, e) {\r\n if (e.keyCode === 27) return this.changeMode('simple_select');\r\n },\r\n onStop: function(state) {\r\n doubleClickZoom.enable(this);\r\n this.updateUIClasses({ mouse: 'none' });\r\n this.activateUIButton();\r\n\r\n // check to see if we've deleted this feature\r\n if (this.getFeature(state.rectangle.id) === undefined) return;\r\n\r\n //remove last added coordinate\r\n state.rectangle.removeCoordinate('0.4');\r\n if (state.rectangle.isValid()) {\r\n this.map.fire('draw.create', {\r\n features: [state.rectangle.toGeoJSON()],\r\n });\r\n } else {\r\n this.deleteFeature([state.rectangle.id], { silent: true });\r\n this.changeMode('simple_select', {}, { silent: true });\r\n }\r\n },\r\n toDisplayFeatures: function(state, geojson, display) {\r\n const isActivePolygon = geojson.properties.id === state.rectangle.id;\r\n geojson.properties.active = isActivePolygon ? 'true' : 'false';\r\n if (!isActivePolygon) return display(geojson);\r\n\r\n // Only render the rectangular polygon if it has the starting point\r\n if (!state.startPoint) return;\r\n return display(geojson);\r\n },\r\n onTrash: function(state) {\r\n this.deleteFeature([state.rectangle.id], { silent: true });\r\n this.changeMode('simple_select');\r\n },\r\n};\r\n\r\nexport default DrawRectangle;\r\n","import MapboxDraw from '@mapbox/mapbox-gl-draw';\r\nimport numeral from 'numeral';\r\nimport _ from 'lodash';\r\nimport lineDistance from '@turf/length';\r\n\r\nconst RadiusMode = _.extend({}, MapboxDraw.modes.draw_line_string);\r\n\r\nfunction createVertex(parentId, coordinates, path, selected) {\r\n return {\r\n type: 'Feature',\r\n properties: {\r\n meta: 'vertex',\r\n parent: parentId,\r\n coord_path: path,\r\n active: selected ? 'true' : 'false',\r\n },\r\n geometry: {\r\n type: 'Point',\r\n coordinates,\r\n },\r\n };\r\n}\r\n\r\n// create a circle-like polygon given a center point and radius\r\n// https://stackoverflow.com/questions/37599561/drawing-a-circle-with-the-radius-in-miles-meters-with-mapbox-gl-js/39006388#39006388\r\nfunction createGeoJSONCircle(center, radiusInKm, parentId, points = 64) {\r\n const coords = {\r\n latitude: center[1],\r\n longitude: center[0],\r\n };\r\n\r\n const km = radiusInKm;\r\n\r\n const ret = [];\r\n const distanceX = km / (111.32 * Math.cos((coords.latitude * Math.PI) / 180));\r\n const distanceY = km / 110.574;\r\n\r\n let theta;\r\n let x;\r\n let y;\r\n for (let i = 0; i < points; i += 1) {\r\n theta = (i / points) * (2 * Math.PI);\r\n x = distanceX * Math.cos(theta);\r\n y = distanceY * Math.sin(theta);\r\n\r\n ret.push([coords.longitude + x, coords.latitude + y]);\r\n }\r\n ret.push(ret[0]);\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: {\r\n type: 'Polygon',\r\n coordinates: [ret],\r\n },\r\n properties: {\r\n parent: parentId,\r\n },\r\n };\r\n}\r\n\r\nfunction getDisplayMeasurements(feature) {\r\n // should log both metric and standard display strings for the current drawn feature\r\n\r\n // metric calculation\r\n const drawnLength = lineDistance(feature) * 1000; // meters\r\n\r\n let metricUnits = 'm';\r\n let metricFormat = '0,0';\r\n let metricMeasurement;\r\n\r\n let standardUnits = 'feet';\r\n let standardFormat = '0,0';\r\n let standardMeasurement;\r\n\r\n metricMeasurement = drawnLength;\r\n if (drawnLength >= 1000) {\r\n // if over 1000 meters, upgrade metric\r\n metricMeasurement = drawnLength / 1000;\r\n metricUnits = 'km';\r\n metricFormat = '0.00';\r\n }\r\n\r\n standardMeasurement = drawnLength * 3.28084;\r\n if (standardMeasurement >= 5280) {\r\n // if over 5280 feet, upgrade standard\r\n standardMeasurement /= 5280;\r\n standardUnits = 'mi';\r\n standardFormat = '0.00';\r\n }\r\n\r\n const displayMeasurements = {\r\n metric: `${numeral(metricMeasurement).format(metricFormat)} ${metricUnits}`,\r\n standard: `${numeral(standardMeasurement).format(\r\n standardFormat\r\n )} ${standardUnits}`,\r\n };\r\n\r\n return displayMeasurements;\r\n}\r\n\r\nconst doubleClickZoom = {\r\n enable: ctx => {\r\n setTimeout(() => {\r\n // First check we've got a map and some context.\r\n if (\r\n !ctx.map ||\r\n !ctx.map.doubleClickZoom ||\r\n !ctx._ctx ||\r\n !ctx._ctx.store ||\r\n !ctx._ctx.store.getInitialConfigValue\r\n )\r\n return;\r\n // Now check initial state wasn't false (we leave it disabled if so)\r\n if (!ctx._ctx.store.getInitialConfigValue('doubleClickZoom')) return;\r\n ctx.map.doubleClickZoom.enable();\r\n }, 0);\r\n },\r\n disable(ctx) {\r\n setTimeout(() => {\r\n if (!ctx.map || !ctx.map.doubleClickZoom) return;\r\n // Always disable here, as it's necessary in some cases.\r\n ctx.map.doubleClickZoom.disable();\r\n }, 0);\r\n },\r\n};\r\nRadiusMode.onSetup = function(opts) {\r\n const props = MapboxDraw.modes.draw_line_string.onSetup.call(this, opts);\r\n const circle = this.newFeature({\r\n type: 'Feature',\r\n properties: {\r\n meta: 'radius',\r\n },\r\n geometry: {\r\n type: 'Polygon',\r\n coordinates: [[]],\r\n },\r\n });\r\n this.addFeature(circle);\r\n\r\n return {\r\n ...props,\r\n circle,\r\n };\r\n};\r\n\r\nRadiusMode.clickAnywhere = function(state, e) {\r\n // this ends the drawing after the user creates a second point, triggering this.onStop\r\n if (state.currentVertexPosition === 1) {\r\n state.line.addCoordinate(0, e.lngLat.lng, e.lngLat.lat);\r\n return this.changeMode('simple_select', { featureIds: [state.line.id] });\r\n }\r\n this.updateUIClasses({ mouse: 'add' });\r\n state.line.updateCoordinate(\r\n state.currentVertexPosition,\r\n e.lngLat.lng,\r\n e.lngLat.lat\r\n );\r\n if (state.direction === 'forward') {\r\n state.currentVertexPosition += 1; // eslint-disable-line\r\n state.line.updateCoordinate(\r\n state.currentVertexPosition,\r\n e.lngLat.lng,\r\n e.lngLat.lat\r\n );\r\n } else {\r\n state.line.addCoordinate(0, e.lngLat.lng, e.lngLat.lat);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nRadiusMode.onMouseMove = function(state, e) {\r\n MapboxDraw.modes.draw_line_string.onMouseMove.call(this, state, e);\r\n const geojson = state.line.toGeoJSON();\r\n const center = geojson.geometry.coordinates[0];\r\n const radiusInKm = lineDistance(geojson, 'kilometers');\r\n const circleFeature = createGeoJSONCircle(center, radiusInKm, state.line.id);\r\n circleFeature.properties.meta = 'radius';\r\n state.circle.setCoordinates(circleFeature.geometry.coordinates);\r\n};\r\n\r\n// creates the final geojson point feature with a radius property\r\n// triggers draw.create\r\nRadiusMode.onStop = function(state) {\r\n doubleClickZoom.enable(this);\r\n\r\n this.activateUIButton();\r\n\r\n // check to see if we've deleted this feature\r\n if (this.getFeature(state.line.id) === undefined) return;\r\n\r\n // remove last added coordinate\r\n state.line.removeCoordinate('0');\r\n if (state.line.isValid()) {\r\n // const geojson = state.line.toGeoJSON();\r\n this.deleteFeature([state.line.id], { silent: true });\r\n\r\n this.map.fire('draw.create', {\r\n features: [state.circle.toGeoJSON()],\r\n });\r\n } else {\r\n this.deleteFeature([state.line.id], { silent: true });\r\n this.changeMode('simple_select', {}, { silent: true });\r\n }\r\n};\r\n\r\nRadiusMode.toDisplayFeatures = function(state, geojson, display) {\r\n const isActiveLine = geojson.properties.id === state.line.id;\r\n geojson.properties.active = isActiveLine ? 'true' : 'false';\r\n if (!isActiveLine) return display(geojson);\r\n\r\n // Only render the line if it has at least one real coordinate\r\n if (geojson.geometry.coordinates.length < 2) return null;\r\n geojson.properties.meta = 'feature';\r\n\r\n // displays center vertex as a point feature\r\n display(\r\n createVertex(\r\n state.line.id,\r\n geojson.geometry.coordinates[\r\n state.direction === 'forward'\r\n ? geojson.geometry.coordinates.length - 2\r\n : 1\r\n ],\r\n `${\r\n state.direction === 'forward'\r\n ? geojson.geometry.coordinates.length - 2\r\n : 1\r\n }`,\r\n false\r\n )\r\n );\r\n\r\n // displays the line as it is drawn\r\n display(geojson);\r\n\r\n const displayMeasurements = getDisplayMeasurements(geojson);\r\n\r\n // create custom feature for the current pointer position\r\n const currentVertex = {\r\n type: 'Feature',\r\n properties: {\r\n meta: 'currentPosition',\r\n radiusMetric: displayMeasurements.metric,\r\n radiusStandard: displayMeasurements.standard,\r\n parent: state.line.id,\r\n },\r\n geometry: {\r\n type: 'Point',\r\n coordinates: geojson.geometry.coordinates[1],\r\n },\r\n };\r\n display(currentVertex);\r\n\r\n return null;\r\n};\r\n\r\nexport default RadiusMode;\r\n","import MapboxDraw from '@mapbox/mapbox-gl-draw';\r\n\r\nimport DrawRectangle from './partials/DrawRectangle';\r\nimport RadiusMode from './partials/DrawRadius';\r\n\r\nexport const draw = new MapboxDraw({\r\n displayControlsDefault: false,\r\n modes: Object.assign(\r\n {\r\n draw_rectangle: DrawRectangle,\r\n draw_circle: RadiusMode,\r\n },\r\n MapboxDraw.modes\r\n ),\r\n});\r\n","import axios from 'axios';\r\nimport * as Sentry from '@sentry/browser';\r\n\r\n// const apiBaseUrl = 'https://gras-sendmail.azurewebsites.net/api/sendmail';\r\nconst apiBaseUrls = {\r\n // lead: 'http://localhost:7071/api/gras-leadgeneration',\r\n // lead:\r\n // 'https://dynamics-leads-service.azurewebsites.net/api/gras-leadgeneration',\r\n mail: 'https://dna-sendmail.azurewebsites.net/api/sendmail',\r\n};\r\n\r\nexport const sendContactInformation = async ({ baseUrl, body }) => {\r\n try {\r\n const endpoint = apiBaseUrls[baseUrl];\r\n console.log(endpoint);\r\n const response = await axios.post(endpoint, body, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (!response) throw Error(`Request rejected`);\r\n const { data } = response || {};\r\n\r\n return Promise.resolve(data);\r\n } catch (error) {\r\n console.error(error);\r\n Sentry.captureMessage(error);\r\n return Promise.reject(error);\r\n }\r\n};\r\n","import React from 'react';\r\nimport * as Sentry from '@sentry/browser';\r\nimport { useSnackbar } from 'notistack';\r\nimport { format } from 'date-fns';\r\nimport formatISO from 'date-fns/formatISO';\r\nimport { Box } from '@material-ui/core';\r\nimport Map from 'components/Map';\r\nimport Sidebar from 'components/Sidebar';\r\nimport SidebarControl from 'components/SidebarControl';\r\nimport DialogWindow from 'components/Sidebar/Dialogs/DialogWindow';\r\n\r\nimport { draw } from 'components/Map/MapboxDraw';\r\nimport { sendContactInformation } from 'data';\r\nimport { polygonArea } from 'data/utils';\r\nimport { useWindowDimensions } from 'data/utils';\r\nimport { AppContext } from 'App';\r\n\r\nexport const HomeContext = React.createContext();\r\n\r\nconst Home = () => {\r\n const {\r\n actions: { resetProducts, setArea, setShowConfirmation },\r\n state: { area, openDrawer, productDEM, productExtent, productFrequency },\r\n } = React.useContext(AppContext);\r\n\r\n const [zoomBounds, setZoomBounds] = React.useState();\r\n\r\n const { width } = useWindowDimensions();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [loading, setLoading] = React.useState(true);\r\n const [dialogue, setDialogue] = React.useState();\r\n\r\n const onStyleLoad = (map, loadEvent) => {\r\n map.addControl(draw);\r\n map.on('draw.create', createArea);\r\n map.on('draw.delete', deleteArea);\r\n map.on('draw.update', updateArea);\r\n\r\n setLoading(false);\r\n };\r\n\r\n const drawMode = shape => () => {\r\n // console.log('drawing', shape, draw);\r\n draw.deleteAll();\r\n switch (shape) {\r\n case 'polygon':\r\n enqueueSnackbar(`Draw ${shape} on map.`, { variant: 'info' });\r\n draw.changeMode('draw_polygon');\r\n break;\r\n case 'rectangle':\r\n enqueueSnackbar(`Draw ${shape} on map.`, { variant: 'info' });\r\n draw.changeMode('draw_rectangle');\r\n break;\r\n case 'clear':\r\n area &&\r\n enqueueSnackbar(`Previously selected area has been cleared.`, {\r\n variant: 'info',\r\n });\r\n resetProducts('all');\r\n break;\r\n default:\r\n draw.changeMode('draw_polygon');\r\n break;\r\n }\r\n };\r\n\r\n const handleSendMail = async details => {\r\n try {\r\n setLoading(true);\r\n const response = await sendContactInformation({\r\n baseUrl: 'mail',\r\n body: {\r\n ...details,\r\n application: 'floodmetrics',\r\n geometries: [area.coordinates],\r\n products: {\r\n flood_extent: await getProductDetails(productExtent),\r\n dem_floods: await getProductDetails(productDEM),\r\n flood_frequency: await getProductDetails(productFrequency),\r\n },\r\n request_date: formatISO(new Date(Date.now())),\r\n },\r\n });\r\n // await sendContactInformation({\r\n // baseUrl: 'lead',\r\n // body: {\r\n // companyname: details.company,\r\n // emailaddress1: details.email,\r\n // firstname: details.name,\r\n // lastname: '',\r\n // dhi_commentfromweb: {\r\n // message: details.message,\r\n // geometries: [area.coordinates],\r\n // products: {\r\n // flood_extent: await getProductDetails(productExtent),\r\n // dem_floods: await getProductDetails(productDEM),\r\n // flood_frequency: await getProductDetails(productFrequency),\r\n // },\r\n // },\r\n // dhi_marketingwebsourceurl: window.location.href,\r\n // subject: 'Flood Metrics Lead',\r\n // },\r\n // });\r\n if (!response) throw Error(`Request rejected`);\r\n enqueueSnackbar('Request sent! Thank you we will get back to you soon.', {\r\n variant: 'success',\r\n });\r\n setLoading(false);\r\n setShowConfirmation(true);\r\n } catch (error) {\r\n setLoading(false);\r\n enqueueSnackbar(\r\n 'Request failed! Try again later or contact us via the support tab on the right.',\r\n {\r\n variant: 'error',\r\n }\r\n );\r\n Sentry.captureMessage(error);\r\n console.error(error);\r\n }\r\n };\r\n\r\n const getProductDetails = async product => {\r\n const { dates, price, resolutionRange, months, years } = product;\r\n\r\n if (price[1] === null) return;\r\n\r\n if (product === productExtent) {\r\n return {\r\n dates: dates.map(({ date, price, resolution }) => {\r\n let str = '';\r\n if (date && date !== null) {\r\n str += `Date: ${format(date, 'dd MMM yyyy')}, `;\r\n if (resolution[0].checked) str += `${resolution[0].title}`;\r\n if (resolution[0].checked && resolution[1].checked) str += ` and `;\r\n if (resolution[1].checked) str += `${resolution[1].title}`;\r\n if (price[0])\r\n str += ` = €${price[0].toLocaleString()} - €${price[1].toLocaleString()}`;\r\n }\r\n if (!resolution[0].checked && !resolution[1].checked) str = '';\r\n return str;\r\n }),\r\n price: price[0] + ' - ' + price[1],\r\n };\r\n } else if (product === productDEM) {\r\n return {\r\n resolutions: resolutionRange.map(\r\n ({ res, sum }) =>\r\n sum.min !== null &&\r\n sum.min !== 0 &&\r\n `${res} meter resolution = €${sum.min} - €${sum.max}`\r\n ),\r\n price: `Total price: ${price[0]} - ${price[1]}`,\r\n };\r\n } else if (product === productFrequency) {\r\n return {\r\n years: years.map(year => ` ${year}`),\r\n months: Object.keys(months).filter(i => months[i] && i),\r\n price: price[0] + ' - ' + price[1],\r\n };\r\n }\r\n };\r\n\r\n const createArea = e => {\r\n if (draw.getMode() === 'draw_rectangle') {\r\n const coord = [\r\n e.features[0].geometry.coordinates[0][0],\r\n e.features[0].geometry.coordinates[0][2],\r\n ];\r\n setZoomBounds(coord);\r\n draw.deleteAll();\r\n } else {\r\n let obj = {\r\n coordinates: e.features[0],\r\n sqm: polygonArea(e.features[0]),\r\n };\r\n setArea({ ...obj });\r\n }\r\n };\r\n\r\n const deleteArea = e => {\r\n // console.log('delete', e);\r\n // const data = draw.getAll();\r\n setArea({ coordinates: null, sqm: null });\r\n };\r\n\r\n const updateArea = e => {\r\n // console.log('update', e);\r\n let obj = {\r\n coordinates: e.features[0],\r\n sqm: polygonArea(e.features[0]),\r\n };\r\n setArea({ ...obj });\r\n };\r\n\r\n return (\r\n <HomeContext.Provider\r\n value={{\r\n actions: {\r\n drawMode,\r\n handleSendMail,\r\n setDialogue,\r\n setShowConfirmation,\r\n },\r\n state: {\r\n loading,\r\n width,\r\n },\r\n }}\r\n >\r\n <div style={{ width: '100vw', height: window.innerHeight - 1 }}>\r\n {dialogue && (\r\n <DialogWindow\r\n product={dialogue}\r\n handleClose={() => setDialogue()}\r\n open={true}\r\n />\r\n )}\r\n\r\n {width > 600 ? (\r\n <Box display=\"flex\" height={1} width={1}>\r\n <Box flexGrow={1}>\r\n <Map\r\n onStyleLoad={onStyleLoad}\r\n mobile={false}\r\n zoomBounds={zoomBounds}\r\n />\r\n </Box>\r\n {openDrawer && (\r\n <Box\r\n width={360}\r\n style={{ borderLeft: '1px solid #DBE4E9' }}\r\n zIndex={1000}\r\n >\r\n <Sidebar />\r\n </Box>\r\n )}\r\n <Box\r\n width={37}\r\n style={{\r\n borderLeft: '1px solid #DBE4E9',\r\n boxSizing: 'border-box',\r\n }}\r\n zIndex={'tooltip'}\r\n >\r\n <SidebarControl mobile={false} />\r\n </Box>\r\n </Box>\r\n ) : (\r\n <Box display=\"flex\" flexDirection=\"column\" height={1} width={1}>\r\n <Box width={1} flexGrow={1}>\r\n <Map\r\n onStyleLoad={onStyleLoad}\r\n mobile={true}\r\n zoomBounds={zoomBounds}\r\n />\r\n </Box>\r\n {openDrawer && (\r\n <Box height={'50%'} width={1} zIndex={1000}>\r\n <Sidebar />\r\n </Box>\r\n )}\r\n <Box\r\n height={36}\r\n style={{ borderTop: '1px solid #DBE4E9' }}\r\n zIndex={'tooltip'}\r\n >\r\n <SidebarControl mobile={true} />\r\n </Box>\r\n </Box>\r\n )}\r\n </div>\r\n </HomeContext.Provider>\r\n );\r\n};\r\n\r\nexport default Home;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Layer, Source } from 'react-mapbox-gl';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { DemoContext } from 'Demo';\r\n\r\nconst DataLayer = () => {\r\n const {\r\n state: { location, products },\r\n } = React.useContext(DemoContext);\r\n\r\n const [url, setUrl] = useState();\r\n const { pathname } = useLocation();\r\n\r\n useEffect(() => {\r\n location === undefined ? setUrl() : updateRaster();\r\n // eslint-disable-next-line\r\n }, [location]);\r\n\r\n const updateRaster = () => {\r\n const urlParam = pathname.split('/')[2];\r\n const comp = products.find(prod => prod.category === urlParam);\r\n\r\n let tiles =\r\n 'https://bvzg0ogeii.execute-api.eu-central-1.amazonaws.com/development/singleband/floodmetrics/' +\r\n comp.locations[location].product +\r\n '/' +\r\n comp.locations[location].date +\r\n '/' +\r\n comp.band +\r\n '/{z}/{x}/{y}.png?colormap=' +\r\n comp.locations[location].colormap;\r\n\r\n if (comp.band === 'freq' && location === 0) {\r\n tiles = comp.locations[0].data;\r\n }\r\n setUrl({\r\n type: 'raster',\r\n tiles: [tiles],\r\n attribution:\r\n '<a href=\"https://sentinel.esa.int/web/sentinel/home\" target=\"blank\">' +\r\n 'Contains modified Copernicus Sentinel data ' +\r\n new Date().getFullYear() +\r\n ' ' +\r\n '</a>',\r\n tileSize: 256,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n {url && (\r\n <>\r\n <Source id=\"source_id\" tileJsonSource={url} />\r\n <Layer type=\"raster\" id=\"layer_id\" sourceId=\"source_id\" />\r\n </>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default DataLayer;\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport { Marker } from 'react-mapbox-gl';\r\nimport { DemoContext } from 'Demo';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport { Link, useLocation, useRouteMatch } from 'react-router-dom';\r\n\r\nconst markerStyle = makeStyles({\r\n marker: {\r\n width: 20,\r\n height: 20,\r\n cursor: 'pointer',\r\n borderRadius: '50%',\r\n transition: 'all .3s',\r\n '&:hover': {\r\n width: 24,\r\n height: 24,\r\n },\r\n },\r\n markerSmall: {\r\n width: 12,\r\n height: 12,\r\n '&:hover': {\r\n width: 16,\r\n height: 16,\r\n },\r\n },\r\n markerLarge: {\r\n width: 24,\r\n height: 24,\r\n '&:hover': {\r\n width: 28,\r\n height: 28,\r\n },\r\n },\r\n});\r\n\r\nconst ProductMarkers = () => {\r\n const {\r\n actions: { setLocation },\r\n state: { demoProductsExtent, demoProductsDEM, demoProductsFrequency },\r\n } = React.useContext(DemoContext);\r\n\r\n const classes = markerStyle();\r\n const { url } = useRouteMatch();\r\n const { pathname } = useLocation();\r\n const urlParam = pathname.split('/')[2];\r\n\r\n return (\r\n <>\r\n {demoProductsExtent &&\r\n demoProductsExtent.locations.length > 0 &&\r\n demoProductsExtent.locations.map(({ latLng, title }, i) => {\r\n const { category, color } = demoProductsExtent;\r\n return (\r\n <Marker coordinates={latLng} anchor=\"center\" key={i}>\r\n <Link to={`${url}/${category}`}>\r\n <div\r\n style={{ backgroundColor: color }}\r\n className={classnames({\r\n [classes.marker]: true,\r\n [classes.markerSmall]: urlParam !== undefined,\r\n [classes.markerLarge]: urlParam === category,\r\n })}\r\n onClick={() => setLocation(i)}\r\n />\r\n </Link>\r\n </Marker>\r\n );\r\n })}\r\n\r\n {demoProductsDEM &&\r\n demoProductsDEM.locations.length > 0 &&\r\n demoProductsDEM.locations.map(({ latLng, title }, i) => {\r\n const { category, color } = demoProductsDEM;\r\n return (\r\n <Marker coordinates={latLng} anchor=\"center\" key={i}>\r\n <Link to={`${url}/${category}`}>\r\n <div\r\n style={{ backgroundColor: color }}\r\n className={classnames({\r\n [classes.marker]: true,\r\n [classes.markerSmall]: urlParam !== undefined,\r\n [classes.markerLarge]: urlParam === category,\r\n })}\r\n onClick={() => setLocation(i)}\r\n />\r\n </Link>\r\n </Marker>\r\n );\r\n })}\r\n\r\n {demoProductsFrequency &&\r\n demoProductsFrequency.locations.length > 0 &&\r\n demoProductsFrequency.locations.map(({ latLng, title }, i) => {\r\n const { category, color } = demoProductsFrequency;\r\n return (\r\n <Marker coordinates={latLng} anchor=\"center\" key={i}>\r\n <Link to={`${url}/${category}`}>\r\n <div\r\n style={{ backgroundColor: color }}\r\n className={classnames({\r\n [classes.marker]: true,\r\n [classes.markerSmall]: urlParam !== undefined,\r\n [classes.markerLarge]: urlParam === category,\r\n })}\r\n onClick={() => setLocation(i)}\r\n />\r\n </Link>\r\n </Marker>\r\n );\r\n })}\r\n </>\r\n );\r\n};\r\n\r\nexport default ProductMarkers;\r\n","import React from 'react';\r\nimport ReactMapboxGl from 'react-mapbox-gl';\r\nimport BaseLayerControl from 'components/Map/DHIMapControl/partials/BaseLayerControl';\r\nimport DataLayer from './partials/DataLayer';\r\nimport Loader from 'components/Loader';\r\nimport ProductMarkers from './partials/ProductMarkers';\r\nimport ResetViewControl from 'components/Map/DHIMapControl/partials/ResetViewControl';\r\nimport ZoomControl from 'components/Map/DHIMapControl/partials/ZoomControl';\r\nimport { Box } from '@material-ui/core';\r\nimport { DemoContext } from 'Demo';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nimport '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';\r\n\r\nconst { token: accessToken, styles } = require('config.json');\r\n\r\nconst Mapbox = ReactMapboxGl({\r\n accessToken,\r\n minZoom: 2,\r\n maxZoom: 15,\r\n});\r\n\r\nconst DemoMap = ({ mobile }) => {\r\n const {\r\n state: { location, products },\r\n } = React.useContext(DemoContext);\r\n\r\n const DEFAULT_BOUNDS = [\r\n [90, 72],\r\n [-40, -32],\r\n ];\r\n const [zoom, setZoom] = React.useState([2]);\r\n const [bounds, setBounds] = React.useState(DEFAULT_BOUNDS);\r\n const [loading, setLoading] = React.useState(true);\r\n const [satelliteBase, setSatelliteBase] = React.useState(false);\r\n\r\n const { pathname } = useLocation();\r\n const resetView = () => setBounds([...DEFAULT_BOUNDS]);\r\n\r\n React.useEffect(() => {\r\n const urlParam = pathname.split('/')[2];\r\n if (location >= 0 && urlParam) {\r\n products.forEach(prod => {\r\n if (prod.locations[location] && prod.category === urlParam) {\r\n setBounds(prod.locations[location].bounds);\r\n }\r\n });\r\n } else if (location === undefined) setBounds(DEFAULT_BOUNDS);\r\n // eslint-disable-next-line\r\n }, [location, pathname]);\r\n\r\n // const [viewport, setViewport] = React.useState();\r\n\r\n // const urlParam = pathname.split('/')[2];\r\n // const comp = products.find(prod => prod.category === urlParam);\r\n\r\n return (\r\n <>\r\n <Loader isLoading={loading} isMajorLoading={loading} />\r\n <Mapbox\r\n className=\"mapboxgl-map\"\r\n containerStyle={{ height: '100%', width: '100%' }}\r\n fitBounds={bounds}\r\n onStyleLoad={() => setLoading(false)}\r\n onZoomEnd={map => setZoom([map.getZoom()])}\r\n // onClick={map => console.log(map.getBounds())}\r\n // onViewportChange={setViewport}\r\n style={satelliteBase ? styles.satellite : styles.light}\r\n zoom={zoom}\r\n >\r\n {mobile !== true && (\r\n <Box\r\n width={36}\r\n height={'100vh'}\r\n display=\"flex\"\r\n alignItems=\"center\"\r\n flexDirection=\"column\"\r\n justifyContent=\"center\"\r\n >\r\n <BaseLayerControl\r\n satelliteBase={satelliteBase}\r\n setSatelliteBase={setSatelliteBase}\r\n />\r\n <ZoomControl setZoom={setZoom} zoom={zoom} />\r\n <ResetViewControl resetView={resetView} />\r\n </Box>\r\n )}\r\n\r\n <DataLayer />\r\n <ProductMarkers />\r\n </Mapbox>\r\n </>\r\n );\r\n};\r\n\r\nexport default DemoMap;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\n// import FloodExtentLegend from 'assets/images/flood_extent_legend.jpg';\r\nimport moment from 'moment';\r\n\r\n// const legendRange = ['0%', '20%', '40%', '60%', '80%', '100%'];\r\n\r\n// const colorbarStyle = {\r\n// width: '100%',\r\n// height: 8,\r\n// borderRadius: 4,\r\n// };\r\n\r\n// const tableStyle = {\r\n// width: '100%',\r\n// fontSize: 10,\r\n// textAlign: 'center',\r\n// };\r\n\r\nconst legendStyle = {\r\n width: '100%',\r\n height: 8,\r\n borderRadius: 4,\r\n backgroundColor: '#0B4566',\r\n marginTop: 6,\r\n};\r\n\r\nconst FloodExtentProduct = ({ title, date }) => {\r\n return (\r\n <Box display=\"block\" width={'100%'}>\r\n <Typography variant=\"subtitle1\">\r\n {moment(date, 'YYYYMMDD').format('Do MMM YYYY')} in {title}\r\n </Typography>\r\n <Box pt={1}>\r\n <Grid container spacing={0}>\r\n <Grid item xs={6}>\r\n <div style={legendStyle}></div>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Typography\r\n variant=\"body2\"\r\n style={{ paddingLeft: 16, marginBottom: 0 }}\r\n >\r\n Flooded area\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n {/* <img src={FloodExtentLegend} alt=\"\" style={colorbarStyle} /> */}\r\n </Box>\r\n {/* {legendRange && (\r\n <table style={tableStyle}>\r\n <tbody>\r\n <tr>\r\n {legendRange.map(v => (\r\n <td key={v}>{v}</td>\r\n ))}\r\n </tr>\r\n </tbody>\r\n </table>\r\n )} */}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default FloodExtentProduct;\r\n","import React from 'react';\r\nimport Box from '@material-ui/core/Box';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport FloodExtent from '../ProductComponents/FloodExtent';\r\n// import { Link } from 'react-router-dom';\r\nimport { Grid } from '@material-ui/core';\r\nimport { DemoContext } from 'Demo';\r\n\r\nimport { defaultProducts } from 'components/Sidebar/Info/defaultProducts';\r\n\r\nconst DemoFloodExtent = ({ match }) => {\r\n const {\r\n state: { demoProductsExtent, location },\r\n actions: { setLocation },\r\n } = React.useContext(DemoContext);\r\n\r\n const handleChange = i => {\r\n i === location ? setLocation() : setLocation(i);\r\n };\r\n\r\n return (\r\n <Box>\r\n <Typography variant=\"h6\">Description of Flood extent</Typography>\r\n <Box px={2} pt={2} pb={0}>\r\n {defaultProducts[0].description}\r\n </Box>\r\n\r\n {demoProductsExtent.locations &&\r\n demoProductsExtent.locations.length > 0 && (\r\n <Typography variant=\"h6\">Use cases for Flood extent</Typography>\r\n )}\r\n\r\n {demoProductsExtent.locations &&\r\n demoProductsExtent.locations.length > 0 &&\r\n demoProductsExtent.locations.map(({ date, title }, i) => (\r\n <Accordion\r\n key={i}\r\n expanded={location === i}\r\n onChange={() => handleChange(i)}\r\n >\r\n <AccordionSummary\r\n expandIcon={\r\n <ExpandMoreIcon style={{ width: 16, color: '#0B4566' }} />\r\n }\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n {/* <Link to={'/locationTitle'}> */}\r\n <Grid spacing={0} container>\r\n <Grid item xs={12}>\r\n <Typography variant=\"h5\" style={{ fontSize: 12 }}>\r\n {title}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n {/* </Link> */}\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <FloodExtent title={title} date={date} />\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DemoFloodExtent;\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport FloodFrequencyLegend from 'assets/images/flood_frequency_legend.jpg';\r\n\r\nconst legendRange = ['0%', '20%', '40%', '60%', '80%', '100%'];\r\nconst colorbarStyle = {\r\n width: '100%',\r\n height: 8,\r\n borderRadius: 4,\r\n};\r\n\r\nconst tableStyle = {\r\n width: '100%',\r\n fontSize: 10,\r\n textAlign: 'center',\r\n};\r\n\r\nconst FloodFrequency = ({ title, date }) => {\r\n return (\r\n <Box display=\"block\">\r\n <Typography variant=\"subtitle1\">\r\n Surface water frequency for {title} during 2016 - 2020\r\n </Typography>\r\n\r\n <img src={FloodFrequencyLegend} alt=\"\" style={colorbarStyle} />\r\n\r\n {legendRange && (\r\n <table style={tableStyle}>\r\n <tbody>\r\n <tr>\r\n {legendRange.map(v => (\r\n <td key={v}>{v}</td>\r\n ))}\r\n </tr>\r\n </tbody>\r\n </table>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default FloodFrequency;\r\n","import React from 'react';\r\nimport Box from '@material-ui/core/Box';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport FloodFrequency from '../ProductComponents/FloodFrequency';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { Grid } from '@material-ui/core';\r\nimport { DemoContext } from 'Demo';\r\nimport { defaultProducts } from 'components/Sidebar/Info/defaultProducts';\r\n\r\nconst DemoFloodFrequency = () => {\r\n const {\r\n state: { demoProductsFrequency, location },\r\n actions: { setLocation },\r\n } = React.useContext(DemoContext);\r\n\r\n const handleChange = i => {\r\n i === location ? setLocation() : setLocation(i);\r\n };\r\n\r\n return (\r\n <Box>\r\n <Typography variant=\"h6\">\r\n Description of Surface water frequency\r\n </Typography>\r\n <Box px={2} pt={2} pb={0}>\r\n {defaultProducts[2].description}\r\n </Box>\r\n\r\n {demoProductsFrequency.locations &&\r\n demoProductsFrequency.locations.length > 0 && (\r\n <Typography variant=\"h6\">\r\n Use cases for Surface water frequency\r\n </Typography>\r\n )}\r\n\r\n {demoProductsFrequency.locations &&\r\n demoProductsFrequency.locations.length > 0 &&\r\n demoProductsFrequency.locations.map(({ date, title }, i) => (\r\n <Accordion\r\n key={i}\r\n expanded={location === i}\r\n onChange={() => handleChange(i)}\r\n >\r\n <AccordionSummary\r\n expandIcon={\r\n <ExpandMoreIcon style={{ width: 16, color: '#0B4566' }} />\r\n }\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n <Grid spacing={0} container>\r\n <Grid item xs={12}>\r\n <Typography variant=\"h5\" style={{ fontSize: 12 }}>\r\n {title}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <FloodFrequency date={date} title={title} />\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DemoFloodFrequency;\r\n","import React from 'react';\r\nimport Box from '@material-ui/core/Box';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { Grid } from '@material-ui/core';\r\nimport { DemoContext } from 'Demo';\r\nimport { defaultProducts } from 'components/Sidebar/Info/defaultProducts';\r\n\r\nconst DemoDEM = () => {\r\n const {\r\n state: { demoProductsDEM, location },\r\n actions: { setLocation },\r\n } = React.useContext(DemoContext);\r\n\r\n const handleChange = i => {\r\n i === location ? setLocation() : setLocation(i);\r\n };\r\n\r\n return (\r\n <Box>\r\n <Typography variant=\"h6\">\r\n Description of Digital Elevation Models\r\n </Typography>\r\n <Box px={2} pt={2} pb={0}>\r\n {defaultProducts[1].description}\r\n </Box>\r\n\r\n {demoProductsDEM.location && demoProductsDEM.location.length > 0 && (\r\n <Typography variant=\"h6\">\r\n Use cases for Digital Elevation Models\r\n </Typography>\r\n )}\r\n\r\n {demoProductsDEM.location &&\r\n demoProductsDEM.location.length > 0 &&\r\n demoProductsDEM.location.map(({ component: Component, title }, i) => (\r\n <Accordion\r\n key={i}\r\n expanded={location === i}\r\n onChange={() => handleChange(i)}\r\n >\r\n <AccordionSummary\r\n expandIcon={\r\n <ExpandMoreIcon style={{ width: 16, color: '#0B4566' }} />\r\n }\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n <Grid spacing={0} container>\r\n <Grid item xs={12}>\r\n <Typography variant=\"h5\" style={{ fontSize: 12 }}>\r\n {title}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n {/* <Component /> */}\r\n <Typography variant=\"subtitle1\">\r\n The {title} component goes here, when the data is available\r\n </Typography>\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DemoDEM;\r\n","import React from 'react';\r\nimport { Box, Typography } from '@material-ui/core';\r\n\r\nimport { Button, makeStyles } from '@material-ui/core';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst linkStyle = makeStyles({\r\n button: {\r\n backgroundColor: '#fff',\r\n border: '2px solid #00A4EC',\r\n borderRadius: 4,\r\n padding: '8px 16px',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 164, 236, 0.08)',\r\n },\r\n },\r\n link: {\r\n color: '#00A4EC',\r\n textDecoration: 'none',\r\n },\r\n});\r\n\r\nexport default function DemoIntroduction() {\r\n const classes = linkStyle();\r\n\r\n return (\r\n <Box>\r\n <Typography variant=\"h6\">\r\n Introduction to the demonstration site\r\n </Typography>\r\n <Box p={2}>\r\n <Typography variant=\"subtitle1\">\r\n Welcome to the Flood Metrics demonstration site\r\n </Typography>\r\n <Typography variant=\"body2\" paragraph>\r\n On this site you can visualise and explore examples of the data\r\n products offered through Flood Metrics.\r\n </Typography>\r\n <Typography variant=\"body2\" paragraph>\r\n Click on the icons in the map to the left, or click on the product\r\n names above, to start exploring the demonstration data.\r\n </Typography>\r\n </Box>\r\n\r\n <Typography variant=\"h6\">Find your own data</Typography>\r\n <Box p={2}>\r\n <Typography variant=\"body2\" paragraph>\r\n If you are interested in data for your own region:\r\n </Typography>\r\n <Button className={classes.button}>\r\n <Link to={'/'} className={classes.link}>\r\n Visit flood metrics\r\n </Link>\r\n </Button>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport { Grid, Typography } from '@material-ui/core';\r\nimport { NavLink, useLocation } from 'react-router-dom';\r\nimport { DemoContext } from 'Demo';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nimport 'styles/scrollbar.css';\r\n\r\nconst useStyles = makeStyles(() => ({\r\n icon: {\r\n width: 20,\r\n height: 20,\r\n borderRadius: '50%',\r\n margin: '4px auto',\r\n },\r\n iconLink: {\r\n textDecoration: 'none',\r\n },\r\n iconLinkActive: {\r\n backgroundColor: '#F2F5F7',\r\n },\r\n iconTitle: {\r\n color: '#93C4D4',\r\n fontSize: 10,\r\n },\r\n iconWrapper: {\r\n textAlign: 'center',\r\n padding: '4px 0px',\r\n '&:hover': {\r\n backgroundColor: '#F2F5F7',\r\n },\r\n },\r\n}));\r\n\r\nconst DemoTabControl = ({ match }) => {\r\n const {\r\n actions: { setLocation },\r\n state: { products },\r\n } = React.useContext(DemoContext);\r\n\r\n const classes = useStyles();\r\n const { pathname } = useLocation();\r\n const urlParam = pathname.split('/')[2];\r\n const orderedProducts = [products[1], products[0], products[2]];\r\n\r\n const handleChange = selection => {\r\n urlParam !== selection && setLocation();\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\">Select your product category</Typography>\r\n <Grid container spacing={0}>\r\n {orderedProducts &&\r\n orderedProducts.map((prod, i) => (\r\n <Grid\r\n key={i}\r\n item\r\n xs={12 / products.length}\r\n className={classnames({\r\n [classes.iconWrapper]: true,\r\n [classes.iconLinkActive]: urlParam === prod.category,\r\n })}\r\n >\r\n <NavLink\r\n to={`${match.url}/${prod.category}`}\r\n className={classes.iconLink}\r\n onClick={() => handleChange(prod.category)}\r\n >\r\n <div\r\n style={{ backgroundColor: prod.color }}\r\n className={classes.icon}\r\n />\r\n <Typography className={classes.iconTitle}>\r\n {prod.title}\r\n </Typography>\r\n </NavLink>\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </>\r\n );\r\n};\r\n\r\nexport default DemoTabControl;\r\n","import React from 'react';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport { titleStyle } from 'styles/global';\r\nimport DHILogo from 'assets/images/DHI_Logo_Blue.png';\r\n\r\nexport default function DemoTitle() {\r\n const classes = titleStyle();\r\n return (\r\n <Box className={classes.container}>\r\n <Grid container spacing={0} justify=\"space-between\">\r\n <Grid item xs={10}>\r\n <Typography className={classes.titleMain}>\r\n Flood Metrics Showcase\r\n </Typography>\r\n </Grid>\r\n <Grid item>\r\n <img src={DHILogo} alt={'DHI Logo'} style={{ width: 36 }} />\r\n </Grid>\r\n </Grid>\r\n\r\n <Typography className={classes.subTitle}>\r\n Overview of various flood data products\r\n </Typography>\r\n </Box>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Box, Button, Typography, makeStyles } from '@material-ui/core';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst linkStyle = makeStyles({\r\n button: {\r\n backgroundColor: '#fff',\r\n border: '2px solid #00A4EC',\r\n borderRadius: 4,\r\n padding: '8px 16px',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 164, 236, 0.08)',\r\n },\r\n },\r\n link: {\r\n color: '#00A4EC',\r\n textDecoration: 'none',\r\n },\r\n});\r\n\r\nconst LinkToFloodMetrics = () => {\r\n const classes = linkStyle();\r\n return (\r\n <Box>\r\n <Typography variant=\"h6\">Find your own data</Typography>\r\n <Box px={2} py={1}>\r\n <Typography variant=\"body2\" style={{ marginBottom: 0 }}>\r\n If you are interested in data for your own region:\r\n </Typography>\r\n <Box pt={1}>\r\n <Button className={classes.button}>\r\n <Link to={'/'} className={classes.link}>\r\n Visit flood metrics\r\n </Link>\r\n </Button>\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default LinkToFloodMetrics;\r\n","import React from 'react';\r\nimport DemoFloodExtent from './partials/DemoFloodExtent';\r\nimport DemoFloodFrequency from './partials/DemoFloodFrequency';\r\nimport DemoDEM from './partials/DemoDEM';\r\nimport DemoIntroduction from './partials/DemoIntroduction';\r\nimport DemoTabControl from './partials/DemoTabControl';\r\nimport DemoTitle from './partials/DemoTitle';\r\nimport LinkToFloodMetrics from './partials/LinkToFloodMetrics';\r\nimport { Paper } from '@material-ui/core';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport 'styles/scrollbar.css';\r\n\r\nconst DemoSidebar = ({ match }) => {\r\n const { path } = match;\r\n\r\n return (\r\n <Paper\r\n style={{\r\n overflowX: 'hidden',\r\n overflowY: 'auto',\r\n height: '100%',\r\n }}\r\n >\r\n <DemoTitle />\r\n\r\n {/* Navbar with buttons */}\r\n <DemoTabControl match={match} />\r\n\r\n {/* { Components} */}\r\n <Switch>\r\n <Route exact path={`${path}/`} component={DemoIntroduction} />\r\n <Route\r\n path={`${path}/floodextent`}\r\n render={() => <DemoFloodExtent match={match} />}\r\n />\r\n <Route path={`${path}/dem`} render={() => <DemoDEM match={match} />} />\r\n <Route\r\n path={`${path}/floodfrequency`}\r\n render={() => <DemoFloodFrequency match={match} />}\r\n />\r\n </Switch>\r\n\r\n {/* Button component to Flood metrics */}\r\n <Route\r\n path={[`${path}/dem`, `${path}/floodextent`, `${path}/floodfrequency`]}\r\n component={LinkToFloodMetrics}\r\n />\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default DemoSidebar;\r\n","import React from 'react';\r\nimport { Paper, IconButton } from '@material-ui/core';\r\nimport { iconStyle } from 'styles/global';\r\nimport { ReactComponent as LeftIcon } from '@mike/mike-shared-frontend/media/icons/Left.svg';\r\nimport { ReactComponent as RightIcon } from '@mike/mike-shared-frontend/media/icons/Right.svg';\r\nimport { ReactComponent as UpIcon } from '@mike/mike-shared-frontend/media/icons/Up.svg';\r\nimport { ReactComponent as DownIcon } from '@mike/mike-shared-frontend/media/icons/Down.svg';\r\nimport { DemoContext } from 'Demo';\r\n\r\nconst DemoSidebarControl = ({ mobile }) => {\r\n const {\r\n actions: { setOpenDrawer },\r\n state: { openDrawer },\r\n } = React.useContext(DemoContext);\r\n\r\n const classes = iconStyle();\r\n\r\n return (\r\n <Paper\r\n style={{\r\n overflowY: 'auto',\r\n height: '100%',\r\n }}\r\n >\r\n <IconButton\r\n className={classes.button}\r\n onClick={() => setOpenDrawer(!openDrawer)}\r\n >\r\n {openDrawer === true && mobile !== true && (\r\n <RightIcon className={classes.icon} />\r\n )}\r\n {openDrawer === false && mobile !== true && (\r\n <LeftIcon className={classes.icon} />\r\n )}\r\n {openDrawer === true && mobile === true && (\r\n <DownIcon className={classes.icon} />\r\n )}\r\n {openDrawer === false && mobile === true && (\r\n <UpIcon className={classes.icon} />\r\n )}\r\n </IconButton>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default DemoSidebarControl;\r\n","import React from 'react';\r\n\r\nimport DemoMap from 'components/DemoMap';\r\nimport DemoSidebar from 'components/DemoSidebar';\r\nimport DemoSidebarControl from 'components/DemoSidebar/DemoSidebarControl';\r\nimport { Box } from '@material-ui/core';\r\nimport { useWindowDimensions, kazakhstanColormap } from 'data/utils';\r\nexport const DemoContext = React.createContext();\r\n\r\nconst computeColormap = range => {\r\n let str = '{';\r\n for (let i = range[0]; i <= range[1]; i++) {\r\n str += '\"' + i + '\":\"0B4566\"';\r\n if (i < range[1]) str += ',';\r\n }\r\n str += '}';\r\n return str;\r\n};\r\n\r\nconst demoExtent = {\r\n band: 'extent',\r\n category: 'floodextent',\r\n color: '#0B4566',\r\n title: 'Flood extent',\r\n locations: [\r\n {\r\n product: 'amposta_spain',\r\n title: 'Amposta, Spain',\r\n date: '20200121',\r\n colormap:\r\n 'explicit&explicit_color_map=' +\r\n encodeURIComponent(computeColormap([90, 100])),\r\n\r\n bounds: [\r\n [1.0463462919315134, 40.91179531193018],\r\n [0.29887914484405087, 40.42948508451508],\r\n ],\r\n latLng: { lng: 0.3800295946825827, lat: 40.859107579671985 },\r\n zoom: 10,\r\n },\r\n {\r\n product: 'martaban',\r\n title: 'Martaban, Myanmar',\r\n date: '20190809',\r\n colormap:\r\n 'explicit&explicit_color_map=' +\r\n encodeURIComponent(computeColormap([90, 100])),\r\n\r\n bounds: [\r\n [97.87636892545873, 16.738168086031976],\r\n [97.24830836995329, 16.225805679743658],\r\n ],\r\n latLng: { lng: 97.29475138373965, lat: 16.667201079590725 },\r\n zoom: 10,\r\n },\r\n {\r\n product: 'milano',\r\n title: 'Milano, Italy',\r\n date: '20191125',\r\n colormap:\r\n 'explicit&explicit_color_map=' +\r\n encodeURIComponent(computeColormap([90, 100])),\r\n\r\n bounds: [\r\n [9.890699376740912, 45.58670093250248],\r\n [8.148537896670064, 44.53987361693805],\r\n ],\r\n latLng: { lng: 8.283054987393399, lat: 45.30795953881133 },\r\n zoom: 10,\r\n },\r\n {\r\n product: 'murcia_spain',\r\n title: 'Murcia, Spain',\r\n date: '20190916',\r\n colormap:\r\n 'explicit&explicit_color_map=' +\r\n encodeURIComponent(computeColormap([90, 100])),\r\n\r\n bounds: [\r\n [-0.42214367030345556, 38.378757713144836],\r\n [-1.7552561606561028, 37.48422871097863],\r\n ],\r\n latLng: { lng: -1.4693627432393441, lat: 38.3577478913235 },\r\n zoom: 10,\r\n },\r\n {\r\n product: 'shoalhaven',\r\n title: 'Shoalhaven, Australia',\r\n date: '20200210',\r\n colormap:\r\n 'explicit&explicit_color_map=' +\r\n encodeURIComponent(computeColormap([90, 100])),\r\n\r\n bounds: [\r\n [150.88296865622283, -34.74095497581216],\r\n [150.42868968991309, -35.05792546605908],\r\n ],\r\n latLng: { lng: 150.48112630154736, lat: -34.737853383485515 },\r\n zoom: 10,\r\n },\r\n ],\r\n};\r\n\r\nconst demoDEM = {\r\n band: '??dem??',\r\n category: 'dem',\r\n color: '#10E7DC',\r\n title: 'Digital elevation model',\r\n locations: [],\r\n};\r\n\r\nconst demoFrequency = {\r\n band: 'freq',\r\n category: 'floodfrequency',\r\n color: '#00A4EC',\r\n title: 'Surface water frequency',\r\n locations: [\r\n {\r\n product: 'kazakhstan',\r\n title: 'Kazakhstan',\r\n date: '20191113',\r\n data:\r\n 'https://adrdk4vcyk.execute-api.eu-central-1.amazonaws.com/development/singleband/kazakhstan/water-frequency-multiannual/20181231/freq-30m/{z}/{x}/{y}.png?colormap=explicit&explicit_color_map=' +\r\n encodeURIComponent(JSON.stringify(kazakhstanColormap)),\r\n colormap: 'gnbu_r',\r\n bounds: [\r\n [62.94628347354117, 55.3533138473598],\r\n [70.93444818970147, 48.47251791036095],\r\n ],\r\n latLng: { lng: 65, lat: 52 },\r\n zoom: 10,\r\n },\r\n {\r\n product: 'malaysia',\r\n title: 'Malaysia',\r\n date: '20200514',\r\n colormap: 'gnbu',\r\n bounds: [\r\n [115.98288376021338, 5.677455513088518],\r\n [115.20503278721498, 5.060835231352613],\r\n ],\r\n latLng: { lng: 115.31848119349547, lat: 5.556168744742251 },\r\n zoom: 10,\r\n },\r\n {\r\n product: 'tanzania',\r\n title: 'Tanzania',\r\n date: '20200520',\r\n colormap: 'gnbu',\r\n bounds: [\r\n [38.5849400484945, -7.110735476043132],\r\n [37.707728795733914, -8.469046902815592],\r\n ],\r\n latLng: { lng: 37.77313915543675, lat: -7.584532441008093 },\r\n zoom: 10,\r\n },\r\n {\r\n product: 'thailand',\r\n title: 'Thailand',\r\n date: '20191028',\r\n colormap: 'gnbu_r',\r\n bounds: [\r\n [107.81843464214018, 21.35574635167474],\r\n [95.03933916795307, 10.929464246400627],\r\n ],\r\n latLng: { lng: 97.1181776597424, lat: 20.74229214830156 },\r\n zoom: 10,\r\n },\r\n ],\r\n};\r\n\r\nconst Demo = ({ match }) => {\r\n const { width } = useWindowDimensions();\r\n const [openDrawer, setOpenDrawer] = React.useState(true);\r\n const [location, setLocation] = React.useState();\r\n\r\n const demoProductsDEM = demoDEM;\r\n const demoProductsExtent = demoExtent;\r\n const demoProductsFrequency = demoFrequency;\r\n const products = [demoProductsDEM, demoProductsExtent, demoProductsFrequency];\r\n\r\n React.useEffect(() => {\r\n window.dispatchEvent(new Event('resize'));\r\n }, [openDrawer]);\r\n\r\n return (\r\n <DemoContext.Provider\r\n value={{\r\n state: {\r\n demoProductsDEM,\r\n demoProductsExtent,\r\n demoProductsFrequency,\r\n location,\r\n openDrawer,\r\n products,\r\n },\r\n actions: { setLocation, setOpenDrawer },\r\n }}\r\n >\r\n <div style={{ width: '100vw', height: window.innerHeight }}>\r\n {width > 600 ? (\r\n <Box display=\"flex\" height={1} width={1}>\r\n <Box flexGrow={1}>\r\n <DemoMap mobile={false} />\r\n </Box>\r\n {openDrawer && (\r\n <Box\r\n width={360}\r\n style={{ borderLeft: '1px solid #DBE4E9' }}\r\n zIndex={'tooltip'}\r\n >\r\n <DemoSidebar match={match} />\r\n </Box>\r\n )}\r\n <Box\r\n width={37}\r\n style={{ borderLeft: '1px solid #DBE4E9' }}\r\n zIndex={'tooltip'}\r\n >\r\n <DemoSidebarControl />\r\n </Box>\r\n </Box>\r\n ) : (\r\n <Box display=\"flex\" flexDirection=\"column\" height={1} width={1}>\r\n <Box width={1} flexGrow={1}>\r\n <DemoMap mobile={true} />\r\n </Box>\r\n {openDrawer && (\r\n <Box height={'50%'} width={1} zIndex={'tooltip'}>\r\n <DemoSidebar match={match} />\r\n </Box>\r\n )}\r\n <Box\r\n height={36}\r\n style={{ borderTop: '1px solid #DBE4E9' }}\r\n zIndex={'tooltip'}\r\n >\r\n <DemoSidebarControl mobile={true} />\r\n </Box>\r\n </Box>\r\n )}\r\n </div>\r\n </DemoContext.Provider>\r\n );\r\n};\r\n\r\nexport default Demo;\r\n","import React from 'react';\r\nimport _ from 'lodash';\r\nimport VolumeDisclaimerAccordion from '../VolumeDisclaimers/VolumeDisclaimerAccordion';\r\nimport { Box, Checkbox, Grid, Typography } from '@material-ui/core';\r\nimport { AppContext } from 'App';\r\nimport { checkboxStyle } from 'styles/global';\r\nimport DHITheme from 'styles/theme';\r\n\r\nconst { primary } = DHITheme.palette;\r\nconst priceStyle = {\r\n textAlign: 'right',\r\n color: `${primary.main}`,\r\n};\r\n\r\nvar initiated = false;\r\n\r\nexport default function DEMCheckboxes({ expanded }) {\r\n const {\r\n state: { area, productDEM },\r\n actions: { setProductDEM },\r\n } = React.useContext(AppContext);\r\n\r\n const { priceCap, resolutionRange } = productDEM;\r\n const classes = checkboxStyle();\r\n\r\n React.useEffect(() => {\r\n if (expanded && !initiated) initiate(); // eslint-disable-next-line\r\n }, [expanded]);\r\n\r\n const initiate = async () => {\r\n let obj = _.cloneDeep(productDEM);\r\n obj.resolutionRange[3].checked = true;\r\n obj.resolutionRange[3].sum = await compPrice(obj.resolutionRange[3]);\r\n setProductDEM({ ...obj });\r\n initiated = true;\r\n };\r\n\r\n React.useEffect(() => {\r\n area.sqm && recalculatePrices(); // eslint-disable-next-line\r\n }, [area.sqm]);\r\n\r\n const recalculatePrices = async () => {\r\n let obj = _.cloneDeep(productDEM);\r\n\r\n for (let i = 0; i < obj.resolutionRange.length; i++) {\r\n if (obj.resolutionRange[i].checked)\r\n obj.resolutionRange[i].sum = await compPrice(obj.resolutionRange[i]);\r\n }\r\n setProductDEM({ ...obj });\r\n };\r\n\r\n const handleChange = async i => {\r\n let obj = _.cloneDeep(productDEM);\r\n\r\n obj.resolutionRange[i].checked = !obj.resolutionRange[i].checked;\r\n\r\n if (obj.resolutionRange[i].checked)\r\n obj.resolutionRange[i].sum = await compPrice(obj.resolutionRange[i]);\r\n else obj.resolutionRange[i].sum = { min: null, max: null };\r\n\r\n setProductDEM({ ...obj });\r\n };\r\n\r\n const compPrice = async obj => {\r\n let min = obj.sqmPrice.min * Math.pow(area.sqm, obj.pow);\r\n let max = obj.sqmPrice.max * Math.pow(area.sqm, obj.pow);\r\n\r\n if (min >= priceCap) min = priceCap;\r\n if (max >= priceCap) max = priceCap;\r\n\r\n return { min: parseInt(min * 0.1) * 10, max: parseInt(max * 0.1) * 10 };\r\n };\r\n\r\n return (\r\n <Box>\r\n {resolutionRange &&\r\n resolutionRange.map(({ checked, res, sum }, i) => (\r\n <Box\r\n key={i}\r\n width={1}\r\n style={{ cursor: 'pointer' }}\r\n onClick={() => handleChange(i)}\r\n >\r\n <Grid container style={{ padding: '2px 0px' }}>\r\n <Grid item xs={1}>\r\n <Checkbox\r\n checked={checked}\r\n checkedIcon={\r\n <span className={([classes.icon], [classes.checkedIcon])} />\r\n }\r\n icon={<span className={[classes.icon]} />}\r\n style={{ width: 16, height: 16 }}\r\n />\r\n </Grid>\r\n <Grid item xs={3} style={{ paddingTop: 4 }}>\r\n <Typography\r\n variant=\"body2\"\r\n style={{ color: `${primary.main}` }}\r\n >\r\n {res + ' meter'}\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={8} style={{ paddingTop: 4 }}>\r\n {checked && sum.max >= priceCap ? (\r\n <VolumeDisclaimerAccordion />\r\n ) : (\r\n <Typography variant=\"body2\" style={priceStyle}>\r\n {checked && sum.max && sum.max < priceCap\r\n ? `€${sum.min.toLocaleString()} - €${sum.max.toLocaleString()}`\r\n : ' -'}\r\n </Typography>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Checkbox, Grid, Typography } from '@material-ui/core';\r\nimport { checkboxStyle } from 'styles/global';\r\n\r\nconst textStyle = {\r\n paddingTop: 4,\r\n};\r\n\r\nexport default function ResolutionSelector({ handleCheckbox, date, index }) {\r\n const classes = checkboxStyle();\r\n\r\n return (\r\n <Grid container spacing={0} style={{ padding: '8px 0px 0px' }}>\r\n <Grid item xs={8}>\r\n <Typography variant=\"body2\" style={textStyle}>\r\n Select resolution:\r\n </Typography>\r\n </Grid>\r\n\r\n {date.resolution.map(({ checked, title }, i) => (\r\n <Grid\r\n item\r\n xs={2}\r\n key={i}\r\n onClick={() => handleCheckbox(i)}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n <Grid container>\r\n <Grid item xs={4}>\r\n <Checkbox\r\n checked={checked}\r\n checkedIcon={\r\n <span className={([classes.icon], [classes.checkedIcon])} />\r\n }\r\n icon={<span className={[classes.icon]} />}\r\n style={{ width: 16, height: 16 }}\r\n />\r\n </Grid>\r\n <Grid item xs={5}>\r\n <Typography variant=\"body2\" style={textStyle}>\r\n {title}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n ))}\r\n </Grid>\r\n );\r\n}\r\n","import React from 'react';\r\nimport _ from 'lodash';\r\nimport ResolutionSelector from './ResolutionSelector';\r\nimport VolumeDisclaimerAccordion from '../VolumeDisclaimers/VolumeDisclaimerAccordion';\r\nimport { KeyboardDatePicker } from '@material-ui/pickers';\r\nimport { ReactComponent as CalendarIcon } from '@mike/mike-shared-frontend/media/icons/Calendar.svg';\r\nimport { AppContext } from 'App';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\n\r\nexport default function DateSelector({ date, index }) {\r\n const {\r\n state: { area, productExtent },\r\n actions: { setProductExtent },\r\n } = React.useContext(AppContext);\r\n\r\n const { priceCap } = productExtent;\r\n\r\n React.useEffect(() => {\r\n calcNewPrices(); // eslint-disable-next-line\r\n }, [area]);\r\n\r\n const calcNewPrices = async () => {\r\n let obj = productExtent;\r\n obj.dates[index].price = await calcPrice(obj.dates[index]);\r\n setProductExtent({ ...obj });\r\n };\r\n\r\n const handleDateChange = async _date => {\r\n let obj = _.cloneDeep(productExtent);\r\n obj.dates[index].date = _date;\r\n obj.dates[index].price = await calcPrice(obj.dates[index]);\r\n setProductExtent({ ...obj });\r\n };\r\n\r\n const handleCheckbox = async i => {\r\n let obj = productExtent;\r\n obj.dates[index].resolution[i].checked = !obj.dates[index].resolution[i]\r\n .checked;\r\n obj.dates[index].price = await calcPrice(obj.dates[index]);\r\n setProductExtent({ ...obj });\r\n };\r\n\r\n const calcPrice = async _obj => {\r\n if (_obj.date === null) return [null, null];\r\n\r\n let min = 0;\r\n let max = 0;\r\n\r\n const discount =\r\n index > 0 && productExtent.dates[0].price[0] > 0 ? 0.95 : 1;\r\n\r\n _obj.resolution.forEach(({ checked, formula }) => {\r\n if (checked) {\r\n min += formula.low(area.sqm) * discount;\r\n max += formula.high(area.sqm) * discount;\r\n }\r\n });\r\n\r\n if (max > priceCap) return [priceCap, priceCap];\r\n else return [parseInt(min * 0.1) * 10, parseInt(max * 0.1) * 10];\r\n };\r\n\r\n return (\r\n <Box style={{ borderBottom: '1px solid #DBE4E9' }} pb={1}>\r\n <Grid container spacing={0} style={{ paddingTop: 8 }}>\r\n <Grid item xs={6}>\r\n <KeyboardDatePicker\r\n variant=\"inline\"\r\n placeholder={'Select date'}\r\n value={\r\n productExtent.dates[index].date && productExtent.dates[index].date\r\n }\r\n onChange={_date => handleDateChange(_date)}\r\n disableToolbar\r\n // initialFocusedDate={focusDate}\r\n format=\"dd/MM/yyyy\"\r\n keyboardIcon={<CalendarIcon style={{ width: 24, height: 24 }} />}\r\n />\r\n </Grid>\r\n <Grid item xs={6} style={{ paddingTop: 8 }}>\r\n {date.price[1] >= priceCap ? (\r\n <VolumeDisclaimerAccordion />\r\n ) : (\r\n <Typography variant=\"body2\" style={{ textAlign: 'right' }}>\r\n {date.price[0] === null || date.price[0] === 0\r\n ? ' - '\r\n : `€${date.price[0].toLocaleString()} - €${date.price[1].toLocaleString()}`}\r\n </Typography>\r\n )}\r\n </Grid>\r\n </Grid>\r\n\r\n {date.date !== null && (\r\n <ResolutionSelector\r\n date={date}\r\n handleCheckbox={handleCheckbox}\r\n index={index}\r\n />\r\n )}\r\n </Box>\r\n );\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport DateSelector from './DateSelector';\r\n\r\nimport _ from 'lodash';\r\nimport { ReactComponent as PlusIcon } from '@mike/mike-shared-frontend/media/icons/Plus.svg';\r\nimport { ReactComponent as MinusIcon } from '@mike/mike-shared-frontend/media/icons/Minus.svg';\r\nimport { productStyle } from 'styles/global';\r\nimport { Box, Grid, Typography } from '@material-ui/core';\r\nimport { defaultProducts } from 'components/Sidebar/Info/defaultProducts';\r\nimport { AppContext } from 'App';\r\nimport { HomeContext } from 'Home';\r\n\r\nconst iconStyle = {\r\n width: 24,\r\n height: 24,\r\n cursor: 'pointer',\r\n};\r\n\r\nexport default function FloodExtent() {\r\n const {\r\n state: { productExtent },\r\n actions: { resetProducts, setProductExtent },\r\n } = React.useContext(AppContext);\r\n\r\n const {\r\n actions: { setDialogue },\r\n } = React.useContext(HomeContext);\r\n\r\n const classes = productStyle();\r\n const floodExtentProduct = defaultProducts[0];\r\n const { priceCap } = productExtent;\r\n\r\n useEffect(() => {\r\n let _price = calcSum();\r\n let obj = _.cloneDeep(productExtent);\r\n\r\n if (obj.price[0] !== _price[0] && obj.price[1] !== _price[1]) {\r\n obj.price = _price;\r\n setProductExtent({ ...obj });\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [productExtent]);\r\n\r\n const calcSum = () => {\r\n const min = productExtent.dates\r\n .filter(date => date.date)\r\n .reduce((acc, item) => acc + item.price[0], 0);\r\n\r\n const max = productExtent.dates\r\n .filter(date => date.date)\r\n .reduce((acc, item) => acc + item.price[1], 0);\r\n\r\n if (max > priceCap) return [priceCap, priceCap];\r\n else return [min, max];\r\n };\r\n\r\n const appendDates = () => {\r\n let obj = productExtent;\r\n obj.dates.push(_.cloneDeep(productExtent.dateTemplate));\r\n setProductExtent({ ...obj });\r\n };\r\n\r\n const removeDates = () => {\r\n let obj = productExtent;\r\n obj.dates.splice(obj.dates.length - 1, 1);\r\n setProductExtent({ ...obj });\r\n };\r\n\r\n return (\r\n <Box>\r\n <Typography variant=\"body2\" paragraph>\r\n Assess the extent of flooding’s in near real time or for any historic\r\n flooding event (depending on availability of archived imagery). Our\r\n operational flood extent maps can be acquired few hours after a flooding\r\n has occurred and delivered in less than 24-48 hours globally (different\r\n solutions apply). Select the date(s) for your required flood maps below.{' '}\r\n <span\r\n onClick={() => setDialogue(floodExtentProduct)}\r\n className={classes.readMore}\r\n >\r\n Read more.\r\n </span>\r\n </Typography>\r\n\r\n <Typography variant=\"subtitle1\">Request data for period(s):</Typography>\r\n {productExtent.dates.map((date, index) => (\r\n <DateSelector key={index} date={date} index={index} />\r\n ))}\r\n\r\n {productExtent && productExtent.dates && productExtent.dates.length > 0 && (\r\n <Box>\r\n <Grid container>\r\n <Grid item xs={10} />\r\n <Grid item xs={1}>\r\n {productExtent.dates.length > 1 ? (\r\n <MinusIcon onClick={removeDates} style={iconStyle} />\r\n ) : productExtent.dates[0].date !== null ? (\r\n <MinusIcon\r\n onClick={() => resetProducts(productExtent.id)}\r\n style={iconStyle}\r\n />\r\n ) : null}\r\n </Grid>\r\n\r\n <Grid item xs={1}>\r\n <PlusIcon onClick={appendDates} style={iconStyle} />\r\n </Grid>\r\n </Grid>\r\n\r\n {/* \r\n <Grid container spacing={0}>\r\n <Grid item xs={2}>\r\n <Typography\r\n onClick={() => resetProducts(productExtent.id)}\r\n className={classes.clearDays}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n Clear data\r\n </Typography>\r\n </Grid>\r\n\r\n <Grid item xs={10}>\r\n \r\n <Typography className={classes.disclaimer}>\r\n {'Minimum order for ' +\r\n 1234 +\r\n 'm² is: ' +\r\n 567 +\r\n 'km² / €' +\r\n 890}\r\n </Typography>\r\n </Grid>\r\n </Grid> */}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport { Box, Paper, Typography } from '@material-ui/core';\r\nimport './Datepicker.css';\r\n\r\nexport default function MonthPicker({\r\n calcPrice,\r\n productFrequency,\r\n setProductFrequency,\r\n}) {\r\n const { months } = productFrequency;\r\n\r\n const handleChange = async month => {\r\n let obj = productFrequency;\r\n obj.months[month] = !obj.months[month];\r\n obj.price = await calcPrice(obj.years, obj.months);\r\n setProductFrequency({ ...obj });\r\n };\r\n\r\n return (\r\n <Box>\r\n <Box>\r\n <Typography variant=\"subtitle1\" style={{ padding: '16px 0px 0px' }}>\r\n Include:\r\n </Typography>\r\n </Box>\r\n <Box>\r\n {months &&\r\n Object.keys(months).map(monthKey => {\r\n return (\r\n <Paper\r\n key={monthKey}\r\n className=\"datepicker__month\"\r\n onClick={() => handleChange(monthKey)}\r\n >\r\n <div\r\n className={classnames({\r\n datepicker__checkbox: true,\r\n datepicker__checkboxSelected: months[monthKey],\r\n })}\r\n />\r\n <p\r\n className={classnames({\r\n datepicker__monthTitle: true,\r\n datepicker__monthTitleSelected: months[monthKey],\r\n })}\r\n >\r\n {monthKey}\r\n </p>\r\n </Paper>\r\n );\r\n })}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Checkbox, Grid, Typography } from '@material-ui/core';\r\nimport { checkboxStyle } from 'styles/global';\r\nimport DHITheme from 'styles/theme';\r\n\r\nconst { primary } = DHITheme.palette;\r\n\r\nexport default function DatepickerCheckbox({\r\n calcPrice,\r\n expanded,\r\n productFrequency,\r\n setProductFrequency,\r\n}) {\r\n const classes = checkboxStyle();\r\n const { yearRange, years } = productFrequency;\r\n\r\n const handleChange = async year => {\r\n let obj = productFrequency;\r\n if (obj.years && obj.years.includes(year) === false) obj.years.push(year);\r\n else obj.years.splice(obj.years.indexOf(year), 1);\r\n\r\n obj.price = await calcPrice(obj.years, obj.months);\r\n\r\n setProductFrequency({ ...obj });\r\n };\r\n\r\n return (\r\n <Grid container>\r\n {yearRange &&\r\n yearRange.map(year => (\r\n <Grid\r\n item\r\n xs={3}\r\n container\r\n key={year}\r\n onClick={() => handleChange(year)}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n <Grid item xs={3}>\r\n <Checkbox\r\n checked={years ? years.includes(year) : false}\r\n checkedIcon={\r\n <span className={([classes.icon], [classes.checkedIcon])} />\r\n }\r\n icon={<span className={[classes.icon]} />}\r\n style={{ width: 16, height: 16 }}\r\n />\r\n </Grid>\r\n <Grid item xs={9}>\r\n <Typography\r\n variant=\"body2\"\r\n style={{\r\n paddingTop: 4,\r\n color: `${primary.main}`,\r\n }}\r\n >\r\n {year}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n ))}\r\n </Grid>\r\n );\r\n}\r\n","import React from 'react';\r\nimport _ from 'lodash';\r\nimport MonthPicker from './MonthPicker';\r\nimport YearPicker from './YearPicker';\r\nimport { productStyle } from 'styles/global';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport { defaultProducts } from 'components/Sidebar/Info/defaultProducts';\r\nimport { AppContext } from 'App';\r\nimport { HomeContext } from 'Home';\r\n\r\nvar initiated = false;\r\n\r\nexport default function FloodFrequency({ expanded }) {\r\n const {\r\n state: { area, productFrequency },\r\n actions: { setProductFrequency },\r\n } = React.useContext(AppContext);\r\n\r\n const {\r\n actions: { setDialogue },\r\n } = React.useContext(HomeContext);\r\n\r\n const frequencyProduct = defaultProducts[2];\r\n const classes = productStyle();\r\n const { priceCap } = productFrequency;\r\n\r\n React.useEffect(() => {\r\n if (expanded && !initiated) initiate(); // eslint-disable-next-line\r\n }, [expanded]);\r\n\r\n React.useEffect(() => {\r\n if (initiated) updatePrice(); // eslint-disable-next-line\r\n }, [area]);\r\n\r\n const initiate = async () => {\r\n let obj = _.cloneDeep(productFrequency);\r\n const last3years = _.range(\r\n new Date().getFullYear() - 2,\r\n new Date().getFullYear() + 1\r\n );\r\n obj.years = last3years;\r\n obj.price = await calcPrice(last3years, obj.months);\r\n setProductFrequency({ ...obj });\r\n initiated = true;\r\n };\r\n\r\n const updatePrice = async () => {\r\n let obj = productFrequency;\r\n obj.price = await calcPrice(obj.years, obj.months);\r\n setProductFrequency({ ...obj });\r\n };\r\n\r\n const calcPrice = async (_years, _months) => {\r\n const totalYears = _years ? _years.length : 0;\r\n const totalMonths = Object.keys(_months).filter(v => _months[v]).length;\r\n\r\n const discountFactor = totalMonths === 12 ? 0.9 : 1;\r\n\r\n const min =\r\n 10 * Math.pow(area.sqm, 0.36) * totalMonths * totalYears * discountFactor;\r\n const max = min * 1.3;\r\n\r\n if (max >= priceCap) return [priceCap, priceCap];\r\n else return [parseInt(min * 0.1) * 10, parseInt(max * 0.1) * 10];\r\n };\r\n\r\n return (\r\n <Box>\r\n <Typography variant=\"body2\" paragraph>\r\n Surface water frequency data provides information about the frequency of\r\n water observations, at any given area of interest. Our surface water\r\n frequency maps are customized to your specific requirements for\r\n periodicity and seasonality. Use the panel below to select the years and\r\n months to be included.{' '}\r\n <span\r\n onClick={() => setDialogue(frequencyProduct)}\r\n className={classes.readMore}\r\n >\r\n Read more.\r\n </span>\r\n </Typography>\r\n <Typography variant=\"subtitle1\">\r\n Get surface water frequency for period:\r\n </Typography>\r\n\r\n <YearPicker\r\n calcPrice={calcPrice}\r\n productFrequency={productFrequency}\r\n setProductFrequency={setProductFrequency}\r\n />\r\n <MonthPicker\r\n calcPrice={calcPrice}\r\n productFrequency={productFrequency}\r\n setProductFrequency={setProductFrequency}\r\n />\r\n {/* <Grid container spacing={0}>\r\n <Grid item xs={2}>\r\n <Typography\r\n onClick={() => resetProducts(productFrequency.id)}\r\n className={classes.clearDays}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n Clear data\r\n </Typography>\r\n </Grid>\r\n\r\n <Grid item xs={10}></Grid>\r\n </Grid> */}\r\n </Box>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\n\r\nimport _ from 'lodash';\r\nimport Home from 'Home';\r\nimport Demo from 'Demo';\r\n\r\nimport DEMFloods from 'components/Sidebar/ProductList/DEMFloods';\r\nimport FloodExtent from 'components/Sidebar/ProductList/FloodExtent';\r\nimport FloodFrequency from 'components/Sidebar/ProductList/FloodFrequency';\r\n\r\nexport const AppContext = React.createContext();\r\n\r\nconst calcExtent1mtrLow = sqkm => 100 * Math.pow(sqkm, 0.51) + 20 * sqkm;\r\nconst calcExtent1mtrHigh = sqkm => 100 * Math.pow(sqkm, 0.51) + 30 * sqkm;\r\n\r\nconst calcExtent10mtrLow = sqkm => 84 * Math.pow(sqkm, 0.51);\r\nconst calcExtent10mtrHigh = sqkm => 84 * Math.pow(sqkm, 0.51) * 1.3;\r\n\r\nconst dateTemplate = {\r\n date: null,\r\n resolution: [\r\n {\r\n title: '1mtr',\r\n checked: false,\r\n formula: { low: calcExtent1mtrLow, high: calcExtent1mtrHigh },\r\n },\r\n {\r\n title: '10mtr',\r\n checked: true,\r\n formula: { low: calcExtent10mtrLow, high: calcExtent10mtrHigh },\r\n },\r\n ],\r\n price: [null, null],\r\n};\r\n\r\nconst defaultExtent = {\r\n component: FloodExtent,\r\n id: 'productExtent',\r\n title: 'Flood Extent',\r\n dates: [dateTemplate],\r\n dateTemplate: _.cloneDeep(dateTemplate),\r\n price: [null, null],\r\n priceCap: 75000,\r\n};\r\n\r\nconst defaultDEM = {\r\n component: DEMFloods,\r\n id: 'productDEM',\r\n title: 'Digital Elevation Model',\r\n resolution: null,\r\n price: [null, null],\r\n priceCap: 75000,\r\n resolutionRange: [\r\n {\r\n res: 1,\r\n sum: { min: null, max: null },\r\n sqmPrice: { min: 66.683, max: 90.932 },\r\n pow: 0.9509,\r\n checked: false,\r\n },\r\n {\r\n res: 4,\r\n sum: { min: null, max: null },\r\n sqmPrice: { min: 29.514, max: 53.125 },\r\n pow: 0.9666,\r\n checked: false,\r\n },\r\n {\r\n res: 8,\r\n sqmPrice: { min: 9.14, max: 17.138 },\r\n sum: { min: null, max: null },\r\n pow: 0.9747,\r\n checked: false,\r\n },\r\n {\r\n res: 12,\r\n sqmPrice: { min: 7.998, max: 12.568 },\r\n sum: { min: null, max: null },\r\n pow: 0.9747,\r\n checked: false,\r\n },\r\n ],\r\n};\r\n\r\nconst defaultFrequency = {\r\n component: FloodFrequency,\r\n id: 'productFrequency',\r\n title: 'Surface Water Frequency',\r\n months: {\r\n Jan: true,\r\n Feb: true,\r\n Mar: true,\r\n Apr: true,\r\n May: true,\r\n Jun: true,\r\n Jul: true,\r\n Aug: true,\r\n Sep: true,\r\n Oct: true,\r\n Nov: true,\r\n Dec: true,\r\n },\r\n priceCap: 75000,\r\n price: [null, null],\r\n years: null,\r\n yearRange: _.range(1997, new Date().getFullYear() + 1),\r\n};\r\n\r\nconst App = () => {\r\n const [area, setArea] = useState({ coordinates: null, sqm: null });\r\n const [productExtent, setProductExtent] = useState(\r\n _.cloneDeep(defaultExtent)\r\n );\r\n const [productDEM, setProductDEM] = useState(_.cloneDeep(defaultDEM));\r\n const [productFrequency, setProductFrequency] = useState(\r\n _.cloneDeep(defaultFrequency)\r\n );\r\n\r\n const [openDrawer, setOpenDrawer] = useState(true);\r\n const [sidebarComponent, setSidebarComponent] = useState(1);\r\n const [showConfirmation, setShowConfirmation] = useState(false);\r\n const [showQuote, setShowQuote] = useState(false);\r\n const [sum, setSum] = useState([null, null]);\r\n\r\n React.useEffect(() => {\r\n console.log('# react app environment:', process.env.NODE_ENV);\r\n window.dispatchEvent(new Event('resize'));\r\n }, [openDrawer]);\r\n\r\n React.useEffect(() => {\r\n let min = 0;\r\n let max = 0;\r\n\r\n min += productDEM.price[0] !== null ? productDEM.price[0] : 0;\r\n max += productDEM.price[1] !== null ? productDEM.price[1] : 0;\r\n\r\n min += productExtent.price[0] !== null ? productExtent.price[0] : 0;\r\n max += productExtent.price[1] !== null ? productExtent.price[1] : 0;\r\n\r\n min += productFrequency.price[0] !== null ? productFrequency.price[0] : 0;\r\n max += productFrequency.price[1] !== null ? productFrequency.price[1] : 0;\r\n\r\n setSum([min, max]);\r\n }, [productDEM, productExtent, productFrequency]);\r\n\r\n const resetProducts = id => {\r\n if (id === 'all') {\r\n setProductExtent(_.cloneDeep(defaultExtent));\r\n setProductDEM(_.cloneDeep(defaultDEM));\r\n setProductFrequency(_.cloneDeep(defaultFrequency));\r\n setArea({ coordinates: null, sqm: null });\r\n }\r\n if (id === 'productExtent') setProductExtent(_.cloneDeep(defaultExtent));\r\n if (id === 'productDEM') setProductDEM(_.cloneDeep(defaultDEM));\r\n if (id === 'productFrequency')\r\n setProductFrequency(_.cloneDeep(defaultFrequency));\r\n };\r\n\r\n return (\r\n <AppContext.Provider\r\n value={{\r\n state: {\r\n area,\r\n openDrawer,\r\n productDEM,\r\n productExtent,\r\n productFrequency,\r\n showConfirmation,\r\n showQuote,\r\n sidebarComponent,\r\n sum,\r\n },\r\n actions: {\r\n resetProducts,\r\n setArea,\r\n setOpenDrawer,\r\n setProductDEM,\r\n setProductExtent,\r\n setProductFrequency,\r\n setShowConfirmation,\r\n setShowQuote,\r\n setSidebarComponent,\r\n },\r\n }}\r\n >\r\n <Switch>\r\n <Route exact path=\"/\" component={Home} />\r\n <Route path=\"/showcase\" component={Demo} />\r\n </Switch>\r\n </AppContext.Provider>\r\n );\r\n};\r\n\r\nexport default App;\r\n","import React, { useEffect } from 'react';\r\nimport DEMcheckboxes from './DEMcheckboxes';\r\nimport { productStyle } from 'styles/global';\r\nimport { Box, Typography } from '@material-ui/core';\r\nimport { AppContext } from 'App';\r\nimport { HomeContext } from 'Home';\r\nimport { defaultProducts } from 'components/Sidebar/Info/defaultProducts';\r\n\r\nimport 'nouislider/distribute/nouislider.css';\r\nimport 'styles/slider.css';\r\n\r\nexport default function DEM({ expanded }) {\r\n const {\r\n state: { area, productDEM },\r\n actions: { setProductDEM },\r\n } = React.useContext(AppContext);\r\n\r\n const {\r\n actions: { setDialogue },\r\n } = React.useContext(HomeContext);\r\n\r\n const DEMproduct = defaultProducts[1];\r\n const { priceCap, resolution, resolutionRange } = productDEM;\r\n const classes = productStyle();\r\n\r\n useEffect(() => {\r\n updatePrice(); // eslint-disable-next-line\r\n }, [area, resolutionRange]);\r\n\r\n const calcPrice = () => {\r\n const priceMin = resolutionRange\r\n .filter(res => res.checked)\r\n .reduce((acc, item) => acc + item.sum.min, 0);\r\n\r\n const priceMax = resolutionRange\r\n .filter(res => res.checked)\r\n .reduce((acc, item) => acc + item.sum.max, 0);\r\n\r\n if (priceMax >= priceCap) return [priceCap, priceCap];\r\n else return [priceMin, priceMax];\r\n };\r\n\r\n const updatePrice = () => {\r\n let obj = productDEM;\r\n obj.price = calcPrice(resolution);\r\n setProductDEM({ ...obj });\r\n };\r\n\r\n return (\r\n <Box>\r\n <Typography variant=\"body2\" paragraph>\r\n Digital Elevation Models (DEM) are a basic requirement for flood\r\n inundation models. We provide updated and tailormade DEM’s, delivered in\r\n any ready-to-use GIS format, for any location in the world. Use the tick\r\n boxes below to select your preferred DEM product(s), depending on your\r\n requirements for the spatial resolution.{' '}\r\n <span\r\n onClick={() => setDialogue(DEMproduct)}\r\n className={classes.readMore}\r\n >\r\n Read more.\r\n </span>\r\n </Typography>\r\n <Typography variant=\"subtitle1\">Choose resolution(s)</Typography>\r\n <Box pt={1} pr={1}>\r\n <DEMcheckboxes expanded={expanded} />\r\n </Box>\r\n\r\n {/* <Grid container spacing={0}>\r\n <Grid item xs={2}>\r\n <Typography\r\n onClick={() => resetProducts(productDEM.id)}\r\n className={classes.clearDays}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n Clear data\r\n </Typography>\r\n </Grid>\r\n </Grid> */}\r\n </Box>\r\n );\r\n}\r\n","import { createBrowserHistory } from 'history';\r\nexport default createBrowserHistory();\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport * as Sentry from '@sentry/browser';\r\nimport LandingPage from './containers/Landingpage';\r\nimport IEnotification from './containers/IEnotification.js';\r\nimport { Router, Route, Switch } from 'react-router-dom';\r\nimport { ThemeProvider, withStyles } from '@material-ui/core';\r\nimport { SnackbarProvider } from 'notistack';\r\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport './index.css';\r\nimport 'typeface-roboto';\r\nimport DHITheme from './styles/theme';\r\nimport App from './App';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport history from './data/history';\r\n\r\nprocess.env.NODE_ENV === 'proudction' &&\r\n Sentry.init({\r\n dsn:\r\n 'https://b052f6441fe94b4288d0cfed39ca9ba1@o377546.ingest.sentry.io/5210792',\r\n });\r\n\r\nconst CustomSnackbarProvider = withStyles({\r\n variantSuccess: { backgroundColor: '#61C051' },\r\n variantError: { backgroundColor: '#FD3F75' },\r\n variantWarning: { backgroundColor: '#FFC20A' },\r\n variantInfo: { backgroundColor: '#00A4EC' },\r\n})(SnackbarProvider);\r\n\r\nconst isIE = /*@cc_on!@*/ false || !!document.documentMode;\r\n\r\nReactDOM.render(\r\n <>\r\n {isIE ? (\r\n <IEnotification />\r\n ) : (\r\n <Router history={history}>\r\n <ThemeProvider theme={DHITheme}>\r\n <CustomSnackbarProvider>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Switch>\r\n <Route exact path=\"/home\">\r\n <LandingPage />\r\n </Route>\r\n <Route path=\"/\">\r\n <App />\r\n </Route>\r\n </Switch>\r\n </MuiPickersUtilsProvider>\r\n </CustomSnackbarProvider>\r\n </ThemeProvider>\r\n </Router>\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","module.exports = __webpack_public_path__ + \"static/media/product_dem.39233419.jpg\";","module.exports = __webpack_public_path__ + \"static/media/product_flood_extent.a609e070.png\";","module.exports = __webpack_public_path__ + \"static/media/product_flood_frequency.26865122.jpg\";"],"sourceRoot":""}