{"version":3,"sources":["components/AuthContext.js","components/Login.js","components/ProductList.js","App.js","registerServiceWorker.js","index.js"],"names":["AuthContext","React","createContext","Login","props","_useState","useState","_useState2","Object","slicedToArray","isLoading","setIsLoading","_useState3","_useState4","username","setUsername","_useState5","_useState6","password","setPassword","_useState7","_useState8","loginError","setLoginError","_useContext","useContext","login","logout","onLoginClick","useCallback","event","body","querystring","stringify","request","expiration","f","axios","post","Content-Type","then","response","data","error","expiresInMilliseconds","expires","Date","getTime","setTimeout","get","params","token","_ref","categories","catch","react_default","a","createElement","reactstrap_es","className","for","type","name","onChange","target","value","invalid","onKeyDown","key","onClick","role","aria-hidden","ProductList","page","totalPages","files","selectedCategory","filter","state","setState","user","debouncedUpdateProducts","debounce","updateProducts","category","objectSpread","productListLoading","useEffect","settings","length","fluid","xl","sm","xs","react_select_browser_esm","classNamePrefix","options","placeholder","disabled","previous","href","preventDefault","next","map","index","concat","url","fileName","moment","lastModified","format","bytes","i","parseInt","Math","floor","log","round","pow","bytesToSize","size","App","ProductList_ProductList","Login_Login","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","console","baseUrl","document","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","BrowserRouter","basename","_React$useState","_React$useState2","setUser","Provider","children","src_App","URL","process","origin","addEventListener","fetch","status","headers","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.acdf5ea8.chunk.js","sourcesContent":["import React from 'react'\r\n\r\nconst AuthContext = React.createContext()\r\n\r\nconst AuthProvider = (props) => {\r\n const [user, setUser] = React.useState({ name: null, token:null, settings: null })\r\n\r\n\r\n const login = (name, token, settings) => { setUser({name, token, settings }) }\r\n const logout = () => { setUser({ name: null, token: null, settings: null }) }\r\n\r\n return (\r\n \r\n {props.children} \r\n \r\n )\r\n}\r\n\r\nexport { AuthContext, AuthProvider }","import React, { useCallback, useContext, useState } from 'react';\r\nimport { Container, Col, Form, FormGroup, FormFeedback, Label, Input, Button } from 'reactstrap';\r\nimport axios from 'axios'\r\nimport querystring from 'query-string'\r\nimport { AuthContext } from './AuthContext'\r\nimport './Login.css'\r\n\r\nexport const Login = (props) => {\r\n const [ isLoading, setIsLoading] = useState(false);\r\n const [ username, setUsername ] = useState('');\r\n const [ password, setPassword ] = useState('');\r\n const [ loginError, setLoginError ] = useState(null);\r\n const { login, logout } = useContext(AuthContext);\r\n\r\n const onLoginClick = useCallback(event => {\r\n var expirationInMinutes = 60;\r\n var body = querystring.stringify({\r\n request: 'getToken',\r\n username: username,\r\n password: password,\r\n expiration: expirationInMinutes,\r\n f: 'json'\r\n });\r\n\r\n setIsLoading(true);\r\n axios.post(\"https://services.geodataonline.no/arcgis/tokens/\", body, { 'Content-Type': 'application/x-www-form-urlencoded' })\r\n .then(response => {\r\n if (response.data.error) {\r\n setIsLoading(false);\r\n setLoginError(\"Feil brukernavn eller passord\");\r\n return;\r\n }\r\n\r\n var expiresInMilliseconds = response.data.expires - new Date().getTime()\r\n setTimeout(() => {\r\n logout();\r\n }, expiresInMilliseconds)\r\n\r\n axios.get(`settings`, {\r\n params: {\r\n token: response.data.token\r\n }\r\n })\r\n .then(({data}) => {\r\n login(username, response.data.token, { categories: data.categories })\r\n }).catch(() => {\r\n setIsLoading(false);\r\n setLoginError(\"Det oppstod en feil, prøv igjen senere\");\r\n })\r\n })\r\n }, [username, password, login, logout, setLoginError, setIsLoading])\r\n\r\n const onPasswordKeyDown = event => {\r\n if (event.key === \"Enter\") {\r\n onLoginClick()\r\n }\r\n }\r\n\r\n return (\r\n \r\n
Logg inn med din Geodata Online-bruker
\r\n
\r\n \r\n \r\n \r\n setUsername(event.target.value)} invalid={loginError ? true : false} />\r\n {loginError}\r\n \r\n \r\n \r\n setPassword(event.target.value)} onKeyDown={onPasswordKeyDown} />\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Container, Row, Col, Form, Input, Pagination, PaginationItem, PaginationLink } from 'reactstrap';\r\nimport Select from 'react-select';\r\nimport axios from 'axios';\r\nimport debounce from 'lodash.debounce';\r\nimport moment from 'moment-js';\r\nimport { AuthContext, } from './AuthContext';\r\nimport './ProductList.css';\r\n\r\nexport const ProductList = (props) => {\r\n const [state, setState] = useState({ page:0, totalPages:0, files: [], selectedCategory: null, filter: '' });\r\n const { user, logout } = useContext(AuthContext)\r\n const debouncedUpdateProducts = debounce(filter => updateProducts(state.selectedCategory, filter), 300);\r\n\r\n const onSelectedCategoryChanged = category => {\r\n updateProducts(category, state.filter);\r\n };\r\n\r\n const onFilterChanged = event => {\r\n debouncedUpdateProducts(event.target.value);\r\n }\r\n\r\n const updateProducts = (category, filter, page) => {\r\n setState({ ...state, files: [], productListLoading: true })\r\n axios.get(\"pagedjson\", {\r\n params: {\r\n category: category.value,\r\n filter: filter,\r\n token: user.token,\r\n page: page ? page : 1\r\n }\r\n }).then(({data}) => {\r\n setState({ ...state, page: data.totalPages == 0 ? 0 : data.page, totalPages: data.totalPages, files: data.files, selectedCategory: category, filter: filter, productListLoading: false });\r\n });\r\n }\r\n\r\n const onLogout = () => {\r\n logout();\r\n }\r\n\r\n useEffect(() => {\r\n var category = null;\r\n if (user.settings.categories.length > 0 ) {\r\n category = user.settings.categories[0]\r\n }\r\n\r\n updateProducts(category, '')\r\n }, user.settings.categories)\r\n\r\n const bytesToSize = (bytes) => {\r\n var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\r\n if (bytes == 0) return '0 Byte';\r\n var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));\r\n return Math.round(bytes / Math.pow(1024, i)*10)/10 + ' ' + sizes[i];\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n { state.totalPages > 1 &&\r\n \r\n \r\n \r\n {event.preventDefault(); updateProducts(state.selectedCategory, state.filter, state.page-1)}}/>\r\n \r\n\r\n \r\n {state.page} / {state.totalPages}\r\n \r\n \r\n {event.preventDefault(); updateProducts(state.selectedCategory, state.filter, state.page+1)}}/>\r\n \r\n \r\n }\r\n \r\n Logg ut\r\n \r\n \r\n { state.productListLoading &&
\r\n
\r\n \r\n
\r\n
}\r\n\r\n {state.files.map((f, index) => {\r\n return \r\n {f.fileName}\r\n {moment(f.lastModified).format('DD.MM.YYYY hh:mm')}\r\n {bytesToSize(f.size)}\r\n \r\n })}\r\n
\r\n
\r\n
\r\n )\r\n}","import React, { useContext } from 'react';\r\nimport { Login } from './components/Login';\r\nimport { ProductList } from './components/ProductList';\r\nimport { AuthContext, } from './components/AuthContext'\r\n\r\nimport './custom.css'\r\n\r\nconst App = (props) => {\r\n const { user } = useContext(AuthContext)\r\n return (user.token ? : )\r\n}\r\n\r\nexport default App;","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter, Redirect, Route, Switch } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport { AuthProvider, } from './components/AuthContext'\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n , rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n"],"sourceRoot":""}