Initial commit

This commit is contained in:
Mohammad Oftadeh
2024-09-26 10:17:47 +03:00
commit 66f531e5aa
160 changed files with 5687 additions and 0 deletions

123
src/app/cart/page.tsx Normal file
View File

@@ -0,0 +1,123 @@
"use client";
import BreadcrumbCart from "@/components/cart-page/BreadcrumbCart";
import ProductCard from "@/components/cart-page/ProductCard";
import { Button } from "@/components/ui/button";
import InputGroup from "@/components/ui/input-group";
import { cn } from "@/lib/utils";
import { integralCF } from "@/styles/fonts";
import { FaArrowRight } from "react-icons/fa6";
import { MdOutlineLocalOffer } from "react-icons/md";
import { TbBasketExclamation } from "react-icons/tb";
import React from "react";
import { RootState } from "@/lib/store";
import { useAppSelector } from "@/lib/hooks/redux";
import Link from "next/link";
export default function CartPage() {
const { cart, totalPrice, adjustedTotalPrice } = useAppSelector(
(state: RootState) => state.carts
);
return (
<main className="pb-20">
<div className="max-w-frame mx-auto px-4 xl:px-0">
{cart && cart.items.length > 0 ? (
<>
<BreadcrumbCart />
<h2
className={cn([
integralCF.className,
"font-bold text-[32px] md:text-[40px] text-black uppercase mb-5 md:mb-6",
])}
>
your cart
</h2>
<div className="flex flex-col lg:flex-row space-y-5 lg:space-y-0 lg:space-x-5 items-start">
<div className="w-full p-3.5 md:px-6 flex-col space-y-4 md:space-y-6 rounded-[20px] border border-black/10">
{cart?.items.map((product, idx, arr) => (
<React.Fragment key={idx}>
<ProductCard data={product} />
{arr.length - 1 !== idx && (
<hr className="border-t-black/10" />
)}
</React.Fragment>
))}
</div>
<div className="w-full lg:max-w-[505px] p-5 md:px-6 flex-col space-y-4 md:space-y-6 rounded-[20px] border border-black/10">
<h6 className="text-xl md:text-2xl font-bold text-black">
Order Summary
</h6>
<div className="flex flex-col space-y-5">
<div className="flex items-center justify-between">
<span className="md:text-xl text-black/60">Subtotal</span>
<span className="md:text-xl font-bold">${totalPrice}</span>
</div>
<div className="flex items-center justify-between">
<span className="md:text-xl text-black/60">
Discount (-
{Math.round(
((totalPrice - adjustedTotalPrice) / totalPrice) * 100
)}
%)
</span>
<span className="md:text-xl font-bold text-red-600">
-${Math.round(totalPrice - adjustedTotalPrice)}
</span>
</div>
<div className="flex items-center justify-between">
<span className="md:text-xl text-black/60">
Delivery Fee
</span>
<span className="md:text-xl font-bold">Free</span>
</div>
<hr className="border-t-black/10" />
<div className="flex items-center justify-between">
<span className="md:text-xl text-black">Total</span>
<span className="text-xl md:text-2xl font-bold">
${Math.round(adjustedTotalPrice)}
</span>
</div>
</div>
<div className="flex space-x-3">
<InputGroup className="bg-[#F0F0F0]">
<InputGroup.Text>
<MdOutlineLocalOffer className="text-black/40 text-2xl" />
</InputGroup.Text>
<InputGroup.Input
type="text"
name="code"
placeholder="Add promo code"
className="bg-transparent placeholder:text-black/40"
/>
</InputGroup>
<Button
type="button"
className="bg-black rounded-full w-full max-w-[119px] h-[48px]"
>
Apply
</Button>
</div>
<Button
type="button"
className="text-sm md:text-base font-medium bg-black rounded-full w-full py-4 h-[54px] md:h-[60px] group"
>
Go to Checkout{" "}
<FaArrowRight className="text-xl ml-2 group-hover:translate-x-1 transition-all" />
</Button>
</div>
</div>
</>
) : (
<div className="flex items-center flex-col text-gray-300 mt-32">
<TbBasketExclamation strokeWidth={1} className="text-6xl" />
<span className="block mb-4">Your shopping cart is empty.</span>
<Button className="rounded-full w-24" asChild>
<Link href="/shop">Shop</Link>
</Button>
</div>
)}
</div>
</main>
);
}