{"version":3,"sources":["utilities/StringUtility.ts","utilities/TypeGuards.ts","utilities/RestUtility.ts","configuration/PathConfiguration.ts","services/production/ProductionUserService.ts","routes/completeSetup/CompleteSetp.tsx","routes/login/Login.tsx","routes/completeReset/CompleteReset.tsx","app/App.tsx","serviceWorker.ts","index.tsx"],"names":["isNullOrWhiteSpace","source","arg","match","fetchPostAsync","url","data","options","a","Promise","resolve","reject","fetch","addApiPathToUrl","method","mode","cache","redirect","referrer","credentials","headers","body","JSON","stringify","undefined","then","response","json","catch","error","fetchGetAsync","processGetUrl","addPathToUrl","prefix","result","Array","isArray","map","item","split","filter","r","flat","join","startsWith","replace","isObject","parameters","includeEmptyValues","Object","keys","k","length","key","arrayParts","i","push","encodeURIComponent","objectToGetParameters","index","indexOf","ProductionUserService","emailAddress","password","Cookies","set","path","success","accessKey","CompleteSetup","useState","setEmailAddress","setAccessKey","setPassword","confirmPassword","setConfirmPassword","errorMessage","setErrorMessage","formComplete","setFormComplete","className","type","placeholder","onChange","event","currentTarget","value","onClick","completeSetupAsync","href","Login","loginAsync","window","location","passwordResetAsync","CompleteReset","completePasswordResetAsync","routes","App","routeResult","useRoutes","hostname","includes","src","alt","Boolean","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.ac87d9f4.chunk.js","sourcesContent":["/* Copyright (C) WambaTech, Inc. - All Rights Reserved\r\n * Unauthorized copying of this file, via any medium is strictly prohibited\r\n * Proprietary and confidential\r\n */\r\n\r\nimport { isString } from \"./TypeGuards\";\r\n\r\nexport function upperCaseLettersToWords(source: string) {\r\n return source.replace(/[A-Z]/g, \" $&\").trim();\r\n}\r\n\r\nexport function removeAll(source: string, token: string) {\r\n return source.replace(\r\n new RegExp(`${token}`),\r\n \"\");\r\n}\r\n\r\nexport function isNullOrWhiteSpace(source?: string): source is undefined {\r\n return source == null || (\r\n isString(source) &&\r\n source.match(/^ *$/) !== null);\r\n}\r\n\r\nexport function randomString(length: number = 5): string {\r\n let text = \"\";\r\n const possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n\r\n for (let i = 0; i < Math.random() * length; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\nexport function isExternalLink(url: string) {\r\n return url &&\r\n (\r\n url.startsWith(\"http://\") ||\r\n url.startsWith(\"https://\")\r\n );\r\n}\r\n\r\nexport function enumToString(enumeration: any, value: number, upperCaseWords: boolean = true) {\r\n for (const key of Object.keys(enumeration)) {\r\n if (enumeration[key] === value) {\r\n return upperCaseWords ? upperCaseLettersToWords(key) : key;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function stripHtml(html: string) {\r\n const tmpDiv = document.createElement(\"DIV\");\r\n tmpDiv.innerHTML = html;\r\n return tmpDiv.textContent || tmpDiv.innerText || \"\";\r\n}\r\n\r\nexport function stringToHtml(source?: string) {\r\n if (isNullOrWhiteSpace(source)) {\r\n return \"\";\r\n }\r\n\r\n return source.replace(/(?:\\r\\n|\\r|\\n)/g, '
');\r\n}\r\n\r\nexport function getEmailValidationRegex() {\r\n return /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n}\r\n\r\nexport function getPhoneNumberValidationRegex() {\r\n return /^(\\+0?1\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/;\r\n}\r\n\r\nexport function formatCurrency(amount: any, decimalPlaces: boolean = false, local: string = 'en-US', currency: string = \"USD\"): string {\r\n let modifiedAmount = amount;\r\n\r\n if (typeof amount !== \"number\") {\r\n modifiedAmount = parseFloat(amount);\r\n\r\n if (isNaN(modifiedAmount)) {\r\n return amount;\r\n }\r\n }\r\n\r\n return (\r\n modifiedAmount.toLocaleString(local, {\r\n style: 'currency',\r\n currency: currency,\r\n minimumFractionDigits: decimalPlaces ? 2 : 0,\r\n maximumFractionDigits: decimalPlaces ? 2 : 0\r\n }));\r\n}\r\n\r\nexport function formatPercentage(amount: any, decimalPlaces: boolean = false, local: string = 'en-US', currency: string = \"USD\"): string {\r\n let modifiedAmount = amount;\r\n\r\n if (typeof amount !== \"number\") {\r\n modifiedAmount = parseFloat(amount);\r\n\r\n if (isNaN(modifiedAmount)) {\r\n return amount;\r\n }\r\n }\r\n\r\n return (\r\n modifiedAmount.toLocaleString(local, {\r\n style: 'percent',\r\n minimumFractionDigits: decimalPlaces ? 2 : 0,\r\n maximumFractionDigits: decimalPlaces ? 2 : 0\r\n }));\r\n}","/* Copyright (C) WambaTech, Inc. - All Rights Reserved\r\n * Unauthorized copying of this file, via any medium is strictly prohibited\r\n * Proprietary and confidential\r\n */\r\n\r\nexport function isPromise(arg: any): arg is Promise {\r\n return arg != null && isFunction(arg.then);\r\n}\r\n\r\nexport function isFunction(arg: any): arg is (...args: any) => any {\r\n return arg != null && typeof arg === 'function';\r\n}\r\n\r\nexport function isBoolean(arg: any): arg is boolean {\r\n return arg != null && typeof arg === 'boolean';\r\n}\r\n\r\nexport function isObject(arg: any): arg is object {\r\n return arg != null && typeof arg === 'object';\r\n}\r\n\r\nexport function isString(arg: any): arg is string {\r\n return arg != null && typeof arg === 'string';\r\n}\r\n\r\nexport function isArray(arg: any): arg is Array {\r\n return arg != null && Array.isArray(arg);\r\n}\r\n\r\nexport function isDate(arg: any): arg is Date {\r\n return arg != null && Object.prototype.toString.call(arg) === \"[object Date]\";\r\n}\r\n\r\nexport function isNumber(arg: any): arg is Number {\r\n return arg != null && typeof arg === \"number\";\r\n}","/* Copyright (C) WambaTech, Inc. - All Rights Reserved\r\n * Unauthorized copying of this file, via any medium is strictly prohibited\r\n * Proprietary and confidential\r\n */\r\n\r\nimport { getApplicationApiName, getApplicationBaseName } from \"configuration/PathConfiguration\";\r\nimport { IRestResponse } from \"models/rest/IRestResponse\";\r\nimport { IRestResponseWithData } from \"models/rest/IRestResponseWithData\";\r\nimport { isObject } from \"util\";\r\nimport { notifyError } from \"./MiscUtility\";\r\nimport { isNullOrWhiteSpace } from \"./StringUtility\";\r\nimport { isPromise } from \"./TypeGuards\";\r\n\r\nexport async function fetchPostAsync(url: string, data?: any, options?: any): Promise {\r\n return await new Promise((resolve, reject) => {\r\n fetch(\r\n addApiPathToUrl(url),\r\n {\r\n method: \"POST\",\r\n mode: \"cors\",\r\n cache: \"no-cache\",\r\n redirect: \"error\",\r\n referrer: \"no-referrer\",\r\n credentials: 'include',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n },\r\n body: data ? JSON.stringify(data) : undefined,\r\n ...options\r\n })\r\n .then(response => resolve(response.json()))\r\n .catch(error => reject(error));\r\n });\r\n}\r\n\r\nexport async function fetchGetAsync(url: string, data?: any, options?: any): Promise {\r\n return await new Promise((resolve, reject) => {\r\n fetch(\r\n addApiPathToUrl(processGetUrl(url, data)),\r\n {\r\n method: \"GET\",\r\n mode: \"cors\",\r\n cache: \"no-cache\",\r\n redirect: \"error\",\r\n referrer: \"no-referrer\",\r\n credentials: 'include',\r\n ...options\r\n })\r\n .then(response => resolve(response.json()))\r\n .catch(error => reject(error));\r\n });\r\n}\r\n\r\nexport function addApiPathToUrl(url: string) {\r\n return addPathToUrl(\r\n getApplicationApiName(),\r\n url);\r\n}\r\n\r\nexport function addBasePathToUrl(url: string) {\r\n return addPathToUrl(\r\n getApplicationBaseName(),\r\n url);\r\n}\r\n\r\nexport function addPathToUrl(prefix: (string | undefined)[] | string | undefined, url: string) {\r\n let result = [\r\n ...(Array.isArray(prefix) ? prefix : [prefix || '']).map(item => (item || '').split('/').filter(r => !isNullOrWhiteSpace(r))).flat(),\r\n ...url.split('/'),\r\n ].filter(r => !isNullOrWhiteSpace(r)).join(\"/\");\r\n\r\n if (result.startsWith(\"http:/\")) {\r\n return result.replace(\"http:/\", \"http://\");\r\n }\r\n else if (result.startsWith(\"https:/\")) {\r\n return result.replace(\"https:/\", \"https://\");\r\n }\r\n else {\r\n return \"/\" + result;\r\n }\r\n}\r\n\r\nfunction processGetUrl(url: string, data?: any) {\r\n if (data === undefined || !isObject(data)) {\r\n return url;\r\n }\r\n\r\n const parameters = objectToGetParameters(data);\r\n const index = url.indexOf(\"?\");\r\n\r\n if (index === -1) {\r\n return `${url}?${parameters}`;\r\n }\r\n else if (index === url.length - 1) {\r\n return `${url}${parameters}`;\r\n }\r\n else {\r\n return `${url}&${parameters}`;\r\n }\r\n}\r\n\r\nexport function objectToGetParameters(source: any, includeEmptyValues: boolean = false) {\r\n return (\r\n Object\r\n .keys(source)\r\n .filter( // do not include properties with no values\r\n k => ((source[k] && source[k].length > 0) || source[k] === false || source[k] === 0) || includeEmptyValues)\r\n .map(\r\n (key) => {\r\n if (Array.isArray(source[key])) {\r\n var arrayParts = [];\r\n for (var i = 0; i < source[key].length; i++)\r\n arrayParts.push(\r\n encodeURIComponent(key + '[]') + '=' + encodeURIComponent(source[key][i]));\r\n return arrayParts.join('&');\r\n }\r\n return encodeURIComponent(key) + '=' + encodeURIComponent(source[key]);\r\n })\r\n .join('&'));\r\n}\r\n\r\nexport function simulateSuccessRestCallAsync(resolve: (value?: IRestResponse | PromiseLike) => void, minDuration: number = 0, maxDuration: number = 250): void {\r\n setTimeout(\r\n () => {\r\n resolve({\r\n success: true,\r\n message: \"OK\"\r\n });\r\n },\r\n (Math.random() * (maxDuration - minDuration)) + minDuration);\r\n}\r\n\r\nexport function simulateSuccessRestCallWithDataAsync(resolve: (value?: IRestResponseWithData | PromiseLike>) => void, data: T, minDuration: number = 0, maxDuration: number = 250): void {\r\n setTimeout(\r\n () => {\r\n resolve({\r\n success: true,\r\n message: \"OK\",\r\n data\r\n });\r\n },\r\n (Math.random() * (maxDuration - minDuration)) + minDuration);\r\n}\r\n\r\n\r\nexport async function handleRestResponseWithDataAsync(response: IRestResponseWithData | Promise>, success?: (result: T) => void | Promise, failure?: (data: IRestResponseWithData) => void | Promise) {\r\n if (isPromise(response)) {\r\n response = await response;\r\n }\r\n\r\n if (response && response.success && success) {\r\n if (isPromise(success)) {\r\n await success(response.data);\r\n }\r\n else {\r\n success(response.data);\r\n }\r\n }\r\n else if (!response || !response.success) {\r\n if (failure === undefined) {\r\n notifyError(new Error(response.message), \"System REST Error\");\r\n }\r\n else {\r\n if (isPromise(failure)) {\r\n await failure(response);\r\n }\r\n else {\r\n failure(response);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport async function handleRestResponseAsync(response: IRestResponse | Promise, success?: () => void | Promise, failure?: () => void | Promise) {\r\n if (isPromise(response)) {\r\n response = await response;\r\n }\r\n\r\n if (response && response.success && success) {\r\n if (isPromise(success)) {\r\n await success();\r\n }\r\n else {\r\n success();\r\n }\r\n }\r\n else if (!response || !response.success) {\r\n if (failure === undefined) {\r\n notifyError(new Error(response.message), \"System REST Error\");\r\n }\r\n else {\r\n if (isPromise(failure)) {\r\n await failure();\r\n }\r\n else {\r\n failure();\r\n }\r\n }\r\n }\r\n}","export function getApplicationBaseName() {\r\n return \"\";\r\n}\r\n\r\nexport function getApplicationApiName() {\r\n return \"api\";\r\n}\r\n","\r\nimport { IRestResponse } from \"models/rest/IRestResponse\";\r\nimport { IRestResponseWithData } from \"models/rest/IRestResponseWithData\";\r\nimport { IUserService } from \"services/IUserService\";\r\nimport Cookies from \"universal-cookie\";\r\nimport { fetchGetAsync, fetchPostAsync } from \"utilities/RestUtility\";\r\nimport { isNullOrWhiteSpace } from \"utilities/StringUtility\";\r\n\r\nexport default class ProductionUserService implements IUserService {\r\n public async loginAsync(emailAddress: string, password: string) {\r\n const result =\r\n await fetchPostAsync>(\"/users/login\", { emailAddress, password });\r\n\r\n if (!isNullOrWhiteSpace(result.data)) {\r\n const cookies = new Cookies();\r\n cookies.set('__AUTHCONTEXT', result.data, { path: '/' });\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public async passwordResetAsync(emailAddress: string) {\r\n const result =\r\n await fetchGetAsync(\"/users/passwordReset\", { emailAddress });\r\n\r\n return result &&\r\n result.success;\r\n }\r\n\r\n public async completeSetupAsync(emailAddress: string, accessKey: string, password: string) {\r\n const result =\r\n await fetchPostAsync(\"/users/completeSetup\", { emailAddress, accessKey, password });\r\n\r\n return result &&\r\n result.success;\r\n }\r\n\r\n public async completePasswordResetAsync(emailAddress: string, accessKey: string, password: string) {\r\n const result =\r\n await fetchPostAsync(\"/users/completePasswordReset\", { emailAddress, accessKey, password });\r\n\r\n return result &&\r\n result.success;\r\n }\r\n}","import { A } from \"hookrouter\";\r\nimport React from \"react\";\r\nimport { useState } from \"react\";\r\nimport ProductionUserService from \"services/production/ProductionUserService\";\r\nimport { isNullOrWhiteSpace } from \"utilities/StringUtility\";\r\n\r\nconst CompleteSetup: React.FC = () => {\r\n const [emailAddress, setEmailAddress] = useState(\"\");\r\n const [accessKey, setAccessKey] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [confirmPassword, setConfirmPassword] = useState(\"\");\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n const [formComplete, setFormComplete] = useState(false);\r\n\r\n return (\r\n
\r\n
\r\n {\r\n !formComplete\r\n &&\r\n
\r\n

Complete Setup

\r\n
\r\n {\r\n errorMessage &&\r\n
{errorMessage}
\r\n }\r\n
\r\n \r\n { setEmailAddress(event.currentTarget.value); }} />\r\n
\r\n
\r\n \r\n { setAccessKey(event.currentTarget.value); }} />\r\n
\r\n
\r\n \r\n { setPassword(event.currentTarget.value); }} />\r\n
\r\n
\r\n \r\n { setConfirmPassword(event.currentTarget.value); }} />\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n {\r\n formComplete &&\r\n
\r\n
\r\n

Setup completed successfully.

\r\n

Your account has successfully been created, you are now ready to login click here

\r\n
\r\n
\r\n }\r\n
\r\n
\r\n\r\n );\r\n}\r\n\r\nexport default CompleteSetup;","import { A } from \"hookrouter\";\r\nimport React from \"react\";\r\nimport { useState } from \"react\";\r\nimport ProductionUserService from \"services/production/ProductionUserService\";\r\n\r\nconst Login: React.FC = () => {\r\n const [emailAddress, setEmailAddress] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n\r\n return (\r\n\r\n
\r\n
\r\n
\r\n

Portal Login

\r\n
\r\n {\r\n errorMessage &&\r\n
{errorMessage}

\r\n }\r\n
\r\n \r\n { setEmailAddress(event.currentTarget.value); }} />\r\n
\r\n
\r\n \r\n { setPassword(event.currentTarget.value); }} />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Login;","import { A } from \"hookrouter\";\r\nimport React from \"react\";\r\nimport { useState } from \"react\";\r\nimport ProductionUserService from \"services/production/ProductionUserService\";\r\nimport { isNullOrWhiteSpace } from \"utilities/StringUtility\";\r\n\r\nconst CompleteReset: React.FC = () => {\r\n const [emailAddress, setEmailAddress] = useState(\"\");\r\n const [accessKey, setAccessKey] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [confirmPassword, setConfirmPassword] = useState(\"\");\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n const [formComplete, setFormComplete] = useState(false);\r\n\r\n return (\r\n
\r\n
\r\n {\r\n !formComplete\r\n &&\r\n
\r\n

Reset Password

\r\n
\r\n {\r\n errorMessage &&\r\n
{errorMessage}
\r\n }\r\n
\r\n \r\n { setEmailAddress(event.currentTarget.value); }} />\r\n
\r\n
\r\n \r\n { setAccessKey(event.currentTarget.value); }} />\r\n
\r\n
\r\n \r\n { setPassword(event.currentTarget.value); }} />\r\n
\r\n
\r\n \r\n { setConfirmPassword(event.currentTarget.value); }} />\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n {\r\n formComplete &&\r\n
\r\n
\r\n

Password updated successfully.

\r\n

Your password has successfully been updated, you are now ready to login click here

\r\n
\r\n
\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default CompleteReset;","import { useRoutes } from \"hookrouter\";\r\nimport React from \"react\";\r\nimport CompleteSetup from \"routes/completeSetup/CompleteSetp\";\r\nimport Login from \"routes/login/Login\";\r\nimport CompleteReset from \"routes/completeReset/CompleteReset\";\r\n\r\nconst routes = {\r\n '/': () => ,\r\n '/setup': () => ,\r\n '/reset': () => ,\r\n};\r\n\r\n\r\nconst App: React.FC = () => {\r\n const routeResult = useRoutes(routes);\r\n\r\n const isQa = () => {\r\n return window.location.hostname.includes('qa.') ||\r\n window.location.hostname.includes('localhost');\r\n }\r\n\r\n return (\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n \"TRM\r\n
\r\n {routeResult}\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default App;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: 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(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\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: string, config?: 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: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","// Polyfills\r\n//\r\n\r\nimport 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\n\r\n// App\r\n//\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './app/App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport './styles/global.scss';\r\n\r\nReactDOM.render(, document.getElementById('root'));\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":""}