be-components 1.5.9 → 1.6.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.
Files changed (128) hide show
  1. package/lib/commonjs/Checkout/index.js +8 -6
  2. package/lib/commonjs/Checkout/index.js.map +1 -1
  3. package/lib/commonjs/CompetitionManager/components/AthleteSelector.js +50 -1
  4. package/lib/commonjs/CompetitionManager/components/AthleteSelector.js.map +1 -1
  5. package/lib/commonjs/Components/Icons.js +90 -0
  6. package/lib/commonjs/Components/Icons.js.map +1 -1
  7. package/lib/commonjs/Engage/components/BracketCompetitionCard.js +3 -1
  8. package/lib/commonjs/Engage/components/BracketCompetitionCard.js.map +1 -1
  9. package/lib/commonjs/Engage/components/CompetitionCard.js +3 -1
  10. package/lib/commonjs/Engage/components/CompetitionCard.js.map +1 -1
  11. package/lib/commonjs/Engage/components/SquaresCompetitionCard.js +3 -1
  12. package/lib/commonjs/Engage/components/SquaresCompetitionCard.js.map +1 -1
  13. package/lib/commonjs/LocationTracker/LocationStatus.js +39 -2
  14. package/lib/commonjs/LocationTracker/LocationStatus.js.map +1 -1
  15. package/lib/commonjs/LocationTracker/api/index.js +55 -1
  16. package/lib/commonjs/LocationTracker/api/index.js.map +1 -1
  17. package/lib/commonjs/MarketComponents/api/index.js +213 -0
  18. package/lib/commonjs/MarketComponents/api/index.js.map +1 -0
  19. package/lib/commonjs/MarketComponents/components/AthleteMarket/index.js +179 -0
  20. package/lib/commonjs/MarketComponents/components/AthleteMarket/index.js.map +1 -0
  21. package/lib/commonjs/MarketComponents/components/EventMarket/index.js +205 -0
  22. package/lib/commonjs/MarketComponents/components/EventMarket/index.js.map +1 -0
  23. package/lib/commonjs/MarketComponents/components/MarketButton/api/index.js +179 -0
  24. package/lib/commonjs/MarketComponents/components/MarketButton/api/index.js.map +1 -0
  25. package/lib/commonjs/MarketComponents/components/MarketButton/index.js +58 -0
  26. package/lib/commonjs/MarketComponents/components/MarketButton/index.js.map +1 -0
  27. package/lib/commonjs/MarketComponents/components/TeamEventMarket/api/index.js +48 -0
  28. package/lib/commonjs/MarketComponents/components/TeamEventMarket/api/index.js.map +1 -0
  29. package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js +479 -0
  30. package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js.map +1 -0
  31. package/lib/commonjs/MarketComponents/index.js +12 -0
  32. package/lib/commonjs/MarketComponents/index.js.map +1 -0
  33. package/lib/commonjs/index.js +7 -0
  34. package/lib/commonjs/index.js.map +1 -1
  35. package/lib/module/Checkout/index.js +8 -6
  36. package/lib/module/Checkout/index.js.map +1 -1
  37. package/lib/module/CompetitionManager/components/AthleteSelector.js +50 -1
  38. package/lib/module/CompetitionManager/components/AthleteSelector.js.map +1 -1
  39. package/lib/module/Components/Icons.js +90 -0
  40. package/lib/module/Components/Icons.js.map +1 -1
  41. package/lib/module/Engage/components/BracketCompetitionCard.js +3 -1
  42. package/lib/module/Engage/components/BracketCompetitionCard.js.map +1 -1
  43. package/lib/module/Engage/components/CompetitionCard.js +3 -1
  44. package/lib/module/Engage/components/CompetitionCard.js.map +1 -1
  45. package/lib/module/Engage/components/SquaresCompetitionCard.js +3 -1
  46. package/lib/module/Engage/components/SquaresCompetitionCard.js.map +1 -1
  47. package/lib/module/LocationTracker/LocationStatus.js +39 -2
  48. package/lib/module/LocationTracker/LocationStatus.js.map +1 -1
  49. package/lib/module/LocationTracker/api/index.js +55 -1
  50. package/lib/module/LocationTracker/api/index.js.map +1 -1
  51. package/lib/module/MarketComponents/api/index.js +207 -0
  52. package/lib/module/MarketComponents/api/index.js.map +1 -0
  53. package/lib/module/MarketComponents/components/AthleteMarket/index.js +172 -0
  54. package/lib/module/MarketComponents/components/AthleteMarket/index.js.map +1 -0
  55. package/lib/module/MarketComponents/components/EventMarket/index.js +198 -0
  56. package/lib/module/MarketComponents/components/EventMarket/index.js.map +1 -0
  57. package/lib/module/MarketComponents/components/MarketButton/api/index.js +172 -0
  58. package/lib/module/MarketComponents/components/MarketButton/api/index.js.map +1 -0
  59. package/lib/module/MarketComponents/components/MarketButton/index.js +51 -0
  60. package/lib/module/MarketComponents/components/MarketButton/index.js.map +1 -0
  61. package/lib/module/MarketComponents/components/TeamEventMarket/api/index.js +42 -0
  62. package/lib/module/MarketComponents/components/TeamEventMarket/api/index.js.map +1 -0
  63. package/lib/module/MarketComponents/components/TeamEventMarket/index.js +470 -0
  64. package/lib/module/MarketComponents/components/TeamEventMarket/index.js.map +1 -0
  65. package/lib/module/MarketComponents/index.js +5 -0
  66. package/lib/module/MarketComponents/index.js.map +1 -0
  67. package/lib/module/index.js +2 -1
  68. package/lib/module/index.js.map +1 -1
  69. package/lib/typescript/src/Checkout/index.d.ts.map +1 -1
  70. package/lib/typescript/src/CompetitionManager/components/AthleteSelector.d.ts.map +1 -1
  71. package/lib/typescript/src/Components/Icons.d.ts +3 -0
  72. package/lib/typescript/src/Components/Icons.d.ts.map +1 -1
  73. package/lib/typescript/src/Engage/components/BracketCompetitionCard.d.ts.map +1 -1
  74. package/lib/typescript/src/LocationTracker/LocationStatus.d.ts +7 -1
  75. package/lib/typescript/src/LocationTracker/LocationStatus.d.ts.map +1 -1
  76. package/lib/typescript/src/LocationTracker/api/index.d.ts +12 -1
  77. package/lib/typescript/src/LocationTracker/api/index.d.ts.map +1 -1
  78. package/lib/typescript/src/MarketComponents/api/index.d.ts +22 -0
  79. package/lib/typescript/src/MarketComponents/api/index.d.ts.map +1 -0
  80. package/lib/typescript/src/MarketComponents/components/AthleteMarket/index.d.ts +25 -0
  81. package/lib/typescript/src/MarketComponents/components/AthleteMarket/index.d.ts.map +1 -0
  82. package/lib/typescript/src/MarketComponents/components/EventMarket/index.d.ts +21 -0
  83. package/lib/typescript/src/MarketComponents/components/EventMarket/index.d.ts.map +1 -0
  84. package/lib/typescript/src/MarketComponents/components/MarketButton/api/index.d.ts +15 -0
  85. package/lib/typescript/src/MarketComponents/components/MarketButton/api/index.d.ts.map +1 -0
  86. package/lib/typescript/src/MarketComponents/components/MarketButton/index.d.ts +12 -0
  87. package/lib/typescript/src/MarketComponents/components/MarketButton/index.d.ts.map +1 -0
  88. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/api/index.d.ts +10 -0
  89. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/api/index.d.ts.map +1 -0
  90. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts +25 -0
  91. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts.map +1 -0
  92. package/lib/typescript/src/MarketComponents/index.d.ts +25 -0
  93. package/lib/typescript/src/MarketComponents/index.d.ts.map +1 -0
  94. package/lib/typescript/src/index.d.ts +2 -1
  95. package/lib/typescript/src/index.d.ts.map +1 -1
  96. package/package.json +1 -1
  97. package/src/Checkout/index.tsx +2 -1
  98. package/src/CompetitionManager/components/AthleteSelector.tsx +36 -0
  99. package/src/Components/Icons.tsx +50 -0
  100. package/src/Engage/components/BracketCompetitionCard.tsx +2 -2
  101. package/src/Engage/components/CompetitionCard.tsx +1 -1
  102. package/src/Engage/components/SquaresCompetitionCard.tsx +1 -1
  103. package/src/LocationTracker/LocationStatus.tsx +34 -3
  104. package/src/LocationTracker/api/index.tsx +39 -3
  105. package/src/MarketComponents/api/index.ts +143 -0
  106. package/src/MarketComponents/components/AthleteMarket/index.tsx +109 -0
  107. package/src/MarketComponents/components/EventMarket/index.tsx +115 -0
  108. package/src/MarketComponents/components/MarketButton/api/index.ts +152 -0
  109. package/src/MarketComponents/components/MarketButton/index.tsx +37 -0
  110. package/src/MarketComponents/components/TeamEventMarket/api/index.ts +35 -0
  111. package/src/MarketComponents/components/TeamEventMarket/index.tsx +295 -0
  112. package/src/MarketComponents/index.tsx +5 -0
  113. package/src/index.tsx +2 -0
  114. package/src/types.d.ts +88 -2
  115. package/lib/commonjs/Markets/api/index.js +0 -28
  116. package/lib/commonjs/Markets/api/index.js.map +0 -1
  117. package/lib/commonjs/Markets/components/MarketButton.js +0 -25
  118. package/lib/commonjs/Markets/components/MarketButton.js.map +0 -1
  119. package/lib/module/Markets/api/index.js +0 -23
  120. package/lib/module/Markets/api/index.js.map +0 -1
  121. package/lib/module/Markets/components/MarketButton.js +0 -18
  122. package/lib/module/Markets/components/MarketButton.js.map +0 -1
  123. package/lib/typescript/src/Markets/api/index.d.ts +0 -7
  124. package/lib/typescript/src/Markets/api/index.d.ts.map +0 -1
  125. package/lib/typescript/src/Markets/components/MarketButton.d.ts +0 -11
  126. package/lib/typescript/src/Markets/components/MarketButton.d.ts.map +0 -1
  127. package/src/Markets/api/index.ts +0 -18
  128. package/src/Markets/components/MarketButton.tsx +0 -24
@@ -0,0 +1,295 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { View, Image, FlatList, TouchableOpacity, ActivityIndicator } from 'react-native';
3
+ import type { AthleteProps, BestAvailableOrderProps, CompetitionProps, EventOrderStatProps, EventProps, MarketProps, MarketSideOptionProps, OrderProps, TradeProps } from '../../../types';
4
+ import { view_styles } from '../../../constants/styles';
5
+ import { Button, Icons, LinearDiagnal, Text } from '../../../Components';
6
+ import {TeamEventMarketHelpers} from './api';
7
+ import MarketButton from '../../components/MarketButton';
8
+ import Colors from '../../../constants/colors';
9
+ import moment from 'moment-mini';
10
+ import AthleteMarket from '../../components/AthleteMarket';
11
+ import EventMarket from '../../components/EventMarket';
12
+
13
+ import { MarketComponentApi, MarketComponentHelpers } from '../../api';
14
+ import { MarketButtonHelpers } from '../MarketButton/api';
15
+
16
+ type TeamEventMarketProps = {
17
+ event:EventProps,
18
+ markets:MarketProps[],
19
+ competition?:CompetitionProps,
20
+ latest_trades:TradeProps[],
21
+ best_available_orders:BestAvailableOrderProps[],
22
+ event_order_stats:EventOrderStatProps[],
23
+ default_price_view: 'last_trade'|'best_available',
24
+ onView:(data:{ event_id:string, event_type:string, market_id:string, side_type?:string, side_id?:string }) => void,
25
+ onOrder:(order:OrderProps) => void,
26
+ onExpand?:(expanded:boolean) => void,
27
+ onCompetitionSelect:(competition_id:string) => void,
28
+ onViewAdditionalMarkets: (event_id:string, event_type:string) => void
29
+ }
30
+ const TeamEventMarket = ({ event, competition, markets, latest_trades, best_available_orders, event_order_stats, default_price_view, onCompetitionSelect, onExpand, onOrder, onView, onViewAdditionalMarkets }:TeamEventMarketProps) => {
31
+ const [ expanded_data, setExpandedData ] = useState<{
32
+ expanded:boolean,
33
+ loaded:boolean,
34
+ loading:boolean,
35
+ athletes:AthleteProps[]
36
+ }>({
37
+ loaded:false,
38
+ loading:false,
39
+ expanded:false,
40
+ athletes:[]
41
+ })
42
+ const { expanded, athletes, loaded, loading } = expanded_data;
43
+
44
+ useEffect(() => {
45
+ MarketComponentApi.setEnvironment();
46
+ },[])
47
+
48
+ const expandedEvent = async() => {
49
+ if(onExpand){ onExpand(expanded ? false : true) }
50
+ if(expanded){ return setExpandedData({ ...expanded_data, expanded: false }) }
51
+ if(loaded){ return setExpandedData({ ...expanded_data, expanded: true }) }
52
+ setExpandedData({ ...expanded_data, expanded:true, loading:true });
53
+
54
+ //Need to load our athletes in here!
55
+ const away_athletes = await MarketComponentApi.getAthletesByTeamId(event.away_team_id);
56
+ const home_athletes = await MarketComponentApi.getAthletesByTeamId(event.home_team_id);
57
+ setExpandedData({
58
+ expanded:true,
59
+ loaded:true,
60
+ loading:false,
61
+ athletes: away_athletes.concat(home_athletes)
62
+ })
63
+ }
64
+
65
+ const primary_markets = TeamEventMarketHelpers.getPrimaryMarkets(event, markets);
66
+
67
+
68
+ const renderSides = (data:{ item:MarketSideOptionProps, index:number, market:MarketProps }) => {
69
+ const side_details = MarketComponentHelpers.getTeamEventSideIds(event, data.market, data.item);
70
+ if(!side_details){ return <></> } //Bomb out if we cant get the side details
71
+ let trade = MarketButtonHelpers.getVisibleTrade(default_price_view, data.market, data.item, latest_trades, best_available_orders, side_details.side_id, side_details.reversed_side_id);
72
+ if(!trade){
73
+ trade = MarketButtonHelpers.getTradeFromMarket(data.market, event.event_id, 'team', data.item.side, data.item.id_source, side_details.side_id, side_details.reversed_side_id)
74
+ }
75
+ if(!trade){ return <></> }
76
+ return (
77
+ <View style={{ margin:2, width:50, height:50 }}>
78
+ <MarketButton
79
+ side_option={data.item}
80
+ market={data.market}
81
+ trade={trade}
82
+ onPress={(order) => {
83
+ const order_title = MarketComponentHelpers.getOrderTitleForTeamEvent(order, data.market, event);
84
+ if(!order_title){ return alert('Unable to process order') }
85
+ onOrder({ ...order, title: order_title })
86
+ }}
87
+ />
88
+ </View>
89
+ )
90
+ }
91
+
92
+ const renderMarketHeaders = (data:{ item:MarketProps, index:number }) => {
93
+ return (
94
+ <View style={{ width:50, marginLeft:2, marginRight:2 }}>
95
+ <Text size={12} color={Colors.brand.midnight} textAlign='center'>{data.item.type.toUpperCase()}</Text>
96
+ </View>
97
+ )
98
+ }
99
+
100
+ const renderNonPrimaryMarkets = (data: { item:EventOrderStatProps, index:number }) => {
101
+ const market = markets.find(m => m.market_id == data.item.market_id);
102
+ if(!market){ return <></> }
103
+ switch(market.level){
104
+ case 'athlete':
105
+ const athlete = athletes.find(a => a.athlete_id == data.item.side_id)
106
+ if(!athlete){ return <></> }
107
+ const athlete_trades = latest_trades.filter(t => t.market_type == 'FOR_MONEY' && t.market_id == data.item.market_id && t.side_type == 'athlete' && t.side_id == data.item.side_id);
108
+ const athlete_orders = best_available_orders.filter(t => t.market_id == data.item.market_id && t.side_type == 'athlete' && t.side_id == data.item.side_id);
109
+ return (
110
+ <View>
111
+ <AthleteMarket
112
+ event={event}
113
+ event_type='team'
114
+ athlete={athlete}
115
+ market={market}
116
+ event_order_stats={[data.item]}
117
+ latest_trades={athlete_trades}
118
+ default_price_view={default_price_view}
119
+ best_available_orders={athlete_orders}
120
+ onOrder={onOrder}
121
+ onView={onView}
122
+ />
123
+ </View>
124
+ )
125
+ case 'event':
126
+ const event_trades = latest_trades.filter(t => t.market_type == 'FOR_MONEY' && t.market_id == data.item.market_id);
127
+ const event_orders = best_available_orders.filter(t => t.market_id == data.item.market_id);
128
+ return (
129
+ <View>
130
+ <EventMarket
131
+ event={event}
132
+ market={market}
133
+ event_order_stats={[data.item]}
134
+ latest_trades={event_trades}
135
+ best_available_orders={event_orders}
136
+ default_price_view={default_price_view}
137
+ onOrder={onOrder}
138
+ onView={onView}
139
+ />
140
+ </View>
141
+ )
142
+ default: return<></>
143
+ }
144
+ }
145
+
146
+ const renderPrimaryMarkets = (data:{ item:MarketProps, index:number }) => {
147
+ return (
148
+ <View>
149
+ <FlatList
150
+ key={`${event.event_id}_side_options`}
151
+ data={data.item.side_options.sort((a,b) => {
152
+ let a_t = a.side == data.item.trade_side ? 1 : 0
153
+ let b_t = b.side == data.item.trade_side ? 1 : 0
154
+ return a_t - b_t
155
+ })}
156
+ keyExtractor={(item) => item.side}
157
+ renderItem={({ item, index }) => renderSides({ item, index, market:data.item })}
158
+ />
159
+ </View>
160
+ )
161
+ }
162
+
163
+ if(!event.away || !event.home){ return <></> }
164
+
165
+ const upcoming = moment().isBefore(moment(event.scheduled_datetime)) ? true : false
166
+ const { liquidity, open_order_count } = MarketComponentHelpers.getLiqudity(event_order_stats);
167
+
168
+ const non_primary_markets = TeamEventMarketHelpers.sortNonPrimaryMarkets(TeamEventMarketHelpers.getNonPrimaryMarkets(event, markets), event_order_stats)
169
+
170
+ return (
171
+ <View style={{ ...view_styles.section, borderWidth:1, borderColor:Colors.shades.shade600 }}>
172
+ <View nativeID='event_header_data' style={{ flexDirection:'row', padding:10, borderBottomWidth:1, borderBottomColor:Colors.shades.shade600 }}>
173
+ <View style={{ flex:1 }}>
174
+ {event.event_sub_title ?
175
+ <Text size={12} color={Colors.brand.midnight} weight='semibold'>{event.event_sub_title}</Text>
176
+ :<></>}
177
+ </View>
178
+ <View style={{ flexDirection:'row', alignItems:'center' }}>
179
+ <Icons.TVIcon size={10} color={Colors.brand.midnight} />
180
+ <Text style={{ marginLeft:8 }} size={12} color={Colors.brand.midnight} weight='semibold'>{event.info?.broadcast?.network}</Text>
181
+ </View>
182
+ </View>
183
+ <View nativeID='primary_markets' style={{ flexDirection:'row' }}>
184
+ <View nativeID='team_details' style={{ flex:1, padding:5, paddingRight:0 }}>
185
+ <View style={{ flexDirection:'row', alignItems:'center', marginTop:5, marginBottom:5, marginLeft:10 }}>
186
+ <View style={{ marginRight:5, height:10, width:10, borderRadius:100, backgroundColor:upcoming?Colors.brand.electric:Colors.utility.success }} />
187
+ <Text size={12} color={Colors.brand.midnight}>{TeamEventMarketHelpers.getTimeDetail(event)}</Text>
188
+ </View>
189
+ <View nativeID='away_details' style={{ ...view_styles.body_row, minHeight:48 }}>
190
+ <Image
191
+ source={{ uri: event.away.image?.url }}
192
+ style={{ height:30, width:30 }}
193
+ resizeMode='cover'
194
+ />
195
+ <View style={{ flex:1, flexDirection:'row', alignItems:'center', marginLeft:5 }}>
196
+ <View style={{ flex:1, marginRight:5 }}>
197
+ <Text theme='header_2'>{event.away.market_name} {event.away.name}</Text>
198
+ {event.away_sub_title ?
199
+ <Text style={{ marginTop:3 }} theme='body_2'>{event.away_sub_title}</Text>
200
+ :<></>}
201
+ </View>
202
+ <Text theme='body'>{event.away_team_score}</Text>
203
+ </View>
204
+ </View>
205
+ <View nativeID='home_details' style={{ ...view_styles.body_row, minHeight:48 }}>
206
+ <Image
207
+ source={{ uri: event.home.image?.url }}
208
+ style={{ height:30, width:30 }}
209
+ resizeMode='cover'
210
+ />
211
+ <View style={{ flex:1, flexDirection:'row', alignItems:'center', marginLeft:5 }}>
212
+ <View style={{ flex:1, marginRight:5 }}>
213
+ <Text theme='header_2'>{event.home.market_name} {event.home.name}</Text>
214
+ {event.home_sub_title ?
215
+ <Text style={{ marginTop:3 }} theme='body_2'>{event.home_sub_title}</Text>
216
+ :<></>}
217
+ </View>
218
+ <Text theme='body'>{event.home_team_score}</Text>
219
+ </View>
220
+ </View>
221
+ </View>
222
+ <View nativeID='primary_market_details' style={{ padding:5 }}>
223
+ <View style={{ marginTop:5, marginBottom:5 }}>
224
+ <FlatList
225
+ key={`${event.event_id}_market_headers`}
226
+ data={primary_markets}
227
+ keyExtractor={(item) => item.market_id.toString()}
228
+ horizontal
229
+ renderItem={renderMarketHeaders}
230
+ />
231
+ </View>
232
+ <FlatList
233
+ key={`${event.event_id}_primary_markets`}
234
+ data={primary_markets}
235
+ horizontal
236
+ renderItem={renderPrimaryMarkets}
237
+ keyExtractor={(item) => item.market_id.toString()}
238
+ />
239
+ </View>
240
+ </View>
241
+ <View style={{ backgroundColor:Colors.shades.shade100, padding:10, flexDirection:'row', alignItems:'center', borderBottomLeftRadius:8, borderBottomRightRadius:8 }}>
242
+ <TouchableOpacity style={{ flex:1, flexDirection:'row' }} onPress={() => {
243
+ if(!primary_markets[0]){ return }
244
+ onView({ event_id: event.event_id, event_type:'team', market_id: primary_markets[0].market_id });
245
+ }}>
246
+ <View style={{ backgroundColor:Colors.shades.white, height:30, width:30, borderRadius:100, justifyContent:'center', alignItems:'center', ...view_styles.float }}>
247
+ <Icons.LiquidityIcon color={Colors.brand.midnight} size={30}/>
248
+ </View>
249
+ <View style={{ marginLeft:10 }}>
250
+ <Text theme='body_2'>Liquidity</Text>
251
+ <Text size={12} color={Colors.brand.electric} weight='semibold'>${liquidity.toFixed()} {open_order_count} Orders</Text>
252
+ </View>
253
+ </TouchableOpacity>
254
+ {competition ?
255
+ <TouchableOpacity
256
+ style={{ marginRight:15, flexDirection:'row', alignItems:'center', padding:10, borderRadius:22, backgroundColor:Colors.highlights.highlight500, ...view_styles.float }}
257
+ onPress={() => onCompetitionSelect(competition.competition_id)}>
258
+ <Icons.PickEmIcon size={18} color={Colors.shades.white} />
259
+ <Text style={{ marginLeft:5 }} size={14} color={Colors.shades.white} weight='semibold'>Pick 6 Available</Text>
260
+ </TouchableOpacity>
261
+ :<></>}
262
+ <TouchableOpacity style={{ height:35, width:35, justifyContent:'center', borderRadius:100, alignItems:'center', backgroundColor:Colors.shades.white, ...view_styles.float }} onPress={() => expandedEvent()}>
263
+ <Icons.ChevronIcon direction={expanded ? 'up' : 'down'} size={8} color={Colors.brand.midnight} />
264
+ </TouchableOpacity>
265
+ </View>
266
+ {expanded ?
267
+ <View>
268
+ <View style={{ flexDirection:'row', alignItems:'center' }}>
269
+ <View style={{flex:1}}>
270
+ <LinearDiagnal label_size={12} label={'Hot Markets'} left_color={Colors.utility.warning} right_color={Colors.utility.error}/>
271
+ </View>
272
+ {loading ?
273
+ <ActivityIndicator style={{ paddingRight:20 }} size='small' color={Colors.brand.midnight} />
274
+ :
275
+ <Button
276
+ title='SEE ALL'
277
+ padding={15}
278
+ title_color={Colors.brand.electric}
279
+ onPress={() => onViewAdditionalMarkets(event.event_id, 'team')}
280
+ />
281
+ }
282
+ </View>
283
+ <FlatList
284
+ data={non_primary_markets}
285
+ renderItem={renderNonPrimaryMarkets}
286
+ keyExtractor={(item) => `${item.market_id}:${item.side_type}:${item.side_id}`}
287
+ horizontal
288
+ />
289
+ </View>
290
+ :<></>}
291
+ </View>
292
+ )
293
+ }
294
+
295
+ export default TeamEventMarket
@@ -0,0 +1,5 @@
1
+ import TeamEventMarket from './components/TeamEventMarket';
2
+
3
+ export default {
4
+ TeamEventMarket
5
+ }
package/src/index.tsx CHANGED
@@ -25,6 +25,7 @@ import EngageModule from "./Engage";
25
25
  import SeasonManager from "./CompetitionSeasonManager";
26
26
  import SeasonModule from "./CompetitionSeason";
27
27
  import CreateSeasonForm from "./CompetitionSeasonManager/components/CreateSeasonForm";
28
+ import MarketComponents from './MarketComponents';
28
29
 
29
30
  export {
30
31
  Authenticator,
@@ -42,6 +43,7 @@ export {
42
43
  Colors,
43
44
  MyWallet,
44
45
  Checkout,
46
+ MarketComponents,
45
47
  PollCampaign,
46
48
  PollCampaignApi,
47
49
  PollApi,
package/src/types.d.ts CHANGED
@@ -61,6 +61,16 @@ export interface LocationProps {
61
61
  last_update_datetime: any
62
62
  }
63
63
 
64
+ export interface PlayerLocationProps {
65
+ player_location_id:string,
66
+ player_id:string,
67
+ coordinates: CoordinatesProps,
68
+ anonymous_id?:string,
69
+ player_address?:PlayerAddressProps,
70
+ region?:string,
71
+ create_datetime:any
72
+ }
73
+
64
74
  //EXTERNAL PRICES
65
75
  export interface ExternalPriceProps {
66
76
  external_price_id:string,
@@ -997,9 +1007,11 @@ export interface TradeProps {
997
1007
  event_type: 'tournament'|'team'|'match'
998
1008
  var_1: number;
999
1009
  side:string;
1010
+ limit_override?:boolean,
1011
+ draft_liquidity?:number,
1000
1012
  side_id:string;
1001
1013
  reversed_side_id:string;
1002
- side_type:'athlete'|'team'|'side';
1014
+ side_type:'athlete'|'team'|'side'|'exotic';
1003
1015
  odds: number;
1004
1016
  probability:number;
1005
1017
  market_type: 'FOR_MONEY' | 'FREE';
@@ -1637,4 +1649,78 @@ export interface BestAvailableOrderProps {
1637
1649
  promoted?:boolean,
1638
1650
  odds: number,
1639
1651
  probability: number
1640
- }
1652
+ }
1653
+
1654
+ export interface EventOrderStatProps {
1655
+ event_id: string;
1656
+ event_type:string;
1657
+ market_id: string;
1658
+ side_id:string;
1659
+ side_type:string;
1660
+ open_order_count: number|string;
1661
+ open_order_amount: number;
1662
+ market_type: string;
1663
+ }
1664
+
1665
+
1666
+ export interface OrderProps {
1667
+ order_id:string; //Primary key of the order
1668
+ player_id:string; //Id of the player creating the order
1669
+ order_type: 'market' | 'limit' | 'h2h'; //Order type determines how it will be matched in the marketplace
1670
+ collar_pct: number; //Pct worse price willing to accept on a market order
1671
+ side: string; //Side of the order
1672
+ side_id: string; //Id of the side - this could be either a team or athlete or over / under
1673
+ side_type: 'athlete' | 'team' | 'side';
1674
+ reversed?:boolean,
1675
+ draft_liquidity?:number,
1676
+ be_type: 'market' | 'prop' | 'ind'; //The old be-type of order so we can compare to historical orders
1677
+ buy_sell_ind: 'buy' | 'sell'; //Indicates whether this order is selling a position or attempting to buy one
1678
+ open_amt: number; //Amount still available to be matched
1679
+ called_amt: number; //Amount already fulfilled
1680
+ potential_winnings: number //Potential winnings calculated by open_amt and odds / prob
1681
+ market_id: string; //Id of the market that this order is (i.e., Spread, Total, stat, etc)
1682
+ market?: MarketProps; //Market object of the ID
1683
+ title: string; //Title of the order
1684
+ event_id: string; //Id of the event associated with the order
1685
+ event_type: 'team' | 'tournament'|'match'; //Is the event a team event or individual (i.e., golf tournament / UFC)
1686
+ position_ids: string[]; //Array of positions that were created due to trades
1687
+ expire_datetime: any; //Expiration time of the order
1688
+ create_datetime?: any; //Create time of the order
1689
+ last_update_datetime?: any; //Last update time of te order
1690
+ odds: number; //American odds of the order
1691
+ probability: number; //Implied probability of the order
1692
+ var_1: number; //
1693
+ league_id?:string;
1694
+ promo_balance?:boolean,
1695
+ promoted?:boolean //Should show up on the lead even screen
1696
+ rejections:number;
1697
+ location?: any; //JSON of coordinate (lat and long)
1698
+ region?: string;
1699
+ market_type: 'FREE' | 'FOR_MONEY';
1700
+ available_for_parlays:boolean; //Indicates of the order can be accepted by a person trying a parlay
1701
+ status: 'cancelled' | 'approved' | 'closed'; //Current status of the order
1702
+ cancel_type?: 'expired' | 'manual' | 'closed'; //If the order is cancelled, then how was it cancelled?
1703
+ resolution_status: 'inprogress' | 'closed';
1704
+ live?:boolean; //If the order is created after the start time of the event, then an indicator of live is added
1705
+ h2h?:boolean;
1706
+ h2h_id?:string; //If the order is h2h, then this is the id of the other user
1707
+ h2h_user?:any //Player type
1708
+ parlay_id?:string //id of the parlay
1709
+ event?:any //Event details,
1710
+ selling_position_id?:string,
1711
+ result_viewed?:boolean,
1712
+ commission_pct:number,
1713
+ positions:PositionProps[]
1714
+ pfof?:boolean
1715
+ influencer_id?:string,
1716
+ influencer?:PublicPlayerProps,
1717
+ influence_type?: 'copy' | 'fade',
1718
+ tip_type?: 'win' | 'all',
1719
+ tip_pct?:number,
1720
+ tip_processed?:boolean,
1721
+ legacy_id?: string,
1722
+ grade?: number,
1723
+ last_grade_datetime?:any,
1724
+ no_bet?:boolean,
1725
+ no_bet_reason?:string
1726
+ }
@@ -1,28 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.MarketHelpers = void 0;
7
- const MarketHelpers = exports.MarketHelpers = {
8
- getVar1Label: (market, var_1) => {
9
- if (market.type != 'Spread') {
10
- return `${var_1}`;
11
- }
12
- if (var_1 < 0) {
13
- return `${var_1}`;
14
- }
15
- return `+${var_1}`;
16
- },
17
- getOddsLabel: (odds, decimals) => {
18
- let new_odds = odds.toFixed();
19
- if (decimals) {
20
- new_odds = odds.toFixed(decimals);
21
- }
22
- if (odds < 0) {
23
- return `${new_odds}`;
24
- }
25
- return `+${new_odds}`;
26
- }
27
- };
28
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["MarketHelpers","exports","getVar1Label","market","var_1","type","getOddsLabel","odds","decimals","new_odds","toFixed"],"sourceRoot":"../../../../src","sources":["Markets/api/index.ts"],"mappings":";;;;;;AAKA,MAAMA,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG;EAClBE,YAAY,EAAEA,CAACC,MAAkB,EAAEC,KAAY,KAAK;IAChD,IAAGD,MAAM,CAACE,IAAI,IAAI,QAAQ,EAAC;MAAE,OAAQ,GAAED,KAAM,EAAC;IAAC;IAC/C,IAAGA,KAAK,GAAG,CAAC,EAAC;MAAE,OAAQ,GAAEA,KAAM,EAAC;IAAC;IACjC,OAAQ,IAAGA,KAAM,EAAC;EACtB,CAAC;EACDE,YAAY,EAAEA,CAACC,IAAW,EAAEC,QAAgB,KAAK;IAC7C,IAAIC,QAAQ,GAAGF,IAAI,CAACG,OAAO,CAAC,CAAC;IAC7B,IAAGF,QAAQ,EAAC;MAAEC,QAAQ,GAAGF,IAAI,CAACG,OAAO,CAACF,QAAQ,CAAC;IAAC;IAChD,IAAGD,IAAI,GAAG,CAAC,EAAC;MAAE,OAAQ,GAAEE,QAAS,EAAC;IAAC;IACnC,OAAQ,IAAGA,QAAS,EAAC;EACzB;AACJ,CAAC","ignoreList":[]}
@@ -1,25 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _react = _interopRequireDefault(require("react"));
8
- var _reactNative = require("react-native");
9
- var _Text = _interopRequireDefault(require("../../Components/Text"));
10
- var _api = require("../api");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
- const MarketCard = ({
13
- market,
14
- trade
15
- }) => {
16
- return /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
17
- style: {
18
- padding: 5
19
- }
20
- }, trade && market.var_1_required ? /*#__PURE__*/_react.default.createElement(_Text.default, {
21
- theme: "body"
22
- }, _api.MarketHelpers.getVar1Label(market, trade.var_1)) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null));
23
- };
24
- var _default = exports.default = MarketCard;
25
- //# sourceMappingURL=MarketButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_Text","_api","obj","__esModule","default","MarketCard","market","trade","createElement","TouchableOpacity","style","padding","var_1_required","theme","MarketHelpers","getVar1Label","var_1","Fragment","_default","exports"],"sourceRoot":"../../../../src","sources":["Markets/components/MarketButton.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,IAAA,GAAAH,OAAA;AAAuC,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAQvC,MAAMG,UAAU,GAAGA,CAAC;EAAEC,MAAM;EAAEC;AAAwB,CAAC,KAAK;EAExD,oBACIX,MAAA,CAAAQ,OAAA,CAAAI,aAAA,CAACT,YAAA,CAAAU,gBAAgB;IAACC,KAAK,EAAE;MAAEC,OAAO,EAAC;IAAE;EAAE,GAClCJ,KAAK,IAAID,MAAM,CAACM,cAAc,gBAC/BhB,MAAA,CAAAQ,OAAA,CAAAI,aAAA,CAACR,KAAA,CAAAI,OAAI;IAACS,KAAK,EAAC;EAAM,GAAEC,kBAAa,CAACC,YAAY,CAACT,MAAM,EAAEC,KAAK,CAACS,KAAK,CAAQ,CAAC,gBAC1EpB,MAAA,CAAAQ,OAAA,CAAAI,aAAA,CAAAZ,MAAA,CAAAQ,OAAA,CAAAa,QAAA,MAAI,CACS,CAAC;AAE3B,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAf,OAAA,GAEcC,UAAU","ignoreList":[]}
@@ -1,23 +0,0 @@
1
- export { MarketHelpers };
2
- const MarketHelpers = {
3
- getVar1Label: (market, var_1) => {
4
- if (market.type != 'Spread') {
5
- return `${var_1}`;
6
- }
7
- if (var_1 < 0) {
8
- return `${var_1}`;
9
- }
10
- return `+${var_1}`;
11
- },
12
- getOddsLabel: (odds, decimals) => {
13
- let new_odds = odds.toFixed();
14
- if (decimals) {
15
- new_odds = odds.toFixed(decimals);
16
- }
17
- if (odds < 0) {
18
- return `${new_odds}`;
19
- }
20
- return `+${new_odds}`;
21
- }
22
- };
23
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["MarketHelpers","getVar1Label","market","var_1","type","getOddsLabel","odds","decimals","new_odds","toFixed"],"sourceRoot":"../../../../src","sources":["Markets/api/index.ts"],"mappings":"AAGA,SAASA,aAAa;AAEtB,MAAMA,aAAa,GAAG;EAClBC,YAAY,EAAEA,CAACC,MAAkB,EAAEC,KAAY,KAAK;IAChD,IAAGD,MAAM,CAACE,IAAI,IAAI,QAAQ,EAAC;MAAE,OAAQ,GAAED,KAAM,EAAC;IAAC;IAC/C,IAAGA,KAAK,GAAG,CAAC,EAAC;MAAE,OAAQ,GAAEA,KAAM,EAAC;IAAC;IACjC,OAAQ,IAAGA,KAAM,EAAC;EACtB,CAAC;EACDE,YAAY,EAAEA,CAACC,IAAW,EAAEC,QAAgB,KAAK;IAC7C,IAAIC,QAAQ,GAAGF,IAAI,CAACG,OAAO,CAAC,CAAC;IAC7B,IAAGF,QAAQ,EAAC;MAAEC,QAAQ,GAAGF,IAAI,CAACG,OAAO,CAACF,QAAQ,CAAC;IAAC;IAChD,IAAGD,IAAI,GAAG,CAAC,EAAC;MAAE,OAAQ,GAAEE,QAAS,EAAC;IAAC;IACnC,OAAQ,IAAGA,QAAS,EAAC;EACzB;AACJ,CAAC","ignoreList":[]}
@@ -1,18 +0,0 @@
1
- import React from 'react';
2
- import { TouchableOpacity } from "react-native";
3
- import Text from '../../Components/Text';
4
- import { MarketHelpers } from '../api';
5
- const MarketCard = ({
6
- market,
7
- trade
8
- }) => {
9
- return /*#__PURE__*/React.createElement(TouchableOpacity, {
10
- style: {
11
- padding: 5
12
- }
13
- }, trade && market.var_1_required ? /*#__PURE__*/React.createElement(Text, {
14
- theme: "body"
15
- }, MarketHelpers.getVar1Label(market, trade.var_1)) : /*#__PURE__*/React.createElement(React.Fragment, null));
16
- };
17
- export default MarketCard;
18
- //# sourceMappingURL=MarketButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","TouchableOpacity","Text","MarketHelpers","MarketCard","market","trade","createElement","style","padding","var_1_required","theme","getVar1Label","var_1","Fragment"],"sourceRoot":"../../../../src","sources":["Markets/components/MarketButton.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,QAAQ,cAAc;AAC/C,OAAOC,IAAI,MAAM,uBAAuB;AAExC,SAASC,aAAa,QAAQ,QAAQ;AAQtC,MAAMC,UAAU,GAAGA,CAAC;EAAEC,MAAM;EAAEC;AAAwB,CAAC,KAAK;EAExD,oBACIN,KAAA,CAAAO,aAAA,CAACN,gBAAgB;IAACO,KAAK,EAAE;MAAEC,OAAO,EAAC;IAAE;EAAE,GAClCH,KAAK,IAAID,MAAM,CAACK,cAAc,gBAC/BV,KAAA,CAAAO,aAAA,CAACL,IAAI;IAACS,KAAK,EAAC;EAAM,GAAER,aAAa,CAACS,YAAY,CAACP,MAAM,EAAEC,KAAK,CAACO,KAAK,CAAQ,CAAC,gBAC1Eb,KAAA,CAAAO,aAAA,CAAAP,KAAA,CAAAc,QAAA,MAAI,CACS,CAAC;AAE3B,CAAC;AAED,eAAeV,UAAU","ignoreList":[]}
@@ -1,7 +0,0 @@
1
- import type { MarketProps } from "../../types";
2
- export { MarketHelpers };
3
- declare const MarketHelpers: {
4
- getVar1Label: (market: MarketProps, var_1: number) => string;
5
- getOddsLabel: (odds: number, decimals?: number) => string;
6
- };
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/Markets/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,aAAa,EAAE,CAAA;AAExB,QAAA,MAAM,aAAa;2BACO,WAAW,SAAQ,MAAM;yBAK3B,MAAM,aAAY,MAAM;CAM/C,CAAA"}
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- import type { BestAvailableOrderProps, MarketProps, MarketSideOptionProps, TradeProps } from '../../types';
3
- type MarketButtonProps = {
4
- market: MarketProps;
5
- side_option: MarketSideOptionProps;
6
- trade?: TradeProps;
7
- order?: BestAvailableOrderProps;
8
- };
9
- declare const MarketCard: ({ market, trade }: MarketButtonProps) => React.JSX.Element;
10
- export default MarketCard;
11
- //# sourceMappingURL=MarketButton.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketButton.d.ts","sourceRoot":"","sources":["../../../../../src/Markets/components/MarketButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3G,KAAK,iBAAiB,GAAG;IACrB,MAAM,EAAC,WAAW,CAAC;IACnB,WAAW,EAAC,qBAAqB,CAAC;IAClC,KAAK,CAAC,EAAC,UAAU,CAAC;IAClB,KAAK,CAAC,EAAC,uBAAuB,CAAA;CACjC,CAAA;AACD,QAAA,MAAM,UAAU,sBAAsB,iBAAiB,sBAStD,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -1,18 +0,0 @@
1
- import type { MarketProps } from "../../types"
2
-
3
-
4
- export { MarketHelpers }
5
-
6
- const MarketHelpers = {
7
- getVar1Label: (market:MarketProps, var_1:number) => {
8
- if(market.type != 'Spread'){ return `${var_1}` }
9
- if(var_1 < 0){ return `${var_1}` }
10
- return `+${var_1}`
11
- },
12
- getOddsLabel: (odds:number, decimals?:number) => {
13
- let new_odds = odds.toFixed()
14
- if(decimals){ new_odds = odds.toFixed(decimals) }
15
- if(odds < 0){ return `${new_odds}` }
16
- return `+${new_odds}`
17
- }
18
- }
@@ -1,24 +0,0 @@
1
- import React from 'react';
2
- import { TouchableOpacity } from "react-native"
3
- import Text from '../../Components/Text';
4
- import type { BestAvailableOrderProps, MarketProps, MarketSideOptionProps, TradeProps } from '../../types';
5
- import { MarketHelpers } from '../api';
6
-
7
- type MarketButtonProps = {
8
- market:MarketProps,
9
- side_option:MarketSideOptionProps,
10
- trade?:TradeProps,
11
- order?:BestAvailableOrderProps
12
- }
13
- const MarketCard = ({ market, trade }:MarketButtonProps) => {
14
-
15
- return (
16
- <TouchableOpacity style={{ padding:5 }}>
17
- {trade && market.var_1_required ?
18
- <Text theme='body'>{MarketHelpers.getVar1Label(market, trade.var_1)}</Text>
19
- :<></>}
20
- </TouchableOpacity>
21
- )
22
- }
23
-
24
- export default MarketCard