Viewing File: /home/ubuntu/misabloom-frontend-base/src/components/Cart/AddMoneyModal.jsx

import React, { useState, useEffect } from 'react';
import { Button, Form, Modal } from 'react-bootstrap';
import { getErrorNotificationMessage } from '../Helper/ToastNotification';
import { fetchUserCardListStart, fetchUserWalletDetailsStart, walletPaymentByStripeStart } from '../store/actions/WalletAction';
import { connect } from 'react-redux';
import SingleCard from '../Profile/SingleCard';
import Skeleton from 'react-loading-skeleton';
import NoDataFound from '../Helper/NoDataFound';
import SomethingWrong from '../Helper/SomethingWrong';
import { useNavigate } from 'react-router-dom';
import { withTranslation, useTranslation } from "react-multi-lang";

const AddMoneyModal = (props) => {
  const navigate = useNavigate();

  const [amount, setAmount] = useState("1");
  const [skipFirst, setSkipFirst] = useState(true);
  const t = useTranslation();
  const [selectedCard, setSelectedCard] = useState(null);

  useEffect(() => {
    props.dispatch(fetchUserCardListStart());
  }, []);

  useEffect(() => {
    if (
      !skipFirst &&
      !props.walletPaymentByStripe.loading &&
      Object.keys(props.walletPaymentByStripe.data).length > 0
    ) {
      props.dispatch(fetchUserWalletDetailsStart());
      props.closeAddMoneyModal();
    }
  }, [props.walletPaymentByStripe]);

  useEffect(() => {
    if (!skipFirst && !props.userCardList.loading && Object.keys(props.userCardList.data).length > 0) {
      if (props.userCardList.data.user_cards && props.userCardList.data.user_cards.length > 0) {
        props.userCardList.data.user_cards.map((card, i) => {
          if (card.is_default === 1)
            setSelectedCard(card.user_card_id);
        })
      } else {
        setSelectedCard(null);
      }
    }
    setSkipFirst(false);
  }, [props.userCardList]);

  const addMoney = e => {
    e.preventDefault();
    if (amount && selectedCard) {
      props.dispatch(
        walletPaymentByStripeStart({
          amount: amount,
          user_card_id: selectedCard,
        })
      );
    } else if (!amount) {
      props.dispatch(getErrorNotificationMessage(t("please_enter_the_amount")));
    } else if (!selectedCard) {
      props.dispatch(
        getErrorNotificationMessage(t("please_add_or_select_a_card"))
      );
    }
  };

  return (
    <>
      <Modal
        className="modal-dialog-center write-review-modal"
        size="lg"
        centered
        show={props.addMoney}
        onHide={props.closeAddMoneyModal}
      >
        <Modal.Header closeButton>
          <Modal.Title>{t("add_money")}</Modal.Title>
        </Modal.Header>
        <Modal.Body>
          <Form className="write-review-form" onSubmit={addMoney}>
            <div className="add-money-sec">
              <div className="add-money-input">
                <Form.Group className="">
                  <Form.Control
                    type="number"
                    className="form-control"
                    value={amount}
                    onChange={e => setAmount(e.target.value)}
                    min="0"
                  />
                </Form.Group>
                <div className="currency">$</div>
              </div>
              <div className="add-money-btn">
                <Button
                  className="wishlist-btn"
                  type="submit"
                  disabled={props.walletPaymentByStripe.buttonDisable}
                >
                  {props.walletPaymentByStripe.loadingButtonContent
                    ? props.walletPaymentByStripe.loadingButtonContent
                    : "Submit"}
                </Button>
              </div>
            </div>

            <div className="payment-radio-box">
              {props.userCardList.loading ?
                <Skeleton
                  count={2}
                  height={100}
                />
                : props.userCardList.data.user_cards ?
                  props.userCardList.data.user_cards.length > 0 ?
                    props.userCardList.data.user_cards.map((card, i) =>
                      <SingleCard
                        card={card}
                        key={i}
                        selectedCard={selectedCard}
                        setSelectedCard={setSelectedCard}
                        actions={false}
                      />
                    )
                    : <div className="payment-radio-btn">
                      <label
                        name="plan"
                        className="radio"
                        htmlFor="payment"
                        onClick={() => navigate("/wallet-add-money")}
                      >
                        <p>{t("add_new_card")}</p>
                      </label>
                    </div>
                  : <SomethingWrong />
              }
            </div>
          </Form>
        </Modal.Body>
      </Modal>
    </>
  );

}

const mapStateToPros = (state) => ({
  walletPaymentByStripe: state.wallet.walletPaymentByStripe,
  userCardList: state.wallet.userCardList,
});

function mapDispatchToProps(dispatch) {
  return { dispatch };
}

export default connect(
  mapStateToPros,
  mapDispatchToProps
)(AddMoneyModal);
Back to Directory File Manager