be-components 2.1.9 → 2.2.0

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 (74) hide show
  1. package/lib/commonjs/EventComponents/AthleteCard.js +19 -0
  2. package/lib/commonjs/EventComponents/AthleteCard.js.map +1 -0
  3. package/lib/commonjs/EventComponents/TeamCard.js +33 -0
  4. package/lib/commonjs/EventComponents/TeamCard.js.map +1 -0
  5. package/lib/commonjs/EventComponents/TeamProfile/index.js +248 -0
  6. package/lib/commonjs/EventComponents/TeamProfile/index.js.map +1 -0
  7. package/lib/commonjs/EventComponents/api/index.js +46 -0
  8. package/lib/commonjs/EventComponents/api/index.js.map +1 -0
  9. package/lib/commonjs/EventComponents/index.js +16 -0
  10. package/lib/commonjs/EventComponents/index.js.map +1 -0
  11. package/lib/commonjs/MarketComponents/api/index.js +35 -1
  12. package/lib/commonjs/MarketComponents/api/index.js.map +1 -1
  13. package/lib/commonjs/MarketComponents/components/TeamEventList/api/index.js +41 -0
  14. package/lib/commonjs/MarketComponents/components/TeamEventList/api/index.js.map +1 -0
  15. package/lib/commonjs/MarketComponents/components/TeamEventList/index.js +148 -0
  16. package/lib/commonjs/MarketComponents/components/TeamEventList/index.js.map +1 -0
  17. package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js +9 -6
  18. package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
  19. package/lib/commonjs/index.js +7 -0
  20. package/lib/commonjs/index.js.map +1 -1
  21. package/lib/module/EventComponents/AthleteCard.js +12 -0
  22. package/lib/module/EventComponents/AthleteCard.js.map +1 -0
  23. package/lib/module/EventComponents/TeamCard.js +26 -0
  24. package/lib/module/EventComponents/TeamCard.js.map +1 -0
  25. package/lib/module/EventComponents/TeamProfile/index.js +239 -0
  26. package/lib/module/EventComponents/TeamProfile/index.js.map +1 -0
  27. package/lib/module/EventComponents/api/index.js +40 -0
  28. package/lib/module/EventComponents/api/index.js.map +1 -0
  29. package/lib/module/EventComponents/index.js +9 -0
  30. package/lib/module/EventComponents/index.js.map +1 -0
  31. package/lib/module/MarketComponents/api/index.js +35 -1
  32. package/lib/module/MarketComponents/api/index.js.map +1 -1
  33. package/lib/module/MarketComponents/components/TeamEventList/api/index.js +36 -0
  34. package/lib/module/MarketComponents/components/TeamEventList/api/index.js.map +1 -0
  35. package/lib/module/MarketComponents/components/TeamEventList/index.js +139 -0
  36. package/lib/module/MarketComponents/components/TeamEventList/index.js.map +1 -0
  37. package/lib/module/MarketComponents/components/TeamEventMarket/index.js +9 -6
  38. package/lib/module/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
  39. package/lib/module/index.js +2 -1
  40. package/lib/module/index.js.map +1 -1
  41. package/lib/typescript/src/EventComponents/AthleteCard.d.ts +8 -0
  42. package/lib/typescript/src/EventComponents/AthleteCard.d.ts.map +1 -0
  43. package/lib/typescript/src/EventComponents/TeamCard.d.ts +8 -0
  44. package/lib/typescript/src/EventComponents/TeamCard.d.ts.map +1 -0
  45. package/lib/typescript/src/EventComponents/TeamProfile/index.d.ts +8 -0
  46. package/lib/typescript/src/EventComponents/TeamProfile/index.d.ts.map +1 -0
  47. package/lib/typescript/src/EventComponents/api/index.d.ts +9 -0
  48. package/lib/typescript/src/EventComponents/api/index.d.ts.map +1 -0
  49. package/lib/typescript/src/EventComponents/index.d.ts +14 -0
  50. package/lib/typescript/src/EventComponents/index.d.ts.map +1 -0
  51. package/lib/typescript/src/MarketComponents/api/index.d.ts +4 -1
  52. package/lib/typescript/src/MarketComponents/api/index.d.ts.map +1 -1
  53. package/lib/typescript/src/MarketComponents/components/TeamEventList/api/index.d.ts +11 -0
  54. package/lib/typescript/src/MarketComponents/components/TeamEventList/api/index.d.ts.map +1 -0
  55. package/lib/typescript/src/MarketComponents/components/TeamEventList/index.d.ts +27 -0
  56. package/lib/typescript/src/MarketComponents/components/TeamEventList/index.d.ts.map +1 -0
  57. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts +2 -1
  58. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts.map +1 -1
  59. package/lib/typescript/src/MarketComponents/index.d.ts +2 -1
  60. package/lib/typescript/src/MarketComponents/index.d.ts.map +1 -1
  61. package/lib/typescript/src/index.d.ts +2 -1
  62. package/lib/typescript/src/index.d.ts.map +1 -1
  63. package/package.json +2 -1
  64. package/src/EventComponents/AthleteCard.tsx +18 -0
  65. package/src/EventComponents/TeamCard.tsx +24 -0
  66. package/src/EventComponents/TeamProfile/index.tsx +160 -0
  67. package/src/EventComponents/api/index.ts +42 -0
  68. package/src/EventComponents/index.tsx +9 -0
  69. package/src/MarketComponents/api/index.ts +31 -2
  70. package/src/MarketComponents/components/TeamEventList/api/index.ts +23 -0
  71. package/src/MarketComponents/components/TeamEventList/index.tsx +136 -0
  72. package/src/MarketComponents/components/TeamEventMarket/index.tsx +6 -5
  73. package/src/index.tsx +3 -1
  74. package/src/types.d.ts +9 -0
@@ -0,0 +1,160 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { View, Image, ScrollView, FlatList, TouchableOpacity, ActivityIndicator } from 'react-native';
3
+ import type { EventProps, TeamProps } from '../../types';
4
+ import { EventComponentApi } from '../api';
5
+ import { Text } from '../../Components';
6
+ import LinearGradient from 'react-native-linear-gradient';
7
+ import Colors from '../../constants/colors';
8
+ import { view_styles } from '../../constants/styles';
9
+ import TeamEventList from '../../MarketComponents/components/TeamEventList';
10
+
11
+ type TeamProfileProps = {
12
+ team_id:string,
13
+ height:number
14
+ }
15
+
16
+ const TeamProfile = ({ team_id, height }: TeamProfileProps ) => {
17
+ const [ module_size, setModuleSize ] = useState({ height:777, width:330 });
18
+ const [ team_data, setData ] = useState<{
19
+ loading:boolean,
20
+ team?:TeamProps,
21
+ event_toggle:string,
22
+ }>({
23
+ loading: false,
24
+ event_toggle: 'Upcoming',
25
+ });
26
+ const { team, event_toggle } = team_data;
27
+ const [ event_data, setEventData ] = useState<{
28
+ event_loading:boolean,
29
+ events:EventProps[],
30
+ event_offset:number
31
+ }>({
32
+ event_loading: false,
33
+ events: [],
34
+ event_offset: 0
35
+ });
36
+ const { event_loading, events } = event_data;
37
+
38
+ useEffect(() => {
39
+ EventComponentApi.setEnvironment();
40
+ getTeamData(team_id)
41
+ },[team_id]);
42
+
43
+ useEffect(() => {
44
+ getEventData(0);
45
+ },[event_toggle])
46
+
47
+ const getTeamData = async(id:string) => {
48
+ setData({ ...team_data, loading:true });
49
+ const team = await EventComponentApi.getTeamById(id);
50
+ setData({
51
+ ...team_data,
52
+ loading: false,
53
+ team:team,
54
+ })
55
+ }
56
+
57
+ const getEventData = async(offset:number) => {
58
+ setEventData({ ...event_data, event_loading:true });
59
+ let evs:EventProps[] = [];
60
+ switch(event_toggle){
61
+ case 'Upcoming':
62
+ evs = await EventComponentApi.getUpcomingScheduleByTeams(team_id, offset);
63
+ break
64
+ case 'Past':
65
+ evs = await EventComponentApi.getPastScheduleByTeams(team_id, offset);
66
+ break
67
+ default: break
68
+ }
69
+ setEventData({
70
+ ...event_data,
71
+ event_loading: false,
72
+ event_offset: offset,
73
+ events: evs
74
+ })
75
+ }
76
+
77
+
78
+
79
+ const renderEventToggles = (data:{ item:string, index:number }) => {
80
+ const active = data.item == event_toggle ? true : false
81
+ return (
82
+ <TouchableOpacity style={{ width: (module_size.width - 65) / 2, padding:15, borderRadius:22, backgroundColor:active?Colors.brand.midnight:'transparent' }}
83
+ onPress={() => setData({ ...team_data, event_toggle: data.item })}>
84
+ <Text textAlign='center' weight='bold' size={14} color={active ?Colors.shades.white:Colors.brand.midnight}>{data.item}</Text>
85
+ </TouchableOpacity>
86
+ )
87
+ }
88
+
89
+ if(!team){ return <></> }
90
+ return (
91
+ <View style={{ height }} onLayout={(ev) => {
92
+ const { height, width } = ev.nativeEvent.layout;
93
+ setModuleSize({ height, width })
94
+ }}>
95
+ <View style={{ position:'absolute', top:0, left:0, right:0 }}>
96
+ <LinearGradient style={{ opacity:0.5, height:module_size.width, borderBottomLeftRadius:40, borderBottomRightRadius:40 }} colors={[team.primary_color ?? Colors.brand.midnightTopGradient, team.secondary_color ?? Colors.brand.midnight]} nativeID='team_header'/>
97
+ <View style={{ position:'absolute', top:0, left:0, right:0, bottom:0, alignItems:'center' }}>
98
+ <Image
99
+ source={{ uri:team.image?.url }}
100
+ style={{ height: module_size.width*0.75, width:module_size.width*0.75 }}
101
+ resizeMode='cover'
102
+ />
103
+ </View>
104
+ </View>
105
+ <ScrollView style={{ flex:1 }}>
106
+ <View style={{ ...view_styles.section, marginTop:module_size.width *0.5 }}>
107
+ <View style={{ ...view_styles.section_header }}>
108
+ <Image
109
+ style={{ height:40, width:40 }}
110
+ source={{ uri: team.image?.url }}
111
+ resizeMode='cover'
112
+ />
113
+ <View style={{ flex:1, marginLeft:10 }}>
114
+ <Text theme='header'>{team.market_name} {team.name}</Text>
115
+ <Text style={{ marginTop:4 }} theme='body_2'>{team.division} - {team.sub_division}</Text>
116
+ </View>
117
+ {team.rank ?
118
+ <Text size={22} color={Colors.brand.cyan} weight='bold'>{team.rank}</Text>
119
+ :<></>}
120
+ </View>
121
+ </View>
122
+
123
+ <View style={{ ...view_styles.section }}>
124
+ <View style={{ ...view_styles.section_header }}>
125
+ <View style={{ flex:1 }}>
126
+ <Text theme='header'>Events</Text>
127
+ <Text style={{ marginTop:3 }} theme='body_2'>Events that this team is participating in</Text>
128
+ </View>
129
+ </View>
130
+ <View style={{ ...view_styles.section_body, padding:0 }}>
131
+ <View style={{ ...view_styles.body_row, margin:10, marginLeft:20, marginRight:20, borderRadius:22, padding:1, backgroundColor:Colors.shades.shade100 }}>
132
+ <FlatList
133
+ key={'toggles'}
134
+ horizontal
135
+ showsHorizontalScrollIndicator={false}
136
+ data={['Upcoming', 'Past']}
137
+ renderItem={renderEventToggles}
138
+ keyExtractor={(item) => item}
139
+
140
+ />
141
+ </View>
142
+ {event_loading ?
143
+ <ActivityIndicator
144
+ size='large'
145
+ color={Colors.brand.midnight}
146
+ style={{ padding:20, alignSelf:'center' }}
147
+ />
148
+ :<></>}
149
+ <TeamEventList
150
+ key={`${team_id}_${event_toggle}`}
151
+ events={events}
152
+ />
153
+ </View>
154
+ </View>
155
+ </ScrollView>
156
+ </View>
157
+ )
158
+ }
159
+
160
+ export default TeamProfile
@@ -0,0 +1,42 @@
1
+ import axios from 'axios';
2
+ import { APIOverrides } from "../../ApiOverrides";
3
+ import type { EventProps, TeamProps } from '../../types';
4
+
5
+ let EVENT_SVC_API = ''
6
+ //let AUTH_SVC_API = ''
7
+
8
+ export { EventComponentApi }
9
+
10
+ const EventComponentApi = {
11
+ setEnvironment: () => {
12
+ const endpoints = APIOverrides.getEndpoints();
13
+ EVENT_SVC_API = endpoints['EVENT_SVC_API'] as string;
14
+ //MK_SVC_API = endpoints['MK_SVC_API'] as string;
15
+ //AUTH_SVC_API = endpoints['AUTH_SVC_API'] as string;
16
+ },
17
+ getTeamById: async(team_id:string):Promise<undefined|TeamProps> => {
18
+ try {
19
+ const resp = await axios.get(`${EVENT_SVC_API}/v1/teams/team/${team_id}`);
20
+ return resp.data.team
21
+ } catch (e) {
22
+ console.log(e);
23
+ return undefined
24
+ }
25
+ },
26
+ getUpcomingScheduleByTeams: async(team_ids:string, offset:number):Promise<EventProps[]> => {
27
+ try {
28
+ const resp = await axios.get(`${EVENT_SVC_API}/v1/teams/schedule/upcoming/${team_ids}?offset=${offset}`)
29
+ return resp.data.events
30
+ } catch (e) {
31
+ return []
32
+ }
33
+ },
34
+ getPastScheduleByTeams: async(team_ids:string, offset:number):Promise<EventProps[]> => {
35
+ try {
36
+ const resp = await axios.get(`${EVENT_SVC_API}/v1/teams/schedule/past/${team_ids}?offset=${offset}`)
37
+ return resp.data.events
38
+ } catch (e) {
39
+ return []
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,9 @@
1
+ import AthleteCard from "./AthleteCard";
2
+ import TeamCard from "./TeamCard";
3
+ import TeamProfile from "./TeamProfile";
4
+
5
+ export default {
6
+ TeamCard,
7
+ AthleteCard,
8
+ TeamProfile
9
+ }
@@ -1,9 +1,10 @@
1
1
  import axios from 'axios';
2
2
  import { APIOverrides } from "../../ApiOverrides"
3
- import type { AthleteProps, ContestStatProps, EventOrderStatProps, EventProps, MarketProps, MarketSideOptionProps, MatchProps, OrderProps, TeamProps, TournamentProps } from "../../types"
3
+ import type { AthleteProps, BestAvailableResponseProps, ContestStatProps, EventOrderStatProps, EventProps, MarketProps, MarketSideOptionProps, MatchProps, OrderProps, TeamProps, TournamentProps } from "../../types"
4
4
 
5
5
  let EVENT_SVC_API = ''
6
6
  let AUTH_SVC_API = ''
7
+ let MK_SVC_API = ''
7
8
 
8
9
  export { MarketComponentApi, MarketComponentHelpers }
9
10
 
@@ -11,9 +12,37 @@ const MarketComponentApi = {
11
12
  setEnvironment: () => {
12
13
  const endpoints = APIOverrides.getEndpoints();
13
14
  EVENT_SVC_API = endpoints['EVENT_SVC_API'] as string;
14
- //MK_SVC_API = endpoints['MK_SVC_API'] as string;
15
+ MK_SVC_API = endpoints['MK_SVC_API'] as string;
15
16
  AUTH_SVC_API = endpoints['AUTH_SVC_API'] as string;
16
17
  },
18
+ getMarkets:async():Promise<MarketProps[]> => {
19
+ try {
20
+ const resp = await axios.get(`${MK_SVC_API}/v1/markets/all`);
21
+ return resp.data.markets
22
+ } catch (e) {
23
+ console.log(e)
24
+ return []
25
+ }
26
+ },
27
+ getLatestTradesByEvents: async(event_type: string, event_ids:string[]) => {
28
+ try {
29
+ if(event_ids.length == 0){ return [] }
30
+ const resp = await axios.post(`${MK_SVC_API}/v1/trades/event/latest/bulk/get`, { event_type, event_ids })
31
+ return resp.data.trades
32
+ } catch (e) {
33
+ console.log(e)
34
+ return []
35
+ }
36
+ },
37
+ getBestAvailableOrders:async():Promise<BestAvailableResponseProps | undefined> => {
38
+ try {
39
+ const resp = await axios.get(`${MK_SVC_API}/v1/orders/available`);
40
+ return resp.data
41
+ } catch (e) {
42
+ console.log(e)
43
+ return undefined
44
+ }
45
+ },
17
46
  getAthletesByTeamId: async(team_id:string):Promise<AthleteProps[]> => {
18
47
  try {
19
48
  const resp = await axios.get(`${EVENT_SVC_API}/v1/athletes/team/${team_id}`)
@@ -0,0 +1,23 @@
1
+ import type { BestAvailableOrderProps, BestAvailableResponseProps, EventOrderStatProps, EventProps, TradeProps } from "../../../../types";
2
+
3
+ export { TeamEventListHelpers }
4
+
5
+ const TeamEventListHelpers = {
6
+ getEventMarketDataFromBestAvailable: (ba:BestAvailableResponseProps, events:EventProps[]):{ updated:boolean, latest_trades:TradeProps[], event_order_stats:EventOrderStatProps[], available_orders:BestAvailableOrderProps[] } => {
7
+ let updated = false;
8
+ let event_order_stats:EventOrderStatProps[] = []
9
+ let available_orders:BestAvailableOrderProps[] = []
10
+ let latest_trades:TradeProps[] = []
11
+ ba.events.map(ba_event => {
12
+ if(!ba_event.supported_markets){ return }
13
+ if(!events.find(e => e.event_id == ba_event.event_id)){ return }
14
+ updated = true
15
+ ba_event.supported_markets.map(sm => {
16
+ if(sm.available_orders){ available_orders = available_orders.concat(sm.available_orders) }
17
+ if(sm.order_stats){ event_order_stats = event_order_stats.concat(sm.order_stats) }
18
+ if(sm.latest_trades){ latest_trades = latest_trades.concat(sm.latest_trades) }
19
+ })
20
+ })
21
+ return { updated, event_order_stats, available_orders, latest_trades }
22
+ }
23
+ }
@@ -0,0 +1,136 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { View, FlatList } from 'react-native';
3
+ import type { BestAvailableOrderProps, BestAvailableResponseProps, EventOrderStatProps, EventProps, MarketProps, OrderProps, TradeProps } from '../../../types';
4
+ import TeamEventMarket from '../TeamEventMarket';
5
+ import { MarketComponentApi } from '../../api';
6
+ import { TeamEventListHelpers } from './api';
7
+ import SocketManager from '../../../Socket';
8
+
9
+ type TeamEventListProps = {
10
+ key:string //Change key to reload data
11
+ events:EventProps[],
12
+ distinct_id?:string,
13
+ show_grades?:boolean,
14
+ show_id?:boolean,
15
+ init_expanded_ids?:string[],
16
+ onTeamSelect?:(team_id:string) => void,
17
+ onActivate?:(event_id:string, event_type:string) => void,
18
+ onViewEvent?:(data:{ event_id:string, event_type:string, market_id:string, side_id?:string, side_type?:string }) => void,
19
+ onOrder?:(o:OrderProps) => void,
20
+ onCompetitionSelect?:(competition_id:string) => void,
21
+ onSquaresSelect?:(sq_comp_id:string) => void,
22
+ onTradeLongPress?:(trade:TradeProps) => void,
23
+ onViewAdditionalMarkets?:(event_id:string, event_type:string) => void
24
+ }
25
+
26
+ const TeamEventList = ({ events, show_grades, show_id, key, distinct_id, init_expanded_ids, onTeamSelect, onViewEvent, onOrder, onCompetitionSelect, onSquaresSelect, onTradeLongPress, onViewAdditionalMarkets, onActivate }:TeamEventListProps) => {
27
+ const [ needs_reload, setNeedsReload ] = useState(false);
28
+ const [ socket_response, setSocketResponse ] = useState<{ event_ids:string[], ba_response:BestAvailableResponseProps } | undefined>(undefined);
29
+ const [ event_data, setListData ] = useState<{
30
+ loading:boolean,
31
+ markets:MarketProps[],
32
+ latest_trades: TradeProps[],
33
+ available_orders: BestAvailableOrderProps[],
34
+ order_stats:EventOrderStatProps[]
35
+ }>({
36
+ loading:false,
37
+ latest_trades: [],
38
+ markets:[],
39
+ available_orders: [],
40
+ order_stats: []
41
+ });
42
+ const { available_orders, order_stats, latest_trades, markets } = event_data;
43
+
44
+ useEffect(() => {
45
+ MarketComponentApi.setEnvironment();
46
+ if(events.length > 0){ getDataFromServer() }
47
+ },[key, events.length]);
48
+
49
+ useEffect(() => {
50
+ if(!socket_response){ return }
51
+ const updated_data = TeamEventListHelpers.getEventMarketDataFromBestAvailable(socket_response.ba_response, events);
52
+ if(!updated_data.updated){ return }
53
+ setListData({
54
+ ...event_data,
55
+ order_stats: order_stats.filter(os => !socket_response.event_ids.find(new_id => new_id == os.event_id)).concat(updated_data.event_order_stats),
56
+ available_orders: available_orders.filter(os => !socket_response.event_ids.find(new_id => new_id == os.event_id)).concat(updated_data.available_orders),
57
+ latest_trades: latest_trades.filter(lt => !socket_response.event_ids.find(new_id => new_id == lt.event_id)).concat(updated_data.latest_trades)
58
+ })
59
+ },[socket_response])
60
+
61
+ const getDataFromServer = async() => {
62
+ setListData({ ...event_data, loading:true });
63
+ const ba = await MarketComponentApi.getBestAvailableOrders();
64
+ if(!ba){ return }
65
+ const lt = await MarketComponentApi.getLatestTradesByEvents('team', events.map(e => e.event_id));
66
+ const ev_data = TeamEventListHelpers.getEventMarketDataFromBestAvailable(ba, events);
67
+ const maks = await MarketComponentApi.getMarkets();
68
+ setListData({
69
+ ...event_data,
70
+ loading:false,
71
+ latest_trades: lt,
72
+ markets: maks,
73
+ order_stats: ev_data.event_order_stats,
74
+ available_orders: ev_data.available_orders
75
+ });
76
+ }
77
+
78
+ const renderEvents = (data: { item:EventProps, index:number }) => {
79
+ const ba = available_orders.filter(o => o.event_id == data.item.event_id && o.event_type == 'team');
80
+ const order_st = order_stats.filter(os => os.event_id == data.item.event_id && os.event_type == 'team');
81
+ const lts = latest_trades.filter(lt => lt.event_id == data.item.event_id && lt.event_type == 'team');
82
+ let init_expanded = false
83
+ if(init_expanded_ids && init_expanded_ids.includes(data.item.event_id)){ init_expanded = true }
84
+ return (
85
+ <TeamEventMarket
86
+ event={data.item}
87
+ show_grades={show_grades}
88
+ show_id={show_id ? 'true' : 'false'}
89
+ markets={markets}
90
+ init_expanded={init_expanded}
91
+ latest_trades={lts}
92
+ best_available_orders={ba}
93
+ onTeamSelect={onTeamSelect}
94
+ default_price_view='best_available'
95
+ event_order_stats={order_st}
96
+ onActivate={onActivate ? onActivate : undefined}
97
+ onView={(ev) => {
98
+ if(onViewEvent){ onViewEvent(ev) }
99
+ }}
100
+ onOrder={(o) => onOrder ? onOrder(o) : console.log('')}
101
+ onCompetitionSelect={(c) => onCompetitionSelect ? onCompetitionSelect(c) : console.log('')}
102
+ onSquaresSelect={(s) => onSquaresSelect ? onSquaresSelect(s) : console.log(s)}
103
+ onViewAdditionalMarkets={(event_id, event_type) => onViewAdditionalMarkets ? onViewAdditionalMarkets(event_id, event_type) : console.log('')}
104
+ onTradeLongPress={(t) => onTradeLongPress ? onTradeLongPress(t) : console.log(t)}
105
+ />
106
+ )
107
+ }
108
+
109
+ return (
110
+ <View>
111
+ <FlatList
112
+ data={events}
113
+ renderItem={renderEvents}
114
+ keyExtractor={(item) => item.event_id.toString()}
115
+ />
116
+ <SocketManager
117
+ distinct_id={distinct_id}
118
+ onConnect={() => {
119
+ if(needs_reload){
120
+ getDataFromServer();
121
+ setNeedsReload(false);
122
+ }
123
+ }}
124
+ onDisconnect={() => setNeedsReload(true)}
125
+ onSocketEvent={(ev) => {
126
+ if(ev.type != 'V1_LOAD_BEST_AVAILABLE'){ return }
127
+ let event_ids = ev.data.events.map((e:EventProps) => e.event_id);
128
+ setSocketResponse({ event_ids, ba_response: ev.data });
129
+ }}
130
+ subscribed_events={['V1_LOAD_BEST_AVAILABLE']}
131
+ />
132
+ </View>
133
+ )
134
+ }
135
+
136
+ export default TeamEventList
@@ -31,6 +31,7 @@ type TeamEventMarketProps = {
31
31
  onOrder:(order:OrderProps) => void,
32
32
  onEvent?:(be_event:BEEventProps) => void,
33
33
  onExpand?:(expanded:boolean) => void,
34
+ onTeamSelect?:(team_id:string) => void,
34
35
  show_grades?:boolean,
35
36
  onCompetitionSelect:(competition_id:string) => void,
36
37
  onSquaresSelect: (sq_comp_id:string) => void,
@@ -39,7 +40,7 @@ type TeamEventMarketProps = {
39
40
  onActivate?:(event_id:string, event_type:string) => void
40
41
  activate_loading?:boolean
41
42
  }
42
- const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, competitions, squares_competition, show_grades, markets, latest_trades, best_available_orders, event_order_stats, default_price_view, onSquaresSelect, onCompetitionSelect, onExpand, onOrder, onView, onViewAdditionalMarkets, onTradeLongPress, onActivate, onEvent }:TeamEventMarketProps) => {
43
+ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, competitions, squares_competition, show_grades, markets, latest_trades, best_available_orders, event_order_stats, default_price_view, onTeamSelect, onSquaresSelect, onCompetitionSelect, onExpand, onOrder, onView, onViewAdditionalMarkets, onTradeLongPress, onActivate, onEvent }:TeamEventMarketProps) => {
43
44
  const [ expanded_data, setExpandedData ] = useState<{
44
45
  expanded:boolean,
45
46
  loaded:boolean,
@@ -334,7 +335,7 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
334
335
 
335
336
  <Text size={12} color={show_stats ? Colors.utility.error : Colors.brand.electric}>{show_stats ? 'Hide Boxscore': `${TeamEventMarketHelpers.getTimeDetail(event)}`}</Text>
336
337
  </TouchableOpacity>
337
- <View nativeID='away_details' style={{ ...view_styles.body_row, minHeight:48 }}>
338
+ <TouchableOpacity disabled={!onTeamSelect} style={{ ...view_styles.body_row, minHeight:48 }} onPress={() => onTeamSelect ? onTeamSelect(event.away_team_id) : console.log('')}>
338
339
  <Image
339
340
  source={{ uri: event.away.image?.url }}
340
341
  style={{ height:30, width:30 }}
@@ -352,8 +353,8 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
352
353
  </View>
353
354
  <Text theme='body'>{event.away_team_score}</Text>
354
355
  </View>
355
- </View>
356
- <View nativeID='home_details' style={{ ...view_styles.body_row, minHeight:48 }}>
356
+ </TouchableOpacity>
357
+ <TouchableOpacity disabled={!onTeamSelect} style={{ ...view_styles.body_row, minHeight:48 }} onPress={() => onTeamSelect ? onTeamSelect(event.home_team_id) : console.log('')}>
357
358
  <Image
358
359
  source={{ uri: event.home.image?.url }}
359
360
  style={{ height:30, width:30 }}
@@ -371,7 +372,7 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
371
372
  </View>
372
373
  <Text theme='body'>{event.home_team_score}</Text>
373
374
  </View>
374
- </View>
375
+ </TouchableOpacity>
375
376
  </View>
376
377
  {event_status == 'active' ?
377
378
  <View nativeID='primary_market_details' style={{ padding:5 }}>
package/src/index.tsx CHANGED
@@ -26,8 +26,9 @@ import SeasonManager from "./CompetitionSeasonManager";
26
26
  import SeasonModule from "./CompetitionSeason";
27
27
  import CreateSeasonForm from "./CompetitionSeasonManager/components/CreateSeasonForm";
28
28
  import MarketComponents from './MarketComponents';
29
- import LocationTracker from "./LocationTracker";
29
+ import EventComponents from './EventComponents';
30
30
 
31
+ import LocationTracker from "./LocationTracker";
31
32
  export {
32
33
  Authenticator,
33
34
  Observer,
@@ -46,6 +47,7 @@ export {
46
47
  MyWallet,
47
48
  Checkout,
48
49
  MarketComponents,
50
+ EventComponents,
49
51
  PollCampaign,
50
52
  PollCampaignApi,
51
53
  PollApi,
package/src/types.d.ts CHANGED
@@ -160,6 +160,12 @@ export interface ContestStatProps {
160
160
  last_update_datetime:any
161
161
  }
162
162
 
163
+ export interface BestAvailableResponseProps {
164
+ events: EventProps[],
165
+ tournaments: TournamentProps[],
166
+ matches:MatchProps[]
167
+ }
168
+
163
169
  export interface AthleteProps {
164
170
  athlete_id:string,
165
171
  first_name:string,
@@ -220,6 +226,9 @@ export interface SupportedMarketProps {
220
226
  market_id:string,
221
227
  external_id?:string,
222
228
  removed?:boolean //When true - it will no longer accept bets
229
+ available_orders?: BestAvailableOrderProps[],
230
+ order_stats?:EventOrderStatProps[],
231
+ latest_trades?:TradeProps[]
223
232
  }
224
233
 
225
234
  export interface EventScoringProps {