poker-html-client
Version:
HTML client for online poker
67 lines (58 loc) • 2.41 kB
text/typescript
import ko = require("knockout");
import { TournamentPrizeStructure } from "../../../api/information";
import { TournamentDefinition } from "../../../api/tournament";
import * as metadataManager from "../../../metadatamanager";
interface TournamentPrizeStructureView {
place: number;
amount: number;
percent: number;
}
class TournamentPrizeInformationComponent {
private data: KnockoutObservable<TournamentDefinition>;
private totalPrize: KnockoutComputed<number>;
private structure: KnockoutComputed<TournamentPrizeStructureView[]>;
constructor(params: { data: KnockoutObservable<TournamentDefinition> }) {
const self = this;
this.data = params.data;
this.totalPrize = ko.computed(function () {
const tdata = self.data();
if (tdata == null) {
return null;
}
return tdata.PrizeAmount + (tdata.CollectedPrizeAmount || 0);
}, this);
this.structure = ko.computed(function () {
const data = self.data();
if (data == null) {
return [];
}
const currentPlayers = data.JoinedPlayers;
const prizeStructure = metadataManager.prizes[data.WellKnownPrizeStructure];
const sortedPrizes = prizeStructure.sort(function (a, b) {
return a.MaxPlayer > b.MaxPlayer
? 1
: (a.MaxPlayer < b.MaxPlayer ? -1 : 0);
});
const filteredPrizes = sortedPrizes.filter(function (a) {
return a.MaxPlayer >= currentPlayers;
});
let currentPrize: TournamentPrizeStructure;
if (filteredPrizes.length === 0) {
currentPrize = sortedPrizes[0];
} else {
currentPrize = filteredPrizes[0];
}
const result = [] as TournamentPrizeStructureView[];
const totalPrize = self.totalPrize();
currentPrize.PrizeLevel.forEach(function (item, index) {
result.push({
place: index + 1,
amount: totalPrize * item / 100,
percent: item,
});
});
return result;
}, this);
}
}
export = TournamentPrizeInformationComponent;