be-components 7.5.5 → 7.5.7

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 (147) hide show
  1. package/lib/commonjs/AdServer/api/index.js +4 -2
  2. package/lib/commonjs/AdServer/api/index.js.map +1 -1
  3. package/lib/commonjs/AdServer/index.js +26 -13
  4. package/lib/commonjs/AdServer/index.js.map +1 -1
  5. package/lib/commonjs/ApiOverrides/index.js +3 -2
  6. package/lib/commonjs/ApiOverrides/index.js.map +1 -1
  7. package/lib/commonjs/BetRouter/api/index.js +69 -0
  8. package/lib/commonjs/BetRouter/api/index.js.map +1 -1
  9. package/lib/commonjs/BetRouter/components/ContestLiquidity.js +72 -11
  10. package/lib/commonjs/BetRouter/components/ContestLiquidity.js.map +1 -1
  11. package/lib/commonjs/BetRouter/components/admin/LeagueInfo.js +233 -2
  12. package/lib/commonjs/BetRouter/components/admin/LeagueInfo.js.map +1 -1
  13. package/lib/commonjs/BetRouter/components/admin/RouterMarkets.js +1555 -0
  14. package/lib/commonjs/BetRouter/components/admin/RouterMarkets.js.map +1 -0
  15. package/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.js +16 -3
  16. package/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.js.map +1 -1
  17. package/lib/commonjs/BetRouter/layouts/MobileAdminLayout.js +31 -2
  18. package/lib/commonjs/BetRouter/layouts/MobileAdminLayout.js.map +1 -1
  19. package/lib/commonjs/BetRouter/types/api-contracts.js +77 -0
  20. package/lib/commonjs/BetRouter/types/api-contracts.js.map +1 -1
  21. package/lib/commonjs/BetRouter/types/credentials.js +4 -0
  22. package/lib/commonjs/BetRouter/types/credentials.js.map +1 -1
  23. package/lib/commonjs/Components/ViewportObserver.js +9 -0
  24. package/lib/commonjs/Components/ViewportObserver.js.map +1 -1
  25. package/lib/commonjs/MarketComponents/components/MarketButton/index.js +1 -1
  26. package/lib/commonjs/MarketComponents/components/MarketButton/index.js.map +1 -1
  27. package/lib/commonjs/ProfileManager/Components/DOBManager.js +38 -2
  28. package/lib/commonjs/ProfileManager/Components/DOBManager.js.map +1 -1
  29. package/lib/commonjs/ProfileManager/Components/EmailManager.js +40 -2
  30. package/lib/commonjs/ProfileManager/Components/EmailManager.js.map +1 -1
  31. package/lib/commonjs/ProfileManager/Components/PhoneManager.js +38 -1
  32. package/lib/commonjs/ProfileManager/Components/PhoneManager.js.map +1 -1
  33. package/lib/commonjs/ProfileManager/Components/VouchCard.js +13 -3
  34. package/lib/commonjs/ProfileManager/Components/VouchCard.js.map +1 -1
  35. package/lib/module/AdServer/api/index.js +4 -2
  36. package/lib/module/AdServer/api/index.js.map +1 -1
  37. package/lib/module/AdServer/index.js +25 -12
  38. package/lib/module/AdServer/index.js.map +1 -1
  39. package/lib/module/ApiOverrides/index.js +3 -2
  40. package/lib/module/ApiOverrides/index.js.map +1 -1
  41. package/lib/module/BetRouter/api/index.js +69 -0
  42. package/lib/module/BetRouter/api/index.js.map +1 -1
  43. package/lib/module/BetRouter/components/ContestLiquidity.js +72 -11
  44. package/lib/module/BetRouter/components/ContestLiquidity.js.map +1 -1
  45. package/lib/module/BetRouter/components/admin/LeagueInfo.js +233 -3
  46. package/lib/module/BetRouter/components/admin/LeagueInfo.js.map +1 -1
  47. package/lib/module/BetRouter/components/admin/RouterMarkets.js +1548 -0
  48. package/lib/module/BetRouter/components/admin/RouterMarkets.js.map +1 -0
  49. package/lib/module/BetRouter/layouts/DesktopAdminLayout.js +16 -3
  50. package/lib/module/BetRouter/layouts/DesktopAdminLayout.js.map +1 -1
  51. package/lib/module/BetRouter/layouts/MobileAdminLayout.js +31 -2
  52. package/lib/module/BetRouter/layouts/MobileAdminLayout.js.map +1 -1
  53. package/lib/module/BetRouter/types/api-contracts.js +77 -0
  54. package/lib/module/BetRouter/types/api-contracts.js.map +1 -1
  55. package/lib/module/BetRouter/types/credentials.js +4 -0
  56. package/lib/module/BetRouter/types/credentials.js.map +1 -1
  57. package/lib/module/Components/ViewportObserver.js +9 -0
  58. package/lib/module/Components/ViewportObserver.js.map +1 -1
  59. package/lib/module/MarketComponents/components/MarketButton/index.js +1 -1
  60. package/lib/module/MarketComponents/components/MarketButton/index.js.map +1 -1
  61. package/lib/module/ProfileManager/Components/DOBManager.js +38 -2
  62. package/lib/module/ProfileManager/Components/DOBManager.js.map +1 -1
  63. package/lib/module/ProfileManager/Components/EmailManager.js +40 -2
  64. package/lib/module/ProfileManager/Components/EmailManager.js.map +1 -1
  65. package/lib/module/ProfileManager/Components/PhoneManager.js +38 -1
  66. package/lib/module/ProfileManager/Components/PhoneManager.js.map +1 -1
  67. package/lib/module/ProfileManager/Components/VouchCard.js +13 -3
  68. package/lib/module/ProfileManager/Components/VouchCard.js.map +1 -1
  69. package/lib/typescript/lib/commonjs/AdServer/api/index.d.ts.map +1 -1
  70. package/lib/typescript/lib/commonjs/AdServer/index.d.ts +1 -0
  71. package/lib/typescript/lib/commonjs/AdServer/index.d.ts.map +1 -1
  72. package/lib/typescript/lib/commonjs/ApiOverrides/index.d.ts.map +1 -1
  73. package/lib/typescript/lib/commonjs/BetRouter/api/index.d.ts +6 -0
  74. package/lib/typescript/lib/commonjs/BetRouter/api/index.d.ts.map +1 -1
  75. package/lib/typescript/lib/commonjs/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  76. package/lib/typescript/lib/commonjs/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  77. package/lib/typescript/lib/commonjs/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  78. package/lib/typescript/lib/commonjs/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  79. package/lib/typescript/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  80. package/lib/typescript/lib/commonjs/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  81. package/lib/typescript/lib/commonjs/BetRouter/types/api-contracts.d.ts +77 -0
  82. package/lib/typescript/lib/commonjs/BetRouter/types/credentials.d.ts.map +1 -1
  83. package/lib/typescript/lib/commonjs/Components/ViewportObserver.d.ts.map +1 -1
  84. package/lib/typescript/lib/commonjs/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  85. package/lib/typescript/lib/commonjs/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  86. package/lib/typescript/lib/commonjs/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  87. package/lib/typescript/lib/commonjs/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  88. package/lib/typescript/lib/module/AdServer/api/index.d.ts.map +1 -1
  89. package/lib/typescript/lib/module/AdServer/index.d.ts +9 -0
  90. package/lib/typescript/lib/module/AdServer/index.d.ts.map +1 -1
  91. package/lib/typescript/lib/module/ApiOverrides/index.d.ts.map +1 -1
  92. package/lib/typescript/lib/module/BetRouter/api/index.d.ts +6 -0
  93. package/lib/typescript/lib/module/BetRouter/api/index.d.ts.map +1 -1
  94. package/lib/typescript/lib/module/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  95. package/lib/typescript/lib/module/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  96. package/lib/typescript/lib/module/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  97. package/lib/typescript/lib/module/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  98. package/lib/typescript/lib/module/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  99. package/lib/typescript/lib/module/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  100. package/lib/typescript/lib/module/BetRouter/types/api-contracts.d.ts +77 -0
  101. package/lib/typescript/lib/module/BetRouter/types/api-contracts.d.ts.map +1 -1
  102. package/lib/typescript/lib/module/BetRouter/types/credentials.d.ts.map +1 -1
  103. package/lib/typescript/lib/module/Components/ViewportObserver.d.ts.map +1 -1
  104. package/lib/typescript/lib/module/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  105. package/lib/typescript/lib/module/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  106. package/lib/typescript/lib/module/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  107. package/lib/typescript/lib/module/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  108. package/lib/typescript/src/AdServer/api/index.d.ts.map +1 -1
  109. package/lib/typescript/src/AdServer/index.d.ts +12 -3
  110. package/lib/typescript/src/AdServer/index.d.ts.map +1 -1
  111. package/lib/typescript/src/ApiOverrides/index.d.ts.map +1 -1
  112. package/lib/typescript/src/BetRouter/api/index.d.ts +23 -2
  113. package/lib/typescript/src/BetRouter/api/index.d.ts.map +1 -1
  114. package/lib/typescript/src/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  115. package/lib/typescript/src/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  116. package/lib/typescript/src/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  117. package/lib/typescript/src/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  118. package/lib/typescript/src/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  119. package/lib/typescript/src/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  120. package/lib/typescript/src/BetRouter/types/api-contracts.d.ts +93 -4
  121. package/lib/typescript/src/BetRouter/types/api-contracts.d.ts.map +1 -1
  122. package/lib/typescript/src/BetRouter/types/credentials.d.ts +1 -5
  123. package/lib/typescript/src/BetRouter/types/credentials.d.ts.map +1 -1
  124. package/lib/typescript/src/Components/ViewportObserver.d.ts.map +1 -1
  125. package/lib/typescript/src/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  126. package/lib/typescript/src/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  127. package/lib/typescript/src/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  128. package/lib/typescript/src/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  129. package/package.json +1 -1
  130. package/src/AdServer/api/index.ts +4 -2
  131. package/src/AdServer/index.tsx +64 -22
  132. package/src/ApiOverrides/index.ts +3 -2
  133. package/src/BetRouter/api/index.ts +101 -2
  134. package/src/BetRouter/components/ContestLiquidity.tsx +78 -11
  135. package/src/BetRouter/components/admin/LeagueInfo.tsx +231 -3
  136. package/src/BetRouter/components/admin/RouterMarkets.tsx +1238 -0
  137. package/src/BetRouter/layouts/DesktopAdminLayout.tsx +24 -1
  138. package/src/BetRouter/layouts/MobileAdminLayout.tsx +30 -2
  139. package/src/BetRouter/types/api-contracts.ts +100 -2
  140. package/src/BetRouter/types/credentials.ts +5 -6
  141. package/src/Components/ViewportObserver.tsx +13 -2
  142. package/src/MarketComponents/components/MarketButton/index.tsx +1 -1
  143. package/src/ProfileManager/Components/DOBManager.tsx +14 -1
  144. package/src/ProfileManager/Components/EmailManager.tsx +16 -1
  145. package/src/ProfileManager/Components/PhoneManager.tsx +14 -0
  146. package/src/ProfileManager/Components/VouchCard.tsx +12 -4
  147. package/src/types.d.ts +3 -3
@@ -0,0 +1,1548 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { View, Text, Button } from "../../../Components/Themed";
3
+ import { ActivityIndicator, TouchableOpacity, TextInput, Modal, ScrollView } from 'react-native';
4
+ import { useColors } from '../../../constants/useColors';
5
+ import { BetRouterApi } from '../../api';
6
+ import { Icons, SearchBox } from '../../../Components';
7
+ const RouterMarkets = () => {
8
+ const Colors = useColors();
9
+ const [data, setData] = useState({
10
+ router_markets: [],
11
+ router_market_sides: [],
12
+ router_market_variables: [],
13
+ loading: true,
14
+ searchValue: '',
15
+ showCreateMarketModal: false,
16
+ showEditMarketModal: false,
17
+ showDeleteMarketModal: false,
18
+ showCreateSideModal: false,
19
+ showEditSideModal: false,
20
+ showDeleteSideModal: false,
21
+ selectedMarket: null,
22
+ selectedSide: null,
23
+ expandedMarketId: null,
24
+ formMarketKey: '',
25
+ formMarketLabel: '',
26
+ formMarketDescription: '',
27
+ formCategory: 'game_result',
28
+ formVariableRequired: false,
29
+ formDefaultVariableType: 'total',
30
+ formAllowMultipleParticipants: false,
31
+ formParticipantType: 'team',
32
+ formStatus: 'active',
33
+ formSideRouterMarketId: '',
34
+ formSideType: '',
35
+ formSideKey: '',
36
+ formRenderer: ''
37
+ });
38
+ useEffect(() => {
39
+ loadData();
40
+ }, []);
41
+ const loadData = async () => {
42
+ setData(prev => ({
43
+ ...prev,
44
+ loading: true
45
+ }));
46
+ try {
47
+ const [marketsResult, sidesResult, variablesResult] = await Promise.all([BetRouterApi.BetRouter.MarketApi.getRouterMarkets(), BetRouterApi.BetRouter.MarketApi.getMarketSides(), BetRouterApi.BetRouter.MarketApi.getMarketVariables()]);
48
+
49
+ // API returns arrays directly, not objects with properties
50
+ setData(prev => ({
51
+ ...prev,
52
+ router_markets: Array.isArray(marketsResult) ? marketsResult : [],
53
+ router_market_sides: Array.isArray(sidesResult) ? sidesResult : [],
54
+ router_market_variables: Array.isArray(variablesResult) ? variablesResult : [],
55
+ loading: false
56
+ }));
57
+ } catch (error) {
58
+ console.error('Failed to load router markets:', error);
59
+ alert('Error loading router markets: ' + error.message);
60
+ setData(prev => ({
61
+ ...prev,
62
+ loading: false
63
+ }));
64
+ }
65
+ };
66
+
67
+ // Market CRUD operations
68
+ const openCreateMarketModal = () => {
69
+ setData(prev => ({
70
+ ...prev,
71
+ showCreateMarketModal: true,
72
+ formMarketKey: '',
73
+ formMarketLabel: '',
74
+ formMarketDescription: '',
75
+ formCategory: 'game_result',
76
+ formVariableRequired: false,
77
+ formDefaultVariableType: 'total',
78
+ formAllowMultipleParticipants: false,
79
+ formParticipantType: 'team',
80
+ formStatus: 'active'
81
+ }));
82
+ };
83
+ const openEditMarketModal = market => {
84
+ setData(prev => ({
85
+ ...prev,
86
+ showEditMarketModal: true,
87
+ selectedMarket: market,
88
+ formMarketKey: market.market_key,
89
+ formMarketLabel: market.market_label,
90
+ formMarketDescription: market.market_description,
91
+ formCategory: market.category,
92
+ formVariableRequired: market.variable_required,
93
+ formDefaultVariableType: market.default_variable_type,
94
+ formAllowMultipleParticipants: market.allow_multiple_participants,
95
+ formParticipantType: market.participant_type,
96
+ formStatus: market.status
97
+ }));
98
+ };
99
+ const openDeleteMarketModal = market => {
100
+ setData(prev => ({
101
+ ...prev,
102
+ showDeleteMarketModal: true,
103
+ selectedMarket: market
104
+ }));
105
+ };
106
+ const handleCreateMarket = async () => {
107
+ if (!data.formMarketKey || !data.formMarketLabel || !data.formMarketDescription) {
108
+ alert('Please fill in all required fields');
109
+ return;
110
+ }
111
+ try {
112
+ setData(prev => ({
113
+ ...prev,
114
+ loading: true
115
+ }));
116
+ await BetRouterApi.BetRouter.MarketApi.createRouterMarket(data.formMarketKey, data.formMarketLabel, data.formMarketDescription, data.formCategory, data.formVariableRequired, data.formDefaultVariableType, data.formAllowMultipleParticipants, data.formParticipantType, data.formStatus);
117
+ closeModals();
118
+ await loadData();
119
+ } catch (error) {
120
+ console.error('Error creating router market:', error);
121
+ alert('Error creating router market: ' + error.message);
122
+ setData(prev => ({
123
+ ...prev,
124
+ loading: false
125
+ }));
126
+ }
127
+ };
128
+ const handleUpdateMarket = async () => {
129
+ if (!data.selectedMarket) return;
130
+ try {
131
+ setData(prev => ({
132
+ ...prev,
133
+ loading: true
134
+ }));
135
+ await BetRouterApi.BetRouter.MarketApi.updateRouterMarket(data.selectedMarket.router_market_id, {
136
+ market_key: data.formMarketKey,
137
+ market_label: data.formMarketLabel,
138
+ market_description: data.formMarketDescription,
139
+ category: data.formCategory,
140
+ variable_required: data.formVariableRequired,
141
+ default_variable_type: data.formDefaultVariableType,
142
+ allow_multiple_participants: data.formAllowMultipleParticipants,
143
+ participant_type: data.formParticipantType,
144
+ status: data.formStatus
145
+ });
146
+ closeModals();
147
+ await loadData();
148
+ } catch (error) {
149
+ console.error('Error updating router market:', error);
150
+ alert('Error updating router market: ' + error.message);
151
+ setData(prev => ({
152
+ ...prev,
153
+ loading: false
154
+ }));
155
+ }
156
+ };
157
+ const handleDeleteMarket = async () => {
158
+ if (!data.selectedMarket) return;
159
+ try {
160
+ setData(prev => ({
161
+ ...prev,
162
+ loading: true
163
+ }));
164
+ await BetRouterApi.BetRouter.MarketApi.deleteRouterMarket(data.selectedMarket.router_market_id);
165
+ closeModals();
166
+ await loadData();
167
+ } catch (error) {
168
+ console.error('Error deleting router market:', error);
169
+ alert('Error deleting router market: ' + error.message);
170
+ setData(prev => ({
171
+ ...prev,
172
+ loading: false
173
+ }));
174
+ }
175
+ };
176
+
177
+ // Side CRUD operations
178
+ const openCreateSideModal = router_market_id => {
179
+ setData(prev => ({
180
+ ...prev,
181
+ showCreateSideModal: true,
182
+ formSideRouterMarketId: router_market_id,
183
+ formSideType: '',
184
+ formSideKey: '',
185
+ formRenderer: ''
186
+ }));
187
+ };
188
+ const openEditSideModal = side => {
189
+ setData(prev => ({
190
+ ...prev,
191
+ showEditSideModal: true,
192
+ selectedSide: side,
193
+ formSideRouterMarketId: side.router_market_id,
194
+ formSideType: side.side_type,
195
+ formSideKey: side.side_key,
196
+ formRenderer: side.renderer
197
+ }));
198
+ };
199
+ const openDeleteSideModal = side => {
200
+ setData(prev => ({
201
+ ...prev,
202
+ showDeleteSideModal: true,
203
+ selectedSide: side
204
+ }));
205
+ };
206
+ const handleCreateSide = async () => {
207
+ if (!data.formSideRouterMarketId || !data.formSideType || !data.formSideKey || !data.formRenderer) {
208
+ alert('Please fill in all required fields');
209
+ return;
210
+ }
211
+ try {
212
+ setData(prev => ({
213
+ ...prev,
214
+ loading: true
215
+ }));
216
+ await BetRouterApi.BetRouter.MarketApi.createMarketSide(data.formSideRouterMarketId, data.formSideType, data.formSideKey, data.formRenderer);
217
+ closeModals();
218
+ await loadData();
219
+ } catch (error) {
220
+ console.error('Error creating market side:', error);
221
+ alert('Error creating market side: ' + error.message);
222
+ setData(prev => ({
223
+ ...prev,
224
+ loading: false
225
+ }));
226
+ }
227
+ };
228
+ const handleUpdateSide = async () => {
229
+ if (!data.selectedSide) return;
230
+ try {
231
+ setData(prev => ({
232
+ ...prev,
233
+ loading: true
234
+ }));
235
+ await BetRouterApi.BetRouter.MarketApi.updateMarketSide(data.selectedSide.market_side_id, {
236
+ router_market_id: data.formSideRouterMarketId,
237
+ side_type: data.formSideType,
238
+ side_key: data.formSideKey,
239
+ renderer: data.formRenderer
240
+ });
241
+ closeModals();
242
+ await loadData();
243
+ } catch (error) {
244
+ console.error('Error updating market side:', error);
245
+ alert('Error updating market side: ' + error.message);
246
+ setData(prev => ({
247
+ ...prev,
248
+ loading: false
249
+ }));
250
+ }
251
+ };
252
+ const handleDeleteSide = async () => {
253
+ if (!data.selectedSide) return;
254
+ try {
255
+ setData(prev => ({
256
+ ...prev,
257
+ loading: true
258
+ }));
259
+ await BetRouterApi.BetRouter.MarketApi.deleteMarketSide(data.selectedSide.market_side_id);
260
+ closeModals();
261
+ await loadData();
262
+ } catch (error) {
263
+ console.error('Error deleting market side:', error);
264
+ alert('Error deleting market side: ' + error.message);
265
+ setData(prev => ({
266
+ ...prev,
267
+ loading: false
268
+ }));
269
+ }
270
+ };
271
+ const closeModals = () => {
272
+ setData(prev => ({
273
+ ...prev,
274
+ showCreateMarketModal: false,
275
+ showEditMarketModal: false,
276
+ showDeleteMarketModal: false,
277
+ showCreateSideModal: false,
278
+ showEditSideModal: false,
279
+ showDeleteSideModal: false,
280
+ selectedMarket: null,
281
+ selectedSide: null
282
+ }));
283
+ };
284
+ const toggleMarketExpansion = router_market_id => {
285
+ setData(prev => ({
286
+ ...prev,
287
+ expandedMarketId: prev.expandedMarketId === router_market_id ? null : router_market_id
288
+ }));
289
+ };
290
+ const filteredMarkets = data.router_markets.filter(market => market.market_label.toLowerCase().includes(data.searchValue.toLowerCase()) || market.market_key.toLowerCase().includes(data.searchValue.toLowerCase()));
291
+ const getSidesForMarket = router_market_id => {
292
+ return data.router_market_sides.filter(side => side.router_market_id === router_market_id);
293
+ };
294
+ const getVariablesForMarket = router_market_id => {
295
+ return data.router_market_variables.filter(variable => variable.router_market_id === router_market_id);
296
+ };
297
+ return /*#__PURE__*/React.createElement(View, {
298
+ transparent: true,
299
+ style: {
300
+ flex: 1,
301
+ padding: 20
302
+ }
303
+ }, /*#__PURE__*/React.createElement(View, {
304
+ transparent: true,
305
+ style: {
306
+ flexDirection: 'row',
307
+ alignItems: 'center',
308
+ justifyContent: 'space-between',
309
+ marginBottom: 20
310
+ }
311
+ }, /*#__PURE__*/React.createElement(View, {
312
+ transparent: true
313
+ }, /*#__PURE__*/React.createElement(Text, {
314
+ theme: "h1",
315
+ size: 24
316
+ }, "Router Markets"), /*#__PURE__*/React.createElement(Text, {
317
+ theme: "description",
318
+ size: 14
319
+ }, "Manage router market types, sides, and variables")), /*#__PURE__*/React.createElement(Button, {
320
+ type: "success",
321
+ title: "+ Create Market",
322
+ onPress: openCreateMarketModal
323
+ })), /*#__PURE__*/React.createElement(View, {
324
+ transparent: true,
325
+ style: {
326
+ marginBottom: 20
327
+ }
328
+ }, /*#__PURE__*/React.createElement(SearchBox, {
329
+ placeholder: "Search markets...",
330
+ onChange: text => setData(prev => ({
331
+ ...prev,
332
+ searchValue: text
333
+ })),
334
+ hide_search_button: true
335
+ })), data.loading ? /*#__PURE__*/React.createElement(View, {
336
+ transparent: true,
337
+ style: {
338
+ flex: 1,
339
+ justifyContent: 'center',
340
+ alignItems: 'center'
341
+ }
342
+ }, /*#__PURE__*/React.createElement(ActivityIndicator, {
343
+ size: "large",
344
+ color: Colors.text.h1
345
+ })) : /*#__PURE__*/React.createElement(ScrollView, {
346
+ style: {
347
+ flex: 1
348
+ }
349
+ }, /*#__PURE__*/React.createElement(View, {
350
+ transparent: true,
351
+ style: {
352
+ paddingBottom: 40
353
+ }
354
+ }, filteredMarkets.length === 0 ? /*#__PURE__*/React.createElement(View, {
355
+ transparent: true,
356
+ style: {
357
+ padding: 40,
358
+ alignItems: 'center'
359
+ }
360
+ }, /*#__PURE__*/React.createElement(Text, {
361
+ theme: "description",
362
+ size: 14
363
+ }, "No router markets found")) : filteredMarkets.map(market => {
364
+ const isExpanded = data.expandedMarketId === market.router_market_id;
365
+ const sides = getSidesForMarket(market.router_market_id);
366
+ const variables = getVariablesForMarket(market.router_market_id);
367
+ return /*#__PURE__*/React.createElement(View, {
368
+ key: market.router_market_id,
369
+ style: {
370
+ backgroundColor: Colors.views.body,
371
+ borderRadius: 8,
372
+ marginBottom: 12,
373
+ overflow: 'hidden'
374
+ }
375
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
376
+ onPress: () => toggleMarketExpansion(market.router_market_id),
377
+ style: {
378
+ padding: 16,
379
+ flexDirection: 'row',
380
+ alignItems: 'center',
381
+ justifyContent: 'space-between'
382
+ }
383
+ }, /*#__PURE__*/React.createElement(View, {
384
+ transparent: true,
385
+ style: {
386
+ flex: 1,
387
+ flexDirection: 'row',
388
+ alignItems: 'center'
389
+ }
390
+ }, /*#__PURE__*/React.createElement(Icons.ChevronIcon, {
391
+ direction: isExpanded ? 'down' : 'right',
392
+ size: 8,
393
+ color: Colors.text.h1
394
+ }), /*#__PURE__*/React.createElement(View, {
395
+ transparent: true,
396
+ style: {
397
+ flex: 1,
398
+ marginLeft: 12
399
+ }
400
+ }, /*#__PURE__*/React.createElement(View, {
401
+ transparent: true,
402
+ style: {
403
+ flexDirection: 'row',
404
+ alignItems: 'center',
405
+ gap: 8
406
+ }
407
+ }, /*#__PURE__*/React.createElement(Text, {
408
+ theme: "h2",
409
+ size: 16
410
+ }, market.market_label), /*#__PURE__*/React.createElement(View, {
411
+ style: {
412
+ backgroundColor: market.status === 'active' ? Colors.text.success : Colors.views.header,
413
+ paddingHorizontal: 8,
414
+ paddingVertical: 2,
415
+ borderRadius: 4
416
+ }
417
+ }, /*#__PURE__*/React.createElement(Text, {
418
+ theme: "h2",
419
+ size: 10
420
+ }, market.status.toUpperCase()))), /*#__PURE__*/React.createElement(Text, {
421
+ theme: "description",
422
+ size: 12,
423
+ style: {
424
+ marginTop: 4
425
+ }
426
+ }, market.market_key, " \u2022 ", market.category, " \u2022 ", market.participant_type), /*#__PURE__*/React.createElement(Text, {
427
+ theme: "description",
428
+ size: 12,
429
+ style: {
430
+ marginTop: 2
431
+ }
432
+ }, market.market_description))), /*#__PURE__*/React.createElement(View, {
433
+ transparent: true,
434
+ style: {
435
+ flexDirection: 'row',
436
+ gap: 8,
437
+ marginLeft: 12
438
+ }
439
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
440
+ onPress: e => {
441
+ e.stopPropagation();
442
+ openEditMarketModal(market);
443
+ },
444
+ style: {
445
+ padding: 8
446
+ }
447
+ }, /*#__PURE__*/React.createElement(Icons.EditIcon, {
448
+ size: 16,
449
+ color: Colors.text.description
450
+ })), /*#__PURE__*/React.createElement(TouchableOpacity, {
451
+ onPress: e => {
452
+ e.stopPropagation();
453
+ openDeleteMarketModal(market);
454
+ },
455
+ style: {
456
+ paddingHorizontal: 12,
457
+ paddingVertical: 6,
458
+ backgroundColor: Colors.text.error,
459
+ borderRadius: 4
460
+ }
461
+ }, /*#__PURE__*/React.createElement(Text, {
462
+ theme: "h2",
463
+ size: 11
464
+ }, "Delete")))), isExpanded && /*#__PURE__*/React.createElement(View, {
465
+ style: {
466
+ backgroundColor: Colors.views.header,
467
+ padding: 16
468
+ }
469
+ }, /*#__PURE__*/React.createElement(View, {
470
+ transparent: true,
471
+ style: {
472
+ marginBottom: 16
473
+ }
474
+ }, /*#__PURE__*/React.createElement(Text, {
475
+ theme: "h2",
476
+ size: 14,
477
+ style: {
478
+ marginBottom: 8
479
+ }
480
+ }, "Properties"), /*#__PURE__*/React.createElement(View, {
481
+ transparent: true,
482
+ style: {
483
+ gap: 4
484
+ }
485
+ }, /*#__PURE__*/React.createElement(Text, {
486
+ theme: "description",
487
+ size: 12
488
+ }, "Variable Required: ", market.variable_required ? 'Yes' : 'No'), /*#__PURE__*/React.createElement(Text, {
489
+ theme: "description",
490
+ size: 12
491
+ }, "Default Variable Type: ", market.default_variable_type), /*#__PURE__*/React.createElement(Text, {
492
+ theme: "description",
493
+ size: 12
494
+ }, "Allow Multiple Participants: ", market.allow_multiple_participants ? 'Yes' : 'No'))), /*#__PURE__*/React.createElement(View, {
495
+ transparent: true,
496
+ style: {
497
+ marginBottom: 16
498
+ }
499
+ }, /*#__PURE__*/React.createElement(View, {
500
+ transparent: true,
501
+ style: {
502
+ flexDirection: 'row',
503
+ justifyContent: 'space-between',
504
+ alignItems: 'center',
505
+ marginBottom: 8
506
+ }
507
+ }, /*#__PURE__*/React.createElement(Text, {
508
+ theme: "h2",
509
+ size: 14
510
+ }, "Sides (", sides.length, ")"), /*#__PURE__*/React.createElement(TouchableOpacity, {
511
+ onPress: () => openCreateSideModal(market.router_market_id),
512
+ style: {
513
+ backgroundColor: Colors.views.body,
514
+ paddingHorizontal: 12,
515
+ paddingVertical: 6,
516
+ borderRadius: 4
517
+ }
518
+ }, /*#__PURE__*/React.createElement(Text, {
519
+ theme: "h2",
520
+ size: 12
521
+ }, "+ Add Side"))), sides.length === 0 ? /*#__PURE__*/React.createElement(Text, {
522
+ theme: "description",
523
+ size: 12
524
+ }, "No sides defined") : /*#__PURE__*/React.createElement(View, {
525
+ transparent: true,
526
+ style: {
527
+ gap: 8
528
+ }
529
+ }, sides.map(side => /*#__PURE__*/React.createElement(View, {
530
+ key: side.market_side_id,
531
+ style: {
532
+ backgroundColor: Colors.views.body,
533
+ padding: 12,
534
+ borderRadius: 6,
535
+ flexDirection: 'row',
536
+ justifyContent: 'space-between',
537
+ alignItems: 'center'
538
+ }
539
+ }, /*#__PURE__*/React.createElement(View, {
540
+ transparent: true,
541
+ style: {
542
+ flex: 1
543
+ }
544
+ }, /*#__PURE__*/React.createElement(Text, {
545
+ theme: "h2",
546
+ size: 13
547
+ }, side.side_key), /*#__PURE__*/React.createElement(Text, {
548
+ theme: "description",
549
+ size: 11,
550
+ style: {
551
+ marginTop: 2
552
+ }
553
+ }, "Type: ", side.side_type), /*#__PURE__*/React.createElement(Text, {
554
+ theme: "description",
555
+ size: 11,
556
+ style: {
557
+ marginTop: 2
558
+ }
559
+ }, "Renderer: ", side.renderer)), /*#__PURE__*/React.createElement(View, {
560
+ transparent: true,
561
+ style: {
562
+ flexDirection: 'row',
563
+ gap: 8
564
+ }
565
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
566
+ onPress: () => openEditSideModal(side),
567
+ style: {
568
+ padding: 6
569
+ }
570
+ }, /*#__PURE__*/React.createElement(Icons.EditIcon, {
571
+ size: 14,
572
+ color: Colors.text.description
573
+ })), /*#__PURE__*/React.createElement(TouchableOpacity, {
574
+ onPress: () => openDeleteSideModal(side),
575
+ style: {
576
+ paddingHorizontal: 8,
577
+ paddingVertical: 4,
578
+ backgroundColor: Colors.text.error,
579
+ borderRadius: 4
580
+ }
581
+ }, /*#__PURE__*/React.createElement(Text, {
582
+ theme: "h2",
583
+ size: 10
584
+ }, "Del"))))))), /*#__PURE__*/React.createElement(View, {
585
+ transparent: true
586
+ }, /*#__PURE__*/React.createElement(Text, {
587
+ theme: "h2",
588
+ size: 14,
589
+ style: {
590
+ marginBottom: 8
591
+ }
592
+ }, "Variables (", variables.length, ")"), variables.length === 0 ? /*#__PURE__*/React.createElement(Text, {
593
+ theme: "description",
594
+ size: 12
595
+ }, "No variables defined") : /*#__PURE__*/React.createElement(View, {
596
+ transparent: true,
597
+ style: {
598
+ gap: 4
599
+ }
600
+ }, variables.map(variable => /*#__PURE__*/React.createElement(Text, {
601
+ key: variable.router_market_variable_id,
602
+ theme: "description",
603
+ size: 12
604
+ }, variable.variable, " (", variable.variable_type, ")"))))));
605
+ }))), /*#__PURE__*/React.createElement(Modal, {
606
+ visible: data.showCreateMarketModal,
607
+ transparent: true,
608
+ animationType: "fade",
609
+ onRequestClose: closeModals
610
+ }, /*#__PURE__*/React.createElement(View, {
611
+ style: {
612
+ flex: 1,
613
+ backgroundColor: 'rgba(0,0,0,0.5)',
614
+ justifyContent: 'center',
615
+ alignItems: 'center'
616
+ }
617
+ }, /*#__PURE__*/React.createElement(View, {
618
+ style: {
619
+ backgroundColor: Colors.views.body,
620
+ borderRadius: 12,
621
+ padding: 24,
622
+ width: '90%',
623
+ maxWidth: 500
624
+ }
625
+ }, /*#__PURE__*/React.createElement(Text, {
626
+ theme: "h1",
627
+ size: 20,
628
+ style: {
629
+ marginBottom: 20
630
+ }
631
+ }, "Create Router Market"), /*#__PURE__*/React.createElement(ScrollView, {
632
+ style: {
633
+ maxHeight: 500
634
+ }
635
+ }, /*#__PURE__*/React.createElement(View, {
636
+ transparent: true,
637
+ style: {
638
+ gap: 16
639
+ }
640
+ }, /*#__PURE__*/React.createElement(View, {
641
+ transparent: true
642
+ }, /*#__PURE__*/React.createElement(Text, {
643
+ theme: "h2",
644
+ size: 14,
645
+ style: {
646
+ marginBottom: 8
647
+ }
648
+ }, "Market Key *"), /*#__PURE__*/React.createElement(TextInput, {
649
+ style: {
650
+ backgroundColor: Colors.views.header,
651
+ borderRadius: 6,
652
+ padding: 12,
653
+ color: Colors.text.h1,
654
+ fontSize: 14
655
+ },
656
+ value: data.formMarketKey,
657
+ onChangeText: text => setData(prev => ({
658
+ ...prev,
659
+ formMarketKey: text
660
+ })),
661
+ placeholder: "e.g., moneyline",
662
+ placeholderTextColor: Colors.text.description
663
+ })), /*#__PURE__*/React.createElement(View, {
664
+ transparent: true
665
+ }, /*#__PURE__*/React.createElement(Text, {
666
+ theme: "h2",
667
+ size: 14,
668
+ style: {
669
+ marginBottom: 8
670
+ }
671
+ }, "Market Label *"), /*#__PURE__*/React.createElement(TextInput, {
672
+ style: {
673
+ backgroundColor: Colors.views.header,
674
+ borderRadius: 6,
675
+ padding: 12,
676
+ color: Colors.text.h1,
677
+ fontSize: 14
678
+ },
679
+ value: data.formMarketLabel,
680
+ onChangeText: text => setData(prev => ({
681
+ ...prev,
682
+ formMarketLabel: text
683
+ })),
684
+ placeholder: "e.g., Moneyline",
685
+ placeholderTextColor: Colors.text.description
686
+ })), /*#__PURE__*/React.createElement(View, {
687
+ transparent: true
688
+ }, /*#__PURE__*/React.createElement(Text, {
689
+ theme: "h2",
690
+ size: 14,
691
+ style: {
692
+ marginBottom: 8
693
+ }
694
+ }, "Description *"), /*#__PURE__*/React.createElement(TextInput, {
695
+ style: {
696
+ backgroundColor: Colors.views.header,
697
+ borderRadius: 6,
698
+ padding: 12,
699
+ color: Colors.text.h1,
700
+ fontSize: 14,
701
+ minHeight: 80
702
+ },
703
+ value: data.formMarketDescription,
704
+ onChangeText: text => setData(prev => ({
705
+ ...prev,
706
+ formMarketDescription: text
707
+ })),
708
+ placeholder: "Market description",
709
+ placeholderTextColor: Colors.text.description,
710
+ multiline: true
711
+ })), /*#__PURE__*/React.createElement(View, {
712
+ transparent: true
713
+ }, /*#__PURE__*/React.createElement(Text, {
714
+ theme: "h2",
715
+ size: 14,
716
+ style: {
717
+ marginBottom: 8
718
+ }
719
+ }, "Category"), /*#__PURE__*/React.createElement(View, {
720
+ transparent: true,
721
+ style: {
722
+ flexDirection: 'row',
723
+ flexWrap: 'wrap',
724
+ gap: 8
725
+ }
726
+ }, ['game_result', 'team_stat', 'player_stat', 'game_stat'].map(cat => /*#__PURE__*/React.createElement(TouchableOpacity, {
727
+ key: cat,
728
+ onPress: () => setData(prev => ({
729
+ ...prev,
730
+ formCategory: cat
731
+ })),
732
+ style: {
733
+ backgroundColor: data.formCategory === cat ? Colors.views.body : Colors.views.header,
734
+ paddingHorizontal: 12,
735
+ paddingVertical: 8,
736
+ borderRadius: 6
737
+ }
738
+ }, /*#__PURE__*/React.createElement(Text, {
739
+ theme: "h2",
740
+ size: 12
741
+ }, cat))))), /*#__PURE__*/React.createElement(View, {
742
+ transparent: true
743
+ }, /*#__PURE__*/React.createElement(Text, {
744
+ theme: "h2",
745
+ size: 14,
746
+ style: {
747
+ marginBottom: 8
748
+ }
749
+ }, "Participant Type"), /*#__PURE__*/React.createElement(View, {
750
+ transparent: true,
751
+ style: {
752
+ flexDirection: 'row',
753
+ gap: 8
754
+ }
755
+ }, ['team', 'player', 'event'].map(type => /*#__PURE__*/React.createElement(TouchableOpacity, {
756
+ key: type,
757
+ onPress: () => setData(prev => ({
758
+ ...prev,
759
+ formParticipantType: type
760
+ })),
761
+ style: {
762
+ backgroundColor: data.formParticipantType === type ? Colors.views.body : Colors.views.header,
763
+ paddingHorizontal: 12,
764
+ paddingVertical: 8,
765
+ borderRadius: 6
766
+ }
767
+ }, /*#__PURE__*/React.createElement(Text, {
768
+ theme: "h2",
769
+ size: 12
770
+ }, type))))), /*#__PURE__*/React.createElement(View, {
771
+ transparent: true
772
+ }, /*#__PURE__*/React.createElement(Text, {
773
+ theme: "h2",
774
+ size: 14,
775
+ style: {
776
+ marginBottom: 8
777
+ }
778
+ }, "Default Variable Type"), /*#__PURE__*/React.createElement(View, {
779
+ transparent: true,
780
+ style: {
781
+ flexDirection: 'row',
782
+ gap: 8
783
+ }
784
+ }, ['total', 'spread'].map(type => /*#__PURE__*/React.createElement(TouchableOpacity, {
785
+ key: type,
786
+ onPress: () => setData(prev => ({
787
+ ...prev,
788
+ formDefaultVariableType: type
789
+ })),
790
+ style: {
791
+ backgroundColor: data.formDefaultVariableType === type ? Colors.views.body : Colors.views.header,
792
+ paddingHorizontal: 12,
793
+ paddingVertical: 8,
794
+ borderRadius: 6
795
+ }
796
+ }, /*#__PURE__*/React.createElement(Text, {
797
+ theme: "h2",
798
+ size: 12
799
+ }, type))))), /*#__PURE__*/React.createElement(View, {
800
+ transparent: true,
801
+ style: {
802
+ gap: 12
803
+ }
804
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
805
+ onPress: () => setData(prev => ({
806
+ ...prev,
807
+ formVariableRequired: !prev.formVariableRequired
808
+ })),
809
+ style: {
810
+ flexDirection: 'row',
811
+ alignItems: 'center',
812
+ gap: 8
813
+ }
814
+ }, /*#__PURE__*/React.createElement(View, {
815
+ style: {
816
+ width: 20,
817
+ height: 20,
818
+ borderRadius: 4,
819
+ borderWidth: 2,
820
+ borderColor: data.formVariableRequired ? Colors.views.body : Colors.text.description,
821
+ backgroundColor: data.formVariableRequired ? Colors.views.body : 'transparent',
822
+ justifyContent: 'center',
823
+ alignItems: 'center'
824
+ }
825
+ }, data.formVariableRequired && /*#__PURE__*/React.createElement(Text, {
826
+ theme: "h2",
827
+ size: 12
828
+ }, "\u2713")), /*#__PURE__*/React.createElement(Text, {
829
+ theme: "h2",
830
+ size: 14
831
+ }, "Variable Required")), /*#__PURE__*/React.createElement(TouchableOpacity, {
832
+ onPress: () => setData(prev => ({
833
+ ...prev,
834
+ formAllowMultipleParticipants: !prev.formAllowMultipleParticipants
835
+ })),
836
+ style: {
837
+ flexDirection: 'row',
838
+ alignItems: 'center',
839
+ gap: 8
840
+ }
841
+ }, /*#__PURE__*/React.createElement(View, {
842
+ style: {
843
+ width: 20,
844
+ height: 20,
845
+ borderRadius: 4,
846
+ borderWidth: 2,
847
+ borderColor: data.formAllowMultipleParticipants ? Colors.views.body : Colors.text.description,
848
+ backgroundColor: data.formAllowMultipleParticipants ? Colors.views.body : 'transparent',
849
+ justifyContent: 'center',
850
+ alignItems: 'center'
851
+ }
852
+ }, data.formAllowMultipleParticipants && /*#__PURE__*/React.createElement(Text, {
853
+ theme: "h2",
854
+ size: 12
855
+ }, "\u2713")), /*#__PURE__*/React.createElement(Text, {
856
+ theme: "h2",
857
+ size: 14
858
+ }, "Allow Multiple Participants"))), /*#__PURE__*/React.createElement(View, {
859
+ transparent: true
860
+ }, /*#__PURE__*/React.createElement(Text, {
861
+ theme: "h2",
862
+ size: 14,
863
+ style: {
864
+ marginBottom: 8
865
+ }
866
+ }, "Status"), /*#__PURE__*/React.createElement(View, {
867
+ transparent: true,
868
+ style: {
869
+ flexDirection: 'row',
870
+ gap: 8
871
+ }
872
+ }, ['active', 'inactive'].map(status => /*#__PURE__*/React.createElement(TouchableOpacity, {
873
+ key: status,
874
+ onPress: () => setData(prev => ({
875
+ ...prev,
876
+ formStatus: status
877
+ })),
878
+ style: {
879
+ backgroundColor: data.formStatus === status ? Colors.views.body : Colors.views.header,
880
+ paddingHorizontal: 12,
881
+ paddingVertical: 8,
882
+ borderRadius: 6
883
+ }
884
+ }, /*#__PURE__*/React.createElement(Text, {
885
+ theme: "h2",
886
+ size: 12
887
+ }, status))))))), /*#__PURE__*/React.createElement(View, {
888
+ transparent: true,
889
+ style: {
890
+ flexDirection: 'row',
891
+ gap: 12,
892
+ marginTop: 24
893
+ }
894
+ }, /*#__PURE__*/React.createElement(Button, {
895
+ title: "Cancel",
896
+ onPress: closeModals,
897
+ type: "close",
898
+ style: {
899
+ flex: 1
900
+ }
901
+ }), /*#__PURE__*/React.createElement(Button, {
902
+ title: "Create",
903
+ onPress: handleCreateMarket,
904
+ style: {
905
+ flex: 1
906
+ }
907
+ }))))), /*#__PURE__*/React.createElement(Modal, {
908
+ visible: data.showEditMarketModal,
909
+ transparent: true,
910
+ animationType: "fade",
911
+ onRequestClose: closeModals
912
+ }, /*#__PURE__*/React.createElement(View, {
913
+ style: {
914
+ flex: 1,
915
+ backgroundColor: 'rgba(0,0,0,0.5)',
916
+ justifyContent: 'center',
917
+ alignItems: 'center'
918
+ }
919
+ }, /*#__PURE__*/React.createElement(View, {
920
+ style: {
921
+ backgroundColor: Colors.views.body,
922
+ borderRadius: 12,
923
+ padding: 24,
924
+ width: '90%',
925
+ maxWidth: 500
926
+ }
927
+ }, /*#__PURE__*/React.createElement(Text, {
928
+ theme: "h1",
929
+ size: 20,
930
+ style: {
931
+ marginBottom: 20
932
+ }
933
+ }, "Edit Router Market"), /*#__PURE__*/React.createElement(ScrollView, {
934
+ style: {
935
+ maxHeight: 500
936
+ }
937
+ }, /*#__PURE__*/React.createElement(View, {
938
+ transparent: true,
939
+ style: {
940
+ gap: 16
941
+ }
942
+ }, /*#__PURE__*/React.createElement(View, {
943
+ transparent: true
944
+ }, /*#__PURE__*/React.createElement(Text, {
945
+ theme: "h2",
946
+ size: 14,
947
+ style: {
948
+ marginBottom: 8
949
+ }
950
+ }, "Market Key *"), /*#__PURE__*/React.createElement(TextInput, {
951
+ style: {
952
+ backgroundColor: Colors.views.header,
953
+ borderRadius: 6,
954
+ padding: 12,
955
+ color: Colors.text.h1,
956
+ fontSize: 14
957
+ },
958
+ value: data.formMarketKey,
959
+ onChangeText: text => setData(prev => ({
960
+ ...prev,
961
+ formMarketKey: text
962
+ }))
963
+ })), /*#__PURE__*/React.createElement(View, {
964
+ transparent: true
965
+ }, /*#__PURE__*/React.createElement(Text, {
966
+ theme: "h2",
967
+ size: 14,
968
+ style: {
969
+ marginBottom: 8
970
+ }
971
+ }, "Market Label *"), /*#__PURE__*/React.createElement(TextInput, {
972
+ style: {
973
+ backgroundColor: Colors.views.header,
974
+ borderRadius: 6,
975
+ padding: 12,
976
+ color: Colors.text.h1,
977
+ fontSize: 14
978
+ },
979
+ value: data.formMarketLabel,
980
+ onChangeText: text => setData(prev => ({
981
+ ...prev,
982
+ formMarketLabel: text
983
+ }))
984
+ })), /*#__PURE__*/React.createElement(View, {
985
+ transparent: true
986
+ }, /*#__PURE__*/React.createElement(Text, {
987
+ theme: "h2",
988
+ size: 14,
989
+ style: {
990
+ marginBottom: 8
991
+ }
992
+ }, "Description *"), /*#__PURE__*/React.createElement(TextInput, {
993
+ style: {
994
+ backgroundColor: Colors.views.header,
995
+ borderRadius: 6,
996
+ padding: 12,
997
+ color: Colors.text.h1,
998
+ fontSize: 14,
999
+ minHeight: 80
1000
+ },
1001
+ value: data.formMarketDescription,
1002
+ onChangeText: text => setData(prev => ({
1003
+ ...prev,
1004
+ formMarketDescription: text
1005
+ })),
1006
+ multiline: true
1007
+ })), /*#__PURE__*/React.createElement(View, {
1008
+ transparent: true
1009
+ }, /*#__PURE__*/React.createElement(Text, {
1010
+ theme: "h2",
1011
+ size: 14,
1012
+ style: {
1013
+ marginBottom: 8
1014
+ }
1015
+ }, "Category"), /*#__PURE__*/React.createElement(View, {
1016
+ transparent: true,
1017
+ style: {
1018
+ flexDirection: 'row',
1019
+ flexWrap: 'wrap',
1020
+ gap: 8
1021
+ }
1022
+ }, ['game_result', 'team_stat', 'player_stat', 'game_stat'].map(cat => /*#__PURE__*/React.createElement(TouchableOpacity, {
1023
+ key: cat,
1024
+ onPress: () => setData(prev => ({
1025
+ ...prev,
1026
+ formCategory: cat
1027
+ })),
1028
+ style: {
1029
+ backgroundColor: data.formCategory === cat ? Colors.views.body : Colors.views.header,
1030
+ paddingHorizontal: 12,
1031
+ paddingVertical: 8,
1032
+ borderRadius: 6
1033
+ }
1034
+ }, /*#__PURE__*/React.createElement(Text, {
1035
+ theme: "h2",
1036
+ size: 12
1037
+ }, cat))))), /*#__PURE__*/React.createElement(View, {
1038
+ transparent: true
1039
+ }, /*#__PURE__*/React.createElement(Text, {
1040
+ theme: "h2",
1041
+ size: 14,
1042
+ style: {
1043
+ marginBottom: 8
1044
+ }
1045
+ }, "Participant Type"), /*#__PURE__*/React.createElement(View, {
1046
+ transparent: true,
1047
+ style: {
1048
+ flexDirection: 'row',
1049
+ gap: 8
1050
+ }
1051
+ }, ['team', 'player', 'event'].map(type => /*#__PURE__*/React.createElement(TouchableOpacity, {
1052
+ key: type,
1053
+ onPress: () => setData(prev => ({
1054
+ ...prev,
1055
+ formParticipantType: type
1056
+ })),
1057
+ style: {
1058
+ backgroundColor: data.formParticipantType === type ? Colors.views.body : Colors.views.header,
1059
+ paddingHorizontal: 12,
1060
+ paddingVertical: 8,
1061
+ borderRadius: 6
1062
+ }
1063
+ }, /*#__PURE__*/React.createElement(Text, {
1064
+ theme: "h2",
1065
+ size: 12
1066
+ }, type))))), /*#__PURE__*/React.createElement(View, {
1067
+ transparent: true
1068
+ }, /*#__PURE__*/React.createElement(Text, {
1069
+ theme: "h2",
1070
+ size: 14,
1071
+ style: {
1072
+ marginBottom: 8
1073
+ }
1074
+ }, "Default Variable Type"), /*#__PURE__*/React.createElement(View, {
1075
+ transparent: true,
1076
+ style: {
1077
+ flexDirection: 'row',
1078
+ gap: 8
1079
+ }
1080
+ }, ['total', 'spread'].map(type => /*#__PURE__*/React.createElement(TouchableOpacity, {
1081
+ key: type,
1082
+ onPress: () => setData(prev => ({
1083
+ ...prev,
1084
+ formDefaultVariableType: type
1085
+ })),
1086
+ style: {
1087
+ backgroundColor: data.formDefaultVariableType === type ? Colors.views.body : Colors.views.header,
1088
+ paddingHorizontal: 12,
1089
+ paddingVertical: 8,
1090
+ borderRadius: 6
1091
+ }
1092
+ }, /*#__PURE__*/React.createElement(Text, {
1093
+ theme: "h2",
1094
+ size: 12
1095
+ }, type))))), /*#__PURE__*/React.createElement(View, {
1096
+ transparent: true,
1097
+ style: {
1098
+ gap: 12
1099
+ }
1100
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
1101
+ onPress: () => setData(prev => ({
1102
+ ...prev,
1103
+ formVariableRequired: !prev.formVariableRequired
1104
+ })),
1105
+ style: {
1106
+ flexDirection: 'row',
1107
+ alignItems: 'center',
1108
+ gap: 8
1109
+ }
1110
+ }, /*#__PURE__*/React.createElement(View, {
1111
+ style: {
1112
+ width: 20,
1113
+ height: 20,
1114
+ borderRadius: 4,
1115
+ borderWidth: 2,
1116
+ borderColor: data.formVariableRequired ? Colors.views.body : Colors.text.description,
1117
+ backgroundColor: data.formVariableRequired ? Colors.views.body : 'transparent',
1118
+ justifyContent: 'center',
1119
+ alignItems: 'center'
1120
+ }
1121
+ }, data.formVariableRequired && /*#__PURE__*/React.createElement(Text, {
1122
+ theme: "h2",
1123
+ size: 12
1124
+ }, "\u2713")), /*#__PURE__*/React.createElement(Text, {
1125
+ theme: "h2",
1126
+ size: 14
1127
+ }, "Variable Required")), /*#__PURE__*/React.createElement(TouchableOpacity, {
1128
+ onPress: () => setData(prev => ({
1129
+ ...prev,
1130
+ formAllowMultipleParticipants: !prev.formAllowMultipleParticipants
1131
+ })),
1132
+ style: {
1133
+ flexDirection: 'row',
1134
+ alignItems: 'center',
1135
+ gap: 8
1136
+ }
1137
+ }, /*#__PURE__*/React.createElement(View, {
1138
+ style: {
1139
+ width: 20,
1140
+ height: 20,
1141
+ borderRadius: 4,
1142
+ borderWidth: 2,
1143
+ borderColor: data.formAllowMultipleParticipants ? Colors.views.body : Colors.text.description,
1144
+ backgroundColor: data.formAllowMultipleParticipants ? Colors.views.body : 'transparent',
1145
+ justifyContent: 'center',
1146
+ alignItems: 'center'
1147
+ }
1148
+ }, data.formAllowMultipleParticipants && /*#__PURE__*/React.createElement(Text, {
1149
+ theme: "h2",
1150
+ size: 12
1151
+ }, "\u2713")), /*#__PURE__*/React.createElement(Text, {
1152
+ theme: "h2",
1153
+ size: 14
1154
+ }, "Allow Multiple Participants"))), /*#__PURE__*/React.createElement(View, {
1155
+ transparent: true
1156
+ }, /*#__PURE__*/React.createElement(Text, {
1157
+ theme: "h2",
1158
+ size: 14,
1159
+ style: {
1160
+ marginBottom: 8
1161
+ }
1162
+ }, "Status"), /*#__PURE__*/React.createElement(View, {
1163
+ transparent: true,
1164
+ style: {
1165
+ flexDirection: 'row',
1166
+ gap: 8
1167
+ }
1168
+ }, ['active', 'inactive'].map(status => /*#__PURE__*/React.createElement(TouchableOpacity, {
1169
+ key: status,
1170
+ onPress: () => setData(prev => ({
1171
+ ...prev,
1172
+ formStatus: status
1173
+ })),
1174
+ style: {
1175
+ backgroundColor: data.formStatus === status ? Colors.views.body : Colors.views.header,
1176
+ paddingHorizontal: 12,
1177
+ paddingVertical: 8,
1178
+ borderRadius: 6
1179
+ }
1180
+ }, /*#__PURE__*/React.createElement(Text, {
1181
+ theme: "h2",
1182
+ size: 12
1183
+ }, status))))))), /*#__PURE__*/React.createElement(View, {
1184
+ transparent: true,
1185
+ style: {
1186
+ flexDirection: 'row',
1187
+ gap: 12,
1188
+ marginTop: 24
1189
+ }
1190
+ }, /*#__PURE__*/React.createElement(Button, {
1191
+ title: "Cancel",
1192
+ onPress: closeModals,
1193
+ type: "close",
1194
+ style: {
1195
+ flex: 1
1196
+ }
1197
+ }), /*#__PURE__*/React.createElement(Button, {
1198
+ title: "Update",
1199
+ onPress: handleUpdateMarket,
1200
+ style: {
1201
+ flex: 1
1202
+ }
1203
+ }))))), /*#__PURE__*/React.createElement(Modal, {
1204
+ visible: data.showDeleteMarketModal,
1205
+ transparent: true,
1206
+ animationType: "fade",
1207
+ onRequestClose: closeModals
1208
+ }, /*#__PURE__*/React.createElement(View, {
1209
+ style: {
1210
+ flex: 1,
1211
+ backgroundColor: 'rgba(0,0,0,0.5)',
1212
+ justifyContent: 'center',
1213
+ alignItems: 'center'
1214
+ }
1215
+ }, /*#__PURE__*/React.createElement(View, {
1216
+ style: {
1217
+ backgroundColor: Colors.views.body,
1218
+ borderRadius: 12,
1219
+ padding: 24,
1220
+ width: '90%',
1221
+ maxWidth: 400
1222
+ }
1223
+ }, /*#__PURE__*/React.createElement(Text, {
1224
+ theme: "h1",
1225
+ size: 20,
1226
+ style: {
1227
+ marginBottom: 12
1228
+ }
1229
+ }, "Delete Router Market"), /*#__PURE__*/React.createElement(Text, {
1230
+ theme: "description",
1231
+ size: 14,
1232
+ style: {
1233
+ marginBottom: 24
1234
+ }
1235
+ }, "Are you sure you want to delete \"", data.selectedMarket?.market_label, "\"? This action cannot be undone."), /*#__PURE__*/React.createElement(View, {
1236
+ transparent: true,
1237
+ style: {
1238
+ flexDirection: 'row',
1239
+ gap: 12
1240
+ }
1241
+ }, /*#__PURE__*/React.createElement(Button, {
1242
+ title: "Cancel",
1243
+ onPress: closeModals,
1244
+ type: "close",
1245
+ style: {
1246
+ flex: 1
1247
+ }
1248
+ }), /*#__PURE__*/React.createElement(Button, {
1249
+ title: "Delete",
1250
+ onPress: handleDeleteMarket,
1251
+ style: {
1252
+ flex: 1,
1253
+ backgroundColor: Colors.text.error
1254
+ }
1255
+ }))))), /*#__PURE__*/React.createElement(Modal, {
1256
+ visible: data.showCreateSideModal,
1257
+ transparent: true,
1258
+ animationType: "fade",
1259
+ onRequestClose: closeModals
1260
+ }, /*#__PURE__*/React.createElement(View, {
1261
+ style: {
1262
+ flex: 1,
1263
+ backgroundColor: 'rgba(0,0,0,0.5)',
1264
+ justifyContent: 'center',
1265
+ alignItems: 'center'
1266
+ }
1267
+ }, /*#__PURE__*/React.createElement(View, {
1268
+ style: {
1269
+ backgroundColor: Colors.views.body,
1270
+ borderRadius: 12,
1271
+ padding: 24,
1272
+ width: '90%',
1273
+ maxWidth: 500
1274
+ }
1275
+ }, /*#__PURE__*/React.createElement(Text, {
1276
+ theme: "h1",
1277
+ size: 20,
1278
+ style: {
1279
+ marginBottom: 20
1280
+ }
1281
+ }, "Create Market Side"), /*#__PURE__*/React.createElement(View, {
1282
+ transparent: true,
1283
+ style: {
1284
+ gap: 16
1285
+ }
1286
+ }, /*#__PURE__*/React.createElement(View, {
1287
+ transparent: true
1288
+ }, /*#__PURE__*/React.createElement(Text, {
1289
+ theme: "h2",
1290
+ size: 14,
1291
+ style: {
1292
+ marginBottom: 8
1293
+ }
1294
+ }, "Side Type *"), /*#__PURE__*/React.createElement(TextInput, {
1295
+ style: {
1296
+ backgroundColor: Colors.views.header,
1297
+ borderRadius: 6,
1298
+ padding: 12,
1299
+ color: Colors.text.h1,
1300
+ fontSize: 14
1301
+ },
1302
+ value: data.formSideType,
1303
+ onChangeText: text => setData(prev => ({
1304
+ ...prev,
1305
+ formSideType: text
1306
+ })),
1307
+ placeholder: "e.g., team, athlete, side",
1308
+ placeholderTextColor: Colors.text.description
1309
+ })), /*#__PURE__*/React.createElement(View, {
1310
+ transparent: true
1311
+ }, /*#__PURE__*/React.createElement(Text, {
1312
+ theme: "h2",
1313
+ size: 14,
1314
+ style: {
1315
+ marginBottom: 8
1316
+ }
1317
+ }, "Side Key *"), /*#__PURE__*/React.createElement(TextInput, {
1318
+ style: {
1319
+ backgroundColor: Colors.views.header,
1320
+ borderRadius: 6,
1321
+ padding: 12,
1322
+ color: Colors.text.h1,
1323
+ fontSize: 14
1324
+ },
1325
+ value: data.formSideKey,
1326
+ onChangeText: text => setData(prev => ({
1327
+ ...prev,
1328
+ formSideKey: text
1329
+ })),
1330
+ placeholder: "e.g., home, away, over, under",
1331
+ placeholderTextColor: Colors.text.description
1332
+ })), /*#__PURE__*/React.createElement(View, {
1333
+ transparent: true
1334
+ }, /*#__PURE__*/React.createElement(Text, {
1335
+ theme: "h2",
1336
+ size: 14,
1337
+ style: {
1338
+ marginBottom: 8
1339
+ }
1340
+ }, "Renderer *"), /*#__PURE__*/React.createElement(TextInput, {
1341
+ style: {
1342
+ backgroundColor: Colors.views.header,
1343
+ borderRadius: 6,
1344
+ padding: 12,
1345
+ color: Colors.text.h1,
1346
+ fontSize: 14,
1347
+ minHeight: 80
1348
+ },
1349
+ value: data.formRenderer,
1350
+ onChangeText: text => setData(prev => ({
1351
+ ...prev,
1352
+ formRenderer: text
1353
+ })),
1354
+ placeholder: "Template for rendering titles",
1355
+ placeholderTextColor: Colors.text.description,
1356
+ multiline: true
1357
+ }))), /*#__PURE__*/React.createElement(View, {
1358
+ transparent: true,
1359
+ style: {
1360
+ flexDirection: 'row',
1361
+ gap: 12,
1362
+ marginTop: 24
1363
+ }
1364
+ }, /*#__PURE__*/React.createElement(Button, {
1365
+ title: "Cancel",
1366
+ onPress: closeModals,
1367
+ type: "close",
1368
+ style: {
1369
+ flex: 1
1370
+ }
1371
+ }), /*#__PURE__*/React.createElement(Button, {
1372
+ title: "Create",
1373
+ onPress: handleCreateSide,
1374
+ style: {
1375
+ flex: 1
1376
+ }
1377
+ }))))), /*#__PURE__*/React.createElement(Modal, {
1378
+ visible: data.showEditSideModal,
1379
+ transparent: true,
1380
+ animationType: "fade",
1381
+ onRequestClose: closeModals
1382
+ }, /*#__PURE__*/React.createElement(View, {
1383
+ style: {
1384
+ flex: 1,
1385
+ backgroundColor: 'rgba(0,0,0,0.5)',
1386
+ justifyContent: 'center',
1387
+ alignItems: 'center'
1388
+ }
1389
+ }, /*#__PURE__*/React.createElement(View, {
1390
+ style: {
1391
+ backgroundColor: Colors.views.body,
1392
+ borderRadius: 12,
1393
+ padding: 24,
1394
+ width: '90%',
1395
+ maxWidth: 500
1396
+ }
1397
+ }, /*#__PURE__*/React.createElement(Text, {
1398
+ theme: "h1",
1399
+ size: 20,
1400
+ style: {
1401
+ marginBottom: 20
1402
+ }
1403
+ }, "Edit Market Side"), /*#__PURE__*/React.createElement(View, {
1404
+ transparent: true,
1405
+ style: {
1406
+ gap: 16
1407
+ }
1408
+ }, /*#__PURE__*/React.createElement(View, {
1409
+ transparent: true
1410
+ }, /*#__PURE__*/React.createElement(Text, {
1411
+ theme: "h2",
1412
+ size: 14,
1413
+ style: {
1414
+ marginBottom: 8
1415
+ }
1416
+ }, "Side Type *"), /*#__PURE__*/React.createElement(TextInput, {
1417
+ style: {
1418
+ backgroundColor: Colors.views.header,
1419
+ borderRadius: 6,
1420
+ padding: 12,
1421
+ color: Colors.text.h1,
1422
+ fontSize: 14
1423
+ },
1424
+ value: data.formSideType,
1425
+ onChangeText: text => setData(prev => ({
1426
+ ...prev,
1427
+ formSideType: text
1428
+ }))
1429
+ })), /*#__PURE__*/React.createElement(View, {
1430
+ transparent: true
1431
+ }, /*#__PURE__*/React.createElement(Text, {
1432
+ theme: "h2",
1433
+ size: 14,
1434
+ style: {
1435
+ marginBottom: 8
1436
+ }
1437
+ }, "Side Key *"), /*#__PURE__*/React.createElement(TextInput, {
1438
+ style: {
1439
+ backgroundColor: Colors.views.header,
1440
+ borderRadius: 6,
1441
+ padding: 12,
1442
+ color: Colors.text.h1,
1443
+ fontSize: 14
1444
+ },
1445
+ value: data.formSideKey,
1446
+ onChangeText: text => setData(prev => ({
1447
+ ...prev,
1448
+ formSideKey: text
1449
+ }))
1450
+ })), /*#__PURE__*/React.createElement(View, {
1451
+ transparent: true
1452
+ }, /*#__PURE__*/React.createElement(Text, {
1453
+ theme: "h2",
1454
+ size: 14,
1455
+ style: {
1456
+ marginBottom: 8
1457
+ }
1458
+ }, "Renderer *"), /*#__PURE__*/React.createElement(TextInput, {
1459
+ style: {
1460
+ backgroundColor: Colors.views.header,
1461
+ borderRadius: 6,
1462
+ padding: 12,
1463
+ color: Colors.text.h1,
1464
+ fontSize: 14,
1465
+ minHeight: 80
1466
+ },
1467
+ value: data.formRenderer,
1468
+ onChangeText: text => setData(prev => ({
1469
+ ...prev,
1470
+ formRenderer: text
1471
+ })),
1472
+ multiline: true
1473
+ }))), /*#__PURE__*/React.createElement(View, {
1474
+ transparent: true,
1475
+ style: {
1476
+ flexDirection: 'row',
1477
+ gap: 12,
1478
+ marginTop: 24
1479
+ }
1480
+ }, /*#__PURE__*/React.createElement(Button, {
1481
+ title: "Cancel",
1482
+ onPress: closeModals,
1483
+ type: "close",
1484
+ style: {
1485
+ flex: 1
1486
+ }
1487
+ }), /*#__PURE__*/React.createElement(Button, {
1488
+ title: "Update",
1489
+ onPress: handleUpdateSide,
1490
+ style: {
1491
+ flex: 1
1492
+ }
1493
+ }))))), /*#__PURE__*/React.createElement(Modal, {
1494
+ visible: data.showDeleteSideModal,
1495
+ transparent: true,
1496
+ animationType: "fade",
1497
+ onRequestClose: closeModals
1498
+ }, /*#__PURE__*/React.createElement(View, {
1499
+ style: {
1500
+ flex: 1,
1501
+ backgroundColor: 'rgba(0,0,0,0.5)',
1502
+ justifyContent: 'center',
1503
+ alignItems: 'center'
1504
+ }
1505
+ }, /*#__PURE__*/React.createElement(View, {
1506
+ style: {
1507
+ backgroundColor: Colors.views.body,
1508
+ borderRadius: 12,
1509
+ padding: 24,
1510
+ width: '90%',
1511
+ maxWidth: 400
1512
+ }
1513
+ }, /*#__PURE__*/React.createElement(Text, {
1514
+ theme: "h1",
1515
+ size: 20,
1516
+ style: {
1517
+ marginBottom: 12
1518
+ }
1519
+ }, "Delete Market Side"), /*#__PURE__*/React.createElement(Text, {
1520
+ theme: "description",
1521
+ size: 14,
1522
+ style: {
1523
+ marginBottom: 24
1524
+ }
1525
+ }, "Are you sure you want to delete this market side? This action cannot be undone."), /*#__PURE__*/React.createElement(View, {
1526
+ transparent: true,
1527
+ style: {
1528
+ flexDirection: 'row',
1529
+ gap: 12
1530
+ }
1531
+ }, /*#__PURE__*/React.createElement(Button, {
1532
+ title: "Cancel",
1533
+ onPress: closeModals,
1534
+ type: "close",
1535
+ style: {
1536
+ flex: 1
1537
+ }
1538
+ }), /*#__PURE__*/React.createElement(Button, {
1539
+ title: "Delete",
1540
+ onPress: handleDeleteSide,
1541
+ style: {
1542
+ flex: 1,
1543
+ backgroundColor: Colors.text.error
1544
+ }
1545
+ }))))));
1546
+ };
1547
+ export default RouterMarkets;
1548
+ //# sourceMappingURL=RouterMarkets.js.map