{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/renderer/api/venue.ts","webpack:///./src/renderer/assets/default/tournament_background.png","webpack:///./src/renderer/modules/auth/auth.store.ts","webpack:///./src/renderer/utils/endpoint.ts","webpack:///./src/renderer/api/match.ts","webpack:///./src/renderer/modules/shared/components/VFormFileUploader/VFormFileUploader.vue?0a91","webpack:///./src/renderer/utils/cancel.ts","webpack:///./src/renderer/api/stage.ts","webpack:///./src/renderer/utils/server_error.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/renderer/utils/gameType.ts","webpack:///./src/renderer/modules/payment/payment.store.ts","webpack:///./src/renderer/modules/payment/components/PayPalButton/PayPalButton.vue?6080","webpack:///./src/renderer/modules/venue/venue.store.ts","webpack:///./src/renderer/modules/campaign/example_campaign/routes/index.ts","webpack:///./src/main/integrations/lcu/liveclient/types.ts","webpack:///./src/renderer/assets/default/logo.png","webpack:///./src/renderer/utils/oidc.ts","webpack:///./src/renderer/store/index.ts","webpack:///./src/renderer/modules/shared/components/AppButton/AppButton.vue?1532","webpack:///./src/renderer/plugins/TournamentBracket/components/BracketTeam.vue?e1be","webpack:///./src/renderer/lang/index.ts","webpack:///./src/renderer/api/index.ts","webpack:///./src/renderer/App.vue?e3e6","webpack:///./src/renderer/modules/instant/components/InstantMatchSnackBar/InstantMatchSnackBar.vue?42e3","webpack:///./src/renderer/utils/autoUpdate.ts","webpack:///./src/renderer/utils/time.ts","webpack:///./src/renderer/plugins/TournamentBracket/RoundRobinBracket.vue?3ffb","webpack:///./src/renderer/modules/shared/components/AppButton/AppButton.vue?378f","webpack:///./src/renderer/modules/shared/components/AppButton/AppButton.vue","webpack:///./src/renderer/modules/shared/components/AppButton/AppButton.vue?4e1e","webpack:///./src/renderer/modules/shared/components/AppButton/AppButton.vue?7844","webpack:///./src/renderer/api/config.ts","webpack:///./src/renderer/modules/payment/components/TournamentEntryFeePaymentDialog/TournamentEntryFeePaymentDialog.vue?dfbf","webpack:///./src/renderer/api/member.ts","webpack:///./src/renderer/utils/checkTransactionStatus.ts","webpack:///./src/renderer/api/payment.ts","webpack:///./src/renderer/modules/shared/layout.store.ts","webpack:///./src/renderer/modules/integration/integration.store.ts","webpack:///./src/renderer/utils/requestLogin.ts","webpack:///./src/renderer/modules/campaign sync \\/routes\\/index.ts$/","webpack:///./src/renderer/api/tournamentTeam.ts","webpack:///./src/renderer/modules/catalog/routes/index.ts","webpack:///./src/renderer/modules/tournament/routes/index.ts","webpack:///./src/renderer/modules/instant/routes/index.ts","webpack:///./src/renderer/modules/match/routes/index.ts","webpack:///./src/renderer/modules/auth/routes/index.ts","webpack:///./src/renderer/modules/member/homeshop/routes/index.ts","webpack:///./src/renderer/modules/member/routes/index.ts","webpack:///./src/renderer/modules/payment/routes/index.ts","webpack:///./src/renderer/router/app.ts","webpack:///./src/renderer/modules/draft/routes/index.ts","webpack:///./src/renderer/settings.ts","webpack:///./src/renderer/modules/campaign/routes.ts","webpack:///./src/renderer/router/index.ts","webpack:///./src/renderer/utils/electron.ts","webpack:///./src/renderer/plugins/TournamentBracket/FreeForAllBracket.vue?068e","webpack:///./src/renderer/plugins/QuillDelta/QuillDelta.vue?efd7","webpack:///./src/renderer/utils/class-component-hooks.ts","webpack:///./src/renderer/App.vue?d79c","webpack:///./src/renderer/modules/instant/components/InstantMatchSnackBar/InstantMatchSnackBar.vue?bb4c","webpack:///./src/renderer/modules/instant/components/InstantMatchSnackBar/InstantMatchSnackBar.vue","webpack:///./src/renderer/modules/instant/components/InstantMatchSnackBar/InstantMatchSnackBar.vue?970d","webpack:///./src/renderer/modules/instant/components/InstantMatchSnackBar/InstantMatchSnackBar.vue?9138","webpack:///./src/renderer/modules/instant/components/InstantMatchSnackBar/index.ts","webpack:///./src/renderer/modules/payment/components/TournamentEntryFeePaymentDialog/TournamentEntryFeePaymentDialog.vue?b26e","webpack:///./src/renderer/modules/payment/components/PayPalButton/PayPalButton.vue?e1a1","webpack:///./src/renderer/modules/payment/components/PayPalButton/PayPalButton.vue","webpack:///./src/renderer/modules/payment/components/PayPalButton/PayPalButton.vue?9b36","webpack:///./src/renderer/modules/payment/components/PayPalButton/PayPalButton.vue?2726","webpack:///./src/renderer/modules/payment/components/PayPalButton/index.ts","webpack:///./src/renderer/modules/payment/components/TournamentEntryFeePaymentDialog/TournamentEntryFeePaymentDialog.vue","webpack:///./src/renderer/modules/payment/components/TournamentEntryFeePaymentDialog/TournamentEntryFeePaymentDialog.vue?9cf8","webpack:///./src/renderer/modules/payment/components/TournamentEntryFeePaymentDialog/TournamentEntryFeePaymentDialog.vue?1e08","webpack:///./src/renderer/modules/payment/components/TournamentEntryFeePaymentDialog/index.ts","webpack:///./src/renderer/App.vue","webpack:///./src/renderer/App.vue?bfbd","webpack:///./src/renderer/App.vue?6968","webpack:///./src/renderer/plugins/vuetify.ts","webpack:///./src/renderer/moment/index.ts","webpack:///./src/renderer/plugins/TournamentBracket/Bracket.vue?a123","webpack:///./src/renderer/plugins/TournamentBracket/components/BracketTeam.vue?07c2","webpack:///./src/renderer/plugins/TournamentBracket/components/BracketTeam.vue","webpack:///./src/renderer/plugins/TournamentBracket/components/BracketTeam.vue?223f","webpack:///./src/renderer/plugins/TournamentBracket/components/BracketTeam.vue?2b53","webpack:///./src/renderer/plugins/TournamentBracket/Bracket.vue","webpack:///./src/renderer/plugins/TournamentBracket/Bracket.vue?4309","webpack:///./src/renderer/plugins/TournamentBracket/Bracket.vue?ef95","webpack:///./src/renderer/plugins/TournamentBracket/RoundRobinBracket.vue?b0d2","webpack:///./src/renderer/plugins/TournamentBracket/RoundRobinBracket.vue","webpack:///./src/renderer/plugins/TournamentBracket/RoundRobinBracket.vue?f1a5","webpack:///./src/renderer/plugins/TournamentBracket/RoundRobinBracket.vue?1bac","webpack:///./src/renderer/plugins/TournamentBracket/FreeForAllBracket.vue?4487","webpack:///./src/renderer/plugins/TournamentBracket/FreeForAllBracket.vue","webpack:///./src/renderer/plugins/TournamentBracket/FreeForAllBracket.vue?66ea","webpack:///./src/renderer/plugins/TournamentBracket/FreeForAllBracket.vue?bb70","webpack:///./src/renderer/plugins/TournamentBracket/index.ts","webpack:///./src/renderer/plugins/Markdown/Markdown.vue","webpack:///./src/renderer/plugins/Markdown/Markdown.vue?0e76","webpack:///./src/renderer/plugins/Markdown/Markdown.vue?bfbf","webpack:///./src/renderer/plugins/Markdown/index.ts","webpack:///./src/renderer/plugins/QuillDelta/QuillDelta.vue","webpack:///./src/renderer/plugins/QuillDelta/QuillDelta.vue?2eb6","webpack:///./src/renderer/plugins/QuillDelta/QuillDelta.vue?5178","webpack:///./src/renderer/plugins/QuillDelta/index.ts","webpack:///./src/renderer/plugins/ImageFallback/directives.ts","webpack:///./src/renderer/modules/shared/components/VFormFileUploader/VFormFileUploader.vue?6d08","webpack:///./src/renderer/modules/shared/components/VFormFileUploader/VFormFileUploader.vue","webpack:///./src/renderer/modules/shared/components/VFormFileUploader/VFormFileUploader.vue?e6a9","webpack:///./src/renderer/modules/shared/components/VFormFileUploader/VFormFileUploader.vue?2a7d","webpack:///./src/renderer/modules/shared/components/VFormFileUploader/index.ts","webpack:///./src/renderer/main.ts","webpack:///./src/renderer/api/tournament.ts","webpack:///./src/renderer/assets/default/tournament_logo.png","webpack:///./src/renderer/api/identity.ts","webpack:///./src/renderer/modules/match/match.store.ts","webpack:///./src/renderer/modules/campaign/cny2021/routes/index.ts","webpack:///./src/renderer/utils/livechat.ts","webpack:///./src/renderer/utils/screencapture.ts","webpack:///./src/renderer/utils/integration/lol.ts","webpack:///./src/renderer/utils/request.ts","webpack:///./src/renderer/utils/realtime.ts","webpack:///./src/renderer/plugins/TournamentBracket/Bracket.vue?62ee","webpack:///./src/renderer/modules/shared/shared.store.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","VenueAPI","venueId","UpdateMemberHomeShopRequest","post","venueCompanyId","AuthModule","authToken","member","accountInfo","refreshTokenEvent","EventTarget","isRefreshingToken","isNewMember","isLoading","this","localStorage","setItem","dispatchEvent","Event","context","commit","hasLoggedIn","addEventListener","once","refreshToken","requestNewToken","sharedModule","stopRender","setup","fetchMember","log","fetchAccountInfo","decode","currentTime","unix","exp","requestTokenRefresh","enableRender","getMember","res","payload","getAccount","ipcRenderer","send","status","currentRoute","fullPath","dispatch","hide","rerender","args","accessToken","token","oidcAccessToken","route","rootGetters","redirectPath","memberId","contactEmail","nickname","rawError","dynamic","store","namespaced","getAPIEndpoint","sendSync","getOpenIdConnectEndpoint","MatchState","LeagueMap","LeaguePickMode","MatchGameState","CheckInRoleType","GameResult","MatchGameType","MatchAPI","matchId","API_PREFIX","encodeURIComponent","matchGameId","file","gameIntegration","requestConfig","FormData","append","page","params","memberIds","game","gameType","customGameId","password","matchTeamId","newCaptainMemberId","draftSessionId","CancellationToken","cancelled","CancelError","StageFormat","BracketState","BracketScoreResult","StageState","StageFormatType","BracketNode","match","round","nextNode","childNode","BracketMatrix","bracket","node","getMatchRound","matches","edges","matrix","Array","from","_","fill","x","y","findOrCreateNode","leaf","additionalMatches","leafNodeRoundOf","roundOf","allRoundOfs","map","bm","roundOfs","filter","index","indexOf","sort","a","b","identifier","localeCompare","tree","toBracketTree","bracketNodeRoot","find","rootNode","initialRound","roundsMap","Map","queue","totalRounds","qFront","currentRound","Math","max","roundMatches","has","set","leftNode","rightNode","childRound","rounds","rdMatches","additionalNodes","isAdditional","roundIndex","StageAPI","tournamentId","stageId","ServerError","axiosError","response","Fail","msg","keys","forEach","propertyName","UpdateRequired","webpackContext","req","id","webpackContextResolve","getGameTypes","applicationSupportedGames","MemberModule","paymentCallbacks","isTournamentEntryFeePaymentDialogVisible","tournamentEntryFee","transactions","transactionsCurrentPage","transactionsPageCount","transactionsTotal","visible","fee","callbacks","walletDepositTransactionId","getMemberPaymentTransaction","Ok","items","pageCount","itemCount","count","VenueModule","applicationVenueId","applicationVenue","setMemberHomeShop","venue","path","props","component","children","GameEventType","GameMode","GameMap","GameType","oidcSettings","authority","clientId","redirectUri","location","origin","responseType","scope","automaticSilentRenew","automaticSilentSignin","silentRedirectUri","use","oidc","Store","state","mutations","actions","getUserLocale","locale","getItem","userLanguage","navigator","language","setUserLocale","i18n","messages","en","zh","fallbackLocale","ResponseStatus","isDownloadingUpdates","invoke","quitAndInstall","checkForUpdates","timeOffset","setTimeOffset","serverTime","getTime","Date","getTimeOffset","now","render","_vm","_h","$createElement","_c","_self","staticClass","class","theme","size","buttonType","noEffect","auto","style","attrs","block","disabled","ripple","outlined","large","xLarge","small","xSmall","loading","on","onButtonClick","domProps","_s","icon","_e","_v","label","_t","staticRenderFns","$emit","backgroundColor","border","textShadow","shadow","startingBackgroundColor","endingBackgroundColor","cursor","String","default","Boolean","VBtn","VIcon","ConfigAPI","MemberAPI","gameAccountId","put","delete","checkTransactionStatus","walletTransactionId","cancellationToken","timer","POLL_INTERVAL","MAX_LOOP","loop","getTransactionStatus","clearInterval","setInterval","TransactionState","PaymentAPI","LayoutModule","progressBarVisible","teamTokenDialogVisible","defaultTeamToken","searchDialogVisible","updateDownloadProgress","tournamentLFGModalVisible","selectedLFGModalTournamentTeamId","progress","tournamentTeamId","IntegrationModule","connectionStatus","userInfo","userResult","gameMode","isSoloGame","isWinner","isJoiningCustomGame","joinCustomGameFailed","userResultEvidence","connected","evidence","lobby","asSpectator","team","reader","FileReader","onloadend","readAsDataURL","Blob","requestLogin","callback","authModule","signIn","updateLoginState","TournamentTeamState","TournamentTeamRole","components","overlay","meta","defaultTab","redirect","hasBackButton","title","inviteRoute","tournamentBracketRoute","tournamentFormRoutes","settings","campaignModuleNestedRoutes","files","keyname","nestedRoute","app","router","base","routes","hasKey","te","pageName","afterEach","to","scrollTo","listenElectronIpcEvents","isElectron","teamToken","layoutModule","showTeamTokenDialogWithDefaultToken","setUpdateDownloadProgress","userModule","registerHooks","analyticsUrl","hidden","shouldRender","isEmbedded","_m","shouldShow","$vuetify","breakpoint","mobile","glitch","text","navigateToTournament","$t","close","$store","longPollingTimer","isWaitingForUserToCheckIn","remainingMinutes","realtimeConnectionCancellationToken","getMemberJoinedAutomatedTournament","isJoined","tournamentCheckInRemainingMinutes","realtimeConnection","onTournamentCheckInStarted","onJoinedAutomatedTournamentStateUpdated","updateVisibility","floor","random","cancel","off","$router","$route","startsWith","VSnackbar","onUserCancel","model","$$v","step","expression","currency","createPayPalOrder","onApprove","onComplete","onError","onCancel","$event","ref","onUserComplete","buttonId","init","el","getElementById","innerHTML","scriptEl","query","URLSearchParams","VUE_APP_PAYPAL_CLIENT_ID","debug","intent","toString","paypal","Buttons","createOrder","orderID","remove","body","_uid","$i18n","required","Function","deep","immediate","VProgressCircular","paymentModule","currentWalletTransactionId","checkTransactionStatusCancellationToken","onVisibilityChanged","paymentMethod","orderId","completeDeposit","anim","loadAnimation","container","checkLottieAnimation","renderer","autoplay","animationData","setSpeed","cancelDeposit","closeTournamentEntryFeePaymentDialog","substring","HTMLDivElement","AppButton","PayPalButton","VCard","VCardActions","VCardTitle","VDialog","VWindow","VWindowItem","venueModule","authTimeout","$toast","classList","add","urlParams","search","authenticateOidcSilent","getApplicationConfigs","updateSuggestedRegion","setAuthToken","getSettings","memberAvatars","avatars","setApplicationSupportedAvatars","supportedGames","games","setApplicationSupportedGames","setApplicationRegions","regions","setApplicationVenue","getMessage","oidcAuthenticationIsChecked","routeName","JSON","stringify","TournamentEntryFeePaymentDialog","InstantMatchSnackBar","VApp","VAutocomplete","VAlert","VRow","VCol","VCombobox","VTextField","VTextarea","VTooltip","VCheckbox","VFileInput","VSelect","VSwitch","directives","Ripple","Intersect","Touch","Resize","ClickOutside","dark","themes","primary","secondary","accent","warning","info","success","options","customProperties","icons","iconfont","moment","rawName","disableDragScroll","roomIndex","_l","roundMatch","rIndex","rm","mIndex","teams","opponentNum","sortTeams","tIndex","getTeamTotalScore","getTeamMatchBracketScoreResult","hoverTarget","nativeOn","hoverTeam","getEmptyTournamentTeamFiller","getRoundOf","empty","hovered","initial","BracketTeamName","active","displayScoreText","substr","toUpperCase","alwaysDisplayScore","Win","Lose","Draw","includes","score","Number","None","VAvatar","VSpacer","hasAdditionalMatches","teamId","initialize","bracketMatrix","structure","toBracketTreeLevelOrdered","flat","num","groupNumber","some","scores","getTeamScore","totalScore","matchIndex","edge","roundSetting","roundSettings","rs","BracketTeam","dragscroll","headers","flatMap","matchTeams","matchTeam","win","draw","lose","bracketMatchId","nextMatches","theMatch","VContainer","VDataTable","VSimpleTable","getSortedTeams","toBracketTreeNoEdge","scoreA","scoreB","scoreATotalScore","scoreBTotalScore","compare","rank","diff","item","install","Vue","RoundRobinBracket","h","plain","innerText","$slots","trim","html","converter","parse","inlineStyles","convert","replace","directive","binding","defaultError","defaultType","tournamentLogo","tournamentBackground","img","Image","original","hint","labelIdle","multiple","fileType","myFiles","allowPreview","server","handleFilePondInit","errorBucket","FilePond","filesUploaded","parseValue","source","load","fetch","blob","process","fieldName","metadata","abort","transfer","formData","CancelToken","uploadUserGeneratedContent","cancelToken","onUploadProgress","lengthComputable","loaded","total","Authorization","isCancel","revert","VInput","VMessages","TournamentBracket","config","productionTip","loadingContainer","className","bodyContainer","$reactNativeWebView","ReactNativeWebView","$livechat","LiveChatWidget","warnHandler","dismissable","vuetify","enabled","vueRouter","$mount","TournamentState","TournamentGameType","ConfirmTournamentTeamRosterStatus","TournamentAPI","paramsSerializer","arrayFormat","isRegistered","playerRoles","Captain","Member","RequestToJoin","registeredOnly","formResponse","createTournamentTeamRequest","logoFile","accountName","isPast","region","past","axiosConfig","IdentityAPI","BASE_PATH","MatchModule","matchGame","matchGameResults","joinableMatchRooms","tournament","stage","matchCoreRulesDialogVisible","mobileFooterVisible","reload","getMatch","relatedTournament","getTournament","getStage","getMatchGameResults","getMatchGame","getMemberJoinableMatchRooms","getChatMessages","leagueLobby","CampaignRoute","LiveChatAPI","email","setCustomerEmail","setCustomerName","updateSessionVariables","nickName","firstName","lastName","phoneNumber","contactPhone","country","minimize","setSessionVariables","ScreenSourceType","getScreenSources","sourceType","capturer","getSources","types","SOURCE_SCREEN","SOURCE_WINDOW","thumbnailSize","width","height","INTEGRATION_RETRY_INTERVAL","LeagueIntegration","onGameResult","onGameResultARAM","subscribeEvents","retryTimer","unsubscribeEvents","statsBlob","stats","screenshotBlob","screenshot","integrationModule","setResult","players","setEvidenceBlobs","submitMatchGameEvidence","sources","thumbnail","toPNG","addEvidenceBlob","allPlayers","gameData","updateConnectionState","onRetryTimer","matchModule","leagueMap","checkIn","checkIns","userId","teamOneMatchTeamId","role","joinCustomGame","team0Id","captainMemberId","ceil","retries","lobbyName","lobbyPassword","teamSize","mapId","mutatorId","leaguePickMode","setJoiningCustomGameFailed","updateLeagueLobby","updateUserInfo","onUserInfoReceived","onReady","onClose","onRetry","service","baseURL","interceptors","getAuthToken","bytesPerSecond","percent","transferred","url","isAxiosError","connection","connecting","realtimeEventTarget","getRealtimeConnection","onConnect","removeEventListener","queryStr","join","conn","withUrl","withAutomaticReconnect","nextRetryDelayInMilliseconds","configureLogging","Debug","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","onreconnecting","CustomEvent","detail","onreconnected","connectionId","start","catch","closeRealtimeConnection","stop","reconnectRealtimeConnection","SharedModule","applicationSupportedAvatars","applicationLocale","applicationRegions","suggestedRegion","enable","getSuggestedRegion"],"mappings":"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","file":"js/index.42554253.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"index\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"index\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"active-tournament-catalog~app-layout~homeshop-tournament~instant-match-catalog~instant-match-catalog~c6e2eefa\":\"active-tournament-catalog~app-layout~homeshop-tournament~instant-match-catalog~instant-match-catalog~c6e2eefa\",\"active-tournament-catalog\":\"active-tournament-catalog\",\"app-layout~instant-match-details-layout~invite~tournament-details-lfg~tournament-layout\":\"app-layout~instant-match-details-layout~invite~tournament-details-lfg~tournament-layout\",\"app-layout~invite\":\"app-layout~invite\",\"app-layout~match-room\":\"app-layout~match-room\",\"app-layout\":\"app-layout\",\"homeshop-tournament\":\"homeshop-tournament\",\"instant-match-catalog~instant-match-catalog-mobile\":\"instant-match-catalog~instant-match-catalog-mobile\",\"instant-match-catalog-mobile\":\"instant-match-catalog-mobile\",\"instant-match-catalog~instant-match-details-layout~landing~tournament-layout\":\"instant-match-catalog~instant-match-details-layout~landing~tournament-layout\",\"instant-match-catalog\":\"instant-match-catalog\",\"landing\":\"landing\",\"instant-match-details\":\"instant-match-details\",\"instant-match-details-layout~invite~tournament-details-lfg~tournament-form~tournament-layout\":\"instant-match-details-layout~invite~tournament-details-lfg~tournament-form~tournament-layout\",\"invite\":\"invite\",\"instant-match-details-layout\":\"instant-match-details-layout\",\"tournament-layout\":\"tournament-layout\",\"tournament-details-lfg\":\"tournament-details-lfg\",\"instant-match-layout\":\"instant-match-layout\",\"overlay-member-profile\":\"overlay-member-profile\",\"overlay-tournament-catalog\":\"overlay-tournament-catalog\",\"overlay-tournament-details\":\"overlay-tournament-details\",\"recent-tournament-catalog\":\"recent-tournament-catalog\",\"tournament-bracket~tournament-details-bracket\":\"tournament-bracket~tournament-details-bracket\",\"tournament-details-bracket\":\"tournament-details-bracket\",\"tournament-details-overview\":\"tournament-details-overview\",\"tournament-details-rule\":\"tournament-details-rule\",\"tournament-details-teams\":\"tournament-details-teams\",\"upcoming-tournament-catalog\":\"upcoming-tournament-catalog\",\"auth-callback\":\"auth-callback\",\"campaign-layout\":\"campaign-layout\",\"campaign-view\":\"campaign-view\",\"catalog-layout\":\"catalog-layout\",\"draft-layout\":\"draft-layout\",\"draft-session-league-view~match-room\":\"draft-session-league-view~match-room\",\"draft-session-league-view\":\"draft-session-league-view\",\"draft-session-wild-rift-view~match-room\":\"draft-session-wild-rift-view~match-room\",\"match-room\":\"match-room\",\"draft-session-wild-rift-view\":\"draft-session-wild-rift-view\",\"homeshop-layout\":\"homeshop-layout\",\"homeshop-my\":\"homeshop-my\",\"homeshop-other\":\"homeshop-other\",\"homeshop-player\":\"homeshop-player\",\"tournament-form\":\"tournament-form\",\"match-room-layout\":\"match-room-layout\",\"member-layout~member-match-history~member-tournament-history\":\"member-layout~member-match-history~member-tournament-history\",\"member-layout\":\"member-layout\",\"member-match-history\":\"member-match-history\",\"member-tournament-history\":\"member-tournament-history\",\"member-verify\":\"member-verify\",\"payment-layout\":\"payment-layout\",\"payment-transaction\":\"payment-transaction\",\"top-tournament-catalog\":\"top-tournament-catalog\",\"tournament-bracket\":\"tournament-bracket\"}[chunkId]||chunkId) + \".\" + {\"active-tournament-catalog~app-layout~homeshop-tournament~instant-match-catalog~instant-match-catalog~c6e2eefa\":\"356d7615\",\"active-tournament-catalog\":\"959e5d71\",\"app-layout~instant-match-details-layout~invite~tournament-details-lfg~tournament-layout\":\"d5bead94\",\"app-layout~invite\":\"7adb4ca9\",\"app-layout~match-room\":\"db4f5ac9\",\"app-layout\":\"182c5ffd\",\"homeshop-tournament\":\"8616d1d8\",\"instant-match-catalog~instant-match-catalog-mobile\":\"e63e4c3c\",\"instant-match-catalog-mobile\":\"dfaf39c9\",\"instant-match-catalog~instant-match-details-layout~landing~tournament-layout\":\"fd1a0f26\",\"instant-match-catalog\":\"72c13880\",\"landing\":\"4bdbf7f1\",\"instant-match-details\":\"98c9902c\",\"instant-match-details-layout~invite~tournament-details-lfg~tournament-form~tournament-layout\":\"3bd4b310\",\"invite\":\"f9f90f34\",\"instant-match-details-layout\":\"65932219\",\"tournament-layout\":\"ef09a970\",\"tournament-details-lfg\":\"de2b2c28\",\"instant-match-layout\":\"efe3f98f\",\"overlay-member-profile\":\"1519ea30\",\"overlay-tournament-catalog\":\"9192ef02\",\"overlay-tournament-details\":\"b9b0d37d\",\"recent-tournament-catalog\":\"90accaff\",\"tournament-bracket~tournament-details-bracket\":\"ce100844\",\"tournament-details-bracket\":\"6e0d4cbb\",\"tournament-details-overview\":\"d0bec417\",\"tournament-details-rule\":\"968b5e29\",\"tournament-details-teams\":\"3236c210\",\"upcoming-tournament-catalog\":\"f42fe74a\",\"auth-callback\":\"7c5a301b\",\"campaign-layout\":\"7443f354\",\"campaign-view\":\"7b9c087f\",\"catalog-layout\":\"e35c308d\",\"chunk-2d0b214b\":\"05c39437\",\"draft-layout\":\"dcbf704e\",\"draft-session-league-view~match-room\":\"528f77d4\",\"draft-session-league-view\":\"9f177930\",\"draft-session-wild-rift-view~match-room\":\"f383692d\",\"match-room\":\"983f9386\",\"draft-session-wild-rift-view\":\"5d145c7d\",\"homeshop-layout\":\"579e0247\",\"homeshop-my\":\"ab1008b5\",\"homeshop-other\":\"0ddb3a2a\",\"homeshop-player\":\"d2fe223b\",\"tournament-form\":\"96093ed8\",\"match-room-layout\":\"2260e077\",\"member-layout~member-match-history~member-tournament-history\":\"e3af51b0\",\"member-layout\":\"d5d674ae\",\"member-match-history\":\"66f8059c\",\"member-tournament-history\":\"3ad0b61c\",\"member-verify\":\"7d4d7454\",\"payment-layout\":\"a4c2b948\",\"payment-transaction\":\"33f630f7\",\"top-tournament-catalog\":\"ad2cac98\",\"tournament-bracket\":\"57052d27\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"active-tournament-catalog\":1,\"app-layout~instant-match-details-layout~invite~tournament-details-lfg~tournament-layout\":1,\"app-layout~invite\":1,\"app-layout~match-room\":1,\"app-layout\":1,\"homeshop-tournament\":1,\"instant-match-catalog~instant-match-catalog-mobile\":1,\"instant-match-catalog-mobile\":1,\"instant-match-catalog\":1,\"landing\":1,\"instant-match-details\":1,\"invite\":1,\"instant-match-details-layout\":1,\"tournament-layout\":1,\"tournament-details-lfg\":1,\"instant-match-layout\":1,\"overlay-member-profile\":1,\"overlay-tournament-catalog\":1,\"overlay-tournament-details\":1,\"recent-tournament-catalog\":1,\"tournament-bracket~tournament-details-bracket\":1,\"tournament-details-bracket\":1,\"tournament-details-overview\":1,\"tournament-details-rule\":1,\"tournament-details-teams\":1,\"upcoming-tournament-catalog\":1,\"catalog-layout\":1,\"draft-session-league-view~match-room\":1,\"draft-session-wild-rift-view~match-room\":1,\"match-room\":1,\"homeshop-layout\":1,\"homeshop-my\":1,\"homeshop-other\":1,\"tournament-form\":1,\"match-room-layout\":1,\"member-layout~member-match-history~member-tournament-history\":1,\"member-layout\":1,\"member-match-history\":1,\"member-tournament-history\":1,\"payment-layout\":1,\"payment-transaction\":1,\"top-tournament-catalog\":1,\"tournament-bracket\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"active-tournament-catalog~app-layout~homeshop-tournament~instant-match-catalog~instant-match-catalog~c6e2eefa\":\"active-tournament-catalog~app-layout~homeshop-tournament~instant-match-catalog~instant-match-catalog~c6e2eefa\",\"active-tournament-catalog\":\"active-tournament-catalog\",\"app-layout~instant-match-details-layout~invite~tournament-details-lfg~tournament-layout\":\"app-layout~instant-match-details-layout~invite~tournament-details-lfg~tournament-layout\",\"app-layout~invite\":\"app-layout~invite\",\"app-layout~match-room\":\"app-layout~match-room\",\"app-layout\":\"app-layout\",\"homeshop-tournament\":\"homeshop-tournament\",\"instant-match-catalog~instant-match-catalog-mobile\":\"instant-match-catalog~instant-match-catalog-mobile\",\"instant-match-catalog-mobile\":\"instant-match-catalog-mobile\",\"instant-match-catalog~instant-match-details-layout~landing~tournament-layout\":\"instant-match-catalog~instant-match-details-layout~landing~tournament-layout\",\"instant-match-catalog\":\"instant-match-catalog\",\"landing\":\"landing\",\"instant-match-details\":\"instant-match-details\",\"instant-match-details-layout~invite~tournament-details-lfg~tournament-form~tournament-layout\":\"instant-match-details-layout~invite~tournament-details-lfg~tournament-form~tournament-layout\",\"invite\":\"invite\",\"instant-match-details-layout\":\"instant-match-details-layout\",\"tournament-layout\":\"tournament-layout\",\"tournament-details-lfg\":\"tournament-details-lfg\",\"instant-match-layout\":\"instant-match-layout\",\"overlay-member-profile\":\"overlay-member-profile\",\"overlay-tournament-catalog\":\"overlay-tournament-catalog\",\"overlay-tournament-details\":\"overlay-tournament-details\",\"recent-tournament-catalog\":\"recent-tournament-catalog\",\"tournament-bracket~tournament-details-bracket\":\"tournament-bracket~tournament-details-bracket\",\"tournament-details-bracket\":\"tournament-details-bracket\",\"tournament-details-overview\":\"tournament-details-overview\",\"tournament-details-rule\":\"tournament-details-rule\",\"tournament-details-teams\":\"tournament-details-teams\",\"upcoming-tournament-catalog\":\"upcoming-tournament-catalog\",\"auth-callback\":\"auth-callback\",\"campaign-layout\":\"campaign-layout\",\"campaign-view\":\"campaign-view\",\"catalog-layout\":\"catalog-layout\",\"draft-layout\":\"draft-layout\",\"draft-session-league-view~match-room\":\"draft-session-league-view~match-room\",\"draft-session-league-view\":\"draft-session-league-view\",\"draft-session-wild-rift-view~match-room\":\"draft-session-wild-rift-view~match-room\",\"match-room\":\"match-room\",\"draft-session-wild-rift-view\":\"draft-session-wild-rift-view\",\"homeshop-layout\":\"homeshop-layout\",\"homeshop-my\":\"homeshop-my\",\"homeshop-other\":\"homeshop-other\",\"homeshop-player\":\"homeshop-player\",\"tournament-form\":\"tournament-form\",\"match-room-layout\":\"match-room-layout\",\"member-layout~member-match-history~member-tournament-history\":\"member-layout~member-match-history~member-tournament-history\",\"member-layout\":\"member-layout\",\"member-match-history\":\"member-match-history\",\"member-tournament-history\":\"member-tournament-history\",\"member-verify\":\"member-verify\",\"payment-layout\":\"payment-layout\",\"payment-transaction\":\"payment-transaction\",\"top-tournament-catalog\":\"top-tournament-catalog\",\"tournament-bracket\":\"tournament-bracket\"}[chunkId]||chunkId) + \".\" + {\"active-tournament-catalog~app-layout~homeshop-tournament~instant-match-catalog~instant-match-catalog~c6e2eefa\":\"31d6cfe0\",\"active-tournament-catalog\":\"efdec479\",\"app-layout~instant-match-details-layout~invite~tournament-details-lfg~tournament-layout\":\"f230f9cd\",\"app-layout~invite\":\"5877b5f3\",\"app-layout~match-room\":\"5a28127a\",\"app-layout\":\"082f8229\",\"homeshop-tournament\":\"bf187566\",\"instant-match-catalog~instant-match-catalog-mobile\":\"407aabae\",\"instant-match-catalog-mobile\":\"b0bba621\",\"instant-match-catalog~instant-match-details-layout~landing~tournament-layout\":\"31d6cfe0\",\"instant-match-catalog\":\"7a64f277\",\"landing\":\"7ebe1daa\",\"instant-match-details\":\"6b19af3b\",\"instant-match-details-layout~invite~tournament-details-lfg~tournament-form~tournament-layout\":\"31d6cfe0\",\"invite\":\"53ff6f7c\",\"instant-match-details-layout\":\"062e4ffe\",\"tournament-layout\":\"a73bdd03\",\"tournament-details-lfg\":\"047115e9\",\"instant-match-layout\":\"7f29ef0d\",\"overlay-member-profile\":\"8c44f7ea\",\"overlay-tournament-catalog\":\"3e37425d\",\"overlay-tournament-details\":\"4c9817d9\",\"recent-tournament-catalog\":\"e0188447\",\"tournament-bracket~tournament-details-bracket\":\"b170485e\",\"tournament-details-bracket\":\"80a611ea\",\"tournament-details-overview\":\"47f09b79\",\"tournament-details-rule\":\"b579747a\",\"tournament-details-teams\":\"fe89595a\",\"upcoming-tournament-catalog\":\"c283d756\",\"auth-callback\":\"31d6cfe0\",\"campaign-layout\":\"31d6cfe0\",\"campaign-view\":\"31d6cfe0\",\"catalog-layout\":\"0a61c80d\",\"chunk-2d0b214b\":\"31d6cfe0\",\"draft-layout\":\"31d6cfe0\",\"draft-session-league-view~match-room\":\"5ae7413c\",\"draft-session-league-view\":\"31d6cfe0\",\"draft-session-wild-rift-view~match-room\":\"8566f8cd\",\"match-room\":\"9c7cad30\",\"draft-session-wild-rift-view\":\"31d6cfe0\",\"homeshop-layout\":\"2d86d875\",\"homeshop-my\":\"d67f75f0\",\"homeshop-other\":\"386b621c\",\"homeshop-player\":\"31d6cfe0\",\"tournament-form\":\"02ea7398\",\"match-room-layout\":\"6ded7229\",\"member-layout~member-match-history~member-tournament-history\":\"4520e629\",\"member-layout\":\"bb09b03a\",\"member-match-history\":\"f88e3570\",\"member-tournament-history\":\"5ede7b8d\",\"member-verify\":\"31d6cfe0\",\"payment-layout\":\"e1ea4e7b\",\"payment-transaction\":\"e0b908e8\",\"top-tournament-catalog\":\"3e75b6be\",\"tournament-bracket\":\"19586b56\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import axios from '@/utils/request'\r\nimport { AxiosPromise } from 'axios'\r\nimport { BaseResponse, ResponseStatus } from '.'\r\n\r\nexport { BaseResponse, ResponseStatus }\r\n\r\nexport interface VenueEntity {\r\n venueId: string\r\n venueCompanyId: string\r\n name: string\r\n logo: string\r\n latitude: number\r\n longitude: number\r\n address1: string\r\n address2: string\r\n province: string\r\n country: string\r\n email: string\r\n phone: string\r\n website: string\r\n openingHours: number\r\n closingHours: number\r\n currentLicenseState: string\r\n licenses: VenueLicenseEntity[]\r\n}\r\n\r\nexport interface VenueCompanyEntity {\r\n venueCompanyId: string\r\n name: string\r\n logo: string\r\n}\r\n\r\nexport interface VenueLicenseEntity {\r\n startTime: number\r\n endTime: number\r\n terminationTime: number\r\n state: string\r\n}\r\n\r\nexport interface UpdateMemberHomeShopRequest {\r\n memberId: string\r\n}\r\n\r\nexport class VenueAPI {\r\n /**\r\n * Set member homeshop\r\n * @param venueId VenueId\r\n * @param memberId MemberId\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static setMemberHomeShop(\r\n venueId: string,\r\n UpdateMemberHomeShopRequest: UpdateMemberHomeShopRequest\r\n ): AxiosPromise> {\r\n return axios.post(\r\n `/venue/v1/venues/${venueId}/member-home-shop`,\r\n UpdateMemberHomeShopRequest\r\n )\r\n }\r\n\r\n /**\r\n * Get Venue By company ID\r\n * @param venueCompanyId {string}\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getVenuesByCompanyID(\r\n venueCompanyId: string\r\n ): AxiosPromise> {\r\n return axios.get(`/venue/v1/venue-companies/${venueCompanyId}/venues`)\r\n }\r\n\r\n /**\r\n * Get Venue Company By company ID\r\n * @param venueCompanyId {string}\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getVenueCompanyById(\r\n venueCompanyId: string\r\n ): AxiosPromise> {\r\n return axios.get(`/venue/v1/venue-companies/${venueCompanyId}`)\r\n }\r\n}\r\n","module.exports = __webpack_public_path__ + \"img/tournament_background.82b323ef.png\";","/* eslint-disable standard/computed-property-even-spacing */\r\nimport {\r\n VuexModule,\r\n Module,\r\n Action,\r\n Mutation,\r\n getModule\r\n} from 'vuex-module-decorators'\r\nimport { IAuthState, IJWTPayload } from '@/store/types'\r\nimport Vue from 'vue'\r\nimport { ResponseStatus } from '@/api'\r\nimport {\r\n closeRealtimeConnection,\r\n reconnectRealtimeConnection\r\n} from '@/utils/realtime'\r\nimport store from '@/store'\r\nimport sharedStore from '@/modules/shared/shared.store'\r\nimport jwt from 'jsonwebtoken'\r\nimport moment from 'moment'\r\n\r\nimport { MemberAPI, MemberEntity } from '@/api/member'\r\nimport { IpcRendererEvent } from 'electron'\r\nimport { isElectron } from '@/utils/electron'\r\nimport { VuexOidcStoreActions, VuexOidcStoreGetters } from 'vuex-oidc'\r\nimport LiveChatAPI from '@/utils/livechat'\r\nimport { AccountInfo, IdentityAPI } from '@/api/identity'\r\nimport router from '@/router'\r\n\r\n@Module({ dynamic: true, store: store, namespaced: true, name: 'user' })\r\nexport default class AuthModule extends VuexModule implements IAuthState {\r\n authToken: string | null = null\r\n member: MemberEntity | null = null\r\n accountInfo: AccountInfo | null = null\r\n refreshTokenEvent: EventTarget = new EventTarget()\r\n isRefreshingToken: boolean = false\r\n isNewMember: boolean = false\r\n isLoading: boolean = false\r\n\r\n @Mutation\r\n SET_AUTH_TOKEN(authToken: string) {\r\n this.authToken = authToken\r\n\r\n if (!isElectron()) {\r\n localStorage.setItem('access_token', this.authToken!)\r\n }\r\n\r\n if (!authToken) {\r\n reconnectRealtimeConnection().then()\r\n }\r\n }\r\n\r\n @Mutation\r\n SET_MEMBER(member: MemberEntity) {\r\n this.member = member\r\n }\r\n\r\n @Mutation\r\n SET_ACCOUNT_INFO(accountInfo: AccountInfo) {\r\n this.accountInfo = accountInfo\r\n }\r\n\r\n @Mutation\r\n SET_IS_NEW_MEMBER(value: boolean) {\r\n this.isNewMember = value\r\n }\r\n\r\n @Mutation\r\n SET_IS_LOADING(value: boolean) {\r\n this.isLoading = value\r\n }\r\n\r\n @Mutation\r\n SET_REFRESHING_TOKEN(isRefreshingToken: boolean) {\r\n this.isRefreshingToken = isRefreshingToken\r\n\r\n if (!isRefreshingToken) {\r\n this.refreshTokenEvent.dispatchEvent(new Event('finish'))\r\n }\r\n }\r\n\r\n @Action({ rawError: true })\r\n async setAuthToken(authToken: string) {\r\n this.context.commit('SET_AUTH_TOKEN', authToken)\r\n return true\r\n }\r\n\r\n @Action({ rawError: true })\r\n requestTokenRefresh() {\r\n if (isElectron()) {\r\n return new Promise(async (resolve, reject) => {\r\n if (this.hasLoggedIn) {\r\n // check if we are refreshing token\r\n if (this.isRefreshingToken) {\r\n this.refreshTokenEvent.addEventListener('finish', resolve, {\r\n once: true\r\n })\r\n } else {\r\n // do the token refresh job\r\n const refreshToken = async () => {\r\n this.context.commit('SET_REFRESHING_TOKEN', true)\r\n await this.requestNewToken()\r\n resolve(true)\r\n this.context.commit('SET_REFRESHING_TOKEN', false)\r\n }\r\n\r\n await refreshToken()\r\n }\r\n } else {\r\n // token not exists, thrown error.\r\n reject(new Error('No refresh token'))\r\n }\r\n })\r\n } else {\r\n return new Promise(async (resolve, reject) => {\r\n if (this.hasLoggedIn) {\r\n this.context.commit('SET_REFRESHING_TOKEN', false)\r\n }\r\n })\r\n }\r\n }\r\n\r\n // Brian: Hey! DO NOT CALL THIS ACTION UNLESS YOU KNOW WHAT YOU ARE DOING\r\n // Use fetchMember() instead. This will fuck up the SignalR existing listeners as it will destroy old connection\r\n // Use this only before anything is initialized\r\n @Action({ rawError: true })\r\n async updateLoginState() {\r\n const sharedModule = getModule(sharedStore, store)\r\n sharedModule.stopRender()\r\n\r\n try {\r\n if (!this.hasLoggedIn) {\r\n // try to get token\r\n await this.requestNewToken()\r\n\r\n // still not logged in\r\n if (!this.hasLoggedIn) {\r\n LiveChatAPI.setup()\r\n return true\r\n }\r\n }\r\n\r\n if (!(await this.fetchMember())) {\r\n console.log('Fetch member is false')\r\n return false\r\n }\r\n\r\n try {\r\n await this.fetchAccountInfo()\r\n } catch (err) {\r\n console.log('Unable to fetch account. ', err)\r\n }\r\n\r\n let result = jwt.decode(this.authToken!) as IJWTPayload\r\n if (result) {\r\n let currentTime = moment().unix()\r\n if (currentTime >= result.exp) {\r\n await this.requestTokenRefresh()\r\n }\r\n }\r\n\r\n await reconnectRealtimeConnection()\r\n } finally {\r\n sharedModule.enableRender()\r\n }\r\n\r\n return true\r\n }\r\n\r\n @Action({ rawError: true })\r\n async fetchMember() {\r\n try {\r\n const res = await MemberAPI.getMember()\r\n const payload = res.data.payload\r\n if (!payload)\r\n throw new Error(\r\n 'Account logged out - Unable to obtain member session info'\r\n )\r\n\r\n this.context.commit('SET_MEMBER', payload)\r\n this.context.commit('SET_IS_NEW_MEMBER', !!payload.isNewMember)\r\n\r\n LiveChatAPI.setup()\r\n } catch (err) {\r\n this.context.commit('SET_MEMBER', null)\r\n this.context.commit('SET_AUTH_TOKEN', null)\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n @Action({ rawError: true })\r\n async fetchAccountInfo() {\r\n try {\r\n const res = await IdentityAPI.getAccount()\r\n const payload = res.data.payload\r\n if (!payload)\r\n throw new Error('Account logged out - Unable to obtain account info')\r\n\r\n this.context.commit('SET_ACCOUNT_INFO', payload)\r\n } catch (err) {\r\n this.context.commit('SET_ACCOUNT_INFO', null)\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n @Action({ rawError: true })\r\n signIn() {\r\n console.log('Login detected, isElectron:', isElectron())\r\n\r\n if (isElectron()) {\r\n console.log('Attempting sign in with electron...')\r\n return new Promise((resolve, reject) => {\r\n this.context.commit('SET_IS_LOADING', true)\r\n window.ipcRenderer.send('auth-request')\r\n window.ipcRenderer.once(\r\n 'auth-response',\r\n (event: IpcRendererEvent, data: { status: string }) => {\r\n // delay a bit because we need to refresh token\r\n setTimeout(() => {\r\n this.context.commit('SET_IS_LOADING', false)\r\n }, 500)\r\n\r\n if (data.status && data.status === 'ok') {\r\n resolve(true)\r\n } else {\r\n // Vue.prototype.$toast.error('Sign in failed.')\r\n reject(new Error('status is ' + data.status))\r\n }\r\n }\r\n )\r\n })\r\n } else {\r\n console.log('Attempting sign in with web oidc client...')\r\n localStorage.setItem('signin.return_path', router.currentRoute.fullPath)\r\n return store.dispatch('oidc/authenticateOidc')\r\n }\r\n }\r\n\r\n @Action({ rawError: true })\r\n async signOut() {\r\n // destroy livechat session\r\n LiveChatAPI.hide()\r\n if (isElectron()) {\r\n return new Promise((resolve, reject) => {\r\n window.ipcRenderer.send('sign-out-request')\r\n window.ipcRenderer.once(\r\n 'sign-out-response',\r\n (e: IpcRendererEvent, data: { status: string }) => {\r\n if (data.status === 'ok') {\r\n this.context.commit('SET_AUTH_TOKEN', null)\r\n this.context.commit('SET_MEMBER', null)\r\n this.context.commit('SET_IS_NEW_MEMBER', false)\r\n }\r\n }\r\n )\r\n })\r\n } else {\r\n this.context.commit('SET_AUTH_TOKEN', null)\r\n this.context.commit('SET_MEMBER', null)\r\n this.context.commit('SET_IS_NEW_MEMBER', false)\r\n await store.dispatch('oidc/signOutOidcSilent')\r\n\r\n const sharedModule = getModule(sharedStore, store)\r\n sharedModule.rerender()\r\n }\r\n }\r\n\r\n @Action({ rawError: true })\r\n requestNewToken() {\r\n if (isElectron()) {\r\n return new Promise(resolve => {\r\n console.log('[ELECTRON] Requesting access token.')\r\n if (!window.ipcRenderer) {\r\n resolve(false)\r\n return\r\n }\r\n\r\n window.ipcRenderer.send('new-token-request')\r\n window.ipcRenderer.once('new-token-response', (event, args) => {\r\n console.log('New token received. status is', args.status)\r\n if (args.accessToken) {\r\n this.context.commit('SET_AUTH_TOKEN', args.accessToken)\r\n } else {\r\n this.context.commit('SET_AUTH_TOKEN', null)\r\n }\r\n resolve(true)\r\n })\r\n })\r\n } else {\r\n console.log('[WEB] Requesting access token.')\r\n return new Promise(resolve => {\r\n var token = this.oidcAccessToken\r\n this.context.commit('SET_AUTH_TOKEN', token || null)\r\n resolve(true)\r\n })\r\n }\r\n }\r\n\r\n get getAuthToken() {\r\n return this.authToken\r\n }\r\n\r\n get hasLoggedIn() {\r\n return !!this.authToken\r\n }\r\n\r\n get memberInfo() {\r\n return this.member\r\n }\r\n\r\n get userId() {\r\n return this.memberId\r\n }\r\n\r\n get memberId() {\r\n if (!this.member) {\r\n return ''\r\n }\r\n\r\n return this.member.memberId\r\n }\r\n\r\n get email() {\r\n if (!this.member) {\r\n return ''\r\n }\r\n\r\n return this.member.contactEmail\r\n }\r\n\r\n get nickname() {\r\n if (!this.member) {\r\n return ''\r\n }\r\n\r\n return this.member.nickname\r\n }\r\n\r\n // OpenID Connect Getters\r\n get oidcAccessToken() {\r\n return this.context.rootGetters[\r\n 'oidc/oidcAccessToken'\r\n ] as VuexOidcStoreGetters['oidcAccessToken']\r\n }\r\n\r\n get oidcAuthenticationIsChecked() {\r\n return this.context.rootGetters[\r\n 'oidc/oidcAuthenticationIsChecked'\r\n ] as VuexOidcStoreGetters['oidcAuthenticationIsChecked']\r\n }\r\n\r\n get oidcError() {\r\n return this.context.rootGetters[\r\n 'oidc/oidcError'\r\n ] as VuexOidcStoreGetters['oidcError']\r\n }\r\n\r\n get oidcIdToken() {\r\n return this.context.rootGetters[\r\n 'oidc/oidcIdToken'\r\n ] as VuexOidcStoreGetters['oidcIdToken']\r\n }\r\n\r\n get oidcIdTokenExp() {\r\n return this.context.rootGetters[\r\n 'oidc/oidcIdTokenExp'\r\n ] as VuexOidcStoreGetters['oidcIdTokenExp']\r\n }\r\n\r\n get oidcIsAuthenticated() {\r\n return this.context.rootGetters[\r\n 'oidc/oidcIsAuthenticated'\r\n ] as VuexOidcStoreGetters['oidcIsAuthenticated']\r\n }\r\n\r\n async oidcIsRoutePublic(route: any) {\r\n return this.context.rootGetters[\r\n 'oidc/oidcIsRoutePublic'\r\n ] as VuexOidcStoreGetters['oidcIsRoutePublic']\r\n }\r\n\r\n get oidcRefreshToken(): string | null {\r\n return this.context.rootGetters['oidc/oidcRefreshToken']\r\n }\r\n\r\n get oidcRefreshTokenExp(): number | null {\r\n return this.context.rootGetters['oidc/oidcRefreshTokenExp']\r\n }\r\n\r\n get oidcScopes() {\r\n return this.context.rootGetters[\r\n 'oidc/oidcScopes'\r\n ] as VuexOidcStoreGetters['oidcScopes']\r\n }\r\n\r\n get oidcUser() {\r\n return this.context.rootGetters[\r\n 'oidc/oidcUser'\r\n ] as VuexOidcStoreGetters['oidcUser']\r\n }\r\n\r\n // OpenID Connect Getters\r\n\r\n /**\r\n * Handles callback from authentication redirect. Has an optional url parameter\r\n */\r\n @Action({ rawError: true })\r\n async oidcSignInCallback() {\r\n return (await store.dispatch(\r\n 'oidc/oidcSignInCallback'\r\n )) as VuexOidcStoreActions['oidcSignInCallback']\r\n }\r\n\r\n /**\r\n * Authenticates if signed in. No redirect is made if not signed in\r\n */\r\n @Action({ rawError: true })\r\n async authenticateOidcSilent() {\r\n return (await store.dispatch(\r\n 'oidc/authenticateOidcSilent'\r\n )) as VuexOidcStoreActions['authenticateOidcSilent']\r\n }\r\n\r\n /**\r\n * Get user from oidc-client storage and update it in vuex store. Returns a promise\r\n */\r\n @Action({ rawError: true })\r\n async getOidcUser() {\r\n return (await store.dispatch(\r\n 'oidc/getOidcUser'\r\n )) as VuexOidcStoreActions['getOidcUser']\r\n }\r\n\r\n /**\r\n * Signs out user in open id provider\r\n */\r\n @Action({ rawError: true })\r\n async signOutOidc() {\r\n return (await store.dispatch(\r\n 'oidc/signOutOidc'\r\n )) as VuexOidcStoreActions['signOutOidc']\r\n }\r\n\r\n /**\r\n * Signs out user in open id provider using a hidden iframe\r\n */\r\n @Action({ rawError: true })\r\n async signOutOidcSilent() {\r\n return (await store.dispatch(\r\n 'oidc/signOutOidcSilent'\r\n )) as VuexOidcStoreActions['signOutOidcSilent']\r\n }\r\n\r\n /**\r\n * Signs out user in vuex and browser storage, but not in open id provider\r\n */\r\n @Action({ rawError: true })\r\n async removeOidcUser() {\r\n return (await store.dispatch(\r\n 'oidc/authenticateOidc'\r\n )) as VuexOidcStoreActions['removeOidcUser']\r\n }\r\n\r\n /**\r\n * Authenticates with redirect to sign in if not signed in\r\n */\r\n @Action({ rawError: true })\r\n async authenticateOidc(redirectPath: string | undefined = undefined) {\r\n console.log('Invoking authenticateOidc with redirectPath:', redirectPath)\r\n return (await store.dispatch(\r\n 'oidc/authenticateOidc',\r\n redirectPath\r\n )) as VuexOidcStoreActions['authenticateOidc']\r\n }\r\n\r\n // OpenID Connect Actions\r\n}\r\n","export default function getAPIEndpoint() {\r\n if (window.ipcRenderer) {\r\n return window.ipcRenderer.sendSync('get-api-endpoint')\r\n } else {\r\n return process.env.VUE_APP_API_ENDPOINT\r\n }\r\n}\r\n\r\nexport function getOpenIdConnectEndpoint() {\r\n return process.env.VUE_APP_OAUTH_OPENID_CONNECT_URL\r\n}\r\n","import axios from '@/utils/request'\r\nimport { AxiosPromise, AxiosRequestConfig } from 'axios'\r\nimport { BaseResponse, ResponseStatus, Pagination } from '.'\r\nimport { MemberSnippetEntity } from '@/api/member'\r\nimport { TournamentEntity } from '@/api/tournament'\r\nimport { TournamentTeamEntity } from '@/api/tournamentTeam'\r\n\r\nexport { BaseResponse, ResponseStatus }\r\n\r\nexport interface RelatedTournament {\r\n tournamentId: string\r\n stageId: string\r\n name: string\r\n game: string\r\n banner?: string\r\n logo?: string\r\n groupNumber: number\r\n}\r\n\r\nexport interface JoinableMatchEntity {\r\n matchGameId: string\r\n matchTeamId: string\r\n relatedTournament: RelatedTournament\r\n tournamentBanner: string\r\n tournamentLogo: string\r\n isCheckedIn: boolean\r\n isRosterConfirmed: boolean\r\n role: CheckInRoleType\r\n captainName: string\r\n}\r\n\r\nexport enum MatchState {\r\n Initial = 'Initial',\r\n InProgress = 'InProgress',\r\n Completed = 'Completed'\r\n}\r\n\r\nexport enum LeagueMap {\r\n SummonersRift = 11,\r\n HowlingAbyss = 12\r\n}\r\n\r\nexport enum LeaguePickMode {\r\n Blind = 1,\r\n Competitive = 2,\r\n Random = 4,\r\n Tournament = 6\r\n}\r\n\r\nexport interface LeagueLobby {\r\n customGameId: string\r\n name: string\r\n password: string\r\n}\r\n\r\nexport interface MatchEntity {\r\n matchId: string\r\n relatedTournament: RelatedTournament\r\n currentGameRound: number\r\n totalGameRound: number\r\n playersPerTeam: number\r\n state: MatchState\r\n latestMatchGameId: string\r\n isAutoGetGameEvidence: boolean\r\n leagueMap: LeagueMap | null\r\n leaguePickMode: LeaguePickMode | null\r\n leagueLobby: LeagueLobby | null\r\n}\r\n\r\nexport enum MatchGameState {\r\n Initial = 'Initial',\r\n Waiting = 'Waiting',\r\n Ready = 'Ready',\r\n Playing = 'Playing',\r\n ResultSubmitted = 'ResultSubmitted',\r\n Disputed = 'Disputed',\r\n Completed = 'Completed'\r\n}\r\n\r\nexport interface MatchGameEntity {\r\n matchGameId: string\r\n matchId: string\r\n gameRound: number\r\n state: MatchGameState\r\n checkIns: CheckInEntity[]\r\n teams: MatchTeamEntity[]\r\n readyTeams: string[]\r\n checkInStartTime: number\r\n checkInEndTime: number\r\n draftSessionId: string | null\r\n}\r\n\r\nexport interface MatchGameListItemWithResultResponse {\r\n matchGameId: string\r\n gameRound: number\r\n checkInStartTime: number\r\n results: MatchGameResultEntity[]\r\n state: MatchState\r\n}\r\n\r\nexport enum CheckInRoleType {\r\n Captain = 'Captain',\r\n Member = 'Member'\r\n}\r\n\r\nexport interface CheckInEntity {\r\n matchTeamId: string\r\n member: MemberSnippetEntity\r\n role: CheckInRoleType\r\n isCheckedIn: boolean\r\n gameAccountNickname: string\r\n}\r\n\r\nexport interface MatchTeamEntity {\r\n matchTeamId: string\r\n name: string\r\n isDisqualified: boolean\r\n logo: string\r\n}\r\n\r\nexport enum GameResult {\r\n Lose = 'Lose',\r\n Draw = 'Draw',\r\n Win = 'Win'\r\n}\r\n\r\nexport interface MatchGameResultEntity {\r\n matchTeamId: string\r\n score: number\r\n result: GameResult\r\n createdBy: string\r\n isFinal: boolean\r\n createTime: number\r\n}\r\n\r\nexport interface SubmitMatchResultRequest {\r\n matchTeamId: string\r\n score: number\r\n result: GameResult\r\n}\r\n\r\nexport interface MatchGameEvidenceEntity {\r\n matchTeamId: string\r\n file: string\r\n createTime: number\r\n}\r\n\r\nexport interface MatchChatMessageEntity {\r\n chatMessageId: string\r\n member: MemberSnippetEntity\r\n matchTeamId: string\r\n message: string\r\n createTime: number\r\n}\r\n\r\nexport enum MatchGameType {\r\n All = '',\r\n Lol = 'lol',\r\n Raingbow6 = 'rainbow6',\r\n Csgo = 'csgo',\r\n Valorant = 'valorant',\r\n WildRift = 'wildRift',\r\n Aov = 'aov',\r\n SlamDunk = 'slamDunk',\r\n Fifa21 = 'fifa21',\r\n Forts = 'forts'\r\n}\r\n\r\nexport interface MatchGameRosterEntity {\r\n matchTeamId: string\r\n playersPerTeam: number\r\n players: MatchGameRosterPlayerEntity[]\r\n}\r\n\r\nexport interface MatchGameRosterPlayerEntity {\r\n member: MemberSnippetEntity\r\n role: CheckInRoleType\r\n gameAccountNickname: string\r\n isLineup: boolean\r\n}\r\n\r\nexport interface MemberMatchHistoryEntity {\r\n match: MatchEntity\r\n roundOf: number\r\n startTime: number\r\n teamResults: MemberMatchHistoryTeamResultEntity[]\r\n}\r\n\r\nexport interface MemberMatchHistoryTeamResultEntity {\r\n isMemberTeam: boolean\r\n matchTeamId: string\r\n result: string\r\n teamName: string\r\n teamLogo: string\r\n loseCount: number\r\n winCount: number\r\n}\r\n\r\nexport interface MemberMatchHistoryPaginatedResponse {\r\n items: MemberMatchHistoryEntity[]\r\n hasMorePage: boolean\r\n}\r\n\r\nexport class MatchAPI {\r\n public static API_PREFIX = '/match/v1'\r\n\r\n /**\r\n * Get match\r\n * @param matchId {string}\r\n * @returns {AxiosPromise}\r\n */\r\n public static getMatch(\r\n matchId: string\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `${this.API_PREFIX}/matches/${encodeURIComponent(matchId)}`\r\n )\r\n }\r\n\r\n /**\r\n * Get match game\r\n * @param matchGameId {string}\r\n * @returns {AxiosPromise}\r\n */\r\n public static getMatchGame(\r\n matchGameId: string\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(matchGameId)}`\r\n )\r\n }\r\n\r\n /**\r\n * Get match game results\r\n * @param matchGameId {string}\r\n * @returns {AxiosPromise}\r\n */\r\n public static getMatchGameResults(\r\n matchGameId: string\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(\r\n matchGameId\r\n )}/results`\r\n )\r\n }\r\n\r\n /**\r\n * Submit match game results\r\n * @param matchGameId {string}\r\n * @param request {SubmitMatchResultRequest}\r\n * @returns {AxiosPromise}\r\n */\r\n public static submitMatchGameResults(\r\n matchGameId: string,\r\n request: SubmitMatchResultRequest[]\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(\r\n matchGameId\r\n )}/results`,\r\n request\r\n )\r\n }\r\n\r\n /**\r\n * Get match game evidence\r\n * @param matchGameId {string}\r\n * @returns {AxiosPromise}\r\n */\r\n public static getMatchGameEvidence(\r\n matchGameId: string\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(\r\n matchGameId\r\n )}/evidence`\r\n )\r\n }\r\n\r\n /**\r\n * Submit match evidence file / image\r\n * @param matchGameId {string}\r\n * @param file {File | Blob}\r\n * @param gameIntegration\r\n * @param requestConfig {AxiosRequestConfig}\r\n */\r\n public static submitMatchGameEvidence(\r\n matchGameId: string,\r\n file: File | Blob,\r\n gameIntegration: boolean = false,\r\n requestConfig: AxiosRequestConfig | undefined = undefined\r\n ): AxiosPromise {\r\n const request = new FormData()\r\n request.append('file', file)\r\n return axios.post(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(\r\n matchGameId\r\n )}/evidence${gameIntegration ? '?gameIntegration=true' : ''}`,\r\n request,\r\n requestConfig\r\n )\r\n }\r\n\r\n /**\r\n * Get member joinable match rooms\r\n * @param memberId {string}\r\n * @returns {AxiosPromise}\r\n */\r\n public static getMemberJoinableMatchRooms(\r\n memberId: string = '@me'\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/members/${memberId}/joinable-matches`)\r\n }\r\n\r\n /**\r\n * Check in match game\r\n * @param matchGameId {string}\r\n * @returns {AxiosPromise}\r\n */\r\n public static checkIn(matchGameId: string): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(\r\n matchGameId\r\n )}/check-in`\r\n )\r\n }\r\n\r\n /**\r\n * Captain ready\r\n * @param matchGameId {string}\r\n * @returns {AxiosPromise}\r\n */\r\n public static captainReady(matchGameId: string): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(matchGameId)}/ready`\r\n )\r\n }\r\n\r\n /**\r\n * Get match chat message history\r\n * @param matchId {string}\r\n * @param page {number}\r\n * @returns {AxiosPromise}\r\n */\r\n public static getChatMessages(\r\n matchId: string,\r\n page: number = 1\r\n ): AxiosPromise>> {\r\n return axios.get(\r\n `${this.API_PREFIX}/matches/${encodeURIComponent(matchId)}/chat-messages`,\r\n {\r\n params: {\r\n page\r\n }\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * Request assistance from tournament organizer (RequestAssistance)\r\n * @param matchId {string}\r\n */\r\n public static requestMatchAssistance(\r\n matchId: string\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/matches/${matchId}/request-assistance`\r\n )\r\n }\r\n\r\n /**\r\n * Get match game roster\r\n * @param matchGameId {string}\r\n * @returns {AxiosPromise}\r\n */\r\n public static getMatchGameRoster(\r\n matchGameId: string\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(matchGameId)}/roster`\r\n )\r\n }\r\n\r\n public static modifyRoster(\r\n matchGameId: string,\r\n memberIds: string[]\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/match-games/${encodeURIComponent(\r\n matchGameId\r\n )}/roster`,\r\n {\r\n memberIds: memberIds\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * Get member match history\r\n * @param memberId Member ID\r\n * @param page Page number\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getMemberMatchHistory(\r\n memberId: string,\r\n page: number = 1,\r\n game: string = ''\r\n ): AxiosPromise> {\r\n return axios.get(`/match/v1/members/${memberId}/history`, {\r\n params: {\r\n page: page,\r\n gameType: game\r\n }\r\n })\r\n }\r\n\r\n public static updateLeagueLobby(\r\n matchId: string,\r\n customGameId: string,\r\n name: string,\r\n password: string\r\n ): AxiosPromise {\r\n return axios.post(\r\n `/match/v1/matches/${encodeURIComponent(matchId)}/update-league-lobby`,\r\n {\r\n customGameId,\r\n name,\r\n password\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * Change match team captain\r\n * @param matchGameId Match Game ID\r\n * @param matchTeamId Match Team ID\r\n * @param newCaptainMemberId New Captain Member ID\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static changeMatchTeamCaptain(\r\n matchGameId: string,\r\n matchTeamId: string,\r\n newCaptainMemberId: string\r\n ): AxiosPromise {\r\n return axios.post(\r\n `/match/v1/match-games/${encodeURIComponent(\r\n matchGameId\r\n )}/match-teams/${encodeURIComponent(matchTeamId)}/change-captain`,\r\n {\r\n newCaptainMemberId: newCaptainMemberId\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * Get match game by draft session Id\r\n * @param draftSessionId Draft Session ID\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getMatchGameByDraftSessionId(\r\n draftSessionId: string\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `/match/v1/match-games/draft-session/${encodeURIComponent(\r\n draftSessionId\r\n )}`\r\n )\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./VFormFileUploader.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./VFormFileUploader.vue?vue&type=style&index=0&lang=scss&\"","export class CancellationToken {\r\n cancelled: boolean = false\r\n\r\n cancel() {\r\n this.cancelled = true\r\n }\r\n}\r\n\r\nexport class CancelError extends Error {\r\n constructor() {\r\n super()\r\n this.name = 'CancelError'\r\n this.message = 'Operation cancelled'\r\n }\r\n}\r\n","import { TournamentTeamEntity } from './tournamentTeam'\r\nimport axios from '@/utils/request'\r\nimport { AxiosPromise } from 'axios'\r\nimport { BaseResponse, ResponseStatus } from '.'\r\nimport { MatchGameState } from './match'\r\n\r\nexport interface StageEntity {\r\n stageId: string\r\n tournamentId: string\r\n name: string\r\n number: number\r\n setting: StageSettingEntity\r\n brackets: BracketEntity[]\r\n isBracketVisible: boolean\r\n state: string\r\n}\r\n\r\nexport enum LeagueMap {\r\n SummonersRift = 11,\r\n HowlingAbyss = 12\r\n}\r\n\r\nexport enum LeaguePickMode {\r\n Blind = 1,\r\n Competitive = 2,\r\n Random = 4,\r\n Tournament = 6\r\n}\r\n\r\nexport interface StageSettingEntity {\r\n numOfGroups: number\r\n bestOfN: number\r\n stageFormat: StageFormatType | null\r\n roundRobinEncounterTimes: number\r\n isAutoApproveIdenticalResult: boolean\r\n isAutoCompleteBracket: boolean\r\n isAutoGetGameEvidence: boolean\r\n isAutoGenerateMatch: boolean\r\n isAutoCheckInAllWhenCaptainCheckIn: boolean\r\n isThirdPlaceMatchEnabled: boolean\r\n leagueMap: LeagueMap | null\r\n leaguePickMode: LeaguePickMode | null\r\n draftId: string | null\r\n autoApproveResultTime: number | null\r\n freeForAllMaxTeamPerMatch: number | null\r\n}\r\n\r\nexport enum StageFormat {\r\n SingleElimination = 'SingleElimination',\r\n DoubleElimination = 'DoubleElimination',\r\n RoundRobin = 'RoundRobin',\r\n FreeForAll = 'FreeForAll'\r\n}\r\n\r\nexport interface BracketEntity {\r\n name: string\r\n groupNumber: number\r\n state: BracketState\r\n matches: BracketMatchEntity[]\r\n}\r\n\r\nexport enum BracketState {\r\n Initial = 'Initial',\r\n InProgress = 'InProgress',\r\n PendingComplete = 'PendingComplete',\r\n Completed = 'Completed'\r\n}\r\n\r\nexport interface BracketMatchEntity {\r\n id: string\r\n round: number\r\n tournamentTeams: TournamentTeamEntity[]\r\n scores: BracketScoreEntity[]\r\n nextWinnerBracketMatchId: string\r\n}\r\n\r\nexport enum BracketScoreResult {\r\n None = 'None',\r\n Win = 'Win',\r\n Lose = 'Lose',\r\n Foul = 'Foul',\r\n NotCheckedIn = 'NotCheckedIn',\r\n Forfeit = 'Forfeit',\r\n Draw = 'Draw'\r\n}\r\n\r\nexport interface BracketScoreEntity {\r\n tournamentTeamId: string\r\n winCount: number\r\n totalScore: number\r\n result: BracketScoreResult\r\n}\r\n\r\nexport enum StageState {\r\n Initial = 'Initial',\r\n InProgress = 'InProgress',\r\n StandingPendingGenerate = 'StandingPendingGenerate',\r\n StandingPendingApproval = 'StandingPendingApproval',\r\n Cancelled = 'Cancelled',\r\n Completed = 'Completed'\r\n}\r\n\r\nexport enum StageFormatType {\r\n SingleElimination = 'SingleElimination',\r\n DoubleElimination = 'DoubleElimination',\r\n RoundRobin = 'RoundRobin',\r\n FreeForAll = 'FreeForAll'\r\n}\r\n\r\nexport class BracketNode {\r\n match: BracketMatchAdjacencyMatrixEntity | null = null\r\n nextNode: BracketNode | null = null\r\n childNode: BracketNode[] = []\r\n round: number = 0\r\n constructor(match: BracketMatchAdjacencyMatrixEntity, round: number) {\r\n this.match = match\r\n this.round = round\r\n }\r\n}\r\n\r\nexport class BracketMatrix {\r\n bracket: BracketAdjacencyMatrixEntity | null = null\r\n data: BracketNode[] = []\r\n\r\n constructor(bracket: BracketAdjacencyMatrixEntity) {\r\n this.bracket = bracket\r\n this.data = []\r\n }\r\n\r\n findOrCreateNode(match: BracketMatchAdjacencyMatrixEntity) {\r\n let node = null\r\n for (const n of this.data) {\r\n if (n.match === match) {\r\n node = n\r\n break\r\n }\r\n }\r\n if (!node) {\r\n node = new BracketNode(match, this.getMatchRound(match))\r\n this.data.push(node)\r\n }\r\n return node\r\n }\r\n\r\n toAdjacencyMatrix() {\r\n if (!this.bracket) {\r\n return null\r\n }\r\n const matches = this.bracket.matches\r\n const edges = this.bracket.edges\r\n\r\n // initialize matrix with sizeof(vertices) * sizeof(vertices) array\r\n const matrix: number[][] = Array.from(Array(matches.length), _ =>\r\n Array(matches.length).fill(0)\r\n )\r\n\r\n // fill matrix with edges x, y coordinate\r\n for (var i = 0; i < edges.length; i++) {\r\n const x = edges[i][0]\r\n const y = edges[i][1]\r\n matrix[y][x] = 1\r\n }\r\n\r\n return matrix\r\n }\r\n\r\n toBracketTree() {\r\n if (!this.bracket) {\r\n return null\r\n }\r\n\r\n this.data = []\r\n for (const [x, y] of this.bracket.edges) {\r\n // find node\r\n const node = this.findOrCreateNode(this.bracket.matches[y])\r\n // find leaf\r\n const leaf = this.findOrCreateNode(this.bracket.matches[x])\r\n leaf.nextNode = node\r\n node.childNode.push(leaf)\r\n }\r\n\r\n // if there are no edges\r\n if (this.bracket.edges.length === 0) {\r\n for (const match of this.bracket.matches) {\r\n this.data.push(this.findOrCreateNode(match))\r\n }\r\n }\r\n // additional matches\r\n if (this.bracket.additionalMatches) {\r\n for (const match of this.bracket.additionalMatches) {\r\n this.findOrCreateNode(match)\r\n }\r\n }\r\n return this.data\r\n }\r\n\r\n getMatchRound(match: BracketMatchAdjacencyMatrixEntity) {\r\n // find leaf node round\r\n let leafNodeRoundOf = 2\r\n if (!this.bracket) return leafNodeRoundOf\r\n\r\n for (const match of this.bracket!.matches) {\r\n if (match.roundOf > leafNodeRoundOf) {\r\n leafNodeRoundOf = match.roundOf\r\n }\r\n }\r\n\r\n // find match round\r\n let round = 1\r\n while (leafNodeRoundOf > match.roundOf) {\r\n round++\r\n leafNodeRoundOf /= 2\r\n }\r\n\r\n return round\r\n }\r\n\r\n toBracketTreeNoEdge() {\r\n const allRoundOfs = this.bracket!.matches.map(bm => bm.roundOf)\r\n const roundOfs = allRoundOfs\r\n .filter((roundOf, index) => allRoundOfs.indexOf(roundOf) === index)\r\n .sort((a, b) => a - b)\r\n\r\n return roundOfs.map(roundOf =>\r\n [...this.bracket!.matches, ...this.bracket!.additionalMatches]\r\n .filter(bm => bm.roundOf === roundOf)\r\n .sort((a, b) => a.identifier.localeCompare(b.identifier))\r\n )\r\n }\r\n\r\n toBracketTreeLevelOrdered() {\r\n const tree = this.toBracketTree()\r\n if (!tree) {\r\n return null\r\n }\r\n\r\n // find the root node where nextNode is empty\r\n const bracketNodeRoot = tree.find(rootNode => rootNode.nextNode === null)\r\n\r\n if (!bracketNodeRoot) {\r\n // returns null when failed to find root\r\n return null\r\n }\r\n\r\n const initialRound = 0\r\n const roundsMap: Map<\r\n number,\r\n BracketMatchAdjacencyMatrixEntity[]\r\n > = new Map()\r\n const queue = []\r\n\r\n let totalRounds = 0\r\n\r\n // push the root node to our queue (base round level)\r\n queue.push([bracketNodeRoot, initialRound])\r\n\r\n while (queue.length > 0) {\r\n const qFront = queue.shift()!\r\n\r\n const node = qFront[0] as BracketNode\r\n const currentRound = qFront[1] as number\r\n\r\n totalRounds = Math.max(totalRounds, currentRound)\r\n\r\n let roundMatches: BracketMatchAdjacencyMatrixEntity[] = []\r\n\r\n // if item is same round as previously processed\r\n // get the previous matches from map to roundMatches.\r\n if (roundsMap.has(currentRound)) {\r\n roundMatches = roundsMap.get(currentRound)!\r\n }\r\n\r\n if (node.match) roundMatches.push(node.match)\r\n\r\n // set roundsMap for this round\r\n roundsMap.set(currentRound, roundMatches)\r\n\r\n const leftNode: BracketNode = node.childNode[0]!\r\n const rightNode: BracketNode = node.childNode[1]!\r\n const childRound = currentRound + 1\r\n\r\n if (leftNode) {\r\n queue.push([leftNode, childRound])\r\n }\r\n if (rightNode) {\r\n queue.push([rightNode, childRound])\r\n }\r\n }\r\n const rounds: BracketMatchAdjacencyMatrixEntity[][] = []\r\n\r\n // loop inversely\r\n for (let i = totalRounds; i >= 0; i--) {\r\n const rdMatches = roundsMap.get(i)!\r\n rounds.push(rdMatches)\r\n }\r\n\r\n // add additional nodes\r\n const additionalNodes = tree.filter(\r\n node => node.match && node.match!.isAdditional\r\n )\r\n additionalNodes.map(node => {\r\n const roundIndex = node.round - 1\r\n if (!rounds[roundIndex]) rounds[roundIndex] = []\r\n rounds[roundIndex].push(node.match!)\r\n })\r\n\r\n return rounds\r\n }\r\n}\r\n\r\nexport interface RoundSettingEntity {\r\n roundOf: number\r\n name: string | null\r\n}\r\n\r\nexport interface BracketAdjacencyMatrixEntity {\r\n bracketId: string\r\n groupNumber: number\r\n name: string\r\n state: string\r\n matches: BracketMatchAdjacencyMatrixEntity[]\r\n additionalMatches: BracketMatchAdjacencyMatrixEntity[]\r\n edges: number[][]\r\n roundSettings: RoundSettingEntity[]\r\n}\r\n\r\nexport interface BracketMatchAdjacencyMatrixEntity {\r\n bracketMatchId: string\r\n matchId: string\r\n teams: TournamentTeamListItemEntity[]\r\n scores: BracketScoreEntity[]\r\n checkInStartTime: number\r\n checkInEndTime: number\r\n isAdvanced: boolean\r\n isAdditional: boolean\r\n roundOf: number\r\n identifier: string\r\n matchGame?: BracketMatchGameEntity\r\n}\r\n\r\nexport interface BracketMatchGameEntity {\r\n currentRound: number\r\n state: MatchGameState\r\n totalRound: number\r\n checkIn: number\r\n checkInTotal: number\r\n}\r\n\r\nexport interface StageAdjacencyMatrixEntity {\r\n stageId: string | null\r\n tournamentId: string | null\r\n name: string | null\r\n number: number\r\n setting: StageSettingEntity\r\n brackets: BracketAdjacencyMatrixEntity[] | null\r\n}\r\n\r\nexport interface TournamentTeamListItemEntity {\r\n tournamentTeamId: string\r\n name: string\r\n logo: string\r\n state: string\r\n}\r\n\r\nexport interface TournamentStageRequest {\r\n name: string\r\n numOfGroups: number\r\n stageFormatType: StageFormatType\r\n bestOfN: number\r\n}\r\n\r\nexport interface StageListItemEntity {\r\n name: string | null\r\n number: number\r\n stageId: string\r\n state: StageState\r\n}\r\n\r\nexport class StageAPI {\r\n public static API_PREFIX = '/tournament/v1'\r\n\r\n /**\r\n * Get stages by tournament ID\r\n * @param tournamentId Tournament Id\r\n * @returns {BaseResponse} Array of StageListItemEntity Response\r\n */\r\n public static getTournamentStages(\r\n tournamentId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournaments/${tournamentId}/stages`)\r\n }\r\n\r\n /**\r\n * Get stage\r\n * @param tournamentId Tournament ID\r\n * @returns {StageEntity} StageEntity\r\n */\r\n public static getStage(\r\n stageId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/stages/${stageId}`)\r\n }\r\n}\r\n","import { AxiosError } from 'axios'\r\nimport { ResponseStatus } from '@/api'\r\n\r\nclass ServerError extends Error {\r\n axiosError: AxiosError\r\n\r\n constructor(axiosError: AxiosError) {\r\n super()\r\n this.axiosError = axiosError\r\n this.name = 'ServerError'\r\n this.message = 'Server returns an error. Check Network for more details.'\r\n\r\n if (axiosError.response && axiosError.response!.status === 500) {\r\n console.error(\r\n '!!! INTERNAL SERVER ERROR !!!\\n',\r\n axiosError.response!.data\r\n )\r\n }\r\n }\r\n\r\n getStatusCode(): number {\r\n return this.axiosError.response ? this.axiosError.response!.status : 0\r\n }\r\n\r\n getMessage(): string {\r\n if (\r\n !this.axiosError.response ||\r\n !this.axiosError.response!.data ||\r\n !this.axiosError.response!.data.status\r\n ) {\r\n if (\r\n this.axiosError.response &&\r\n this.axiosError.response!.status === 500\r\n ) {\r\n return 'Internal server error'\r\n } else {\r\n return 'Server is unreachable. Please check your network connection.'\r\n }\r\n }\r\n\r\n const data = this.axiosError.response!.data\r\n\r\n switch (data.status) {\r\n case ResponseStatus.Error:\r\n return data.message\r\n\r\n case ResponseStatus.Fail:\r\n let msg = 'Client error. Invalid request.'\r\n\r\n Object.keys(data.payload).forEach(propertyName => {\r\n data.payload[propertyName].forEach((error: string) => {\r\n msg += `\\n[${propertyName}]: ${error}`\r\n })\r\n })\r\n\r\n return msg\r\n\r\n case ResponseStatus.UpdateRequired:\r\n return 'Software update is required.'\r\n\r\n default:\r\n return 'Client error. Invalid response status.'\r\n }\r\n }\r\n}\r\n\r\nexport default ServerError\r\nexport { ServerError }\r\n","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb718\",\n\t\"./de-ch.js\": \"bb718\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-SG\": \"cdab\",\n\t\"./en-SG.js\": \"cdab\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33e\",\n\t\"./yo.js\": \"7f33e\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","import { StringNullableChain } from 'lodash'\r\nimport sharedStore from '@/modules/shared/shared.store'\r\nimport store from '@/store'\r\nimport { getModule } from 'vuex-module-decorators'\r\n\r\nexport interface GameType {\r\n code: string\r\n name: StringNullableChain\r\n}\r\n\r\nexport function getGameTypes() {\r\n const sharedModule = getModule(sharedStore, store)\r\n return sharedModule.applicationSupportedGames\r\n}\r\n","import { VuexModule, Module, Action, Mutation } from 'vuex-module-decorators'\r\nimport {\r\n MemberPaymentTransaction,\r\n PaymentAPI,\r\n ResponseStatus\r\n} from '@/api/payment'\r\nimport store from '@/store'\r\n\r\nexport interface PaymentCreateOrder {\r\n (paymentMethod: string): Promise<{\r\n orderId: string\r\n walletTransactionId: string\r\n }>\r\n}\r\n\r\nexport interface PaymentCallback {\r\n (orderId: string): Promise\r\n}\r\n\r\nexport interface PaymentErrorCallback {\r\n (err: Error): void\r\n}\r\n\r\nexport interface PaymentCompleteCallback {\r\n (walletTransactionId: string): void\r\n}\r\n\r\nexport interface PaymentCancelCallback {\r\n (walletTransactionId: string): void\r\n}\r\n\r\nexport interface PaymentCallbacks {\r\n createOrder: PaymentCreateOrder\r\n onApprove?: PaymentCallback\r\n onComplete?: PaymentCompleteCallback\r\n onError?: PaymentErrorCallback\r\n onCancel?: PaymentCancelCallback\r\n}\r\n\r\n@Module({ dynamic: true, store: store, namespaced: true, name: 'payment' })\r\nexport default class MemberModule extends VuexModule {\r\n paymentCallbacks: PaymentCallbacks | null = null\r\n isTournamentEntryFeePaymentDialogVisible: boolean = false\r\n tournamentEntryFee: string = ''\r\n\r\n // Member transaction\r\n transactions: MemberPaymentTransaction[] = []\r\n transactionsCurrentPage: number = 1\r\n transactionsPageCount: number = 1\r\n transactionsTotal: number = 0\r\n\r\n @Mutation\r\n SET_TOURNAMENT_ENTRY_FEE_PAYMENT_DIALOG_VISIBLE(params: {\r\n visible: boolean\r\n fee: string\r\n callbacks: PaymentCallbacks\r\n }) {\r\n this.isTournamentEntryFeePaymentDialogVisible = params.visible\r\n this.tournamentEntryFee = params.fee\r\n this.paymentCallbacks = params.callbacks\r\n }\r\n\r\n @Action\r\n showTournamentEntryFeePaymentDialog(params: {\r\n fee: string\r\n callbacks: PaymentCallbacks\r\n }) {\r\n this.context.commit('SET_TOURNAMENT_ENTRY_FEE_PAYMENT_DIALOG_VISIBLE', {\r\n visible: true,\r\n fee: params.fee,\r\n callbacks: params.callbacks\r\n })\r\n }\r\n\r\n @Action\r\n closeTournamentEntryFeePaymentDialog() {\r\n this.context.commit('SET_TOURNAMENT_ENTRY_FEE_PAYMENT_DIALOG_VISIBLE', {\r\n visible: false,\r\n fee: '',\r\n callbacks: null\r\n })\r\n }\r\n\r\n @Action\r\n setWalletDepositTransactionId(walletDepositTransactionId: string) {\r\n this.context.commit(\r\n 'SET_CURRENT_WALLET_DEPOSIT_TRANSACTION_ID',\r\n walletDepositTransactionId\r\n )\r\n }\r\n\r\n @Action\r\n async getPaymentTransaction(page: number) {\r\n try {\r\n const response = await PaymentAPI.getMemberPaymentTransaction(page)\r\n const payload = response.data.payload\r\n if (response.data.status === ResponseStatus.Ok && payload) {\r\n this.context.commit('SET_PAYMENT_TRANSACTIONS', payload.items)\r\n this.context.commit('SET_PAYMENT_TRANSACTIONS_CURRENTPAGE', page)\r\n this.context.commit(\r\n 'SET_PAYMENT_TRANSACTIONS_PAGECOUNT',\r\n payload.pageCount\r\n )\r\n this.context.commit('SET_PAYMENT_TRANSACTIONS_TOTAL', payload.itemCount)\r\n }\r\n } catch {}\r\n }\r\n\r\n @Mutation\r\n SET_PAYMENT_TRANSACTIONS(items: MemberPaymentTransaction[]) {\r\n this.transactions = items\r\n }\r\n\r\n @Mutation\r\n SET_PAYMENT_TRANSACTIONS_PAGECOUNT(count: number) {\r\n this.transactionsPageCount = count\r\n }\r\n\r\n @Mutation\r\n SET_PAYMENT_TRANSACTIONS_CURRENTPAGE(count: number) {\r\n this.transactionsCurrentPage = count\r\n }\r\n\r\n @Mutation\r\n SET_PAYMENT_TRANSACTIONS_TOTAL(count: number) {\r\n this.transactionsTotal = count\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./PayPalButton.vue?vue&type=style&index=0&id=3b0c726e&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./PayPalButton.vue?vue&type=style&index=0&id=3b0c726e&lang=scss&scoped=true&\"","import { VuexModule, Module, Action, Mutation } from 'vuex-module-decorators'\r\nimport { IVenueState } from '@/store/types'\r\nimport store from '@/store'\r\nimport {\r\n UpdateMemberHomeShopRequest,\r\n VenueAPI,\r\n VenueEntity,\r\n ResponseStatus\r\n} from '@/api/venue'\r\n\r\n@Module({ dynamic: true, store: store, namespaced: true, name: 'venue' })\r\nexport default class VenueModule extends VuexModule implements IVenueState {\r\n applicationVenueId: string = ''\r\n applicationVenue: VenueEntity | null = null\r\n\r\n // Update member homeshop\r\n @Action({ rawError: true })\r\n async setMemberHomeShop(memberId: string) {\r\n if (!this.applicationVenueId) return\r\n try {\r\n const response = await VenueAPI.setMemberHomeShop(\r\n this.applicationVenueId,\r\n {\r\n memberId: memberId\r\n } as UpdateMemberHomeShopRequest\r\n )\r\n let payload = response.data.payload\r\n if (response.data.status === ResponseStatus.Ok && payload) {\r\n return payload\r\n }\r\n } catch (err) {\r\n throw err\r\n }\r\n }\r\n\r\n @Mutation\r\n SET_VENUE_ID(applicationVenueId: string) {\r\n this.applicationVenueId = applicationVenueId\r\n }\r\n\r\n // Application venue\r\n @Action({ rawError: true })\r\n setApplicationVenue(venue: VenueEntity) {\r\n this.context.commit('SET_APPLICATION_VENUE', venue)\r\n }\r\n\r\n @Mutation\r\n SET_APPLICATION_VENUE(venue: VenueEntity) {\r\n this.applicationVenue = venue\r\n this.applicationVenueId = venue.venueId\r\n }\r\n}\r\n","export default {\r\n path: '',\r\n props: true,\r\n component: () =>\r\n import(/* webpackChunkName: \"campaign-layout\" */ '../CampaignLayout.vue'),\r\n children: [\r\n {\r\n path: 'home',\r\n name: 'CampaignViewExample',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"campaign-view\" */ '../views/ExampleView.vue'\r\n )\r\n }\r\n ]\r\n}\r\n","export interface AllLiveGameData {\r\n activePlayer: ActivePlayer\r\n allPlayers: AllPlayer[]\r\n events: Events\r\n gameData: GameData\r\n}\r\n\r\nexport interface ActivePlayer {\r\n abilities: Abilities\r\n championStats: ChampionStats\r\n currentGold: number\r\n fullRunes: FullRunes\r\n level: number\r\n summonerName: string\r\n}\r\n\r\nexport interface Abilities {\r\n E: AbilityInfo\r\n Q: AbilityInfo\r\n R: AbilityInfo\r\n W: AbilityInfo\r\n Passive: AbilityInfo\r\n}\r\n\r\nexport interface AbilityInfo {\r\n abilityLevel?: number\r\n displayName: string\r\n id?: string\r\n rawDescription: string\r\n rawDisplayName: string\r\n}\r\n\r\nexport interface ChampionStats {\r\n abilityPower: number\r\n armor: number\r\n armorPenetrationFlat: number\r\n armorPenetrationPercent: number\r\n attackDamage: number\r\n attackRange: number\r\n attackSpeed: number\r\n bonusArmorPenetrationPercent: number\r\n bonusMagicPenetrationPercent: number\r\n cooldownReduction: number\r\n critChance: number\r\n critDamage: number\r\n currentHealth: number\r\n healthRegenRate: number\r\n lifeSteal: number\r\n magicLethality: number\r\n magicPenetrationFlat: number\r\n magicPenetrationPercent: number\r\n magicResist: number\r\n maxHealth: number\r\n moveSpeed: number\r\n physicalLethality: number\r\n resourceMax: number\r\n resourceRegenRate: number\r\n resourceType: string\r\n resourceValue: number\r\n spellVamp: number\r\n tenacity: number\r\n}\r\n\r\nexport interface FullRunes {\r\n generalRunes: Keystone[]\r\n keystone: Keystone\r\n primaryRuneTree: Keystone\r\n secondaryRuneTree: Keystone\r\n statRunes: StatRune[]\r\n}\r\n\r\nexport interface Keystone {\r\n displayName: string\r\n id: number\r\n rawDescription: string\r\n rawDisplayName: string\r\n}\r\n\r\nexport interface StatRune {\r\n id: number\r\n rawDescription: string\r\n}\r\n\r\nexport interface AllPlayer {\r\n championName: string\r\n isBot: boolean\r\n isDead: boolean\r\n items: Item[]\r\n level: number\r\n position: string\r\n rawChampionName: string\r\n respawnTimer: number\r\n runes: Runes\r\n scores: Scores\r\n skinID: number\r\n summonerName: string\r\n summonerSpells: SummonerSpells\r\n team: string\r\n}\r\n\r\nexport interface Item {\r\n canUse: boolean\r\n consumable: boolean\r\n count: number\r\n displayName: string\r\n itemID: number\r\n price: number\r\n rawDescription: string\r\n rawDisplayName: string\r\n slot: number\r\n}\r\n\r\nexport interface Runes {\r\n keystone: Keystone\r\n primaryRuneTree: Keystone\r\n secondaryRuneTree: Keystone\r\n}\r\n\r\nexport interface Scores {\r\n assists: number\r\n creepScore: number\r\n deaths: number\r\n kills: number\r\n wardScore: number\r\n}\r\n\r\nexport interface SummonerSpells {\r\n summonerSpellOne: AbilityInfo\r\n summonerSpellTwo: AbilityInfo\r\n}\r\n\r\nexport interface Events {\r\n Events: Event[]\r\n}\r\n\r\nexport interface Event {\r\n EventID: number\r\n EventName: GameEventType\r\n EventTime: number\r\n Assisters?: string[]\r\n KillerName?: string\r\n TurretKilled?: string\r\n}\r\n\r\nexport enum GameEventType {\r\n EVENT_GAMESTART = 'GameStart',\r\n EVENT_MINIONSSPAWNING = 'MinionsSpawning',\r\n EVENT_FIRSTBRICK = 'FirstBrick',\r\n EVENT_TURRETKILLED = 'TurretKilled',\r\n EVENT_INHIBKILLED = 'InhibKilled',\r\n EVENT_DRAGONKILL = 'DragonKill',\r\n EVENT_HERALDKILL = 'HeraldKill',\r\n EVENT_BARONKILL = 'BaronKill',\r\n EVENT_CHAMPIONKILL = 'ChampionKill',\r\n EVENT_MULTIKILL = 'Multikill',\r\n EVENT_ACE = 'Ace'\r\n}\r\n\r\nexport interface GameData {\r\n gameMode: GameMode\r\n gameTime: number\r\n mapName: string\r\n mapNumber: number\r\n mapTerrain: string\r\n}\r\n\r\nexport enum GameMode {\r\n CLASSIC = 'CLASSIC',\r\n ODIN = 'ODIN',\r\n ARAM = 'ARAM',\r\n TUTORIAL = 'TUTORIAL',\r\n URF = 'URF',\r\n DOOMBOTSTEEMO = 'DOOMBOTSTEEMO',\r\n ONEFORALL = 'ONEFORALL',\r\n ASCENSION = 'ASCENSION',\r\n FIRSTBLOOD = 'FIRSTBLOOD',\r\n KINGPORO = 'KINGPORO',\r\n SIEGE = 'SIEGE',\r\n ASSASSINATE = 'ASSASSINATE',\r\n ARSR = 'ARSR',\r\n DARKSTAR = 'DARKSTAR',\r\n STARGUARDIAN = 'STARGUARDIAN',\r\n PROJECT = 'PROJECT',\r\n GAMEMODEX = 'GAMEMODEX',\r\n ODYSSEY = 'ODYSSEY',\r\n NEXUSBLITZ = 'NEXUSBLITZ'\r\n}\r\n\r\nexport enum GameMap {\r\n SUMMONER_RIFT_SUMMER = 1,\r\n SUMMONER_RIFT_AUTUMN = 2,\r\n THE_PROVING_GROUND_TUTORIAL = 3,\r\n TWISTED_TREELINE_ORIGINAL = 4,\r\n THE_CRYSTAL_SCAR_DOMINION = 8,\r\n TWISTED_TREELINE_LAST_TT = 10,\r\n SUMMONER_RIFT = 11,\r\n HOWLING_ABYSS = 12,\r\n BUTCHERS_BRIDGE = 14,\r\n COSMIC_RUINS = 16,\r\n VALORAN_CITY_PARK = 18,\r\n SUBSTRUCTURE_43 = 19,\r\n CONVERGENCE = 20,\r\n NEXUS_BLITZ = 21\r\n}\r\n\r\nexport enum GameType {\r\n CUSTOM_GAME = 'CUSTOM_GAME',\r\n TUTORIAL_GAME = 'TUTORIAL_GAME',\r\n MATCHED_GAME = 'MATCHED_GAME'\r\n}\r\n","module.exports = __webpack_public_path__ + \"img/logo.3b17904c.png\";","import { getOpenIdConnectEndpoint } from '@/utils/endpoint'\r\n\r\nexport const oidcSettings = {\r\n authority: getOpenIdConnectEndpoint() || 'https://localhost:8000',\r\n clientId: 'web.pkce',\r\n redirectUri: `${window.location.origin}/auth`,\r\n responseType: 'code',\r\n scope: 'openid profile email offline_access vs_webapi',\r\n automaticSilentRenew: true,\r\n automaticSilentSignin: false,\r\n silentRedirectUri: window.location.origin\r\n}\r\n","import Vue from 'vue'\r\nimport Vuex from 'vuex'\r\nimport { VuexModule } from 'vuex-module-decorators'\r\nimport { vuexOidcCreateStoreModule } from 'vuex-oidc'\r\nimport { oidcSettings } from '@/utils/oidc'\r\nVue.use(Vuex)\r\n\r\nconst oidc = new VuexModule(\r\n vuexOidcCreateStoreModule(oidcSettings, { namespaced: true })\r\n)\r\nexport { oidc }\r\nexport default new Vuex.Store({\r\n state: {},\r\n mutations: {},\r\n actions: {},\r\n modules: {\r\n oidc\r\n }\r\n})\r\n","import mod from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./AppButton.vue?vue&type=style&index=0&id=0b4da7e5&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./AppButton.vue?vue&type=style&index=0&id=0b4da7e5&lang=scss&scoped=true&\"","import mod from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./BracketTeam.vue?vue&type=style&index=0&id=49b819b2&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./BracketTeam.vue?vue&type=style&index=0&id=49b819b2&lang=scss&scoped=true&\"","import { isElectron } from '@/utils/electron'\r\nimport Vue from 'vue'\r\nimport VueI18n from 'vue-i18n'\r\n\r\nimport en from './en.json'\r\nimport tc from './tc.json'\r\nimport sc from './sc.json'\r\n\r\nVue.use(VueI18n)\r\n\r\nexport function getUserLocale(): string {\r\n // get user locale\r\n let locale = null\r\n\r\n if (window.ipcRenderer || isElectron()) {\r\n locale = window.ipcRenderer.sendSync('get-user-locale')\r\n } else {\r\n locale = localStorage.getItem('locale')\r\n }\r\n\r\n if (locale) {\r\n return locale\r\n }\r\n\r\n // fallback to browser preferred locale\r\n const userLanguage = navigator.language || 'zh-TW'\r\n\r\n switch (userLanguage) {\r\n case 'zh-HK':\r\n case 'zh-TW':\r\n case 'zh-MO':\r\n locale = 'zh'\r\n break\r\n case 'zh-SG':\r\n case 'zh-CN':\r\n locale = 'zh-CN'\r\n break\r\n // case 'ja':\r\n // locale = 'jp'\r\n // break\r\n // case 'ko':\r\n // locale = 'kr'\r\n // break\r\n default:\r\n locale = 'en'\r\n break\r\n }\r\n\r\n return locale\r\n}\r\n\r\nexport function setUserLocale(locale: string) {\r\n i18n.locale = locale\r\n if (isElectron()) {\r\n window.ipcRenderer.send('set-user-locale', locale)\r\n } else {\r\n localStorage.setItem('locale', locale)\r\n }\r\n}\r\n\r\nconst i18n = new VueI18n({\r\n locale: getUserLocale(),\r\n messages: { en, zh: tc, 'zh-CN': sc },\r\n fallbackLocale: 'en'\r\n})\r\n\r\nexport default i18n\r\n","export interface BaseResponse {\r\n status: string\r\n message?: string\r\n payload?: T\r\n serverTime: string\r\n}\r\n\r\nexport interface Pagination {\r\n items: T[]\r\n hasMorePage: boolean\r\n}\r\n\r\nexport interface PaginationWithPageCount {\r\n items: T[]\r\n hasMorePage: boolean\r\n itemCount: number\r\n pageCount: number\r\n}\r\n\r\nexport enum ResponseStatus {\r\n Ok = 'ok',\r\n Error = 'error',\r\n Fail = 'fail',\r\n UpdateRequired = 'update_required'\r\n}\r\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./App.vue?vue&type=style&index=0&id=752fc9f0&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./App.vue?vue&type=style&index=0&id=752fc9f0&lang=scss&scoped=true&\"","import mod from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./InstantMatchSnackBar.vue?vue&type=style&index=0&id=376db7eb&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./InstantMatchSnackBar.vue?vue&type=style&index=0&id=376db7eb&lang=scss&scoped=true&\"","import { isElectron } from '@/utils/electron'\r\n\r\nexport async function isDownloadingUpdates() {\r\n if (!isElectron()) {\r\n return false\r\n }\r\n\r\n // eslint-disable-next-line no-return-await\r\n return await window.ipcRenderer.invoke('is-downloading-updates')\r\n}\r\n\r\nexport async function quitAndInstall() {\r\n if (!isElectron()) {\r\n return\r\n }\r\n await window.ipcRenderer.send('quit-and-install')\r\n}\r\n\r\nexport async function checkForUpdates() {\r\n if (!isElectron()) {\r\n return\r\n }\r\n await window.ipcRenderer.send('check-for-updates')\r\n}\r\n","let timeOffset = 0\r\n\r\nexport function setTimeOffset(serverTime: Date) {\r\n timeOffset = serverTime.getTime() - new Date().getTime()\r\n}\r\n\r\nexport function getTimeOffset() {\r\n return timeOffset\r\n}\r\n\r\nexport function getSecondsDiff(a: any, b: any) {\r\n const timeStampA = a instanceof Date ? a.getTime() : a\r\n const timeStampB = b instanceof Date ? b.getTime() : b\r\n\r\n return Math.ceil((timeStampA - timeStampB + timeOffset) / 1000)\r\n}\r\n\r\nexport function now(): Date {\r\n return new Date(new Date().getTime() + getTimeOffset())\r\n}\r\n\r\nexport default {\r\n setTimeOffset,\r\n getTimeOffset,\r\n getSecondsDiff\r\n}\r\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./RoundRobinBracket.vue?vue&type=style&index=0&id=84be7698&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./RoundRobinBracket.vue?vue&type=style&index=0&id=84be7698&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-btn',{staticClass:\"app-button\",class:(\"theme-\" + _vm.theme + \" \" + _vm.size + \" \" + _vm.buttonType + \"-btn \" + (_vm.noEffect ? 'no-effect' : '') + \" \" + (_vm.auto ? 'auto' : '')),style:(_vm.buttonStyles),attrs:{\"block\":_vm.block,\"disabled\":_vm.disabled,\"ripple\":_vm.ripple,\"outlined\":_vm.outlined,\"large\":_vm.large,\"x-large\":_vm.xLarge,\"small\":_vm.small,\"x-small\":_vm.xSmall,\"loading\":_vm.loading},on:{\"click\":_vm.onButtonClick}},[(_vm.label)?[(_vm.icon)?_c('v-icon',{staticClass:\"mr-2 d-none d-lg-inline-block\",domProps:{\"textContent\":_vm._s(_vm.icon)}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.label)+\" \")]:[_vm._t(\"default\")]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop, Emit } from 'vue-property-decorator'\r\nimport { TranslateResult } from 'vue-i18n'\r\n\r\n@Component\r\nexport default class AppButton extends Vue {\r\n @Prop({ type: String, default: '' }) readonly label!: string\r\n @Prop({ default: 'blue' }) readonly theme!: string\r\n @Prop({ type: Boolean, default: false }) readonly bold!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly shadow!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly block!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly disabled!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly xLarge!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly large!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly small!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly xSmall!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly outlined!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly noEffect!: boolean\r\n @Prop({ type: Boolean, default: true }) readonly ripple!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly loading!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly auto!: boolean\r\n @Prop({ type: String, default: null }) readonly size!: string\r\n @Prop({ type: String, default: null }) readonly buttonType!: string\r\n @Prop({ type: String, default: '' }) readonly icon!: string\r\n\r\n /* Computed Properties */\r\n get startingBackgroundColor(): string {\r\n switch (this.theme) {\r\n case 'blue':\r\n return '#10c7d5'\r\n case 'purple':\r\n return '#f505fc'\r\n }\r\n return ''\r\n }\r\n\r\n get endingBackgroundColor(): string {\r\n switch (this.theme) {\r\n case 'blue':\r\n return '#3c3cc7'\r\n case 'purple':\r\n return '#783cc7'\r\n }\r\n return ''\r\n }\r\n\r\n get buttonStyles() {\r\n switch (this.theme) {\r\n case 'transparent':\r\n return {\r\n backgroundColor: 'transparent',\r\n border: '1px solid #ffffff'\r\n }\r\n default:\r\n return {\r\n textShadow: this.shadow ? '0.2rem 0.2rem 0.5rem #998585' : '',\r\n '--starting-background-color': this.disabled\r\n ? 'grey'\r\n : this.startingBackgroundColor,\r\n '--ending-background-color': this.disabled\r\n ? 'grey'\r\n : this.endingBackgroundColor,\r\n cursor: this.disabled\r\n ? 'not-allowed'\r\n : this.noEffect\r\n ? 'auto'\r\n : 'pointer'\r\n }\r\n }\r\n }\r\n\r\n /* Emitter */\r\n onButtonClick() {\r\n if (this.disabled) return\r\n\r\n this.$emit('click', this)\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./AppButton.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./AppButton.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppButton.vue?vue&type=template&id=0b4da7e5&scoped=true&\"\nimport script from \"./AppButton.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppButton.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppButton.vue?vue&type=style&index=0&id=0b4da7e5&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b4da7e5\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VBtn,VIcon})\n","import axios from '@/utils/request'\r\nimport { AxiosPromise } from 'axios'\r\nimport { BaseResponse, ResponseStatus } from '.'\r\nimport { VenueEntity } from '@/api/venue'\r\n\r\nexport { BaseResponse, ResponseStatus }\r\n\r\nexport interface SettingResponse {\r\n games: SupportedGame[]\r\n avatars: SupportedAvatar[]\r\n applicationVenue: VenueEntity\r\n regions: RegionInfo[]\r\n}\r\n\r\nexport interface SupportedGame {\r\n code: string\r\n name: string\r\n icon: string\r\n banner: string\r\n background: string\r\n themeColor: string\r\n}\r\n\r\nexport interface SupportedAvatar {\r\n url: string\r\n}\r\n\r\nexport interface RegionInfo {\r\n code: string\r\n name: string\r\n idd: string\r\n}\r\n\r\nexport class ConfigAPI {\r\n public static API_PREFIX = '/config/v1'\r\n\r\n public static getSettings(): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/settings`)\r\n }\r\n\r\n public static getSuggestedRegion(): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/suggested-region`)\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentEntryFeePaymentDialog.vue?vue&type=style&index=0&id=60c0b549&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentEntryFeePaymentDialog.vue?vue&type=style&index=0&id=60c0b549&lang=scss&scoped=true&\"","import axios from '@/utils/request'\r\nimport { AxiosPromise } from 'axios'\r\nimport { BaseResponse, ResponseStatus } from '.'\r\nimport { MatchEntity, MatchGameListItemWithResultResponse } from './match'\r\nimport { TournamentEntity } from '@/api/tournament'\r\nimport { TournamentTeamEntity } from '@/api/tournamentTeam'\r\nimport { VenueEntity } from '@/api/venue'\r\n\r\nexport { BaseResponse, ResponseStatus }\r\n\r\nexport interface MemberSnippetEntity {\r\n memberId: string\r\n nickname: string\r\n avatar: string\r\n}\r\n\r\nexport interface MemberEntity {\r\n memberId: string\r\n contactEmail: string\r\n contactPhone: string\r\n nickname: string\r\n level: number\r\n firstName: string\r\n lastName: string\r\n displayName: string\r\n country: string\r\n birthDate?: number\r\n gender: string\r\n gameAccounts: MemberGameAccountEntity[]\r\n homeShop: VenueEntity\r\n homeShopTotalLoyaltyPoint: number\r\n avatar: string\r\n isNewMember?: boolean\r\n}\r\n\r\nexport interface EditProfileRequest {\r\n nickname?: string\r\n birthDate?: number\r\n country?: string\r\n avatar?: string\r\n}\r\n\r\nexport interface MemberGameAccountEntity {\r\n id: string\r\n game: string\r\n nickname: string\r\n isLocked: boolean\r\n}\r\n\r\nexport interface AddMemberGameAccountRequest {\r\n game: string\r\n nickname: string\r\n}\r\n\r\nexport interface UpdateMemberGameAccountRequest {\r\n nickname: string\r\n}\r\n\r\nexport class MemberAPI {\r\n public static API_PREFIX = '/member/v1'\r\n\r\n /**\r\n * Get member\r\n * @param memberId MemberId\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getMember(\r\n memberId: string = '@me'\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/members/${memberId}`)\r\n }\r\n\r\n /**\r\n * Edit member profile\r\n * @param request {EditProfileRequest} edit profile request\r\n * @returns {BaseResponse}\r\n */\r\n public static editProfile(\r\n request: EditProfileRequest\r\n ): AxiosPromise {\r\n return axios.post(`${this.API_PREFIX}/profile`, request)\r\n }\r\n\r\n /**\r\n * Add game account under a member (AddMemberGameAccount)\r\n * @param request {AddMemberGameAccountRequest}\r\n */\r\n public static addMemberGameAccount(\r\n request: AddMemberGameAccountRequest\r\n ): AxiosPromise {\r\n return axios.post(`${this.API_PREFIX}/game-accounts`, request)\r\n }\r\n\r\n /**\r\n * Update game account udner a member (UpdateMemberGameAccount)\r\n * @param gameAccountId {string} Game account id\r\n * @param request {UpdateMemberGameAccountRequest} add account request\r\n */\r\n public static updateMemberGameAccount(\r\n gameAccountId: string,\r\n request: UpdateMemberGameAccountRequest\r\n ): AxiosPromise {\r\n return axios.put(\r\n `${this.API_PREFIX}/game-accounts/${gameAccountId}`,\r\n request\r\n )\r\n }\r\n\r\n /**\r\n * Remove game account under a member (RemoveMemberGameAccount)\r\n * @param gameAccountId {string} Game account id\r\n * @returns {BaseResponse}\r\n */\r\n public static removeMemberGameAccount(\r\n gameAccountId: string\r\n ): AxiosPromise {\r\n return axios.delete(`${this.API_PREFIX}/game-accounts/${gameAccountId}`)\r\n }\r\n}\r\n","import { PaymentAPI } from '@/api/payment'\r\nimport { CancellationToken } from '@/utils/cancel'\r\n\r\nexport default function checkTransactionStatus(\r\n walletTransactionId: string,\r\n cancellationToken: CancellationToken\r\n) {\r\n return new Promise((resolve, reject) => {\r\n const POLL_INTERVAL = 3000\r\n const MAX_LOOP = 60 / (POLL_INTERVAL / 1000)\r\n\r\n let timer: NodeJS.Timer\r\n let loop = 0\r\n\r\n const checkTransactionStatus = async () => {\r\n loop++\r\n console.log('[PAYMENT] Checking TX status')\r\n try {\r\n const res = await PaymentAPI.getTransactionStatus(walletTransactionId)\r\n\r\n if (res.data.payload!.status === 'Success') {\r\n clearInterval(timer)\r\n console.log('[PAYMENT] TX status is success.')\r\n resolve(true)\r\n return\r\n } else if (res.data.payload!.status === 'Failure') {\r\n resolve(false)\r\n return\r\n }\r\n } catch (err) {\r\n console.error('[PAYMENT] Unable to get transaction status. Continuing')\r\n } finally {\r\n if (cancellationToken.cancelled) {\r\n clearInterval(timer)\r\n console.log('[PAYMENT] Check TX status cancelled.')\r\n reject(new Error('Cancelled'))\r\n } else if (loop >= MAX_LOOP) {\r\n console.log('[PAYMENT] Check TX status timed out.')\r\n reject(new Error('Timed out'))\r\n }\r\n }\r\n }\r\n\r\n timer = setInterval(checkTransactionStatus, 3000)\r\n checkTransactionStatus().then()\r\n })\r\n}\r\n","import axios from '@/utils/request'\r\nimport { AxiosPromise } from 'axios'\r\nimport { BaseResponse, ResponseStatus } from '.'\r\n\r\nexport { BaseResponse, ResponseStatus }\r\n\r\nexport interface CompleteDepositRequest {\r\n walletTransactionId: string\r\n}\r\n\r\nexport interface GetTransactionStatusResponse {\r\n status: 'Pending' | 'Success' | 'Failure'\r\n state: string\r\n relatedState: string\r\n}\r\n\r\nexport interface MemberPaymentTransactionPaginatedEntity {\r\n items: MemberPaymentTransaction[]\r\n hasMorePage: boolean\r\n pageCount: number\r\n itemCount: number\r\n}\r\n\r\nexport enum TransactionState {\r\n Created = 'Created',\r\n Pending = 'Pending',\r\n Approved = 'Approved',\r\n Completed = 'Completed',\r\n Cancelled = 'Cancelled',\r\n RefundPending = 'RefundPending',\r\n Refunded = 'Refunded'\r\n}\r\nexport interface MemberPaymentTransaction {\r\n transactionId: string\r\n amount: MoneyEntity\r\n remark: string | null\r\n state: TransactionState\r\n type: 'deposit' | 'withdraw' | 'entryfee'\r\n createTime: number\r\n}\r\n\r\nexport interface MoneyEntity {\r\n currency: string\r\n amount: string\r\n}\r\n\r\nconst API_PREFIX = '/payment/v1'\r\n\r\nexport class PaymentAPI {\r\n public static completeDeposit(\r\n walletTransactionId: string\r\n ): AxiosPromise {\r\n return axios.post(`${API_PREFIX}/deposit/complete`, {\r\n walletTransactionId\r\n })\r\n }\r\n\r\n public static cancelDeposit(\r\n walletTransactionId: string\r\n ): AxiosPromise {\r\n return axios.post(`${API_PREFIX}/deposit/cancel`, {\r\n walletTransactionId\r\n })\r\n }\r\n\r\n public static getTransactionStatus(\r\n walletTransactionId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${API_PREFIX}/transactions/${walletTransactionId}/status`)\r\n }\r\n\r\n public static getMemberPaymentTransaction(\r\n page: number = 1\r\n ): AxiosPromise> {\r\n return axios.get(`${API_PREFIX}/transactions`, {\r\n params: {\r\n page: page\r\n }\r\n })\r\n }\r\n}\r\n","import { VuexModule, Module, Action, Mutation } from 'vuex-module-decorators'\r\nimport { ILayoutState } from '@/store/types'\r\nimport store from '@/store'\r\nimport { DownloadProgress } from '@/utils/electron'\r\n\r\n@Module({ dynamic: true, store: store, namespaced: true, name: 'layout' })\r\nexport default class LayoutModule extends VuexModule implements ILayoutState {\r\n progressBarVisible: boolean = false\r\n teamTokenDialogVisible: boolean = false\r\n defaultTeamToken: string = ''\r\n searchDialogVisible: boolean = false\r\n updateDownloadProgress: DownloadProgress | null = null\r\n\r\n // LFG modal\r\n tournamentLFGModalVisible: boolean = false\r\n selectedLFGModalTournamentTeamId: string = ''\r\n\r\n // Global progress bar\r\n @Mutation\r\n SET_PROGRESS_BAR_VISIBLE(visible: boolean) {\r\n this.progressBarVisible = visible\r\n }\r\n\r\n @Action\r\n setProgressBarVisible(visible: boolean) {\r\n this.context.commit('SET_PROGRESS_BAR_VISIBLE', visible)\r\n }\r\n\r\n /* Team Token Dialog */\r\n @Mutation\r\n SET_TEAM_TOKEN_DIALOG_VISIBLE(state: {\r\n visible: boolean\r\n defaultTeamToken: string\r\n }) {\r\n this.teamTokenDialogVisible = state.visible\r\n this.defaultTeamToken = state.defaultTeamToken\r\n }\r\n\r\n @Action\r\n setTeamTokenDialogVisible(visible: boolean) {\r\n this.context.commit('SET_TEAM_TOKEN_DIALOG_VISIBLE', {\r\n visible,\r\n defaultTeamToken: ''\r\n })\r\n }\r\n\r\n @Action\r\n showTeamTokenDialogWithDefaultToken(defaultTeamToken: string) {\r\n this.context.commit('SET_TEAM_TOKEN_DIALOG_VISIBLE', {\r\n visible: true,\r\n defaultTeamToken\r\n })\r\n }\r\n\r\n get isTeamTokenDialogVisible() {\r\n return this.teamTokenDialogVisible\r\n }\r\n\r\n // Search dialog\r\n @Mutation\r\n SET_SEARCH_DIALOG_VISIBLE(visible: boolean) {\r\n this.searchDialogVisible = visible\r\n }\r\n\r\n @Action\r\n setSearchDialogVisible(visible: boolean) {\r\n this.context.commit('SET_SEARCH_DIALOG_VISIBLE', visible)\r\n }\r\n\r\n get isSearchDialogVisible() {\r\n return this.searchDialogVisible\r\n }\r\n\r\n // Update download progress\r\n @Mutation\r\n SET_UPDATE_DOWNLOAD_PROGRESS(progress: DownloadProgress | null) {\r\n this.updateDownloadProgress = progress\r\n }\r\n\r\n @Action\r\n setUpdateDownloadProgress(progress: DownloadProgress | null) {\r\n this.context.commit('SET_UPDATE_DOWNLOAD_PROGRESS', progress)\r\n }\r\n\r\n // LFG Modal\r\n @Mutation\r\n SET_LFG_MODAL(tournamentTeamId: string) {\r\n this.selectedLFGModalTournamentTeamId = tournamentTeamId\r\n this.tournamentLFGModalVisible = tournamentTeamId !== null\r\n }\r\n\r\n @Action\r\n showLFGModal(tournamentTeamId: string) {\r\n this.context.commit('SET_LFG_MODAL', tournamentTeamId)\r\n }\r\n\r\n @Action\r\n hideLFGModal() {\r\n this.context.commit('SET_LFG_MODAL', null)\r\n }\r\n}\r\n","import { VuexModule, Module, Action, Mutation } from 'vuex-module-decorators'\r\nimport store from '@/store'\r\nimport { GetLocalPlayerResponse } from '@main/integrations/lcu/api/player'\r\nimport { EndOfGameResult } from './types/EndOfGameResult'\r\nimport {\r\n AllLiveGameData,\r\n GameMode\r\n} from '@main/integrations/lcu/liveclient/types'\r\nimport { LeagueLobby } from '@/api/match'\r\n\r\n@Module({ dynamic: true, store: store, namespaced: true, name: 'integration' })\r\nexport default class IntegrationModule extends VuexModule {\r\n connectionStatus: boolean = false\r\n userInfo: GetLocalPlayerResponse | null = null\r\n // TODO: dynamically detect game based on result payload type\r\n userResult: EndOfGameResult | AllLiveGameData | null = null\r\n gameMode: GameMode | null = null\r\n isSoloGame: boolean = false\r\n isWinner: boolean | null = null\r\n matchGameId: string | null = null\r\n isJoiningCustomGame: boolean = false\r\n joinCustomGameFailed: boolean = false\r\n userResultEvidence: Blob[] = []\r\n\r\n @Mutation\r\n SET_CONNECTION_STATUS(status: boolean) {\r\n this.connectionStatus = status\r\n }\r\n\r\n @Mutation\r\n SET_USER_INFO(data: GetLocalPlayerResponse | null) {\r\n this.userInfo = data\r\n }\r\n\r\n @Action({ rawError: true })\r\n async updateConnectionState(\r\n connected: boolean,\r\n matchGameId: string | null = null\r\n ) {\r\n this.context.commit('SET_MATCH_GAME_ID', matchGameId)\r\n this.context.commit('SET_CONNECTION_STATUS', connected)\r\n }\r\n\r\n @Action({ rawError: true })\r\n async updateUserInfo(data: GetLocalPlayerResponse | null) {\r\n this.context.commit('SET_USER_INFO', data)\r\n }\r\n\r\n @Action({ rawError: true })\r\n async resetResult() {\r\n this.context.commit('SET_USER_RESULT', null)\r\n this.context.commit('SET_USER_EVIDENCE', [])\r\n this.context.commit('SET_MATCH_GAME_ID', '')\r\n this.context.commit('SET_IS_SOLO_GAME', false)\r\n this.context.commit('SET_IS_WINNER', null)\r\n this.context.commit('SET_GAMEMODE', null)\r\n }\r\n\r\n @Action({ rawError: true })\r\n async resetIntegration() {\r\n this.context.commit('SET_CONNECTION_STATUS', false)\r\n this.context.commit('SET_IS_SOLO_GAME', false)\r\n this.context.commit('SET_IS_WINNER', null)\r\n this.context.commit('SET_GAMEMODE', null)\r\n this.context.commit('SET_USER_INFO', null)\r\n this.context.commit('SET_USER_RESULT', null)\r\n this.context.commit('SET_USER_EVIDENCE', [])\r\n this.context.commit('SET_MATCH_GAME_ID', '')\r\n this.context.commit('SET_IS_JOINING_CUSTOM_GAME', false)\r\n this.context.commit('SET_JOIN_CUSTOM_GAME_FAILED', false)\r\n }\r\n\r\n @Mutation\r\n SET_USER_RESULT(payload: EndOfGameResult | null) {\r\n this.userResult = payload\r\n }\r\n\r\n @Mutation\r\n SET_IS_SOLO_GAME(isSoloGame: boolean) {\r\n this.isSoloGame = isSoloGame\r\n }\r\n\r\n @Mutation\r\n SET_IS_WINNER(isWinner: boolean) {\r\n this.isWinner = isWinner\r\n }\r\n\r\n @Mutation\r\n SET_GAMEMODE(gameMode: GameMode) {\r\n this.gameMode = gameMode\r\n }\r\n\r\n @Mutation\r\n SET_USER_EVIDENCE(evidence: Blob[] = []) {\r\n this.userResultEvidence = evidence\r\n }\r\n\r\n @Mutation\r\n SET_MATCH_GAME_ID(matchGameId: string) {\r\n this.matchGameId = matchGameId\r\n }\r\n\r\n @Mutation\r\n SET_IS_JOINING_CUSTOM_GAME(value: boolean) {\r\n this.isJoiningCustomGame = value\r\n }\r\n\r\n @Mutation\r\n SET_JOIN_CUSTOM_GAME_FAILED(value: boolean) {\r\n this.joinCustomGameFailed = value\r\n }\r\n\r\n @Action({ rawError: true })\r\n async joinCustomGame(args: {\r\n lobby: LeagueLobby\r\n team: 'one' | 'two' | 'spectator'\r\n }) {\r\n try {\r\n await window.ipcRenderer.invoke('lol:join-custom-game', {\r\n id: args.lobby.customGameId,\r\n password: args.lobby.password,\r\n asSpectator: false,\r\n team: args.team\r\n })\r\n this.context.commit('SET_JOIN_CUSTOM_GAME_FAILED', false)\r\n } catch (err) {\r\n this.context.commit('SET_JOIN_CUSTOM_GAME_FAILED', true)\r\n console.error('Join custom game failed', err)\r\n } finally {\r\n this.context.commit('SET_IS_JOINING_CUSTOM_GAME', false)\r\n }\r\n }\r\n\r\n @Action({ rawError: true })\r\n async setJoiningCustomGame(value: boolean) {\r\n this.context.commit('SET_IS_JOINING_CUSTOM_GAME', value)\r\n }\r\n\r\n @Action({ rawError: true })\r\n async setJoiningCustomGameFailed(value: boolean) {\r\n this.context.commit('SET_JOIN_CUSTOM_GAME_FAILED', value)\r\n }\r\n\r\n @Action({ rawError: true })\r\n async setResult(payload: {\r\n result: EndOfGameResult | AllLiveGameData\r\n gameMode: GameMode\r\n isWinner: boolean\r\n isSoloGame: boolean\r\n }) {\r\n console.log('[Integration Store] Received Result set.')\r\n this.context.commit('SET_IS_WINNER', payload.isWinner)\r\n this.context.commit('SET_IS_SOLO_GAME', payload.isSoloGame)\r\n this.context.commit('SET_GAMEMODE', payload.gameMode)\r\n this.context.commit('SET_USER_RESULT', payload.result)\r\n }\r\n\r\n @Action({ rawError: true })\r\n async setEvidenceBlobs(evidence: Blob[]) {\r\n console.log('[Integration Store] Received Evidence.')\r\n this.context.commit('SET_USER_EVIDENCE', evidence)\r\n }\r\n\r\n @Action({ rawError: true })\r\n async addEvidenceBlob(evidence: Blob) {\r\n console.log('[Integration Store] Received Evidence.')\r\n this.context.commit('SET_USER_EVIDENCE', [\r\n ...this.userResultEvidence,\r\n evidence\r\n ])\r\n }\r\n\r\n get integrationStatus() {\r\n return this.connectionStatus\r\n }\r\n\r\n @Action({ rawError: true })\r\n async matchEvidenceDataURL() {\r\n return new Promise((resolve, reject) => {\r\n var reader = new FileReader()\r\n if (!this.userResultEvidence) {\r\n reject(new Error('No user evidence'))\r\n return\r\n }\r\n\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(this.userResultEvidence[0])\r\n })\r\n }\r\n}\r\n","import store from '@/store'\r\nimport authStore from '@/modules/auth/auth.store'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport router from '@/router'\r\n\r\nexport default async function requestLogin(callback: Function) {\r\n const authModule = getModule(authStore, store)\r\n\r\n if (authModule.hasLoggedIn) {\r\n callback()\r\n return\r\n }\r\n\r\n try {\r\n await authModule.signIn()\r\n await authModule.updateLoginState()\r\n } catch (err) {\r\n console.error('Request login failed.', err)\r\n return\r\n }\r\n\r\n if (authModule.hasLoggedIn) {\r\n callback()\r\n }\r\n}\r\n","var map = {\n\t\"./cny2021/routes/index.ts\": \"db34\",\n\t\"./example_campaign/routes/index.ts\": \"58ed\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"b9fb\";","export interface TournamentTeamResponsePagination {\r\n items: TournamentTeamEntity[]\r\n hasMorePage: boolean\r\n}\r\n\r\nexport interface TournamentTeamEntity {\r\n tournamentId: string\r\n tournamentTeamId: string\r\n name: string\r\n logo: string\r\n state: TournamentTeamState\r\n registerTime: number\r\n players: TournamentPlayerEntity[]\r\n isOut: boolean\r\n outTime: number\r\n isTournamentCheckedIn: boolean\r\n tournamentCheckInTime: number | null\r\n isTournamentNotCheckedInUnregistered: boolean\r\n group: string | null\r\n}\r\n\r\nexport enum TournamentTeamState {\r\n PendingJoin = 'PendingJoin',\r\n PendingConfirmRoster = 'PendingConfirmRoster',\r\n Registered = 'Registered'\r\n}\r\n\r\nexport interface TournamentPlayerEntity {\r\n memberId: string\r\n nickname: string\r\n avatar: string\r\n role: TournamentTeamRole\r\n isStarter: boolean\r\n gameAccountNickname: string\r\n}\r\n\r\nexport enum TournamentTeamRole {\r\n Captain = 'Captain',\r\n Member = 'Member',\r\n RequestToJoin = 'RequestToJoin'\r\n}\r\n","export default {\r\n path: '',\r\n components: {\r\n default: () =>\r\n import(\r\n /* webpackChunkName: \"catalog-layout\" */ '@/modules/catalog/CatalogLayout.vue'\r\n ),\r\n overlay: () =>\r\n import(\r\n /* webpackChunkName: \"overlay-tournament-catalog\" */ '@/modules/tournament/views/OverlayTournamentCatalog'\r\n )\r\n },\r\n children: [\r\n {\r\n path: '/',\r\n name: 'Landing',\r\n meta: {\r\n defaultTab: 'featured'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"landing\" */ '@/modules/catalog/views/Landing'\r\n )\r\n },\r\n {\r\n path: 'active',\r\n name: 'ActiveTournamentCatalog',\r\n meta: {\r\n defaultTab: 'active'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"active-tournament-catalog\" */ '@/modules/catalog/views/ActiveTournamentCatalog'\r\n )\r\n },\r\n {\r\n path: 'past',\r\n name: 'PastTournamentCatalog',\r\n meta: {\r\n defaultTab: 'past'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"recent-tournament-catalog\" */ '@/modules/catalog/views/PastTournamentCatalog'\r\n )\r\n },\r\n {\r\n path: 'upcoming',\r\n name: 'UpcomingTournamentCatalog',\r\n meta: {\r\n defaultTab: 'upcoming'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"upcoming-tournament-catalog\" */ '@/modules/catalog/views/UpcomingTournamentCatalog'\r\n )\r\n },\r\n {\r\n path: 'top',\r\n name: 'TopTournamentCatalog',\r\n meta: {\r\n defaultTab: 'top'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"top-tournament-catalog\" */ '@/modules/catalog/views/TopTournamentCatalog'\r\n )\r\n }\r\n ]\r\n}\r\n","export default {\r\n path: 'tournament/:tournamentId',\r\n props: true,\r\n components: {\r\n default: () =>\r\n import(\r\n /* webpackChunkName: \"tournament-layout\" */ '@/modules/tournament/TournamentLayout.vue'\r\n ),\r\n overlay: () =>\r\n import(\r\n /* webpackChunkName: \"overlay-tournament-details\" */ '@/modules/tournament/views/OverlayTournamentDetails'\r\n )\r\n },\r\n children: [\r\n {\r\n path: '',\r\n name: 'TournamentDetails'\r\n },\r\n {\r\n path: 'overview',\r\n name: 'TournamentDetailsOverview',\r\n meta: {\r\n defaultTab: 'overview'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"tournament-details-overview\" */ '@/modules/tournament/components/TournamentDetailsOverview'\r\n )\r\n },\r\n {\r\n path: 'rule',\r\n name: 'TournamentDetailsRule',\r\n props: true,\r\n meta: {\r\n defaultTab: 'rule'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"tournament-details-rule\" */ '@/modules/tournament/components/TournamentDetailsRule'\r\n )\r\n },\r\n {\r\n path: 'bracket',\r\n name: 'TournamentDetailsBracket',\r\n props: true,\r\n meta: {\r\n defaultTab: 'bracket'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"tournament-details-bracket\" */ '@/modules/tournament/components/TournamentDetailsBracket'\r\n )\r\n },\r\n {\r\n path: 'teams',\r\n name: 'TournamentDetailsTeams',\r\n props: true,\r\n meta: {\r\n defaultTab: 'players'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"tournament-details-teams\" */ '@/modules/tournament/components/TournamentDetailsTeams'\r\n )\r\n },\r\n {\r\n path: 'lfg',\r\n name: 'TournamentDetailsLFG',\r\n props: true,\r\n meta: {\r\n defaultTab: 'players'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"tournament-details-lfg\" */ '@/modules/tournament/components/TournamentDetailsLFG'\r\n )\r\n }\r\n ]\r\n}\r\n","export default {\r\n path: 'instant',\r\n props: true,\r\n components: {\r\n default: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-layout\" */ '@/modules/instant/InstantMatchLayout.vue'\r\n ),\r\n overlay: () =>\r\n import(\r\n /* webpackChunkName: \"overlay-tournament-details\" */ '@/modules/tournament/views/OverlayTournamentCatalog'\r\n )\r\n },\r\n children: [\r\n {\r\n path: '',\r\n name: 'AutomatedTournament',\r\n redirect: {\r\n name: 'InstantMatchCatalog'\r\n }\r\n },\r\n {\r\n path: 'catalog',\r\n name: 'InstantMatchCatalog',\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-catalog\" */ '@/modules/instant/views/InstantMatchCatalog'\r\n )\r\n },\r\n {\r\n path: 'past',\r\n name: 'InstantMatchPastTournament',\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-catalog\" */ '@/modules/instant/views/InstantMatchPastTournament'\r\n )\r\n },\r\n {\r\n path: 'catalog/:gameCode/:region?',\r\n name: 'InstantMatchCatalogMobile',\r\n props: true,\r\n meta: {\r\n hasBackButton: true\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-catalog-mobile\" */ '@/modules/instant/views/InstantMatchCatalogMobile'\r\n )\r\n },\r\n {\r\n path: ':tournamentId/',\r\n props: true,\r\n name: 'InstantMatchDetails',\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-details-layout\" */ '@/modules/instant/InstantMatchDetailsLayout.vue'\r\n ),\r\n children: [\r\n {\r\n path: 'details',\r\n name: 'InstantMatchDetailsSummary',\r\n meta: {\r\n defaultTab: 'overview'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-details\" */ '@/modules/instant/views/InstantMatchDetails'\r\n )\r\n },\r\n {\r\n path: 'overview',\r\n name: 'InstantMatchDetailsOverview',\r\n meta: {\r\n defaultTab: 'overview'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-details-overview\" */ '@/modules/tournament/components/TournamentDetailsOverview'\r\n )\r\n },\r\n {\r\n path: 'rule',\r\n name: 'InstantMatchtDetailsRule',\r\n props: true,\r\n meta: {\r\n defaultTab: 'rule'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-details-rule\" */ '@/modules/tournament/components/TournamentDetailsRule'\r\n )\r\n },\r\n {\r\n path: 'bracket',\r\n name: 'InstantMatchDetailsBracket',\r\n props: true,\r\n meta: {\r\n defaultTab: 'bracket'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-details-bracket\" */ '@/modules/tournament/components/TournamentDetailsBracket'\r\n )\r\n },\r\n {\r\n path: 'teams',\r\n name: 'InstantMatchDetailsTeams',\r\n props: true,\r\n meta: {\r\n defaultTab: 'players'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-details-teams\" */ '@/modules/tournament/components/TournamentDetailsTeams'\r\n )\r\n },\r\n {\r\n path: 'lfg',\r\n name: 'InstantMatchDetailsLFG',\r\n props: true,\r\n meta: {\r\n defaultTab: 'players'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"instant-match-details-lfg\" */ '@/modules/tournament/components/TournamentDetailsLFG'\r\n )\r\n }\r\n ]\r\n }\r\n ]\r\n}\r\n","export default {\r\n path: 'match-games/:matchGameId',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"match-room-layout\" */ '@/modules/match/MatchLayout.vue'\r\n ),\r\n children: [\r\n {\r\n path: '',\r\n name: 'Match',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"match-room\" */ '@/modules/match/views/Match'\r\n )\r\n },\r\n {\r\n path: 'ffa',\r\n name: 'FFAMatch',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"match-room\" */ '@/modules/match/views/FFAMatch'\r\n )\r\n }\r\n ]\r\n}\r\n","export default [\r\n {\r\n path: 'member/verify/:token',\r\n name: 'MemberVerify',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"member-verify\" */ '@/modules/auth/views/MemberVerify'\r\n )\r\n },\r\n {\r\n path: 'auth',\r\n name: 'AuthenticationCallback',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"auth-callback\" */ '@/modules/auth/views/AuthenticationCallback'\r\n ),\r\n meta: {\r\n title: 'Authenticating'\r\n }\r\n }\r\n]\r\n","export default {\r\n path: 'homeshop/',\r\n props: true,\r\n component: () =>\r\n import(/* webpackChunkName: \"homeshop-layout\" */ '../HomeShopLayout.vue'),\r\n children: [\r\n {\r\n name: 'HomeShopMain',\r\n path: '',\r\n redirect: {\r\n name: 'MyHomeShop'\r\n }\r\n },\r\n {\r\n path: 'my-shop',\r\n name: 'MyHomeShop',\r\n props: true,\r\n meta: {\r\n defaultTab: 'homeshop-my'\r\n },\r\n component: () =>\r\n import(/* webpackChunkName: \"homeshop-my\" */ '../views/MyHomeShop')\r\n },\r\n {\r\n path: 'others',\r\n name: 'HomeShopOthers',\r\n props: true,\r\n meta: {\r\n defaultTab: 'homeshop-others'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"homeshop-other\" */ '../views/HomeShopOthers'\r\n )\r\n },\r\n {\r\n path: 'tournaments',\r\n name: 'HomeShopTournaments',\r\n props: true,\r\n meta: {\r\n defaultTab: 'homeshop-tournaments'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"homeshop-tournament\" */ '../views/HomeShopTournament'\r\n )\r\n },\r\n {\r\n path: 'players',\r\n name: 'MyHomeShopPlayer',\r\n props: true,\r\n meta: {\r\n defaultTab: 'homeshop-players'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"homeshop-player\" */ '../views/HomeShopPlayers'\r\n )\r\n }\r\n ]\r\n}\r\n","import homeShopRoutes from '../homeshop/routes'\r\nexport default {\r\n path: 'member/:memberId',\r\n props: true,\r\n components: {\r\n default: () =>\r\n import(/* webpackChunkName: \"member-layout\" */ '../MemberLayout.vue'),\r\n overlay: () =>\r\n import(\r\n /* webpackChunkName: \"overlay-member-profile\" */ '../views/OverlayMemberProfile'\r\n )\r\n },\r\n children: [\r\n {\r\n name: 'MemberHome',\r\n path: '',\r\n redirect: {\r\n name: 'MemberMatchHistory'\r\n }\r\n },\r\n {\r\n path: 'match-history',\r\n name: 'MemberMatchHistory',\r\n props: true,\r\n meta: {\r\n defaultTab: 'match-history'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"member-match-history\" */ '../views/MatchHistory'\r\n )\r\n },\r\n {\r\n path: 'tournament-history',\r\n name: 'MemberTournamentHistory',\r\n props: true,\r\n meta: {\r\n defaultTab: 'tournament-history'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"member-tournament-history\" */ '../views/TournamentHistory'\r\n )\r\n },\r\n homeShopRoutes\r\n ]\r\n}\r\n","export default {\r\n path: 'payment',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"payment-layout\" */ '@/modules/payment/PaymentLayout.vue'\r\n ),\r\n children: [\r\n {\r\n path: 'transactions',\r\n name: 'PaymentTransaction',\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"payment-transaction\" */ '@/modules/payment/views/Transactions'\r\n )\r\n }\r\n ]\r\n}\r\n","import tournamentCatalogRoutes from '../modules/catalog/routes'\r\nimport tournamentRoutes from '../modules/tournament/routes'\r\nimport instantMatchRoutes from '../modules/instant/routes'\r\nimport matchRoomRoutes from '../modules/match/routes'\r\nimport authRoutes from '../modules/auth/routes'\r\nimport memberRoutes from '../modules/member/routes'\r\nimport paymentRoutes from '../modules/payment/routes'\r\n\r\nexport default {\r\n path: '/',\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"app-layout\" */ '@/modules/shared/AppLayout.vue'\r\n ),\r\n children: [\r\n tournamentCatalogRoutes,\r\n tournamentRoutes,\r\n instantMatchRoutes,\r\n matchRoomRoutes,\r\n memberRoutes,\r\n paymentRoutes,\r\n ...authRoutes\r\n ]\r\n}\r\n\r\nexport const inviteRoute = {\r\n path: '/invite/:inviteToken',\r\n name: 'PublicInviteToken',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"invite\" */ '@/modules/shared/views/InviteToken'\r\n ),\r\n meta: {\r\n title: '接受隊伍邀請'\r\n }\r\n}\r\n\r\nexport const tournamentBracketRoute = {\r\n path: '/bracket/:tournamentId',\r\n name: 'TournamentBracket',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"tournament-bracket\" */ '@/modules/tournament/views/TournamentBracket'\r\n ),\r\n meta: {\r\n title: '賽程表'\r\n }\r\n}\r\n\r\nexport const tournamentFormRoutes = {\r\n path: '/tournament-form/:tournamentId',\r\n name: 'TournamentForm',\r\n props: true,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"tournament-form\" */ '@/modules/tournament/views/TournamentForm'\r\n ),\r\n meta: {\r\n title: 'Form Response'\r\n }\r\n}\r\n","export default {\r\n path: '/draft',\r\n components: {\r\n default: () =>\r\n import(\r\n /* webpackChunkName: \"draft-layout\" */ '@/modules/draft/DraftLayout.vue'\r\n )\r\n },\r\n children: [\r\n {\r\n path: 'wildrift/:draftSessionId/:teamNumber',\r\n name: 'DraftSessionWildRiftView',\r\n props: true,\r\n meta: {\r\n title: 'Wild Rift Ban/Pick'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"draft-session-wild-rift-view\" */ '@/modules/draft/views/DraftSessionWildRiftView'\r\n )\r\n },\r\n {\r\n path: 'lol/:draftSessionId/:teamNumber',\r\n name: 'DraftSessionLeagueView',\r\n props: true,\r\n meta: {\r\n title: 'League of Legends Ban/Pick'\r\n },\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"draft-session-league-view\" */ '@/modules/draft/views/DraftSessionLeagueView'\r\n )\r\n }\r\n ]\r\n}\r\n","interface ISettings {\r\n title: string // Overrides the default title\r\n}\r\n\r\n// You can customize below settings :)\r\nconst settings: ISettings = {\r\n title: 'Versus Arena'\r\n}\r\n\r\nexport default settings\r\n","// This is the loader for campaign modules\r\n// Dynamically import campaign related module\r\n\r\nconst campaignModuleNestedRoutes: any = []\r\nconst files = require.context(\r\n '@/modules/campaign',\r\n true,\r\n /\\/routes\\/index.ts$/i\r\n)\r\n\r\nfiles.keys().forEach(key => {\r\n let keyname = key.match(/\\.\\/([0-9A-Za-z_]+)\\/routes\\/index\\.ts/)![1]\r\n const nestedRoute = {\r\n path: keyname,\r\n props: true,\r\n component: () => import('./Layout.vue'),\r\n children: [files(key).default]\r\n }\r\n // console.log('Key Name:', keyname, nestedRoute)\r\n campaignModuleNestedRoutes.push(nestedRoute)\r\n})\r\nexport default {\r\n path: '/campaign/',\r\n redirect: {\r\n name: 'Landing'\r\n },\r\n // component: () =>\r\n // import(/* webpackChunkName: \"campaign-layout\" */ './Layout.vue'),\r\n children: campaignModuleNestedRoutes\r\n}\r\n","import Vue from 'vue'\r\nimport VueRouter, { Route } from 'vue-router'\r\nimport appRoutes, {\r\n inviteRoute,\r\n tournamentBracketRoute,\r\n tournamentFormRoutes\r\n} from './app'\r\nimport draftRoute from '@/modules/draft/routes'\r\nimport i18n from '@/lang'\r\nimport settings from '@/settings'\r\nimport { isElectron } from '@/utils/electron'\r\nimport { vuexOidcCreateRouterMiddleware } from 'vuex-oidc'\r\n\r\nimport campaignRoutes from '@/modules/campaign/routes'\r\nimport store from '@/store'\r\n\r\nVue.use(VueRouter)\r\n// Import all of the resource store files.\r\n\r\nconst routes = [\r\n appRoutes,\r\n inviteRoute,\r\n campaignRoutes,\r\n tournamentBracketRoute,\r\n tournamentFormRoutes,\r\n draftRoute,\r\n {\r\n path: '*',\r\n redirect: '/'\r\n }\r\n]\r\n\r\nconst router = new VueRouter({\r\n mode: isElectron() ? 'hash' : 'history',\r\n base: process.env.BASE_URL,\r\n routes\r\n})\r\n\r\nconst getPageTitle = (key: string) => {\r\n if (key) {\r\n const hasKey = i18n.te(`route.${key}`)\r\n if (hasKey) {\r\n const pageName = i18n.t(`route.${key}`)\r\n return `${pageName} - ${settings.title}`\r\n }\r\n return `${key} - ${settings.title}`\r\n }\r\n return `${settings.title}`\r\n}\r\n\r\nrouter.afterEach((to: Route) => {\r\n document.title = getPageTitle(to.meta.title)\r\n window.scrollTo(0, 0)\r\n})\r\n\r\n// router.beforeEach(vuexOidcCreateRouterMiddleware(store, 'oidc'))\r\n\r\nexport default router\r\n","import { IpcRendererEvent } from 'electron'\r\nimport store from '@/store'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport layoutStore from '@/modules/shared/layout.store'\r\nimport userStore from '@/modules/auth/auth.store'\r\nimport integrationStore from '@/modules/integration/integration.store'\r\nimport requestLogin from '@/utils/requestLogin'\r\nimport { quitAndInstall } from '@/utils/autoUpdate'\r\nimport { MatchAPI } from '@/api/match'\r\n\r\nexport interface DownloadProgress {\r\n bytesPerSecond: number\r\n percent: number\r\n total: number\r\n transferred: number\r\n}\r\n\r\nexport interface IntegrationCredentials {\r\n gamePort: number\r\n lcuPort: number\r\n token: string\r\n scheme: string\r\n}\r\n\r\nexport default function listenElectronIpcEvents() {\r\n // if the app is not running on electron, just do nothing\r\n if (!isElectron()) {\r\n return\r\n }\r\n\r\n window.ipcRenderer.on(\r\n 'redeem-team-token',\r\n async (event: IpcRendererEvent, teamToken: string) => {\r\n requestLogin(() => {\r\n const layoutModule = getModule(layoutStore, store)\r\n layoutModule.showTeamTokenDialogWithDefaultToken(teamToken)\r\n }).then()\r\n }\r\n )\r\n\r\n window.ipcRenderer.on(\r\n 'update-download-progress',\r\n (event: IpcRendererEvent, progress: DownloadProgress) => {\r\n const layoutModule = getModule(layoutStore, store)\r\n layoutModule.setUpdateDownloadProgress(progress)\r\n }\r\n )\r\n\r\n window.ipcRenderer.on(\r\n 'update-downloaded',\r\n async (event: IpcRendererEvent) => {\r\n const layoutModule = getModule(layoutStore, store)\r\n layoutModule.setUpdateDownloadProgress(null)\r\n await quitAndInstall()\r\n }\r\n )\r\n\r\n window.ipcRenderer.on(\r\n 'auth-response',\r\n async (event: IpcRendererEvent, data: { status: string }) => {\r\n const userModule = getModule(userStore, store)\r\n await userModule.updateLoginState()\r\n }\r\n )\r\n}\r\n\r\n/**\r\n * Return whether the instance is currently in electron\r\n * @returns {boolean} Is electron environment\r\n */\r\nexport function isElectron() {\r\n return !!window.ipcRenderer\r\n}\r\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./FreeForAllBracket.vue?vue&type=style&index=0&id=1c28b974&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./FreeForAllBracket.vue?vue&type=style&index=0&id=1c28b974&lang=scss&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./QuillDelta.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./QuillDelta.vue?vue&type=style&index=0&lang=scss&\"","import { Component } from 'vue-property-decorator'\r\n\r\n// Register the router hooks with their names\r\nComponent.registerHooks([\r\n 'beforeRouteEnter',\r\n 'beforeRouteLeave',\r\n 'beforeRouteUpdate'\r\n])\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.shouldRender)?_c('v-app',[_c('div',[(_vm.isElectron)?_c('iframe',{staticClass:\"hidden-analytics\",attrs:{\"src\":_vm.analyticsUrl}}):_vm._e(),_c('router-view'),_c('InstantMatchSnackBar'),_c('TournamentEntryFeePaymentDialog')],1)]):_vm._e(),_c('div',{staticClass:\"loading\",class:{ hidden: _vm.shouldRender || _vm.isEmbedded }},[_vm._m(0)])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"logos\"},[_c('img',{attrs:{\"src\":\"/img/logo.svg\"}})]),_c('div',{staticClass:\"text\"},[_vm._v(\"CONNECTING \"),_c('img',{attrs:{\"src\":\"/img/spinner.gif\"}})])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-snackbar',{staticClass:\"snackbar mb-lg-13 mt-lg-0 mt-15\",attrs:{\"timeout\":-1,\"value\":_vm.visible && _vm.shouldShow,\"top\":_vm.$vuetify.breakpoint.mobile}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-account-check\")]),_c('span',{staticClass:\"text-subtitle-1\",class:{ glitch: !_vm.$vuetify.breakpoint.mobile },attrs:{\"data-text\":_vm.text}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \")]),_c('v-btn',{staticClass:\"ml-2 mr-8\",attrs:{\"color\":\"white\",\"outlined\":\"\"},on:{\"click\":_vm.navigateToTournament}},[_vm._v(\" \"+_vm._s(_vm.$t('InstantMatchSnackBar.ViewTournament'))+\" \")]),_c('v-btn',{staticClass:\"close-button\",attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":_vm.close}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Watch } from 'vue-property-decorator'\r\nimport { getRealtimeConnection } from '@/utils/realtime'\r\nimport { HubConnection } from '@microsoft/signalr'\r\nimport { CancellationToken } from '@/utils/cancel'\r\nimport { TournamentAPI, TournamentState } from '@/api/tournament'\r\nimport userStore from '@/modules/auth/auth.store'\r\nimport { getModule } from 'vuex-module-decorators'\r\n\r\ninterface TournamentCheckInStartedResponse {\r\n tournamentId: string\r\n tournamentCheckInEndTime: number\r\n remainingMinutes: number\r\n}\r\n\r\n@Component\r\nexport default class InstantMatchSnackBar extends Vue {\r\n userModule = getModule(userStore, this.$store)\r\n longPollingTimer: NodeJS.Timer | undefined = undefined\r\n\r\n visible: boolean = false\r\n tournamentId: string = ''\r\n isWaitingForUserToCheckIn: boolean = false\r\n remainingMinutes: number = 0\r\n\r\n realtimeConnection!: HubConnection\r\n realtimeConnectionCancellationToken = new CancellationToken()\r\n\r\n @Watch('hasLoggedIn')\r\n async updateVisibility() {\r\n if (!this.hasLoggedIn) {\r\n return\r\n }\r\n\r\n try {\r\n const res = await TournamentAPI.getMemberJoinedAutomatedTournament()\r\n this.visible = res.data.payload!.isJoined\r\n this.tournamentId = res.data.payload!.tournamentId\r\n this.isWaitingForUserToCheckIn = res.data.payload!.isWaitingForUserToCheckIn\r\n this.remainingMinutes = res.data.payload!.tournamentCheckInRemainingMinutes\r\n } catch (err) {\r\n // ignore error\r\n console.error(err)\r\n this.visible = false\r\n }\r\n }\r\n\r\n async created() {\r\n this.realtimeConnection = await getRealtimeConnection(\r\n this.realtimeConnectionCancellationToken\r\n )\r\n this.realtimeConnection.on(\r\n 'tournamentCheckInStarted',\r\n this.onTournamentCheckInStarted\r\n )\r\n this.realtimeConnection.on(\r\n 'joinedAutomatedTournamentStateUpdated',\r\n this.onJoinedAutomatedTournamentStateUpdated\r\n )\r\n\r\n this.longPollingTimer = setInterval(\r\n this.updateVisibility,\r\n (50 + Math.floor(Math.random() * 30)) * 1000\r\n )\r\n\r\n await this.updateVisibility()\r\n }\r\n\r\n beforeDestroy() {\r\n this.realtimeConnectionCancellationToken.cancel()\r\n if (this.realtimeConnection) {\r\n this.realtimeConnection.off(\r\n 'tournamentCheckInStarted',\r\n this.onTournamentCheckInStarted\r\n )\r\n this.realtimeConnection.off(\r\n 'joinedAutomatedTournamentStateUpdated',\r\n this.onJoinedAutomatedTournamentStateUpdated\r\n )\r\n }\r\n if (this.longPollingTimer) {\r\n clearInterval(this.longPollingTimer)\r\n this.longPollingTimer = undefined\r\n }\r\n }\r\n\r\n onTournamentCheckInStarted(payload: TournamentCheckInStartedResponse) {\r\n this.visible = true\r\n this.tournamentId = payload.tournamentId\r\n this.remainingMinutes = payload.remainingMinutes\r\n this.isWaitingForUserToCheckIn = true\r\n }\r\n\r\n async onJoinedAutomatedTournamentStateUpdated() {\r\n await this.updateVisibility()\r\n }\r\n\r\n navigateToTournament() {\r\n this.$router.push({\r\n name: 'InstantMatchDetails',\r\n params: {\r\n tournamentId: this.tournamentId\r\n }\r\n })\r\n }\r\n\r\n close() {\r\n this.visible = false\r\n }\r\n\r\n get text() {\r\n if (this.isWaitingForUserToCheckIn) {\r\n return this.$t('InstantMatchSnackBar.TournamentCheckInNow', [\r\n this.remainingMinutes\r\n ])\r\n }\r\n\r\n return this.$t('InstantMatchSnackBar.JoinedCurrently')\r\n }\r\n\r\n get hasLoggedIn() {\r\n return this.userModule.hasLoggedIn\r\n }\r\n\r\n get shouldShow() {\r\n if (\r\n this.$route.path.startsWith('/instant/') &&\r\n this.$route.params &&\r\n this.$route.params.tournamentId === this.tournamentId\r\n ) {\r\n return false\r\n }\r\n\r\n return !this.$route.path.startsWith('/match-games/')\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./InstantMatchSnackBar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./InstantMatchSnackBar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./InstantMatchSnackBar.vue?vue&type=template&id=376db7eb&scoped=true&\"\nimport script from \"./InstantMatchSnackBar.vue?vue&type=script&lang=ts&\"\nexport * from \"./InstantMatchSnackBar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./InstantMatchSnackBar.vue?vue&type=style&index=0&id=376db7eb&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"376db7eb\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\ninstallComponents(component, {VBtn,VIcon,VSnackbar})\n","import InstantMatchSnackBar from './InstantMatchSnackBar.vue'\r\nexport default InstantMatchSnackBar\r\nexport { InstantMatchSnackBar }\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"value\":_vm.visible,\"persistent\":\"\",\"max-width\":\"46rem\"},on:{\"close\":_vm.onUserCancel}},[_c('v-card',[_c('v-window',{model:{value:(_vm.step),callback:function ($$v) {_vm.step=$$v},expression:\"step\"}},[_c('v-window-item',{attrs:{\"value\":0}},[_c('v-card-title',{staticClass:\"text-uppercase pt-10 pb-8\"},[_c('h3',{staticClass:\"dialog-title mx-auto text-uppercase\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.Payment'))+\" \")])]),_c('div',{staticClass:\"payment-banner primary\"},[_c('img',{attrs:{\"src\":\"/img/encrypted.svg\"}}),_c('div',{staticClass:\"ml-5 text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.EncryptedInfo'))+\" \")])]),_c('h3',{staticClass:\"application-fee pt-8 text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.ApplicationFee', [_vm.fee]))+\" \")]),_c('h3',{staticClass:\"refund-warning pt-8 px-10 text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.RefundInfo'))+\" \")]),_c('div',{staticClass:\"payment-methods py-12 text-center\"},[_c('div',{class:{ 'd-none': _vm.isLoading }},[_c('PayPalButton',{attrs:{\"currency\":_vm.currency,\"create-order\":_vm.createPayPalOrder,\"on-approve\":_vm.onApprove,\"on-complete\":_vm.onComplete},on:{\"error\":_vm.onError,\"cancel\":_vm.onCancel}})],1),(_vm.isLoading)?_c('div',{staticClass:\"pt-8 mb-12\"},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"size\":\"48\"}}),_c('div',{staticClass:\"mt-5\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.PleaseWait'))+\" \")])],1):_vm._e()]),_c('v-card-actions',{staticClass:\"py-8\"},[(!_vm.isLoading)?_c('div',{staticClass:\"mx-auto\"},[_c('AppButton',{attrs:{\"buttonType\":\"tournament\",\"theme\":\"blue\",\"label\":_vm.$t('TournamentEntryFeePaymentDialog.Cancel')},on:{\"click\":_vm.onUserCancel}})],1):_vm._e()])],1),_c('v-window-item',{attrs:{\"value\":1}},[_c('v-card-title',{staticClass:\"text-uppercase pt-10 pb-8\"},[_c('h3',{staticClass:\"dialog-title mx-auto text-uppercase\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.PaymentFailed'))+\" \")])]),_c('div',{staticClass:\"payment-failed py-12 text-center\"},[_c('div',{staticClass:\"text-h5\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.PaymentFailedText'))+\" \")]),_c('p',{staticClass:\"font-weight-thin\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.PaymentFailedSubtitle'))+\" \")])]),_c('v-card-actions',{staticClass:\"py-8\"},[(!_vm.isLoading)?_c('div',{staticClass:\"mx-auto\"},[_c('AppButton',{attrs:{\"buttonType\":\"tournament\",\"theme\":\"blue\",\"label\":_vm.$t('TournamentEntryFeePaymentDialog.Cancel')},on:{\"click\":_vm.onUserCancel}})],1):_vm._e(),(!_vm.isLoading)?_c('div',{staticClass:\"mx-auto\"},[_c('AppButton',{attrs:{\"buttonType\":\"tournament\",\"theme\":\"purple\",\"label\":_vm.$t('TournamentEntryFeePaymentDialog.TryAgain')},on:{\"click\":function($event){_vm.step = 0}}})],1):_vm._e()])],1),_c('v-window-item',{attrs:{\"value\":2}},[_c('v-card-title',{staticClass:\"text-uppercase pt-10 pb-8\"},[_c('h3',{staticClass:\"dialog-title mx-auto text-uppercase\"},[_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.RosterConfirmed'))+\" \")])]),_c('div',{staticClass:\"payment-completed py-12 text-center text-h5\"},[_c('div',{staticClass:\"payment-anim\"},[_c('div',{ref:\"checkLottieAnimation\",staticClass:\"lottie\"})]),_vm._v(\" \"+_vm._s(_vm.$t('TournamentEntryFeePaymentDialog.RosterConfirmedText'))+\" \")]),_c('v-card-actions',{staticClass:\"py-8\"},[(!_vm.isLoading)?_c('div',{staticClass:\"mx-auto\"},[_c('AppButton',{attrs:{\"buttonType\":\"tournament\",\"theme\":\"purple\",\"label\":_vm.$t('TournamentEntryFeePaymentDialog.Finish')},on:{\"click\":_vm.onUserComplete}})],1):_vm._e()])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":_vm.buttonId}}),(_vm.loading)?_c('div',{staticClass:\"paypal-btn-loading\"},[_c('v-progress-circular',{attrs:{\"size\":\"24\",\"indeterminate\":\"\",\"color\":\"black\"}})],1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop, Emit, Watch } from 'vue-property-decorator'\r\n\r\nexport interface PayPalButtonOrderFactory {\r\n (): Promise\r\n}\r\n\r\nexport interface AsyncPayPalButtonCallback {\r\n (orderId: string): Promise\r\n}\r\n\r\n@Component\r\nexport default class PayPalButton extends Vue {\r\n @Prop({ type: String, required: true })\r\n readonly currency!: string\r\n\r\n @Prop({ type: Function, required: true })\r\n readonly createOrder!: PayPalButtonOrderFactory\r\n\r\n @Prop({ type: Function })\r\n readonly onApprove!: AsyncPayPalButtonCallback\r\n\r\n @Prop({ type: Function })\r\n readonly onComplete!: AsyncPayPalButtonCallback\r\n\r\n @Emit('error')\r\n onError(err: Error) {\r\n return err\r\n }\r\n\r\n @Emit('cancel')\r\n onCancel() {\r\n return this\r\n }\r\n\r\n @Watch('$props', { deep: true, immediate: true })\r\n onPropsChanged() {\r\n this.init()\r\n }\r\n\r\n loading: boolean = true\r\n\r\n mounted() {\r\n this.init()\r\n }\r\n\r\n init() {\r\n if (this.currency.length !== 3) {\r\n return\r\n }\r\n\r\n this.loading = true\r\n\r\n const el = document.getElementById(this.buttonId)\r\n if (el) el.innerHTML = ''\r\n\r\n const scriptEl = document.createElement('script')\r\n const query = new URLSearchParams({\r\n 'client-id': process.env.VUE_APP_PAYPAL_CLIENT_ID!,\r\n currency: this.currency,\r\n debug: process.env.NODE_ENV !== 'production' ? 'true' : 'false',\r\n 'integration-date': '2021-10-20',\r\n intent: 'capture',\r\n 'disable-funding': 'card',\r\n locale: this.locale\r\n })\r\n\r\n scriptEl.src = 'https://www.paypal.com/sdk/js?' + query.toString()\r\n scriptEl.addEventListener('load', () => {\r\n this.loading = false\r\n\r\n window.paypal\r\n .Buttons({\r\n createOrder: this.createOrder,\r\n onApprove: async ({ orderID }: any) => {\r\n if (this.onApprove) {\r\n await this.onApprove(orderID as string)\r\n }\r\n if (this.onComplete) {\r\n await this.onComplete(orderID as string)\r\n }\r\n },\r\n onCancel: async () => {\r\n this.onCancel()\r\n },\r\n onError: (err: Error) => {\r\n console.error(err)\r\n this.onError(err)\r\n }\r\n })\r\n .render('#' + this.buttonId)\r\n\r\n scriptEl.remove()\r\n })\r\n scriptEl.addEventListener('error', () => {\r\n this.loading = false\r\n })\r\n document.body.appendChild(scriptEl)\r\n }\r\n\r\n get buttonId() {\r\n const { _uid } = this as any\r\n return `paypal-btn-${_uid}`\r\n }\r\n\r\n get locale() {\r\n if (this.$i18n.locale === 'tc') return 'zh_TW'\r\n return 'en_US'\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./PayPalButton.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./PayPalButton.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PayPalButton.vue?vue&type=template&id=3b0c726e&scoped=true&\"\nimport script from \"./PayPalButton.vue?vue&type=script&lang=ts&\"\nexport * from \"./PayPalButton.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./PayPalButton.vue?vue&type=style&index=0&id=3b0c726e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3b0c726e\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VProgressCircular})\n","import PayPalButton from './PayPalButton.vue'\r\n\r\nexport default PayPalButton\r\nexport { PayPalButton }\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Watch, Ref } from 'vue-property-decorator'\r\nimport paymentStore from '@/modules/payment/payment.store'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport AppButton from '@/modules/shared/components/AppButton/AppButton.vue'\r\nimport { PaymentAPI } from '@/api/payment'\r\nimport lottie from 'lottie-web'\r\nimport PayPalButton from '@/modules/payment/components/PayPalButton'\r\nimport { CancellationToken } from '@/utils/cancel'\r\nimport checkTransactionStatus from '@/utils/checkTransactionStatus'\r\n\r\n@Component({\r\n components: { AppButton, PayPalButton }\r\n})\r\nexport default class TournamentEntryFeePaymentDialog extends Vue {\r\n paymentModule = getModule(paymentStore, this.$store)\r\n\r\n isLoading: boolean = false\r\n step = 0\r\n currentWalletTransactionId: string = ''\r\n checkTransactionStatusCancellationToken: CancellationToken = new CancellationToken()\r\n\r\n @Ref('checkLottieAnimation')\r\n checkLottieAnimation!: HTMLDivElement\r\n\r\n @Watch('visible')\r\n onVisibilityChanged() {\r\n this.step = 0\r\n }\r\n\r\n mounted() {\r\n this.onVisibilityChanged()\r\n }\r\n\r\n beforeDestroy() {\r\n this.checkTransactionStatusCancellationToken.cancel()\r\n }\r\n\r\n async createOrder(paymentMethod: string) {\r\n console.log('[PAYMENT] Creating order.')\r\n this.isLoading = true\r\n\r\n const res = await this.paymentCallbacks!.createOrder(paymentMethod)\r\n console.log('[PAYMENT] Order created.', res)\r\n\r\n this.currentWalletTransactionId = res.walletTransactionId\r\n return res.orderId\r\n }\r\n\r\n async onApprove(orderId: string) {\r\n this.isLoading = true\r\n\r\n console.log(\r\n '[PAYMENT] User approved. Completing deposit.',\r\n this.currentWalletTransactionId\r\n )\r\n await PaymentAPI.completeDeposit(this.currentWalletTransactionId)\r\n\r\n if (this.paymentCallbacks!.onApprove) {\r\n await this.paymentCallbacks!.onApprove(orderId)\r\n }\r\n }\r\n\r\n async onComplete() {\r\n console.log('[PAYMENT] Completed. Checking status.')\r\n\r\n try {\r\n if (\r\n !(await checkTransactionStatus(\r\n this.currentWalletTransactionId,\r\n this.checkTransactionStatusCancellationToken\r\n ))\r\n )\r\n throw new Error('CheckTransactionStatus is failure')\r\n } catch (err) {\r\n console.log('[PAYMENT] Long polling failed!', err)\r\n this.onError(err)\r\n return\r\n }\r\n\r\n this.step = 2\r\n this.isLoading = false\r\n\r\n setTimeout(() => {\r\n const anim = lottie.loadAnimation({\r\n container: this.checkLottieAnimation,\r\n renderer: 'svg',\r\n loop: false,\r\n autoplay: true,\r\n animationData: require('@/assets/lottie/5785-checkmark.json')\r\n })\r\n anim.setSpeed(0.5)\r\n })\r\n\r\n console.log('[PAYMENT] Completed!')\r\n }\r\n\r\n onError(err: Error) {\r\n console.log('[PAYMENT] Error!', err)\r\n this.step = 1\r\n this.isLoading = false\r\n\r\n this.checkTransactionStatusCancellationToken.cancel()\r\n this.checkTransactionStatusCancellationToken = new CancellationToken()\r\n\r\n if (this.paymentCallbacks!.onError) {\r\n this.paymentCallbacks!.onError(err)\r\n }\r\n }\r\n\r\n async onCancel() {\r\n console.log('[PAYMENT] Cancelled.')\r\n await PaymentAPI.cancelDeposit(this.currentWalletTransactionId)\r\n\r\n this.isLoading = false\r\n }\r\n\r\n onUserCancel() {\r\n this.paymentModule.closeTournamentEntryFeePaymentDialog()\r\n\r\n if (this.paymentCallbacks!.onCancel) {\r\n this.paymentCallbacks!.onCancel(this.currentWalletTransactionId)\r\n }\r\n }\r\n\r\n onUserComplete() {\r\n this.paymentModule.closeTournamentEntryFeePaymentDialog()\r\n\r\n if (this.paymentCallbacks!.onComplete) {\r\n this.paymentCallbacks!.onComplete(this.currentWalletTransactionId)\r\n }\r\n }\r\n\r\n get visible() {\r\n return this.paymentModule.isTournamentEntryFeePaymentDialogVisible\r\n }\r\n\r\n get fee() {\r\n return this.paymentModule.tournamentEntryFee\r\n }\r\n\r\n get currency() {\r\n return this.fee.substring(0, 3)\r\n }\r\n\r\n get paymentCallbacks() {\r\n return this.paymentModule.paymentCallbacks\r\n }\r\n\r\n get createPayPalOrder() {\r\n return this.createOrder.bind(this, 'PayPal')\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentEntryFeePaymentDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentEntryFeePaymentDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TournamentEntryFeePaymentDialog.vue?vue&type=template&id=60c0b549&scoped=true&\"\nimport script from \"./TournamentEntryFeePaymentDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./TournamentEntryFeePaymentDialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./TournamentEntryFeePaymentDialog.vue?vue&type=style&index=0&id=60c0b549&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60c0b549\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VWindow } from 'vuetify/lib/components/VWindow';\nimport { VWindowItem } from 'vuetify/lib/components/VWindow';\ninstallComponents(component, {VCard,VCardActions,VCardTitle,VDialog,VProgressCircular,VWindow,VWindowItem})\n","import TournamentEntryFeePaymentDialog from './TournamentEntryFeePaymentDialog.vue'\r\n\r\nexport default TournamentEntryFeePaymentDialog\r\nexport { TournamentEntryFeePaymentDialog }\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Watch } from 'vue-property-decorator'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport user from '@/modules/auth/auth.store'\r\nimport venue from '@/modules/venue/venue.store'\r\nimport shared from '@/modules/shared/shared.store'\r\nimport { ConfigAPI, ResponseStatus } from './api/config'\r\nimport ServerError from '@/utils/server_error'\r\nimport { isElectron } from './utils/electron'\r\nimport { getGameTypes } from '@/utils/gameType'\r\nimport InstantMatchSnackBar from '@/modules/instant/components/InstantMatchSnackBar'\r\nimport TournamentEntryFeePaymentDialog from '@/modules/payment/components/TournamentEntryFeePaymentDialog'\r\n\r\n@Component({\r\n components: { TournamentEntryFeePaymentDialog, InstantMatchSnackBar }\r\n})\r\nexport default class App extends Vue {\r\n userModule = getModule(user, this.$store)\r\n venueModule = getModule(venue, this.$store)\r\n sharedModule = getModule(shared, this.$store)\r\n\r\n authTimeout: boolean = false\r\n\r\n async created() {\r\n if (isElectron()) {\r\n if (!(await this.userModule.updateLoginState())) {\r\n this.$toast.error('Your session has expired. Please relogin.')\r\n }\r\n document.body.classList.add('electron')\r\n } else {\r\n // Prompt sign-up dialog if auto-login\r\n const urlParams = new URLSearchParams(window.location.search)\r\n if (urlParams.get('auto-login') === '1') {\r\n await this.userModule.signIn()\r\n return\r\n }\r\n\r\n // Restoring user session if available.\r\n try {\r\n this.userModule.authenticateOidcSilent().then()\r\n } catch {}\r\n\r\n setTimeout(() => {\r\n this.authTimeout = true\r\n console.log('Auth timed out.')\r\n }, 500)\r\n }\r\n\r\n this.getApplicationConfigs().then()\r\n this.sharedModule.updateSuggestedRegion().then()\r\n }\r\n\r\n get accessToken() {\r\n return this.userModule.oidcAccessToken\r\n }\r\n\r\n get authState() {\r\n return (\r\n this.accessToken ||\r\n this.userModule.oidcAuthenticationIsChecked ||\r\n this.authTimeout\r\n )\r\n }\r\n\r\n @Watch('accessToken')\r\n async onAccessTokenChanged(accessToken: string) {\r\n await this.userModule.setAuthToken(accessToken)\r\n await this.userModule.updateLoginState()\r\n await this.sharedModule.updateSuggestedRegion()\r\n }\r\n\r\n @Watch('authState')\r\n async onAuthStateChanged() {\r\n await this.userModule.updateLoginState()\r\n }\r\n\r\n async getApplicationConfigs() {\r\n try {\r\n const response = await ConfigAPI.getSettings()\r\n let payload = response.data.payload\r\n if (response.data.status === ResponseStatus.Ok && payload) {\r\n // Avatars\r\n const memberAvatars = payload.avatars\r\n this.sharedModule.setApplicationSupportedAvatars(memberAvatars)\r\n\r\n // Games\r\n const supportedGames = payload.games\r\n const gameTypes = getGameTypes()\r\n this.sharedModule.setApplicationSupportedGames(supportedGames)\r\n\r\n // Regions\r\n this.sharedModule.setApplicationRegions(payload.regions)\r\n\r\n // Venue\r\n if (!payload.applicationVenue) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log(\r\n '[DEBUG] Localhost is skipped from IP validation and the IP address does not belong to any venues. Please check venue IP configuration if you want to support application venue e.g. set home shop'\r\n )\r\n }\r\n return\r\n }\r\n const venue = payload.applicationVenue\r\n this.venueModule.setApplicationVenue(venue)\r\n }\r\n } catch (err) {\r\n if (err instanceof ServerError) {\r\n this.$toast.error(err.getMessage())\r\n }\r\n console.error(err)\r\n }\r\n }\r\n\r\n get analyticsUrl() {\r\n let routeName = this.$route.name\r\n\r\n if (!routeName) {\r\n routeName = this.$route.fullPath\r\n }\r\n\r\n return `${process.env.VUE_APP_ANALYTICS_URL}?name=${encodeURIComponent(\r\n routeName.toString()\r\n )}¶ms=${JSON.stringify(this.$route.params)}`\r\n }\r\n\r\n get isElectron() {\r\n return isElectron()\r\n }\r\n\r\n get shouldRender() {\r\n return this.sharedModule.shouldRender\r\n }\r\n\r\n get isEmbedded() {\r\n const urlParams = new URLSearchParams(window.location.search)\r\n return urlParams.get('embedded') === '1'\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=752fc9f0&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=752fc9f0&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"752fc9f0\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\ninstallComponents(component, {VApp})\n","import 'material-design-icons-iconfont/dist/material-design-icons.css'\r\nimport Vue from 'vue'\r\nimport Vuetify, {\r\n VAutocomplete,\r\n VAlert,\r\n VSnackbar,\r\n VBtn,\r\n VIcon,\r\n VRow,\r\n VCol,\r\n VCombobox,\r\n VTextField,\r\n VTooltip,\r\n VCheckbox,\r\n VTextarea,\r\n VSelect,\r\n VFileInput,\r\n VSwitch\r\n} from 'vuetify/lib'\r\n\r\nimport {\r\n Ripple,\r\n Intersect,\r\n Touch,\r\n Resize,\r\n ClickOutside\r\n} from 'vuetify/lib/directives'\r\n\r\nVue.use(Vuetify, {\r\n components: {\r\n VAutocomplete,\r\n VAlert,\r\n VSnackbar,\r\n VBtn,\r\n VIcon,\r\n VRow,\r\n VCol,\r\n VCombobox,\r\n VTextField,\r\n VTextarea,\r\n VTooltip,\r\n VCheckbox,\r\n VFileInput,\r\n VSelect,\r\n VSwitch\r\n },\r\n directives: {\r\n Ripple,\r\n Intersect,\r\n Touch,\r\n Resize,\r\n ClickOutside\r\n }\r\n})\r\n\r\nexport default new Vuetify({\r\n theme: {\r\n dark: true,\r\n themes: {\r\n dark: {\r\n primary: '#673ab7',\r\n secondary: '#125B9B',\r\n accent: '#ffc107',\r\n error: '#f44336',\r\n warning: '#ff9800',\r\n info: '#9c27b0',\r\n success: '#4caf50'\r\n }\r\n },\r\n options: {\r\n customProperties: true\r\n }\r\n },\r\n\r\n icons: {\r\n iconfont: 'mdi'\r\n }\r\n})\r\n","import Vue from 'vue'\r\nimport VueMoment from 'vue-moment'\r\nimport moment from 'moment'\r\nimport { getUserLocale } from '@/lang'\r\n\r\nlet lang = getUserLocale()\r\nif (lang === 'zh') {\r\n lang = 'zh-tw'\r\n}\r\n\r\nmoment.locale(lang)\r\n\r\nVue.use(VueMoment, {\r\n moment\r\n})\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"bracket-drag-hints\"},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-hand-right\")]),_c('span',[_vm._v(_vm._s(_vm.$t('TournamentBracket.DragToMoveAroundHints')))])],1),_c('div',{directives:[{name:\"dragscroll\",rawName:\"v-dragscroll\",value:(!_vm.disableDragScroll),expression:\"!disableDragScroll\"}],staticClass:\"bracket-container\"},[_c('div',{staticClass:\"bracket grabbable\",attrs:{\"set\":(_vm.roomIndex = 1)}},_vm._l((_vm.rounds),function(roundMatch,rIndex){return _c('div',{key:(\"round-\" + rIndex),staticClass:\"round\"},[_vm._l((roundMatch.filter(function (rm) { return !rm.isAdditional; })),function(match,mIndex){return _c('div',{key:(\"match-\" + mIndex),staticClass:\"match\"},[_c('div',{staticClass:\"teams\"},[_c('div',{staticClass:\"match-header\"},[_vm._t(\"header\",null,{\"match\":match,\"round\":rIndex + 1,\"validTeams\":match.teams.length === _vm.opponentNum})],2),_vm._l((_vm.sortTeams(match.teams)),function(team,tIndex){return _c('BracketTeam',{key:(\"team-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"bracket-team-name\":team.name,\"empty\":!team,\"score\":_vm.getTeamTotalScore(match, team),\"result\":_vm.getTeamMatchBracketScoreResult(match, team),\"hovered\":_vm.hoverTarget === team.tournamentTeamId},nativeOn:{\"mouseover\":function($event){return _vm.hoverTeam(team.tournamentTeamId)},\"mouseleave\":function($event){return _vm.hoverTeam($event)},\"click\":function($event){return _vm.$emit('selected', { rIndex: rIndex, mIndex: mIndex, tIndex: tIndex, match: match, team: team })}}})}),_vm._l((_vm.getEmptyTournamentTeamFiller(match.teams)),function(tIndex){return _c('BracketTeam',{key:(\"team-empty-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"empty\":true,\"score\":0,\"winner\":false}})}),_c('div',{staticClass:\"match-footer\"},[_vm._t(\"footer\",[_vm._v(_vm._s(_vm.roomIndex))],{\"match\":match,\"round\":rIndex + 1,\"index\":_vm.roomIndex++,\"validTeams\":match.teams.length === _vm.opponentNum})],2)],2)])}),_c('div',{staticClass:\"round-header\"},[_c('span',[_vm._v(_vm._s(_vm.getRoundOf(roundMatch)))])])],2)}),0),(_vm.hasAdditionalMatches)?[_c('div',{staticClass:\"additional-match-title\"},[_vm._v(\" \"+_vm._s(_vm.$t('Bracket.AdditionalMatches'))+\" \")]),_c('div',{staticClass:\"bracket additional-bracket grabbable\",attrs:{\"set\":(_vm.roomIndex = 1)}},_vm._l((_vm.rounds),function(roundMatch,rIndex){return _c('div',{key:(\"additional-bracket-round-\" + rIndex),staticClass:\"round\"},_vm._l((roundMatch\n .filter(function (rm) { return rm.isAdditional; })\n .sort(function (a, b) { return a.identifier.localeCompare(b.identifier); })),function(match,mIndex){return _c('div',{key:(\"additional-match-\" + mIndex),staticClass:\"match additional-match\"},[_c('div',{staticClass:\"teams\"},[_c('div',{staticClass:\"match-header\"},[_vm._t(\"header\",null,{\"match\":match,\"round\":rIndex + 1,\"validTeams\":match.teams.length === _vm.opponentNum})],2),_vm._l((_vm.sortTeams(match.teams)),function(team,tIndex){return _c('BracketTeam',{key:(\"team-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"bracket-team-name\":team.name,\"empty\":!team,\"score\":_vm.getTeamTotalScore(match, team),\"result\":_vm.getTeamMatchBracketScoreResult(match, team),\"hovered\":_vm.hoverTarget === team.tournamentTeamId},nativeOn:{\"mouseover\":function($event){return _vm.hoverTeam(team.tournamentTeamId)},\"mouseleave\":function($event){return _vm.hoverTeam($event)},\"click\":function($event){return _vm.$emit('selected', { rIndex: rIndex, mIndex: mIndex, tIndex: tIndex, match: match, team: team })}}})}),_vm._l((_vm.getEmptyTournamentTeamFiller(match.teams)),function(tIndex){return _c('BracketTeam',{key:(\"team-empty-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"empty\":true,\"score\":0,\"winner\":false}})}),_c('div',{staticClass:\"match-footer\"},[_vm._t(\"footer\",[_vm._v(_vm._s(_vm.roomIndex))],{\"match\":match,\"round\":rIndex + 1,\"index\":_vm.roomIndex++,\"validTeams\":match.teams.length === _vm.opponentNum})],2)],2)])}),0)}),0)]:_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"tournament-team\",class:{ empty: _vm.empty, hovered: _vm.hovered }},[(!_vm.empty)?[_c('v-avatar',{staticClass:\"ml-1\",attrs:{\"color\":\"secondary\",\"size\":\"18\"},domProps:{\"textContent\":_vm._s(_vm.initial)}}),_c('div',{staticClass:\"content px-1\",attrs:{\"title\":_vm.BracketTeamName},domProps:{\"textContent\":_vm._s(_vm.BracketTeamName)}})]:_vm._e(),_c('v-spacer'),_c('div',{staticClass:\"content score\",class:{ active: _vm.isWinner && !_vm.empty }},[(!_vm.empty)?_c('span',{domProps:{\"textContent\":_vm._s(_vm.displayScoreText)}}):_vm._e()])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator'\r\nimport { BracketScoreResult } from '@/api/stage'\r\n\r\n@Component({\r\n name: 'BracketTeam'\r\n})\r\nexport default class BracketTeam extends Vue {\r\n @Prop({ type: Boolean, default: false }) readonly empty!: boolean\r\n @Prop({ type: String, default: '' }) readonly BracketTeamName!: string\r\n @Prop({ type: Number, default: -1 }) readonly score!: number\r\n @Prop({ type: String, default: BracketScoreResult.None })\r\n readonly result!: BracketScoreResult\r\n @Prop({ type: Boolean, default: false }) readonly hovered!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly alwaysDisplayScore!: boolean\r\n\r\n get initial() {\r\n return this.BracketTeamName.substr(0, 1).toUpperCase()\r\n }\r\n\r\n get displayScoreText() {\r\n if (\r\n this.alwaysDisplayScore &&\r\n [\r\n BracketScoreResult.Win,\r\n BracketScoreResult.Lose,\r\n BracketScoreResult.Draw\r\n ].includes(this.result)\r\n ) {\r\n return this.score\r\n }\r\n\r\n if (\r\n (this.result === BracketScoreResult.Win && this.score > 0) ||\r\n this.result === BracketScoreResult.Lose\r\n ) {\r\n return this.score\r\n }\r\n\r\n return this.$t(`BracketScoreResult.${this.result.toString()}`)\r\n }\r\n\r\n get isWinner() {\r\n return this.result === BracketScoreResult.Win\r\n }\r\n}\r\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./BracketTeam.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./BracketTeam.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./BracketTeam.vue?vue&type=template&id=49b819b2&scoped=true&\"\nimport script from \"./BracketTeam.vue?vue&type=script&lang=ts&\"\nexport * from \"./BracketTeam.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./BracketTeam.vue?vue&type=style&index=0&id=49b819b2&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49b819b2\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VAvatar,VSpacer})\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator'\r\nimport BracketTeam from './components/BracketTeam.vue'\r\nimport { dragscroll } from 'vue-dragscroll'\r\nimport {\r\n BracketAdjacencyMatrixEntity,\r\n BracketMatchAdjacencyMatrixEntity,\r\n BracketMatrix,\r\n BracketScoreResult,\r\n TournamentTeamListItemEntity\r\n} from '@/api/stage'\r\n\r\n@Component({\r\n components: {\r\n BracketTeam\r\n },\r\n directives: {\r\n dragscroll\r\n }\r\n})\r\nexport default class Bracket extends Vue {\r\n @Prop({ type: Number, default: 2 }) opponentNum!: number\r\n\r\n @Prop({ type: Object, required: true })\r\n readonly bracket!: BracketAdjacencyMatrixEntity\r\n\r\n @Prop({ type: Boolean, default: false })\r\n readonly disableDragScroll!: boolean\r\n\r\n hoverTarget: string | null = null\r\n rounds: BracketMatchAdjacencyMatrixEntity[][] | null = null\r\n hasAdditionalMatches: boolean = false\r\n\r\n teams: string[] = []\r\n\r\n hoverTeam(teamId: string | null = null) {\r\n this.hoverTarget = typeof teamId === 'string' ? teamId : null\r\n }\r\n\r\n /* Hooks */\r\n created() {\r\n this.initialize()\r\n }\r\n\r\n initialize() {\r\n const bracketMatrix = new BracketMatrix(this.bracket)\r\n const structure = bracketMatrix.toBracketTreeLevelOrdered()\r\n if (!structure) this.rounds = null\r\n this.rounds = structure\r\n\r\n // generate identifier if necessary\r\n if (\r\n this.rounds &&\r\n this.rounds.flat().filter(m => !!m.identifier && !m.isAdditional)\r\n .length <= 0\r\n ) {\r\n let num = 1\r\n for (const round of this.rounds) {\r\n for (const match of round.filter(m => !m.isAdditional)) {\r\n match.identifier = `G${this.bracket.groupNumber}-M${num}`\r\n num++\r\n }\r\n }\r\n\r\n num = 1\r\n for (const round of this.rounds) {\r\n for (const match of round.filter(m => m.isAdditional)) {\r\n this.hasAdditionalMatches = true\r\n\r\n if (!match.identifier) {\r\n match.identifier = `G1-AM-${num}`\r\n }\r\n num++\r\n }\r\n }\r\n }\r\n\r\n // check if there are any additional matches\r\n if (structure) {\r\n this.hasAdditionalMatches = structure\r\n .flat()\r\n .some(match => match.isAdditional)\r\n }\r\n }\r\n\r\n @Watch('bracket', { immediate: true, deep: true })\r\n onBracketStructureChanged() {\r\n this.initialize()\r\n }\r\n\r\n getTeamScore(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n tournamentTeamId: string\r\n ) {\r\n return match.scores.find(\r\n score => score.tournamentTeamId === tournamentTeamId\r\n )!\r\n }\r\n\r\n getTeamTotalScore(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n team: TournamentTeamListItemEntity\r\n ) {\r\n // const useWinCount =\r\n // match.scores.map(score => score.winCount).reduce((a, b) => a + b, 0) > 1\r\n const score = this.getTeamScore(match, team.tournamentTeamId)\r\n if (!score) return 0\r\n return score.totalScore\r\n }\r\n\r\n getEmptyTournamentTeamFiller(teams: TournamentTeamListItemEntity[]) {\r\n if (teams.length <= 0) return this.opponentNum\r\n\r\n return teams.length % this.opponentNum\r\n }\r\n\r\n getTeamMatchBracketScoreResult(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n team: TournamentTeamListItemEntity\r\n ) {\r\n const matchIndex = this.bracket.matches.indexOf(match)\r\n\r\n if (\r\n matchIndex !== -1 &&\r\n match.teams.length === 1 &&\r\n !this.bracket.edges.find(edge => edge[1] === matchIndex)\r\n ) {\r\n return BracketScoreResult.Win\r\n }\r\n\r\n const score = this.getTeamScore(match, team.tournamentTeamId)\r\n if (!score) return BracketScoreResult.None\r\n return score.result\r\n }\r\n\r\n sortTeams(teams: TournamentTeamListItemEntity[]) {\r\n return teams\r\n .slice()\r\n .sort(\r\n (a, b) =>\r\n this.teams.indexOf(a.tournamentTeamId) -\r\n this.teams.indexOf(b.tournamentTeamId)\r\n )\r\n }\r\n\r\n getRoundOf(roundMatch: BracketMatchAdjacencyMatrixEntity[]) {\r\n if (!roundMatch || !roundMatch.length || !roundMatch[0]) return ''\r\n const roundOf = roundMatch[0].roundOf\r\n\r\n const roundSetting = this.bracket.roundSettings.find(\r\n rs => rs.roundOf === roundOf\r\n )\r\n if (roundSetting && roundSetting.name) {\r\n return roundSetting.name\r\n }\r\n\r\n switch (roundOf) {\r\n case 2:\r\n return this.$t('Bracket.Finals')\r\n default:\r\n return this.$t('Bracket.RoundOf', { roundOf: roundOf })\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./Bracket.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./Bracket.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Bracket.vue?vue&type=template&id=55a53b08&scoped=true&\"\nimport script from \"./Bracket.vue?vue&type=script&lang=ts&\"\nexport * from \"./Bracket.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Bracket.vue?vue&type=style&index=0&id=55a53b08&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"55a53b08\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"dragscroll\",rawName:\"v-dragscroll\",value:(!_vm.disableDragScroll),expression:\"!disableDragScroll\"}]},[_vm._t(\"score-table\",[_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.teams,\"disable-pagination\":\"\",\"hide-default-footer\":\"\"}})],{\"teams\":_vm.teams,\"rounds\":_vm.rounds}),_c('v-container',{staticClass:\"mt-5 bracket-container\",attrs:{\"set\":(_vm.roomIndex = 1)}},[_c('v-row',_vm._l((_vm.rounds),function(round,rIndex){return _c('v-col',{key:(\"round-\" + rIndex),attrs:{\"cols\":\"12\",\"sm\":\"6\",\"md\":\"4\",\"xl\":\"3\"}},[_c('v-simple-table',{staticClass:\"elevation-1\"},[_c('thead',{staticClass:\"grey text--white\"},[_c('tr',[_c('th',{staticClass:\"font-weight-black text-center\",attrs:{\"colspan\":\"2\"}},[(!round.round)?_c('span',[_vm._v(\" \"+_vm._s(_vm.$t('Bracket.AdditionalMatches'))+\" \")]):_c('span',[_vm._v(\" Round \"+_vm._s(round.round)+\" \")])])])])]),_vm._l((round.matches.filter(\n function (match) { return match.teams.length >= 1; }\n )),function(match,mIndex){return [(match.teams.length > 1)?_c('div',{key:(\"round-\" + rIndex + \"-\" + mIndex),staticClass:\"match\"},[_c('div',{staticClass:\"teams\"},[_c('div',{staticClass:\"match-header\"},[_vm._t(\"header\",null,{\"match\":match,\"round\":rIndex + 1,\"validTeams\":match.teams.length === _vm.opponentNum})],2),_vm._l((match.teams),function(team,tIndex){return _c('BracketTeam',{key:(\"team-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"bracket-team-name\":team.name,\"empty\":!team,\"score\":_vm.getTeamTotalScore(match, team),\"result\":_vm.getTeamMatchBracketScoreResult(match, team),\"hovered\":_vm.hoverTarget === team.tournamentTeamId},nativeOn:{\"mouseover\":function($event){return _vm.hoverTeam(team.tournamentTeamId)},\"mouseleave\":function($event){return _vm.hoverTeam($event)},\"click\":function($event){return _vm.$emit('selected', { rIndex: rIndex, mIndex: mIndex, tIndex: tIndex, match: match, team: team })}}})})],2),_c('div',{staticClass:\"match-footer\"},[_vm._t(\"footer\",[_vm._v(_vm._s(_vm.roomIndex))],{\"match\":match,\"round\":rIndex + 1,\"index\":_vm.roomIndex++,\"validTeams\":match.teams.length === _vm.opponentNum})],2)]):_vm._e()]})],2)}),1)],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator'\r\nimport BracketTeam from './components/BracketTeam.vue'\r\nimport {\r\n BracketAdjacencyMatrixEntity,\r\n BracketMatchAdjacencyMatrixEntity,\r\n BracketScoreResult,\r\n TournamentTeamListItemEntity\r\n} from '@/api/stage'\r\nimport { dragscroll } from 'vue-dragscroll'\r\n\r\ninterface RoundRobinTeam {\r\n tournamentTeamId: string\r\n name: string\r\n win: number\r\n draw: number\r\n lose: number\r\n}\r\n\r\ninterface RoundRobinMatchRound {\r\n round: number\r\n matches: BracketMatchAdjacencyMatrixEntity[]\r\n}\r\n\r\n@Component({\r\n components: {\r\n BracketTeam\r\n },\r\n directives: {\r\n dragscroll\r\n }\r\n})\r\nexport default class RoundRobinSchedule extends Vue {\r\n @Prop({ type: Object, required: true })\r\n readonly bracket!: BracketAdjacencyMatrixEntity\r\n\r\n @Prop({ type: Number, default: 2 }) opponentNum!: number\r\n\r\n @Prop({ type: Boolean, default: false })\r\n readonly disableDragScroll!: boolean\r\n\r\n hoverTarget: string | null = null\r\n\r\n hoverTeam(teamId: string | null = null) {\r\n this.hoverTarget = typeof teamId === 'string' ? teamId : null\r\n }\r\n\r\n headers = [\r\n {\r\n text: 'Team',\r\n value: 'name'\r\n },\r\n {\r\n text: 'Win',\r\n value: 'win'\r\n },\r\n {\r\n text: 'Draw',\r\n value: 'draw'\r\n },\r\n {\r\n text: 'Lose',\r\n value: 'lose'\r\n }\r\n ]\r\n\r\n created() {\r\n // generate identifier if necessary\r\n if (\r\n this.rounds &&\r\n this.rounds\r\n .flatMap(r => r.matches)\r\n .filter(m => !!m.identifier && !m.isAdditional).length <= 0\r\n ) {\r\n let num = 1\r\n\r\n for (const round of this.rounds) {\r\n for (const match of (round as any).matches.filter(\r\n (m: any) => !m.isAdditional\r\n )) {\r\n match.identifier = `G${this.bracket.groupNumber}-M${num}`\r\n num++\r\n }\r\n }\r\n\r\n num = 1\r\n for (const round of this.rounds) {\r\n for (const match of (round as any).filter(\r\n (m: any) => m.matches.isAdditional\r\n )) {\r\n match.identifier = `AM-${num}`\r\n num++\r\n }\r\n }\r\n }\r\n }\r\n\r\n get teams() {\r\n const matchTeams = this.bracket.matches.flatMap(match => {\r\n return match.teams.map(team => ({\r\n tournamentTeamId: team.tournamentTeamId,\r\n name: team.name,\r\n score: match.scores.find(\r\n score => score.tournamentTeamId === team.tournamentTeamId\r\n )\r\n }))\r\n })\r\n\r\n // group teams\r\n const teams: RoundRobinTeam[] = []\r\n\r\n for (const matchTeam of matchTeams) {\r\n let team = teams.find(\r\n team => team.tournamentTeamId === matchTeam.tournamentTeamId\r\n )\r\n\r\n if (!team) {\r\n team = {\r\n tournamentTeamId: matchTeam.tournamentTeamId,\r\n name: matchTeam.name,\r\n win: 0,\r\n draw: 0,\r\n lose: 0\r\n }\r\n teams.push(team)\r\n }\r\n\r\n team!.win +=\r\n !matchTeam.score || matchTeam.score.result !== BracketScoreResult.Win\r\n ? 0\r\n : 1\r\n\r\n team!.draw +=\r\n !matchTeam.score || matchTeam.score.result !== BracketScoreResult.Draw\r\n ? 0\r\n : 1\r\n\r\n team!.lose +=\r\n matchTeam.score &&\r\n matchTeam.score.result !== BracketScoreResult.Win &&\r\n matchTeam.score.result !== BracketScoreResult.Draw\r\n ? 1\r\n : 0\r\n }\r\n\r\n return teams\r\n }\r\n\r\n get rounds() {\r\n let matches = this.bracket.matches\r\n .filter(\r\n (match, matchIndex) =>\r\n !this.bracket.edges.find(edge => edge[1] === matchIndex)\r\n )\r\n .sort((a, b) => a.bracketMatchId.localeCompare(b.bracketMatchId))\r\n\r\n let round = 1\r\n const rounds: RoundRobinMatchRound[] = []\r\n\r\n // WORKAROUND: we will never ever ever reach 100 rounds. for safety, just stop when reaching 100\r\n while (matches.length > 0 && round < 100) {\r\n rounds.push({\r\n round,\r\n matches\r\n })\r\n\r\n // find next round matches\r\n const nextMatches: BracketMatchAdjacencyMatrixEntity[] = []\r\n\r\n for (const match of matches) {\r\n const edges = this.bracket.edges.filter(\r\n edge => edge[0] === this.bracket.matches.indexOf(match)\r\n )\r\n\r\n for (const edge of edges) {\r\n const theMatch = this.bracket.matches[edge[1]]\r\n\r\n if (!nextMatches.find(match => match === theMatch)) {\r\n nextMatches.push(theMatch)\r\n }\r\n }\r\n }\r\n\r\n matches = nextMatches.sort((a, b) =>\r\n a.bracketMatchId.localeCompare(b.bracketMatchId)\r\n )\r\n round++\r\n }\r\n // Handle additional matches\r\n if (this.bracket.additionalMatches.length) {\r\n rounds.push({\r\n round: 0,\r\n matches: this.bracket.additionalMatches\r\n })\r\n }\r\n return rounds\r\n }\r\n\r\n getTeamScore(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n tournamentTeamId: string\r\n ) {\r\n return match.scores.find(\r\n score => score.tournamentTeamId === tournamentTeamId\r\n )!\r\n }\r\n\r\n getTeamTotalScore(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n team: TournamentTeamListItemEntity\r\n ) {\r\n // const useWinCount =\r\n // match.scores.map(score => score.winCount).reduce((a, b) => a + b, 0) > 1\r\n const score = this.getTeamScore(match, team.tournamentTeamId)\r\n if (!score) return 0\r\n return score.totalScore\r\n }\r\n\r\n getTeamMatchBracketScoreResult(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n team: TournamentTeamListItemEntity\r\n ) {\r\n const matchIndex = this.bracket.matches.indexOf(match)\r\n\r\n if (\r\n matchIndex !== -1 &&\r\n match.teams.length === 1 &&\r\n !this.bracket.edges.find(edge => edge[1] === matchIndex)\r\n ) {\r\n return BracketScoreResult.Win\r\n }\r\n\r\n const score = this.getTeamScore(match, team.tournamentTeamId)\r\n if (!score) return BracketScoreResult.None\r\n return score.result\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./RoundRobinBracket.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./RoundRobinBracket.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RoundRobinBracket.vue?vue&type=template&id=84be7698&scoped=true&\"\nimport script from \"./RoundRobinBracket.vue?vue&type=script&lang=ts&\"\nexport * from \"./RoundRobinBracket.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./RoundRobinBracket.vue?vue&type=style&index=0&id=84be7698&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"84be7698\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\ninstallComponents(component, {VCol,VContainer,VDataTable,VRow,VSimpleTable})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._t(\"score-table\",null,{\"scores\":_vm.scores,\"rounds\":_vm.rounds}),_c('div',{staticClass:\"bracket-drag-hints\"},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-hand-right\")]),_c('span',[_vm._v(_vm._s(_vm.$t('TournamentBracket.DragToMoveAroundHints')))])],1),_c('div',{directives:[{name:\"dragscroll\",rawName:\"v-dragscroll\",value:(!_vm.disableDragScroll),expression:\"!disableDragScroll\"}],staticClass:\"bracket-container\"},[_c('div',{staticClass:\"bracket grabbable\",attrs:{\"set\":(_vm.roomIndex = 1)}},_vm._l((_vm.rounds),function(roundMatch,rIndex){return _c('div',{key:(\"round-\" + rIndex),staticClass:\"round\"},[_vm._l((roundMatch.filter(function (rm) { return !rm.isAdditional; })),function(match,mIndex){return _c('div',{key:(\"match-\" + mIndex),staticClass:\"match\"},[_c('div',{staticClass:\"teams\"},[_c('div',{staticClass:\"match-header\"},[_vm._t(\"header\",null,{\"match\":match,\"round\":rIndex + 1,\"validTeams\":match.teams.length === _vm.opponentNum})],2),_vm._l((_vm.getSortedTeams(match)),function(team,tIndex){return _c('BracketTeam',{key:(\"team-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"bracket-team-name\":team.name,\"empty\":!team,\"score\":_vm.getTeamTotalScore(match, team),\"result\":_vm.getTeamMatchBracketScoreResult(match, team),\"hovered\":_vm.hoverTarget === team.tournamentTeamId,\"always-display-score\":true},nativeOn:{\"mouseover\":function($event){return _vm.hoverTeam(team.tournamentTeamId)},\"mouseleave\":function($event){return _vm.hoverTeam($event)},\"click\":function($event){return _vm.$emit('selected', { rIndex: rIndex, mIndex: mIndex, tIndex: tIndex, match: match, team: team })}}})}),_vm._l((_vm.getEmptyTournamentTeamFiller(match.teams)),function(tIndex){return _c('BracketTeam',{key:(\"team-empty-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"empty\":true,\"score\":0,\"winner\":false}})}),_c('div',{staticClass:\"match-footer\"},[_vm._t(\"footer\",[_vm._v(_vm._s(_vm.roomIndex))],{\"match\":match,\"round\":rIndex + 1,\"index\":_vm.roomIndex++,\"validTeams\":match.teams.length === _vm.opponentNum})],2)],2)])}),_c('div',{staticClass:\"round-header\"},[_c('span',[_vm._v(_vm._s(_vm.getRoundOf(roundMatch)))])])],2)}),0),(_vm.hasAdditionalMatches)?[_c('div',{staticClass:\"additional-match-title\"},[_vm._v(\" \"+_vm._s(_vm.$t('Bracket.AdditionalMatches'))+\" \")]),_c('div',{staticClass:\"bracket additional-bracket grabbable\",attrs:{\"set\":(_vm.roomIndex = 1)}},_vm._l((_vm.rounds),function(roundMatch,rIndex){return _c('div',{key:(\"additional-bracket-round-\" + rIndex),staticClass:\"round\"},_vm._l((roundMatch\n .filter(function (rm) { return rm.isAdditional; })\n .sort(function (a, b) { return a.identifier.localeCompare(b.identifier); })),function(match,mIndex){return _c('div',{key:(\"additional-match-\" + mIndex),staticClass:\"match additional-match\"},[_c('div',{staticClass:\"teams\"},[_c('div',{staticClass:\"match-header\"},[_vm._t(\"header\",null,{\"match\":match,\"round\":rIndex + 1,\"validTeams\":match.teams.length === _vm.opponentNum})],2),_vm._l((_vm.getSortedTeams(match)),function(team,tIndex){return _c('BracketTeam',{key:(\"team-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"bracket-team-name\":team.name,\"empty\":!team,\"score\":_vm.getTeamTotalScore(match, team),\"result\":_vm.getTeamMatchBracketScoreResult(match, team),\"hovered\":_vm.hoverTarget === team.tournamentTeamId},nativeOn:{\"mouseover\":function($event){return _vm.hoverTeam(team.tournamentTeamId)},\"mouseleave\":function($event){return _vm.hoverTeam($event)},\"click\":function($event){return _vm.$emit('selected', { rIndex: rIndex, mIndex: mIndex, tIndex: tIndex, match: match, team: team })}}})}),_vm._l((_vm.getEmptyTournamentTeamFiller(match.teams)),function(tIndex){return _c('BracketTeam',{key:(\"team-empty-\" + rIndex + \"-\" + mIndex + \"-\" + tIndex),attrs:{\"empty\":true,\"score\":0,\"winner\":false}})}),_c('div',{staticClass:\"match-footer\"},[_vm._t(\"footer\",[_vm._v(_vm._s(_vm.roomIndex))],{\"match\":match,\"round\":rIndex + 1,\"index\":_vm.roomIndex++,\"validTeams\":match.teams.length === _vm.opponentNum})],2)],2)])}),0)}),0)]:_vm._e()],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator'\r\nimport BracketTeam from './components/BracketTeam.vue'\r\nimport { dragscroll } from 'vue-dragscroll'\r\nimport {\r\n BracketAdjacencyMatrixEntity,\r\n BracketMatchAdjacencyMatrixEntity,\r\n BracketMatrix,\r\n BracketScoreResult,\r\n TournamentTeamListItemEntity\r\n} from '@/api/stage'\r\n\r\nexport interface FreeForAllScore {\r\n tournamentTeamId: string\r\n name: string\r\n rank: number\r\n score: number\r\n}\r\n\r\n@Component({\r\n components: {\r\n BracketTeam\r\n },\r\n directives: {\r\n dragscroll\r\n }\r\n})\r\nexport default class FreeForAllBracket extends Vue {\r\n @Prop({ type: Number, default: 2 }) opponentNum!: number\r\n\r\n @Prop({ type: Object, required: true })\r\n readonly bracket!: BracketAdjacencyMatrixEntity\r\n\r\n @Prop({ type: Boolean, default: false })\r\n readonly disableDragScroll!: boolean\r\n\r\n hoverTarget: string | null = null\r\n rounds: BracketMatchAdjacencyMatrixEntity[][] | null = null\r\n hasAdditionalMatches: boolean = false\r\n\r\n teams: string[] = []\r\n\r\n hoverTeam(teamId: string | null = null) {\r\n this.hoverTarget = typeof teamId === 'string' ? teamId : null\r\n }\r\n\r\n /* Hooks */\r\n created() {\r\n this.initialize()\r\n }\r\n\r\n initialize() {\r\n const bracketMatrix = new BracketMatrix(this.bracket)\r\n const structure = bracketMatrix.toBracketTreeNoEdge()\r\n if (!structure) this.rounds = null\r\n this.rounds = structure\r\n\r\n // generate identifier if necessary\r\n if (\r\n this.rounds &&\r\n this.rounds.flat().filter(m => !!m.identifier && !m.isAdditional)\r\n .length <= 0\r\n ) {\r\n let num = 1\r\n for (const round of this.rounds) {\r\n for (const match of round.filter(m => !m.isAdditional)) {\r\n match.identifier = `G${this.bracket.groupNumber}-M${num}`\r\n num++\r\n }\r\n }\r\n\r\n num = 1\r\n for (const round of this.rounds) {\r\n for (const match of round.filter(m => m.isAdditional)) {\r\n this.hasAdditionalMatches = true\r\n\r\n if (!match.identifier) {\r\n match.identifier = `G1-AM-${num}`\r\n }\r\n num++\r\n }\r\n }\r\n }\r\n\r\n // check if there are any additional matches\r\n if (structure) {\r\n this.hasAdditionalMatches = structure\r\n .flat()\r\n .some(match => match.isAdditional)\r\n }\r\n }\r\n\r\n @Watch('bracket', { immediate: true, deep: true })\r\n onBracketStructureChanged() {\r\n this.initialize()\r\n }\r\n\r\n getTeamScore(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n tournamentTeamId: string\r\n ) {\r\n return match.scores.find(\r\n score => score.tournamentTeamId === tournamentTeamId\r\n )!\r\n }\r\n\r\n getTeamTotalScore(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n team: TournamentTeamListItemEntity\r\n ) {\r\n // const useWinCount =\r\n // match.scores.map(score => score.winCount).reduce((a, b) => a + b, 0) > 1\r\n const score = this.getTeamScore(match, team.tournamentTeamId)\r\n if (!score) return 0\r\n return score.totalScore\r\n }\r\n\r\n getEmptyTournamentTeamFiller(teams: TournamentTeamListItemEntity[]) {\r\n if (teams.length <= 0) return this.opponentNum\r\n\r\n return teams.length % this.opponentNum\r\n }\r\n\r\n getTeamMatchBracketScoreResult(\r\n match: BracketMatchAdjacencyMatrixEntity,\r\n team: TournamentTeamListItemEntity\r\n ) {\r\n const matchIndex = this.bracket.matches.indexOf(match)\r\n\r\n if (\r\n matchIndex !== -1 &&\r\n match.teams.length === 1 &&\r\n !this.bracket.edges.find(edge => edge[1] === matchIndex)\r\n ) {\r\n return BracketScoreResult.Win\r\n }\r\n\r\n const score = this.getTeamScore(match, team.tournamentTeamId)\r\n if (!score) return BracketScoreResult.None\r\n return score.result\r\n }\r\n\r\n getSortedTeams(match: BracketMatchAdjacencyMatrixEntity) {\r\n return match.teams.slice().sort((a, b) => {\r\n const scoreA = match.scores.find(\r\n score => score.tournamentTeamId === a.tournamentTeamId\r\n )\r\n const scoreB = match.scores.find(\r\n score => score.tournamentTeamId === b.tournamentTeamId\r\n )\r\n\r\n const scoreATotalScore = scoreA ? scoreA.totalScore : 0\r\n const scoreBTotalScore = scoreB ? scoreB.totalScore : 0\r\n\r\n const compare = scoreBTotalScore - scoreATotalScore\r\n\r\n if (compare === 0) {\r\n return a.name.localeCompare(b.name)\r\n }\r\n\r\n return compare\r\n })\r\n }\r\n\r\n getRoundOf(roundMatch: BracketMatchAdjacencyMatrixEntity[]) {\r\n if (!roundMatch || !roundMatch.length || !roundMatch[0]) return ''\r\n const roundOf = roundMatch[0].roundOf\r\n return this.$t('Bracket.RoundOfFFA', { roundOf: roundOf })\r\n }\r\n\r\n get scores() {\r\n const matchTeams = this.bracket.matches.flatMap(match => {\r\n return match.teams.map(team => ({\r\n tournamentTeamId: team.tournamentTeamId,\r\n name: team.name,\r\n score: match.scores.find(\r\n score => score.tournamentTeamId === team.tournamentTeamId\r\n )\r\n }))\r\n })\r\n\r\n // group teams\r\n const teams: FreeForAllScore[] = []\r\n\r\n for (const matchTeam of matchTeams) {\r\n let team = teams.find(\r\n team => team.tournamentTeamId === matchTeam.tournamentTeamId\r\n )\r\n\r\n if (!team) {\r\n team = {\r\n tournamentTeamId: matchTeam.tournamentTeamId,\r\n name: matchTeam.name,\r\n rank: 0,\r\n score: 0\r\n }\r\n teams.push(team)\r\n }\r\n\r\n if (\r\n matchTeam!.score &&\r\n [\r\n BracketScoreResult.Win,\r\n BracketScoreResult.Lose,\r\n BracketScoreResult.Draw\r\n ].includes(matchTeam!.score.result)\r\n ) {\r\n team!.score += matchTeam!.score!.totalScore\r\n }\r\n }\r\n\r\n return teams\r\n .sort((a, b) => {\r\n const diff = b.score - a.score\r\n\r\n if (diff === 0) {\r\n return a.name.localeCompare(b.name)\r\n }\r\n\r\n return diff\r\n })\r\n .map((item, index) => ({\r\n ...item,\r\n rank: index + 1\r\n }))\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./FreeForAllBracket.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./FreeForAllBracket.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./FreeForAllBracket.vue?vue&type=template&id=1c28b974&scoped=true&\"\nimport script from \"./FreeForAllBracket.vue?vue&type=script&lang=ts&\"\nexport * from \"./FreeForAllBracket.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FreeForAllBracket.vue?vue&type=style&index=0&id=1c28b974&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1c28b974\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VIcon})\n","import Bracket from './Bracket.vue'\r\nimport RoundRobinBracket from './RoundRobinBracket.vue'\r\nimport FreeForAllBracket from './FreeForAllBracket.vue'\r\nimport { VueConstructor } from 'vue'\r\n\r\nexport default {\r\n install(Vue: VueConstructor) {\r\n // Install a component globally\r\n Vue.component('tournament-bracket', Bracket)\r\n Vue.component('round-robin-bracket', RoundRobinBracket)\r\n Vue.component('ffa-bracket', FreeForAllBracket)\r\n }\r\n}\r\n","\r\nimport MarkdownIt from 'markdown-it'\r\nimport removeMd from 'remove-markdown'\r\nimport { Vue, Component, Prop } from 'vue-property-decorator'\r\nimport { CreateElement } from 'vue'\r\n\r\n@Component\r\nexport default class Markdown extends Vue {\r\n @Prop({ default: false })\r\n readonly plain!: boolean\r\n\r\n render(h: CreateElement) {\r\n if (this.plain) {\r\n const innerText = removeMd(this.$slots!.default![0].text!.trim())\r\n return h(\r\n 'article',\r\n {\r\n domProps: { innerText }\r\n },\r\n []\r\n )\r\n } else {\r\n const innerHTML = new MarkdownIt({ html: false }).render(\r\n this.$slots!.default![0].text!.trim()\r\n )\r\n return h(\r\n 'article',\r\n {\r\n domProps: { innerHTML }\r\n },\r\n []\r\n )\r\n }\r\n }\r\n}\r\n","var render, staticRenderFns\nimport script from \"./Markdown.vue?vue&type=script&lang=ts&\"\nexport * from \"./Markdown.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./Markdown.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./Markdown.vue?vue&type=script&lang=ts&\"","import Markdown from './Markdown.vue'\r\nimport { VueConstructor } from 'vue'\r\n\r\nexport default {\r\n install(Vue: VueConstructor) {\r\n // Install a component globally\r\n Vue.component('markdown', Markdown)\r\n }\r\n}\r\n","\r\nimport { QuillDeltaToHtmlConverter } from 'quill-delta-to-html'\r\nimport { Vue, Component, Prop } from 'vue-property-decorator'\r\nimport { CreateElement } from 'vue'\r\n\r\n@Component\r\nexport default class QuillDelta extends Vue {\r\n @Prop({ default: false })\r\n readonly plain!: boolean\r\n\r\n render(h: CreateElement) {\r\n const text = this.$slots!.default![0].text!.trim()\r\n\r\n try {\r\n const converter = new QuillDeltaToHtmlConverter(JSON.parse(text), {\r\n inlineStyles: true\r\n })\r\n const html = converter.convert()\r\n\r\n if (this.plain) {\r\n return h(\r\n 'article',\r\n {\r\n domProps: {\r\n innerText: html.replace(/(<([^>]+)>)/gi, '')\r\n },\r\n style: {\r\n 'line-height': 'initial'\r\n }\r\n },\r\n []\r\n )\r\n } else {\r\n return h(\r\n 'article',\r\n {\r\n domProps: {\r\n innerHTML: html\r\n },\r\n style: {\r\n 'line-height': 'initial'\r\n }\r\n },\r\n []\r\n )\r\n }\r\n } catch (err) {\r\n return h(\r\n 'article',\r\n {\r\n domProps: {\r\n innerText: text\r\n }\r\n },\r\n []\r\n )\r\n }\r\n }\r\n}\r\n","var render, staticRenderFns\nimport script from \"./QuillDelta.vue?vue&type=script&lang=ts&\"\nexport * from \"./QuillDelta.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./QuillDelta.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./QuillDelta.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./QuillDelta.vue?vue&type=script&lang=ts&\"","import QuillDelta from './QuillDelta.vue'\r\nimport { VueConstructor } from 'vue'\r\n\r\nexport default {\r\n install(Vue: VueConstructor) {\r\n // Install a component globally\r\n Vue.component('quill-delta', QuillDelta)\r\n }\r\n}\r\n","import { DirectiveBinding, DirectiveFunction } from 'vue/types/options'\r\n\r\nconst directive = {\r\n bind(el: HTMLImageElement, binding: DirectiveBinding) {\r\n const { value } = binding\r\n const defaultError = require('@/assets/default/logo.png')\r\n const defaultType: any = {\r\n tournamentLogo: require('@/assets/default/tournament_logo.png'),\r\n tournamentBackground: require('@/assets/default/tournament_background.png')\r\n }\r\n const img = new Image()\r\n\r\n let error = defaultError\r\n let original = el.src\r\n\r\n if (typeof value === 'string') {\r\n error = value\r\n }\r\n\r\n if (value instanceof Object) {\r\n error = defaultType[value.type] || defaultError\r\n }\r\n\r\n img.src = original\r\n\r\n img.onerror = () => {\r\n el.src = error\r\n }\r\n }\r\n}\r\n\r\nexport default directive as DirectiveFunction\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"my-5\"},[(_vm.label)?_c('div',{staticClass:\"h4 font-weight-bold\"},[_vm._v(_vm._s(_vm.label))]):_vm._e(),(_vm.hint)?_c('div',{staticClass:\"caption\"},[_vm._v(_vm._s(_vm.hint))]):_vm._e(),_c('file-pond',{ref:\"pond\",attrs:{\"name\":\"file\",\"label-idle\":_vm.labelIdle,\"credits\":\"false\",\"allow-multiple\":_vm.multiple,\"accepted-file-types\":_vm.fileType,\"files\":_vm.myFiles,\"allowImagePreview\":_vm.allowPreview,\"allowImageCrop\":true,\"server\":_vm.server,\"required\":true},on:{\"init\":_vm.handleFilePondInit}}),_c('VMessages',{attrs:{\"value\":_vm.errorBucket,\"color\":\"error\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop, Watch } from 'vue-property-decorator'\r\nimport vueFilePond from 'vue-filepond'\r\nimport 'filepond/dist/filepond.min.css'\r\nimport 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.min.css'\r\n\r\n// Import image preview and file type validation plugins\r\nimport FilePondPluginFileValidateType from 'filepond-plugin-file-validate-type'\r\nimport FilePondPluginImagePreview from 'filepond-plugin-image-preview'\r\nimport FilePondPluginImageValidateSize from 'filepond-plugin-image-validate-size'\r\nimport FilePondPluginFileValidateSize from 'filepond-plugin-file-validate-size'\r\nimport FilePondPluginImageCrop from 'filepond-plugin-image-crop'\r\nimport axios from 'axios'\r\nimport { TournamentAPI } from '@/api/tournament'\r\nimport { VInput } from 'vuetify/lib'\r\n\r\n// Create component\r\nconst FilePond = (vueFilePond as any)(\r\n FilePondPluginFileValidateType,\r\n FilePondPluginImagePreview,\r\n FilePondPluginImageValidateSize,\r\n FilePondPluginFileValidateSize,\r\n FilePondPluginImageCrop\r\n)\r\n\r\n@Component({\r\n components: {\r\n FilePond\r\n }\r\n})\r\nexport default class VFormFileUploader extends VInput {\r\n @Prop({ type: String, default: 'image/jpeg, image/png' })\r\n readonly fileType!: any\r\n\r\n @Prop({ type: String, default: '' }) readonly label!: string\r\n @Prop({ type: String, default: '' }) readonly hint!: string\r\n @Prop({ type: String, default: '點擊或拖曳檔案到此處' })\r\n readonly labelIdle!: string\r\n\r\n @Prop({ type: Boolean, default: false }) readonly multiple!: boolean\r\n @Prop({ type: Boolean, default: true }) readonly allowCrop!: boolean\r\n @Prop({ type: Boolean, default: true }) readonly allowPreview!: boolean\r\n @Prop({ type: String, default: '' }) readonly value!: string\r\n // @Prop({ type: Array, default: () => [] }) readonly value!: string[]\r\n\r\n myFiles: any[] = []\r\n filesUploaded: string[] = []\r\n\r\n handleFilePondInit() {\r\n this.parseValue()\r\n }\r\n\r\n @Watch('filesUploaded')\r\n onFileUploaded() {\r\n this.$emit('input', this.filesUploaded[0] || '')\r\n }\r\n\r\n @Watch('value')\r\n onValueChanged() {\r\n this.parseValue()\r\n }\r\n\r\n parseValue() {\r\n if (!this.value || !this.value.length) return\r\n\r\n this.myFiles = [\r\n {\r\n source: this.value,\r\n options: {\r\n type: 'local'\r\n }\r\n }\r\n ]\r\n }\r\n\r\n get tournamentId() {\r\n return this.$route.params.tournamentId || 'none'\r\n }\r\n\r\n get server() {\r\n return {\r\n load: (source: any, load: any) => {\r\n fetch(source)\r\n .then(res => res.blob())\r\n .then(load)\r\n },\r\n process: async (\r\n fieldName: string,\r\n file: any,\r\n metadata: any,\r\n load: Function,\r\n error: Function,\r\n progress: Function,\r\n abort: Function,\r\n transfer: any,\r\n options: any\r\n ) => {\r\n /* store file somewhere and call `load` when done */\r\n\r\n // fieldName is the name of the input field\r\n // file is the actual file object to send\r\n const formData = new FormData()\r\n formData.append(fieldName, file)\r\n\r\n // related to aborting the request\r\n const CancelToken = axios.CancelToken\r\n const source = CancelToken.source()\r\n\r\n const token = this.$route.query.token\r\n // the request itself\r\n try {\r\n const response = await TournamentAPI.uploadUserGeneratedContent(\r\n this.tournamentId,\r\n formData,\r\n {\r\n cancelToken: source.token,\r\n onUploadProgress: e => {\r\n // updating progress indicator\r\n progress(e.lengthComputable, e.loaded, e.total)\r\n },\r\n headers: token\r\n ? {\r\n Authorization: 'Bearer ' + token\r\n }\r\n : undefined\r\n }\r\n )\r\n\r\n if (response.data && response.data.payload) {\r\n // passing the file id to FilePond\r\n load(response.data.payload)\r\n if (this.multiple) {\r\n this.filesUploaded.push(response.data.payload)\r\n } else {\r\n this.filesUploaded = [response.data.payload]\r\n }\r\n }\r\n } catch (err) {\r\n if (axios.isCancel(err)) {\r\n console.log('Request canceled', err.message)\r\n } else {\r\n // handle error\r\n error('Fail to upload file')\r\n }\r\n }\r\n\r\n // Setup abort interface\r\n return {\r\n abort: () => {\r\n source.cancel('Operation canceled by the user.')\r\n }\r\n }\r\n },\r\n fetch: null,\r\n revert: null\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./VFormFileUploader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./VFormFileUploader.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VFormFileUploader.vue?vue&type=template&id=05c3a215&\"\nimport script from \"./VFormFileUploader.vue?vue&type=script&lang=ts&\"\nexport * from \"./VFormFileUploader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./VFormFileUploader.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VMessages } from 'vuetify/lib/components/VMessages';\ninstallComponents(component, {VMessages})\n","import VFormFileUploader from './VFormFileUploader.vue'\r\nexport default VFormFileUploader\r\nexport { VFormFileUploader }\r\n","import 'fix-date'\r\n\r\nimport '@/utils/class-component-hooks'\r\nimport '@/styles/global.scss'\r\n\r\nimport Vue from 'vue'\r\nimport 'swiper/css/swiper.css'\r\n\r\nimport PerfectScrollbar from 'vue2-perfect-scrollbar'\r\nimport 'vue2-perfect-scrollbar/dist/vue2-perfect-scrollbar.css'\r\n\r\nimport VueFileAgent from 'vue-file-agent'\r\nimport 'vue-file-agent/dist/vue-file-agent.css'\r\n\r\nimport App from './App.vue'\r\nimport vuetify from './plugins/vuetify'\r\nimport router from './router'\r\nimport store from './store'\r\nimport i18n from './lang'\r\nimport './moment'\r\n\r\nimport VuetifyToast from 'vuetify-toast-snackbar-ng'\r\nimport VuetifyDialog from 'vuetify-dialog'\r\nimport 'vuetify-dialog/dist/vuetify-dialog.css'\r\nimport VueClipboard from 'vue-clipboard2'\r\nimport VSnackbars from 'v-snackbars'\r\n\r\nimport listenElectronIpcEvents, { isElectron } from './utils/electron'\r\n\r\nimport TournamentBracket from '@/plugins/TournamentBracket'\r\nimport Markdown from '@/plugins/Markdown'\r\nimport QuillDelta from '@/plugins/QuillDelta'\r\nimport LeagueIntegration from '@/utils/integration/lol'\r\nimport ImgFallback from '@/plugins/ImageFallback/directives'\r\nimport VueConfetti from 'vue-confetti'\r\n\r\nimport VueGtm from 'vue-gtm'\r\nimport Bracket from '@/plugins/TournamentBracket/Bracket.vue'\r\n\r\nimport VFormFileUploader from '@/modules/shared/components/VFormFileUploader'\r\n\r\nVue.directive('img-fallback', ImgFallback)\r\nVue.use(Markdown)\r\nVue.use(QuillDelta)\r\nVue.use(VueConfetti as any)\r\nVue.use(TournamentBracket)\r\nVue.component('v-snackbars', VSnackbars)\r\nVue.component('v-form-file-uploader', VFormFileUploader)\r\n\r\nVue.config.productionTip = false\r\n\r\n// hide splash screen\r\nconst loadingContainer = document.getElementById('loading')\r\nif (loadingContainer) {\r\n loadingContainer.className = 'hidden'\r\n}\r\n\r\n// add production class\r\nconst bodyContainer = document.getElementsByTagName('body')\r\nif (bodyContainer[0] && process.env.NODE_ENV === 'production') {\r\n bodyContainer[0].classList.add('production')\r\n}\r\n\r\n// React Native webview interactions\r\nVue.prototype.$reactNativeWebView = (window as any).ReactNativeWebView\r\n// Livechat.com Widget\r\nVue.prototype.$livechat = (window as any).LiveChatWidget\r\n\r\n// WORKAROUND: ignore vuetify VCalendar issue (https://github.com/vuetifyjs/vuetify/issues/9999)\r\nVue.config.warnHandler = function(msg) {\r\n if (\r\n msg ===\r\n 'The .native modifier for v-on is only valid on components but it was used on
.'\r\n ) {\r\n return\r\n }\r\n\r\n console.error(msg)\r\n}\r\n\r\nVue.use(VuetifyToast, {\r\n x: 'center',\r\n y: 'bottom',\r\n timeout: 5000,\r\n dismissable: true,\r\n icon: 'info'\r\n})\r\n\r\nVue.use(VuetifyDialog, {\r\n context: {\r\n vuetify\r\n }\r\n})\r\n\r\nVue.use(PerfectScrollbar)\r\nVue.use(VueClipboard)\r\nVue.use(VueFileAgent)\r\nVue.use(VueGtm, {\r\n id: 'GTM-TQFZX8W',\r\n enabled: !isElectron() && process.env.NODE_ENV === 'production',\r\n debug: process.env.NODE_ENV === 'development', // Whether or not display console logs debugs (optional)\r\n vueRouter: router\r\n})\r\n\r\nnew Vue({\r\n router,\r\n store,\r\n vuetify,\r\n i18n,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n\r\nlistenElectronIpcEvents()\r\n\r\n// LOL integration\r\nLeagueIntegration.init()\r\n","import axios from '@/utils/request'\r\nimport Qs from 'qs'\r\nimport { AxiosPromise, AxiosRequestConfig } from 'axios'\r\nimport { BaseResponse, ResponseStatus } from '.'\r\nimport {\r\n TournamentTeamEntity,\r\n TournamentTeamResponsePagination,\r\n TournamentTeamState,\r\n TournamentTeamRole\r\n} from './tournamentTeam'\r\nimport { StageEntity } from './stage'\r\nimport { TournamentCatalogSearchFilter } from '@/modules/tournament/tournament.store'\r\nimport { TournamentTeamPostEntity } from '@/api/tournamentTeamPost'\r\nimport { VenueEntity } from '@/api/venue'\r\nimport { RegionInfo, SupportedGame } from '@/api/config'\r\n\r\nexport { BaseResponse, ResponseStatus }\r\n\r\nexport interface TournamentEntityPagination {\r\n items: TournamentEntity[]\r\n hasMorePage: boolean\r\n}\r\n\r\nexport interface Money {\r\n currency: string\r\n amount: string\r\n}\r\n\r\nexport interface TournamentEntity {\r\n tournamentId: string\r\n name: string\r\n game: string\r\n regions: RegionInfo[]\r\n isPublished: boolean\r\n isFeatured: boolean\r\n tournamentCheckInDuration: number | null\r\n isTournamentCheckInEnable: boolean\r\n tournamentCheckInEndTime: number | null\r\n createTime: number\r\n publishTime: number\r\n scheduleRegistrationStartTime: number\r\n scheduleRegistrationEndTime: number\r\n scheduleStartTime: number\r\n scheduleEndTime: number\r\n detailIsVisible: boolean\r\n detailBanner: string\r\n detailMobileBanner: string\r\n detailLogo: string\r\n detailAbout: string\r\n detailRules: string\r\n capacityMinTeams: number\r\n capacityMaxTeams: number\r\n capacityMinPlayersPerTeam: number\r\n capacityMaxPlayersPerTeam: number\r\n prizePrizePool: string\r\n prizeChampionPrize: string\r\n prizeFirstRunnerUpPrize: string\r\n prizeSecondRunnerUpPrize: string\r\n prizePrizeDetails: string\r\n prizeIsPrizeFreeText: boolean\r\n paymentPerTeamRegistrationFee: number\r\n state: TournamentState\r\n stages: StageEntity[]\r\n isDiscordIdRequired: boolean\r\n isAutomated: boolean\r\n totalTeamNum: number\r\n totalRegisteredTeamNum: number\r\n hasEntryFee: boolean\r\n entryFee: Money | null\r\n hasGroup: boolean\r\n}\r\n\r\nexport interface TournamentVenueWithDetail {\r\n venue: VenueEntity\r\n current: number\r\n quota: number | null\r\n}\r\n\r\nexport interface MemberJoinedTournamentsEntity {\r\n tournamentId: string\r\n tournamentTeamId: string\r\n name: string\r\n game: string\r\n regions: RegionInfo[]\r\n banner: string\r\n logo: string\r\n scheduleStartTime: number\r\n scheduleEndTime: number\r\n isAutomated: boolean\r\n state: TournamentState\r\n teamState: TournamentTeamState\r\n isTeamStarter: boolean\r\n isTournamentCheckedIn: boolean\r\n role: TournamentTeamRole\r\n hasUpcomingMatch: boolean\r\n}\r\n\r\nexport enum TournamentState {\r\n Initial = 'Initial',\r\n Published = 'Published',\r\n OpenRegistration = 'OpenRegistration',\r\n CompleteRegistration = 'CompleteRegistration',\r\n InProgress = 'InProgress',\r\n Completed = 'Completed',\r\n Cancelled = 'Cancelled',\r\n WaitingForCheckIn = 'WaitingForCheckIn'\r\n}\r\n\r\nexport interface TeamTokenInfo {\r\n tournamentId: string\r\n tournamentTeamId: string\r\n teamName: string\r\n teamLogo: string\r\n}\r\n\r\nexport interface CreateTournamentTeamRequest {\r\n name: string\r\n logo: string | null\r\n group: string | null\r\n}\r\n\r\nexport interface ConfirmTournamentTeamRosterRequest {\r\n memberIds: string[]\r\n paymentMethod: string | undefined\r\n}\r\n\r\nexport interface MemberTournamentFormResponseEntity {\r\n createTime: number\r\n updateTime: number\r\n schema: string\r\n tournamentId: string\r\n tournamentTeamId: string\r\n value: string\r\n}\r\n\r\nexport enum TournamentGameType {\r\n All = '',\r\n Lol = 'lol',\r\n Raingbow6 = 'rainbow6',\r\n Csgo = 'csgo',\r\n Valorant = 'valorant',\r\n WildRift = 'wildRift',\r\n Aov = 'aov',\r\n SlamDunk = 'slamDunk',\r\n Fifa21 = 'fifa21',\r\n Forts = 'forts'\r\n}\r\n\r\nexport interface MemberTournamentHistoryItemEntity {\r\n tournament: TournamentEntity\r\n tournamentTeam: TournamentTeamEntity\r\n stageName: string\r\n groupName: string\r\n standing: string\r\n}\r\n\r\nexport interface MemberTournamentHistoryPaginatedResponse {\r\n items: MemberTournamentHistoryItemEntity[]\r\n hasMorePage: boolean\r\n}\r\n\r\nexport interface TournamentCustomFormEntity {\r\n schema: string\r\n}\r\n\r\nexport interface MemberJoinedAutomatedTournamentResponse {\r\n isJoined: boolean\r\n tournamentId: string\r\n state: TournamentState\r\n isWaitingForUserToCheckIn: boolean\r\n tournamentCheckInEndTime: number\r\n tournamentCheckInRemainingMinutes: number\r\n}\r\n\r\nexport enum ConfirmTournamentTeamRosterStatus {\r\n Success = 'Success',\r\n Delayed = 'Delayed',\r\n PaymentMethodRequired = 'PaymentMethodRequired',\r\n RedirectToPaymentGateway = 'RedirectToPaymentGateway'\r\n}\r\n\r\nexport interface ConfirmTournamentTeamRosterResponse {\r\n status: ConfirmTournamentTeamRosterStatus\r\n fee: string\r\n walletTransactionId: string\r\n paymentMethod: string\r\n paymentMethodOrderId: string\r\n}\r\n\r\nexport interface TournamentGroupAvailability {\r\n name: string\r\n maxTeams: number\r\n current: number\r\n available: boolean\r\n}\r\n\r\nexport class TournamentAPI {\r\n public static API_PREFIX = '/tournament/v1'\r\n\r\n /**\r\n * Retrieve published tournaments in paginated manner\r\n * @param page Page number\r\n * @param all [ADMIN ONLY] List all tournaments (included hidden tournaments)\r\n * @returns {BaseResponse} Pagination data\r\n */\r\n public static getTournaments(\r\n page: number = 1,\r\n filter: TournamentCatalogSearchFilter | {} = {}\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournaments`, {\r\n params: {\r\n page,\r\n ...filter\r\n },\r\n paramsSerializer: params =>\r\n Qs.stringify(params, { arrayFormat: 'repeat' })\r\n })\r\n }\r\n\r\n /**\r\n * Get information of a specific tournament\r\n * @param tournamentId Tournament ID\r\n * @returns {BaseResponse} Tournament details\r\n */\r\n public static getTournament(\r\n tournamentId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournaments/${tournamentId}`)\r\n }\r\n\r\n /**\r\n * Get information of a specific stage\r\n * @param stageId Stage ID\r\n * @returns {BaseResponse} Stage details\r\n */\r\n public static getStage(\r\n stageId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/stages/${stageId}`)\r\n }\r\n\r\n /**\r\n * Get tournament teams under a tournament\r\n * @param tournamentId Tournament ID\r\n * @param page Page number\r\n * @returns {TournamentTeamResponsePagination} Pagination data\r\n */\r\n public static getTournamentTeams(\r\n tournamentId: string,\r\n page: number = 1,\r\n isRegistered: boolean = false\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournaments/${tournamentId}/teams`, {\r\n params: {\r\n page,\r\n isRegistered\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Get the tournament team that the member is joined under a tournament\r\n * @param memberId Member ID\r\n * @param tournamentId Tournament ID\r\n * @param isRequestOnly\r\n * @returns {BaseResponse} Tournament team data\r\n */\r\n public static getMemberJoinedTournamentTeam(\r\n memberId: string,\r\n tournamentId: string,\r\n playerRoles: TournamentTeamRole[] | null = null\r\n ): AxiosPromise> {\r\n if (!playerRoles) {\r\n playerRoles = [\r\n TournamentTeamRole.Captain,\r\n TournamentTeamRole.Member,\r\n TournamentTeamRole.RequestToJoin\r\n ]\r\n }\r\n return axios.get(\r\n `${this.API_PREFIX}/members/${memberId}/tournaments/${tournamentId}/teams`,\r\n {\r\n params: {\r\n playerRoles: playerRoles\r\n },\r\n paramsSerializer: params =>\r\n Qs.stringify(params, { arrayFormat: 'repeat' })\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * Get member joined tournaments\r\n * @param memberId Logged-in member ID\r\n * @param registeredOnly\r\n * @returns {BaseResponse} Tournament IDs\r\n */\r\n public static getMemberJoinedTournaments(\r\n memberId: string = '@me',\r\n registeredOnly: boolean | undefined = undefined\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `${this.API_PREFIX}/members/${memberId}/tournaments/joined-tournaments`,\r\n { params: { registeredOnly } }\r\n )\r\n }\r\n\r\n /**\r\n * Get team token\r\n * @param teamToken Team token\r\n * @returns {BaseResponse}\r\n */\r\n public static getTeamTokenInformation(\r\n teamToken: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/team-token/${teamToken}`)\r\n }\r\n\r\n /**\r\n * Get tournament stages\r\n * @param tournamentId Tournament ID\r\n * @returns {BaseResponse} List of stages\r\n */\r\n public static getTournamentStages(\r\n tournamentId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournaments/${tournamentId}/stages`)\r\n }\r\n\r\n /**\r\n * Confirm tournament team roster\r\n * @param tournamentId Tournament ID\r\n * @param tournamentTeamId Tournament team ID\r\n * @param request {ConfirmTournamentTeamRosterRequest} Roster request payload\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static confirmTournamentTeamRoster(\r\n tournamentId: string,\r\n tournamentTeamId: string,\r\n request: ConfirmTournamentTeamRosterRequest\r\n ): AxiosPromise> {\r\n return axios.put(\r\n `${this.API_PREFIX}/tournaments/${tournamentId}/teams/${tournamentTeamId}/confirm-roster`,\r\n request\r\n )\r\n }\r\n\r\n /**\r\n * Join tournament team by team token / accept invitation\r\n * @param teamToken Team token\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static joinTournamentTeamByTeamToken(\r\n teamToken: string\r\n ): AxiosPromise {\r\n return axios.post(`${this.API_PREFIX}/team-token/${teamToken}/join-team`)\r\n }\r\n\r\n public static submitTournamentFormResponseWithToken(\r\n teamToken: string,\r\n formResponse: string\r\n ): AxiosPromise {\r\n return axios.post(`${this.API_PREFIX}/team-token/${teamToken}/form`, {\r\n value: formResponse\r\n })\r\n }\r\n\r\n public static submitTournamentFormResponse(\r\n tournamentTeamId: string,\r\n formResponse: string\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/form`,\r\n {\r\n value: formResponse\r\n }\r\n )\r\n }\r\n\r\n public static updateTournamentFormResponse(\r\n tournamentTeamId: string,\r\n formResponse: string\r\n ): AxiosPromise {\r\n return axios.put(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/form`,\r\n {\r\n value: formResponse\r\n }\r\n )\r\n }\r\n\r\n public static getMemberTournamentFormResponse(\r\n tournamentTeamId: string\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/form`\r\n )\r\n }\r\n\r\n /**\r\n * Regenerate team token\r\n * @param tournamentTeamId Tournament team ID\r\n * @returns {BaseResponse} New team token\r\n */\r\n public static refreshTeamToken(\r\n tournamentTeamId: string\r\n ): AxiosPromise> {\r\n return axios.post(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/refresh-token`\r\n )\r\n }\r\n\r\n /**\r\n * Remove team member from tournament team\r\n * @param teamId\r\n * @param memberId The member id to be removed\r\n */\r\n public static removeTeamMember(\r\n teamId: string,\r\n memberId: string\r\n ): AxiosPromise {\r\n return axios.delete(\r\n `${this.API_PREFIX}/tournament-teams/${teamId}/members/${memberId}`\r\n )\r\n }\r\n\r\n /**\r\n * Create tournament team\r\n * @param tournamentId Tournament ID\r\n * @param createTournamentTeamRequest Team Info Payload\r\n * @param logoFile\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static createTournamentTeam(\r\n tournamentId: string,\r\n createTournamentTeamRequest: CreateTournamentTeamRequest,\r\n logoFile: File | Blob | null = null\r\n ): AxiosPromise> {\r\n const request = new FormData()\r\n request.append('json', JSON.stringify(createTournamentTeamRequest))\r\n\r\n if (logoFile) {\r\n request.append('image', logoFile)\r\n }\r\n\r\n return axios.post(\r\n `${this.API_PREFIX}/tournaments/${tournamentId}/teams`,\r\n request\r\n )\r\n }\r\n\r\n /**\r\n * Get member tournament history\r\n * @param memberId Member ID\r\n * @param page Page number\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getMemberTournamentHistory(\r\n memberId: string,\r\n page: number = 1,\r\n gameType: string = ''\r\n ): AxiosPromise> {\r\n return axios.get(`/tournament/v1/members/${memberId}/history`, {\r\n params: {\r\n page,\r\n gameType\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Get tournament team\r\n * @param tournamentTeamId Tournament Team ID\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getTournamentTeam(\r\n tournamentTeamId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournament-teams/${tournamentTeamId}`)\r\n }\r\n\r\n /**\r\n * Get tournament venues\r\n * @param tournamentId Tournament Id\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getTournamentVenues(\r\n tournamentId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournaments/${tournamentId}/venues`)\r\n }\r\n\r\n /**\r\n * Leave tournament team aka self kicking (LeaveFromTournamentTeam)\r\n * @param tournamentTeamId Tournament Team ID\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static leaveFromTournamentTeam(\r\n tournamentTeamId: string\r\n ): AxiosPromise {\r\n return axios.delete(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/members`\r\n )\r\n }\r\n\r\n /**\r\n * Change tournament team captain\r\n * @param tournamentTeamId Tournament Team ID\r\n * @param request Change tournament team captain request\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static changeTournamentTeamCaptain(\r\n tournamentTeamId: string,\r\n newCaptainMemberId: string\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/change-captain`,\r\n {\r\n newCaptainMemberId: newCaptainMemberId\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * Change tournament team's game account of a player\r\n * @param tournamentTeamId Tournament Team ID\r\n * @param name the new account name\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static changeTournamentTeamGameAccount(\r\n tournamentTeamId: string,\r\n accountName: string\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/game-accounts`,\r\n {\r\n name: accountName\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * Undo confirm tournament team roster\r\n * @param tournamentTeamId Tournament Team ID\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static undoTournamentTeamRosterConfirmation(\r\n tournamentTeamId: string\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/unconfirm-roster`\r\n )\r\n }\r\n\r\n /**\r\n * Get tournament team count\r\n * @param tournamentId Tournament ID\r\n * @returns {BaseResponse} API Response\r\n */\r\n public static getRegisteredTeamCount(\r\n tournamentId: string\r\n ): AxiosPromise> {\r\n return axios.get(\r\n `${this.API_PREFIX}/tournaments/${tournamentId}/team-count`\r\n )\r\n }\r\n\r\n public static tournamentCheckIn(\r\n tournamentTeamId: string\r\n ): AxiosPromise> {\r\n return axios.post(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}/check-in`\r\n )\r\n }\r\n\r\n public static getTournamentCustomFormSchema(\r\n tournamentId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournaments/${tournamentId}/form`)\r\n }\r\n\r\n public static getAutomatedTournamentGameList(\r\n isPast: boolean = false,\r\n region: string | undefined = undefined\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/automated-tournament/games`, {\r\n params: {\r\n past: isPast,\r\n region\r\n }\r\n })\r\n }\r\n\r\n public static getAutomatedTournamentCatalog(\r\n page: number,\r\n game: string,\r\n regions: string[] | undefined\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/automated-tournament/catalog`, {\r\n params: {\r\n page,\r\n game,\r\n regions\r\n },\r\n paramsSerializer: params =>\r\n Qs.stringify(params, { arrayFormat: 'repeat' })\r\n })\r\n }\r\n\r\n public static getMemberJoinedAutomatedTournament(): AxiosPromise<\r\n BaseResponse\r\n > {\r\n return axios.get(`${this.API_PREFIX}/automated-tournament/joined`)\r\n }\r\n\r\n public static getInstantMatchPastTournaments(\r\n page: number = 1,\r\n filter: TournamentCatalogSearchFilter | {} = {}\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/automated-tournament/past`, {\r\n params: {\r\n page,\r\n ...filter\r\n },\r\n paramsSerializer: params =>\r\n Qs.stringify(params, { arrayFormat: 'repeat' })\r\n })\r\n }\r\n\r\n public static getTournamentGroups(\r\n tournamentId: string\r\n ): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/tournaments/${tournamentId}/groups`)\r\n }\r\n\r\n public static editTournamentTeam(\r\n tournamentTeamId: string,\r\n request: {\r\n group: string\r\n }\r\n ): AxiosPromise> {\r\n return axios.post(\r\n `${this.API_PREFIX}/tournament-teams/${tournamentTeamId}`,\r\n request\r\n )\r\n }\r\n\r\n // FIXME: temp code\r\n public static shouldHideForm(): AxiosPromise> {\r\n return axios.get(`${this.API_PREFIX}/members/@me/hide-form`)\r\n }\r\n // end of temp code\r\n\r\n public static uploadUserGeneratedContent(\r\n tournamentId: string,\r\n file: FormData,\r\n axiosConfig?: AxiosRequestConfig\r\n ): AxiosPromise> {\r\n return axios.post(\r\n `${this.API_PREFIX}/tournaments/${tournamentId}/usercontent`,\r\n file,\r\n axiosConfig\r\n )\r\n }\r\n}\r\n","module.exports = __webpack_public_path__ + \"img/tournament_logo.8316a7dc.png\";","import axios from '@/utils/request'\r\nimport { AxiosPromise } from 'axios'\r\nimport { BaseResponse, ResponseStatus } from '.'\r\n\r\nexport { BaseResponse, ResponseStatus }\r\n\r\nexport interface AccountInfo {\r\n userId: string\r\n phoneNumber: string\r\n phoneNumberConfirmed: boolean\r\n discordId: string\r\n}\r\n\r\nexport interface AddPhoneNumberRequest {\r\n phoneNumber: string\r\n}\r\n\r\nexport interface ConfirmPhoneNumberRequest {\r\n phoneNumber: string\r\n verificationCode: string\r\n}\r\n\r\nexport interface SetDiscordIdRequest {\r\n discordId: string | null\r\n}\r\n\r\nexport class IdentityAPI {\r\n public static BASE_PATH = process.env.VUE_APP_IDENTITY_API_ENDPOINT\r\n public static API_PREFIX = '/api/v1'\r\n\r\n public static getAccount(): AxiosPromise {\r\n return axios.get(`${this.BASE_PATH}${this.API_PREFIX}/account`)\r\n }\r\n\r\n public static addAccountPhoneNumber(\r\n request: AddPhoneNumberRequest\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.BASE_PATH}${this.API_PREFIX}/account/phone_number`,\r\n request\r\n )\r\n }\r\n\r\n public static setAccountDiscordId(\r\n request: SetDiscordIdRequest\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.BASE_PATH}${this.API_PREFIX}/account/discord_id`,\r\n request\r\n )\r\n }\r\n\r\n public static confirmAccountPhoneNumberRequest(\r\n request: ConfirmPhoneNumberRequest\r\n ): AxiosPromise {\r\n return axios.post(\r\n `${this.BASE_PATH}${this.API_PREFIX}/account/phone_number/confirm`,\r\n request\r\n )\r\n }\r\n}\r\n","import { VuexModule, Module, Action, Mutation } from 'vuex-module-decorators'\r\nimport { IMatchState } from '@/store/types'\r\nimport store from '@/store'\r\nimport {\r\n MatchEntity,\r\n MatchAPI,\r\n MatchGameEntity,\r\n MatchGameResultEntity,\r\n JoinableMatchEntity,\r\n LeagueLobby\r\n} from '@/api/match'\r\nimport { TournamentAPI, TournamentEntity } from '@/api/tournament'\r\nimport { StageEntity } from '@/api/stage'\r\n\r\n@Module({ dynamic: true, store: store, namespaced: true, name: 'match' })\r\nexport default class MatchModule extends VuexModule implements IMatchState {\r\n match: MatchEntity | null = null\r\n matchGame: MatchGameEntity | null = null\r\n matchGameResults: MatchGameResultEntity[] = []\r\n joinableMatchRooms: JoinableMatchEntity[] | null = null\r\n tournament: TournamentEntity | null = null\r\n stage: StageEntity | null = null\r\n\r\n matchCoreRulesDialogVisible: boolean = false\r\n mobileFooterVisible: boolean = true\r\n\r\n // Reset everything\r\n\r\n @Mutation\r\n RESET_MATCH() {\r\n this.match = null\r\n this.matchGame = null\r\n this.matchGameResults = []\r\n this.tournament = null\r\n }\r\n\r\n @Action\r\n async resetMatchData() {\r\n this.context.commit('RESET_MATCH')\r\n }\r\n\r\n /* Get match room details */\r\n\r\n @Mutation\r\n SET_MATCH(data: MatchEntity) {\r\n this.match = data\r\n }\r\n\r\n @Action({ rawError: true })\r\n async fetchMatch(matchId: string, reload: boolean = false) {\r\n if (reload) {\r\n this.context.commit('SET_MATCH', null)\r\n }\r\n\r\n try {\r\n const res = await MatchAPI.getMatch(matchId)\r\n this.context.commit('SET_MATCH', res.data.payload)\r\n } catch (err) {\r\n this.context.commit('SET_MATCH', null)\r\n throw err\r\n }\r\n }\r\n\r\n /* Get tournament details */\r\n\r\n @Mutation\r\n SET_TOURNAMENT(data: TournamentEntity) {\r\n this.tournament = data\r\n }\r\n\r\n @Action({ rawError: true })\r\n async fetchTournament() {\r\n if (!this.match || !this.match.relatedTournament) {\r\n this.context.commit('SET_TOURNAMENT', null)\r\n return\r\n }\r\n\r\n try {\r\n const res = await TournamentAPI.getTournament(\r\n this.match.relatedTournament.tournamentId\r\n )\r\n this.context.commit('SET_TOURNAMENT', res.data.payload)\r\n } catch (err) {\r\n this.context.commit('SET_TOURNAMENT', null)\r\n throw err\r\n }\r\n }\r\n\r\n /* Get stage details */\r\n\r\n @Mutation\r\n SET_STAGE(data: StageEntity) {\r\n this.stage = data\r\n }\r\n\r\n @Action({ rawError: true })\r\n async fetchStage() {\r\n if (!this.match || !this.match.relatedTournament) {\r\n this.context.commit('SET_STAGE', null)\r\n return\r\n }\r\n\r\n try {\r\n const res = await TournamentAPI.getStage(\r\n this.match.relatedTournament.stageId\r\n )\r\n this.context.commit('SET_STAGE', res.data.payload)\r\n } catch (err) {\r\n this.context.commit('SET_STAGE', null)\r\n throw err\r\n }\r\n }\r\n\r\n /* Get match games */\r\n\r\n @Mutation\r\n SET_MATCH_GAME_RESULTS(data: MatchGameResultEntity[]) {\r\n this.matchGameResults = data\r\n }\r\n\r\n @Action({ rawError: true })\r\n async fetchMatchGameResults(matchGameId: string) {\r\n this.context.commit('SET_MATCH_GAME_RESULTS', null)\r\n try {\r\n const res = await MatchAPI.getMatchGameResults(matchGameId)\r\n this.context.commit('SET_MATCH_GAME_RESULTS', res.data.payload)\r\n } catch (err) {\r\n throw err\r\n }\r\n }\r\n\r\n @Action\r\n async updateMatchGameResults(payload: MatchGameResultEntity[]) {\r\n this.context.commit('SET_MATCH_GAME_RESULTS', payload)\r\n }\r\n\r\n /* Get match room games */\r\n\r\n @Mutation\r\n SET_MATCH_GAME(data: MatchGameEntity) {\r\n this.matchGame = data\r\n }\r\n\r\n @Action({ rawError: true })\r\n async fetchMatchGame(matchGameId: string, reload: boolean = false) {\r\n if (reload) {\r\n this.context.commit('SET_MATCH_GAME', null)\r\n }\r\n try {\r\n const res = await MatchAPI.getMatchGame(matchGameId)\r\n this.context.commit('SET_MATCH_GAME', res.data.payload)\r\n } catch (err) {\r\n this.context.commit('SET_MATCH_GAME', null)\r\n throw err\r\n }\r\n }\r\n\r\n /* Get joinable match rooms */\r\n\r\n @Mutation\r\n SET_JOINABLE_MATCHROOMS(data: JoinableMatchEntity[]) {\r\n this.joinableMatchRooms = data\r\n }\r\n\r\n @Action\r\n async getMemberJoinableMatchRooms(memberId: string = '@me') {\r\n try {\r\n const res = await MatchAPI.getMemberJoinableMatchRooms(memberId)\r\n this.context.commit('SET_JOINABLE_MATCHROOMS', res.data.payload)\r\n } catch {\r\n this.context.commit('SET_JOINABLE_MATCHROOMS', null)\r\n }\r\n }\r\n\r\n get memberJoinableMatchRooms(): JoinableMatchEntity[] | null {\r\n return this.joinableMatchRooms\r\n }\r\n\r\n // Get match room chat message\r\n\r\n @Action({ rawError: true })\r\n async getChatMessages(page: number) {\r\n try {\r\n const res = await MatchAPI.getChatMessages(this.match!.matchId, page)\r\n return res.data.payload\r\n } catch (err) {\r\n throw err\r\n }\r\n }\r\n\r\n // Core Rules\r\n @Mutation\r\n SET_MATCH_CORE_RULES_DIALOG_VISIBLE(visible: boolean) {\r\n this.matchCoreRulesDialogVisible = visible\r\n }\r\n\r\n @Action\r\n setMatchCoreRulesDialogVisible(visible: boolean) {\r\n this.context.commit('SET_MATCH_CORE_RULES_DIALOG_VISIBLE', visible)\r\n }\r\n\r\n get isMatchCoreRulesDialogVisible() {\r\n return this.matchCoreRulesDialogVisible\r\n }\r\n\r\n // League lobby\r\n @Mutation\r\n SET_LEAGUE_LOBBY(lobby: LeagueLobby | null) {\r\n if (!this.match) return\r\n this.match = {\r\n ...this.match,\r\n leagueLobby: lobby\r\n }\r\n }\r\n\r\n @Action\r\n setLeagueLobby(lobby: LeagueLobby | null) {\r\n this.context.commit('SET_LEAGUE_LOBBY', lobby)\r\n }\r\n\r\n // Match footer visible\r\n @Mutation\r\n SET_MATCH_FOOTER_VISIBLE(visible: boolean) {\r\n this.mobileFooterVisible = visible\r\n }\r\n\r\n @Action({ rawError: true })\r\n setMatchFooterVisible(visible: boolean) {\r\n this.context.commit('SET_MATCH_FOOTER_VISIBLE', visible)\r\n }\r\n}\r\n","export const CampaignRoute = {\r\n path: '*',\r\n props: true,\r\n redirect: {\r\n name: 'Landing'\r\n }\r\n // components: {\r\n // default: () =>\r\n // import(/* webpackChunkName: \"campaign-layout\" */ '../CampaignLayout.vue'),\r\n // overlay: () =>\r\n // import(\r\n // /* webpackChunkName: \"overlay-tournament-catalog\" */ '../components/CampaignFooter.vue'\r\n // )\r\n // },\r\n // children: [\r\n // {\r\n // path: '',\r\n // name: 'CNY2021Home',\r\n // props: true,\r\n // component: () =>\r\n // import(\r\n // /* webpackChunkName: \"campaign-view\" */ '../views/CNY2021Home.vue'\r\n // ),\r\n // meta: {\r\n // title: '福牛利是'\r\n // }\r\n // },\r\n // {\r\n // path: 'missions',\r\n // name: 'CNY2021DailyMissions',\r\n // props: true,\r\n // component: () =>\r\n // import(\r\n // /* webpackChunkName: \"campaign-view\" */ '../views/CNY2021DailyMissions.vue'\r\n // ),\r\n // meta: {\r\n // title: '福牛任務'\r\n // }\r\n // },\r\n // {\r\n // path: 'records',\r\n // name: 'CNY2021Records',\r\n // props: true,\r\n // component: () =>\r\n // import(\r\n // /* webpackChunkName: \"campaign-view\" */ '../views/CNY2021Records.vue'\r\n // ),\r\n // meta: {\r\n // title: '抽獎記錄'\r\n // }\r\n // }\r\n // ]\r\n}\r\n\r\nexport default {\r\n path: '/',\r\n redirect: {\r\n name: 'Landing'\r\n },\r\n // component: () =>\r\n // import(\r\n // /* webpackChunkName: \"app-layout\" */ '@/modules/shared/AppLayout.vue'\r\n // ),\r\n children: [CampaignRoute]\r\n}\r\n","import { MemberEntity } from '@/api/member'\r\nimport store from '@/store'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport authStore from '@/modules/auth/auth.store'\r\nexport interface LiveChatSessionVariables {\r\n memberId: string\r\n nickName: string\r\n firstName: string\r\n lastName: string\r\n email: string\r\n phoneNumber: string\r\n country: string\r\n}\r\n\r\nclass LiveChatAPI {\r\n // Setter\r\n setSessionVariables(payload: LiveChatSessionVariables | null) {\r\n ;(window as any).LiveChatWidget.call('set_session_variables', payload)\r\n }\r\n\r\n updateSessionVariables(payload: LiveChatSessionVariables | null) {\r\n ;(window as any).LiveChatWidget.call('set_session_variables', payload)\r\n }\r\n\r\n setCustomerName(name: string) {\r\n ;(window as any).LiveChatWidget.call('set_customer_name', name)\r\n }\r\n\r\n setCustomerEmail(email: string) {\r\n ;(window as any).LiveChatWidget.call('set_customer_email', email)\r\n }\r\n\r\n // Method\r\n maximize() {\r\n ;(window as any).LiveChatWidget.call('maximize')\r\n }\r\n\r\n minimize() {\r\n ;(window as any).LiveChatWidget.call('minimize')\r\n }\r\n\r\n hide() {\r\n ;(window as any).LiveChatWidget.call('hide')\r\n }\r\n\r\n destroy() {\r\n try {\r\n console.log('Destroying livechat')\r\n ;(window as any).LiveChatWidget.call('destroy')\r\n } catch {}\r\n }\r\n\r\n hideGreeting() {\r\n ;(window as any).LiveChatWidget.call('hide_greeting')\r\n }\r\n\r\n // setup\r\n setup() {\r\n try {\r\n const authModule = getModule(authStore, store)\r\n let member = authModule.member\r\n if (!member) {\r\n return\r\n }\r\n this.setCustomerEmail(member.contactEmail)\r\n this.setCustomerName(member.nickname)\r\n this.updateSessionVariables({\r\n memberId: member.memberId,\r\n nickName: member.nickname,\r\n firstName: member.firstName,\r\n lastName: member.lastName,\r\n email: member.contactEmail,\r\n phoneNumber: member.contactPhone,\r\n country: member.country\r\n })\r\n this.minimize()\r\n } catch {\r\n // Reset session\r\n this.setSessionVariables(null)\r\n this.hide()\r\n }\r\n }\r\n}\r\n\r\nexport default new LiveChatAPI()\r\n","import { DesktopCapturerSource } from 'electron'\r\nimport { isElectron } from './electron'\r\n\r\nexport enum ScreenSourceType {\r\n SOURCE_SCREEN = 'screen',\r\n SOURCE_WINDOW = 'window'\r\n}\r\n\r\nexport async function getScreenSources(\r\n sourceType: ScreenSourceType | null = null\r\n) {\r\n if (!isElectron()) {\r\n console.log('Not support getting screen sources in non-electron mode')\r\n return\r\n }\r\n if (!window.capturer) return\r\n\r\n try {\r\n // invoke main process to read from file system\r\n return window.capturer.getSources({\r\n types: sourceType\r\n ? [sourceType]\r\n : [ScreenSourceType.SOURCE_SCREEN, ScreenSourceType.SOURCE_WINDOW],\r\n thumbnailSize: {\r\n width: 1920,\r\n height: 1080\r\n }\r\n })\r\n } catch (err) {\r\n throw err\r\n }\r\n}\r\n","import { IpcRendererEvent } from 'electron'\r\nimport { CheckInRoleType, MatchAPI } from '@/api/match'\r\nimport { isElectron } from '@/utils/electron'\r\nimport matchStore from '@/modules/match/match.store'\r\nimport userStore from '@/modules/auth/auth.store'\r\nimport integrationStore from '@/modules/integration/integration.store'\r\nimport store from '@/store'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport { GetLocalPlayerResponse } from '@main/integrations/lcu/api/player'\r\nimport { EndOfGameResult } from '@/modules/integration/types/EndOfGameResult'\r\nimport ServerError from '@/utils/server_error'\r\nimport { AllLiveGameData } from '@main/integrations/lcu/liveclient/types'\r\nimport { getScreenSources, ScreenSourceType } from '../screencapture'\r\nimport { env } from 'process'\r\n\r\n// increase this value for shitty computer\r\nconst INTEGRATION_RETRY_INTERVAL = 10 * 1000\r\n\r\nexport default class LeagueIntegration {\r\n private static retryTimer: NodeJS.Timeout | null = null\r\n private static matchGameId: string | null = null\r\n\r\n /**\r\n * Initialize integration. It should be called on app startup.\r\n */\r\n static init() {\r\n if (!isElectron()) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log(\r\n '[INTEGRATION] Game integration disabled in non-desktop-client mode.'\r\n )\r\n }\r\n return\r\n }\r\n\r\n // listen global events here\r\n window.ipcRenderer.on('lol:game-result', LeagueIntegration.onGameResult)\r\n window.ipcRenderer.on(\r\n 'lol:game-result-aram',\r\n LeagueIntegration.onGameResultARAM\r\n )\r\n }\r\n\r\n /**\r\n * Start LOL integration session\r\n * @param matchGameId\r\n */\r\n static async start(matchGameId: string) {\r\n if (!isElectron()) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log(\r\n '[INTEGRATION] Game integration disabled in non-desktop-client mode.'\r\n )\r\n }\r\n return\r\n }\r\n\r\n if (LeagueIntegration.matchGameId) {\r\n console.log('Already started integration for LOL')\r\n return\r\n }\r\n\r\n LeagueIntegration.matchGameId = matchGameId\r\n LeagueIntegration.subscribeEvents()\r\n\r\n await window.ipcRenderer.send('game-integration-start', {\r\n game: 'lol',\r\n matchGameId\r\n })\r\n }\r\n\r\n /**\r\n * Stop everything immediately\r\n */\r\n static async stop() {\r\n if (!isElectron()) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log(\r\n '[INTEGRATION] Game integration disabled in non-desktop-client mode.'\r\n )\r\n }\r\n return\r\n }\r\n\r\n if (LeagueIntegration.retryTimer) {\r\n clearInterval(LeagueIntegration.retryTimer)\r\n LeagueIntegration.retryTimer = null\r\n }\r\n\r\n await window.ipcRenderer.send('game-integration-stop', {\r\n game: 'lol'\r\n })\r\n\r\n LeagueIntegration.unsubscribeEvents()\r\n LeagueIntegration.matchGameId = null\r\n }\r\n\r\n private static async onGameResult(\r\n event: IpcRendererEvent,\r\n data: {\r\n matchGameId: string\r\n stats: EndOfGameResult\r\n isWinner: boolean\r\n screenshot: Uint8Array\r\n }\r\n ) {\r\n console.log('lol:game-result - matchGameId = ', data.matchGameId)\r\n\r\n const statsBlob = new Blob([JSON.stringify(data.stats, null, 2)], {\r\n type: 'application/json'\r\n })\r\n\r\n const screenshotBlob = new Blob([data.screenshot], {\r\n type: 'image/jpeg'\r\n })\r\n\r\n const integrationModule = getModule(integrationStore, store)\r\n await integrationModule.setResult({\r\n result: data.stats,\r\n gameMode: data.stats.gameMode,\r\n isWinner: data.isWinner,\r\n isSoloGame:\r\n data.stats.teams.filter(team => team.players.length <= 1).length === 2\r\n })\r\n await integrationModule.setEvidenceBlobs([screenshotBlob])\r\n\r\n // Submit Match data JSON\r\n try {\r\n await MatchAPI.submitMatchGameEvidence(data.matchGameId, statsBlob, true)\r\n } catch (err) {\r\n console.error('Unable to submit game integration data (stats)', err)\r\n }\r\n\r\n // Submit Match Screenshot\r\n try {\r\n await MatchAPI.submitMatchGameEvidence(\r\n data.matchGameId,\r\n screenshotBlob,\r\n true\r\n )\r\n } catch (err) {\r\n console.error('Unable to submit game integration data (screenshot)', err)\r\n }\r\n\r\n if (window.ipcRenderer) {\r\n window.ipcRenderer.send('focus-window')\r\n }\r\n }\r\n\r\n private static async onGameResultARAM(\r\n event: IpcRendererEvent,\r\n data: {\r\n matchGameId: string\r\n isWinner: boolean\r\n result: AllLiveGameData\r\n }\r\n ) {\r\n console.log('lol:game-result-aram - matchGameId = ', data.matchGameId)\r\n\r\n const integrationModule = getModule(integrationStore, store)\r\n const sources = await getScreenSources(ScreenSourceType.SOURCE_SCREEN)\r\n for (const source of sources!) {\r\n console.log('[Capturer] Retrieved screenshot from', source.name)\r\n const screenshotBlob = new Blob([source.thumbnail.toPNG()], {\r\n type: 'image/png'\r\n })\r\n await integrationModule.addEvidenceBlob(screenshotBlob)\r\n }\r\n\r\n const statsBlob = new Blob([JSON.stringify(data.result, null, 2)], {\r\n type: 'application/json'\r\n })\r\n try {\r\n await MatchAPI.submitMatchGameEvidence(data.matchGameId, statsBlob, true)\r\n } catch (err) {\r\n console.error('Unable to submit game integration data (stats)', err)\r\n }\r\n\r\n const isSoloGame = data.result.allPlayers.length <= 2\r\n await integrationModule.setResult({\r\n result: data.result,\r\n isWinner: data.isWinner,\r\n gameMode: data.result.gameData.gameMode,\r\n isSoloGame: isSoloGame\r\n })\r\n\r\n if (window.ipcRenderer) {\r\n setTimeout(() => {\r\n window.ipcRenderer.send('focus-window')\r\n }, 60 * 1000)\r\n }\r\n }\r\n\r\n private static async onError(event: IpcRendererEvent) {\r\n console.log(\r\n 'LcuConnector has an unrecoverable error occured. Fallback to manual submit result'\r\n )\r\n\r\n const integrationModule = getModule(integrationStore, store)\r\n await integrationModule.updateConnectionState(false)\r\n\r\n // meanwhile, retry in the background. stop previously retry timer first just in case\r\n if (LeagueIntegration.retryTimer) {\r\n clearInterval(LeagueIntegration.retryTimer)\r\n LeagueIntegration.retryTimer = null\r\n }\r\n\r\n LeagueIntegration.retryTimer = setInterval(\r\n LeagueIntegration.onRetryTimer,\r\n INTEGRATION_RETRY_INTERVAL\r\n )\r\n }\r\n\r\n private static async onReady(event: IpcRendererEvent) {\r\n console.log('Game is connected. Tell the user it is ready to go')\r\n\r\n const integrationModule = getModule(integrationStore, store)\r\n await integrationModule.updateConnectionState(true, this.matchGameId)\r\n // stop retrying if we are\r\n if (LeagueIntegration.retryTimer) {\r\n clearInterval(LeagueIntegration.retryTimer)\r\n LeagueIntegration.retryTimer = null\r\n }\r\n\r\n const matchModule = getModule(matchStore, store)\r\n const userModule = getModule(userStore, store)\r\n\r\n if (\r\n matchModule.matchGame &&\r\n matchModule.match &&\r\n matchModule.match.leagueMap !== null\r\n ) {\r\n // check if lobby hasn't been created\r\n if (matchModule.match.leagueLobby) {\r\n // find which team it is\r\n const checkIn = matchModule.matchGame!.checkIns.find(\r\n checkIn => checkIn.member.memberId === userModule.userId\r\n )\r\n\r\n // find which team it is\r\n const matchTeamId = checkIn!.matchTeamId\r\n const teamOneMatchTeamId = matchModule.matchGame!.teams[0].matchTeamId\r\n\r\n // do not join for the one who is creating custom game\r\n if (\r\n teamOneMatchTeamId === matchTeamId &&\r\n checkIn!.role === CheckInRoleType.Captain\r\n ) {\r\n return\r\n }\r\n\r\n await integrationModule.joinCustomGame({\r\n lobby: matchModule.match.leagueLobby,\r\n team: teamOneMatchTeamId === matchTeamId ? 'one' : 'two'\r\n })\r\n } else {\r\n // get team 0 captain\r\n const team0Id = matchModule.matchGame.teams[0].matchTeamId\r\n const captainMemberId = matchModule.matchGame.checkIns.find(\r\n checkIn =>\r\n checkIn.matchTeamId === team0Id &&\r\n checkIn.role === CheckInRoleType.Captain\r\n )!.member.memberId\r\n\r\n // check if im team 0 leader\r\n if (userModule.memberId === captainMemberId) {\r\n console.log('Creating custom game.')\r\n\r\n // let's create match\r\n const password = (\r\n Math.floor(Math.random() * 999999) + 100000\r\n ).toString()\r\n const name =\r\n '[VSARENA] ' +\r\n matchModule.match.matchId.substr(0, 6) +\r\n '-' +\r\n Math.ceil(Math.random() * 100000)\r\n\r\n let customGameId = ''\r\n let retries = 10\r\n\r\n while (retries >= 0 && customGameId === '') {\r\n customGameId = await window.ipcRenderer.invoke(\r\n 'lol:create-custom-game',\r\n {\r\n lobbyName: name,\r\n lobbyPassword: password,\r\n teamSize: 5,\r\n mapId: matchModule.match.leagueMap,\r\n mutatorId: matchModule.match.leaguePickMode\r\n }\r\n )\r\n\r\n await new Promise(resolve => {\r\n setTimeout(resolve, 1000)\r\n })\r\n\r\n retries--\r\n }\r\n\r\n if (customGameId === '') {\r\n await integrationModule.setJoiningCustomGameFailed(true)\r\n return\r\n }\r\n\r\n // send the custom game ID to server\r\n try {\r\n await MatchAPI.updateLeagueLobby(\r\n matchModule.match.matchId,\r\n customGameId,\r\n name,\r\n password\r\n )\r\n\r\n console.log(\r\n 'League lobby updated to backend.',\r\n customGameId,\r\n name,\r\n password\r\n )\r\n } catch (err) {\r\n console.error('Unable to update league lobby to backend.', err)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static async onClose(event: IpcRendererEvent) {\r\n const integrationModule = getModule(integrationStore, store)\r\n await integrationModule.updateConnectionState(false)\r\n }\r\n\r\n private static async onRetry(\r\n event: IpcRendererEvent,\r\n args: { retries: number }\r\n ) {\r\n console.log('Game conenction lost. Retrying...', args.retries)\r\n const integrationModule = getModule(integrationStore, store)\r\n await integrationModule.updateConnectionState(false)\r\n }\r\n\r\n private static async onRetryTimer() {\r\n console.log('Retrying integration session...')\r\n await window.ipcRenderer.send('game-integration-start', {\r\n game: 'lol',\r\n matchGameId: LeagueIntegration.matchGameId\r\n })\r\n }\r\n\r\n private static async onUserInfoReceived(\r\n event: IpcRendererEvent,\r\n args: GetLocalPlayerResponse\r\n ) {\r\n console.log('Received LCU local session user info')\r\n const integrationModule = getModule(integrationStore, store)\r\n await integrationModule.updateUserInfo(args)\r\n }\r\n\r\n private static subscribeEvents() {\r\n window.ipcRenderer.on('lol:user', LeagueIntegration.onUserInfoReceived)\r\n\r\n // connection state\r\n window.ipcRenderer.on('lol:ready', LeagueIntegration.onReady)\r\n window.ipcRenderer.on('lol:error', LeagueIntegration.onError)\r\n window.ipcRenderer.on('lol:close', LeagueIntegration.onClose)\r\n window.ipcRenderer.on('lol:retry', LeagueIntegration.onRetry)\r\n }\r\n\r\n private static unsubscribeEvents() {\r\n window.ipcRenderer.off('lol:user', LeagueIntegration.onUserInfoReceived)\r\n\r\n // connection state\r\n window.ipcRenderer.off('lol:ready', LeagueIntegration.onReady)\r\n window.ipcRenderer.off('lol:error', LeagueIntegration.onError)\r\n window.ipcRenderer.off('lol:close', LeagueIntegration.onClose)\r\n window.ipcRenderer.off('lol:retry', LeagueIntegration.onRetry)\r\n }\r\n}\r\n","import Vue from 'vue'\r\nimport axios, { AxiosError } from 'axios'\r\nimport store from '@/store'\r\nimport ServerError from '@/utils/server_error'\r\n\r\nimport userStore from '@/modules/auth/auth.store'\r\nimport layoutStore from '@/modules/shared/layout.store'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport { setTimeOffset } from '@/utils/time'\r\nimport i18n from '@/lang'\r\nimport { isElectron } from '@/utils/electron'\r\nimport { ResponseStatus } from '@/api'\r\nimport { checkForUpdates, isDownloadingUpdates } from '@/utils/autoUpdate'\r\nimport getAPIEndpoint from '@/utils/endpoint'\r\n\r\nlet headers = {\r\n 'X-Client-Type': isElectron() ? 'DesktopClient' : 'WebApp',\r\n 'X-Client-Version': process.env.PACKAGE_VERSION || '0.0.0'\r\n}\r\n\r\nconst service = axios.create({\r\n baseURL: getAPIEndpoint(),\r\n timeout: 30 * 1000,\r\n headers\r\n})\r\n\r\nservice.interceptors.request.use(\r\n config => {\r\n const userModule = getModule(userStore, store)\r\n config.headers['Accept-Language'] = i18n.locale\r\n\r\n let token = userModule.getAuthToken\r\n\r\n if (!isElectron() && !token && !userModule.oidcAccessToken) {\r\n token = localStorage.getItem('access_token')\r\n }\r\n\r\n if (token && !config.headers['Authorization']) {\r\n config.headers['Authorization'] = 'Bearer ' + token\r\n }\r\n\r\n return Promise.resolve(config)\r\n },\r\n error => {\r\n return Promise.reject(error)\r\n }\r\n)\r\n\r\n// 400 client update interceptor\r\nservice.interceptors.response.use(\r\n response => {\r\n return response\r\n },\r\n async (error: AxiosError) => {\r\n // Ignore any non 400 bad request\r\n if (\r\n !error.response ||\r\n error.response!.status !== 400 ||\r\n !error.response!.data ||\r\n !error.response!.data.status\r\n ) {\r\n throw error\r\n }\r\n\r\n if (error.response!.data!.status === ResponseStatus.UpdateRequired) {\r\n // check if update is in progress\r\n if (await isDownloadingUpdates()) {\r\n return\r\n }\r\n\r\n const layoutModule = getModule(layoutStore, store)\r\n layoutModule.setUpdateDownloadProgress({\r\n bytesPerSecond: 0,\r\n percent: 0,\r\n total: 0,\r\n transferred: 0\r\n })\r\n\r\n await checkForUpdates()\r\n }\r\n\r\n throw error\r\n }\r\n)\r\n\r\n// 401 response token refresh interceptor\r\nservice.interceptors.response.use(\r\n response => {\r\n return response\r\n },\r\n async (error: AxiosError) => {\r\n const userModule = getModule(userStore, store)\r\n // Do not refresh token if we haven't login\r\n if (!userModule.hasLoggedIn) {\r\n throw error\r\n }\r\n\r\n // Ignore any non 401 unauthorized response\r\n if (!error.response || error.response!.status !== 401) {\r\n throw error\r\n }\r\n // Remove session info if refresh token failed\r\n if (error.config.url === '/auth/v1/refreshToken') {\r\n Vue.prototype.$toast.error(\r\n 'Your session has been expired.\\nPlease re-try login.'\r\n )\r\n\r\n throw error\r\n }\r\n\r\n // Try to refresh token\r\n await userModule.requestTokenRefresh()\r\n\r\n // Attempt to re-fire the request\r\n const token = userModule.getAuthToken\r\n\r\n if (token) {\r\n // New request with new token\r\n const config = error.config\r\n config.headers['Authorization'] = `Bearer ${token}`\r\n\r\n try {\r\n return axios.request(config)\r\n } catch (error) {\r\n throw error\r\n }\r\n } else {\r\n throw error\r\n }\r\n }\r\n)\r\n\r\nservice.interceptors.response.use(\r\n response => {\r\n return response\r\n },\r\n async (error: AxiosError) => {\r\n // Ignore any non 451 unavailable for legal reason request\r\n if (!error.response || error.response!.status !== 451) {\r\n throw error\r\n }\r\n window.ipcRenderer.send('quit-unofficial-copy')\r\n\r\n throw error\r\n }\r\n)\r\n\r\n// Response code handling : Response Interceptor\r\nservice.interceptors.response.use(\r\n response => {\r\n if (response.data.serverTime) {\r\n setTimeOffset(new Date(response.data.serverTime * 1000))\r\n }\r\n\r\n return response\r\n },\r\n async error => {\r\n if (error.isAxiosError) {\r\n return Promise.reject(new ServerError(error))\r\n } else {\r\n return Promise.reject(error)\r\n }\r\n }\r\n)\r\n\r\nexport default service\r\n","import { HubConnectionBuilder, HubConnection } from '@microsoft/signalr'\r\nimport * as signalR from '@microsoft/signalr'\r\nimport store from '@/store'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport authStore from '@/modules/auth/auth.store'\r\nimport sharedStore from '@/modules/shared/shared.store'\r\nimport { CancelError, CancellationToken } from '@/utils/cancel'\r\nimport getAPIEndpoint from '@/utils/endpoint'\r\n\r\nlet connection: HubConnection | null = null\r\nlet connecting = false\r\nlet realtimeEventTarget = new EventTarget()\r\n\r\nexport { realtimeEventTarget }\r\n\r\nexport function getRealtimeConnection(\r\n cancellationToken: CancellationToken | null = null\r\n): Promise {\r\n return new Promise(async (resolve, reject) => {\r\n setTimeout(async () => {\r\n // just resolve with the connection if we are connected\r\n if (connection) {\r\n resolve(connection)\r\n return\r\n }\r\n\r\n function onConnect() {\r\n if (cancellationToken && cancellationToken.cancelled) {\r\n reject(new CancelError())\r\n } else {\r\n resolve(connection!)\r\n }\r\n\r\n realtimeEventTarget.removeEventListener('connect', onConnect)\r\n }\r\n\r\n realtimeEventTarget.addEventListener('connect', onConnect)\r\n\r\n // fire a connection unless someone else is already doing that\r\n if (!connecting) {\r\n connecting = true\r\n\r\n const authModule = getModule(authStore, store)\r\n if (!authModule.getAuthToken) {\r\n await authModule.requestNewToken()\r\n }\r\n\r\n const token = authModule.getAuthToken\r\n\r\n let url = getAPIEndpoint() + '/realtime'\r\n let queryStr = []\r\n if (token) queryStr.push('access_token=' + encodeURIComponent(token))\r\n if (queryStr.length) url += '?' + queryStr.join('&')\r\n const conn = new HubConnectionBuilder()\r\n .withUrl(url)\r\n .withAutomaticReconnect({\r\n nextRetryDelayInMilliseconds() {\r\n return Math.random() * 5000\r\n }\r\n })\r\n .configureLogging(signalR.LogLevel.Debug)\r\n .build()\r\n\r\n conn.serverTimeoutInMilliseconds = 60 * 1000\r\n conn.keepAliveIntervalInMilliseconds = 20 * 1000\r\n\r\n conn.onreconnecting(error => {\r\n realtimeEventTarget.dispatchEvent(\r\n new CustomEvent('reconnecting', {\r\n detail: error\r\n })\r\n )\r\n })\r\n\r\n conn.onreconnected(connectionId => {\r\n realtimeEventTarget.dispatchEvent(\r\n new CustomEvent('reconnected', {\r\n detail: connectionId\r\n })\r\n )\r\n\r\n window.location.reload()\r\n })\r\n\r\n conn\r\n .start()\r\n .then(() => {\r\n connection = conn\r\n realtimeEventTarget.dispatchEvent(new Event('connect'))\r\n connecting = false\r\n })\r\n .catch(err => {\r\n // clean up if the connection has problem\r\n connection = null\r\n connecting = false\r\n reject(err)\r\n })\r\n }\r\n }, 500)\r\n })\r\n}\r\n\r\nexport async function closeRealtimeConnection() {\r\n const conn = connection\r\n connection = null\r\n connecting = false\r\n\r\n if (conn) await conn.stop()\r\n}\r\n\r\nexport async function reconnectRealtimeConnection() {\r\n // do nothing if we haven't connect to realtime service\r\n if (!connection) {\r\n return\r\n }\r\n\r\n await closeRealtimeConnection()\r\n await getRealtimeConnection()\r\n}\r\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./Bracket.vue?vue&type=style&index=0&id=55a53b08&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./Bracket.vue?vue&type=style&index=0&id=55a53b08&lang=scss&scoped=true&\"","import { VuexModule, Module, Action, Mutation } from 'vuex-module-decorators'\r\nimport { ISharedState } from '@/store/types'\r\nimport store from '@/store'\r\nimport {\r\n ConfigAPI,\r\n RegionInfo,\r\n SupportedAvatar,\r\n SupportedGame\r\n} from '@/api/config'\r\n\r\n@Module({ dynamic: true, store: store, namespaced: true, name: 'shared' })\r\nexport default class SharedModule extends VuexModule implements ISharedState {\r\n shouldRender: boolean = false\r\n\r\n applicationSupportedAvatars: SupportedAvatar[] = []\r\n applicationSupportedGames: SupportedGame[] = []\r\n applicationLocale: string = ''\r\n applicationRegions: RegionInfo[] = []\r\n suggestedRegion: string | null = null\r\n\r\n @Mutation\r\n SET_RENDER_ENABLE(enable: boolean) {\r\n this.shouldRender = enable\r\n }\r\n\r\n // Supported Avatars\r\n @Mutation\r\n SET_APPLICATION_SUPPORTED_AVATARS(avatars: SupportedAvatar[]) {\r\n this.applicationSupportedAvatars = avatars\r\n }\r\n\r\n @Action({ rawError: true })\r\n setApplicationSupportedAvatars(avatars: SupportedAvatar[]) {\r\n this.context.commit('SET_APPLICATION_SUPPORTED_AVATARS', avatars)\r\n }\r\n\r\n // Supported Games\r\n @Mutation\r\n SET_APPLICATION_SUPPORTED_GAMES(games: SupportedGame[]) {\r\n this.applicationSupportedGames = games\r\n }\r\n\r\n @Action({ rawError: true })\r\n setApplicationSupportedGames(games: SupportedGame[]) {\r\n this.context.commit('SET_APPLICATION_SUPPORTED_GAMES', games)\r\n }\r\n\r\n // Supported Regions\r\n @Mutation\r\n SET_APPLICATION_REGIONS(regions: RegionInfo[]) {\r\n this.applicationRegions = regions\r\n }\r\n\r\n @Action({ rawError: true })\r\n setApplicationRegions(regions: RegionInfo[]) {\r\n this.context.commit('SET_APPLICATION_REGIONS', regions)\r\n }\r\n\r\n // Suggested Region\r\n @Mutation\r\n SET_SUGGESTED_REGION(region: string) {\r\n this.suggestedRegion = region\r\n }\r\n\r\n @Action({ rawError: true })\r\n async updateSuggestedRegion() {\r\n try {\r\n const res = await ConfigAPI.getSuggestedRegion()\r\n this.context.commit(\r\n 'SET_SUGGESTED_REGION',\r\n res.data.payload ? res.data.payload.code : null\r\n )\r\n } catch (err) {\r\n // ignore error\r\n }\r\n }\r\n\r\n // Locale\r\n @Mutation\r\n SET_APPLICATION_LOCALE(locale: string) {\r\n this.applicationLocale = locale\r\n }\r\n\r\n @Action\r\n setApplicationLocale(locale: string) {\r\n this.context.commit('SET_APPLICATION_LOCALE', locale)\r\n }\r\n\r\n @Action\r\n rerender() {\r\n console.log('Rerender triggered.')\r\n\r\n this.context.commit('SET_RENDER_ENABLE', false)\r\n\r\n setTimeout(() => {\r\n this.context.commit('SET_RENDER_ENABLE', true)\r\n })\r\n }\r\n\r\n @Action\r\n stopRender() {\r\n this.context.commit('SET_RENDER_ENABLE', false)\r\n }\r\n\r\n @Action\r\n enableRender() {\r\n this.context.commit('SET_RENDER_ENABLE', true)\r\n }\r\n}\r\n"],"sourceRoot":""}