be-components 1.4.9 → 1.5.1

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.
Files changed (214) hide show
  1. package/lib/commonjs/Competition/api/index.js +15 -0
  2. package/lib/commonjs/Competition/api/index.js.map +1 -1
  3. package/lib/commonjs/Competition/components/CompetitionSeasonCard.js +1 -1
  4. package/lib/commonjs/Competition/components/CompetitionSeasonCard.js.map +1 -1
  5. package/lib/commonjs/Competition/components/SeasonCard.js +61 -0
  6. package/lib/commonjs/Competition/components/SeasonCard.js.map +1 -0
  7. package/lib/commonjs/Competition/index.js +23 -3
  8. package/lib/commonjs/Competition/index.js.map +1 -1
  9. package/lib/commonjs/CompetitionManager/api/index.js +3 -5
  10. package/lib/commonjs/CompetitionManager/api/index.js.map +1 -1
  11. package/lib/commonjs/CompetitionManager/components/CompetitionInfoForm.js +1 -61
  12. package/lib/commonjs/CompetitionManager/components/CompetitionInfoForm.js.map +1 -1
  13. package/lib/commonjs/CompetitionManager/components/CompetitionSettingsForm.js +6 -1
  14. package/lib/commonjs/CompetitionManager/components/CompetitionSettingsForm.js.map +1 -1
  15. package/lib/commonjs/CompetitionManager/components/ContestSettingsForm.js +4 -0
  16. package/lib/commonjs/CompetitionManager/components/ContestSettingsForm.js.map +1 -1
  17. package/lib/commonjs/CompetitionManager/components/CreateCompetitionForm.js +37 -3
  18. package/lib/commonjs/CompetitionManager/components/CreateCompetitionForm.js.map +1 -1
  19. package/lib/commonjs/CompetitionSeason/api/index.js +134 -0
  20. package/lib/commonjs/CompetitionSeason/api/index.js.map +1 -0
  21. package/lib/commonjs/CompetitionSeason/components/CompetitionsSection.js +127 -0
  22. package/lib/commonjs/CompetitionSeason/components/CompetitionsSection.js.map +1 -0
  23. package/lib/commonjs/CompetitionSeason/components/EnterSeasonPrompt.js +253 -0
  24. package/lib/commonjs/CompetitionSeason/components/EnterSeasonPrompt.js.map +1 -0
  25. package/lib/commonjs/CompetitionSeason/components/SeasonHeader.js +126 -0
  26. package/lib/commonjs/CompetitionSeason/components/SeasonHeader.js.map +1 -0
  27. package/lib/commonjs/CompetitionSeason/components/SeasonLeaderboard.js +324 -0
  28. package/lib/commonjs/CompetitionSeason/components/SeasonLeaderboard.js.map +1 -0
  29. package/lib/commonjs/CompetitionSeason/components/SeasonSettingsSection.js +175 -0
  30. package/lib/commonjs/CompetitionSeason/components/SeasonSettingsSection.js.map +1 -0
  31. package/lib/commonjs/CompetitionSeason/index.js +278 -0
  32. package/lib/commonjs/CompetitionSeason/index.js.map +1 -0
  33. package/lib/commonjs/CompetitionSeasonManager/api/index.js +182 -0
  34. package/lib/commonjs/CompetitionSeasonManager/api/index.js.map +1 -0
  35. package/lib/commonjs/CompetitionSeasonManager/components/CompetitionSelector.js +2 -0
  36. package/lib/commonjs/CompetitionSeasonManager/components/CompetitionSelector.js.map +1 -0
  37. package/lib/commonjs/CompetitionSeasonManager/components/CompetitionsForm.js +153 -0
  38. package/lib/commonjs/CompetitionSeasonManager/components/CompetitionsForm.js.map +1 -0
  39. package/lib/commonjs/CompetitionSeasonManager/components/CreateSeasonForm.js +388 -0
  40. package/lib/commonjs/CompetitionSeasonManager/components/CreateSeasonForm.js.map +1 -0
  41. package/lib/commonjs/CompetitionSeasonManager/components/SeasonHeader.js +108 -0
  42. package/lib/commonjs/CompetitionSeasonManager/components/SeasonHeader.js.map +1 -0
  43. package/lib/commonjs/CompetitionSeasonManager/components/SeasonInfoForm.js +242 -0
  44. package/lib/commonjs/CompetitionSeasonManager/components/SeasonInfoForm.js.map +1 -0
  45. package/lib/commonjs/CompetitionSeasonManager/components/SeasonSettingsForm.js +352 -0
  46. package/lib/commonjs/CompetitionSeasonManager/components/SeasonSettingsForm.js.map +1 -0
  47. package/lib/commonjs/CompetitionSeasonManager/index.js +190 -0
  48. package/lib/commonjs/CompetitionSeasonManager/index.js.map +1 -0
  49. package/lib/commonjs/Components/Switch.js +3 -0
  50. package/lib/commonjs/Components/Switch.js.map +1 -1
  51. package/lib/commonjs/Engage/api/index.js +25 -0
  52. package/lib/commonjs/Engage/api/index.js.map +1 -1
  53. package/lib/commonjs/Engage/components/SeasonCard.js +78 -0
  54. package/lib/commonjs/Engage/components/SeasonCard.js.map +1 -0
  55. package/lib/commonjs/Engage/index.js +52 -1
  56. package/lib/commonjs/Engage/index.js.map +1 -1
  57. package/lib/commonjs/index.js +14 -0
  58. package/lib/commonjs/index.js.map +1 -1
  59. package/lib/module/Competition/api/index.js +15 -0
  60. package/lib/module/Competition/api/index.js.map +1 -1
  61. package/lib/module/Competition/components/CompetitionSeasonCard.js +1 -1
  62. package/lib/module/Competition/components/CompetitionSeasonCard.js.map +1 -1
  63. package/lib/module/Competition/components/SeasonCard.js +54 -0
  64. package/lib/module/Competition/components/SeasonCard.js.map +1 -0
  65. package/lib/module/Competition/index.js +23 -3
  66. package/lib/module/Competition/index.js.map +1 -1
  67. package/lib/module/CompetitionManager/api/index.js +3 -5
  68. package/lib/module/CompetitionManager/api/index.js.map +1 -1
  69. package/lib/module/CompetitionManager/components/CompetitionInfoForm.js +1 -63
  70. package/lib/module/CompetitionManager/components/CompetitionInfoForm.js.map +1 -1
  71. package/lib/module/CompetitionManager/components/CompetitionSettingsForm.js +6 -1
  72. package/lib/module/CompetitionManager/components/CompetitionSettingsForm.js.map +1 -1
  73. package/lib/module/CompetitionManager/components/ContestSettingsForm.js +4 -0
  74. package/lib/module/CompetitionManager/components/ContestSettingsForm.js.map +1 -1
  75. package/lib/module/CompetitionManager/components/CreateCompetitionForm.js +37 -3
  76. package/lib/module/CompetitionManager/components/CreateCompetitionForm.js.map +1 -1
  77. package/lib/module/CompetitionSeason/api/index.js +128 -0
  78. package/lib/module/CompetitionSeason/api/index.js.map +1 -0
  79. package/lib/module/CompetitionSeason/components/CompetitionsSection.js +118 -0
  80. package/lib/module/CompetitionSeason/components/CompetitionsSection.js.map +1 -0
  81. package/lib/module/CompetitionSeason/components/EnterSeasonPrompt.js +244 -0
  82. package/lib/module/CompetitionSeason/components/EnterSeasonPrompt.js.map +1 -0
  83. package/lib/module/CompetitionSeason/components/SeasonHeader.js +119 -0
  84. package/lib/module/CompetitionSeason/components/SeasonHeader.js.map +1 -0
  85. package/lib/module/CompetitionSeason/components/SeasonLeaderboard.js +315 -0
  86. package/lib/module/CompetitionSeason/components/SeasonLeaderboard.js.map +1 -0
  87. package/lib/module/CompetitionSeason/components/SeasonSettingsSection.js +166 -0
  88. package/lib/module/CompetitionSeason/components/SeasonSettingsSection.js.map +1 -0
  89. package/lib/module/CompetitionSeason/index.js +269 -0
  90. package/lib/module/CompetitionSeason/index.js.map +1 -0
  91. package/lib/module/CompetitionSeasonManager/api/index.js +176 -0
  92. package/lib/module/CompetitionSeasonManager/api/index.js.map +1 -0
  93. package/lib/module/CompetitionSeasonManager/components/CompetitionSelector.js +2 -0
  94. package/lib/module/CompetitionSeasonManager/components/CompetitionSelector.js.map +1 -0
  95. package/lib/module/CompetitionSeasonManager/components/CompetitionsForm.js +144 -0
  96. package/lib/module/CompetitionSeasonManager/components/CompetitionsForm.js.map +1 -0
  97. package/lib/module/CompetitionSeasonManager/components/CreateSeasonForm.js +379 -0
  98. package/lib/module/CompetitionSeasonManager/components/CreateSeasonForm.js.map +1 -0
  99. package/lib/module/CompetitionSeasonManager/components/SeasonHeader.js +101 -0
  100. package/lib/module/CompetitionSeasonManager/components/SeasonHeader.js.map +1 -0
  101. package/lib/module/CompetitionSeasonManager/components/SeasonInfoForm.js +233 -0
  102. package/lib/module/CompetitionSeasonManager/components/SeasonInfoForm.js.map +1 -0
  103. package/lib/module/CompetitionSeasonManager/components/SeasonSettingsForm.js +343 -0
  104. package/lib/module/CompetitionSeasonManager/components/SeasonSettingsForm.js.map +1 -0
  105. package/lib/module/CompetitionSeasonManager/index.js +181 -0
  106. package/lib/module/CompetitionSeasonManager/index.js.map +1 -0
  107. package/lib/module/Components/Switch.js +3 -0
  108. package/lib/module/Components/Switch.js.map +1 -1
  109. package/lib/module/Engage/api/index.js +25 -0
  110. package/lib/module/Engage/api/index.js.map +1 -1
  111. package/lib/module/Engage/components/SeasonCard.js +71 -0
  112. package/lib/module/Engage/components/SeasonCard.js.map +1 -0
  113. package/lib/module/Engage/index.js +52 -1
  114. package/lib/module/Engage/index.js.map +1 -1
  115. package/lib/module/index.js +3 -1
  116. package/lib/module/index.js.map +1 -1
  117. package/lib/typescript/src/Competition/api/index.d.ts +1 -0
  118. package/lib/typescript/src/Competition/api/index.d.ts.map +1 -1
  119. package/lib/typescript/src/Competition/components/SeasonCard.d.ts +10 -0
  120. package/lib/typescript/src/Competition/components/SeasonCard.d.ts.map +1 -0
  121. package/lib/typescript/src/Competition/index.d.ts +3 -2
  122. package/lib/typescript/src/Competition/index.d.ts.map +1 -1
  123. package/lib/typescript/src/CompetitionManager/api/index.d.ts +1 -1
  124. package/lib/typescript/src/CompetitionManager/api/index.d.ts.map +1 -1
  125. package/lib/typescript/src/CompetitionManager/components/CompetitionInfoForm.d.ts.map +1 -1
  126. package/lib/typescript/src/CompetitionManager/components/CompetitionSettingsForm.d.ts.map +1 -1
  127. package/lib/typescript/src/CompetitionManager/components/ContestSettingsForm.d.ts.map +1 -1
  128. package/lib/typescript/src/CompetitionManager/components/CreateCompetitionForm.d.ts +3 -2
  129. package/lib/typescript/src/CompetitionManager/components/CreateCompetitionForm.d.ts.map +1 -1
  130. package/lib/typescript/src/CompetitionSeason/api/index.d.ts +41 -0
  131. package/lib/typescript/src/CompetitionSeason/api/index.d.ts.map +1 -0
  132. package/lib/typescript/src/CompetitionSeason/components/CompetitionsSection.d.ts +14 -0
  133. package/lib/typescript/src/CompetitionSeason/components/CompetitionsSection.d.ts.map +1 -0
  134. package/lib/typescript/src/CompetitionSeason/components/EnterSeasonPrompt.d.ts +16 -0
  135. package/lib/typescript/src/CompetitionSeason/components/EnterSeasonPrompt.d.ts.map +1 -0
  136. package/lib/typescript/src/CompetitionSeason/components/SeasonHeader.d.ts +15 -0
  137. package/lib/typescript/src/CompetitionSeason/components/SeasonHeader.d.ts.map +1 -0
  138. package/lib/typescript/src/CompetitionSeason/components/SeasonLeaderboard.d.ts +18 -0
  139. package/lib/typescript/src/CompetitionSeason/components/SeasonLeaderboard.d.ts.map +1 -0
  140. package/lib/typescript/src/CompetitionSeason/components/SeasonSettingsSection.d.ts +12 -0
  141. package/lib/typescript/src/CompetitionSeason/components/SeasonSettingsSection.d.ts.map +1 -0
  142. package/lib/typescript/src/CompetitionSeason/index.d.ts +12 -0
  143. package/lib/typescript/src/CompetitionSeason/index.d.ts.map +1 -0
  144. package/lib/typescript/src/CompetitionSeasonManager/api/index.d.ts +31 -0
  145. package/lib/typescript/src/CompetitionSeasonManager/api/index.d.ts.map +1 -0
  146. package/lib/typescript/src/CompetitionSeasonManager/components/CompetitionSelector.d.ts +1 -0
  147. package/lib/typescript/src/CompetitionSeasonManager/components/CompetitionSelector.d.ts.map +1 -0
  148. package/lib/typescript/src/CompetitionSeasonManager/components/CompetitionsForm.d.ts +12 -0
  149. package/lib/typescript/src/CompetitionSeasonManager/components/CompetitionsForm.d.ts.map +1 -0
  150. package/lib/typescript/src/CompetitionSeasonManager/components/CreateSeasonForm.d.ts +11 -0
  151. package/lib/typescript/src/CompetitionSeasonManager/components/CreateSeasonForm.d.ts.map +1 -0
  152. package/lib/typescript/src/CompetitionSeasonManager/components/SeasonHeader.d.ts +13 -0
  153. package/lib/typescript/src/CompetitionSeasonManager/components/SeasonHeader.d.ts.map +1 -0
  154. package/lib/typescript/src/CompetitionSeasonManager/components/SeasonInfoForm.d.ts +11 -0
  155. package/lib/typescript/src/CompetitionSeasonManager/components/SeasonInfoForm.d.ts.map +1 -0
  156. package/lib/typescript/src/CompetitionSeasonManager/components/SeasonSettingsForm.d.ts +12 -0
  157. package/lib/typescript/src/CompetitionSeasonManager/components/SeasonSettingsForm.d.ts.map +1 -0
  158. package/lib/typescript/src/CompetitionSeasonManager/index.d.ts +8 -0
  159. package/lib/typescript/src/CompetitionSeasonManager/index.d.ts.map +1 -0
  160. package/lib/typescript/src/Components/Switch.d.ts +2 -1
  161. package/lib/typescript/src/Components/Switch.d.ts.map +1 -1
  162. package/lib/typescript/src/Engage/api/index.d.ts +6 -1
  163. package/lib/typescript/src/Engage/api/index.d.ts.map +1 -1
  164. package/lib/typescript/src/Engage/components/SeasonCard.d.ts +10 -0
  165. package/lib/typescript/src/Engage/components/SeasonCard.d.ts.map +1 -0
  166. package/lib/typescript/src/Engage/index.d.ts +3 -2
  167. package/lib/typescript/src/Engage/index.d.ts.map +1 -1
  168. package/lib/typescript/src/index.d.ts +3 -1
  169. package/lib/typescript/src/index.d.ts.map +1 -1
  170. package/package.json +1 -1
  171. package/src/Competition/api/index.ts +15 -0
  172. package/src/Competition/components/CompetitionSeasonCard.tsx +1 -1
  173. package/src/Competition/components/SeasonCard.tsx +46 -0
  174. package/src/Competition/index.tsx +45 -27
  175. package/src/CompetitionManager/api/index.ts +2 -5
  176. package/src/CompetitionManager/components/CompetitionInfoForm.tsx +2 -64
  177. package/src/CompetitionManager/components/CompetitionSettingsForm.tsx +10 -3
  178. package/src/CompetitionManager/components/ContestSettingsForm.tsx +8 -2
  179. package/src/CompetitionManager/components/CreateCompetitionForm.tsx +20 -4
  180. package/src/CompetitionSeason/api/index.ts +111 -0
  181. package/src/CompetitionSeason/components/CompetitionsSection.tsx +99 -0
  182. package/src/CompetitionSeason/components/EnterSeasonPrompt.tsx +135 -0
  183. package/src/CompetitionSeason/components/SeasonHeader.tsx +81 -0
  184. package/src/CompetitionSeason/components/SeasonLeaderboard.tsx +205 -0
  185. package/src/CompetitionSeason/components/SeasonSettingsSection.tsx +92 -0
  186. package/src/CompetitionSeason/index.tsx +244 -0
  187. package/src/CompetitionSeasonManager/api/index.ts +127 -0
  188. package/src/CompetitionSeasonManager/components/CompetitionSelector.tsx +2 -0
  189. package/src/CompetitionSeasonManager/components/CompetitionsForm.tsx +113 -0
  190. package/src/CompetitionSeasonManager/components/CreateSeasonForm.tsx +238 -0
  191. package/src/CompetitionSeasonManager/components/SeasonHeader.tsx +75 -0
  192. package/src/CompetitionSeasonManager/components/SeasonInfoForm.tsx +124 -0
  193. package/src/CompetitionSeasonManager/components/SeasonSettingsForm.tsx +185 -0
  194. package/src/CompetitionSeasonManager/index.tsx +151 -0
  195. package/src/Components/Switch.tsx +8 -3
  196. package/src/Engage/api/index.ts +21 -2
  197. package/src/Engage/components/SeasonCard.tsx +42 -0
  198. package/src/Engage/index.tsx +44 -7
  199. package/src/index.tsx +4 -1
  200. package/src/types.d.ts +48 -5
  201. package/lib/commonjs/Competition/components/ManageSeasonForm.js +0 -605
  202. package/lib/commonjs/Competition/components/ManageSeasonForm.js.map +0 -1
  203. package/lib/commonjs/Competition/components/SeasonInfoModal.js +0 -400
  204. package/lib/commonjs/Competition/components/SeasonInfoModal.js.map +0 -1
  205. package/lib/module/Competition/components/ManageSeasonForm.js +0 -596
  206. package/lib/module/Competition/components/ManageSeasonForm.js.map +0 -1
  207. package/lib/module/Competition/components/SeasonInfoModal.js +0 -391
  208. package/lib/module/Competition/components/SeasonInfoModal.js.map +0 -1
  209. package/lib/typescript/src/Competition/components/ManageSeasonForm.d.ts +0 -10
  210. package/lib/typescript/src/Competition/components/ManageSeasonForm.d.ts.map +0 -1
  211. package/lib/typescript/src/Competition/components/SeasonInfoModal.d.ts +0 -14
  212. package/lib/typescript/src/Competition/components/SeasonInfoModal.d.ts.map +0 -1
  213. package/src/Competition/components/ManageSeasonForm.tsx +0 -271
  214. package/src/Competition/components/SeasonInfoModal.tsx +0 -212
@@ -0,0 +1,244 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { View, ActivityIndicator, ScrollView } from 'react-native';
3
+ import type { CompanyProps, CompetitionPayoutTypeProps, CompetitionProps, CompetitionResultTypeProps, CompetitionSeasonPlayerProps, CompetitionSeasonProps, CompetitionSeasonResultProps, CompetitionTypeProps, MyPlayerProps, PlayerBalanceProps, PublicPlayerProps } from '../types';
4
+ import Colors from '../constants/colors';
5
+ import SeasonHeader from './components/SeasonHeader';
6
+ import { SeasonApi } from './api';
7
+ import CompetitionsSection from './components/CompetitionsSection';
8
+ import SeasonSettingsSection from './components/SeasonSettingsSection';
9
+ import EnterSeasonPrompt from './components/EnterSeasonPrompt';
10
+ import SeasonLeaderboard from './components/SeasonLeaderboard';
11
+
12
+ type SeasonModuleProps = {
13
+ competition_season_id:string,
14
+ onShareSeason: (competition_season:CompetitionSeasonProps) => void,
15
+ player_id?:string,
16
+ onRequestAuthenticate: (auth_strategy_id?:string) => void,
17
+ onCompetitionSelect: (c:CompetitionProps) => void
18
+ }
19
+
20
+ const SeasonModule = ({ competition_season_id, player_id, onShareSeason, onRequestAuthenticate, onCompetitionSelect }:SeasonModuleProps) => {
21
+ const [ module_size, setModuleSize ] = useState({ width:0, height:0 })
22
+ const [ show_leaderboard, setShowLeaderboard ] = useState(false);
23
+ const [ show_enter, setShowEnter ] = useState(false);
24
+ const [ my_data, setMyData ] = useState<{
25
+ my_loading: boolean,
26
+ player?:MyPlayerProps,
27
+ player_balance?:PlayerBalanceProps
28
+ }>({
29
+ my_loading: false
30
+ });
31
+ const [ module_data, setData ] = useState<{
32
+ loading:boolean,
33
+ action_loading:boolean,
34
+ competition_season?:CompetitionSeasonProps,
35
+ competitions:CompetitionProps[],
36
+ offset:number,
37
+ competition_types:CompetitionTypeProps[],
38
+ company?:CompanyProps,
39
+ admin?:PublicPlayerProps,
40
+ players:PublicPlayerProps[],
41
+ competition_season_players:CompetitionSeasonPlayerProps[],
42
+ competition_season_results:CompetitionSeasonResultProps[],
43
+ competition_result_types:CompetitionResultTypeProps[],
44
+ competition_payout_types:CompetitionPayoutTypeProps[]
45
+ }>({
46
+ loading:false,
47
+ action_loading:false,
48
+ competitions: [],
49
+ offset: 0,
50
+ competition_season_players:[],
51
+ competition_season_results: [],
52
+ competition_types:[],
53
+ players: [],
54
+ competition_result_types:[],
55
+ competition_payout_types:[]
56
+ });
57
+ const { action_loading, competition_season, competitions, competition_season_players, competition_season_results, competition_types, competition_payout_types, competition_result_types } = module_data;
58
+ const { player, player_balance } = my_data;
59
+ useEffect(() => {
60
+ if(!competition_season_id){ return }
61
+ SeasonApi.setEnvironment();
62
+ getSeasonData(competition_season_id)
63
+ },[competition_season_id])
64
+
65
+ useEffect(() => {
66
+ getMyDetails();
67
+ },[player_id])
68
+
69
+ const getMyDetails = async() => {
70
+ if(!player_id){ return setMyData({ ...my_data, player:undefined, player_balance: undefined }) }
71
+ setMyData({ ...my_data, my_loading: true })
72
+ let me = await SeasonApi.getMyDetails();
73
+ let pb = await SeasonApi.getMyBalance();
74
+ setMyData({
75
+ ...my_data,
76
+ my_loading: false,
77
+ player: me,
78
+ player_balance: pb
79
+ })
80
+ }
81
+
82
+ const getSeasonData = async(id:string) => {
83
+ setData({ ...module_data, loading:true })
84
+ const season = await SeasonApi.getSeasonById(id);
85
+ const comps = await SeasonApi.getCompetitionsBySeasonId(id)
86
+ const opts = await SeasonApi.getCompetitionOptions();
87
+ const season_player_resp = await SeasonApi.getSeasonPlayersBySeasonId(id, 0);
88
+ const players = await SeasonApi.getPlayersByPlayerIds([season.admin_id])
89
+ let cmpny:CompanyProps | undefined = undefined
90
+ if(season.company_id){
91
+ const companies = await SeasonApi.getCompaniesByIds([season.company_id])
92
+ cmpny = companies[0]
93
+ }
94
+ setData({
95
+ ...module_data,
96
+ loading:false,
97
+ competition_season: season,
98
+ competitions:comps,
99
+ admin: players[0],
100
+ company: cmpny,
101
+ competition_payout_types: opts.competition_payout_types,
102
+ competition_result_types: opts.competition_result_types,
103
+ competition_types: opts.competition_types,
104
+ competition_season_players: season_player_resp.competition_season_players,
105
+ competition_season_results: season_player_resp.competition_season_results
106
+ })
107
+ }
108
+
109
+ const handleJoin = async() => {
110
+ if(action_loading){ return } //No mashy
111
+ if(!player_id){ return onRequestAuthenticate() }
112
+ setData({ ...module_data, action_loading: true });
113
+ const resp = await SeasonApi.joinSeason(competition_season_id);
114
+ setData({
115
+ ...module_data,
116
+ action_loading: false,
117
+ competition_season: resp.competition_season,
118
+ competition_season_players: competition_season_players.filter(cp => cp.competition_season_player_id != resp.competition_season_player.competition_season_player_id).concat(resp.competition_season_player),
119
+ competition_season_results: competition_season_results.filter(cr => cr.competition_season_result_id != resp.competition_season_result.competition_season_result_id).concat(resp.competition_season_result),
120
+ competitions: competitions.filter(c => !resp.competitions.find(nc => nc.competition_id == c.competition_id)).concat(resp.competitions)
121
+ })
122
+ }
123
+
124
+ const handleLeave = async(competition_season_player_id:string) => {
125
+ if(action_loading){ return }
126
+ if(!player_id){ return onRequestAuthenticate() }
127
+ setData({ ...module_data, action_loading: true });
128
+ const resp = await SeasonApi.leaveSeason(competition_season_player_id);
129
+ setData({
130
+ ...module_data,
131
+ action_loading: false,
132
+ competition_season: resp.competition_season,
133
+ competition_season_players: competition_season_players.filter(cp => cp.competition_season_player_id != resp.competition_season_player.competition_season_player_id),
134
+ competition_season_results: competition_season_results.filter(cr => cr.competition_season_result_id != resp.competition_season_result.competition_season_result_id).concat(resp.competition_season_result),
135
+ competitions: competitions.filter(c => !resp.competitions.find(nc => nc.competition_id == c.competition_id)).concat(resp.competitions)
136
+ })
137
+ }
138
+
139
+ if(!competition_season){
140
+ return (
141
+ <View style={{ flex:1 }}>
142
+ <ActivityIndicator
143
+ size='large'
144
+ style={{ padding:20, alignSelf:'center' }}
145
+ color={Colors.brand.midnight}
146
+ />
147
+ </View>
148
+ )
149
+ }
150
+
151
+ const selected_season_type = competition_types.find(ct => ct.competition_type_id == competition_season.competition_type_id);
152
+ const selected_season_result_type = competition_result_types.find(crt => crt.competition_result_type_id == competition_season.competition_result_type_id);
153
+ const authenticated_season_player = competition_season_players.find(csp => csp.player_id == player_id);
154
+ const authenticated_season_result = competition_season_results.find(csp => csp.player_id == player_id);
155
+
156
+ return (
157
+ <View style={{ flex:1 }}>
158
+ <ScrollView style={{ flex:1 }} onLayout={(ev) => {
159
+ const { width, height } = ev.nativeEvent.layout;
160
+ setModuleSize({ width, height });
161
+ }}>
162
+ <SeasonHeader
163
+ competition_season={competition_season}
164
+ competitions={competitions}
165
+ action_loading={action_loading}
166
+ authenticated_season_player={authenticated_season_player}
167
+ onShareSeason={onShareSeason}
168
+ onJoin={() => setShowEnter(true)}
169
+ onLeave={(competition_season_player_id) => handleLeave(competition_season_player_id)}
170
+ />
171
+ {selected_season_type ?
172
+ <SeasonLeaderboard
173
+ authenticated_player={player}
174
+ authenticated_season_player={authenticated_season_player}
175
+ authenticated_season_result={authenticated_season_result}
176
+ width={module_size.width}
177
+ onLeaderSelect={(p) => console.log(p)}
178
+ view_mode='short'
179
+ height={module_size.height}
180
+ competition_season={competition_season}
181
+ competition_type={selected_season_type}
182
+ onSeeFull={() => setShowLeaderboard(true)}
183
+ />
184
+ :<></>}
185
+ {selected_season_type && selected_season_result_type ?
186
+ <SeasonSettingsSection
187
+ competition_season={competition_season}
188
+ competition_result_type={selected_season_result_type}
189
+ competition_type={selected_season_type}
190
+ competition_payouts={competition_payout_types}
191
+ width={module_size.width}
192
+ />
193
+ :<></>}
194
+ {selected_season_type && selected_season_result_type ?
195
+ <CompetitionsSection
196
+ competitions={competitions}
197
+ competition_result_type={selected_season_result_type}
198
+ competition_type={selected_season_type}
199
+ onCompetitionSelect={(c) => onCompetitionSelect(c)}
200
+ width={module_size.width}
201
+ />
202
+ :<></>}
203
+ </ScrollView>
204
+ {show_enter && selected_season_result_type && selected_season_type ?
205
+ <View style={{ position:'absolute', top:0, left:0, right:0, bottom:0, backgroundColor:Colors.shades.black_faded, justifyContent:'flex-end' }}>
206
+ <EnterSeasonPrompt
207
+ width={module_size.width}
208
+ competition_season={competition_season}
209
+ competition_result_type={selected_season_result_type}
210
+ competition_type={selected_season_type}
211
+ player_balance={player_balance}
212
+ player={player}
213
+ onEnter={(promo) => {
214
+ console.log(promo)
215
+ handleJoin()
216
+ setShowEnter(false);
217
+ }}
218
+ onCancel={() => setShowEnter(false)}
219
+ onVerify={() => console.log('VERIFY!')}
220
+ />
221
+ </View>
222
+ :<></>}
223
+ {show_leaderboard && selected_season_type ?
224
+ <View style={{ position:'absolute', top:0, left:0, right:0, bottom:0, backgroundColor:Colors.shades.black_faded }}>
225
+ <SeasonLeaderboard
226
+ authenticated_player={player}
227
+ authenticated_season_player={authenticated_season_player}
228
+ authenticated_season_result={authenticated_season_result}
229
+ width={module_size.width}
230
+ onLeaderSelect={(p) => console.log(p)}
231
+ view_mode='full'
232
+ height={module_size.height}
233
+ competition_season={competition_season}
234
+ competition_type={selected_season_type}
235
+ onSeeFull={() => console.log('See full')}
236
+ onClose={() => setShowLeaderboard(false)}
237
+ />
238
+ </View>
239
+ :<></>}
240
+ </View>
241
+ )
242
+ }
243
+
244
+ export default SeasonModule
@@ -0,0 +1,127 @@
1
+ import axios from "axios";
2
+ import { APIOverrides } from "../../ApiOverrides";
3
+ import type { CompanyProps, CompetitionPayoutTypeProps, CompetitionProps, CompetitionResultTypeProps, CompetitionSeasonProps, CompetitionTypeProps, MyPlayerProps } from "../../types";
4
+ import type { CompanyMemberProps } from "../../Authenticator/api/types";
5
+ import moment from "moment-mini";
6
+
7
+
8
+ let AUTH_SVC_API = ''
9
+ let TP_SVC_API = ''
10
+ //let EVENT_SVC_API = ''
11
+ //let MK_SVC_API = ''
12
+
13
+
14
+ export { ManageSeasonApi, ManageSeasonHelpers }
15
+
16
+ const ManageSeasonApi = {
17
+ setEnvironment: () => {
18
+ const endpoints = APIOverrides.getEndpoints();
19
+ TP_SVC_API = endpoints['TP_SVC_API'] as string;
20
+ //EVENT_SVC_API = endpoints['EVENT_SVC_API'] as string;
21
+ //MK_SVC_API = endpoints['MK_SVC_API'] as string;
22
+ AUTH_SVC_API = endpoints['AUTH_SVC_API'] as string;
23
+ },
24
+ getCompetitionOptions: async():Promise<{competition_types:CompetitionTypeProps[], competition_result_types:CompetitionResultTypeProps[], competition_payout_types:CompetitionPayoutTypeProps[]}> => {
25
+ const resp = await axios.get(`${TP_SVC_API}/v1/competitions/options`)
26
+ return resp.data
27
+ },
28
+ getSeasonTemplates: async():Promise<CompetitionSeasonProps[]> => {
29
+ const resp = await axios.get(`${TP_SVC_API}/v2/competitions/seasons/templates`);
30
+ return resp.data.competition_seasons
31
+ },
32
+ getMyDetails: async():Promise<MyPlayerProps> => {
33
+ const resp = await axios.get(`${AUTH_SVC_API}/v1/players/player/me`)
34
+ return resp.data.player
35
+ },
36
+ getMyCompanies : async():Promise<{companies:CompanyProps[], company_members:CompanyMemberProps[]}> => {
37
+ const resp = await axios.get(`${AUTH_SVC_API}/v1/companies/me`)
38
+ const { companies, company_members } = resp.data
39
+ return { companies, company_members }
40
+ },
41
+ activateSeason: async(competition_season_id:string):Promise<CompetitionSeasonProps> => {
42
+ const resp = await axios.post(`${TP_SVC_API}/v2/competitions/season/activate`, { competition_season_id });
43
+ return resp.data.competition_season
44
+ },
45
+ deleteSeason: async(competition_season_id:string):Promise<CompetitionSeasonProps> => {
46
+ const resp = await axios.post(`${TP_SVC_API}/v2/competitions/season/delete`, { competition_season_id });
47
+ return resp.data.competition_season
48
+ },
49
+ getSeasonById: async(competition_season_id:string):Promise<CompetitionSeasonProps> => {
50
+ const resp = await axios.get(`${TP_SVC_API}/v2/competitions/seasons/season/${competition_season_id}`);
51
+ return resp.data.competition_season
52
+ },
53
+ getCompetitionsBySeasonId: async(competition_season_id:string):Promise<CompetitionProps[]> => {
54
+ const resp = await axios.get(`${TP_SVC_API}/v2/competitions/season/${competition_season_id}`);
55
+ return resp.data.competitions
56
+ },
57
+ createSeason: async(competition_season:CompetitionSeasonProps):Promise<CompetitionSeasonProps> => {
58
+ const resp = await axios.post(`${TP_SVC_API}/v2/competitions/seasons/season/create`, { competition_season });
59
+ console.log(resp.data)
60
+ return resp.data.competition_season
61
+ },
62
+ updateSeason: async(competition_season:CompetitionSeasonProps):Promise<CompetitionSeasonProps> => {
63
+ const resp = await axios.post(`${TP_SVC_API}/v2/competitions/seasons/season/update`, { competition_season })
64
+ return resp.data.competition_season
65
+ }
66
+ }
67
+
68
+
69
+ const ManageSeasonHelpers = {
70
+ getPendingSeason: ():CompetitionSeasonProps => {
71
+ return {
72
+ competition_season_id: '',
73
+ admin_id: '',
74
+ season_name:'',
75
+ season_description:'Pending Description',
76
+ invite_only: true,
77
+ ticket_revenue:0,
78
+ tickets_available: 10,
79
+ tickets_sold:0,
80
+ single_buy_in: true,
81
+ expected_competition_count: 1,
82
+ ticket_price:0,
83
+ max_picks: 0,
84
+ initial_balance: 1000,
85
+ balance_rollover: false,
86
+ unallocated_funds: 0,
87
+ competition_type_id: '1',
88
+ allow_late_buy_in: false,
89
+ payout_allocation: 1,
90
+ competition_result_type_id: '1',
91
+ payout_amt: 0,
92
+ scheduled_datetime: moment().add(1, 'week'),
93
+ status: 'pending',
94
+ market_type: 'FOR_MONEY',
95
+ create_datetime: '',
96
+ last_update_datetime:''
97
+ }
98
+ },
99
+ isSeasonValid: (cs:CompetitionSeasonProps):string[] => {
100
+ let errors:string[] = []
101
+ if(!cs.season_name){ errors.push('Please provide a valid name') }
102
+ if(!cs.competition_result_type_id){ errors.push('Please give a valid competition result type') }
103
+ return errors
104
+ },
105
+ isInfoChanged: (cs:CompetitionSeasonProps, ds:CompetitionSeasonProps) => {
106
+ let init_cs = JSON.stringify({ season_name: cs.season_name, season_description: cs.season_description, invite_only:cs.invite_only })
107
+ let draft_cs = JSON.stringify({ season_name: ds.season_name, season_description: ds.season_description, invite_only:ds.invite_only })
108
+ return draft_cs != init_cs ? true : false
109
+ },
110
+ isSettingsChanged: (cs:CompetitionSeasonProps, ds:CompetitionSeasonProps) => {
111
+ let init_cs = JSON.stringify({ ticket_price:cs.ticket_price, payout_allocation:cs.payout_allocation, competition_type_id:cs.competition_type_id, competition_result_type_id:cs.competition_result_type_id, max_picks: cs.max_picks, initial_balance: cs.initial_balance, allow_late_buy_in:cs.allow_late_buy_in })
112
+ let draft_cs = JSON.stringify({ ticket_price:ds.ticket_price, payout_allocation: ds.payout_allocation, competition_type_id:ds.competition_type_id, competition_result_type_id:ds.competition_result_type_id, max_picks: ds.max_picks, initial_balance: ds.initial_balance, allow_late_buy_in:ds.allow_late_buy_in })
113
+ return draft_cs != init_cs ? true : false
114
+ },
115
+ isSettingsValid: (ds:CompetitionSeasonProps) => {
116
+ if(!ds.competition_type_id){ return false }
117
+ if(!ds.competition_result_type_id){ return false }
118
+ let payout_allocation = parseFloat(ds.payout_allocation as string)
119
+ let ticket_price = parseFloat(ds.ticket_price as string)
120
+ if(isNaN(payout_allocation)){ return false }
121
+ if(isNaN(ticket_price)){ return false }
122
+ if(ticket_price < 0){ return false }
123
+ if(payout_allocation <= 0){ return false }
124
+ if(payout_allocation > 1){ return false }
125
+ return true
126
+ }
127
+ }
@@ -0,0 +1,113 @@
1
+ import React, { useState } from 'react';
2
+ import { TouchableOpacity, View, FlatList } from 'react-native';
3
+ import { view_styles } from '../../constants/styles';
4
+ import type { CompetitionProps, CompetitionResultTypeProps, CompetitionSeasonProps, CompetitionTypeProps } from '../../types';
5
+ import CompetitionCard from '../../Engage/components/CompetitionCard';
6
+ import { Button, Icons, Text } from '../../Components';
7
+ import Colors from '../../constants/colors';
8
+ import moment from 'moment-mini';
9
+
10
+ type CompetitionsFormProps = {
11
+ competition_season:CompetitionSeasonProps,
12
+ competitions:CompetitionProps[],
13
+ competition_types:CompetitionTypeProps[],
14
+ competition_result_types:CompetitionResultTypeProps[],
15
+ onAddCompetition:() => void
16
+ }
17
+
18
+ const CompetitionsForm = ({ competition_season, competitions, competition_result_types, competition_types, onAddCompetition }:CompetitionsFormProps) => {
19
+ const [ expanded, setExpanded ] = useState(true);
20
+ const [ active_tab, setActiveTab ] = useState('active');
21
+
22
+ let filtered_comptitions = [ ...competitions ]
23
+ if(active_tab == 'active'){ filtered_comptitions = filtered_comptitions.filter(c => c.status != 'closed') }
24
+ else { filtered_comptitions = filtered_comptitions.filter(c => c.status == 'closed') }
25
+
26
+ const renderCompetitions = (data:{item:CompetitionProps, index:number}) => {
27
+ const competition_type = competition_types.find(ct => ct.competition_type_id == data.item.competition_type_id)
28
+ const competition_result_type = competition_result_types.find(crt => crt.competition_result_type_id == data.item.competition_result_type_id);
29
+ if(!competition_type || !competition_result_type){ return <></> }
30
+ return (
31
+ <View style={{ margin:4 }}>
32
+ <CompetitionCard
33
+ competition={data.item}
34
+ competition_result_type={competition_result_type}
35
+ competition_type={competition_type}
36
+ onCompetitionSelect={(comp) => console.log(comp)}
37
+ />
38
+ </View>
39
+ )
40
+ }
41
+
42
+ return (
43
+ <View style={{ ...view_styles.section }}>
44
+ <TouchableOpacity style={{ ...view_styles.section_header }} onPress={() => setExpanded(!expanded)}>
45
+ <View style={{ flex:1 }}>
46
+ <Text theme='header'>Competitions</Text>
47
+ <Text style={{ marginTop:3 }} theme='body'>Below are the competitions that are included in this season</Text>
48
+ </View>
49
+ <Icons.ChevronIcon direction={expanded ? 'up' : 'down'} size={8} color={Colors.brand.midnight} />
50
+ </TouchableOpacity>
51
+ {expanded ?
52
+ <View style={{ ...view_styles.section_body, padding:0 }}>
53
+ <View style={{ ...view_styles.section_header, backgroundColor:Colors.shades.shade100 }}>
54
+ <View style={{ flex:1 }}>
55
+ <Text theme='header_2'>{active_tab == 'active' ? 'Active Competitions' : 'Closed Competitions'}</Text>
56
+ </View>
57
+ <Button
58
+ title='ADD'
59
+ style={{ opacity: competition_season.following_season_id ? 0.5: 1 }}
60
+ title_color={Colors.shades.white}
61
+ backgroundColor={Colors.utility.success}
62
+ onPress={() => {
63
+ if(competition_season.following_season_id){ return alert('Competitions are created based on the template season and cannot be customized') }
64
+ onAddCompetition()
65
+ }}
66
+ />
67
+ </View>
68
+ <View style={{ ...view_styles.body_row, padding:0, margin:10, backgroundColor:Colors.shades.white, borderRadius:22, borderWidth:4, borderColor:Colors.shades.shade100}}>
69
+ <Button
70
+ title='ACTIVE'
71
+ title_color={active_tab == 'active' ? Colors.shades.white : Colors.brand.midnight}
72
+ title_weight={active_tab == 'active' ? 'bold' : 'regular'}
73
+ padding={15}
74
+ title_size={12}
75
+ style={{flex:1}}
76
+ borderRadiusOverride={{
77
+ borderTopLeftRadius: 22,
78
+ borderBottomLeftRadius:22,
79
+ borderTopRightRadius:0,
80
+ borderBottomRightRadius:0
81
+ }}
82
+ backgroundColor={active_tab == 'active' ? Colors.brand.midnight : Colors.shades.white}
83
+ onPress={() => setActiveTab('active')}
84
+ />
85
+ <Button
86
+ title='CLOSED'
87
+ title_size={12}
88
+ title_color={active_tab == 'closed' ? Colors.shades.white : Colors.brand.midnight}
89
+ title_weight={active_tab == 'closed' ? 'bold' : 'regular'}
90
+ padding={15}
91
+ style={{flex:1}}
92
+ borderRadiusOverride={{
93
+ borderTopLeftRadius: 0,
94
+ borderBottomLeftRadius:0,
95
+ borderTopRightRadius:22,
96
+ borderBottomRightRadius:22
97
+ }}
98
+ backgroundColor={active_tab == 'closed' ? Colors.brand.midnight : Colors.shades.white}
99
+ onPress={() => setActiveTab('closed')}
100
+ />
101
+ </View>
102
+ <FlatList
103
+ data={filtered_comptitions.sort((a,b) => moment(b.scheduled_datetime).unix() - moment(a.scheduled_datetime).unix())}
104
+ renderItem={renderCompetitions}
105
+ keyExtractor={(item) => item.competition_id.toString()}
106
+ />
107
+ </View>
108
+ :<></>}
109
+ </View>
110
+ )
111
+ }
112
+
113
+ export default CompetitionsForm