/// /* tslint:disable:no-bitwise */ import { PersonalAccountData } from "../api/account"; import { TournamentOptionsEnum } from "../api/tournament"; import { App } from "../app"; import { appConfig } from "../appconfig"; import * as authManager from "../authmanager"; import { AccountManager } from "../services/accountManager"; import { settings } from "../settings"; import { tableManager } from "../table/tablemanager"; import { TournamentView } from "../table/tournamentview"; declare var apiHost: string; declare var app: App; export class TableMenuPopup { public soundEnabled: KnockoutComputed; public autoSwitchTables: KnockoutComputed; public autoHideCards: KnockoutComputed; public showInRating: KnockoutObservable; public addMoneyAvailable = ko.observable(false); public addMoneyAllowed: KnockoutObservable; public handHistoryAllowed: KnockoutObservable; public leaveAllowed: KnockoutObservable; public accountStatusAllowed: KnockoutObservable; public tournamentInformationAllowed: KnockoutObservable; public rebuyAllowed: KnockoutObservable; public doublerebuyAllowed: KnockoutObservable; public addonAllowed: KnockoutObservable; public isTournamentTable: KnockoutObservable; public allowUsePersonalAccount: KnockoutObservable; public allowTickets: KnockoutObservable; public standupText: KnockoutComputed; /** * Tournament has rebuys. */ public tournamentHasRebuy = ko.observable(false); /** * Tournament has addons. */ public tournamentHasAddon = ko.observable(false); constructor() { this.soundEnabled = ko.computed({ owner: this, read() { return settings.soundEnabled(); }, write(value) { settings.soundEnabled(value); }, }); this.autoSwitchTables = ko.computed({ owner: this, read() { return settings.autoSwitchTables(); }, write(value) { settings.autoSwitchTables(value); }, }); this.autoHideCards = ko.computed({ owner: this, read() { return settings.autoHideCards(); }, write(value) { settings.autoHideCards(value); }, }); this.showInRating = ko.observable(false); this.addMoneyAllowed = ko.observable(false); this.handHistoryAllowed = ko.observable(false); this.leaveAllowed = ko.observable(false); this.accountStatusAllowed = ko.observable(false); this.tournamentInformationAllowed = ko.observable(false); this.rebuyAllowed = ko.observable(false); this.doublerebuyAllowed = ko.observable(false); this.addonAllowed = ko.observable(false); this.isTournamentTable = ko.observable(false); this.allowUsePersonalAccount = ko.observable(appConfig.joinTable.allowUsePersonalAccount); this.allowTickets = ko.observable(appConfig.joinTable.allowTickets); this.standupText = ko.pureComputed(() => { const currentTable = app.tablesPage.currentTable(); const player = currentTable.myPlayer(); if (player === null) { return "table.takeWin"; } const hasWin = player.Money() > 0 || currentTable.myPlayerInGame(); return hasWin ? "table.takeWin" : "table.leave"; }); } public async shown() { // Load settings const self = this; const currentTable = app.tablesPage.currentTable(); const playerIsInGame = currentTable.myPlayer() != null; this.addMoneyAvailable(currentTable.tournament() == null && currentTable.opened()); this.addMoneyAllowed(currentTable.couldAddChips()); this.handHistoryAllowed(playerIsInGame && currentTable.lastHandHistory() != null); this.leaveAllowed(!currentTable.myPlayerInGame() && currentTable.myPlayer().IsSitoutStatus()); this.accountStatusAllowed(authManager.authenticated()); const tournamentView = currentTable.tournament(); this.isTournamentTable(tournamentView != null); this.tournamentInformationAllowed(tournamentView != null); if (tournamentView !== null && currentTable.opened()) { // Set rebuy/addon status temporary to current tournament status // until data is loaded. // The rebuy and addons could be not supported by the // actual tournament so buttons should be hidden. const tdata = tournamentView.tournamentData(); this.tournamentHasRebuy((tdata.Options & TournamentOptionsEnum.HasRebuy) > 0); this.tournamentHasAddon((tdata.Options & TournamentOptionsEnum.HasAddon) > 0); if ((this.tournamentHasRebuy() || this.tournamentHasAddon()) && playerIsInGame) { const moneyInGame = currentTable.myPlayer().TotalBet() + currentTable.myPlayer().Money(); this.addonAllowed(tournamentView.addonAllowed() && tournamentView.addonCount() === 0); this.rebuyAllowed(tournamentView.rebuyAllowed() && (moneyInGame + tdata.ChipsAddedAtReBuy) <= tdata.MaximumAmountForRebuy && !currentTable.hasPendingMoney()); this.doublerebuyAllowed(tournamentView.rebuyAllowed() && (moneyInGame + tdata.ChipsAddedAtDoubleReBuy) <= tdata.MaximumAmountForRebuy); if (tournamentView.addonAllowed() || tournamentView.rebuyAllowed()) { const api = new AccountManager(); const data = await api.getAccount(); const personalAccount = data.Data; const currentMoney = self.getCurrentMoney(tournamentView, personalAccount); const addonPrice = tdata.AddonPrice + tdata.AddonFee; const rebuyPrice = tdata.RebuyFee + tdata.RebuyPrice; self.addonAllowed(self.addonAllowed() && addonPrice < currentMoney); self.rebuyAllowed(self.rebuyAllowed() && (rebuyPrice < currentMoney)); self.doublerebuyAllowed(self.doublerebuyAllowed() && ((2 * rebuyPrice) > currentMoney)); } } } else { this.tournamentHasRebuy(false); this.tournamentHasAddon(false); this.addonAllowed(false); this.rebuyAllowed(false); this.doublerebuyAllowed(false); } } public confirm() { app.closePopup(); } public cancel() { app.closePopup(); } public accountStatus() { if (!this.accountStatusAllowed()) { return; } app.showPopup("accountStatus"); } public handHistory() { if (!this.handHistoryAllowed()) { return; } const currentTable = app.tablesPage.currentTable(); app.handHistoryPopup.tableView(currentTable); app.showPopup("handHistory"); } public addMoney() { if (!this.addMoneyAllowed()) { return; } const currentTable = app.tablesPage.currentTable(); app.addMoneyPopup.tableView(currentTable); app.closePopup(); app.showPopup("addMoney").then(function(results: { name: string; result: any }) { if (results.result === "cancel") { app.executeCommand("popup.tableMenu"); } }); } public showTournamentInformation() { if (!this.tournamentInformationAllowed()) { return; } const currentTable = app.tablesPage.currentTable(); const tournamentView = currentTable.tournament(); app.lobbyPageBlock.showLobby(); app.lobbyPageBlock.selectTournament({ TournamentId: tournamentView.tournamentId }); app.tablesPage.deactivate(); this.confirm(); } public rebuy() { if (!this.rebuyAllowed()) { return; } const currentTable = app.tablesPage.currentTable(); currentTable.showRebuyPrompt(); } public doubleRebuy() { if (!this.doublerebuyAllowed()) { return; } const currentTable = app.tablesPage.currentTable(); currentTable.showDoubleRebuyPrompt(); } public addon() { if (!this.addonAllowed()) { return; } const currentTable = app.tablesPage.currentTable(); currentTable.showAddonPrompt(); } public async showSettingsPrompt() { const authenticated = await app.requireAuthentication(); if (authenticated) { app.executeCommand("popup.settings"); } } public async showRules() { const authenticated = await app.requireAuthentication(); if (authenticated) { app.executeCommand("popup.rules"); } } /** * Reload console window. */ public reload(): void { window.location.reload(); } public leave() { if (this.leaveAllowed()) { const index = tableManager.currentIndex(); const tableView = tableManager.tables()[index]; tableView.showStandupPrompt(); } } private getCurrentMoney(tournament: TournamentView, personalAccount: PersonalAccountData) { return personalAccount.RealMoney; } }