be-components 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/Bracket/api/index.js +439 -0
- package/lib/commonjs/Bracket/api/index.js.map +1 -0
- package/lib/commonjs/Bracket/components/BracketCompetitionCard.js +570 -0
- package/lib/commonjs/Bracket/components/BracketCompetitionCard.js.map +1 -0
- package/lib/commonjs/Bracket/components/BracketCompetitionSelector.js +208 -0
- package/lib/commonjs/Bracket/components/BracketCompetitionSelector.js.map +1 -0
- package/lib/commonjs/Bracket/components/BracketPlay/BracketNavigator.js +142 -0
- package/lib/commonjs/Bracket/components/BracketPlay/BracketNavigator.js.map +1 -0
- package/lib/commonjs/Bracket/components/BracketPlay/BracketRound.js +94 -0
- package/lib/commonjs/Bracket/components/BracketPlay/BracketRound.js.map +1 -0
- package/lib/commonjs/Bracket/components/BracketPlay/RoundEvent.js +438 -0
- package/lib/commonjs/Bracket/components/BracketPlay/RoundEvent.js.map +1 -0
- package/lib/commonjs/Bracket/components/BracketPlay/index.js +350 -0
- package/lib/commonjs/Bracket/components/BracketPlay/index.js.map +1 -0
- package/lib/commonjs/Bracket/components/BracketSelector.js +138 -0
- package/lib/commonjs/Bracket/components/BracketSelector.js.map +1 -0
- package/lib/commonjs/Bracket/components/CompetitionLeaderboard.js +237 -0
- package/lib/commonjs/Bracket/components/CompetitionLeaderboard.js.map +1 -0
- package/lib/commonjs/Bracket/components/JoinCompetitionCard.js +130 -0
- package/lib/commonjs/Bracket/components/JoinCompetitionCard.js.map +1 -0
- package/lib/commonjs/Bracket/components/PlayerBalanceCard.js +53 -0
- package/lib/commonjs/Bracket/components/PlayerBalanceCard.js.map +1 -0
- package/lib/commonjs/Bracket/components/PlayerBracketManager.js +452 -0
- package/lib/commonjs/Bracket/components/PlayerBracketManager.js.map +1 -0
- package/lib/commonjs/Bracket/components/PlayerBrackets.js +179 -0
- package/lib/commonjs/Bracket/components/PlayerBrackets.js.map +1 -0
- package/lib/commonjs/Bracket/components/RoomMenu.js +118 -0
- package/lib/commonjs/Bracket/components/RoomMenu.js.map +1 -0
- package/lib/commonjs/Bracket/index.js +368 -0
- package/lib/commonjs/Bracket/index.js.map +1 -0
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/Bracket/api/index.js +433 -0
- package/lib/module/Bracket/api/index.js.map +1 -0
- package/lib/module/Bracket/components/BracketCompetitionCard.js +561 -0
- package/lib/module/Bracket/components/BracketCompetitionCard.js.map +1 -0
- package/lib/module/Bracket/components/BracketCompetitionSelector.js +199 -0
- package/lib/module/Bracket/components/BracketCompetitionSelector.js.map +1 -0
- package/lib/module/Bracket/components/BracketPlay/BracketNavigator.js +135 -0
- package/lib/module/Bracket/components/BracketPlay/BracketNavigator.js.map +1 -0
- package/lib/module/Bracket/components/BracketPlay/BracketRound.js +87 -0
- package/lib/module/Bracket/components/BracketPlay/BracketRound.js.map +1 -0
- package/lib/module/Bracket/components/BracketPlay/RoundEvent.js +431 -0
- package/lib/module/Bracket/components/BracketPlay/RoundEvent.js.map +1 -0
- package/lib/module/Bracket/components/BracketPlay/index.js +341 -0
- package/lib/module/Bracket/components/BracketPlay/index.js.map +1 -0
- package/lib/module/Bracket/components/BracketSelector.js +131 -0
- package/lib/module/Bracket/components/BracketSelector.js.map +1 -0
- package/lib/module/Bracket/components/CompetitionLeaderboard.js +228 -0
- package/lib/module/Bracket/components/CompetitionLeaderboard.js.map +1 -0
- package/lib/module/Bracket/components/JoinCompetitionCard.js +123 -0
- package/lib/module/Bracket/components/JoinCompetitionCard.js.map +1 -0
- package/lib/module/Bracket/components/PlayerBalanceCard.js +46 -0
- package/lib/module/Bracket/components/PlayerBalanceCard.js.map +1 -0
- package/lib/module/Bracket/components/PlayerBracketManager.js +443 -0
- package/lib/module/Bracket/components/PlayerBracketManager.js.map +1 -0
- package/lib/module/Bracket/components/PlayerBrackets.js +172 -0
- package/lib/module/Bracket/components/PlayerBrackets.js.map +1 -0
- package/lib/module/Bracket/components/RoomMenu.js +111 -0
- package/lib/module/Bracket/components/RoomMenu.js.map +1 -0
- package/lib/module/Bracket/index.js +359 -0
- package/lib/module/Bracket/index.js.map +1 -0
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/Bracket/api/index.d.ts +111 -0
- package/lib/typescript/src/Bracket/api/index.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/BracketCompetitionCard.d.ts +34 -0
- package/lib/typescript/src/Bracket/components/BracketCompetitionCard.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/BracketCompetitionSelector.d.ts +12 -0
- package/lib/typescript/src/Bracket/components/BracketCompetitionSelector.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/BracketPlay/BracketNavigator.d.ts +14 -0
- package/lib/typescript/src/Bracket/components/BracketPlay/BracketNavigator.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/BracketPlay/BracketRound.d.ts +25 -0
- package/lib/typescript/src/Bracket/components/BracketPlay/BracketRound.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/BracketPlay/RoundEvent.d.ts +23 -0
- package/lib/typescript/src/Bracket/components/BracketPlay/RoundEvent.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/BracketPlay/index.d.ts +19 -0
- package/lib/typescript/src/Bracket/components/BracketPlay/index.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/BracketSelector.d.ts +12 -0
- package/lib/typescript/src/Bracket/components/BracketSelector.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/CompetitionLeaderboard.d.ts +14 -0
- package/lib/typescript/src/Bracket/components/CompetitionLeaderboard.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/JoinCompetitionCard.d.ts +17 -0
- package/lib/typescript/src/Bracket/components/JoinCompetitionCard.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/PlayerBalanceCard.d.ts +9 -0
- package/lib/typescript/src/Bracket/components/PlayerBalanceCard.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/PlayerBracketManager.d.ts +18 -0
- package/lib/typescript/src/Bracket/components/PlayerBracketManager.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/PlayerBrackets.d.ts +17 -0
- package/lib/typescript/src/Bracket/components/PlayerBrackets.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/components/RoomMenu.d.ts +14 -0
- package/lib/typescript/src/Bracket/components/RoomMenu.d.ts.map +1 -0
- package/lib/typescript/src/Bracket/index.d.ts +17 -0
- package/lib/typescript/src/Bracket/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Bracket/api/index.ts +370 -0
- package/src/Bracket/components/BracketCompetitionCard.tsx +351 -0
- package/src/Bracket/components/BracketCompetitionSelector.tsx +123 -0
- package/src/Bracket/components/BracketPlay/BracketNavigator.tsx +75 -0
- package/src/Bracket/components/BracketPlay/BracketRound.tsx +86 -0
- package/src/Bracket/components/BracketPlay/RoundEvent.tsx +262 -0
- package/src/Bracket/components/BracketPlay/index.tsx +247 -0
- package/src/Bracket/components/BracketSelector.tsx +87 -0
- package/src/Bracket/components/CompetitionLeaderboard.tsx +165 -0
- package/src/Bracket/components/JoinCompetitionCard.tsx +83 -0
- package/src/Bracket/components/PlayerBalanceCard.tsx +34 -0
- package/src/Bracket/components/PlayerBracketManager.tsx +229 -0
- package/src/Bracket/components/PlayerBrackets.tsx +119 -0
- package/src/Bracket/components/RoomMenu.tsx +69 -0
- package/src/Bracket/index.tsx +291 -0
- package/src/index.tsx +3 -1
- package/src/types.d.ts +173 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import axios from "axios"
|
|
2
|
+
import type { AthleteProps, BracketCompetitionProps, BracketCompetitionScoringRuleProps, BracketGroupProps, BracketProps, BracketRoundProps, CompetitionPayoutTypeProps, CompetitionPlayerBracketProps, CompetitionResultTypeProps, CompetitionTypeProps, EventProps, LeagueProps, MyPlayerProps, PlayerBalanceProps, PlayerBracketPickProps, PlayerBracketProps, PublicPlayerProps, RoundEventProps, TeamProps } from "../../types";
|
|
3
|
+
import { APIOverrides } from "../../ApiOverrides";
|
|
4
|
+
import moment from "moment-mini";
|
|
5
|
+
export { BracketApi, BracketComeptitionApi, BracketCompetitionHelpers }
|
|
6
|
+
|
|
7
|
+
let AUTH_SVC_API = ''
|
|
8
|
+
let EVENT_SVC_API = ''
|
|
9
|
+
let TP_SVC_API = ''
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const BracketApi = {
|
|
13
|
+
setEnvironment: () => {
|
|
14
|
+
const endpoints = APIOverrides.getEndpoints();
|
|
15
|
+
TP_SVC_API = endpoints['TP_SVC_API'] as string;
|
|
16
|
+
EVENT_SVC_API = endpoints['EVENT_SVC_API'] as string;
|
|
17
|
+
AUTH_SVC_API = endpoints['AUTH_SVC_API'] as string;
|
|
18
|
+
},
|
|
19
|
+
getBracketById: async(bracket_id:string):Promise<{ bracket:BracketProps, bracket_rounds:BracketRoundProps[], round_events:RoundEventProps[], bracket_groups:BracketGroupProps[] }> => {
|
|
20
|
+
const resp = await axios.get(`${EVENT_SVC_API}/v1/brackets/bracket/${bracket_id}`)
|
|
21
|
+
return resp.data
|
|
22
|
+
},
|
|
23
|
+
getLeagues: async():Promise<LeagueProps[]> => {
|
|
24
|
+
const resp = await axios.get(`${EVENT_SVC_API}/v1/leagues`)
|
|
25
|
+
return resp.data.leagues
|
|
26
|
+
},
|
|
27
|
+
getActiveBrackets: async():Promise<BracketProps[]> => {
|
|
28
|
+
const resp = await axios.get(`${EVENT_SVC_API}/v1/brackets/active`)
|
|
29
|
+
return resp.data.brackets
|
|
30
|
+
},
|
|
31
|
+
getPlayersByPlayerIds : async(player_ids:string[]):Promise<PublicPlayerProps[]> => {
|
|
32
|
+
if(player_ids.length == 0){ return [] }
|
|
33
|
+
const resp = await axios.post(`${AUTH_SVC_API}/v1/players/bulk/get`, { player_ids })
|
|
34
|
+
return resp.data.players
|
|
35
|
+
},
|
|
36
|
+
getEventsByEventIds: async(event_ids:string[]):Promise<EventProps[]> => {
|
|
37
|
+
const resp = await axios.post(`${EVENT_SVC_API}/v1/events/bulk/get`, { attribute:'event_id', values: event_ids })
|
|
38
|
+
return resp.data.events
|
|
39
|
+
},
|
|
40
|
+
getAthletesByIds : async(athlete_ids:string[]):Promise<AthleteProps[]> => {
|
|
41
|
+
if(athlete_ids.length == 0){ return [] }
|
|
42
|
+
const resp = await axios.post(`${EVENT_SVC_API}/v1/athletes/bulk/get`, { attribute: 'athlete_id', values: athlete_ids })
|
|
43
|
+
return resp.data.athletes
|
|
44
|
+
},
|
|
45
|
+
getTeamsByIds: async(team_ids:string[]):Promise<TeamProps[]> => {
|
|
46
|
+
if(team_ids.length == 0){ return [] }
|
|
47
|
+
const resp = await axios.post(`${EVENT_SVC_API}/v1/teams/bulk/get`, { attribute:'team_id', values: team_ids })
|
|
48
|
+
return resp.data.teams
|
|
49
|
+
},
|
|
50
|
+
getExoticsByIds : async(exotic_ids:string[]):Promise<any[]> => {
|
|
51
|
+
const resp = await axios.post(`${EVENT_SVC_API}/v1/exotics/bulk/get`, { attribute: 'exotic_id', values: exotic_ids })
|
|
52
|
+
return resp.data.athletes
|
|
53
|
+
},
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const BracketComeptitionApi = {
|
|
57
|
+
getMyDetails: async():Promise<MyPlayerProps> => {
|
|
58
|
+
const resp = await axios.get(`${AUTH_SVC_API}/v1/players/player/me`)
|
|
59
|
+
return resp.data.player
|
|
60
|
+
},
|
|
61
|
+
getMyBalance: async():Promise<PlayerBalanceProps> => {
|
|
62
|
+
const resp = await axios.get(`${AUTH_SVC_API}/v1/players/player/balance/me`)
|
|
63
|
+
return resp.data.player_balance
|
|
64
|
+
},
|
|
65
|
+
createBracketCompetition: async(bracket_competition:BracketCompetitionProps, bracket_competition_scoring_rules:BracketCompetitionScoringRuleProps[]):Promise<{bracket_competition:BracketCompetitionProps, bracket_competition_scoring_rules:BracketCompetitionScoringRuleProps[]}> => {
|
|
66
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/competition/create`, { bracket_competition, bracket_competition_scoring_rules })
|
|
67
|
+
return resp.data
|
|
68
|
+
},
|
|
69
|
+
getCompetitionOptions: async():Promise<{competition_types:CompetitionTypeProps[], competition_result_types:CompetitionResultTypeProps[], competition_payout_types:CompetitionPayoutTypeProps[]}> => {
|
|
70
|
+
const resp = await axios.get(`${TP_SVC_API}/v1/competitions/options`)
|
|
71
|
+
return resp.data
|
|
72
|
+
},
|
|
73
|
+
getBracketCompetitions: async(status?:string):Promise<BracketCompetitionProps[]> => {
|
|
74
|
+
const resp = await axios.get(`${TP_SVC_API}/v1/brackets/competitions/all?status=${status}`)
|
|
75
|
+
return resp.data.bracket_competitions
|
|
76
|
+
},
|
|
77
|
+
getBracketcompetitionByCode: async(competition_code:string):Promise<BracketCompetitionProps | undefined> => {
|
|
78
|
+
try {
|
|
79
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/competitions/code`, { competition_code })
|
|
80
|
+
return resp.data.bracket_competition
|
|
81
|
+
} catch (e) {
|
|
82
|
+
console.log(e)
|
|
83
|
+
return undefined
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
isCodeAvailable : async(competition_code:string):Promise<Boolean> => {
|
|
87
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/code/available`, { competition_code })
|
|
88
|
+
return resp.data.available
|
|
89
|
+
},
|
|
90
|
+
getBracketCompetitionById: async(bracket_competition_id:string):Promise<{bracket_competition:BracketCompetitionProps, competition_player_brackets:CompetitionPlayerBracketProps[], player_brackets:PlayerBracketProps[], bracket_competition_scoring_rules:BracketCompetitionScoringRuleProps[]}> => {
|
|
91
|
+
const resp = await axios.get(`${TP_SVC_API}/v1/brackets/competition/${bracket_competition_id}`)
|
|
92
|
+
return resp.data
|
|
93
|
+
},
|
|
94
|
+
getPlayerBracketById: async(player_bracket_id:string):Promise<{player_bracket:PlayerBracketProps, player_bracket_picks:PlayerBracketPickProps[]}> => {
|
|
95
|
+
const resp = await axios.get(`${TP_SVC_API}/v1/brackets/bracket/${player_bracket_id}`)
|
|
96
|
+
return resp.data
|
|
97
|
+
},
|
|
98
|
+
createPlayerBracket: async(player_bracket:PlayerBracketProps):Promise<PlayerBracketProps> => {
|
|
99
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/bracket/create`, { player_bracket })
|
|
100
|
+
return resp.data.player_bracket
|
|
101
|
+
},
|
|
102
|
+
updatePlayerBracket: async(player_bracket:PlayerBracketProps):Promise<PlayerBracketProps> => {
|
|
103
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/bracket/update`, { player_bracket })
|
|
104
|
+
return resp.data.player_bracket
|
|
105
|
+
},
|
|
106
|
+
deletePlayerBracket: async(player_bracket_id:string):Promise<PlayerBracketProps> => {
|
|
107
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/bracket/delete`, { player_bracket_id })
|
|
108
|
+
return resp.data.player_bracket
|
|
109
|
+
},
|
|
110
|
+
getMyPlayerBrackets: async(bracket_id?:string, bracket_competition_id?:string):Promise<{ player_brackets: PlayerBracketProps[], competition_player_brackets:CompetitionPlayerBracketProps[], bracket_competitions:BracketCompetitionProps[] }> => {
|
|
111
|
+
const resp = await axios.get(`${TP_SVC_API}/v1/brackets/player?bracket_id=${bracket_id}&bracket_competition_id=${bracket_competition_id}`)
|
|
112
|
+
console.log(resp.data)
|
|
113
|
+
return resp.data
|
|
114
|
+
},
|
|
115
|
+
savePick: async(player_bracket_pick:PlayerBracketPickProps):Promise<{player_bracket:PlayerBracketProps, player_bracket_picks:PlayerBracketPickProps[], competition_player_brackets:CompetitionPlayerBracketProps[]}> => {
|
|
116
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/pick/create`, { player_bracket_pick })
|
|
117
|
+
return resp.data
|
|
118
|
+
},
|
|
119
|
+
joinBracketCompetition: async(competition_player_bracket:CompetitionPlayerBracketProps):Promise<{bracket_competition:BracketCompetitionProps, competition_player_bracket: CompetitionPlayerBracketProps}> => {
|
|
120
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/competition/join`, { competition_player_bracket })
|
|
121
|
+
return resp.data
|
|
122
|
+
},
|
|
123
|
+
leaveBracketCompetition: async(competition_player_bracket_id:string):Promise<{bracket_competition:BracketCompetitionProps, competition_player_bracket:CompetitionPlayerBracketProps}> => {
|
|
124
|
+
const resp = await axios.post(`${TP_SVC_API}/v1/brackets/competition/leave`, { competition_player_bracket_id })
|
|
125
|
+
return resp.data
|
|
126
|
+
},
|
|
127
|
+
getCompetitionPlayerBracketsByCompetitionId: async(bracket_competition_id:string, offset:number):Promise<{ competition_player_brackets:CompetitionPlayerBracketProps[], player_brackets:PlayerBracketProps[] }> => {
|
|
128
|
+
const resp = await axios.get(`${TP_SVC_API}/v1/brackets/competitionplayer/competition/${bracket_competition_id}?offset=${offset}`)
|
|
129
|
+
return resp.data
|
|
130
|
+
},
|
|
131
|
+
getMyCompetitionPlayerBrackets: async():Promise<{ competition_player_brackets:CompetitionPlayerBracketProps[], bracket_competitions:BracketCompetitionProps[] }> => {
|
|
132
|
+
const resp = await axios.get(`${TP_SVC_API}/v1/brackets/competitionplayer/me`)
|
|
133
|
+
return resp.data
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
type BracketRoundStatus = { bracket_round_id:string, completion_pct: number }
|
|
139
|
+
type BracketGroupStatus = { bracket_group_id:string, completion_pct:number }
|
|
140
|
+
type NonGroupEventProps = {
|
|
141
|
+
round_event_id:string,
|
|
142
|
+
round_event:RoundEventProps,
|
|
143
|
+
event_number:number,
|
|
144
|
+
championship:boolean,
|
|
145
|
+
player_bracket_pick?:PlayerBracketPickProps,
|
|
146
|
+
away_placeholder_pick?:PlayerBracketPickProps,
|
|
147
|
+
home_placeholder_pick?:PlayerBracketPickProps,
|
|
148
|
+
orientation?: 'left'|'right'
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const BracketCompetitionHelpers = {
|
|
152
|
+
getPayout: (bc:BracketCompetitionProps):number => {
|
|
153
|
+
let payout = bc.ticket_revenue
|
|
154
|
+
if(bc.promo_payout){ payout += bc.promo_payout }
|
|
155
|
+
if(bc.guaranteed_payout && payout < bc.guaranteed_payout){ payout = bc.guaranteed_payout }
|
|
156
|
+
return payout
|
|
157
|
+
},
|
|
158
|
+
canLeave: (bc?:BracketCompetitionProps) => {
|
|
159
|
+
if(!bc){ return false }
|
|
160
|
+
if(moment().isBefore(moment(bc.scheduled_datetime))){ return true }
|
|
161
|
+
return false
|
|
162
|
+
},
|
|
163
|
+
isEnoughBalance: (bc:BracketCompetitionProps, player_balance?:PlayerBalanceProps) => {
|
|
164
|
+
if(!player_balance) return false
|
|
165
|
+
if(bc.market_type == 'FREE' && player_balance.free_market_balance < bc.buy_in){ return false }
|
|
166
|
+
if(bc.market_type == 'FOR_MONEY' && player_balance.balance < bc.buy_in){ return false }
|
|
167
|
+
return true
|
|
168
|
+
},
|
|
169
|
+
showChampions:(bc:BracketCompetitionProps) => {
|
|
170
|
+
if(!bc){ return false }
|
|
171
|
+
if(moment().isBefore(moment(bc.scheduled_datetime))){ return false }
|
|
172
|
+
return true
|
|
173
|
+
},
|
|
174
|
+
canDeletePlayerBracket: (pb:PlayerBracketProps, cpbs:CompetitionPlayerBracketProps[]) => {
|
|
175
|
+
if(cpbs.length > 0){ return false }
|
|
176
|
+
if(pb.status != 'active'){ return false }
|
|
177
|
+
return true
|
|
178
|
+
},
|
|
179
|
+
getBuyInTitle: (bc:BracketCompetitionProps) => {
|
|
180
|
+
if(bc.buy_in == 0){ return `Join For Free` }
|
|
181
|
+
const cl = bc.market_type == 'FREE' ? 'E' : '$'
|
|
182
|
+
return `Join Competition ${cl}${bc.buy_in}`
|
|
183
|
+
},
|
|
184
|
+
genEmptyBracketCompetition: ():BracketCompetitionProps => {
|
|
185
|
+
let code = `${Math.floor(100000 + Math.random() * 900000)}`
|
|
186
|
+
return {
|
|
187
|
+
bracket_competition_id: '',
|
|
188
|
+
bracket_id: '',
|
|
189
|
+
competition_name:'',
|
|
190
|
+
competition_description: '',
|
|
191
|
+
code_valid: true,
|
|
192
|
+
competition_code: code,
|
|
193
|
+
create_datetime: '',
|
|
194
|
+
last_update_datetime: '',
|
|
195
|
+
image: { url: 'https://res.cloudinary.com/hoabts6mc/image/upload/v1677259366/Bracket_image_h0fkku.webp' },
|
|
196
|
+
status: 'scheduled',
|
|
197
|
+
buy_in: 0,
|
|
198
|
+
market_type: 'FOR_MONEY',
|
|
199
|
+
scheduled_datetime: '',
|
|
200
|
+
scoring_system: 'progressive',
|
|
201
|
+
max_brackets: 100,
|
|
202
|
+
max_brackets_per_player: 1,
|
|
203
|
+
invite_only: true,
|
|
204
|
+
ticket_revenue: 0,
|
|
205
|
+
tickets_sold: 0,
|
|
206
|
+
admin_id: '',
|
|
207
|
+
competition_result_type_id: ''
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
getDefaultScoringRules : (bracket_competition_id:string, bracket_rounds:BracketRoundProps[]):BracketCompetitionScoringRuleProps[] => {
|
|
211
|
+
let rules:BracketCompetitionScoringRuleProps[] = []
|
|
212
|
+
let next_points = 1;
|
|
213
|
+
bracket_rounds.sort((a,b) => a.round_number - b.round_number).map(br => {
|
|
214
|
+
rules.push({
|
|
215
|
+
bracket_competition_scoring_rule_id: '',
|
|
216
|
+
bracket_competition_id,
|
|
217
|
+
round_number: br.round_number,
|
|
218
|
+
win_points: br.carry_through?0:next_points,
|
|
219
|
+
underdog_bonus: false,
|
|
220
|
+
underdog_multiplier: 0,
|
|
221
|
+
create_datetime:'',
|
|
222
|
+
last_update_datetime:''
|
|
223
|
+
})
|
|
224
|
+
if(!br.carry_through){ next_points = next_points * 2 }
|
|
225
|
+
})
|
|
226
|
+
return rules
|
|
227
|
+
},
|
|
228
|
+
createEmptyPlayerBracket : (player_id:string, bracket_id:string):PlayerBracketProps => {
|
|
229
|
+
let title = `My Bracket ${Math.floor(Math.random() * 100)}`
|
|
230
|
+
return {
|
|
231
|
+
player_bracket_id: '',
|
|
232
|
+
player_id: player_id,
|
|
233
|
+
bracket_id: bracket_id,
|
|
234
|
+
bracket_name: title,
|
|
235
|
+
status: 'active',
|
|
236
|
+
completion_status: 'inprogress',
|
|
237
|
+
completion_pct: 0,
|
|
238
|
+
create_datetime: '',
|
|
239
|
+
last_update_datetime: ''
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
createPlayerBracketPick : (bracket_id:string, round_event:RoundEventProps, pick_side:'away'|'home', pick_side_id:string, pick_seed: number):PlayerBracketPickProps => {
|
|
243
|
+
|
|
244
|
+
return {
|
|
245
|
+
player_bracket_pick_id: '',
|
|
246
|
+
player_bracket_id: '',
|
|
247
|
+
bracket_id: bracket_id,
|
|
248
|
+
round_event_id: round_event.round_event_id,
|
|
249
|
+
pick_side,
|
|
250
|
+
pick_side_id,
|
|
251
|
+
pick_seed,
|
|
252
|
+
underdog_pick: false,
|
|
253
|
+
status: 'inprogress',
|
|
254
|
+
pick_side_type: 'team',
|
|
255
|
+
event_sequence: round_event.event_number,
|
|
256
|
+
points: 0,
|
|
257
|
+
create_datetime: '',
|
|
258
|
+
last_update_datetime:''
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
getBracketPickProgress : (pbp:PlayerBracketPickProps[], bracket_rounds:BracketRoundProps[], bracket_groups:BracketGroupProps[], round_events:RoundEventProps[]):{ round_status:BracketRoundStatus[], group_status:BracketGroupStatus[] } => {
|
|
262
|
+
let round_status:BracketRoundStatus[] = []
|
|
263
|
+
bracket_rounds.map(br => {
|
|
264
|
+
if(br.carry_through){ return round_status.push({ bracket_round_id: br.bracket_round_id, completion_pct: 1 }) }
|
|
265
|
+
let events = round_events.filter(re => re.bracket_round_id == br.bracket_round_id)
|
|
266
|
+
let picks = pbp.filter(pick => pick.status != 'deleted' && events.map(e => e.round_event_id.toString()).includes(pick.round_event_id.toString()))
|
|
267
|
+
let completion_pct = picks.length / events.length
|
|
268
|
+
return round_status.push({ bracket_round_id: br.bracket_round_id, completion_pct })
|
|
269
|
+
})
|
|
270
|
+
|
|
271
|
+
let group_status:BracketGroupStatus[] = []
|
|
272
|
+
bracket_groups.map(bg => {
|
|
273
|
+
let events = round_events.filter(re => re.bracket_group_id == bg.bracket_group_id && !re.no_pick);
|
|
274
|
+
if(events.length == 0){ return group_status.push({ bracket_group_id:bg.bracket_group_id, completion_pct: 1 }) }
|
|
275
|
+
let picks = pbp.filter(pick => pick.status != 'deleted' && events.map(e => e.round_event_id.toString()).includes(pick.round_event_id.toString()))
|
|
276
|
+
let completion_pct = picks.length / events.length
|
|
277
|
+
return group_status.push({ bracket_group_id: bg.bracket_group_id, completion_pct })
|
|
278
|
+
})
|
|
279
|
+
|
|
280
|
+
return { round_status, group_status }
|
|
281
|
+
},
|
|
282
|
+
getNonGroupGames : (round_events:RoundEventProps[], bracket_groups:BracketGroupProps[], player_bracket_picks:PlayerBracketPickProps[]):NonGroupEventProps[] => {
|
|
283
|
+
let non_group_events:NonGroupEventProps[] = []
|
|
284
|
+
let non_group_games = round_events.filter(re => re.bracket_group_id == '0')
|
|
285
|
+
if(non_group_games.length == 0){ return [] }
|
|
286
|
+
let championship_game = round_events.sort((a,b) => b.event_number - a.event_number)[0]
|
|
287
|
+
if(championship_game){
|
|
288
|
+
const champ_pick = player_bracket_picks.find(pbp => pbp.round_event_id == championship_game.round_event_id && pbp.status != 'deleted')
|
|
289
|
+
const away_champ_pick = player_bracket_picks.find(pbp => pbp.round_event_id == championship_game.away_placeholder && pbp.status != 'deleted')
|
|
290
|
+
const home_champ_pick = player_bracket_picks.find(pbp => pbp.round_event_id == championship_game.home_placeholder && pbp.status != 'deleted')
|
|
291
|
+
|
|
292
|
+
non_group_events.push({
|
|
293
|
+
round_event_id: championship_game.round_event_id,
|
|
294
|
+
event_number: championship_game.event_number,
|
|
295
|
+
round_event: championship_game,
|
|
296
|
+
championship: true,
|
|
297
|
+
away_placeholder_pick: away_champ_pick,
|
|
298
|
+
home_placeholder_pick: home_champ_pick,
|
|
299
|
+
player_bracket_pick: champ_pick
|
|
300
|
+
})
|
|
301
|
+
}
|
|
302
|
+
//Find the side of the bracket the game needs to be on
|
|
303
|
+
non_group_games.map(ngg => {
|
|
304
|
+
if(championship_game?.round_event_id == ngg.round_event_id){ return }
|
|
305
|
+
let away_placeholder_game = round_events.find(re => re.round_event_id == ngg.away_placeholder);
|
|
306
|
+
let away_group = bracket_groups.find(bg => bg.bracket_group_id == away_placeholder_game?.bracket_group_id)
|
|
307
|
+
//let home_placeholder_game = round_events.find(re => re.round_event_id == ngg.home_placeholder);
|
|
308
|
+
//let home_group = bracket_groups.find(bg => bg.bracket_group_id == home_placeholder_game?.bracket_group_id)
|
|
309
|
+
let orientation:'left'|'right' = 'left'
|
|
310
|
+
if(away_group?.orientation != 'left'){ orientation = 'right' }
|
|
311
|
+
let pbp = player_bracket_picks.find(pbp => pbp.round_event_id == ngg.round_event_id && pbp.status != 'deleted')
|
|
312
|
+
const away_ff_pick = player_bracket_picks.find(pbp => pbp.round_event_id == ngg.away_placeholder && pbp.status != 'deleted')
|
|
313
|
+
const home_ff_pick = player_bracket_picks.find(pbp => pbp.round_event_id == ngg.home_placeholder && pbp.status != 'deleted')
|
|
314
|
+
|
|
315
|
+
non_group_events.push({
|
|
316
|
+
round_event_id: ngg.round_event_id,
|
|
317
|
+
championship: false,
|
|
318
|
+
orientation,
|
|
319
|
+
player_bracket_pick: pbp,
|
|
320
|
+
round_event: ngg,
|
|
321
|
+
away_placeholder_pick: away_ff_pick,
|
|
322
|
+
home_placeholder_pick: home_ff_pick,
|
|
323
|
+
event_number: ngg.event_number
|
|
324
|
+
})
|
|
325
|
+
|
|
326
|
+
})
|
|
327
|
+
|
|
328
|
+
return non_group_events
|
|
329
|
+
},
|
|
330
|
+
generateCompetitionPlayerBracket : (bracket_competition_id:string, player_bracket_id:string):CompetitionPlayerBracketProps => {
|
|
331
|
+
return {
|
|
332
|
+
competition_player_bracket_id: '',
|
|
333
|
+
bracket_competition_id,
|
|
334
|
+
player_bracket_id,
|
|
335
|
+
place:0,
|
|
336
|
+
possible_points:0,
|
|
337
|
+
player_id: '',
|
|
338
|
+
status: 'active',
|
|
339
|
+
winnings: 0,
|
|
340
|
+
points_scored:0,
|
|
341
|
+
create_datetime: '',
|
|
342
|
+
last_update_datetime: ''
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
formatPlace :(place:number) => {
|
|
346
|
+
switch(place){
|
|
347
|
+
case 1:
|
|
348
|
+
return '1st'
|
|
349
|
+
case 2:
|
|
350
|
+
return '2nd'
|
|
351
|
+
case 3:
|
|
352
|
+
return '3rd'
|
|
353
|
+
case 4:
|
|
354
|
+
return '4th'
|
|
355
|
+
case 5:
|
|
356
|
+
return '5th'
|
|
357
|
+
case 6:
|
|
358
|
+
return '6th'
|
|
359
|
+
case 7:
|
|
360
|
+
return '7th'
|
|
361
|
+
case 8:
|
|
362
|
+
return '8th'
|
|
363
|
+
case 9:
|
|
364
|
+
return '9th'
|
|
365
|
+
default:
|
|
366
|
+
return `${place}`
|
|
367
|
+
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
}
|