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

import React, { useState, useEffect } from "react";
import {
  Col,
  Container,
  Row,
  Accordion,
  Image,
  Form,
  InputGroup,
  Button,
} from "react-bootstrap";
import { Link, useNavigate } from "react-router-dom";
import { fetchDeliveryAddressesListStart } from "../store/actions/DeliveryAction";
import "./NewCheckOut.css";
import { connect } from "react-redux";
import SomethingWrong from "../Helper/SomethingWrong";
import Skeleton from "react-loading-skeleton";
import NoDataFound from "../Helper/NoDataFound";
import { fetchCartListStart } from "../store/actions/CartsAction";
import ReactStars from "react-rating-stars-component";
import AddNewAddressPopUpModal from "./AddNewAddressPopUpModal";
import { useTranslation, withTranslation } from "react-multi-lang";

const CheckoutAddress = (props) => {
  const navigate = useNavigate();
  const [skipRender, setSkipRender] = useState(true);
  const t = useTranslation();
  const [showContent, setShowContent] = useState(true);
  const [writeReview, setWriteReview] = useState(false);

  const closeWriteReviewModal = () => {
    setWriteReview(false);
  };
  useEffect(() => {
    props.dispatch(fetchDeliveryAddressesListStart());
    props.dispatch(fetchCartListStart());
  }, []);
  useEffect(() => {
    if (
      (!skipRender &&
        !props.deliveryAddressesList.loading &&
        (props.deliveryAddressesList.error !== false ||
          !props.deliveryAddressesList.data.delivery_addresses)) ||
      (!props.cartList.loading &&
        (props.cartList.error !== false ||
          !props.cartList.data.user_cart_amount ||
          !props.cartList.data.availability ||
          !props.cartList.data.availability.is_available))
    ) {
      setShowContent(false);
    }
    setSkipRender(false);
  }, [props.deliveryAddressesList, props.cartList]);

  const confirmAddress = (addressUniqueId) => {
    localStorage.setItem("addessUniqueId", addressUniqueId);
    navigate("/order-summary");
  };
  return (
    <>
      <div className="newcheckout-sec">
        {showContent ? (
          <Container>
            <Row>
              <Col xl={8} md={12} className="resp-mrg-btm-md">
                <div className="newcheckout-header-sec">
                  <ul className="list-unstyled new-checkout-progress-bar">
                    <li className="step1">
                      <div className="newcheckout-flex active">
                        <div className="count-no">1</div>
                        <h6>{t("address")}</h6>
                      </div>
                    </li>
                    <li className="step2">
                      <div className="newcheckout-flex">
                        <div className="count-no">2</div>
                        <h6>{t("order_summary")}</h6>
                      </div>
                    </li>
                    <li className="step3">
                      <div className="newcheckout-flex">
                        <div className="count-no">3</div>
                        <h6>{t("payment")}</h6>
                      </div>
                    </li>
                  </ul>
                </div>
                <div className="newcheckout-body-wrapper">
                  <div className="step-1">
                    <div className="address-label-box">
                      {props.deliveryAddressesList.loading ? (
                        <Skeleton count={2} height={200} />
                      ) : props.deliveryAddressesList.data.delivery_addresses
                        .length > 0 ? (
                        props.deliveryAddressesList.data.delivery_addresses.map(
                          (address, i) => (
                            <div className="address-radio-btn" key={i}>
                              <label onClick={(e) => e.preventDefault()}>
                                <div className="saved-address-box">
                                  <div className="address-details">
                                    <h4>{address.name}</h4>
                                    <p className="address-block">
                                      {address.address}
                                      {"\n"}
                                      {address.city} {address.state}{" "}
                                      {address.pincode}
                                      {"\n"}
                                      {address.landmark}
                                      {"\n"}
                                      {address.contact_number}
                                    </p>
                                  </div>
                                  <div className="address-btn">
                                    {props.cartList.data &&
                                      props.cartList.data.availability &&
                                      props.cartList.data.availability.is_available
                                      ? <Button
                                        onClick={() =>
                                          confirmAddress(
                                            address.delivery_address_unique_id
                                          )
                                        }
                                        className="address-button"
                                      >
                                        {t("use_address")}
                                      </Button>
                                      : null
                                    }
                                  </div>
                                </div>
                              </label>
                            </div>
                          )
                        )
                      ) : (
                        <NoDataFound />
                      )}
                    </div>
                    <Link to="#" className="add-new-address-link" onClick={() => setWriteReview(true)}>
                      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
                        <path d="M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z" />
                      </svg>
                      {t("add_address")}
                    </Link>

                    <h3></h3>
                  </div>
                </div>
              </Col>
              <Col xl={4} md={12}>
                <div className="checkout-box">
                  <div className="cart-box">
                    <div className="cart-header-sec">
                      <h4>{t("price_details")}</h4>
                    </div>
                    {props.cartList.loading ? (
                      <Skeleton height={200} />
                    ) : (
                      <div className="cart-body-sec">
                        <div className="cart-summary-info">
                          <div className="cart-summary-header">
                            <p>
                              {t("cart_total")}{" "}
                              <span>
                                {
                                  props.cartList.data.user_cart_amount
                                    .cart_total_amount
                                }
                              </span>
                            </p>
                            <p>
                              {t("discount")}{" "}
                              <span>
                                -
                                {
                                  props.cartList.data.user_cart_amount
                                    .cart_discount_amount
                                }
                              </span>
                            </p>
                          </div>
                          <div className="cart-summary-total-amount">
                            <h5>
                              {t("order_total")}{" "}
                              <span>
                                {
                                  props.cartList.data.user_cart_amount
                                    .cart_checkout_amount
                                }
                              </span>
                            </h5>
                          </div>
                        </div>
                      </div>
                    )}
                  </div>
                </div>
              </Col>
            </Row>
            {writeReview && (
              <AddNewAddressPopUpModal
                writeReview={writeReview}
                closeWriteReviewModal={closeWriteReviewModal}
              />
            )}
          </Container>
        ) : (
          <div className="text-center">
            <SomethingWrong />
            <Button onClick={() => navigate("/")}>{t("go_home")}</Button>
          </div>
        )}
      </div>
    </>
  );
};

const mapStateToPros = (state) => ({
  profile: state.users.profile,
  cartList: state.carts.cartList,
  deliveryAddressesList: state.delivery.deliveryAddressesList,
});

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

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