be-components 7.3.6 → 7.3.7

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 (61) hide show
  1. package/lib/commonjs/CompetitionManager/api/index.js +9 -0
  2. package/lib/commonjs/CompetitionManager/api/index.js.map +1 -1
  3. package/lib/commonjs/CompetitionManager/components/ContestSelector.js +92 -2
  4. package/lib/commonjs/CompetitionManager/components/ContestSelector.js.map +1 -1
  5. package/lib/commonjs/EventComponents/api/index.js +90 -0
  6. package/lib/commonjs/EventComponents/api/index.js.map +1 -1
  7. package/lib/commonjs/FlashMarket/components/ManageFlashMarket.js +211 -2
  8. package/lib/commonjs/FlashMarket/components/ManageFlashMarket.js.map +1 -1
  9. package/lib/commonjs/Group/index.js +4 -1
  10. package/lib/commonjs/Group/index.js.map +1 -1
  11. package/lib/commonjs/MarketComponents/api/index.js +14 -7
  12. package/lib/commonjs/MarketComponents/api/index.js.map +1 -1
  13. package/lib/module/CompetitionManager/api/index.js +9 -0
  14. package/lib/module/CompetitionManager/api/index.js.map +1 -1
  15. package/lib/module/CompetitionManager/components/ContestSelector.js +93 -3
  16. package/lib/module/CompetitionManager/components/ContestSelector.js.map +1 -1
  17. package/lib/module/EventComponents/api/index.js +90 -0
  18. package/lib/module/EventComponents/api/index.js.map +1 -1
  19. package/lib/module/FlashMarket/components/ManageFlashMarket.js +211 -2
  20. package/lib/module/FlashMarket/components/ManageFlashMarket.js.map +1 -1
  21. package/lib/module/Group/index.js +4 -1
  22. package/lib/module/Group/index.js.map +1 -1
  23. package/lib/module/MarketComponents/api/index.js +14 -7
  24. package/lib/module/MarketComponents/api/index.js.map +1 -1
  25. package/lib/typescript/lib/commonjs/CompetitionManager/api/index.d.ts +1 -0
  26. package/lib/typescript/lib/commonjs/CompetitionManager/api/index.d.ts.map +1 -1
  27. package/lib/typescript/lib/commonjs/CompetitionManager/components/ContestSelector.d.ts +4 -1
  28. package/lib/typescript/lib/commonjs/CompetitionManager/components/ContestSelector.d.ts.map +1 -1
  29. package/lib/typescript/lib/commonjs/EventComponents/api/index.d.ts +7 -0
  30. package/lib/typescript/lib/commonjs/EventComponents/api/index.d.ts.map +1 -1
  31. package/lib/typescript/lib/commonjs/FlashMarket/components/ManageFlashMarket.d.ts.map +1 -1
  32. package/lib/typescript/lib/commonjs/Group/index.d.ts.map +1 -1
  33. package/lib/typescript/lib/commonjs/MarketComponents/api/index.d.ts +1 -0
  34. package/lib/typescript/lib/commonjs/MarketComponents/api/index.d.ts.map +1 -1
  35. package/lib/typescript/lib/module/CompetitionManager/api/index.d.ts +1 -0
  36. package/lib/typescript/lib/module/CompetitionManager/api/index.d.ts.map +1 -1
  37. package/lib/typescript/lib/module/CompetitionManager/components/ContestSelector.d.ts +4 -1
  38. package/lib/typescript/lib/module/CompetitionManager/components/ContestSelector.d.ts.map +1 -1
  39. package/lib/typescript/lib/module/EventComponents/api/index.d.ts +7 -0
  40. package/lib/typescript/lib/module/EventComponents/api/index.d.ts.map +1 -1
  41. package/lib/typescript/lib/module/FlashMarket/components/ManageFlashMarket.d.ts.map +1 -1
  42. package/lib/typescript/lib/module/Group/index.d.ts.map +1 -1
  43. package/lib/typescript/lib/module/MarketComponents/api/index.d.ts +2 -0
  44. package/lib/typescript/lib/module/MarketComponents/api/index.d.ts.map +1 -1
  45. package/lib/typescript/src/CompetitionManager/api/index.d.ts +1 -0
  46. package/lib/typescript/src/CompetitionManager/api/index.d.ts.map +1 -1
  47. package/lib/typescript/src/CompetitionManager/components/ContestSelector.d.ts +6 -3
  48. package/lib/typescript/src/CompetitionManager/components/ContestSelector.d.ts.map +1 -1
  49. package/lib/typescript/src/EventComponents/api/index.d.ts +12 -1
  50. package/lib/typescript/src/EventComponents/api/index.d.ts.map +1 -1
  51. package/lib/typescript/src/FlashMarket/components/ManageFlashMarket.d.ts.map +1 -1
  52. package/lib/typescript/src/Group/index.d.ts.map +1 -1
  53. package/lib/typescript/src/MarketComponents/api/index.d.ts +2 -0
  54. package/lib/typescript/src/MarketComponents/api/index.d.ts.map +1 -1
  55. package/package.json +1 -1
  56. package/src/CompetitionManager/api/index.ts +9 -0
  57. package/src/CompetitionManager/components/ContestSelector.tsx +109 -48
  58. package/src/EventComponents/api/index.ts +64 -1
  59. package/src/FlashMarket/components/ManageFlashMarket.tsx +118 -2
  60. package/src/Group/index.tsx +2 -1
  61. package/src/MarketComponents/api/index.ts +8 -8
@@ -1,7 +1,7 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { Button, Text, TextInput, View } from "../../Components/Themed"
3
3
  import { FlatList, Image, type ViewStyle } from 'react-native';
4
- import type { FocusPositionProps, MyPlayerProps, PollCampaignProps, PollOptionProps, PollProps, PollSummaryProps, PublicPlayerProps } from '../../types';
4
+ import type { EventProps, FocusPositionProps, LeagueProps, MatchProps, MyPlayerProps, PollCampaignProps, PollOptionProps, PollProps, PollSummaryProps, PublicPlayerProps, TournamentProps } from '../../types';
5
5
  import { Icons, Switch, Toggle } from '../../Components';
6
6
  import { PollApi, PollCampaignApi, PollOptionApi } from '../../Poll/api';
7
7
  import ImageUploader from '../../Components/ImageUploader';
@@ -11,6 +11,9 @@ import moment from 'moment-mini';
11
11
  import BETimePicker from '../../Components/BETimePicker';
12
12
  import { FlashMarketHelpers } from '../api';
13
13
  import { showConfirmAlert } from '../../Components/ConfirmAlert';
14
+ import { MarketComponentApi, MarketComponentHelpers } from '../../MarketComponents/api';
15
+ import ContestSelector from '../../CompetitionManager/components/ContestSelector';
16
+ import { ManageCompetitionApi } from '../../CompetitionManager/api';
14
17
 
15
18
  type ManageFlashMarketProps = {
16
19
  poll_id:string,
@@ -22,7 +25,7 @@ type ManageFlashMarketProps = {
22
25
  onFocusPosition?:(pos:FocusPositionProps) => void
23
26
  }
24
27
 
25
- const sections = ['header','activate','pause_resume','closed','resolve','toggle', 'image','question','options','settings','results', 'danger']
28
+ const sections = ['header','activate','pause_resume','closed','resolve','toggle', 'image','question','options','settings', 'contest_selector','results', 'danger']
26
29
  const ManageFlashMarket = ({ float, header_style, player, onClose, poll_id, onFocusPosition }:ManageFlashMarketProps) => {
27
30
  const Colors = useColors();
28
31
  const [ labels, setLabels ] = useState({
@@ -31,6 +34,17 @@ const ManageFlashMarket = ({ float, header_style, player, onClose, poll_id, onFo
31
34
  max_stake: '0'
32
35
  });
33
36
  const { min_stake, max_stake, base_stake } = labels;
37
+ const [ contest_state, setContestState ] = useState<{
38
+ contest_selector:boolean,
39
+ leagues:LeagueProps[],
40
+ event?:EventProps,
41
+ tournament?:TournamentProps,
42
+ match?:MatchProps,
43
+ }>({
44
+ contest_selector: false,
45
+ leagues:[]
46
+ });
47
+ const { event, tournament, match, leagues } = contest_state;
34
48
  const [ expand_participants, setExpandParticipants ] = useState(false);
35
49
  const [ flash_state, setFlashState ] = useState<{
36
50
  loading:boolean,
@@ -59,8 +73,10 @@ const ManageFlashMarket = ({ float, header_style, player, onClose, poll_id, onFo
59
73
  const prob_locked = unlocked_options.length <= 1 ? true : false
60
74
  const errors = FlashMarketHelpers.isNewValid(real_options, poll_summaries, poll);
61
75
  const winning_option = real_options.find(o => o.poll_option_id == poll?.winning_option_id);
76
+
62
77
  useEffect(() => {
63
78
  PollCampaignApi.setEnvironment();
79
+ ManageCompetitionApi.setEnvironment();
64
80
  if(!poll_id){ return }
65
81
  getData(poll_id);
66
82
  },[poll_id]);
@@ -74,6 +90,35 @@ const ManageFlashMarket = ({ float, header_style, player, onClose, poll_id, onFo
74
90
  s.player_ids.map(id => id != '4985' ? player_ids.push(id) : console.log(''))
75
91
  })
76
92
  const server_players = await PollCampaignApi.getPlayersByPlayerIds([ ...new Set(player_ids.map(id => id))]);
93
+ const s_leagues = await MarketComponentApi.getLeagues();
94
+ let ev:EventProps|undefined = undefined
95
+ let tn:TournamentProps|undefined = undefined
96
+ let mt:MatchProps|undefined = undefined
97
+ switch(server_response.poll.contest_type){
98
+ case 'team':
99
+ if(!server_response.poll.contest_id){ break }
100
+ let evs = await MarketComponentApi.getEventsByEventIds([server_response.poll.contest_id]);
101
+ ev = evs[0]
102
+ break
103
+ case 'tournament':
104
+ if(!server_response.poll.contest_id){ break }
105
+ let tns = await MarketComponentApi.getTournamentsByTournamentIds([server_response.poll.contest_id]);
106
+ tn = tns[0]
107
+ break
108
+ case 'match':
109
+ if(!server_response.poll.contest_id){ break }
110
+ let mtchs = await MarketComponentApi.getMatchesByMatchIds([server_response.poll.contest_id]);
111
+ mt = mtchs[0]
112
+ break
113
+ default: break
114
+ }
115
+ setContestState({
116
+ ...contest_state,
117
+ event: ev,
118
+ tournament: tn,
119
+ leagues: s_leagues.filter(l => l.status == 'active').sort((a,b) => a.priority - b.priority),
120
+ match: mt
121
+ })
77
122
  setFlashState({
78
123
  ...flash_state,
79
124
  poll: server_response.poll,
@@ -608,6 +653,40 @@ const ManageFlashMarket = ({ float, header_style, player, onClose, poll_id, onFo
608
653
  :<></>}
609
654
  </View>
610
655
  )
656
+ case 'contest_selector':
657
+ if(!poll){ return <></> }
658
+ if(active_step != 'settings'){ return <></> }
659
+ const { contest_title, scheduled_datetime } = MarketComponentHelpers.getContestDetails(poll.contest_type ?? 'tean', event, tournament, match);
660
+ return (
661
+ <View transparent style={{ padding:20, borderBottomWidth:1, borderColor:Colors.borders.light }}>
662
+ <Text theme='h1'>Select Contest</Text>
663
+ <Text theme='description' style={{ marginTop:3 }}>Is this market associated with an existing contest?</Text>
664
+ <View transparent style={{ flexDirection:'row', alignItems:'center' }}>
665
+ <Button float style={{ flex:1, marginTop:10, padding:10 }} onPress={() => setContestState({ ...contest_state, contest_selector:!contest_state.contest_selector })}>
666
+ {contest_title ?
667
+ <View transparent>
668
+ <Text theme='h1'>{contest_title}</Text>
669
+ <Text theme='description' style={{ marginTop:3 }}>{scheduled_datetime.format('MMM DD hh:mm a')}</Text>
670
+ </View>
671
+ :
672
+ <Text theme='h1'>{'Select Contest'}</Text>
673
+ }
674
+ </Button>
675
+ {poll.contest_id ?
676
+ <Button
677
+ title='X'
678
+ transparent
679
+ style={{ padding:10 }}
680
+ title_color={Colors.text.error}
681
+ onPress={() => {
682
+ setContestState({ ...contest_state, event: undefined })
683
+ updatePoll({ ...poll, contest_type: undefined, contest_id: undefined });
684
+ }}
685
+ />
686
+ :<></>}
687
+ </View>
688
+ </View>
689
+ )
611
690
  case 'options':
612
691
  if(!poll){ return <></> }
613
692
  if(active_step != 'options'){ return <></> }
@@ -801,6 +880,43 @@ const ManageFlashMarket = ({ float, header_style, player, onClose, poll_id, onFo
801
880
  renderItem={renderSections}
802
881
  />
803
882
  </View>
883
+ {contest_state.contest_selector ?
884
+ <View type='blur' style={{ position:'absolute', top:0, left:0, right:0, bottom:0, padding:10 }}>
885
+ <ContestSelector
886
+ leagues={leagues}
887
+ action_loading={action_loading}
888
+ onClose={() => setContestState({ ...contest_state, contest_selector: false })}
889
+ onSelectTeamEvent={(event) => {
890
+ if(!poll){ return }
891
+ let new_end_time = moment(event.scheduled_datetime)
892
+ let new_poll:PollProps = { ...poll, contest_type: 'team', contest_id: event.event_id }
893
+ if(moment().isBefore(new_end_time)){ new_poll.end_datetime = new_end_time }
894
+ updatePoll(new_poll)
895
+ setContestState({ ...contest_state, event: event })
896
+ }}
897
+ onDeSelectTournament={(_) => {
898
+ if(!poll){ return }
899
+ setContestState({ ...contest_state, event: undefined, tournament: undefined })
900
+ updatePoll({ ...poll, contest_type: undefined, contest_id: undefined });
901
+ }}
902
+ onSelectTournament={(t) => {
903
+ if(!poll){ return }
904
+ let new_end_time = moment(t.scheduled_datetime)
905
+ let new_poll:PollProps = { ...poll, contest_type: 'tournament', contest_id: t.tournament_id }
906
+ if(moment().isBefore(new_end_time)){ new_poll.end_datetime = new_end_time }
907
+ updatePoll(new_poll)
908
+ setContestState({ ...contest_state, tournament: t, event:undefined })
909
+ }}
910
+ onDeselectTeamEvent={(_) => {
911
+ if(!poll){ return }
912
+ setContestState({ ...contest_state, event: undefined })
913
+ updatePoll({ ...poll, contest_type: undefined, contest_id: undefined });
914
+ }}
915
+ selected_tournaments={tournament ? [tournament] : []}
916
+ selected_team_events={event ? [event] : []}
917
+ />
918
+ </View>
919
+ :<></>}
804
920
  {poll && poll.status == 'inactive' ?
805
921
  <View type='blur' style={{ position:'absolute', top:0, left:0, right:0, bottom:0, justifyContent:'center', alignItems:'center' }}>
806
922
  <View float style={{ width: '70%' }}>
@@ -262,7 +262,7 @@ const GroupComponent = ({ refresh_key, group_id, player, mode, init_invite_code,
262
262
  let my_gp = g_data.my_group_player && g_data.my_group_player.status == 'inactive' ? undefined : g_data.my_group_player
263
263
 
264
264
  let server_flash = await GroupApi.getActivePolls(group_id);
265
- setFlashData({ flash_campaigns: server_flash.poll_campaigns, flash_markets: server_flash.polls.filter(p => p.status != 'pending') });
265
+ setFlashData({ flash_campaigns: server_flash.poll_campaigns, flash_markets: server_flash.polls.filter(p => !['pending','closed'].includes(p.status)) });
266
266
 
267
267
  setGroupData({
268
268
  ...group_data,
@@ -546,6 +546,7 @@ const GroupComponent = ({ refresh_key, group_id, player, mode, init_invite_code,
546
546
  )
547
547
  case 'flash':
548
548
  if(flash_campaigns.length == 0){ return <></> }
549
+ if(flash_markets.length == 0){ return <></> }
549
550
  return (
550
551
  <View float style={{ margin:10 }}>
551
552
  <Button style={{ backgroundColor:Colors.views.header, flexDirection:'row', alignItems:'center', padding:10, borderBottomLeftRadius:expanded?0:8, borderBottomRightRadius:expanded?0:8 }} onPress={() => setFlashData({ ...flash_data, expanded: !expanded })}>
@@ -486,18 +486,18 @@ const MarketComponentHelpers = {
486
486
  });
487
487
  return order_ids
488
488
  },
489
- getContestDetails: (contest_type:string, event?:EventProps, tournament?:TournamentProps, match?:MatchProps):{ contest_title:string } => {
489
+ getContestDetails: (contest_type:string, event?:EventProps, tournament?:TournamentProps, match?:MatchProps):{ contest_title:string, scheduled_datetime:Moment } => {
490
490
  switch(contest_type){
491
491
  case 'team':
492
- if(!event){ return { contest_title: '' } }
493
- return { contest_title: event.event_title }
492
+ if(!event){ return { contest_title: '', scheduled_datetime: moment() } }
493
+ return { contest_title: event.event_title, scheduled_datetime: moment(event.scheduled_datetime) }
494
494
  case 'tournament':
495
- if(!tournament){ return { contest_title: '' } }
496
- return { contest_title: tournament.tournament_name }
495
+ if(!tournament){ return { contest_title: '', scheduled_datetime: moment() } }
496
+ return { contest_title: tournament.tournament_name, scheduled_datetime: moment(tournament.scheduled_datetime) }
497
497
  case 'match':
498
- if(!match){ return { contest_title: '' } }
499
- return { contest_title: match.match_title }
500
- default: return { contest_title: '' }
498
+ if(!match){ return { contest_title: '', scheduled_datetime: moment() } }
499
+ return { contest_title: match.match_title, scheduled_datetime: moment(match.scheduled_datetime) }
500
+ default: return { contest_title: '', scheduled_datetime: moment() }
501
501
  }
502
502
  },
503
503
  getReconFromMarketStats: (ms:MarketStatsProps[]) => {