{"version":3,"sources":["theme.tsx","components/Protip.tsx","app/hooks.ts","features/toast/toastSlice.ts","features/ac/acSlice.ts","assets/utils.ts","components/RemoteControl.tsx","logo.svg","features/ac/AirConditioner.tsx","features/toast/Toast.tsx","layouts/Copyright.tsx","pages/Home.tsx","pages/Rc.tsx","App.tsx","app/store.ts","serviceWorkerRegistration.ts","reportWebVitals.ts","index.tsx"],"names":["ThemeProvider","props","children","preferredMode","useMediaQuery","theme","useMemo","createMuiTheme","palette","mode","useStyles","makeStyles","root","margin","spacing","display","justifyContent","alignItems","ProTip","classes","Typography","align","className","color","useAppDispatch","useDispatch","useAppSelector","useSelector","toastSlice","createSlice","name","initialState","open","message","reducers","setMessage","state","action","payload","setOpen","actions","acItemKey","status","namespace","temperature","localStorage","getItem","parseInt","acSlice","setStatus","setTemperature","increment","setItem","toString","decrement","setMode","toggleStatus","selectTemperature","ac","getAssetsUrl","url","timeoutId","intervalId","extendedIcon","marginRight","RCButton","Fab","onClick","di","document","getElementById","play","playDi","playStartSound","acStart","load","setTimeout","acWork","setInterval","currentTime","noiseDuration","noiseStartTime","playWorkSound","customTheme","primary","green","SOUND_DI_PATH","SOUND_AC_WORK_PATH","SOUND_AIR_EXTRACTOR_FAN_PATH","RemoteControl","dispatch","Box","my","flexDirection","id","src","preload","aria-label","clearTimeout","clearInterval","toggleAC","style","backgroundColor","getState","acColor","acBorder","borderRadius","borderBottomLeftRadius","borderBottomRightRadius","acDisplay","textShadow","acLogo","width","acStatus","energyLabel","AcBorder","bgcolor","height","border","borderColor","boxShadow","position","AcTemperature","variant","AcDisplay","React","forwardRef","ref","top","right","AcLogo","textAlign","mt","href","pkg","title","target","rel","logo","alt","AirOutlet","AcStatus","led","textLabel","num","size","mx","titleLength","Array","keys","titleLabel","map","n","EnergyLabel","left","p","px","py","Grid","container","marginLeft","borderTop","borderRight","borderBottom","borderLeft","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderStyle","mb","pt","WindEffect","transform","AirConditioner","Fade","in","timeout","enter","exit","Toast","toast","handleClose","event","reason","Snackbar","autoHideDuration","onClose","Alert","severity","Copyright","Link","Date","getFullYear","Home","useEffect","onStorage","e","key","newValue","window","addEventListener","removeEventListener","Container","maxWidth","sx","component","gutterBottom","Button","Rc","App","path","store","configureStore","reducer","acReducer","toastReducer","isLocalhost","Boolean","location","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","console","log","onUpdate","onSuccess","catch","error","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","URL","process","origin","fetch","headers","response","contentType","get","indexOf","ready","unregister","reload","checkValidServiceWorker","serviceWorkerRegistration"],"mappings":"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","file":"static/js/main.28717cc1.chunk.js","sourcesContent":["import { useMemo } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { ThemeProvider as MuiThemeProvider } from \"@material-ui/styles\";\nimport { createMuiTheme } from \"@material-ui/core/styles\";\n\nexport function ThemeProvider(props: any) {\n const { children } = props;\n\n // https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media/prefers-color-scheme\n const prefersDarkMode = useMediaQuery(\"(prefers-color-scheme: dark)\");\n const preferredMode = prefersDarkMode ? \"dark\" : \"light\";\n // A custom theme for this app\n const theme = useMemo(\n () =>\n createMuiTheme({\n palette: {\n mode: preferredMode,\n },\n }),\n [preferredMode]\n );\n\n return {children};\n}\n\nThemeProvider.propTypes = {\n children: PropTypes.node,\n};\n\nexport default ThemeProvider;\n","import { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport EmojiObjectsOutlinedIcon from \"@material-ui/icons/EmojiObjectsOutlined\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n margin: theme.spacing(3, 0),\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n}));\n\nexport default function ProTip() {\n const classes = useStyles();\n return (\n \n \n Tip: 为你的夏日带去清凉!\n \n );\n}\n","import { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\nimport type { RootState, AppDispatch } from \"./store\";\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch = () => useDispatch();\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nexport interface ToastState {\n /**\n * 是否打开\n */\n open: boolean;\n /**\n * 消息内容\n */\n message: string;\n}\n\nconst initialState: ToastState = {\n open: false,\n message: \"\",\n};\n\nexport const toastSlice = createSlice({\n name: \"toast\",\n initialState,\n reducers: {\n /**\n * 设置提示框内容\n * @param state\n * @param action\n */\n setMessage(state, action: PayloadAction) {\n state.message = action.payload;\n },\n /**\n * 设置提示框是否显示\n * @param state\n * @param action\n */\n setOpen(state, action: PayloadAction) {\n state.open = action.payload;\n },\n },\n});\n\nexport const { setMessage, setOpen } = toastSlice.actions;\n\nexport default toastSlice.reducer;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { AppThunk, RootState } from \"../../app/store\";\nimport { setMessage, setOpen } from \"../toast/toastSlice\";\n\nexport type AcMode = \"cold\" | \"hot\";\nexport interface AcState {\n /**\n * 状态\n */\n status: boolean;\n /**\n * 模式\n */\n mode: AcMode;\n /**\n * 温度\n */\n temperature: number;\n}\n\nconst namespace = \"ac-\";\n\nexport const acItemKey = {\n status: namespace + \"status\",\n mode: namespace + \"mode\",\n temperature: namespace + \"temperature\",\n};\n\nconst initialState: AcState = {\n status: false,\n mode: (localStorage.getItem(acItemKey.mode) as AcMode) || \"cold\",\n temperature:\n parseInt(localStorage.getItem(acItemKey.temperature) || \"\") || 20,\n};\n\nconst maxTemperature = 31;\nconst minTemperature = 16;\n\nexport const acSlice = createSlice({\n name: \"ac\",\n initialState,\n reducers: {\n /**\n * 设置状态\n * @param state\n * @param action\n */\n setStatus(state, action: PayloadAction) {\n state.status = action.payload;\n },\n /**\n * 设置温度\n * @param state\n * @param action\n */\n setTemperature(state, action: PayloadAction) {\n state.temperature = action.payload;\n },\n /**\n * 增加温度\n * @param state\n */\n increment: (state) => {\n state.temperature += 1;\n localStorage.setItem(acItemKey.temperature, state.temperature.toString());\n },\n\n /**\n * 降低温度\n * @param state\n */\n decrement: (state) => {\n state.temperature -= 1;\n localStorage.setItem(acItemKey.temperature, state.temperature.toString());\n },\n\n /**\n * 设置空调模式\n * @param state\n * @param action\n */\n setMode(state, action: PayloadAction) {\n state.mode = action.payload;\n localStorage.setItem(acItemKey.mode, state.mode);\n },\n\n /**\n * 切换开关状态\n * @param state\n * @param action\n */\n toggleStatus(state) {\n state.status = !state.status;\n localStorage.setItem(acItemKey.status, state.status.toString());\n },\n },\n});\n\nexport const selectTemperature = (state: RootState) => state.ac.temperature;\n\nexport const {\n setTemperature,\n increment,\n decrement,\n setMode,\n toggleStatus,\n setStatus,\n} = acSlice.actions;\n\n/**\n * 增加温度\n * @returns\n */\nexport const increaseTemperature = (): AppThunk => (dispatch, getState) => {\n const currentValue = selectTemperature(getState());\n if (currentValue < maxTemperature) {\n dispatch(increment());\n } else {\n dispatch(setMessage(\"已经是最大温度啦!\"));\n dispatch(setOpen(true));\n }\n};\n\n/**\n * 降低温度\n * @returns\n */\nexport const decreaseTemperature = (): AppThunk => (dispatch, getState) => {\n const currentValue = selectTemperature(getState());\n if (currentValue > minTemperature) {\n dispatch(decrement());\n } else {\n dispatch(setMessage(\"已经是最小温度啦!\"));\n dispatch(setOpen(true));\n }\n};\n\nexport default acSlice.reducer;\n","/**\n * 是否为生产环境\n */\nexport const isProd = process.env.NODE_ENV === \"production\";\n\n/**\n * 获取资源 URL\n * @param url\n */\nexport function getAssetsUrl(url: string) {\n const jsdelivrCDN =\n \"https://cdn.jsdelivr.net/gh/YunYouJun/air-conditioner/public\";\n return (isProd ? jsdelivrCDN : process.env.PUBLIC_URL) + url;\n}\n","import {\n createMuiTheme,\n makeStyles,\n ThemeProvider,\n} from \"@material-ui/core/styles\";\nimport { Box, Fab } from \"@material-ui/core\";\nimport ExpandLessIcon from \"@material-ui/icons/ExpandLess\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport PowerSettingsNewIcon from \"@material-ui/icons/PowerSettingsNew\";\nimport AcUnitIcon from \"@material-ui/icons/AcUnit\";\nimport WbSunnyIcon from \"@material-ui/icons/WbSunny\";\n\nimport { green } from \"@material-ui/core/colors\";\nimport { useAppDispatch, useAppSelector } from \"../app/hooks\";\nimport {\n decreaseTemperature,\n increaseTemperature,\n setMode,\n toggleStatus,\n} from \"../features/ac/acSlice\";\nimport { RootState } from \"../app/store\";\nimport { getAssetsUrl } from \"../assets/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n margin: {\n margin: theme.spacing(1),\n },\n extendedIcon: {\n marginRight: theme.spacing(1),\n },\n}));\n\n/**\n * 遥控器按钮\n * @param props\n */\nfunction RCButton(props: any) {\n return (\n {\n playDi();\n props.onClick();\n }}\n >\n );\n}\n\n/**\n * 播放「嘀」的音效\n */\nfunction playDi() {\n const di = document.getElementById(\"di\");\n if (di) {\n (di as HTMLAudioElement).play();\n }\n}\n\nlet timeoutId: any;\nlet intervalId: any;\n\n/**\n * 播放空调启动声音\n */\nfunction playStartSound() {\n const acStart = document.getElementById(\"ac-work\") as HTMLAudioElement;\n acStart.load();\n acStart.play();\n\n setTimeout(() => {\n playWorkSound();\n }, 8000);\n}\n\n// 噪音起始时间\nconst noiseStartTime = 2;\n// 噪音持续时间\nconst noiseDuration = 56;\n\n/**\n * 播放空调工作声音\n */\nfunction playWorkSound() {\n const acWork = document.getElementById(\n \"air-extractor-fan\"\n ) as HTMLAudioElement;\n acWork.load();\n acWork.play();\n\n timeoutId = setTimeout(() => {\n intervalId = setInterval(() => {\n acWork.currentTime = noiseStartTime;\n }, noiseDuration * 1000);\n }, noiseStartTime * 1000);\n}\n\n/**\n * 切换空调工作状态\n * @param {*} props\n */\nfunction toggleAC(status: boolean, dispatch: any) {\n if (status) {\n (document.getElementById(\"ac-work\") as HTMLAudioElement).load();\n const acWork = document.getElementById(\n \"air-extractor-fan\"\n ) as HTMLAudioElement;\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (intervalId) {\n clearInterval(intervalId);\n }\n acWork.currentTime = noiseStartTime + noiseDuration;\n } else {\n playStartSound();\n }\n\n dispatch(toggleStatus());\n}\n\nconst customTheme = createMuiTheme({\n palette: {\n primary: green,\n },\n});\n\nconst SOUND_DI_PATH = getAssetsUrl(\"/assets/audio/di.mp3\");\nconst SOUND_AC_WORK_PATH = getAssetsUrl(\"/assets/audio/ac-work.mp3\");\nconst SOUND_AIR_EXTRACTOR_FAN_PATH = getAssetsUrl(\n \"/assets/audio/air-extractor-fan.mp3\"\n);\n\n/**\n * 遥控\n * @param {*} props\n */\nexport default function RemoteControl() {\n const classes = useStyles();\n const ac = useAppSelector((state: RootState) => state.ac);\n const dispatch = useAppDispatch();\n return (\n \n \n \n \n
\n {\" \"}\n {\n dispatch(setMode(\"cold\"));\n }}\n >\n \n \n \n {\n toggleAC(ac.status, dispatch);\n }}\n style={{ color: \"white\" }}\n >\n \n \n \n {\n dispatch(setMode(\"hot\"));\n }}\n >\n \n \n
\n {\n dispatch(increaseTemperature());\n }}\n >\n \n \n {\n dispatch(decreaseTemperature());\n }}\n >\n \n \n
\n );\n}\n","export default __webpack_public_path__ + \"static/media/logo.5fb28574.svg\";","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Box, Grid, Typography, Fade } from \"@material-ui/core\";\nimport logo from \"../../logo.svg\";\n\nimport * as pkg from \"../../../package.json\";\n\nimport \"./AirConditioner.scss\";\nimport { useAppSelector } from \"../../app/hooks\";\n\nimport { AcMode, selectTemperature } from \"./acSlice\";\n\nconst acColor = {\n border: \"#e0e0e0\",\n display: \"#cccccc\",\n wind: \"#bbbbbb\",\n};\n\nconst useStyles = makeStyles((theme) => ({\n acBorder: {\n borderRadius: 10,\n borderBottomLeftRadius: 20,\n borderBottomRightRadius: 20,\n },\n acDisplay: {\n textShadow: \"0px 0px 2px rgba(0, 0, 0, 0.3)\",\n // visibility: (props) => props.visibility,\n },\n acLogo: {\n width: 12,\n },\n acStatus: {\n backgroundColor: (props?: any) => props.backgroundColor || \"transparent\",\n },\n energyLabel: {\n backgroundColor: \"#4ea5f5\",\n },\n}));\n\nfunction AcBorder(props: any) {\n return (\n \n );\n}\n\n/**\n * 空调温度\n * @returns\n */\nfunction AcTemperature() {\n const temperature = useAppSelector(selectTemperature);\n return (\n \n {temperature}\n °C\n \n );\n}\n\n/**\n * 显示屏(温度/图标)\n * @param props\n */\nconst AcDisplay = React.forwardRef((props: { mode: AcMode }, ref) => {\n return (\n \n \n {props.mode === \"cold\" ? \"❄\" : \"☀️\"}️️\n \n \n \n );\n});\n\n/**\n * 空调 Logo\n * @param props\n */\nfunction AcLogo(props: any) {\n return (\n // \n \n \n \"logo\"\n \n \n );\n}\n\n/**\n * 出风口线\n * @returns\n */\nfunction AirOutlet() {\n return ;\n}\n\n/**\n * 空调状态\n * @param props\n */\nfunction AcStatus(props: { status: boolean }) {\n // 空调状态小灯\n const led = { backgroundColor: props.status ? \"#38F709\" : acColor.border };\n const classes = useStyles(led);\n return (\n \n );\n}\n\n/**\n * 文本标签(黑色小点点)\n * @param num\n * @param color\n * @param size\n * @param mx\n * @param my\n */\nfunction textLabel(\n num: number,\n color: string,\n size: number,\n mx: number,\n my = 0\n) {\n const titleLength = [...new Array(num).keys()];\n const titleLabel = titleLength.map((n) => (\n \n ));\n return (\n \n {titleLabel}\n \n );\n}\n\n/**\n * 功耗标签\n * @param props\n */\nfunction EnergyLabel(props: any) {\n return (\n \n {textLabel(6, \"white\", 4, 0.25)}\n \n \n \n \n \n \n \n \n \n \n \n \n {textLabel(11, \"black\", 2, 0.1, 0.25)}\n \n {textLabel(9, \"black\", 1.5, 0.1, 0.25)}\n {textLabel(10, \"black\", 1.2, 0.1, 0)}\n \n {textLabel(8, \"white\", 2, 0.1)}\n \n );\n}\n\n/**\n * 风特效\n * @param props\n */\nconst WindEffect = React.forwardRef((props, ref) => {\n return (\n \n \n \n \n \n );\n});\n\n/**\n * 空调\n */\nexport default function AirConditioner(props: {\n mode: AcMode;\n status: boolean;\n temperature: number;\n}) {\n const classes = useStyles(props);\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import { Alert, Snackbar } from \"@material-ui/core\";\nimport { RootState } from \"../../app/store\";\nimport { useAppDispatch, useAppSelector } from \"../../app/hooks\";\nimport { setOpen } from \"./toastSlice\";\n\nexport default function Toast() {\n const toast = useAppSelector((state: RootState) => state.toast);\n const dispatch = useAppDispatch();\n\n const handleClose = (event?: React.SyntheticEvent, reason?: string) => {\n dispatch(setOpen(false));\n };\n\n return (\n \n \n {toast.message}\n \n \n );\n}\n","import Box from \"@material-ui/core/Box\";\nimport Link from \"@material-ui/core/Link\";\nimport Typography from \"@material-ui/core/Typography\";\nimport * as pkg from \"../../package.json\";\n\nfunction Copyright() {\n return (\n
\n \n \n {\"© \"}\n \n Yun Air Conditioner\n \n {\" - \"}\n \n {pkg.author.name}\n \n \n \n \n {\" 2019 - \" + new Date().getFullYear()}\n \n
\n );\n}\n\nexport default Copyright;\n","import Button from \"@material-ui/core/Button\";\nimport Container from \"@material-ui/core/Container\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\n\nimport ProTip from \"../components/Protip\";\nimport RemoteControl from \"../components/RemoteControl\";\n\nimport AirConditioner from \"../features/ac/AirConditioner\";\nimport Toast from \"../features/toast/Toast\";\n\nimport { ThemeProvider } from \"../theme\";\n\nimport { useAppDispatch, useAppSelector } from \"../app/hooks\";\nimport { RootState } from \"../app/store\";\nimport Copyright from \"../layouts/Copyright\";\nimport {\n AcMode,\n acItemKey,\n setTemperature,\n setMode,\n setStatus,\n} from \"../features/ac/acSlice\";\nimport { useEffect } from \"react\";\n\nfunction Home() {\n const ac = useAppSelector((state: RootState) => state.ac);\n\n const dispatch = useAppDispatch();\n useEffect(() => {\n function onStorage(e: StorageEvent) {\n // 重复设置相同的键值不会触发该事件\n switch (e.key) {\n case acItemKey.status:\n dispatch(setStatus(e.newValue === \"true\"));\n break;\n case acItemKey.temperature:\n dispatch(setTemperature(parseInt(e.newValue || \"20\")));\n break;\n case acItemKey.mode:\n dispatch(setMode((e.newValue || \"cold\") as AcMode));\n break;\n default:\n break;\n }\n }\n window.addEventListener(\"storage\", onStorage);\n return () => {\n window.removeEventListener(\"storage\", onStorage);\n };\n }, [dispatch]);\n\n /**\n * 根据模式返回对应的色温\n * @returns\n */\n function getClassByMode() {\n if (ac.status) {\n return ac.mode === \"hot\" ? \"hot-color\" : \"cold-color\";\n } else {\n return \"\";\n }\n }\n\n return (\n \n \n \n \n 便携小空调\n \n \n \n
\n \n {\n window.open(\"/rc\", \"_blank\", \"width=300, height=400\");\n }}\n >\n 独立遥控器\n \n \n
\n \n \n
\n \n
\n
\n );\n}\n\nexport default Home;\n","import RemoteControl from \"../components/RemoteControl\";\n\nexport default function Rc() {\n return ;\n}\n","import \"./App.scss\";\n\nimport { ThemeProvider } from \"./theme\";\nimport Container from \"@material-ui/core/Container\";\n\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\";\nimport Home from \"./pages/Home\";\nimport Rc from \"./pages/Rc\";\n\nfunction App() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import { configureStore, ThunkAction, Action } from \"@reduxjs/toolkit\";\nimport acReducer from \"../features/ac/acSlice\";\nimport toastReducer from \"../features/toast/toastSlice\";\n\nexport const store = configureStore({\n reducer: {\n ac: acReducer,\n toast: toastReducer,\n },\n});\n\nexport type AppDispatch = typeof store.dispatch;\nexport type RootState = ReturnType;\nexport type AppThunk = ThunkAction<\n ReturnType,\n RootState,\n unknown,\n Action\n>;\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://cra.link/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.0/8 are 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\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: 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://cra.link/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: string, config?: 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://cra.link/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: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\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\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import { ReportHandler } from \"web-vitals\";\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport \"./index.scss\";\nimport App from \"./App\";\nimport { store } from \"./app/store\";\nimport { Provider } from \"react-redux\";\nimport * as serviceWorkerRegistration from \"./serviceWorkerRegistration\";\nimport reportWebVitals from \"./reportWebVitals\";\n\n// import ReactGA from \"react-ga\";\n// ReactGA.initialize(\"UA-121354150-10\");\n// ReactGA.pageview(window.location.pathname + window.location.search);\n\nReactDOM.render(\n \n \n \n \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\nserviceWorkerRegistration.register();\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}