index.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import styles from "@components/GameTabs/styles.module.scss";
  2. import React, {Fragment, Suspense, useEffect, useState} from "react";
  3. import symbol from '@assets/symbol-defs.svg';
  4. import AllWidgets from "@widgets/index";
  5. import SmallLoading from "@components/SmallLoading";
  6. import SvgIcon from "@components/SvgIcon";
  7. const i18n=global.i18n;
  8. const GameTabs=({data})=>{
  9. const [tabIndex, setTabIndex] = useState(1);
  10. // data={
  11. // tabs:[
  12. // {type:0,title:'Lobby',icon:'icon_Lobby'},
  13. // {type:1,title:'Top Picks',icon: 'icon_ClassicDice'},
  14. // {type:2,title:'Slots',icon: 'icon_Slots'},
  15. // {type:3,title:'Hot Games',icon: 'icon_HotGame'},
  16. // {type:4,title:'Live Casino',icon: 'icon_LiveCasino'},
  17. // {type:5,title:'Table Games',icon: 'icon_TableGame'},
  18. // {type:6,title:'New Releases',icon: 'icon_NewReleases'},
  19. // ],
  20. // data:{
  21. //
  22. // }
  23. // }
  24. useEffect(()=>{
  25. if (data&&data.tabs){
  26. let selectType=-1;
  27. let tabs=data.tabs;
  28. let tabtype=data.tabtype;
  29. if (tabtype!=null){
  30. for (let i = 0; i < tabs.length; i++) {
  31. let tab=tabs[i];
  32. if (tab.tabtype===tabtype){
  33. selectType=tabtype;
  34. break;
  35. }
  36. }
  37. }
  38. if (selectType===-1){
  39. let first=data.tabs[0];
  40. if (first){
  41. selectType=first.tabtype
  42. }
  43. }
  44. setTabIndex(selectType);
  45. }
  46. },[]);
  47. const changeTab=(tabIndex)=>{
  48. setTabIndex(tabIndex);
  49. }
  50. const renderTabs=()=>{
  51. let tabs=data.tabs;
  52. if (tabs==null)tabs=[];
  53. if (tabs.length===0)return (<></>);
  54. return (
  55. <div className={styles.game_tabs}>
  56. {
  57. tabs.map((item,index)=>{
  58. return (
  59. <button key={index} onClick={()=>{
  60. changeTab(item.tabtype);
  61. }} className={`${styles.tab_item} ${item.tabtype===tabIndex?styles.active:''}`}>
  62. <SvgIcon className={styles.icon} herf={item.icon}/>
  63. {i18n.t(item.title)}
  64. </button>
  65. )
  66. })
  67. }
  68. </div>
  69. )
  70. }
  71. const getModules=()=>{
  72. let modules=data.data;
  73. let list=[];
  74. if (modules){
  75. for (let i = 0; i < modules.length; i++) {
  76. let item=modules[i];
  77. if (item.tabtype===tabIndex){
  78. list.push(item);
  79. }
  80. }
  81. }
  82. return list;
  83. }
  84. const renderModule=()=>{
  85. let list=getModules();
  86. if (list==null||list.length===0)return (<></>);
  87. return (
  88. <>
  89. {
  90. list.map((item,index)=>{
  91. let Comp=AllWidgets[item.type];
  92. if (Comp==null)return (<></>);
  93. return (
  94. <Fragment key={index}>
  95. <Suspense fallback={<SmallLoading/>}>
  96. <Comp key={"Comp_"+tabIndex+"_"+index} data={item}></Comp>
  97. </Suspense>
  98. </Fragment>
  99. )
  100. })
  101. }
  102. </>
  103. )
  104. }
  105. return (
  106. <div className={`w-100 layout ${styles.container}`}>
  107. {renderTabs()}
  108. {renderModule()}
  109. </div>
  110. )
  111. }
  112. export default GameTabs;