{"version":3,"sources":["models/UserTypes.ts","models/GameModes.ts","models/PlayerState.ts","components/AdminPanel.tsx","components/PlayerPanel.tsx","App.tsx","serviceWorker.js","index.js"],"names":["UserTypes","GameModes","PlayerState","AdminPanel","props","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","onGameStateChanged","gameState","setState","connection","state","id","gameId","mode","None","players","on","gameMode","send","FourForEach","FirstToPress","_this2","react_default","a","createElement","className","getCurrentModeString","onClick","startAction","map","p","name","Ready","response","Component","PlayerPanel","USER_STORAGE_KEY","inputGameId","inputName","localStorage","getItem","invoke","_this$state","setItem","app","type","answer","respond","_this3","_this$state2","value","onChange","e","target","joinGame","back","renderContent","renderLoginForm","App","onGameCreated","Admin","loading","signalR","withUrl","build","Math","random","toString","start","catch","err","document","write","Player","createGame","components_PlayerPanel","components_AdminPanel","Boolean","window","location","hostname","match","ReactDOM","render","src_App","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.7da8745e.chunk.js","sourcesContent":["export enum UserTypes\n{\n None,\n Admin,\n Player\n}","export enum GameModes {\n None,\n FourForEach,\n FirstToPress\n}","export enum PlayerState {\n Ready = 0,\n Waiting = 1\n}","import React, { Component } from 'react';\nimport App from '../App';\nimport { GameModes } from '../models/GameModes';\nimport { GameState } from '../models/GameState';\nimport { PlayerState } from '../models/PlayerState';\n\ninterface IState {\n\tgameState: GameState;\n}\n\ninterface IProps {\n\tapp: App;\n\tconnection: signalR.HubConnection;\n\tgameId: string;\n}\n\nclass AdminPanel extends Component {\n\t\n\tprivate connection: signalR.HubConnection;\n\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\n\t\tthis.connection = props.connection;\n\n\t\tthis.state = {\n\t\t\tgameState: {\n\t\t\t\tid: props.gameId,\n\t\t\t\tmode: GameModes.None,\n\t\t\t\tplayers: []\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\t\n\t\t// bind connection events\n\t\tthis.connection.on(\"gameStateChanged\", this.onGameStateChanged);\n\t}\n\n\tonGameStateChanged = (gameState: GameState) => {\n\t\tthis.setState({ gameState });\n\t}\n\n\tstartAction(gameMode: GameModes) {\n\t\tthis.connection.send(\"setGameMode\", gameMode);\n\t}\n\n\tgetCurrentModeString() {\n\t\tconst { gameState } = this.state;\n\t\tswitch (gameState.mode) {\n\t\t\tcase GameModes.None:\n\t\t\t\treturn \"Idle\";\n\t\t\tcase GameModes.FourForEach:\n\t\t\t\treturn \"Four for each\";\n\t\t\tcase GameModes.FirstToPress:\n\t\t\t\treturn \"First to press\";\n\t\t}\n\t\treturn \"Idle\";\n\t}\n\n\trender() {\n\t\tconst { gameState } = this.state;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t

Game { gameState.id }

\n\t\t\t\t

\n\t\t\t\t\tCurrent mode: \n\t\t\t\t\t{this.getCurrentModeString()}\n\t\t\t\t

\n\t\t\t\t
\n\t\t\t\t\t

Actions:

\n\t\t\t\t\t
\n\t\t\t\t\t\t this.startAction(GameModes.FourForEach)}>Start FourForEach\n\t\t\t\t\t\t this.startAction(GameModes.FirstToPress)}>Start FirstPress\n\t\t\t\t\t\t this.startAction(GameModes.None)}>Stop\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

Players:

\n\t\t\t\t\t
\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgameState.players.map(p => (\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{p.name} - \n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tp.state === PlayerState.Ready\n\t\t\t\t\t\t\t\t\t\t\t? {p.response}\n\t\t\t\t\t\t\t\t\t\t\t: Waiting...\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default AdminPanel;\n","import React, { Component } from 'react';\nimport App from '../App';\nimport { GameModes } from '../models/GameModes';\nimport { GameState } from '../models/GameState';\nimport { UserTypes } from '../models/UserTypes';\n\ninterface IState {\n\tgameState: GameState;\n\tinputGameId: string;\n\tinputName: string;\n}\n\ninterface IProps {\n\tapp: App;\n\tconnection: signalR.HubConnection;\n}\n\nclass PlayerPanel extends Component {\n\t\n\tprivate connection: signalR.HubConnection;\n\tprivate readonly USER_STORAGE_KEY = 'UserNameCache';\n\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\n\t\tthis.connection = props.connection;\n\n\t\tthis.state = {\n\t\t\tinputGameId: '',\n\t\t\tinputName: localStorage.getItem(this.USER_STORAGE_KEY) || '',\n\t\t\tgameState: {\n\t\t\t\tid: '',\n\t\t\t\tmode: GameModes.None,\n\t\t\t\tplayers: []\n\t\t\t}\n\t\t};\n\t}\n\n\tasync componentDidMount() {\n\t\tthis.connection.on(\"gameStateChanged\", this.onGameStateChanged);\n\t\tconst inputGameId = await this.connection.invoke(\"findLocalGame\");\n\t\tif (inputGameId) {\n\t\t\tthis.setState({ inputGameId });\n\t\t}\n\t}\n\n\tonGameStateChanged = (gameState: GameState) => {\n\t\tthis.setState({ gameState });\n\t}\n\n\tjoinGame() {\n\t\tconst { inputGameId, inputName } = this.state;\n\n\t\t// save name for next games in local storage\n\t\tlocalStorage.setItem(this.USER_STORAGE_KEY, inputName);\n\n\t\t// join the game\n\t\tthis.connection.send(\"joinGame\", inputGameId, inputName);\n\t}\n\n\tback() {\n\t\tthis.props.app.setState({\n\t\t\ttype: UserTypes.None\n\t\t});\n\t}\n\n\trespond(answer: string) {\n\t\tthis.connection.send(\"respond\", answer);\n\n\t\tconst { gameState } = this.state;\n\t\tgameState.mode = GameModes.None;\n\t\tthis.setState({ gameState });\n\t}\n\n\trenderContent() {\n\t\tconst { gameState } = this.state;\n\n\t\tswitch (gameState.mode) {\n\t\t\tcase GameModes.None:\n\t\t\t\treturn (\n\t\t\t\t\t

Waiting for admin action...

\n\t\t\t\t);\n\t\t\tcase GameModes.FirstToPress:\n\t\t\t\treturn (\n\t\t\t\t\t
\n\t\t\t\t\t\t this.respond(\"Answer\")}>Answer\n\t\t\t\t\t
\n\t\t\t\t);\n\t\t\tcase GameModes.FourForEach:\n\t\t\t\treturn (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t this.respond(\"A\")}>A\n\t\t\t\t\t\t\t this.respond(\"B\")}>B\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t this.respond(\"C\")}>C\n\t\t\t\t\t\t\t this.respond(\"D\")}>D\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t);\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\trenderLoginForm() {\n\t\tconst { inputGameId, inputName } = this.state;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t

Please enter the folowing items to join a game:

\n\t\t\t\t

Your short name:

\n\t\t\t\t
this.setState({ inputName: e.target.value })} />
\n\t\t\t\t

Game ID:

\n\t\t\t\t
this.setState({ inputGameId: e.target.value })} />
\n\t\t\t\t

\n\t\t\t\t\t this.joinGame()}>Join game \n\t\t\t\t\t this.back()}>Back\n\t\t\t\t

\n\t\t\t
\n\t\t);\n\t}\n\t\n\trender() {\n\t\tconst { gameState } = this.state;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{\n\t\t\t\t\tgameState.id != ''\n\t\t\t\t\t? (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Game { gameState.id }

\n\t\t\t\t\t\t\t{ this.renderContent() }\n\t\t\t\t\t\t
\n\t\t\t\t\t)\n\t\t\t\t\t: this.renderLoginForm()\n\t\t\t\t}\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default PlayerPanel;\n","import React, { Component } from 'react';\nimport * as signalR from '@aspnet/signalr';\nimport './styles/App.scss';\nimport { UserTypes } from './models/UserTypes';\nimport AdminPanel from './components/AdminPanel';\nimport PlayerPanel from './components/PlayerPanel';\n\ninterface IState {\n\tname: string;\n\ttype: UserTypes;\n\tloading: boolean;\n\tgameId: string;\n}\n\ninterface IProps {\n}\n\nclass App extends Component {\n\n\tprivate connection: signalR.HubConnection;\n\n\tconstructor(props: any) {\n\t\tsuper(props);\n\n\t\tlet url = \"/hub\";\n\t\t// dev url\n\t\t//url = 'http://localhost:5000/hub';\n\n\t\t// create a connection\n\t\tthis.connection = new signalR.HubConnectionBuilder()\n\t\t\t.withUrl(url)\n\t\t\t.build();\n\n\t\tthis.state = {\n\t\t\tname: '',\n\t\t\ttype: UserTypes.None,\n\t\t\tloading: false,\n\t\t\tgameId: ''\n\t\t};\n\n\t}\n\n\tcomponentDidMount() {\n\t\tconst name = Math.random().toString();\n\t\t\n\t\t// connect to hub\n\t\tthis.connection.start()\n\t\t\t.catch(err => document.write(err));\n\n\t\t// bind connection events\n\t\tthis.connection.on(\"gameCreated\", this.onGameCreated);\n\t\n\t\tthis.setState({ name });\n\t}\n\n\tjoinGame() {\n\t\tconst type = UserTypes.Player;\n\n\t\tthis.setState({ type });\n\t}\n\n\tcreateGame() {\n\t\tconst loading = true;\n\t\tthis.setState({ loading });\n\t\tthis.connection.send(\"createGame\");\n\t}\n\n\tonGameCreated = (gameId: string) => {\n\t\tconst loading = false;\n\t\tconst type = UserTypes.Admin;\n\t\tthis.setState({ loading, gameId, type });\n\t}\n\n\trenderContent() {\n\t\tconst { type, gameId } = this.state;\n\n\t\tswitch (type) {\n\t\t\tcase UserTypes.None:\n\t\t\t\treturn (\n\t\t\t\t\t
\n\t\t\t\t\t\t

Welcome to QuizPad!

\n\t\t\t\t\t\t

this.joinGame()}>Join existing game

\n\t\t\t\t\t\t

or

\n\t\t\t\t\t\t

this.createGame()}>Create a new game

\n\t\t\t\t\t
\n\t\t\t\t);\n\t\t\tcase UserTypes.Player:\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\tcase UserTypes.Admin:\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\trender() {\n\n\t\tconst { loading, type } = this.state; \n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t{\n\t\t\t\t\tloading ? (\n\t\t\t\t\t\t
Loading...
\n\t\t\t\t\t) : ''\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tthis.renderContent()\n\t\t\t\t}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default App;\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 http://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 http://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 http://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 React from 'react';\nimport ReactDOM from 'react-dom';\nimport './styles/index.scss';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\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: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}