Viewing File: /home/ubuntu/vedadeals-frontend-base/src/components/Profile/MyOrder.jsx

import React, { useState, useEffect } from "react";
import ProfileSideBar from "./ProfileSideBar";
import {
  Row,
  Col,
  Container,
  Form,
  Image,
  Button,
  Dropdown,
} from "react-bootstrap";
import { fetchMoreOrdersListStart, fetchOrdersListStart } from "../store/actions/OrdersAction";
import { Link } from "react-router-dom";
import { withTranslation, useTranslation } from "react-multi-lang";
import down from "./down-arrow.svg";
import up from "./up-arrow.svg";
import { connect } from "react-redux";
import NoDataFound from "../Helper/NoDataFound";
import Skeleton from "react-loading-skeleton";
import InfiniteScroll from "react-infinite-scroll-component";
import CommonCenterLoader from "../Helper/CommonCenterLoader";
import { useParams } from "react-router-dom";
import { apiUrl } from "../Environment";
import NoOrdersFound from "../Helper/NoOrdersFound";
import WriteReviewModal from "../Product/WriteReviewModal";

const MyOrder = (props) => {
  const params = useParams();
  const [isVisible, setIsVisible] = useState(false);
  const [selectedProduct, setSelectedProduct] = useState(null);
  const t = useTranslation();

  const closeWriteReviewModal = () => {
    setSelectedProduct(null);
  }

  const fetchMoreWithdraw = () => {
    let data = {
      skip: props.orderList.data.orders.length,
      take: 12,
    };
    if (params.status === "cancel") data = { ...data, order_status: 2 };
    props.dispatch(fetchMoreOrdersListStart(data));
  };

  useEffect(() => {
    let data = {
      skip: 0,
      take: 12,
    };
    if (params.status === "cancel") data = { ...data, order_status: 2 };
    props.dispatch(fetchOrdersListStart(data));
  }, [params.status]);

  const download = (order) => {
    const url = apiUrl + "orders_invoice";
    let formData = new FormData();
    formData.append("id", localStorage.getItem("userId"));
    formData.append("token", localStorage.getItem("accessToken"));
    formData.append("order_unique_id", order.order_unique_id);
    formData.append("invoice_via", "download");
    fetch(url, {
      method: "POST",
      headers: {},
      body: formData,
    })
      .then((response) => {
        response.arrayBuffer().then(function (buffer) {
          const url = window.URL.createObjectURL(new Blob([buffer]));
          const link = document.createElement("a");
          link.href = url;
          link.setAttribute("download", `order_${order.order_unique_id}.pdf`); //or any other extension
          document.body.appendChild(link);
          link.click();
        });
      })
      .catch((err) => {
        console.log(err);
      });
  };
  return (
    <>
      <div className="profile-sec">
        <Container>
          <Row>
            <Col xl={3} md={12} lg={4}>
              <div className="new-mobile-section">
                <ProfileSideBar />
              </div>
            </Col>
            <Col xl={9} md={12} lg={8}>
              <div className="profile-details-sec">
                <div className="profile-details-title">
                  <h4>
                    {params.status === "cancel"
                      ? t("cancelled_orders")
                      : t("my_orders")}
                  </h4>
                </div>
                <div className="wallet-table-sec mt-4">
                  {props.orderList.loading ? (
                    <div>
                      <Skeleton height={80} />
                      <Skeleton height={80} />
                      <Skeleton height={80} />
                    </div>
                  ) : (
                    <div className="my-order-sec">
                      {props.orderList.data.orders &&
                        props.orderList.data.orders.length > 0 ? (
                        <InfiniteScroll
                          dataLength={props.orderList.data.orders.length}
                          next={fetchMoreWithdraw}
                          hasMore={
                            props.orderList.data.orders.length <
                            props.orderList.data.total_orders
                          }
                          loader={<CommonCenterLoader />}
                        >
                          <div className="profile-details-title">
                            {/* <h4>{params.status === "cancel" ? t("cancelled_orders") : t("my_orders")}</h4> */}
                            <p>
                              {t("total_orders")}{" "}
                              {props.orderList.data.total_orders}
                            </p>
                          </div>
                          {props.orderList.data.orders.map((order, i) => (
                            <div className="delivery-status" key={i}>
                              <div
                                className="deliver-status-card point"
                                onClick={() =>
                                  setIsVisible(isVisible === i ? false : i)
                                }
                              >
                                <h4>
                                  {t("order_placed")}
                                  <span>{order.order_payment.paid_date}</span>
                                </h4>
                                <h4>
                                  {t("total")}{" "}
                                  <span>
                                    {order.order_payment.total_formatted}
                                  </span>
                                </h4>
                                <h4>
                                {t("status")}{" "}
                                  <span>{order.status_formatted}</span>
                                </h4>
                                <h4>
                                  {t("order_id")}{" "}
                                  <span>{order.order_unique_id}</span>
                                </h4>
                                <Image
                                  src={isVisible !== i ? down : up}
                                  type="image/png"
                                />
                              </div>

                              {isVisible === i && (
                                <div className="step-1">
                                  {order.order_payment.payment_mode == "ADMIN" && order.status < 3 && (
                                    <h5 className="order-notes">
                                      Note:
                                      <span>
                                        We'll contact you soon for payment and
                                        order updates.
                                      </span>
                                    </h5>
                                  )}
                                  <div className="delivery-address">
                                    <div className="delivery-payment delivery-title">
                                      <h3>{t("payment_details")}</h3>
                                      <h4>
                                        {t("sub_total")}{" "}
                                        <span>{order.sub_total_formatted}</span>
                                      </h4>
                                      {/* <h4>
                                  {t("coupon_discount")} <span>$3.00</span>
                                        </h4> */}
                                      <h4>
                                        {t("order_total")}{" "}
                                        <span>
                                          {order.order_payment.total_formatted}
                                        </span>
                                      </h4>
                                      <h4>
                                        {t("payment_method")}{" "}
                                        <span>
                                          {order.order_payment.payment_mode}
                                        </span>
                                      </h4>
                                    </div>
                                    <div className="deliver-shipping delivery-title">
                                      <h3>{t("shipping_details")}</h3>
                                      <h4>{order.delivery_address.name}</h4>
                                      <p>
                                        {order.delivery_address.address}
                                        <br /> {order.delivery_address.landmark}
                                        <br /> {
                                          order.delivery_address.state
                                        }, {order.delivery_address.pincode}{" "}
                                        <br />
                                        {order.delivery_address.contact_number}
                                      </p>
                                    </div>
                                    <div className="deliver-coupon">
                                      <Button
                                        className="download-receipt-btn"
                                        onClick={() => download(order)}
                                      >
                                        {t("get_invoice")}
                                      </Button>
                                      <Link
                                        to={"/contact-us"}
                                        className="wishlist-btn"
                                      >
                                        {t("need_help")}
                                      </Link>
                                    </div>
                                  </div>
                                  <div className="deliver-status-sec mt-4">
                                    <h3>{
                                      order.status < 5
                                        ? "Expected On " + order.expected_at_formatted
                                        : order.order_tracking ?
                                          order.order_tracking.cancelled_at_formatted ?
                                            "Canceled On " + order.order_tracking.cancelled_at_formatted
                                            : order.order_tracking.return_initiated_at_formatted ?
                                              "Returned On " + order.order_tracking.completed_at_formatted
                                              : order.order_tracking.completed_at_formatted ?
                                                "Delivered On " + order.order_tracking.completed_at_formatted
                                                : null
                                          : null
                                    }</h3>
                                    <div className="delivery-status-dropdown">
                                      <Link
                                        to={`/orders/tracking/${order.order_unique_id}`}
                                        className="search-btn"
                                      >
                                        {t("track_shipment")}
                                      </Link>
                                    </div>
                                  </div>
                                  <div className="other-product-details mt-4">
                                    {order.order_products.map(
                                      (order_product, i) => (
                                        <div className="other-product-box">
                                          <div className="checkout-product-box">
                                            <div className="checkout-product-img">
                                              <Image
                                                src={order_product.product.file}
                                                style={{
                                                  width: "141px",
                                                  height: "144px",
                                                }}
                                                type="image/png"
                                              />
                                            </div>
                                            <div className="checkout-product-content">
                                              <>
                                                <h4>
                                                  {order_product.product.name}
                                                </h4>
                                              </>

                                              <p>
                                                {t("qty")}
                                                <span>
                                                  {order_product.quantity}
                                                </span>
                                              </p>
                                              <h5>
                                                {
                                                  order_product.product
                                                    .selling_price_formatted
                                                }
                                                <span>
                                                  {
                                                    order_product.product
                                                      .original_price_formatted
                                                  }
                                                </span>
                                              </h5>
                                            </div>
                                          </div>
                                          <div className="other-product-view">
                                            <Link
                                              to=""
                                              className="wishlist-btn"
                                              onClick={() => setSelectedProduct(order_product.product)}
                                            >
                                              {t("write_product_view")}
                                            </Link>
                                          </div>
                                        </div>
                                      )
                                    )}
                                  </div>
                                </div>
                              )}
                            </div>
                          ))}
                        </InfiniteScroll>
                      ) : (
                        <>
                          <NoOrdersFound />
                          <div className="continue-shopping-btn-sec text-center">
                            <Link to="/shop" className="continue-shopping-btn">
                              {t("continue_shopping")}
                            </Link>
                          </div>
                        </>
                      )}
                    </div>
                  )}
                </div>
              </div>
            </Col>
            {/* <Col xl={9} md={12} lg={8}>
              <div className="my-order-sec">
                <div className="profile-details-title">
                  <h4>My Orders</h4>
                  <p>Total 2 orders</p>
                </div>
                <div className="my-order-box left-border-color">
                  <div className="order-details">
                    <h5>
                      <span>
                        {" "}
                        <Image
                          src={window.location.origin + "/images/dot.png"}
                          type="image/png"
                        />
                      </span>
                      Dispatched
                    </h5>
                    <h4>
                      <span>Order ID :</span>6132164651654651651
                    </h4>
                  </div>
                  <div className="order-product-details-sec mt-4">
                    <div className="product-img">
                      <div className="order-product-img">
                        <Image
                          src={window.location.origin + "/images/item-1.png"}
                          type="image/png"
                        />
                      </div>
                      <div className="order-product-details">
                        <h5>1000mg CBD Sport Cream</h5>
                        <h4>
                          1,430.00 $ <span>QTY-2</span>
                        </h4>
                        <div className="invoice-details">
                          <Link to="">
                            <span>
                              <Image
                                src={
                                  window.location.origin +
                                  "/images/file-invoice.svg"
                                }
                                type="image/png"
                              />
                            </span>
                            Get Invoice
                          </Link>
                          <Link to=""> Need Help?</Link>
                        </div>
                      </div>
                    </div>
                    <div className="product-tracking-details">
                      <Link to="" className="wishlist-btn">
                        Track Order
                      </Link>
                      <Link to="" className="order-btn">
                        Order details
                      </Link>
                      <Link to="" className="edit-order-btn">
                        <span>
                          <Image
                            src={
                              window.location.origin + "/images/edit-solid.svg"
                            }
                            type="image/png"
                          />
                        </span>
                        Edit Order
                      </Link>
                    </div>
                  </div>
                </div>
                <div className="my-order-box mt-4">
                  <div className="order-details">
                    <h5>
                      <span>
                        {" "}
                        <Image
                          src={window.location.origin + "/images/dot.png"}
                          type="image/png"
                        />
                      </span>
                      Delivered on 12-03-2022
                    </h5>
                    <h4>
                      <span>Order ID :</span>6132164651654651651
                    </h4>
                  </div>
                  <div className="order-product-details-sec mt-4">
                    <div className="product-img">
                      <div className="order-product-img order-bg-color">
                        <Image
                          src={window.location.origin + "/images/item-1.png"}
                          type="image/png"
                        />
                      </div>
                      <div className="order-product-details">
                        <h5>1000mg CBD Sport Cream</h5>
                        <h4>
                          1,430.00 $ <span>QTY-2</span>
                        </h4>
                        <div className="invoice-details">
                          <Link to="">
                            <span>
                              <Image
                                src={
                                  window.location.origin +
                                  "/images/file-invoice.svg"
                                }
                                type="image/png"
                              />
                            </span>
                            Get Invoice
                          </Link>
                          <Link to=""> Need Help?</Link>
                        </div>
                      </div>
                    </div>
                    <div className="product-tracking-details">
                      <Link to="" className="order-btn">
                        Order details
                      </Link>
                      <Link to="" className="edit-order-btn">
                        <span>
                          <Image
                            src={
                              window.location.origin + "/images/edit-solid.svg"
                            }
                            type="image/png"
                          />
                        </span>
                        Edit Order
                      </Link>
                    </div>
                  </div>
                </div>
              </div>
            </Col> */}
          </Row>
        </Container>
      </div>
      {selectedProduct && (
        <WriteReviewModal
          writeReview={true}
          closeWriteReviewModal={closeWriteReviewModal}
          singleProduct={selectedProduct}
        />
      )}
    </>
  );
};

const mapStateToPros = (state) => ({
  orderList: state.orders.orderList,
  orderDetails: state.orders.orderDetails,
});

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

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