BRWithdraw.jsx 8.4 KB

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