be-components 2.1.9 → 2.2.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.
- package/lib/commonjs/EventComponents/AthleteCard.js +19 -0
- package/lib/commonjs/EventComponents/AthleteCard.js.map +1 -0
- package/lib/commonjs/EventComponents/TeamCard.js +33 -0
- package/lib/commonjs/EventComponents/TeamCard.js.map +1 -0
- package/lib/commonjs/EventComponents/TeamProfile/index.js +272 -0
- package/lib/commonjs/EventComponents/TeamProfile/index.js.map +1 -0
- package/lib/commonjs/EventComponents/api/index.js +46 -0
- package/lib/commonjs/EventComponents/api/index.js.map +1 -0
- package/lib/commonjs/EventComponents/index.js +16 -0
- package/lib/commonjs/EventComponents/index.js.map +1 -0
- package/lib/commonjs/MarketComponents/api/index.js +35 -1
- package/lib/commonjs/MarketComponents/api/index.js.map +1 -1
- package/lib/commonjs/MarketComponents/components/TeamEventList/api/index.js +41 -0
- package/lib/commonjs/MarketComponents/components/TeamEventList/api/index.js.map +1 -0
- package/lib/commonjs/MarketComponents/components/TeamEventList/index.js +148 -0
- package/lib/commonjs/MarketComponents/components/TeamEventList/index.js.map +1 -0
- package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js +9 -6
- package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/EventComponents/AthleteCard.js +12 -0
- package/lib/module/EventComponents/AthleteCard.js.map +1 -0
- package/lib/module/EventComponents/TeamCard.js +26 -0
- package/lib/module/EventComponents/TeamCard.js.map +1 -0
- package/lib/module/EventComponents/TeamProfile/index.js +263 -0
- package/lib/module/EventComponents/TeamProfile/index.js.map +1 -0
- package/lib/module/EventComponents/api/index.js +40 -0
- package/lib/module/EventComponents/api/index.js.map +1 -0
- package/lib/module/EventComponents/index.js +9 -0
- package/lib/module/EventComponents/index.js.map +1 -0
- package/lib/module/MarketComponents/api/index.js +35 -1
- package/lib/module/MarketComponents/api/index.js.map +1 -1
- package/lib/module/MarketComponents/components/TeamEventList/api/index.js +36 -0
- package/lib/module/MarketComponents/components/TeamEventList/api/index.js.map +1 -0
- package/lib/module/MarketComponents/components/TeamEventList/index.js +139 -0
- package/lib/module/MarketComponents/components/TeamEventList/index.js.map +1 -0
- package/lib/module/MarketComponents/components/TeamEventMarket/index.js +9 -6
- package/lib/module/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/EventComponents/AthleteCard.d.ts +8 -0
- package/lib/typescript/src/EventComponents/AthleteCard.d.ts.map +1 -0
- package/lib/typescript/src/EventComponents/TeamCard.d.ts +8 -0
- package/lib/typescript/src/EventComponents/TeamCard.d.ts.map +1 -0
- package/lib/typescript/src/EventComponents/TeamProfile/index.d.ts +27 -0
- package/lib/typescript/src/EventComponents/TeamProfile/index.d.ts.map +1 -0
- package/lib/typescript/src/EventComponents/api/index.d.ts +9 -0
- package/lib/typescript/src/EventComponents/api/index.d.ts.map +1 -0
- package/lib/typescript/src/EventComponents/index.d.ts +32 -0
- package/lib/typescript/src/EventComponents/index.d.ts.map +1 -0
- package/lib/typescript/src/MarketComponents/api/index.d.ts +4 -1
- package/lib/typescript/src/MarketComponents/api/index.d.ts.map +1 -1
- package/lib/typescript/src/MarketComponents/components/TeamEventList/api/index.d.ts +11 -0
- package/lib/typescript/src/MarketComponents/components/TeamEventList/api/index.d.ts.map +1 -0
- package/lib/typescript/src/MarketComponents/components/TeamEventList/index.d.ts +27 -0
- package/lib/typescript/src/MarketComponents/components/TeamEventList/index.d.ts.map +1 -0
- package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts +2 -1
- package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts.map +1 -1
- package/lib/typescript/src/MarketComponents/index.d.ts +2 -1
- package/lib/typescript/src/MarketComponents/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/EventComponents/AthleteCard.tsx +18 -0
- package/src/EventComponents/TeamCard.tsx +24 -0
- package/src/EventComponents/TeamProfile/index.tsx +185 -0
- package/src/EventComponents/api/index.ts +42 -0
- package/src/EventComponents/index.tsx +9 -0
- package/src/MarketComponents/api/index.ts +31 -2
- package/src/MarketComponents/components/TeamEventList/api/index.ts +23 -0
- package/src/MarketComponents/components/TeamEventList/index.tsx +136 -0
- package/src/MarketComponents/components/TeamEventMarket/index.tsx +6 -5
- package/src/index.tsx +3 -1
- package/src/types.d.ts +9 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { View, Image, ScrollView, FlatList, TouchableOpacity, ActivityIndicator } from 'react-native';
|
|
3
|
+
import type { EventProps, OrderProps, TeamProps, TradeProps } 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
|
+
distinct_id?:string,
|
|
15
|
+
show_grades?:boolean,
|
|
16
|
+
show_id?:boolean,
|
|
17
|
+
init_expanded_ids?:string[],
|
|
18
|
+
onTeamSelect?:(team_id:string) => void,
|
|
19
|
+
onActivate?:(event_id:string, event_type:string) => void,
|
|
20
|
+
onViewEvent?:(data:{ event_id:string, event_type:string, market_id:string, side_id?:string, side_type?:string }) => void,
|
|
21
|
+
onOrder?:(o:OrderProps) => void,
|
|
22
|
+
onCompetitionSelect?:(competition_id:string) => void,
|
|
23
|
+
onSquaresSelect?:(sq_comp_id:string) => void,
|
|
24
|
+
onTradeLongPress?:(trade:TradeProps) => void,
|
|
25
|
+
onViewAdditionalMarkets?:(event_id:string, event_type:string) => void
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const TeamProfile = ({ team_id, height, distinct_id, show_grades, show_id, init_expanded_ids, onTeamSelect, onActivate, onViewEvent, onOrder, onCompetitionSelect, onSquaresSelect, onTradeLongPress, onViewAdditionalMarkets }: TeamProfileProps ) => {
|
|
29
|
+
const [ module_size, setModuleSize ] = useState({ height:777, width:330 });
|
|
30
|
+
const [ team_data, setData ] = useState<{
|
|
31
|
+
loading:boolean,
|
|
32
|
+
team?:TeamProps,
|
|
33
|
+
event_toggle:string,
|
|
34
|
+
}>({
|
|
35
|
+
loading: false,
|
|
36
|
+
event_toggle: 'Upcoming',
|
|
37
|
+
});
|
|
38
|
+
const { team, event_toggle } = team_data;
|
|
39
|
+
const [ event_data, setEventData ] = useState<{
|
|
40
|
+
event_loading:boolean,
|
|
41
|
+
events:EventProps[],
|
|
42
|
+
event_offset:number
|
|
43
|
+
}>({
|
|
44
|
+
event_loading: false,
|
|
45
|
+
events: [],
|
|
46
|
+
event_offset: 0
|
|
47
|
+
});
|
|
48
|
+
const { event_loading, events } = event_data;
|
|
49
|
+
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
EventComponentApi.setEnvironment();
|
|
52
|
+
getTeamData(team_id)
|
|
53
|
+
},[team_id]);
|
|
54
|
+
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
getEventData(0);
|
|
57
|
+
},[event_toggle])
|
|
58
|
+
|
|
59
|
+
const getTeamData = async(id:string) => {
|
|
60
|
+
setData({ ...team_data, loading:true });
|
|
61
|
+
const team = await EventComponentApi.getTeamById(id);
|
|
62
|
+
setData({
|
|
63
|
+
...team_data,
|
|
64
|
+
loading: false,
|
|
65
|
+
team:team,
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const getEventData = async(offset:number) => {
|
|
70
|
+
setEventData({ ...event_data, event_loading:true });
|
|
71
|
+
let evs:EventProps[] = [];
|
|
72
|
+
switch(event_toggle){
|
|
73
|
+
case 'Upcoming':
|
|
74
|
+
evs = await EventComponentApi.getUpcomingScheduleByTeams(team_id, offset);
|
|
75
|
+
break
|
|
76
|
+
case 'Past':
|
|
77
|
+
evs = await EventComponentApi.getPastScheduleByTeams(team_id, offset);
|
|
78
|
+
break
|
|
79
|
+
default: break
|
|
80
|
+
}
|
|
81
|
+
setEventData({
|
|
82
|
+
...event_data,
|
|
83
|
+
event_loading: false,
|
|
84
|
+
event_offset: offset,
|
|
85
|
+
events: evs
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
const renderEventToggles = (data:{ item:string, index:number }) => {
|
|
92
|
+
const active = data.item == event_toggle ? true : false
|
|
93
|
+
return (
|
|
94
|
+
<TouchableOpacity style={{ width: (module_size.width - 65) / 2, padding:15, borderRadius:22, backgroundColor:active?Colors.brand.midnight:'transparent' }}
|
|
95
|
+
onPress={() => setData({ ...team_data, event_toggle: data.item })}>
|
|
96
|
+
<Text textAlign='center' weight='bold' size={14} color={active ?Colors.shades.white:Colors.brand.midnight}>{data.item}</Text>
|
|
97
|
+
</TouchableOpacity>
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if(!team){ return <></> }
|
|
102
|
+
return (
|
|
103
|
+
<View style={{ height }} onLayout={(ev) => {
|
|
104
|
+
const { height, width } = ev.nativeEvent.layout;
|
|
105
|
+
setModuleSize({ height, width })
|
|
106
|
+
}}>
|
|
107
|
+
<View style={{ position:'absolute', top:0, left:0, right:0 }}>
|
|
108
|
+
<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'/>
|
|
109
|
+
<View style={{ position:'absolute', top:0, left:0, right:0, bottom:0, alignItems:'center' }}>
|
|
110
|
+
<Image
|
|
111
|
+
source={{ uri:team.image?.url }}
|
|
112
|
+
style={{ height: module_size.width*0.75, width:module_size.width*0.75 }}
|
|
113
|
+
resizeMode='cover'
|
|
114
|
+
/>
|
|
115
|
+
</View>
|
|
116
|
+
</View>
|
|
117
|
+
<ScrollView style={{ flex:1 }}>
|
|
118
|
+
<View style={{ ...view_styles.section, marginTop:module_size.width *0.5 }}>
|
|
119
|
+
<View style={{ ...view_styles.section_header }}>
|
|
120
|
+
<Image
|
|
121
|
+
style={{ height:40, width:40 }}
|
|
122
|
+
source={{ uri: team.image?.url }}
|
|
123
|
+
resizeMode='cover'
|
|
124
|
+
/>
|
|
125
|
+
<View style={{ flex:1, marginLeft:10 }}>
|
|
126
|
+
<Text theme='header'>{team.market_name} {team.name}</Text>
|
|
127
|
+
<Text style={{ marginTop:4 }} theme='body_2'>{team.division} - {team.sub_division}</Text>
|
|
128
|
+
</View>
|
|
129
|
+
{team.rank ?
|
|
130
|
+
<Text size={22} color={Colors.brand.cyan} weight='bold'>{team.rank}</Text>
|
|
131
|
+
:<></>}
|
|
132
|
+
</View>
|
|
133
|
+
</View>
|
|
134
|
+
|
|
135
|
+
<View style={{ ...view_styles.section }}>
|
|
136
|
+
<View style={{ ...view_styles.section_header }}>
|
|
137
|
+
<View style={{ flex:1 }}>
|
|
138
|
+
<Text theme='header'>Events</Text>
|
|
139
|
+
<Text style={{ marginTop:3 }} theme='body_2'>Events that this team is participating in</Text>
|
|
140
|
+
</View>
|
|
141
|
+
</View>
|
|
142
|
+
<View style={{ ...view_styles.section_body, padding:0 }}>
|
|
143
|
+
<View style={{ ...view_styles.body_row, margin:10, marginLeft:20, marginRight:20, borderRadius:22, padding:1, backgroundColor:Colors.shades.shade100 }}>
|
|
144
|
+
<FlatList
|
|
145
|
+
key={'toggles'}
|
|
146
|
+
horizontal
|
|
147
|
+
showsHorizontalScrollIndicator={false}
|
|
148
|
+
data={['Upcoming', 'Past']}
|
|
149
|
+
renderItem={renderEventToggles}
|
|
150
|
+
keyExtractor={(item) => item}
|
|
151
|
+
|
|
152
|
+
/>
|
|
153
|
+
</View>
|
|
154
|
+
{event_loading ?
|
|
155
|
+
<ActivityIndicator
|
|
156
|
+
size='large'
|
|
157
|
+
color={Colors.brand.midnight}
|
|
158
|
+
style={{ padding:20, alignSelf:'center' }}
|
|
159
|
+
/>
|
|
160
|
+
:<></>}
|
|
161
|
+
<TeamEventList
|
|
162
|
+
key={`${team_id}_${event_toggle}`}
|
|
163
|
+
distinct_id={distinct_id}
|
|
164
|
+
show_id={show_id}
|
|
165
|
+
show_grades={show_grades}
|
|
166
|
+
init_expanded_ids={init_expanded_ids}
|
|
167
|
+
onTeamSelect={onTeamSelect}
|
|
168
|
+
events={events}
|
|
169
|
+
onTradeLongPress={onTradeLongPress}
|
|
170
|
+
onActivate={onActivate}
|
|
171
|
+
onCompetitionSelect={onCompetitionSelect}
|
|
172
|
+
onSquaresSelect={onSquaresSelect}
|
|
173
|
+
onOrder={onOrder}
|
|
174
|
+
onViewEvent={onViewEvent}
|
|
175
|
+
onViewAdditionalMarkets={onViewAdditionalMarkets}
|
|
176
|
+
|
|
177
|
+
/>
|
|
178
|
+
</View>
|
|
179
|
+
</View>
|
|
180
|
+
</ScrollView>
|
|
181
|
+
</View>
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
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
|
+
}
|
|
@@ -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
|
-
|
|
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
|
-
<
|
|
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
|
-
</
|
|
356
|
-
<
|
|
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
|
-
</
|
|
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
|
|
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 {
|