{"version":3,"sources":["components/NavMenu.js","components/Layout.js","components/ResourceCalculator/TradeResourceSelector.tsx","components/ResourceCalculator/TradeResource.tsx","components/ResourceCalculator/ResourceLedger.tsx","components/ResourceCalculator/Constants.ts","components/ResourceCalculator/PieceRequisition.tsx","components/ResourceCalculator/ResourceCalculator.tsx","components/Home.js","components/FetchData.js","components/Counter.js","components/Game/GameLobby.tsx","components/Game/JoinGame.tsx","App.js","registerServiceWorker.js","index.js"],"names":["NavMenu","props","authenticated","bind","toggleNavbar","toggleShowLoginSignupModel","createGame","signOut","state","user","collapsed","showLoginSignupModel","this","populateUser","setState","createdGameId","a","Auth","currentAuthenticatedUser","token","signInUserSession","idToken","jwtToken","fetch","method","headers","Authorization","response","status","console","log","text","newGameId","onCurrentGameChange","then","playerNav","authenticationNav","loginSignupModel","attributes","preferred_username","onClick","Authenticator","variation","signUpAttributes","Navbar","className","light","Container","NavbarBrand","tag","Link","to","NavbarToggler","Collapse","isOpen","navbar","NavItem","NavLink","disabled","Component","displayName","name","Layout","children","TradeResourceSelector","currentCount","selectedResource","handleTrade","handleCancel","handleSelectedResourceChange","ledgerReason","resource","addResource","change","removeResource","onTrade","onCancelTrade","e","target","value","type","onChange","TradeResource","showSelector","handleStartTrade","handleCancelTrade","ResourceLedgerRow","ledgerAction","actionNumber","resourceChanges","some","resourceChange","allowCancel","xmlns","width","height","fill","viewBox","d","reason","Resources","Pieces","cost","alternateCost","capability","attackDescription","minAttackValue","defenseDescription","minDefenseValue","rangeDescription","maxRangeDistance","movementDescription","maxMovementDistance","PieceRequisition","showCost","showUseAlternateCostChoice","handleRequisition","handleUseAlternateCostRequisition","handleCancelRequisition","handleShowHideCost","handleShowHideUseAlternateCost","piece","onRequisition","onCancelRequisition","resourceCosts","map","resourceName","resourceCost","filter","alternateResourceCosts","requisitionCount","readOnly","colSpan","length","ResourceCalculator","handleAddLedgerEntry","handleStoredGrainChange","handleStoredMeatChange","handleStoredWoodChange","handleStoredStoneChange","handleStoredFishChange","handleGatheredGrainChange","handleGatheredMeatChange","handleGatheredWoodChange","handleGatheredStoneChange","handleGatheredFishChange","handleToggleEndCancel","handleEndTurn","handleToggleShowAllocateLedgerActions","handleReset","ledgerActionCount","ledgerActions","storedGrain","storedMeat","storedWood","storedStone","storedFish","lastGatheredGrain","lastGatheredMeat","lastGatheredWood","lastGatheredStone","lastGatheredFish","gatheredGrain","gatheredMeat","gatheredWood","gatheredStone","gatheredFish","availableGrain","availableMeat","availableWood","availableStone","availableFish","pieceRequisitions","showEndCancel","showAllocateLedgerActions","newLedgerActionCount","newEntry","updatedLedger","push","recalculateResources","entry","recalculateAvailableGrain","recalculateAvailableMeat","recalculateAvailableWood","recalculateAvailableStone","recalculateAvailableFish","Number","ledgerTotalChange","ledgerEntry","flat","reduce","total","useAlternateCost","pieceIndex","findIndex","pieceEntry","pieceName","lastPieceAddition","Math","max","apply","includes","storedResources","resourceIdentifier","count","gatheredResources","availableResources","turnEnded","description","currentUser","gameIdentifier","body","JSON","stringify","tradeLedgerActions","startsWith","allocateLedgerActions","x","pieceRequisition","Home","FetchData","forecasts","loading","populateWeatherData","contents","renderForecastsTable","id","json","data","forecast","date","temperatureC","temperatureF","summary","Counter","incrementCounter","GameLobby","game","gamePlayerTurnOrders","populateGameData","removePlayer","addPlayersToTurnOrder","startGame","currentTurnOrder","updatedTurnOrder","removedPlayers","turnPlayer","players","player","userId","sort","b","turnOrder","playerTurn","index","userPreferredName","startingTurnOrderForNewPlayers","newPlayersToAdd","newPlayer","newTurn","playerIdToRemove","username","renderGameTable","currentUserId","playersView","gameManagementIsEditable","ownerId","playersAreSet","JoinGame","suppliedGameIdentifier","joinFailureReason","gameJoinedSuccessfully","handleJoinGame","handleGameIdentifierSupplied","Amplify","configure","region","userPoolId","userPoolWebClientId","mandatorySignIn","cookieStorage","domain","path","expires","sameSite","secure","authenticationFlowType","oauth","scope","redirectSignIn","redirectSignOut","responseType","App","changeCurrentGame","currentGameId","exact","component","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","catch","error","baseUrl","document","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","basename","URL","process","origin","addEventListener","get","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.85e14841.chunk.js","sourcesContent":["import { Auth } from 'aws-amplify';\nimport { Authenticator } from '@aws-amplify/ui-react';\nimport React, { Component } from 'react';\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport './NavMenu.css';\n\nexport default class NavMenu extends Component {\n static displayName = NavMenu.name;\n\n constructor (props) {\n super(props);\n\n this.authenticated = this.authenticated.bind(this);\n this.toggleNavbar = this.toggleNavbar.bind(this);\n this.toggleShowLoginSignupModel = this.toggleShowLoginSignupModel.bind(this);\n this.createGame = this.createGame.bind(this);\n this.signOut = this.signOut.bind(this);\n this.state = {\n user: null,\n collapsed: true,\n showLoginSignupModel: false,\n };\n }\n\n authenticated() {\n this.populateUser();\n }\n\n componentDidMount() {\n this.populateUser();\n }\n\n componentWillUnmount() {\n this.setState({\n createdGameId: null\n });\n }\n\n async populateUser() {\n const user = await Auth.currentAuthenticatedUser();\n if (user)\n {\n this.setState({ user: user, showLoginSignupModel: false });\n }\n }\n\n toggleNavbar () {\n this.setState({\n collapsed: !this.state.collapsed\n });\n }\n\n toggleShowLoginSignupModel () {\n this.setState({\n showLoginSignupModel: !this.state.showLoginSignupModel\n })\n }\n\n async createGame () {\n const token = this.state.user.signInUserSession.idToken.jwtToken;\n\n const response = await fetch('api/gameManager/game', {\n method: 'post',\n headers: {\n Authorization: `Bearer ${token}`,\n }\n });\n\n if (response.status !== 200)\n {\n console.log('Error creating game: ' + response.status);\n return;\n }\n\n const newGameId = await response.text();\n // const newGameId = \"123-456-789\";\n\n this.props.onCurrentGameChange(newGameId);\n\n // since create game was available, the navbar was expanded so lets collapse it\n this.toggleNavbar();\n }\n\n async signOut () {\n Auth.signOut().then(() => {\n this.setState({\n user: null\n });\n });\n }\n\n render () {\n let playerNav;\n let authenticationNav;\n\n if (this.state.user)\n {\n playerNav =
Player: {this.state.user.attributes.preferred_username} 
\n authenticationNav = \n }\n else\n {\n authenticationNav = \n }\n\n let loginSignupModel;\n\n if (this.state.showLoginSignupModel)\n {\n loginSignupModel = {() => (

{this.authenticated()}

)}
\n }\n\n return (\n
\n \n \n {loginSignupModel}\n Clash Companion\n \n \n
    \n \n Home\n \n \n Create Game\n \n \n Join Game...\n \n
\n {authenticationNav}\n {playerNav}\n
\n
\n
\n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport { Container } from 'reactstrap';\nimport NavMenu from './NavMenu';\n\nexport class Layout extends Component {\n static displayName = Layout.name;\n\n render () {\n return (\n
\n \n \n {this.props.children}\n \n
\n );\n }\n}\n","import React, { Component, ChangeEvent } from 'react';\nimport { ResourceChange } from './Models';\n\ntype TradeResourceSelectorProps = {\n resource: string,\n onTrade(ledgerReason: string, resourceChanges: ResourceChange[]): void,\n onCancelTrade(): void\n}\n\ntype TradeResourceSelectorState = {\n selectedResource: string,\n currentCount: number\n}\n\nexport default class TradeResourceSelector extends Component {\n static displayName = TradeResourceSelector.name;\n\n constructor(props: TradeResourceSelectorProps) {\n super(props);\n this.state = { currentCount: 0, selectedResource: '' };\n this.handleTrade = this.handleTrade.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleSelectedResourceChange = this.handleSelectedResourceChange.bind(this);\n }\n\n handleTrade() {\n const ledgerReason = 'trade ' + this.state.selectedResource + ' for ' + this.props.resource;\n\n const addResource: ResourceChange = {\n resource: this.props.resource,\n change: 1\n };\n\n const removeResource: ResourceChange = {\n resource: this.state.selectedResource,\n change: this.state.selectedResource === 'fish' ? -2 : -4\n };\n \n this.props.onTrade(ledgerReason, [removeResource, addResource]);\n\n this.setState((state) => {\n return { currentCount: state.currentCount + 1 }\n });\n\n this.props.onCancelTrade();\n }\n\n handleCancel() {\n this.props.onCancelTrade();\n }\n\n handleSelectedResourceChange(e : ChangeEvent) {\n this.setState({\n selectedResource: e.target.value\n });\n }\n\n render() {\n return (\n
\n
\n {\n this.props.resource !== 'grain' ? : null\n }\n {\n this.props.resource !== 'meat' ? : null\n }\n {\n this.props.resource !== 'wood' ? : null\n }\n {\n this.props.resource !== 'stone' ? : null\n }\n \n
\n\n \n \n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport { ResourceChange } from './Models';\nimport TradeResourceSelector from './TradeResourceSelector';\n\ntype TradeResourceProps = {\n resource: string,\n availableGrain: number,\n availableMeat: number,\n availableWood: number,\n availableStone: number,\n availableFish: number,\n onTrade(ledgerReason: string, resourceChanges: ResourceChange[]): void\n}\n\ntype TradeResourceState = {\n showSelector: boolean\n}\n\nexport default class TradeResource extends Component {\n static displayName = TradeResource.name;\n\n constructor(props: TradeResourceProps) {\n super(props);\n this.state = { showSelector: false };\n this.handleStartTrade = this.handleStartTrade.bind(this);\n this.handleCancelTrade = this.handleCancelTrade.bind(this);\n }\n\n handleCancelTrade() {\n this.setState({\n showSelector: false\n });\n }\n\n handleStartTrade() {\n this.setState({\n showSelector: true\n });\n }\n\n render() {\n return (\n
\n {\n this.state.showSelector ?\n \n : \n }\n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport { LedgerAction } from './Models';\n\ntype ResourceLedgerRowProps = {\n ledgerAction: LedgerAction,\n resource: string,\n allowCancel: boolean,\n onCancelTrade(actionNumber: number): void\n}\n\nexport default class ResourceLedgerRow extends Component {\n static displayName = ResourceLedgerRow.name;\n\n constructor(props: ResourceLedgerRowProps) {\n super(props);\n this.handleCancelTrade = this.handleCancelTrade.bind(this);\n }\n\n handleCancelTrade() {\n this.props.onCancelTrade(this.props.ledgerAction.actionNumber);\n }\n\n render() {\n return (\n \n {\n this.props.ledgerAction.resourceChanges.some(resourceChange => resourceChange.resource === this.props.resource) ?\n this.props.allowCancel ? \n \n {this.props.ledgerAction.reason}\n : {this.props.ledgerAction.reason}\n : -\n }\n \n );\n }\n}\n","import { Piece } from \"./Models\";\n\nlet Resources: string[] = [\n 'grain',\n 'meat',\n 'wood',\n 'stone',\n 'fish'\n];\n\nexport {Resources};\n\nlet Pieces: Piece[] = [\n {\n name: \"Settler\",\n cost: [\n { resource: \"grain\", change: -2 },\n { resource: \"meat\", change: -2 },\n { resource: \"wood\", change: -2 },\n { resource: \"stone\", change: -2 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 1,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"\",\n maxMovementDistance: 1\n }\n },\n {\n name: \"Archer\",\n cost: [\n { resource: \"grain\", change: -3 },\n { resource: \"meat\", change: -3 },\n { resource: \"wood\", change: -2 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 2,\n defenseDescription: \"\",\n minDefenseValue: 3,\n rangeDescription: \"\",\n maxRangeDistance: 2,\n movementDescription: \"\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Castle Infantry to Archer\",\n cost: [\n { resource: \"grain\", change: -2 },\n { resource: \"meat\", change: -2 },\n { resource: \"wood\", change: -2 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 2,\n defenseDescription: \"\",\n minDefenseValue: 3,\n rangeDescription: \"\",\n maxRangeDistance: 2,\n movementDescription: \"\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Infantry\",\n cost: [\n { resource: \"grain\", change: -1 },\n { resource: \"meat\", change: -1 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 1,\n defenseDescription: \"\",\n minDefenseValue: 2,\n rangeDescription: \"\",\n maxRangeDistance: 1,\n movementDescription: \"\",\n maxMovementDistance: 2\n }\n },\n {\n name: \"Cavalry\",\n cost: [\n { resource: \"grain\", change: -2 },\n { resource: \"meat\", change: -2 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 3,\n defenseDescription: \"\",\n minDefenseValue: 1,\n rangeDescription: \"\",\n maxRangeDistance: 1,\n movementDescription: \"\",\n maxMovementDistance: 3\n }\n },\n {\n name: \"Artillery\",\n cost: [\n { resource: \"wood\", change: -2 },\n { resource: \"stone\", change: -2 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 3,\n defenseDescription: \"\",\n minDefenseValue: 1,\n rangeDescription: \"\",\n maxRangeDistance: 2,\n movementDescription: \"\",\n maxMovementDistance: 1\n }\n },\n {\n name: \"Ship\",\n cost: [\n { resource: \"wood\", change: -3 },\n { resource: \"stone\", change: -3 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 3,\n defenseDescription: \"\",\n minDefenseValue: 2,\n rangeDescription: \"\",\n maxRangeDistance: 2,\n movementDescription: \"\",\n maxMovementDistance: 1\n }\n },\n {\n name: \"Road\",\n cost: [\n { resource: \"wood\", change: -1 },\n { resource: \"stone\", change: -3 }\n ],\n alternateCost: [\n { resource: \"fish\", change: -3 }\n ],\n capability: {\n attackDescription: \"\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 0,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"Reduces by 1/2\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Bridge\",\n cost: [\n { resource: \"wood\", change: -2 },\n { resource: \"stone\", change: -6 }\n ],\n alternateCost: [\n { resource: \"fish\", change: -6 }\n ],\n capability: {\n attackDescription: \"\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 0,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"Reduces by 1/2\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Rough Terrain Road\",\n cost: [\n { resource: \"wood\", change: -2 },\n { resource: \"stone\", change: -6 }\n ],\n alternateCost: [\n { resource: \"fish\", change: -6 }\n ],\n capability: {\n attackDescription: \"\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 0,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"Reduces by 1/2\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Castle\",\n cost: [\n { resource: \"grain\", change: -2 },\n { resource: \"meat\", change: -2 },\n { resource: \"wood\", change: -3 },\n { resource: \"stone\", change: -3 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 2,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Farm\",\n cost: [\n { resource: \"grain\", change: -2 },\n { resource: \"wood\", change: -2 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 0,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Ranch\",\n cost: [\n { resource: \"meat\", change: -2 },\n { resource: \"wood\", change: -2 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 0,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Barracks\",\n cost: [\n { resource: \"grain\", change: -1 },\n { resource: \"meat\", change: -1 },\n { resource: \"wood\", change: -2 },\n { resource: \"stone\", change: -2 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 2,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Entrenchment\",\n cost: [\n { resource: \"wood\", change: -2 },\n { resource: \"stone\", change: -1 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"Min +1\",\n minAttackValue: 0,\n defenseDescription: \"\",\n minDefenseValue: 0,\n rangeDescription: \"\",\n maxRangeDistance: 0,\n movementDescription: \"\",\n maxMovementDistance: 0\n }\n },\n {\n name: \"Card\",\n cost: [\n { resource: \"fish\", change: -10 }\n ],\n alternateCost: null,\n capability: {\n attackDescription: \"*\",\n minAttackValue: 0,\n defenseDescription: \"*\",\n minDefenseValue: 0,\n rangeDescription: \"*\",\n maxRangeDistance: 0,\n movementDescription: \"*\",\n maxMovementDistance: 0\n }\n },\n]\n\nexport {Pieces};","import React, { Component } from 'react';\nimport { Resources } from './Constants';\nimport { Piece } from './Models';\n\ntype PieceRequisitionProps = {\n piece: Piece,\n requisitionCount: number,\n onRequisition(piece: Piece, useAlternateCost: boolean): void,\n onCancelRequisition(pieceName: string): void\n}\n\ntype PieceRequisitionState = {\n showCost: boolean,\n showUseAlternateCostChoice: boolean\n}\n\nexport default class PieceRequisition extends Component {\n static displayName = PieceRequisition.name;\n\n constructor(props: PieceRequisitionProps) {\n super(props);\n\n this.state = {\n showCost: false,\n showUseAlternateCostChoice: false\n };\n\n this.handleRequisition = this.handleRequisition.bind(this);\n this.handleUseAlternateCostRequisition = this.handleUseAlternateCostRequisition.bind(this);\n this.handleCancelRequisition = this.handleCancelRequisition.bind(this);\n this.handleShowHideCost = this.handleShowHideCost.bind(this);\n this.handleShowHideUseAlternateCost = this.handleShowHideUseAlternateCost.bind(this);\n }\n\n handleRequisition() {\n // use normal cost if there's no option for alternate\n if (!!!this.props.piece.alternateCost)\n {\n this.props.onRequisition(this.props.piece, false);\n return;\n }\n\n // if the choice was available and made to use normal\n if (this.state.showUseAlternateCostChoice)\n {\n this.props.onRequisition(this.props.piece, false);\n }\n this.handleShowHideUseAlternateCost()\n }\n\n handleUseAlternateCostRequisition() {\n this.props.onRequisition(this.props.piece, true);\n this.handleShowHideUseAlternateCost()\n }\n\n handleCancelRequisition() {\n this.props.onCancelRequisition(this.props.piece.name);\n }\n\n handleShowHideCost() {\n this.setState((state) => {\n return { showCost: !state.showCost }\n });\n }\n\n handleShowHideUseAlternateCost() {\n this.setState((state) => {\n return { showUseAlternateCostChoice: !state.showUseAlternateCostChoice }\n });\n }\n\n render() {\n const resourceCosts = Resources.map(resourceName => this.props.piece.cost.some(resourceCost => resourceCost.resource === resourceName) ? {this.props.piece.cost.filter(resourceCost => resourceCost.resource === resourceName)[0].change} : -)\n const alternateResourceCosts = this.props.piece.alternateCost ? Resources.map(resourceName => this.props.piece.alternateCost?.some(resourceCost => resourceCost.resource === resourceName) ? {this.props.piece.alternateCost.filter(resourceCost => resourceCost.resource === resourceName)[0].change} : -) : null;\n return (\n
\n

{this.props.piece.name}

\n
\n
\n {this.props.requisitionCount > 0 ? \n \n \n \n \n  \n \n : null}\n {!this.state.showUseAlternateCostChoice ?\n \n \n : null }\n {this.state.showUseAlternateCostChoice ? Pay using alternative? : null }\n
\n \n \n {resourceCosts}\n {alternateResourceCosts ? : null}\n {alternateResourceCosts ? {alternateResourceCosts} : null}\n \n
- alternatively -
\n
\n );\n }\n}\n","import React, { Component, ChangeEvent } from 'react';\nimport { Auth } from 'aws-amplify';\nimport TradeResource from './TradeResource';\nimport { LedgerAction, Piece, ResourceChange } from './Models';\nimport ResourceLedgerRow from './ResourceLedger';\nimport {Pieces} from './Constants';\nimport PieceRequisition from './PieceRequisition';\n\ntype ResourceCalculatorProps = {\n gameIdentifier: string,\n}\n\ntype PieceRequisitionLedger = {\n piece: Piece,\n requisitionCount: number\n}\n\ntype ResourceCalculatorState = {\n user: any,\n ledgerActionCount: number,\n ledgerActions: LedgerAction[],\n storedGrain: number,\n storedMeat: number,\n storedWood: number,\n storedStone: number,\n storedFish: number,\n lastGatheredGrain: number,\n lastGatheredMeat: number,\n lastGatheredWood: number,\n lastGatheredStone: number,\n lastGatheredFish: number,\n gatheredGrain: number,\n gatheredMeat: number,\n gatheredWood: number,\n gatheredStone: number,\n gatheredFish: number,\n availableGrain: number,\n availableMeat: number,\n availableWood: number,\n availableStone: number,\n availableFish: number,\n pieceRequisitions: PieceRequisitionLedger[],\n showEndCancel: boolean,\n showAllocateLedgerActions: boolean\n}\n\nexport default class ResourceCalculator extends Component {\n static displayName = ResourceCalculator.name;\n\n constructor(props: ResourceCalculatorProps) {\n super(props);\n this.handleAddLedgerEntry = this.handleAddLedgerEntry.bind(this);\n\n this.handleStoredGrainChange = this.handleStoredGrainChange.bind(this);\n this.handleStoredMeatChange = this.handleStoredMeatChange.bind(this);\n this.handleStoredWoodChange = this.handleStoredWoodChange.bind(this);\n this.handleStoredStoneChange = this.handleStoredStoneChange.bind(this);\n this.handleStoredFishChange = this.handleStoredFishChange.bind(this);\n\n this.handleGatheredGrainChange = this.handleGatheredGrainChange.bind(this);\n this.handleGatheredMeatChange = this.handleGatheredMeatChange.bind(this);\n this.handleGatheredWoodChange = this.handleGatheredWoodChange.bind(this);\n this.handleGatheredStoneChange = this.handleGatheredStoneChange.bind(this);\n this.handleGatheredFishChange = this.handleGatheredFishChange.bind(this);\n this.handleCancelTrade = this.handleCancelTrade.bind(this);\n\n this.handleRequisition = this.handleRequisition.bind(this);\n this.handleCancelRequisition = this.handleCancelRequisition.bind(this);\n\n this.handleToggleEndCancel = this.handleToggleEndCancel.bind(this);\n this.handleEndTurn = this.handleEndTurn.bind(this);\n\n this.handleToggleShowAllocateLedgerActions = this.handleToggleShowAllocateLedgerActions.bind(this);\n\n this.handleReset = this.handleReset.bind(this);\n\n this.state = {\n user: null,\n ledgerActionCount: 0,\n ledgerActions: [],\n storedGrain: 0,\n storedMeat: 0,\n storedWood: 0,\n storedStone: 0,\n storedFish: 0,\n lastGatheredGrain: 0,\n lastGatheredMeat: 0,\n lastGatheredWood: 0,\n lastGatheredStone: 0,\n lastGatheredFish: 0,\n gatheredGrain: 0,\n gatheredMeat: 0,\n gatheredWood: 0,\n gatheredStone: 0,\n gatheredFish: 0,\n availableGrain: 0,\n availableMeat: 0,\n availableWood: 0,\n availableStone: 0,\n availableFish: 0,\n pieceRequisitions: Pieces.map(piece => ({ piece, requisitionCount: 0})),\n showEndCancel: false,\n showAllocateLedgerActions: false,\n };\n }\n\n handleAddLedgerEntry(ledgerReason: string, resourceChanges: ResourceChange[]) {\n this.setState((state) => {\n const newLedgerActionCount = state.ledgerActionCount + 1;\n const newEntry = {\n actionNumber: newLedgerActionCount,\n reason: ledgerReason,\n resourceChanges\n };\n\n var updatedLedger = state.ledgerActions;\n\n if (!updatedLedger || updatedLedger.length === 0)\n {\n updatedLedger = [newEntry];\n }\n else\n {\n updatedLedger.push(newEntry);\n }\n\n return { ledgerActions: updatedLedger, ledgerActionCount: newLedgerActionCount }\n });\n\n this.recalculateResources();\n }\n\n handleCancelTrade(actionNumber: number) {\n this.setState((state) => {\n return {ledgerActions: state.ledgerActions.filter(entry => entry.actionNumber !== actionNumber)}\n });\n\n this.recalculateResources();\n }\n\n recalculateResources() {\n this.recalculateAvailableGrain();\n this.recalculateAvailableMeat();\n this.recalculateAvailableWood();\n this.recalculateAvailableStone();\n this.recalculateAvailableFish();\n }\n\n handleStoredGrainChange(e: ChangeEvent) {\n this.setState({\n storedGrain: Number(e.target.value)\n });\n\n this.recalculateAvailableGrain();\n }\n\n handleGatheredGrainChange(e: ChangeEvent) {\n this.setState({\n gatheredGrain: Number(e.target.value)\n });\n\n this.recalculateAvailableGrain();\n }\n\n recalculateAvailableGrain() {\n this.setState((state) => {\n const ledgerTotalChange = state.ledgerActions\n .map(ledgerEntry => ledgerEntry.resourceChanges.filter(resourceChange => resourceChange.resource === 'grain'))\n .flat()\n .map(resourceChange => resourceChange.change)\n .reduce((total, change) => total + change, 0);\n\n return { availableGrain: state.storedGrain + state.gatheredGrain + ledgerTotalChange }\n });\n }\n\n handleStoredMeatChange(e: ChangeEvent) {\n this.setState({\n storedMeat: Number(e.target.value)\n });\n\n this.recalculateAvailableMeat();\n }\n\n handleGatheredMeatChange(e: ChangeEvent) {\n this.setState({\n gatheredMeat: Number(e.target.value)\n });\n\n this.recalculateAvailableMeat();\n }\n\n recalculateAvailableMeat() {\n this.setState((state) => {\n const ledgerTotalChange = state.ledgerActions\n .map(ledgerEntry => ledgerEntry.resourceChanges.filter(resourceChange => resourceChange.resource === 'meat'))\n .flat()\n .map(resourceChange => resourceChange.change)\n .reduce((total, change) => total + change, 0);\n\n return { availableMeat: state.storedMeat + state.gatheredMeat + ledgerTotalChange }\n });\n }\n\n handleStoredWoodChange(e: ChangeEvent) {\n this.setState({\n storedWood: Number(e.target.value)\n });\n\n this.recalculateAvailableWood();\n }\n\n handleGatheredWoodChange(e: ChangeEvent) {\n this.setState({\n gatheredWood: Number(e.target.value)\n });\n\n this.recalculateAvailableWood();\n }\n\n recalculateAvailableWood() {\n this.setState((state) => {\n const ledgerTotalChange = state.ledgerActions\n .map(ledgerEntry => ledgerEntry.resourceChanges.filter(resourceChange => resourceChange.resource === 'wood'))\n .flat()\n .map(resourceChange => resourceChange.change)\n .reduce((total, change) => total + change, 0);\n\n return { availableWood: state.storedWood + state.gatheredWood + ledgerTotalChange }\n });\n }\n\n handleStoredStoneChange(e: ChangeEvent) {\n this.setState({\n storedStone: Number(e.target.value)\n });\n\n this.recalculateAvailableStone();\n }\n\n handleGatheredStoneChange(e: ChangeEvent) {\n this.setState({\n gatheredStone: Number(e.target.value)\n });\n\n this.recalculateAvailableStone();\n }\n\n recalculateAvailableStone() {\n this.setState((state) => {\n const ledgerTotalChange = state.ledgerActions\n .map(ledgerEntry => ledgerEntry.resourceChanges.filter(resourceChange => resourceChange.resource === 'stone'))\n .flat()\n .map(resourceChange => resourceChange.change)\n .reduce((total, change) => total + change, 0);\n\n return { availableStone: state.storedStone + state.gatheredStone + ledgerTotalChange }\n });\n }\n\n handleStoredFishChange(e: ChangeEvent) {\n this.setState({\n storedFish: Number(e.target.value)\n });\n\n this.recalculateAvailableFish();\n }\n\n handleGatheredFishChange(e: ChangeEvent) {\n this.setState({\n gatheredFish: Number(e.target.value)\n });\n\n this.recalculateAvailableFish();\n }\n\n recalculateAvailableFish() {\n this.setState((state) => {\n const ledgerTotalChange = state.ledgerActions\n .map(ledgerEntry => ledgerEntry.resourceChanges.filter(resourceChange => resourceChange.resource === 'fish'))\n .flat()\n .map(resourceChange => resourceChange.change)\n .reduce((total, change) => total + change, 0);\n\n return { availableFish: state.storedFish + state.gatheredFish + ledgerTotalChange }\n });\n }\n\n handleRequisition(piece: Piece, useAlternateCost: boolean) {\n let ledgerReason = piece.name + \" x 1\";\n if (useAlternateCost && piece.alternateCost)\n {\n this.handleAddLedgerEntry(ledgerReason, piece.alternateCost);\n }\n else\n {\n this.handleAddLedgerEntry(ledgerReason, piece.cost);\n }\n\n this.setState((state) => {\n let pieceIndex = state.pieceRequisitions.findIndex(pieceEntry => pieceEntry.piece.name === piece.name);\n state.pieceRequisitions[pieceIndex].requisitionCount += 1;\n return { pieceRequisitions: state.pieceRequisitions}\n })\n\n this.recalculateResources();\n }\n\n handleCancelRequisition(pieceName: string) {\n this.setState((state) => {\n let lastPieceAddition = Math.max.apply(Math, state.ledgerActions.filter(entry => entry.reason.includes(pieceName)).map(entry => entry.actionNumber));\n return {ledgerActions: state.ledgerActions.filter(entry => entry.actionNumber !== lastPieceAddition)}\n });\n\n this.setState((state) => {\n let pieceIndex = state.pieceRequisitions.findIndex(pieceEntry => pieceEntry.piece.name === pieceName);\n state.pieceRequisitions[pieceIndex].requisitionCount -= 1;\n return { pieceRequisitions: state.pieceRequisitions}\n })\n\n this.recalculateResources();\n }\n\n handleToggleEndCancel() {\n this.setState((state) => {\n const currentShowEndCancel = state.showEndCancel;\n return { showEndCancel: !currentShowEndCancel }\n })\n }\n\n handleToggleShowAllocateLedgerActions() {\n this.setState((state) => {\n const currentShowAllocateLedgerActions = state.showAllocateLedgerActions;\n return { showAllocateLedgerActions: !currentShowAllocateLedgerActions }\n })\n }\n\n async handleEndTurn() {\n const storedResources = [{\n resourceIdentifier: \"grain\",\n count: this.state.storedGrain,\n },{\n resourceIdentifier: \"meat\",\n count: this.state.storedMeat,\n },{\n resourceIdentifier: \"wood\",\n count: this.state.storedWood,\n },{\n resourceIdentifier: \"stone\",\n count: this.state.storedStone,\n },{\n resourceIdentifier: \"fish\",\n count: this.state.storedFish,\n }];\n\n const gatheredResources = [{\n resourceIdentifier: \"grain\",\n count: this.state.gatheredGrain,\n },{\n resourceIdentifier: \"meat\",\n count: this.state.gatheredMeat,\n },{\n resourceIdentifier: \"wood\",\n count: this.state.gatheredWood,\n },{\n resourceIdentifier: \"stone\",\n count: this.state.gatheredStone,\n },{\n resourceIdentifier: \"fish\",\n count: this.state.gatheredFish,\n }];\n\n const availableResources = [{\n resourceIdentifier: \"grain\",\n count: this.state.availableGrain,\n },{\n resourceIdentifier: \"meat\",\n count: this.state.availableMeat,\n },{\n resourceIdentifier: \"wood\",\n count: this.state.availableWood,\n },{\n resourceIdentifier: \"stone\",\n count: this.state.availableStone,\n },{\n resourceIdentifier: \"fish\",\n count: this.state.availableFish,\n }];\n\n const turnEnded = {\n storedResources: storedResources,\n gatheredResources: gatheredResources,\n ledgerActions: this.state.ledgerActions.map(ledgerAction => { return {\n actionNumber: ledgerAction.actionNumber,\n description: ledgerAction.reason,\n resourceChanges: ledgerAction.resourceChanges.map(resourceChange => { return {\n resourceIdentifier: resourceChange.resource,\n count: resourceChange.change\n }}),\n }}),\n availableResources: availableResources,\n }\n\n if (!this.state.user)\n {\n let currentUser = await Auth.currentAuthenticatedUser();\n this.setState(\n {\n user: currentUser\n }\n );\n }\n\n if (!this.props.gameIdentifier)\n {\n this.handleReset();\n \n return;\n }\n\n const token = this.state.user.signInUserSession.idToken.jwtToken;\n\n const response = await fetch(`api/gameManager/game/${this.props.gameIdentifier}/turns`, {\n method: 'post',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(turnEnded)\n });\n\n if (response.status !== 200)\n {\n console.log('Error ending turn: ' + response.status);\n return;\n }\n\n this.handleReset();\n }\n\n handleReset() {\n this.setState((state) => {\n return {\n ledgerActionCount: 0,\n ledgerActions: [],\n storedGrain: state.availableGrain,\n storedMeat: state.availableMeat,\n storedWood: state.availableWood,\n storedStone: state.availableStone,\n storedFish: state.availableFish,\n lastGatheredGrain: state.gatheredGrain,\n lastGatheredMeat: state.gatheredMeat,\n lastGatheredWood: state.gatheredWood,\n lastGatheredStone: state.gatheredStone,\n lastGatheredFish: state.gatheredFish,\n gatheredGrain: 0,\n gatheredMeat: 0,\n gatheredWood: 0,\n gatheredStone: 0,\n gatheredFish: 0,\n availableGrain: 0,\n availableMeat: 0,\n availableWood: 0,\n availableStone: 0,\n availableFish: 0,\n pieceRequisitions: Pieces.map(piece => ({ piece, requisitionCount: 0})),\n showEndCancel: false,\n }\n });\n\n this.recalculateResources();\n }\n\n render() {\n const tradeLedgerActions = this.state.ledgerActions\n .filter(entry => entry.reason.startsWith(\"trade\"))\n .map(entry => \n \n \n \n \n \n );\n\n const allocateLedgerActions = this.state.ledgerActions\n .filter(entry => !entry.reason.startsWith(\"trade\"))\n .map(entry => \n \n \n \n \n \n );\n\n return (\n
\n

Resource Calculator

\n {this.props.gameIdentifier ?

Game: {this.props.gameIdentifier}

: null}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {tradeLedgerActions}\n \n \n \n \n \n \n \n \n \n \n \n \n {this.state.showAllocateLedgerActions ? allocateLedgerActions : null }\n \n
GrainMeatWoodStoneFish
Stored
\n \n \n \n \n \n \n \n \n \n
Gathered
{this.state.lastGatheredGrain}{this.state.lastGatheredMeat}{this.state.lastGatheredWood}{this.state.lastGatheredStone}{this.state.lastGatheredFish}
\n \n \n \n \n \n \n \n \n \n
Traded
\n \n \n \n \n \n \n \n \n
Available
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n

\n {this.state.showEndCancel\n ?

This will clear the calculator and move the available resources up as stored.

\n :

{ allocateLedgerActions.some(function(x) { return x }) ? : null }

\n }\n
\n
\n
\n
\n
\n {this.state.pieceRequisitions.map(pieceRequisition => )}\n
\n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport ResourceCalculator from './ResourceCalculator/ResourceCalculator';\n\nexport class Home extends Component {\n static displayName = Home.name;\n\n render () {\n return (\n
\n \n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport { Auth } from 'aws-amplify';\n\nexport class FetchData extends Component {\n static displayName = FetchData.name;\n\n constructor(props) {\n super(props);\n this.state = { forecasts: [], loading: true };\n }\n\n componentDidMount() {\n this.populateWeatherData();\n }\n\n static renderForecastsTable(forecasts) {\n return (\n \n \n \n \n \n \n \n \n \n \n {forecasts.map(forecast =>\n \n \n \n \n \n \n )}\n \n
DateTemp. (C)Temp. (F)Summary
{forecast.date}{forecast.temperatureC}{forecast.temperatureF}{forecast.summary}
\n );\n }\n\n render() {\n let contents = this.state.loading\n ?

Loading...

\n : FetchData.renderForecastsTable(this.state.forecasts);\n\n return (\n
\n

Weather forecast

\n

This component demonstrates fetching data from the server.

\n {contents}\n
\n );\n }\n\n async populateWeatherData() {\n const user = await Auth.currentAuthenticatedUser();\n const token = user.signInUserSession.idToken.jwtToken;\n\n const response = await fetch('weatherforecast', {\n method: 'get',\n headers: {\n Authorization: `Bearer ${token}`,\n }\n });\n const data = await response.json();\n this.setState({ forecasts: data, loading: false });\n }\n}\n","import React, { Component } from 'react';\n\nexport class Counter extends Component {\n static displayName = Counter.name;\n\n constructor(props) {\n super(props);\n this.state = { currentCount: 0 };\n this.incrementCounter = this.incrementCounter.bind(this);\n }\n\n incrementCounter() {\n this.setState({\n currentCount: this.state.currentCount + 1\n });\n }\n\n render() {\n return (\n
\n

Counter

\n\n

This is a simple example of a React component.

\n\n

Current count: {this.state.currentCount}

\n\n \n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport { Auth } from 'aws-amplify';\n\nexport type Game = {\n gameIdentifier: string,\n createdDate: Date,\n playersAreSet: boolean,\n ownerId: string,\n playerCount: number,\n currentPlayerId: string,\n players: GamePlayer[],\n}\n\nexport type GamePlayer = {\n userId: string,\n userPreferredName: string,\n turnOrder: number,\n}\n\nexport type GamePlayerTurnOrder = {\n userId: string,\n userPreferredName: string,\n turnOrder: number, \n}\n\ntype GameLobbyProps = {\n gameIdentifier: string\n}\n\ntype GameLobbyState = {\n user: any,\n loading: boolean,\n game: Game|null,\n gamePlayerTurnOrders: GamePlayerTurnOrder[]|null,\n}\n\nexport default class GameLobby extends Component {\n static displayName = GameLobby.name;\n\n constructor(props: GameLobbyProps) {\n super(props);\n\n this.state = {\n user: null,\n loading: true,\n game: null,\n gamePlayerTurnOrders: null\n };\n\n this.populateGameData = this.populateGameData.bind(this);\n this.removePlayer = this.removePlayer.bind(this);\n this.addPlayersToTurnOrder = this.addPlayersToTurnOrder.bind(this);\n this.startGame = this.startGame.bind(this);\n }\n\n async componentDidMount() {\n this.populateGameData();\n }\n\n async componentDidUpdate() {\n if (!this.state.game)\n {\n this.populateGameData();\n }\n }\n\n async populateGameData() {\n if (!this.state.user)\n {\n let currentUser = await Auth.currentAuthenticatedUser();\n this.setState(\n {\n user: currentUser\n }\n );\n }\n\n if (!this.props.gameIdentifier)\n {\n return;\n }\n\n const token = this.state.user.signInUserSession.idToken.jwtToken;\n\n // const response = await fetch(`https://localhost:49161/api/gameManager/game/52b59d3c-4dd3-4b72-aaa5-4a0012850d9b`, {\n const response = await fetch(`api/gameManager/game/${this.props.gameIdentifier}`, {\n method: 'get',\n headers: {\n Authorization: `Bearer ${token}`,\n }\n });\n\n if (response.status !== 200)\n {\n console.log('Error getting game: ' + response.status);\n return;\n }\n\n const data = await response.json();\n this.addPlayersToTurnOrder(data);\n }\n\n addPlayersToTurnOrder(game: Game) {\n this.setState((state) => {\n const currentTurnOrder = state.gamePlayerTurnOrders ?? [];\n \n var updatedTurnOrder = currentTurnOrder;\n\n // remove those in current, if any, which aren't in players\n if (updatedTurnOrder && currentTurnOrder)\n {\n const removedPlayers = currentTurnOrder.filter(turnPlayer => !game.players.some(player => player.userId === turnPlayer.userId));\n\n updatedTurnOrder = updatedTurnOrder.filter(turnPlayer => !removedPlayers.includes(turnPlayer));\n\n var existingPlayerCount = updatedTurnOrder.length;\n\n // re-order turn orders for remaining in current\n if (existingPlayerCount > 0)\n {\n updatedTurnOrder = updatedTurnOrder\n .sort((a, b) => a.turnOrder - b.turnOrder)\n .map((playerTurn, index) => ({\n userId: playerTurn.userId,\n userPreferredName: playerTurn.userPreferredName,\n turnOrder: index + 1 // assume index is zero based\n }))\n }\n }\n\n // add new players with new turn orders\n var startingTurnOrderForNewPlayers = updatedTurnOrder.length ?? 0;\n var newPlayersToAdd = game.players.filter(player => !updatedTurnOrder.some(turnPlayer => turnPlayer.userId === player.userId));\n\n if (newPlayersToAdd.length > 0)\n {\n newPlayersToAdd.map(newPlayer => {\n let newTurn = ({\n userId: newPlayer.userId,\n userPreferredName: newPlayer.userPreferredName,\n turnOrder: startingTurnOrderForNewPlayers += 1\n });\n updatedTurnOrder?.push(newTurn);\n return 1;\n })\n }\n\n return { gamePlayerTurnOrders: updatedTurnOrder, game: game, loading: false }\n });\n }\n\n async removePlayer(playerIdToRemove: string) {\n if (!this.props.gameIdentifier)\n {\n return;\n }\n\n const token = this.state.user.signInUserSession.idToken.jwtToken;\n\n const response = await fetch(`api/gameManager/game/${this.props.gameIdentifier}/players/${playerIdToRemove}`, {\n method: 'delete',\n headers: {\n Authorization: `Bearer ${token}`,\n }\n });\n\n if (response.status !== 200)\n {\n console.log('Error removing player: ' + response.status);\n return;\n }\n\n this.populateGameData();\n }\n\n async startGame() {\n const token = this.state.user.signInUserSession.idToken.jwtToken;\n\n const response = await fetch(`api/gameManager/game/${this.props.gameIdentifier}/start`, {\n method: 'post',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(this.state.gamePlayerTurnOrders)\n });\n\n if (response.status !== 200)\n {\n console.log('Error creating game: ' + response.status);\n return;\n }\n\n this.populateGameData();\n }\n\n static renderGameTable(currentUserId: string, game: Game|null, turnOrder: GamePlayerTurnOrder[]|null, removePlayer: Function, startGame: Function) {\n if (!game)\n {\n return;\n }\n\n const userIsOwnerOfCurrentGame = game.ownerId === currentUserId;\n\n let playersView;\n\n const gameManagementIsEditable = userIsOwnerOfCurrentGame && turnOrder && !game.playersAreSet;\n\n if (gameManagementIsEditable && turnOrder)\n {\n playersView = turnOrder.map(player =>\n \n {player.turnOrder}\n {player.userPreferredName}\n \n \n );\n }\n else\n {\n playersView = game.players.map(player =>\n \n {player.turnOrder}\n {player.userPreferredName}\n \n \n );\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n {playersView}\n \n
TurnPlayer\n
\n { gameManagementIsEditable ? : null }\n
\n );\n }\n\n render() {\n let userId;\n\n if (this.state.user)\n {\n userId = this.state.user.username;\n }\n\n let contents;\n \n if (!this.props.gameIdentifier)\n {\n contents =

No current game

\n }\n else\n {\n contents = this.state.loading\n ?

Loading...

\n : GameLobby.renderGameTable(userId, this.state.game, this.state.gamePlayerTurnOrders, this.removePlayer, this.startGame);\n }\n\n return (\n
\n

Game Lobby: {this.props.gameIdentifier}

\n \n {contents}\n
\n );\n }\n}\n","import React, { Component, ChangeEvent } from 'react';\nimport { Auth } from 'aws-amplify';\nimport { Redirect } from 'react-router-dom';\n\ntype JoinGameProps = {\n onCurrentGameChange(newGameId: string): void\n}\n\ntype JoinGameState = {\n user: any,\n suppliedGameIdentifier: string,\n joinFailureReason: string|null,\n gameJoinedSuccessfully: boolean,\n}\n\nexport default class JoinGame extends Component {\n static displayName = JoinGame.name;\n\n constructor(props: JoinGameProps) {\n super(props);\n\n this.state = {\n user: null,\n suppliedGameIdentifier: \"\",\n joinFailureReason: null,\n gameJoinedSuccessfully: false,\n };\n\n this.handleJoinGame = this.handleJoinGame.bind(this);\n this.handleGameIdentifierSupplied = this.handleGameIdentifierSupplied.bind(this);\n }\n\n handleGameIdentifierSupplied(e : ChangeEvent) {\n this.setState({\n suppliedGameIdentifier: e.target.value\n });\n }\n\n\n async handleJoinGame () {\n if (!this.state.user)\n {\n let currentUser = await Auth.currentAuthenticatedUser();\n this.setState(\n {\n user: currentUser\n }\n );\n }\n\n var newGameId = this.state.suppliedGameIdentifier;\n const token = this.state.user.signInUserSession.idToken.jwtToken;\n\n const response = await fetch(`api/gameManager/game/${newGameId}/players`, {\n method: 'post',\n headers: {\n Authorization: `Bearer ${token}`,\n }\n });\n\n if (response.status !== 200)\n {\n console.log('Error adding player to game: ' + response.status);\n\n this.setState({\n joinFailureReason: \"Game not found.\"\n });\n\n return;\n }\n\n this.props.onCurrentGameChange(newGameId);\n\n this.setState({\n gameJoinedSuccessfully: true\n });\n }\n\n render() {\n if (this.state.gameJoinedSuccessfully)\n {\n return \n }\n\n return (\n
\n

Join Game:

\n \n \n { this.state.joinFailureReason ?

{this.state.joinFailureReason}

: null }\n
\n );\n }\n}\n","import { Amplify } from 'aws-amplify';\n// import { Authenticator } from '@aws-amplify/ui-react';\nimport React, { Component } from 'react';\nimport { Route } from 'react-router';\nimport { Layout } from './components/Layout';\nimport { Home } from './components/Home';\nimport { FetchData } from './components/FetchData';\nimport { Counter } from './components/Counter';\nimport GameLobby from './components/Game/GameLobby';\nimport JoinGame from './components/Game/JoinGame';\n\nimport '@aws-amplify/ui-react/styles.css';\nimport './custom.css'\n\nAmplify.configure({\n Auth: {\n region: 'us-east-2',\n userPoolId: 'us-east-2_yUX5yh5gA',\n userPoolWebClientId: '32n5e2onuivsjm8f8k1mtk5b4f',\n mandatorySignIn: false,\n\n // OPTIONAL - Configuration for cookie storage\n // Note: if the secure flag is set to true, then the cookie transmission requires a secure protocol\n cookieStorage: {\n // REQUIRED - Cookie domain (only required if cookieStorage is provided)\n // domain: 'game-companion-temp-1000786126.us-east-2.elb.amazonaws.com',\n // domain: 'localhost',\n domain: 'clash-game-companion.com',\n // OPTIONAL - Cookie path\n path: '/',\n // OPTIONAL - Cookie expiration in days\n expires: 365,\n // OPTIONAL - See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n sameSite: \"lax\",\n // OPTIONAL - Cookie secure flag\n // Either true or false, indicating if the cookie transmission requires a secure protocol (https).\n secure: true\n },\n\n // OPTIONAL - Manually set the authentication flow type. Default is 'USER_SRP_AUTH'\n authenticationFlowType: 'USER_SRP_AUTH',\n\n // OPTIONAL - Hosted UI configuration\n oauth: {\n domain: 'https://game-companion.auth.us-east-2.amazoncognito.com',\n scope: ['email', 'openid'],\n redirectSignIn: 'https://clash-game-companion.com/',\n redirectSignOut: 'https://clash-game-companion.com/',\n responseType: 'code' // or 'token', note that REFRESH token will only be generated when the responseType is code\n }\n }\n});\n\nexport default class App extends Component {\n static displayName = App.name;\n\n constructor (props) {\n super(props);\n\n this.changeCurrentGame = this.changeCurrentGame.bind(this);\n\n this.state = {\n currentGameId: null,\n };\n }\n\n changeCurrentGame (newGameId) {\n this.setState({\n currentGameId: newGameId\n });\n }\n\n // render () {\n // return (\n // \n // \n // \n // \n // \n // \n // \n // );\n // }\n render () {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","// In production, we register a service worker to serve assets from local cache.\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 the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\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 default function register () {\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);\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/facebookincubator/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. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW (swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\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 }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker (swUrl) {\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 if (\n response.status === 404 ||\n response.headers.get('content-type').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);\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 'bootstrap/dist/css/bootstrap.css';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport App from './App';\nimport registerServiceWorker from './registerServiceWorker';\n\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\nconst rootElement = document.getElementById('root');\n\nReactDOM.render(\n \n \n ,\n rootElement);\n\nregisterServiceWorker();\n\n"],"sourceRoot":""}