BRWithdraw.jsx 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import Spring from "@components/Spring";
  2. import styles from "./styles.module.scss";
  3. import React, {useState} from "react";
  4. import {useSelector} from "react-redux";
  5. import {getUserInfo} from "@features/mainSlice";
  6. import {numFormatter, stringFormat} from "@utils/helpers";
  7. import {getWithdrawBaseInfo} from "@features/paySlice";
  8. import symbol from "@assets/symbol-defs.svg";
  9. import {ReactComponent as Edit} from '@assets/singlesvg/edit.svg';
  10. import {useNavigate} from "react-router-dom";
  11. import {ROUTE_PATH} from "@constants/routes";
  12. const i18n=global.i18n;
  13. const BRWithdraw=()=>{
  14. const user=useSelector(getUserInfo);
  15. const info=useSelector(getWithdrawBaseInfo);
  16. const navigate=useNavigate();
  17. const addBtnParam = [200, 500, 1000, 2000, 5000, -1];
  18. const [addIndex,setAddIndex]=useState(-1);
  19. const [wdValue,setWdValue]=useState("");
  20. const getShowCash=(value)=>{
  21. value=Number(value);
  22. return value/global.CASH_BASE;
  23. }
  24. const formatInput=(text)=>{
  25. let Score=user.Score*global.CASH_BASE;
  26. let inputNum = Number(text)*global.CASH_BASE;
  27. inputNum = Math.min(inputNum, info.SumCanExchange);
  28. inputNum = Math.min(inputNum, Score);
  29. return (inputNum > 0) ? (getShowCash(inputNum)) : "";
  30. }
  31. const getAddIndexFromValue=(value)=>{
  32. value=Number(value);
  33. let index=addBtnParam.indexOf(value);
  34. if (index===-1){
  35. if (value===info.CanWithDraw){
  36. index=addBtnParam.length-1;
  37. }
  38. }
  39. return index;
  40. }
  41. const renderUser=()=>{
  42. return (
  43. <div className={styles.content}>
  44. <div className={styles.user_con}>
  45. <div className={styles.money_con}>
  46. <div className={styles.title}>{i18n.t("withdraw.main.total_balance")}</div>
  47. <div className={styles.money}>{global.DOLLAR+" "+numFormatter(user.Score)}</div>
  48. </div>
  49. <div className={styles.money_con}>
  50. <div className={styles.title}>{i18n.t("withdraw.main.withdrawable")}</div>
  51. <div className={styles.money}>{global.DOLLAR+" "+numFormatter(getShowCash(info.SumCanExchange))}</div>
  52. </div>
  53. </div>
  54. <div className={styles.line}/>
  55. </div>
  56. )
  57. }
  58. const renderWithdrawValue=()=>{
  59. return (
  60. <div className={styles.content}>
  61. <div className={styles.title}>{i18n.t("withdraw.main.editBox")}</div>
  62. <div className={styles.select_con}>
  63. {
  64. addBtnParam.map((item,index)=>{
  65. let label=item===-1?i18n.t("withdraw.main.btn_all"):global.DOLLAR+" "+item;
  66. return (
  67. <button key={index}
  68. className={`${styles.grid_btn} ${addIndex===index?styles.active:''}`}
  69. onClick={()=>{
  70. let value=item===-1?getShowCash(info.SumCanExchange)+"":item+"";
  71. let fvalue=formatInput(value);
  72. let addIndx=value===fvalue?index:-1;
  73. if (addIndx!==-1)setWdValue(fvalue);
  74. setAddIndex(addIndx);
  75. }}
  76. >
  77. {label}
  78. </button>
  79. )
  80. })
  81. }
  82. </div>
  83. <div className={`input-control ${styles.input_con}`}>
  84. <div className={styles.money}>{global.DOLLAR}</div>
  85. <input
  86. value={wdValue}
  87. type={"number"}
  88. placeholder={i18n.t("withdraw.main.editPlaceholder")}
  89. onChange={(e)=>{
  90. let value=formatInput(e.target.value);
  91. setWdValue(value);
  92. setAddIndex(getAddIndexFromValue(value));
  93. }}
  94. />
  95. {
  96. wdValue===""?(<></>):(
  97. <button className={styles.clear_btn} onClick={()=>{
  98. setWdValue("");
  99. }}>
  100. <svg className={styles.icon}>
  101. <use xlinkHref={`${symbol}#icon_Close`} />
  102. </svg>
  103. </button>
  104. )
  105. }
  106. </div>
  107. <div className={styles.line}/>
  108. </div>
  109. )
  110. }
  111. const renderAccount=()=>{
  112. let BankUserName=info.BankUserName;
  113. let AccountsBank=info.AccountsBank;
  114. let cbPixType=Number(info.PixType);
  115. let via="";
  116. let accout="";
  117. if (BankUserName!==""||AccountsBank!==""){
  118. via=cbPixType >= 10 ? "TED" : "PIX";
  119. accout=cbPixType >= 10 ? AccountsBank : BankUserName
  120. }
  121. return (
  122. <div className={`${styles.content} ${styles.account_info}`}>
  123. <div className={styles.title_con}>
  124. <div className={styles.title}>{i18n.t("withdraw.account.title")}</div>
  125. <button onClick={()=>{
  126. navigate(ROUTE_PATH.ACCOUNT_INFO);
  127. }}>
  128. <Edit className={styles.icon}/>
  129. </button>
  130. </div>
  131. <div className={styles.line}></div>
  132. <div className={styles.info_item}>
  133. <div className={styles.title}>{i18n.t("withdraw.main.via")}</div>
  134. {
  135. via===""?(<div>{i18n.t("withdraw.main.bank_info_isNull")}</div>):(
  136. <div className={styles.active}>{via}</div>
  137. )
  138. }
  139. {/*<div className={styles.line}></div>*/}
  140. </div>
  141. <div className={styles.info_item}>
  142. <div className={styles.title}>{i18n.t("withdraw.main.account")}</div>
  143. {
  144. accout===""?(<div>{i18n.t("withdraw.main.bank_No_isNull")}</div>):(
  145. <div className={styles.active}>{accout}</div>
  146. )
  147. }
  148. {/*<div className={styles.line}></div>*/}
  149. </div>
  150. </div>
  151. )
  152. }
  153. const renderSubmit=()=>{
  154. let num = info.OrderLimit - info.OrderCount;
  155. // data.WithDrawMin, data.WithDrawMax
  156. let min=getShowCash(info.MinExchange);
  157. let max=getShowCash(info.MaxExchange);
  158. return (
  159. <div className={styles.content}>
  160. <button className="button-green">
  161. {i18n.t("withdraw.main.btn_withdraw")+" ("+num+")"}
  162. </button>
  163. <div className={styles.tips}>
  164. {stringFormat(i18n.t("withdraw.main.tip"),[min,max])}
  165. </div>
  166. </div>
  167. )
  168. }
  169. return (
  170. <>
  171. {
  172. info==null?(<></>):(
  173. <Spring type="slideUp" className={styles.container}>
  174. {renderUser()}
  175. {renderWithdrawValue()}
  176. {renderAccount()}
  177. {renderSubmit()}
  178. </Spring>
  179. )
  180. }
  181. </>
  182. )
  183. }
  184. export default BRWithdraw;