index.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import {useEffect, useState} from "react";
  2. import styles from "./styles.module.scss";
  3. import Fade from "@mui/material/Fade";
  4. import Grow from "@mui/material/Grow";
  5. import Modal from "@mui/material/Modal";
  6. import {useSelector} from "react-redux";
  7. import {getArea} from "@features/mainSlice";
  8. import areaData from "@db/area";
  9. import RadioBtn from "@components/RadioBtn";
  10. const i18n=global.i18n;
  11. const WAreaSelect = ({})=>{
  12. const [isShow, setIsShow] = useState(false);
  13. const area=useSelector(getArea);
  14. const [currArea,setCurrArea]=useState(1);
  15. const show=()=>{
  16. setIsShow(true);
  17. }
  18. const hide=()=>{
  19. setIsShow(false);
  20. }
  21. useEffect(()=>{
  22. const areaSelect={
  23. show,
  24. hide
  25. };
  26. global.areaSelect=areaSelect;
  27. return ()=>{
  28. }
  29. },[])
  30. useEffect(()=>{
  31. setCurrArea(area);
  32. },[area])
  33. const getAllData=()=>{
  34. let list=[];
  35. list=areaData.slice(0);
  36. for (let i = 0; i < list.length; i++) {
  37. let item=list[i];
  38. if (item.id===area){
  39. list.splice(i,1);
  40. list.unshift(item);
  41. break;
  42. }
  43. }
  44. return list;
  45. }
  46. const onChangeArea=(value)=>{
  47. setCurrArea(value);
  48. }
  49. const renderHeader=()=>{
  50. return (
  51. <>
  52. <div className={styles.header}>
  53. {i18n.t("areaSelect.title")}
  54. </div>
  55. <div className={styles.line}/>
  56. </>
  57. )
  58. }
  59. const renderContent=()=>{
  60. let list=getAllData();
  61. return (
  62. <div className={styles.content}>
  63. {
  64. list.map((item,index)=>{
  65. return (
  66. <button onClick={()=>{
  67. onChangeArea(item.id);
  68. }} className={`${styles.item} ${currArea===item.id?styles.active:''}`} key={index}>
  69. <div className={styles.left}>
  70. <img className={styles.icon} src={item.icon}/>
  71. {i18n.t(item.name)}
  72. </div>
  73. <RadioBtn selected={currArea===item.id} value={item.id} onChange={(value)=>{
  74. onChangeArea(item.id);
  75. }} />
  76. </button>
  77. )
  78. })
  79. }
  80. </div>
  81. )
  82. }
  83. const renderConfirm=()=>{
  84. return (
  85. <button className={"button-green"} onClick={()=>{
  86. }}>
  87. {i18n.t("areaSelect.btn_confirm")}
  88. </button>
  89. )
  90. }
  91. return (
  92. <Modal open={isShow} onClose={()=>{
  93. hide();
  94. }} closeAfterTransition>
  95. <Fade in={isShow} timeout={500}>
  96. <div className="popup-container">
  97. <Grow in={isShow} timeout={500}>
  98. <div className={`popup card card-padded`} style={{minHeight: 'unset'}}>
  99. <button className="popup_close" onClick={()=>{
  100. hide();
  101. }} aria-label="Close popup">
  102. <i className="icon-xmark"/>
  103. </button>
  104. <div className={styles.container}>
  105. {renderHeader()}
  106. {renderContent()}
  107. {renderConfirm()}
  108. </div>
  109. </div>
  110. </Grow>
  111. </div>
  112. </Fade>
  113. </Modal>
  114. )
  115. }
  116. export default WAreaSelect;