be-components 1.3.0 → 1.3.2
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/api/index.js +1 -1
- package/lib/commonjs/Competition/api/index.js.map +1 -1
- package/lib/commonjs/Competition/components/CompetitionPlay.js +1 -1
- package/lib/commonjs/Competition/components/CompetitionPlay.js.map +1 -1
- package/lib/commonjs/Competition/components/MarketsCard.js.map +1 -1
- package/lib/commonjs/Competition/index.js +37 -2
- package/lib/commonjs/Competition/index.js.map +1 -1
- package/lib/commonjs/CompetitionManager/api/index.js +153 -35
- package/lib/commonjs/CompetitionManager/api/index.js.map +1 -1
- package/lib/commonjs/CompetitionManager/components/AthleteSelector.js +170 -0
- package/lib/commonjs/CompetitionManager/components/AthleteSelector.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionContestsForm.js +495 -423
- package/lib/commonjs/CompetitionManager/components/CompetitionContestsForm.js.map +1 -1
- package/lib/commonjs/CompetitionManager/components/CompetitionHeader.js +134 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionHeader.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/CompetitionInfoForm.js +96 -73
- package/lib/commonjs/CompetitionManager/components/CompetitionInfoForm.js.map +1 -1
- package/lib/commonjs/CompetitionManager/components/CompetitionMatchMarketCard.js +147 -127
- package/lib/commonjs/CompetitionManager/components/CompetitionMatchMarketCard.js.map +1 -1
- package/lib/commonjs/CompetitionManager/components/CompetitionSettingsForm.js +38 -127
- package/lib/commonjs/CompetitionManager/components/CompetitionSettingsForm.js.map +1 -1
- package/lib/commonjs/CompetitionManager/components/ContestSelector.js +388 -0
- package/lib/commonjs/CompetitionManager/components/ContestSelector.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/ContestSettingsForm.js +436 -0
- package/lib/commonjs/CompetitionManager/components/ContestSettingsForm.js.map +1 -0
- package/lib/commonjs/CompetitionManager/components/MarketSelector.js +36 -26
- package/lib/commonjs/CompetitionManager/components/MarketSelector.js.map +1 -1
- package/lib/commonjs/CompetitionManager/index.js +492 -19
- package/lib/commonjs/CompetitionManager/index.js.map +1 -1
- package/lib/commonjs/Components/SearchBox.js +82 -0
- package/lib/commonjs/Components/SearchBox.js.map +1 -0
- package/lib/module/Competition/api/index.js +1 -1
- package/lib/module/Competition/api/index.js.map +1 -1
- package/lib/module/Competition/components/CompetitionPlay.js +1 -1
- package/lib/module/Competition/components/CompetitionPlay.js.map +1 -1
- package/lib/module/Competition/components/MarketsCard.js.map +1 -1
- package/lib/module/Competition/index.js +37 -2
- package/lib/module/Competition/index.js.map +1 -1
- package/lib/module/CompetitionManager/api/index.js +153 -35
- package/lib/module/CompetitionManager/api/index.js.map +1 -1
- package/lib/module/CompetitionManager/components/AthleteSelector.js +161 -0
- package/lib/module/CompetitionManager/components/AthleteSelector.js.map +1 -0
- package/lib/module/CompetitionManager/components/CompetitionContestsForm.js +493 -425
- package/lib/module/CompetitionManager/components/CompetitionContestsForm.js.map +1 -1
- package/lib/module/CompetitionManager/components/CompetitionHeader.js +127 -0
- package/lib/module/CompetitionManager/components/CompetitionHeader.js.map +1 -0
- package/lib/module/CompetitionManager/components/CompetitionInfoForm.js +99 -76
- package/lib/module/CompetitionManager/components/CompetitionInfoForm.js.map +1 -1
- package/lib/module/CompetitionManager/components/CompetitionMatchMarketCard.js +145 -127
- package/lib/module/CompetitionManager/components/CompetitionMatchMarketCard.js.map +1 -1
- package/lib/module/CompetitionManager/components/CompetitionSettingsForm.js +39 -131
- package/lib/module/CompetitionManager/components/CompetitionSettingsForm.js.map +1 -1
- package/lib/module/CompetitionManager/components/ContestSelector.js +379 -0
- package/lib/module/CompetitionManager/components/ContestSelector.js.map +1 -0
- package/lib/module/CompetitionManager/components/ContestSettingsForm.js +428 -0
- package/lib/module/CompetitionManager/components/ContestSettingsForm.js.map +1 -0
- package/lib/module/CompetitionManager/components/MarketSelector.js +34 -26
- package/lib/module/CompetitionManager/components/MarketSelector.js.map +1 -1
- package/lib/module/CompetitionManager/index.js +493 -20
- package/lib/module/CompetitionManager/index.js.map +1 -1
- package/lib/module/Components/SearchBox.js +73 -0
- package/lib/module/Components/SearchBox.js.map +1 -0
- package/lib/typescript/src/Competition/index.d.ts +2 -1
- package/lib/typescript/src/Competition/index.d.ts.map +1 -1
- package/lib/typescript/src/CompetitionManager/api/index.d.ts +32 -3
- package/lib/typescript/src/CompetitionManager/api/index.d.ts.map +1 -1
- package/lib/typescript/src/CompetitionManager/components/AthleteSelector.d.ts +18 -0
- package/lib/typescript/src/CompetitionManager/components/AthleteSelector.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionContestsForm.d.ts +13 -1
- package/lib/typescript/src/CompetitionManager/components/CompetitionContestsForm.d.ts.map +1 -1
- package/lib/typescript/src/CompetitionManager/components/CompetitionHeader.d.ts +20 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionHeader.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/CompetitionInfoForm.d.ts +2 -1
- package/lib/typescript/src/CompetitionManager/components/CompetitionInfoForm.d.ts.map +1 -1
- package/lib/typescript/src/CompetitionManager/components/CompetitionMatchMarketCard.d.ts +1 -1
- package/lib/typescript/src/CompetitionManager/components/CompetitionMatchMarketCard.d.ts.map +1 -1
- package/lib/typescript/src/CompetitionManager/components/CompetitionSettingsForm.d.ts +3 -3
- package/lib/typescript/src/CompetitionManager/components/CompetitionSettingsForm.d.ts.map +1 -1
- package/lib/typescript/src/CompetitionManager/components/ContestSelector.d.ts +16 -0
- package/lib/typescript/src/CompetitionManager/components/ContestSelector.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/ContestSettingsForm.d.ts +15 -0
- package/lib/typescript/src/CompetitionManager/components/ContestSettingsForm.d.ts.map +1 -0
- package/lib/typescript/src/CompetitionManager/components/MarketSelector.d.ts +3 -2
- package/lib/typescript/src/CompetitionManager/components/MarketSelector.d.ts.map +1 -1
- package/lib/typescript/src/CompetitionManager/index.d.ts +2 -1
- package/lib/typescript/src/CompetitionManager/index.d.ts.map +1 -1
- package/lib/typescript/src/Components/SearchBox.d.ts +10 -0
- package/lib/typescript/src/Components/SearchBox.d.ts.map +1 -0
- package/package.json +2 -1
- package/src/Competition/api/index.ts +3 -3
- package/src/Competition/components/CompetitionPlay.tsx +1 -1
- package/src/Competition/components/MarketsCard.tsx +2 -2
- package/src/Competition/index.tsx +24 -4
- package/src/CompetitionManager/api/index.ts +71 -13
- package/src/CompetitionManager/components/AthleteSelector.tsx +127 -0
- package/src/CompetitionManager/components/CompetitionContestsForm.tsx +156 -261
- package/src/CompetitionManager/components/CompetitionHeader.tsx +101 -0
- package/src/CompetitionManager/components/CompetitionInfoForm.tsx +57 -45
- package/src/CompetitionManager/components/CompetitionMatchMarketCard.tsx +29 -70
- package/src/CompetitionManager/components/CompetitionSettingsForm.tsx +36 -103
- package/src/CompetitionManager/components/ContestSelector.tsx +269 -0
- package/src/CompetitionManager/components/ContestSettingsForm.tsx +281 -0
- package/src/CompetitionManager/components/MarketSelector.tsx +34 -23
- package/src/CompetitionManager/index.tsx +412 -16
- package/src/Components/SearchBox.tsx +54 -0
- package/src/types.d.ts +38 -4
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Image } from 'react-native';
|
|
3
|
+
import type { CompetitionProps } from '../../types';
|
|
4
|
+
import { Button, Text } from '../../Components';
|
|
5
|
+
import Colors from '../../constants/colors';
|
|
6
|
+
import { view_styles } from '../../constants/styles';
|
|
7
|
+
|
|
8
|
+
type CompetitionHeaderProps = {
|
|
9
|
+
width:number,
|
|
10
|
+
action_loading:boolean,
|
|
11
|
+
competition:CompetitionProps,
|
|
12
|
+
competition_valid: {
|
|
13
|
+
valid:boolean,
|
|
14
|
+
info:boolean,
|
|
15
|
+
contests:boolean,
|
|
16
|
+
contest_settings: boolean,
|
|
17
|
+
settings:boolean
|
|
18
|
+
},
|
|
19
|
+
onPause:() => void,
|
|
20
|
+
onResume: () => void,
|
|
21
|
+
onActivate: () => void
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const CompetitionHeader = ({ width, action_loading, competition, competition_valid, onActivate, onPause, onResume }:CompetitionHeaderProps) => {
|
|
25
|
+
|
|
26
|
+
const handleActivate = () => {
|
|
27
|
+
if(!competition_valid.valid){
|
|
28
|
+
return alert(`Please complete all the required sections before activating`)
|
|
29
|
+
}
|
|
30
|
+
onActivate()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const handleResume = () => {
|
|
34
|
+
if(!competition_valid.valid){
|
|
35
|
+
return alert(`Please complete all the required sections before activating`)
|
|
36
|
+
}
|
|
37
|
+
onResume()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<View style={{ backgroundColor:Colors.shades.white, flexGrow:1, minWidth:330, maxWidth:width }}>
|
|
42
|
+
<View nativeID="competition_header" style={{ flexDirection:'row', alignItems:'center', padding:20, borderBottomWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
43
|
+
<View>
|
|
44
|
+
<Image
|
|
45
|
+
source={{ uri: competition.image?.url ?? 'https://res.cloudinary.com/hoabts6mc/image/upload/v1649737862/be_logo_jte2ux.webp' }}
|
|
46
|
+
style={{ height:50, width:50, borderRadius:4 }}
|
|
47
|
+
resizeMode="cover"
|
|
48
|
+
/>
|
|
49
|
+
</View>
|
|
50
|
+
<View style={{ flex:1, marginLeft:10 }}>
|
|
51
|
+
<Text theme='header'>{competition.competition_name}</Text>
|
|
52
|
+
<Text style={{ marginTop:4 }} theme='header_2>'>{competition.competition_description}</Text>
|
|
53
|
+
</View>
|
|
54
|
+
{competition.status == 'pending'?
|
|
55
|
+
<Button
|
|
56
|
+
title={'ACTIVATE'}
|
|
57
|
+
style={{ opacity:competition_valid.valid ? 1: 0.5 }}
|
|
58
|
+
loading={action_loading}
|
|
59
|
+
title_color={Colors.shades.white}
|
|
60
|
+
backgroundColor={Colors.utility.success}
|
|
61
|
+
onPress={() => handleActivate()}
|
|
62
|
+
/>
|
|
63
|
+
:<></>}
|
|
64
|
+
</View>
|
|
65
|
+
{competition.status != 'paused' ?
|
|
66
|
+
<View style={{ ...view_styles.section_header, backgroundColor:Colors.shades.shade100 }}>
|
|
67
|
+
<View style={{ flex:1 }}>
|
|
68
|
+
<Text theme='header'>COMPETITION IS ACTIVE</Text>
|
|
69
|
+
<Text style={{ marginTop:3 }} theme='body'>In order to edit this competition, you must first pause it.</Text>
|
|
70
|
+
</View>
|
|
71
|
+
<Button
|
|
72
|
+
title='PAUSE'
|
|
73
|
+
style={{ opacity:!action_loading && competition_valid.valid ? 1: 0.5 }}
|
|
74
|
+
loading={action_loading}
|
|
75
|
+
title_color={Colors.shades.white}
|
|
76
|
+
backgroundColor={Colors.utility.success}
|
|
77
|
+
onPress={() => onPause()}
|
|
78
|
+
/>
|
|
79
|
+
</View>
|
|
80
|
+
:<></>}
|
|
81
|
+
{competition.status == 'paused' ?
|
|
82
|
+
<View style={{ ...view_styles.section_header, backgroundColor:Colors.shades.shade100 }}>
|
|
83
|
+
<View style={{ flex:1 }}>
|
|
84
|
+
<Text theme='header'>EDITING COMPETITION</Text>
|
|
85
|
+
<Text style={{ marginTop:3 }} theme='body'>Feel free to make changes. When done, simply press resume.</Text>
|
|
86
|
+
</View>
|
|
87
|
+
<Button
|
|
88
|
+
title='RESUME'
|
|
89
|
+
style={{ opacity:!action_loading && competition_valid.valid ? 1: 0.5 }}
|
|
90
|
+
loading={action_loading}
|
|
91
|
+
title_color={Colors.shades.white}
|
|
92
|
+
backgroundColor={Colors.brand.electric}
|
|
93
|
+
onPress={() => handleResume()}
|
|
94
|
+
/>
|
|
95
|
+
</View>
|
|
96
|
+
:<></>}
|
|
97
|
+
</View>
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default CompetitionHeader
|
|
@@ -1,64 +1,104 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import { View, TouchableOpacity } from "react-native"
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { View, TouchableOpacity, Image } from "react-native"
|
|
3
3
|
import { view_styles } from "../../constants/styles"
|
|
4
4
|
//import ImageUploader from '../../Components/ImageUploader';
|
|
5
5
|
import type { CompetitionProps } from '../../types';
|
|
6
|
-
import { Icons, Switch, Text, TextInput } from '../../Components';
|
|
6
|
+
import { Button, Icons, Switch, Text, TextInput } from '../../Components';
|
|
7
7
|
import Colors from '../../constants/colors';
|
|
8
|
+
import ImageUploader from '../../Components/ImageUploader';
|
|
8
9
|
//import DropDown from '../../Components/Dropdown';
|
|
9
10
|
|
|
10
11
|
type CompetitionInfoFormProps = {
|
|
11
12
|
competition:CompetitionProps,
|
|
13
|
+
is_valid?:boolean,
|
|
12
14
|
width: number,
|
|
13
15
|
onCompetitionUpdate:(competition:CompetitionProps) => void
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
const CompetitionInfoForm = ({ competition, width, onCompetitionUpdate }:CompetitionInfoFormProps) => {
|
|
18
|
+
const CompetitionInfoForm = ({ is_valid, competition, width, onCompetitionUpdate }:CompetitionInfoFormProps) => {
|
|
17
19
|
const [ expanded, setExpanded ] = useState(false);
|
|
20
|
+
const [ draft_competition, setDraftCompetition ] = useState<CompetitionProps | undefined>(undefined);
|
|
18
21
|
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setDraftCompetition(competition)
|
|
24
|
+
},[competition])
|
|
19
25
|
|
|
20
|
-
|
|
26
|
+
if(!draft_competition){ return <></> }
|
|
27
|
+
const is_changed = JSON.stringify(draft_competition) != JSON.stringify(competition) ? true : false;
|
|
21
28
|
return (
|
|
22
29
|
<View style={{ ...view_styles.section, flexGrow:1 }}>
|
|
23
|
-
<TouchableOpacity style={view_styles.section_header} onPress={() => setExpanded(!expanded)}>
|
|
24
|
-
|
|
30
|
+
<TouchableOpacity style={{ ...view_styles.section_header, maxWidth:width}} onPress={() => setExpanded(!expanded)}>
|
|
31
|
+
{is_valid ?
|
|
32
|
+
<Icons.CheckCirlceIcon size={16} color={Colors.utility.success} />
|
|
33
|
+
:
|
|
34
|
+
<Icons.AlertIcon size={16} color={Colors.utility.warning} />
|
|
35
|
+
}
|
|
36
|
+
<View style={{ flex:1, marginLeft:10 }}>
|
|
25
37
|
<Text theme='header'>Competition Information</Text>
|
|
26
38
|
<Text style={{ marginTop:3 }} theme='body'>Manage the high level information of this competition</Text>
|
|
27
39
|
</View>
|
|
40
|
+
{is_changed ?
|
|
41
|
+
<Button
|
|
42
|
+
title='SAVE'
|
|
43
|
+
padding={10}
|
|
44
|
+
title_color={Colors.shades.white}
|
|
45
|
+
backgroundColor={Colors.utility.success}
|
|
46
|
+
onPress={() => onCompetitionUpdate(draft_competition)}
|
|
47
|
+
/>
|
|
48
|
+
:
|
|
28
49
|
<Icons.ChevronIcon direction={expanded ? 'up' : 'down'} color={Colors.brand.midnight} size={8} />
|
|
50
|
+
}
|
|
29
51
|
</TouchableOpacity>
|
|
30
52
|
{expanded ?
|
|
31
|
-
<View nativeID="competition_info" style={{ ...view_styles.section_body, minWidth:300, maxWidth:width }}>
|
|
53
|
+
<View nativeID="competition_info" style={{ ...view_styles.section_body, padding:10, minWidth:300, maxWidth:width, backgroundColor:Colors.shades.shade100 }}>
|
|
32
54
|
|
|
33
|
-
<View nativeID="
|
|
55
|
+
<View nativeID="competition_image" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width, borderBottomWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
56
|
+
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
57
|
+
<Text theme='header_2'>Competition Image</Text>
|
|
58
|
+
<Text style={{ marginTop:3 }} theme='body'>Give this competition an image so it is recognizable to those trying to join.</Text>
|
|
59
|
+
</View>
|
|
60
|
+
<ImageUploader
|
|
61
|
+
public_id={`comp_image_${competition.competition_id}_${Math.random()}`}
|
|
62
|
+
onFinishUpload={obj => onCompetitionUpdate({ ...draft_competition, image: { ...obj, url:obj.secure_url } })}
|
|
63
|
+
>
|
|
64
|
+
<Image
|
|
65
|
+
source={{ uri: competition.image?.url }}
|
|
66
|
+
style={{ height: 50, width:50, borderRadius:4 }}
|
|
67
|
+
resizeMode='cover'
|
|
68
|
+
/>
|
|
69
|
+
<Text size={12} color={Colors.brand.electric} textAlign='center'>CHANGE</Text>
|
|
70
|
+
</ImageUploader>
|
|
71
|
+
</View>
|
|
72
|
+
|
|
73
|
+
<View nativeID="competition_name" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width, borderBottomWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
34
74
|
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
35
75
|
<Text theme='header_2'>Competition Name</Text>
|
|
36
76
|
<Text style={{ marginTop:3 }} theme='body'>Give the competition a memorable name that aligns with the type and payout.</Text>
|
|
37
77
|
</View>
|
|
38
78
|
<TextInput
|
|
39
79
|
style={{ ...view_styles.input, flexGrow:1, margin:5 }}
|
|
40
|
-
onChangeText={(text) =>
|
|
41
|
-
value={
|
|
80
|
+
onChangeText={(text) => setDraftCompetition({ ...draft_competition, competition_name:text })}
|
|
81
|
+
value={draft_competition.competition_name}
|
|
42
82
|
placeholder="Competition Name"
|
|
43
83
|
placeholderTextColor={Colors.brand.slate}
|
|
44
84
|
/>
|
|
45
85
|
</View>
|
|
46
86
|
|
|
47
|
-
<View nativeID="competition_description" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width}}>
|
|
48
|
-
<View style={{ flex:1, margin:5, minWidth:200
|
|
87
|
+
<View nativeID="competition_description" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width, marginTop:10, borderBottomWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
88
|
+
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
49
89
|
<Text theme='header_2'>Competition Description</Text>
|
|
50
90
|
<Text style={{ marginTop:3 }} theme='body'>Give the competition a memorable description that would entice users to participate.</Text>
|
|
51
91
|
</View>
|
|
52
92
|
<TextInput
|
|
53
93
|
style={{ ...view_styles.input, flexGrow:1, margin:5 }}
|
|
54
|
-
onChangeText={(text) =>
|
|
55
|
-
value={
|
|
94
|
+
onChangeText={(text) => setDraftCompetition({ ...draft_competition, competition_description:text })}
|
|
95
|
+
value={draft_competition.competition_description}
|
|
56
96
|
placeholder="Pick 5 games ATS from NFL Week 6 matchups"
|
|
57
97
|
placeholderTextColor={Colors.brand.slate}
|
|
58
98
|
/>
|
|
59
99
|
</View>
|
|
60
100
|
|
|
61
|
-
<View nativeID="invite_only" style={{ ...view_styles.body_row, flexWrap:'wrap' }}>
|
|
101
|
+
<View nativeID="invite_only" style={{ ...view_styles.body_row, flexWrap:'wrap', marginTop:10, borderBottomWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
62
102
|
<View style={{ flex:1, margin:5, marginRight:15 }}>
|
|
63
103
|
<Text theme='header_2'>Make Private</Text>
|
|
64
104
|
<Text style={{ marginTop:3 }} theme='body'>Only access this competition using an invite code.</Text>
|
|
@@ -66,37 +106,9 @@ const CompetitionInfoForm = ({ competition, width, onCompetitionUpdate }:Competi
|
|
|
66
106
|
<Switch
|
|
67
107
|
value={competition.invite_only}
|
|
68
108
|
switch_type="on_off"
|
|
69
|
-
onChange={(value) => onCompetitionUpdate({ ...
|
|
70
|
-
/>
|
|
71
|
-
</View>
|
|
72
|
-
{false ?
|
|
73
|
-
<View nativeID="competition_description" style={{ ...view_styles.body_row, flexWrap:'wrap', maxWidth:width}}>
|
|
74
|
-
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
75
|
-
<Text theme='header_2'>League Name</Text>
|
|
76
|
-
<Text style={{ marginTop:3 }} theme='body'>Set the name of the league</Text>
|
|
77
|
-
</View>
|
|
78
|
-
<TextInput
|
|
79
|
-
style={{ ...view_styles.input, flexGrow:1 }}
|
|
80
|
-
onChangeText={(text) => onCompetitionUpdate({ ...competition, league_name:text })}
|
|
81
|
-
value={competition.league_name}
|
|
82
|
-
placeholder="Add a league name"
|
|
83
|
-
placeholderTextColor={Colors.brand.slate}
|
|
84
|
-
/>
|
|
85
|
-
</View>
|
|
86
|
-
:<></>}
|
|
87
|
-
{false ?
|
|
88
|
-
<View nativeID="invite_only" style={{ ...view_styles.body_row, flexWrap:'wrap' }}>
|
|
89
|
-
<View style={{ flex:1, margin:5, minWidth:200 }}>
|
|
90
|
-
<Text theme='header_2'>Additional Prize</Text>
|
|
91
|
-
<Text style={{ marginTop:3 }} theme='body'>Is there an additional prize that will be delivered?</Text>
|
|
92
|
-
</View>
|
|
93
|
-
<Switch
|
|
94
|
-
value={competition.prize_override ? true : false}
|
|
95
|
-
switch_type="on_off"
|
|
96
|
-
onChange={(value) => onCompetitionUpdate({ ...competition, prize_override: value ? 'Additional Prize!': undefined })}
|
|
109
|
+
onChange={(value) => onCompetitionUpdate({ ...draft_competition, invite_only: value })}
|
|
97
110
|
/>
|
|
98
111
|
</View>
|
|
99
|
-
:<></>}
|
|
100
112
|
</View>
|
|
101
113
|
:<></>}
|
|
102
114
|
</View>
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import React from "react"
|
|
1
|
+
import { TouchableOpacity, View } from "react-native"
|
|
2
|
+
import React, { useState } from "react"
|
|
4
3
|
import type { CompetitionMatchMarketProps, MarketProps } from "../../types";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { Button, Text, TextInput } from "../../Components";
|
|
5
|
+
import Colors from "../../constants/colors";
|
|
6
|
+
import { ManageCompetitionHelpers } from "../api";
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
type CompetitionMatchMarketCardProps = {
|
|
@@ -20,38 +19,24 @@ type CompetitionMatchMarketCardProps = {
|
|
|
20
19
|
onGenerateMarkets: () => void
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
const CompetitionMatchMarketCard = ({ }:CompetitionMatchMarketCardProps) => {
|
|
24
|
-
|
|
25
|
-
/*
|
|
26
|
-
const [ setDraftCompetitionMatchMarket ] = useState<CompetitionMatchMarketProps | undefined>(undefined)
|
|
22
|
+
const CompetitionMatchMarketCard = ({ market, competition_match_markets, onUpdateMarkets }:CompetitionMatchMarketCardProps) => {
|
|
23
|
+
const [ draft_competition_match_market, setDraftCompetitionMatchMarket ] = useState<CompetitionMatchMarketProps | undefined>(undefined)
|
|
27
24
|
|
|
28
25
|
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
26
|
const o_side = competition_match_markets.find(cmm => cmm.side != market.trade_side);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
/*
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
45
30
|
|
|
46
31
|
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 }
|
|
32
|
+
if(isNaN(cmm.odds as number)){ return false }
|
|
33
|
+
if(isNaN(cmm.var_1 as number)){ return false }
|
|
34
|
+
if(market.type != 'Spread' && parseFloat(cmm.var_1 as string) < 0){ return false }
|
|
50
35
|
if(market.var_1_required && cmm.var_1 == 0){ return false }
|
|
51
36
|
return true
|
|
52
37
|
}
|
|
53
|
-
|
|
54
|
-
|
|
38
|
+
|
|
39
|
+
|
|
55
40
|
const handleUpdateCMM = () => {
|
|
56
41
|
if(!draft_competition_match_market){ return }
|
|
57
42
|
//First check if the draft one is valie
|
|
@@ -62,22 +47,21 @@ const CompetitionMatchMarketCard = ({ }:CompetitionMatchMarketCardProps) => {
|
|
|
62
47
|
//now we need to flip sides
|
|
63
48
|
let other_cmm = competition_match_markets.find(ncm => ncm.side != cmm.side)
|
|
64
49
|
if(other_cmm){
|
|
65
|
-
console.log('THERE WAS AN OTHER SIDE')
|
|
66
50
|
other_cmm.var_1 = cmm.var_1
|
|
67
|
-
other_cmm.odds = cmm.odds * -1
|
|
51
|
+
other_cmm.odds = parseFloat(cmm.odds as string) * -1
|
|
68
52
|
other_cmm.probability = ManageCompetitionHelpers.calcProbabilityFromOdds(other_cmm.odds)
|
|
69
53
|
} else {
|
|
70
54
|
return alert('NOT HANDLED. PLEASE AUTO GENERATE FIRST')
|
|
71
55
|
}
|
|
72
56
|
if(market.type == 'Spread'){
|
|
73
|
-
other_cmm.var_1 = other_cmm.var_1 * -1
|
|
57
|
+
other_cmm.var_1 = parseFloat(other_cmm.var_1 as string) * -1
|
|
74
58
|
}
|
|
75
|
-
onUpdateMarkets([{ ...cmm, probability: ManageCompetitionHelpers.calcProbabilityFromOdds(cmm.odds), status:'pending' }, { ...other_cmm, status:'pending'}])
|
|
59
|
+
onUpdateMarkets([{ ...cmm, probability: ManageCompetitionHelpers.calcProbabilityFromOdds(parseFloat(cmm.odds as string)), status:'pending' }, { ...other_cmm, status:'pending'}])
|
|
76
60
|
return setDraftCompetitionMatchMarket(undefined)
|
|
77
61
|
}
|
|
78
|
-
|
|
62
|
+
|
|
79
63
|
|
|
80
|
-
|
|
64
|
+
|
|
81
65
|
|
|
82
66
|
if(draft_competition_match_market){
|
|
83
67
|
return (
|
|
@@ -86,13 +70,13 @@ const CompetitionMatchMarketCard = ({ }:CompetitionMatchMarketCardProps) => {
|
|
|
86
70
|
{market.var_1_required ?
|
|
87
71
|
<TextInput
|
|
88
72
|
style={{ padding:10, borderRadius:4, backgroundColor:Colors.shades.white, marginRight:20 }}
|
|
89
|
-
value={draft_competition_match_market.var_1}
|
|
73
|
+
value={draft_competition_match_market.var_1 as string}
|
|
90
74
|
onChangeText={(text) => setDraftCompetitionMatchMarket({ ...draft_competition_match_market, var_1: text })}
|
|
91
75
|
/>
|
|
92
76
|
:<></>}
|
|
93
77
|
<TextInput
|
|
94
78
|
style={{ padding:10, borderRadius:4, backgroundColor:Colors.shades.white }}
|
|
95
|
-
value={draft_competition_match_market.odds}
|
|
79
|
+
value={draft_competition_match_market.odds as string}
|
|
96
80
|
onChangeText={(text) => setDraftCompetitionMatchMarket({ ...draft_competition_match_market, odds: text })}
|
|
97
81
|
/>
|
|
98
82
|
<Button
|
|
@@ -104,52 +88,27 @@ const CompetitionMatchMarketCard = ({ }:CompetitionMatchMarketCardProps) => {
|
|
|
104
88
|
</View>
|
|
105
89
|
)
|
|
106
90
|
}
|
|
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
91
|
|
|
129
|
-
return <></>
|
|
130
|
-
/*
|
|
131
92
|
if(!o_side || !trade_side){ return <></> }
|
|
132
93
|
|
|
133
94
|
return (
|
|
134
95
|
<View style={{ flexDirection:'row' }}>
|
|
135
96
|
<View>
|
|
136
|
-
<
|
|
137
|
-
|
|
138
|
-
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{
|
|
139
|
-
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{ManageCompetitionHelpers.getOddsLabel(o_side.odds)}</Text>
|
|
97
|
+
<TouchableOpacity disabled style={{ width:75, padding:5, backgroundColor:o_side.status == 'error' ? Colors.highlights.highlight300Faded :Colors.shades.shade600, borderRadius:4, marginRight:3 }} onPress={() => setDraftCompetitionMatchMarket(o_side)}>
|
|
98
|
+
<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 as number, market)}`:''}</Text>
|
|
99
|
+
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{ManageCompetitionHelpers.getOddsLabel(o_side.odds as number)}</Text>
|
|
140
100
|
</TouchableOpacity>
|
|
141
101
|
</View>
|
|
142
102
|
<View>
|
|
143
|
-
<
|
|
144
|
-
|
|
145
|
-
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{
|
|
146
|
-
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{ManageCompetitionHelpers.getOddsLabel(trade_side.odds)}</Text>
|
|
103
|
+
<TouchableOpacity disabled style={{ width:75, padding:5, backgroundColor:trade_side.status == 'error' ? Colors.highlights.highlight300Faded :Colors.shades.shade600, borderRadius:4, marginLeft:3 }} onPress={() => setDraftCompetitionMatchMarket(trade_side)}>
|
|
104
|
+
<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 as number, market)}`:''}</Text>
|
|
105
|
+
<Text textAlign="center" size={12} color={Colors.brand.midnight} weight='semibold'>{ManageCompetitionHelpers.getOddsLabel(trade_side.odds as number)}</Text>
|
|
147
106
|
</TouchableOpacity>
|
|
148
107
|
</View>
|
|
149
108
|
|
|
150
109
|
</View>
|
|
151
110
|
)
|
|
152
|
-
|
|
111
|
+
|
|
153
112
|
}
|
|
154
113
|
|
|
155
114
|
export default CompetitionMatchMarketCard
|