be-components 3.0.3 → 3.0.5

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 (83) hide show
  1. package/lib/commonjs/Components/Button.js +6 -4
  2. package/lib/commonjs/Components/Button.js.map +1 -1
  3. package/lib/commonjs/Components/ConfirmationModal.js +83 -0
  4. package/lib/commonjs/Components/ConfirmationModal.js.map +1 -0
  5. package/lib/commonjs/MarketComponents/api/index.js +107 -20
  6. package/lib/commonjs/MarketComponents/api/index.js.map +1 -1
  7. package/lib/commonjs/MarketComponents/components/BestAvailableOrderCard.js +152 -0
  8. package/lib/commonjs/MarketComponents/components/BestAvailableOrderCard.js.map +1 -0
  9. package/lib/commonjs/MarketComponents/components/ContestOrderStatsCard.js +241 -0
  10. package/lib/commonjs/MarketComponents/components/ContestOrderStatsCard.js.map +1 -0
  11. package/lib/commonjs/MarketComponents/components/MyOrderList/api/index.js +503 -0
  12. package/lib/commonjs/MarketComponents/components/MyOrderList/api/index.js.map +1 -0
  13. package/lib/commonjs/MarketComponents/components/MyOrderList/index.js +276 -0
  14. package/lib/commonjs/MarketComponents/components/MyOrderList/index.js.map +1 -0
  15. package/lib/commonjs/MarketComponents/components/OrderBook.js +200 -0
  16. package/lib/commonjs/MarketComponents/components/OrderBook.js.map +1 -0
  17. package/lib/commonjs/MarketComponents/components/OrderBookChart.js +276 -0
  18. package/lib/commonjs/MarketComponents/components/OrderBookChart.js.map +1 -0
  19. package/lib/commonjs/MarketComponents/components/OrderGradeBar.js +2 -1
  20. package/lib/commonjs/MarketComponents/components/OrderGradeBar.js.map +1 -1
  21. package/lib/commonjs/MarketComponents/index.js +11 -1
  22. package/lib/commonjs/MarketComponents/index.js.map +1 -1
  23. package/lib/commonjs/Socket/index.js +0 -1
  24. package/lib/commonjs/Socket/index.js.map +1 -1
  25. package/lib/module/Components/Button.js +6 -4
  26. package/lib/module/Components/Button.js.map +1 -1
  27. package/lib/module/Components/ConfirmationModal.js +76 -0
  28. package/lib/module/Components/ConfirmationModal.js.map +1 -0
  29. package/lib/module/MarketComponents/api/index.js +107 -20
  30. package/lib/module/MarketComponents/api/index.js.map +1 -1
  31. package/lib/module/MarketComponents/components/BestAvailableOrderCard.js +145 -0
  32. package/lib/module/MarketComponents/components/BestAvailableOrderCard.js.map +1 -0
  33. package/lib/module/MarketComponents/components/ContestOrderStatsCard.js +232 -0
  34. package/lib/module/MarketComponents/components/ContestOrderStatsCard.js.map +1 -0
  35. package/lib/module/MarketComponents/components/MyOrderList/api/index.js +496 -0
  36. package/lib/module/MarketComponents/components/MyOrderList/api/index.js.map +1 -0
  37. package/lib/module/MarketComponents/components/MyOrderList/index.js +268 -0
  38. package/lib/module/MarketComponents/components/MyOrderList/index.js.map +1 -0
  39. package/lib/module/MarketComponents/components/OrderBook.js +193 -0
  40. package/lib/module/MarketComponents/components/OrderBook.js.map +1 -0
  41. package/lib/module/MarketComponents/components/OrderBookChart.js +267 -0
  42. package/lib/module/MarketComponents/components/OrderBookChart.js.map +1 -0
  43. package/lib/module/MarketComponents/components/OrderGradeBar.js +2 -1
  44. package/lib/module/MarketComponents/components/OrderGradeBar.js.map +1 -1
  45. package/lib/module/MarketComponents/index.js +11 -1
  46. package/lib/module/MarketComponents/index.js.map +1 -1
  47. package/lib/module/Socket/index.js +0 -1
  48. package/lib/module/Socket/index.js.map +1 -1
  49. package/lib/typescript/src/Components/Button.d.ts.map +1 -1
  50. package/lib/typescript/src/Components/ConfirmationModal.d.ts +13 -0
  51. package/lib/typescript/src/Components/ConfirmationModal.d.ts.map +1 -0
  52. package/lib/typescript/src/MarketComponents/api/index.d.ts +9 -2
  53. package/lib/typescript/src/MarketComponents/api/index.d.ts.map +1 -1
  54. package/lib/typescript/src/MarketComponents/components/BestAvailableOrderCard.d.ts +13 -0
  55. package/lib/typescript/src/MarketComponents/components/BestAvailableOrderCard.d.ts.map +1 -0
  56. package/lib/typescript/src/MarketComponents/components/ContestOrderStatsCard.d.ts +15 -0
  57. package/lib/typescript/src/MarketComponents/components/ContestOrderStatsCard.d.ts.map +1 -0
  58. package/lib/typescript/src/MarketComponents/components/MyOrderList/api/index.d.ts +18 -0
  59. package/lib/typescript/src/MarketComponents/components/MyOrderList/api/index.d.ts.map +1 -0
  60. package/lib/typescript/src/MarketComponents/components/MyOrderList/index.d.ts +10 -0
  61. package/lib/typescript/src/MarketComponents/components/MyOrderList/index.d.ts.map +1 -0
  62. package/lib/typescript/src/MarketComponents/components/OrderBook.d.ts +13 -0
  63. package/lib/typescript/src/MarketComponents/components/OrderBook.d.ts.map +1 -0
  64. package/lib/typescript/src/MarketComponents/components/OrderBookChart.d.ts +16 -0
  65. package/lib/typescript/src/MarketComponents/components/OrderBookChart.d.ts.map +1 -0
  66. package/lib/typescript/src/MarketComponents/components/OrderGradeBar.d.ts.map +1 -1
  67. package/lib/typescript/src/MarketComponents/index.d.ts +57 -0
  68. package/lib/typescript/src/MarketComponents/index.d.ts.map +1 -1
  69. package/lib/typescript/src/Socket/index.d.ts.map +1 -1
  70. package/package.json +1 -1
  71. package/src/Components/Button.tsx +2 -3
  72. package/src/Components/ConfirmationModal.tsx +57 -0
  73. package/src/MarketComponents/api/index.ts +80 -15
  74. package/src/MarketComponents/components/BestAvailableOrderCard.tsx +84 -0
  75. package/src/MarketComponents/components/ContestOrderStatsCard.tsx +154 -0
  76. package/src/MarketComponents/components/MyOrderList/api/index.ts +406 -0
  77. package/src/MarketComponents/components/MyOrderList/index.tsx +192 -0
  78. package/src/MarketComponents/components/OrderBook.tsx +99 -0
  79. package/src/MarketComponents/components/OrderBookChart.tsx +139 -0
  80. package/src/MarketComponents/components/OrderGradeBar.tsx +2 -1
  81. package/src/MarketComponents/index.tsx +11 -1
  82. package/src/Socket/index.tsx +0 -1
  83. package/src/types.d.ts +56 -0
@@ -34,6 +34,30 @@ declare const _default: {
34
34
  onActivate?: (event_id: string, event_type: string) => void;
35
35
  activate_loading?: boolean;
36
36
  }) => import("react").JSX.Element>;
37
+ TeamTournamentMarket: ({ tournament, show_event, hide_liquidity, hide_stat_banner, width, team, market, event_order_stats, default_price_view, latest_trades, show_grades, best_available_orders, onOrder, onView, onTradeLongPress }: {
38
+ tournament: import("../types").TournamentProps;
39
+ event_type: "team" | "tournament" | "match";
40
+ team: import("../types").TeamProps;
41
+ hide_stat_banner?: boolean;
42
+ width?: number;
43
+ market: import("../types").MarketProps;
44
+ show_event?: boolean;
45
+ hide_liquidity?: boolean;
46
+ latest_trades: import("../types").TradeProps[];
47
+ best_available_orders: import("../types").BestAvailableOrderProps[];
48
+ event_order_stats: import("../types").EventOrderStatProps[];
49
+ default_price_view: "last_trade" | "best_available";
50
+ onOrder: (order: import("../types").OrderProps) => void;
51
+ show_grades?: boolean;
52
+ onView: (data: {
53
+ event_id: string;
54
+ event_type: string;
55
+ market_id: string;
56
+ side_type: "team";
57
+ side_id: string;
58
+ }) => void;
59
+ onTradeLongPress: (trade: import("../types").TradeProps) => void;
60
+ }) => import("react").JSX.Element;
37
61
  AthleteMarket: import("react").MemoExoticComponent<({ event, show_event, league, hide_liquidity, hide_stat_banner, width, athlete, market, event_order_stats, default_price_view, latest_trades, show_grades, best_available_orders, onOrder, onView, onTradeLongPress }: {
38
62
  event: import("../types").EventProps;
39
63
  event_type: "team" | "tournament" | "match";
@@ -59,6 +83,14 @@ declare const _default: {
59
83
  }) => void;
60
84
  onTradeLongPress: (trade: import("../types").TradeProps) => void;
61
85
  }) => import("react").JSX.Element>;
86
+ BestAvailableOrderCard: ({ order, player_id, show_grade, onBuyNow, onShareOrder, onCancelOrder }: {
87
+ player_id?: string;
88
+ order: import("../types").BestAvailableOrderProps;
89
+ show_grade?: boolean;
90
+ onShareOrder?: (order: import("../types").BestAvailableOrderProps) => void;
91
+ onBuyNow?: (order: import("../types").OrderProps) => void;
92
+ onCancelOrder?: (order_id: string) => void;
93
+ }) => import("react").JSX.Element;
62
94
  EventMarket: ({ width, event, hide_liquidity, market, latest_trades, best_available_orders, hide_market_banner, event_order_stats, show_grades, default_price_view, onOrder, onView, onTradeLongPress }: {
63
95
  event: import("../types").EventProps;
64
96
  width?: number;
@@ -78,6 +110,25 @@ declare const _default: {
78
110
  }) => void;
79
111
  onTradeLongPress: (trade: import("../types").TradeProps) => void;
80
112
  }) => import("react").JSX.Element;
113
+ OrderBookCard: ({ player_id, orders, market, show_orders, show_grades, onBuy }: {
114
+ player_id?: string;
115
+ orders: import("../types").OrderProps[];
116
+ market: import("../types").MarketProps;
117
+ show_grades?: boolean;
118
+ show_orders?: boolean;
119
+ onBuy: (order: import("../types").OrderProps) => void;
120
+ }) => import("react").JSX.Element;
121
+ OrderBookChart: ({ order_book, market, active_var_1, onSelectVar1, away_label, home_label, side_id }: {
122
+ order_book: import("../types").OrderBookProps;
123
+ onSelectVar1: (var_1: number) => void;
124
+ active_var_1: number;
125
+ market: import("../types").MarketProps;
126
+ market_type: "FOR_MONEY" | "FREE";
127
+ side_type?: string;
128
+ side_id?: string;
129
+ away_label?: string;
130
+ home_label?: string;
131
+ }) => import("react").JSX.Element;
81
132
  AthleteTournamentMarket: ({ tournament, show_event, hide_liquidity, hide_stat_banner, width, athlete, market, event_order_stats, default_price_view, latest_trades, show_grades, best_available_orders, onOrder, onView, onTradeLongPress }: {
82
133
  tournament: import("../types").TournamentProps;
83
134
  event_type: "team" | "tournament" | "match";
@@ -207,6 +258,12 @@ declare const _default: {
207
258
  onTradeLongPress?: (trade: import("../types").TradeProps) => void;
208
259
  onViewAdditionalMarkets?: (event_id: string, event_type: string) => void;
209
260
  }) => import("react").JSX.Element;
261
+ MyOrderList: ({ player_id, market_type, access_token, distinct_id }: {
262
+ player_id: string;
263
+ access_token?: string;
264
+ distinct_id?: string;
265
+ market_type: "FOR_MONEY" | "FREE";
266
+ }) => import("react").JSX.Element;
210
267
  };
211
268
  export default _default;
212
269
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/MarketComponents/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;qBAkB6lC,CAAC;mBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAA30B,CAAC;qBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAqtB,CAAC;mBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAjmB,CAAC;qBAAkB,CAAC;;;;;;;AATld,wBASC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/MarketComponents/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;qBA4B6rB,CAAC;mBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAN3sB,CAAJ;qBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAM0lB,CAAC;mBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAjmB,CAAC;qBAAkB,CAAC;;;;;;;;;;;;;AAdlD,wBAcC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Socket/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAIlD,KAAK,kBAAkB,GAAG;IACtB,YAAY,CAAC,EAAC,MAAM,CAAC;IACrB,WAAW,CAAC,EAAC,MAAM,CAAC;IACpB,SAAS,EAAC,MAAM,IAAI,CAAC;IACrB,YAAY,EAAC,MAAM,IAAI,CAAC;IACxB,aAAa,EAAC,CAAC,KAAK,EAAC,GAAG,KAAK,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAC9B,CAAA;AAED,QAAA,MAAM,aAAa,6FAA6F,kBAAkB,sBAkFjI,CAAA;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Socket/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAIlD,KAAK,kBAAkB,GAAG;IACtB,YAAY,CAAC,EAAC,MAAM,CAAC;IACrB,WAAW,CAAC,EAAC,MAAM,CAAC;IACpB,SAAS,EAAC,MAAM,IAAI,CAAC;IACrB,YAAY,EAAC,MAAM,IAAI,CAAC;IACxB,aAAa,EAAC,CAAC,KAAK,EAAC,GAAG,KAAK,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAC9B,CAAA;AAED,QAAA,MAAM,aAAa,6FAA6F,kBAAkB,sBAiFjI,CAAA;AAED,eAAe,aAAa,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "be-components",
3
- "version": "3.0.3",
3
+ "version": "3.0.5",
4
4
  "description": "Components for BettorEdge Apps",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -38,7 +38,8 @@ const Button = ({ title, style, title_weight, disabled, loading, title_size, pad
38
38
 
39
39
  <TouchableOpacity
40
40
  disabled={disabled}
41
- style={{ ...getBorderRadiusOverride(), flexDirection:'row', alignItems:'center', padding:padding??8, backgroundColor:backgroundColor??Colors.shades.white, borderWidth:borderWidth??0, borderColor:borderColor??'transparent', ...input_style }} onPress={(ev) => onPress(ev)}>
41
+ style={{ ...getBorderRadiusOverride(), flexDirection:'row', alignItems:'center', justifyContent:'center', flex:1, padding:padding??8, backgroundColor:backgroundColor??Colors.brand.electric, borderWidth:borderWidth??0, borderColor:borderColor, ...input_style }}
42
+ onPress={(ev) => onPress(ev)}>
42
43
  {avatar_url ?
43
44
  <Image
44
45
  source={{ uri: avatar_url }}
@@ -46,7 +47,6 @@ const Button = ({ title, style, title_weight, disabled, loading, title_size, pad
46
47
  resizeMode='cover'
47
48
  />
48
49
  :<></>}
49
- {title ?
50
50
  <View style={{ marginLeft:5, marginRight:5, flexGrow:1 }}>
51
51
  <Text size={title_size??14} weight={title_weight ?? 'bold'} textAlign="center" color={title_color??Colors.brand.midnight}>{title}</Text>
52
52
  {loading ?
@@ -55,7 +55,6 @@ const Button = ({ title, style, title_weight, disabled, loading, title_size, pad
55
55
  </View>
56
56
  :<></>}
57
57
  </View>
58
- :<></>}
59
58
  </TouchableOpacity>
60
59
 
61
60
  )
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { Modal, View } from "react-native"
3
+ import { view_styles } from '../constants/styles';
4
+ import Text from './Text';
5
+ import Button from './Button';
6
+ import Colors from '../constants/colors';
7
+
8
+ type ConfirmationModalProps = {
9
+ visible:boolean,
10
+ title?:string,
11
+ description?:string,
12
+ confirm_title?:string,
13
+ cancel_title?:string,
14
+ onCancel: () => void,
15
+ onConfirm: () => void
16
+ }
17
+ const ConfirmationModal = ({ visible, title, description, confirm_title, cancel_title, onCancel, onConfirm }:ConfirmationModalProps) => {
18
+
19
+ return (
20
+ <Modal
21
+ visible={visible}
22
+ animationType='slide'
23
+ transparent
24
+ style={{ flex:1 }}>
25
+ <View style={{ flex:1, justifyContent:'flex-end', backgroundColor:Colors.shades.black_faded }}>
26
+ <View style={{ ...view_styles.section }}>
27
+ <View style={{ ...view_styles.section_header, padding:20 }}>
28
+ <Text theme='header'>{title ?? 'Are you sure?'}</Text>
29
+ </View>
30
+ <View style={{ ...view_styles.section_body, minHeight:100 }}>
31
+ <Text size={14} color={Colors.brand.midnight} textAlign='center' weight='semibold'>{description}</Text>
32
+ </View>
33
+ <View style={{ ...view_styles.section_footer }}>
34
+ <Button
35
+ title={cancel_title ?? 'CANCEL'}
36
+ style={{ flex:1 }}
37
+ padding={15}
38
+ title_color={Colors.shades.white}
39
+ backgroundColor={Colors.utility.error}
40
+ onPress={() => onCancel()}
41
+ />
42
+ <Button
43
+ title={confirm_title ?? 'CONFIRM'}
44
+ style={{ flex:2, marginLeft:5 }}
45
+ padding={15}
46
+ title_color={Colors.shades.white}
47
+ backgroundColor={Colors.utility.success}
48
+ onPress={() => onConfirm()}
49
+ />
50
+ </View>
51
+ </View>
52
+ </View>
53
+ </Modal>
54
+ )
55
+ }
56
+
57
+ export default ConfirmationModal
@@ -37,6 +37,72 @@ const MarketComponentApi = {
37
37
  return []
38
38
  }
39
39
  },
40
+ getMyAction:async():Promise<OrderProps[]> => {
41
+ try {
42
+ const resp = await axios.get(`${MK_SVC_API}/v1/orders/action/me`);
43
+ return resp.data.orders
44
+ } catch (e) {
45
+ console.log(e);
46
+ return []
47
+ }
48
+ },
49
+ getMyHistory: async(player_id:string, range:number):Promise<OrderProps[]> => {
50
+ try {
51
+ const resp = await axios.get(`${MK_SVC_API}/v1/orders/history/player/${player_id}?range=${range}`);
52
+ return resp.data.orders
53
+ } catch (e) {
54
+ console.log(e)
55
+ return []
56
+ }
57
+
58
+ },
59
+ getEventsByEventIds: async(event_ids:string[]):Promise<EventProps[]> => {
60
+ try {
61
+ if(event_ids.length == 0){ return [] }
62
+ const resp = await axios.post(`${EVENT_SVC_API}/v1/events/bulk/get`, { attribute:'event_id', values: event_ids })
63
+ return resp.data.events
64
+ } catch (e) {
65
+ return []
66
+ }
67
+ },
68
+ getMatchesByMatchIds: async(match_ids:string[]):Promise<MatchProps[]> => {
69
+ try {
70
+ if(match_ids.length == 0){ return [] }
71
+ const resp = await axios.post(`${EVENT_SVC_API}/v1/matches/bulk/get`, { attribute: 'match_id', values: match_ids })
72
+ return resp.data.matches
73
+ } catch (e) {
74
+ return []
75
+ }
76
+
77
+ },
78
+ getAthletesByIds : async(athlete_ids:string[]) => {
79
+ try {
80
+ if(athlete_ids.length == 0){ return [] }
81
+ const resp = await axios.post(`${EVENT_SVC_API}/v1/athletes/bulk/get`, { attribute: 'athlete_id', values: athlete_ids })
82
+ return resp.data.athletes
83
+ } catch (e) {
84
+ return []
85
+ }
86
+ },
87
+ getTournamentsByTournamentIds: async(tournament_ids:string[]):Promise<TournamentProps[]> => {
88
+ try {
89
+ if(tournament_ids.length == 0){ return [] }
90
+ const resp = await axios.post(`${EVENT_SVC_API}/v1/tournaments/bulk/get`, { attribute: 'event_id', values: tournament_ids })
91
+ return resp.data.tournaments
92
+ } catch (e) {
93
+ return []
94
+ }
95
+ },
96
+ getTeamsByIds: async(team_ids:string[]) => {
97
+ try {
98
+ if(team_ids.length == 0){ return [] }
99
+ const resp = await axios.post(`${EVENT_SVC_API}/v1/teams/bulk/get`, { attribute:'team_id', values: team_ids })
100
+ return resp.data.teams
101
+ } catch (e) {
102
+ return []
103
+ }
104
+
105
+ },
40
106
  getLeagues:async():Promise<LeagueProps[]> => {
41
107
  try {
42
108
  const resp = await axios.get(`${EVENT_SVC_API}/v1/leagues`);
@@ -71,16 +137,6 @@ const MarketComponentApi = {
71
137
  return []
72
138
  }
73
139
  },
74
- getTeamsByIds: async(team_ids:string[]):Promise<TeamProps[]> => {
75
- try {
76
- if(team_ids.length == 0){ return [] }
77
- const resp = await axios.post(`${EVENT_SVC_API}/v1/teams/bulk/get`, { attribute:'team_id', values:team_ids });
78
- return resp.data.teams
79
- } catch (e) {
80
- console.log(e);
81
- return []
82
- }
83
- },
84
140
  getMatchesByTournament: async(tournament_id:string):Promise<MatchProps[]> => {
85
141
  try {
86
142
  const resp = await axios.get(`${EVENT_SVC_API}/v1/matches/tournament/${tournament_id}`);
@@ -90,13 +146,12 @@ const MarketComponentApi = {
90
146
  return[]
91
147
  }
92
148
  },
93
- getAthletesByIds: async(athlete_ids:string[]):Promise<AthleteProps[]> => {
149
+ cancelOrders: async(order_ids:string[]):Promise<OrderProps[]> => {
94
150
  try {
95
- if(athlete_ids.length == 0){ return [] }
96
- const resp = await axios.post(`${EVENT_SVC_API}/v1/athletes/bulk/get`, { attribute:'athlete_id', values:athlete_ids })
97
- return resp.data.athletes
151
+ if(order_ids.length == 0){ return [] }
152
+ const resp = await axios.post(`${MK_SVC_API}/v1/orders/bulk/cancel`, { order_ids });
153
+ return resp.data.orders
98
154
  } catch (e) {
99
- console.log(e)
100
155
  return []
101
156
  }
102
157
  },
@@ -140,6 +195,16 @@ const MarketComponentHelpers = {
140
195
  if(odds < 0){ return `${new_odds}` }
141
196
  return `+${new_odds}`
142
197
  },
198
+ calcAmericanOddsFromProbability: (probability:number) => {
199
+ let p = probability*100; //Convert to whole number
200
+ if (p >= 100){ return -99999 }
201
+ if(p === 0){ return 9999 }
202
+ if(p === 50){ return 100 }
203
+ if(p < 50){
204
+ return (100/(p/100))-100
205
+ }
206
+ return (p/(1-(p/100)))*-1
207
+ },
143
208
  getTournamentSideIds: (market:MarketProps, side_option:MarketSideOptionProps, athlete?:AthleteProps, team?:TeamProps) => {
144
209
  const o_side = market.side_options.find(so => so.side != side_option.side);
145
210
  if(!o_side){ return undefined }
@@ -0,0 +1,84 @@
1
+ import React from 'react';
2
+ import { View, TouchableOpacity } from "react-native"
3
+ import type { BestAvailableOrderProps, OrderProps } from "../../types"
4
+ import { Icons, Text } from '../../Components';
5
+ import Colors from '../../constants/colors';
6
+ import OrderGradeBar from './OrderGradeBar';
7
+ import { MarketComponentHelpers } from '../api';
8
+ import { view_styles } from '../../constants/styles';
9
+ import moment from 'moment-mini';
10
+
11
+ type BestAvailableOrderCardProps = {
12
+ player_id?:string,
13
+ order:BestAvailableOrderProps,
14
+ show_grade?:boolean,
15
+ onShareOrder?:(order:BestAvailableOrderProps) => void,
16
+ onBuyNow?: (order:OrderProps) => void,
17
+ onCancelOrder?:(order_id:string) => void
18
+ }
19
+
20
+ const BestAvailableOrderCard = ({ order, player_id, show_grade, onBuyNow, onShareOrder, onCancelOrder }:BestAvailableOrderCardProps) => {
21
+
22
+ const handleBuyNow = () => {
23
+ if(!onBuyNow){ return }
24
+ onBuyNow({
25
+ ...order,
26
+ be_type:'market',
27
+ market_type: 'FOR_MONEY',
28
+ collar_pct: 0,
29
+ status: 'approved',
30
+ available_for_parlays: false,
31
+ commission_pct: 0,
32
+ resolution_status: 'inprogress',
33
+ position_ids: [],
34
+ positions: [],
35
+ side_type: order.side_type as 'team'|'athlete',
36
+ event_type: order.event_type as 'team'|'tournament'|'match',
37
+ open_amt: Math.floor(order.open_amt * 100) / 100,
38
+ influencer_id:undefined,
39
+ influence_type: undefined,
40
+ draft_liquidity: Math.floor(order.open_amt * 100)/100,
41
+ tip_pct:undefined,
42
+ tip_type:undefined,
43
+ expire_datetime: moment().add(1, 'minutes'),
44
+ order_type: 'limit',
45
+ buy_sell_ind: 'buy'
46
+ })
47
+ }
48
+
49
+ return (
50
+ <View style={{ ...view_styles.section }}>
51
+ <View style={{ ...view_styles.section_header, backgroundColor:Colors.shades.shade100 }}>
52
+ <Text style={{ flexGrow:1 }} size={14} color={Colors.brand.midnight} weight='bold' textAlign='center'>{order.title}</Text>
53
+ </View>
54
+ <View style={{ padding:15 }}>
55
+ <Text style={{ margin:3 }} size={12} color={Colors.brand.midnight} weight='bold' textAlign='center'>${order.open_amt.toFixed(2)} to win ${order.potential_winnings.toFixed(2)}</Text>
56
+ <Text style={{ margin:3 }} size={12} color={Colors.shades.black} weight='bold' textAlign='center'>PRICE</Text>
57
+ <Text style={{ margin:3 }} size={12} color={Colors.brand.electric} weight='bold' textAlign='center'>{(order.probability * 100).toFixed(2)}% ({MarketComponentHelpers.getOddsLabel(order.odds)})</Text>
58
+
59
+ <View style={{ justifyContent:'center', alignItems:'center', padding:5 }}>
60
+ <OrderGradeBar mask={show_grade ? false : true} grade={order.grade} view_type='card' />
61
+ </View>
62
+ </View>
63
+ <View style={{ flexDirection:'row', borderBottomLeftRadius:10, borderBottomRightRadius:10 }}>
64
+ {onShareOrder ?
65
+ <TouchableOpacity style={{ padding:10, backgroundColor:Colors.brand.electric, borderBottomLeftRadius:10 }} onPress={() => onShareOrder(order)}>
66
+ <Icons.ShareIcon color={Colors.shades.white} size={18}/>
67
+ </TouchableOpacity>
68
+ :<></>}
69
+ {player_id == order.player_id && onCancelOrder ?
70
+ <TouchableOpacity style={{ flex:1, padding:10, backgroundColor:Colors.utility.error, borderBottomRightRadius:10 }} onPress={() => onCancelOrder(order.order_id)}>
71
+ <Text size={14} color={Colors.shades.white} weight='bold' textAlign='center'>CANCEL</Text>
72
+ </TouchableOpacity>
73
+ :
74
+ <TouchableOpacity style={{ flex:1, padding:10, backgroundColor:Colors.utility.success, borderBottomRightRadius:10 }} onPress={() => handleBuyNow()}>
75
+ <Text size={14} color={Colors.shades.white} weight='bold' textAlign='center'>BUY</Text>
76
+ </TouchableOpacity>
77
+ }
78
+ </View>
79
+ </View>
80
+ )
81
+ }
82
+
83
+
84
+ export default BestAvailableOrderCard
@@ -0,0 +1,154 @@
1
+ import React, { useState } from 'react';
2
+ import { FlatList, Image, TouchableOpacity, View } from "react-native"
3
+ import type { HedgeProps, LeagueProps, OrderProps, OrderStatsProps } from '../../types';
4
+ import { Button, Icons, Text } from '../../Components';
5
+ import Colors from '../../constants/colors';
6
+ import { view_styles } from '../../constants/styles';
7
+ import ConfirmationModal from '../../Components/ConfirmationModal';
8
+ import { MarketComponentApi } from '../api';
9
+
10
+ type ContestOrderStatsCardProps = {
11
+ player_order_stat: OrderStatsProps,
12
+ contest_title:string,
13
+ league?:LeagueProps,
14
+ hedges:HedgeProps[],
15
+ market_type:'FOR_MONEY'|'FREE',
16
+ contest_time_detail:string,
17
+ onPress: (player_order_stat:OrderStatsProps) => void,
18
+ onOrdersUpdate: (orders:OrderProps[]) => void
19
+ }
20
+
21
+ const ContestOrderStatsCard = ({ player_order_stat, league, market_type, contest_time_detail, hedges, contest_title, onPress, onOrdersUpdate }:ContestOrderStatsCardProps) => {
22
+ const [ confirm_data, setConfirmData ] = useState<{
23
+ visible:boolean,
24
+ title?:string,
25
+ description?:string,
26
+ confirm_title?:string,
27
+ cancel_title?:string
28
+ }>({
29
+ visible:false
30
+ });
31
+ const [ action_loading, setActionLoading ] = useState(false);
32
+ const [ show_titles, setShowTitles ] = useState(false);
33
+
34
+ const handleCardPress = () => {
35
+ if(!onPress){ return }
36
+ onPress(player_order_stat)
37
+ }
38
+
39
+ const renderTitles = (data:{item:string, index:number}) => {
40
+ return (
41
+ <View style={{ ...view_styles.body_row, padding:10, borderBottomWidth:1, borderColor:Colors.shades.shade600 }}>
42
+ <Text size={14} color={Colors.brand.midnight} weight='semibold'>{data.item}</Text>
43
+ </View>
44
+ )
45
+ }
46
+
47
+ const handleCancelOrders = async(order_ids:string[]) => {
48
+ setActionLoading(true);
49
+ const orders = await MarketComponentApi.cancelOrders(order_ids)
50
+ setActionLoading(false);
51
+ onOrdersUpdate(orders);
52
+ }
53
+
54
+ const cl = market_type == 'FOR_MONEY' ? '$' : 'E'
55
+ const hedged_amt = hedges.reduce((a,b) => a + b.cash_rcvd, 0)
56
+
57
+ return (
58
+ <View>
59
+ <View style={{ ...view_styles.section, margin:5 }}>
60
+ <TouchableOpacity style={{ ...view_styles.section_header }} onPress={() => handleCardPress()}>
61
+ {league ?
62
+ <Image
63
+ source={{ uri: league.league_image }}
64
+ style={{ height:25, width:25 }}
65
+ resizeMode='cover'
66
+ />
67
+ :<></>}
68
+ <View style={{ flex:1, marginLeft:10, marginRight:10 }}>
69
+ <Text theme='header_2'>{contest_title}</Text>
70
+ <Text theme='body_2' style={{ marginTop:3 }}>{contest_time_detail}</Text>
71
+ </View>
72
+ <Icons.ChevronIcon direction='right' color={Colors.brand.midnight} size={12} />
73
+ </TouchableOpacity>
74
+ <View style={{ ...view_styles.section_body }}>
75
+ <View style={{ flexDirection:'row', flexWrap:'wrap'}}>
76
+ {player_order_stat.open_amt > 0 ?
77
+ <View nativeID='open_orders_lozenge' style={{ borderRadius:100, backgroundColor:Colors.shades.shade100, padding:5, paddingRight:10, paddingLeft:10 }}>
78
+ <Text size={12} weight='semibold' color={Colors.brand.cyan}>OPEN: {cl}{player_order_stat.open_amt.toFixed(2)}</Text>
79
+ </View>
80
+ :<></>}
81
+ {player_order_stat.unresolved_stake + player_order_stat.resolved_stake > 0 ?
82
+ <View nativeID='stake_lozenge' style={{ borderRadius:100, backgroundColor:Colors.shades.shade100, padding:5, paddingRight:10, paddingLeft:10 }}>
83
+ <Text size={12} weight='semibold' color={Colors.brand.midnight}>POSITION: {cl}{(player_order_stat.unresolved_stake + player_order_stat.resolved_stake).toFixed(2)}</Text>
84
+ </View>
85
+ :<></>}
86
+ {hedges.length > 0 && hedged_amt > 0 ?
87
+ <View nativeID='stake_lozenge' style={{ borderRadius:100, backgroundColor:Colors.highlights.highlight400Faded, padding:5, paddingRight:10, paddingLeft:10 }}>
88
+ <Text size={12} weight='semibold' color={Colors.brand.midnight}>HEDGED: {cl}{hedged_amt.toFixed(2)}</Text>
89
+ </View>
90
+ :<></>}
91
+ {player_order_stat.resolved_stake > 0 ?
92
+ <View nativeID='stake_lozenge' style={{ borderRadius:100, backgroundColor:Colors.shades.shade100, padding:5, paddingRight:10, paddingLeft:10 }}>
93
+ <Text size={12} weight='semibold' color={Colors.brand.midnight}>EARNED: {cl}{player_order_stat.earnings.toFixed(2)}</Text>
94
+ </View>
95
+ :<></>}
96
+ </View>
97
+ </View>
98
+ {show_titles && player_order_stat.unique_order_titles ?
99
+ <View style={{ ...view_styles.section_body, padding:10, borderTopWidth:1, borderColor:Colors.shades.shade600 }}>
100
+ <FlatList
101
+ data={player_order_stat.unique_order_titles}
102
+ renderItem={renderTitles}
103
+ keyExtractor={(item) => item}
104
+ />
105
+ </View>
106
+ :<></>}
107
+ <View style={{ ...view_styles.section_footer, padding:10 }}>
108
+ <TouchableOpacity style={{ flexDirection:'row', flex:2, alignItems:'center' }} onPress={() => setShowTitles(!show_titles)}>
109
+ <View style={{ height:30, width:30, borderRadius:100, backgroundColor:Colors.shades.white, justifyContent:'center', alignItems:'center', ...view_styles.float }}>
110
+ <Icons.ChevronIcon direction={show_titles ? 'up' : 'down'} size={6} color={Colors.brand.electric} />
111
+ </View>
112
+ <Text size={14} color={Colors.brand.electric} style={{ marginLeft:5 }}>{show_titles?'Hide':'Show'} Unique Orders</Text>
113
+ </TouchableOpacity>
114
+ {player_order_stat.open_amt > 0 ?
115
+ <Button
116
+ title='CANCEL ORDERS'
117
+ title_color={Colors.shades.white}
118
+ style={{ opacity:action_loading ? 0.5 : 1, flexShrink:1 }}
119
+ loading={action_loading}
120
+ disabled={action_loading}
121
+ backgroundColor={Colors.utility.error}
122
+ onPress={async() => {
123
+ setConfirmData({
124
+ visible: true,
125
+ title: 'Are you sure?',
126
+ confirm_title:'CANCEL ALL',
127
+ cancel_title: 'KEEP ALL',
128
+ description: `Press cancel all to clear the remaining $${player_order_stat.open_amt.toFixed(2)} that is open on this event`
129
+ });
130
+ }}
131
+ />
132
+ :<></>}
133
+ <View style={{ position:'absolute' }}>
134
+ <ConfirmationModal
135
+ visible={confirm_data.visible}
136
+ title={confirm_data.title}
137
+ description={confirm_data.description}
138
+ confirm_title={confirm_data.confirm_title}
139
+ cancel_title={confirm_data.cancel_title}
140
+ onCancel={() => setConfirmData({ visible:false })}
141
+ onConfirm={() => {
142
+ setConfirmData({ visible:false });
143
+ handleCancelOrders(player_order_stat.open_orders)
144
+ }}
145
+ />
146
+ </View>
147
+ </View>
148
+ </View>
149
+ </View>
150
+
151
+ )
152
+ }
153
+
154
+ export default ContestOrderStatsCard