{"version":3,"sources":["assets/icons/lightbulb.svg","assets/icons/smile.svg","assets/icons/grumpy.svg","assets/icons/user-header-gray.png","assets/icons/col1.svg","assets/icons/col2.svg","assets/icons/col3.svg","assets/icons/col4.svg","assets/icons/copy.png","services/realtimeConnection.js","services/GameHubConstants.js","hooks/GameContext.js","hooks/ServiceInjectorContext.js","components/LogoLoader.js","services/AmplitudeService.js","components/TranslateWrapper.js","services/sharedStyles.js","components/MenuBar/PlayersList.js","components/MenuBar/StepProgress.js","components/MenuBar/CurrentMoveIndicator.js","components/MenuBar/index.js","components/Board/BoardCard.js","components/Board/BoardColumn.js","components/Board/index.js","components/ResultsDialog/index.js","models/ChanceCardType.js","components/ChanceDialog/ShortChanceCard.js","components/ResultsDialog/ProblemResolutionScreen.js","components/ResultsDialog/EndOfDayDialog.js","components/ResultsDialog/statisticPanel.js","components/ResultsDialog/EndOfSprintDialog.js","components/ResultsDialog/EndOfGameScreen.js","models/GameProgress.js","components/ChanceDialog/ChanceCard.js","components/ChanceDialog/index.js","services/userStoriesReducer.js","services/problemsSolutionsReducer.js","components/GameShell.js","components/CreateGameForm.js","components/languageSelector.js","components/SessionStartScreen.js","components/WelcomeScreen/HostWelcomeScreen.js","components/SessionStartGameScreen.js","components/PlayerDetailsForm.js","components/WelcomeScreen/RegularPlayerWelcomeScreen.js","components/JoinToGame.js","components/NotFound.js","components/ErrorPage.js","components/OnlySingleGame.js","services/jwtTokenService.js","components/Root.js","index.js","assets/icons/scgo-logo.svg","assets/icons/alert.svg","assets/icons/create-new-game-main-image.svg","assets/icons/create-new-game-image1.svg","assets/icons/create-new-game-image2.svg","assets/icons/create-new-game-image3.svg","assets/icons/create-new-game-image4.svg","assets/icons/copyWhite.png"],"names":["module","exports","hubConnection","HubConnectionBuilder","withUrl","accessTokenFactory","window","sessionStorage","getItem","withAutomaticReconnect","build","globalHandler","sessionId","modeConnected","AmlitudeErrorHandler","locale","baseErrorHandler","error","console","log","message","realtimeConnection","init","args","setAmlitudeErrorHandler","Handler","setLocale","code","setSessionId","id","on","start","catch","stop","off","invoke","method","a","requestData","token","response","appVersion","setItem","hasErrors","invokeIgnore","state","closeHandler","setTimeout","onclose","ResponseStatus","GAME_HUB_EVENTS","GAME_HUB_METHODS","GameContext","createContext","GameContextProvider","children","useState","playerName","setPlayerName","assignedUserStoryId","setAssignedUserStoryId","playerId","setPlayerId","isSpectator","setIsSpectator","player","isHost","setIsHost","Provider","value","useGameContext","useContext","ServiceInjectorContext","ServiceInjector","connection","jwtTokenService","useServiceInjector","pulseAnimation","keyframes","Logo","styled","div","logoUri","LogoContainer","LogoLoader","AmplitudeService","amplitudeKey","SendCreateGame","player_key","player_name","is_spectator","is_host","session_id","profile_code","OtherEventPropertyse","otherEventPropertyse","Object","assign","Send","SendStartGame","Date","now","SendEndGame","TimeStartGame","TimeEndGame","Math","floor","SendJoinPlayer","SendEndDay","SendEndSprint","SendRollTheDice","eventType","specialEventPropertyse","amplitude","getInstance","trackingOptions","city","carrier","country","device_manufacturer","device_model","dma","ip_address","language","os_name","os_version","platform","region","version_name","eventProperties","user_properties","error_type","param_success","setUserProperties","logEvent","GeoCoding","GetPosition","options","Promise","resolve","reject","navigator","geolocation","getCurrentPosition","GetFullNameContry","counryCode","i18n_iso_countries","require","registerLocale","getName","select","GetTimeZoneAndCodeContry","latitude","longitude","ArrayData","timeZone","ContryCode","isoAlpha2","GetContryAndRegion","position","coords","contry","exec","PageWrapper","pageComponent","PageComponent","t","useFormatMessage","useParams","className","href","target","tr","location","buttonText","cookieName","style","background","buttonStyle","color","backgroundColor","padding","borderRadius","fontSize","expires","TranslateNode","translations","setTranslations","useEffect","getTranslations","then","messages","defaultLocale","key","replace","TranslateWrapper","props","styles","useStyles","makeStyles","playersList","display","flexWrap","overflow","playerListItem","width","height","paddingLeft","paddingRight","paddingTop","paddingBottom","minWidth","wordBreak","textOverflow","whiteSpace","contentCenteredContainer","alignItems","PlayersList","playersOnline","onClosePlayer","classes","hostPlayer","find","p","isCurrentPlayerHost","List","dense","map","index","name","waitOtherPlayers","ListItem","root","selected","button","title","ListItemIcon","fill","ListItemText","primary","onClick","ColoredStepper","Stepper","StepProgress","activeStepIndex","stepsCount","label","steps","Array","from","length","x","i","activeStep","stepId","Step","StepLabel","ProgressContainer","CurrentMoveIndicator","gameProgress","currentSprint","totalSprintsCount","currentDay","totalDaysCount","menuBarContainer","minHeight","buttonRollTheDice","contentDiceContainer","teamNameInput","transform","logoContainer","marginRight","logo","backgroundSize","backgroundPosition","margin","InviteButtonContainer","flexDirection","InviteButton","copyIcon","VerticalBars","VerticalInfoBars","diceContainerStyle","flex","MenuBar","initialTeamName","canRollTheDice","diceRollHandler","teamName","setTeamName","previousTeamName","useRef","url","handleTeamNameFocus","current","handleTeamNameBlur","handleDiceRoll","rollADie","element","document","getElementById","getDiceId","numberOfDice","callback","values","reduce","b","noSound","delay","isMobile","getComputedStyle","querySelector","isTablet","isMiddleDesctop","isMenuLargeDesctop","copyToClipbord","copyText","dummy","createElement","body","appendChild","setSelectionRange","execCommand","removeChild","newTeamName","Box","TextField","onChange","onFocus","onBlur","variant","size","Button","src","disableElevation","disabled","trigger","Hexagon","content","total","textColor","marginTop","xmlns","version","viewBox","d","y","dominantBaseline","textAnchor","HexagonTime","marginBottom","justifyContent","storyPoints","Header","CardHeader","Content","CardContent","Assignees","CardActions","MoveToColumnButtons","AlertIcon","alertIconUrl","IconsColumn","Assignee","accented","accentedStyle","Chip","AssignButton","visible","assignButtonStyle","btnText","ToBacklogButton","ToTODOButton","ToInProgressButton","BoardCard","item","draggableIndex","assignCardToPlayer","moveToColumnHandler","assignButtonVisible","columnIndex","problems","problemExists","storyText","currentDragableItem","droppableId","isDoneItem","reg","RegExp","description","storyPointsMatch","match","storyPointText","substr","Card","priority","subheader","Typography","gutterBottom","totalStoryPoints","draggableId","toString","provided","snapshot","ref","innerRef","draggableProps","dragHandleProps","isDragging","draggableStyle","userSelect","filter","columnHeaderStyle","textAlign","fontWeight","lineHeight","columnImage","BoardColumn","items","isDropDisabled","assignVisible","uriImages","colImg1","colImg2","colImg3","colImg4","colTitle","alt","isDraggingOver","storyId","some","problem","hasSolution","placeholder","columnStyle","Board","userStories","initialBoardColumns","addUserAssignment","moveCartToColumn","boardColumns","setBoardColumns","columnUpdates","previousColumns","entries","newColumns","columnId","columnContents","columns","sort","sourceColumn","indexOf","cardId","destinationColumn","sourceColumns","sourceItemIndex","destinationItemIndex","moveData","source","destination","handleDragEnd","newColumnId","dragResult","card","Resolved","updatedBoardColumns","moveItemInsideColumn","moveItemBetweenTwoColumns","indexColumn","parseInt","clmnWidth","querySelectorAll","offsetWidth","scrollLeft","itemOrders","handleAssignButtonClick","userStoryId","userAssignmentInfo","previousUserStoryId","currentUserStoryId","Grid","container","spacing","onDragEnd","colIndex","column","xs","data","modifiedColumn","reorderedItems","splice","movedItem","sourceColumnId","destinationColumnId","sourceColumnClone","sourceItemsClone","destinationColumnClone","destinationItemsClone","ResultsDialog","isVisible","defaultActionCallback","isDefaultActionButtonDisabled","defaultActionButtonLabel","fullWidth","isPositive","Dialog","disableBackdropClick","disableEscapeKeyDown","maxWidth","open","DialogTitle","DialogContent","dividers","DialogActions","defaultProps","ChanceCardType","freeze","Problem","Solution","Event","ShortChanceCard","cardType","getCardTypeDependentProps","Icon","typeName","CardBody","undefined","avatar","CardTitle","toLocaleLowerCase","LightBulbIcon","EventPositiveIcon","EventNegativeIcon","lightBulbIconUrl","smileIconUrl","grumpyIconUrl","ProblemResolutionScreen","solutions","events","canMoveCard","attachSolutionToProblem","exceptionProblems","setExceptionProblems","sortedProblems","f","s","storyKey","pr","resolved","solutionSequenceNumber","fromProblemSequenceNumber","solutionsPoolElementId","toProblemSequenceNumber","onDragStart","ev","solutionId","solution","PanelTitle","problemSolution","problemId","exceptionProblem","originId","zIndex","top","opacity","DropZone","direction","event","EndOfDayDialog","otherProps","StatisticPanel","statistics","sprint","totalPlan","planStories","join","totalActual","actualStories","EndOfSprintDialog","EndOfGameScreen","history","useHistory","paraStyle","paragraph","role","aria-label","align","push","GameProgress","this","ChanceCard","intervalValue","timerHandler","ChanceDialog","autoPressTime","setAutoPressTime","onTimer","onActionHandler","clearTimeout","userStoriesActions","userStoriesReducer","previousUserStories","type","payload","stories","story","newStoryPoints","userStoryCopy","userStoriesCopy","currentUserStory","currentUserStoryCopy","assignedPlayers","hasOwnProperty","targetStory","players","previousUserStoryCopy","cardSequenceNumber","Error","addPlayerAssignment","dispatch","initializeUserStories","problemsSolutionsActions","problemsSolutionsReducer","previousProblemsAndSolutions","initializeProblemsSolutions","loadOnlinePlayersTimer","GameShell","addToast","useToasts","setPlayersOnline","setInitialTeamName","lockMessage","setLockMessage","infoMessage","setInfoMessage","setInitialBoardColumns","setGameProgress","isEndOfDayDialogOpen","setEndOfDayDialogOpen","isEndOfSprintDialogOpen","setEndOfSprintDialogOpen","isEndOfGameReached","setEndOfGameReached","isWaitingForOtherPlayers","setWaitingForOtherPlayers","currentChanceCard","setCurrentChanceCard","setStatistics","setCanRollTheDice","timeStartGame","setTimeStartGame","memoizedSetPlayerId","useCallback","memoizedSetPlayerName","memoizedSetAssignedUserStoryId","useReducer","dispatchUserStories","problemsSolutions","dispatchProblemsSolutions","markAsReadyForNextPhase","points","storyPointsDelta","appearance","autoDismiss","setInterval","loadOnlinePlayers","params","setToken","accessToken","changeCard","sprintStatistics","dayIsFinished","sprintJustFinished","getToken","pathname","logining","clearInterval","isTerminated","handleMadeMove","userId","cartType","cart","gameInfo","toastContent","showchanceCardToast","handleNewGamePhase","currentPlayer","LockMessage","bind","mainButtonStyle","selectProfileStyle","CreateGameForm","formTitle","formSubmitCallback","submitButtonText","profiles","setName","profileCode","setProfileCode","hostMode","setHostMode","onSubmit","preventDefault","autoFocus","Select","cursor","RadioGroup","FormControlLabel","control","Radio","LanguageSelector","useLocation","splitedUri","split","languages","activeLanguage","classNames","parts","includes","shift","newUri","goToLanguage","dialogContainerStyle","page","header","logoutForm","logoutButton","border","SessionStartScreen","loaded","setLoaded","showAll","setShowAll","sessions","setSessions","setProfiles","createNewGameSession","login","status","loadGameProfiles","loadSessions","viewSessions","slice","action","imgLogOut","Paper","mainImageUrl","to","moment","createDate","format","ImageUrl1","ImageUrl2","ImageUrl3","ImageUrl4","joinUriTextFieldStyle","flexContainerStyle","inputContainer","copyButton","backgroundImage","backgroundRepeat","marginLeft","HostWelcomeScreen","startGame","textRef","inputRef","SessionStartGameScreen","PlayerDetailsForm","textTransform","letterSpacing","transition","RegularPlayerWelcomeScreen","setError","IsSpectator","IsHost","PlayerName","joinGame","JoinToGame","contentCentered","NotFound","component","ErrorPage","textDecotation","OnlySingleGame","JwtTokenService","apiUrl","tokenEndpointPath","postData","getData","fetch","cache","headers","JSON","stringify","json","App","isConnected","setConnected","err","base","exact","path","Root","render"],"mappings":"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","file":"static/js/main.ba993e94.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/lightbulb.1185080b.svg\";","module.exports = __webpack_public_path__ + \"static/media/smile.ee942258.svg\";","module.exports = __webpack_public_path__ + \"static/media/grumpy.1894e189.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAADsAAAA7AF5KHG9AAAF+GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTA1LTI2VDE2OjEzOjE0KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wNS0yNlQxNjoxNDowMiswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wNS0yNlQxNjoxNDowMiswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjMzE3NTRkNS0yZGUzLTQ2Y2QtODFkOC0yYjNmZWJmYWZmYjUiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoxYTAyMmQyMS1lYWY3LTBjNDEtOGNjYi0xZmNlZTQyZmRmMGMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyZjdkYjBkMS1hZGYzLTRmNjgtOGIwNy1hMTAwOGM5MDdhY2YiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJmN2RiMGQxLWFkZjMtNGY2OC04YjA3LWExMDA4YzkwN2FjZiIgc3RFdnQ6d2hlbj0iMjAyMS0wNS0yNlQxNjoxMzoxNCswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmMzMTc1NGQ1LTJkZTMtNDZjZC04MWQ4LTJiM2ZlYmZhZmZiNSIgc3RFdnQ6d2hlbj0iMjAyMS0wNS0yNlQxNjoxNDowMiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ngsNkgAAAaZJREFUWMO9180rRFEYx/EbiprI20YxsbBQKLFCViJZjYTZyNbKhijbkZVioUyJxShkIy+lrJQNUv4AklK25D3G9Xvqnppu554599xzzuKzvPN8Z+6d88w4rus6JJ3Zl9UJK3AGz3ALezADMdnXYXOdEAElsARZcAPcQY+JgGK4FgzO9QfjugMWJYczLxDXFdABvyEDyImugJTCcHYrSnUEHCkGkG4dAQ8RAiZ1BFxECEjoCFiLEFCvI2BCcfiTrm9BIVwqBIzoPIia4DPE8F0Tu6APHiWGb0GZiQBSDpvwEbCIErq3YQMMwyw0+54Lui1j0AtVvuvaYc4LiqsEVEDaO05z3+UGVAveWQ3s+K6hPbLsP5ZFAbT3bwT3mD7+de8pp0+lFZKQgW/BdedQJBOwGuHgyWchX0At/BgMeIdKUUDK4HBmWhRwZSHgNCggpvjLJ6w3KOAFtFgYztTxAgYtBnTxAkYtBvTzApIWAwZ4AW0WAxp5AfTv58vC8FdaZkHnwLyFgCnRQUTL4tDg8G06A2TW8RAcwz1nJYeR9X6oHNCDx1vH/98gaiUbjFY4AAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/col1.1344a98b.svg\";","module.exports = __webpack_public_path__ + \"static/media/col2.422bd439.svg\";","module.exports = __webpack_public_path__ + \"static/media/col3.6c97f77a.svg\";","module.exports = __webpack_public_path__ + \"static/media/col4.2e249ff5.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeQAAAIACAMAAABkTe/CAAAAn1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3kz5EAAAANHRSTlMAL+sc3jx8n3ij/RIF+egMCZBQKRfviULytCRnxV81H+LX08CDblYCAUj0yZ3bunLOrJan6Bsm7QAADApJREFUeNrs3et2ojAUhuFtddRyEBQVxQMeUOtoq233/V/b/Jofs2a5CkqSHfM9t/AuQiAJUFVv+XE27kxP61aPXddrrU/Tznh2zN/oafiD8XbE8L/RdjwYkvXelsXJY7jNuxZLq6/oZNxi+Nlq3CA7xYs5Q1nzRUzW8duYYVXTa/tklaiYMFQ1KSzKHOxeGO4x2gVkh3TDcK/1kSzgn/HI9JCO/DE7XTE8pif8Yg7GuIwf5/Ul35mHeDKux6lJUi0xVNel94tkGvxmqEu4J4lmuB3XyduRPBc0rlmXpLkw1K1NsmCsVuFCkgzQWAVvQXIsMa9WI0xJiiaWjlUZZSRDgPdc6mwiEqHPoM4rSXDEpEspCZOvIXaBqDXKybhPBrU+yLQBw3+ebMCOsbqo3otPRrUZ1OuTSUO86tIhzKgiPCLb55XMyUMGHbyEysOFbKkOmeLjjqxL2CRDugy6jMmMA06Y69MLyIiUQZ89GfHKoM+UTIhxzlyn0CcD9gw/sn2ZAqO1Xp+k3wG79/SaBKTdkkGvlLS7cHXzbtqMmq6Lmr+6W8+KUzOfXJH3nRD8lZ09C7YB9bialtRj1aYs11zN5ECaDbmarfxv2ugWTbmajDRLuZIPC78cqVxQsfKANNtxFWshhz2EiTeyZ159riC09Uu/qiUhV3Amzab27DaUrOAKtqTZlcsLn+AT/Ir4Ey7vnTRbcXnfBLecubwRafZb/nq3FY5cnheQVgFXgNH6tsjj8nzSKpI8ylhlJfdq8SXPF6xy5fJy0irh8noEt71zeb9IqwaX90JwWwuRnx8iOwCRHYDIDkBkByCyAxDZAYjsAER2ACI7AJEdgMgOQGQHILIDENkBiOwARHYAIjsAkR2AyA5AZAcgsgMQ2QGI7ABEdgAiOwCRHYDIDkBkByCyAxD5bnGS7nfdYtwRb8LlTTuVFe3ubJ8m8XNFPiSL/raHX/D/y1t99BfZ21NEznbTEcPNEp+z3PLISbFm+MmmnVkb2Z9dGcqZLyIbI2df+DdoFaNxblvk5BvzrKrCTmZT5PwVie8Rfg1tiRwXGKjvNekGVkRO8XvfR2yW8iNHZ4zUj/H6sfDIy3eGR20aoiPvQobHhTO5keNvhnp8BUIjD08Mddn6IiMnmFXXaZ0LjNzAz5vrtcrERW5gPbFuvURY5OSFoW6rTFTkHGO1Cq2moMg+tgaocY3ERA62DGpMD1Ii9xlUKYRE3jMo4w1ERM4mDOqMmgIiB3MGlbYH85G7DGrtjEfOsLio2iQ3HfmDQbWp4cgDBvWORiPHWF7UYR2YjLxj0GFmMHKEdQk9VoG5yBcGPWbGIgcrBj3eD6YiLxj+sHNvOw0CURSGBwvVgo21lVqxRUUI1agxzX7/Z/PCC+OBhFXJmpBZ3xOQ/DAJsxlYlr4ia0OT581T5JUJTVrgkTVGHpvaS+RW709M8d5H5GsTphKOrNV6dNY+IuuQKlflIXJhQpVO+JFv7QjVy1kzDV0zPX2wI+z4kWeGyuvCyafVemOoAz9ybJj0kDn5ksE/V6nokTPD5E9OvltuDJIu2JET+Bim/FTmBinZkRtDPEdOfkvmhtixI1+Clyf/f1RqduQbbE4mf2q3BpixI1fWX6rFepABwJYdGRlBPTrp8m79vZIj7+fQV2gyxLeQOTnyhQHunHSAqqUtN/IVdANKp3NkSVxwI0+g7TgZZns440aOFHkg99ZfwY2cWH+xk24n1l+kyOOkyAFQ5AAocgAUOQCKHABFDoAif7BHBwIAAAAAgvytB+kUApwMOBlwMuBkwMmAkwEnA04GnAw4GXAy4GTAyYCTAScDTgacDDgZcDLgZMDJgJMBJwNOBpwMOBlwMuBkwMmAkwEnA2KPDgQAAAAABPlbD3IpJHlA8oDkAckDkgckD0gekDwgeUDygOQByQOSByQPSB6QPCB5QPKA5AHJA5IHJA9IHpA8IHlA8oDkAckDkgckD0gekDwgeUDygOQByQOSByQPSB6QPCB5QPKA5AHJA5IHJA9IHpA8IHlA8oDkAckDkgckD0gekDwgeUDygOQByQOSByQPSI49OhAAAAAAEORvPcil0IDkAckDkgckD0gekDwgeUDygOQByQOSByQPSB6QPCB5QPKA5AHJA5IHJA9IHpA8IHlA8oDkAckDkgckD0gekDwgeUDygOQByQOSByQPSB6QPCB5QPKA5AHJA5IHJA9IHpA8IHlA8oDkAckDkgckD0gekDwgeUDygOQByQOSByQPSB6QPCA59ux2JYEoisLwDsp0PlJHqYZEM0kFyyjW/V9bdyCzYW9mwVnv7/k1Dxw4ZxWQkAtIyAUk5AIScgEJuYCEXEBCLiAhF5CQC0jIBSTkAhJyAfmQd57/LmSWfMg1hvcuZJZ8yAsMr1oImSQf8qnC8LZCJsmF7Pt8ImSSnMh7DO/7JGSOnMgHOOqEzJET+RGO9o2QKXIiT+DpWcgUOZGP8FQdhcyQE3kFV20nZIKcyE0LV9X0LOTRcyLbBc4Od0KOLR95CW9V3y2EHFg+cgf4azePy5m7q5BHQq4rMCbkSGTbgDEhhyJPwJiQQ5FXYEzIocj2AcKEHIs8BWFCjkVet+BLyLHI9gu+hByM/AC+hByMbBfQJeRo5CPoEnI08onvFiXkaGTrwJaQw5HPdA/YQg5Hti3bFiXkeGT7AldCTkCun0CVkEOROa9RQs5AthmYEnIK8vweRAk5Bdm2TGuUkHOQ7Q08CTkJ2f5Ak5CzkJseLAk5C9nmNKOjkNOQrWbZo4Sch2xrEmUhJyJbzXFiCzkT2eZXECTkVGRrGBYpIecim/2M//Yl5Gxkexl9eBRyOrKte/gS8q04ke38+QpPQr4VKbLZrocjId+KFvmfnXtRShsIwzD8t4jFEA4qFVSsWitWxrP//V9b7TgdHUtiVslm4XufW3iHPWR3Mdu59sqIXCbhyJbf9r0iIpdJObLZoFMxM5HLpB3ZbHh46hUQuUzqkc1+t7fm/h4il0k/8pPB7H7ipYhcZiUiP8nHe9OeFyJymVWJ/NewffhwtrEwNZHLrFLkZ3nry3hndtQJ9kDklYn8Fv+S+z4iE5nIILIiIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiCyCyACILILIAIgsgsgAiC1iTyNeGYn2vbteiOvbq7gzFrr26rkU18upODMW+e3UDi6rr1WUDQ5GRB8gtqjzz6i4NRWZe3dwCxB5lrgxFHlOe9669uknXsNiol/IK9swD/DIstu0B9i2yKw/Q2zUs8qXnAbYtsk0PcTc0/G9w6iHOLbIdD7KfG94a3niQsUV24IGV2Sy/1T3zMCOL7GLiYU5/GF5rb/iTlHdQZjceKLs6MPyz+5h5oHuLbtODZWed9mjQUjdojTtTD3dr0Y0dcf2w6PKJI6b+hcV374hpyxpw5IhpZg3o9hzxTIbWhH1HiXUYrc1mjs9I/Jvms7zviGXjwpqx54ilYw1psfT6lNW4XPPN8XFJ3xd4sZs5YugdW3O2HAutzw/Z7IBZOYb5yJq07ajfpjWq+9VRt42hfQTHFKtkx5p246jXozXu+LujTv2RNY8Bu1ZZGm9C2Sy/tTZb5BeDn466TFN5enLAtFyXfstSMebDVz3mbUvHEScVdcia3yG/dutYuuzQ0rLpKLUa72Le0XEsVZZeY7Nz5uW1HqufzVhjL888rTXXizZ3dJflJN0n+62pYxmmKRxKFMm3mZg/L9tL5VtmgUuG7M86GVvqulzG/tPO3aQwCANRAE5LUNAiIu1QSaukRkhIF13k/mfropsK/kU3DrzvDsMbhuHtkr1ZlFQ6HWCr1/HH+OfS471vm3N/8DT+lxs0isS7G2aNdnmCDSxOkbAI46FS+QBrPZ6l4OlEMsAySay7om1jPriPzMm8aaxg71pRhy+wMbeOKoZBPMW2TlFaey2xjxVS+zol5VorIn0BinCOi61UvrEAAAAASUVORK5CYII=\"","import { HubConnectionBuilder, HubConnectionState } from \"@microsoft/signalr\";\r\n\r\nconst hubUrl =\r\n !process.env.NODE_ENV || process.env.NODE_ENV === \"development\"\r\n ? `${process.env.REACT_APP_DEVELOPMENT_API_URL}/gameHub`\r\n : \"/gameHub\";\r\n\r\nconst hubConnection = new HubConnectionBuilder().withUrl(hubUrl, {\r\n accessTokenFactory: () => {\r\n const token = window.sessionStorage.getItem(\"auth_token\");\r\n return token;\r\n }\r\n}).withAutomaticReconnect().build();\r\n// let tryingToReconnect = false;\r\n// let manualStoped = false;\r\n// hubConnection.disconnected(function () {\r\n// if(!tryingToReconnect || !manualStoped) {\r\n// setTimeout(function() {\r\n// hubConnection.start();\r\n// }, 500); \r\n// }\r\n// });\r\n// hubConnection.reconnecting(function() {\r\n// tryingToReconnect = true;\r\n// console.log(\"reconnecting...\");\r\n// });\r\n// hubConnection.reconnected(function() {\r\n// tryingToReconnect = false;\r\n// console.log(\"Reconnected\");\r\n// });\r\n\r\nlet globalHandler = null;\r\nlet sessionId = null;\r\nlet modeConnected = false;\r\nlet AmlitudeErrorHandler=null;\r\nlet locale = 'en';\r\nconst baseErrorHandler = function(error) {\r\n if (AmlitudeErrorHandler) {\r\n AmlitudeErrorHandler(error);\r\n }\r\n if (globalHandler) {\r\n console.log(error);\r\n globalHandler({ message: 'internal error', locale });\r\n}\r\n};\r\nconst realtimeConnection = {\r\n init: (args) => {\r\n globalHandler = args.globalHandler;\r\n },\r\n setAmlitudeErrorHandler: (Handler) => { AmlitudeErrorHandler = Handler; },\r\n setLocale: (code) => { locale = code; },\r\n setSessionId: (id) => { sessionId = id; },\r\n on: (...args) => hubConnection.on(...args),\r\n start: (...args) => {\r\n modeConnected = true;\r\n return hubConnection.start(...args).catch(baseErrorHandler);\r\n },\r\n stop: (...args) => {\r\n modeConnected = false;\r\n return hubConnection.stop(...args);\r\n },\r\n off: (...args) => hubConnection.off(...args),\r\n invoke: async (method, args) => {\r\n let requestData = args || {};\r\n const token = window.sessionStorage.getItem(\"auth_token\");\r\n if(token){\r\n requestData['token'] = token;\r\n }\r\n if(sessionId){\r\n requestData['sessionId'] = sessionId;\r\n }\r\n if(locale){\r\n requestData['locale'] = locale;\r\n }\r\n let response = null;\r\n try{\r\n response = await hubConnection.invoke(method, requestData);\r\n if(response.appVersion) {\r\n window.sessionStorage.setItem(\"app_version\", response.appVersion);\r\n }\r\n if (response.hasErrors && globalHandler) {\r\n console.log(response);\r\n response.locale = locale;\r\n globalHandler(response);\r\n }\r\n }\r\n catch(error){\r\n baseErrorHandler(error);\r\n response = error;\r\n }\r\n return response;\r\n },\r\n invokeIgnore: async (method, args) => {\r\n let requestData = args || {};\r\n const token = window.sessionStorage.getItem(\"auth_token\");\r\n if(token){\r\n requestData['token'] = token;\r\n }\r\n if(sessionId){\r\n requestData['sessionId'] = sessionId;\r\n }\r\n if(locale){\r\n requestData['locale'] = locale;\r\n }\r\n console.log(hubConnection.state);\r\n let response = null;\r\n try{\r\n response = await hubConnection.invoke(method, requestData);\r\n }\r\n catch(error){\r\n baseErrorHandler(error);\r\n response = error;\r\n }\r\n return response;\r\n },\r\n};\r\nconst closeHandler = async () => {\r\n if(!modeConnected){\r\n return;\r\n }\r\n try{\r\n console.log('reconnect!!!');\r\n await realtimeConnection.start();\r\n } catch{\r\n setTimeout(closeHandler, 500);\r\n }\r\n};\r\nhubConnection.onclose(closeHandler);\r\n\r\nexport { realtimeConnection };\r\nexport const ResponseStatus = {\r\n Data: 0,\r\n HasError: 1,\r\n RedirectToMain: 2,\r\n SubscriptionFailed: 3,\r\n SubscriptionSingleGame: 4\r\n};","export const GAME_HUB_EVENTS = {\r\n CardMoved: \"CardMoved\",\r\n UserStoryAssigned: \"UserStoryAssigned\",\r\n PlayerMadeMove: \"PlayerMadeMove\",\r\n DayFinished: \"DayFinished\",\r\n TeamNameChanged: \"TeamNameChanged\",\r\n PlayerLeftSession: \"PlayerLeftSession\",\r\n PlayerJoinedSession: \"PlayerJoinedSession\",\r\n NextGamePhaseStarted: \"NextGamePhaseStarted\",\r\n SolutionCardMoved: \"SolutionCardMoved\",\r\n ProblemsMarkedAsSolved: \"ProblemsMarkedAsSolved\",\r\n};\r\n\r\nexport const GAME_HUB_METHODS = {\r\n CreateSession: \"CreateSession\",\r\n RestoreSession: \"RestoreSession\",\r\n JoinSession: \"JoinSession\",\r\n GetGameState: \"GetGameState\",\r\n GetOnlinePlayers: \"GetOnlinePlayers\",\r\n ChangeTeamName: \"ChangeTeamName\",\r\n MoveCard: \"MoveCard\",\r\n AssignUserStory: \"AssignUserStory\",\r\n MakeMove: \"MakeMove\",\r\n FinishMove: \"FinishMove\",\r\n MarkPlayerAsReadyForNextPhase: \"MarkPlayerAsReadyForNextPhase\",\r\n MoveSolutionCard: \"MoveSolutionCard\",\r\n TerminatePlayer: \"TerminatePlayer\",\r\n};\r\n","import React, { useState, useContext, createContext } from \"react\";\r\n\r\nconst GameContext = createContext();\r\n\r\nexport const GameContextProvider = ({ children }) => {\r\n const [playerName, setPlayerName] = useState(\"\");\r\n const [assignedUserStoryId, setAssignedUserStoryId] = useState(null);\r\n const [playerId, setPlayerId] = useState(null);\r\n const [isSpectator, setIsSpectator] = useState(null);\r\n const [isHost, setIsHost] = useState(null);\r\n\r\n const player = {\r\n playerName,\r\n setPlayerName,\r\n assignedUserStoryId,\r\n setAssignedUserStoryId,\r\n playerId,\r\n setPlayerId,\r\n isSpectator,\r\n setIsSpectator,\r\n isHost,\r\n setIsHost\r\n \r\n };\r\n\r\n return {children};\r\n};\r\n\r\nexport const useGameContext = () => useContext(GameContext);\r\n","import React, { useContext, createContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst ServiceInjectorContext = createContext();\r\n\r\nexport const ServiceInjector = ({ children, connection, jwtTokenService }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nServiceInjector.propTypes = {\r\n connection: PropTypes.shape({\r\n on: PropTypes.func.isRequired,\r\n off: PropTypes.func.isRequired,\r\n invoke: PropTypes.func.isRequired,\r\n }).isRequired,\r\n jwtTokenService: PropTypes.object,\r\n};\r\n\r\nexport const useServiceInjector = () => useContext(ServiceInjectorContext);\r\n","import React from \"react\";\r\nimport styled, { keyframes } from \"styled-components\";\r\n\r\nimport logoUri from \"../assets/icons/scgo-logo.svg\";\r\n\r\nconst pulseAnimation = keyframes`\r\n 0% { transform: scale(1); }\r\n 50% { transform: scale(0.7); opacity: 0.5; }\r\n 100% { transform: scale(1); }\r\n`;\r\n\r\nconst Logo = styled.div`\r\n background: url(${logoUri}) no-repeat;\r\n background-size: contain;\r\n width: 250px;\r\n height: 180px;\r\n animation-name: ${pulseAnimation};\r\n animation-duration: 1.5s;\r\n animation-iteration-count: infinite;\r\n animation-timing-function: ease-in-out;\r\n`;\r\n\r\nconst LogoContainer = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 100vh;\r\n`;\r\n\r\nexport const LogoLoader = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","import amplitude from 'amplitude-js';\r\n\r\nexport const AmplitudeService = {\r\n\r\n amplitudeKey:null,\r\n SendCreateGame: (player_key, player_name, is_spectator, is_host, session_id, profile_code, OtherEventPropertyse) => {\r\n let otherEventPropertyse = {\r\n 'user_id': player_key,\r\n 'role_game': is_spectator ? \"spectator\" : \"player\"};\r\n otherEventPropertyse = Object.assign({}, otherEventPropertyse, OtherEventPropertyse);\r\n\r\n AmplitudeService.Send(\"create_game\", player_key, player_name, is_spectator, is_host, session_id, profile_code, otherEventPropertyse);\r\n },\r\n SendStartGame: (player_key, player_name, is_spectator, is_host, session_id, profile_code) => {\r\n AmplitudeService.Send(\"start_game\", player_key, player_name, is_spectator, is_host, session_id, profile_code, {'time_start_game': Date.now()});\r\n },\r\n SendEndGame: (player_key, player_name, is_spectator, is_host, session_id, profile_code, TimeStartGame, OtherEventPropertyse) => {\r\n let TimeEndGame= Date.now();\r\n let TimeDuration= Math.floor((TimeEndGame-TimeStartGame)/ 60000);;\r\n let otherEventPropertyse={\r\n 'time_end_game ':TimeEndGame,\r\n 'time_duration ':TimeDuration\r\n }\r\n otherEventPropertyse = Object.assign({}, otherEventPropertyse, OtherEventPropertyse);\r\n AmplitudeService.Send(\"end_game\", player_key, player_name, is_spectator, is_host, session_id, profile_code, otherEventPropertyse);\r\n },\r\n SendJoinPlayer: (player_key, player_name, is_spectator, is_host, session_id, profile_code, OtherEventPropertyse) => {\r\n let otherEventPropertyse = {\r\n 'user_id': player_key,\r\n 'role_game': is_spectator ? \"spectator\" : \"player\"};\r\n otherEventPropertyse = Object.assign({}, otherEventPropertyse, OtherEventPropertyse);\r\n\r\n AmplitudeService.Send(\"user_connection_game\", player_key, player_name, is_spectator, is_host, session_id, profile_code, otherEventPropertyse);\r\n },\r\n SendEndDay: (player_key, player_name, is_spectator, is_host, session_id, profile_code) => {\r\n AmplitudeService.Send(\"EndDay\", player_key, player_name, is_spectator, is_host, session_id, profile_code);\r\n },\r\n SendEndSprint: ( player_key, player_name, is_spectator, is_host, session_id, profile_code) => {\r\n AmplitudeService.Send(\"EndSprint\", player_key, player_name, is_spectator, is_host, session_id, profile_code);\r\n },\r\n SendRollTheDice: (player_key, player_name, is_spectator, is_host, session_id, profile_code) => {\r\n AmplitudeService.Send(\"RollTheDice\", player_key, player_name, is_spectator, is_host, session_id, profile_code);\r\n },\r\n Send: async(eventType, player_key, player_name, is_spectator, is_host, session_id, profile_code, specialEventPropertyse) => {\r\n\r\n \r\n amplitude.getInstance().init(AmplitudeService.amplitudeKey, player_key, {\r\n trackingOptions: {\r\n city: true,\r\n carrier: true,\r\n country: true,\r\n device_manufacturer: true,\r\n device_model: true,\r\n dma: true,\r\n ip_address: true,\r\n language: true,\r\n os_name: true,\r\n os_version: true,\r\n platform: true,\r\n region: true,\r\n version_name: true\r\n }\r\n });\r\n\r\n \r\n let eventProperties = {\r\n 'game_id': session_id,\r\n 'host_name': player_name,\r\n 'time_load': Date.now(),\r\n 'param_success':\"yes\",\r\n };\r\n \r\n let user_properties = {\r\n 'user_id': player_key,\r\n 'is_host': is_host ? \"yes\" : \"no\",\r\n 'profile_code': profile_code,\r\n 'name': player_name,\r\n 'sourse': eventType\r\n }\r\n if (specialEventPropertyse) {\r\n eventProperties=Object.assign({}, eventProperties, specialEventPropertyse);\r\n }\r\n if (eventProperties.error_type) {\r\n eventProperties.param_success = \"no\";\r\n }\r\n try {\r\n amplitude.getInstance().setUserProperties(user_properties);\r\n amplitude.getInstance().logEvent(eventType, eventProperties);\r\n } catch (error) {\r\n console.log(error); \r\n }\r\n\r\n }\r\n}\r\nexport const GeoCoding = {\r\n\r\n GetPosition:(options)=>{\r\n return new Promise((resolve, reject) => \r\n navigator.geolocation.getCurrentPosition(resolve, reject, options)\r\n );\r\n },\r\n GetFullNameContry:(counryCode)=>\r\n {\r\n let i18n_iso_countries = require(\"i18n-iso-countries\");\r\n i18n_iso_countries.registerLocale(require(\"i18n-iso-countries/langs/en.json\"));\r\n return i18n_iso_countries.getName(counryCode, \"en\", {select: \"official\"});\r\n },\r\n GetTimeZoneAndCodeContry:(latitude, longitude)=>{\r\n let geoRev = require('geo-reverse');\r\n let ArrayData = geoRev.country(latitude, longitude);\r\n return {timeZone: ArrayData[0]?.timeZone,\r\n ContryCode: ArrayData[0]?.isoAlpha2}\r\n },\r\n GetContryAndRegion: async () => {\r\n try{\r\n let position = await GeoCoding.GetPosition();\r\n \r\n if (!position?.coords?.latitude || !position?.coords?.longitude) {\r\n return {\r\n contry: null,\r\n region: null\r\n }\r\n }\r\n let { timeZone,ContryCode} = GeoCoding.GetTimeZoneAndCodeContry(position.coords.latitude, position.coords.longitude)\r\n \r\n \r\n let contry = GeoCoding.GetFullNameContry(ContryCode);\r\n let region=/^[a-zA-z]*\\b/g.exec(timeZone)[0];\r\n \r\n return {\r\n contry: contry,\r\n region: region\r\n }\r\n } catch {\r\n return {\r\n contry: null,\r\n region: null\r\n } \r\n }\r\n },\r\n\r\n\r\n\r\n};","import React, { useState, useEffect } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useServiceInjector } from \"../hooks/ServiceInjectorContext\";\r\nimport {IntlProvider} from 'react-intl';\r\nimport CookieConsent from \"react-cookie-consent\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { LogoLoader } from \"./LogoLoader\";\r\nimport { realtimeConnection } from \"../services/realtimeConnection\";\r\nimport { AmplitudeService } from \"../services/AmplitudeService\";\r\n\r\nconst PageWrapper = ({pageComponent, ...args}) => {\r\n const PageComponent = pageComponent;\r\n const t = useFormatMessage();\r\n const { locale } = useParams();\r\n realtimeConnection.setLocale(locale);\r\n return <>\r\n
\r\n \r\n
\r\n\r\n\r\n \r\n {tr(t, 'cookies-message')}\r\n \r\n ;\r\n};\r\nconst TranslateNode = ({pageComponent, ...args}) => {\r\n const { locale } = useParams();\r\n const { jwtTokenService } = useServiceInjector();\r\n const [translations, setTranslations] = useState(null);\r\n useEffect(() => {\r\n jwtTokenService.getTranslations(locale).then(value=>{\r\n setTranslations(value.translations);\r\n AmplitudeService.amplitudeKey=value.amplitudeKey;\r\n });\r\n }, [locale, jwtTokenService]);\r\n if (!translations) {\r\n return ;\r\n }\r\nreturn (\r\n\r\n \r\n \r\n \r\n\r\n);\r\n};\r\n\r\nconst TranslateWrapper = (pageComponent) => (props) => {\r\n return (\r\n );\r\n};\r\nexport function tr(t, key){\r\n if(!key || !t) {\r\n return '';\r\n }\r\n return t({id: key.replace('!#LK#!-','')})\r\n}\r\nexport default TranslateWrapper;\r\n","export const styles = {\r\n green: \"#47B817\",\r\n blue: \"#4284bd\",\r\n red: \"#BC433C\",\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport PersonIcon from \"@material-ui/icons/Person\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport { useGameContext } from \"../../hooks/GameContext\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { styles } from \"../../services/sharedStyles\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n playersList: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n overflow: \"hidden\",\r\n },\r\n playerListItem: {\r\n width: \"33%\",\r\n height: \"40px\",\r\n fontSize: '14px',\r\n paddingLeft: '5px',\r\n paddingRight: '3px',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n \"&.Mui-selected\": {\r\n backgroundColor: '#E0F3F5',\r\n color: \"#212529\",\r\n borderRadius: '20px'\r\n },\r\n '& .MuiListItemIcon-root': {\r\n minWidth: '30px'\r\n },\r\n '& .MuiTypography-body2': {\r\n wordBreak: 'break-all',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden'\r\n },\r\n },\r\n contentCenteredContainer: {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n },\r\n}));\r\n\r\nexport const PlayersList = ({ playersOnline, onClosePlayer }) => {\r\n const classes = useStyles();\r\n const t = useFormatMessage();\r\n\r\n const {\r\n player: { playerId },\r\n } = useGameContext();\r\n//\r\n const hostPlayer = playersOnline.find(p => playerId === +p.id);\r\n const isCurrentPlayerHost = hostPlayer?.isHost ?? false;\r\n return (\r\n \r\n {playersOnline.map(({id, name, waitOtherPlayers, }, index) => (\r\n \r\n \r\n \r\n \r\n \r\n { isCurrentPlayerHost && playerId !== +id && ( onClosePlayer(id)} />) }\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nPlayersList.propTypes = {\r\n playersOnline: PropTypes.array.isRequired,\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Stepper from \"@material-ui/core/Stepper\";\r\nimport Step from \"@material-ui/core/Step\";\r\nimport StepLabel from \"@material-ui/core/StepLabel\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { styles } from \"../../services/sharedStyles\";\r\n\r\nconst ColoredStepper = styled(Stepper)`\r\n && {\r\n & .MuiStepIcon-active {\r\n color: ${styles.green};\r\n }\r\n }\r\n`;\r\n\r\nexport const StepProgress = ({ activeStepIndex, stepsCount, label }) => {\r\n const steps = Array.from({ length: stepsCount }, (x, i) => i);\r\n\r\n return (\r\n \r\n {steps.map((stepId) => (\r\n \r\n {label}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nStepProgress.propTypes = {\r\n activeStepIndex: PropTypes.number.isRequired,\r\n stepsCount: PropTypes.number.isRequired,\r\n label: PropTypes.string.isRequired,\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { StepProgress } from \"./StepProgress\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nconst ProgressContainer = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nexport const CurrentMoveIndicator = ({ gameProgress }) => {\r\n const t = useFormatMessage();\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCurrentMoveIndicator.propTypes = {\r\n gameProgress: PropTypes.shape({\r\n totalSprintsCount: PropTypes.number.isRequired,\r\n totalDaysCount: PropTypes.number.isRequired,\r\n currentSprint: PropTypes.number.isRequired,\r\n currentDay: PropTypes.number.isRequired,\r\n }).isRequired,\r\n};\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport rollADie from \"roll-a-die\";\r\nimport copyIcon from \"../../assets/icons/copyWhite.png\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { realtimeConnection } from \"../../services/realtimeConnection\";\r\nimport { GAME_HUB_METHODS, GAME_HUB_EVENTS } from \"../../services/GameHubConstants\";\r\nimport { PlayersList } from \"./PlayersList\";\r\nimport { CurrentMoveIndicator } from \"./CurrentMoveIndicator\";\r\nimport Collapsible from 'react-collapsible';\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nimport logoUri from \"../../assets/icons/scgo-logo.svg\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n menuBarContainer: {\r\n minHeight: \"100px\",\r\n },\r\n playersList: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n },\r\n playerListItem: {\r\n width: \"45%\",\r\n height: \"40px\",\r\n },\r\n buttonRollTheDice: {\r\n 'background-color': '#f50057',\r\n 'border': '1px solid #ffffff',\r\n 'color': '#ffffff',\r\n 'font-size': '14px',\r\n 'padding-left': '20px',\r\n 'padding-right': '20px',\r\n 'border-radius': '25px',\r\n },\r\n contentCenteredContainer: {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n width: \"100%\",\r\n },\r\n contentDiceContainer: {\r\n display: \"flex\",\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n minHeight: '100px',\r\n },\r\n teamNameInput: {\r\n '& .MuiOutlinedInput-notchedOutline' : {\r\n 'border-radius': '20px',\r\n '& span': {\r\n display: 'none'\r\n }\r\n },\r\n '& .MuiInputLabel-outlined.MuiInputLabel-shrink': {\r\n transform: 'translate(14px, -14px) scale(0.75)',\r\n }\r\n },\r\n logoContainer: {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n width: \"100%\",\r\n paddingRight: '5px',\r\n marginRight: '10px'\r\n },\r\n logo: {\r\n background: `url(${logoUri}) no-repeat`,\r\n backgroundSize: \"contain\",\r\n backgroundPosition: \"center\",\r\n width: 150,\r\n height: 100,\r\n margin: \"0 10px\",\r\n },\r\n InviteButtonContainer:\r\n {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n width: \"100%\",\r\n flexDirection: 'column'\r\n\r\n },\r\n InviteButton:{\r\n 'color': '#ffffff',\r\n 'border': '1px solid #ffffff',\r\n 'font-size': '12px',\r\n 'padding-top': '3px',\r\n 'padding-right': '8px',\r\n 'padding-left': '8px',\r\n 'padding-bottom': '2px',\r\n 'border-radius': '25px',\r\n 'background-color': '#30AFB8',\r\n 'margin-top': '4px',\r\n 'transition': '0.2s',\r\n \"&:hover, &:focus\":{\r\n 'background-color': '#267b82',\r\n }\r\n },\r\n copyIcon:{\r\n 'margin-bottom':'1px',\r\n 'height': '20px',\r\n 'width': 'auto',\r\n 'margin-right': '6px',\r\n }\r\n\r\n}));\r\n\r\nconst VerticalBars = styled.div`\r\n display: flex;\r\n width: 100%;\r\n`;\r\n\r\nconst VerticalInfoBars = styled.div`\r\n width: 100%;\r\n margin-top: 5pt;\r\n`;\r\n\r\nconst diceContainerStyle = {\r\n flex: 1,\r\n minHeight: '0px',\r\n 'margin-bottom':'68px'\r\n};\r\n\r\nexport const MenuBar = ({\r\n playersOnline,\r\n initialTeamName,\r\n gameProgress,\r\n canRollTheDice,\r\n diceRollHandler,\r\n onClosePlayer,\r\n}) => {\r\n const t = useFormatMessage();\r\n const [teamName, setTeamName] = useState(\"\");\r\n const previousTeamName = useRef();\r\n const url = `${window.location}`;\r\n\r\n const handleTeamNameFocus = () => {\r\n if (previousTeamName.current !== teamName) previousTeamName.current = teamName;\r\n };\r\n\r\n const handleTeamNameBlur = () => {\r\n if (previousTeamName.current !== teamName && teamName) {\r\n realtimeConnection.invoke(GAME_HUB_METHODS.ChangeTeamName, { teamName });\r\n }\r\n };\r\n\r\n const handleDiceRoll = () => {\r\n rollADie({\r\n element: document.getElementById(getDiceId()),\r\n numberOfDice: 2,\r\n callback: (values) => diceRollHandler(values.reduce((a, b) => a + b)),\r\n noSound: true,\r\n delay: 15000,\r\n });\r\n };\r\n const getDiceId = () => {\r\n const isMobile = getComputedStyle(document.querySelector('.mainMenuMobile')).display !== 'none';\r\n const isTablet = getComputedStyle(document.querySelector('.mainMenuTablet')).display !== 'none';\r\n const isMiddleDesctop = getComputedStyle(document.querySelector('.mainMenuMiddleDesctop')).display !== 'none';\r\n const isMenuLargeDesctop = getComputedStyle(document.querySelector('.mainMenuLargeDesctop')).display !== 'none';\r\n if(isMobile) return 'dice1';\r\n if(isTablet) return 'dice2';\r\n if(isMiddleDesctop) return 'dice3';\r\n if(isMenuLargeDesctop) return 'dice4';\r\n };\r\n const copyToClipbord = () => {\r\n \r\n var copyText =url.replace('/game/','/join/');\r\n var dummy = document.createElement('input');\r\n document.body.appendChild(dummy);\r\n dummy.value = copyText;\r\n dummy.select();\r\n dummy.setSelectionRange(0, 99999);\r\n document.execCommand(\"copy\");\r\n document.body.removeChild(dummy);\r\n };\r\n \r\n useEffect(() => {\r\n document.title = `${teamName} - Scrum Card Game`;\r\n }, [teamName]);\r\n\r\n useEffect(() => {\r\n realtimeConnection.on(GAME_HUB_EVENTS.TeamNameChanged, (newTeamName) =>\r\n setTeamName(newTeamName)\r\n );\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (initialTeamName) {\r\n previousTeamName.current = initialTeamName;\r\n setTeamName(initialTeamName);\r\n }\r\n }, [initialTeamName]);\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n setTeamName(target.value)}\r\n onFocus={handleTeamNameFocus}\r\n onBlur={handleTeamNameBlur}\r\n className={classes.teamNameInput}\r\n variant=\"outlined\"\r\n label={tr(t, 'label-current-team-name')}\r\n size=\"small\"\r\n />\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {tr(t, 'btn-roll-the-dice')}\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\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n setTeamName(target.value)}\r\n onFocus={handleTeamNameFocus}\r\n onBlur={handleTeamNameBlur}\r\n className={classes.teamNameInput}\r\n variant=\"outlined\"\r\n label={tr(t, 'label-current-team-name')}\r\n size=\"small\"\r\n />\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {tr(t, 'btn-roll-the-dice')}\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\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n setTeamName(target.value)}\r\n onFocus={handleTeamNameFocus}\r\n onBlur={handleTeamNameBlur}\r\n className={classes.teamNameInput}\r\n variant=\"outlined\"\r\n label={tr(t, 'label-current-team-name')}\r\n size=\"small\"\r\n />\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {tr(t, 'btn-roll-the-dice')}\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\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n setTeamName(target.value)}\r\n onFocus={handleTeamNameFocus}\r\n onBlur={handleTeamNameBlur}\r\n className={classes.teamNameInput}\r\n variant=\"outlined\"\r\n label={tr(t, 'label-current-team-name')}\r\n size=\"small\"\r\n />\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {tr(t, 'btn-roll-the-dice')}\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\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nMenuBar.propTypes = {\r\n playersOnline: PropTypes.array.isRequired,\r\n initialTeamName: PropTypes.string.isRequired,\r\n gameProgress: PropTypes.objectOf(PropTypes.number).isRequired,\r\n canRollTheDice: PropTypes.bool.isRequired,\r\n diceRollHandler: PropTypes.func.isRequired,\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Draggable } from \"react-beautiful-dnd\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport CardActions from \"@material-ui/core/CardActions\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport CardHeader from \"@material-ui/core/CardHeader\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport styled from \"styled-components\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { styles } from \"../../services/sharedStyles\";\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nimport alertIconUrl from \"../../assets/icons/alert.svg\";\r\n\r\nconst Hexagon = ({ content, total, backgroundColor = \"white\", textColor = \"#4b4c4d\", size = 40, fontSize = 110}) => {\r\n const flexDisplay = { display: \"flex\", flexDirection: \"column\" };\r\n const stickToBottom = { marginTop: \"auto\" };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {content} {total ? `/ ${total}`: ''}\r\n \r\n \r\n
\r\n );\r\n};\r\nconst HexagonTime = ({ content, total, backgroundColor = \"white\", textColor = \"#4b4c4d\", size = 40, fontSize = 110}) => {\r\n const flexDisplay = { display: \"flex\", flexDirection: \"column\" };\r\n const stickToBottom = { marginTop: \"auto\" };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {content} \r\n \r\n \r\n /\r\n \r\n \r\n {total} \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst useStyles = makeStyles(() => ({\r\n root: {\r\n marginBottom: 10,\r\n minWidth: '150px',\r\n minHeight: '200px',\r\n borderRadius: '10px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between'\r\n },\r\n content:{\r\n padding: 10,\r\n paddingBottom: 0,\r\n fontSize: '18px',\r\n },\r\n title: {\r\n fontSize: 15,\r\n },\r\n storyPoints: {\r\n color: '#47B817',\r\n }\r\n}));\r\n\r\nconst Header = styled(CardHeader)`\r\n && {\r\n background-color: #47B817;\r\n padding: 3px;\r\n & .MuiCardHeader-content,\r\n & .MuiCardHeader-title {\r\n display: flex;\r\n padding-left: 3px;\r\n }\r\n & .MuiCardHeader-content{\r\n position: relative;\r\n }\r\n & .MuiCardHeader-subheader {\r\n position: absolute;\r\n top: 14px;\r\n right: 10pt;\r\n font-weight: 700;\r\n font-size: 20pt;\r\n color: white;\r\n }\r\n }\r\n`;\r\n\r\nconst Content = styled(CardContent)`\r\n display: flex;\r\n justify-content: space-between;\r\n flex-grow: 1;\r\n padding-bottom: 0px;\r\n margin-bottom: 0px;\r\n`;\r\n\r\nconst Assignees = styled(CardActions)`\r\n flex-wrap: wrap;\r\n & .MuiChip-root {\r\n margin-top: 8px;\r\n }\r\n`;\r\nconst MoveToColumnButtons = styled(CardActions)`\r\n flex-wrap: wrap;\r\n & .MuiChip-root {\r\n margin-top: 8px;\r\n }\r\n`;\r\n\r\nconst AlertIcon = styled.div`\r\n background: url('${alertIconUrl}') no-repeat;\r\n background-position: center;\r\n background-size: cover;\r\n height: 35px;\r\n width: 35px;\r\n filter: brightness(0) saturate(100%) invert(77%) sepia(32%) saturate(2994%) hue-rotate(320deg) brightness(96%) contrast(98%);\r\n`;\r\n\r\nconst IconsColumn = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n`;\r\n\r\nconst Assignee = ({ accented, ...props }) => {\r\n const accentedStyle = {\r\n backgroundColor: styles.red,\r\n color: \"white\",\r\n };\r\n\r\n return ;\r\n};\r\n\r\nconst AssignButton = ({ visible, ...props }) => {\r\n const assignButtonStyle = {\r\n backgroundColor: styles.blue,\r\n color: \"white\",\r\n };\r\n const t = useFormatMessage();\r\n const btnText = tr(t, 'btn-assign-me');\r\n return visible && ;\r\n};\r\nconst ToBacklogButton = ({ visible, ...props }) => {\r\n const assignButtonStyle = {\r\n backgroundColor: styles.green,\r\n color: \"white\",\r\n };\r\n const t = useFormatMessage();\r\n const btnText = tr(t, 'btn-backlog');\r\n\r\n return visible && ;\r\n};\r\nconst ToTODOButton = ({ visible, ...props }) => {\r\n const assignButtonStyle = {\r\n backgroundColor: styles.green,\r\n color: \"white\",\r\n };\r\n const t = useFormatMessage();\r\n const btnText = tr(t, 'btn-todo');\r\n\r\n return visible && ;\r\n};\r\nconst ToInProgressButton = ({ visible, ...props }) => {\r\n const assignButtonStyle = {\r\n backgroundColor: styles.green,\r\n color: \"white\",\r\n };\r\n const t = useFormatMessage();\r\n const btnText = tr(t, 'btn-in-progress');\r\n\r\n return visible && ;\r\n};\r\n\r\nconst getItemStyle = (isDragging, draggableStyle) => ({\r\n userSelect: \"none\",\r\n background: isDragging ? \"lightgreen\" : \"white\",\r\n ...draggableStyle,\r\n});\r\n\r\nexport const BoardCard = ({\r\n item,\r\n draggableIndex,\r\n assignCardToPlayer,\r\n moveToColumnHandler,\r\n assignButtonVisible,\r\n playerId,\r\n playersOnline,\r\n columnIndex,\r\n problems,\r\n problemExists = false,\r\n}) => {\r\n \r\n const classes = useStyles();\r\n const t = useFormatMessage();\r\n const storyText = tr(t, 'story-card-title');\r\n const currentDragableItem = { droppableId: columnIndex, index: draggableIndex };\r\n const isMobile = getComputedStyle(document.querySelector('.mainMenuMobile')).display !== 'none';\r\n const getProblemsTitles = () =>{\r\n let titles = problems.map((element)=>tr(t, element.title)).toString();\r\n return titles.replace(',','\\n');\r\n };\r\n const isDoneItem = columnIndex == 3;\r\n const reg = new RegExp(tr(t, 'story-points-mask'));\r\n let description = tr(t, item.description);\r\n let storyPointsMatch = description.match(reg);\r\n let storyPointText = '';\r\n if (storyPointsMatch && storyPointsMatch.length > 0) {\r\n storyPointText = storyPointsMatch[0];\r\n description = description.replace(storyPointText, '');\r\n storyPointText = storyPointText.substr(1, storyPointText.length - 2);\r\n }\r\n if(isDoneItem) {\r\n return (\r\n \r\n
} subheader={storyText} />\r\n \r\n
\r\n \r\n {description}\r\n \r\n \r\n {storyPointText}\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n return (\r\n \r\n {(provided, snapshot) => (\r\n \r\n
} subheader={storyText} />\r\n \r\n
\r\n \r\n {description}\r\n \r\n \r\n {storyPointText}\r\n \r\n
\r\n \r\n {problemExists && }\r\n \r\n \r\n
\r\n \r\n assignCardToPlayer(item.id)}\r\n />\r\n {playersOnline.filter(p=>p.assignedUserStoryId === item.id).map(({id, name}) => (\r\n \r\n ))}\r\n \r\n { columnIndex !== '3' && isMobile ? (\r\n moveToColumnHandler(currentDragableItem,'0')}/>\r\n moveToColumnHandler(currentDragableItem, '1')}/>\r\n moveToColumnHandler(currentDragableItem, '2')}/>\r\n ) : null}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nBoardCard.propTypes = {\r\n item: PropTypes.object.isRequired,\r\n draggableIndex: PropTypes.number.isRequired,\r\n assignCardToPlayer: PropTypes.func.isRequired,\r\n assignButtonVisible: PropTypes.bool.isRequired,\r\n playerId: PropTypes.number.isRequired,\r\n problemExists: PropTypes.bool,\r\n};\r\n","import React from \"react\";\r\nimport { Droppable } from \"react-beautiful-dnd\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { BoardCard } from \"./BoardCard\";\r\nimport colImg1 from \"../../assets/icons/col1.svg\";\r\nimport colImg2 from \"../../assets/icons/col2.svg\";\r\nimport colImg3 from \"../../assets/icons/col3.svg\";\r\nimport colImg4 from \"../../assets/icons/col4.svg\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nconst getListStyle = (isDraggingOver) => ({\r\n background: isDraggingOver ? \"lightblue\" : \"#f5f5f5\",\r\n padding: 10,\r\n borderRadius: '0 0 10px 10px',\r\n height: \"calc(100% - 56pt)\",\r\n});\r\n\r\nconst columnHeaderStyle = {\r\n textAlign: \"center\",\r\n backgroundColor: \"#e5e6ea\",\r\n fontWeight: 500,\r\n margin: 0,\r\n borderRadius: '20px 20px 0 0',\r\n lineHeight: 3,\r\n};\r\n\r\nconst columnImage = {\r\n marginRight: '7px'\r\n};\r\n\r\nexport const BoardColumn = ({\r\n droppableId,\r\n title,\r\n items,\r\n problems,\r\n assignCardToPlayer,\r\n isDropDisabled,\r\n assignVisible,\r\n playersOnline,\r\n assignedUserStoryId,\r\n playerId,\r\n moveToColumnHandler\r\n}) => {\r\n const uriImages = [colImg1, colImg2, colImg3, colImg4];\r\n const t = useFormatMessage();\r\n const colTitle = tr(t, title);\r\n return (\r\n \r\n {(provided, snapshot) => (\r\n <>\r\n

{colTitle}{colTitle}

\r\n
\r\n {items.map((item, index) => (\r\n 0 && assignedUserStoryId !== item.id}\r\n key={item.storyId}\r\n playerId={playerId}\r\n playersOnline={playersOnline}\r\n problemExists={\r\n problems.some(\r\n (problem) =>\r\n problem.storyId === item.id && !problem.hasSolution\r\n )\r\n }\r\n problems={\r\n problems.filter(\r\n (problem) =>\r\n problem.storyId === item.id && !problem.hasSolution\r\n )\r\n }\r\n />\r\n ))}\r\n\r\n {provided.placeholder}\r\n
\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nBoardColumn.propTypes = {\r\n droppableId: PropTypes.string.isRequired,\r\n title: PropTypes.string.isRequired,\r\n items: PropTypes.array.isRequired,\r\n problems: PropTypes.array.isRequired,\r\n assignCardToPlayer: PropTypes.func.isRequired,\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { DragDropContext } from \"react-beautiful-dnd\";\r\n\r\nimport { realtimeConnection } from \"../../services/realtimeConnection\";\r\nimport { GAME_HUB_METHODS, GAME_HUB_EVENTS } from \"../../services/GameHubConstants\";\r\nimport { BoardColumn } from \"./BoardColumn\";\r\nimport { useGameContext } from \"../../hooks/GameContext\";\r\nimport { UserStory } from \"../../models/UserStory\";\r\n\r\nconst columnStyle = {\r\n padding: \"0 10px\",\r\n};\r\n\r\nexport const Board = ({ userStories, \r\n initialBoardColumns,\r\n problems, \r\n addUserAssignment, \r\n playersOnline, \r\n moveCartToColumn, \r\n assignVisible, \r\n assignedUserStoryId,\r\n playerId,\r\n setAssignedUserStoryId,\r\n isSpectator,\r\n}) => {\r\n const [boardColumns, setBoardColumns] = useState({});\r\n\r\n const {\r\n player: { playerName },\r\n } = useGameContext();\r\n\r\n useEffect(\r\n // When updates to the board model (columns collection) arrive they only contain the bits that\r\n // changed in the form of {\"columnId\": {items: [...] }}, hence the need to spread and\r\n // aggregate/reduce separate 'item' updates into a single new model\r\n () =>\r\n realtimeConnection.on(GAME_HUB_EVENTS.CardMoved, (columnUpdates) =>\r\n setBoardColumns((previousColumns) =>\r\n Object.entries(columnUpdates).reduce(\r\n (newColumns, [columnId, columnContents]) =>\r\n Object.assign(\r\n { ...newColumns },\r\n { [columnId]: { title: newColumns[columnId].title, ...columnContents } }\r\n ),\r\n previousColumns\r\n )\r\n )\r\n ),\r\n []\r\n );\r\n\r\n useEffect(() => {\r\n if (initialBoardColumns) {\r\n setBoardColumns(initialBoardColumns);\r\n }\r\n }, [initialBoardColumns]);\r\n\r\n useEffect(() => {\r\n if (!moveCartToColumn) {\r\n return;\r\n }\r\n const columns = Object.entries(boardColumns)\r\n .sort((a, b) => a[0] > b[0]);\r\n const sourceColumn = columns\r\n .filter(([columnId, column]) => (column.items.indexOf(moveCartToColumn.cardId)>-1))[0];\r\n const destinationColumn = columns\r\n .filter(([columnId, column]) => (columnId === moveCartToColumn.columnId))[0];\r\n if(!sourceColumn || !destinationColumn || sourceColumn == destinationColumn || \r\n moveCartToColumn.sourceColumns.indexOf(sourceColumn[0])<0){\r\n return;\r\n }\r\n const sourceItemIndex = sourceColumn[1].items.indexOf(moveCartToColumn.cardId);\r\n const destinationItemIndex = destinationColumn[1].items.length;\r\n const moveData = {\r\n source: {droppableId: sourceColumn[0], index: sourceItemIndex},\r\n destination: {droppableId: destinationColumn[0], index: destinationItemIndex}\r\n };\r\n handleDragEnd(moveData)\r\n }, [moveCartToColumn]);\r\n const moveToColumnHandler = (source, newColumnId) => {\r\n const destination = { index: boardColumns[newColumnId].items.length, droppableId: newColumnId };\r\n const moveData = {\r\n source,\r\n destination\r\n };\r\n handleDragEnd(moveData);\r\n };\r\n const handleDragEnd = async (dragResult) => {\r\n const { source, destination } = dragResult;\r\n // Item was dropped outside of the droppable container\r\n if (!destination) {\r\n return;\r\n }\r\n\r\n // Item was put on the same position as it was before\r\n if (source.droppableId === destination.droppableId && source.index === destination.index) {\r\n return;\r\n }\r\n if(destination.droppableId === '4'){\r\n const cardId = boardColumns[destination.droppableId].items[destination.index];\r\n const card = userStories[cardId];\r\n const hasProblems = problems.some(\r\n (problem) =>\r\n problem.storyId === card.id && !problem.Resolved\r\n );\r\n if(hasProblems || card.storyPoints !== 0){\r\n return;\r\n }\r\n }\r\n const updatedBoardColumns =\r\n source.droppableId === destination.droppableId\r\n ? moveItemInsideColumn(\r\n boardColumns,\r\n destination.droppableId,\r\n source.index,\r\n destination.index\r\n )\r\n : moveItemBetweenTwoColumns(\r\n boardColumns,\r\n source.droppableId,\r\n destination.droppableId,\r\n source.index,\r\n destination.index\r\n );\r\n\r\n const isMobile = getComputedStyle(document.querySelector('.mainMenuMobile')).display !== 'none';\r\n const isTablet = getComputedStyle(document.querySelector('.mainMenuTablet')).display !== 'none';\r\n if(isMobile || isTablet){\r\n const indexColumn = parseInt(destination.droppableId) - 1;\r\n const clmnWidth = document.querySelectorAll('.boardContainer>.MuiGrid-container>.MuiGrid-grid-xs-3')[indexColumn].offsetWidth;\r\n document.querySelector('.boardContainer').scrollLeft = indexColumn*clmnWidth;\r\n }\r\n setBoardColumns({ ...updatedBoardColumns });\r\n const cardId = boardColumns[destination.droppableId].items[destination.index];\r\n console.log(boardColumns[destination.droppableId].items);\r\n await realtimeConnection.invoke(GAME_HUB_METHODS.MoveCard, {\r\n storyId: cardId,\r\n columnIndex: parseInt(destination.droppableId),\r\n index: destination.index,\r\n itemOrders: boardColumns[destination.droppableId].items,\r\n });\r\n };\r\n\r\n const handleAssignButtonClick = async (userStoryId) => {\r\n const userAssignmentInfo = {\r\n previousUserStoryId: assignedUserStoryId,\r\n currentUserStoryId: userStoryId,\r\n playerId: playerId,\r\n playerName: playerName,\r\n };\r\n\r\n addUserAssignment(userAssignmentInfo);\r\n setAssignedUserStoryId(userStoryId);\r\n\r\n await realtimeConnection.invoke(GAME_HUB_METHODS.AssignUserStory, userAssignmentInfo);\r\n };\r\n\r\n return (\r\n
\r\n \r\n {Object.entries(boardColumns)\r\n .sort((a, b) => a[0] > b[0])\r\n .map(([columnId, column], colIndex) => (\r\n \r\n userStories[id])}\r\n title={column.title}\r\n problems={problems}\r\n playersOnline={playersOnline}\r\n assignedUserStoryId={assignedUserStoryId}\r\n playerId={playerId}\r\n isDropDisabled={isSpectator || colIndex === (Object.entries(boardColumns).length -1)}\r\n assignCardToPlayer={handleAssignButtonClick}\r\n moveToColumnHandler={moveToColumnHandler}\r\n />\r\n \r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nBoard.propTypes = {\r\n userStories: PropTypes.any.isRequired,\r\n initialBoardColumns: PropTypes.objectOf(\r\n PropTypes.shape({ title: PropTypes.string.isRequired, items: PropTypes.array.isRequired })\r\n ).isRequired,\r\n problems: PropTypes.array.isRequired,\r\n addUserAssignment: PropTypes.func.isRequired,\r\n};\r\n\r\nconst moveItemInsideColumn = (data, columnId, sourceItemIndex, destinationItemIndex) => {\r\n const modifiedColumn = data[columnId];\r\n const reorderedItems = Array.from(modifiedColumn.items);\r\n const [movedItem] = reorderedItems.splice(sourceItemIndex, 1);\r\n reorderedItems.splice(destinationItemIndex, 0, movedItem);\r\n modifiedColumn.items = reorderedItems;\r\n\r\n return { ...data, [columnId]: modifiedColumn };\r\n};\r\n\r\nconst moveItemBetweenTwoColumns = (\r\n data,\r\n sourceColumnId,\r\n destinationColumnId,\r\n sourceItemIndex,\r\n destinationItemIndex\r\n) => {\r\n const sourceColumnClone = data[sourceColumnId];\r\n const sourceItemsClone = [...sourceColumnClone.items];\r\n\r\n const destinationColumnClone = data[destinationColumnId];\r\n const destinationItemsClone = [...destinationColumnClone.items];\r\n\r\n const [movedItem] = sourceItemsClone.splice(sourceItemIndex, 1);\r\n destinationItemsClone.splice(destinationItemIndex, 0, movedItem);\r\n\r\n sourceColumnClone.items = sourceItemsClone;\r\n destinationColumnClone.items = destinationItemsClone;\r\n\r\n return {\r\n ...data,\r\n [sourceColumnId]: sourceColumnClone,\r\n [destinationColumnId]: destinationColumnClone,\r\n };\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nexport const ResultsDialog = ({\r\n title,\r\n isVisible,\r\n defaultActionCallback,\r\n isDefaultActionButtonDisabled,\r\n defaultActionButtonLabel,\r\n fullWidth,\r\n isPositive,\r\n content,\r\n}) => {\r\n const t = useFormatMessage();\r\n return (\r\n \r\n {title}\r\n {content()}\r\n \r\n \r\n {isDefaultActionButtonDisabled ? tr(t, 'btn-wait-other-players') : defaultActionButtonLabel}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nResultsDialog.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n isVisible: PropTypes.bool.isRequired,\r\n defaultActionCallback: PropTypes.func.isRequired,\r\n isDefaultActionButtonDisabled: PropTypes.bool.isRequired,\r\n defaultActionButtonLabel: PropTypes.string.isRequired,\r\n fullWidth: PropTypes.bool,\r\n content: PropTypes.func.isRequired,\r\n};\r\n\r\nResultsDialog.defaultProps = {\r\n fullWidth: false,\r\n};\r\n","export const ChanceCardType = Object.freeze({\r\n Problem: 1,\r\n Solution: 2,\r\n Event: 3,\r\n});\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport CardHeader from \"@material-ui/core/CardHeader\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { ChanceCardType } from \"../../models/ChanceCardType\";\r\nimport alertIconUrl from \"../../assets/icons/alert.svg\";\r\nimport lightBulbIconUrl from \"../../assets/icons/lightbulb.svg\";\r\nimport smileIconUrl from \"../../assets/icons/smile.svg\";\r\nimport grumpyIconUrl from \"../../assets/icons/grumpy.svg\";\r\nimport { Autocomplete } from \"@material-ui/lab\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nconst Hexagon = ({ content, backgroundColor = \"white\", textColor = \"#4b4c4d\" }) => {\r\n const flexDisplay = { display: \"flex\", flexDirection: \"column\", marginRight: '150px', height: '26px', marginTop: '-3px' };\r\n const stickToBottom = { marginTop: \"auto\" };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n
\r\n );\r\n};\r\nexport const ShortChanceCard = ({ title, description, cardType, provided, isPositive, userStoryId }) => {\r\n const t = useFormatMessage();\r\n const { Icon, typeName, color } = getCardTypeDependentProps(cardType, isPositive, t);\r\n return (\r\n
\r\n \r\n {userStoryId !== undefined ?\r\n (
} subheader={typeName} color={color} title={}/>) : \r\n (
} subheader={typeName} color={color} />) }\r\n \r\n {tr(t, title)}\r\n {tr(t, description)}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nShortChanceCard.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n cardType: PropTypes.number,\r\n};\r\n\r\nconst getCardTypeDependentProps = (cardType, isPositive, t) => {\r\n if(!cardType){\r\n return {\r\n typeName: tr(t, 'card-type-solution'),\r\n Icon: AlertIcon,\r\n color: \"#ff8943\",\r\n };\r\n }\r\n const typeName = tr(t, ('card-type-' + Object.entries(ChanceCardType).find(([key, value]) => value === cardType)[0]).toLocaleLowerCase());\r\n\r\n switch (cardType) {\r\n case ChanceCardType.Problem:\r\n return {\r\n typeName,\r\n Icon: AlertIcon,\r\n color: \"#FE874B\",\r\n };\r\n\r\n case ChanceCardType.Solution:\r\n return {\r\n typeName,\r\n Icon: LightBulbIcon,\r\n color: \"#0693E3\",\r\n };\r\n\r\n case ChanceCardType.Event:\r\n return {\r\n typeName,\r\n Icon: isPositive ? EventPositiveIcon : EventNegativeIcon,\r\n color: \"#748093\",\r\n };\r\n\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst CardBody = styled(Card)`\r\n && {\r\n width: 250px;\r\n min-height: 130px;\r\n margin: 0 auto;\r\n color: #7c7f83;\r\n user-select: none;\r\n border-radius: 10px;\r\n font-size: 14px;\r\n & .MuiCardContent-root{\r\n padding: 5px;\r\n }\r\n }\r\n`;\r\n\r\nconst Header = styled(CardHeader)`\r\n && {\r\n background-color: ${(props) => props.color};\r\n padding: 3px 10px 3px 10px;\r\n justify-content: space-between;\r\n position: relative;\r\n \r\n & .MuiCardHeader-title {\r\n display: flex;\r\n padding-left: 3px;\r\n position: absolute;\r\n left: 41px;\r\n }\r\n & .MuiCardHeader-content {\r\n display: flex;\r\n height: 20px;\r\n flex: 0;\r\n }\r\n\r\n & .MuiCardHeader-subheader {\r\n text-transform: uppercase;\r\n font-weight: 700;\r\n font-size: 20px;\r\n color: white;\r\n display: inline-block;\r\n right: 15px;\r\n bottom: -7px;\r\n position: absolute;\r\n }\r\n }\r\n`;\r\n\r\nconst CardTitle = styled.div`\r\n font-weight: 700;\r\n margin-bottom: 0px;\r\n font-size: 14px;\r\n`;\r\n\r\nconst LightBulbIcon = styled.div`\r\n background: url('${lightBulbIconUrl}') no-repeat;\r\n background-position: center;\r\n background-size: cover;\r\n height: 20px;\r\n width: 20px;\r\n`;\r\n\r\nconst AlertIcon = styled.div`\r\n background: url('${alertIconUrl}') no-repeat;\r\n background-position: center;\r\n background-size: cover;\r\n height: 20px;\r\n width: 20px;\r\n`;\r\n\r\nconst EventPositiveIcon = styled.div`\r\n background: url('${smileIconUrl}') no-repeat;\r\n background-position: center;\r\n background-size: cover;\r\n height: 20px;\r\n width: 20px;\r\n`;\r\n\r\nconst EventNegativeIcon = styled.div`\r\n background: url('${grumpyIconUrl}') no-repeat;\r\n background-position: center;\r\n background-size: cover;\r\n height: 20px;\r\n width: 20px;\r\n`;\r\n","import React, { useState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { ShortChanceCard } from \"../ChanceDialog/ShortChanceCard\";\r\nimport { useServiceInjector } from \"../../hooks/ServiceInjectorContext\";\r\nimport { GAME_HUB_METHODS, GAME_HUB_EVENTS } from \"../../services/GameHubConstants\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nexport const ProblemResolutionScreen = ({\r\n problems,\r\n solutions,\r\n events,\r\n canMoveCard,\r\n attachSolutionToProblem,\r\n}) => {\r\n const t = useFormatMessage();\r\n const [exceptionProblems, setExceptionProblems] = useState(null);\r\n const { connection } = useServiceInjector();\r\n const sortedProblems = [...problems].sort((f,s) => {\r\n if(f.storyKey < s.storyKey) return -1;\r\n if(f.storyKey > s.storyKey) return 1;\r\n return 0;\r\n }).filter(pr => !pr.resolved);\r\n\r\n const handleDragEnd = async (dragResult) => {\r\n const { source, destination } = dragResult;\r\n setExceptionProblems(null);\r\n if (!destination || source.droppableId === destination.droppableId) return;\r\n\r\n const solutionSequenceNumber = source.index;\r\n\r\n const fromProblemSequenceNumber =\r\n source.droppableId === solutionsPoolElementId ? null : parseInt(source.droppableId);\r\n\r\n const toProblemSequenceNumber =\r\n destination.droppableId === solutionsPoolElementId ? null : parseInt(destination.droppableId);\r\n\r\n attachSolutionToProblem({\r\n solutionSequenceNumber,\r\n fromProblemSequenceNumber,\r\n toProblemSequenceNumber,\r\n });\r\n\r\n await connection.invoke(\r\n GAME_HUB_METHODS.MoveSolutionCard, {\r\n solutionSequenceNumber,\r\n fromProblemSequenceNumber,\r\n toProblemSequenceNumber\r\n }\r\n );\r\n };\r\n const onDragStart = (ev) => {\r\n const solutionId = ev?.source?.index;\r\n if(!solutionId) {\r\n return;\r\n }\r\n const solution = solutions.find(x => x.id === solutionId);\r\n if(!solution){\r\n return;\r\n }\r\n setExceptionProblems(solution.exceptionProblems);\r\n };\r\n return (\r\n <>\r\n {tr(t, 'dlg-resolve-problems-text1')} {tr(t, 'dlg-resolve-problems-text2')} {tr(t, 'dlg-resolve-problems-text3')}\r\n \r\n \r\n \r\n {sortedProblems.length > 0 && (<>{tr(t, 'dlg-resolve-problems-problems')}
\r\n
\r\n \r\n {sortedProblems.map(\r\n (problem) =>\r\n { \r\n const problemSolution = solutions.find(s => s.problemId === problem.id);\r\n const exceptionProblem = (exceptionProblems != null && exceptionProblems.indexOf(problem.originId) > -1);\r\n return !problem.resolved && (\r\n \r\n
\r\n \r\n
\r\n \r\n {(provided, snapshot) => (\r\n \r\n {problemSolution != null && (\r\n \r\n {(provided) => (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n )}\r\n {provided.placeholder}\r\n
\r\n )}\r\n \r\n \r\n );}\r\n )}\r\n
)}\r\n {solutions.length > 0 && (<>{tr(t, 'dlg-resolve-problems-solutions')}\r\n
\r\n \r\n {(provided, snapshot) => (\r\n \r\n {solutions.filter(s=>!s.problemId).map(\r\n (solution, index) => (\r\n \r\n \r\n {(provided) => (\r\n \r\n )}\r\n \r\n \r\n )\r\n )}\r\n {provided.placeholder}\r\n \r\n )}\r\n \r\n
)}\r\n {events.length > 0 && (<>{tr(t, 'dlg-resolve-problems-events')}\r\n
\r\n {events.map(\r\n (event, index) => (
\r\n
\r\n )\r\n )}\r\n \r\n
)}\r\n
\r\n \r\n );\r\n};\r\n\r\nProblemResolutionScreen.propTypes = {\r\n problems: PropTypes.array.isRequired,\r\n solutions: PropTypes.array.isRequired,\r\n events: PropTypes.array.isRequired,\r\n};\r\n\r\nconst PanelTitle = styled.div`\r\n background-color: #f5f5f5;\r\n text-transform: uppercase;\r\n text-align: center;\r\n line-height: 2em;\r\n color: #7a7d82;\r\n font-size: 14px;\r\n font-weight: 700;\r\n margin-top: 5px;\r\n`;\r\n\r\nconst DropZone = styled.div`\r\n padding: 0px;\r\n background-color: ${(props) => props.isDraggingOver && \"lightblue\"};\r\n display: flex;\r\n flex-wrap: wrap;\r\n width: 100%;\r\n height: 150px;\r\n`;\r\n\r\nconst EmptyListPlaceholder = styled.div`\r\n &:after {\r\n text-align: center;\r\n height: 100px;\r\n line-height: 100px;\r\n content: \"Nothing here\";\r\n display: block;\r\n }\r\n`;\r\n\r\nconst solutionsPoolElementId = \"solutions-pool\";\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { ResultsDialog } from \".\";\r\nimport { ProblemResolutionScreen } from \"./ProblemResolutionScreen\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nexport const EndOfDayDialog = (props) => {\r\n const {\r\n problems,\r\n solutions,\r\n events,\r\n attachSolutionToProblem,\r\n canMoveCard,\r\n ...otherProps\r\n } = props;\r\n const t = useFormatMessage();\r\n return (\r\n (\r\n \r\n )}\r\n {...otherProps}\r\n >\r\n );\r\n};\r\n\r\nEndOfDayDialog.propTypes = {\r\n isVisible: PropTypes.bool.isRequired,\r\n defaultActionCallback: PropTypes.func.isRequired,\r\n isDefaultActionButtonDisabled: PropTypes.bool.isRequired,\r\n problems: PropTypes.array.isRequired,\r\n solutions: PropTypes.array.isRequired,\r\n events: PropTypes.array.isRequired,\r\n attachSolutionToProblem: PropTypes.func.isRequired,\r\n};\r\n","import React from \"react\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nconst StatisticPanel = ({ statistics }) => {\r\n const t = useFormatMessage();\r\n return (
\r\n
\r\n
{tr(t, 'Iteration Sprint')}
\r\n
{tr(t, 'Plan')}
\r\n
{tr(t, 'Actual')}
\r\n
\r\n {(statistics||[]).map(s => (\r\n
\r\n
{s.sprint+1}
\r\n {s.totalPlan ? (
{s.totalPlan}\r\n {s.planStories && s.planStories.length !== 0 && (<>
(#{s.planStories.join(', #')}))}
) : (
 
)}\r\n {s.totalActual ? (
{s.totalActual}\r\n {s.actualStories && s.actualStories.length !== 0 && (<>
(#{s.actualStories.join(', #')}))}
) : (
 
)}\r\n \r\n
\r\n ))}\r\n
);\r\n};\r\nexport default StatisticPanel;","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport StatisticPanel from './statisticPanel';\r\nimport { ResultsDialog } from \".\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nexport const EndOfSprintDialog = (props) => {\r\n const t = useFormatMessage();\r\n return (\r\n <>\r\n \r\n
    \r\n
  • {tr(t, 'dlg-sprint-finish-text1')}
  • \r\n
  • {tr(t, 'dlg-sprint-finish-text2')}
  • \r\n
  • {tr(t, 'dlg-sprint-finish-text3')}
  • \r\n
  • {tr(t, 'dlg-sprint-finish-text4')}
  • \r\n
\r\n{tr(t, 'dlg-sprint-finish-text5')} {tr(t, 'dlg-sprint-finish-text6')} {tr(t, 'dlg-sprint-finish-text7')}\r\n }\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\nEndOfSprintDialog.propTypes = {\r\n isVisible: PropTypes.bool.isRequired,\r\n defaultActionCallback: PropTypes.func.isRequired,\r\n isDefaultActionButtonDisabled: PropTypes.bool.isRequired,\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport StatisticPanel from './statisticPanel';\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nexport const EndOfGameScreen = ({ isVisible, isHost, statistics }) => {\r\n const history = useHistory();\r\n const { locale } = useParams();\r\n const paraStyle = {\r\n padding: 0,\r\n marginBottom: '3px',\r\n };\r\n const t = useFormatMessage();\r\n return (\r\n \r\n {tr(t, 'dlg-title-finish-game')}\r\n \r\n \r\n \r\n {tr(t, 'dlg-text1-finish-game')}\r\n \r\n \r\n {tr(t, 'dlg-text2-finish-game')}\r\n \r\n \r\n \r\n ✅\r\n {\" \"}\r\n {tr(t, 'dlg-text3-finish-game')}\r\n \r\n \r\n \r\n ✅\r\n {\" \"}\r\n {tr(t, 'dlg-text4-finish-game')}\r\n \r\n \r\n \r\n ✅\r\n {\" \"}\r\n {tr(t, 'dlg-text5-finish-game')}\r\n \r\n \r\n \r\n ✅\r\n {\" \"}\r\n {tr(t, 'dlg-text6-finish-game')}\r\n \r\n \r\n \r\n ✅\r\n {\" \"}\r\n {tr(t, 'dlg-text7-finish-game')}\r\n \r\n {isHost ? (

\r\n \r\n

) : null} \r\n
\r\n
\r\n );\r\n};\r\n\r\nEndOfGameScreen.propTypes = {\r\n isVisible: PropTypes.bool.isRequired,\r\n};\r\n","export class GameProgress {\r\n constructor() {\r\n this.totalSprintsCount = 0;\r\n this.totalDaysCount = 0;\r\n this.currentSprint = 0;\r\n this.currentDay = 0;\r\n }\r\n}\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport CardHeader from \"@material-ui/core/CardHeader\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { ChanceCardType } from \"../../models/ChanceCardType\";\r\nimport alertIconUrl from \"../../assets/icons/alert.svg\";\r\nimport lightBulbIconUrl from \"../../assets/icons/lightbulb.svg\";\r\nimport smileIconUrl from \"../../assets/icons/smile.svg\";\r\nimport grumpyIconUrl from \"../../assets/icons/grumpy.svg\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\n\r\nconst Hexagon = ({ content, backgroundColor = \"white\", textColor = \"#4b4c4d\" }) => {\r\n const flexDisplay = { display: \"flex\", flexDirection: \"column\", marginRight: '56pt', height: '30pt', marginTop: '-12pt' };\r\n const stickToBottom = { marginTop: \"auto\" };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n
\r\n );\r\n};\r\nexport const ChanceCard = ({ title, description, cardType, provided, isPositive, userStoryId }) => {\r\n const t = useFormatMessage();\r\n const { Icon, typeName, color } = getCardTypeDependentProps(cardType, isPositive, t);\r\n return (\r\n
\r\n \r\n {userStoryId !== undefined ?\r\n (
} subheader={typeName} color={color} title={}/>) : \r\n (
} subheader={typeName} color={color} />) }\r\n \r\n {tr(t, title)}\r\n {tr(t, description)}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nChanceCard.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n cardType: PropTypes.number,\r\n};\r\n\r\nconst getCardTypeDependentProps = (cardType, isPositive, t) => {\r\n if(!cardType){\r\n return {\r\n typeName: tr(t, 'card-type-solution'),\r\n Icon: AlertIcon,\r\n color: \"#ff8943\",\r\n };\r\n }\r\n const typeName = tr(t, ('card-type-' + Object.entries(ChanceCardType).find(([key, value]) => value === cardType)[0]).toLocaleLowerCase());\r\n\r\n switch (cardType) {\r\n case ChanceCardType.Problem:\r\n return {\r\n typeName,\r\n Icon: AlertIcon,\r\n color: \"#FE874B\",\r\n };\r\n\r\n case ChanceCardType.Solution:\r\n return {\r\n typeName,\r\n Icon: LightBulbIcon,\r\n color: \"#0693E3\",\r\n };\r\n\r\n case ChanceCardType.Event:\r\n return {\r\n typeName,\r\n Icon: isPositive ? EventPositiveIcon : EventNegativeIcon,\r\n color: \"#748093\",\r\n };\r\n\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst CardBody = styled(Card)`\r\n && {\r\n min-width: 280px;\r\n margin: 0 auto;\r\n color: #7c7f83;\r\n user-select: none;\r\n border-radius: 10px;\r\n }\r\n`;\r\n\r\nconst Header = styled(CardHeader)`\r\n && {\r\n background-color: ${(props) => props.color};\r\n padding: 3px 20px 3px 10px;\r\n justify-content: space-between;\r\n position: relative;\r\n \r\n & .MuiCardHeader-title {\r\n display: flex;\r\n padding-left: 3px;\r\n position: absolute;\r\n left: 41pt;\r\n }\r\n & .MuiCardHeader-content {\r\n display: flex;\r\n height: 0.6em;\r\n flex: 0;\r\n }\r\n\r\n & .MuiCardHeader-subheader {\r\n text-transform: uppercase;\r\n font-weight: 700;\r\n font-size: 20pt;\r\n color: white;\r\n display: inline-block;\r\n right: 10pt;\r\n position: absolute;\r\n }\r\n }\r\n`;\r\n\r\nconst CardTitle = styled.div`\r\n font-weight: 700;\r\n margin-bottom: 20px;\r\n`;\r\n\r\nconst LightBulbIcon = styled.div`\r\n background: url('${lightBulbIconUrl}') no-repeat;\r\n background-position: center;\r\n height: 40px;\r\n width: 40px;\r\n`;\r\n\r\nconst AlertIcon = styled.div`\r\n background: url('${alertIconUrl}') no-repeat;\r\n background-position: center;\r\n height: 40px;\r\n width: 40px;\r\n`;\r\n\r\nconst EventPositiveIcon = styled.div`\r\n background: url('${smileIconUrl}') no-repeat;\r\n background-position: center;\r\n height: 40px;\r\n width: 40px;\r\n`;\r\n\r\nconst EventNegativeIcon = styled.div`\r\n background: url('${grumpyIconUrl}') no-repeat;\r\n background-position: center;\r\n height: 40px;\r\n width: 40px;\r\n`;\r\n","import React,{useState, useEffect} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { ResultsDialog } from \"../ResultsDialog\";\r\nimport { ChanceCard } from \"./ChanceCard\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\nlet intervalValue = 0;\r\nlet timerHandler = null;\r\nexport const ChanceDialog = ({\r\n isVisible,\r\n title,\r\n description,\r\n cardType,\r\n isPositive,\r\n defaultActionCallback,\r\n}) => {\r\n const t = useFormatMessage();\r\n const [autoPressTime, setAutoPressTime] = useState(0);\r\n const onTimer = () => {\r\n if(intervalValue <= 0){\r\n onActionHandler();\r\n return;\r\n }\r\n intervalValue--;\r\n setAutoPressTime(intervalValue);\r\n timerHandler = setTimeout(onTimer, 1000);\r\n };\r\n useEffect(() => {\r\n if(!isVisible) return;\r\n intervalValue = 15;\r\n setAutoPressTime(intervalValue);\r\n timerHandler = setTimeout(onTimer, 1000);\r\n }, [isVisible]);\r\n const onActionHandler = () => {\r\n clearTimeout(timerHandler);\r\n defaultActionCallback();\r\n };\r\n const buttonText = tr(t, 'btn-text-got-it-format').replace('#t#', autoPressTime);\r\n \r\n return (\r\n title && ()}\r\n >\r\n );\r\n};\r\n\r\nChanceDialog.propTypes = {\r\n isVisible: PropTypes.bool.isRequired,\r\n defaultActionCallback: PropTypes.func.isRequired,\r\n};\r\n","export const userStoriesActions = {\r\n CHANGE_STORY_POINTS: \"CHANGE_STORY_POINTS\",\r\n CHANGE_PLAYER_ASSIGNMENT: \"CHANGE_PLAYER_ASSIGNMENT\",\r\n REMOVE_PLAYER_ASSIGNMENT: \"REMOVE_PLAYER_ASSIGNMENT\",\r\n REMOVE_ALL_PLAYER_ASSIGNMENTS: \"REMOVE_ALL_PLAYER_ASSIGNMENTS\",\r\n INITIALIZE_USER_STORIES: \"INITIALIZE_USER_STORIES\",\r\n ATTACH_PROBLEM_TO_STORY: \"ATTACH_PROBLEM_TO_STORY\",\r\n};\r\n\r\nexport const userStoriesReducer = (previousUserStories, { type, payload }) => {\r\n switch (type) {\r\n case userStoriesActions.INITIALIZE_USER_STORIES:\r\n return payload.userStories.reduce(\r\n (stories, story) => Object.assign(stories, { [story.id]: story }),\r\n {}\r\n );\r\n\r\n case userStoriesActions.CHANGE_STORY_POINTS:\r\n const { userStoryId, newStoryPoints } = payload;\r\n\r\n const userStoryCopy = {...previousUserStories[userStoryId]};\r\n userStoryCopy.storyPoints = newStoryPoints;\r\n\r\n return { ...previousUserStories, [userStoryId]: userStoryCopy };\r\n\r\n case userStoriesActions.CHANGE_PLAYER_ASSIGNMENT: {\r\n const { previousUserStoryId, currentUserStoryId, playerId, playerName } = payload;\r\n\r\n const userStoriesCopy = { ...previousUserStories };\r\n\r\n // Adding new player-story assignment\r\n const currentUserStory = previousUserStories[currentUserStoryId];\r\n if (currentUserStory) {\r\n const currentUserStoryCopy = { ...currentUserStory };\r\n\r\n userStoriesCopy[currentUserStoryId] = currentUserStoryCopy;\r\n }\r\n\r\n return userStoriesCopy;\r\n }\r\n\r\n case userStoriesActions.REMOVE_PLAYER_ASSIGNMENT:\r\n const { playerId } = payload;\r\n\r\n const [targetStory] = Object.entries(previousUserStories).filter(([storyId, story]) =>\r\n story.assignedPlayers.hasOwnProperty(playerId)\r\n );\r\n\r\n if (!targetStory) return previousUserStories;\r\n\r\n const [storyId, story] = targetStory;\r\n const { [playerId]: unassignedPlayer, ...players } = story.assignedPlayers;\r\n const previousUserStoryCopy = {...story};\r\n previousUserStoryCopy.assignedPlayers = players;\r\n\r\n return { ...previousUserStories, [storyId]: previousUserStoryCopy };\r\n\r\n case userStoriesActions.REMOVE_ALL_PLAYER_ASSIGNMENTS: {\r\n const { userStoryId } = payload;\r\n const userStoryCopy = {...previousUserStories[userStoryId]};\r\n userStoryCopy.assignedPlayers = {};\r\n\r\n return { ...previousUserStories, [userStoryId]: userStoryCopy };\r\n }\r\n\r\n case userStoriesActions.ATTACH_PROBLEM_TO_STORY: {\r\n const { userStoryId, cardSequenceNumber } = payload;\r\n\r\n const userStoryCopy = {...previousUserStories[userStoryId]};\r\n //userStoryCopy.problemIds.push(cardSequenceNumber);\r\n\r\n return { ...previousUserStories, [userStoryId]: userStoryCopy };\r\n }\r\n\r\n default:\r\n throw new Error(`Encountered an unknown User Stories Reducer action type: '${type}'`);\r\n }\r\n};\r\n\r\nexport const addPlayerAssignment = (\r\n dispatch,\r\n { previousUserStoryId, currentUserStoryId, playerId, playerName }\r\n) =>\r\n dispatch({\r\n type: userStoriesActions.CHANGE_PLAYER_ASSIGNMENT,\r\n payload: {\r\n previousUserStoryId,\r\n currentUserStoryId,\r\n playerId,\r\n playerName,\r\n },\r\n });\r\n\r\nexport const removePlayerAssignment = ({ playerId }, dispatch) =>\r\n dispatch({\r\n type: userStoriesActions.REMOVE_PLAYER_ASSIGNMENT,\r\n payload: { playerId },\r\n });\r\n\r\nexport const removeAllPlayerAssignments = ({ userStoryId }, dispatch) =>\r\n dispatch({\r\n type: userStoriesActions.REMOVE_ALL_PLAYER_ASSIGNMENTS,\r\n payload: { userStoryId },\r\n });\r\n\r\nexport const initializeUserStories = ({ userStories }, dispatch) => {\r\n dispatch({ type: userStoriesActions.INITIALIZE_USER_STORIES, payload: { userStories } });\r\n};\r\n\r\nexport const attachProblemToStory = (dispatch, { userStoryId, cardSequenceNumber }) => {\r\n dispatch({\r\n type: userStoriesActions.ATTACH_PROBLEM_TO_STORY,\r\n payload: { userStoryId, cardSequenceNumber },\r\n });\r\n};\r\n","export const problemsSolutionsActions = {\r\n INITIALIZE_PROBLEMS_SOLUTIONS: \"INITIALIZE_PROBLEMS_SOLUTIONS\",\r\n ATTACH_SOLUTION_TO_PROBLEM: \"ATTACH_SOLUTION_TO_PROBLEM\",\r\n ADD_PROBLEM: \"ADD_PROBLEM\",\r\n ADD_SOLUTION: \"ADD_SOLUTION\",\r\n HIDE_SOLVED_PROBLEMS: \"HIDE_SOLVED_PROBLEMS\",\r\n};\r\n\r\nexport const problemsSolutionsReducer = (previousProblemsAndSolutions, { type, payload }) => {\r\n const { problems, solutions, events } = previousProblemsAndSolutions;\r\n\r\n switch (type) {\r\n case problemsSolutionsActions.INITIALIZE_PROBLEMS_SOLUTIONS: \r\n return { ...payload };\r\n case problemsSolutionsActions.ATTACH_SOLUTION_TO_PROBLEM:\r\n const {\r\n solutionSequenceNumber,\r\n fromProblemSequenceNumber,\r\n toProblemSequenceNumber,\r\n } = payload;\r\n console.log(payload);\r\n const solution = solutions.find(s => (s.id === solutionSequenceNumber));\r\n solution.problemId = toProblemSequenceNumber;\r\n \r\n if (fromProblemSequenceNumber != null) {\r\n const problem = problems.find(p => (p.id === fromProblemSequenceNumber));\r\n problem.hasSolution = false;\r\n }\r\n\r\n if (toProblemSequenceNumber != null) {\r\n const problem = problems.find(p => (p.id === toProblemSequenceNumber));\r\n problem.hasSolution = false;\r\n }\r\n\r\n return {\r\n problems: [...problems], \r\n solutions: [...solutions], \r\n events: [...events]\r\n };\r\n\r\n case problemsSolutionsActions.ADD_PROBLEM: {\r\n const { problem } = payload;\r\n\r\n return {\r\n problems: [...problems, problem], \r\n solutions: [...solutions], \r\n events: [...events]\r\n };\r\n }\r\n\r\n case problemsSolutionsActions.ADD_SOLUTION: {\r\n const { solution } = payload;\r\n\r\n return {\r\n problems: [...problems], \r\n solutions: [...solutions, solution], \r\n events: [...events]\r\n };\r\n }\r\n default:\r\n return previousProblemsAndSolutions;\r\n }\r\n};\r\n\r\nexport const initializeProblemsSolutions = (\r\n dispatch,\r\n { problems, solutions, events }\r\n) => {\r\n dispatch({\r\n type: problemsSolutionsActions.INITIALIZE_PROBLEMS_SOLUTIONS,\r\n payload: { problems, solutions, events },\r\n });\r\n};\r\n\r\nexport const attachSolutionToProblem = (\r\n dispatch,\r\n { solutionSequenceNumber, fromProblemSequenceNumber, toProblemSequenceNumber }\r\n) => {\r\n dispatch({\r\n type: problemsSolutionsActions.ATTACH_SOLUTION_TO_PROBLEM,\r\n payload: { solutionSequenceNumber, fromProblemSequenceNumber, toProblemSequenceNumber },\r\n });\r\n};\r\n","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\r\n\r\nimport { realtimeConnection } from \"../services/realtimeConnection\";\r\nimport { GAME_HUB_METHODS, GAME_HUB_EVENTS } from \"../services/GameHubConstants\";\r\nimport { MenuBar } from \"./MenuBar\";\r\nimport { Board } from \"./Board\";\r\nimport { EndOfDayDialog } from \"./ResultsDialog/EndOfDayDialog\";\r\nimport { EndOfSprintDialog } from \"./ResultsDialog/EndOfSprintDialog\";\r\nimport { EndOfGameScreen } from \"./ResultsDialog/EndOfGameScreen\";\r\nimport { useGameContext } from \"../hooks/GameContext\";\r\nimport { GameProgress } from \"../models/GameProgress\";\r\nimport { ChanceDialog } from \"./ChanceDialog\";\r\nimport { ChanceCardType } from \"../models/ChanceCardType\";\r\nimport { useToasts } from 'react-toast-notifications';\r\nimport { useParams, useHistory } from \"react-router-dom\";\r\nimport { useServiceInjector } from \"../hooks/ServiceInjectorContext\";\r\nimport TranslateWrapper from './TranslateWrapper';\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from './TranslateWrapper';\r\nimport {\r\n userStoriesActions,\r\n addPlayerAssignment,\r\n initializeUserStories,\r\n userStoriesReducer,\r\n} from \"../services/userStoriesReducer\";\r\nimport {\r\n problemsSolutionsActions,\r\n initializeProblemsSolutions,\r\n attachSolutionToProblem,\r\n problemsSolutionsReducer,\r\n} from \"../services/problemsSolutionsReducer\";\r\nimport {AmplitudeService} from \"../services/AmplitudeService\"\r\n\r\nlet loadOnlinePlayersTimer = null;\r\nconst GameShellComponent = () => {\r\n const t = useFormatMessage();\r\n const { locale } = useParams();\r\n const { addToast } = useToasts();\r\n const [playersOnline, setPlayersOnline] = useState([]);\r\n const [isHost, setIsHost] = useState(false);\r\n const [isSpectator, setIsSpectator] = useState(false);\r\n const [initialTeamName, setInitialTeamName] = useState(\"\");\r\n const [lockMessage, setLockMessage] = useState(null);\r\n const [infoMessage, setInfoMessage] = useState(null);\r\n const [initialBoardColumns, setInitialBoardColumns] = useState({});\r\n const [gameProgress, setGameProgress] = useState(new GameProgress());\r\n const { jwtTokenService } = useServiceInjector();\r\n \r\n const history = useHistory();\r\n const [isEndOfDayDialogOpen, setEndOfDayDialogOpen] = useState(false);\r\n const [isEndOfSprintDialogOpen, setEndOfSprintDialogOpen] = useState(false);\r\n const [isEndOfGameReached, setEndOfGameReached] = useState(false);\r\n const [isWaitingForOtherPlayers, setWaitingForOtherPlayers] = useState(false);\r\n const [currentChanceCard, setCurrentChanceCard] = useState(null);\r\n const [statistics, setStatistics] = useState([]);\r\n \r\n const { sessionId } = useParams();\r\n\r\n const [canRollTheDice, setCanRollTheDice] = useState(false);\r\n const [timeStartGame, setTimeStartGame] = useState(null);\r\n \r\n const {\r\n player: { playerId, setPlayerId, playerName, setPlayerName, assignedUserStoryId, setAssignedUserStoryId },\r\n } = useGameContext();\r\n\r\n const memoizedSetPlayerId = useCallback(setPlayerId, []);\r\n const memoizedSetPlayerName = useCallback(setPlayerName, []);\r\n const memoizedSetAssignedUserStoryId = useCallback(setAssignedUserStoryId, []);\r\n\r\n const [userStories, dispatchUserStories] = useReducer(userStoriesReducer, {});\r\n const [problemsSolutions, dispatchProblemsSolutions] = useReducer(problemsSolutionsReducer, {\r\n problems: [],\r\n solutions: [],\r\n events: [],\r\n });\r\n\r\n const markAsReadyForNextPhase = async () => {\r\n setCurrentChanceCard(null);\r\n setWaitingForOtherPlayers(true);\r\n\r\n if(isEndOfGameReached||gameProgress.currentSprint==gameProgress.totalSprintsCount){\r\n realtimeConnection.setAmlitudeErrorHandler((error) => AmplitudeService.SendEndGame(playerId,\r\n playerName,\r\n isSpectator, \r\n isHost, \r\n sessionId,\r\n null, \r\n timeStartGame,\r\n {'error_type':error}));\r\n }\r\n await realtimeConnection.invoke(GAME_HUB_METHODS.MarkPlayerAsReadyForNextPhase);\r\n \r\n if(isEndOfGameReached||gameProgress.currentSprint==gameProgress.totalSprintsCount){\r\n AmplitudeService.SendEndGame(playerId, playerName, isSpectator, isHost, sessionId, null,timeStartGame)\r\n }\r\n };\r\n\r\n const diceRollHandler = async (points) => {\r\n if (assignedUserStoryId === null) return;\r\n\r\n setCanRollTheDice(false);\r\n const response = await realtimeConnection.invokeIgnore(GAME_HUB_METHODS.MakeMove, {\r\n userStoryId: assignedUserStoryId,\r\n storyPointsDelta: points,\r\n });\r\n\r\n AmplitudeService.SendRollTheDice(playerId, playerName, isSpectator, isHost, sessionId, null);\r\n\r\n if(response.hasErrors){\r\n addToast(({tr(t, response.message || 'Internal error!')}), { appearance: 'error', autoDismiss: false });\r\n return;\r\n }\r\n // handleMadeMove(response.payload);\r\n };\r\n\r\n useEffect(() => {\r\n if(!loadOnlinePlayersTimer){\r\n loadOnlinePlayersTimer = setInterval(loadOnlinePlayers, 2000);\r\n }\r\n realtimeConnection\r\n .setSessionId(sessionId);\r\n realtimeConnection.invoke(GAME_HUB_METHODS.GetGameState).then((params) => {\r\n const { payload } = params;\r\n if(!payload){\r\n if(!jwtTokenService.getToken()){\r\n history.push({\r\n pathname: `/${locale || 'en'}/join/${sessionId}`,\r\n state: { isHost: false, logining: false }\r\n });\r\n }\r\n return;\r\n }\r\n setTimeStartGame(payload?.timeStartGame);\r\n jwtTokenService.setToken(payload.accessToken);\r\n memoizedSetPlayerId(payload.playerId);\r\n memoizedSetPlayerName(payload.playerName);\r\n setCurrentChanceCard(payload.changeCard);\r\n setStatistics(payload.sprintStatistics);\r\n setIsSpectator(payload.isSpectator);\r\n if(payload.assignedUserStoryId !== undefined){\r\n memoizedSetAssignedUserStoryId(payload.assignedUserStoryId);\r\n }\r\n setPlayersOnline(payload.players);\r\n setInitialTeamName(payload.teamName);\r\n initializeUserStories({ userStories: payload.userStories }, dispatchUserStories);\r\n setInitialBoardColumns(payload.boardColumns);\r\n setGameProgress(payload.gameProgress);\r\n setCanRollTheDice(payload.canRollTheDice);\r\n if(payload?.waitOtherPlayers){\r\n setWaitingForOtherPlayers(true);\r\n }\r\n if(payload?.dayIsFinished){\r\n setEndOfDayDialogOpen(true);\r\n AmplitudeService.SendEndDay(playerId, playerName, isSpectator, isHost, sessionId, null)\r\n }\r\n if (payload?.sprintJustFinished) {\r\n setEndOfSprintDialogOpen(true);\r\n AmplitudeService.SendEndSprint(playerId, playerName, isSpectator, isHost, sessionId, null)\r\n }\r\n \r\n if (payload?.isEndOfGameReached) {\r\n setEndOfGameReached(payload?.isEndOfGameReached);\r\n }\r\n initializeProblemsSolutions(dispatchProblemsSolutions, {\r\n problems: payload.problems, \r\n solutions: payload.solutions, \r\n events: payload.events,\r\n });\r\n });\r\n\r\n }, [memoizedSetPlayerId]);\r\n \r\n const loadOnlinePlayers = () => {\r\n realtimeConnection.invokeIgnore(GAME_HUB_METHODS.GetOnlinePlayers).then((params) => {\r\n if(!params){\r\n clearInterval(loadOnlinePlayersTimer);\r\n loadOnlinePlayersTimer = null;\r\n return;\r\n }\r\n\r\n if(!params?.hasErrors){\r\n const { payload } = params;\r\n setPlayersOnline(payload.players);\r\n setIsHost(payload.isHost);\r\n console.log(payload);\r\n if (payload.isTerminated) {\r\n\r\n history.push({\r\n pathname: `/${locale || 'en'}/join/${sessionId}`,\r\n state: { isHost: false, logining: false }\r\n });\r\n return;\r\n }\r\n } else{\r\n clearInterval(loadOnlinePlayersTimer);\r\n loadOnlinePlayersTimer = null;\r\n }\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n return () => {\r\n clearInterval(loadOnlinePlayersTimer);\r\n loadOnlinePlayersTimer = null;\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n realtimeConnection.on(GAME_HUB_EVENTS.UserStoryAssigned, (userAssignmentInfo) =>{\r\n addPlayerAssignment(dispatchUserStories, userAssignmentInfo);\r\n const player = playersOnline.find(p => p.id === userAssignmentInfo.playerId);\r\n player.assignedUserStoryId = userAssignmentInfo.currentUserStoryId;\r\n setPlayersOnline([...playersOnline]);\r\n }\r\n );\r\n }, [playersOnline]);\r\n const setStoryToCurrentPlayer = (storyId) => {\r\n const player = playersOnline.find(p => p.id === playerId);\r\n player.assignedUserStoryId = storyId;\r\n setPlayersOnline([...playersOnline]);\r\n }\r\n const showchanceCardToast = (card, cartType, userId) => {\r\n if(userId === playerId){\r\n // return;\r\n }\r\n const appearance = cartType === ChanceCardType.Problem \r\n ? 'error' \r\n : cartType !== ChanceCardType.Event \r\n ? 'info' \r\n : card.isPositive \r\n ? 'success' \r\n : 'warning';\r\n const playerName = playersOnline.find(p => (p.id === userId)).name;\r\n const toastContent = (
\r\n

{tr(t, 'lbl-player')} {playerName}

\r\n

{tr(t, card.title)}

\r\n
{tr(t, card.description)}
\r\n
);\r\n addToast(toastContent, { appearance: appearance, autoDismiss: true });\r\n };\r\n useEffect(() => {\r\n realtimeConnection.on(\r\n GAME_HUB_EVENTS.PlayerMadeMove,\r\n handleMadeMove,\r\n );\r\n return () => {\r\n realtimeConnection.off(GAME_HUB_EVENTS.PlayerMadeMove);\r\n };\r\n }, [playerId, assignedUserStoryId, memoizedSetAssignedUserStoryId, playersOnline]);\r\n const handleMadeMove = ({ userId, userStoryId, newStoryPoints, cartType, cart, gameInfo }) => {\r\n if (cartType === ChanceCardType.Problem) {\r\n dispatchProblemsSolutions({\r\n type: problemsSolutionsActions.ADD_PROBLEM,\r\n payload: { problem: cart },\r\n });\r\n }\r\n \r\n if (cartType === ChanceCardType.Solution) {\r\n dispatchProblemsSolutions({\r\n type: problemsSolutionsActions.ADD_SOLUTION,\r\n payload: { \r\n solution: cart\r\n },\r\n });\r\n }\r\n dispatchUserStories({\r\n type: userStoriesActions.CHANGE_STORY_POINTS,\r\n payload: { userStoryId, newStoryPoints },\r\n });\r\n if(userId === playerId){\r\n setCurrentChanceCard(cart);\r\n }\r\n showchanceCardToast(cart, cartType, userId);\r\n handleNewGamePhase(gameInfo);\r\n };\r\n const handleNewGamePhase = (response) => {\r\n let currentPlayer = response?.players?.find(p=> p.id === playerId);\r\n if (currentPlayer.isTerminated) {\r\n\r\n history.push({\r\n pathname: `/${locale || 'en'}/join/${sessionId}`,\r\n state: { isHost: false, logining: false }\r\n });\r\n return;\r\n }\r\n setAssignedUserStoryId(currentPlayer?.assignedUserStoryId);\r\n setCanRollTheDice(currentPlayer?.canRollTheDice || false);\r\n setIsHost(currentPlayer?.isHost);\r\n setLockMessage(currentPlayer?.LockMessage);\r\n setWaitingForOtherPlayers(currentPlayer?.waitOtherPlayers || false);\r\n setIsSpectator(currentPlayer?.isSpectator);\r\n setPlayersOnline(response?.players);\r\n\r\n setInitialBoardColumns(response.boardColumns);\r\n setStatistics(response.sprintStatistics);\r\n setGameProgress(response.gameProgress);\r\n setEndOfDayDialogOpen(response?.dayIsFinished || false);\r\n setEndOfSprintDialogOpen(response?.sprintJustFinished || false);\r\n setEndOfGameReached(response?.isEndOfGameReached || false);\r\n initializeUserStories({ userStories: response?.userStories }, dispatchUserStories);\r\n initializeProblemsSolutions(dispatchProblemsSolutions, {\r\n problems: response.problems, \r\n solutions: response.solutions, \r\n events: response.events,\r\n });\r\n };\r\n useEffect(() => {\r\n\r\n realtimeConnection.on(GAME_HUB_EVENTS.NextGamePhaseStarted, handleNewGamePhase);\r\n\r\n return () => {\r\n realtimeConnection.off(GAME_HUB_EVENTS.NextGamePhaseStarted);\r\n };\r\n }, [isEndOfDayDialogOpen, isEndOfSprintDialogOpen, currentChanceCard, playersOnline, userStories,\r\n isWaitingForOtherPlayers, assignedUserStoryId, isEndOfGameReached, canRollTheDice]);\r\n const onAddUserAssignment = (userAssignmentInfo) => {\r\n addPlayerAssignment(dispatchUserStories, userAssignmentInfo);\r\n setStoryToCurrentPlayer(userAssignmentInfo.currentUserStoryId);\r\n };\r\n const onAssignUserStory = (userStoryId) => {\r\n setAssignedUserStoryId(userStoryId);\r\n if (userStoryId !== null && !isWaitingForOtherPlayers\r\n && userStories[userStoryId] && userStories[userStoryId].storyPoints > 0)\r\n setCanRollTheDice(true);\r\n setInfoMessage(null);\r\n };\r\n useEffect(() => {\r\n \r\n if(isEndOfDayDialogOpen){\r\n AmplitudeService.SendEndDay(playerId, playerName, isSpectator, isHost, sessionId, null)\r\n }\r\n if (isEndOfSprintDialogOpen) {\r\n AmplitudeService.SendEndSprint(playerId, playerName, isSpectator, isHost, sessionId, null)\r\n }\r\n }, [isEndOfDayDialogOpen, isEndOfSprintDialogOpen]);\r\n \r\n useEffect(() => {\r\n if(!isWaitingForOtherPlayers && (!assignedUserStoryId \r\n || !userStories[assignedUserStoryId]\r\n || userStories[assignedUserStoryId].storyPoints <= 0)\r\n && !isEndOfDayDialogOpen\r\n && !isEndOfSprintDialogOpen\r\n && !currentChanceCard\r\n && !isEndOfGameReached\r\n && playersOnline.length\r\n && !canRollTheDice){\r\n setInfoMessage('notify-player-no-story');\r\n } else {\r\n setInfoMessage(null);\r\n }\r\n }, [isWaitingForOtherPlayers, assignedUserStoryId, playersOnline, userStories, isEndOfDayDialogOpen, isEndOfSprintDialogOpen, currentChanceCard, isEndOfGameReached, canRollTheDice]);\r\n\r\n useEffect(() => {\r\n realtimeConnection.on(\r\n GAME_HUB_EVENTS.SolutionCardMoved,\r\n ({ solutionSequenceNumber, fromProblemSequenceNumber, toProblemSequenceNumber }) => {\r\n attachSolutionToProblem(dispatchProblemsSolutions, {\r\n solutionSequenceNumber,\r\n fromProblemSequenceNumber,\r\n toProblemSequenceNumber,\r\n });\r\n }\r\n );\r\n\r\n return () => {\r\n realtimeConnection.off(GAME_HUB_EVENTS.SolutionCardMoved);\r\n };\r\n }, [attachSolutionToProblem, playersOnline]);\r\n const onClosePlayer = (id) => {\r\n realtimeConnection.invokeIgnore(GAME_HUB_METHODS.TerminatePlayer, {playerId: id}).then(() => {\r\n });\r\n };\r\n return (\r\n <>\r\n {lockMessage && (
{tr(t, lockMessage)}
)}\r\n {infoMessage && (
{tr(t, infoMessage)}
)}\r\n !p.isSpectator)}\r\n initialTeamName={initialTeamName}\r\n gameProgress={gameProgress}\r\n canRollTheDice={!isSpectator && canRollTheDice}\r\n diceRollHandler={diceRollHandler}\r\n onClosePlayer={onClosePlayer}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport const GameShell = TranslateWrapper(GameShellComponent);","import React, { useState, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { TextField, Button, Select,RadioGroup, FormControlLabel, Radio } from \"@material-ui/core\";\r\n\r\nimport { useGameContext } from \"../hooks/GameContext\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from './TranslateWrapper';\r\n\r\nconst mainButtonStyle = {\r\n marginTop: 20,\r\n};\r\n\r\nconst selectProfileStyle = {\r\n marginTop: 20,\r\n width: '100%'\r\n};\r\n\r\nexport const CreateGameForm = ({ formTitle, formSubmitCallback, submitButtonText, profiles }) => {\r\n const [name, setName] = useState(\"\");\r\n const [profileCode, setProfileCode] = useState(\"\");\r\n const [hostMode, setHostMode] = useState(\"player\");\r\n const { player } = useGameContext();\r\n const t = useFormatMessage();\r\n\r\n useEffect(() => {\r\n if(profiles.length){\r\n setProfileCode(profiles[0].code);\r\n }\r\n }, [profiles]);\r\n return (\r\n {\r\n event.preventDefault();\r\n }}\r\n >\r\n setName(target.value)}\r\n >\r\n
\r\n\r\n setProfileCode(target.value)}>\r\n {profiles.map(x => {\r\n return ({tr(t, x.name)});\r\n })}\r\n \r\n
\r\n setHostMode(target.value)}>\r\n } label={tr(t, 'game-mode-player')} />\r\n } label={tr(t, 'game-mode-participate-as-spectator')} />\r\n \r\n {\r\n if(name) {\r\n player.setPlayerName(name);\r\n formSubmitCallback(name, profileCode, hostMode);\r\n }\r\n }}\r\n style={mainButtonStyle}\r\n variant=\"contained\"\r\n disableElevation\r\n >\r\n {submitButtonText}\r\n \r\n \r\n );\r\n};\r\n\r\nCreateGameForm.propTypes = {\r\n formTitle: PropTypes.string,\r\n formSubmitCallback: PropTypes.func.isRequired,\r\n submitButtonText: PropTypes.string.isRequired,\r\n};\r\n\r\nCreateGameForm.defaultProps = {\r\n formTitle: \"\",\r\n};\r\n","import React from \"react\";\r\nimport { useLocation, useHistory } from 'react-router-dom'\r\nimport classNames from 'classnames';\r\nexport const LanguageSelector = (props) => {\r\n const location = useLocation();\r\n const history = useHistory();\r\n const splitedUri = location.pathname.split('/').filter(x => x);\r\n const languages = ['en', 'ru'];\r\n const activeLanguage = languages.find(x => x === splitedUri[0]) || 'en';\r\n const goToLanguage = code => {\r\n let parts = [...splitedUri];\r\n if( languages.includes(parts[0])) {\r\n parts.shift();\r\n }\r\n const newUri = [code, ...parts].join('/');\r\n history.push({\r\n pathname: `/${newUri}`\r\n });\r\n }\r\n return (\r\n
\r\n {languages.map(x => ( goToLanguage(x)}>\r\n {x}\r\n
))}\r\n \r\n );\r\n};","import React,{useState, useEffect} from \"react\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport moment from \"moment\";\r\nimport { CreateGameForm } from \"./CreateGameForm\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { realtimeConnection, ResponseStatus } from \"../services/realtimeConnection\";\r\nimport { GAME_HUB_METHODS } from \"../services/GameHubConstants\";\r\nimport { useServiceInjector } from \"../hooks/ServiceInjectorContext\";\r\nimport { LogoLoader } from \"./LogoLoader\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport logoUri from \"../assets/icons/scgo-logo.svg\";\r\nimport mainImageUrl from \"../assets/icons/create-new-game-main-image.svg\";\r\nimport ImageUrl1 from \"../assets/icons/create-new-game-image1.svg\";\r\nimport ImageUrl2 from \"../assets/icons/create-new-game-image2.svg\";\r\nimport ImageUrl3 from \"../assets/icons/create-new-game-image3.svg\";\r\nimport ImageUrl4 from \"../assets/icons/create-new-game-image4.svg\";\r\nimport TranslateWrapper from './TranslateWrapper';\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from './TranslateWrapper';\r\nimport { useParams } from \"react-router-dom\";\r\nimport {LanguageSelector} from './languageSelector';\r\nimport imgLogOut from \"../assets/icons/user-header-gray.png\";\r\n\r\nimport { AmplitudeService } from \"../services/AmplitudeService\";\r\nimport { useGameContext } from \"../hooks/GameContext\";\r\n\r\nconst dialogContainerStyle = { maxWidth: \"1024px\", margin: \"20px auto\", padding: \"15px\" };\r\n\r\nconst useStyles = makeStyles(() => ({\r\n page: {\r\n },\r\n header: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'space-between',\r\n padding: '7pt'\r\n },\r\n logoutForm: {\r\n width: \"auto\",\r\n },\r\n logoutButton: {\r\n fontSize: '14px',\r\n height: '30px',\r\n width: '30px',\r\n lineHeight: '30px',\r\n textAlign: 'center',\r\n border: '1px solid #9ca6b2',\r\n borderRadius: '100%',\r\n marginTop: '5px',\r\n cursor: 'pointer'\r\n },\r\n logoContainer: {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n width: \"220px\",\r\n paddingRight: '5px',\r\n marginRight: '10px'\r\n },\r\n logo: {\r\n background: `url(${logoUri}) no-repeat`,\r\n backgroundSize: \"contain\",\r\n backgroundPosition: \"center\",\r\n width: 180,\r\n height: 100,\r\n margin: \"0 10px\",\r\n },\r\n}));\r\n\r\nconst SessionStartScreenComponent = ({ history }) => {\r\n const { jwtTokenService } = useServiceInjector();\r\n const { locale } = useParams();\r\n const [loaded, setLoaded] = useState(false);\r\n const [showAll, setShowAll] = useState(false);\r\n const [sessions, setSessions] = useState([]);\r\n const [profiles, setProfiles] = useState([]);\r\n const t = useFormatMessage();\r\n const classes = useStyles();\r\n sessionStorage.setItem('createGame', 'on');\r\n \r\n const {\r\n player: { playerId, setIsSpectator, setIsHost, setPlayerId, setPlayerName, assignedUserStoryId, setAssignedUserStoryId },\r\n } = useGameContext();\r\n \r\n const createNewGameSession = async (name, profileCode, hostMode) => {\r\n setLoaded(true);\r\n await jwtTokenService.login(name);\r\n await realtimeConnection.stop();\r\n await realtimeConnection.start();\r\n\r\n realtimeConnection.setAmlitudeErrorHandler((error) => AmplitudeService.SendCreateGame(playerId, name, hostMode !== 'player', true, null, profileCode, {'error_type':error}));\r\n const { payload, status, hasErrors } = await realtimeConnection.invoke(GAME_HUB_METHODS.CreateSession, {\r\n name,\r\n profileCode,\r\n isSpectator: hostMode !== 'player',\r\n locale: locale || 'en',\r\n contry:null,\r\n region:null,\r\n });\r\n \r\n \r\n setLoaded(false);\r\n realtimeConnection\r\n .setSessionId(null);\r\n if(status === ResponseStatus.SubscriptionSingleGame){\r\n history.push({\r\n pathname: `/onlySingleGame`\r\n });\r\n return;\r\n }\r\n if(hasErrors){\r\n return;\r\n }\r\n history.push({\r\n pathname: `/${locale || 'en'}/start-game/${payload.sessionId}`,\r\n state: { isHost: true, logining: true }\r\n });\r\n setIsSpectator(hostMode !== 'player');\r\n setIsHost(true);\r\n AmplitudeService.SendCreateGame(playerId, name, hostMode !== 'player', true, payload.sessionId, profileCode)\r\n \r\n };\r\n \r\n useEffect(() => {\r\n jwtTokenService.loadGameProfiles().then((profiles)=> { setProfiles(profiles); })\r\n jwtTokenService.loadSessions().then((sessions) => { setSessions(sessions || []); })\r\n }, []);\r\n if(loaded){\r\n return ;\r\n }\r\n const viewSessions = showAll ? sessions : sessions.slice(0, 3); \r\n return (\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\n \r\n
\r\n

{tr(t, 'start-new-game-page-title')}

\r\n
\r\n {tr(t,\r\n
\r\n createNewGameSession(playerName, profileCode, hostMode)}\r\n submitButtonText={tr(t, 'start-new-game-btn-start-game')} profiles={profiles}\r\n />\r\n
\r\n
\r\n {viewSessions.length ? (
\r\n

{tr(t, 'previous-games')}

\r\n
\r\n {viewSessions.map(s => {\r\n return (
\r\n

{tr(t, 'session-item-lbl-key')} {s.key}

\r\n

{tr(t, 'session-item-lbl-team-name')} {s.teamName}

\r\n
{moment(s.createDate).format('MMMM Do YYYY, h:mm:ss a')}
\r\n

{s.isSpectator ? tr(t, 'game-mode-participate-as-spectator') : tr(t, 'game-mode-player')}

\r\n
);\r\n })} \r\n
\r\n {sessions.length > 3 ? () : null }\r\n
) : null}\r\n
\r\n
\r\n

{tr(t, 'game-instruction-block1-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block1-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block1-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block1-text4')}\r\n
      \r\n
    1. {tr(t, 'game-instruction-block1-text5')}
    2. \r\n
    3. {tr(t, 'game-instruction-block1-text6')}
    4. \r\n
    5. {tr(t, 'game-instruction-block1-text7')}
    6. \r\n
    \r\n
  • \r\n
\r\n
\r\n {tr(t,\r\n
\r\n
\r\n {tr(t,\r\n
\r\n

{tr(t, 'game-instruction-block2-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block2-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block2-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block2-text4')}
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{tr(t, 'game-instruction-block3-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block3-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block3-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block3-text4')}\r\n
      \r\n
    • {tr(t, 'game-instruction-block3-text5')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text6')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text7')}
    • \r\n
    \r\n
  • \r\n
  • {tr(t, 'game-instruction-block3-text8')}\r\n
      \r\n
    • {tr(t, 'game-instruction-block3-text9')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text10')}
    • \r\n
    \r\n
  • \r\n
\r\n
\r\n {tr(t,\r\n
\r\n
\r\n {tr(t,\r\n
\r\n

{tr(t, 'game-instruction-block4-text1')}

\r\n

{tr(t, 'game-instruction-block4-text2')}

\r\n

{tr(t, 'game-instruction-block4-text3')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block4-text4')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text5')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text6')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text7')}
  • \r\n
\r\n

{tr(t, 'game-instruction-block4-text8')}

\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\nexport const SessionStartScreen = TranslateWrapper(SessionStartScreenComponent);\r\n","import React, {useRef} from \"react\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport PropTypes from \"prop-types\";\r\nimport copyIcon from \"../../assets/icons/copy.png\"\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from '../TranslateWrapper';\r\nconst joinUriTextFieldStyle = {\r\n width: \"100%\",\r\n};\r\n\r\nconst flexContainerStyle = {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n width: \"93%\"\r\n};\r\n\r\nconst mainButtonStyle = {\r\n marginTop: 20,\r\n};\r\nconst inputContainer = {\r\n display: 'flex',\r\n width: \"100%\",\r\n}\r\nconst copyButton = {\r\n backgroundImage: `url('${copyIcon}')`,\r\n backgroundSize: '12pt 12pt',\r\n backgroundRepeat: 'no-repeat',\r\n fontSize: '0pt',\r\n width: '24pt',\r\n height: '24pt',\r\n backgroundPosition: 'center center',\r\n border: '1px solid #c3bdbd',\r\n borderRadius: '12pt',\r\n display: 'block',\r\n margin: '3pt',\r\n marginTop: '0pt',\r\n marginLeft: '8pt',\r\n cursor: 'pointer',\r\n backgroundColor: '#ffffff'\r\n}\r\n\r\n\r\nexport const HostWelcomeScreen = ({ startGame }) => {\r\n const textRef = useRef();\r\n const t = useFormatMessage();\r\n const copyToClipbord = () => {\r\n var copyText = textRef.current;\r\n copyText.select();\r\n copyText.setSelectionRange(0, 99999);\r\n document.execCommand(\"copy\");\r\n }\r\n const url = `${window.location}`;\r\n return (\r\n
\r\n

{tr(t, 'host-link-form-lbl-share')}

\r\n \r\n\r\n {\r\n event.preventDefault();\r\n startGame();\r\n }}\r\n style={mainButtonStyle}\r\n variant=\"contained\"\r\n disableElevation\r\n >\r\n {tr(t, 'host-link-form-btn-start')}\r\n \r\n \r\n );\r\n};\r\n\r\nHostWelcomeScreen.propTypes = {\r\n startGame: PropTypes.func.isRequired,\r\n};\r\n","import React,{useState, useEffect} from \"react\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\n\r\nimport { HostWelcomeScreen } from \"./WelcomeScreen/HostWelcomeScreen\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport logoUri from \"../assets/icons/scgo-logo.svg\";\r\nimport mainImageUrl from \"../assets/icons/create-new-game-main-image.svg\";\r\nimport ImageUrl1 from \"../assets/icons/create-new-game-image1.svg\";\r\nimport ImageUrl2 from \"../assets/icons/create-new-game-image2.svg\";\r\nimport ImageUrl3 from \"../assets/icons/create-new-game-image3.svg\";\r\nimport ImageUrl4 from \"../assets/icons/create-new-game-image4.svg\";\r\nimport TranslateWrapper from './TranslateWrapper';\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from './TranslateWrapper';\r\nimport {LanguageSelector} from './languageSelector';\r\nimport imgLogOut from \"../assets/icons/user-header-gray.png\";\r\nimport { AmplitudeService } from \"../services/AmplitudeService\";\r\nimport { useGameContext } from \"../hooks/GameContext\";\r\nconst dialogContainerStyle = { maxWidth: \"1024px\", margin: \"20px auto\", padding: \"15px\" };\r\n\r\nconst useStyles = makeStyles(() => ({\r\n page: {\r\n },\r\n header: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'space-between',\r\n padding: '7pt'\r\n },\r\n logoutForm: {\r\n display: 'flex',\r\n },\r\n logoutButton: {\r\n fontSize: '14px',\r\n height: '30px',\r\n width: '30px',\r\n lineHeight: '30px',\r\n textAlign: 'center',\r\n border: '1px solid #9ca6b2',\r\n borderRadius: '100%',\r\n marginTop: '5px',\r\n cursor: 'pointer'\r\n },\r\n logoContainer: {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n width: \"220px\",\r\n paddingRight: '5px',\r\n marginRight: '10px'\r\n },\r\n logo: {\r\n background: `url(${logoUri}) no-repeat`,\r\n backgroundSize: \"contain\",\r\n backgroundPosition: \"center\",\r\n width: 180,\r\n height: 100,\r\n margin: \"0 10px\",\r\n },\r\n}));\r\n\r\n\r\n\r\nconst SessionStartGameScreenComponent = ({ history }) => {\r\n const {\r\n player: { playerId,playerName, isHost, isSpectator},\r\n } = useGameContext();\r\n \r\n const { sessionId, locale } = useParams();\r\n const classes = useStyles();\r\n const t = useFormatMessage();\r\n sessionStorage.setItem('createGame', 'on');\r\n \r\n const startGame = () => {\r\n history.push({\r\n pathname: `/${locale || 'en'}/game/${sessionId}`,\r\n state: { isHost: true, logining: true }\r\n });\r\n AmplitudeService.SendStartGame(playerId, playerName, isSpectator, isHost, sessionId, null)\r\n };\r\n return (\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\n \r\n
\r\n

{tr(t, 'start-new-game-page-title')}

\r\n
\r\n {tr(t,\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

{tr(t, 'game-instruction-block1-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block1-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block1-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block1-text4')}\r\n
      \r\n
    1. {tr(t, 'game-instruction-block1-text5')}
    2. \r\n
    3. {tr(t, 'game-instruction-block1-text6')}
    4. \r\n
    5. {tr(t, 'game-instruction-block1-text7')}
    6. \r\n
    \r\n
  • \r\n
\r\n
\r\n {tr(t,\r\n
\r\n
\r\n {tr(t,\r\n
\r\n

{tr(t, 'game-instruction-block2-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block2-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block2-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block2-text4')}
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{tr(t, 'game-instruction-block3-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block3-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block3-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block3-text4')}\r\n
      \r\n
    • {tr(t, 'game-instruction-block3-text5')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text6')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text7')}
    • \r\n
    \r\n
  • \r\n
  • {tr(t, 'game-instruction-block3-text8')}\r\n
      \r\n
    • {tr(t, 'game-instruction-block3-text9')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text10')}
    • \r\n
    \r\n
  • \r\n
\r\n
\r\n {tr(t,\r\n
\r\n
\r\n {tr(t,\r\n
\r\n

{tr(t, 'game-instruction-block4-text1')}

\r\n

{tr(t, 'game-instruction-block4-text2')}

\r\n

{tr(t, 'game-instruction-block4-text3')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block4-text4')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text5')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text6')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text7')}
  • \r\n
\r\n

{tr(t, 'game-instruction-block4-text8')}

\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\nexport const SessionStartGameScreen = TranslateWrapper(SessionStartGameScreenComponent);\r\n","import React, { useState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { TextField, Button } from \"@material-ui/core\";\r\n\r\nimport { useGameContext } from \"../hooks/GameContext\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from './TranslateWrapper';\r\n\r\nconst flexContainerStyle = {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n};\r\n\r\nconst mainButtonStyle = {\r\n marginTop: 20,\r\n};\r\n\r\nexport const PlayerDetailsForm = ({ formTitle, formSubmitCallback, submitButtonText }) => {\r\n const [name, setName] = useState(\"\");\r\n const { player } = useGameContext();\r\n const t = useFormatMessage();\r\n\r\n return (\r\n
\r\n {formTitle &&

{formTitle}

}\r\n {\r\n event.preventDefault();\r\n }}\r\n >\r\n setName(target.value)}\r\n >\r\n {\r\n if(name){\r\n player.setPlayerName(name);\r\n formSubmitCallback(name);\r\n }\r\n }} className='mainButtonStyle'\r\n style={mainButtonStyle}\r\n variant=\"contained\"\r\n disableElevation\r\n >\r\n {submitButtonText}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nPlayerDetailsForm.propTypes = {\r\n formTitle: PropTypes.string,\r\n formSubmitCallback: PropTypes.func.isRequired,\r\n submitButtonText: PropTypes.string.isRequired,\r\n};\r\n\r\nPlayerDetailsForm.defaultProps = {\r\n formTitle: \"\",\r\n};\r\n","import React, { useState } from \"react\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport { realtimeConnection } from \"../../services/realtimeConnection\";\r\nimport { GAME_HUB_METHODS } from \"../../services/GameHubConstants\";\r\nimport { PlayerDetailsForm } from \"../PlayerDetailsForm\";\r\nimport { useServiceInjector } from \"../../hooks/ServiceInjectorContext\";\r\nimport logoUri from \"../../assets/icons/scgo-logo.svg\";\r\nimport mainImageUrl from \"../../assets/icons/create-new-game-main-image.svg\";\r\nimport ImageUrl1 from \"../../assets/icons/create-new-game-image1.svg\";\r\nimport ImageUrl2 from \"../../assets/icons/create-new-game-image2.svg\";\r\nimport ImageUrl3 from \"../../assets/icons/create-new-game-image3.svg\";\r\nimport ImageUrl4 from \"../../assets/icons/create-new-game-image4.svg\";\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { useParams } from \"react-router-dom\";\r\nimport { tr } from '../TranslateWrapper';\r\nimport { LanguageSelector } from '../languageSelector';\r\nimport { AmplitudeService } from \"../../services/AmplitudeService\"\r\nimport { useGameContext } from \"../../hooks/GameContext\";\r\n\r\nconst dialogContainerStyle = { maxWidth: \"1024px\", margin: \"20px auto\", padding: \"15px\" };\r\n\r\nconst useStyles = makeStyles(() => ({\r\n page: {\r\n },\r\n header: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'space-between',\r\n padding: '7pt'\r\n },\r\n logoutForm: {\r\n width: \"auto\",\r\n },\r\n logoutButton: {\r\n borderRadius: '4pt',\r\n border: '1pt solid #d8d8e6',\r\n backgroundColor: '#fff',\r\n width: 'auto',\r\n fontSize: '10pt',\r\n fontWeight: '700',\r\n textTransform: 'uppercase',\r\n lineHeight: '1.2',\r\n letterSpacing: '2.3pt',\r\n textAlign: 'center',\r\n color: '#040414',\r\n padding: '10pt 12pt 12pt 12pt',\r\n margin: '0',\r\n transition: 'all .3s ease-in-out',\r\n cursor: 'pointer'\r\n },\r\n logoContainer: {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n width: \"220px\",\r\n paddingRight: '5px',\r\n marginRight: '10px'\r\n },\r\n logo: {\r\n background: `url(${logoUri}) no-repeat`,\r\n backgroundSize: \"contain\",\r\n backgroundPosition: \"center\",\r\n width: 180,\r\n height: 100,\r\n margin: \"0 10px\",\r\n },\r\n}));\r\nconst RegularPlayerWelcomeScreen = ({ sessionId, startGame }) => {\r\n const [error, setError] = useState(null);\r\n const classes = useStyles();\r\n const { locale } = useParams();\r\n const t = useFormatMessage();\r\n\r\n const {\r\n player: { playerId, IsSpectator, IsHost, PlayerName, },\r\n } = useGameContext();\r\n\r\n const { jwtTokenService } = useServiceInjector();\r\n\r\n const joinGame=async (name) => {\r\n if(!name) {\r\n return;\r\n }\r\n try {\r\n await jwtTokenService.login(name);\r\n await realtimeConnection.stop();\r\n await realtimeConnection.start();\r\n const {hasErrors,message}=await realtimeConnection.invoke(GAME_HUB_METHODS.JoinSession,{\r\n name,\r\n sessionId,\r\n contry: null,\r\n region: null,\r\n });\r\n\r\n if(hasErrors) {\r\n setError(message);\r\n throw error;\r\n } else {\r\n startGame();\r\n }\r\n\r\n } catch(error) {\r\n realtimeConnection.setAmlitudeErrorHandler((Error) => AmplitudeService.SendJoinPlayer(playerId,name,IsSpectator,IsHost,sessionId,null,{'error_type': error}));\r\n }\r\n };\r\n\r\n return error ? (\r\n \r\n ) : (<> \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {tr(t,\r\n
\r\n \r\n joinGame(playerName)}\r\n submitButtonText={tr(t, 'join-player-btn-join')}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n

{tr(t, 'game-instruction-block1-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block1-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block1-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block1-text4')}\r\n
      \r\n
    1. {tr(t, 'game-instruction-block1-text5')}
    2. \r\n
    3. {tr(t, 'game-instruction-block1-text6')}
    4. \r\n
    5. {tr(t, 'game-instruction-block1-text7')}
    6. \r\n
    \r\n
  • \r\n
\r\n
\r\n {tr(t,\r\n
\r\n
\r\n {tr(t,\r\n
\r\n

{tr(t, 'game-instruction-block2-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block2-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block2-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block2-text4')}
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{tr(t, 'game-instruction-block3-text1')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block3-text2')}
  • \r\n
  • {tr(t, 'game-instruction-block3-text3')}
  • \r\n
  • {tr(t, 'game-instruction-block3-text4')}\r\n
      \r\n
    • {tr(t, 'game-instruction-block3-text5')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text6')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text7')}
    • \r\n
    \r\n
  • \r\n
  • {tr(t, 'game-instruction-block3-text8')}\r\n
      \r\n
    • {tr(t, 'game-instruction-block3-text9')}
    • \r\n
    • {tr(t, 'game-instruction-block3-text10')}
    • \r\n
    \r\n
  • \r\n
\r\n
\r\n {tr(t,\r\n
\r\n
\r\n {tr(t,\r\n
\r\n

{tr(t, 'game-instruction-block4-text1')}

\r\n

{tr(t, 'game-instruction-block4-text2')}

\r\n

{tr(t, 'game-instruction-block4-text3')}

\r\n
    \r\n
  • {tr(t, 'game-instruction-block4-text4')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text5')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text6')}
  • \r\n
  • {tr(t, 'game-instruction-block4-text7')}
  • \r\n
\r\n

{tr(t, 'game-instruction-block4-text8')}

\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nRegularPlayerWelcomeScreen.propTypes = {\r\n sessionId: PropTypes.string.isRequired,\r\n startGame: PropTypes.func.isRequired,\r\n};\r\n\r\nexport { RegularPlayerWelcomeScreen };\r\n\r\n","import React,{useState, useEffect} from \"react\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\n\r\nimport { RegularPlayerWelcomeScreen } from \"./WelcomeScreen/RegularPlayerWelcomeScreen\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport logoUri from \"../assets/icons/scgo-logo.svg\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport TranslateWrapper from './TranslateWrapper';\r\nimport {AmplitudeService} from \"../services/AmplitudeService\";\r\nimport { useGameContext } from \"../hooks/GameContext\";\r\n\r\nconst JoinToGameComponent = ({ history }) => {\r\n const { sessionId } = useParams();\r\n const { locale } = useParams();\r\n \r\n const {\r\n player: { playerName,playerId }} = useGameContext();\r\n\r\n const startGame = () => {\r\n history.push({\r\n pathname: `/${locale || 'en'}/game/${sessionId}`,\r\n state: { isHost: false, logining: false }\r\n });\r\n AmplitudeService.SendJoinPlayer(playerId, playerName, false, true, sessionId, null)\r\n };\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\nexport const JoinToGame = TranslateWrapper(JoinToGameComponent);\r\n","import React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport TranslateWrapper from './TranslateWrapper';\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from './TranslateWrapper';\r\n\r\nconst useStyles = makeStyles({\r\n contentCentered: {\r\n textAlign: \"center\",\r\n marginTop: \"40vh\",\r\n },\r\n});\r\n\r\nconst NotFoundComponent = (props) => {\r\n const classes = useStyles();\r\n const t = useFormatMessage();\r\n\r\n return (\r\n
\r\n \r\n \r\n 🤷‍♂️\r\n \r\n {tr(t, 'page-404-message')}\r\n \r\n {tr(t, props.location?.state?.message || '')}\r\n
\r\n );\r\n};\r\nexport const NotFound = TranslateWrapper(NotFoundComponent);\r\n","import React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport TranslateWrapper from './TranslateWrapper';\r\nimport { useFormatMessage } from 'react-intl-hooks';\r\nimport { tr } from './TranslateWrapper';\r\n\r\nconst useStyles = makeStyles({\r\n contentCentered: {\r\n textAlign: \"center\",\r\n marginTop: \"40vh\",\r\n },\r\n});\r\n\r\nconst ErrorPageComponent = (props) => {\r\n const classes = useStyles();\r\n const t = useFormatMessage();\r\n const linkStyle = {\r\n fontSize:'16pt',\r\n margin:'10pt',\r\n textDecotation:'underline',\r\n cursor:'pointer'\r\n };\r\n return (\r\n
\r\n \r\n \r\n 🤷‍♂️\r\n \r\n {tr(t, 'error-page-main-message')}
\r\n { window.location.href='/';}} style={linkStyle}>{tr(t, 'error-page-link-to-main')}\r\n
\r\n {tr(t, props.location?.state?.message || '')}\r\n
\r\n );\r\n};\r\nexport const ErrorPage = TranslateWrapper(ErrorPageComponent);\r\n","import React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport TranslateWrapper from './TranslateWrapper';\r\n\r\nconst useStyles = makeStyles({\r\n contentCentered: {\r\n textAlign: \"center\",\r\n marginTop: \"20vh\",\r\n },\r\n});\r\n\r\nconst OnlySingleGameComponent = (props) => {\r\n const classes = useStyles();\r\n const linkStyle = {\r\n fontSize:'16pt',\r\n margin:'10pt',\r\n textDecotation:'underline',\r\n cursor:'pointer'\r\n };\r\n return (\r\n
\r\n \r\n \r\n 🤷‍♂️\r\n
\r\n Sorry, you use the Free version that limited to one session at a time.
\r\n Want to use ScrumCardGame for the professional workshop?
\r\n Please buy a Monthly or Annual subscription https://scrumcardgame.com/shop/
\r\n
\r\n
\r\n );\r\n};\r\nexport const OnlySingleGame = TranslateWrapper(OnlySingleGameComponent);\r\n","export class JwtTokenService {\r\n constructor() {\r\n this.apiUrl =\r\n !process.env.NODE_ENV || process.env.NODE_ENV === \"development\"\r\n ? process.env.REACT_APP_DEVELOPMENT_API_URL + tokenEndpointPath\r\n : tokenEndpointPath;\r\n }\r\n\r\n async login(name) {\r\n const response = await postData(`${this.apiUrl}/login`, { playerName: name });\r\n this.setToken(response.token);\r\n }\r\n setToken(token){\r\n window.sessionStorage.setItem(\"auth_token\", token);\r\n }\r\n async loadGameProfiles() {\r\n return await getData(`${this.apiUrl}/profiles`);\r\n }\r\n async loadSessions() {\r\n return await getData(`${this.apiUrl}/sessions`);\r\n }\r\n async getTranslations(locale) {\r\n return await getData(`${this.apiUrl}/translations?code=${locale || 'en'}`);\r\n }\r\n getToken(){\r\n return window.sessionStorage.getItem(\"auth_token\");\r\n }\r\n}\r\n\r\nconst tokenEndpointPath = \"/api/token\";\r\n\r\nasync function postData(url = '', data = {}) {\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n cache: 'no-cache',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n return await response.json();\r\n}\r\nasync function getData(url = '') {\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n cache: 'no-cache',\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n\r\n return await response.json();\r\n}","import React, { useState, useEffect } from \"react\";\r\nimport { BrowserRouter, Switch, Route, useHistory } from \"react-router-dom\";\r\n\r\nimport { GameShell } from \"./GameShell\";\r\nimport { GameContextProvider } from \"../hooks/GameContext\";\r\nimport { ServiceInjector } from \"../hooks/ServiceInjectorContext\";\r\nimport { SessionStartScreen } from \"./SessionStartScreen\";\r\nimport { SessionStartGameScreen } from \"./SessionStartGameScreen\";\r\nimport { JoinToGame } from \"./JoinToGame\";\r\nimport { NotFound } from \"./NotFound\";\r\nimport { ErrorPage } from \"./ErrorPage\";\r\nimport { LogoLoader } from \"./LogoLoader\";\r\nimport { OnlySingleGame } from './OnlySingleGame';\r\nimport { realtimeConnection } from \"../services/realtimeConnection\";\r\nimport { JwtTokenService } from \"../services/jwtTokenService\";\r\nimport { ToastProvider, useToasts } from 'react-toast-notifications';\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useServiceInjector } from \"../hooks/ServiceInjectorContext\";\r\n\r\nconst App = () => {\r\n const { addToast } = useToasts();\r\n const history = useHistory();\r\n const { sessionId } = useParams();\r\n\r\n const [isConnected, setConnected] = useState(false);\r\n const globalHandler = (response) => {\r\n addToast(({response?.message || 'Internal error'}), { appearance: 'error', autoDismiss: true });\r\n history.push(`/${response?.locale || 'en'}/errorPage`);\r\n\r\n };\r\n useEffect(() => {\r\n realtimeConnection\r\n .init({globalHandler: globalHandler});\r\n realtimeConnection\r\n .setSessionId(sessionId);\r\n realtimeConnection\r\n .start()\r\n .then(() => setConnected(true))\r\n .catch((err) => {\r\n return console.error(err.toString());\r\n });\r\n }, []);\r\n\r\n if (!isConnected) {\r\n return ;\r\n }\r\n const base = '/:locale([a-zA-Z]{2})?';\r\n return (\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\n\r\nexport const Root = () => {\r\n\r\n return (\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\n};\r\n","import \"./Montserrat.css\";\r\nimport \"./index.css\";\r\nimport \"fontsource-roboto\";\r\n\r\nimport React from \"react\";\r\nimport { render } from \"react-dom\";\r\n\r\nimport { Root } from \"./components/Root\";\r\n\r\nrender(, document.getElementById(\"root\"));\r\n","module.exports = __webpack_public_path__ + \"static/media/scgo-logo.a840bdbb.svg\";","module.exports = __webpack_public_path__ + \"static/media/alert.51f373af.svg\";","module.exports = __webpack_public_path__ + \"static/media/create-new-game-main-image.75b128ba.svg\";","module.exports = __webpack_public_path__ + \"static/media/create-new-game-image1.0781affa.svg\";","module.exports = __webpack_public_path__ + \"static/media/create-new-game-image2.2ee69cd6.svg\";","module.exports = __webpack_public_path__ + \"static/media/create-new-game-image3.72325125.svg\";","module.exports = __webpack_public_path__ + \"static/media/create-new-game-image4.0dc2a607.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeQAAAIACAYAAABTkx/wAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE7WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTExLTAzVDE4OjM3OjU0KzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMS0wM1QxOTowMzoyMiswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMS0wM1QxOTowMzoyMiswMjowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M2RjMTgwNDYtODYyYi1kNDQ1LTg2MDYtMTU0MDVmZThlYTU5IiB4bXBNTTpEb2N1bWVudElEPSJ4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\""],"sourceRoot":""}