index.jsx 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import styles from './styles.module.scss';
  2. import React, { useEffect } from 'react';
  3. import usePaymentActions from '@hooks/usePaymentActions';
  4. import { useSelector } from 'react-redux';
  5. import { getPaymentOrderStatus } from '@features/paySlice';
  6. import { REQ_STATUS } from '@api/config';
  7. import usePaymentMethods from '@hooks/usePaymentMethods';
  8. import { PaymentGears } from '@db/payment';
  9. import MainButton from '@components/Buttons/MainButton';
  10. import lockImg from '@assets/pay/img_lock.png';
  11. import { ReactComponent as CheckIcon } from '@assets/withdraw/icon_check.svg';
  12. const i18n = global.i18n;
  13. const PaymentOption = ({ active, img, name, onClick }) => {
  14. return (
  15. <div className={`${styles.item_box} ${active ? styles.active : ""}`} onClick={onClick}>
  16. <img alt="" src={img || null} />
  17. <span>{name}</span>
  18. {
  19. active && <div className={styles.flag}>
  20. <CheckIcon />
  21. </div>
  22. }
  23. </div>
  24. )
  25. }
  26. const WPaymentMethods = () => {
  27. const goods = global.curGoods || {};
  28. // const goods = {
  29. // "price": "29.99",
  30. // "goodsName": "",
  31. // "GiftsID": "304",
  32. // "gear": `[{"name":"cashapp","group_id":1,"value":1,"status":1},{"name":"cashbtcpay","group_id":1,"value":16,"status":1},{"name":"eth","group_id":2,"value":32,"status":1},{"name":"usdc","group_id":2,"value":2048,"status":1},{"name":"cashapp","group_id":1,"value":1,"status":1},{"name":"paypal","group_id":0,"value":2,"status":1},{"name":"applepay","group_id":0,"value":4,"status":1},{"name":"cashbtcpay","group_id":1,"value":16,"status":1}]`
  33. // }
  34. const { getPaymentOrder } = usePaymentActions();
  35. const orderStatus = useSelector(getPaymentOrderStatus);
  36. const {
  37. mainGears,
  38. gearSelection,
  39. getSubGears,
  40. onChooseMethod,
  41. getChoiseGear,
  42. } = usePaymentMethods(goods)
  43. useEffect(() => {
  44. // adjust 进入支付控制台
  45. global.tracker.trackEvent("enter_recharge_control");
  46. global.tracker.trackEvent("enter_recharge_control_count");
  47. }, []);
  48. const onBtnPayClick = () => {
  49. if (orderStatus === REQ_STATUS.LOADING) return;
  50. const gear = getChoiseGear();
  51. if (!gear) return;
  52. getPaymentOrder({
  53. ...goods,
  54. pay_method: gear.value,
  55. pay_name: gear.name
  56. });
  57. }
  58. const renderSubMethods = (main) => {
  59. const subs = getSubGears();
  60. const subIdx = gearSelection.subIdx;
  61. if (subs.length === 0) return <></>;
  62. return (
  63. <div className={styles.subs_box}>
  64. <span>{i18n.t("deposit.gears.sub_method", { method: main })}</span>
  65. <div className={styles.subs_list}>
  66. {
  67. subs.map((gear, idx) => {
  68. const config = PaymentGears[gear] || {};
  69. const active = subIdx === idx;
  70. return (
  71. <div key={`sub_gear_${gear}`}
  72. className={`${styles.sub_item} ${active && 'select-border'}`}
  73. onClick={() => { onChooseMethod(-1, idx) }}>
  74. <img alt="" src={config?.icon} />
  75. <span>{config?.name || gear}</span>
  76. </div>
  77. )
  78. })
  79. }
  80. </div>
  81. </div>
  82. )
  83. }
  84. return (
  85. <div className={styles.container}>
  86. <div className={styles.lbl_money}>
  87. <span>{global.DOLLAR}{goods.price}</span>
  88. {
  89. (global.curGoods && global.curGoods.GiftsID) && <span>{i18n.t("deposit.gift_pack")}</span>
  90. }
  91. </div>
  92. {
  93. mainGears.map((item, index) => {
  94. const config = PaymentGears[item] || {};
  95. const active = index === gearSelection.gearIdx;
  96. return (
  97. <React.Fragment key={item}>
  98. <PaymentOption
  99. active={active}
  100. img={config?.icon}
  101. name={config?.name || item}
  102. onClick={() => { onChooseMethod(index) }} />
  103. {
  104. active && renderSubMethods(item)
  105. }
  106. </React.Fragment>
  107. )
  108. })
  109. }
  110. <MainButton
  111. className={styles.btn_pay}
  112. loading={orderStatus === REQ_STATUS.LOADING}
  113. onClick={onBtnPayClick}>
  114. {/* <span>{getDepositBtnDesc(goods.price)}</span> */}
  115. <span>{i18n.t("deposit.btn_payment")}</span>
  116. </MainButton>
  117. <div className={styles.hint}>
  118. <img src={lockImg} alt='' />
  119. <span>{i18n.t("deposit.pay_hint")}</span>
  120. </div>
  121. </div >
  122. )
  123. }
  124. export default WPaymentMethods