be-components 6.0.3 → 6.0.5

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 (129) hide show
  1. package/lib/commonjs/Components/Dropdown.js +17 -19
  2. package/lib/commonjs/Components/Dropdown.js.map +1 -1
  3. package/lib/commonjs/Components/Icons.js +30 -0
  4. package/lib/commonjs/Components/Icons.js.map +1 -1
  5. package/lib/commonjs/Components/Pagination.js +70 -6
  6. package/lib/commonjs/Components/Pagination.js.map +1 -1
  7. package/lib/commonjs/LocationTracker/api/index.js +2 -0
  8. package/lib/commonjs/LocationTracker/api/index.js.map +1 -1
  9. package/lib/commonjs/LocationTracker/index.js +39 -54
  10. package/lib/commonjs/LocationTracker/index.js.map +1 -1
  11. package/lib/commonjs/MarketComponents/api/index.js +137 -2
  12. package/lib/commonjs/MarketComponents/api/index.js.map +1 -1
  13. package/lib/commonjs/MarketComponents/components/AthleteMarket/index.js +2 -2
  14. package/lib/commonjs/MarketComponents/components/AthleteMarket/index.js.map +1 -1
  15. package/lib/commonjs/MarketComponents/components/MarketManager/MarketResolveForm.js +120 -5
  16. package/lib/commonjs/MarketComponents/components/MarketManager/MarketResolveForm.js.map +1 -1
  17. package/lib/commonjs/MarketComponents/components/TeamEventMarket/api/index.js +28 -0
  18. package/lib/commonjs/MarketComponents/components/TeamEventMarket/api/index.js.map +1 -1
  19. package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js +3 -2
  20. package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
  21. package/lib/commonjs/ProfileManager/Components/ProfileWizard.js +1 -130
  22. package/lib/commonjs/ProfileManager/Components/ProfileWizard.js.map +1 -1
  23. package/lib/commonjs/ProfileManager/index.js +15 -5
  24. package/lib/commonjs/ProfileManager/index.js.map +1 -1
  25. package/lib/commonjs/SocialComponents/SocialOrderCard.js +50 -1
  26. package/lib/commonjs/SocialComponents/SocialOrderCard.js.map +1 -1
  27. package/lib/module/Components/Dropdown.js +13 -15
  28. package/lib/module/Components/Dropdown.js.map +1 -1
  29. package/lib/module/Components/Icons.js +30 -0
  30. package/lib/module/Components/Icons.js.map +1 -1
  31. package/lib/module/Components/Pagination.js +68 -5
  32. package/lib/module/Components/Pagination.js.map +1 -1
  33. package/lib/module/LocationTracker/api/index.js +2 -0
  34. package/lib/module/LocationTracker/api/index.js.map +1 -1
  35. package/lib/module/LocationTracker/index.js +16 -31
  36. package/lib/module/LocationTracker/index.js.map +1 -1
  37. package/lib/module/MarketComponents/api/index.js +137 -2
  38. package/lib/module/MarketComponents/api/index.js.map +1 -1
  39. package/lib/module/MarketComponents/components/AthleteMarket/index.js +2 -2
  40. package/lib/module/MarketComponents/components/AthleteMarket/index.js.map +1 -1
  41. package/lib/module/MarketComponents/components/MarketManager/MarketResolveForm.js +121 -6
  42. package/lib/module/MarketComponents/components/MarketManager/MarketResolveForm.js.map +1 -1
  43. package/lib/module/MarketComponents/components/TeamEventMarket/api/index.js +28 -0
  44. package/lib/module/MarketComponents/components/TeamEventMarket/api/index.js.map +1 -1
  45. package/lib/module/MarketComponents/components/TeamEventMarket/index.js +3 -2
  46. package/lib/module/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
  47. package/lib/module/ProfileManager/Components/ProfileWizard.js +1 -132
  48. package/lib/module/ProfileManager/Components/ProfileWizard.js.map +1 -1
  49. package/lib/module/ProfileManager/index.js +15 -5
  50. package/lib/module/ProfileManager/index.js.map +1 -1
  51. package/lib/module/SocialComponents/SocialOrderCard.js +50 -1
  52. package/lib/module/SocialComponents/SocialOrderCard.js.map +1 -1
  53. package/lib/typescript/lib/commonjs/Components/Dropdown.d.ts.map +1 -1
  54. package/lib/typescript/lib/commonjs/Components/Icons.d.ts +5 -0
  55. package/lib/typescript/lib/commonjs/Components/Icons.d.ts.map +1 -1
  56. package/lib/typescript/lib/commonjs/Components/Pagination.d.ts +3 -1
  57. package/lib/typescript/lib/commonjs/Components/Pagination.d.ts.map +1 -1
  58. package/lib/typescript/lib/commonjs/LocationTracker/api/index.d.ts +1 -0
  59. package/lib/typescript/lib/commonjs/LocationTracker/api/index.d.ts.map +1 -1
  60. package/lib/typescript/lib/commonjs/LocationTracker/index.d.ts.map +1 -1
  61. package/lib/typescript/lib/commonjs/MarketComponents/api/index.d.ts +10 -0
  62. package/lib/typescript/lib/commonjs/MarketComponents/api/index.d.ts.map +1 -1
  63. package/lib/typescript/lib/commonjs/MarketComponents/components/MarketManager/MarketResolveForm.d.ts +2 -1
  64. package/lib/typescript/lib/commonjs/MarketComponents/components/MarketManager/MarketResolveForm.d.ts.map +1 -1
  65. package/lib/typescript/lib/commonjs/MarketComponents/components/TeamEventMarket/api/index.d.ts.map +1 -1
  66. package/lib/typescript/lib/commonjs/ProfileManager/Components/ProfileWizard.d.ts.map +1 -1
  67. package/lib/typescript/lib/commonjs/ProfileManager/index.d.ts +3 -1
  68. package/lib/typescript/lib/commonjs/ProfileManager/index.d.ts.map +1 -1
  69. package/lib/typescript/lib/commonjs/SocialComponents/SocialOrderCard.d.ts +2 -1
  70. package/lib/typescript/lib/commonjs/SocialComponents/SocialOrderCard.d.ts.map +1 -1
  71. package/lib/typescript/lib/module/Components/Dropdown.d.ts +1 -2
  72. package/lib/typescript/lib/module/Components/Dropdown.d.ts.map +1 -1
  73. package/lib/typescript/lib/module/Components/Icons.d.ts +5 -0
  74. package/lib/typescript/lib/module/Components/Icons.d.ts.map +1 -1
  75. package/lib/typescript/lib/module/Components/Pagination.d.ts +3 -1
  76. package/lib/typescript/lib/module/Components/Pagination.d.ts.map +1 -1
  77. package/lib/typescript/lib/module/LocationTracker/api/index.d.ts +1 -0
  78. package/lib/typescript/lib/module/LocationTracker/api/index.d.ts.map +1 -1
  79. package/lib/typescript/lib/module/LocationTracker/index.d.ts +1 -2
  80. package/lib/typescript/lib/module/LocationTracker/index.d.ts.map +1 -1
  81. package/lib/typescript/lib/module/MarketComponents/api/index.d.ts +10 -0
  82. package/lib/typescript/lib/module/MarketComponents/api/index.d.ts.map +1 -1
  83. package/lib/typescript/lib/module/MarketComponents/components/MarketManager/MarketResolveForm.d.ts +2 -1
  84. package/lib/typescript/lib/module/MarketComponents/components/MarketManager/MarketResolveForm.d.ts.map +1 -1
  85. package/lib/typescript/lib/module/MarketComponents/components/TeamEventMarket/api/index.d.ts.map +1 -1
  86. package/lib/typescript/lib/module/MarketComponents/components/TeamEventMarket/index.d.ts +2 -1
  87. package/lib/typescript/lib/module/MarketComponents/components/TeamEventMarket/index.d.ts.map +1 -1
  88. package/lib/typescript/lib/module/ProfileManager/Components/ProfileWizard.d.ts.map +1 -1
  89. package/lib/typescript/lib/module/ProfileManager/index.d.ts +3 -1
  90. package/lib/typescript/lib/module/ProfileManager/index.d.ts.map +1 -1
  91. package/lib/typescript/lib/module/SocialComponents/SocialOrderCard.d.ts +2 -1
  92. package/lib/typescript/lib/module/SocialComponents/SocialOrderCard.d.ts.map +1 -1
  93. package/lib/typescript/src/Components/Dropdown.d.ts.map +1 -1
  94. package/lib/typescript/src/Components/Icons.d.ts +1 -0
  95. package/lib/typescript/src/Components/Icons.d.ts.map +1 -1
  96. package/lib/typescript/src/Components/Pagination.d.ts +3 -1
  97. package/lib/typescript/src/Components/Pagination.d.ts.map +1 -1
  98. package/lib/typescript/src/LocationTracker/api/index.d.ts.map +1 -1
  99. package/lib/typescript/src/LocationTracker/index.d.ts.map +1 -1
  100. package/lib/typescript/src/MarketComponents/api/index.d.ts +22 -2
  101. package/lib/typescript/src/MarketComponents/api/index.d.ts.map +1 -1
  102. package/lib/typescript/src/MarketComponents/components/AthleteMarket/index.d.ts.map +1 -1
  103. package/lib/typescript/src/MarketComponents/components/MarketManager/MarketResolveForm.d.ts +1 -1
  104. package/lib/typescript/src/MarketComponents/components/MarketManager/MarketResolveForm.d.ts.map +1 -1
  105. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/api/index.d.ts.map +1 -1
  106. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts +2 -1
  107. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts.map +1 -1
  108. package/lib/typescript/src/MarketComponents/index.d.ts +2 -1
  109. package/lib/typescript/src/MarketComponents/index.d.ts.map +1 -1
  110. package/lib/typescript/src/ProfileManager/Components/ProfileWizard.d.ts.map +1 -1
  111. package/lib/typescript/src/ProfileManager/index.d.ts +3 -1
  112. package/lib/typescript/src/ProfileManager/index.d.ts.map +1 -1
  113. package/lib/typescript/src/SocialComponents/SocialOrderCard.d.ts +4 -3
  114. package/lib/typescript/src/SocialComponents/SocialOrderCard.d.ts.map +1 -1
  115. package/package.json +1 -1
  116. package/src/Components/Dropdown.tsx +13 -12
  117. package/src/Components/Icons.tsx +17 -0
  118. package/src/Components/Pagination.tsx +46 -6
  119. package/src/LocationTracker/api/index.tsx +2 -0
  120. package/src/LocationTracker/index.tsx +16 -26
  121. package/src/MarketComponents/api/index.ts +110 -4
  122. package/src/MarketComponents/components/AthleteMarket/index.tsx +2 -3
  123. package/src/MarketComponents/components/MarketManager/MarketResolveForm.tsx +72 -6
  124. package/src/MarketComponents/components/TeamEventMarket/api/index.ts +27 -1
  125. package/src/MarketComponents/components/TeamEventMarket/index.tsx +4 -4
  126. package/src/ProfileManager/Components/ProfileWizard.tsx +2 -139
  127. package/src/ProfileManager/index.tsx +9 -7
  128. package/src/SocialComponents/SocialOrderCard.tsx +24 -3
  129. package/src/types.d.ts +11 -1
@@ -27,6 +27,15 @@ const MarketComponentApi = {
27
27
  return []
28
28
  }
29
29
  },
30
+ createOrder: async(order:OrderProps):Promise<OrderProps | undefined> => {
31
+ try {
32
+ const resp = await axios.post(`${MK_SVC_API}/v1/orders/order/create`, { order });
33
+ return resp.data.order
34
+ } catch (e) {
35
+ console.log(e);
36
+ return undefined
37
+ }
38
+ },
30
39
  getPlayersByIds: async(player_ids:string[]):Promise<PublicPlayerProps[]> => {
31
40
  try {
32
41
  if(player_ids.length == 0){ return [] }
@@ -202,7 +211,7 @@ const MarketComponentApi = {
202
211
  }
203
212
 
204
213
  },
205
- getAthletesByIds : async(athlete_ids:string[]) => {
214
+ getAthletesByIds : async(athlete_ids:string[]):Promise<AthleteProps[]> => {
206
215
  try {
207
216
  if(athlete_ids.length == 0){ return [] }
208
217
  const resp = await axios.post(`${EVENT_SVC_API}/v1/athletes/bulk/get`, { attribute: 'athlete_id', values: athlete_ids })
@@ -238,13 +247,12 @@ const MarketComponentApi = {
238
247
  return []
239
248
  }
240
249
  },
241
- getBestAvailableOrders:async():Promise<BestAvailableResponseProps | undefined> => {
250
+ getBestAvailableOrders:async():Promise<BestAvailableResponseProps> => {
242
251
  try {
243
252
  const resp = await axios.get(`${MK_SVC_API}/v1/orders/available`);
244
253
  return resp.data
245
254
  } catch (e) {
246
- console.log(e)
247
- return undefined
255
+ return { events: [], tournaments: [], matches: [] }
248
256
  }
249
257
  },
250
258
  getAthletesByTeamId: async(team_id:string):Promise<AthleteProps[]> => {
@@ -317,6 +325,104 @@ const MarketComponentHelpers = {
317
325
  return earningsMultiplyer * amt
318
326
  }
319
327
  },
328
+ getMissingTournaments:(matches:MatchProps[], tournaments:TournamentProps[]) => {
329
+ let needed_tourneys:string[] = []
330
+ matches.map(m => {
331
+ let tourney = tournaments.find(t => t.tournament_id == m.tournament_id);
332
+ if(!tourney){ needed_tourneys.push(m.tournament_id) }
333
+ })
334
+ return needed_tourneys
335
+ },
336
+ extractAthleteIds: (athlete_ids?:string):string[] => {
337
+ if(!athlete_ids || athlete_ids == 'undefined'){ return [] }
338
+ let split_ids = athlete_ids.split(',');
339
+ let ath_ids:string[] = []
340
+ split_ids.map(id => {
341
+ if(isNaN(parseInt(id))){ return }
342
+ return ath_ids.push(id)
343
+ });
344
+ return ath_ids
345
+ },
346
+ formatBestAvailable:(ba_response:{ events:EventProps[], tournaments:TournamentProps[], matches:MatchProps[] }) => {
347
+ let best_available:{ [key:string]: BestAvailableOrderProps[] } = {}
348
+ let order_stats: { [key:string]: EventOrderStatProps[] } = {}
349
+ let latest_trades: { [key:string]: TradeProps[] } = {}
350
+ let athlete_ids:string[] = []
351
+ let team_ids: string[] = []
352
+
353
+ ba_response.events.map((e:EventProps) => {
354
+ if(!e.supported_markets){ return }
355
+ let ao:BestAvailableOrderProps[] = [], os:EventOrderStatProps[] = [], lt:TradeProps[] = []
356
+ let supported_markets = e.supported_markets.filter(m => m)
357
+
358
+ supported_markets.map(m => {
359
+ m.available_orders?.map(o => ao.push(o))
360
+ m.order_stats?.map(s => os.push(s))
361
+ m.latest_trades?.map(t => {
362
+ if(t.side_type == 'athlete'){ athlete_ids.push(t.side_id) }
363
+ lt.push(t)
364
+ })
365
+ });
366
+ best_available[`team:${e.event_id}`] = ao
367
+ order_stats[`team:${e.event_id}`] = os
368
+ latest_trades[`team:${e.event_id}`] = lt
369
+ })
370
+ ba_response.tournaments.map((e:TournamentProps) => {
371
+ if(!e.supported_markets){ return }
372
+ let ao:BestAvailableOrderProps[] = [], os:EventOrderStatProps[] = [], lt:TradeProps[] = []
373
+ let supported_markets = e.supported_markets.filter(m => m)
374
+ supported_markets.map(m => {
375
+ m.available_orders?.map(o => ao.push(o))
376
+ m.order_stats?.map(s => os.push(s))
377
+ m.latest_trades?.map(t => {
378
+ if(t.side_type == 'athlete'){ athlete_ids.push(t.side_id) }
379
+ lt.push(t)
380
+ })
381
+ });
382
+ best_available[`tournament:${e.tournament_id}`] = ao
383
+ order_stats[`tournament:${e.tournament_id}`] = os
384
+ latest_trades[`tournament:${e.tournament_id}`] = lt
385
+
386
+ })
387
+ ba_response.matches.map((e:MatchProps) => {
388
+ if(!e.supported_markets){ return }
389
+ if(e.participant_type == 'athlete'){ athlete_ids = athlete_ids.concat(e.participants) }
390
+ let ao:BestAvailableOrderProps[] = [], os:EventOrderStatProps[] = [], lt:TradeProps[] = []
391
+ let supported_markets = e.supported_markets.filter(m => m)
392
+ supported_markets.map(m => {
393
+
394
+ m.available_orders?.map(o => ao.push(o))
395
+ m.order_stats?.map(s => os.push(s))
396
+ m.latest_trades?.map(t => lt.push(t))
397
+ });
398
+ best_available[`match:${e.match_id}`] = ao
399
+ order_stats[`match:${e.match_id}`] = os
400
+ latest_trades[`match:${e.match_id}`] = lt
401
+
402
+ let existing_tournament = order_stats[`tournament:${e.tournament_id}`]
403
+ if(!existing_tournament){
404
+ order_stats[`tournament:${e.tournament_id}`] = os
405
+ } else {
406
+ order_stats[`tournament:${e.tournament_id}`] = existing_tournament.concat(os)
407
+ }
408
+
409
+ let existing_tournament_trades = latest_trades[`tournament:${e.tournament_id}`]
410
+ if(!existing_tournament_trades){
411
+ latest_trades[`tournament:${e.tournament_id}`] = lt
412
+ } else {
413
+ latest_trades[`tournament:${e.tournament_id}`] = existing_tournament_trades.concat(lt)
414
+ }
415
+
416
+ let existing_tournament_orders = best_available[`tournament:${e.tournament_id}`]
417
+ if(!existing_tournament_orders){
418
+ best_available[`tournament:${e.tournament_id}`] = ao
419
+ } else {
420
+ best_available[`tournament:${e.tournament_id}`] = existing_tournament_orders.concat(ao)
421
+ }
422
+ })
423
+ athlete_ids = [ ...new Set(athlete_ids.map(id => id)) ]
424
+ return { best_available, order_stats, latest_trades, athlete_ids, team_ids }
425
+ },
320
426
  getOrdersFromTrade:(trade:TradeProps, orders:OrderProps[]) => {
321
427
  if(trade.position_ids.length == 0){ return { found_orders:[], found_positions: [] } }
322
428
  let found_orders:OrderProps[] = []
@@ -66,13 +66,12 @@ const AthleteMarket = ({ event, show_event, float, hide_image, direction, league
66
66
  </View>
67
67
  )
68
68
  },[athlete.athlete_id, is_locked, market.market_id, JSON.stringify(event_order_stats), JSON.stringify(best_available_orders)])
69
-
70
69
  return (
71
70
  <View float={float} style={[{ borderRadius:8 }, style]}>
72
71
  {!hide_stat_banner ?
73
72
  <LinearDiagnal
74
73
  label={market.stat_label ?? market.type}
75
- label_size={14}
74
+ label_size={12}
76
75
  style={{ borderTopLeftRadius:8, padding:5 }}
77
76
  left_color={Colors.incentive.gold}
78
77
  right_color={'#ebd197'}
@@ -98,7 +97,7 @@ const AthleteMarket = ({ event, show_event, float, hide_image, direction, league
98
97
  <Text style={{ marginTop:3 }} theme='description' textAlign='center' size={12}>{athlete.team?`${athlete.team.abbr}`:''} ({athlete.position})</Text>
99
98
  </View>
100
99
  </View>
101
- <View nativeID='market_sides' style={{ flexDirection:'row', flexGrow:1, justifyContent:'flex-end', alignItems:'center', padding:10 }}>
100
+ <View nativeID='market_sides' style={{ flexDirection:'row', flexGrow:1, justifyContent:direction=='vertical'?'center':'flex-end', alignItems:'center', padding:10 }}>
102
101
  {market.side_options.sort((a,b) => {
103
102
  let a_t = a.side == market.trade_side ? 1 : 0
104
103
  let b_t = b.side == market.trade_side ? 1 : 0
@@ -5,7 +5,7 @@ import { Checkbox, Icons, Switch } from '../../../Components';
5
5
  import { Alert, FlatList, Platform } from 'react-native';
6
6
  import { MarketComponentApi, MarketComponentHelpers } from '../../api';
7
7
  import { useColors } from '../../../constants/useColors';
8
- import { AthleteImage } from '../../../Components/Jerseys';
8
+ import { AthleteImage, TeamImage } from '../../../Components/Jerseys';
9
9
  import DropDown from '../../../Components/Dropdown';
10
10
 
11
11
  type MarketResolveFormProps = {
@@ -23,10 +23,10 @@ type MarketResolveFormProps = {
23
23
  }
24
24
 
25
25
  const sections = ['market','athlete','team','event_form','stat_form']
26
- const MarketResolveForm = ({ contest_title, contest_id, contest_type, market, athletes, market_stats, side_type, side_id, onResolve, onClose }:MarketResolveFormProps) => {
26
+ const MarketResolveForm = ({ contest_title, contest_id, contest_type, market, athletes, teams, market_stats, side_type, side_id, onResolve, onClose }:MarketResolveFormProps) => {
27
27
  const Colors = useColors();
28
28
  const [ expand_athletes, setExpandedAthletes ] = useState(false);
29
- //åconst [ expand_teams, setExpandedTeams ] = useState(false);
29
+ const [ expand_teams, setExpandedTeams ] = useState(false);
30
30
  const [ resolve, setResolve ] = useState<{
31
31
  action_loading:boolean,
32
32
  side_type?:string,
@@ -64,6 +64,7 @@ const MarketResolveForm = ({ contest_title, contest_id, contest_type, market, at
64
64
  if(isNaN(parseInt(stat_value))){ return false }
65
65
  return true
66
66
  }
67
+ if(!market.var_1_required && !winnings_side){ return false }
67
68
  if(market.type == 'Spread'){ return false }
68
69
  if(market.type == 'Total'){ return false }
69
70
  if(market.level == 'event'){
@@ -161,6 +162,34 @@ const MarketResolveForm = ({ contest_title, contest_id, contest_type, market, at
161
162
  )
162
163
  }
163
164
 
165
+ const renderTeams = (data:{ item:TeamProps, index:number}) => {
166
+ const selected = resolve.side_id == data.item.team_id ? true : false
167
+ const stats = market_stats.filter(s => s.market_id == market.market_id && s.side_type == 'athlete' && s.side_id == data.item.team_id);
168
+ const agg_stats = MarketComponentHelpers.getReconFromMarketStats(stats);
169
+ return (
170
+ <Button style={{ padding:10, flexDirection:'row', alignItems:'center', borderBottomWidth:1, borderColor:Colors.borders.light, borderRadius:0 }} onPress={() => {
171
+ if(selected){ setResolve({ ...resolve, side_id: undefined }) }
172
+ else { setResolve({ ...resolve, side_type: 'team', side_id: data.item.team_id }) }
173
+ setExpandedTeams(false);
174
+ }}>
175
+ <TeamImage
176
+ team={data.item}
177
+ size={14}
178
+ />
179
+ <View style={{ flex:1, marginLeft:10 }}>
180
+ <Text theme='h1'>{data.item.market_name} {data.item.name}</Text>
181
+ <Text theme='description' style={{ marginTop:3 }}>Unresolved: {agg_stats.total_unresolved.toFixed(2)}</Text>
182
+ </View>
183
+ <Checkbox
184
+ checked={selected}
185
+ disabled
186
+ style={{ marginLeft:5 }}
187
+ onSelect={() => console.log('')}
188
+ />
189
+ </Button>
190
+ )
191
+ }
192
+
164
193
  //const selected_team = teams.find(t => t.team_id == resolve.side_id);
165
194
 
166
195
  const renderSections = (data:{ item:string, index:number }) => {
@@ -215,13 +244,50 @@ const MarketResolveForm = ({ contest_title, contest_id, contest_type, market, at
215
244
  )
216
245
  case 'team':
217
246
  if(market.level != 'team'){ return <></> }
247
+ const selected_team = teams.find(a => a.team_id == resolve.side_id);
218
248
  return (
219
- <></>
249
+ <View float style={{ margin:10 }}>
250
+ <Button
251
+ style={{ padding:10, flexDirection:'row', alignItems:'center' }}
252
+ onPress={() => {
253
+ setExpandedTeams(!expand_teams)
254
+ }}
255
+ >
256
+ <View style={{ flex:1, flexDirection:'row', alignItems:'center' }}>
257
+ {selected_team ?
258
+ <TeamImage
259
+ team={selected_team}
260
+ size={14}
261
+ />
262
+ :<></>}
263
+ <View style={{ flex:1 }}>
264
+ {selected_team ?
265
+ <Text theme='h1' style={{ marginLeft:5 }}>{selected_team?.market_name} {selected_team?.name}</Text>
266
+ :
267
+ <Text theme='h1'>Select Team</Text>
268
+ }
269
+ <Text theme='description' style={{ marginTop:3, marginLeft:5 }}>Unresolved: ${total_unresolved.toFixed(2)}</Text>
270
+ </View>
271
+ </View>
272
+ <Icons.ChevronIcon direction={expand_athletes ? 'up' : 'down'} size={8} color={Colors.text.h1} />
273
+ </Button>
274
+ {expand_teams ?
275
+ <FlatList
276
+ data={teams}
277
+ key={`rollback_teams`}
278
+ renderItem={renderTeams}
279
+ keyExtractor={(item) => item.team_id.toString()}
280
+ />
281
+ :<></>}
282
+ </View>
220
283
  )
221
284
  case 'event_form':
222
- if(market.level != 'event'){ return <></> }
285
+ if(market.var_1_required){ return <></> }
223
286
  return (
224
- <View style={{ margin:10 }}>
287
+ <View float style={{ margin:10, padding:10 }}>
288
+ <View transparent style={{ padding:10 }}>
289
+ <Text theme='h1'>Select Winning Side of Market</Text>
290
+ </View>
225
291
  <DropDown
226
292
  onOptionSelect={(option) => setResolve({ ...resolve, winnings_side: option })}
227
293
  dropdown_options={[
@@ -20,7 +20,33 @@ const TeamEventMarketHelpers = {
20
20
  sortNonPrimaryMarkets: (markets:MarketProps[], event_order_stats:EventOrderStatProps[], latest_trades:TradeProps[]) => {
21
21
  let available = latest_trades.find(t => markets.map(m => m.market_id.toString()).includes(t.market_id)) ? true : false
22
22
  let sorted_stats = event_order_stats.filter(s => s.market_type == 'FOR_MONEY' && markets.map(m => m.market_id.toString()).includes(s.market_id.toString()));
23
-
23
+ //How do we also just grab the top level markets from latest trades if there is no volume on it?
24
+ let sorted_athlete_trades = latest_trades.filter(t => t.market_type == 'FOR_MONEY' && t.side_type == 'athlete' && markets.map(m => m.market_id.toString()).includes(t.market_id.toString()));
25
+ //For each market ID - lets create a sorted stat that has 0 in liquidity
26
+ let unique_traded_markets = [ ...new Set(sorted_athlete_trades.map(t => t.market_id)) ]
27
+ //Ok we have unique markets!
28
+ //Lets map through the markets and find the top 3 var_1s of each market!
29
+ unique_traded_markets.map(m => {
30
+ //Find the top 3 markets
31
+ let athlete_trades = sorted_athlete_trades.filter(t => t.market_id == m).sort((a,b) => b.var_1 - a.var_1).slice(0, 3);
32
+ athlete_trades.map(t => {
33
+ let exists = sorted_stats.find(ss => ss.side_id == t.side_id && ss.side_type == t.side_type && ss.market_id == ss.market_id);
34
+ if(exists){ return } //We already have this!
35
+ //Now lets create a new event order stat
36
+ let new_order_stat:EventOrderStatProps = {
37
+ event_id: t.event_id,
38
+ event_type: t.event_type,
39
+ market_id: t.market_id,
40
+ side_type: t.side_type,
41
+ side_id: t.side_id,
42
+ market_type: t.market_type,
43
+ open_order_amount:0,
44
+ open_order_count:0
45
+ }
46
+ sorted_stats = sorted_stats.concat(new_order_stat)
47
+ })
48
+ });
49
+
24
50
  //Now need to combine event level markets
25
51
  let event_level_markets:EventOrderStatProps[] = []
26
52
  let non_event_level_markets:EventOrderStatProps[] = []
@@ -45,6 +45,7 @@ type TeamEventMarketProps = {
45
45
  onShare?:(event:EventProps) => void,
46
46
  onPodcastSelect?:(podcast:PodcastProps) => void,
47
47
  show_grades?:boolean,
48
+ hide_non_primary?:boolean,
48
49
  onCompetitionSelect:(competition_id:string) => void,
49
50
  onSquaresSelect: (sq_comp_id:string) => void,
50
51
  onViewAdditionalMarkets: (event_id:string, event_type:string) => void,
@@ -52,7 +53,7 @@ type TeamEventMarketProps = {
52
53
  onActivate?:(event_id:string, event_type:string) => void
53
54
  activate_loading?:boolean
54
55
  }
55
- const TeamEventMarket = ({ event, league, float, style, init_expanded, hot_markets_direction, show_id, hide_liquidity, show_podcasts, activate_loading, competitions, squares_competitions, show_grades, markets, latest_trades, best_available_orders, event_order_stats, default_price_view, onTeamSelect, onSquaresSelect, onCompetitionSelect, onExpand, onOrder, onViewMarketStats, onView, onViewAdditionalMarkets, onTradeLongPress, onTVSelect, onActivate, onEvent, onShare, onPodcastSelect }:TeamEventMarketProps) => {
56
+ const TeamEventMarket = ({ event, hide_non_primary, league, float, style, init_expanded, hot_markets_direction, show_id, hide_liquidity, show_podcasts, activate_loading, competitions, squares_competitions, show_grades, markets, latest_trades, best_available_orders, event_order_stats, default_price_view, onTeamSelect, onSquaresSelect, onCompetitionSelect, onExpand, onOrder, onViewMarketStats, onView, onViewAdditionalMarkets, onTradeLongPress, onTVSelect, onActivate, onEvent, onShare, onPodcastSelect }:TeamEventMarketProps) => {
56
57
  const C = useColors();
57
58
  const [ market_width, setMarketWidth ] = useState(180);
58
59
  const [ expanded_data, setExpandedData ] = useState<{
@@ -331,7 +332,6 @@ const TeamEventMarket = ({ event, league, float, style, init_expanded, hot_marke
331
332
 
332
333
  const { liquidity, open_order_count } = useMemo(() => MarketComponentHelpers.getLiqudity(event_order_stats),[JSON.stringify(event_order_stats)])
333
334
  const { non_primary_markets, available } = useMemo(() => TeamEventMarketHelpers.sortNonPrimaryMarkets(TeamEventMarketHelpers.getNonPrimaryMarkets(event, markets), event_order_stats, latest_trades),[JSON.stringify(event_order_stats), JSON.stringify(latest_trades), markets.length, event.last_update_datetime])
334
-
335
335
  const tv_link = event.info?.broadcast?.link && onTVSelect ? event.info?.broadcast?.link : undefined
336
336
  return (
337
337
  <View ref={ref} float={float} style={[style]}>
@@ -596,7 +596,7 @@ const TeamEventMarket = ({ event, league, float, style, init_expanded, hot_marke
596
596
  <Text style={{ marginLeft:5 }} size={14} color={C.text.white} weight='semibold'>MultiPick</Text>
597
597
  </Button>
598
598
  :<></>}
599
- {non_primary_markets.length > 0 ?
599
+ {non_primary_markets.length > 0 && !hide_non_primary ?
600
600
  <Button
601
601
  float
602
602
  style={{ height:35, width:35, justifyContent:'center', borderRadius:100, alignItems:'center' }}
@@ -604,7 +604,7 @@ const TeamEventMarket = ({ event, league, float, style, init_expanded, hot_marke
604
604
  >
605
605
  <Icons.ChevronIcon direction={expanded ? 'up' : 'down'} size={8} color={C.text.h1} />
606
606
  </Button>
607
- :available && !expanded ?
607
+ :available && !expanded && !hide_non_primary ?
608
608
  <Button
609
609
  title='MORE'
610
610
  type='info'
@@ -236,7 +236,7 @@ const ProfileWizard = ({ player, view_mode, settings, player_settings, insets,
236
236
  const renderLevels = (data: { item: ProfileLevelProps, index:number}) => {
237
237
  if(hidden_levels && hidden_levels.includes(data.item.identifier)){ return <></> }
238
238
  return (
239
- <Button style={{ flexDirection:'row', alignItems:'center', padding:10, borderBottomWidth:1, borderBottomColor:C.borders.light }} onPress={() => {
239
+ <Button style={{ flexDirection:'row', alignItems:'center', padding:10, borderRadius:0, borderBottomWidth:1, borderBottomColor:C.borders.light }} onPress={() => {
240
240
  setActiveLevel(data.item)
241
241
  setActiveStep(data.item.profile_steps[0])
242
242
  }}>
@@ -632,141 +632,4 @@ const ProfileWizard = ({ player, view_mode, settings, player_settings, insets,
632
632
  )
633
633
  }
634
634
 
635
-
636
-
637
- export default ProfileWizard
638
-
639
-
640
- /*
641
- {!active_level && !show_code_request ?
642
- <View transparent style={{ flex:1 }}>
643
- <View style={{ flex:1 }}>
644
- <FlatList
645
- data={groups}
646
- renderItem={renderGroups}
647
- keyExtractor={(item) => item.key}
648
- />
649
- </View>
650
- {!hide_powered_by ?
651
- <TouchableOpacity style={{ justifyContent:'center', alignItems:'center' }}
652
- onPress={() => {
653
- Linking.openURL(`https://app.bettoredge.com`)
654
- }}>
655
- <Image
656
- source={{ uri: 'https://res.cloudinary.com/hoabts6mc/image/upload/v1715272520/powered_be_be_irnaka.webp' }}
657
- style={{ width: width * 0.6, height: (width*0.6) / 3 }}
658
- resizeMode='center'
659
- />
660
- </TouchableOpacity>
661
- :<></>}
662
- <View style={{flexDirection:'row', padding:10}}>
663
- <Button
664
- title='CLOSE'
665
- style={{ flex:3, marginLeft:5 }}
666
- type='close'
667
- onPress={() => onClose()}
668
- />
669
- <Button
670
- onPress={() => setShowLogout(true)}
671
- type='error'
672
- style={{ marginLeft:20 }}
673
- >
674
- <Icons.LogoutIcon color={C.text.h1} size={20}/>
675
- </Button>
676
- </View>
677
- {show_logout ?
678
- <View type='blur' style={{ position:'absolute', top:0, left:0, right:0, bottom:0, justifyContent:'center', alignItems:'center' }}>
679
- <View float style={{ padding:10, borderRadius:22, minWidth:250 }}>
680
- <Text style={{ padding:15 }} size={18} theme='h1' textAlign='center'>ARE YOU SURE?</Text>
681
- <View transparent style={{ flexDirection:'row', padding:10 }}>
682
- <Button
683
- title='NO'
684
- style={{ flex:1, marginRight:3 }}
685
- type='close'
686
- onPress={() => setShowLogout(false)}
687
- />
688
- <Button
689
- title='YES - LOGOUT'
690
- style={{ flex:3, marginLeft:3 }}
691
- type='error'
692
- onPress={onLogout}
693
- />
694
- </View>
695
- </View>
696
- </View>
697
- :<></>}
698
- </View>
699
- :
700
- <View style={{ flex:1 }}>
701
- {!walkthrough && active_level ?
702
- <TouchableOpacity style={{ flexDirection:'row', alignItems:'center', padding:10, borderTopWidth:2, borderColor:C.borders.light}} onPress={() => {
703
- setActiveLevel(undefined)
704
- setActiveStep(undefined)
705
- }}>
706
- <Icons.ChevronIcon direction='left' size={10} color={C.text.h1} />
707
- <View style={{ flex:1, marginLeft:20, marginRight:20 }}>
708
- <Text theme='h1'>{active_level.label}</Text>
709
- <Text style={{ marginTop:3 }} theme='h2'>{active_level.description}</Text>
710
- </View>
711
- {active_level.pct_complete ?
712
- <View>
713
- <Text theme='description'>{(active_level.pct_complete*100).toFixed()}%</Text>
714
- </View>
715
- :<></>}
716
- </TouchableOpacity>
717
- :<></>}
718
- <View transparent style={{ borderWidth:1, borderColor:Colors.shades.shade600, borderRadius:22, margin:10 }}>
719
- <FlatList
720
- data={active_level?.profile_steps}
721
- renderItem={renderSteps}
722
- horizontal
723
- showsHorizontalScrollIndicator={false}
724
- keyExtractor={(item) => item.check}
725
- />
726
- {walkthrough == 'verify' && code_details.code_request && code_details.promo ?
727
- <View style={{ position:'absolute', right:-4, top:0, bottom:0, justifyContent:'center', alignItems:'center' }}>
728
- <View style={{ height:30, width:30, backgroundColor:Colors.shades.white, borderRadius:100, justifyContent:'center', alignItems:'center', ...view_styles.float }}>
729
- <Icons.GiftIcon size={18} color={Colors.incentive.gold}/>
730
- </View>
731
- </View>
732
- :<></>}
733
- </View>
734
-
735
- </View>
736
- }
737
- */
738
-
739
-
740
-
741
- /*
742
- <View style={{ flex:1 }}>
743
- {!active_step && show_code_request ?
744
- CODE REDEEM
745
- :<></>}
746
- {!active_step && show_welcome && !welcome_hidden && !show_code_request?
747
- WELCOME
748
- :active_step?.check == 'basic' ?
749
- BASIC INFO
750
- :active_step?.check == 'profile_pic'?
751
- PROFILE PIC
752
- :active_step?.check == 'password' ?
753
- PASSWORD
754
- :active_step?.check == 'email' ?
755
- EMAIL
756
- :active_step?.check == 'phone' ?
757
- PHONE
758
- :active_step?.check == 'basic_review' ?
759
- BASIC STATUS
760
- :active_step?.check == 'dob' ?
761
- DOB
762
- :active_step?.check == 'vouch' ?
763
- VOUCH
764
- :active_step?.check == 'notification' ?
765
- SETTINGS
766
- :active_step?.check == 'preferences' ?
767
- PREFERENCES
768
- :active_step?.check == 'sharing' ?
769
- SHARING
770
- :<></>}
771
- </View>
772
- */
635
+ export default ProfileWizard
@@ -10,8 +10,10 @@ import { Text, View } from '../Components/Themed';
10
10
  type ProfileOverviewProps = {
11
11
  show_welcome?:boolean,
12
12
  hide_powered_by?:boolean,
13
+ float?:boolean,
13
14
  hide_profile_header?:boolean,
14
15
  player?:MyPlayerProps,
16
+ style?:any,
15
17
  keyboard_height:number,
16
18
  hidden_groups?:string[],
17
19
  insets?:{ top:number, bottom:number, left:number, right:number }
@@ -37,7 +39,7 @@ type ProfileOverviewProps = {
37
39
  }
38
40
  }
39
41
 
40
- const ProfileManager = ({ profile_attribute, keyboard_height, view_mode, hide_profile_header, insets, player, hide_powered_by, onRedeemCode, onPlayerUpdate, onNextStep, onFocusPosition, onVouchStart, show_welcome, hidden_groups, hidden_steps, hidden_levels, walkthrough, onClose, onLogout }: ProfileOverviewProps ) => {
42
+ const ProfileManager = ({ float, profile_attribute, style, keyboard_height, view_mode, hide_profile_header, insets, player, hide_powered_by, onRedeemCode, onPlayerUpdate, onNextStep, onFocusPosition, onVouchStart, show_welcome, hidden_groups, hidden_steps, hidden_levels, walkthrough, onClose, onLogout }: ProfileOverviewProps ) => {
41
43
  const [ width, setModuleWidth ] = useState(400);
42
44
  const [ loading, setLoading ] = useState(false);
43
45
  const [ vouching, setVouching ] = useState(false);
@@ -89,26 +91,26 @@ const ProfileManager = ({ profile_attribute, keyboard_height, view_mode, hide_pr
89
91
  }
90
92
 
91
93
  return (
92
- <View style={{ flex:1 }} onLayout={(ev) => {
94
+ <View float={float} style={{ flex:1 }}>
95
+ <View style={{ flex:1, ...style }} onLayout={(ev) => {
93
96
  const { width } = ev.nativeEvent.layout
94
97
  setModuleWidth(width)
95
98
  }}>
96
- <View style={{ flex:1 }}>
97
99
  {!hide_profile_header && !walkthrough && !vouching ?
98
- <View style={{ flexDirection:'row', alignItems:'center' }}>
99
- <View nativeID='profile_picture' style={{ padding:10 }}>
100
+ <View type='header' style={{ flexDirection:'row', alignItems:'center', borderTopRightRadius:8, borderTopLeftRadius:8 }}>
101
+ <View transparent nativeID='profile_picture' style={{ padding:10 }}>
100
102
  <Image
101
103
  source={{ uri: draft_player.profile_pic }}
102
104
  style={{ height:50, width:50, borderRadius:100 }}
103
105
  resizeMode='cover'
104
106
  />
105
107
  </View>
106
- <View style={{ flex:1 }}>
108
+ <View transparent style={{ flex:1 }}>
107
109
  <Text size={20} theme='h1'>{draft_player.first_name} {draft_player.last_name}</Text>
108
110
  <Text style={{ marginTop:5 }} size={16} theme='h2'>@{draft_player.username}</Text>
109
111
  </View>
110
112
  {player_balance ?
111
- <View style={{ paddingRight:10 }}>
113
+ <View transparent style={{ paddingRight:10 }}>
112
114
  <Text size={16} theme='h1' textAlign='right'>${player_balance.balance.toFixed(2)}</Text>
113
115
  <Text style={{ marginTop:3 }} theme='description' textAlign='right'>Promo {player_balance.promo_balance.toFixed(2)}</Text>
114
116
  </View>
@@ -1,18 +1,20 @@
1
1
  import React, { useState } from 'react';
2
2
  import { Image } from 'react-native';
3
- import type { AthleteProps, LeagueProps, OrderProps, PublicPlayerProps, TeamProps } from '../types';
3
+ import type { AthleteProps, LeagueProps, MyPlayerProps, OrderProps, PublicPlayerProps, TeamProps } from '../types';
4
4
  import { Icons } from '../Components';
5
5
  import { SocialComponentApi, SocialOrderHelpers } from './api';
6
6
  import moment from 'moment-mini';
7
7
  import { AthleteImage } from '../Components/Jerseys';
8
8
  import { View, Button, Text } from '../Components/Themed';
9
9
  import { useColors } from '../constants/useColors';
10
+ import { MyOrdersHelpers } from '../MarketComponents/components/MyOrderList/api';
10
11
 
11
12
  type SocialOrderCardProps = {
12
- player?:PublicPlayerProps,
13
+ player?:PublicPlayerProps | MyPlayerProps,
13
14
  show_player?:boolean,
14
15
  contest_title:string,
15
16
  contest_time:string,
17
+ show_amounts?:boolean,
16
18
  order:OrderProps,
17
19
  athlete?:AthleteProps,
18
20
  maxWidth?:number,
@@ -23,10 +25,12 @@ type SocialOrderCardProps = {
23
25
  onCopyOrder?:(order:OrderProps) => void,
24
26
  onFadeOrder?:(order:OrderProps) => void
25
27
  }
26
- const SocialOrderCard = ({ player, show_player, hide_contest, maxWidth, league, team, athlete, order, contest_title, contest_time, onTagOrder, onCopyOrder, onFadeOrder }:SocialOrderCardProps) => {
28
+ const SocialOrderCard = ({ player, show_player, show_amounts, hide_contest, maxWidth, league, team, athlete, order, contest_title, contest_time, onTagOrder, onCopyOrder, onFadeOrder }:SocialOrderCardProps) => {
27
29
  const Colors = useColors();
28
30
  const [ fade_loading, setFadeLoading ] = useState(false);
31
+ const cl = order.market_type == 'FOR_MONEY' ? '$' : 'E'
29
32
  const { result_label, color } = SocialOrderHelpers.getResultDetails(order)
33
+ const stats = MyOrdersHelpers.calcAllOrderStats([order])
30
34
  const handleFadeOrder = async() => {
31
35
  if(!onFadeOrder){ return }
32
36
  if(fade_loading){ return }
@@ -111,6 +115,23 @@ const SocialOrderCard = ({ player, show_player, hide_contest, maxWidth, league,
111
115
  </View>
112
116
  </View>
113
117
  </View>
118
+ {show_amounts && order.resolution_status == 'inprogress'?
119
+ <View type='footer' style={{ flexDirection:'row', alignItems:'center', padding:10, borderBottomRightRadius:8, borderBottomLeftRadius:8 }}>
120
+ <View transparent style={{ flex:1 }}>
121
+ <Text theme='h2' textAlign='left'>{cl}{stats.unresolved_stake.toFixed(2)}</Text>
122
+ </View>
123
+ <Text theme='description'>To Win</Text>
124
+ <View transparent style={{ flex:1 }}>
125
+ <Text theme='h1' textAlign='right'>{cl}{stats.unresolved_potential_winnings.toFixed(2)}</Text>
126
+ </View>
127
+ </View>
128
+ :show_amounts && order.resolution_status == 'closed' ?
129
+ <View type='footer' style={{ flexDirection:'row', alignItems:'center', padding:10, borderBottomRightRadius:8, borderBottomLeftRadius:8 }}>
130
+ <View transparent style={{ flex:1 }}>
131
+ <Text theme='h1' textAlign='right' color={stats.net_earnings > 0 ? Colors.text.success : Colors.text.error}>Earned: {cl}{stats.net_earnings.toFixed(2)}</Text>
132
+ </View>
133
+ </View>
134
+ :<></>}
114
135
  {order.resolution_status == 'inprogress' ?
115
136
  <View type='row' style={{ padding:0, borderBottomLeftRadius:8, borderBottomRightRadius:8 }}>
116
137
  {onCopyOrder ?