index.jsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. import tabin_1 from "@assets/gametabs/tabin_1.png";
  8. import tabin_2 from "@assets/gametabs/tabin_2.png";
  9. const i18n=global.i18n;
  10. const GameTabs=({data})=>{
  11. const [tabIndex, setTabIndex] = useState(1);
  12. // data={
  13. // tabs:[
  14. // {type:0,title:'Lobby',icon:'icon_Lobby'},
  15. // {type:1,title:'Top Picks',icon: 'icon_ClassicDice'},
  16. // {type:2,title:'Slots',icon: 'icon_Slots'},
  17. // {type:3,title:'Hot Games',icon: 'icon_HotGame'},
  18. // {type:4,title:'Live Casino',icon: 'icon_LiveCasino'},
  19. // {type:5,title:'Table Games',icon: 'icon_TableGame'},
  20. // {type:6,title:'New Releases',icon: 'icon_NewReleases'},
  21. // ],
  22. // data:{
  23. //
  24. // }
  25. // }
  26. useEffect(()=>{
  27. if (data&&data.tabs){
  28. let selectType=-1;
  29. let tabs=data.tabs;
  30. let tabtype=data.tabtype;
  31. if (tabtype!=null){
  32. for (let i = 0; i < tabs.length; i++) {
  33. let tab=tabs[i];
  34. if (tab.tabtype===tabtype){
  35. selectType=tabtype;
  36. break;
  37. }
  38. }
  39. }
  40. if (selectType===-1){
  41. let first=data.tabs[0];
  42. if (first){
  43. selectType=first.tabtype
  44. }
  45. }
  46. setTabIndex(selectType);
  47. }
  48. },[]);
  49. const changeTab=(tabIndex)=>{
  50. setTabIndex(tabIndex);
  51. }
  52. const renderMask=(item,index,len)=>{
  53. if (item.tabtype!==tabIndex)return (<></>);
  54. let mask=(<></>);
  55. // if (index===0){
  56. // mask=(<img className={styles.mask_first} src={tabin_1}/>)
  57. // }
  58. // else if (index===len-1){
  59. // mask=(<img className={styles.mask_last} src={tabin_1}/>)
  60. // }
  61. // else
  62. // {
  63. // mask=(<img className={styles.mask_center} src={tabin_2}/>)
  64. // }
  65. mask=(<img className={styles.mask_center} src={tabin_1}/>)
  66. return (
  67. <div className={styles.tab_mask}>
  68. {mask}
  69. </div>
  70. )
  71. }
  72. const renderTabs=()=>{
  73. let tabs=data.tabs;
  74. if (tabs==null)tabs=[];
  75. if (tabs.length===0)return (<></>);
  76. return (
  77. <div className={styles.game_tabs}>
  78. {
  79. tabs.map((item,index)=>{
  80. return (
  81. <button key={index} onClick={()=>{
  82. changeTab(item.tabtype);
  83. }} className={`${styles.tab_item} ${index===0?styles.tab_item_first:''} ${index===tabs.length-1?styles.tab_item_last:''}`}>
  84. {renderMask(item,index,tabs.length)}
  85. <div className={`${styles.tab_content} ${item.tabtype===tabIndex?styles.active:''}`}>
  86. <SvgIcon className={styles.icon} herf={item.icon}/>
  87. {i18n.t(item.title)}
  88. </div>
  89. </button>
  90. )
  91. })
  92. }
  93. </div>
  94. )
  95. }
  96. const getModules=()=>{
  97. let modules=data.data;
  98. let list=[];
  99. if (modules){
  100. for (let i = 0; i < modules.length; i++) {
  101. let item=modules[i];
  102. if (item.tabtype===tabIndex){
  103. list.push(item);
  104. }
  105. }
  106. }
  107. return list;
  108. }
  109. const renderModule=()=>{
  110. let list=getModules();
  111. if (list==null||list.length===0)return (<></>);
  112. return (
  113. <>
  114. {
  115. list.map((item,index)=>{
  116. let Comp=AllWidgets[item.type];
  117. if (Comp==null)return (<></>);
  118. return (
  119. <Fragment key={index}>
  120. <Suspense fallback={<SmallLoading/>}>
  121. <Comp key={"Comp_"+tabIndex+"_"+index} data={item}></Comp>
  122. </Suspense>
  123. </Fragment>
  124. )
  125. })
  126. }
  127. </>
  128. )
  129. }
  130. return (
  131. <div className={`w-100 layout ${styles.container}`}>
  132. {renderTabs()}
  133. {renderModule()}
  134. </div>
  135. )
  136. }
  137. export default GameTabs;