be-components 1.2.6 → 1.2.8
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.
- package/lib/commonjs/Competition/components/CompetitionCard.js +1 -1
- package/lib/commonjs/Competition/components/CompetitionCard.js.map +1 -1
- package/lib/commonjs/Competition/components/EnterCompetitionPrompt.js +1 -1
- package/lib/commonjs/Competition/components/EnterCompetitionPrompt.js.map +1 -1
- package/lib/commonjs/CompetitionManager/api/index.js +577 -0
- package/lib/commonjs/CompetitionManager/api/index.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionContestsForm.js +439 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionContestsForm.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionInfoForm.js +269 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionInfoForm.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionMatchMarketCard.js +142 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionMatchMarketCard.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionSettingsForm.js +370 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionSettingsForm.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/MarketSelector.js +99 -0
- package/lib/commonjs/CompetitionManager/components/MarketSelector.js.map +1 -0
- package/lib/commonjs/CompetitionManager/index.js +188 -0
- package/lib/commonjs/CompetitionManager/index.js.map +1 -0
- package/lib/commonjs/Components/Dropdown.js +98 -0
- package/lib/commonjs/Components/Dropdown.js.map +1 -0
- package/lib/commonjs/Components/Icons.js +1 -1
- package/lib/commonjs/Components/Icons.js.map +1 -1
- package/lib/commonjs/Markets/api/index.js +28 -0
- package/lib/commonjs/Markets/api/index.js.map +1 -0
- package/lib/commonjs/Markets/components/MarketButton.js +25 -0
- package/lib/commonjs/Markets/components/MarketButton.js.map +1 -0
- package/lib/commonjs/Squares/api/index.js.map +1 -1
- package/lib/commonjs/Squares/components/PrizeCard.js +161 -0
- package/lib/commonjs/Squares/components/PrizeCard.js.map +1 -0
- package/lib/commonjs/Squares/components/SquareCard.js.map +1 -1
- package/lib/commonjs/Squares/components/SquaresBoard.js +1 -0
- package/lib/commonjs/Squares/components/SquaresBoard.js.map +1 -1
- package/lib/commonjs/Squares/index.js +10 -1
- package/lib/commonjs/Squares/index.js.map +1 -1
- package/lib/commonjs/constants/styles.js +10 -0
- package/lib/commonjs/constants/styles.js.map +1 -1
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/Competition/components/CompetitionCard.js +1 -1
- package/lib/module/Competition/components/CompetitionCard.js.map +1 -1
- package/lib/module/Competition/components/EnterCompetitionPrompt.js +1 -1
- package/lib/module/Competition/components/EnterCompetitionPrompt.js.map +1 -1
- package/lib/module/CompetitionManager/api/index.js +571 -0
- package/lib/module/CompetitionManager/api/index.js.map +1 -0
- package/lib/module/CompetitionManager/components/CompetitionContestsForm.js +434 -0
- package/lib/module/CompetitionManager/components/CompetitionContestsForm.js.map +1 -0
- package/lib/module/CompetitionManager/components/CompetitionInfoForm.js +262 -0
- package/lib/module/CompetitionManager/components/CompetitionInfoForm.js.map +1 -0
- package/lib/module/CompetitionManager/components/CompetitionMatchMarketCard.js +135 -0
- package/lib/module/CompetitionManager/components/CompetitionMatchMarketCard.js.map +1 -0
- package/lib/module/CompetitionManager/components/CompetitionSettingsForm.js +364 -0
- package/lib/module/CompetitionManager/components/CompetitionSettingsForm.js.map +1 -0
- package/lib/module/CompetitionManager/components/MarketSelector.js +92 -0
- package/lib/module/CompetitionManager/components/MarketSelector.js.map +1 -0
- package/lib/module/CompetitionManager/index.js +179 -0
- package/lib/module/CompetitionManager/index.js.map +1 -0
- package/lib/module/Components/Dropdown.js +89 -0
- package/lib/module/Components/Dropdown.js.map +1 -0
- package/lib/module/Components/Icons.js +1 -1
- package/lib/module/Components/Icons.js.map +1 -1
- package/lib/module/Markets/api/index.js +23 -0
- package/lib/module/Markets/api/index.js.map +1 -0
- package/lib/module/Markets/components/MarketButton.js +18 -0
- package/lib/module/Markets/components/MarketButton.js.map +1 -0
- package/lib/module/Squares/api/index.js.map +1 -1
- package/lib/module/Squares/components/PrizeCard.js +152 -0
- package/lib/module/Squares/components/PrizeCard.js.map +1 -0
- package/lib/module/Squares/components/SquareCard.js.map +1 -1
- package/lib/module/Squares/components/SquaresBoard.js +1 -0
- package/lib/module/Squares/components/SquaresBoard.js.map +1 -1
- package/lib/module/Squares/index.js +10 -1
- package/lib/module/Squares/index.js.map +1 -1
- package/lib/module/constants/styles.js +10 -0
- package/lib/module/constants/styles.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/CompetitionManager/api/index.d.ts +109 -0
- package/lib/typescript/src/CompetitionManager/api/index.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionContestsForm.d.ts +23 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionContestsForm.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionInfoForm.d.ts +10 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionInfoForm.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionMatchMarketCard.d.ts +17 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionMatchMarketCard.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionSettingsForm.d.ts +13 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionSettingsForm.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/MarketSelector.d.ts +13 -0
- package/lib/typescript/src/CompetitionManager/components/MarketSelector.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/index.d.ts +8 -0
- package/lib/typescript/src/CompetitionManager/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/Dropdown.d.ts +15 -0
- package/lib/typescript/src/Components/Dropdown.d.ts.map +1 -0
- package/lib/typescript/src/Components/Icons.d.ts.map +1 -1
- package/lib/typescript/src/Markets/api/index.d.ts +7 -0
- package/lib/typescript/src/Markets/api/index.d.ts.map +1 -0
- package/lib/typescript/src/Markets/components/MarketButton.d.ts +11 -0
- package/lib/typescript/src/Markets/components/MarketButton.d.ts.map +1 -0
- package/lib/typescript/src/Squares/api/index.d.ts +2 -1
- package/lib/typescript/src/Squares/api/index.d.ts.map +1 -1
- package/lib/typescript/src/Squares/components/PrizeCard.d.ts +11 -0
- package/lib/typescript/src/Squares/components/PrizeCard.d.ts.map +1 -0
- package/lib/typescript/src/Squares/components/SquareCard.d.ts.map +1 -1
- package/lib/typescript/src/Squares/components/SquaresBoard.d.ts.map +1 -1
- package/lib/typescript/src/Squares/index.d.ts.map +1 -1
- package/lib/typescript/src/constants/styles.d.ts +10 -0
- package/lib/typescript/src/constants/styles.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Competition/components/CompetitionCard.tsx +1 -1
- package/src/Competition/components/EnterCompetitionPrompt.tsx +2 -2
- package/src/CompetitionManager/api/index.ts +484 -0
- package/src/CompetitionManager/components/CompetitionContestsForm.tsx +473 -0
- package/src/CompetitionManager/components/CompetitionInfoForm.tsx +171 -0
- package/src/CompetitionManager/components/CompetitionMatchMarketCard.tsx +155 -0
- package/src/CompetitionManager/components/CompetitionSettingsForm.tsx +229 -0
- package/src/CompetitionManager/components/MarketSelector.tsx +66 -0
- package/src/CompetitionManager/index.tsx +163 -0
- package/src/Components/Dropdown.tsx +78 -0
- package/src/Components/Icons.tsx +1 -2
- package/src/Markets/api/index.ts +18 -0
- package/src/Markets/components/MarketButton.tsx +24 -0
- package/src/Squares/api/index.ts +2 -2
- package/src/Squares/components/PrizeCard.tsx +90 -0
- package/src/Squares/components/SquareCard.tsx +0 -1
- package/src/Squares/components/SquaresBoard.tsx +1 -0
- package/src/Squares/index.tsx +12 -2
- package/src/constants/styles.ts +5 -0
- package/src/index.tsx +2 -0
- package/src/types.d.ts +26 -2
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
//import { TouchableOpacity, View } from "react-native"
|
|
2
|
+
//import { v4 } from 'uuid';
|
|
3
|
+
import React from "react"
|
|
4
|
+
import type { CompetitionMatchMarketProps, MarketProps } from "../../types";
|
|
5
|
+
//import { ManageCompetitionHelpers } from "../api";
|
|
6
|
+
//import { Text } from "../../Components";
|
|
7
|
+
//import Colors from "../../constants/colors";
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
type CompetitionMatchMarketCardProps = {
|
|
11
|
+
market:MarketProps,
|
|
12
|
+
competition_match_id:string,
|
|
13
|
+
competition_match_markets:CompetitionMatchMarketProps[],
|
|
14
|
+
side_id?:string,
|
|
15
|
+
event_id:string,
|
|
16
|
+
competition_summaries?:any[]
|
|
17
|
+
event_type:string
|
|
18
|
+
onSaveMarkets: (cmms:CompetitionMatchMarketProps[]) => void,
|
|
19
|
+
onUpdateMarkets: (cmms:CompetitionMatchMarketProps[]) => void,
|
|
20
|
+
onGenerateMarkets: () => void
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const CompetitionMatchMarketCard = ({ }:CompetitionMatchMarketCardProps) => {
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
const [ setDraftCompetitionMatchMarket ] = useState<CompetitionMatchMarketProps | undefined>(undefined)
|
|
27
|
+
|
|
28
|
+
const trade_side = competition_match_markets.find(cmm => cmm.side == market.trade_side);
|
|
29
|
+
let trade_side_pick_pct = 0, o_side_pick_pct = 0;
|
|
30
|
+
const o_side = competition_match_markets.find(cmm => cmm.side != market.trade_side);
|
|
31
|
+
let total_count = 0
|
|
32
|
+
if(competition_summaries){
|
|
33
|
+
total_count = competition_summaries.reduce((a,b) => a + parseFloat(b.count), 0)
|
|
34
|
+
let trade_side_summary = competition_summaries.find(cs => cs.side == market.trade_side)
|
|
35
|
+
let o_side_summary = competition_summaries.find(cs => cs.side != market.trade_side)
|
|
36
|
+
if(trade_side_summary){
|
|
37
|
+
trade_side_pick_pct = trade_side_summary.count / total_count
|
|
38
|
+
}
|
|
39
|
+
if(o_side_summary){
|
|
40
|
+
o_side_pick_pct = o_side_summary.count / total_count
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
*/
|
|
44
|
+
/*
|
|
45
|
+
|
|
46
|
+
const isCMMValid = (cmm:CompetitionMatchMarketProps) => {
|
|
47
|
+
if(isNaN(cmm.odds)){ return false }
|
|
48
|
+
if(isNaN(cmm.var_1)){ return false }
|
|
49
|
+
if(market.type != 'Spread' && cmm.var_1 < 0){ return false }
|
|
50
|
+
if(market.var_1_required && cmm.var_1 == 0){ return false }
|
|
51
|
+
return true
|
|
52
|
+
}
|
|
53
|
+
*/
|
|
54
|
+
/*
|
|
55
|
+
const handleUpdateCMM = () => {
|
|
56
|
+
if(!draft_competition_match_market){ return }
|
|
57
|
+
//First check if the draft one is valie
|
|
58
|
+
if(!isCMMValid(draft_competition_match_market)){ return alert('Please correct any errors') }
|
|
59
|
+
let cmm = { ...draft_competition_match_market }
|
|
60
|
+
//cmm.odds = parseFloat(cmm.odds)
|
|
61
|
+
//cmm.var_1 = parseFloat(cmm.var_1)
|
|
62
|
+
//now we need to flip sides
|
|
63
|
+
let other_cmm = competition_match_markets.find(ncm => ncm.side != cmm.side)
|
|
64
|
+
if(other_cmm){
|
|
65
|
+
console.log('THERE WAS AN OTHER SIDE')
|
|
66
|
+
other_cmm.var_1 = cmm.var_1
|
|
67
|
+
other_cmm.odds = cmm.odds * -1
|
|
68
|
+
other_cmm.probability = ManageCompetitionHelpers.calcProbabilityFromOdds(other_cmm.odds)
|
|
69
|
+
} else {
|
|
70
|
+
return alert('NOT HANDLED. PLEASE AUTO GENERATE FIRST')
|
|
71
|
+
}
|
|
72
|
+
if(market.type == 'Spread'){
|
|
73
|
+
other_cmm.var_1 = other_cmm.var_1 * -1
|
|
74
|
+
}
|
|
75
|
+
onUpdateMarkets([{ ...cmm, probability: ManageCompetitionHelpers.calcProbabilityFromOdds(cmm.odds), status:'pending' }, { ...other_cmm, status:'pending'}])
|
|
76
|
+
return setDraftCompetitionMatchMarket(undefined)
|
|
77
|
+
}
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
|
|
82
|
+
if(draft_competition_match_market){
|
|
83
|
+
return (
|
|
84
|
+
<View style={{ flexDirection:'row', alignItems:'center' }}>
|
|
85
|
+
<Text size={14} color={Colors.brand.midnight}>{draft_competition_match_market.side.toUpperCase()}</Text>
|
|
86
|
+
{market.var_1_required ?
|
|
87
|
+
<TextInput
|
|
88
|
+
style={{ padding:10, borderRadius:4, backgroundColor:Colors.shades.white, marginRight:20 }}
|
|
89
|
+
value={draft_competition_match_market.var_1}
|
|
90
|
+
onChangeText={(text) => setDraftCompetitionMatchMarket({ ...draft_competition_match_market, var_1: text })}
|
|
91
|
+
/>
|
|
92
|
+
:<></>}
|
|
93
|
+
<TextInput
|
|
94
|
+
style={{ padding:10, borderRadius:4, backgroundColor:Colors.shades.white }}
|
|
95
|
+
value={draft_competition_match_market.odds}
|
|
96
|
+
onChangeText={(text) => setDraftCompetitionMatchMarket({ ...draft_competition_match_market, odds: text })}
|
|
97
|
+
/>
|
|
98
|
+
<Button
|
|
99
|
+
title='Submit'
|
|
100
|
+
title_color={Colors.shades.white}
|
|
101
|
+
backgroundColor={Colors.utility.success}
|
|
102
|
+
onPress={() => handleUpdateCMM()}
|
|
103
|
+
/>
|
|
104
|
+
</View>
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
/*
|
|
110
|
+
if(!trade_side || !o_side){
|
|
111
|
+
return (
|
|
112
|
+
<View style={{ flexDirection:'row' }}>
|
|
113
|
+
<TouchableOpacity style={{ justifyContent:'center', alignItems:'center', padding:5, borderRadius:4, backgroundColor:Colors.shades.shade100 }} onPress={() => {
|
|
114
|
+
setDraftCompetitionMatchMarket({ ...ManageCompetitionHelpers.createEmptyCompetitionMatchMarket(market, side_id), event_id, event_type, competition_match_id, competition_match_market_id: v4(), pair_id:v4() })
|
|
115
|
+
}}>
|
|
116
|
+
<Icons.UserIcon size={14} color={Colors.brand.midnight} />
|
|
117
|
+
<Text style={{ marginTop:5 }} size={12} color={Colors.brand.midnight} weight='bold'>Enter Manually</Text>
|
|
118
|
+
</TouchableOpacity>
|
|
119
|
+
<TouchableOpacity style={{ justifyContent:'center', marginLeft:5, alignItems:'center', padding:5, borderRadius:4, backgroundColor:Colors.shades.shade100 }} onPress={() => onGenerateMarkets()}>
|
|
120
|
+
<Icons.SettingsIcon size={14} color={Colors.brand.electric} />
|
|
121
|
+
<Text style={{ marginTop:5 }} size={12} color={Colors.brand.electric} weight='bold'>Try Auto</Text>
|
|
122
|
+
</TouchableOpacity>
|
|
123
|
+
</View>
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
*/
|
|
128
|
+
|
|
129
|
+
return <></>
|
|
130
|
+
/*
|
|
131
|
+
if(!o_side || !trade_side){ return <></> }
|
|
132
|
+
|
|
133
|
+
return (
|
|
134
|
+
<View style={{ flexDirection:'row' }}>
|
|
135
|
+
<View>
|
|
136
|
+
<Text style={{ marginBottom:2 }} size={12} color={Colors.brand.midnight} weight='semibold' textAlign="center">{(o_side_pick_pct*100).toFixed()} % Picked</Text>
|
|
137
|
+
<TouchableOpacity style={{ width:75, padding:5, backgroundColor:o_side.status == 'error' ? Colors.highlights.highlight300Faded :Colors.shades.shade600, borderRadius:4, marginRight:3 }} onPress={() => setDraftCompetitionMatchMarket(o_side)}>
|
|
138
|
+
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{o_side.side.toUpperCase()}{market.var_1_required?` ${ManageCompetitionHelpers.getVar1Label(o_side.var_1, market)}`:''}</Text>
|
|
139
|
+
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{ManageCompetitionHelpers.getOddsLabel(o_side.odds)}</Text>
|
|
140
|
+
</TouchableOpacity>
|
|
141
|
+
</View>
|
|
142
|
+
<View>
|
|
143
|
+
<Text style={{ marginBottom:2 }} size={12} color={Colors.brand.midnight} weight='semibold' textAlign="center">{(trade_side_pick_pct*100).toFixed()} % Picked</Text>
|
|
144
|
+
<TouchableOpacity style={{ width:75, padding:5, backgroundColor:trade_side.status == 'error' ? Colors.highlights.highlight300Faded :Colors.shades.shade600, borderRadius:4, marginLeft:3 }} onPress={() => setDraftCompetitionMatchMarket(trade_side)}>
|
|
145
|
+
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{trade_side.side.toUpperCase()}{market.var_1_required?` ${ManageCompetitionHelpers.getVar1Label(trade_side.var_1, market)}`:''}</Text>
|
|
146
|
+
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{ManageCompetitionHelpers.getOddsLabel(trade_side.odds)}</Text>
|
|
147
|
+
</TouchableOpacity>
|
|
148
|
+
</View>
|
|
149
|
+
|
|
150
|
+
</View>
|
|
151
|
+
)
|
|
152
|
+
*/
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export default CompetitionMatchMarketCard
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { FlatList, TextInput, TouchableOpacity, View } from "react-native"
|
|
2
|
+
import React, { useEffect, useState } from "react";
|
|
3
|
+
import type { CompetitionProps, CompetitionResultTypeProps, CompetitionTypeProps, PublicPlayerProps } from "../../types";
|
|
4
|
+
import { ManageCompetitionApi } from "../api";
|
|
5
|
+
import Colors from "../../constants/colors";
|
|
6
|
+
import { Icons, Text } from "../../Components";
|
|
7
|
+
import { view_styles } from "../../constants/styles";
|
|
8
|
+
import DropDown from "../../Components/Dropdown";
|
|
9
|
+
|
|
10
|
+
type CompetitionSettingsFormProps = {
|
|
11
|
+
player?: PublicPlayerProps,
|
|
12
|
+
competition: CompetitionProps,
|
|
13
|
+
width:number,
|
|
14
|
+
competition_result_types:CompetitionResultTypeProps[],
|
|
15
|
+
competition_types:CompetitionTypeProps[],
|
|
16
|
+
onCompetitionUpdate:(c:CompetitionProps) => void
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const market_types = ['FOR_MONEY', 'FREE']
|
|
20
|
+
|
|
21
|
+
const CompetitionSettingsForm = ({ player, width, competition, competition_types, competition_result_types, onCompetitionUpdate }: CompetitionSettingsFormProps) => {
|
|
22
|
+
const [ expanded, setExpanded ] = useState(false);
|
|
23
|
+
//const [ player_selector_visible, setPlayerSelectorVisible ] = useState(false);
|
|
24
|
+
const [ pacer, setPacer ] = useState<PublicPlayerProps>();
|
|
25
|
+
|
|
26
|
+
const competition_type = competition_types.find(ct => ct.competition_type_id == competition?.competition_type_id);
|
|
27
|
+
const competition_result_type = competition_result_types.find(crt => crt.competition_result_type_id == competition?.competition_result_type_id);
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if(!competition?.pacer_id){ return }
|
|
33
|
+
if(competition.pacer_id == pacer?.player_id){ return } //Already got him/her
|
|
34
|
+
getPacerFromServer(competition.pacer_id)
|
|
35
|
+
},[competition?.pacer_id])
|
|
36
|
+
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if(!competition_result_type){ return }
|
|
39
|
+
if(competition_result_type.type == 'outpace' && !competition.pacer_id){
|
|
40
|
+
setPacer(player)
|
|
41
|
+
onCompetitionUpdate({ ...competition, pacer_id: player?.player_id })
|
|
42
|
+
}
|
|
43
|
+
},[competition_result_type?.type])
|
|
44
|
+
|
|
45
|
+
const getPacerFromServer = async(player_id:string) => {
|
|
46
|
+
const ps = await ManageCompetitionApi.getPlayersByPlayerIds([player_id])
|
|
47
|
+
setPacer(ps[0])
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const renderMarketTypes = (data:{ item:string, index:number }) => {
|
|
51
|
+
const selected = data.item == competition.market_type ? true : false
|
|
52
|
+
return (
|
|
53
|
+
<TouchableOpacity style={{ minWidth:75, margin:1, borderRadius:8, padding:10, backgroundColor:selected?Colors.brand.midnight:undefined }} onPress={() => onCompetitionUpdate({ ...competition, market_type: data.item })}>
|
|
54
|
+
<Text textAlign="center" color={selected?Colors.shades.white:Colors.brand.midnight} weight={selected?'bold':'regular'} size={14}>{data.item == 'FOR_MONEY'?'USD':'EDGE COINS'}</Text>
|
|
55
|
+
</TouchableOpacity>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const renderCompetitionTypes = (data:{ item:CompetitionTypeProps, index:number }) => {
|
|
60
|
+
const selected = data.item.competition_type_id == competition.competition_type_id ? true : false
|
|
61
|
+
return (
|
|
62
|
+
<TouchableOpacity style={{ minWidth:75, margin:1, borderRadius:8, padding:10, backgroundColor:selected?Colors.brand.midnight:undefined }} onPress={() => onCompetitionUpdate({ ...competition, competition_type_id: data.item.competition_type_id })}>
|
|
63
|
+
<Text textAlign="center" color={selected?Colors.shades.white:Colors.brand.midnight} weight={selected?'bold':'regular'} size={14}>{data.item.type_label}</Text>
|
|
64
|
+
</TouchableOpacity>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if(!competition){ return <></> }
|
|
69
|
+
return (
|
|
70
|
+
<View style={{ ...view_styles.section, flexGrow:1 }}>
|
|
71
|
+
<TouchableOpacity style={view_styles.section_header} onPress={() => setExpanded(!expanded)}>
|
|
72
|
+
<View style={{ flex:1 }}>
|
|
73
|
+
<Text theme='header'>Competition Settings</Text>
|
|
74
|
+
<Text style={{ marginTop:3 }} theme='body'>Manage the high level information of this competition</Text>
|
|
75
|
+
</View>
|
|
76
|
+
<Icons.ChevronIcon direction={expanded ? 'up' : 'down'} color={Colors.brand.midnight} size={8} />
|
|
77
|
+
</TouchableOpacity>
|
|
78
|
+
{expanded ?
|
|
79
|
+
<View nativeID="competition_settings" style={{ ...view_styles.section_body, maxWidth:width, backgroundColor:Colors.shades.shade100 }}>
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
<View nativeID="competition_currency" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width}}>
|
|
83
|
+
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
84
|
+
<Text theme="header_2">Competition Currency</Text>
|
|
85
|
+
<Text style={{ marginTop:3 }} theme="body">Is the ticket price in real-money or edge coins?</Text>
|
|
86
|
+
</View>
|
|
87
|
+
<View style={{ justifyContent:'flex-end', margin: 5, borderRadius:8, backgroundColor:Colors.shades.white }}>
|
|
88
|
+
<FlatList
|
|
89
|
+
data={market_types}
|
|
90
|
+
renderItem={renderMarketTypes}
|
|
91
|
+
keyExtractor={(item) => item}
|
|
92
|
+
horizontal
|
|
93
|
+
/>
|
|
94
|
+
</View>
|
|
95
|
+
</View>
|
|
96
|
+
|
|
97
|
+
<View nativeID="competition_type" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width}}>
|
|
98
|
+
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
99
|
+
<Text theme="header_2">Competition Type</Text>
|
|
100
|
+
<Text style={{ marginTop:3 }} theme="body">{competition_type?competition_type.description:'Choose the type of competition this is.'}</Text>
|
|
101
|
+
</View>
|
|
102
|
+
<View style={{ justifyContent:'flex-end', margin:5, borderRadius:8, backgroundColor:Colors.shades.white }}>
|
|
103
|
+
<FlatList
|
|
104
|
+
data={competition_types}
|
|
105
|
+
renderItem={renderCompetitionTypes}
|
|
106
|
+
keyExtractor={(item) => item.competition_type_id.toString()}
|
|
107
|
+
horizontal
|
|
108
|
+
/>
|
|
109
|
+
</View>
|
|
110
|
+
</View>
|
|
111
|
+
|
|
112
|
+
<View nativeID="competition_payout" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width}}>
|
|
113
|
+
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
114
|
+
<Text theme="header_2">Competition Payout Type</Text>
|
|
115
|
+
<Text style={{ marginTop:3 }} theme="body">{competition_result_type?competition_result_type.description:'Choose the type of payout for this competition'}</Text>
|
|
116
|
+
</View>
|
|
117
|
+
<View style={{ justifyContent:'flex-end', margin:5, borderRadius:8, backgroundColor:Colors.shades.white }}>
|
|
118
|
+
<DropDown
|
|
119
|
+
dropdown_options={[
|
|
120
|
+
{value: 'competition_result_type_id', eligible_options: competition_result_types.map(t => t.label)}
|
|
121
|
+
]}
|
|
122
|
+
selected_value={competition_result_type?.label ?? ''}
|
|
123
|
+
onOptionSelect={(type) => {
|
|
124
|
+
const new_result_type = competition_result_types.find(crt => crt.label == type);
|
|
125
|
+
if(!new_result_type){ return }
|
|
126
|
+
onCompetitionUpdate({ ...competition, competition_result_type_id: new_result_type.competition_result_type_id })
|
|
127
|
+
}}
|
|
128
|
+
/>
|
|
129
|
+
</View>
|
|
130
|
+
</View>
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
<View nativeID="buy_in" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width}}>
|
|
134
|
+
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
135
|
+
<Text theme="header_2">Ticket Price</Text>
|
|
136
|
+
<Text style={{ marginTop:3 }} theme="body">Set the amount required to purchase a ticket to participate</Text>
|
|
137
|
+
</View>
|
|
138
|
+
<TextInput
|
|
139
|
+
style={{ ...view_styles.input, textAlign:'center', margin:5, width:100, backgroundColor:Colors.shades.white }}
|
|
140
|
+
onChangeText={(text) => onCompetitionUpdate({ ...competition, buy_in: text })}
|
|
141
|
+
placeholder="25"
|
|
142
|
+
value={competition.buy_in as string}
|
|
143
|
+
placeholderTextColor={Colors.brand.slate}
|
|
144
|
+
/>
|
|
145
|
+
</View>
|
|
146
|
+
|
|
147
|
+
<View nativeID="Max Tickets" style={{ flexDirection:'row', flexWrap:'wrap', padding:10, borderBottomWidth:1, borderBottomColor:Colors.shades.white }}>
|
|
148
|
+
<View style={{ flex:1, marginRight:5 }}>
|
|
149
|
+
<Text theme="header_2">Max Tickets</Text>
|
|
150
|
+
<Text style={{ marginTop:3 }} theme="body">Maximum number of tickets that can be sold</Text>
|
|
151
|
+
</View>
|
|
152
|
+
<TextInput
|
|
153
|
+
style={{ ...view_styles.input, textAlign:'center', width:100, backgroundColor:Colors.shades.white }}
|
|
154
|
+
onChangeText={(text) => onCompetitionUpdate({ ...competition, available_tickets: text })}
|
|
155
|
+
placeholder="100"
|
|
156
|
+
value={competition.available_tickets as string}
|
|
157
|
+
placeholderTextColor={Colors.brand.slate}
|
|
158
|
+
/>
|
|
159
|
+
</View>
|
|
160
|
+
</View>
|
|
161
|
+
:<></>}
|
|
162
|
+
</View>
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export default CompetitionSettingsForm
|
|
167
|
+
|
|
168
|
+
/*
|
|
169
|
+
{competition_result_type?.type == 'outpace' ?
|
|
170
|
+
<View nativeID="competition_payout_type" style={{ flexDirection:'row', flexWrap:'wrap', padding:10, borderBottomWidth:1, borderBottomColor:Colors.shades.white }}>
|
|
171
|
+
<View style={{ flex:1, marginRight:5 }}>
|
|
172
|
+
<Text size={16} color={Colors.brand.midnight} weight='bold'>Pacer</Text>
|
|
173
|
+
<Text size={14} color={Colors.brand.midnight} weight='regular'>Select the player that must be beat</Text>
|
|
174
|
+
</View>
|
|
175
|
+
<View style={{ flexDirection:'row', padding:5, backgroundColor:Colors.shades.white, borderRadius:8 }}>
|
|
176
|
+
{pacer?
|
|
177
|
+
<View style={{ flexDirection:'row', padding:5, backgroundColor:Colors.shades.white, borderRightWidth:1, borderRightColor:Colors.shades.shade600 }}>
|
|
178
|
+
<Image
|
|
179
|
+
source={{ uri: pacer.profile_pic }}
|
|
180
|
+
style={{ height:40, width:40, padding:5 }}
|
|
181
|
+
resizeMode="cover"
|
|
182
|
+
/>
|
|
183
|
+
<View style={{ flex:1, padding:5 }}>
|
|
184
|
+
<Text size={14} color={Colors.brand.midnight}>@{pacer.username}</Text>
|
|
185
|
+
</View>
|
|
186
|
+
</View>
|
|
187
|
+
:<></>}
|
|
188
|
+
<Button
|
|
189
|
+
title={pacer?'Change':'Add Pacer'}
|
|
190
|
+
title_color={Colors.brand.electric}
|
|
191
|
+
onPress={() => setPlayerSelectorVisible(true)}
|
|
192
|
+
/>
|
|
193
|
+
</View>
|
|
194
|
+
</View>
|
|
195
|
+
:<></>}
|
|
196
|
+
*/
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
/*
|
|
200
|
+
<View style={{ position:'absolute', top:0, left:0, right:0, alignItems:'center' }}>
|
|
201
|
+
<PlayerSelector
|
|
202
|
+
visible={player_selector_visible}
|
|
203
|
+
onPlayerSelect={(player) => {
|
|
204
|
+
setPacer(player)
|
|
205
|
+
onCompetitionUpdate({ ...competition, pacer_id:player.player_id })
|
|
206
|
+
setPlayerSelectorVisible(false)
|
|
207
|
+
}}
|
|
208
|
+
onClose={() => setPlayerSelectorVisible(false)}
|
|
209
|
+
/>
|
|
210
|
+
</View>
|
|
211
|
+
*/
|
|
212
|
+
|
|
213
|
+
/*
|
|
214
|
+
{creator?.role == 'admin' ?
|
|
215
|
+
<View nativeID="Guaranteed_payout" style={{ flexDirection:'row', flexWrap:'wrap', padding:10, borderBottomWidth:1, borderBottomColor:Colors.shades.white }}>
|
|
216
|
+
<View style={{ flex:1, marginRight:5 }}>
|
|
217
|
+
<Text size={16} color={Colors.brand.midnight} weight='bold'>Guaranteed Payout (ADMIN ONLY)</Text>
|
|
218
|
+
<Text size={14} color={Colors.brand.midnight} weight='regular'>How much payout is guaranteed?</Text>
|
|
219
|
+
</View>
|
|
220
|
+
<TextInput
|
|
221
|
+
style={{ padding:10, borderRadius:8, backgroundColor:Colors.shades.white }}
|
|
222
|
+
onChangeText={(text) => onCompetitionUpdate({ ...competition, guaranteed_payout: text })}
|
|
223
|
+
placeholder="0"
|
|
224
|
+
value={competition.guaranteed_payout}
|
|
225
|
+
placeholderTextColor={Colors.brand.slate}
|
|
226
|
+
/>
|
|
227
|
+
</View>
|
|
228
|
+
:<></>}
|
|
229
|
+
*/
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FlatList, ScrollView, TouchableOpacity, View } from "react-native"
|
|
3
|
+
import type { MarketProps } from '../../types';
|
|
4
|
+
import { Button, Switch, Text } from '../../Components';
|
|
5
|
+
import Colors from '../../constants/colors';
|
|
6
|
+
import { view_styles } from '../../constants/styles';
|
|
7
|
+
|
|
8
|
+
type MarketSelectorProps = {
|
|
9
|
+
visible:boolean,
|
|
10
|
+
markets:MarketProps[],
|
|
11
|
+
selected_markets:string[],
|
|
12
|
+
onSelectMarket: (market:MarketProps) => void,
|
|
13
|
+
onDeselectMarket: (market:MarketProps) => void,
|
|
14
|
+
onClose:() => void
|
|
15
|
+
}
|
|
16
|
+
const MarketSelector = ({ visible, markets, selected_markets, onSelectMarket, onDeselectMarket, onClose } : MarketSelectorProps) => {
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
const renderMarkets = (data:{item:MarketProps, index:number}) => {
|
|
20
|
+
const selected = selected_markets.includes(data.item.market_id) ? true : false
|
|
21
|
+
return (
|
|
22
|
+
<TouchableOpacity style={{ flexDirection:'row', alignItems:'center', padding:10, borderBottomWidth:1, borderColor:Colors.shades.shade600 }} onPress={() => selected ? onDeselectMarket(data.item) : onSelectMarket(data.item)}>
|
|
23
|
+
<View style={{ flex:1, marginRight:10 }}>
|
|
24
|
+
<Text size={14} color={Colors.brand.midnight} weight='bold'>{data.item.type == 'Stat' ? data.item.stat_label : data.item.type}</Text>
|
|
25
|
+
<Text style={{ marginTop:3 }} size={14} color={Colors.brand.midnight} weight='regular'>{data.item.description}</Text>
|
|
26
|
+
</View>
|
|
27
|
+
<Switch
|
|
28
|
+
switch_type="on_off"
|
|
29
|
+
value={selected}
|
|
30
|
+
onChange={() => {
|
|
31
|
+
if(!selected){ return onSelectMarket(data.item) }
|
|
32
|
+
return onDeselectMarket(data.item)
|
|
33
|
+
}}
|
|
34
|
+
/>
|
|
35
|
+
</TouchableOpacity>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if(!visible){ return <></> }
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<View style={{ borderRadius:8, minWidth:250, maxHeight:450, backgroundColor:Colors.shades.white, ...view_styles.float }}>
|
|
43
|
+
<View style={{ flexDirection:'row' }}>
|
|
44
|
+
<View style={{ flex:1 }} />
|
|
45
|
+
<Button
|
|
46
|
+
title="CLOSE"
|
|
47
|
+
style={{ alignSelf:'flex-end' }}
|
|
48
|
+
backgroundColor={Colors.brand.electric}
|
|
49
|
+
padding={10}
|
|
50
|
+
title_color={Colors.shades.white}
|
|
51
|
+
borderRadius={8}
|
|
52
|
+
onPress={() => onClose()}
|
|
53
|
+
/>
|
|
54
|
+
</View>
|
|
55
|
+
<ScrollView style={{ flex:1 }}>
|
|
56
|
+
<FlatList
|
|
57
|
+
data={markets}
|
|
58
|
+
renderItem={renderMarkets}
|
|
59
|
+
keyExtractor={(item) => item.market_id.toString()}
|
|
60
|
+
/>
|
|
61
|
+
</ScrollView>
|
|
62
|
+
</View>
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default MarketSelector
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { ScrollView, View, ActivityIndicator } from "react-native"
|
|
3
|
+
import { view_styles } from '../constants/styles';
|
|
4
|
+
import CompetitionInfoForm from './components/CompetitionInfoForm';
|
|
5
|
+
import type { AthleteProps, CompetitionMatchMarketProps, CompetitionMatchProps, CompetitionPayoutTypeProps, CompetitionProps, CompetitionResultTypeProps, CompetitionTypeProps, EventProps, LeagueProps, MarketProps, MatchProps, TeamProps, TournamentProps } from '../types';
|
|
6
|
+
import Colors from '../constants/colors';
|
|
7
|
+
import { ManageCompetitionApi, ManageCompetitionMatchApi } from './api';
|
|
8
|
+
import CompetitionSettingsForm from './components/CompetitionSettingsForm';
|
|
9
|
+
import CompetitionContestsForm from './components/CompetitionContestsForm';
|
|
10
|
+
|
|
11
|
+
type CompetitionManagerProps = {
|
|
12
|
+
player_id?:string,
|
|
13
|
+
competition_id:string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const CompetitionManager = ({ competition_id }:CompetitionManagerProps) => {
|
|
17
|
+
const [ module_size, setModuleSize ] = useState({ height:0, width:0 });
|
|
18
|
+
const [ competition_data, setCompetitionData ] = useState<{
|
|
19
|
+
loaded:boolean,
|
|
20
|
+
loading:boolean,
|
|
21
|
+
competition?:CompetitionProps,
|
|
22
|
+
draft_competition?:CompetitionProps,
|
|
23
|
+
competition_result_types:CompetitionResultTypeProps[],
|
|
24
|
+
competition_payout_types:CompetitionPayoutTypeProps[],
|
|
25
|
+
competition_types:CompetitionTypeProps[],
|
|
26
|
+
competition_matches:CompetitionMatchProps[],
|
|
27
|
+
competition_match_markets:CompetitionMatchMarketProps[],
|
|
28
|
+
markets:MarketProps[],
|
|
29
|
+
leagues:LeagueProps[],
|
|
30
|
+
events:EventProps[],
|
|
31
|
+
tournaments:TournamentProps[],
|
|
32
|
+
matches:MatchProps[],
|
|
33
|
+
teams:TeamProps[],
|
|
34
|
+
athletes:AthleteProps[]
|
|
35
|
+
|
|
36
|
+
}>({
|
|
37
|
+
loaded:false,
|
|
38
|
+
loading:false,
|
|
39
|
+
competition_result_types: [],
|
|
40
|
+
competition_types: [],
|
|
41
|
+
competition_matches: [],
|
|
42
|
+
competition_payout_types:[],
|
|
43
|
+
competition_match_markets:[],
|
|
44
|
+
markets: [],
|
|
45
|
+
leagues:[],
|
|
46
|
+
events: [],
|
|
47
|
+
tournaments: [],
|
|
48
|
+
matches:[],
|
|
49
|
+
teams:[],
|
|
50
|
+
athletes:[]
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
const { loaded, competition, competition_result_types, competition_types, draft_competition, competition_matches, competition_match_markets, markets, leagues, events, tournaments, matches, teams, athletes } = competition_data;
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if(!loaded){ ManageCompetitionApi.setEnvironment() }
|
|
58
|
+
getDataFromServer(competition_id);
|
|
59
|
+
},[competition_id])
|
|
60
|
+
|
|
61
|
+
const getDataFromServer = async(id:string) => {
|
|
62
|
+
const c = await ManageCompetitionApi.getCompetitionById(id);
|
|
63
|
+
const cm_resp = await ManageCompetitionMatchApi.getCompetitionMatchesByCompetitionId(id);
|
|
64
|
+
const options = await ManageCompetitionApi.getCompetitionOptions()
|
|
65
|
+
const lgs = await ManageCompetitionApi.getLeagues();
|
|
66
|
+
const mks = await ManageCompetitionApi.getMarkets();
|
|
67
|
+
//Get unique contests
|
|
68
|
+
let event_ids = cm_resp.competition_matches.filter(cm => cm.event_type == 'team').map(cm => cm.event_id);
|
|
69
|
+
let tournament_ids = cm_resp.competition_matches.filter(cm => cm.event_type == 'tournament').map(cm => cm.event_id);
|
|
70
|
+
let match_ids = cm_resp.competition_matches.filter(cm => cm.event_type == 'match').map(cm => cm.event_id);
|
|
71
|
+
//Get unique side ids
|
|
72
|
+
let athlete_ids = cm_resp.competition_matches.filter(cm => cm.side_type_override == 'athlete').map(cm => cm.side_id_override ?? '0');
|
|
73
|
+
let team_ids = cm_resp.competition_matches.filter(cm => cm.side_type_override == 'team').map(cm => cm.side_id_override ?? '0');
|
|
74
|
+
|
|
75
|
+
let c_events:EventProps[] = []
|
|
76
|
+
if(event_ids.length > 0){ c_events = await ManageCompetitionMatchApi.getEventsByEventIds(event_ids) }
|
|
77
|
+
|
|
78
|
+
let c_tournaments:TournamentProps[] = []
|
|
79
|
+
if(tournament_ids.length > 0){ c_tournaments = await ManageCompetitionMatchApi.getTournamentsByTournamentIds(tournament_ids) }
|
|
80
|
+
|
|
81
|
+
let c_matches:MatchProps[] = []
|
|
82
|
+
if(match_ids.length > 0){ c_matches = await ManageCompetitionMatchApi.getMatchesByMatchIds(match_ids) }
|
|
83
|
+
|
|
84
|
+
let c_teams:TeamProps[] = []
|
|
85
|
+
if(team_ids.length > 0){ c_teams = await ManageCompetitionMatchApi.getTeamsByIds(team_ids) }
|
|
86
|
+
|
|
87
|
+
let c_athletes:AthleteProps[] = []
|
|
88
|
+
if(athlete_ids.length > 0){ c_athletes = await ManageCompetitionMatchApi.getAthletesByIds(athlete_ids) }
|
|
89
|
+
|
|
90
|
+
setCompetitionData({
|
|
91
|
+
...competition_data,
|
|
92
|
+
loading: false,
|
|
93
|
+
competition: c,
|
|
94
|
+
leagues: lgs,
|
|
95
|
+
competition_types: options.competition_types,
|
|
96
|
+
competition_payout_types: options.competition_payout_types,
|
|
97
|
+
competition_result_types: options.competition_result_types,
|
|
98
|
+
draft_competition: c,
|
|
99
|
+
competition_matches: cm_resp.competition_matches,
|
|
100
|
+
competition_match_markets: cm_resp.competition_match_markets,
|
|
101
|
+
events: c_events,
|
|
102
|
+
markets: mks,
|
|
103
|
+
tournaments: c_tournaments,
|
|
104
|
+
matches: c_matches,
|
|
105
|
+
teams: c_teams,
|
|
106
|
+
athletes: c_athletes,
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
if(!competition || !draft_competition){
|
|
113
|
+
return (
|
|
114
|
+
<View style={{flex:1}}>
|
|
115
|
+
<ActivityIndicator size='large' color={Colors.brand.midnight} style={{ padding:20, alignSelf:'center' }} />
|
|
116
|
+
</View>
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
console.log(module_size)
|
|
120
|
+
return (
|
|
121
|
+
<View style={{ flex:1 }}>
|
|
122
|
+
<ScrollView style={{ flex:1 }} onLayout={(ev) => {
|
|
123
|
+
const { width, height } = ev.nativeEvent.layout;
|
|
124
|
+
setModuleSize({ height, width })
|
|
125
|
+
}}>
|
|
126
|
+
<View style={{ ...view_styles.wrapper }}>
|
|
127
|
+
<CompetitionInfoForm
|
|
128
|
+
competition={draft_competition}
|
|
129
|
+
width={module_size.width - 20}
|
|
130
|
+
onCompetitionUpdate={(comp) => setCompetitionData({ ...competition_data, draft_competition: comp})}
|
|
131
|
+
/>
|
|
132
|
+
<CompetitionSettingsForm
|
|
133
|
+
competition={draft_competition}
|
|
134
|
+
width={module_size.width - 20}
|
|
135
|
+
competition_result_types={competition_result_types}
|
|
136
|
+
competition_types={competition_types}
|
|
137
|
+
onCompetitionUpdate={(comp) => setCompetitionData({ ...competition_data, draft_competition: comp})}
|
|
138
|
+
/>
|
|
139
|
+
<CompetitionContestsForm
|
|
140
|
+
width={module_size.width - 20}
|
|
141
|
+
competition={draft_competition}
|
|
142
|
+
competition_matches={competition_matches}
|
|
143
|
+
competition_match_markets={competition_match_markets}
|
|
144
|
+
events={events}
|
|
145
|
+
teams={teams}
|
|
146
|
+
athletes={athletes}
|
|
147
|
+
tournaments={tournaments}
|
|
148
|
+
matches={matches}
|
|
149
|
+
leagues={leagues}
|
|
150
|
+
markets={markets}
|
|
151
|
+
onSaveCompetitionMatch={() => console.log('SAVE EVENT')}
|
|
152
|
+
onDeleteCompetitionMatch={() => console.log('DELEVE')}
|
|
153
|
+
onUpdateCompetitionMatch={() => console.log('UPDATE')}
|
|
154
|
+
onSaveCompetitionMatchMarkets={(smms) => console.log(smms)}
|
|
155
|
+
onDeleteCompetitionMatchMarkets={(cmms) => console.log(cmms)}
|
|
156
|
+
/>
|
|
157
|
+
</View>
|
|
158
|
+
</ScrollView>
|
|
159
|
+
</View>
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export default CompetitionManager
|