{"version":3,"sources":["UUIDGenerator.js","images/settingsIcon.png","create/SettingsControl.js","InputBox.js","ClickPositionHelper.js","create/SettingsPanel.js","Matchup.js","Round.js","BracketCreationHelper.js","RoundHelper.js","MatchupDisplay.js","BracketRound.js","BracketDisplay.js","images/reset-icon.png","DoubleElimBracketHelper.js","create/BracketContainer.js","Constants.js","HomeControl.js","images/trophy.png","create/PublishControl.js","images/publish-icon.png","images/copy-link-icon.png","images/open-new-tab-icon.png","create/PublishPanel.js","callouts/CalloutBuilder.js","callouts/CalloutBuilderMock.js","callouts/CalloutFactory.js","Toast.js","images/check.svg","images/error.svg","images/loading-icon.gif","LoadingWall.js","localstorage/StorageManager.js","localstorage/StorageHelper_CreateBrackets.js","localstorage/StorageHelper_ViewBrackets.js","localstorage/StorageHelper_BracketDraft.js","ParameterRetrieval.js","create/AppContainer.js","view/ViewOnlyBracketContainer.js","view/ViewOnlyAppContainer.js","images/right-arrow.png","landing/CreateBracketPanel.js","landing/ViewBracketPanel.js","images/cancel-icon.png","Panel.js","images/tournament-theme.png","landing/LandingNavigation.js","App.js","reportWebVitals.js","index.js"],"names":["generateUUID","uuid","SettingsControl","props","state","toggleSettingsPanel","bind","this","isOpen","closePanel","openPanel","className","onClick","src","settingsIcon","React","Component","InputBox","value","type","valueChangedCallback","prevProps","prevState","setState","class","name","id","placeholder","checked","autoComplete","onChange","rows","cols","event","target","isClickInBox","x","y","box","left","right","top","bottom","SettingsPanel","defaultRawContestants","contestantList","forEach","contestant","defaultTourneyName","tourneyName","displayPanel","rawContestantNames","contestantCount","randomSeeding","setDoubleElim","setHideByes","setRandomSeeding","setRawContestants","organizeContestants","closePanelOnOutsideClick","setTourneyName","clearContestants","document","addEventListener","panel","querySelector","getBoundingClientRect","isRandom","currentContestants","split","shuffle","push","seed","setContestants","doubleElimStatus","hideByesStatus","isRandomSeeding","a","j","i","length","Math","floor","random","isDoubleElim","hideByes","Matchup","players","filter","player","isBye","Round","roundNumber","matchups","byeCount","matchup","getAllMatchups","tourneyType","competitorsPerMatchup","competitors","base","numberOfCompetitors","numberOfRounds","ceil","log10","firstRoundSeeding","numberOfCompetitorsWithoutByes","pow","seeds","slice","temp","concat","splice","getFirstRoundSeeding","bracket","firstRoundMatchups","seed1","seed2","competitor1","competitor2","group","round","getFirstRoundMatchups","remainingMatchups","numberOfMatchupsInRound","matchupsInRound","alternateName","getRemainingMatchups","currentRound","nextRound","currentMatchup","nextRoundGroup","newPosition","futureMatchup","find","nextRoundMatchup","index","winner","updateByesToNextRound","advanceContestantToNextRound","isWinner","getNextRoundMatchup","isDoubleElimPossibleFinal","newPlayer","losingPlayer","matchupPlayer","positionOfPlayerInMatchup","getPositionOfPlayerInMatchup","propogatePlayerOnWinCorrection","targetPlayer","findIndex","getContestantsFromBracket","contestants","sort","b","isAllByes","MatchupDisplay","advanceContestant","height","previousPadding","topPadding","paddingSizeRound","isDoubleElimFinal","individualRound","format","paddingTop","paddingBottom","isLocked","currentTarget","dataset","loser","elements","map","heightStyle","style","previousId","previousRound","previousGroup","getPaddingBetweenMatchups","BracketRound","bracketRound","BracketDisplay","bracketControlRef","createRef","roundToDisplay","displayAllRounds","changeRoundToDisplay","updateRoundToDisplay","header","ref","getRoundControls","getResetBracketButton","pop","resetBracketButton","onReset","current","querySelectorAll","icon","includes","replace","numberOfAllByeRounds","shift","getHeader","getBracketControls","displayRound","getDoubleElimMatchups","losersBracket","roundOffset","numberOfMatchesAddedFromMain","numberOfMatchesAddedFromLoser","numberOfMatches","isOdd","interimMatchups","createMatchup","originalBracketGroup","nextOnLoss","position","doubleElimBracket","elimGroup","elimPosition","otherPosition","nextMatchupResponse","getNextMatchup","previousMatchup","isOnlyByes","setByes","addDoubleRoundsToMainBracket","possibleFinalMatchup","possibleFinalRound","finalMatchup","finalRound","undefined","number","advanceDoubleElimContestantToNextRound","switchFuturePlayers","switchTwoPlayers","futureMatchupResponse","currentMatchupRound","doesNextRoundHaveMembersFromWinnersBracket","BracketContainer","defaultBracket","defaultDoubleElimBracket","doubleElimSetup","saveBrackets","advanceDoubleElimContestant","recreateBracket","getDoubleElimDisplay","getBracketDisplay","advanceLoserForFinalMatch","clearFinalMatch","nextMatchupDescribe","nextMatchup","newLoser","otherPlayer","moveLoserToDoubleElimBracket","updateFinalRoundOfMainBracket","doubleElimDisplay","bracketDisplay","constants","MOCK_STORAGE","MOCK_API","SERVER_URL","HOST_URL","COOKIE_USER","COOKIE_USER_EMAIL","COOKIE_HOURS_EXPIRATION","SCREEN_HOME","SCREEN_USER_PROFILE","SCREEN_POLL_SUMMARY","POLL_DISPLAY_ACTIVE","SCREEN_OPEN_POLL","SCREEN_POLL_RESULTS","RECENT_POLL_COOKIE_PREFIX","LOCAL_SUBMISSION_EXPIRATION","homeControl","navigateToHome","window","location","href","Constants","PublishControl","togglePublishPanel","PublishPanel","bracketLinkRef","publishBracket","getShareableLinkUI","copyLink","navigator","userAgent","match","text","textArea","createElement","body","appendChild","copyText","createTextArea","select","setSelectionRange","clipboard","writeText","removeChild","showToast","open","bracketId","readonly","label","copyLinkIcon","openLinkInNewTab","openNewTabIcon","CalloutBuilder","key","makeGetCallout","bracketid","endpoint","Promise","resolve","reject","url","options","method","headers","JSON","stringify","fetch","then","response","json","data","console","dir","catch","error","makePostCallout","makePatchCallout","params","paramString","Object","keys","reduce","previous","status","log","CalloutBuilderMock","calloutBuilder","Toast","toastList","autoDelete","autoDeleteTime","useState","list","setList","useEffect","interval","setInterval","deleteToast","clearInterval","listItemIndex","e","toastListItem","toast","backgroundColor","alt","title","description","LoadingWall","classes","isLoading","loadingIcon","StorageManager","setValue","localStorage","setItem","getValue","getItem","getValueAsJSON","stringValue","parse","setValueFromJSON","storeKey","keyType","clearKey","getKey","unescape","STORAGE_KEY","MOCK","addRecentCreateBracket","recentBrackets","newBrackets","addRecentViewBracket","setBracketDraft","draft","getURLParam","paramKey","Proxy","URLSearchParams","search","get","searchParams","prop","TEMP_CONTESTANTS","AppContainer","displaySettingsPanel","displayPublishPanel","brackets","toastMessages","toastPosition","viewOnlyBracketId","originalLoad","openSettingsPanel","closeSettingsPanel","openPublishPanel","closePublishPanel","showErrorToast","showInfoToast","getBracket","navigateToCreate","navigateToLandingPage","getAdminBracket","result","view_id","lastdate","Date","getTime","finally","bracketInfo","updateBracket","bracket_id","showSuccessToast","createBracket","setTimeout","storeDraftLocally","message","errorIcon","checkIcon","conditionalDisplay","ViewOnlyBracketContainer","showLoad","getViewOnlyBracket","ViewOnlyAppContainer","CreateBracketPanel","createId","bracketsToUpdate","openCreateLink","setCreateId","listOfBracketsToUpdate","unshift","navigateToNew","RightArrowIcon","ViewBracketPanel","viewId","bracketsToView","openViewLink","setViewId","navigateToView","listOfBracketsToView","Panel","panelBackgroundClass","shouldDisplay","headerText","cancelIcon","content","LandingNav","displayViewPanel","displayCreatePanel","openCreatePanel","openViewPanel","closeViewPanel","closeCreatePanel","LogoIcon","App","charset","rel","exact","path","element","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.caa50896.chunk.js","sourcesContent":["import { uuid } from 'uuidv4';\r\n\r\nexport function generateUUID(){\r\n return uuid();\r\n}","export default __webpack_public_path__ + \"static/media/settingsIcon.4f141ffc.png\";","import React from \"react\";\r\nimport './SettingsControl.css';\r\nimport settingsIcon from '../images/settingsIcon.png';\r\n\r\nclass SettingsControl extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {};\r\n\r\n this.toggleSettingsPanel = this.toggleSettingsPanel.bind(this);\r\n }\r\n\r\n toggleSettingsPanel(){\r\n if(this.props.isOpen){\r\n this.props.closePanel();\r\n }else{\r\n this.props.openPanel();\r\n }\r\n }\r\n\r\n \r\n\r\n\r\n render(){\r\n\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default SettingsControl;\r\n","import React from \"react\";\r\nimport './InputBox.css';\r\n\r\nclass InputBox extends React.Component {\r\n constructor(props){\r\n super(props);\r\n this.state = {\r\n value: this.props.value,\r\n type: this.props.type ? this.props.type : 'text'\r\n };\r\n this.valueChangedCallback = this.valueChangedCallback.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState){\r\n if(prevProps.value != this.props.value){\r\n this.setState({value: this.props.value});\r\n }\r\n }\r\n\r\n render(){\r\n if(this.state.type === 'checkbox'){\r\n return ()\r\n }else if(this.state.type === 'textarea'){\r\n return \r\n }else{ \r\n return ()\r\n }\r\n }\r\n\r\n valueChangedCallback(event){\r\n if(this.state.type == 'checkbox'){\r\n this.setState({value: event.target.checked});\r\n }else{\r\n this.setState({value: event.target.value});\r\n }\r\n if(this.props.valueChangedCallback){\r\n this.props.valueChangedCallback(event);\r\n }\r\n \r\n }\r\n}\r\n\r\nexport default InputBox;","export function isClickInBox(x, y, box){\r\n return (x >= box.left && x<= box.right && y>= box.top && y <= box.bottom);\r\n}","import React from \"react\";\r\nimport './SettingsPanel.css';\r\nimport InputBox from \"../InputBox\";\r\nimport {generateUUID} from \"../UUIDGenerator\";\r\nimport {isClickInBox} from \"../ClickPositionHelper\";\r\n\r\nclass SettingsPanel extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n\r\n let defaultRawContestants = '';\r\n if(this.props.contestantList){\r\n this.props.contestantList.forEach(contestant => {\r\n defaultRawContestants += contestant.name + '\\n';\r\n })\r\n }\r\n let defaultTourneyName = this.props.tourneyName ? this.props.tourneyName : '';\r\n\r\n this.state = {\r\n displayPanel: false,\r\n rawContestantNames: defaultRawContestants,\r\n contestantList: [],\r\n contestantCount: 0,\r\n randomSeeding: this.props.randomSeeding ? this.props.randomSeeding : false,\r\n tourneyName: defaultTourneyName\r\n };\r\n\r\n this.setDoubleElim = this.setDoubleElim.bind(this);\r\n this.setHideByes = this.setHideByes.bind(this);\r\n this.setRandomSeeding = this.setRandomSeeding.bind(this);\r\n this.setRawContestants = this.setRawContestants.bind(this);\r\n this.organizeContestants = this.organizeContestants.bind(this);\r\n this.closePanelOnOutsideClick = this.closePanelOnOutsideClick.bind(this);\r\n this.setTourneyName = this.setTourneyName.bind(this);\r\n this.clearContestants = this.clearContestants.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener('click', this.closePanelOnOutsideClick);\r\n }\r\n \r\n closePanelOnOutsideClick(event) {\r\n let panel = document.querySelector('#settingsPanel');\r\n if(panel){\r\n if (!isClickInBox(event.x, event.y, panel.getBoundingClientRect())) {\r\n this.props.closePanel();\r\n }\r\n }\r\n }\r\n\r\n setRawContestants(event){\r\n this.setState({rawContestantNames: event.target.value});\r\n this.organizeContestants(event.target.value, this.state.randomSeeding);\r\n }\r\n\r\n organizeContestants(rawContestantNames, isRandom){\r\n\r\n let currentContestants = rawContestantNames.split(\"\\n\");\r\n if(isRandom){\r\n currentContestants = this.shuffle([...currentContestants]);\r\n }\r\n\r\n let contestantList = [];\r\n let contestantCount = 0;\r\n currentContestants.forEach((contestant) => {\r\n if(contestant !== ''){\r\n contestantCount++;\r\n contestantList.push({name: contestant, seed: contestantCount, id: generateUUID()});\r\n }\r\n });\r\n\r\n this.setState({\r\n contestantList: contestantList,\r\n contestantCount: contestantCount\r\n });\r\n\r\n this.props.setContestants(contestantList);\r\n }\r\n\r\n setDoubleElim(event){\r\n let doubleElimStatus = event.target.checked;\r\n this.props.setDoubleElim(doubleElimStatus);\r\n }\r\n\r\n setTourneyName(event){\r\n let name = event.target.value;\r\n this.props.setTourneyName(name);\r\n }\r\n\r\n setHideByes(event){\r\n let hideByesStatus = event.target.checked;\r\n this.props.setHideByes(hideByesStatus);\r\n }\r\n\r\n setRandomSeeding(event){\r\n let isRandomSeeding = event.target.checked;\r\n this.setState({randomSeeding: isRandomSeeding})\r\n this.organizeContestants(this.state.rawContestantNames, isRandomSeeding);\r\n }\r\n\r\n clearContestants(event){\r\n this.setState({rawContestantNames: ''});\r\n this.props.clearContestants();\r\n }\r\n\r\n shuffle(a) {\r\n var j, x, i;\r\n for (i = a.length - 1; i > 0; i--) {\r\n j = Math.floor(Math.random() * (i + 1));\r\n x = a[i];\r\n a[i] = a[j];\r\n a[j] = x;\r\n }\r\n return a;\r\n }\r\n render(){\r\n\r\n return (\r\n
\r\n
\r\n\r\n
\r\n
Tourney Name
\r\n \r\n
\r\n\r\n\r\n
\r\n
Double Elimination Tournament
\r\n \r\n
\r\n\r\n \r\n
\r\n
Hide Byes
\r\n \r\n
\r\n\r\n
\r\n
Random Seeding
\r\n \r\n
\r\n \r\n
\r\n
Add Contestants
\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 default SettingsPanel;\r\n","import {generateUUID} from './UUIDGenerator';\r\n\r\nclass Matchup{\r\n id;\r\n players;\r\n round;\r\n group;\r\n isBye;\r\n nextOnLoss;\r\n winner;\r\n\r\n constructor(players){\r\n this.id = generateUUID();\r\n this.players = players;\r\n // this.round = round;\r\n // this.group = group;\r\n }\r\n\r\n isOnlyByes(){\r\n let byePlayers = this.players.filter(player => {\r\n if(player){\r\n return player.isBye;\r\n }\r\n });\r\n\r\n return (byePlayers.length === this.players.length);\r\n }\r\n\r\n hasAllContestants(){\r\n \r\n let validPlayers = this.players.filter((player) => {\r\n return !!player && (player.name || player.isBye);\r\n });\r\n\r\n return validPlayers.length === this.players.length;\r\n }\r\n // getWinner(){\r\n // let winner = this.players.filter(player => {\r\n // if(player){\r\n // return player.isBye;\r\n // }\r\n // });\r\n // }\r\n\r\n // getLosers(){\r\n // let winner = this.players.filter(player => {\r\n // if(player){\r\n // return player.isBye;\r\n // }\r\n // });\r\n // }\r\n\r\n}\r\n\r\nexport default Matchup;","class Round{\r\n matchups;\r\n isAllByes;\r\n roundNumber;\r\n\r\n constructor(roundNumber, matchups){\r\n this.roundNumber = roundNumber;\r\n this.matchups = matchups;\r\n }\r\n\r\n isAllByes(){\r\n let byeCount = 0;\r\n this.matchups.forEach(matchup => {\r\n if(matchup.isBye){\r\n byeCount++;\r\n }\r\n });\r\n if(byeCount === this.matchups.length){\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n}\r\n\r\nexport default Round;","import Matchup from './Matchup';\r\nimport Round from './Round';\r\n\r\nexport function getAllMatchups(tourneyType, competitorsPerMatchup, competitors){\r\n let numberOfCompetitors = competitors.length;\r\n let numberOfRounds = Math.ceil(getLog(competitorsPerMatchup, numberOfCompetitors));\r\n // let numberOfFirstRoundMatchups = Math.pow(competitorsPerMatchup, numberOfRounds-1);\r\n // let numberOfPlayinMatchups = numberOfCompetitors % Math.pow(competitorsPerMatchup, numberOfRounds);\r\n // let numberOfByes = numberOfCompetitors - (numberOfPlayinMatchups * 2);\r\n\r\n let firstRoundSeeding = getFirstRoundSeeding(competitorsPerMatchup, numberOfRounds);\r\n let bracket = [];\r\n bracket[0] = new Round(0, getFirstRoundMatchups(firstRoundSeeding, competitors)); \r\n bracket = bracket.concat(getRemainingMatchups(numberOfRounds, competitorsPerMatchup));\r\n updateByesToNextRound(bracket, competitorsPerMatchup);\r\n return bracket;\r\n}\r\n\r\nfunction getFirstRoundMatchups(firstRoundSeeding, competitors){\r\n let firstRoundMatchups = [];\r\n for(let i = 0; i 0; i--){\r\n let numberOfMatchupsInRound = Math.pow(competitorsPerMatchup, i - 1);\r\n let matchupsInRound = [];\r\n for(let j = 0; j < numberOfMatchupsInRound; j++){\r\n let matchup = new Matchup([null, null]);\r\n matchup.group = j;\r\n matchup.round = numberOfRounds - i;\r\n matchupsInRound.push(matchup);\r\n }\r\n let round = new Round(numberOfRounds - i, matchupsInRound);\r\n if(round.roundNumber == numberOfRounds - 1){\r\n round.alternateName = 'Championship';\r\n }\r\n remainingMatchups.push(round);\r\n }\r\n return remainingMatchups;\r\n}\r\n\r\nfunction updateByesToNextRound(bracket, competitorsPerMatchup){\r\n let currentRound = 0;\r\n let nextRound = 1;\r\n if(bracket.length > 1){\r\n bracket[currentRound].matchups.forEach(currentMatchup => {\r\n if(currentMatchup.isBye){\r\n let nextRoundGroup = Math.floor(currentMatchup.group / competitorsPerMatchup);\r\n let newPosition = currentMatchup.group % competitorsPerMatchup;\r\n let futureMatchup = bracket[nextRound].matchups.find(nextRoundMatchup => {\r\n return nextRoundMatchup.group === nextRoundGroup;\r\n });\r\n\r\n currentMatchup.players.forEach((player, index) => {\r\n if(player && !player.isBye){\r\n futureMatchup.players[newPosition] = player;\r\n currentMatchup.winner = player.id;\r\n }\r\n })\r\n \r\n }\r\n });\r\n\r\n }\r\n}\r\n\r\nexport function advanceContestantToNextRound(bracket, competitorsPerMatchup, player, currentMatchup, isWinner){\r\n let nextRound = currentMatchup.round + 1;\r\n currentMatchup.winner = player.id;\r\n if(bracket.length > nextRound){\r\n \r\n let newPosition = currentMatchup.group % competitorsPerMatchup;\r\n let futureMatchup = getNextRoundMatchup(bracket, currentMatchup, competitorsPerMatchup);\r\n\r\n //If we're changing the result that will impact an already decided future contest\r\n if(futureMatchup.winner && !futureMatchup.isDoubleElimPossibleFinal){\r\n \r\n futureMatchup.players[newPosition] = player; \r\n\r\n propogatePlayerOnWinCorrection(bracket, player, currentMatchup, futureMatchup);\r\n }else{\r\n futureMatchup.players[newPosition] = player; \r\n } \r\n\r\n }\r\n return bracket;\r\n\r\n}\r\n\r\nfunction propogatePlayerOnWinCorrection(bracket, newPlayer, currentMatchup, futureMatchup){\r\n let losingPlayer = currentMatchup.players.find(matchupPlayer => {\r\n return !!matchupPlayer && matchupPlayer.id !== newPlayer.id;\r\n });\r\n if(futureMatchup.winner === losingPlayer.id){\r\n futureMatchup.winner = newPlayer.id;\r\n }\r\n futureMatchup = getNextRoundMatchup(bracket, futureMatchup, 2);\r\n if(futureMatchup){\r\n let positionOfPlayerInMatchup = getPositionOfPlayerInMatchup(futureMatchup, losingPlayer);\r\n while(positionOfPlayerInMatchup >= 0 && !futureMatchup.isDoubleElimPossibleFinal){\r\n futureMatchup.players[positionOfPlayerInMatchup] = newPlayer;\r\n if(futureMatchup.winner === losingPlayer.id){\r\n futureMatchup.winner = newPlayer.id;\r\n }\r\n futureMatchup = getNextRoundMatchup(bracket, futureMatchup, 2);\r\n \r\n //If we get to the end of the bracket\r\n if(futureMatchup == null){\r\n positionOfPlayerInMatchup = -1;\r\n }else{\r\n positionOfPlayerInMatchup = getPositionOfPlayerInMatchup(futureMatchup, losingPlayer);\r\n }\r\n }\r\n\r\n if(futureMatchup.isDoubleElimPossibleFinal && positionOfPlayerInMatchup === 0){\r\n futureMatchup.players[positionOfPlayerInMatchup] = newPlayer;\r\n if(futureMatchup.winner === losingPlayer.id){\r\n futureMatchup.winner = newPlayer.id;\r\n }\r\n }\r\n\r\n }\r\n}\r\n\r\nfunction getNextRoundMatchup(bracket, currentMatchup, competitorsPerMatchup){\r\n let futureMatchup = null;\r\n let nextRound = currentMatchup.round + 1;\r\n if(bracket.length > nextRound){\r\n let nextRoundGroup = Math.floor(currentMatchup.group / competitorsPerMatchup);\r\n let newPosition = currentMatchup.group % competitorsPerMatchup;\r\n futureMatchup = bracket[nextRound].matchups.find(nextRoundMatchup => {\r\n return nextRoundMatchup.group === nextRoundGroup;\r\n });\r\n }\r\n return futureMatchup;\r\n}\r\n\r\nfunction getPlayerInMatchup(matchup, targetPlayer){\r\n let playerInMatchup = matchup.players.find(player => {\r\n return (player.id === targetPlayer.id);\r\n });\r\n return playerInMatchup;\r\n}\r\n\r\nfunction getPositionOfPlayerInMatchup(matchup, targetPlayer){\r\n let playerPositionInMatchup = matchup.players.findIndex((player, index) => {\r\n return (!!player && player.id === targetPlayer.id);\r\n });\r\n return playerPositionInMatchup;\r\n}\r\n\r\n\r\nfunction getFirstRoundSeeding(competitorsPerMatchup, numberOfRounds){\r\n let numberOfCompetitorsWithoutByes = Math.pow(competitorsPerMatchup, numberOfRounds)\r\n\r\n let seeds = [];\r\n for(let i = 0; i < numberOfCompetitorsWithoutByes; i++){\r\n seeds.push(i);\r\n }\r\n\r\n\r\n let slice = 1\r\n while (slice < seeds.length/2){\r\n let temp = seeds;\r\n seeds = []\r\n \r\n while (temp.length > 0){\r\n seeds = seeds.concat(temp.splice(0, slice)); // n from the beginning\r\n seeds = seeds.concat(temp.splice(temp.length - slice, slice)); // n from the end\r\n }\r\n\r\n slice *= 2\r\n }\r\n\r\n return seeds;\r\n}\r\n\r\n\r\n\r\nfunction getLog(base, x){\r\n return Math.log10(x)/Math.log10(base);\r\n}\r\n\r\n\r\nexport function getContestantsFromBracket(bracket){\r\n\r\n let contestants = [];\r\n bracket[0].matchups.forEach(matchup => {\r\n if(matchup.players[0].id){\r\n contestants.push(matchup.players[0]);\r\n }\r\n if(matchup.players[1].id){\r\n contestants.push(matchup.players[1]);\r\n }\r\n });\r\n\r\n contestants = contestants.sort((a, b) => {\r\n if(a.seed <= b.seed){\r\n return -1;\r\n }else{\r\n return 1;\r\n }\r\n })\r\n\r\n return contestants;\r\n}","export function isAllByes(round){\r\n let byeCount = 0;\r\n round.matchups.forEach(matchup => {\r\n if(matchup.isBye){\r\n byeCount++;\r\n }\r\n });\r\n if(byeCount === round.matchups.length){\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function hasAllContestants(players){\r\n let validPlayers = players.filter((player) => {\r\n return !!player && (player.name || player.isBye);\r\n });\r\n\r\n return validPlayers.length === players.length;\r\n}","import React from \"react\";\r\nimport './MatchupDisplay.css';\r\nimport {hasAllContestants} from './RoundHelper';\r\n\r\nclass MatchupDisplay extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {};\r\n\r\n this.advanceContestant = this.advanceContestant.bind(this);\r\n }\r\n\r\n getPaddingBetweenMatchups(){\r\n let height = this.props.height;\r\n let previousPadding = 0;\r\n let topPadding = 0;\r\n\r\n let paddingSizeRound = this.props.round;\r\n paddingSizeRound = this.props.matchup.isDoubleElimPossibleFinal ? paddingSizeRound - 1 : paddingSizeRound;\r\n paddingSizeRound = this.props.matchup.isDoubleElimFinal ? paddingSizeRound - 2 : paddingSizeRound;\r\n if(this.props.individualRound){\r\n paddingSizeRound = 1;\r\n }\r\n if(this.props.format === 'tournament'){\r\n for(let i = 1; i < paddingSizeRound; i++){\r\n topPadding = previousPadding * 2 + (height / 2); \r\n previousPadding = topPadding;\r\n }\r\n }\r\n \r\n\r\n\r\n return {\r\n paddingTop: + topPadding + \"px\",\r\n paddingBottom: + topPadding + \"px\",\r\n height: height + \"px\"\r\n };\r\n }\r\n\r\n advanceContestant(event){\r\n if(!this.props.isLocked){\r\n let id = event.currentTarget.dataset.name;\r\n let player = this.props.matchup.players.find((player) => {\r\n if(player && !player.isBye && player.name){\r\n return player.id === id\r\n }\r\n }) \r\n let loser = this.props.matchup.players.find((player) => {\r\n if(player && !player.isBye && player.name){\r\n return player.id !== id;\r\n }\r\n })\r\n\r\n if(hasAllContestants(this.props.matchup.players)){\r\n this.props.advanceContestant(player, loser, this.props.matchup);\r\n }\r\n \r\n }\r\n }\r\n\r\n render(){\r\n let hideByes = this.props.hideByes;\r\n let matchupGroup = (this.props.matchup.round + 1) + '.' + (this.props.matchup.group + 1);\r\n\r\n let elements = [];\r\n elements = this.props.matchup.players.map((contestant, index) => {\r\n if(this.props.matchup.isBye && hideByes){\r\n matchupGroup = '';\r\n let heightStyle = {height: this.props.height};\r\n return (
)\r\n }\r\n\r\n if(contestant){\r\n if(contestant.isBye){\r\n return (
  • BYE
  • );\r\n }else if(!contestant.name && contestant.placeholder){\r\n let previousId = contestant.previousRound ? contestant.previousRound + '.' + contestant.previousGroup : '';\r\n previousId += ' ' + contestant.placeholder;\r\n return (
  • {previousId}
  • );\r\n }else{\r\n\r\n if(this.props.matchup.winner){\r\n if(contestant.id !== this.props.matchup.winner){\r\n return (
  • {contestant.name}{contestant.seed}
  • )\r\n }else{\r\n return (
  • {contestant.name}{contestant.seed}
  • )\r\n }\r\n }else{\r\n return (
  • {contestant.name}{contestant.seed}
  • )\r\n }\r\n }\r\n }else{\r\n return (
  • );\r\n }\r\n });\r\n\r\n return (\r\n
    \r\n {/*
    {matchupGroup}
    */}\r\n \r\n
    );\r\n }\r\n}\r\n\r\nexport default MatchupDisplay;\r\n","import React from \"react\";\r\nimport './BracketRound.css';\r\nimport MatchupDisplay from \"./MatchupDisplay\";\r\n\r\nclass BracketRound extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n\r\n render(){\r\n let elements = this.props.matchups.map(matchup => {\r\n return ()\r\n });\r\n\r\n if(this.props.bracketRound.alternateName){\r\n return (\r\n
    \r\n
    {this.props.bracketRound.alternateName}
    \r\n {elements}\r\n
    \r\n )\r\n\r\n }else{\r\n return (\r\n
    \r\n
    Round {this.props.round}
    \r\n {elements}\r\n
    \r\n )\r\n\r\n }\r\n \r\n }\r\n}\r\n\r\nexport default BracketRound;\r\n","import React from \"react\";\r\nimport './BracketDisplay.css';\r\nimport BracketRound from \"./BracketRound\";\r\nimport resetIcon from './images/reset-icon.png';\r\nimport Round from \"./Round\";\r\nimport {isAllByes} from \"./RoundHelper\";\r\n\r\nclass BracketDisplay extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.bracketControlRef = React.createRef();\r\n\r\n this.state = {\r\n roundToDisplay: 'All'\r\n };\r\n \r\n this.displayAllRounds = this.displayAllRounds.bind(this);\r\n this.changeRoundToDisplay = this.changeRoundToDisplay.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState){\r\n if(this.props.contestants && prevProps.contestants != this.props.contestants){\r\n this.updateRoundToDisplay('All');\r\n }\r\n }\r\n\r\n getHeader(){\r\n if(this.props.header){\r\n return (\r\n
    \r\n
    {this.props.header}
    \r\n
    \r\n )\r\n }\r\n return (
    );\r\n }\r\n\r\n getBracketControls(){\r\n return (\r\n
    \r\n \r\n {this.getRoundControls()}\r\n {this.getResetBracketButton()}\r\n
    \r\n )\r\n }\r\n\r\n getRoundControls(){\r\n let elements = [(
    All
    )];\r\n for(let i = 0; i < this.props.bracket.length; i++){\r\n elements.push(\r\n (
    \r\n {i+1}\r\n
    )\r\n )\r\n }\r\n\r\n if(isAllByes(this.props.bracket[0])){\r\n elements.pop();\r\n }\r\n\r\n return elements;\r\n }\r\n\r\n getResetBracketButton(){\r\n let resetBracketButton = '';\r\n if(this.props.onReset){\r\n resetBracketButton = (\r\n
    \r\n \r\n
    )\r\n }\r\n return resetBracketButton;\r\n }\r\n\r\n changeRoundToDisplay(event){\r\n let round = event.currentTarget.dataset.round;\r\n this.updateRoundToDisplay(round);\r\n }\r\n\r\n updateRoundToDisplay(round){\r\n let roundIcons = this.bracketControlRef.current.querySelectorAll('.control-container.round-icon')\r\n roundIcons.forEach((icon) => {\r\n if(icon.className.includes(' selected')){\r\n icon.className = icon.className.replace(' selected', '');\r\n }\r\n\r\n if(icon.dataset.round === round){\r\n icon.className += ' selected';\r\n }\r\n })\r\n this.setState({roundToDisplay: round});\r\n }\r\n\r\n displayRound(roundNumber){\r\n let numberOfAllByeRounds = 0;\r\n let elements = this.props.bracket.map((round, index) => {\r\n if(isAllByes(round)){\r\n numberOfAllByeRounds++;\r\n }\r\n return ()\r\n })\r\n for(let i = 0; i < numberOfAllByeRounds; i++){\r\n elements.shift()\r\n }\r\n return ( \r\n
    \r\n {this.getHeader()}\r\n
    \r\n {this.getBracketControls()}\r\n
    \r\n {elements[roundNumber]}\r\n
    \r\n
    \r\n
    \r\n )\r\n\r\n }\r\n\r\n displayAllRounds(){\r\n let numberOfAllByeRounds = 0;\r\n let elements = this.props.bracket.map((round, index) => {\r\n if(isAllByes(round)){\r\n numberOfAllByeRounds++;\r\n }\r\n return ()\r\n })\r\n\r\n for(let i = 0; i < numberOfAllByeRounds; i++){\r\n elements.shift()\r\n }\r\n \r\n return ( \r\n
    \r\n {this.getHeader()}\r\n
    \r\n {this.getBracketControls()}\r\n
    \r\n {elements}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n render(){\r\n if(this.state.roundToDisplay === 'All'){\r\n return this.displayAllRounds();\r\n }else{\r\n return this.displayRound(this.state.roundToDisplay);\r\n }\r\n }\r\n}\r\n\r\nexport default BracketDisplay;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAADAFBMVEX///8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMvIC5hAAAA/3RSTlMAiBQSA/78/c8B0dLOHQIf6+oJHvsEBVEPUgbpuYVQONb6oYTywW9GCtO9t7rUePBuLxi4CEc7CzTm+T4/r2zIDEEZE/SlNqL1oKlwQBbo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\"","import Matchup from './Matchup';\r\nimport Round from './Round';\r\n\r\nexport function getDoubleElimMatchups(bracket){\r\n\r\n let numberOfRounds = bracket.length;\r\n let losersBracket = [];\r\n let roundOffset = 0;\r\n for(let i = 0; i < numberOfRounds; i++){\r\n let currentRound = i + roundOffset;\r\n let numberOfPlayersInLastRound_main = bracket[i].matchups.length * 2;\r\n let numberOfPlayersInLastRound_losers = 0;\r\n let numberOfMatchesPrevMainBracket = bracket[i].matchups.length;\r\n let numberOfMatchesPrevLoserBracket = 0;\r\n let numberOfMatchesAddedFromMain = bracket[i].matchups.length / 2;\r\n let numberOfMatchesAddedFromLoser = 0;\r\n if(i > 0){\r\n numberOfMatchesPrevLoserBracket = losersBracket[currentRound-1].matchups.length;\r\n numberOfMatchesAddedFromLoser = numberOfMatchesPrevLoserBracket / 2;\r\n }\r\n\r\n let numberOfMatches = numberOfMatchesAddedFromMain + numberOfMatchesAddedFromLoser;\r\n\r\n //if there's an odd number of teams, add in an interim round from just people that were already in losers bracket\r\n if((isOdd(numberOfMatches) || hasDecimal(numberOfMatches) || numberOfMatchesAddedFromLoser > numberOfMatchesAddedFromMain) && (numberOfMatchesAddedFromLoser >= 1 || numberOfMatchesAddedFromMain >= 1)){\r\n let interimMatchups = [];\r\n losersBracket[currentRound] = [];\r\n for(let j = 0; j < numberOfMatchesAddedFromLoser; j++){\r\n let matchup = createMatchup(j, currentRound);\r\n interimMatchups.push(matchup);\r\n }\r\n if(interimMatchups.length > 0){\r\n \r\n losersBracket[currentRound] = new Round(currentRound, interimMatchups);\r\n roundOffset++;\r\n currentRound++;\r\n numberOfMatches = numberOfMatchesAddedFromLoser / 2 + numberOfMatchesAddedFromMain;\r\n\r\n }\r\n }\r\n\r\n //Add more people from winners bracket to losers bracket\r\n let matchups = [];\r\n for(let j = 0; j < numberOfMatches; j++){\r\n let matchup = createMatchup(j, currentRound);\r\n \r\n let originalBracketGroup = j;\r\n if(i === 0){\r\n originalBracketGroup *=2;\r\n }\r\n\r\n //if there are fewer players from top bracket entering than from bottom\r\n if(originalBracketGroup < bracket[i].matchups.length){\r\n originalBracketGroup = (isOdd(i)) ? bracket[i].matchups.length - 1 - originalBracketGroup : originalBracketGroup;\r\n bracket[i].matchups[originalBracketGroup].nextOnLoss = {\r\n bracket: 'L',\r\n round: currentRound,\r\n group: j,\r\n position: 0\r\n }\r\n \r\n matchup.players[0] = {previousRound: i + 1, previousGroup: originalBracketGroup + 1, placeholder: \"Loser\"};\r\n\r\n if(i === 0){\r\n bracket[i].matchups[originalBracketGroup+1].nextOnLoss = {\r\n bracket: 'L',\r\n round: currentRound,\r\n group: j,\r\n position: 1\r\n }\r\n \r\n matchup.players[1] = {previousRound: i + 1, previousGroup: originalBracketGroup + 1 + 1, placeholder: \"Loser\"};\r\n }\r\n matchups.push(matchup);\r\n }\r\n\r\n \r\n //get matchup that will send loser to this round\r\n }\r\n \r\n losersBracket[currentRound] = new Round(currentRound, matchups);\r\n \r\n }\r\n \r\n losersBracket = setByes(bracket, losersBracket, 2);\r\n\r\n return {bracket, losersBracket};\r\n}\r\n\r\nexport function addDoubleRoundsToMainBracket(bracket, losersBracket){\r\n let possibleFinalMatchup = createMatchup(0, bracket.length);\r\n possibleFinalMatchup.players[1] = {previousRound: losersBracket.length - 1, previousGroup: 1, placeholder: \"Winner\"};\r\n possibleFinalMatchup.isDoubleElimPossibleFinal = true;\r\n let possibleFinalRound = new Round(bracket.length, [possibleFinalMatchup]);\r\n possibleFinalRound.alternateName = 'Championship (Game 1)';\r\n bracket.push(possibleFinalRound);\r\n\r\n let finalMatchup = createMatchup(0, bracket.length);\r\n finalMatchup.players[0] = {placeholder: \"Only if needed\"};\r\n finalMatchup.players[1] = {placeholder: \"Only if needed\"};\r\n finalMatchup.isDoubleElimFinal = true;\r\n let finalRound = new Round(bracket.length, [finalMatchup]);\r\n finalRound.alternateName = 'Championship (Game 2)';\r\n bracket.push(finalRound);\r\n\r\n bracket[bracket.length - 3].alternateName = undefined;\r\n return bracket;\r\n}\r\n\r\n//If number of matches is odd, then we'll have two rounds\r\n//The first round is losersBracket[i-1] / 2\r\n//The second round is losersBracket[i-1].length / 2 / 2 + bracket[i].length / 2 \r\n//Advance round 2 numbers\r\nfunction isOdd(number){\r\n return number % 2 == 1;\r\n}\r\n\r\nfunction hasDecimal (number) {\r\n\treturn !!(number % 1);\r\n}\r\n\r\nfunction createMatchup(group, round){\r\n let matchup = new Matchup([null, null]);\r\n matchup.group = group;\r\n matchup.round = round;\r\n return matchup;\r\n}\r\nfunction setByes(bracket, doubleElimBracket, competitorsPerMatchup){\r\n let mainBracketMatchups = bracket[0].matchups;\r\n mainBracketMatchups.forEach((matchup, index) => {\r\n if(matchup.isBye){\r\n let elimGroup = Math.floor(matchup.group/2);\r\n let elimPosition = index % 2;\r\n doubleElimBracket[0].matchups[elimGroup].players[elimPosition] = {name: \"BYE\", isBye: true};\r\n doubleElimBracket[0].matchups[elimGroup].isBye = true;\r\n \r\n let otherPosition = (elimPosition + 1) % 2;\r\n if(doubleElimBracket[0].matchups[elimGroup].players[otherPosition].placeholder){\r\n let nextMatchupResponse = getNextMatchup(doubleElimBracket, competitorsPerMatchup, doubleElimBracket[0].matchups[elimGroup]);\r\n // let roundOffset = bracket[0].isAllByes() ? 1 : 0;\r\n let previousMatchup = doubleElimBracket[0].matchups[elimGroup].players[otherPosition];\r\n nextMatchupResponse.futureMatchup.players[nextMatchupResponse.newPosition] = {placeholder: \"Loser\", previousGroup: previousMatchup.previousGroup, previousRound: previousMatchup.previousRound}; \r\n }\r\n }\r\n })\r\n \r\n let doubleElimMatchups = doubleElimBracket[0].matchups;\r\n doubleElimMatchups.forEach((matchup, index) => {\r\n if(matchup.isBye){\r\n if(matchup.isOnlyByes()){\r\n let nextMatchupResponse = getNextMatchup(doubleElimBracket, competitorsPerMatchup, matchup);\r\n nextMatchupResponse.futureMatchup.players[nextMatchupResponse.newPosition] = {name: \"BYE\", isBye: true}; \r\n nextMatchupResponse.futureMatchup.isBye = true;\r\n }\r\n }\r\n })\r\n\r\n return doubleElimBracket;\r\n}\r\n\r\nexport function moveLoserToDoubleElimBracket(bracket, doubleElimBracket, competitorsPerMatchup, loser, matchup){\r\n if(loser){\r\n let nextMatchupDescribe = matchup.nextOnLoss;\r\n let nextMatchup = doubleElimBracket[nextMatchupDescribe.round].matchups[nextMatchupDescribe.group];\r\n \r\n if(nextMatchup.isBye){\r\n nextMatchup.players[nextMatchupDescribe.position] = loser;\r\n let futureMatchup = getNextRoundMatchup(bracket, doubleElimBracket, nextMatchup, competitorsPerMatchup);\r\n\r\n if(futureMatchup && futureMatchup.winner){\r\n let newLoser = matchup.players.find(matchupPlayer => {\r\n return !!matchupPlayer && matchupPlayer.id !== loser.id;\r\n });\r\n switchTwoPlayers(bracket, doubleElimBracket,loser,newLoser,futureMatchup.round);\r\n }\r\n \r\n advanceDoubleElimContestantToNextRound(bracket, doubleElimBracket, competitorsPerMatchup, loser, nextMatchup);\r\n }else{\r\n let futureMatchup = getNextRoundMatchup(bracket, doubleElimBracket, nextMatchup, competitorsPerMatchup);\r\n if(futureMatchup && futureMatchup.winner){\r\n let newLoser = matchup.players.find(matchupPlayer => {\r\n return !!matchupPlayer && matchupPlayer.id !== loser.id;\r\n });\r\n let nextRound = futureMatchup.isDoubleElimPossibleFinal ? doubleElimBracket.length : nextMatchup.round;\r\n switchTwoPlayers(bracket, doubleElimBracket, loser, newLoser, nextRound);\r\n }\r\n nextMatchup.players[nextMatchupDescribe.position] = loser;\r\n if(nextMatchup.winner){\r\n let otherPlayer = matchup.players.find(matchupPlayer => {\r\n return !!matchupPlayer && matchupPlayer.id !== loser.id;\r\n });\r\n if(nextMatchup.winner === otherPlayer.id){\r\n nextMatchup.winner = loser.id;\r\n }\r\n }\r\n }\r\n }\r\n return doubleElimBracket;\r\n\r\n}\r\n\r\nexport function advanceDoubleElimContestantToNextRound(bracket, doubleElimBracket, competitorsPerMatchup, player, currentMatchup, switchFuturePlayers){\r\n let nextRound = currentMatchup.round + 1;\r\n currentMatchup.winner = player.id;\r\n \r\n if(doubleElimBracket.length >= nextRound){\r\n \r\n //The last matchup has been changed\r\n if(nextRound == doubleElimBracket.length){\r\n let futureMatchup = bracket[bracket.length - 2].matchups[0];\r\n if(switchFuturePlayers && futureMatchup.winner){\r\n\r\n let losingPlayer = currentMatchup.players.find(matchupPlayer => {\r\n return !!matchupPlayer && matchupPlayer.id !== player.id;\r\n });\r\n switchTwoPlayers(bracket, doubleElimBracket, player, losingPlayer, nextRound + 1);\r\n }\r\n\r\n }else{\r\n let futureMatchupResponse = getNextMatchup(doubleElimBracket, competitorsPerMatchup, currentMatchup);\r\n \r\n \r\n //The bracket has already been filled out past this point, so we need to update all future players\r\n if(switchFuturePlayers && futureMatchupResponse.futureMatchup.winner){\r\n \r\n let losingPlayer = currentMatchup.players.find(matchupPlayer => {\r\n return !!matchupPlayer && matchupPlayer.id !== player.id;\r\n });\r\n switchTwoPlayers(bracket, doubleElimBracket, player, losingPlayer, futureMatchupResponse.futureMatchup.round);\r\n \r\n }\r\n futureMatchupResponse.futureMatchup.players[futureMatchupResponse.newPosition] = player;\r\n\r\n }\r\n \r\n }\r\n return doubleElimBracket;\r\n}\r\n\r\nfunction switchTwoPlayers(bracket, doubleElimBracket, player, losingPlayer, currentMatchupRound){\r\n\r\n doubleElimBracket.forEach((round, index) => {\r\n if(index >= currentMatchupRound){\r\n round.matchups.forEach(matchup => {\r\n if(matchup){\r\n if(matchup.winner === losingPlayer.id){\r\n matchup.winner = player.id;\r\n }else if(matchup.winner === player.id){\r\n matchup.winner = losingPlayer.id;\r\n }\r\n \r\n matchup.players.forEach((matchupPlayer, index) => {\r\n if(matchupPlayer){\r\n if(matchupPlayer.id === player.id){\r\n matchup.players[index] = losingPlayer;\r\n }else if(matchupPlayer.id === losingPlayer.id){\r\n matchup.players[index] = player;\r\n }\r\n\r\n }\r\n })\r\n } \r\n })\r\n }\r\n })\r\n\r\n //We can assume the last two matchups are due to double elim championships. So we can switch those names too\r\n for(let i = bracket.length-2; i < bracket.length; i++){\r\n let round = bracket[i];\r\n \r\n round.matchups.forEach(matchup => {\r\n if(matchup){\r\n //if the first player is the winner, that propogation has already been handled by the main bracket handlers\r\n if(!matchup.isDoubleElimPossibleFinal || matchup.winner === matchup.players[1].id){\r\n if(matchup.winner === losingPlayer.id){\r\n matchup.winner = player.id;\r\n }else if(matchup.winner === player.id){\r\n matchup.winner = losingPlayer.id;\r\n }\r\n\r\n }\r\n\r\n matchup.players.forEach((matchupPlayer, index) => {\r\n if(matchupPlayer && (!matchup.isDoubleElimPossibleFinal || (matchup.isDoubleElimPossibleFinal && index > 0))){\r\n if(matchupPlayer.id === player.id){\r\n matchup.players[index] = losingPlayer;\r\n }else if(matchupPlayer.id === losingPlayer.id){\r\n matchup.players[index] = player;\r\n }\r\n\r\n }\r\n })\r\n } \r\n })\r\n\r\n }\r\n}\r\n\r\n\r\nfunction getNextMatchup(doubleElimBracket, competitorsPerMatchup, currentMatchup){\r\n let nextRound = currentMatchup.round + 1;\r\n\r\n let nextRoundGroup = Math.floor(currentMatchup.group / competitorsPerMatchup);\r\n let newPosition = currentMatchup.group % competitorsPerMatchup;\r\n\r\n if(doesNextRoundHaveMembersFromWinnersBracket(doubleElimBracket, currentMatchup)){\r\n nextRoundGroup = currentMatchup.group;\r\n newPosition = competitorsPerMatchup - 1;\r\n }\r\n let futureMatchup = doubleElimBracket[nextRound].matchups.find(nextRoundMatchup => {\r\n return nextRoundMatchup.group === nextRoundGroup;\r\n }); \r\n\r\n return {futureMatchup, newPosition};\r\n}\r\n\r\nfunction getNextRoundMatchup(bracket, doubleElimBracket, currentMatchup, competitorsPerMatchup){\r\n let nextRound = currentMatchup.round + 1;\r\n let futureMatchup = null;\r\n if(doubleElimBracket.length > nextRound){\r\n\r\n let nextRoundGroup = Math.floor(currentMatchup.group / competitorsPerMatchup);\r\n let newPosition = currentMatchup.group % competitorsPerMatchup;\r\n\r\n if(doesNextRoundHaveMembersFromWinnersBracket(doubleElimBracket, currentMatchup) && currentMatchup.round > 0){\r\n nextRoundGroup = currentMatchup.group;\r\n newPosition = competitorsPerMatchup - 1;\r\n }\r\n futureMatchup = doubleElimBracket[nextRound].matchups.find(nextRoundMatchup => {\r\n return nextRoundMatchup.group === nextRoundGroup;\r\n }); \r\n }\r\n\r\n if(doubleElimBracket.length === nextRound){\r\n futureMatchup = bracket[bracket.length-2].matchups[0];\r\n }\r\n\r\n return futureMatchup;\r\n}\r\n\r\nfunction getPositionOfPlayerInMatchup(matchup, targetPlayer){\r\n let playerPositionInMatchup = matchup.players.findIndex((player, index) => {\r\n return (!!player && player.id === targetPlayer.id);\r\n });\r\n return playerPositionInMatchup;\r\n}\r\n\r\nfunction doesNextRoundHaveMembersFromWinnersBracket(doubleElimBracket, currentMatchup){\r\n let nextRound = currentMatchup.round + 1;\r\n return (doubleElimBracket[currentMatchup.round].matchups.length == doubleElimBracket[nextRound].matchups.length);\r\n}\r\n\r\n\r\nexport function updateFinalRoundOfMainBracket(bracket, winner){\r\n bracket[bracket.length - 2].matchups[0].players[1] = winner;\r\n return bracket;\r\n}\r\n\r\nexport function advanceLoserForFinalMatch(bracket, loser){\r\n bracket[bracket.length - 1].matchups[0].players[1] = loser;\r\n return bracket;\r\n}\r\n\r\nexport function clearFinalMatch(bracket, matchup, winner){\r\n let finalMatchup = bracket[bracket.length - 1].matchups[0];\r\n finalMatchup.players[0] = {placeholder: \"Not needed\"};\r\n finalMatchup.players[1] = {placeholder: \"Not needed\"};\r\n bracket[bracket.length - 1].matchups[0] = finalMatchup;\r\n matchup.winner = winner.id;\r\n return bracket;\r\n}","import React from \"react\";\r\n// import '../BracketDisplay.css';\r\nimport {getAllMatchups, advanceContestantToNextRound} from \"../BracketCreationHelper\";\r\nimport BracketDisplay from \"../BracketDisplay\";\r\nimport { \r\n getDoubleElimMatchups, \r\n advanceDoubleElimContestantToNextRound, \r\n moveLoserToDoubleElimBracket, \r\n updateFinalRoundOfMainBracket,\r\n advanceLoserForFinalMatch,\r\n clearFinalMatch,\r\n addDoubleRoundsToMainBracket\r\n} from \"../DoubleElimBracketHelper\";\r\n\r\n\r\nclass BracketContainer extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n\r\n let bracket = null;\r\n let doubleElimBracket = null;\r\n\r\n if(this.props.defaultBracket){\r\n bracket = this.props.defaultBracket;\r\n doubleElimBracket = this.props.defaultDoubleElimBracket;\r\n }else{\r\n if(this.props.contestants.length > 1){\r\n bracket = getAllMatchups('single', 2, this.props.contestants);\r\n \r\n if(this.props.contestants.length > 3){\r\n let doubleElimSetup = getDoubleElimMatchups(bracket);\r\n bracket = doubleElimSetup.bracket;\r\n doubleElimBracket = doubleElimSetup.losersBracket;\r\n bracket = addDoubleRoundsToMainBracket(bracket, doubleElimBracket);\r\n }\r\n }\r\n }\r\n\r\n this.state = {\r\n bracket: bracket,\r\n competitorsPerMatchup: 2,\r\n doubleElimBracket: doubleElimBracket,\r\n contestants: this.props.contestants,\r\n tourneyName: this.props.tourneyName\r\n };\r\n\r\n\r\n if(this.props.saveBrackets){\r\n this.props.saveBrackets({bracket: bracket, doubleElimBracket: doubleElimBracket});\r\n }\r\n\r\n this.advanceContestant = this.advanceContestant.bind(this);\r\n this.advanceDoubleElimContestant = this.advanceDoubleElimContestant.bind(this);\r\n this.recreateBracket = this.recreateBracket.bind(this);\r\n this.getDoubleElimDisplay = this.getDoubleElimDisplay.bind(this);\r\n this.getBracketDisplay = this.getBracketDisplay.bind(this);\r\n }\r\n\r\n \r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if(prevProps.contestants !== this.props.contestants && this.props.contestants.length > 1){\r\n this.recreateBracket();\r\n }\r\n if (prevProps.isDoubleElim !== this.props.isDoubleElim) {\r\n let bracket = this.state.bracket;\r\n if(this.props.isDoubleElim){\r\n bracket = addDoubleRoundsToMainBracket(this.state.bracket, this.state.doubleElimBracket);\r\n }else{\r\n bracket.pop();\r\n bracket.pop();\r\n bracket[bracket.length - 1].alternateName = 'Championship';\r\n }\r\n\r\n this.setState({bracket: bracket});\r\n }\r\n\r\n if(this.props.saveBrackets){\r\n if(prevState.bracket != this.state.bracket || prevState.doubleElimBracket != this.state.doubleElimBracket){\r\n this.props.saveBrackets({bracket: this.state.bracket, doubleElimBracket: this.state.doubleElimBracket});\r\n }\r\n }\r\n }\r\n\r\n resetBracket(){\r\n this.recreateBracket();\r\n }\r\n\r\n\r\n \r\n advanceContestant(winner, loser, matchup){\r\n let bracket = this.state.bracket;\r\n let doubleElimBracket = this.state.doubleElimBracket;\r\n\r\n if(matchup.isDoubleElimPossibleFinal){\r\n if(matchup.players[1].id === winner.id){\r\n bracket = advanceContestantToNextRound(this.state.bracket, this.state.competitorsPerMatchup, winner, matchup, true);\r\n bracket = advanceLoserForFinalMatch(bracket, loser);\r\n }else{\r\n bracket = clearFinalMatch(bracket, matchup, winner);\r\n }\r\n\r\n }else{\r\n bracket = advanceContestantToNextRound(bracket, this.state.competitorsPerMatchup, winner, matchup, true);\r\n if(this.props.isDoubleElim && matchup.nextOnLoss){\r\n doubleElimBracket = moveLoserToDoubleElimBracket(bracket, this.state.doubleElimBracket, this.state.competitorsPerMatchup, loser, matchup);\r\n this.setState({doubleElimBracket: doubleElimBracket});\r\n }\r\n }\r\n\r\n this.setState({bracket: bracket});\r\n this.props.saveBrackets({bracket: bracket, doubleElimBracket: doubleElimBracket});\r\n }\r\n\r\n advanceDoubleElimContestant(winner, loser, matchup){\r\n let bracket = this.state.bracket;\r\n let doubleElimBracket = advanceDoubleElimContestantToNextRound(this.state.bracket, this.state.doubleElimBracket, this.state.competitorsPerMatchup, winner, matchup, true);\r\n if(doubleElimBracket.length === matchup.round + 1){\r\n bracket = updateFinalRoundOfMainBracket(this.state.bracket, winner);\r\n this.setState({bracket: bracket});\r\n }\r\n this.setState({doubleElimBracket: doubleElimBracket});\r\n this.props.saveBrackets({bracket: bracket, doubleElimBracket: doubleElimBracket});\r\n }\r\n\r\n recreateBracket(){\r\n \r\n if(this.props.contestants.length > 1){\r\n let bracket = getAllMatchups('single', 2, this.props.contestants);\r\n let doubleElimBracket = null;\r\n\r\n if(this.props.contestants.length > 3){\r\n \r\n let doubleElimSetup = getDoubleElimMatchups(bracket);\r\n bracket = doubleElimSetup.bracket;\r\n doubleElimBracket = doubleElimSetup.losersBracket;\r\n if(this.props.isDoubleElim){\r\n bracket = addDoubleRoundsToMainBracket(bracket, doubleElimBracket);\r\n }\r\n }\r\n\r\n this.setState({\r\n bracket: bracket,\r\n competitorsPerMatchup: 2,\r\n doubleElimBracket: doubleElimBracket,\r\n contestants: this.props.contestants,\r\n isDoubleElim: this.props.isDoubleElim\r\n });\r\n }\r\n }\r\n\r\n getDoubleElimDisplay(){\r\n\r\n let hideByes = this.props.hideByes !== undefined ? this.props.hideByes : false;\r\n let isDoubleElim = this.props.isDoubleElim !== undefined ? this.props.isDoubleElim : false;\r\n\r\n let doubleElimDisplay = (
    );\r\n if(isDoubleElim && this.state.doubleElimBracket){\r\n doubleElimDisplay = \r\n }\r\n\r\n return doubleElimDisplay;\r\n }\r\n\r\n getBracketDisplay(){\r\n\r\n let hideByes = this.props.hideByes !== undefined ? this.props.hideByes : false;\r\n\r\n let bracketDisplay = (
    );\r\n if(this.state.bracket){\r\n bracketDisplay = (
    \r\n \r\n
    );\r\n }\r\n return bracketDisplay;\r\n }\r\n \r\n render(){ \r\n let bracketDisplay = this.getBracketDisplay();\r\n let doubleElimDisplay = this.getDoubleElimDisplay();\r\n\r\n return (\r\n
    \r\n {bracketDisplay}\r\n {doubleElimDisplay}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default BracketContainer;\r\n","const constants = {\r\n MOCK_STORAGE: false,\r\n MOCK_API: false, \r\n // MOCK_STORAGE: true,\r\n // MOCK_API: true, \r\n // SERVER_URL: \"http://localhost:4001\",\r\n // HOST_URL: \"http://localhost:3000\",\r\n SERVER_URL: 'https://o18lk61ry4.execute-api.us-east-2.amazonaws.com',\r\n HOST_URL: \"https://brackset.com\",\r\n // HOST_URL: \"http://bracket-generator.s3-website.us-east-2.amazonaws.com\",\r\n\r\n\r\n COOKIE_USER: 'user',\r\n COOKIE_USER_EMAIL: 'email',\r\n COOKIE_HOURS_EXPIRATION: 5,\r\n SCREEN_HOME: \"Home\",\r\n SCREEN_USER_PROFILE: \"User Profile\",\r\n SCREEN_POLL_SUMMARY: \"Poll Summary\",\r\n POLL_DISPLAY_ACTIVE: \"Open Poll\",\r\n SCREEN_OPEN_POLL: \"Open Poll\",\r\n SCREEN_POLL_RESULTS: \"Poll Complete\",\r\n RECENT_POLL_COOKIE_PREFIX: \"recent-poll-\",\r\n LOCAL_SUBMISSION_EXPIRATION: 24 * 14 //two weeks \r\n}\r\n\r\nexport default constants;","import React from \"react\";\r\nimport './HomeControl.css';\r\nimport homeIcon from './images/trophy.png';\r\nimport Constants from \"./Constants\";\r\n\r\nclass homeControl extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {};\r\n\r\n this.navigateToHome = this.navigateToHome.bind(this);\r\n }\r\n\r\n navigateToHome(){\r\n window.location.href = Constants.HOST_URL;\r\n }\r\n\r\n \r\n\r\n\r\n render(){\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default homeControl;\r\n","export default \"data:image/png;base64,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\"","import React from \"react\";\r\nimport './PublishControl.css';\r\nimport publishIcon from '../images/publish-icon.png';\r\n\r\nclass PublishControl extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {};\r\n\r\n this.togglePublishPanel = this.togglePublishPanel.bind(this);\r\n }\r\n\r\n togglePublishPanel(){\r\n if(this.props.isOpen){\r\n this.props.closePanel();\r\n }else{\r\n this.props.openPanel();\r\n }\r\n }\r\n\r\n \r\n\r\n\r\n render(){\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default PublishControl;\r\n","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/copy-link-icon.f09020b8.png\";","export default __webpack_public_path__ + \"static/media/open-new-tab-icon.2ee72fa3.png\";","import React from \"react\";\r\nimport './PublishPanel.css';\r\nimport InputBox from \"../InputBox\";\r\nimport {isClickInBox} from \"../ClickPositionHelper\";\r\nimport Constants from '../Constants';\r\n\r\n\r\nimport copyLinkIcon from \"../images/copy-link-icon.png\";\r\nimport openNewTabIcon from \"../images/open-new-tab-icon.png\";\r\n\r\nclass PublishPanel extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {};\r\n this.bracketLinkRef = React.createRef();\r\n\r\n this.publishBracket = this.publishBracket.bind(this);\r\n this.closePanelOnOutsideClick = this.closePanelOnOutsideClick.bind(this);\r\n this.getShareableLinkUI = this.getShareableLinkUI.bind(this);\r\n this.copyLink = this.copyLink.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener('click', this.closePanelOnOutsideClick);\r\n }\r\n \r\n closePanelOnOutsideClick(event) {\r\n let panel = document.querySelector('#publishPanel');\r\n if(panel){\r\n if (!isClickInBox(event.x, event.y, panel.getBoundingClientRect())) {\r\n this.props.closePanel();\r\n }\r\n }\r\n }\r\n\r\n\r\n isOS() {\r\n return navigator.userAgent.match(/ipad|iphone/i);\r\n }\r\n\r\n createTextArea(text) {\r\n let textArea = document.createElement('textArea');\r\n textArea.className = 'hidden';\r\n textArea.value = text;\r\n document.body.appendChild(textArea);\r\n return textArea;\r\n }\r\n\r\n copyLink(event){\r\n let copyText = this.createTextArea(this.bracketLinkRef.current.state.value);\r\n // let form = event.currentTarget.parentElement;\r\n // var copyText = form.querySelector(\".poll-link\");\r\n copyText.select();\r\n copyText.setSelectionRange(0, 99999); /* For mobile devices */\r\n navigator.clipboard.writeText(copyText.value);\r\n document.body.removeChild(copyText);\r\n\r\n // let copyText = this.bracketLinkRef.current.state;\r\n // copyText.select();\r\n // copyText.setSelectionRange(0, 99999); /* For mobile devices */\r\n // navigator.clipboard.writeText(copyText.value);\r\n // let form = event.currentTarget.parentElement;\r\n // var copyText = form.querySelector(\".poll-link\");\r\n // copyText.select();\r\n // copyText.setSelectionRange(0, 99999); /* For mobile devices */\r\n // if(window.navigator.clipboard){\r\n // window.navigator.clipboard.writeText(copyText);\r\n // }else{\r\n // document.execCommand('copy', true, copyText);\r\n // }\r\n this.props.showToast('Copied link to clipboard');\r\n // alert(\"Copied the text: \" + copyText.value);\r\n }\r\n\r\n openLinkInNewTab(){\r\n var copyText = document.querySelector(\".poll-link\");\r\n window.open(copyText.value, '_blank');\r\n }\r\n\r\n publishBracket(){\r\n this.props.publishBracket();\r\n }\r\n\r\n getShareableLinkUI(){\r\n if(this.props.bracketId){\r\n return (\r\n
    \r\n
    Share this bracket with friends
    \r\n
    Copy the following link and send it to those you wish to view this bracket
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n );\r\n }else{\r\n return (<>);\r\n }\r\n \r\n }\r\n\r\n render(){\r\n\r\n return (\r\n
    \r\n
    \r\n\r\n\r\n {this.getShareableLinkUI()}\r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default PublishPanel;\r\n","import Constants from \"../Constants\";\r\n// import CookieManager from \"./CookieManager\";\r\n// let cookieManager = new CookieManager();\r\n\r\nclass CalloutBuilder {\r\n\r\n // login(params){\r\n // const {email, password} = params;\r\n\r\n // return makePostCallout(Constants.SERVER_URL + '/login', {\r\n // email: email,\r\n // password: password\r\n // });\r\n // }\r\n\r\n // registerUser(params){\r\n // const {email, password, firstName, lastName} = params;\r\n // return makePostCallout(Constants.SERVER_URL + '/register', {\r\n // firstName: firstName,\r\n // lastName: lastName,\r\n // email: email,\r\n // password: password\r\n // });\r\n // }\r\n\r\n // getUserInfo(key){\r\n // return makeGetCallout(Constants.SERVER_URL + '/userinfo', {userId: key});\r\n // }\r\n\r\n getViewOnlyBracket(key){\r\n return makeGetCallout(Constants.SERVER_URL + '/viewOnlyBracket', {bracketid: key});\r\n }\r\n getAdminBracket(key){\r\n return makeGetCallout(Constants.SERVER_URL + '/bracket', {bracketid: key});\r\n }\r\n\r\n createBracket(body){\r\n return makePostCallout(Constants.SERVER_URL + '/bracket', body);\r\n }\r\n\r\n updateBracket(body){\r\n return makePatchCallout(Constants.SERVER_URL + '/bracket', body);\r\n }\r\n}\r\n\r\nfunction makeGetCallout(endpoint, params){\r\n\r\n return new Promise((resolve, reject) => {\r\n \r\n let paramString = Object.keys(params).reduce((previous, current, index) => {\r\n return index === 0 ? '?' + current + '=' + params[current] : previous + '&' + current + '=' + params[current];\r\n }, '?');\r\n\r\n const url = endpoint + paramString;\r\n const options = {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n // 'x-access-token': cookieManager.getValue(Constants.COOKIE_USER)\r\n }\r\n };\r\n\r\n fetch(url, options).then(response => {\r\n if(response.status === 400){\r\n console.log('The requested bracket does not exist');\r\n reject('The requested bracket does not exist');\r\n }else{\r\n response.json().then(data => {\r\n console.dir(data);\r\n resolve(data);\r\n }).catch(error => {\r\n console.log(error);\r\n reject(error);\r\n });\r\n }\r\n }).catch(error => {\r\n console.dir(error);\r\n reject(error);\r\n });\r\n })\r\n}\r\n\r\nfunction makePostCallout(endpoint, body){\r\n\r\n return new Promise((resolve, reject) => {\r\n\r\n const url = endpoint;\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n // 'x-access-token': cookieManager.getValue(Constants.COOKIE_USER)\r\n },\r\n body: JSON.stringify(body)\r\n };\r\n\r\n fetch(url, options).then(response => {\r\n response.json().then(data => {\r\n console.dir(data);\r\n resolve(data);\r\n })\r\n }).catch(error => {\r\n console.dir(error);\r\n reject(error);\r\n });\r\n })\r\n}\r\n\r\nfunction makePatchCallout(endpoint, body){\r\n\r\n return new Promise((resolve, reject) => {\r\n\r\n const url = endpoint;\r\n const options = {\r\n method: 'PATCH',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n // 'x-access-token': cookieManager.getValue(Constants.COOKIE_USER)\r\n },\r\n body: JSON.stringify(body)\r\n };\r\n\r\n fetch(url, options).then(response => {\r\n response.json().then(data => {\r\n console.dir(data);\r\n resolve(data);\r\n })\r\n }).catch(error => {\r\n console.dir(error);\r\n reject(error);\r\n });\r\n })\r\n}\r\n\r\nexport default CalloutBuilder;","import CalloutBuilder from \"./CalloutBuilder\";\r\n\r\nclass CalloutBuilderMock extends CalloutBuilder{\r\n\r\n // login(email, password){\r\n // return new Promise((resolve, reject) => {\r\n // resolve ({\r\n // \"_id\": \"621008386326fa5a9bdb37cb\",\r\n // \"first_name\": \"Jim\",\r\n // \"last_name\": \"Morrison\",\r\n // \"email\": \"jmorrison@test.test\",\r\n // \"password\": \"$2a$10$CEXPLFkEpo7vmeiGp7.o.umnpx4/yRkQhTGtPaHdHebd65xMYigM6\",\r\n // \"__v\": 0,\r\n // \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNjIxMDA4Mzg2MzI2ZmE1YTliZGIzN2NiIiwiZW1haWwiOiJqbW9ycmlzb25AdGVzdC50ZXN0IiwiaWF0IjoxNjQ1NTU3MzEwLCJleHAiOjE2NDU1NzUzMTB9.uqZrScpTr5s_acILb9CAct3BU7ACFAI4aT4QUB0hizI\"\r\n // })\r\n // })\r\n // }\r\n\r\n // registerUser(firstName, lastName, email, password){\r\n // return new Promise((resolve, reject) => {\r\n // resolve ({\r\n // \"first_name\": \"Jim\",\r\n // \"last_name\": \"Morrison\",\r\n // \"email\": \"jmorrison@test1.test\",\r\n // \"password\": \"$2a$10$uNljolIrUYWesW6gQFrHeu0cRj2Bt9OqN5CB12k4O1AS9FbzcQSW2\",\r\n // \"_id\": \"62153b1c352f4eb12e84e50a\",\r\n // \"__v\": 0,\r\n // \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNjIxNTNiMWMzNTJmNGViMTJlODRlNTBhIiwiZW1haWwiOiJqbW9ycmlzb25AdGVzdDEudGVzdCIsImlhdCI6MTY0NTU1ODU1NiwiZXhwIjoxNjQ1NTc2NTU2fQ.5FDxsVKa5Ye96mtuSmYXFi0xq7LeJmtWd0xVGfbhMkw\"\r\n // })\r\n // })\r\n // }\r\n\r\n // getUserInfo(key){\r\n // return new Promise((resolve, reject) => {\r\n // resolve ({\r\n // \"first_name\": \"Michael\",\r\n // \"last_name\": \"Matonis\",\r\n // \"email\": \"michaelmatonis@hotmail.com\"\r\n // })\r\n // })\r\n // }\r\n\r\n getViewOnlyBracket(key){\r\n return new Promise((resolve, reject) => {\r\n resolve ({\r\n \"_id\": \"62153c28983fe95c10bd6693\",\r\n \"title\": \"Big Time Tourney\",\r\n \"hideByes\": false,\r\n \"bracket\": `[{\"roundNumber\":0,\"matchups\":[{\"id\":\"7a0bb337-e1fb-41b5-bcee-63dcf5cb8c49\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"BYE\",\"isBye\":true}],\"group\":0,\"round\":0,\"isBye\":true,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\",\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":0,\"position\":0}},{\"id\":\"4d8a269b-f0be-460d-94c4-af91de94d4a4\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":1,\"round\":0,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":0,\"position\":1},\"winner\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"id\":\"8c165dae-3a25-4c65-b359-a45fd021407a\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"BYE\",\"isBye\":true}],\"group\":2,\"round\":0,\"isBye\":true,\"winner\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\",\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":1,\"position\":0}},{\"id\":\"e0d39f35-3115-4057-aedd-2e0f5bdc2acc\",\"players\":[{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":3,\"round\":0,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":1,\"position\":1},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":1,\"matchups\":[{\"id\":\"db2191c9-5885-4b8b-8c83-48d33b4df0f8\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"}],\"group\":0,\"round\":1,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":1,\"group\":1,\"position\":0},\"winner\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"id\":\"de4543ef-6c82-43fa-844a-2252a5e58fe6\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":1,\"round\":1,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":1,\"group\":0,\"position\":0},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":2,\"matchups\":[{\"id\":\"ebe28cae-527b-4674-bcbe-154289d3b377\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":0,\"round\":2,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":3,\"group\":0,\"position\":0},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":3,\"matchups\":[{\"id\":\"5d8f3e25-2bb5-4bc7-b1a8-a939c758cc94\",\"players\":[{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":3,\"isDoubleElimPossibleFinal\":true,\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"alternateName\":\"Championship (Game 1)\"},{\"roundNumber\":4,\"matchups\":[{\"id\":\"1fa51e4f-9e43-4fba-9a4f-162b31a98517\",\"players\":[{\"placeholder\":\"Not needed\"},{\"placeholder\":\"Not needed\"}],\"group\":0,\"round\":4,\"isDoubleElimFinal\":true}],\"alternateName\":\"Championship (Game 2)\"}]`,\r\n \"doubleElimBracket\": `[{\"roundNumber\":0,\"matchups\":[{\"id\":\"4cc844da-c917-43ac-9f70-be27a3404438\",\"players\":[{\"name\":\"BYE\",\"isBye\":true},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":0,\"round\":0,\"isBye\":true,\"winner\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"id\":\"bd24a0f4-649b-479a-9597-69320b1d4803\",\"players\":[{\"name\":\"BYE\",\"isBye\":true},{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}],\"group\":1,\"round\":0,\"isBye\":true,\"winner\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}]},{\"roundNumber\":1,\"matchups\":[{\"id\":\"f19e3242-c731-47eb-bbd1-1b0b4e1d51d6\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":0,\"round\":1,\"winner\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"id\":\"c75ddf24-419a-45b5-aa75-2494bea9f567\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}],\"group\":1,\"round\":1,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]},{\"roundNumber\":2,\"matchups\":[{\"id\":\"f9a2c909-c5b8-4ada-8dee-c198a62a4153\",\"players\":[{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":2,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]},{\"roundNumber\":3,\"matchups\":[{\"id\":\"0e5c7923-ade8-4f61-b66b-b77aa40f2086\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":3,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]}]`,\r\n \"bracket_id\": \"47745e10-9417-11ec-9957-9944a6740079\",\r\n \"created_by\": \"jmorrison@test.test\",\r\n \"bracket_type\": \"display\",\r\n \"__v\": 0\r\n })\r\n })\r\n }\r\n\r\n getAdminBracket(key){\r\n return new Promise((resolve, reject) => {\r\n resolve ({\r\n \"_id\": \"62153c28983fe95c10bd6693\",\r\n \"title\": \"Admin Tourney\",\r\n \"hideByes\": false,\r\n \"bracket\": `[{\"roundNumber\":0,\"matchups\":[{\"id\":\"7a0bb337-e1fb-41b5-bcee-63dcf5cb8c49\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"BYE\",\"isBye\":true}],\"group\":0,\"round\":0,\"isBye\":true,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\",\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":0,\"position\":0}},{\"id\":\"4d8a269b-f0be-460d-94c4-af91de94d4a4\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":1,\"round\":0,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":0,\"position\":1},\"winner\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"id\":\"8c165dae-3a25-4c65-b359-a45fd021407a\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"BYE\",\"isBye\":true}],\"group\":2,\"round\":0,\"isBye\":true,\"winner\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\",\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":1,\"position\":0}},{\"id\":\"e0d39f35-3115-4057-aedd-2e0f5bdc2acc\",\"players\":[{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":3,\"round\":0,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":1,\"position\":1},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":1,\"matchups\":[{\"id\":\"db2191c9-5885-4b8b-8c83-48d33b4df0f8\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"}],\"group\":0,\"round\":1,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":1,\"group\":1,\"position\":0},\"winner\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"id\":\"de4543ef-6c82-43fa-844a-2252a5e58fe6\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":1,\"round\":1,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":1,\"group\":0,\"position\":0},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":2,\"matchups\":[{\"id\":\"ebe28cae-527b-4674-bcbe-154289d3b377\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":0,\"round\":2,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":3,\"group\":0,\"position\":0},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":3,\"matchups\":[{\"id\":\"5d8f3e25-2bb5-4bc7-b1a8-a939c758cc94\",\"players\":[{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":3,\"isDoubleElimPossibleFinal\":true,\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"alternateName\":\"Championship (Game 1)\"},{\"roundNumber\":4,\"matchups\":[{\"id\":\"1fa51e4f-9e43-4fba-9a4f-162b31a98517\",\"players\":[{\"placeholder\":\"Not needed\"},{\"placeholder\":\"Not needed\"}],\"group\":0,\"round\":4,\"isDoubleElimFinal\":true}],\"alternateName\":\"Championship (Game 2)\"}]`,\r\n \"doubleElimBracket\": `[{\"roundNumber\":0,\"matchups\":[{\"id\":\"4cc844da-c917-43ac-9f70-be27a3404438\",\"players\":[{\"name\":\"BYE\",\"isBye\":true},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":0,\"round\":0,\"isBye\":true,\"winner\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"id\":\"bd24a0f4-649b-479a-9597-69320b1d4803\",\"players\":[{\"name\":\"BYE\",\"isBye\":true},{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}],\"group\":1,\"round\":0,\"isBye\":true,\"winner\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}]},{\"roundNumber\":1,\"matchups\":[{\"id\":\"f19e3242-c731-47eb-bbd1-1b0b4e1d51d6\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":0,\"round\":1,\"winner\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"id\":\"c75ddf24-419a-45b5-aa75-2494bea9f567\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}],\"group\":1,\"round\":1,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]},{\"roundNumber\":2,\"matchups\":[{\"id\":\"f9a2c909-c5b8-4ada-8dee-c198a62a4153\",\"players\":[{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":2,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]},{\"roundNumber\":3,\"matchups\":[{\"id\":\"0e5c7923-ade8-4f61-b66b-b77aa40f2086\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":3,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]}]`,\r\n \"bracket_id\": \"5950459ads-9417-11ec-9957-9944a6740079\",\r\n \"view_id\": \"47745e10-9417-11ec-9957-9944a6740079\",\r\n \"created_by\": \"jmorrison@test.test\",\r\n \"bracket_type\": \"display\",\r\n \"__v\": 0\r\n })\r\n })\r\n }\r\n\r\n publishBracket(body){\r\n return new Promise((resolve, reject) => {\r\n resolve ({\r\n \"admin_id\": \"47745e10-9417-11ec-9957-9944a6740079\",\r\n \"bracket_id\": \"47745e10-9417-11ec-9957-9944a6740079\",\r\n \"_id\": \"62153c28983fe95c10bd6693\",\r\n \"__v\": 0\r\n })\r\n })\r\n }\r\n\r\n updateBracket(body){\r\n return new Promise((resolve, reject) => {\r\n resolve ({\r\n \"bracket_id\": \"47745e10-9417-11ec-9957-9944a6740079\",\r\n \"_id\": \"621547ca6631211be718e7f4\",\r\n \"__v\": 0\r\n })\r\n })\r\n }\r\n\r\n // getSubmission(key){\r\n // return new Promise((resolve, reject) => {\r\n // resolve ({\r\n // \"_id\": \"621547ca6631211be718e7f4\",\r\n // \"answer\": \"Bird\",\r\n // \"poll_id\": \"47745e10-9417-11ec-9957-9944a6740079\",\r\n // \"submitted_by\": \"user-2\",\r\n // \"__v\": 0\r\n // })\r\n // })\r\n // }\r\n\r\n\r\n // getPoll(key){\r\n // return new Promise((resolve, reject) => {\r\n // resolve ({\r\n // Id: \"ABCDEFP32389ASDFJ\",\r\n // PollType: \"Poll\",\r\n // Prompt: \"Which Animal is the best?\",\r\n // Status: \"Active\",\r\n // Options: \"Dogs;Cats;Fish;Turtles\",\r\n // MatchingOptions: null\r\n // })\r\n // });\r\n // }\r\n\r\n // insertPoll(poll){\r\n // return null;\r\n // }\r\n\r\n // insertSubmission(participant){\r\n // return new Promise((resolve, reject) => {\r\n // resolve ({\r\n // Id: \"RJSLFDJI290JDFAS\",\r\n // PollId: \"ABCDEFP32389ASDFJ\",\r\n // Response: \"Dogs\"\r\n // })\r\n // });\r\n // }\r\n\r\n // updateParticipant(participant){\r\n // return null;\r\n // }\r\n\r\n // getParticipant(participant){ \r\n // return new Promise((resolve, reject) => {\r\n // resolve ({\r\n // Id: \"RJSLFDJI290JDFAS\",\r\n // PollId: \"ABCDEFP32389ASDFJ\",\r\n // Response: \"Dogs\"\r\n // })\r\n // });\r\n // }\r\n\r\n}\r\n\r\nexport default CalloutBuilderMock;","import CalloutBuilder from \"./CalloutBuilder\";\r\nimport CalloutBuilderMock from \"./CalloutBuilderMock\";\r\nimport Constants from '../Constants';\r\n\r\nlet calloutBuilder = Constants.MOCK_API ? new CalloutBuilderMock : new CalloutBuilder();\r\n\r\nexport function getViewOnlyBracket(key){\r\n return calloutBuilder.getViewOnlyBracket(key);\r\n}\r\n\r\nexport function getAdminBracket(key){\r\n return calloutBuilder.getAdminBracket(key);\r\n}\r\n\r\nexport function createBracket(bracketInfo){\r\n return calloutBuilder.createBracket(bracketInfo);\r\n}\r\n\r\nexport function updateBracket(bracketInfo){\r\n return calloutBuilder.updateBracket(bracketInfo);\r\n}\r\n","import { useState, useEffect } from 'react';\r\n// import PropTypes from 'prop-types';\r\n\r\nimport './Toast.css';\r\n\r\nconst Toast = props => {\r\n const { toastList, position, autoDelete, autoDeleteTime } = props;\r\n const [list, setList] = useState(toastList);\r\n\r\n useEffect(() => {\r\n setList([...toastList]);\r\n }, [toastList]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => {\r\n if (autoDelete && toastList.length && list.length) {\r\n deleteToast(toastList[0].id);\r\n }\r\n }, autoDeleteTime);\r\n \r\n return () => {\r\n clearInterval(interval);\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [toastList, autoDelete, autoDeleteTime, list]);\r\n\r\n const deleteToast = id => {\r\n const listItemIndex = list.findIndex(e => e.id === id);\r\n const toastListItem = toastList.findIndex(e => e.id === id);\r\n list.splice(listItemIndex, 1);\r\n toastList.splice(toastListItem, 1);\r\n setList([...list]);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n {\r\n list.map((toast, i) => \r\n
    \r\n \r\n
    \r\n \"\"\r\n
    \r\n
    \r\n

    {toast.title}

    \r\n

    \r\n {toast.description}\r\n

    \r\n
    \r\n
    \r\n )\r\n }\r\n
    \r\n \r\n );\r\n}\r\n\r\n// Toast.propTypes = {\r\n// toastList: PropTypes.array.isRequired,\r\n// position: PropTypes.string.isRequired,\r\n// autoDelete: PropTypes.bool,\r\n// autoDeleteTime: PropTypes.number\r\n// }\r\n\r\nexport default Toast;","export default __webpack_public_path__ + \"static/media/check.d639b7bb.svg\";","export default __webpack_public_path__ + \"static/media/error.f4c49f9a.svg\";","export default __webpack_public_path__ + \"static/media/loading-icon.11c01773.gif\";","import React from \"react\";\r\nimport './LoadingWall.css';\r\nimport loadingIcon from './images/loading-icon.gif';\r\n\r\nclass LoadingWall extends React.Component {\r\n constructor(props){\r\n super(props);\r\n this.state = {\r\n };\r\n }\r\n\r\n render(){\r\n\r\n let classes = 'loading-wall';\r\n if(!this.props.isLoading){\r\n classes += ' hide';\r\n }\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n\r\n}\r\n\r\nexport default LoadingWall;","var StorageManager = function(StorageManager){\r\n\r\n\tStorageManager.setValue = function(key, value){\r\n\t\tlocalStorage.setItem(key, value);\r\n\t}\r\n\r\n\tStorageManager.getValue = function(key){\r\n\t\treturn (!!localStorage.getItem(key) ? localStorage.getItem(key) : null);\r\n\t}\r\n\tStorageManager.getValueAsJSON = function(key){\r\n\t\tlet stringValue = (!!localStorage.getItem(key) ? localStorage.getItem(key) : null);\r\n\t\treturn (stringValue === null) ? null : JSON.parse(stringValue);\r\n\t}\r\n\tStorageManager.setValueFromJSON = function(key, value){\r\n\t\tlocalStorage.setItem(key, JSON.stringify(value));\r\n\t}\r\n\r\n\t\r\n\t//generic methods\r\n\t//key types = [public-key, private-key, server-key, symmetric-key, session-id]\r\n\tStorageManager.storeKey = function(keyType, key){\r\n\t\tif(!!keyType){\r\n\t\t\tlocalStorage.setItem(keyType, key);\r\n\t\t}\r\n\t}\r\n\r\n\tStorageManager.clearKey = function(keyType){\r\n\t\tlocalStorage.setItem(keyType, null);\r\n\t}\r\n\r\n\tStorageManager.getKey = function(keyType){\r\n\t\treturn (!!localStorage.getItem(keyType) ? unescape(localStorage.getItem(keyType)) : null);\r\n\t}\r\n\r\n\treturn StorageManager;\r\n\r\n}(StorageManager || {});\r\n\r\nexport default StorageManager;","import StorageManager from './StorageManager';\r\nimport Constants from '../Constants';\r\n\r\nconst STORAGE_KEY = 'create-brackets'\r\nconst MOCK = Constants.MOCK_STORAGE;\r\n\r\n// create-brackets : {\r\n// id: {name: bracket, lastdate: date},\r\n// id2: {name: bracket2, lastdate: date},\r\n// }\r\n\r\nexport function getRecentCreateBrackets(){\r\n if(MOCK){\r\n return [{id: '12312123-1231-1232-123123123', title: 'Big Daddy Bracket'}, {id: '83838212-9234-9342-2392492341', title: 'Lil baby bracket'}]; //Mocked\r\n }\r\n return StorageManager.getValueAsJSON(STORAGE_KEY);\r\n}\r\n\r\nexport function setRecentCreateBackets(brackets){\r\n StorageManager.setValueFromJSON(STORAGE_KEY, brackets);\r\n}\r\n\r\nexport function addRecentCreateBracket(id, bracket){\r\n let recentBrackets = StorageManager.getValueAsJSON(STORAGE_KEY);\r\n let newBrackets = recentBrackets === null ? {} : recentBrackets;\r\n newBrackets[id] = bracket\r\n StorageManager.setValueFromJSON(STORAGE_KEY, newBrackets);\r\n return newBrackets;\r\n}\r\n\r\nexport function removeSavedCreateBracket(id){\r\n\r\n let recentBrackets = StorageManager.getValueAsJSON(STORAGE_KEY);\r\n\r\n let newBrackets = recentBrackets;\r\n if(recentBrackets !== null && recentBrackets[id] !== null){\r\n delete recentBrackets[id];\r\n newBrackets = recentBrackets;\r\n }else{\r\n console.log('bracket did not exist');\r\n return null;\r\n }\r\n StorageManager.setValueFromJSON(STORAGE_KEY, newBrackets);\r\n return newBrackets;\r\n}\r\n\r\n","import StorageManager from './StorageManager';\r\nimport Constants from '../Constants';\r\n\r\nconst STORAGE_KEY = 'view-brackets'\r\nconst MOCK = Constants.MOCK_STORAGE;\r\n\r\n// create-brackets : {\r\n// id: {name: bracket, lastdate: date},\r\n// id2: {name: bracket2, lastdate: date},\r\n// }\r\n\r\nexport function getRecentViewBrackets(){\r\n if(MOCK){\r\n return [{id: '12312123-1231-1232-123123123', title: 'Big Daddy Bracket'}, {id: '83838212-9234-9342-2392492341', title: 'Lil baby bracket'}]; //Mocked\r\n }\r\n return StorageManager.getValueAsJSON(STORAGE_KEY);\r\n}\r\n\r\nexport function setRecentViewBackets(brackets){\r\n StorageManager.setValueFromJSON(STORAGE_KEY, brackets);\r\n}\r\n\r\nexport function addRecentViewBracket(id, bracket){\r\n let recentBrackets = StorageManager.getValueAsJSON(STORAGE_KEY);\r\n let newBrackets = recentBrackets === null ? {} : recentBrackets;\r\n newBrackets[id] = bracket\r\n StorageManager.setValueFromJSON(STORAGE_KEY, newBrackets);\r\n return newBrackets;\r\n}\r\n\r\nexport function removeSavedViewBracket(id){\r\n\r\n let recentBrackets = StorageManager.getValueAsJSON(STORAGE_KEY);\r\n\r\n let newBrackets = recentBrackets;\r\n if(recentBrackets !== null && recentBrackets[id] !== null){\r\n delete recentBrackets[id];\r\n newBrackets = recentBrackets;\r\n }else{\r\n console.log('bracket did not exist');\r\n return null;\r\n }\r\n StorageManager.setValueFromJSON(STORAGE_KEY, newBrackets);\r\n return newBrackets;\r\n}\r\n\r\n","import StorageManager from './StorageManager';\r\nimport Constants from '../Constants';\r\n\r\nconst STORAGE_KEY = 'draft-bracket'\r\nconst MOCK = Constants.MOCK_STORAGE;\r\n\r\nexport function getBracketDraft(){\r\n if(MOCK){\r\n return{\r\n title: 'Bracket Draft',\r\n isDoubleElim: true,\r\n hideByes: false,\r\n bracket: [{\"roundNumber\":0,\"matchups\":[{\"id\":\"7a0bb337-e1fb-41b5-bcee-63dcf5cb8c49\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"BYE\",\"isBye\":true}],\"group\":0,\"round\":0,\"isBye\":true,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\",\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":0,\"position\":0}},{\"id\":\"4d8a269b-f0be-460d-94c4-af91de94d4a4\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":1,\"round\":0,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":0,\"position\":1},\"winner\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"id\":\"8c165dae-3a25-4c65-b359-a45fd021407a\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"BYE\",\"isBye\":true}],\"group\":2,\"round\":0,\"isBye\":true,\"winner\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\",\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":1,\"position\":0}},{\"id\":\"e0d39f35-3115-4057-aedd-2e0f5bdc2acc\",\"players\":[{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":3,\"round\":0,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":0,\"group\":1,\"position\":1},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":1,\"matchups\":[{\"id\":\"db2191c9-5885-4b8b-8c83-48d33b4df0f8\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"}],\"group\":0,\"round\":1,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":1,\"group\":1,\"position\":0},\"winner\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"id\":\"de4543ef-6c82-43fa-844a-2252a5e58fe6\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":1,\"round\":1,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":1,\"group\":0,\"position\":0},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":2,\"matchups\":[{\"id\":\"ebe28cae-527b-4674-bcbe-154289d3b377\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"group\":0,\"round\":2,\"nextOnLoss\":{\"bracket\":\"L\",\"round\":3,\"group\":0,\"position\":0},\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}]},{\"roundNumber\":3,\"matchups\":[{\"id\":\"5d8f3e25-2bb5-4bc7-b1a8-a939c758cc94\",\"players\":[{\"name\":\"Michael\",\"seed\":6,\"id\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":3,\"isDoubleElimPossibleFinal\":true,\"winner\":\"dbf17b23-ce4c-4581-8742-6c7d2268c014\"}],\"alternateName\":\"Championship (Game 1)\"},{\"roundNumber\":4,\"matchups\":[{\"id\":\"1fa51e4f-9e43-4fba-9a4f-162b31a98517\",\"players\":[{\"placeholder\":\"Not needed\"},{\"placeholder\":\"Not needed\"}],\"group\":0,\"round\":4,\"isDoubleElimFinal\":true}],\"alternateName\":\"Championship (Game 2)\"}],\r\n doubleElimBracket: [{\"roundNumber\":0,\"matchups\":[{\"id\":\"4cc844da-c917-43ac-9f70-be27a3404438\",\"players\":[{\"name\":\"BYE\",\"isBye\":true},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":0,\"round\":0,\"isBye\":true,\"winner\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"id\":\"bd24a0f4-649b-479a-9597-69320b1d4803\",\"players\":[{\"name\":\"BYE\",\"isBye\":true},{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}],\"group\":1,\"round\":0,\"isBye\":true,\"winner\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}]},{\"roundNumber\":1,\"matchups\":[{\"id\":\"f19e3242-c731-47eb-bbd1-1b0b4e1d51d6\",\"players\":[{\"name\":\"Ryan\",\"seed\":2,\"id\":\"00b4705d-2977-4683-8fa1-31ed38bf58b8\"},{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"}],\"group\":0,\"round\":1,\"winner\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"id\":\"c75ddf24-419a-45b5-aa75-2494bea9f567\",\"players\":[{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"},{\"name\":\"Dan\",\"seed\":3,\"id\":\"2e581d64-e347-431f-ab36-8d4b614bcd9a\"}],\"group\":1,\"round\":1,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]},{\"roundNumber\":2,\"matchups\":[{\"id\":\"f9a2c909-c5b8-4ada-8dee-c198a62a4153\",\"players\":[{\"name\":\"Nick\",\"seed\":5,\"id\":\"d686c107-bd26-4c98-8092-f0aa431940c4\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":2,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]},{\"roundNumber\":3,\"matchups\":[{\"id\":\"0e5c7923-ade8-4f61-b66b-b77aa40f2086\",\"players\":[{\"name\":\"Richie\",\"seed\":4,\"id\":\"d0de818d-0df2-4294-8a78-a828ecd5ca7a\"},{\"name\":\"Austin\",\"seed\":1,\"id\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}],\"group\":0,\"round\":3,\"winner\":\"62e62f00-0aeb-4f40-92dd-bce4a59fc0ae\"}]}]\r\n }\r\n }\r\n return StorageManager.getValueAsJSON(STORAGE_KEY);\r\n}\r\n\r\nexport function setBracketDraft(draft){\r\n StorageManager.setValueFromJSON(STORAGE_KEY, draft);\r\n}\r\n\r\n","export default function getURLParam(paramKey){\r\n // const queryString = window.location.search;\r\n // console.log(queryString);\r\n // const urlParams = new URLSearchParams(queryString);\r\n \r\n // let queryValue = null;\r\n // if(urlParams.has(paramKey)){\r\n // queryValue = urlParams.get(paramKey);\r\n // }\r\n // return queryValue;\r\n const params = new Proxy(new URLSearchParams(window.location.search), {\r\n get: (searchParams, prop) => searchParams.get(prop),\r\n });\r\n // Get the value of \"some_key\" in eg \"https://example.com/?some_key=some_value\"\r\n return params[paramKey]; // \"some_value\"\r\n}\r\n","import React from \"react\";\r\nimport '../BracketDisplay.css';\r\nimport {generateUUID} from \"../UUIDGenerator\";\r\nimport SettingsControl from \"./SettingsControl\";\r\nimport SettingsPanel from \"./SettingsPanel\";\r\nimport BracketContainer from \"./BracketContainer\";\r\nimport HomeControl from \"../HomeControl\";\r\nimport PublishControl from \"./PublishControl\";\r\nimport PublishPanel from \"./PublishPanel\";\r\nimport {createBracket, updateBracket, getAdminBracket} from \"../callouts/CalloutFactory\";\r\nimport Toast from '../Toast';\r\nimport checkIcon from '../images/check.svg';\r\nimport errorIcon from '../images/error.svg';\r\nimport LoadingWall from \"../LoadingWall\";\r\nimport {addRecentCreateBracket} from \"../localstorage/StorageHelper_CreateBrackets\";\r\nimport {addRecentViewBracket} from \"../localstorage/StorageHelper_ViewBrackets\";\r\nimport {getBracketDraft, setBracketDraft} from \"../localstorage/StorageHelper_BracketDraft\";\r\nimport getURLParam from \"../ParameterRetrieval\";\r\nimport {getContestantsFromBracket} from \"../BracketCreationHelper\";\r\nimport Constants from '../Constants';\r\n\r\nlet TEMP_CONTESTANTS = [\r\n {name: \"Person 1\", seed: 1},\r\n {name: \"Person 2\", seed: 2},\r\n {name: \"Person 3\", seed: 3},\r\n {name: \"Person 4\", seed: 4}\r\n];\r\n\r\nclass AppContainer extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n\r\n let contestants = TEMP_CONTESTANTS.map(contestant => {\r\n contestant.id = generateUUID();\r\n return contestant;\r\n })\r\n\r\n let defaultTourneyName = 'Tournament Bracket';\r\n\r\n this.state = {\r\n //setup\r\n displaySettingsPanel: false,\r\n displayPublishPanel: false,\r\n tourneyName: defaultTourneyName,\r\n isDoubleElim: false,\r\n hideByes: false,\r\n contestants: contestants,\r\n brackets: [],\r\n toastMessages: [],\r\n toastPosition: 'top-left',\r\n isLoading: false,\r\n viewOnlyBracketId: null,\r\n originalLoad: false\r\n };\r\n\r\n this.openSettingsPanel = this.openSettingsPanel.bind(this);\r\n this.closeSettingsPanel = this.closeSettingsPanel.bind(this);\r\n this.openPublishPanel = this.openPublishPanel.bind(this);\r\n this.closePublishPanel = this.closePublishPanel.bind(this);\r\n this.setDoubleElim = this.setDoubleElim.bind(this);\r\n this.setHideByes = this.setHideByes.bind(this);\r\n this.setContestants = this.setContestants.bind(this);\r\n this.setTourneyName = this.setTourneyName.bind(this);\r\n this.clearContestants = this.clearContestants.bind(this);\r\n this.publishBracket = this.publishBracket.bind(this);\r\n this.saveBrackets = this.saveBrackets.bind(this);\r\n this.showErrorToast = this.showErrorToast.bind(this);\r\n this.showInfoToast = this.showInfoToast.bind(this);\r\n this.getBracket = this.getBracket.bind(this);\r\n this.navigateToCreate = this.navigateToCreate.bind(this);\r\n this.navigateToLandingPage = this.navigateToLandingPage.bind(this);\r\n }\r\n\r\n componentDidMount(){\r\n this.getBracket();\r\n }\r\n\r\n getBracket(){\r\n console.log('retrieving bracket');\r\n this.setState({isLoading: true});\r\n let bracketId = getURLParam('bracketid');\r\n if(bracketId){\r\n getAdminBracket(bracketId).then(result => {\r\n console.log(result);\r\n let bracket = JSON.parse(result.bracket);\r\n let doubleElimBracket = JSON.parse(result.doubleElimBracket);\r\n this.setState({\r\n isDoubleElim: result.isDoubleElim,\r\n tourneyName: result.title,\r\n hideByes: result.hideByes,\r\n defaultBracket: bracket,\r\n defaultDoubleElimBracket: doubleElimBracket,\r\n viewOnlyBracketId: result.view_id,\r\n contestants: getContestantsFromBracket(bracket)\r\n })\r\n if(bracket){\r\n addRecentCreateBracket(bracketId, {title: result.title, lastdate: new Date().getTime()})\r\n }\r\n \r\n }).catch(error => {\r\n this.showErrorToast('Bracket does not exist');\r\n console.log('was unable to fetch bracket');\r\n this.navigateToLandingPage();\r\n\r\n }).finally(() => {\r\n this.setState({\r\n isLoading: false,\r\n originalLoad: true\r\n });\r\n });\r\n }else{\r\n let draft = getBracketDraft();\r\n if(draft){\r\n this.setState({\r\n isDoubleElim: draft.isDoubleElim,\r\n tourneyName: draft.title,\r\n hideByes: draft.hideByes,\r\n defaultBracket: draft.bracket,\r\n defaultDoubleElimBracket: draft.doubleElimBracket,\r\n contestants: getContestantsFromBracket(draft.bracket)\r\n })\r\n }\r\n this.setState({\r\n isLoading: false,\r\n originalLoad: true\r\n });\r\n }\r\n }\r\n\r\n publishBracket(){\r\n console.log('publishing bracket');\r\n this.setState({isLoading: true});\r\n if(!getURLParam('bracketid')){\r\n createBracket({\r\n title: this.state.tourneyName,\r\n isDoubleElim: this.state.isDoubleElim,\r\n hideByes: this.state.hideByes,\r\n bracket: JSON.stringify(this.state.brackets.bracket),\r\n doubleElimBracket: JSON.stringify(this.state.brackets.doubleElimBracket)\r\n }).then(result => {\r\n console.log(result);\r\n \r\n if(result.bracket_id){\r\n this.setState({viewOnlyBracketId: result.view_id})\r\n this.showSuccessToast();\r\n \r\n addRecentViewBracket(result.view_id, {title: result.title, lastdate: new Date().getTime()})\r\n addRecentCreateBracket(result.bracket_id, {title: result.title, lastdate: new Date().getTime()})\r\n setBracketDraft(null);\r\n setTimeout(() => {\r\n this.navigateToCreate(result.bracket_id);\r\n }, 2000);\r\n }\r\n \r\n }).catch(error => {\r\n this.showErrorToast('There was an error publishing your bracket');\r\n console.log('was unable to publish bracket');\r\n this.setState({isLoading: false});\r\n });\r\n }else{\r\n updateBracket({\r\n bracketId: getURLParam('bracketid'),\r\n title: this.state.tourneyName,\r\n isDoubleElim: this.state.isDoubleElim,\r\n hideByes: this.state.hideByes,\r\n bracket: JSON.stringify(this.state.brackets.bracket),\r\n doubleElimBracket: JSON.stringify(this.state.brackets.doubleElimBracket)\r\n }).then(result => {\r\n console.log(result);\r\n \r\n if(result.bracket_id){\r\n this.setState({viewOnlyBracketId: result.view_id})\r\n this.showSuccessToast();\r\n \r\n addRecentViewBracket(result.view_id, {title: result.title, lastdate: new Date().getTime()})\r\n addRecentCreateBracket(result.bracket_id, {title: result.title, lastdate: new Date().getTime()})\r\n }\r\n \r\n }).catch(error => {\r\n this.showErrorToast('There was an error publishing your bracket');\r\n console.log('was unable to publish bracket');\r\n }).finally(() => {\r\n this.setState({isLoading: false});\r\n });\r\n }\r\n \r\n }\r\n \r\n navigateToCreate(bracketId){\r\n window.location.replace(Constants.HOST_URL + \"/create/?bracketid=\" + bracketId);\r\n }\r\n \r\n navigateToLandingPage(){\r\n window.location.replace(Constants.HOST_URL);\r\n }\r\n\r\n openSettingsPanel(){\r\n this.setState({displaySettingsPanel: true});\r\n this.setState({displayPublishPanel: false});\r\n }\r\n\r\n closeSettingsPanel(){\r\n this.setState({displaySettingsPanel: false});\r\n }\r\n \r\n openPublishPanel(){\r\n this.setState({displayPublishPanel: true});\r\n this.setState({displaySettingsPanel: false});\r\n }\r\n\r\n closePublishPanel(){\r\n this.setState({displayPublishPanel: false});\r\n }\r\n\r\n setDoubleElim(status){\r\n this.setState({isDoubleElim: status});\r\n this.storeDraftLocally(this.state.tourneyName, status, this.state.hideByes, this.state.brackets.bracket, this.state.brackets.doubleElimBracket);\r\n }\r\n\r\n setHideByes(status){\r\n this.setState({hideByes: status});\r\n this.storeDraftLocally(this.state.tourneyName, this.state.isDoubleElim, status, this.state.brackets.bracket, this.state.brackets.doubleElimBracket);\r\n }\r\n\r\n setContestants(contestantList){\r\n this.setState({contestants: contestantList})\r\n }\r\n\r\n setTourneyName(name){\r\n this.setState({tourneyName: name});\r\n this.storeDraftLocally(name, this.state.isDoubleElim, this.state.hideByes, this.state.brackets.bracket, this.state.brackets.doubleElimBracket);\r\n }\r\n\r\n clearContestants(){\r\n this.setState({contestants: []});\r\n }\r\n\r\n saveBrackets(brackets){\r\n this.setState({brackets: brackets});\r\n this.storeDraftLocally(this.state.tourneyName, this.state.isDoubleElim, this.state.hideByes, brackets.bracket, brackets.doubleElimBracket);\r\n }\r\n\r\n storeDraftLocally(title, isDoubleElim, hideByes, bracket, doubleElimBracket){\r\n \r\n if(!getURLParam('bracketid')){\r\n setBracketDraft({\r\n title: title,\r\n isDoubleElim: isDoubleElim,\r\n hideByes: hideByes,\r\n bracket: bracket,\r\n doubleElimBracket: doubleElimBracket\r\n });\r\n }\r\n }\r\n\r\n showErrorToast(message){\r\n let toastMessages = [...this.state.toastMessages];\r\n toastMessages.push({\r\n id: Math.floor((Math.random() * 101) + 1),\r\n title: 'Error',\r\n description: message,\r\n backgroundColor: '#d9534f',\r\n icon: errorIcon\r\n });\r\n this.setState({toastMessages: toastMessages});\r\n }\r\n\r\n showSuccessToast(){\r\n let toastMessages = [...this.state.toastMessages];\r\n toastMessages.push({\r\n id: Math.floor((Math.random() * 101) + 1),\r\n title: 'Success',\r\n description: 'The bracket was published successfully',\r\n backgroundColor: '#5cb85c',\r\n icon: checkIcon\r\n });\r\n this.setState({toastMessages: toastMessages});\r\n }\r\n\r\n showInfoToast(message){\r\n let toastMessages = [...this.state.toastMessages];\r\n toastMessages.push({\r\n id: Math.floor((Math.random() * 101) + 1),\r\n title: 'Success',\r\n description: message,\r\n backgroundColor: '#4a4d4e',\r\n icon: checkIcon\r\n });\r\n this.setState({toastMessages: toastMessages});\r\n }\r\n\r\n render(){\r\n let conditionalDisplay = [];\r\n \r\n if(this.state.displaySettingsPanel){\r\n conditionalDisplay.push(\r\n
    \r\n \r\n \r\n
    \r\n );\r\n\r\n }\r\n\r\n if(this.state.displayPublishPanel){\r\n conditionalDisplay.push(\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n\r\n if(this.state.originalLoad){\r\n return (\r\n
    \r\n {conditionalDisplay}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n\r\n }else{\r\n return ();\r\n }\r\n }\r\n}\r\n\r\nexport default AppContainer;\r\n","import React from \"react\";\r\nimport '../BracketDisplay.css';\r\nimport BracketDisplay from \"../BracketDisplay\";\r\n\r\nimport { getViewOnlyBracket } from \"../callouts/CalloutFactory\";\r\nimport getURLParam from \"../ParameterRetrieval\";\r\nimport Toast from '../Toast';\r\nimport checkIcon from '../images/check.svg';\r\nimport errorIcon from '../images/error.svg';\r\nimport LoadingWall from \"../LoadingWall\";\r\nimport {addRecentViewBracket} from \"../localstorage/StorageHelper_ViewBrackets\";\r\nimport Constants from \"../Constants\";\r\n\r\nclass ViewOnlyBracketContainer extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n\r\n let bracket = null;\r\n let doubleElimBracket = null;\r\n\r\n this.state = {\r\n bracket: bracket,\r\n doubleElimBracket: doubleElimBracket,\r\n isDoubleElim: false,\r\n tourneyName: \"Unknown Tournament\",\r\n toastMessages: [],\r\n toastPosition: 'top-left',\r\n hideByes: false\r\n };\r\n\r\n this.getDoubleElimDisplay = this.getDoubleElimDisplay.bind(this);\r\n this.getBracketDisplay = this.getBracketDisplay.bind(this);\r\n }\r\n\r\n componentDidMount(){\r\n this.getBracket(true);\r\n\r\n if(!Constants.MOCK_API){\r\n setInterval(() => {\r\n this.getBracket(false);\r\n console.log('bracket reloaded...');\r\n }, 60000);\r\n }\r\n }\r\n\r\n \r\n getBracket(showLoad){\r\n console.log('retrieving bracket');\r\n if(showLoad){\r\n this.setState({isLoading: true});\r\n }\r\n let bracketId = getURLParam('bracketid');\r\n getViewOnlyBracket(bracketId).then(result => {\r\n console.log(result);\r\n let bracket = JSON.parse(result.bracket);\r\n let doubleElimBracket = JSON.parse(result.doubleElimBracket);\r\n this.setState({\r\n bracket: bracket,\r\n doubleElimBracket: doubleElimBracket,\r\n hideByes: result.hideByes,\r\n isDoubleElim: result.isDoubleElim,\r\n tourneyName: result.title\r\n })\r\n if(bracket){\r\n addRecentViewBracket(bracketId, {title: result.title, lastdate: new Date().getTime()})\r\n } \r\n }).catch(error => {\r\n this.showErrorToast('There was an error loading your bracket');\r\n console.log('was unable to publish bracket');\r\n }).finally(() => {\r\n this.setState({isLoading: false});\r\n });\r\n }\r\n\r\n\r\n showErrorToast(message){\r\n let toastMessages = [...this.state.toastMessages];\r\n toastMessages.push({\r\n id: Math.floor((Math.random() * 101) + 1),\r\n title: 'Error',\r\n description: message,\r\n backgroundColor: '#d9534f',\r\n icon: errorIcon\r\n });\r\n this.setState({toastMessages: toastMessages});\r\n }\r\n\r\n showSuccessToast(){\r\n let toastMessages = [...this.state.toastMessages];\r\n toastMessages.push({\r\n id: Math.floor((Math.random() * 101) + 1),\r\n title: 'Success',\r\n description: 'The bracket was published successfully',\r\n backgroundColor: '#5cb85c',\r\n icon: checkIcon\r\n });\r\n this.setState({toastMessages: toastMessages});\r\n\r\n }\r\n getDoubleElimDisplay(){\r\n\r\n let hideByes = this.state.hideByes !== undefined ? this.state.hideByes : false;\r\n let isDoubleElim = this.state.isDoubleElim !== undefined ? this.state.isDoubleElim : false;\r\n\r\n let doubleElimDisplay = (
    );\r\n if(isDoubleElim && this.state.doubleElimBracket){\r\n doubleElimDisplay = \r\n }\r\n\r\n return doubleElimDisplay;\r\n }\r\n\r\n getBracketDisplay(){\r\n\r\n let hideByes = this.state.hideByes !== undefined ? this.state.hideByes : false;\r\n\r\n let bracketDisplay = (
    );\r\n if(this.state.bracket){\r\n bracketDisplay = (
    \r\n \r\n
    );\r\n }\r\n return bracketDisplay;\r\n }\r\n \r\n render(){ \r\n let bracketDisplay = this.getBracketDisplay();\r\n let doubleElimDisplay = this.getDoubleElimDisplay();\r\n\r\n return (\r\n
    \r\n {bracketDisplay}\r\n {doubleElimDisplay}\r\n \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default ViewOnlyBracketContainer;\r\n","import React from \"react\";\r\nimport '../BracketDisplay.css';\r\nimport ViewOnlyBracketContainer from \"./ViewOnlyBracketContainer\";\r\nimport HomeControl from \"../HomeControl\";\r\n\r\nclass ViewOnlyAppContainer extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n\r\n this.state = {\r\n //setup\r\n displaySettingsPanel: false,\r\n displayPublishPanel: false,\r\n hideByes: false,\r\n isLoading: false,\r\n viewOnlyBracketId: null\r\n };\r\n\r\n }\r\n\r\n render(){\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n
    View Only
    \r\n
    \r\n
    \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default ViewOnlyAppContainer;\r\n","export default __webpack_public_path__ + \"static/media/right-arrow.2ca62032.png\";","import React from \"react\";\r\nimport InputBox from \"../InputBox\";\r\nimport RightArrowIcon from \"../images/right-arrow.png\";\r\nimport Constants from \"../Constants\";\r\nimport openNewTabIcon from \"../images/open-new-tab-icon.png\";\r\n\r\nclass CreateBracketPanel extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {\r\n createId: '',\r\n bracketsToUpdate: this.props.bracketsToUpdate ? this.props.bracketsToUpdate : []\r\n };\r\n\r\n this.openCreateLink = this.openCreateLink.bind(this);\r\n this.setCreateId = this.setCreateId.bind(this);\r\n this.navigateToCreate = this.navigateToCreate.bind(this);\r\n\r\n }\r\n\r\n\r\n openCreateLink(event){\r\n let bracketId = this.state.createId;\r\n window.location.href = Constants.HOST_URL + \"/create/?bracketid=\" + bracketId;\r\n }\r\n\r\n setCreateId(event){\r\n let createId = event.currentTarget.value;\r\n this.setState({createId: createId});\r\n // this.props.setCreateId(createId);\r\n }\r\n\r\n navigateToCreate(event){\r\n let bracketId = event.currentTarget.dataset.name;\r\n window.location.href = Constants.HOST_URL + \"/create/?bracketid=\" + bracketId;\r\n }\r\n\r\n navigateToNew(event){\r\n let bracketId = event.currentTarget.dataset.name;\r\n window.location.href = Constants.HOST_URL + \"/create\";\r\n }\r\n\r\n render(){\r\n let listOfBracketsToUpdate = [];\r\n if(Object.keys(this.state.bracketsToUpdate).length > 0){\r\n listOfBracketsToUpdate = Object.keys(this.state.bracketsToUpdate).map(id => {\r\n return (
    \r\n
    {this.state.bracketsToUpdate[id].title}
    \r\n
    )\r\n });\r\n }\r\n\r\n if(listOfBracketsToUpdate.length > 0){\r\n listOfBracketsToUpdate = [(
    {listOfBracketsToUpdate}
    )];\r\n listOfBracketsToUpdate.unshift((
    Recent Brackets
    ))\r\n }\r\n\r\n\r\n return (\r\n <>\r\n
    \r\n\r\n \r\n\r\n
    \r\n\r\n
    Open Bracket
    \r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n {listOfBracketsToUpdate}\r\n
    \r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default CreateBracketPanel;\r\n","import React from \"react\";\r\nimport InputBox from \"../InputBox\";\r\nimport RightArrowIcon from \"../images/right-arrow.png\";\r\nimport Constants from \"../Constants\";\r\nimport \"./LandingBracketPanels.css\";\r\nimport openNewTabIcon from \"../images/open-new-tab-icon.png\";\r\n\r\n\r\nclass ViewBracketPanel extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {\r\n viewId: '',\r\n bracketsToView: this.props.bracketsToView ? this.props.bracketsToView : []\r\n };\r\n\r\n this.openViewLink = this.openViewLink.bind(this);\r\n this.setViewId = this.setViewId.bind(this);\r\n this.navigateToView = this.navigateToView.bind(this);\r\n\r\n }\r\n\r\n\r\n openViewLink(event){\r\n let bracketId = this.state.viewId;\r\n window.location.href = Constants.HOST_URL + \"/view/?bracketid=\" + bracketId;\r\n }\r\n\r\n setViewId(event){\r\n let viewId = event.currentTarget.value;\r\n this.setState({viewId: viewId});\r\n // this.props.setViewId(viewId);\r\n }\r\n\r\n navigateToView(event){\r\n let bracketId = event.currentTarget.dataset.name;\r\n window.location.href = Constants.HOST_URL + \"/view/?bracketid=\" + bracketId;\r\n }\r\n\r\n render(){\r\n let listOfBracketsToView = [];\r\n if(Object.keys(this.state.bracketsToView).length > 0){\r\n listOfBracketsToView = Object.keys(this.state.bracketsToView).map(id => {\r\n return (
    \r\n
    {this.state.bracketsToView[id].title}
    \r\n
    )\r\n });\r\n }\r\n\r\n if(listOfBracketsToView.length > 0){\r\n listOfBracketsToView = [(
    {listOfBracketsToView}
    )];\r\n listOfBracketsToView.unshift((
    Recent Brackets
    ))\r\n }\r\n\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n
    View Bracket
    \r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n {listOfBracketsToView}\r\n
    \r\n\r\n {/* */}\r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ViewBracketPanel;\r\n","export default __webpack_public_path__ + \"static/media/cancel-icon.b1fc8a4c.png\";","import React from \"react\";\r\nimport './Panel.css';\r\nimport cancelIcon from './images/cancel-icon.png';\r\n\r\n\r\nclass Panel extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = { };\r\n this.closePanel = this.closePanel.bind(this);\r\n\r\n }\r\n\r\n closePanel(){\r\n this.props.closePanel();\r\n }\r\n\r\n render(){\r\n let panelBackgroundClass = 'panel-background';\r\n\r\n if(!this.props.shouldDisplay){\r\n panelBackgroundClass += ' hide';\r\n }\r\n\r\n if(this.props.shouldDisplay){\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    {this.props.headerText}
    \r\n
    \"close-button\"
    \r\n
    \r\n \r\n {this.props.content}\r\n
    \r\n
    \r\n );\r\n }else{\r\n return (
    );\r\n }\r\n }\r\n}\r\n\r\nexport default Panel;\r\n","export default __webpack_public_path__ + \"static/media/tournament-theme.4037a858.png\";","import React from \"react\";\r\nimport CreateBracketPanel from \"./CreateBracketPanel\";\r\nimport ViewBracketPanel from \"./ViewBracketPanel\";\r\nimport Panel from \"../Panel\";\r\nimport \"./LandingNavigation.css\";\r\nimport {getRecentCreateBrackets} from \"../localstorage/StorageHelper_CreateBrackets\";\r\nimport {getRecentViewBrackets} from \"../localstorage/StorageHelper_ViewBrackets\";\r\nimport LogoIcon from \"../images/tournament-theme.png\";\r\n// import './LandingNav.css';\r\n// import AppContainer from \"./AppContainer\";\r\n// import { BrowserRouter as Router,Routes, Route, Link } from 'react-router-dom';\r\n// import ViewOnlyAppContainer from \"./view/ViewOnlyAppContainer\";\r\n\r\nclass LandingNav extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {\r\n displayViewPanel: false,\r\n displayCreatePanel: false,\r\n createId: '',\r\n viewId: '',\r\n bracketsToUpdate: getRecentCreateBrackets(),\r\n bracketsToView: getRecentViewBrackets() //Temp: Read bracketsToUpdate from storageManager\r\n };\r\n\r\n this.openCreatePanel = this.openCreatePanel.bind(this);\r\n this.openViewPanel = this.openViewPanel.bind(this);\r\n this.closeViewPanel = this.closeViewPanel.bind(this);\r\n this.closeCreatePanel = this.closeCreatePanel.bind(this);\r\n\r\n }\r\n\r\n openViewPanel(){\r\n //open modal with recent modals you've viewed\r\n this.setState({displayViewPanel: true});\r\n }\r\n\r\n openCreatePanel(){\r\n //open modal with most recent brackets you've created\r\n this.setState({displayCreatePanel: true});\r\n }\r\n\r\n closeViewPanel(){\r\n //open modal with recent modals you've viewed\r\n this.setState({displayViewPanel: false});\r\n }\r\n\r\n closeCreatePanel(){\r\n //open modal with recent modals you've viewed\r\n this.setState({displayCreatePanel: false});\r\n }\r\n\r\n // openCreateLink(event){\r\n // let bracketId = this.state.viewId;\r\n // window.location.href = Constants.HOST_URL + \"/create/?bracketid=\" + bracketId;\r\n // }\r\n\r\n // setCreateId(event){\r\n // let createId = event.currentTarget.value;\r\n // this.setState({createId: createId});\r\n // }\r\n\r\n render(){\r\n \r\n return (\r\n <>\r\n \r\n
    \r\n
    \r\n
    Bracket Generator
    \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\nexport default LandingNav;\r\n","import React from \"react\";\r\nimport './App.css';\r\nimport AppContainer from \"./create/AppContainer\";\r\nimport { BrowserRouter as Router,Routes, Route, Link } from 'react-router-dom';\r\nimport ViewOnlyAppContainer from \"./view/ViewOnlyAppContainer\";\r\nimport LandingNav from \"./landing/LandingNavigation\";\r\n\r\nclass App extends React.Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = {};\r\n\r\n }\r\n\r\n render(){\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 Bracket Generator\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\nexport default App;\r\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}