{"version":3,"sources":["assets/images/DHI_Logo_Dark.png","assets/images/DHI_Logo_Blue.png","react-auth0-spa.js","data/history.js","serviceWorker.js","styles/theme.js","styles/mixins.js","components/Loader/Loader.js","components/Loader/styles.js","styles/global.js","components/Map/DHIZoomControl.js","components/Map/SearchControl.js","components/Map/Map.js","components/Navigation/partials/MenuArea/styles.js","components/Navigation/partials/MenuArea/ProfileMenu.js","components/Navigation/partials/MenuArea/MenuArea.js","components/Logo/Logo.js","components/Logo/styles.js","components/Navigation/Navigation.js","components/Navigation/styles.js","components/Timeseries/partials/TimeseriesGraph.js","components/Timeseries/partials/TimeseriesLegend.js","components/Timeseries/partials/TimeseriesSlider.js","components/Timeseries/partials/defaultTimeseries.js","components/Timeseries/Timeseries.js","components/Sidebar/partials/Info/partials/About/About.js","components/Sidebar/partials/Info/partials/Contact/Contact.js","components/Sidebar/partials/Info/partials/Disclaimer/Disclaimer.js","components/Sidebar/partials/Info/partials/FAQ/FAQ.js","components/Sidebar/partials/Info/partials/Privacy/Privacy.js","components/Sidebar/partials/Info/partials/Privacy/styles.js","components/Sidebar/partials/Info/partials/Terms/Terms.js","components/Sidebar/partials/Info/Info.js","components/Sidebar/partials/Tool/Tool.js","components/Sidebar/Sidebar.js","components/SidebarControl/SidebarControl.js","data/index.js","App.js","index.js"],"names":["module","exports","DEFAULT_REDIRECT_CALLBACK","window","history","replaceState","document","title","location","pathname","Auth0Context","React","createContext","useAuth0","useContext","createBrowserHistory","Boolean","hostname","match","DHITheme","createMuiTheme","palette","primary","main","secondary","grey","medium","light","flexLayout","display","flexDirection","flex","typography","h4","color","fontSize","fontWeight","h6","p","subtitle1","body1","body2","marginBottom","drawerColor","drawerWidth","overrides","MuiButton","root","textTransform","padding","containedSecondary","backgroundColor","MuiCardContent","paddingBottom","MuiCheckbox","MuiSvgIcon","width","MuiExpansionPanel","margin","MuiExpansionPanelDetails","borderBottom","MuiExpansionPanelSummary","content","minHeight","MuiFormControlLabel","marginLeft","marginRight","opacity","label","paddingLeft","MuiIconButton","MuiPaper","rounded","borderRadius","elevation1","boxShadow","elevation4","height","MuiToolbar","regular","directionRow","directionColumn","justifySpaceBetween","justifyContent","justifyCenter","alignCenter","alignItems","enhancer","compose","withStyles","minorLoading","position","top","zIndex","majorLoading","withTheme","classes","isLoading","isMajorLoading","className","CircularProgress","size","thickness","LinearProgress","iconStyle","makeStyles","icon","border","boxSizing","background","checkedIcon","backgroundImage","button","activeIcon","fill","DHIZoomControl","setZoom","zoom","Box","style","left","IconButton","onClick","Plus","Minus","SearchControl","accessToken","setCenter","useState","searchbar","toggleSearchbar","Grid","container","item","Search","mapboxApiAccessToken","viewport","onSelected","latitude","center","longitude","hideOnSelect","queryParams","country","initialInputValue","require","token","styles","geolocateStyle","dk_municipalities","Map","bitmap","parcel","setParcel","pitch","bearing","setViewport","tooltip","setTooltip","handleViewport","transitionDuration","transitionInterpolator","FlyToInterpolator","transitionEasing","easeCubicInOut","bitmapLayer","BitmapLayer","visible","id","bounds","image","tintColor","transparentColor","geoLayer","GeoJsonLayer","data","pickable","stroked","filled","extruded","lineWidthScale","lineWidthMinPixels","getFillColor","getLineColor","getRadius","getLineWidth","getElevation","info","object","properties","onHover","parcelLayer","mapStyle","lightparcels","onViewportChange","features","filter","feature","layer","includes","console","log","length","geometry","type","lngLat","error","mapOptions","customAttribution","Date","getFullYear","layers","viewState","positionOptions","enableHighAccuracy","trackUserLocation","coordinate","closeButton","closeOnClick","onClose","anchor","NAME_2","NAME_1","buttonsArea","menuItem","nameTag","linkItem","lineHeight","textDecoration","withRouter","logout","handleCloseMenu","handleListKeyDown","openMenu","Paper","elevation","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","Typography","component","variant","Divider","MenuItem","marginTop","noWrap","ListItemIcon","minWidth","user","setOpenMenu","anchorRef","useRef","e","current","contains","target","key","preventDefault","prevOpen","useEffect","focus","email","ref","aria-controls","undefined","aria-haspopup","Popper","open","anchorEl","role","transition","disablePortal","TransitionProps","placement","Grow","transformOrigin","Avatar","MaterialAvatar","Logo","dark","rest","alt","src","BlueLogo","DarkLogo","theme","appBar","drawer","menuButton","navBar","navButton","hide","grow","flexGrow","link","textAlignCenter","textAlign","isAuthenticated","loginWithPopup","logoutWithSnackbar","AppBar","xs","Toolbar","disableGutters","to","pl","Button","TimeseriesGraph","timeseriesTypes","AppContext","state","loading","timeseriesData","actions","setBitmap","updateLegend","setLegendContent","arg","dataKeys","activePayload","forEach","load","push","dataKey","keys","payload","w","direction","justify","right","onMouseMove","domain","tickFormatter","tickItem","dateFormat","format","replace","stroke","tick","map","enabled","TimeseriesLegend","legendData","updateTimeseriesData","spacing","date","index","unit","cursor","value","toFixed","formatValue","TimeseriesSlider","updateRange","selectedRange","timeseriesDates","pt","px","pb","behaviour","connect","disabled","onChange","val","parsed","v","_date","parse","fdate","findIndex","obj","handleChange","range","min","max","start","step","tooltips","isNaN","parseInt","from","Number","defaultTimeseriesTypes","dot","strokeWidth","Timeseries","setTimeseriesType","space","borderTop","borderLeft","setTypes","_index","elt","About","Link","href","Contact","py","Disclaimer","FAQ","noSpacing","gutterBottom","Terms","panels","Privacy","Info","expanded","setExpanded","panel","Component","ExpansionPanel","isExpanded","ExpansionPanelSummary","expandIcon","ExpansionPanelDetails","Tool","Card","CardContent","fullWidth","Sidebar","activeTab","overflowY","icons","InfoIcon","LayerIcon","SidebarControl","handleToggleDrawer","setTab","openDrawer","Right","Left","classnames","fetchTimeseries","query","a","axios","get","response","Error","Promise","resolve","reject","App","enqueueSnackbar","useSnackbar","setLoading","setOpenDrawer","openTimeseries","setOpenTimeseries","setTimeseriesData","setTimeseriesDates","setRange","setLegendData","handleDates","coordinates","points","queryDates","_dates","defaultRange","handleTimeseries","queryArea","queryData","mean","std","Provider","defaultDateRange","_args","_val","flexWrap","m","flexShrink","CustomSnackbarProvider","variantSuccess","variantError","variantWarning","variantInfo","SnackbarProvider","ReactDOM","render","ThemeProvider","children","onRedirectCallback","initOptions","setIsAuthenticated","setUser","auth0Client","setAuth0","popupOpen","setPopupOpen","createAuth0Client","auth0FromHook","search","handleRedirectCallback","appState","getUser","initAuth0","params","getIdTokenClaims","loginWithRedirect","getTokenSilently","getTokenWithPopup","client_id","config","clientId","targetUrl","redirect_uri","origin","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.10b78f0d.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGMAAAA9CAYAAAC5v9cSAAAAAXNSR0IArs4c6QAABIhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDpiZmVhZmVmYi0zMzQzLThjNGQtOTMyZC1iZjc0YzZlNmM5OTA8L3N0UmVmOmluc3RhbmNlSUQ+CiAgICAgICAgICAgIDxzdFJlZjpkb2N1bWVudElEPnhtcC5kaWQ6YmZlYWZlZmItMzM0My04YzRkLTkzMmQtYmY3NGM2ZTZjOTkwPC9zdFJlZjpkb2N1bWVudElEPgogICAgICAgICA8L3htcE1NOkRlcml2ZWRGcm9tPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOkFFRkI0QzM5MDE5NDExRTRCQUU1QjFENzFDRTdCQTE5PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOkFFRkI0QzM4MDE5NDExRTRCQUU1QjFE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\"","module.exports = \"data:image/png;base64,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\"","import React from 'react';\nimport createAuth0Client from '@auth0/auth0-spa-js';\nimport { useSnackbar } from 'notistack';\n\nconst DEFAULT_REDIRECT_CALLBACK = () =>\n  window.history.replaceState({}, document.title, window.location.pathname);\n\nexport const Auth0Context = React.createContext();\nexport const useAuth0 = () => React.useContext(Auth0Context);\nexport const Auth0Provider = ({\n  children,\n  onRedirectCallback = DEFAULT_REDIRECT_CALLBACK,\n  ...initOptions\n}) => {\n  const [isAuthenticated, setIsAuthenticated] = React.useState();\n  const [user, setUser] = React.useState();\n  const [auth0Client, setAuth0] = React.useState();\n  const [loading, setLoading] = React.useState(true);\n  const [popupOpen, setPopupOpen] = React.useState(false);\n  const { enqueueSnackbar } = useSnackbar();\n\n  React.useEffect(() => {\n    const initAuth0 = async () => {\n      const auth0FromHook = await createAuth0Client(initOptions);\n      setAuth0(auth0FromHook);\n\n      if (\n        window.location.search.includes('code=') &&\n        window.location.search.includes('state=')\n      ) {\n        const { appState } = await auth0FromHook.handleRedirectCallback();\n        onRedirectCallback(appState);\n      }\n\n      const isAuthenticated = await auth0FromHook.isAuthenticated();\n\n      setIsAuthenticated(isAuthenticated);\n\n      if (isAuthenticated) {\n        const user = await auth0FromHook.getUser();\n        setUser(user);\n      }\n\n      setLoading(false);\n    };\n    initAuth0();\n    // eslint-disable-next-line\n  }, []);\n\n  const loginWithPopup = async (params = {}) => {\n    setPopupOpen(true);\n    try {\n      await auth0Client.loginWithPopup(params);\n      enqueueSnackbar(`Authentication successfull`, {\n        variant: 'success',\n      });\n      const user = await auth0Client.getUser();\n      if (user) {\n        setIsAuthenticated(true);\n        setUser(user);\n      }\n    } catch (error) {\n      console.error(error);\n      enqueueSnackbar(`Authentication failed ${error}`, {\n        variant: 'error',\n      });\n    } finally {\n      setPopupOpen(false);\n    }\n  };\n\n  const logoutWithSnackbar = async (params = {}) => {\n    try {\n      await auth0Client.logout(params);\n    } catch (error) {\n      console.error(error);\n      enqueueSnackbar(`Failed logout ${error}`, {\n        variant: 'error',\n      });\n    } finally {\n      enqueueSnackbar(`Logout successfull`, {\n        variant: 'success',\n      });\n    }\n  };\n\n  const handleRedirectCallback = async () => {\n    setLoading(true);\n    await auth0Client.handleRedirectCallback();\n    const user = await auth0Client.getUser();\n    if (user) {\n      setIsAuthenticated(true);\n      setUser(user);\n    }\n    setLoading(false);\n  };\n\n  return (\n    <Auth0Context.Provider\n      value={{\n        isAuthenticated,\n        user,\n        loading,\n        popupOpen,\n        loginWithPopup,\n        logoutWithSnackbar,\n        handleRedirectCallback,\n        getIdTokenClaims: (...p) => auth0Client.getIdTokenClaims(...p),\n        loginWithRedirect: (...p) => auth0Client.loginWithRedirect(...p),\n        getTokenSilently: (...p) => auth0Client.getTokenSilently(...p),\n        getTokenWithPopup: (...p) => auth0Client.getTokenWithPopup(...p),\n        logout: (...p) => auth0Client.logout(...p),\n      }}\n    >\n      {children}\n    </Auth0Context.Provider>\n  );\n};\n","import { createBrowserHistory } from 'history';\nexport default createBrowserHistory();\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n","import { createMuiTheme } from '@material-ui/core';\n\nconst DHITheme = createMuiTheme({\n  palette: {\n    primary: {\n      main: '#0B4566', // DHI Primary color\n    },\n    secondary: {\n      main: '#00A4EC', // Automatically generated secondary color\n      '&:hover': '#0076C8',\n    },\n    grey: {\n      medium: '#DBE4E9',\n      light: '#F2F5F7',\n    },\n  },\n  flexLayout: {\n    display: 'flex',\n    flexDirection: 'column',\n    flex: 1,\n  },\n  typography: {\n    h4: {\n      color: '#0B4566',\n      fontSize: 24,\n      fontWeight: 700,\n    },\n    h6: {\n      color: '#0B4566',\n      fontSize: 14,\n    },\n    p: {\n      fontSize: 12,\n    },\n    subtitle1: {\n      fontSize: 12,\n      fontWeight: 'bold',\n    },\n    body1: {\n      fontSize: 16,\n      color: '#0B4566',\n    },\n    body2: {\n      fontSize: 12,\n      marginBottom: 16,\n    },\n  },\n  drawerColor: '#ffffff',\n  drawerWidth: '50vw',\n  overrides: {\n    MuiButton: {\n      root: {\n        color: '#fff',\n        fontSize: 12,\n        textTransform: 'initial',\n        padding: '8px 16px',\n      },\n      containedSecondary: {\n        backgroundColor: '#00A4EC',\n        color: '#fff',\n        '&:disabled': {\n          backgroundColor: 'rgb(242, 245, 247)',\n          color: 'rgba(207,219,226)',\n        },\n        '&:hover': {\n          backgroundColor: '#0076C8',\n        },\n      },\n    },\n    MuiCardContent: {\n      root: {\n        padding: 0,\n        '&:last-child': {\n          paddingBottom: 0,\n        },\n      },\n    },\n    MuiCheckbox: {\n      root: {\n        padding: '0px',\n        MuiSvgIcon: {\n          root: {\n            width: '12px',\n          },\n        },\n      },\n    },\n    MuiExpansionPanel: {\n      root: {\n        '&$expanded': {\n          margin: 0,\n        },\n        '&:before': {\n          backgroundColor: 'none',\n        },\n      },\n    },\n    MuiExpansionPanelDetails: {\n      root: {\n        borderBottom: '1px solid #DBE4E9',\n        padding: 16,\n      },\n    },\n    MuiExpansionPanelSummary: {\n      content: {\n        margin: '8px 0px ',\n        '&$expanded': {\n          margin: '8px 0px ',\n        },\n      },\n      root: {\n        backgroundColor: '#F8F8F8',\n        borderBottom: '1px solid #DBE4E9',\n        padding: '0px 16px',\n        minHeight: 0,\n        '&$expanded': {\n          minHeight: 0,\n          backgroundColor: '#F2F5F7',\n        },\n        '&:hover': {\n          backgroundColor: '#F2F5F7',\n        },\n      },\n    },\n    MuiFormControlLabel: {\n      root: {\n        width: '50%',\n        marginLeft: '0px',\n        marginRight: '0px',\n        'Mui-disabled': {\n          '-webkit-text-fill-color': 'rgba(207,219,226)',\n          opacity: 1,\n        },\n      },\n      label: {\n        fontSize: '12px',\n        paddingLeft: '.2rem',\n      },\n    },\n    MuiIconButton: {\n      root: {\n        padding: 8,\n      },\n    },\n\n    MuiPaper: {\n      root: {\n        color: '#0B4566',\n      },\n      rounded: {\n        borderRadius: 0,\n      },\n      elevation1: {\n        boxShadow: 'none',\n      },\n      elevation4: {\n        boxShadow: 'none',\n      },\n    },\n    MuiSvgIcon: {\n      root: {\n        width: 16,\n        height: 16,\n      },\n    },\n    MuiToolbar: {\n      regular: {\n        minHeight: 56,\n        '@media (min-width: 600px)': {\n          minHeight: 56,\n        },\n      },\n    },\n  },\n});\n\nexport default DHITheme;\n","export const directionRow = {\n  display: 'flex',\n  flexDirection: 'row'\n};\n\nexport const directionColumn = {\n  display: 'flex',\n  flexDirection: 'column'\n};\n\nexport const justifySpaceBetween = {\n  display: 'flex',\n  justifyContent: 'space-between'\n};\n\nexport const justifySpaceAround = {\n  display: 'flex',\n  justifyContent: 'space-around'\n};\n\nexport const justifyEnd = {\n  display: 'flex',\n  justifyContent: 'flex-end'\n};\n\nexport const justifyCenter = {\n  display: 'flex',\n  justifyContent: 'center'\n};\n\nexport const alignCenter = {\n  display: 'flex',\n  alignItems: 'center'\n};\n","import React from 'react';\nimport { compose } from 'recompose';\nimport {\n  CircularProgress,\n  LinearProgress,\n  withStyles,\n} from '@material-ui/core';\nimport styles from './styles';\n\nconst enhancer = compose(withStyles(styles, { withTheme: true }));\n\nconst Loader = ({ classes, isLoading, isMajorLoading }) => {\n  if (!isLoading) return null;\n  return (\n    <>\n      {isMajorLoading ? (\n        <div className={classes.majorLoading}>\n          <CircularProgress color=\"inherit\" size={50} thickness={5} />\n        </div>\n      ) : (\n        <div className={classes.minorLoading}>\n          <LinearProgress color=\"primary\" />\n        </div>\n      )}\n    </>\n  );\n};\n\nexport default enhancer(Loader);\n","import {\n  directionColumn,\n  justifyCenter,\n  alignCenter,\n} from 'styles/mixins';\n\nexport default () => ({\n  minorLoading: {\n    position: 'fixed',\n    width: '100vw',\n    top: 0,\n    height: 4,\n    zIndex: '2000',\n    backgroundColor: 'white',\n  },\n  majorLoading: {\n    position: 'fixed',\n    width: '100vw',\n    height: '100vh',\n    zIndex: '2000',\n    ...directionColumn,\n    ...justifyCenter,\n    ...alignCenter,\n    backgroundColor: 'rgba(13,57,88,0.9)',\n    color: 'white',\n  },\n});\n","import { makeStyles } from '@material-ui/core/styles';\n\nexport const checkboxStyle = makeStyles({\n  root: {\n    '&:hover': {\n      backgroundColor: 'transparent',\n    },\n  },\n  icon: {\n    borderRadius: 1,\n    width: 12,\n    height: 12,\n    border: '1px solid #86A2B3',\n    boxSizing: 'border-box',\n    backgroundColor: '#ffffff',\n    'input:hover ~ &': {\n      backgroundColor: '#ebf1f5',\n    },\n    'input:disabled ~ &': {\n      boxShadow: 'none',\n      background: 'rgba(206,217,224,.5)',\n    },\n  },\n  checkedIcon: {\n    borderRadius: 1,\n    backgroundColor: '#61C051',\n    backgroundImage:\n      'linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))',\n    '&:before': {\n      display: 'block',\n      width: 12,\n      height: 12,\n      boxSizing: 'border-box',\n      border: '1px solid #86A2B3',\n      backgroundImage:\n        \"url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath\" +\n        \" fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 \" +\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\\\")\",\n      content: '\"\"',\n    },\n    'input:hover ~ &': {\n      backgroundColor: '#61C051',\n    },\n    'input:disabled ~ &': {\n      boxShadow: 'none',\n      background: 'rgba(207,219,226)',\n    },\n  },\n});\n\nexport const iconStyle = makeStyles({\n  button: {\n    width: 36,\n    padding: 0,\n    borderRadius: 0,\n  },\n  icon: {\n    height: 36,\n  },\n  activeIcon: {\n    backgroundColor: '#0b4566',\n    '& path': {\n      fill: '#fff',\n    },\n  },\n});\n","import React from 'react';\n\nimport { ReactComponent as Minus } from '@mike/mike-shared-frontend/media/icons/Minus.svg';\nimport { ReactComponent as Plus } from '@mike/mike-shared-frontend/media/icons/Plus.svg';\nimport { Box, IconButton } from '@material-ui/core';\nimport { iconStyle } from 'styles/global';\n\nconst DHIZoomControl = ({ setZoom, zoom }) => {\n  const classes = iconStyle();\n\n  return (\n    <Box\n      style={{\n        width: 36,\n        position: 'fixed',\n        left: 0,\n        top: 'calc(50vh - 36px)',\n        boxShadow: '4px 0px 4px rgba(0, 0, 0, 0.16)',\n        backgroundColor: '#fff',\n      }}\n    >\n      <IconButton className={classes.button} onClick={() => setZoom(zoom + 1)}>\n        <Plus className={classes.icon} />\n      </IconButton>\n      <IconButton className={classes.button} onClick={() => setZoom(zoom - 1)}>\n        <Minus className={classes.icon} />\n      </IconButton>\n    </Box>\n  );\n};\n\nexport default DHIZoomControl;\n","import React from 'react';\n\n// is this geocoder the right one to use?\nimport Geocoder from 'react-mapbox-gl-geocoder';\nimport { ReactComponent as CloseIcon } from '@mike/mike-shared-frontend/media/icons/CloseS.svg';\nimport { ReactComponent as SearchIcon } from '@mike/mike-shared-frontend/media/icons/Search.svg';\nimport { IconButton, Grid } from '@material-ui/core';\nimport { iconStyle } from 'styles/global';\n\nimport 'styles/searchbar.css';\n\nconst SearchControl = ({ accessToken, setCenter }) => {\n  const [searchbar, toggleSearchbar] = React.useState(false);\n  const classes = iconStyle();\n\n  const onSelected = item => {\n    setCenter({ latitude: item.center[1], longitude: item.center[0] });\n    toggleSearchbar(false);\n  };\n\n  return (\n    <Grid\n      container\n      style={{\n        position: 'fixed',\n        left: 0,\n        top: 60,\n      }}\n    >\n      <Grid\n        item\n        style={{\n          boxShadow: '4px 0px 4px rgba(0, 0, 0, 0.16)',\n          backgroundColor: '#fff',\n        }}\n      >\n        <IconButton\n          className={classes.button}\n          onClick={() => toggleSearchbar(!searchbar)}\n        >\n          <SearchIcon className={classes.icon} />\n        </IconButton>\n      </Grid>\n\n      {searchbar && (\n        <>\n          <Grid item>\n            <Geocoder\n              mapboxApiAccessToken={accessToken}\n              viewport={{ viewport: '' }}\n              onSelected={(viewport, item) => onSelected(item)}\n              hideOnSelect={true}\n              queryParams={{ country: 'dk' }}\n              initialInputValue={'Search by location'}\n            />\n          </Grid>\n          <Grid item>\n            <IconButton\n              className={classes.button}\n              onClick={() => toggleSearchbar(false)}\n            >\n              <CloseIcon className={classes.icon} />\n            </IconButton>\n          </Grid>\n        </>\n      )}\n    </Grid>\n  );\n};\n\nexport default SearchControl;\n","import React from 'react';\n\nimport ReactMapGL, {\n  FlyToInterpolator,\n  GeolocateControl,\n  Popup,\n} from 'react-map-gl';\nimport DeckGL from '@deck.gl/react';\nimport { BitmapLayer, GeoJsonLayer } from '@deck.gl/layers';\n\nimport DHIZoomControl from './DHIZoomControl';\nimport SearchControl from './SearchControl';\n\nimport { easeCubicInOut } from 'd3-ease';\n\nimport 'mapbox-gl/dist/mapbox-gl.css';\n\nconst { token: accessToken, styles } = require('config/config.json');\n\nconst geolocateStyle = {\n  position: 'absolute',\n  top: 40,\n  left: 0,\n  margin: 10,\n};\n\n// const dk_regions = require('assets/geojsons/dk_regions.json');\nconst dk_municipalities = require('assets/geojsons/dk_municipalities.json');\n\nconst Map = ({ bitmap, parcel, setParcel }) => {\n  const [viewport, setViewport] = React.useState({\n    longitude: 10,\n    latitude: 56,\n    zoom: 6,\n    pitch: 0,\n    bearing: 0,\n  });\n  const [tooltip, setTooltip] = React.useState(false);\n\n  const setCenter = ({ latitude, longitude }) =>\n    setViewport({ ...viewport, latitude, longitude, zoom: 11 });\n\n  const setZoom = zoom => setViewport({ ...viewport, zoom });\n\n  const handleViewport = ({ latitude, longitude, zoom }) =>\n    setViewport({\n      ...viewport,\n      latitude,\n      longitude,\n      zoom,\n      transitionDuration: 1750,\n      transitionInterpolator: new FlyToInterpolator(),\n      transitionEasing: easeCubicInOut,\n    });\n\n  const bitmapLayer = new BitmapLayer({\n    visible: true,\n    id: 'bitmap-layer',\n    bounds: bitmap.bounds,\n    image: 'data:image/png;base64,' + bitmap.image,\n    opacity: 1,\n    tintColor: [0, 255, 255],\n    transparentColor: [255, 255, 255, 0],\n  });\n\n  const geoLayer = new GeoJsonLayer({\n    visible: viewport.zoom < 10,\n    id: 'geojson-layer',\n    data: dk_municipalities,\n    pickable: true,\n    stroked: true,\n    filled: true,\n    extruded: false,\n    lineWidthScale: 20,\n    lineWidthMinPixels: 1,\n    getFillColor: [11, 69, 102, 0],\n    getLineColor: [11, 69, 102],\n    getRadius: 100,\n    getLineWidth: 1,\n    getElevation: 30,\n    onClick: info =>\n      handleViewport({\n        latitude: info.object.properties.center[1],\n        longitude: info.object.properties.center[0],\n        zoom: 11.5,\n      }),\n    onHover: info => {\n      // console.log(info);\n      setTooltip(info);\n    },\n  });\n\n  const parcelLayer = new GeoJsonLayer({\n    visible: true,\n    id: 'feature-layer',\n    data: [parcel],\n    pickable: true,\n    stroked: true,\n    filled: true,\n    extruded: false,\n    lineWidthScale: 20,\n    lineWidthMinPixels: 2,\n    getLineColor: [0, 164, 236],\n    getFillColor: [11, 69, 102, 0],\n    getRadius: 100,\n    getLineWidth: 0.3,\n    getElevation: 30,\n  });\n\n  const onMapClick = info => {\n    // console.log(info);\n    try {\n      const parcel = info.features.filter(\n        feature => feature.layer && feature.layer.id.includes('parcel')\n      );\n      // todo: there are some tiles that overlap in the data, need to look into it\n      console.log('parcel/s: ', parcel);\n\n      if (parcel.length > 0) {\n        const { geometry, properties, type } = parcel[0];\n        console.log(info.features[0].geometry);\n        handleViewport({\n          latitude: info.lngLat[1],\n          longitude: info.lngLat[0],\n          zoom: 13,\n        });\n\n        setParcel({\n          geometry,\n          properties,\n          type,\n        });\n      }\n    } catch (error) {\n      console.error(error);\n    }\n  };\n\n  return (\n    <ReactMapGL\n      {...viewport}\n      mapStyle={styles.lightparcels}\n      width=\"100%\"\n      height=\"100%\"\n      mapboxApiAccessToken={accessToken}\n      onViewportChange={setViewport}\n      onClick={onMapClick}\n      mapOptions={{\n        customAttribution:\n          '<a href=\"https://sentinel.esa.int/web/sentinel/home\" target=\"blank\">' +\n          'Contains modified Copernicus Sentinel data ' +\n          new Date().getFullYear() +\n          ' ' +\n          '</a>',\n      }}\n    >\n      <DeckGL\n        layers={[geoLayer, bitmap && bitmapLayer, parcel && parcelLayer]}\n        onClick={info => console.log(info)}\n        viewState={viewport}\n      />\n\n      <GeolocateControl\n        onViewportChange={handleViewport}\n        positionOptions={{ enableHighAccuracy: true }}\n        style={geolocateStyle}\n        trackUserLocation={false}\n      />\n\n      <DHIZoomControl setZoom={setZoom} zoom={viewport.zoom} />\n      <SearchControl accessToken={accessToken} setCenter={setCenter} />\n\n      {viewport.zoom < 10 && tooltip.object && (\n        <Popup\n          latitude={tooltip.coordinate[1]}\n          longitude={tooltip.coordinate[0]}\n          closeButton={false}\n          closeOnClick={false}\n          onClose={() => setTooltip(false)}\n          anchor=\"top\"\n        >\n          <div style={{ fontSize: 12, color: '#0b4566', fontWeight: 'bold' }}>\n            {tooltip.object.properties.NAME_2\n              ? tooltip.object.properties.NAME_2\n              : tooltip.object.properties.NAME_1}\n          </div>\n        </Popup>\n      )}\n    </ReactMapGL>\n  );\n};\n\nexport default Map;\n","import { directionColumn, justifyEnd } from 'styles/mixins';\n\nexport default {\n  buttonsArea: {\n    ...justifyEnd,\n  },\n  menuItem: {\n    padding: 0,\n    height: 'auto',\n  },\n  nameTag: {\n    ...directionColumn,\n    justifyContent: 'center',\n  },\n  linkItem: {\n    width: 'inherit',\n\n    lineHeight: '1.5em',\n    textDecoration: 'none',\n    color: 'inherit',\n  },\n};\n","import React from 'react';\nimport { compose } from 'recompose';\nimport { withRouter } from 'react-router-dom';\nimport {\n  ClickAwayListener,\n  Divider,\n  // LinearProgress,\n  ListItemIcon,\n  MenuItem,\n  MenuList,\n  Paper,\n  Typography,\n  withStyles,\n} from '@material-ui/core';\n\nimport {\n  ExitToApp as ExitIcon,\n  // ChevronRight,\n  // Menu as MenuIcon,\n} from '@material-ui/icons';\nimport DHITheme from 'styles/theme';\nimport styles from './styles';\n\nconst enhancer = compose(\n  withRouter,\n  withStyles(styles, { withTheme: true })\n);\n\nconst ProfileMenu = ({\n  classes,\n  logout,\n  handleCloseMenu,\n  handleListKeyDown,\n  openMenu,\n}) => {\n  const { primary } = DHITheme.palette;\n  return (\n    <Paper elevation={3}>\n      <ClickAwayListener onClickAway={handleCloseMenu}>\n        <MenuList\n          autoFocusItem={openMenu}\n          id=\"menu-list-grow\"\n          onKeyDown={handleListKeyDown}\n          style={{ padding: '8px' }}\n        >\n          <Typography component=\"span\" variant=\"h5\">\n            Free Trial Plan\n          </Typography>\n          <Divider variant=\"middle\" />\n          {/* <Typography component=\"span\" variant=\"h6\">\n            <strong>60</strong> / 100 free megabytes\n          </Typography>\n          <LinearProgress\n            variant=\"determinate\"\n            value={60}\n            style={{ paddingBottom: '4px' }}\n          /> */}\n          <MenuItem\n            onClick={logout}\n            style={{\n              marginTop: '8px',\n              justifyContent: 'center',\n            }}\n          >\n            <Typography variant=\"inherit\" noWrap>\n              Sign out\n            </Typography>\n            <ListItemIcon style={{ minWidth: '16px', marginLeft: '8px' }}>\n              <ExitIcon style={{ fill: primary.main }} />\n            </ListItemIcon>\n          </MenuItem>\n        </MenuList>\n      </ClickAwayListener>\n    </Paper>\n  );\n};\n\nexport default enhancer(ProfileMenu);\n","import React from 'react';\nimport { compose } from 'recompose';\nimport { withRouter } from 'react-router-dom';\nimport {\n  // ClickAwayListener,\n  Grow,\n  IconButton,\n  // MenuItem,\n  // MenuList,\n  // Paper,\n  Popper,\n  Typography,\n  withStyles,\n} from '@material-ui/core';\n\nimport ProfileMenu from './ProfileMenu';\n\nimport {\n  AccountCircle as AccountIcon,\n  // ChevronRight,\n  // Menu as MenuIcon,\n} from '@material-ui/icons';\nimport DHITheme from 'styles/theme';\nimport styles from './styles';\n\nconst enhancer = compose(\n  withRouter,\n  withStyles(styles, { withTheme: true })\n);\n\nconst MenuArea = ({ classes, logout, user }) => {\n  const [openMenu, setOpenMenu] = React.useState(false);\n  const anchorRef = React.useRef(null);\n  const { primary } = DHITheme.palette;\n\n  const handleToggleMenu = () => {\n    setOpenMenu(prevOpen => !prevOpen);\n  };\n\n  const handleCloseMenu = e => {\n    if (anchorRef.current && anchorRef.current.contains(e.target)) {\n      return;\n    }\n\n    setOpenMenu(false);\n  };\n\n  const handleListKeyDown = e => {\n    if (e.key === 'Tab') {\n      e.preventDefault();\n      setOpenMenu(false);\n    }\n  };\n\n  // return focus to the button when we transitioned from !open -> open\n  const prevOpen = React.useRef(openMenu);\n  React.useEffect(() => {\n    if (prevOpen.current === true && openMenu === false) {\n      anchorRef.current.focus();\n    }\n\n    prevOpen.current = openMenu;\n  }, [openMenu]);\n\n  return (\n    <div className={classes.buttonsArea}>\n      <Typography component=\"span\" variant=\"h6\" className={classes.nameTag}>\n        {user ? user.email : null}\n      </Typography>\n      <IconButton\n        ref={anchorRef}\n        aria-controls={openMenu ? 'menu-list-grow' : undefined}\n        aria-haspopup=\"true\"\n        color=\"inherit\"\n        onClick={handleToggleMenu}\n      >\n        <AccountIcon style={{ fill: primary.main }} />\n      </IconButton>\n\n      <Popper\n        open={openMenu}\n        anchorEl={anchorRef.current}\n        role={undefined}\n        transition\n        disablePortal\n      >\n        {({ TransitionProps, placement }) => (\n          <Grow\n            {...TransitionProps}\n            style={{\n              transformOrigin:\n                placement === 'bottom' ? 'center top' : 'center bottom',\n            }}\n          >\n            <ProfileMenu\n              handleCloseMenu={handleCloseMenu}\n              handleListKeyDown={handleListKeyDown}\n              logout={logout}\n              openMenu={openMenu}\n            />\n          </Grow>\n        )}\n      </Popper>\n    </div>\n  );\n};\n\nexport default enhancer(MenuArea);\n","import React from 'react';\nimport { compose } from 'recompose';\nimport { Avatar as MaterialAvatar } from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport DarkLogo from 'assets/images/DHI_Logo_Dark.png';\nimport BlueLogo from 'assets/images/DHI_Logo_Blue.png';\n\nimport styles from './styles';\n\nconst enhancer = compose(withStyles(styles));\n\nconst Avatar = enhancer(MaterialAvatar);\n\nconst Logo = ({ dark = false, ...rest }) => (\n  <Avatar alt=\"DHI Logo\" src={dark ? BlueLogo : DarkLogo} {...rest} />\n);\n\nexport default Logo;\n","export default {\n  root: {\n    width: '50px',\n    height: 'auto',\n    borderRadius: '0',\n    marginLeft: '15px',\n    marginTop: '-5px',\n    marginRight: '15px',\n  },\n};\n","import React from 'react';\nimport { useAuth0 } from 'react-auth0-spa';\nimport { compose } from 'recompose';\nimport { Link } from 'react-router-dom';\n\nimport {\n  AppBar,\n  Box,\n  Button,\n  Grid,\n  Toolbar,\n  Typography,\n  withStyles,\n} from '@material-ui/core';\n\nimport MenuArea from './partials/MenuArea';\nimport Logo from 'components/Logo';\n\nimport styles from './styles';\n\nconst enhancer = compose(withStyles(styles, { withTheme: true }));\n\nconst Navigation = ({ classes }) => {\n  const {\n    isAuthenticated,\n    loginWithPopup,\n    logoutWithSnackbar,\n    user,\n  } = useAuth0();\n\n  return (\n    <AppBar position=\"relative\" className={classes.appBar}>\n      <Grid container alignItems=\"center\">\n        <Grid item xs={4}>\n          <Toolbar disableGutters>\n            <Link to=\"/\" className={classes.link}>\n              <Box pl={1}>\n                <Logo dark style={{ width: 50 }} />\n              </Box>\n            </Link>\n          </Toolbar>\n        </Grid>\n        <Grid item xs={4} className={classes.textAlignCenter}>\n          <Typography variant=\"h6\" color=\"primary\" noWrap>\n            Soil Moisture App\n          </Typography>\n        </Grid>\n        <Grid item xs={4}>\n          {isAuthenticated ? (\n            <MenuArea logout={logoutWithSnackbar} user={user} />\n          ) : (\n            <Box display={'flex'} justifyContent={'flex-end'}>\n              <Button\n                variant=\"contained\"\n                color=\"secondary\"\n                onClick={() => loginWithPopup()}\n              >\n                Log in\n              </Button>\n            </Box>\n          )}\n        </Grid>\n      </Grid>\n    </AppBar>\n  );\n};\n\nexport default enhancer(Navigation);\n","import { directionRow, justifySpaceBetween } from 'styles/mixins';\n\nexport default theme => ({\n  appBar: {\n    ...directionRow,\n    ...justifySpaceBetween,\n    zIndex: theme.zIndex.drawer + 1,\n    backgroundColor: '#ffffff',\n    color: theme.palette.primary.main,\n    padding: '0px 16px;',\n  },\n  menuButton: {\n    marginLeft: 12,\n    marginRight: 20,\n  },\n  navBar: {\n    marginLeft: 'auto',\n    marginRight: 'right',\n  },\n  navButton: {\n    marginLeft: -12,\n    marginRight: 20,\n    textDecoration: 'none',\n    color: 'white',\n  },\n  hide: {\n    display: 'none',\n  },\n  grow: {\n    flexGrow: 1,\n  },\n  link: {\n    display: 'block',\n    textDecoration: 'none',\n    color: 'inherit',\n  },\n  textAlignCenter: {\n    textAlign: 'center',\n  },\n});\n","import React from 'react';\nimport { Box, Grid } from '@material-ui/core';\nimport {\n  ComposedChart,\n  ResponsiveContainer,\n  Tooltip,\n  XAxis,\n  YAxis,\n} from 'recharts';\nimport { format } from 'date-fns';\nimport { AppContext } from 'App';\nimport BounceLoader from 'react-spinners/BounceLoader';\n\nconst TimeseriesGraph = ({ timeseriesTypes }) => {\n  const {\n    state: { loading, timeseriesData },\n    actions: { setBitmap, updateLegend },\n  } = React.useContext(AppContext);\n\n  const CustomTooltip = () => {\n    return null;\n  };\n\n  const formatXAxis = tickItem => {\n    let dateFormat = 'dd MMM yy';\n    if (timeseriesData.length > 200) dateFormat = 'MMM yy';\n    return format(new Date(tickItem.replace(/-/g, ', ')), dateFormat);\n  };\n\n  const showThumbnail = info => {\n    try {\n      const {\n        activePayload: [\n          {\n            payload: { bounds, image },\n          },\n        ],\n      } = info;\n      setLegendContent(info);\n      setBitmap({\n        bounds,\n        image,\n      });\n    } catch (error) {\n      // console.error(error);\n    }\n  };\n\n  const setLegendContent = arg => {\n    let dataKeys = [];\n    arg.activePayload.forEach(load => {\n      dataKeys.push(load.dataKey);\n    });\n    updateLegend({\n      keys: dataKeys,\n      payload: arg.activePayload[0].payload,\n    });\n  };\n\n  return (\n    <>\n      {loading === true ? (\n        <Box height={'75%'} w={'100%'}>\n          <Grid\n            container\n            item\n            xs={12}\n            style={{ minHeight: '100%' }}\n            direction=\"column\"\n            alignItems=\"center\"\n            justify=\"center\"\n          >\n            <BounceLoader size={40} color={'#00A4EC'} loading={true} />\n          </Grid>\n        </Box>\n      ) : (\n        <ResponsiveContainer width=\"100%\" height=\"75%\">\n          <ComposedChart\n            data={timeseriesData}\n            margin={{ top: 16, right: 16, left: 16 }}\n            onMouseMove={showThumbnail}\n          >\n            <XAxis\n              dataKey=\"date\"\n              domain={[-0.1, 1.1]}\n              tickFormatter={formatXAxis}\n              stroke={'#0b4566'}\n              tick={{ fontSize: 10, color: '#0b4566', fill: '#0b4566' }}\n            />\n            <YAxis\n              domain={[-40, 140]}\n              hide={true}\n              tick={{ fontSize: 10, color: '#0b4566' }}\n            />\n            <Tooltip content={<CustomTooltip />} />\n\n            {timeseriesTypes &&\n              timeseriesTypes.map(\n                ({ component, enabled }) => enabled && component\n              )}\n          </ComposedChart>\n        </ResponsiveContainer>\n      )}\n    </>\n  );\n};\n\nexport default TimeseriesGraph;\n","import React from 'react';\nimport { Box, Grid, Typography } from '@material-ui/core';\nimport { AppContext } from 'App';\nimport { format } from 'date-fns';\n\nconst TimeseriesLegend = ({ timeseriesTypes, updateTimeseriesData }) => {\n  const {\n    state: { legendData },\n  } = React.useContext(AppContext);\n\n  const formatValue = (dataKey, unit) => {\n    if (legendData && legendData.payload && legendData.payload[dataKey]) {\n      let value = legendData.payload[dataKey] + unit;\n      if (dataKey === 'std') {\n        value =\n          (\n            (legendData.payload[dataKey][1] - legendData.payload[dataKey][0]) *\n            0.5\n          ).toFixed(2) + unit;\n      }\n      return value;\n    }\n  };\n  return (\n    <Box p={1}>\n      <Box p={1} style={{ borderBottom: '1px solid #DBE4E9' }}>\n        <Grid container spacing={0} justify=\"space-between\">\n          <Grid item xs={6}>\n            <Typography variant=\"h6\">Graph data:</Typography>\n          </Grid>\n          <Grid item xs={6}>\n            <Typography variant=\"h6\" style={{ textAlign: 'right' }}>\n              {legendData && legendData.payload && legendData.payload.date\n                ? format(new Date(legendData.payload.date), 'dd MMM yy')\n                : ''}\n            </Typography>\n          </Grid>\n        </Grid>\n      </Box>\n      <Box p={1}>\n        {timeseriesTypes &&\n          timeseriesTypes.map(\n            ({ color, dataKey, enabled, title, unit }, index) => (\n              <Grid\n                container\n                justify=\"space-between\"\n                // todo: if data is not available for the other indices this will break the whole app\n                // onClick={() => updateTimeseriesData(index)}\n                key={title}\n                spacing={0}\n                style={{ cursor: 'pointer', padding: '2px 0px' }}\n              >\n                <Grid item xs={2}>\n                  <Typography\n                    variant=\"body2\"\n                    style={{ color: enabled ? color : '#DBE4E9' }}\n                  >\n                    icon\n                  </Typography>\n                </Grid>\n                <Grid item xs={7}>\n                  <Typography\n                    variant=\"body2\"\n                    style={{ color: enabled ? '#0B4566' : ' #DBE4E9' }}\n                  >\n                    {title}\n                  </Typography>\n                </Grid>\n                <Grid item xs={3} style={{ textAlign: 'right' }}>\n                  {enabled && (\n                    <Typography variant=\"body2\" style={{ color: '#0B4566' }}>\n                      {formatValue(dataKey, unit)}\n                    </Typography>\n                  )}\n                </Grid>\n              </Grid>\n            )\n          )}\n      </Box>\n    </Box>\n  );\n};\n\nexport default TimeseriesLegend;\n","import React from 'react';\nimport { Box } from '@material-ui/core';\nimport { format, parse } from 'date-fns';\nimport { AppContext } from 'App';\nimport Nouislider from 'nouislider-react';\nimport 'nouislider/distribute/nouislider.css';\nimport 'styles/slider.css';\n\nconst TimeseriesSlider = () => {\n  const {\n    actions: { updateRange },\n    state: { loading, selectedRange, timeseriesDates },\n  } = React.useContext(AppContext);\n\n  const handleChange = val => {\n    try {\n      let parsed = [];\n      val.forEach(v => {\n        let _date = parse(v, 'dd MMM yy', new Date());\n        let fdate = format(_date, 'yyyy-MM-dd');\n        parsed.push(fdate);\n      });\n\n      updateRange([\n        timeseriesDates.findIndex(obj => parsed[0] === obj),\n        timeseriesDates.findIndex(obj => parsed[1] === obj),\n      ]);\n    } catch (error) {\n      console.error(error);\n    }\n  };\n\n  return (\n    <Box pt={1} px={5} pb={0}>\n      {selectedRange && selectedRange[1] && timeseriesDates.length && (\n        <Nouislider\n          behaviour={'drag'}\n          connect\n          disabled={loading}\n          margin={40}\n          onChange={val => handleChange(val)}\n          range={{ min: 0, max: timeseriesDates.length - 1 }}\n          start={selectedRange}\n          step={1}\n          tooltips\n          format={{\n            to: value => {\n              try {\n                if (isNaN(value) === false) {\n                  return format(\n                    new Date(timeseriesDates[parseInt(value)]),\n                    'dd MMM yy'\n                  );\n                }\n              } catch (error) {\n                console.error(error);\n              }\n            },\n            from: value => {\n              try {\n                return Number(value.replace(',-', ''));\n              } catch (error) {\n                console.error(error);\n              }\n            },\n          }}\n        />\n      )}\n    </Box>\n  );\n};\n\nexport default TimeseriesSlider;\n","import React from 'react';\nimport { Area, Line } from 'recharts';\n\nconst defaultTimeseriesTypes = [\n  {\n    title: 'Soil Moisture mean',\n    color: '#008BEC',\n    component: (\n      <Line\n        type=\"monotone\"\n        dataKey=\"mean\"\n        dot={false}\n        key={0}\n        stroke=\"#008BEC\"\n        strokeWidth={2}\n      />\n    ),\n    dataKey: 'mean',\n    enabled: true,\n    unit: ' %',\n  },\n  {\n    title: 'Soil Moisture std',\n    color: '#97DBF9',\n    component: (\n      <Area\n        type=\"monotone\"\n        dataKey=\"std\"\n        dot={false}\n        key={1}\n        fill=\"#97DBF9\"\n        stroke={'#97DBF9'}\n      />\n    ),\n    dataKey: 'std',\n    enabled: true,\n    unit: ' %',\n  },\n  {\n    title: 'Temperature in celcius',\n    color: '#FD793F',\n    enabled: false,\n    unit: ' %',\n  },\n  {\n    title: 'Rainfall in millimeter',\n    color: '#00A4EC',\n    enabled: false,\n  },\n  {\n    title: 'Vegetation index (NDVI)',\n    color: '#61C051',\n    enabled: false,\n  },\n];\n\nexport default defaultTimeseriesTypes;\n","import React from 'react';\nimport { Grid } from '@material-ui/core';\nimport TimeseriesGraph from './partials/TimeseriesGraph';\nimport TimeseriesLegend from './partials/TimeseriesLegend';\nimport TimeseriesSlider from './partials/TimeseriesSlider';\nimport defaultTimeseriesTypes from './partials/defaultTimeseries';\n\nconst Timeseries = () => {\n  const [timeseriesTypes, setTimeseriesType] = React.useState(\n    defaultTimeseriesTypes\n  );\n\n  const setTypes = _index => {\n    let elt = timeseriesTypes;\n    elt[_index].enabled = !elt[_index].enabled;\n    setTimeseriesType([...elt]);\n  };\n\n  return (\n    <Grid\n      container\n      space={0}\n      style={{ height: '45%', marginTop: 8, borderTop: '1px solid #DBE4E9' }}\n    >\n      <Grid item xs={9}>\n        <TimeseriesGraph timeseriesTypes={timeseriesTypes} />\n        <TimeseriesSlider />\n      </Grid>\n      <Grid item xs={3} style={{ borderLeft: '1px solid #DBE4E9' }}>\n        <TimeseriesLegend\n          setTypes={setTypes}\n          timeseriesTypes={timeseriesTypes}\n        />\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default Timeseries;\n","import React from 'react';\nimport { Box, Link, Typography } from '@material-ui/core';\n\nconst About = () => {\n  return (\n    <Box>\n      <Typography variant=\"subtitle1\">About this tool</Typography>\n      <Typography variant=\"body2\">\n        This tool is intended to facilitate easy use of the API access to\n        altimetry data prepared for use in MetOcean studies and for validation\n        of and assimilation in hydrodynamical models.\n      </Typography>\n      <Typography variant=\"subtitle1\">How to use it</Typography>\n      <Typography variant=\"body2\">\n        Select the area of interest for which you want to get altimetry data.\n        Moreover, selecting time interval, satellites and/or data filters may\n        help you filter the data. To be noted that you need to get approval /\n        authorization from us in order to download data.\n      </Typography>\n      <Typography variant=\"subtitle1\">How data filtering is done</Typography>\n      <Typography variant=\"body2\">\n        The data filtering and editing routines are supported by expert\n        knowledge provided by colleagues from The National Space Institute at\n        the Technical University of Denmark, also known as DTU Space.\n      </Typography>\n      <Typography variant=\"subtitle1\">About DHI</Typography>\n      <Typography variant=\"body2\">\n        DHI are the first people you should call when you have a tough challenge\n        to solve in a water environment – be it a river, a reservoir, an ocean,\n        a coastline, or an aquifer. Our knowledge of water environments is\n        second-to-none. It represents 50 years of dedicated research and\n        real-life experience from more than 140 countries. We strive to make\n        this knowledge globally accessible to clients and partners by\n        channelling it through our local teams and unique software. Our world is\n        water. So whether you need to save water, share it fairly, improve its\n        quality, quantify its impact or manage its flow, we can help. Our\n        knowledge, combined with our team's expertise and the power of our\n        technology, holds the key to unlocking the right solution. Read more on\n        <Link href=\"https://www.dhigroup.com/\"> dhigroup.com</Link>\n      </Typography>\n    </Box>\n  );\n};\n\nexport default About;\n","import React from 'react';\nimport { Box, Link, Typography } from '@material-ui/core';\n\nconst style = {\n  margin: 0,\n};\n\nconst Contact = () => {\n  return (\n    <Box>\n      <Typography variant=\"body2\">\n        With our global network of offices, we make sure you get the right\n        answers to your local needs.\n      </Typography>\n\n      <Box py={0}>\n        <Typography variant=\"body2\" style={style}>\n          DHI A/S\n        </Typography>\n        <Typography variant=\"body2\" style={style}>\n          Agern Alle 5, 2970 Hørsholm, Denmark\n        </Typography>\n        <Typography variant=\"body2\" style={style}>\n          <Link href=\"mailto:gras@dhigroup.com\">gras@dhigroup.com</Link>\n        </Typography>\n        <Typography variant=\"body2\" style={style}>\n          +45 4516 9100\n        </Typography>\n        <Typography variant=\"body2\" style={style}>\n          CVR no: 36466871\n        </Typography>\n      </Box>\n    </Box>\n  );\n};\n\nexport default Contact;\n","import React from 'react';\nimport { Box, Typography } from '@material-ui/core';\n\nconst Disclaimer = () => {\n  return (\n    <Box>\n      <Box pb={2}>\n        <Typography variant=\"subtitle1\">\n          We provide this website as a service and for informational purposes\n          only.\n        </Typography>\n      </Box>\n      <Typography variant=\"body2\">\n        The transmission of this information does not create any form of\n        relationship with us. You should not act upon information provided on\n        this site without seeking our personal assistance. While we have\n        attempted to maintain the information, the software and any other\n        services on this site as accurately as possible, the site may contain\n        errors or omissions for which we disclaim any and all liability. The\n        material and contents posted on this site is provided without warranty\n        of any kind.\n      </Typography>\n      <Typography variant=\"body2\">\n        We are not responsible for any loss of hardware, software or files,\n        caused by the use of the web site or elements downloaded or used from/on\n        the web site. Hence we make no warranty, that the web site or product or\n        services provided on the web site, either by us or on our behalf\n        (including free software downloads) will meet your requirements or will\n        be uninterrupted, timely, secure or without errors, or that the website\n        or the servers we use are free of viruses or bugs or are fully\n        functional or accurate.\n      </Typography>\n    </Box>\n  );\n};\n\nexport default Disclaimer;\n","import React from 'react';\nimport { Box, Typography } from '@material-ui/core';\n\nconst FAQ = () => {\n  return (\n    <Box pb={2}>\n      <Typography variant=\"subtitle1\">What is Soil Moisture?</Typography>\n      <Typography variant=\"body2\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\n        tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim\n        veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea\n        commodo consequat. Duis aute irure dolor in reprehenderit in voluptate\n        velit esse cillum dolore eu fugiat nulla pariatur.\n      </Typography>\n      <Typography variant=\"subtitle1\">\n        Excepteur sint occaecat cupidatat non proident?\n      </Typography>\n      <Typography variant=\"body2\">\n        Duis aute irure dolor in reprehenderit in voluptate velit esse cillum\n        dolore eu fugiat nulla pariatur.\n      </Typography>\n      <Typography variant=\"subtitle1\">\n        Sed ut perspiciatis unde omnis iste natus error sit voluptatem?\n      </Typography>\n      <Typography variant=\"body2\">\n        Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut\n        fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem\n        sequi nesciunt.\n      </Typography>\n    </Box>\n  );\n};\n\nexport default FAQ;\n","import React from 'react';\nimport { Box, Typography, Link, withStyles } from '@material-ui/core';\n\nimport styles from './styles';\n\nconst noSpacing = {\n  padding: 0,\n  margin: 0,\n};\n\nconst Privacy = ({ classes }) => {\n  return (\n    <Box>\n      <Box py={1}>\n        <Typography variant=\"body2\">\n          At DHI (\"DHI\", \"we\" or “us”) data protection and confidentiality is a\n          high priority. This privacy policy sets out clear guidelines for how\n          DHI processes your personal data. Further, we explain how we use the\n          personal data that you leave and/or provide when you visit our\n          websites or when you interact with us with various business relations.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          1. DATA CONTROLLER AND CONTACT INFORMATION\n        </Typography>\n        <Typography variant=\"body2\">\n          This website is operated and owned by:\n        </Typography>\n        <Typography variant=\"body2\" style={noSpacing}>\n          DHI A/S\n        </Typography>\n        <Typography variant=\"body2\" style={noSpacing}>\n          Agern Alle 5\n        </Typography>\n        <Typography variant=\"body2\" style={noSpacing}>\n          2970 Hørsholm\n        </Typography>\n        <Typography variant=\"body2\" style={noSpacing}>\n          CVR no: 36466871 +45 4516 9200\n        </Typography>\n        <Typography variant=\"body2\">info@dhigroup.com</Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          2. COLLECTION OF PERSONAL DATA\n        </Typography>\n        <Typography variant=\"body2\">\n          You will always be informed in connection with collection of personal\n          data about you. The personal data collected by us may include, for\n          instance, your name, your email address, IP address and similar\n          identification data, including information about your navigation on\n          the website.\n        </Typography>\n        <Typography variant=\"body2\">\n          In connection with the submission of your data it will always be\n          stated whether the submission is voluntary or necessary for completing\n          the desired action.\n        </Typography>\n        <Typography variant=\"body2\">\n          Your personal data is collected in one or several of the below cases:\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you sign up for DHI newsletter. The legal basis for such\n          processing is the GDPR art. 6(1)(a).\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you use DHI’s websites. The legal basis for such processing is\n          the GDPR art. 6(1)(f). The legitimate interest under (f) is for us to\n          improve our websites and to understand how our users use the websites.\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you download our software or applications. The legal basis for\n          such processing is the GDPR art. 6(1)(b).\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you sign up for an event. The legal basis for such processing\n          is the GDPR art. 6(1)(b).\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you sign up for an online or physical training course. The\n          legal basis for such processing is the GDPR art. 6(1)(b).\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you download our eBooks. The legal basis for such processing is\n          the GDPR art. 6(1)(b).\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you create an account at DHI webshops. The legal basis for such\n          processing is the GDPR art. 6(1)(b).\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you buy products or services at our webshops. The legal basis\n          for such processing is the GDPR art. 6(1)(b).\n        </Typography>\n        <Typography variant=\"body2\">\n          * When you contact us. The legal basis for such processing is the GDPR\n          art. 6(1)(b) and/or (f). The legitimate interest under (f) is for us\n          to be able to respond to your inquiry.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          3. USE OF PERSONAL DATA\n        </Typography>\n        <Typography variant=\"body2\">\n          We will use personal information only in ways that are compatible with\n          the purposes for which it was collected or subsequently authorised by\n          you. DHI will take reasonable steps to ensure that personal\n          information is relevant to its intended use, accurate, complete, and\n          current.\n        </Typography>\n        <Typography variant=\"body2\">\n          Please note, that we will only use your personal data to send\n          marketing material if you have given your explicit consent, unless\n          legislation allows us to contact you without your prior consent.\n        </Typography>\n        <Typography variant=\"body2\">\n          DHI keeps statistics about which areas of the site our users visit.\n          This information is used to improve the website. We do use data about\n          how our users navigate, to better understand how our users use our\n          websites and from that we try to improve the user experience.\n          Furthermore, we collect information about what our users, as a unit,\n          prefer. This information is also used to improve the website. We do\n          not sell or otherwise disclose information about how our users\n          navigate and use our website.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          4. SHARING OF PERSONAL DATA\n        </Typography>\n        <Typography variant=\"body2\">\n          We do not transfer your personal data to any third parties, except for\n          what is described in this section, without your consent.\n        </Typography>\n        <Typography variant=\"body2\">\n          Your personal data may be disclosed to partners of DHI (providers who\n          deliver services on behalf of DHI), for example IT service providers,\n          and in relation to sending out newsletters. These partners only\n          process the personal data on behalf of DHI and in accordance with\n          DHI’s instructions. Furthermore, your personal data may be shared with\n          business partners, e.g. freight companies, for the delivery of goods\n          you buy in our webshop.\n        </Typography>\n        <Typography variant=\"body2\">\n          Your personal data may also be shared within the DHI group with all\n          DHI affiliated companies. A list of all affiliated companies may be\n          found on the following link:{' '}\n          <Link\n            href=\"https://www.dhigroup.com/privacy/sharing-of-personal-data#companies\"\n            variant=\"body2\"\n            className={classes.link}\n          >\n            https://www.dhigroup.com/privacy/sharing-of-personal-data#companies\n          </Link>\n        </Typography>\n        <Typography variant=\"body2\">\n          Under specific circumstances and with reference to legislation, it\n          might be necessary to transfer information to public authorities or\n          the police. For example, information may be disclosed to the police in\n          case of suspicion of credit card fraud.\n        </Typography>\n        <Typography variant=\"body2\">\n          In the case of a re-organization, full or partial sale of the company,\n          any disclosure in such connection will be in accordance with current\n          legislation for the processing of personal data.\n        </Typography>\n        <Typography variant=\"body2\">\n          If your personal data are transferred to data controllers or data\n          processors, which are located in countries outside the EU/EEA not\n          ensuring an adequate level of data protection, such transfers will be\n          adequately safeguarded by DHI, e.g. via the EU Commission’s Standard\n          Contractual Clauses. Please contact us if you wish further\n          information.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          5. DELETION OF PERSONAL DATA\n        </Typography>\n        <Typography variant=\"body2\">\n          We will delete your personal data when we no longer need to process\n          them in relation to one or more of the purposes set out above.\n          However, the data may be processed and stored for a longer period in\n          anonymized form.\n        </Typography>\n        <Typography variant=\"body2\">\n          We take appropriate measures to ensure that we process and store your\n          personal data based on:\n        </Typography>\n        <Typography variant=\"body2\">\n          * as a minimum for the time period in which we deliver a service to\n          you,\n        </Typography>\n        <Typography variant=\"body2\">\n          * in accordance with law, contract, or our legal obligations,\n        </Typography>\n        <Typography variant=\"body2\">\n          * or as long as the data are necessary in order for the purposes for\n          which they are collected, or longer if it is required by contract,\n          applicable law, or for statistical purposes governed by appropriate\n          security measures.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          6. COOKIES\n        </Typography>\n        <Typography variant=\"body2\">\n          We use cookies on our website. You can read more about the use of\n          cookies in our Cookie Policy, which you can find on the following\n          link:\n          <Link\n            href=\"https://www.dhigroup.com/cookie-page\"\n            className={classes.link}\n          >\n            https://www.dhigroup.com/cookie-page\n          </Link>\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          7. SECURITY\n        </Typography>\n        <Typography variant=\"body2\">\n          We have implemented security measures to ensure that our internal\n          procedures meet our high security policy standards. For example, we\n          use encryption. Further, we strive to ensure the ongoing\n          confidentiality, integrity, availability and resilience when\n          processing your personal data. In the event of physical or technical\n          incidents, we make every effort to restore the availability and access\n          to your personal data in a timely manner. We also have processes for\n          assessing and evaluating the effectiveness in order to ensure that the\n          security level is sufficient.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          8. YOUR RIGHTS\n        </Typography>\n        <Typography variant=\"body2\">\n          You are at any time entitled to be informed of the personal data about\n          you that we process, but with certain legislative exceptions. You also\n          have the right to object to the collection and further processing of\n          your personal data including profiling/automated decision-making.\n          Furthermore, you have the right to have your personal data rectified,\n          erased or blocked according to the rules. Moreover, you have the right\n          to receive information about you that you have provided to us, and the\n          right to have this information transmitted to another data controller\n          (data portability).\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          9. WITHDRAWAL OF CONSENT\n        </Typography>\n        <Typography variant=\"body2\">\n          You may, at any time, withdraw any consent you have given and we will\n          delete your personal data, unless we can continue the processing based\n          on another purpose. If you wish to withdraw your consent, please\n          contact us at\n          <Link href=\"info@dhigroup.com\" className={classes.link}>\n            info@dhigroup.com\n          </Link>\n          or +45 4516 9200.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          10. LINKS TO OTHER WEBSITES ETC.\n        </Typography>\n        <Typography variant=\"body2\">\n          Our website may contain links to other websites or to integrated\n          sites. We are not responsible for the contents of the websites of\n          other companies or for the practices of such companies regarding the\n          collection of personal data. When you visit other websites, you should\n          read the owners' policies on the protection of personal data and other\n          relevant policies.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          11. CHANGES TO OUR PRIVACY POLICY\n        </Typography>\n        <Typography variant=\"body2\">\n          We reserve the right to change this privacy policy based on material\n          changes in legislation, new technological solutions, new or improved\n          features, or to improve our websites.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          12. AMENDMENT OF DATA ETC.\n        </Typography>\n        <Typography variant=\"body2\">\n          If you want us to update, amend or delete the personal data that we\n          have recorded about you, or if you wish to get access to the data\n          being processed about you, or if you have any questions concerning the\n          above guidelines, you may contact us at{' '}\n          <Link href=\"info@dhigroup.com\" className={classes.link}>\n            info@dhigroup.com\n          </Link>{' '}\n          or +45 4516 9200. You may also write to us at the following\n          address:DHI, Agern Allé 5, 2970 Hørsholm, Denmark\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          13. COMPLAINTS\n        </Typography>\n        <Typography variant=\"body2\">\n          If you wish to appeal against the processing of your personal data,\n          please contact us by email, telephone or letter as indicated above.\n          You may also contact the Data Protection Agency, Borgergade 28, 5.,\n          1300 Copenhagen K, Denmark.\n        </Typography>\n      </Box>\n    </Box>\n  );\n};\n\nexport default withStyles(styles, { withTheme: true })(Privacy);\n","export default {\n  link: {\n    color: 'blue',\n  },\n};\n","import React from 'react';\nimport { Box, Typography } from '@material-ui/core';\n\nconst Terms = () => {\n  return (\n    <Box>\n      <Box py={1}>\n        <Typography variant=\"body2\">\n          At DHI (\"DHI\", \"we\" or “us”) data protection and confidentiality is a\n          high priority. This privacy policy sets out clear guidelines for how\n          DHI processes your personal data. Further, we explain how we use the\n          personal data that you leave and/or provide when you visit our\n          websites or when you interact with us with various business relations.\n        </Typography>\n        <Typography variant=\"body2\">\n          The Terms addresses your legal rights and obligations and includes\n          important disclaimers and choice of law and forum provisions. Please\n          read carefully. The Terms apply to all websites of DHI Group,\n          including sites for registered users.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          OWNERSHIP OF THE WEBSITE\n        </Typography>\n        <Typography variant=\"body2\">\n          The website is owned and operated by DHI (referred as we/us in these\n          Terms), a corporation incorporated under the laws of Denmark, having\n          its principal office in Hørsholm.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          USE LICENSE\n        </Typography>\n        <Typography variant=\"body2\">\n          Please feel free to browse the website. We grant you permission to\n          view this website and to print or download material displayed on the\n          website for your own personal, non-commercial use, provided that you\n          agree to and accept without modification the notices, terms and\n          conditions set forth in this agreement and provided that you keep\n          intact all copyright, trademark and other proprietary notices. You may\n          not however copy, reproduce, republish, upload, transmit or distribute\n          in any way the contents of this website, including the text, images,\n          audio and video for public or commercial purposes, without written\n          permission from us. You are also prohibited from using any content of\n          this website in a frame on any other internet site in any way.\n        </Typography>\n        <Typography variant=\"body2\">\n          Your use of this website constitutes your agreement and acceptance\n          without modification of the notices, terms and conditions set forth\n          herein. In addition as a condition of your use of this website, you\n          represent and warrant to us that you will not use this website for any\n          purpose that is unlawful, immoral or prohibited by these terms,\n          conditions and notices.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          USER SUBMISSIONS\n        </Typography>\n        <Typography variant=\"body2\">\n          Any communication or material that you transmit to the website by\n          e-mail or otherwise is, and will be treated as non-confidential and\n          non-proprietary information. Anything you transmit or post may be used\n          by us for any purpose. You are prohibited from posting or transmitting\n          to or from this Site any unlawful, threatening, libellous, defamatory,\n          obscene, pornographic, or other material that may violate any law.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          LINKS TO AND FROM OTHER MATERIALS\n        </Typography>\n        <Typography variant=\"body2\">\n          We may provide hyperlinks to third party sites. The linked sites are\n          not under our control and in no way are we responsible for the content\n          of any such linked site or for the content of any site linked to such\n          linked site. We do not endorse companies or products to which it may\n          provide hyperlinks and we reserve the right to note as such on our\n          Site. We reserve the unilateral right to terminate any link or linking\n          program at any time. If you decide to access any of the third party\n          sites linked to this website, you do so at your own risk. Third\n          parties may only provide hyperlinks to our main homepage. Any links to\n          underlying sites require a prior written approval from us.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          CONTENT\n        </Typography>\n        <Typography variant=\"body2\">\n          We take great care in creating and maintaining this website, and in\n          providing accurate and up-to-date content. However, the content of\n          this website is subject to frequent modifications without prior\n          notice. Therefore, we do not guarantee the correct and actual status\n          of said content. The visitors to the website accept our exoneration of\n          any liability whatsoever for the content of the website, the software\n          on the website or for any use made of it.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          INTELLECTUAL PROPERTY\n        </Typography>\n        <Typography variant=\"body2\">\n          The texts, layouts, drawings, databases and other items on this\n          website, as well as the website itself, are protected by copyright and\n          by the right of the producer of the database. Some of the names, signs\n          and logos on this website are protected trademarks or trade names.\n          Nothing contained on the website should be construed as granting any\n          license or right to use any trademark, displayed on the website\n          without the written permission from us or such third party that may\n          own the trademarks displayed on the website. Any copy, adaptation,\n          translation, arrangement, modification, or any use whatsoever of the\n          whole or of any part of this website of its protected elements, in any\n          form and by any means, is strictly prohibited.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          DATA PROTECTION\n        </Typography>\n        <Typography variant=\"body2\">\n          We collect and process information on the behaviour of the users of\n          this Site for statistical and marketing purposes. The user has the\n          right to oppose, free of charge, the processing for marketing purposes\n          of the data concerning him, and has the right to access personal data\n          and correct such data. For more information regarding the data that we\n          collect and the measures we take to protect the privacy of our user\n          data please refer to our Privacy Policy.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          LIABILITY\n        </Typography>\n        <Typography variant=\"body2\">\n          Your use of and browsing in this Site is at your own risk. DHI does\n          not warrant that the software used for this Site, and the information,\n          the on-line applications, or any other services provided by means of\n          this Site are error-free, or that their use will be uninterrupted. DHI\n          expressly disclaims all warranties related to the above-mentioned\n          subject matter, including, without limitation, those of accuracy,\n          condition, merchantability and fitness for particular purpose.\n          Notwithstanding anything to the contrary in this Site, in no event\n          shall DHI be liable for any loss of profits, revenues, indirect,\n          special, incidental, consequential, or other similar damages arising\n          out of or in connection with this Site or out of the use of any of the\n          services proposed by means of this Site.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          PRODUCT ORDERS\n        </Typography>\n        <Typography variant=\"body2\">\n          While we will use our best efforts to fulfill all orders, we cannot\n          guarantee the availability of any particular product displayed on this\n          website. We reserve the right to discontinue the sale of any product\n          listed on this website at any time without notice.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          UPDATES\n        </Typography>\n        <Typography variant=\"body2\">\n          We reserve the unilateral right to update, modify, change and alter\n          our Terms and Privacy Policy at any time. All such updates,\n          modifications, changes and alterations are binding on all users and\n          browsers of our website and will be posted here.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          SOFTWARE LICENSES\n        </Typography>\n        <Typography variant=\"body2\">\n          You shall have no rights to the proprietary software and related\n          documentation, or any enhancements or modifications thereto, which may\n          be provided to you in order to access specified areas within the\n          website. You may not sublicense, assign or transfer any licenses\n          granted by us, and any attempt at such sublicense, assignment or\n          transfer shall be null and void. You may not otherwise copy,\n          distribute, modify, reverse engineer, or create derivative works from\n          such software.\n        </Typography>\n      </Box>\n      <Box py={1}>\n        <Typography gutterBottom variant=\"subtitle1\">\n          CHOICE OF LAW AND FORUM PROVISIONS\n        </Typography>\n        <Typography variant=\"body2\">\n          This website resides on a server in Hørsholm, Denmark. You agree that\n          these Terms and your use of this website are governed by the laws of\n          Denmark. You hereby consent to the jurisdiction and venue of the\n          Municipal Court of Lyngby, Denmark in all disputes (a) arising out of,\n          relating to, or concerning this website and/or these Terms, (b) in\n          which this website and/or these Terms is an issue or a material fact,\n          or (c) in which this website and/or these Terms is referenced in a\n          paper filed in a court, tribunal, agency or other dispute resolution\n          organisation. We have endeavoured to comply with all legal\n          requirements known to us in creating and maintaining this website, but\n          make no representation that materials on this website are appropriate\n          or available for use in any particular jurisdiction. You are\n          responsible for compliance with applicable laws. Any use in\n          contravention of this provision or any provision of these Terms is at\n          your own risk and, if any part of these Terms is invalid or\n          unenforceable under applicable law, the invalid or unenforceable\n          provision will be deemed superseded by a valid, enforceable provision\n          that most closely matches the intent of the original provision and the\n          remainder of these Terms shall govern such use.\n        </Typography>\n      </Box>\n    </Box>\n  );\n};\n\nexport default Terms;\n","import React from 'react';\nimport {\n  Box,\n  ExpansionPanel,\n  ExpansionPanelDetails,\n  ExpansionPanelSummary,\n  Typography,\n} from '@material-ui/core';\nimport { About, Contact, Disclaimer, FAQ, Privacy, Terms } from './partials';\n\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport DHITheme from 'styles/theme';\n\nconst panels = [\n  {\n    title: 'About',\n    component: About,\n  },\n  {\n    title: 'FAQ',\n    component: FAQ,\n  },\n  {\n    title: 'Contact',\n    component: Contact,\n  },\n  {\n    title: 'Disclaimer',\n    component: Disclaimer,\n  },\n  {\n    title: 'Privacy',\n    component: Privacy,\n  },\n  {\n    title: 'Terms',\n    component: Terms,\n  },\n];\n\nconst Info = () => {\n  const [expanded, setExpanded] = React.useState();\n\n  const handleChange = panel => (e, isExpanded) => {\n    setExpanded(isExpanded ? panel : false);\n  };\n\n  const { primary } = DHITheme.palette;\n\n  return (\n    <Box>\n      <Typography\n        variant=\"h6\"\n        style={{\n          backgroundColor: '#F2F5F7',\n          padding: '8px 16px',\n          borderBottom: '1px solid #DBE4E9',\n        }}\n      >\n        Support\n      </Typography>\n      {panels.map(({ title, component: Component }) => (\n        <ExpansionPanel\n          key={title}\n          expanded={expanded === title}\n          onChange={handleChange(title)}\n        >\n          <ExpansionPanelSummary\n            expandIcon={<ExpandMoreIcon style={{ color: primary.main }} />}\n            aria-controls=\"panel1bh-content\"\n            id=\"panel1bh-header\"\n          >\n            <Typography variant=\"h6\" style={{ fontSize: 12 }}>\n              {title}\n            </Typography>\n          </ExpansionPanelSummary>\n          <ExpansionPanelDetails>\n            <Component />\n          </ExpansionPanelDetails>\n        </ExpansionPanel>\n      ))}\n    </Box>\n  );\n};\n\nexport default Info;\n","import React from 'react';\nimport { useAuth0 } from 'react-auth0-spa';\nimport {\n  Box,\n  Button,\n  Card,\n  CardContent,\n  Link,\n  Typography,\n} from '@material-ui/core';\n\nimport 'styles/scrollbar.css';\n\nconst Tool = () => {\n  const { isAuthenticated, loginWithPopup } = useAuth0();\n\n  return (\n    <Box>\n      {isAuthenticated ? (\n        <Card>\n          <Typography\n            variant=\"h6\"\n            style={{\n              backgroundColor: '#F2F5F7',\n              padding: '8px 16px',\n              borderTop: '1px solid #DBE4E9',\n            }}\n          >\n            Welcome to the Soil Moisture App\n          </Typography>\n          <CardContent style={{ padding: '16px' }}>\n            <Typography variant=\"body2\" color=\"primary\">\n              Currently, we are adding more features to the application. If you\n              have any ideas what might be valuable for you, do not hesitate to\n              contact us at{' '}\n              <Link href=\"mailto:gras@dhigroup.com\">gras@dhigroup.com</Link>.\n            </Typography>\n          </CardContent>\n        </Card>\n      ) : (\n        <Card>\n          <Typography\n            variant=\"h6\"\n            style={{\n              backgroundColor: '#F2F5F7',\n              padding: '8px 16px',\n              borderTop: '1px solid #DBE4E9',\n            }}\n          >\n            Log in\n          </Typography>\n          <CardContent style={{ padding: '16px' }}>\n            <Typography variant=\"subtitle2\" style={{ marginBottom: 8 }}>\n              Welcome to the Soil Moisture App.\n            </Typography>\n\n            <Typography variant=\"body2\" color=\"primary\">\n              Please, log in to access the tool, if you don't have an account\n              you need to sign up and verify your account.\n            </Typography>\n\n            <Typography variant=\"body2\" color=\"primary\">\n              In order to use this tool to the full capacity, we need to accept\n              your account. You will receive a confirmation email when you can\n              access the data and have full functionality.\n            </Typography>\n\n            <Button\n              variant=\"contained\"\n              color=\"secondary\"\n              fullWidth\n              onClick={() => loginWithPopup()}\n            >\n              Log in / Sign up\n            </Button>\n          </CardContent>\n        </Card>\n      )}\n    </Box>\n  );\n};\n\nexport default Tool;\n","import React from 'react';\nimport { Paper } from '@material-ui/core';\nimport { Info, Tool } from './partials';\n\nimport { AppContext } from 'App';\n\nimport 'styles/scrollbar.css';\n\nconst Sidebar = () => {\n  const {\n    state: { activeTab },\n  } = React.useContext(AppContext);\n\n  return (\n    <Paper\n      style={{\n        width: '360px',\n        overflowY: 'auto',\n        height: 'calc(100vh - 56px)',\n      }}\n    >\n      {activeTab === 0 && <Info />}\n      {activeTab === 1 && <Tool />}\n    </Paper>\n  );\n};\n\nexport default Sidebar;\n","import React from 'react';\nimport classnames from 'classnames';\nimport { Box, Paper, IconButton } from '@material-ui/core';\n\nimport { AppContext } from 'App';\nimport { iconStyle } from 'styles/global';\n\nimport { ReactComponent as InfoIcon } from '@mike/mike-shared-frontend/media/icons/Info.svg';\nimport { ReactComponent as LayerIcon } from '@mike/mike-shared-frontend/media/icons/Layer.svg';\nimport { ReactComponent as LeftIcon } from '@mike/mike-shared-frontend/media/icons/Left.svg';\nimport { ReactComponent as RightIcon } from '@mike/mike-shared-frontend/media/icons/Right.svg';\n\nconst icons = [\n  {\n    id: 0,\n    component: InfoIcon,\n  },\n  {\n    id: 1,\n    component: LayerIcon,\n  },\n];\n\nconst SidebarControl = () => {\n  const {\n    actions: { handleToggleDrawer, setTab },\n    state: { activeTab, openDrawer },\n  } = React.useContext(AppContext);\n\n  const classes = iconStyle();\n\n  return (\n    <Paper\n      style={{\n        overflowY: 'auto',\n        height: 'calc(100vh - 56px)',\n        borderLeft: '1px solid rgb(219, 228, 233)',\n        boxShadow: '4px 0px 4px rgba(0, 0, 0, 0.6)',\n      }}\n    >\n      <IconButton className={classes.button} onClick={handleToggleDrawer}>\n        {openDrawer ? (\n          <RightIcon className={classes.icon} />\n        ) : (\n          <LeftIcon className={classes.icon} />\n        )}\n      </IconButton>\n\n      <Box\n        style={{\n          position: 'fixed',\n          top: 'calc(50vh - 18px)',\n        }}\n      >\n        {icons.map(({ id, component: Component }) => (\n          <IconButton\n            key={id}\n            className={classes.button}\n            onClick={() => setTab(id)}\n          >\n            <Component\n              className={classnames({\n                [classes.icon]: true,\n                [classes.activeIcon]: activeTab === id,\n              })}\n            />\n          </IconButton>\n        ))}\n      </Box>\n    </Paper>\n  );\n};\n\nexport default SidebarControl;\n","import axios from 'axios';\n\n// Original Soil Moisture API url:'https://cna95whw4h.execute-api.eu-central-1.amazonaws.com/development/geoserver/soilmoisture/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=soilmoisture%3Aparcels-wgs84&srs=EPSG%3A3857&maxFeatures=1200&outputFormat=application%2Fjson';\n\nconst featuresApi =\n  'https://cna95whw4h.execute-api.eu-central-1.amazonaws.com/development/geoserver/soilmoisture/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=soilmoisture%3Aparcels-wgs84&srs=EPSG%3A3857&maxFeatures=1200&outputFormat=application%2Fjson';\n// 'https://cna95whw4h.execute-api.eu-central-1.amazonaws.com/development/geoserver/LBST2020/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=LBST2020%3AFields_2019_05_28_final_withTiles_epsg4326&srs=EPSG%3A3857&maxFeatures=1200&outputFormat=application%2Fjson';\n\nconst timeseriesApi =\n  'https://ptiz90xgrd.execute-api.eu-central-1.amazonaws.com/development/';\n// 'https://0cppmvid99.execute-api.eu-central-1.amazonaws.com/development/soil-moisture?year=2018&polygon=';\n// 'https://0cppmvid99.execute-api.eu-central-1.amazonaws.com/development/soil-moisture?year=2016,2017,2018&month=03,04,05&polygon=';\n// 'https://0cppmvid99.execute-api.eu-central-1.amazonaws.com/development/soil-moisture?tile_id=32UMG&polygon=8.681344985961914,55.44162542064856,8.683233261108398,55.436975530675,8.681731224060059,55.436683372700145,8.682503700256348,55.43583123292177,8.681817054748535,55.4354660245281,8.679113388061523,55.43829021480116,8.678083419799805,55.441162890685774,8.681344985961914,55.44162542064856';\n\nexport const fetchFeatures = async query => {\n  try {\n    const response = await axios.get(featuresApi + query);\n    if (!response) throw Error(`Request rejected`);\n    const { data } = response || {};\n    // console.log(data);\n    return Promise.resolve(data);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n};\n\nexport const fetchTimeseries = async query => {\n  try {\n    // console.log(query);\n    const response = await axios.get(timeseriesApi + query);\n    // console.log(timeseriesApi + query);\n    if (!response) throw Error(`Request rejected`);\n    const { data } = response || {};\n    // console.log(data);\n    return Promise.resolve(data);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n};\n","import React from 'react';\nimport { useSnackbar } from 'notistack';\nimport { Box, Grid } from '@material-ui/core';\n\nimport Loader from 'components/Loader';\nimport Map from 'components/Map';\nimport Navigation from 'components/Navigation';\nimport Timeseries from 'components/Timeseries';\nimport Sidebar from 'components/Sidebar';\nimport SidebarControl from 'components/SidebarControl';\nimport { fetchTimeseries } from 'data';\n\nexport const AppContext = React.createContext();\n\nconst App = () => {\n  // const classes = useStyles();\n  const { enqueueSnackbar } = useSnackbar();\n  const [activeTab, setTab] = React.useState(0);\n  const [loading, setLoading] = React.useState(false);\n  const [openDrawer, setOpenDrawer] = React.useState(true);\n  const [openTimeseries, setOpenTimeseries] = React.useState(false);\n  const [parcel, setParcel] = React.useState(false);\n\n  const [timeseriesData, setTimeseriesData] = React.useState([]);\n  const [timeseriesDates, setTimeseriesDates] = React.useState();\n  const [selectedRange, setRange] = React.useState();\n\n  const [legendData, setLegendData] = React.useState();\n  const [bitmap, setBitmap] = React.useState(false);\n  const defaultDateRange = 60;\n\n  const handleDates = async () => {\n    setLoading(true);\n    setOpenTimeseries(true);\n    const {\n      geometry: {\n        coordinates: [points],\n      },\n    } = parcel;\n\n    const queryArea = '&polygon=' + points;\n    const queryDates = 'soil-moisture-dates?' + queryArea;\n    const _dates = await fetchTimeseries(queryDates);\n    setTimeseriesDates([..._dates]);\n\n    const defaultRange = [_dates.length - defaultDateRange, _dates.length - 1];\n    setRange([...defaultRange]);\n  };\n\n  const handleTimeseries = async () => {\n    try {\n      setLoading(true);\n      setOpenTimeseries(true);\n\n      const {\n        geometry: {\n          coordinates: [points],\n        },\n      } = parcel;\n\n      const queryArea = '&polygon=' + points;\n      const queryData =\n        'soil-moisture?start-date=' +\n        timeseriesDates[selectedRange[0]] +\n        '&end-date=' +\n        timeseriesDates[selectedRange[1]] +\n        queryArea;\n\n      const data = await fetchTimeseries(queryData);\n\n      setTimeseriesData([\n        ...data.map(({ bounds, date, image, mean, std }) => {\n          const newMean = (mean * 100).toFixed(2);\n          const minStd = ((mean - std) * 100).toFixed(2);\n          const maxStd = ((mean + std) * 100).toFixed(2);\n\n          return {\n            bounds,\n            date,\n            image,\n            mean: newMean,\n            std: [minStd, maxStd],\n          };\n        }),\n      ]);\n      setLoading(false);\n    } catch (error) {\n      console.error(error);\n      enqueueSnackbar(`${error}, please try again later or contact us.`, {\n        variant: 'error',\n      });\n    }\n  };\n\n  React.useEffect(() => {\n    parcel && handleDates();\n    setBitmap(false);\n  }, [parcel]);\n\n  React.useEffect(() => {\n    selectedRange && handleTimeseries();\n  }, [selectedRange]);\n\n  const handleToggleDrawer = () => {\n    setOpenDrawer(!openDrawer);\n  };\n\n  const updateLegend = _args => {\n    setLegendData(_args);\n  };\n\n  const updateRange = _val => {\n    setRange([..._val]);\n  };\n\n  return (\n    <AppContext.Provider\n      value={{\n        state: {\n          activeTab,\n          bitmap,\n          defaultDateRange,\n          legendData,\n          loading,\n          openDrawer,\n          openTimeseries,\n          parcel,\n          selectedRange,\n          timeseriesData,\n          timeseriesDates,\n        },\n        actions: {\n          handleToggleDrawer,\n          setBitmap,\n          setOpenDrawer,\n          setParcel,\n          setTab,\n          setTimeseriesDates,\n          updateLegend,\n          updateRange,\n        },\n      }}\n    >\n      <Loader isLoading={loading} />\n      <Box\n        style={{\n          position: 'fixed',\n          top: 0,\n          left: 0,\n          width: '100vw',\n          height: '100vh',\n        }}\n      >\n        <Grid container space={0}>\n          <Navigation />\n        </Grid>\n        <Box\n          display=\"flex\"\n          flexWrap=\"nowrap\"\n          style={{\n            height: '100%',\n            backgroundColor: 'transparent',\n          }}\n          p={0}\n        >\n          <Box\n            p={0}\n            m={0}\n            flexGrow={1}\n            style={{ backgroundColor: 'transparent' }}\n          >\n            <Grid container space={0} style={{ height: '100%' }}>\n              <Grid\n                container\n                space={0}\n                style={{\n                  height: openTimeseries ? '55% ' : 'calc(100% - 56px)',\n                  position: 'relative',\n                }}\n              >\n                <Map bitmap={bitmap} parcel={parcel} setParcel={setParcel} />\n              </Grid>\n\n              {openTimeseries && <Timeseries />}\n            </Grid>\n          </Box>\n\n          {openDrawer && (\n            <Box>\n              <Sidebar activeTab={activeTab} />\n            </Box>\n          )}\n\n          <Box p={0} m={0} flexShrink={0}>\n            <SidebarControl />\n          </Box>\n        </Box>\n      </Box>\n    </AppContext.Provider>\n  );\n};\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Router } from 'react-router-dom';\nimport { ThemeProvider, withStyles } from '@material-ui/core';\nimport { SnackbarProvider } from 'notistack';\nimport { Auth0Provider } from './react-auth0-spa';\nimport config from 'config/auth0.json';\nimport history from './data/history';\n\nimport * as serviceWorker from './serviceWorker';\nimport './index.css';\nimport DHITheme from './styles/theme';\nimport App from './App';\n\nconst onRedirectCallback = appState => {\n  history.push(\n    appState && appState.targetUrl\n      ? appState.targetUrl\n      : window.location.pathname\n  );\n};\n\nconst CustomSnackbarProvider = withStyles({\n  variantSuccess: { backgroundColor: '#61C051' },\n  variantError: { backgroundColor: '#FD3F75' },\n  variantWarning: { backgroundColor: '#FFC20A' },\n  variantInfo: { backgroundColor: '#00A4EC' },\n})(SnackbarProvider);\n\nReactDOM.render(\n  <Router history={history}>\n    <ThemeProvider theme={DHITheme}>\n      <CustomSnackbarProvider>\n        <Auth0Provider\n          // audience={config.audience}\n          client_id={config.clientId}\n          domain={config.domain}\n          onRedirectCallback={onRedirectCallback}\n          redirect_uri={window.location.origin}\n          // scope={config.scope}\n        >\n          <App />\n        </Auth0Provider>\n      </CustomSnackbarProvider>\n    </ThemeProvider>\n  </Router>,\n\n  document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}