be-components 7.2.1 → 7.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/lib/commonjs/PartnerPortal/api/index.js +134 -1
  2. package/lib/commonjs/PartnerPortal/api/index.js.map +1 -1
  3. package/lib/commonjs/PartnerPortal/components/EmbedManager.js +214 -3
  4. package/lib/commonjs/PartnerPortal/components/EmbedManager.js.map +1 -1
  5. package/lib/commonjs/PartnerPortal/components/PromoSelector.js +100 -0
  6. package/lib/commonjs/PartnerPortal/components/PromoSelector.js.map +1 -0
  7. package/lib/commonjs/PartnerPortal/components/ReferralCodeManager.js +498 -0
  8. package/lib/commonjs/PartnerPortal/components/ReferralCodeManager.js.map +1 -0
  9. package/lib/commonjs/PartnerPortal/index.js +337 -3
  10. package/lib/commonjs/PartnerPortal/index.js.map +1 -1
  11. package/lib/commonjs/index.js +7 -0
  12. package/lib/commonjs/index.js.map +1 -1
  13. package/lib/commonjs/types.d.js.map +1 -1
  14. package/lib/module/PartnerPortal/api/index.js +133 -0
  15. package/lib/module/PartnerPortal/api/index.js.map +1 -1
  16. package/lib/module/PartnerPortal/components/EmbedManager.js +214 -3
  17. package/lib/module/PartnerPortal/components/EmbedManager.js.map +1 -1
  18. package/lib/module/PartnerPortal/components/PromoSelector.js +93 -0
  19. package/lib/module/PartnerPortal/components/PromoSelector.js.map +1 -0
  20. package/lib/module/PartnerPortal/components/ReferralCodeManager.js +490 -0
  21. package/lib/module/PartnerPortal/components/ReferralCodeManager.js.map +1 -0
  22. package/lib/module/PartnerPortal/index.js +339 -5
  23. package/lib/module/PartnerPortal/index.js.map +1 -1
  24. package/lib/module/index.js +2 -1
  25. package/lib/module/index.js.map +1 -1
  26. package/lib/module/types.d.js.map +1 -1
  27. package/lib/typescript/lib/commonjs/PartnerPortal/api/index.d.ts +23 -0
  28. package/lib/typescript/lib/commonjs/PartnerPortal/api/index.d.ts.map +1 -1
  29. package/lib/typescript/lib/commonjs/PartnerPortal/components/EmbedManager.d.ts.map +1 -1
  30. package/lib/typescript/lib/commonjs/PartnerPortal/components/PromoSelector.d.ts +10 -0
  31. package/lib/typescript/lib/commonjs/PartnerPortal/components/PromoSelector.d.ts.map +1 -0
  32. package/lib/typescript/lib/commonjs/PartnerPortal/components/ReferralCodeManager.d.ts +12 -0
  33. package/lib/typescript/lib/commonjs/PartnerPortal/components/ReferralCodeManager.d.ts.map +1 -0
  34. package/lib/typescript/lib/commonjs/PartnerPortal/index.d.ts +3 -1
  35. package/lib/typescript/lib/commonjs/PartnerPortal/index.d.ts.map +1 -1
  36. package/lib/typescript/lib/commonjs/index.d.ts +1 -0
  37. package/lib/typescript/lib/commonjs/index.d.ts.map +1 -1
  38. package/lib/typescript/lib/module/PartnerPortal/api/index.d.ts +23 -0
  39. package/lib/typescript/lib/module/PartnerPortal/api/index.d.ts.map +1 -1
  40. package/lib/typescript/lib/module/PartnerPortal/components/EmbedManager.d.ts.map +1 -1
  41. package/lib/typescript/lib/module/PartnerPortal/components/PromoSelector.d.ts +10 -0
  42. package/lib/typescript/lib/module/PartnerPortal/components/PromoSelector.d.ts.map +1 -0
  43. package/lib/typescript/lib/module/PartnerPortal/components/ReferralCodeManager.d.ts +12 -0
  44. package/lib/typescript/lib/module/PartnerPortal/components/ReferralCodeManager.d.ts.map +1 -0
  45. package/lib/typescript/lib/module/PartnerPortal/index.d.ts +3 -1
  46. package/lib/typescript/lib/module/PartnerPortal/index.d.ts.map +1 -1
  47. package/lib/typescript/lib/module/index.d.ts +2 -1
  48. package/lib/typescript/lib/module/index.d.ts.map +1 -1
  49. package/lib/typescript/src/PartnerPortal/api/index.d.ts +19 -1
  50. package/lib/typescript/src/PartnerPortal/api/index.d.ts.map +1 -1
  51. package/lib/typescript/src/PartnerPortal/components/EmbedManager.d.ts.map +1 -1
  52. package/lib/typescript/src/PartnerPortal/components/PromoSelector.d.ts +12 -0
  53. package/lib/typescript/src/PartnerPortal/components/PromoSelector.d.ts.map +1 -0
  54. package/lib/typescript/src/PartnerPortal/components/ReferralCodeManager.d.ts +15 -0
  55. package/lib/typescript/src/PartnerPortal/components/ReferralCodeManager.d.ts.map +1 -0
  56. package/lib/typescript/src/PartnerPortal/index.d.ts +4 -2
  57. package/lib/typescript/src/PartnerPortal/index.d.ts.map +1 -1
  58. package/lib/typescript/src/index.d.ts +2 -1
  59. package/lib/typescript/src/index.d.ts.map +1 -1
  60. package/package.json +1 -1
  61. package/src/PartnerPortal/api/index.ts +119 -1
  62. package/src/PartnerPortal/components/EmbedManager.tsx +127 -1
  63. package/src/PartnerPortal/components/PromoSelector.tsx +61 -0
  64. package/src/PartnerPortal/components/ReferralCodeManager.tsx +303 -0
  65. package/src/PartnerPortal/index.tsx +166 -9
  66. package/src/index.tsx +2 -0
  67. package/src/types.d.ts +22 -0
@@ -1,18 +1,21 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { Button, Text, View } from "../Components/Themed"
3
- import type { BracketCompetitionProps, CompanyEmbedProps, CompanyProps, CompetitionProps, EmbedPropertyProps, EmbedProps, ExternalKeyProps, MyPlayerProps, PollCampaignProps, PublicPlayerProps, SquaresCompetitionProps } from '../types';
3
+ import type { BracketCompetitionProps, CompanyEmbedProps, CompanyPlayerProps, CompanyPlayerStatProps, CompanyProps, CompetitionProps, EmbedPropertyProps, EmbedProps, ExternalKeyProps, MyPlayerProps, PlayerReferralProps, PollCampaignProps, PromoProps, PublicPlayerProps, SquaresCompetitionProps } from '../types';
4
4
  import type { CompanyMemberProps } from '../Authenticator/api/types';
5
5
  import { PartnerPortalApi } from './api';
6
- import { FlatList, Image } from 'react-native';
6
+ import { FlatList, Image, ScrollView } from 'react-native';
7
7
  import { useColors } from '../constants/useColors';
8
8
  import ImageUploader from '../Components/ImageUploader';
9
9
  import moment from 'moment-mini';
10
- import { Icons } from '../Components';
10
+ import { Icons, SearchBox } from '../Components';
11
+ import Pagination from '../Components/Pagination';
11
12
 
12
13
  type PartnerPortalProps = {
13
14
  me:MyPlayerProps,
14
15
  company_id:string,
16
+ refresh_key?:string,
15
17
  onCreateEmbed:() => void,
18
+ onManageReferral: (pr?:PlayerReferralProps) => void,
16
19
  onCreateEngagement: (init_engagement?:string) => void,
17
20
  onSelectCompanyEmbed: (company_embed:CompanyEmbedProps) => void,
18
21
  onSelectCompetition: (competition:CompetitionProps) => void,
@@ -21,9 +24,9 @@ type PartnerPortalProps = {
21
24
  onSelectFlashCampaign: (flash_campaign:PollCampaignProps) => void
22
25
  }
23
26
 
24
- const sections = ['top_row','second_row','third_row']
27
+ const sections = ['top_row','stats','referrals','second_row','third_row']
25
28
 
26
- const PartnerPortal = ({ me, company_id, onCreateEngagement, onSelectBracketCompetition, onCreateEmbed, onSelectCompanyEmbed, onSelectCompetition, onSelectFlashCampaign, onSelectSquaresCompetition }:PartnerPortalProps) => {
29
+ const PartnerPortal = ({ me, company_id, refresh_key, onCreateEngagement, onSelectBracketCompetition, onManageReferral, onCreateEmbed, onSelectCompanyEmbed, onSelectCompetition, onSelectFlashCampaign, onSelectSquaresCompetition }:PartnerPortalProps) => {
27
30
  const Colors = useColors();
28
31
  const [ engagement_state, setEngagementState ] = useState<{
29
32
  loading: boolean,
@@ -49,22 +52,35 @@ const PartnerPortal = ({ me, company_id, onCreateEngagement, onSelectBracketComp
49
52
  loading: boolean,
50
53
  company?:CompanyProps,
51
54
  my_member?:CompanyMemberProps,
55
+ company_player_stats:CompanyPlayerStatProps[],
56
+ company_players:CompanyPlayerProps[],
57
+ company_players_offset:number,
58
+ player_referrals:PlayerReferralProps[],
59
+ promos:PromoProps[],
52
60
  company_members:CompanyMemberProps[],
53
61
  external_keys:ExternalKeyProps[],
54
62
  players:PublicPlayerProps[],
55
63
  }>({
56
64
  loading:false,
57
65
  company_members: [],
66
+ company_players_offset: 0,
58
67
  external_keys: [],
68
+ player_referrals:[],
69
+ company_player_stats:[],
70
+ company_players:[],
71
+ promos:[],
59
72
  players: []
60
- })
61
- const { company, external_keys, players, company_members } = state;
62
-
73
+ });
74
+ const [ referral_search, setReferralSearch ] = useState('');
75
+ const [ player_search, setPlayerSearch ] = useState('');
76
+ const { company, promos, company_players_offset, company_player_stats, company_players, player_referrals, external_keys, players, company_members } = state;
77
+ const filtered_referrals = player_referrals.filter(r => r.referral_code.toLowerCase().includes(referral_search.toLowerCase())).slice(0,5);
78
+ const filtered_players = company_players.sort((a,b) => b.revenue - a.revenue).filter(p => p.username.toLowerCase().includes(player_search.toLowerCase())).slice(0,5);
63
79
  useEffect(() => {
64
80
  PartnerPortalApi.setEnvironment();
65
81
  getStateData();
66
82
  getActiveEngagementData();
67
- },[me.player_id, company_id]);
83
+ },[me.player_id, company_id, refresh_key]);
68
84
 
69
85
  const getStateData = async() => {
70
86
  setState({ ...state, loading:true });
@@ -74,16 +90,32 @@ const PartnerPortal = ({ me, company_id, onCreateEngagement, onSelectBracketComp
74
90
  const s_playes = await PartnerPortalApi.getPlayersByPlayerIds(player_ids);
75
91
  const my_co_member = company_response?.company_members.find(cm => cm.player_id == me.player_id);
76
92
  const s_keys = await PartnerPortalApi.CompanyApi.getApiKeys(company_id);
93
+ const s_refer = await PartnerPortalApi.CompanyApi.getReferralCodesByCompanyId(company_id);
94
+ const s_stats = await PartnerPortalApi.CompanyApi.getCompanyPlayerStats(company_id);
95
+ const s_cps = await PartnerPortalApi.CompanyApi.getCompanyPlayers(company_id, 0);
77
96
  setState({
78
97
  ...state,
79
98
  loading: false,
80
99
  company: company_response?.company,
81
100
  external_keys: s_keys,
101
+ promos: s_refer.promos,
102
+ company_players: s_cps,
103
+ player_referrals: s_refer.player_referrals,
104
+ company_player_stats: s_stats,
82
105
  players: s_playes,
106
+ company_players_offset: 0,
83
107
  my_member:my_co_member,
84
108
  company_members: company_response?.company_members ?? []
85
109
  });
86
110
  }
111
+ const getAdditionalPlayers = async(page:number) => {
112
+ const s_cps = await PartnerPortalApi.CompanyApi.getCompanyPlayers(company_id, page);
113
+ setState({
114
+ ...state,
115
+ company_players: s_cps,
116
+ company_players_offset: page
117
+ })
118
+ }
87
119
 
88
120
  const getActiveEngagementData = async() => {
89
121
  setEngagementState({ ...engagement_state, loading:true });
@@ -211,6 +243,58 @@ const PartnerPortal = ({ me, company_id, onCreateEngagement, onSelectBracketComp
211
243
  <Text theme='h1'>{data.item.name}</Text>
212
244
  <Text theme='description' style={{ marginTop:3 }}>{embed.name}</Text>
213
245
  </View>
246
+ <Text theme='description'>{data.item.status.toUpperCase()}</Text>
247
+ </Button>
248
+ )
249
+ }
250
+
251
+ const renderPlayers = (data:{ item:CompanyPlayerProps, index:number }) => {
252
+ return (
253
+ <View transparent type='row' style={{ padding:10, margin:4, minWidth:300, flexGrow:1, borderBottomWidth:1, borderColor:Colors.borders.light }}>
254
+ <Image
255
+ source={{ uri: data.item.profile_pic }}
256
+ style={{ height:40, width:40, borderRadius:100 }}
257
+ resizeMode='cover'
258
+ />
259
+ <View float style={{ marginRight:10, marginLeft:10, padding:5, borderRadius:22, backgroundColor:data.item.vouched_status == 'verified' ? Colors.text.success : data.item.vouched_status == 'unverified' ? Colors.text.action : Colors.text.error }}>
260
+ <Text theme='h1' color={Colors.text.white}>{data.item.vouched_status.toUpperCase()}</Text>
261
+ </View>
262
+ <View transparent style={{ flex:1, minWidth:200, marginLeft:10 }}>
263
+ <Text theme='h1'>{data.item.username}</Text>
264
+ <Text theme='description' style={{ marginTop:3 }}>Used Code {data.item.code_used}</Text>
265
+ </View>
266
+ <View float style={{ marginRight:25, padding:5, borderRadius:22, backgroundColor:data.item.verified ? Colors.text.success : Colors.text.error }}>
267
+ <Text theme='h1' color={Colors.text.white}>Email</Text>
268
+ </View>
269
+ <View float style={{ marginRight:25, padding:5, borderRadius:22, backgroundColor:data.item.phone_verified ? Colors.text.success : Colors.text.error }}>
270
+ <Text theme='h1' color={Colors.text.white}>Phone</Text>
271
+ </View>
272
+ <View transparent style={{ alignItems:'flex-end' }}>
273
+ <Text theme='h1' color={Colors.text.success}>${data.item.revenue.toFixed(2)}</Text>
274
+ <Text theme='description' style={{ marginTop:3 }}>Revenue Generated</Text>
275
+ </View>
276
+ </View>
277
+ )
278
+ }
279
+
280
+ const renderReferrals = (data:{ item:PlayerReferralProps, index:number }) => {
281
+ const promo = promos.find(e => e.promo_id == data.item.promo_id);
282
+ if(!promo){ return <></> }
283
+ const stats = company_player_stats.filter(ps => ps.referral_code.toLowerCase() == data.item.referral_code.toLowerCase());
284
+ const players_generated = stats.reduce((a,b) => a + b.player_count, 0)
285
+ return (
286
+ <Button
287
+ transparent
288
+ style={{ padding:10, borderRadius:0, flexDirection:'row', alignItems:'center', borderBottomWidth:1, borderColor:Colors.borders.light }}
289
+ onPress={() => onManageReferral(data.item)}>
290
+ <View transparent style={{ flex:1, marginLeft:10 }}>
291
+ <Text theme='h1'>{data.item.referral_code}</Text>
292
+ <Text theme='description' style={{ marginTop:3 }}>{data.item.status == 'pending' ? 'ACTIVE': data.item.status.toUpperCase()} - {promo.description}</Text>
293
+ </View>
294
+ <View transparent style={{ alignItems:'flex-end' }}>
295
+ <Text theme='h1' color={Colors.text.action}>{players_generated}</Text>
296
+ <Text theme='description' style={{ marginTop:3 }}>Players Generated</Text>
297
+ </View>
214
298
  </Button>
215
299
  )
216
300
  }
@@ -233,6 +317,7 @@ const PartnerPortal = ({ me, company_id, onCreateEngagement, onSelectBracketComp
233
317
  )
234
318
  }
235
319
 
320
+
236
321
  const renderSections = (data:{ item:string, index:number }) => {
237
322
  switch(data.item){
238
323
  case 'top_row':
@@ -312,6 +397,78 @@ const PartnerPortal = ({ me, company_id, onCreateEngagement, onSelectBracketComp
312
397
 
313
398
  </View>
314
399
  )
400
+ case 'stats':
401
+ const player_count = company_player_stats.reduce((a,b) => a + b.player_count, 0);
402
+ return (
403
+ <View transparent style={{ flexDirection:'row', flexWrap:'wrap' }}>
404
+ <View float nativeID='player_count' style={{ flexGrow:1, minWidth: 250, margin:10 }}>
405
+ <View transparent style={{ justifyContent:'center', alignItems:'center', padding:10 }}>
406
+ <Text theme='h1' size={40}>{player_count}</Text>
407
+ </View>
408
+ <View type='footer' style={{ flexDirection:'row', alignItems:'center', padding:10, borderBottomRightRadius:8, borderBottomLeftRadius:8 }}>
409
+ <View transparent style={{ flex:1 }}>
410
+ <Text theme='h1' color={Colors.text.success}>Users Generated</Text>
411
+ </View>
412
+ </View>
413
+ </View>
414
+ <View float nativeID='company_referrals' style={{ flexGrow:4, minWidth:300, margin:10 }}>
415
+ <View type='header' style={{ flexDirection:'row', alignItems:'center', padding:10, borderTopRightRadius:8, borderTopLeftRadius:8 }}>
416
+ <View transparent style={{ flex:1 }}>
417
+ <Text theme='h1'>Players Generated</Text>
418
+ <Text theme='description' style={{ marginTop:3 }}>See all players that have joined BettorEdge using your referral code</Text>
419
+ </View>
420
+ </View>
421
+ <View style={{ padding:10 }}>
422
+ <SearchBox hide_search_button onChange={(text) => setPlayerSearch(text)} />
423
+ </View>
424
+ <ScrollView horizontal={true} contentContainerStyle={{ flexGrow: 1 }}>
425
+ <View transparent type='body' style={{ flex:1 }}>
426
+ <FlatList
427
+ data={filtered_players}
428
+ key={'company_players'}
429
+ keyExtractor={item => item.player_id.toString()}
430
+ renderItem={renderPlayers}
431
+ />
432
+ </View>
433
+ </ScrollView>
434
+ <Pagination offset={company_players_offset} onNext={() => getAdditionalPlayers(company_players_offset + 1)} onPrevious={() => getAdditionalPlayers(company_players_offset - 1)} />
435
+ </View>
436
+ <View />
437
+ </View>
438
+ )
439
+ case 'referrals':
440
+ return (
441
+ <View transparent style={{ flexDirection:'row', flexWrap:'wrap' }}>
442
+ <View float nativeID='company_referrals' style={{ flexGrow:4, flexBasis:4, minWidth:300, margin:10 }}>
443
+ <View type='header' style={{ flexDirection:'row', alignItems:'center', padding:10, borderTopRightRadius:8, borderTopLeftRadius:8 }}>
444
+ <View transparent style={{ flex:1 }}>
445
+ <Text theme='h1'>Referral Codes</Text>
446
+ <Text theme='description' style={{ marginTop:3 }}>Active Referral Codes</Text>
447
+ </View>
448
+ <View transparent style={{ padding:10 }}>
449
+ <Text theme='h1' color={Colors.text.action}>{player_referrals.length}</Text>
450
+ </View>
451
+ <Button
452
+ title='CREATE'
453
+ type='success'
454
+ style={{ padding:10 }}
455
+ onPress={() => onManageReferral()}
456
+ />
457
+ </View>
458
+ <View style={{ padding:10 }}>
459
+ <SearchBox hide_search_button onChange={(text) => setReferralSearch(text)} />
460
+ </View>
461
+ <View transparent type='body'>
462
+ <FlatList
463
+ data={filtered_referrals.sort((a,b) => moment(a.create_datetime).unix() - moment(b.create_datetime).unix())}
464
+ key={'company_referrals'}
465
+ keyExtractor={item => item.player_referral_id.toString()}
466
+ renderItem={renderReferrals}
467
+ />
468
+ </View>
469
+ </View>
470
+ </View>
471
+ )
315
472
  case 'second_row':
316
473
  const active_embeds = company_embeds.length
317
474
  return (
package/src/index.tsx CHANGED
@@ -66,10 +66,12 @@ import ManageFlashMarket from './FlashMarket/components/ManageFlashMarket';
66
66
  import PartnerPortal from './PartnerPortal';
67
67
  import EmbedManager from './PartnerPortal/components/EmbedManager';
68
68
  import CreateEmbed from './PartnerPortal/components/CreateEmbed';
69
+ import ReferralCodeManager from './PartnerPortal/components/ReferralCodeManager';
69
70
  export {
70
71
  Authenticator,
71
72
  Observer,
72
73
  CreateEmbed,
74
+ ReferralCodeManager,
73
75
  CreateEngagement,
74
76
  DiscordConnectionManager,
75
77
  BEEventApi,
package/src/types.d.ts CHANGED
@@ -436,6 +436,27 @@ export interface CompanyProps {
436
436
  last_update_datetime: any
437
437
  }
438
438
 
439
+ export interface CompanyPlayerStatProps {
440
+ player_count: number,
441
+ referral_code:string,
442
+ vouched_status:string,
443
+ revenue: number
444
+ }
445
+
446
+ export interface CompanyPlayerProps {
447
+ player_id:string,
448
+ username:string,
449
+ email:string,
450
+ profile_pic?:string,
451
+ phone:number,
452
+ verified:boolean,
453
+ phone_verified:boolean,
454
+ vouched_status:'verified'|'unverified'|'failed'
455
+ code_used:string,
456
+ revenue:number,
457
+ create_datetime:any
458
+ }
459
+
439
460
  export interface PlayerPodcastProps {
440
461
  player_podcast_id:string,
441
462
  player_id:string,
@@ -3097,6 +3118,7 @@ export interface EmbedPropertyProps {
3097
3118
  embed_id:string,
3098
3119
  property:string,
3099
3120
  description: string,
3121
+ required?:boolean,
3100
3122
  status: 'active'|'archived',
3101
3123
  component:string,
3102
3124
  label:string,