{"version":3,"sources":["hooks/useRouteProvider.js","components/common/Util.js","hooks/useUserProvider.js","pages/LoadingScreen.js","components/LoadingScreen/LoadingScreenStyle.js","Routes.js","hooks/providerComposer.js","hooks/hooksProvider.js","App.js","serviceWorker.js","index.js"],"names":["RouteContext","createContext","RouteProvider","children","props","Provider","value","getErrorText","error","response","message","data","statusText","request","UserContext","UserProvider","withRouter","useState","isThereRequestId","setIsThereRequestId","loggedIn","setLoggedIn","lineAuthorization","setLineAuthorization","state","setState","history","useHistory","useEffect","token","localStorage","getItem","payload","decode","exp","userId","loginName","firstName","roles","Date","now","Number","getLineAuthorization","checkIsThereRequestId","login","password","a","params","axios","post","process","res","setItem","console","log","loginFromLine","lineToken","url","lineAccessToken","logout","removeItem","push","getCurrentUserRoles","requestIdParam","URLSearchParams","window","location","search","get","requestIdLocal","getCurrentUserId","getCurrentLoginName","getNewToken","Promise","resolve","reject","param","oldToken","then","catch","err","isCurrentUserCanBookQueueWithoutDN","includes","getCurrentFirstName","loginWithToken","getCurrentPlantId","loadingStation","plantId","hasRequestToken","hasToken","checkAuthority","type","redirectByHomepage","homepage","canBookDeliveryQueue","getChannels","LoadingScreen","ContainerStyle","styled","div","FCQueueBoard","lazy","BookQueue","CallSCGLAPIFailed","CallSCGLAPISuccessful","ConfirmQueue","ConfirmRegister","ChangePassword","ChangeUserData","LineCallback","LineSubscription","Login","Menu","NotFound","Register","RegisterCompleted","ReservationData","ReservationEntry","Walkin","NoHomepage","LineUserRegister","LineUserEditor","LineValidation","ResetPassword","RequestResetPassword","DynamicHomepage","LineQueueData","LineQueueManagement","LineAnnounce","Maintenance","PrivateRoute","Component","component","authed","rest","isLoginPage","render","Routes","useContext","isFirstLoad","setIsFirstLoad","id","fallback","path","exact","AuthPages","ProviderComposer","contexts","reduceRight","kids","parent","React","cloneElement","HooksProvider","App","Boolean","hostname","match","ReactDOM","StrictMode","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.a9f19ae0.chunk.js","sourcesContent":["import React, { createContext } from 'react'\r\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\r\n\r\nexport const RouteContext = createContext()\r\n\r\nexport const RouteProvider = ({children}) => {\r\n return (\r\n \r\n \r\n {props => (\r\n \r\n {children}\r\n \r\n )}\r\n \r\n \r\n )\r\n}","\r\nexport function getErrorText(error) {\r\n if (error.response) {\r\n const message = error.response.data.message ? error.response.data.message : error.response.statusText\r\n return `${message}` \r\n }else if(error.request){\r\n return `Error from request, ${error.message}`\r\n }else{\r\n return `Other error, ${error.message}`\r\n }\r\n}\r\n \r\n","import React, { useState, createContext, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport decode from 'jwt-decode'\r\nimport { withRouter } from 'react-router'\r\nimport { useHistory } from 'react-router-dom'\r\nimport { getErrorText } from '../components/common/Util'\r\n\r\nexport const UserContext = createContext()\r\n\r\nexport const UserProvider = withRouter((props) => {\r\n\tconst [isThereRequestId, setIsThereRequestId] = useState(false)\r\n\tconst [loggedIn, setLoggedIn] = useState(false)\r\n\tconst [lineAuthorization, setLineAuthorization] = useState(null)\r\n\tconst [state, setState] = useState(null)\r\n\tlet history = useHistory()\r\n\r\n\tuseEffect(() => {\r\n\t\tconst token = localStorage.getItem('token')\r\n\t\tif (token) {\r\n\t\t\tconst payload = decode(token)\r\n\t\t\tconst { exp, userId, loginName, firstName, roles } = payload\r\n\t\t\tif (!exp || Date.now() > Number(exp * 1000)) {\r\n\t\t\t\tsetLoggedIn(false)\r\n\t\t\t} else {\r\n\t\t\t\tsetState({\r\n\t\t\t\t\t...state,\r\n\t\t\t\t\tuserId,\r\n\t\t\t\t\tloginName,\r\n\t\t\t\t\tfirstName,\r\n\t\t\t\t\troles,\r\n\t\t\t\t\ttoken\r\n\t\t\t\t})\r\n\t\t\t\tsetLoggedIn(true)\r\n\t\t\t}\r\n\t\t\tgetLineAuthorization(userId)\r\n\t\t} else {\r\n\t\t\tsetLoggedIn(false)\r\n\t\t}\r\n\t\t//Check is there requestId?\r\n\t\tsetIsThereRequestId(checkIsThereRequestId())\r\n\t}, [])\r\n\r\n\tconst hasRequestToken = () => {\r\n\t\treturn !!localStorage.getItem('requestToken')\r\n\t}\r\n\r\n\tconst hasToken = () => {\r\n\t\treturn !!new URLSearchParams(window.location.search).get(\"token\");\r\n\t}\r\n\r\n\tconst redirectByHomepage = () => {\r\n\t\tconst homepage = localStorage.getItem('homepage')\r\n\t\tif (!homepage)\r\n\t\t\thistory.push('/noHomepage')\r\n\r\n\t\thistory.push(homepage)\r\n\t}\r\n\r\n\tconst login = async (login, password) => {\r\n\t\ttry {\r\n\t\t\tconst params = { loginName: login, password }\r\n\t\t\tconst res = await axios.post(`${process.env.REACT_APP_API_URL}/api/v1/users/login`, params)\r\n\t\t\tconst { userId, loginName, firstName, token } = res.data\r\n\t\t\tconst payload = decode(token)\r\n\t\t\tlocalStorage.setItem('token', token)\r\n\t\t\tsetState({\r\n\t\t\t\t...state,\r\n\t\t\t\tuserId,\r\n\t\t\t\tloginName,\r\n\t\t\t\tfirstName,\r\n\t\t\t\troles: payload.roles,\r\n\t\t\t\ttoken,\r\n\t\t\t\terror: ''\r\n\t\t\t})\r\n\t\t\tsetLoggedIn(true)\r\n\t\t\treturn payload\r\n\t\t} catch (error) {\r\n\t\t\tconsole.log(\"detect login error\", error)\r\n\t\t\tsetState({\r\n\t\t\t\t...state,\r\n\t\t\t\terror: getErrorText(error)\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tconst loginWithToken = token => {\r\n\t\tconst { userId, loginName, firstName } = decode(token)\r\n\t\tlocalStorage.setItem('requestToken', token)\r\n\t\tsetState({\r\n\t\t\t...state,\r\n\t\t\tuserId,\r\n\t\t\tloginName,\r\n\t\t\tfirstName,\r\n\t\t\ttoken,\r\n\t\t\terror: ''\r\n\t\t})\r\n\t}\r\n\r\n\tconst loginFromLine = async (lineToken) => {\r\n\t\ttry {\r\n\t\t\tconst url = `${process.env.REACT_APP_API_URL}/api/v1/users/loginByLine`\r\n\t\t\tconst payload = {\r\n\t\t\t\tlineAccessToken: lineToken\r\n\t\t\t}\r\n\t\t\tconst { data } = await axios.post(url, payload)\r\n\t\t\t//const url = `${process.env.REACT_APP_API_URL}/api/v1/Line/loginFromLineOA?lineAccessToken=${lineToken}`\r\n\t\t\t//const { data } = await axios.get(url)\r\n\t\t\tconst { message, loginName, token, userId } = data\r\n\t\t\tif (message === 'success') {\r\n\t\t\t\tsetLoggedIn(true)\r\n\t\t\t\tconst payload = decode(token)\r\n\t\t\t\tsetState({\r\n\t\t\t\t\t...state,\r\n\t\t\t\t\ttoken,\r\n\t\t\t\t\tuserId,\r\n\t\t\t\t\tloginName,\r\n\t\t\t\t\tfirstName: loginName,\r\n\t\t\t\t\troles: payload.roles,\r\n\t\t\t\t\terror: ''\r\n\t\t\t\t})\r\n\t\t\t\tlocalStorage.setItem('token', token)\r\n\t\t\t\treturn true\r\n\t\t\t} else {\r\n\t\t\t\treturn false\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t}\r\n\r\n\tconst logout = () => {\r\n\t\tlocalStorage.removeItem('userId')\r\n\t\tlocalStorage.removeItem('token')\r\n\t\tlocalStorage.removeItem('menuRoles')\r\n\t\tlocalStorage.removeItem('homepage')\r\n\t\tlocalStorage.removeItem('requestId')\r\n\t\tlocalStorage.removeItem('redirectType')\r\n\t\tsetState(null)\r\n\t\tsetLoggedIn(false)\r\n\t\thistory.push('/login')\r\n\t}\r\n\r\n\tconst getNewToken = () => {\r\n\t\tif (!state || state.userId === null || state.userId < 0) {\r\n\t\t\tlogout()\r\n\t\t\treturn\r\n\t\t}\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst param = { userId: state.userId, oldToken: state.token }\r\n\t\t\taxios.post(`${process.env.REACT_APP_API_URL}/api/v1/users/getnewtoken`, param)\r\n\t\t\t\t.then(res => {\r\n\t\t\t\t\tconst { userId, loginName, firstName, token } = res.data\r\n\t\t\t\t\tlocalStorage.setItem('token', token)\r\n\t\t\t\t\tconst payload = decode(token)\r\n\t\t\t\t\tsetState({\r\n\t\t\t\t\t\t...state,\r\n\t\t\t\t\t\tuserId,\r\n\t\t\t\t\t\tloginName,\r\n\t\t\t\t\t\tfirstName,\r\n\t\t\t\t\t\troles: payload.roles,\r\n\t\t\t\t\t\ttoken\r\n\t\t\t\t\t})\r\n\t\t\t\t\tresolve(\"success\")\r\n\t\t\t\t})\r\n\t\t\t\t.catch(err => {\r\n\t\t\t\t\tconsole.log(\"failed\")\r\n\t\t\t\t\tlogout()\r\n\t\t\t\t\treject(\"Error on get new token\")\r\n\t\t\t\t})\r\n\t\t})\r\n\t}\r\n\r\n\tconst getCurrentUserId = () => {\r\n\t\treturn state ? state.userId : null\r\n\t}\r\n\r\n\tconst getCurrentLoginName = () => {\r\n\t\treturn state ? state.loginName : null\r\n\t}\r\n\r\n\tconst getCurrentFirstName = () => {\r\n\t\treturn state ? state.firstName : null\r\n\t}\r\n\r\n\tconst getCurrentPlantId = () => {\r\n\t\tconst { loadingStation } = decode(state.token)\r\n\t\treturn loadingStation ? loadingStation.plantId : null\r\n\t}\r\n\r\n\tconst getCurrentUserRoles = () => {\r\n\t\tif (!state)\r\n\t\t\treturn []\r\n\t\treturn state.roles\r\n\t}\r\n\r\n\tconst isCurrentUserCanBookQueueWithoutDN = () => state?.roles?.includes(\"Book Queue Without DN\")\r\n\r\n\tconst canBookDeliveryQueue = () => state?.roles?.includes('Book Delivery Queue')\r\n\r\n\tconst checkIsThereRequestId = () => {\r\n\t\tconst requestIdParam = new URLSearchParams(window.location.search).get('requestId')\r\n\t\tconst requestIdLocal = localStorage.getItem('requestId')\r\n\t\treturn requestIdParam || requestIdLocal\r\n\t}\r\n\r\n\tconst checkAuthority = type => {\r\n\t\tconst roles = getCurrentUserRoles()\r\n\t\treturn roles.includes(type)\r\n\t}\r\n\r\n\tconst getLineAuthorization = async (userId) => {\r\n\t\ttry {\r\n\t\t\tconst { data } = await axios.get(`${process.env.REACT_APP_API_URL}/api/v1/line/authorization/${userId}`)\r\n\t\t\tsetLineAuthorization(data)\r\n\t\t} catch (err) {\r\n\t\t\tconsole.log(err)\r\n\t\t}\r\n\t}\r\n\r\n\tconst getChannels = () => {\r\n\t\treturn new Promise(async (resolve, reject) => {\r\n\t\t\ttry {\r\n\t\t\t\tconst { userId } = state\r\n\t\t\t\tconst url = `${process.env.REACT_APP_API_URL}/api/v1/Plants?userId=${userId}`\r\n\t\t\t\tconst { data } = await axios.get(url)\r\n\t\t\t\tresolve(data)\r\n\t\t\t} catch (err) {\r\n\t\t\t\tconsole.log('Error: getChannels() =>', err)\r\n\t\t\t\treject([])\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{props.children}\r\n\t\t\r\n\t)\r\n})","import React from \"react\";\r\nimport { ContainerStyle } from \"../components/LoadingScreen/LoadingScreenStyle\"\r\n\r\nconst LoadingScreen = () => {\r\n return \r\n กำลังโหลด\r\n \r\n};\r\n\r\nexport default LoadingScreen;\r\n","import styled from \"styled-components\";\r\n\r\nexport const ContainerStyle = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: white;\r\n height: 100vh;\r\n width: 100vw;\r\n font-size: 2em;\r\n font-weight: bold;\r\n\r\n &:after {\r\n content: '.';\r\n animation: dots 1s steps(5, end) infinite;\r\n }\r\n\r\n @keyframes dots {\r\n 0%, 20% {\r\n color: rgba(0,0,0,0);\r\n text-shadow:\r\n .25em 0 0 rgba(0,0,0,0),\r\n .5em 0 0 rgba(0,0,0,0);}\r\n 40% {\r\n color: black;\r\n text-shadow:\r\n .25em 0 0 rgba(0,0,0,0),\r\n .5em 0 0 rgba(0,0,0,0);}\r\n 60% {\r\n text-shadow:\r\n .25em 0 0 black,\r\n .5em 0 0 rgba(0,0,0,0);}\r\n 80%, 100% {\r\n text-shadow:\r\n .25em 0 0 black,\r\n .5em 0 0 black;}\r\n }\r\n`","import React, { useContext, useState, useEffect, Suspense, lazy } from 'react'\r\nimport { Switch, Route } from 'react-router-dom'\r\n\r\nimport { UserContext } from './hooks'\r\nimport LoadingScreen from \"./pages/LoadingScreen\"\r\n\r\nconst FCQueueBoard = lazy(() => import(\"./components/common/FCQueueBoard\"));\r\nconst BookQueue = lazy(() => import(\"./pages/queues/BookQueue\"));\r\nconst CallSCGLAPIFailed = lazy(() => import(\"./pages/queues/redirects/CallSCGLAPIFailed\"));\r\nconst CallSCGLAPISuccessful = lazy(() => import(\"./pages/queues/redirects/CallSCGLAPISuccessful\"));\r\nconst ConfirmQueue = lazy(() => import(\"./pages/queues/ConfirmQueue\"));\r\nconst ConfirmRegister = lazy(() => import(\"./pages/register/ConfirmRegister\"));\r\nconst ChangePassword = lazy(() => import(\"./pages/user/ChangePassword\"));\r\nconst ChangeUserData = lazy(() => import(\"./pages/user/ChangeUserData\"));\r\nconst LineCallback = lazy(() => import(\"./pages/line/Callback\"));\r\nconst LineSubscription = lazy(() => import(\"./pages/line/Subscription\"));\r\nconst Login = lazy(() => import(\"./pages/login/Login\"));\r\nconst Menu = lazy(() => import(\"./pages/register/Menu\"));\r\nconst NotFound = lazy(() => import(\"./pages/NotFound\"));\r\nconst Register = lazy(() => import(\"./pages/register/Register\"));\r\nconst RegisterCompleted = lazy(() => import(\"./pages/register/RegisterCompleted\"));\r\nconst ReservationData = lazy(() => import(\"./pages/queues/ReservationData\"));\r\nconst ReservationEntry = lazy(() => import(\"./pages/queues/ReservationEntry\"));\r\nconst Walkin = lazy(() => import(\"./pages/register/Walkin\"));\r\nconst NoHomepage = lazy(() => import(\"./pages/NoHomepage\"))\r\nconst LineUserRegister = lazy(() => import(\"./pages/line/LineUserRegister\"))\r\nconst LineUserEditor = lazy(() => import(\"./pages/line/LineUserEditor\"))\r\nconst LineValidation = lazy(() => import(\"./pages/line/LineValidation\"))\r\nconst ResetPassword = lazy(() => import(\"./pages/user/ResetPassword\"));\r\nconst RequestResetPassword = lazy(() => import(\"./pages/user/RequestResetPassword\"));\r\nconst DynamicHomepage = lazy(() => import(\"./pages/DynamicHomepage\"));\r\nconst LineQueueData = lazy(() => import(\"./pages/line/LineQueueData\"))\r\nconst LineQueueManagement = lazy(() => import(\"./pages/line/LineQueueManagement\"))\r\nconst LineAnnounce = lazy(() => import(\"./pages/line/LineAnnounce\"))\r\nconst Maintenance = lazy(() => import(\"./pages/general/Maintenance\"))\r\n// const QueueBoard = lazy(() => import(\"./pages/queues/QueueBoard\"));\r\n// const Welcome = lazy(() => import(\"./pages/line/Welcome\"))\r\n\r\nconst AuthPages = (authed, hasRequestToken, hasToken, loggedIn) => {\r\n\treturn \r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n}\r\n\r\nconst PrivateRoute = ({ component: Component, authed, isLoginPage, ...rest }) => {\r\n\treturn (\r\n\t\t authed ? : }\r\n\t\t/>\r\n\t)\r\n}\r\n\r\nconst Routes = () => {\r\n\tconst { loggedIn, hasRequestToken, hasToken } = useContext(UserContext)\r\n\tconst [isFirstLoad, setIsFirstLoad] = useState(true)\r\n\r\n\tuseEffect(() => {\r\n\t\tsetIsFirstLoad(false)\r\n\t}, [])\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t}>\r\n\t\t\t\t{AuthPages(!isFirstLoad && loggedIn, hasRequestToken(), hasToken(), loggedIn)}\r\n\t\t\t\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default Routes\r\n","import React from 'react'\r\n\r\nconst ProviderComposer = ({contexts, children}) => {\r\n return contexts.reduceRight(\r\n (kids, parent) => \r\n React.cloneElement(parent, {\r\n children: kids\r\n }), \r\n children\r\n )\r\n}\r\n\r\nexport default ProviderComposer","import React from 'react'\r\nimport { RouteProvider, UserProvider } from './'\r\nimport ProviderComposer from './providerComposer'\r\n\r\nconst HooksProvider = ({children}) => {\r\n return , ]}>\r\n {children}\r\n \r\n}\r\n\r\nexport default HooksProvider","import React from 'react'\r\nimport './App.css'\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport 'devextreme/dist/css/dx.common.css'\r\nimport 'devextreme/dist/css/dx.light.css'\r\nimport Routes from './Routes'\r\nimport HooksProvider from './hooks/hooksProvider'\r\nimport '@fortawesome/fontawesome-free/css/all.min.css'\r\nimport 'bootstrap-css-only/css/bootstrap.min.css'\r\nimport './myMdbreact/css/mdb.css'\r\nimport 'react-loading-skeleton/dist/skeleton.css'\r\n\r\nfunction App() {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport './index.css'\r\nimport App from './App'\r\nimport * as serviceWorker from './serviceWorker'\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n)\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister()\r\n"],"sourceRoot":""}