@everymatrix/casino-games-category-section 1.34.0 → 1.34.1

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/index.html CHANGED
@@ -33,8 +33,8 @@
33
33
  <casino-games-category-section
34
34
  endpoint="https://demo-api.stage.norway.everymatrix.com"
35
35
  lang="en"
36
- session="80ae132b-ce15-4980-b537-8133de4ba558"
37
- userid="3884262"
36
+ session="f139354a-99d2-48c6-8b07-7542fe53311c"
37
+ userid="4506648"
38
38
  favorites="true"
39
39
  fetchviaevent="false"
40
40
  displayedgamecount="8"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@everymatrix/casino-games-category-section",
3
- "version": "1.34.0",
3
+ "version": "1.34.1",
4
4
  "main": "dist/casino-games-category-section.js",
5
5
  "svelte": "src/index.ts",
6
6
  "scripts": {
@@ -35,5 +35,5 @@
35
35
  "publishConfig": {
36
36
  "access": "public"
37
37
  },
38
- "gitHead": "c9ad96fd45d67455a049f61462d8b4523a78ba54"
38
+ "gitHead": "5ce0bbd8d4005bb9f6fbed830e8882a14e79712a"
39
39
  }
@@ -76,11 +76,10 @@
76
76
  let container:any;
77
77
  let maxTotal:number;
78
78
  let categoryName:HTMLElement;
79
- let favoriteGames:Array<Object>;
80
79
  let showFavGamesCategory:boolean = false;
81
80
  let customStylingContainer:HTMLElement;
82
81
  let validObservers:boolean = false;
83
-
82
+
84
83
  let thumbnailContainer:Array<HTMLElement> = new Array(10000);
85
84
  let intersectingIndexes:Object = {};
86
85
  let visibilityconnect:string = '';
@@ -89,6 +88,9 @@
89
88
  let visibilityChange;
90
89
  let dataloaded;
91
90
 
91
+ let favoriteGames:Array<Object>;
92
+ let listOfGamesIDs:Array<string> = [];
93
+
92
94
  let favoriteGamesData:any = {
93
95
  items: [],
94
96
  count: 0,
@@ -141,50 +143,56 @@
141
143
  });
142
144
  });
143
145
 
144
- // Start favored games section
145
- const getFavoredGames = (sessionId:string, playerID:string) => {
146
+ // Start favored games section
147
+ const getFavoritesGames = (sessionID:string, playerID:string) => {
146
148
  let url = `${endpoint}/v1/player/${playerID}/favorites/`;
147
-
148
149
  isLoading = true;
149
150
  let options = {
150
- method: "GET",
151
- headers: {
152
- 'X-SessionID': sessionID,
153
- }
151
+ method: "GET",
152
+ headers: {
153
+ 'X-SessionID': sessionID,
154
+ }
154
155
  };
155
156
 
156
157
  return new Promise((resolve, reject) => {
157
- fetch(url, options)
158
- .then((res:any) => res.json())
159
- .then((updatedArray:any) => {
160
- isLoading = false;
158
+ fetch(url, options)
159
+ .then((res:any) => res.json())
160
+ .then((updatedArray:any) => {
161
+ isLoading = false;
162
+
163
+ if (updatedArray) {
164
+ favoriteGames = updatedArray.items;
165
+ favoriteGames.forEach((fav) => {
166
+ if (!listOfGamesIDs.includes(fav.id)) {
167
+ listOfGamesIDs.push(fav.id);
168
+ }
169
+ });
170
+ window.postMessage({ type: 'UpdateFavoritesCount', favoriteGames});
171
+ } else {
172
+ favoriteGames = [];
173
+ }
161
174
 
162
- if (updatedArray) {
163
- favoriteGames = updatedArray.items;
164
- } else {
165
- favoriteGames = [];
166
- }
175
+ if(categoryid === 'FAVORITES') showFavoriteSection(favoriteGames);
167
176
 
168
- shownCategoryData.forEach((item:any) => {
169
- item.isFavorite = checkFavorite(item.id);
170
- });
177
+ shownCategoryData.forEach((item) => {
178
+ item.isFavorite = checkFavorite(item.id);
179
+ });
171
180
 
172
- let aux:any = shownCategoryData;
173
- shownCategoryData = undefined;
174
- shownCategoryData = aux;
181
+ let aux:any = shownCategoryData;
182
+ shownCategoryData = undefined;
183
+ shownCategoryData = aux;
175
184
 
176
- resolve(favoriteGames);
185
+ resolve(favoriteGames);
177
186
 
178
- }).catch((err:any) => {
179
- console.error(err);
180
-
181
- reject(err);
182
- });
183
- });
187
+ }).catch((err:any) => {
188
+ console.error(err);
189
+ reject(err);
190
+ });
191
+ });
184
192
  }
185
193
 
186
194
  // @TODO categoryId type
187
- const getData = (categoryId:any, offset:number, limit:number) => {
195
+ const getData = (categoryid:any, offset:number, limit:number) => {
188
196
  isLoading = true;
189
197
  let categoryidparsed = '';
190
198
  let url:any = '';
@@ -247,7 +255,7 @@
247
255
  }
248
256
  }
249
257
  }
250
-
258
+
251
259
  fetch(url)
252
260
  .then((res:any) => res.json())
253
261
  .then((categoryData:any) => {
@@ -403,7 +411,7 @@
403
411
 
404
412
  case 'CategoryChange':
405
413
  limit = 20;
406
- break;
414
+ break;
407
415
 
408
416
  case 'ApplySorter':
409
417
  categoryid = e.data.itemId;
@@ -416,101 +424,187 @@
416
424
  });
417
425
  break;
418
426
 
419
- case 'CategoryUpdate':
420
- searched = false;
421
- lobbyView = false;
422
- searchItem = false;
423
- validObservers = true;
424
- categoryid = e.data.itemId;
425
- if (categoryid !== 'MOSTPLAYED') {
426
- showLoadCategory = false;
427
- }
428
- if(casinomygames !== 'true') {
429
- getData(categoryid, 0, limit).then((res:any) => {
430
- categoryData = res;
431
- categoryData.games.items.forEach((item:any) => {
432
- item.isFavorite = checkFavorite(item.id);
433
- });
434
- shownCategoryData = categoryData.games.items;
435
- showLoadCategory = false;
436
- // @TODO: replace this quick fix - when there are only a few category games, the view scrolls to the footer
437
- if(shownCategoryData.length < 10 && e.data.origin ==! 'filters') {
438
- scrollTop = true;
439
- setTimeout(() => {
440
- window.postMessage({ type: 'WidgetTopReference', scrollTop }, window.location.href);
441
- }, 500);
442
- }
443
- });
444
- }
445
- break;
446
-
447
- case 'FavoriteUpdate':
448
- if(categoryData) {
449
- shownCategoryData = categoryData.games.items;
450
- shownCategoryData.forEach((item:any) => {
427
+ case 'CategoryUpdate':
428
+ searched = false;
429
+ lobbyView = false;
430
+ searchItem = false;
431
+ validObservers = true;
432
+ categoryid = e.data.itemId;
433
+ if (categoryid !== 'MOSTPLAYED') {
434
+ showLoadCategory = false;
435
+ }
436
+ if(casinomygames !== 'true') {
437
+ getData(categoryid, 0, limit).then((res:any) => {
438
+ categoryData = res;
439
+ categoryData.games.items.forEach((item:any) => {
451
440
  item.isFavorite = checkFavorite(item.id);
452
441
  });
453
- }
454
-
455
- if (e.data.lobbyScreen) {
456
- lobbyView = true;
457
- }
458
-
459
- break;
460
-
461
- // Start favorite category section
462
- case 'UpdateCategoryFavoriteGames':
463
- if (e.data.receivedFavoriteResults) {
464
- favoriteGames = e.data.receivedFavoriteResults.items;
465
- if(e.data.favStadalone) return;
466
- if(showFavGamesCategory) {
467
- if(!lobbyView) {
468
- window.postMessage({ type: 'CategoryUpdate', itemId: categoryid }, window.location.href);
469
- }
470
- } else {
471
- window.postMessage({ type: 'FavoriteUpdate', lobbyScreen: e.data.lobbyScreen }, window.location.href);
442
+ shownCategoryData = categoryData.games.items;
443
+ showLoadCategory = false;
444
+ // @TODO: replace this quick fix - when there are only a few category games, the view scrolls to the footer
445
+ if(shownCategoryData.length < 10 && e.data.origin ==! 'filters') {
446
+ scrollTop = true;
447
+ setTimeout(() => {
448
+ window.postMessage({ type: 'WidgetTopReference', scrollTop }, window.location.href);
449
+ }, 500);
472
450
  }
473
- }
474
- break;
451
+ });
452
+ }
453
+ break;
475
454
 
476
- case 'ShowFavoriteSection':
477
- let favGameArray;
478
- lobbyView = false;
479
- if (e.data) {
480
- favGameArray = e.data.receivedFavoriteResults.items;
481
- if (favGameArray.length) {
482
- favGameArray.forEach((item:any) => {
483
- if (item.gameModel) {
484
- item.gameModel.isFavorite = item.gameModel ? true : false;
485
- }
486
- });
487
- }
488
- favoriteGamesData.items = platformFavorite(favGameArray, favoriteGamesData.items);
489
- favoriteGamesData.name = "Favorites";
490
- showFavGamesCategory = true;
491
- isLoading = false;
492
- }
493
- break;
494
- // End favorite category section
455
+ case `SetUnfavoredGame${categoryid}`:
456
+ removeFavoredGame(`${endpoint}/v1/player/${userid}/favorites`, session, e.data.id);
457
+ break;
458
+
459
+ case `SetFavoredGame${categoryid}`:
460
+ addFavoredGame(`${endpoint}/v1/player/${userid}/favorites`, session, e.data.id);
461
+ break;
495
462
 
496
463
  case 'UserSessionID':
497
464
  sessionID = e.data.session;
498
465
  playerID = e.data.userID;
499
466
  if (favorites == 'true') {
500
467
  if (playerID && playerID.length && sessionID && sessionID.length > 0) {
501
- getFavoredGames(sessionID, playerID);
468
+ getFavoritesGames(sessionID, playerID);
502
469
  }
503
470
  }
471
+ break;
504
472
 
505
- break;
506
-
473
+ case 'UpdateFavoredList':
474
+ if(categoryid === 'FAVORITES') updateFavoredList(e.data.url, e.data.sessionID)
475
+ break;
476
+
507
477
  default:
508
478
  // do nothing
509
- break;
479
+ break;
510
480
  }
511
481
  }
512
482
  }
513
483
 
484
+ const addFavoriteState = () => {
485
+ if(categoryData) {
486
+ shownCategoryData = categoryData.games.items;
487
+ shownCategoryData.forEach((item:any) => {
488
+ item.isFavorite = checkFavorite(item.id);
489
+ });
490
+ }
491
+ }
492
+
493
+ //Adding fav. statement to variables
494
+ const checkFavorite = (gameId:string) => {
495
+ if (favoriteGames) {
496
+ if (favoriteGames.findIndex(obj => obj.id == gameId) !== -1) {
497
+ return true;
498
+ } else {
499
+ return false;
500
+ }
501
+ }
502
+ return false;
503
+ }
504
+
505
+ let addFavoredGame = async (url, sessionID, gameID) => {
506
+ // Wait for the updateFavoredList to complete
507
+ await updateFavoredList(url, sessionID);
508
+
509
+ if (!listOfGamesIDs.includes(gameID)) {
510
+ listOfGamesIDs.push(gameID);
511
+ }
512
+
513
+ let data = {
514
+ items: listOfGamesIDs
515
+ };
516
+
517
+ let options = {
518
+ method: "POST",
519
+ headers: {
520
+ 'X-SessionID': sessionID,
521
+ 'Content-Type': 'application/json',
522
+ 'Accept': 'application/json',
523
+ },
524
+ body: JSON.stringify(data)
525
+ };
526
+
527
+ fetch(url, options)
528
+ .then((res) => res.json())
529
+ .then(() => {
530
+ window.postMessage({ type: `AddFavoriteThumbnail_${gameID}` }, window.location.href);
531
+ })
532
+ .catch((err) => {
533
+ console.error('Err', err);
534
+ });
535
+ }
536
+
537
+ const removeFavoredGame = (url:string, sessionID:string, gameID:string) => {
538
+ let options = {
539
+ method: "DELETE",
540
+ headers: {
541
+ 'X-SessionID': sessionID,
542
+ }
543
+ };
544
+
545
+ fetch(`${url}/${gameID}`, options)
546
+ .then((res:any) => res.json())
547
+ .then(() => {
548
+ window.postMessage({ type: `RemoveFavoriteThumbnail_${gameID}` }, window.location.href);
549
+ updateFavoredList(url, sessionID);
550
+ });
551
+
552
+ if (listOfGamesIDs.includes(gameID)) {
553
+ listOfGamesIDs = listOfGamesIDs.filter(x => {
554
+ return x != gameID;
555
+ });
556
+ }
557
+ }
558
+
559
+ //Fetch fav list and pass to be updated
560
+ const updateFavoredList = async (url, sessionID) => {
561
+ let options = {
562
+ method: "GET",
563
+ headers: {
564
+ 'X-SessionID': sessionID,
565
+ }
566
+ };
567
+
568
+ return fetch(url, options)
569
+ .then((res:any) => res.json())
570
+ .then((updatedArray:any) => {
571
+ favoriteGames = updatedArray.items;
572
+ if (!fetchviaevent) {
573
+ favoriteGames.forEach((item: any) => {
574
+ item.isFavorite = checkFavorite(item.id);
575
+ });
576
+ } else {
577
+ favoriteGames.forEach((item: any) => {
578
+ if (!listOfGamesIDs.includes(item.id)) {
579
+ listOfGamesIDs.push(item.id);
580
+ }
581
+ })
582
+ addFavoriteState();
583
+ }
584
+
585
+ if (categoryid === 'FAVORITES') { window.postMessage({ type: 'UpdateFavoritesCount', favoriteGames }); showFavoriteSection(favoriteGames); }
586
+
587
+ }).catch((err:any) => {
588
+ console.error(err);
589
+ });
590
+ }
591
+
592
+ const showFavoriteSection = (receivedFavoriteResults) => {
593
+ if (!receivedFavoriteResults) return;
594
+ let favGameArray;
595
+ favGameArray = receivedFavoriteResults?.items || receivedFavoriteResults || [];
596
+ if (favGameArray.length > 0) {
597
+ favGameArray.forEach((item: any) => {
598
+ if (item.gameModel) {
599
+ item.gameModel.isFavorite = true;
600
+ }
601
+ });
602
+ }
603
+ favoriteGamesData.items = platformFavorite(favGameArray, favoriteGamesData.items);
604
+ favoriteGamesData.name = "Favorites";
605
+ isLoading = false;
606
+ }
607
+
514
608
  // @TODO categoryId type fix
515
609
  const loadMoreGames = (categoryId:any) => {
516
610
  limit += 1;
@@ -536,17 +630,6 @@
536
630
  }
537
631
  }
538
632
 
539
- const checkFavorite = (gameId:string) => {
540
- if (favoriteGames) {
541
- if (favoriteGames.findIndex(obj => obj.id == gameId) !== -1) {
542
- return true;
543
- } else {
544
- return false;
545
- }
546
- }
547
- return false;
548
- }
549
-
550
633
  const addGameTag = (tags:any[]):string => {
551
634
  if (tags?.length === 0) return '';
552
635
 
@@ -580,11 +663,10 @@
580
663
  const initialSetup = () => {
581
664
  // showFavGamesCategory vs categoryData
582
665
  // favoriteGamesData vs shownCategoryData
583
-
584
666
  switch(categoryid) {
585
667
  case 'FAVORITES':
586
668
  showFavGamesCategory = true;
587
- break;
669
+ break;
588
670
  case 'MOSTPLAYED':
589
671
  if(casinomygames === 'false') {
590
672
  showFavGamesCategory = false;
@@ -644,25 +726,23 @@
644
726
  }
645
727
 
646
728
  onMount(() => {
647
- if(fetchviaevent === 'true'){
648
729
  window.addEventListener('visibilitychange', (e) => handleVisibilityChange())
649
730
  window.addEventListener('message', messageHandler, false);
650
- if(categoryid === 'FAVORITES') {
651
- window.postMessage({ type: 'GetFavoredGame' }, window.location.href);
652
- }
731
+
653
732
 
654
733
  return () => {
655
734
  window.removeEventListener('message', messageHandler);
656
735
  window.removeEventListener('visibilitychange', messageHandler);
657
736
  }
658
- }
659
737
  });
660
738
 
661
739
  $: lang && setActiveLanguage();
740
+ //Widget is working as standalone when fetchviaevent isn't set
662
741
  $: (fetchviaevent === 'false' || fetchviaevent === '') && endpoint && lang && categoryid && datasource && displayedgamecount && showallbuttongamescount && fetchGamesByCategory(categoryid, displayedgamecount, showallbuttongamescount);
663
- $: (favorites === 'true') && session && userid && getFavoredGames(session, userid);
742
+ //Call the fav. list fetch when widget is standalone
743
+ $: favorites === 'true' && endpoint && session && userid && getFavoritesGames(session, userid);
664
744
  $: dataloaded && thumbnailContainer && setupObserver();
665
- $: lang && categoryid && initialSetup();
745
+ $: lang && categoryid && userid && session && initialSetup();
666
746
  $: translationurl && setTranslationUrl();
667
747
  $: clientstyling && customStylingContainer && setClientStyling();
668
748
  $: clientstylingurl && customStylingContainer && setClientStylingURL();
@@ -711,6 +791,7 @@
711
791
  lang={lang}
712
792
  searchitem={searchItem}
713
793
  favorites={favorites}
794
+ categoryid={categoryid}
714
795
  gamethumbnail={gameprops.thumbnail}
715
796
  gamename={gameprops.name}
716
797
  gamevendor={gameprops.vendor.name}
@@ -796,6 +877,7 @@
796
877
  class="{MASONRY_CLASS_PREFIX}{gameprops.cellSize ? gameprops.cellSize : '1x1'}"
797
878
  part="{MASONRY_CLASS_PREFIX}{gameprops.cellSize ? gameprops.cellSize : '1x1'}"
798
879
  favorites={favorites}
880
+ categoryid={categoryid}
799
881
  gamethumbnail={gameprops.thumbnail}
800
882
  gamename={gameprops.name}
801
883
  gamevendor={gameprops.vendor.name}
@@ -858,6 +940,7 @@
858
940
  userid={userid}
859
941
  lang={lang}
860
942
  favorites={favorites}
943
+ categoryid={categoryid}
861
944
  gamethumbnail={gameprops.gameModel.thumbnail}
862
945
  gamename={gameprops.gameModel.name}
863
946
  gamevendor={gameprops.gameModel.vendor.name}
@@ -891,6 +974,7 @@
891
974
  userid={userid}
892
975
  lang={lang}
893
976
  favorites={favorites}
977
+ categoryid={categoryid}
894
978
  gamethumbnail={gameprops.gameModel.thumbnail}
895
979
  gamename={gameprops.gameModel.name}
896
980
  gamevendor={gameprops.gameModel.vendor.name}