be-components 2.1.8 → 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 (81) 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/SocialComponents/PlayerProfile/index.js +2 -1
  20. package/lib/commonjs/SocialComponents/PlayerProfile/index.js.map +1 -1
  21. package/lib/commonjs/index.js +7 -0
  22. package/lib/commonjs/index.js.map +1 -1
  23. package/lib/module/EventComponents/AthleteCard.js +12 -0
  24. package/lib/module/EventComponents/AthleteCard.js.map +1 -0
  25. package/lib/module/EventComponents/TeamCard.js +26 -0
  26. package/lib/module/EventComponents/TeamCard.js.map +1 -0
  27. package/lib/module/EventComponents/TeamProfile/index.js +239 -0
  28. package/lib/module/EventComponents/TeamProfile/index.js.map +1 -0
  29. package/lib/module/EventComponents/api/index.js +40 -0
  30. package/lib/module/EventComponents/api/index.js.map +1 -0
  31. package/lib/module/EventComponents/index.js +9 -0
  32. package/lib/module/EventComponents/index.js.map +1 -0
  33. package/lib/module/MarketComponents/api/index.js +35 -1
  34. package/lib/module/MarketComponents/api/index.js.map +1 -1
  35. package/lib/module/MarketComponents/components/TeamEventList/api/index.js +36 -0
  36. package/lib/module/MarketComponents/components/TeamEventList/api/index.js.map +1 -0
  37. package/lib/module/MarketComponents/components/TeamEventList/index.js +139 -0
  38. package/lib/module/MarketComponents/components/TeamEventList/index.js.map +1 -0
  39. package/lib/module/MarketComponents/components/TeamEventMarket/index.js +9 -6
  40. package/lib/module/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
  41. package/lib/module/SocialComponents/PlayerProfile/index.js +2 -1
  42. package/lib/module/SocialComponents/PlayerProfile/index.js.map +1 -1
  43. package/lib/module/index.js +2 -1
  44. package/lib/module/index.js.map +1 -1
  45. package/lib/typescript/src/EventComponents/AthleteCard.d.ts +8 -0
  46. package/lib/typescript/src/EventComponents/AthleteCard.d.ts.map +1 -0
  47. package/lib/typescript/src/EventComponents/TeamCard.d.ts +8 -0
  48. package/lib/typescript/src/EventComponents/TeamCard.d.ts.map +1 -0
  49. package/lib/typescript/src/EventComponents/TeamProfile/index.d.ts +8 -0
  50. package/lib/typescript/src/EventComponents/TeamProfile/index.d.ts.map +1 -0
  51. package/lib/typescript/src/EventComponents/api/index.d.ts +9 -0
  52. package/lib/typescript/src/EventComponents/api/index.d.ts.map +1 -0
  53. package/lib/typescript/src/EventComponents/index.d.ts +14 -0
  54. package/lib/typescript/src/EventComponents/index.d.ts.map +1 -0
  55. package/lib/typescript/src/MarketComponents/api/index.d.ts +4 -1
  56. package/lib/typescript/src/MarketComponents/api/index.d.ts.map +1 -1
  57. package/lib/typescript/src/MarketComponents/components/TeamEventList/api/index.d.ts +11 -0
  58. package/lib/typescript/src/MarketComponents/components/TeamEventList/api/index.d.ts.map +1 -0
  59. package/lib/typescript/src/MarketComponents/components/TeamEventList/index.d.ts +27 -0
  60. package/lib/typescript/src/MarketComponents/components/TeamEventList/index.d.ts.map +1 -0
  61. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts +2 -1
  62. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts.map +1 -1
  63. package/lib/typescript/src/MarketComponents/index.d.ts +2 -1
  64. package/lib/typescript/src/MarketComponents/index.d.ts.map +1 -1
  65. package/lib/typescript/src/SocialComponents/PlayerProfile/index.d.ts +2 -1
  66. package/lib/typescript/src/SocialComponents/PlayerProfile/index.d.ts.map +1 -1
  67. package/lib/typescript/src/index.d.ts +2 -1
  68. package/lib/typescript/src/index.d.ts.map +1 -1
  69. package/package.json +2 -1
  70. package/src/EventComponents/AthleteCard.tsx +18 -0
  71. package/src/EventComponents/TeamCard.tsx +24 -0
  72. package/src/EventComponents/TeamProfile/index.tsx +160 -0
  73. package/src/EventComponents/api/index.ts +42 -0
  74. package/src/EventComponents/index.tsx +9 -0
  75. package/src/MarketComponents/api/index.ts +31 -2
  76. package/src/MarketComponents/components/TeamEventList/api/index.ts +23 -0
  77. package/src/MarketComponents/components/TeamEventList/index.tsx +136 -0
  78. package/src/MarketComponents/components/TeamEventMarket/index.tsx +6 -5
  79. package/src/SocialComponents/PlayerProfile/index.tsx +3 -2
  80. package/src/index.tsx +3 -1
  81. package/src/types.d.ts +9 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "be-components",
3
- "version": "2.1.8",
3
+ "version": "2.2.0",
4
4
  "description": "Components for BettorEdge Apps",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -172,6 +172,7 @@
172
172
  "react-device-detect": "^2.2.3",
173
173
  "react-native-linear-gradient": "^2.8.3",
174
174
  "react-native-web-linear-gradient": "^1.1.2",
175
+ "react-native-web-swiper": "^2.2.4",
175
176
  "us-bank-account-validator": "^1.0.0",
176
177
  "uuid": "^9.0.1"
177
178
  },
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import { view_styles } from '../constants/styles';
4
+ import type { AthleteProps } from '../types';
5
+
6
+ type AthleteCardProps = {
7
+ team:AthleteProps
8
+ }
9
+
10
+ const AthleteCard = ({ }:AthleteCardProps) => {
11
+ return (
12
+ <View style={{ ...view_styles.section }}>
13
+
14
+ </View>
15
+ )
16
+ }
17
+
18
+ export default AthleteCard
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import { view_styles } from '../constants/styles';
4
+ import type { TeamProps } from '../types';
5
+ import { Text } from '../Components';
6
+
7
+ type TeamCardProps = {
8
+ team:TeamProps
9
+ }
10
+
11
+ const TeamCard = ({ team }:TeamCardProps) => {
12
+ console.log(team)
13
+ return (
14
+ <View style={{ ...view_styles.section }}>
15
+ <View style={{ ...view_styles.section_header }}>
16
+ <View style={{ flex:1 }}>
17
+ <Text theme='header'>{team.market_name} {team.name}</Text>
18
+ </View>
19
+ </View>
20
+ </View>
21
+ )
22
+ }
23
+
24
+ export default TeamCard
@@ -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 }}>
@@ -14,6 +14,7 @@ type PlayerProfileProps = {
14
14
  viewing_player_id:string,
15
15
  player_id?:string,
16
16
  height?:number,
17
+ maxWidth:number,
17
18
  padding_insets?:{ top:number, bottom:number },
18
19
  onStartChat?:(player_id:string) => void,
19
20
  onHeadToHead?: (player_id:string) => void,
@@ -28,7 +29,7 @@ type PlayerProfileProps = {
28
29
  onBack?:() => void
29
30
  }
30
31
 
31
- const PlayerProfile = ({ viewing_player_id, padding_insets, player_id, height, onStartChat, onHeadToHead, onCopyOrder, onFadeOrder, onViewPostComments, onEditProfile, onSelectPlayer, onRequestAuthenticate, onBack }:PlayerProfileProps) => {
32
+ const PlayerProfile = ({ viewing_player_id, maxWidth, padding_insets, player_id, height, onStartChat, onHeadToHead, onCopyOrder, onFadeOrder, onViewPostComments, onEditProfile, onSelectPlayer, onRequestAuthenticate, onBack }:PlayerProfileProps) => {
32
33
  const [ module_size, setModuleSize ] = useState({ height:755, width:330 });
33
34
  const [ show_following, setShowFollowing ] = useState<{
34
35
  visible:boolean,
@@ -207,7 +208,7 @@ const PlayerProfile = ({ viewing_player_id, padding_insets, player_id, height, o
207
208
  }
208
209
 
209
210
  return (
210
- <View style={{ flex:1, backgroundColor:Colors.shades.black_faded, maxWidth:500 }} onLayout={(ev) => {
211
+ <View style={{ flex:1, backgroundColor:Colors.shades.black_faded, maxWidth }} onLayout={(ev) => {
211
212
  const { height, width } = ev.nativeEvent.layout
212
213
  setModuleSize({ width, height });
213
214
  }}>
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 {