1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
class Switch {
constructor(id, description, status) {
this.id = id;
this.status = typeof status !== "undefined" ? status : false;
this.description = description;
this.name = this.description + " " + (id + 1);
}
toggle() {
this.status = !this.status;
this.print();
}
print() {
let status = this.status ? "active" : "inactive";
console.log(this.name + " is currently " + status);
}
render() {
let color = this.status ? `` : `class="outline secondary"`;
let id = this.description + "_" + this.id;
return `<button id=${id} ${color}>${this.name}</button>`;
}
}
export class Court extends Switch {
constructor(id, status) {
super(id, "Court", status);
}
}
export class Regular extends Switch {
constructor(id, status, level, games, firstName, lastName) {
super(id, "Regular", status);
this.level = typeof level !== "undefined" ? level : 1;
this.games = typeof games !== "undefined" ? games : 0;
this.firstName =
typeof firstName !== "undefined" ? firstName : this.description;
this.lastName = typeof lastName !== "undefined" ? lastName : this.id + 1;
this.name = this.firstName + " " + this.lastName;
}
}
const guestCategories = {
0: { description: "Beginner", level: 1 },
1: { description: "Novice", level: 3 },
2: { description: "Intermediate", level: 6 },
};
export class Guest extends Switch {
maxCount = 6;
categoryCount = 3;
constructor(id, status, games) {
super(id, "Guest", status);
const categoryId = Math.floor(id / this.maxCount) || 0;
this.level = guestCategories[categoryId].level;
this.games = typeof games !== "undefined" ? games : 0;
const guestNumber = (id % this.maxCount) + 1;
this.firstName = guestCategories[categoryId].description;
this.lastName = guestNumber;
this.name = this.firstName + " " + this.lastName;
}
}
function renderPlayerName(player) {
return `<strong>${player.firstName}</strong> ${player.lastName}`;
}
export class Team {
constructor(playerOne, playerTwo) {
this.playerOne = playerOne;
this.playerTwo = playerTwo;
}
print() {
console.log("Team consists of:");
this.playerOne.print();
this.playerTwo.print();
}
render() {
const p1 = renderPlayerName(this.playerOne);
const p2 = renderPlayerName(this.playerTwo);
return p1 + `<br/><br/>` + p2;
}
}
export class Game extends Switch {
constructor(id, status, teamOne, teamTwo) {
super(id, "Game", status);
this.teamOne = teamOne;
this.teamTwo = teamTwo;
}
print() {
const teamOne =
this.teamOne.playerOne.firstName +
" and " +
this.teamOne.playerTwo.firstName;
const teamTwo =
this.teamTwo.playerOne.firstName +
" and " +
this.teamTwo.playerTwo.firstName;
console.log(
"Game " + this.id + ": " + teamOne + " is playing against " + teamTwo
);
}
render() {
const blockedState = this.teamOne.playerOne.firstName === "RESERVED";
const playerState = this.teamOne.render() + "<hr>" + this.teamTwo.render();
const type = blockedState ? `<h5>Reserved</p>` : playerState;
return `<article>
<header>Court ${this.id + 1}</header>${type}
</article>`;
}
}
|