be-components 6.6.2 → 6.6.4

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 (57) hide show
  1. package/lib/commonjs/Components/ConfirmAlert.js +34 -0
  2. package/lib/commonjs/Components/ConfirmAlert.js.map +1 -0
  3. package/lib/commonjs/Group/api/index.js +108 -8
  4. package/lib/commonjs/Group/api/index.js.map +1 -1
  5. package/lib/commonjs/Group/components/GroupCTAButton.js +23 -21
  6. package/lib/commonjs/Group/components/GroupCTAButton.js.map +1 -1
  7. package/lib/commonjs/Group/index.js +365 -89
  8. package/lib/commonjs/Group/index.js.map +1 -1
  9. package/lib/commonjs/SocialComponents/Contacts/useContacts.js +4 -1
  10. package/lib/commonjs/SocialComponents/Contacts/useContacts.js.map +1 -1
  11. package/lib/module/Components/ConfirmAlert.js +29 -0
  12. package/lib/module/Components/ConfirmAlert.js.map +1 -0
  13. package/lib/module/Group/api/index.js +108 -8
  14. package/lib/module/Group/api/index.js.map +1 -1
  15. package/lib/module/Group/components/GroupCTAButton.js +23 -21
  16. package/lib/module/Group/components/GroupCTAButton.js.map +1 -1
  17. package/lib/module/Group/index.js +365 -89
  18. package/lib/module/Group/index.js.map +1 -1
  19. package/lib/module/SocialComponents/Contacts/useContacts.js +4 -1
  20. package/lib/module/SocialComponents/Contacts/useContacts.js.map +1 -1
  21. package/lib/typescript/lib/commonjs/Components/ConfirmAlert.d.ts +6 -0
  22. package/lib/typescript/lib/commonjs/Components/ConfirmAlert.d.ts.map +1 -0
  23. package/lib/typescript/lib/commonjs/Group/api/index.d.ts +9 -1
  24. package/lib/typescript/lib/commonjs/Group/api/index.d.ts.map +1 -1
  25. package/lib/typescript/lib/commonjs/Group/components/GroupCTAButton.d.ts +3 -1
  26. package/lib/typescript/lib/commonjs/Group/components/GroupCTAButton.d.ts.map +1 -1
  27. package/lib/typescript/lib/commonjs/Group/index.d.ts +5 -1
  28. package/lib/typescript/lib/commonjs/Group/index.d.ts.map +1 -1
  29. package/lib/typescript/lib/commonjs/SocialComponents/Contacts/useContacts.d.ts +1 -0
  30. package/lib/typescript/lib/commonjs/SocialComponents/Contacts/useContacts.d.ts.map +1 -1
  31. package/lib/typescript/lib/commonjs/SocialComponents/index.d.ts +1 -0
  32. package/lib/typescript/lib/module/Components/ConfirmAlert.d.ts +5 -0
  33. package/lib/typescript/lib/module/Components/ConfirmAlert.d.ts.map +1 -0
  34. package/lib/typescript/lib/module/Group/api/index.d.ts +9 -1
  35. package/lib/typescript/lib/module/Group/api/index.d.ts.map +1 -1
  36. package/lib/typescript/lib/module/Group/components/GroupCTAButton.d.ts +3 -1
  37. package/lib/typescript/lib/module/Group/components/GroupCTAButton.d.ts.map +1 -1
  38. package/lib/typescript/lib/module/Group/index.d.ts +5 -1
  39. package/lib/typescript/lib/module/Group/index.d.ts.map +1 -1
  40. package/lib/typescript/lib/module/SocialComponents/Contacts/useContacts.d.ts +1 -0
  41. package/lib/typescript/lib/module/SocialComponents/Contacts/useContacts.d.ts.map +1 -1
  42. package/lib/typescript/src/Components/ConfirmAlert.d.ts +5 -0
  43. package/lib/typescript/src/Components/ConfirmAlert.d.ts.map +1 -0
  44. package/lib/typescript/src/Group/api/index.d.ts +15 -2
  45. package/lib/typescript/src/Group/api/index.d.ts.map +1 -1
  46. package/lib/typescript/src/Group/components/GroupCTAButton.d.ts +4 -1
  47. package/lib/typescript/src/Group/components/GroupCTAButton.d.ts.map +1 -1
  48. package/lib/typescript/src/Group/index.d.ts +6 -2
  49. package/lib/typescript/src/Group/index.d.ts.map +1 -1
  50. package/lib/typescript/src/SocialComponents/Contacts/useContacts.d.ts +1 -0
  51. package/lib/typescript/src/SocialComponents/Contacts/useContacts.d.ts.map +1 -1
  52. package/package.json +1 -1
  53. package/src/Components/ConfirmAlert.tsx +39 -0
  54. package/src/Group/api/index.ts +81 -10
  55. package/src/Group/components/GroupCTAButton.tsx +12 -10
  56. package/src/Group/index.tsx +258 -75
  57. package/src/SocialComponents/Contacts/useContacts.tsx +4 -2
@@ -11,15 +11,48 @@ import CompetitionCard from '../Engage/components/CompetitionCard';
11
11
  import { PostCard } from '../SocialComponents';
12
12
  import Pagination from '../Components/Pagination';
13
13
  import GroupCTAButton from './components/GroupCTAButton';
14
- const sections = ['header', 'chat', 'me', 'toggle', 'competition_toggle', 'members', 'competitions', 'activity'];
14
+ import PollCampaignCard from '../Engage/components/PollCampaignCard';
15
+ import SquaresCompetitionCard from '../Engage/components/SquaresCompetitionCard';
16
+ import { showConfirmAlert } from '../Components/ConfirmAlert';
17
+ const sections = ['header', 'chat', 'toggle', 'me', 'competition_toggle', 'new_competition', 'members', 'competitions', 'activity'];
18
+ const member_stat_options = [{
19
+ stat_key: 'roi_pct',
20
+ label: 'ROI Percent',
21
+ multiplier: 100,
22
+ suffix: '%'
23
+ }, {
24
+ stat_key: 'winnings',
25
+ label: 'Winnings',
26
+ multiplier: 1,
27
+ prefix: '$'
28
+ }, {
29
+ stat_key: 'win_pct',
30
+ label: 'Win Percent',
31
+ multiplier: 100,
32
+ suffix: '%'
33
+ }, {
34
+ stat_key: 'fulfilled_positions',
35
+ label: 'Matched Bets',
36
+ multiplier: 1,
37
+ suffix: ' Bets'
38
+ }, {
39
+ stat_key: 'original_stake',
40
+ label: 'Betting Volume',
41
+ multiplier: 1,
42
+ prefix: '$'
43
+ }];
15
44
  const GroupComponent = ({
45
+ refresh_key,
16
46
  group_id,
17
47
  player,
18
48
  mode,
19
49
  onInvitePlayer,
20
50
  onSelectCompetition,
21
51
  onSelectChat,
22
- onSelectPlayer
52
+ onSelectPlayer,
53
+ onNudgePlayer,
54
+ onSelectPollCampaign,
55
+ onSelectSquaresCompetition
23
56
  }) => {
24
57
  const Colors = useColors();
25
58
  const leader_options = [{
@@ -54,6 +87,9 @@ const GroupComponent = ({
54
87
  toggle: 'upcoming',
55
88
  competition_payout_types: [],
56
89
  competition_result_types: [],
90
+ events: [],
91
+ squares_competitions: [],
92
+ poll_campaigns: [],
57
93
  competition_types: [],
58
94
  active_competitions: [],
59
95
  competition_players: [],
@@ -75,28 +111,35 @@ const GroupComponent = ({
75
111
  group_messages: [],
76
112
  editing: false,
77
113
  show_player_status: false,
114
+ stats_expanded: false,
78
115
  active_toggle: 'members',
116
+ active_stat: member_stat_options[0],
79
117
  group_players: [],
80
118
  players: []
81
119
  });
82
120
  const {
83
121
  loading,
84
122
  group,
123
+ action_loading,
124
+ stats_expanded,
85
125
  active_toggle,
86
126
  editing,
87
127
  show_player_status,
128
+ active_stat,
88
129
  group_messages,
89
130
  group_players,
90
131
  my_group_player,
91
132
  players
92
133
  } = group_data;
134
+ const admin = player?.player_id == group?.group_admin ? true : false;
93
135
  const {
94
136
  sorted_players,
95
137
  player_analytics
96
- } = GroupHelpers.sortMembers(group_players, order_analytics);
138
+ } = GroupHelpers.sortMembers(group_players, order_analytics, active_stat?.stat_key);
139
+ const sorted_engagements = GroupHelpers.sortCompetitionAction([], comp_data.active_competitions, [], comp_data.squares_competitions, comp_data.poll_campaigns);
97
140
  useEffect(() => {
98
141
  getGroupData(group_id);
99
- }, [group_id]);
142
+ }, [group_id, refresh_key]);
100
143
  useEffect(() => {
101
144
  getToggleData(active_toggle);
102
145
  }, [active_toggle]);
@@ -118,7 +161,7 @@ const GroupComponent = ({
118
161
  const getActitiyData = async page => {
119
162
  setActivityData({
120
163
  ...activity_data,
121
- loading: false
164
+ loading: true
122
165
  });
123
166
  const activity = await GroupApi.getPostsByGroupId(group_id, page);
124
167
  let order_ids = [];
@@ -143,16 +186,30 @@ const GroupComponent = ({
143
186
  competition_records: [],
144
187
  competition_results: []
145
188
  };
189
+ let server_polls = [];
190
+ let server_sq = [];
191
+ let server_events = [];
146
192
  if (type == 'upcoming') {
147
193
  resp = await GroupApi.getActiveCompetitions(group_id);
194
+ server_polls = await GroupApi.getActivePolls(group_id);
195
+ server_sq = await GroupApi.getActiveSquares(group_id);
196
+ let event_ids = server_sq.map(sq => sq.event_id);
197
+ server_events = await GroupApi.getEventsByIds(event_ids);
148
198
  } else {
149
199
  resp = await GroupApi.getHistoryCompetitions(group_id, page);
200
+ server_polls = await GroupApi.getHistoryPolls(group_id, page);
201
+ server_sq = await GroupApi.getHistorySquares(group_id, page);
202
+ let event_ids = server_sq.map(sq => sq.event_id);
203
+ server_events = await GroupApi.getEventsByIds(event_ids);
150
204
  }
151
205
  const opts = await GroupApi.getCompetitionOptions();
152
206
  setCompData({
153
207
  ...comp_data,
154
208
  loading: false,
155
209
  toggle: type,
210
+ poll_campaigns: server_polls,
211
+ squares_competitions: server_sq,
212
+ events: server_events,
156
213
  competition_players: resp.competition_players,
157
214
  competition_records: resp.competition_records,
158
215
  competition_results: resp.competition_results,
@@ -205,11 +262,13 @@ const GroupComponent = ({
205
262
  });
206
263
  };
207
264
  const renderPlayers = data => {
208
- const player = players.find(p => p.player_id == data.item.player_id);
209
- if (!player) {
265
+ const pl = players.find(p => p.player_id == data.item.player_id);
266
+ if (!pl) {
210
267
  return /*#__PURE__*/React.createElement(React.Fragment, null);
211
268
  }
212
269
  const player_analytic = player_analytics[data.item.player_id];
270
+ const analytic = player_analytic ? player_analytic[active_stat?.stat_key] : 0;
271
+ const is_loading = action_loading == data.item.group_player_id ? true : false;
213
272
  return /*#__PURE__*/React.createElement(Button, {
214
273
  transparent: true,
215
274
  style: {
@@ -220,8 +279,36 @@ const GroupComponent = ({
220
279
  borderColor: Colors.borders.light,
221
280
  borderRadius: 0
222
281
  },
223
- onPress: () => onSelectPlayer(player)
224
- }, /*#__PURE__*/React.createElement(View, {
282
+ onPress: () => onSelectPlayer(pl)
283
+ }, admin && data.item.player_id != player?.player_id ? /*#__PURE__*/React.createElement(Button, {
284
+ title: "X",
285
+ title_color: Colors.text.error,
286
+ loading: is_loading,
287
+ style: {
288
+ padding: 10,
289
+ opacity: is_loading ? 0.5 : 1
290
+ },
291
+ onPress: () => {
292
+ showConfirmAlert('Are you sure?', 'This will boot and ban this player from the group. You can unban the player later', async () => {
293
+ //Ok we have confirmed it!
294
+ let new_pl = await GroupApi.bootPlayer(data.item.group_player_id);
295
+ if (!new_pl) {
296
+ setGroupData({
297
+ ...group_data,
298
+ action_loading: undefined
299
+ });
300
+ return alert('Unable to boot player at this time. Please try again');
301
+ }
302
+ setGroupData({
303
+ ...group_data,
304
+ action_loading: undefined,
305
+ group_players: group_players.filter(gp => gp.group_player_id != new_pl.group_player_id).concat(new_pl)
306
+ });
307
+ }), () => {
308
+ console.log('cancelled');
309
+ };
310
+ }
311
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement(View, {
225
312
  float: true,
226
313
  style: {
227
314
  borderRadius: 100,
@@ -229,7 +316,7 @@ const GroupComponent = ({
229
316
  }
230
317
  }, /*#__PURE__*/React.createElement(Image, {
231
318
  source: {
232
- uri: player.profile_pic
319
+ uri: pl.profile_pic
233
320
  },
234
321
  style: {
235
322
  height: 45,
@@ -245,32 +332,123 @@ const GroupComponent = ({
245
332
  }
246
333
  }, /*#__PURE__*/React.createElement(Text, {
247
334
  theme: "h1"
248
- }, "@", player.username), /*#__PURE__*/React.createElement(Text, {
335
+ }, "@", pl.username), /*#__PURE__*/React.createElement(Text, {
249
336
  theme: "description",
250
337
  style: {
251
338
  marginTop: 3
252
339
  }
253
- }, "Joined ", moment(data.item.create_datetime).fromNow())), player_analytic ? /*#__PURE__*/React.createElement(Text, {
254
- theme: "h2"
255
- }, "ROI ", (player_analytic.roi_pct * 100).toFixed(2), "%") : /*#__PURE__*/React.createElement(React.Fragment, null));
340
+ }, data.item.status == 'active' ? 'Joined' : 'Invited', " ", moment(data.item.last_update_datetime).fromNow())), active_stat && player_analytic && data.item.status == 'active' ? /*#__PURE__*/React.createElement(View, {
341
+ style: {
342
+ alignItems: 'flex-end'
343
+ }
344
+ }, /*#__PURE__*/React.createElement(Text, {
345
+ theme: "h1"
346
+ }, active_stat.prefix, (parseFloat(analytic) * active_stat.multiplier).toFixed(2), active_stat.suffix), /*#__PURE__*/React.createElement(Text, {
347
+ theme: "light",
348
+ style: {
349
+ marginTop: 3
350
+ }
351
+ }, active_stat.label)) : /*#__PURE__*/React.createElement(React.Fragment, null), data.item.status == 'invited' ? /*#__PURE__*/React.createElement(Button, {
352
+ disabled: !admin,
353
+ type: "text",
354
+ style: {
355
+ padding: 10,
356
+ opacity: is_loading ? 0.5 : 1
357
+ },
358
+ loading: is_loading,
359
+ title_color: Colors.text.action,
360
+ title: admin ? 'Nudge' : 'Invited',
361
+ onPress: () => onNudgePlayer(pl, data.item)
362
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null), admin && data.item.status == 'invited' ? /*#__PURE__*/React.createElement(Button, {
363
+ transparent: true,
364
+ style: {
365
+ padding: 10,
366
+ opacity: is_loading ? 0.5 : 1
367
+ },
368
+ title_color: Colors.text.error,
369
+ loading: is_loading,
370
+ title: "Uninvite",
371
+ onPress: async () => {
372
+ setGroupData({
373
+ ...group_data,
374
+ action_loading: data.item.group_player_id
375
+ });
376
+ const new_pl = await GroupApi.uninvitePlayer(data.item.group_player_id);
377
+ if (!new_pl) {
378
+ setGroupData({
379
+ ...group_data,
380
+ action_loading: undefined
381
+ });
382
+ return alert('Unable to uninvite player. Please try again');
383
+ }
384
+ setGroupData({
385
+ ...group_data,
386
+ action_loading: undefined,
387
+ group_players: group_players.filter(gp => gp.group_player_id != new_pl.group_player_id).concat(new_pl)
388
+ });
389
+ }
390
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null));
256
391
  };
257
- const renderCompetitions = data => {
258
- const type = comp_data.competition_types.find(t => t.competition_type_id == data.item.competition_type_id);
259
- const result = comp_data.competition_result_types.find(r => r.competition_result_type_id == data.item.competition_result_type_id);
260
- if (!type || !result) {
261
- return /*#__PURE__*/React.createElement(React.Fragment, null);
392
+ const renderEngagements = data => {
393
+ switch (data.item.type) {
394
+ case 'competition':
395
+ const competition = comp_data.active_competitions.find(c => c.competition_id == data.item.id);
396
+ if (!competition) {
397
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
398
+ }
399
+ const type = comp_data.competition_types.find(t => t.competition_type_id == competition.competition_type_id);
400
+ const result = comp_data.competition_result_types.find(r => r.competition_result_type_id == competition.competition_result_type_id);
401
+ if (!type || !result) {
402
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
403
+ }
404
+ const my_result = comp_data.competition_results.find(cr => cr.player_id == player?.player_id && cr.competition_id == competition.competition_id);
405
+ const my_record = comp_data.competition_records.find(cr => cr.player_id == player?.player_id && cr.competition_id == competition.competition_id);
406
+ return /*#__PURE__*/React.createElement(View, {
407
+ style: {
408
+ padding: 5
409
+ }
410
+ }, /*#__PURE__*/React.createElement(CompetitionCard, {
411
+ competition: competition,
412
+ player: player,
413
+ competition_type: type,
414
+ competition_record: my_record,
415
+ competition_result: my_result,
416
+ competition_result_type: result,
417
+ onCompetitionSelect: onSelectCompetition
418
+ }));
419
+ case 'bracket':
420
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
421
+ case 'squares':
422
+ const squares_comp = comp_data.squares_competitions.find(sc => sc.sq_comp_id == data.item.id);
423
+ if (!squares_comp) {
424
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
425
+ }
426
+ const event = comp_data.events.find(e => e.event_id == squares_comp.event_id);
427
+ return /*#__PURE__*/React.createElement(View, {
428
+ style: {
429
+ padding: 5
430
+ }
431
+ }, /*#__PURE__*/React.createElement(SquaresCompetitionCard, {
432
+ squares_competition: squares_comp,
433
+ event: event,
434
+ onSelectCompetition: onSelectSquaresCompetition
435
+ }));
436
+ case 'poll_campaign':
437
+ const poll_campaign = comp_data.poll_campaigns.find(pc => pc.poll_campaign_id == data.item.id);
438
+ if (!poll_campaign) {
439
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
440
+ }
441
+ return /*#__PURE__*/React.createElement(View, {
442
+ style: {
443
+ padding: 5
444
+ }
445
+ }, /*#__PURE__*/React.createElement(PollCampaignCard, {
446
+ poll_campaign: poll_campaign,
447
+ onSelectPollCampaign: onSelectPollCampaign
448
+ }));
449
+ default:
450
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
262
451
  }
263
- const my_result = comp_data.competition_results.find(cr => cr.player_id == player?.player_id && cr.competition_id == data.item.competition_id);
264
- const my_record = comp_data.competition_records.find(cr => cr.player_id == player?.player_id && cr.competition_id == data.item.competition_id);
265
- return /*#__PURE__*/React.createElement(CompetitionCard, {
266
- competition: data.item,
267
- player: player,
268
- competition_type: type,
269
- competition_record: my_record,
270
- competition_result: my_result,
271
- competition_result_type: result,
272
- onCompetitionSelect: onSelectCompetition
273
- });
274
452
  };
275
453
  const renderPosts = data => {
276
454
  let player = players.find(p => p.player_id == data.item.player_id);
@@ -356,13 +534,49 @@ const GroupComponent = ({
356
534
  }
357
535
  }, /*#__PURE__*/React.createElement(GroupCTAButton, {
358
536
  group: group,
359
- message_length: 100,
537
+ hide_from_player: true,
538
+ message_length: 20,
360
539
  players: players,
361
540
  group_messages: group_messages,
362
541
  group_players: group_players,
363
542
  onSelectChat: onSelectChat
364
543
  }));
544
+ case 'new_competition':
545
+ if (active_toggle != 'competitions') {
546
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
547
+ }
548
+ return /*#__PURE__*/React.createElement(View, {
549
+ type: "footer",
550
+ style: {
551
+ flexDirection: 'row',
552
+ alignItems: 'center',
553
+ padding: 10
554
+ }
555
+ }, /*#__PURE__*/React.createElement(View, {
556
+ transparent: true,
557
+ style: {
558
+ flex: 1,
559
+ marginRight: 10
560
+ }
561
+ }, /*#__PURE__*/React.createElement(Text, {
562
+ theme: "h2"
563
+ }, "CREATE A NEW COMPETITION"), /*#__PURE__*/React.createElement(Text, {
564
+ theme: "description",
565
+ style: {
566
+ marginTop: 3
567
+ }
568
+ }, "Create a new pick-em or other engagement for this group!")), /*#__PURE__*/React.createElement(Button, {
569
+ type: "success",
570
+ style: {
571
+ padding: 10
572
+ },
573
+ title: "CREATE",
574
+ onPress: () => console.log('New competition!')
575
+ }));
365
576
  case 'me':
577
+ if (active_toggle != 'members') {
578
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
579
+ }
366
580
  return /*#__PURE__*/React.createElement(View, {
367
581
  type: "row",
368
582
  style: {
@@ -423,7 +637,7 @@ const GroupComponent = ({
423
637
  ...group_data,
424
638
  show_player_status: true
425
639
  })
426
- }) : my_group_player?.status != 'invited' ? /*#__PURE__*/React.createElement(Button, {
640
+ }) : my_group_player?.status != 'invited' && !admin ? /*#__PURE__*/React.createElement(Button, {
427
641
  type: "error",
428
642
  title: "LEAVE",
429
643
  style: {
@@ -433,7 +647,10 @@ const GroupComponent = ({
433
647
  ...group_data,
434
648
  show_player_status: true
435
649
  })
436
- }) : /*#__PURE__*/React.createElement(React.Fragment, null)) : /*#__PURE__*/React.createElement(React.Fragment, null));
650
+ }) : my_group_player?.status != 'invited' && admin ? /*#__PURE__*/React.createElement(Text, {
651
+ theme: "h1",
652
+ color: Colors.text.gold
653
+ }, "ADMIN") : /*#__PURE__*/React.createElement(React.Fragment, null)) : /*#__PURE__*/React.createElement(React.Fragment, null));
437
654
  case 'toggle':
438
655
  return /*#__PURE__*/React.createElement(View, {
439
656
  style: {
@@ -448,7 +665,7 @@ const GroupComponent = ({
448
665
  label: 'Activity'
449
666
  }, {
450
667
  key: 'competitions',
451
- label: 'Competitions'
668
+ label: 'Engagements'
452
669
  }],
453
670
  selected_option: active_toggle,
454
671
  onSelectOption: option => setGroupData({
@@ -471,12 +688,15 @@ const GroupComponent = ({
471
688
  style: {
472
689
  padding: 10
473
690
  }
474
- }, /*#__PURE__*/React.createElement(Pagination, {
475
- offset: activity_data.offset,
476
- onNext: () => getActitiyData(activity_data.offset + 1),
477
- onPrevious: () => getActitiyData(activity_data.offset - 1)
478
- }), /*#__PURE__*/React.createElement(FlatList, {
479
- data: activity_data.posts,
691
+ }, activity_data.loading ? /*#__PURE__*/React.createElement(ActivityIndicator, {
692
+ style: {
693
+ padding: 20,
694
+ alignSelf: 'center'
695
+ },
696
+ size: 'large',
697
+ color: Colors.text.h1
698
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement(FlatList, {
699
+ data: activity_data.posts.sort((a, b) => moment(b.create_datetime).unix() - moment(a.create_datetime).unix()),
480
700
  key: 'post_list',
481
701
  keyExtractor: item => item.memo_post_id.toString(),
482
702
  renderItem: renderPosts
@@ -485,16 +705,103 @@ const GroupComponent = ({
485
705
  if (active_toggle != 'members') {
486
706
  return /*#__PURE__*/React.createElement(React.Fragment, null);
487
707
  }
488
- return /*#__PURE__*/React.createElement(View, {
708
+ return /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(View, {
709
+ type: "header",
710
+ style: {
711
+ flexDirection: 'row',
712
+ alignItems: 'center',
713
+ padding: 10,
714
+ zIndex: 10
715
+ }
716
+ }, /*#__PURE__*/React.createElement(View, {
717
+ transparent: true,
718
+ style: {
719
+ flex: 1,
720
+ marginRight: 10
721
+ }
722
+ }, /*#__PURE__*/React.createElement(Text, {
723
+ theme: "h1"
724
+ }, "Group Members"), /*#__PURE__*/React.createElement(Text, {
725
+ theme: "description"
726
+ }, "Active and invited members are show below. You can sort the members by different leaderboards using the dropdown on the right.")), /*#__PURE__*/React.createElement(View, {
727
+ float: true
728
+ }, /*#__PURE__*/React.createElement(Button, {
729
+ transparent: true,
730
+ style: {
731
+ flexDirection: 'row',
732
+ alignItems: 'center',
733
+ padding: 10
734
+ },
735
+ onPress: () => setGroupData({
736
+ ...group_data,
737
+ stats_expanded: !stats_expanded
738
+ })
739
+ }, /*#__PURE__*/React.createElement(Text, {
740
+ style: {
741
+ marginRight: 5
742
+ },
743
+ theme: "h2"
744
+ }, active_stat?.label ?? 'Select'), /*#__PURE__*/React.createElement(Icons.ChevronIcon, {
745
+ direction: stats_expanded ? 'up' : 'down',
746
+ color: Colors.text.h1,
747
+ size: 8
748
+ })), stats_expanded ? /*#__PURE__*/React.createElement(View, {
749
+ float: true,
750
+ style: {
751
+ position: 'absolute',
752
+ top: 0,
753
+ right: 0,
754
+ width: 200
755
+ }
756
+ }, member_stat_options.map(so => {
757
+ return /*#__PURE__*/React.createElement(Button, {
758
+ transparent: true,
759
+ style: {
760
+ padding: 10,
761
+ borderRadius: 0,
762
+ borderBottomWidth: 1,
763
+ borderColor: Colors.borders.light
764
+ },
765
+ onPress: () => setGroupData({
766
+ ...group_data,
767
+ active_stat: so,
768
+ stats_expanded: false
769
+ })
770
+ }, /*#__PURE__*/React.createElement(Text, {
771
+ theme: "h1"
772
+ }, so.label));
773
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null))), /*#__PURE__*/React.createElement(View, {
489
774
  style: {
490
775
  padding: 10
491
776
  }
777
+ }, /*#__PURE__*/React.createElement(Toggle, {
778
+ options: leader_options.map(o => {
779
+ return {
780
+ key: o.option,
781
+ label: o.label
782
+ };
783
+ }),
784
+ selected_option: time_option?.option,
785
+ onSelectOption: option => {
786
+ const selected = leader_options.find(o => o.option == option);
787
+ if (!selected) {
788
+ return;
789
+ }
790
+ getGroupAnalytics(group_id, selected);
791
+ }
792
+ })), /*#__PURE__*/React.createElement(View, {
793
+ style: {
794
+ padding: 10,
795
+ zIndex: -10
796
+ }
492
797
  }, /*#__PURE__*/React.createElement(FlatList, {
493
798
  data: sorted_players,
494
799
  keyExtractor: item => item.group_player_id.toString(),
495
800
  renderItem: renderPlayers,
801
+ initialNumToRender: 10,
802
+ windowSize: 4,
496
803
  key: 'group_members'
497
- }));
804
+ })));
498
805
  case 'competition_toggle':
499
806
  if (active_toggle != 'competitions') {
500
807
  return /*#__PURE__*/React.createElement(React.Fragment, null);
@@ -523,11 +830,18 @@ const GroupComponent = ({
523
830
  style: {
524
831
  padding: 10
525
832
  }
526
- }, /*#__PURE__*/React.createElement(FlatList, {
833
+ }, comp_data.loading ? /*#__PURE__*/React.createElement(ActivityIndicator, {
834
+ style: {
835
+ padding: 20,
836
+ alignSelf: 'center'
837
+ },
838
+ size: 'large',
839
+ color: Colors.text.h1
840
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement(FlatList, {
527
841
  key: 'competition_list',
528
- keyExtractor: item => item.competition_id.toString(),
529
- data: comp_data.active_competitions.sort((a, b) => moment(a.scheduled_datetime).unix() - moment(b.scheduled_datetime).unix()),
530
- renderItem: renderCompetitions
842
+ keyExtractor: item => item.id.toString(),
843
+ data: sorted_engagements.sort((a, b) => moment(a.scheduled_datetime).unix() - moment(b.scheduled_datetime).unix()),
844
+ renderItem: renderEngagements
531
845
  }));
532
846
  default:
533
847
  return /*#__PURE__*/React.createElement(React.Fragment, null);
@@ -546,49 +860,11 @@ const GroupComponent = ({
546
860
  key: 'group_list',
547
861
  keyExtractor: item => item,
548
862
  renderItem: renderSections
549
- }), active_toggle == 'members' ? /*#__PURE__*/React.createElement(Toggle, {
550
- options: leader_options.map(o => {
551
- return {
552
- key: o.option,
553
- label: o.label
554
- };
555
- }),
556
- selected_option: time_option?.option,
557
- onSelectOption: option => {
558
- const selected = leader_options.find(o => o.option == option);
559
- if (!selected) {
560
- return;
561
- }
562
- getGroupAnalytics(group_id, selected);
563
- }
564
- }) : active_toggle == 'competitions' ? /*#__PURE__*/React.createElement(View, {
565
- type: "footer",
566
- style: {
567
- flexDirection: 'row',
568
- alignItems: 'center',
569
- padding: 10
570
- }
571
- }, /*#__PURE__*/React.createElement(View, {
572
- transparent: true,
573
- style: {
574
- flex: 1,
575
- marginRight: 10
576
- }
577
- }, /*#__PURE__*/React.createElement(Text, {
578
- theme: "h2"
579
- }, "CREATE A NEW COMPETITION"), /*#__PURE__*/React.createElement(Text, {
580
- theme: "description",
581
- style: {
582
- marginTop: 3
583
- }
584
- }, "Create a new pick-em or other engagement for this group!")), /*#__PURE__*/React.createElement(Button, {
585
- type: "success",
586
- style: {
587
- padding: 10
588
- },
589
- title: "CREATE",
590
- onPress: () => console.log('New competition!')
591
- })) : /*#__PURE__*/React.createElement(React.Fragment, null)), editing && group ? /*#__PURE__*/React.createElement(View, {
863
+ }), active_toggle == 'members' ? /*#__PURE__*/React.createElement(React.Fragment, null) : active_toggle == 'activity' ? /*#__PURE__*/React.createElement(Pagination, {
864
+ offset: activity_data.offset,
865
+ onNext: () => getActitiyData(activity_data.offset + 1),
866
+ onPrevious: () => getActitiyData(activity_data.offset - 1)
867
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null)), editing && group ? /*#__PURE__*/React.createElement(View, {
592
868
  type: "blur",
593
869
  style: {
594
870
  position: 'absolute',