be-components 7.5.6 → 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 (142) 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/ProfileManager/Components/DOBManager.js +38 -2
  26. package/lib/commonjs/ProfileManager/Components/DOBManager.js.map +1 -1
  27. package/lib/commonjs/ProfileManager/Components/EmailManager.js +40 -2
  28. package/lib/commonjs/ProfileManager/Components/EmailManager.js.map +1 -1
  29. package/lib/commonjs/ProfileManager/Components/PhoneManager.js +38 -1
  30. package/lib/commonjs/ProfileManager/Components/PhoneManager.js.map +1 -1
  31. package/lib/commonjs/ProfileManager/Components/VouchCard.js +13 -3
  32. package/lib/commonjs/ProfileManager/Components/VouchCard.js.map +1 -1
  33. package/lib/module/AdServer/api/index.js +4 -2
  34. package/lib/module/AdServer/api/index.js.map +1 -1
  35. package/lib/module/AdServer/index.js +25 -12
  36. package/lib/module/AdServer/index.js.map +1 -1
  37. package/lib/module/ApiOverrides/index.js +3 -2
  38. package/lib/module/ApiOverrides/index.js.map +1 -1
  39. package/lib/module/BetRouter/api/index.js +69 -0
  40. package/lib/module/BetRouter/api/index.js.map +1 -1
  41. package/lib/module/BetRouter/components/ContestLiquidity.js +72 -11
  42. package/lib/module/BetRouter/components/ContestLiquidity.js.map +1 -1
  43. package/lib/module/BetRouter/components/admin/LeagueInfo.js +233 -3
  44. package/lib/module/BetRouter/components/admin/LeagueInfo.js.map +1 -1
  45. package/lib/module/BetRouter/components/admin/RouterMarkets.js +1548 -0
  46. package/lib/module/BetRouter/components/admin/RouterMarkets.js.map +1 -0
  47. package/lib/module/BetRouter/layouts/DesktopAdminLayout.js +16 -3
  48. package/lib/module/BetRouter/layouts/DesktopAdminLayout.js.map +1 -1
  49. package/lib/module/BetRouter/layouts/MobileAdminLayout.js +31 -2
  50. package/lib/module/BetRouter/layouts/MobileAdminLayout.js.map +1 -1
  51. package/lib/module/BetRouter/types/api-contracts.js +77 -0
  52. package/lib/module/BetRouter/types/api-contracts.js.map +1 -1
  53. package/lib/module/BetRouter/types/credentials.js +4 -0
  54. package/lib/module/BetRouter/types/credentials.js.map +1 -1
  55. package/lib/module/Components/ViewportObserver.js +9 -0
  56. package/lib/module/Components/ViewportObserver.js.map +1 -1
  57. package/lib/module/ProfileManager/Components/DOBManager.js +38 -2
  58. package/lib/module/ProfileManager/Components/DOBManager.js.map +1 -1
  59. package/lib/module/ProfileManager/Components/EmailManager.js +40 -2
  60. package/lib/module/ProfileManager/Components/EmailManager.js.map +1 -1
  61. package/lib/module/ProfileManager/Components/PhoneManager.js +38 -1
  62. package/lib/module/ProfileManager/Components/PhoneManager.js.map +1 -1
  63. package/lib/module/ProfileManager/Components/VouchCard.js +13 -3
  64. package/lib/module/ProfileManager/Components/VouchCard.js.map +1 -1
  65. package/lib/typescript/lib/commonjs/AdServer/api/index.d.ts.map +1 -1
  66. package/lib/typescript/lib/commonjs/AdServer/index.d.ts +1 -0
  67. package/lib/typescript/lib/commonjs/AdServer/index.d.ts.map +1 -1
  68. package/lib/typescript/lib/commonjs/ApiOverrides/index.d.ts.map +1 -1
  69. package/lib/typescript/lib/commonjs/BetRouter/api/index.d.ts +6 -0
  70. package/lib/typescript/lib/commonjs/BetRouter/api/index.d.ts.map +1 -1
  71. package/lib/typescript/lib/commonjs/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  72. package/lib/typescript/lib/commonjs/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  73. package/lib/typescript/lib/commonjs/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  74. package/lib/typescript/lib/commonjs/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  75. package/lib/typescript/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  76. package/lib/typescript/lib/commonjs/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  77. package/lib/typescript/lib/commonjs/BetRouter/types/api-contracts.d.ts +77 -0
  78. package/lib/typescript/lib/commonjs/BetRouter/types/credentials.d.ts.map +1 -1
  79. package/lib/typescript/lib/commonjs/Components/ViewportObserver.d.ts.map +1 -1
  80. package/lib/typescript/lib/commonjs/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  81. package/lib/typescript/lib/commonjs/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  82. package/lib/typescript/lib/commonjs/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  83. package/lib/typescript/lib/commonjs/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  84. package/lib/typescript/lib/module/AdServer/api/index.d.ts.map +1 -1
  85. package/lib/typescript/lib/module/AdServer/index.d.ts +9 -0
  86. package/lib/typescript/lib/module/AdServer/index.d.ts.map +1 -1
  87. package/lib/typescript/lib/module/ApiOverrides/index.d.ts.map +1 -1
  88. package/lib/typescript/lib/module/BetRouter/api/index.d.ts +6 -0
  89. package/lib/typescript/lib/module/BetRouter/api/index.d.ts.map +1 -1
  90. package/lib/typescript/lib/module/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  91. package/lib/typescript/lib/module/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  92. package/lib/typescript/lib/module/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  93. package/lib/typescript/lib/module/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  94. package/lib/typescript/lib/module/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  95. package/lib/typescript/lib/module/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  96. package/lib/typescript/lib/module/BetRouter/types/api-contracts.d.ts +77 -0
  97. package/lib/typescript/lib/module/BetRouter/types/api-contracts.d.ts.map +1 -1
  98. package/lib/typescript/lib/module/BetRouter/types/credentials.d.ts.map +1 -1
  99. package/lib/typescript/lib/module/Components/ViewportObserver.d.ts.map +1 -1
  100. package/lib/typescript/lib/module/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  101. package/lib/typescript/lib/module/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  102. package/lib/typescript/lib/module/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  103. package/lib/typescript/lib/module/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  104. package/lib/typescript/src/AdServer/api/index.d.ts.map +1 -1
  105. package/lib/typescript/src/AdServer/index.d.ts +12 -3
  106. package/lib/typescript/src/AdServer/index.d.ts.map +1 -1
  107. package/lib/typescript/src/ApiOverrides/index.d.ts.map +1 -1
  108. package/lib/typescript/src/BetRouter/api/index.d.ts +23 -2
  109. package/lib/typescript/src/BetRouter/api/index.d.ts.map +1 -1
  110. package/lib/typescript/src/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  111. package/lib/typescript/src/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  112. package/lib/typescript/src/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  113. package/lib/typescript/src/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  114. package/lib/typescript/src/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  115. package/lib/typescript/src/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  116. package/lib/typescript/src/BetRouter/types/api-contracts.d.ts +93 -4
  117. package/lib/typescript/src/BetRouter/types/api-contracts.d.ts.map +1 -1
  118. package/lib/typescript/src/BetRouter/types/credentials.d.ts +1 -5
  119. package/lib/typescript/src/BetRouter/types/credentials.d.ts.map +1 -1
  120. package/lib/typescript/src/Components/ViewportObserver.d.ts.map +1 -1
  121. package/lib/typescript/src/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  122. package/lib/typescript/src/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  123. package/lib/typescript/src/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  124. package/lib/typescript/src/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  125. package/package.json +1 -1
  126. package/src/AdServer/api/index.ts +4 -2
  127. package/src/AdServer/index.tsx +64 -22
  128. package/src/ApiOverrides/index.ts +3 -2
  129. package/src/BetRouter/api/index.ts +101 -2
  130. package/src/BetRouter/components/ContestLiquidity.tsx +78 -11
  131. package/src/BetRouter/components/admin/LeagueInfo.tsx +231 -3
  132. package/src/BetRouter/components/admin/RouterMarkets.tsx +1238 -0
  133. package/src/BetRouter/layouts/DesktopAdminLayout.tsx +24 -1
  134. package/src/BetRouter/layouts/MobileAdminLayout.tsx +30 -2
  135. package/src/BetRouter/types/api-contracts.ts +100 -2
  136. package/src/BetRouter/types/credentials.ts +5 -6
  137. package/src/Components/ViewportObserver.tsx +13 -2
  138. package/src/ProfileManager/Components/DOBManager.tsx +14 -1
  139. package/src/ProfileManager/Components/EmailManager.tsx +16 -1
  140. package/src/ProfileManager/Components/PhoneManager.tsx +14 -0
  141. package/src/ProfileManager/Components/VouchCard.tsx +12 -4
  142. package/src/types.d.ts +3 -3
@@ -1,16 +1,19 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { View, Text, Button } from "../../../Components/Themed";
3
- import { ActivityIndicator } from 'react-native';
3
+ import { ActivityIndicator, Modal, ScrollView, TouchableOpacity } from 'react-native';
4
4
  import { useColors } from '../../../constants/useColors';
5
5
  import { getPartners, getContests, getParticipants } from '../../api';
6
6
  import { BetRouterApi } from '../../api';
7
+ import { SearchBox } from '../../../Components';
8
+ import Pagination from '../../../Components/Pagination';
7
9
  import type {
8
10
  RouterLeagueProps,
9
11
  RouterPartnerProps,
10
12
  RouterContestProps,
11
13
  RouterParticipantProps,
12
14
  //PartnerContestProps,
13
- PartnerLeagueProps
15
+ PartnerLeagueProps,
16
+ RawLeagueProps
14
17
  } from '../../types';
15
18
 
16
19
  type LeagueInfoProps = {
@@ -23,8 +26,15 @@ const LeagueInfo = ({ league }: LeagueInfoProps) => {
23
26
  const [loading, setLoading] = useState(true);
24
27
  const [partners, setPartners] = useState<RouterPartnerProps[]>([]);
25
28
  const [partnerLeagues, setPartnerLeagues] = useState<PartnerLeagueProps[]>([]);
29
+ const [rawLeagues, setRawLeagues] = useState<RawLeagueProps[]>([]);
26
30
  const [contests, setContests] = useState<RouterContestProps[]>([]);
27
31
  const [participants, setParticipants] = useState<RouterParticipantProps[]>([]);
32
+ const [showLinkModal, setShowLinkModal] = useState(false);
33
+ const [selectedPartner, setSelectedPartner] = useState<RouterPartnerProps | null>(null);
34
+ const [selectedRawLeagues, setSelectedRawLeagues] = useState<string[]>([]);
35
+ const [linkModalSearch, setLinkModalSearch] = useState('');
36
+ const [linkModalPage, setLinkModalPage] = useState(0);
37
+ const ITEMS_PER_PAGE = 10;
28
38
 
29
39
  useEffect(() => {
30
40
  loadLeagueData();
@@ -52,6 +62,11 @@ const LeagueInfo = ({ league }: LeagueInfoProps) => {
52
62
  setPartnerLeagues(filteredPartnerLeagues);
53
63
  }
54
64
 
65
+ // Store raw leagues
66
+ if (leaguesDataRes && leaguesDataRes.raw_leagues) {
67
+ setRawLeagues(leaguesDataRes.raw_leagues);
68
+ }
69
+
55
70
  if (Array.isArray(contestsRes)) {
56
71
  setContests(contestsRes.filter(c => c.router_league_id === league.router_league_id));
57
72
  }
@@ -77,6 +92,48 @@ const LeagueInfo = ({ league }: LeagueInfoProps) => {
77
92
  }
78
93
  };
79
94
 
95
+ const openLinkModal = (partner: RouterPartnerProps) => {
96
+ setSelectedPartner(partner);
97
+ setShowLinkModal(true);
98
+ setSelectedRawLeagues([]);
99
+ setLinkModalSearch('');
100
+ setLinkModalPage(0);
101
+ };
102
+
103
+ const handleLinkLeagues = async () => {
104
+ if (!selectedPartner || selectedRawLeagues.length === 0) {
105
+ alert('Please select at least one league to link');
106
+ return;
107
+ }
108
+
109
+ try {
110
+ setLoading(true);
111
+ const result = await BetRouterApi.BetRouter.LeagueApi.linkLeague(
112
+ selectedRawLeagues,
113
+ league.router_league_id
114
+ );
115
+ alert(`Successfully linked ${result.partnerLeagues.length} league(s) for ${selectedPartner.name}`);
116
+ setShowLinkModal(false);
117
+ setSelectedRawLeagues([]);
118
+ // Reload to show updated counts
119
+ await loadLeagueData();
120
+ } catch (error) {
121
+ console.error('Failed to link leagues:', error);
122
+ alert('Error linking leagues: ' + (error as any).message);
123
+ setLoading(false);
124
+ }
125
+ };
126
+
127
+ const toggleRawLeagueSelection = (rawLeagueId: string) => {
128
+ setSelectedRawLeagues(prev => {
129
+ if (prev.includes(rawLeagueId)) {
130
+ return prev.filter(id => id !== rawLeagueId);
131
+ } else {
132
+ return [...prev, rawLeagueId];
133
+ }
134
+ });
135
+ };
136
+
80
137
  if (loading) {
81
138
  return (
82
139
  <View transparent style={{ padding: 40, alignItems: 'center' }}>
@@ -204,7 +261,7 @@ const LeagueInfo = ({ league }: LeagueInfoProps) => {
204
261
  <Button
205
262
  type='action'
206
263
  title='Link'
207
- onPress={() => alert(`Link raw leagues for ${partner.name} - Coming soon!`)}
264
+ onPress={() => openLinkModal(partner)}
208
265
  style={{ paddingHorizontal: 12, paddingVertical: 6 }}
209
266
  />
210
267
  </View>
@@ -246,6 +303,177 @@ const LeagueInfo = ({ league }: LeagueInfoProps) => {
246
303
  </View>
247
304
  </View>
248
305
  </View>
306
+
307
+ {/* Link Leagues Modal */}
308
+ <Modal
309
+ visible={showLinkModal}
310
+ transparent
311
+ animationType="fade"
312
+ onRequestClose={() => setShowLinkModal(false)}
313
+ >
314
+ <View style={{ flex: 1, backgroundColor: 'rgba(0,0,0,0.5)', justifyContent: 'center', alignItems: 'center' }}>
315
+ <View style={{ backgroundColor: Colors.views.body, borderRadius: 12, padding: 24, width: '90%', maxWidth: 600 }}>
316
+ <Text theme="h1" size={20} style={{ marginBottom: 12 }}>
317
+ Link Leagues - {selectedPartner?.name}
318
+ </Text>
319
+ <Text theme="description" size={14} style={{ marginBottom: 16 }}>
320
+ Select raw leagues from {selectedPartner?.name} to link to {league.name}
321
+ </Text>
322
+
323
+ {/* Search Box */}
324
+ <View transparent style={{ marginBottom: 16 }}>
325
+ <SearchBox
326
+ placeholder="Search leagues..."
327
+ onChange={(text) => {
328
+ setLinkModalSearch(text);
329
+ setLinkModalPage(0); // Reset to first page on search
330
+ }}
331
+ hide_search_button
332
+ />
333
+ </View>
334
+
335
+ {(() => {
336
+ // Filter raw leagues by selected partner
337
+ let partnerRawLeagues = rawLeagues.filter(rl => rl.partner_id === selectedPartner?.partner_id);
338
+
339
+ // Apply search filter
340
+ if (linkModalSearch) {
341
+ partnerRawLeagues = partnerRawLeagues.filter(rl =>
342
+ rl.name.toLowerCase().includes(linkModalSearch.toLowerCase()) ||
343
+ rl.external_id.toLowerCase().includes(linkModalSearch.toLowerCase())
344
+ );
345
+ }
346
+
347
+ if (partnerRawLeagues.length === 0) {
348
+ return (
349
+ <View transparent style={{ padding: 40, alignItems: 'center' }}>
350
+ <Text theme="description" size={14}>
351
+ {linkModalSearch
352
+ ? `No leagues found matching "${linkModalSearch}"`
353
+ : `No raw leagues found for ${selectedPartner?.name}. Try loading raw leagues first from the partner.`
354
+ }
355
+ </Text>
356
+ </View>
357
+ );
358
+ }
359
+
360
+ // Calculate pagination
361
+ const totalPages = Math.ceil(partnerRawLeagues.length / ITEMS_PER_PAGE);
362
+ const startIndex = linkModalPage * ITEMS_PER_PAGE;
363
+ const endIndex = startIndex + ITEMS_PER_PAGE;
364
+ const paginatedLeagues = partnerRawLeagues.slice(startIndex, endIndex);
365
+
366
+ return (
367
+ <>
368
+ <ScrollView style={{ maxHeight: 400 }}>
369
+ <View transparent style={{ gap: 8 }}>
370
+ {paginatedLeagues.map((rawLeague) => {
371
+ const isSelected = selectedRawLeagues.includes(rawLeague.raw_league_id);
372
+ const isAlreadyLinked = partnerLeagues.some(
373
+ pl => pl.raw_league_id === rawLeague.raw_league_id && pl.router_league_id === league.router_league_id
374
+ );
375
+
376
+ return (
377
+ <TouchableOpacity
378
+ key={rawLeague.raw_league_id}
379
+ onPress={() => !isAlreadyLinked && toggleRawLeagueSelection(rawLeague.raw_league_id)}
380
+ disabled={isAlreadyLinked}
381
+ style={{
382
+ padding: 12,
383
+ backgroundColor: isAlreadyLinked ? Colors.views.header : (isSelected ? Colors.views.body : Colors.views.header),
384
+ borderRadius: 6,
385
+ borderWidth: 2,
386
+ borderColor: isAlreadyLinked ? Colors.borders.light : (isSelected ? Colors.views.body : Colors.borders.light),
387
+ opacity: isAlreadyLinked ? 0.5 : 1,
388
+ flexDirection: 'row',
389
+ alignItems: 'center',
390
+ justifyContent: 'space-between'
391
+ }}
392
+ >
393
+ <View transparent style={{ flex: 1 }}>
394
+ <Text theme="h2" size={14}>
395
+ {rawLeague.name}
396
+ </Text>
397
+ <Text theme="description" size={11} style={{ marginTop: 2 }}>
398
+ {rawLeague.external_id}
399
+ </Text>
400
+ </View>
401
+ {isAlreadyLinked && (
402
+ <View
403
+ transparent
404
+ style={{
405
+ paddingHorizontal: 8,
406
+ paddingVertical: 4,
407
+ borderRadius: 4,
408
+ backgroundColor: Colors.text.success
409
+ }}
410
+ >
411
+ <Text theme="h2" size={10} style={{ color: '#fff' }}>
412
+ Already Linked
413
+ </Text>
414
+ </View>
415
+ )}
416
+ {isSelected && !isAlreadyLinked && (
417
+ <View
418
+ transparent
419
+ style={{
420
+ width: 20,
421
+ height: 20,
422
+ borderRadius: 10,
423
+ backgroundColor: '#fff',
424
+ justifyContent: 'center',
425
+ alignItems: 'center'
426
+ }}
427
+ >
428
+ <Text theme="h2" size={12}>✓</Text>
429
+ </View>
430
+ )}
431
+ </TouchableOpacity>
432
+ );
433
+ })}
434
+ </View>
435
+ </ScrollView>
436
+
437
+ {/* Pagination */}
438
+ {totalPages > 1 && (
439
+ <View transparent style={{ marginTop: 16 }}>
440
+ <Pagination
441
+ offset={linkModalPage}
442
+ pages={totalPages}
443
+ onPrevious={() => setLinkModalPage(prev => Math.max(0, prev - 1))}
444
+ onNext={() => setLinkModalPage(prev => Math.min(totalPages - 1, prev + 1))}
445
+ onSelectPage={(page) => setLinkModalPage(page)}
446
+ />
447
+ </View>
448
+ )}
449
+
450
+ {/* Results count */}
451
+ <View transparent style={{ marginTop: 8, alignItems: 'center' }}>
452
+ <Text theme="description" size={12}>
453
+ Showing {startIndex + 1}-{Math.min(endIndex, partnerRawLeagues.length)} of {partnerRawLeagues.length} league(s)
454
+ </Text>
455
+ </View>
456
+ </>
457
+ );
458
+ })()}
459
+
460
+ <View transparent style={{ flexDirection: 'row', gap: 12, marginTop: 24 }}>
461
+ <Button
462
+ type="close"
463
+ title="Cancel"
464
+ onPress={() => setShowLinkModal(false)}
465
+ style={{ flex: 1 }}
466
+ />
467
+ <Button
468
+ type="success"
469
+ title={`Link ${selectedRawLeagues.length} League(s)`}
470
+ onPress={handleLinkLeagues}
471
+ style={{ flex: 1 }}
472
+ />
473
+ </View>
474
+ </View>
475
+ </View>
476
+ </Modal>
249
477
  </View>
250
478
  );
251
479
  };