be-components 1.9.7 → 1.9.9
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/Components/Icons.js +186 -0
- package/lib/commonjs/Components/Icons.js.map +1 -1
- package/lib/commonjs/Components/ViewportObserver.js.map +1 -1
- package/lib/commonjs/MarketComponents/api/index.js +10 -1
- package/lib/commonjs/MarketComponents/api/index.js.map +1 -1
- package/lib/commonjs/MarketComponents/components/AthleteMarket/index.js +7 -2
- package/lib/commonjs/MarketComponents/components/AthleteMarket/index.js.map +1 -1
- package/lib/commonjs/MarketComponents/components/BetScopeIndicator.js +19 -0
- package/lib/commonjs/MarketComponents/components/BetScopeIndicator.js.map +1 -0
- package/lib/commonjs/MarketComponents/components/MarketButton/index.js +6 -1
- package/lib/commonjs/MarketComponents/components/MarketButton/index.js.map +1 -1
- package/lib/commonjs/MarketComponents/components/OrderGradeBar.js +2 -2
- package/lib/commonjs/MarketComponents/components/OrderGradeBar.js.map +1 -1
- package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js +125 -6
- package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
- package/lib/commonjs/Poll/components/CampaignHeader.js +53 -0
- package/lib/commonjs/Poll/components/CampaignHeader.js.map +1 -0
- package/lib/commonjs/Poll/components/CampaignLeaderboard.js +295 -0
- package/lib/commonjs/Poll/components/CampaignLeaderboard.js.map +1 -0
- package/lib/commonjs/Poll/components/CampaignPlay.js +11 -89
- package/lib/commonjs/Poll/components/CampaignPlay.js.map +1 -1
- package/lib/commonjs/Poll/components/CampaignProgressBar.js +0 -1
- package/lib/commonjs/Poll/components/CampaignProgressBar.js.map +1 -1
- package/lib/commonjs/Poll/components/CampaignResult.js +44 -345
- package/lib/commonjs/Poll/components/CampaignResult.js.map +1 -1
- package/lib/commonjs/Poll/components/PollCard.js +2 -1
- package/lib/commonjs/Poll/components/PollCard.js.map +1 -1
- package/lib/commonjs/Poll/components/PollQuestionsSection.js +81 -0
- package/lib/commonjs/Poll/components/PollQuestionsSection.js.map +1 -0
- package/lib/commonjs/Poll/components/PollSelectCard.js +1 -2
- package/lib/commonjs/Poll/components/PollSelectCard.js.map +1 -1
- package/lib/commonjs/Poll/index.js +132 -36
- package/lib/commonjs/Poll/index.js.map +1 -1
- package/lib/module/Components/Icons.js +186 -0
- package/lib/module/Components/Icons.js.map +1 -1
- package/lib/module/Components/ViewportObserver.js.map +1 -1
- package/lib/module/MarketComponents/api/index.js +10 -1
- package/lib/module/MarketComponents/api/index.js.map +1 -1
- package/lib/module/MarketComponents/components/AthleteMarket/index.js +8 -3
- package/lib/module/MarketComponents/components/AthleteMarket/index.js.map +1 -1
- package/lib/module/MarketComponents/components/BetScopeIndicator.js +12 -0
- package/lib/module/MarketComponents/components/BetScopeIndicator.js.map +1 -0
- package/lib/module/MarketComponents/components/MarketButton/index.js +6 -1
- package/lib/module/MarketComponents/components/MarketButton/index.js.map +1 -1
- package/lib/module/MarketComponents/components/OrderGradeBar.js +2 -2
- package/lib/module/MarketComponents/components/OrderGradeBar.js.map +1 -1
- package/lib/module/MarketComponents/components/TeamEventMarket/index.js +126 -7
- package/lib/module/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
- package/lib/module/Poll/components/CampaignHeader.js +46 -0
- package/lib/module/Poll/components/CampaignHeader.js.map +1 -0
- package/lib/module/Poll/components/CampaignLeaderboard.js +286 -0
- package/lib/module/Poll/components/CampaignLeaderboard.js.map +1 -0
- package/lib/module/Poll/components/CampaignPlay.js +11 -89
- package/lib/module/Poll/components/CampaignPlay.js.map +1 -1
- package/lib/module/Poll/components/CampaignProgressBar.js +0 -1
- package/lib/module/Poll/components/CampaignProgressBar.js.map +1 -1
- package/lib/module/Poll/components/CampaignResult.js +48 -348
- package/lib/module/Poll/components/CampaignResult.js.map +1 -1
- package/lib/module/Poll/components/PollCard.js +2 -1
- package/lib/module/Poll/components/PollCard.js.map +1 -1
- package/lib/module/Poll/components/PollQuestionsSection.js +72 -0
- package/lib/module/Poll/components/PollQuestionsSection.js.map +1 -0
- package/lib/module/Poll/components/PollSelectCard.js +1 -2
- package/lib/module/Poll/components/PollSelectCard.js.map +1 -1
- package/lib/module/Poll/index.js +133 -38
- package/lib/module/Poll/index.js.map +1 -1
- package/lib/typescript/src/Components/Icons.d.ts +2 -0
- package/lib/typescript/src/Components/Icons.d.ts.map +1 -1
- package/lib/typescript/src/Components/ViewportObserver.d.ts.map +1 -1
- package/lib/typescript/src/MarketComponents/api/index.d.ts +1 -0
- package/lib/typescript/src/MarketComponents/api/index.d.ts.map +1 -1
- package/lib/typescript/src/MarketComponents/components/AthleteMarket/index.d.ts +2 -2
- package/lib/typescript/src/MarketComponents/components/AthleteMarket/index.d.ts.map +1 -1
- package/lib/typescript/src/MarketComponents/components/BetScopeIndicator.d.ts +7 -0
- package/lib/typescript/src/MarketComponents/components/BetScopeIndicator.d.ts.map +1 -0
- package/lib/typescript/src/MarketComponents/components/MarketButton/index.d.ts +2 -2
- package/lib/typescript/src/MarketComponents/components/MarketButton/index.d.ts.map +1 -1
- package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts +4 -2
- package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts.map +1 -1
- package/lib/typescript/src/MarketComponents/index.d.ts +5 -4
- package/lib/typescript/src/MarketComponents/index.d.ts.map +1 -1
- package/lib/typescript/src/Poll/components/CampaignHeader.d.ts +9 -0
- package/lib/typescript/src/Poll/components/CampaignHeader.d.ts.map +1 -0
- package/lib/typescript/src/Poll/components/CampaignLeaderboard.d.ts +12 -0
- package/lib/typescript/src/Poll/components/CampaignLeaderboard.d.ts.map +1 -0
- package/lib/typescript/src/Poll/components/CampaignPlay.d.ts.map +1 -1
- package/lib/typescript/src/Poll/components/CampaignProgressBar.d.ts.map +1 -1
- package/lib/typescript/src/Poll/components/CampaignResult.d.ts +3 -7
- package/lib/typescript/src/Poll/components/CampaignResult.d.ts.map +1 -1
- package/lib/typescript/src/Poll/components/PollCard.d.ts.map +1 -1
- package/lib/typescript/src/Poll/components/PollQuestionsSection.d.ts +11 -0
- package/lib/typescript/src/Poll/components/PollQuestionsSection.d.ts.map +1 -0
- package/lib/typescript/src/Poll/components/PollSelectCard.d.ts +1 -2
- package/lib/typescript/src/Poll/components/PollSelectCard.d.ts.map +1 -1
- package/lib/typescript/src/Poll/index.d.ts +4 -2
- package/lib/typescript/src/Poll/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Components/Icons.tsx +64 -0
- package/src/Components/ViewportObserver.tsx +2 -4
- package/src/MarketComponents/api/index.ts +10 -1
- package/src/MarketComponents/components/AthleteMarket/index.tsx +12 -4
- package/src/MarketComponents/components/BetScopeIndicator.tsx +17 -0
- package/src/MarketComponents/components/MarketButton/index.tsx +5 -2
- package/src/MarketComponents/components/OrderGradeBar.tsx +2 -2
- package/src/MarketComponents/components/TeamEventMarket/index.tsx +75 -10
- package/src/Poll/components/CampaignHeader.tsx +35 -0
- package/src/Poll/components/CampaignLeaderboard.tsx +181 -0
- package/src/Poll/components/CampaignPlay.tsx +11 -82
- package/src/Poll/components/CampaignProgressBar.tsx +0 -1
- package/src/Poll/components/CampaignResult.tsx +42 -162
- package/src/Poll/components/PollCard.tsx +2 -1
- package/src/Poll/components/PollQuestionsSection.tsx +66 -0
- package/src/Poll/components/PollSelectCard.tsx +2 -3
- package/src/Poll/index.tsx +120 -31
- package/src/types.d.ts +1 -0
package/src/Components/Icons.tsx
CHANGED
|
@@ -1199,13 +1199,77 @@ const MarketClosedIcon = ({color, size}:IconProps) => {
|
|
|
1199
1199
|
)
|
|
1200
1200
|
}
|
|
1201
1201
|
|
|
1202
|
+
const QuestionIcon = ({ color, size }:IconProps) => {
|
|
1203
|
+
return (
|
|
1204
|
+
<svg width={`${size ?? 18}`} height={`${size ?? 18}`} viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
1205
|
+
<title>question-circle-svgrepo-com</title>
|
|
1206
|
+
<g id="ss" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
1207
|
+
<g id="question-circle-svgrepo-com" transform="translate(1.000000, 1.000000)">
|
|
1208
|
+
<path d="M9.75,8.25 C9.75,7.007364 10.7574,6 12,6 C13.2426,6 14.25,7.007364 14.25,8.25 C14.25,9.07494 13.806,9.7962 13.14408,10.18788 C12.5736,10.52532 12,11.03724 12,11.7 L12,13.2" id="Path" stroke={color ?? Colors.brand.midnight} stroke-width="2" stroke-linecap="round"></path>
|
|
1209
|
+
<circle id="Oval" fill={color ?? Colors.brand.midnight} fill-rule="nonzero" cx="12" cy="16.8" r="1.2"></circle>
|
|
1210
|
+
<path d="M6,1.605384 C7.765044,0.584364 9.81432,0 12,0 C18.62736,0 24,5.37258 24,12 C24,18.62736 18.62736,24 12,24 C5.37258,24 0,18.62736 0,12 C0,9.81432 0.584364,7.765044 1.605384,6" id="Path" stroke={color ?? Colors.brand.midnight} stroke-width="2" stroke-linecap="round"></path>
|
|
1211
|
+
</g>
|
|
1212
|
+
</g>
|
|
1213
|
+
</svg>
|
|
1214
|
+
)
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
const BetScopeSuccessIcon = ({ size }:IconProps) => {
|
|
1218
|
+
return (
|
|
1219
|
+
<svg width={`${size ?? 18}`} height={`${size ?? 18}`} viewBox="0 0 38 38" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
1220
|
+
<title>Group 2</title>
|
|
1221
|
+
<defs>
|
|
1222
|
+
<path d="M30.2225952,11.2208759 C28.2270706,5.27982546 22.6133387,1 16,1 C9.38651858,1 3.7726871,5.28001018 1.77727561,11.2212605 M1.30519687,12.9747777 C1.10509087,13.9519227 1,14.9636887 1,16 C1,22.5314971 5.17455318,28.087975 11.0010783,30.1468525 M12.972972,30.6944332 C13.9506762,30.8947796 14.9630503,31 16,31 C24.2842712,31 31,24.2842712 31,16 C31,15.0071351 30.9035361,14.0368005 30.7194692,13.0978572" id="path-1"></path>
|
|
1223
|
+
<filter x="-21.7%" y="-15.0%" width="143.3%" height="143.3%" filterUnits="objectBoundingBox" id="filter-2">
|
|
1224
|
+
<feMorphology radius="1" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter1"></feMorphology>
|
|
1225
|
+
<feOffset dx="0" dy="2" in="shadowSpreadOuter1" result="shadowOffsetOuter1"></feOffset>
|
|
1226
|
+
<feMorphology radius="1" operator="erode" in="SourceAlpha" result="shadowInner"></feMorphology>
|
|
1227
|
+
<feOffset dx="0" dy="2" in="shadowInner" result="shadowInner"></feOffset>
|
|
1228
|
+
<feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"></feComposite>
|
|
1229
|
+
<feGaussianBlur stdDeviation="1.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
|
1230
|
+
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
|
1231
|
+
</filter>
|
|
1232
|
+
<path d="M17,5 C10.372583,5 5,10.372583 5,17" id="path-3"></path>
|
|
1233
|
+
<filter x="-66.7%" y="-50.0%" width="233.3%" height="233.3%" filterUnits="objectBoundingBox" id="filter-4">
|
|
1234
|
+
<feMorphology radius="1" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter1"></feMorphology>
|
|
1235
|
+
<feOffset dx="0" dy="2" in="shadowSpreadOuter1" result="shadowOffsetOuter1"></feOffset>
|
|
1236
|
+
<feMorphology radius="1" operator="erode" in="SourceAlpha" result="shadowInner"></feMorphology>
|
|
1237
|
+
<feOffset dx="0" dy="2" in="shadowInner" result="shadowInner"></feOffset>
|
|
1238
|
+
<feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"></feComposite>
|
|
1239
|
+
<feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
|
1240
|
+
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
|
1241
|
+
</filter>
|
|
1242
|
+
</defs>
|
|
1243
|
+
<g id="ss" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
1244
|
+
<g id="Group-2" transform="translate(3.000000, 1.000000)">
|
|
1245
|
+
<g id="Group">
|
|
1246
|
+
<circle id="Oval" fill="#FFFFFF" cx="16" cy="16" r="16"></circle>
|
|
1247
|
+
<g id="Shape">
|
|
1248
|
+
<use fill="black" fill-opacity="1" filter="url(#filter-2)"></use>
|
|
1249
|
+
<use stroke="#F46D2B" stroke-width="2"></use>
|
|
1250
|
+
</g>
|
|
1251
|
+
<g id="Path" stroke-linecap="round">
|
|
1252
|
+
<use fill="black" fill-opacity="1" filter="url(#filter-4)"></use>
|
|
1253
|
+
<use stroke="#010101" stroke-width="2"></use>
|
|
1254
|
+
</g>
|
|
1255
|
+
</g>
|
|
1256
|
+
<g id="checkmark" transform="translate(12.000000, 13.000000)" fill="#F46D2B" fill-rule="nonzero" stroke="#F46D2B" stroke-linejoin="round" stroke-width="0.5">
|
|
1257
|
+
<polygon id="Path" points="0 3.46409675 0.78760393 2.67649282 2.66137566 4.53514739 7.21239607 0 8 0.802721088 2.66137566 6.14058957"></polygon>
|
|
1258
|
+
</g>
|
|
1259
|
+
</g>
|
|
1260
|
+
</g>
|
|
1261
|
+
</svg>
|
|
1262
|
+
)
|
|
1263
|
+
}
|
|
1202
1264
|
|
|
1203
1265
|
export default {
|
|
1204
1266
|
SearchIcon,
|
|
1205
1267
|
LiquidityIcon,
|
|
1206
1268
|
EyeOnIcon,
|
|
1207
1269
|
MarketClosedIcon,
|
|
1270
|
+
BetScopeSuccessIcon,
|
|
1208
1271
|
AlertIcon,
|
|
1272
|
+
QuestionIcon,
|
|
1209
1273
|
PieIcon,
|
|
1210
1274
|
BankIcon,
|
|
1211
1275
|
SquaresIcon,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState, useMemo, useEffect } from "react";
|
|
2
2
|
|
|
3
3
|
export const useIsInViewport = (ref:any) => {
|
|
4
|
-
const [isIntersecting, setIsIntersecting] = useState(false);
|
|
4
|
+
const [ isIntersecting, setIsIntersecting ] = useState(false);
|
|
5
5
|
|
|
6
6
|
const observer = useMemo(
|
|
7
7
|
() =>
|
|
@@ -14,14 +14,12 @@ export const useIsInViewport = (ref:any) => {
|
|
|
14
14
|
);
|
|
15
15
|
|
|
16
16
|
useEffect(() => {
|
|
17
|
-
|
|
17
|
+
if(!ref?.current){ return }
|
|
18
18
|
observer.observe(ref.current);
|
|
19
|
-
|
|
20
19
|
return () => {
|
|
21
20
|
observer.disconnect();
|
|
22
21
|
};
|
|
23
22
|
|
|
24
23
|
}, [ref, observer]);
|
|
25
|
-
|
|
26
24
|
return isIntersecting;
|
|
27
25
|
}
|
|
@@ -3,6 +3,7 @@ import { APIOverrides } from "../../ApiOverrides"
|
|
|
3
3
|
import type { AthleteProps, EventOrderStatProps, EventProps, MarketProps, MarketSideOptionProps, MatchProps, OrderProps, TeamProps, TournamentProps } from "../../types"
|
|
4
4
|
|
|
5
5
|
let EVENT_SVC_API = ''
|
|
6
|
+
let AUTH_SVC_API = ''
|
|
6
7
|
|
|
7
8
|
export { MarketComponentApi, MarketComponentHelpers }
|
|
8
9
|
|
|
@@ -11,7 +12,7 @@ const MarketComponentApi = {
|
|
|
11
12
|
const endpoints = APIOverrides.getEndpoints();
|
|
12
13
|
EVENT_SVC_API = endpoints['EVENT_SVC_API'] as string;
|
|
13
14
|
//MK_SVC_API = endpoints['MK_SVC_API'] as string;
|
|
14
|
-
|
|
15
|
+
AUTH_SVC_API = endpoints['AUTH_SVC_API'] as string;
|
|
15
16
|
},
|
|
16
17
|
getAthletesByTeamId: async(team_id:string):Promise<AthleteProps[]> => {
|
|
17
18
|
try {
|
|
@@ -21,6 +22,14 @@ const MarketComponentApi = {
|
|
|
21
22
|
console.log(e)
|
|
22
23
|
return []
|
|
23
24
|
}
|
|
25
|
+
},
|
|
26
|
+
getCompanyById: async(company_id:string) => {
|
|
27
|
+
try {
|
|
28
|
+
const resp = await axios.get(`${AUTH_SVC_API}/v1/companies/company/id/${company_id}`)
|
|
29
|
+
return resp.data
|
|
30
|
+
} catch (e) {
|
|
31
|
+
return undefined
|
|
32
|
+
}
|
|
24
33
|
}
|
|
25
34
|
}
|
|
26
35
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback } from 'react';
|
|
1
|
+
import React, { useCallback, useMemo } from 'react';
|
|
2
2
|
import { View, TouchableOpacity } from 'react-native';
|
|
3
3
|
import type { AthleteProps, BestAvailableOrderProps, EventOrderStatProps, EventProps, MarketProps, MarketSideOptionProps, OrderProps, TradeProps } from "../../../types"
|
|
4
4
|
import { view_styles } from '../../../constants/styles';
|
|
@@ -29,8 +29,11 @@ type AthleteMarketProps = {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const AthleteMarket = ({ event, show_event, hide_liquidity, hide_stat_banner, width, athlete, market, event_order_stats, default_price_view, latest_trades, show_grades, best_available_orders, onOrder, onView, onTradeLongPress }:AthleteMarketProps) => {
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
const { liquidity, open_order_count } = MarketComponentHelpers.getLiqudity(event_order_stats)
|
|
35
|
+
const is_locked = useMemo(() => MarketComponentHelpers.isEventMarketLocked(event, market.market_id),[JSON.stringify(event.supported_markets)])
|
|
36
|
+
|
|
34
37
|
const renderSides = useCallback((data:{ item:MarketSideOptionProps, index:number, market:MarketProps }) => {
|
|
35
38
|
const ba_order = best_available_orders.find(o => o.market_id == market.market_id && o.side_type == 'athlete' && o.side_id == athlete.athlete_id && o.side == data.item.side && o.show);
|
|
36
39
|
const side_details = MarketComponentHelpers.getTeamEventSideIds(event, market, data.item, athlete, undefined);
|
|
@@ -121,4 +124,9 @@ const AthleteMarket = ({ event, show_event, hide_liquidity, hide_stat_banner, wi
|
|
|
121
124
|
)
|
|
122
125
|
}
|
|
123
126
|
|
|
124
|
-
export default AthleteMarket
|
|
127
|
+
export default React.memo(AthleteMarket, (left, right) => {
|
|
128
|
+
if(JSON.stringify(left) != JSON.stringify(right)){
|
|
129
|
+
return false
|
|
130
|
+
}
|
|
131
|
+
return true
|
|
132
|
+
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
type BetScopeIndicatorProps = {
|
|
5
|
+
bet_scope_grade?: number
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const BetScopeIndicator = ({ bet_scope_grade }:BetScopeIndicatorProps) => {
|
|
9
|
+
if(!bet_scope_grade || bet_scope_grade < 100){ return <></> }
|
|
10
|
+
return (
|
|
11
|
+
<View>
|
|
12
|
+
|
|
13
|
+
</View>
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default React.memo(BetScopeIndicator, (left, right) => left.bet_scope_grade == right.bet_scope_grade)
|
|
@@ -43,7 +43,7 @@ const MarketCard = ({ side_option, locked, show_grades, market, trade, order, on
|
|
|
43
43
|
}, 600);
|
|
44
44
|
}
|
|
45
45
|
},[trade])
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
return (
|
|
48
48
|
<TouchableOpacity
|
|
49
49
|
style={{ flex:1, backgroundColor:color, borderRadius:4}}
|
|
@@ -81,4 +81,7 @@ const MarketCard = ({ side_option, locked, show_grades, market, trade, order, on
|
|
|
81
81
|
)
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
export default MarketCard
|
|
84
|
+
export default React.memo(MarketCard, (left, right) => {
|
|
85
|
+
if(JSON.stringify(left) != JSON.stringify(right)){ return false }
|
|
86
|
+
return true
|
|
87
|
+
})
|
|
@@ -68,7 +68,7 @@ const OrderGradeBar = ({ grade, view_type, mask, onSelectGrade }:OrderGradeBarPr
|
|
|
68
68
|
if(!grade && grade !== 0){ return <></> }
|
|
69
69
|
//Check if the grade is greater than the minumum of the box
|
|
70
70
|
const filled = grade >= data.item.min ? true : false
|
|
71
|
-
const success = grade >
|
|
71
|
+
const success = grade > 100 ? true : false
|
|
72
72
|
const locked = !premium ? true : false
|
|
73
73
|
|
|
74
74
|
//Render the box
|
|
@@ -84,7 +84,7 @@ const OrderGradeBar = ({ grade, view_type, mask, onSelectGrade }:OrderGradeBarPr
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
if(view_type == 'market'){
|
|
87
|
-
const success = grade >
|
|
87
|
+
const success = grade > 100 ? true : false
|
|
88
88
|
if(!premium){
|
|
89
89
|
return (<></>)
|
|
90
90
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useState } from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { View, Image, FlatList, TouchableOpacity, ActivityIndicator, ScrollView } from 'react-native';
|
|
3
|
-
import type { AthleteProps, BestAvailableOrderProps, CompetitionProps, EventOrderStatProps, EventProps, MarketProps, MarketSideOptionProps, OrderProps, SquaresCompetitionProps, TradeProps } from '../../../types';
|
|
3
|
+
import type { AthleteProps, BestAvailableOrderProps, CompanyProps, CompetitionProps, EventOrderStatProps, EventProps, MarketProps, MarketSideOptionProps, OrderProps, SquaresCompetitionProps, TradeProps } from '../../../types';
|
|
4
4
|
import { view_styles } from '../../../constants/styles';
|
|
5
5
|
import { Button, Icons, LinearDiagnal, Text } from '../../../Components';
|
|
6
6
|
import {TeamEventMarketHelpers} from './api';
|
|
@@ -11,6 +11,9 @@ import EventMarket from '../../components/EventMarket';
|
|
|
11
11
|
|
|
12
12
|
import { MarketComponentApi, MarketComponentHelpers } from '../../api';
|
|
13
13
|
import { MarketButtonHelpers } from '../MarketButton/api';
|
|
14
|
+
import LinearGradient from 'react-native-linear-gradient';
|
|
15
|
+
import { useIsInViewport } from '../../../Components/ViewportObserver';
|
|
16
|
+
import type { BEEventProps } from '../../../Observer/api/types';
|
|
14
17
|
|
|
15
18
|
type TeamEventMarketProps = {
|
|
16
19
|
event:EventProps,
|
|
@@ -25,6 +28,7 @@ type TeamEventMarketProps = {
|
|
|
25
28
|
default_price_view: 'last_trade'|'best_available',
|
|
26
29
|
onView:(data:{ event_id:string, event_type:string, market_id:string, side_type?:string, side_id?:string }) => void,
|
|
27
30
|
onOrder:(order:OrderProps) => void,
|
|
31
|
+
onEvent?:(be_event:BEEventProps) => void,
|
|
28
32
|
onExpand?:(expanded:boolean) => void,
|
|
29
33
|
show_grades?:boolean,
|
|
30
34
|
onCompetitionSelect:(competition_id:string) => void,
|
|
@@ -34,7 +38,7 @@ type TeamEventMarketProps = {
|
|
|
34
38
|
onActivate?:(event_id:string, event_type:string) => void
|
|
35
39
|
activate_loading?:boolean
|
|
36
40
|
}
|
|
37
|
-
const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, competitions, squares_competition, show_grades, markets, latest_trades, best_available_orders, event_order_stats, default_price_view, onSquaresSelect, onCompetitionSelect, onExpand, onOrder, onView, onViewAdditionalMarkets, onTradeLongPress, onActivate }:TeamEventMarketProps) => {
|
|
41
|
+
const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, competitions, squares_competition, show_grades, markets, latest_trades, best_available_orders, event_order_stats, default_price_view, onSquaresSelect, onCompetitionSelect, onExpand, onOrder, onView, onViewAdditionalMarkets, onTradeLongPress, onActivate, onEvent }:TeamEventMarketProps) => {
|
|
38
42
|
const [ expanded_data, setExpandedData ] = useState<{
|
|
39
43
|
expanded:boolean,
|
|
40
44
|
loaded:boolean,
|
|
@@ -46,16 +50,43 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
|
|
|
46
50
|
expanded:false,
|
|
47
51
|
athletes:[]
|
|
48
52
|
})
|
|
53
|
+
const [ sponsor, setSponsor ] = useState<CompanyProps|undefined>(undefined);
|
|
49
54
|
const [ competitions_expanded, setCompetitionsExpanded ] = useState(false);
|
|
50
55
|
const { expanded, athletes, loaded, loading } = expanded_data;
|
|
51
56
|
const event_status = TeamEventMarketHelpers.getEventStatus(event);
|
|
52
|
-
|
|
57
|
+
const ref = useRef(null)
|
|
58
|
+
const isInViewport = useIsInViewport(ref)
|
|
53
59
|
|
|
54
60
|
useEffect(() => {
|
|
55
61
|
MarketComponentApi.setEnvironment();
|
|
56
62
|
if(init_expanded){ expandedEvent(); }
|
|
63
|
+
if(event.sponsor_id){ getCompanyFromServer(event.sponsor_id) }
|
|
57
64
|
},[])
|
|
58
65
|
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if(isInViewport && onEvent && event.sponsor_id){
|
|
68
|
+
let be_event:BEEventProps = {
|
|
69
|
+
event_name:'company_view',
|
|
70
|
+
event_data: {
|
|
71
|
+
view_type: 'contest',
|
|
72
|
+
view_location: 'list',
|
|
73
|
+
contest_type:'team',
|
|
74
|
+
contest_id:event.event_id,
|
|
75
|
+
company_id: event.sponsor_id
|
|
76
|
+
},
|
|
77
|
+
level:2
|
|
78
|
+
}
|
|
79
|
+
onEvent(be_event)
|
|
80
|
+
}
|
|
81
|
+
},[isInViewport])
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
const getCompanyFromServer = async(company_id:string) => {
|
|
85
|
+
const resp = await MarketComponentApi.getCompanyById(company_id)
|
|
86
|
+
if(!resp?.company){ return }
|
|
87
|
+
setSponsor(resp.company)
|
|
88
|
+
}
|
|
89
|
+
|
|
59
90
|
const expandedEvent = async() => {
|
|
60
91
|
if(!event){ return }
|
|
61
92
|
if(onExpand){ onExpand(expanded ? false : true) }
|
|
@@ -76,7 +107,9 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
|
|
|
76
107
|
})
|
|
77
108
|
}
|
|
78
109
|
|
|
79
|
-
const primary_markets =
|
|
110
|
+
const primary_markets = useMemo(() => {
|
|
111
|
+
return TeamEventMarketHelpers.getPrimaryMarkets(event, markets)
|
|
112
|
+
}, [markets.length])
|
|
80
113
|
|
|
81
114
|
const handleSelectCompetition = () => {
|
|
82
115
|
if(!competitions || competitions.length == 0){ return }
|
|
@@ -138,7 +171,8 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
|
|
|
138
171
|
<Text size={12} color={Colors.brand.midnight} textAlign='center'>{data.item.type.toUpperCase()}</Text>
|
|
139
172
|
</View>
|
|
140
173
|
)
|
|
141
|
-
},[])
|
|
174
|
+
},[primary_markets.length])
|
|
175
|
+
|
|
142
176
|
|
|
143
177
|
const renderNonPrimaryMarkets = useCallback((data: { item:EventOrderStatProps, index:number }) => {
|
|
144
178
|
const market = markets.find(m => m.market_id == data.item.market_id);
|
|
@@ -211,9 +245,36 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
|
|
|
211
245
|
if(!event.away || !event.home){ return <></> }
|
|
212
246
|
|
|
213
247
|
const { liquidity, open_order_count } = MarketComponentHelpers.getLiqudity(event_order_stats);
|
|
214
|
-
const { non_primary_markets, available } = TeamEventMarketHelpers.sortNonPrimaryMarkets(TeamEventMarketHelpers.getNonPrimaryMarkets(event, markets), event_order_stats, latest_trades)
|
|
248
|
+
const { non_primary_markets, available } = useMemo(() => TeamEventMarketHelpers.sortNonPrimaryMarkets(TeamEventMarketHelpers.getNonPrimaryMarkets(event, markets), event_order_stats, latest_trades),[])
|
|
249
|
+
|
|
215
250
|
return (
|
|
216
|
-
<View style={{ ...view_styles.section, borderWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
251
|
+
<View ref={ref} style={{ ...view_styles.section, borderWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
252
|
+
{sponsor ?
|
|
253
|
+
<LinearGradient style={{ marginTop:-1, marginLeft:-1, marginRight:-1, padding:10, flexDirection:'row', borderTopRightRadius:8, borderTopLeftRadius:8 }} start={{x: 0, y: 0}} end={{x: 1, y: 0}} colors={[sponsor.brand_primary ?? Colors.brand.midnight, sponsor.brand_secondary ?? Colors.brand.cyan]}>
|
|
254
|
+
<View style={{ height:30, width:30, borderRadius:4, backgroundColor:Colors.shades.white }}>
|
|
255
|
+
<Image
|
|
256
|
+
source={{ uri: sponsor.company_image?.url }}
|
|
257
|
+
style={{ height:30, width:30, borderRadius:4 }}
|
|
258
|
+
resizeMode='cover'
|
|
259
|
+
/>
|
|
260
|
+
</View>
|
|
261
|
+
<View style={{ flex:1, marginLeft:10 }}>
|
|
262
|
+
<Text size={12} color={Colors.shades.white} weight='bold'>Brought to you by {sponsor.company_name}</Text>
|
|
263
|
+
<View style={{ marginTop:3, flexDirection:'row', alignItems:'center' }}>
|
|
264
|
+
{show_id ?
|
|
265
|
+
<Text style={{ marginLeft:2, marginRight:3 }} size={12} color={Colors.shades.white} weight='semibold' selectable>{event.event_id} </Text>
|
|
266
|
+
:<></>}
|
|
267
|
+
{event.event_sub_title ?
|
|
268
|
+
<Text size={12} color={Colors.shades.white} weight='semibold'>{event.event_sub_title}</Text>
|
|
269
|
+
:<></>}
|
|
270
|
+
</View>
|
|
271
|
+
</View>
|
|
272
|
+
<View style={{ flexDirection:'row', alignItems:'center' }}>
|
|
273
|
+
<Icons.TVIcon size={10} color={Colors.shades.white} />
|
|
274
|
+
<Text style={{ marginLeft:8 }} size={12} color={Colors.shades.white} weight='semibold'>{event.info?.broadcast?.network}</Text>
|
|
275
|
+
</View>
|
|
276
|
+
</LinearGradient>
|
|
277
|
+
:
|
|
217
278
|
<View nativeID='event_header_data' style={{ flexDirection:'row', padding:10, borderBottomWidth:1, borderBottomColor:Colors.shades.shade600 }}>
|
|
218
279
|
{onActivate && event_status != 'closed' ?
|
|
219
280
|
<Button
|
|
@@ -239,6 +300,7 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
|
|
|
239
300
|
<Text style={{ marginLeft:8 }} size={12} color={Colors.brand.midnight} weight='semibold'>{event.info?.broadcast?.network}</Text>
|
|
240
301
|
</View>
|
|
241
302
|
</View>
|
|
303
|
+
}
|
|
242
304
|
<View nativeID='primary_markets' style={{ flexDirection:'row' }}>
|
|
243
305
|
<View nativeID='team_details' style={{ flex:1, padding:5, paddingRight:0 }}>
|
|
244
306
|
<View style={{ flexDirection:'row', alignItems:'center', marginTop:5, marginBottom:5, marginLeft:10 }}>
|
|
@@ -297,7 +359,7 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
|
|
|
297
359
|
</View>
|
|
298
360
|
<FlatList
|
|
299
361
|
key={`${event.event_id}_primary_markets`}
|
|
300
|
-
data={primary_markets}
|
|
362
|
+
data={primary_markets.sort((a,b) => parseInt(a.market_id) - parseInt(b.market_id))}
|
|
301
363
|
horizontal
|
|
302
364
|
renderItem={renderPrimaryMarkets}
|
|
303
365
|
keyExtractor={(item) => item.market_id.toString()}
|
|
@@ -407,4 +469,7 @@ const TeamEventMarket = ({ event, init_expanded, show_id, activate_loading, comp
|
|
|
407
469
|
)
|
|
408
470
|
}
|
|
409
471
|
|
|
410
|
-
export default TeamEventMarket
|
|
472
|
+
export default React.memo(TeamEventMarket, (left, right) => {
|
|
473
|
+
if(JSON.stringify(left) != JSON.stringify(right)){ return false }
|
|
474
|
+
return true
|
|
475
|
+
})
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Image, TouchableOpacity, View } from 'react-native';
|
|
3
|
+
import type { PollCampaignProps } from '../../types';
|
|
4
|
+
import { Icons, Text } from '../../Components';
|
|
5
|
+
import Colors from '../../constants/colors';
|
|
6
|
+
|
|
7
|
+
type CampaignHeaderProps = {
|
|
8
|
+
poll_campaign:PollCampaignProps,
|
|
9
|
+
onSharePollCampaign:(pc:PollCampaignProps) => void
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const CampaignHeader = ({ poll_campaign, onSharePollCampaign }:CampaignHeaderProps) => {
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<View>
|
|
16
|
+
<View nativeID="competition_header" style={{ flexDirection:'row', alignItems:'center', padding:20, borderBottomWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
17
|
+
<View>
|
|
18
|
+
<Image
|
|
19
|
+
source={{ uri: poll_campaign.campaign_image?.url ?? 'https://res.cloudinary.com/hoabts6mc/image/upload/v1649737862/be_logo_jte2ux.webp' }}
|
|
20
|
+
style={{ height:50, width:50, borderRadius:4 }}
|
|
21
|
+
resizeMode="cover"
|
|
22
|
+
/>
|
|
23
|
+
</View>
|
|
24
|
+
<View style={{ flex:1, marginLeft:10 }}>
|
|
25
|
+
<Text theme='header'>{poll_campaign.name}</Text>
|
|
26
|
+
</View>
|
|
27
|
+
<TouchableOpacity style={{ paddingLeft:10 }} onPress={() => onSharePollCampaign(poll_campaign)}>
|
|
28
|
+
<Icons.ShareIcon color={Colors.brand.midnight} size={14} />
|
|
29
|
+
</TouchableOpacity>
|
|
30
|
+
</View>
|
|
31
|
+
</View>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default CampaignHeader
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { View, ScrollView, Image, FlatList, ActivityIndicator } from "react-native"
|
|
3
|
+
import type { PollCampaignLeaderProps, PollCampaignProps, PublicPlayerProps } from '../../types';
|
|
4
|
+
import { PollCampaignApi } from '../api';
|
|
5
|
+
import { Button, Icons, Text } from '../../Components';
|
|
6
|
+
import Colors from '../../constants/colors';
|
|
7
|
+
import { view_styles } from '../../constants/styles';
|
|
8
|
+
|
|
9
|
+
type CampaignLeaderboardProps = {
|
|
10
|
+
poll_campaign:PollCampaignProps,
|
|
11
|
+
view_mode: "short"|"full",
|
|
12
|
+
height?:number,
|
|
13
|
+
onShowFullLeaderboard?: () => void,
|
|
14
|
+
onClose?:() => void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const CampaignLeaderboard = ({ poll_campaign, height, view_mode, onShowFullLeaderboard, onClose }:CampaignLeaderboardProps) => {
|
|
18
|
+
const [ leaderboard_data, setLeaderData ] = useState<{
|
|
19
|
+
loading:boolean,
|
|
20
|
+
offset:number,
|
|
21
|
+
leaders:PollCampaignLeaderProps[],
|
|
22
|
+
players:PublicPlayerProps[],
|
|
23
|
+
my_leader?: PollCampaignLeaderProps
|
|
24
|
+
}>({
|
|
25
|
+
loading:false,
|
|
26
|
+
offset:0,
|
|
27
|
+
leaders:[],
|
|
28
|
+
players:[]
|
|
29
|
+
})
|
|
30
|
+
const { loading, leaders, players, my_leader, offset } = leaderboard_data;
|
|
31
|
+
const me = players.find(p => p.player_id == my_leader?.player_id);
|
|
32
|
+
|
|
33
|
+
let filtered_leaders = [ ...leaders ]
|
|
34
|
+
if(view_mode == 'short'){
|
|
35
|
+
filtered_leaders = filtered_leaders.sort((a,b) => a.place - b.place).slice(0,3);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
getDataFromServer(0);
|
|
40
|
+
},[poll_campaign.poll_campaign_id])
|
|
41
|
+
|
|
42
|
+
const getDataFromServer = async(offset:number) => {
|
|
43
|
+
setLeaderData({ ...leaderboard_data, loading:true })
|
|
44
|
+
const ls = await PollCampaignApi.getLeadersByCampaignId(poll_campaign.poll_campaign_id, offset)
|
|
45
|
+
const player_ids = ls.poll_campaign_leaders.map(l => l.player_id);
|
|
46
|
+
if(ls.my_leaderboard){
|
|
47
|
+
let my_id = player_ids.find(id => id == ls.my_leaderboard?.player_id);
|
|
48
|
+
if(!my_id){ player_ids.push(ls.my_leaderboard.player_id) }
|
|
49
|
+
}
|
|
50
|
+
const ps = await PollCampaignApi.getPlayersByPlayerIds(player_ids);
|
|
51
|
+
setLeaderData({
|
|
52
|
+
...leaderboard_data,
|
|
53
|
+
players:ps,
|
|
54
|
+
offset,
|
|
55
|
+
loading: false,
|
|
56
|
+
leaders: ls.poll_campaign_leaders,
|
|
57
|
+
my_leader: ls.my_leaderboard
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const renderTrophy = (place:number) => {
|
|
62
|
+
switch(place){
|
|
63
|
+
case 1: return <Icons.TrophyIcon color={Colors.incentive.gold} size={16}/>
|
|
64
|
+
case 2: return <Icons.TrophyIcon color={Colors.incentive.silver} size={16}/>
|
|
65
|
+
case 3: return <Icons.TrophyIcon color={Colors.incentive.bronze} size={16}/>
|
|
66
|
+
default: return <></>
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
const renderLeaders = (data: {item:PollCampaignLeaderProps, index:number}) => {
|
|
72
|
+
const player = players.find(p => p.player_id == data.item.player_id);
|
|
73
|
+
if(!player){ return <></> }
|
|
74
|
+
return (
|
|
75
|
+
<View style={{ flexDirection:'row', alignItems:'center', margin:4, padding:10, borderRadius:22, backgroundColor:Colors.shades.white, borderWidth:1, borderColor:Colors.shades.shade600 }}>
|
|
76
|
+
<View nativeID="place" style={{ margin:5, height:20, width:20, justifyContent:'center', alignItems:'center', borderRadius:100, borderWidth:1, borderColor:Colors.brand.slate }}>
|
|
77
|
+
<Text size={10} color={Colors.brand.midnight} weight='bold' textAlign="center">{offset > 0 ? offset:''}{data.index+1}</Text>
|
|
78
|
+
</View>
|
|
79
|
+
<View nativeID="player" style={{ flex:1, flexDirection:'row', alignItems:'center' }}>
|
|
80
|
+
<View nativeID="profile_pic" style={{ marginRight:10 }}>
|
|
81
|
+
<Image
|
|
82
|
+
source={{ uri: player.profile_pic && player.profile_pic != '' ? player.profile_pic : 'https://res.cloudinary.com/hoabts6mc/image/upload/v1689262384/default-avatar_bbkn2t.png' }}
|
|
83
|
+
style={{ height:40, width:40, borderRadius:100 }}
|
|
84
|
+
resizeMode='cover'
|
|
85
|
+
/>
|
|
86
|
+
</View>
|
|
87
|
+
<View style={{ flex:1 }} nativeID="name">
|
|
88
|
+
<Text size={14} color={Colors.brand.midnight} weight='bold'>{player.username}</Text>
|
|
89
|
+
<Text style={{ marginTop:3 }} size={12} color={Colors.brand.midnight} weight='regular'>{data.item.winnings.toFixed(2)} Points</Text>
|
|
90
|
+
</View>
|
|
91
|
+
<View>
|
|
92
|
+
{renderTrophy(data.index+1)}
|
|
93
|
+
</View>
|
|
94
|
+
</View>
|
|
95
|
+
</View>
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<View style={{ flex:1, height:height, backgroundColor:Colors.shades.shade100 }}>
|
|
101
|
+
{my_leader && me ?
|
|
102
|
+
<View nativeID="my_results">
|
|
103
|
+
<View style={{ flexDirection:'row', alignItems:'center', margin:4, padding:10, borderRadius:22, backgroundColor:Colors.shades.white }}>
|
|
104
|
+
<View nativeID="place" style={{ margin:5, height:20, width:20, justifyContent:'center', alignItems:'center', borderRadius:100, borderWidth:1, borderColor:Colors.brand.slate }}>
|
|
105
|
+
<Text size={10} color={Colors.brand.midnight} weight='bold' textAlign="center">{my_leader.place}</Text>
|
|
106
|
+
</View>
|
|
107
|
+
<View nativeID="player" style={{ flex:1, flexDirection:'row', alignItems:'center' }}>
|
|
108
|
+
<View nativeID="profile_pic" style={{ marginRight:10 }}>
|
|
109
|
+
<Image
|
|
110
|
+
source={{ uri: me.profile_pic && me.profile_pic != '' ? me.profile_pic : 'https://res.cloudinary.com/hoabts6mc/image/upload/v1689262384/default-avatar_bbkn2t.png' }}
|
|
111
|
+
style={{ height:40, width:40, borderRadius:100 }}
|
|
112
|
+
resizeMode='cover'
|
|
113
|
+
/>
|
|
114
|
+
</View>
|
|
115
|
+
<View style={{ flex:1 }} nativeID="name">
|
|
116
|
+
<Text size={14} color={Colors.brand.midnight} weight='bold'>{me.username}</Text>
|
|
117
|
+
<Text style={{ marginTop:3 }} size={12} color={Colors.brand.midnight} weight='regular'>{my_leader.winnings.toFixed(2)} Points</Text>
|
|
118
|
+
</View>
|
|
119
|
+
<View>
|
|
120
|
+
{renderTrophy(my_leader.place)}
|
|
121
|
+
</View>
|
|
122
|
+
</View>
|
|
123
|
+
</View>
|
|
124
|
+
</View>
|
|
125
|
+
:<></>}
|
|
126
|
+
<ScrollView style={{flex:1}}>
|
|
127
|
+
{loading ?
|
|
128
|
+
<ActivityIndicator size='large' color={Colors.brand.midnight} style={{ padding:10, alignSelf:'center' }} />
|
|
129
|
+
:<></>}
|
|
130
|
+
<FlatList
|
|
131
|
+
data={filtered_leaders}
|
|
132
|
+
renderItem={renderLeaders}
|
|
133
|
+
keyExtractor={((item) => item.player_id.toString())}
|
|
134
|
+
/>
|
|
135
|
+
</ScrollView>
|
|
136
|
+
{view_mode == 'full' ?
|
|
137
|
+
<View style={{ flexDirection:'row', alignItems:'center' }}>
|
|
138
|
+
{offset > 0 ?
|
|
139
|
+
<Button
|
|
140
|
+
title='PREV'
|
|
141
|
+
title_color={Colors.brand.electric}
|
|
142
|
+
backgroundColor='transparent'
|
|
143
|
+
onPress={() => getDataFromServer(offset - 1)}
|
|
144
|
+
/>
|
|
145
|
+
:<></>}
|
|
146
|
+
<View style={{flex:1}} />
|
|
147
|
+
<Button
|
|
148
|
+
title='NEXT'
|
|
149
|
+
title_color={Colors.brand.electric}
|
|
150
|
+
backgroundColor='transparent'
|
|
151
|
+
onPress={() => getDataFromServer(offset + 1)}
|
|
152
|
+
/>
|
|
153
|
+
</View>
|
|
154
|
+
:<></>}
|
|
155
|
+
{view_mode == 'short' && onShowFullLeaderboard ?
|
|
156
|
+
<View style={{ ...view_styles.section_footer }}>
|
|
157
|
+
<Button
|
|
158
|
+
title='See Full Leaderboard'
|
|
159
|
+
style={{ flex:1, alignSelf:'center' }}
|
|
160
|
+
title_color={Colors.brand.electric}
|
|
161
|
+
backgroundColor='transparent'
|
|
162
|
+
onPress={() => onShowFullLeaderboard()}
|
|
163
|
+
/>
|
|
164
|
+
</View>
|
|
165
|
+
:<></>}
|
|
166
|
+
{onClose ?
|
|
167
|
+
<View style={{ ...view_styles.section_footer }}>
|
|
168
|
+
<Button
|
|
169
|
+
title='CLOSE'
|
|
170
|
+
style={{ flex:1 }}
|
|
171
|
+
title_color={Colors.shades.white}
|
|
172
|
+
backgroundColor={Colors.utility.error}
|
|
173
|
+
onPress={() => onClose()}
|
|
174
|
+
/>
|
|
175
|
+
</View>
|
|
176
|
+
:<></>}
|
|
177
|
+
</View>
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export default CampaignLeaderboard
|