Merge version_4 into main
Merge version_4 into main
This commit was merged in pull request #4.
This commit is contained in:
242
src/app/checkout/page.tsx
Normal file
242
src/app/checkout/page.tsx
Normal file
@@ -0,0 +1,242 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ReactLenis from "lenis/react";
|
||||
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
|
||||
import FooterMedia from '@/components/sections/footer/FooterMedia';
|
||||
import ButtonElasticEffect from '@/components/button/ButtonElasticEffect/ButtonElasticEffect';
|
||||
import { useState } from 'react';
|
||||
|
||||
export default function CheckoutPage() {
|
||||
const [formData, setFormData] = useState({
|
||||
fullName: '',
|
||||
email: '',
|
||||
address: '',
|
||||
city: '',
|
||||
zip: '',
|
||||
cardName: '',
|
||||
cardNumber: '',
|
||||
expDate: '',
|
||||
cvv: ''
|
||||
});
|
||||
|
||||
const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
|
||||
setFormData({ ...formData, [e.target.name]: e.target.value });
|
||||
};
|
||||
|
||||
const handleSubmit = (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
console.log("Checkout form submitted:", formData);
|
||||
// In a real app, process payment and redirect to order confirmation
|
||||
window.location.href = "/order-confirmation";
|
||||
};
|
||||
|
||||
const footerColumns = [
|
||||
{
|
||||
title: "Quick Links", items: [
|
||||
{ label: "Home", href: "/" },
|
||||
{ label: "About Us", href: "/#about" },
|
||||
{ label: "Services", href: "/#services" },
|
||||
{ label: "Team", href: "/#team" },
|
||||
{ label: "Shopping Cart", href: "/shopping-cart" },
|
||||
{ label: "Checkout", href: "/checkout" },
|
||||
{ label: "Order Confirmation", href: "/order-confirmation" }
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Resources", items: [
|
||||
{ label: "FAQ", href: "/#faq" },
|
||||
{ label: "Contact Us", href: "/#contact" },
|
||||
{ label: "Privacy Policy", href: "#" },
|
||||
{ label: "Terms of Service", href: "#" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Connect", items: [
|
||||
{ label: "info@fcplus.com", href: "mailto:info@fcplus.com" },
|
||||
{ label: "+1 (555) 123-4567", href: "tel:+15551234567" },
|
||||
{ label: "456 Gentleman's Way", href: "#" },
|
||||
{ label: "Fashion District, NY 10018", href: "#" },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const navItems = [
|
||||
{ name: "Home", id: "/" },
|
||||
{ name: "About", id: "/#about" },
|
||||
{ name: "Services", id: "/#services" },
|
||||
{ name: "Team", id: "/#team" },
|
||||
{ name: "Testimonials", id: "/#testimonials" },
|
||||
{ name: "FAQ", id: "/#faq" },
|
||||
{ name: "Contact", id: "/#contact" },
|
||||
{ name: "Cart", id: "/shopping-cart" },
|
||||
{ name: "Checkout", id: "/checkout" },
|
||||
];
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="bounce-effect"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="soft"
|
||||
contentWidth="compact"
|
||||
sizing="largeSmallSizeLargeTitles"
|
||||
background="floatingGradient"
|
||||
cardStyle="gradient-bordered"
|
||||
primaryButtonStyle="flat"
|
||||
secondaryButtonStyle="layered"
|
||||
headingFontWeight="bold"
|
||||
>
|
||||
<ReactLenis root>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarLayoutFloatingOverlay
|
||||
navItems={navItems}
|
||||
brandName="FCplus Center"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<main className="min-h-screen py-16 px-4 sm:px-6 lg:px-8 max-w-5xl mx-auto">
|
||||
<h1 className="text-4xl font-bold text-center mb-12">Checkout</h1>
|
||||
<form onSubmit={handleSubmit} className="space-y-8 p-8 border rounded-lg shadow-lg bg-card">
|
||||
{/* Shipping Information */}
|
||||
<section>
|
||||
<h2 className="text-2xl font-semibold mb-4">Shipping Information</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label htmlFor="fullName" className="block text-sm font-medium text-foreground">Full Name</label>
|
||||
<input
|
||||
type="text"
|
||||
id="fullName"
|
||||
name="fullName"
|
||||
value={formData.fullName}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label htmlFor="email" className="block text-sm font-medium text-foreground">Email Address</label>
|
||||
<input
|
||||
type="email"
|
||||
id="email"
|
||||
name="email"
|
||||
value={formData.email}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div className="md:col-span-2">
|
||||
<label htmlFor="address" className="block text-sm font-medium text-foreground">Address</label>
|
||||
<input
|
||||
type="text"
|
||||
id="address"
|
||||
name="address"
|
||||
value={formData.address}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label htmlFor="city" className="block text-sm font-medium text-foreground">City</label>
|
||||
<input
|
||||
type="text"
|
||||
id="city"
|
||||
name="city"
|
||||
value={formData.city}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label htmlFor="zip" className="block text-sm font-medium text-foreground">ZIP Code</label>
|
||||
<input
|
||||
type="text"
|
||||
id="zip"
|
||||
name="zip"
|
||||
value={formData.zip}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Payment Information */}
|
||||
<section>
|
||||
<h2 className="text-2xl font-semibold mb-4">Payment Information</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div className="md:col-span-2">
|
||||
<label htmlFor="cardName" className="block text-sm font-medium text-foreground">Name on Card</label>
|
||||
<input
|
||||
type="text"
|
||||
id="cardName"
|
||||
name="cardName"
|
||||
value={formData.cardName}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div className="md:col-span-2">
|
||||
<label htmlFor="cardNumber" className="block text-sm font-medium text-foreground">Card Number</label>
|
||||
<input
|
||||
type="text"
|
||||
id="cardNumber"
|
||||
name="cardNumber"
|
||||
value={formData.cardNumber}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label htmlFor="expDate" className="block text-sm font-medium text-foreground">Expiration Date (MM/YY)</label>
|
||||
<input
|
||||
type="text"
|
||||
id="expDate"
|
||||
name="expDate"
|
||||
value={formData.expDate}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label htmlFor="cvv" className="block text-sm font-medium text-foreground">CVV</label>
|
||||
<input
|
||||
type="text"
|
||||
id="cvv"
|
||||
name="cvv"
|
||||
value={formData.cvv}
|
||||
onChange={handleChange}
|
||||
className="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-primary-cta focus:border-primary-cta sm:text-sm bg-background-accent text-foreground"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<ButtonElasticEffect
|
||||
text="Pay Now"
|
||||
type="submit"
|
||||
className="w-full"
|
||||
/>
|
||||
</form>
|
||||
</main>
|
||||
|
||||
<div id="footer" data-section="footer">
|
||||
<FooterMedia
|
||||
imageSrc="http://img.b2bpic.net/free-photo/blue-suit-hangers-dark-background_107420-101413.jpg"
|
||||
imageAlt="Blue suits on hangers in a dark setting"
|
||||
logoText="FCplus Center"
|
||||
columns={footerColumns}
|
||||
copyrightText="© 2024 FCplus Center. All rights reserved."
|
||||
/>
|
||||
</div>
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
@@ -33,11 +33,13 @@ export default function LandingPage() {
|
||||
<NavbarLayoutFloatingOverlay
|
||||
navItems={[
|
||||
{
|
||||
name: "Home", id: "#home"},
|
||||
name: "Home", id: "/"},
|
||||
{
|
||||
name: "About", id: "#about"},
|
||||
{
|
||||
name: "Services", id: "#services"},
|
||||
{
|
||||
name: "Product", id: "/product/1"},
|
||||
{
|
||||
name: "Team", id: "#team"},
|
||||
{
|
||||
@@ -253,13 +255,15 @@ export default function LandingPage() {
|
||||
{
|
||||
title: "Quick Links", items: [
|
||||
{
|
||||
label: "Home", href: "#home"},
|
||||
label: "Home", href: "/"},
|
||||
{
|
||||
label: "About Us", href: "#about"},
|
||||
{
|
||||
label: "Services", href: "#services"},
|
||||
{
|
||||
label: "Team", href: "#team"},
|
||||
label: "Product", href: "/product/1"},
|
||||
{
|
||||
label: "Team", href: "#team"}
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -293,4 +297,4 @@ export default function LandingPage() {
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
}
|
||||
162
src/app/product-catalog/page.tsx
Normal file
162
src/app/product-catalog/page.tsx
Normal file
@@ -0,0 +1,162 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ReactLenis from "lenis/react";
|
||||
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
|
||||
import ProductCardTwo from '@/components/sections/product/ProductCardTwo';
|
||||
import FooterMedia from '@/components/sections/footer/FooterMedia';
|
||||
|
||||
const productData = [
|
||||
{
|
||||
id: "p1", brand: "Classic Tailors", name: "Charcoal Business Suit", price: "$799", rating: 4.5,
|
||||
reviewCount: "120", imageSrc: "https://img.b2bpic.net/free-photo/men-s-suit-hanger_107420-101414.jpg", imageAlt: "Charcoal Business Suit"},
|
||||
{
|
||||
id: "p2", brand: "Modern Fits", name: "Navy Slim Fit Tuxedo", price: "$1200", rating: 4.8,
|
||||
reviewCount: "85", imageSrc: "https://img.b2bpic.net/free-photo/stylish-man-in-suit_158595-3561.jpg", imageAlt: "Navy Slim Fit Tuxedo"},
|
||||
{
|
||||
id: "p3", brand: "Elegant Wear", name: "Grey Plaid Formal Suit", price: "$899", rating: 4.2,
|
||||
reviewCount: "95", imageSrc: "https://img.b2bpic.net/free-photo/black-classic-suit-blue-background_23-2147772659.jpg", imageAlt: "Grey Plaid Formal Suit"},
|
||||
{
|
||||
id: "p4", brand: "Gentleman's Choice", name: "Brown Tweed Casual Blazer", price: "$450", rating: 4.0,
|
||||
reviewCount: "60", imageSrc: "https://img.b2bpic.net/free-photo/business-gentleman-wearing-suit_158595-4560.jpg", imageAlt: "Brown Tweed Casual Blazer"},
|
||||
{
|
||||
id: "p5", brand: "Trendsetter", name: "Light Blue Summer Suit", price: "$720", rating: 4.3,
|
||||
reviewCount: "110", imageSrc: "https://img.b2bpic.net/free-photo/man-fitting-suit-store_107420-101416.jpg", imageAlt: "Light Blue Summer Suit"},
|
||||
{
|
||||
id: "p6", brand: "Exclusive Tailoring", name: "Black Tie Evening Suit", price: "$1500", rating: 4.9,
|
||||
reviewCount: "75", imageSrc: "https://img.b2bpic.net/free-photo/fashion-men-suits_1203-9121.jpg", imageAlt: "Black Tie Evening Suit"}
|
||||
];
|
||||
|
||||
// Placeholder for client-side filtering component logic
|
||||
function ProductFilters() {
|
||||
return (
|
||||
<div className="w-full lg:w-1/4 p-4 lg:pr-8 border-b lg:border-r border-gray-200 lg:border-b-0">
|
||||
<h3 className="text-2xl font-semibold mb-6 text-foreground">Filter Products</h3>
|
||||
<div className="mb-6">
|
||||
<h4 className="text-lg font-medium text-foreground mb-3">Size</h4>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{['XS', 'S', 'M', 'L', 'XL', 'XXL'].map(size => (
|
||||
<button key={size} className="px-4 py-2 text-sm bg-card text-foreground rounded-full border border-accent hover:bg-primary-cta hover:text-primary-cta-text transition-colors">
|
||||
{size}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<div className="mb-6">
|
||||
<h4 className="text-lg font-medium text-foreground mb-3">Color</h4>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{['Blue', 'Black', 'Grey', 'Brown', 'Navy'].map(color => (
|
||||
<button key={color} className="px-4 py-2 text-sm bg-card text-foreground rounded-full border border-accent hover:bg-primary-cta hover:text-primary-cta-text transition-colors">
|
||||
{color}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<div className="mb-6">
|
||||
<h4 className="text-lg font-medium text-foreground mb-3">Price Range</h4>
|
||||
<input type="range" min="0" max="2000" defaultValue="1000" className="w-full accent-primary-cta" />
|
||||
<div className="flex justify-between text-sm text-foreground mt-2">
|
||||
<span>$0</span>
|
||||
<span>$2000+</span>
|
||||
</div>
|
||||
</div>
|
||||
<button className="w-full py-3 bg-primary-cta text-primary-cta-text rounded-lg hover:opacity-90 transition-opacity font-medium">
|
||||
Apply Filters
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function ProductCatalogPage() {
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="bounce-effect"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="soft"
|
||||
contentWidth="compact"
|
||||
sizing="largeSmallSizeLargeTitles"
|
||||
background="floatingGradient"
|
||||
cardStyle="gradient-bordered"
|
||||
primaryButtonStyle="flat"
|
||||
secondaryButtonStyle="layered"
|
||||
headingFontWeight="bold"
|
||||
>
|
||||
<ReactLenis root>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarLayoutFloatingOverlay
|
||||
navItems={[
|
||||
{ name: "Home", id: "#home" },
|
||||
{ name: "About", id: "#about" },
|
||||
{ name: "Services", id: "#services" },
|
||||
{ name: "Team", id: "#team" },
|
||||
{ name: "Testimonials", id: "#testimonials" },
|
||||
{ name: "FAQ", id: "#faq" },
|
||||
{ name: "Contact", id: "#contact" },
|
||||
{ name: "Product Catalog", id: "/product-catalog" }
|
||||
]}
|
||||
brandName="FCplus Center"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="product-catalog" data-section="product-catalog" className="min-h-screen py-24 lg:py-32 flex flex-col items-center bg-background text-foreground">
|
||||
<div className="container mx-auto px-4 max-w-[var(--width-content-width)]">
|
||||
<h1 className="text-5xl md:text-6xl font-extrabold text-center mb-16 leading-tight">
|
||||
Our Exquisite Suit Collections
|
||||
</h1>
|
||||
<div className="flex flex-col lg:flex-row gap-8">
|
||||
<ProductFilters />
|
||||
<div className="lg:w-3/4">
|
||||
<ProductCardTwo
|
||||
title="Discover Your Perfect Suit"
|
||||
description="Browse our curated selection of fine man suits, tailored for every occasion and style preference."
|
||||
products={productData}
|
||||
gridVariant="three-columns-all-equal-width"
|
||||
animationType="slide-up"
|
||||
useInvertedBackground={false}
|
||||
className="!p-0"
|
||||
containerClassName="!px-0"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="footer" data-section="footer">
|
||||
<FooterMedia
|
||||
imageSrc="http://img.b2bpic.net/free-photo/blue-suit-hangers-dark-background_107420-101413.jpg"
|
||||
imageAlt="Blue suits on hangers in a dark setting"
|
||||
logoText="FCplus Center"
|
||||
columns={[
|
||||
{
|
||||
title: "Quick Links", items: [
|
||||
{ label: "Home", href: "#home" },
|
||||
{ label: "About Us", href: "#about" },
|
||||
{ label: "Services", href: "#services" },
|
||||
{ label: "Team", href: "#team" },
|
||||
{ label: "Product Catalog", href: "/product-catalog"}
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Resources", items: [
|
||||
{ label: "FAQ", href: "#faq" },
|
||||
{ label: "Contact Us", href: "#contact" },
|
||||
{ label: "Privacy Policy", href: "#" },
|
||||
{ label: "Terms of Service", href: "#" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Connect", items: [
|
||||
{ label: "info@fcplus.com", href: "mailto:info@fcplus.com" },
|
||||
{ label: "+1 (555) 123-4567", href: "tel:+15551234567" },
|
||||
{ label: "456 Gentleman's Way", href: "#" },
|
||||
{ label: "Fashion District, NY 10018", href: "#" },
|
||||
],
|
||||
},
|
||||
]}
|
||||
copyrightText="© 2024 FCplus Center. All rights reserved."
|
||||
/>
|
||||
</div>
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
94
src/app/product/[id]/page.tsx
Normal file
94
src/app/product/[id]/page.tsx
Normal file
@@ -0,0 +1,94 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ReactLenis from "lenis/react";
|
||||
import ProductDetailCard from '@/components/ecommerce/productDetail/ProductDetailCard';
|
||||
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
|
||||
import { Star } from "lucide-react";
|
||||
|
||||
export default function ProductDetailPage() {
|
||||
const handleAddToCart = () => {
|
||||
alert("Product added to cart!");
|
||||
};
|
||||
|
||||
const handleBuyNow = () => {
|
||||
alert("Proceeding to checkout!");
|
||||
};
|
||||
|
||||
const handleSizeChange = (value: string) => {
|
||||
console.log("Selected size:", value);
|
||||
};
|
||||
|
||||
const handleColorChange = (value: string) => {
|
||||
console.log("Selected color:", value);
|
||||
};
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="bounce-effect"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="soft"
|
||||
contentWidth="compact"
|
||||
sizing="largeSmallSizeLargeTitles"
|
||||
background="floatingGradient"
|
||||
cardStyle="gradient-bordered"
|
||||
primaryButtonStyle="flat"
|
||||
secondaryButtonStyle="layered"
|
||||
headingFontWeight="bold"
|
||||
>
|
||||
<ReactLenis root>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarLayoutFloatingOverlay
|
||||
navItems={[
|
||||
{ name: "Home", id: "/" },
|
||||
{ name: "About", id: "#about" },
|
||||
{ name: "Services", id: "#services" },
|
||||
{ name: "Product", id: "/product/1" },
|
||||
{ name: "Team", id: "#team" },
|
||||
{ name: "Testimonials", id: "#testimonials" },
|
||||
{ name: "FAQ", id: "#faq" },
|
||||
{ name: "Contact", id: "#contact" }
|
||||
]}
|
||||
brandName="FCplus Center"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="product-detail" data-section="product-detail">
|
||||
<ProductDetailCard
|
||||
layout="page"
|
||||
name="Classic Blue Suit"
|
||||
price="$599.00"
|
||||
description="Elegantly crafted from premium Italian wool, this classic blue suit offers a timeless silhouette and unparalleled comfort. Perfect for business, formal events, or any occasion requiring a sharp, sophisticated look. Features a two-button closure, notched lapels, and flat-front trousers."
|
||||
showRating={true}
|
||||
rating={4.5}
|
||||
ratingIcon={Star}
|
||||
images={[
|
||||
{ src: "http://img.b2bpic.net/free-photo/stylish-man-in-blue-suit_1303-10022.jpg", alt: "Classic Blue Suit front view" },
|
||||
{ src: "http://img.b2bpic.net/free-photo/handsome-elegant-young-man-with-braces-posing_158595-5026.jpg", alt: "Man in suit close-up" },
|
||||
{ src: "http://img.b2bpic.net/free-photo/man-fitting-suit-store_107420-101416.jpg", alt: "Man fitting suit in store" },
|
||||
{ src: "http://img.b2bpic.net/free-photo/blue-suit-hangers-dark-background_107420-101413.jpg", alt: "Blue suit fabric detail" }
|
||||
]}
|
||||
variants={[
|
||||
{
|
||||
label: "Size", options: ["38S", "40S", "40R", "42R", "42L", "44L"],
|
||||
selected: "40R", onChange: handleSizeChange
|
||||
},
|
||||
{
|
||||
label: "Color", options: ["Blue", "Charcoal", "Black"],
|
||||
selected: "Blue", onChange: handleColorChange
|
||||
}
|
||||
]}
|
||||
quantity={{
|
||||
label: "Quantity", options: ["1", "2", "3", "4", "5"],
|
||||
selected: "1", onChange: (value) => console.log("Selected quantity:", value)
|
||||
}}
|
||||
buttons={[
|
||||
{ text: "Add to Cart", onClick: handleAddToCart },
|
||||
{ text: "Buy Now", onClick: handleBuyNow }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
124
src/app/shopping-cart/page.tsx
Normal file
124
src/app/shopping-cart/page.tsx
Normal file
@@ -0,0 +1,124 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import ReactLenis from "lenis/react";
|
||||
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
|
||||
import ProductCart from '@/components/ecommerce/cart/ProductCart';
|
||||
import FooterMedia from '@/components/sections/footer/FooterMedia';
|
||||
|
||||
export default function ShoppingCartPage() {
|
||||
const dummyCartItems = [
|
||||
{
|
||||
id: "suit1", name: "Classic Blue Suit", variants: ["Size 40R", "Slim Fit"],
|
||||
price: "$499.99", quantity: 1,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-man-in-blue-suit_1303-10022.jpg", imageAlt: "Classic Blue Suit"},
|
||||
{
|
||||
id: "tie1", name: "Silk Necktie - Burgundy", variants: ["One Size"],
|
||||
price: "$49.99", quantity: 2,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/red-silk-necktie_23-2148405096.jpg", imageAlt: "Burgundy Silk Necktie"},
|
||||
];
|
||||
|
||||
const handleQuantityChange = (id: string, quantity: number) => {
|
||||
console.log(`Changed quantity for ${id} to ${quantity}`);
|
||||
// In a real app, this would update cart state
|
||||
};
|
||||
|
||||
const handleRemoveItem = (id: string) => {
|
||||
console.log(`Removed item ${id}`);
|
||||
// In a real app, this would remove item from cart state
|
||||
};
|
||||
|
||||
const footerColumns = [
|
||||
{
|
||||
title: "Quick Links", items: [
|
||||
{ label: "Home", href: "/" },
|
||||
{ label: "About Us", href: "/#about" },
|
||||
{ label: "Services", href: "/#services" },
|
||||
{ label: "Team", href: "/#team" },
|
||||
{ label: "Shopping Cart", href: "/shopping-cart" },
|
||||
{ label: "Checkout", href: "/checkout" },
|
||||
{ label: "Order Confirmation", href: "/order-confirmation" }
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Resources", items: [
|
||||
{ label: "FAQ", href: "/#faq" },
|
||||
{ label: "Contact Us", href: "/#contact" }, { label: "Privacy Policy", href: "#" },
|
||||
{ label: "Terms of Service", href: "#" },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Connect", items: [
|
||||
{ label: "info@fcplus.com", href: "mailto:info@fcplus.com" },
|
||||
{ label: "+1 (555) 123-4567", href: "tel:+15551234567" },
|
||||
{ label: "456 Gentleman's Way", href: "#" },
|
||||
{ label: "Fashion District, NY 10018", href: "#" },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const navItems = [
|
||||
{ name: "Home", id: "/" },
|
||||
{ name: "About", id: "/#about" },
|
||||
{ name: "Services", id: "/#services" },
|
||||
{ name: "Team", id: "/#team" },
|
||||
{ name: "Testimonials", id: "/#testimonials" },
|
||||
{ name: "FAQ", id: "/#faq" },
|
||||
{ name: "Contact", id: "/#contact" },
|
||||
{ name: "Cart", id: "/shopping-cart" },
|
||||
{ name: "Checkout", id: "/checkout" },
|
||||
];
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="bounce-effect"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="soft"
|
||||
contentWidth="compact"
|
||||
sizing="largeSmallSizeLargeTitles"
|
||||
background="floatingGradient"
|
||||
cardStyle="gradient-bordered"
|
||||
primaryButtonStyle="flat"
|
||||
secondaryButtonStyle="layered"
|
||||
headingFontWeight="bold"
|
||||
>
|
||||
<ReactLenis root>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarLayoutFloatingOverlay
|
||||
navItems={navItems}
|
||||
brandName="FCplus Center"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<main className="min-h-screen py-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto flex flex-col items-center justify-center">
|
||||
<div className="w-full max-w-3xl">
|
||||
<h1 className="text-4xl font-bold text-center mb-12">Your Shopping Cart</h1>
|
||||
<ProductCart
|
||||
isOpen={true}
|
||||
onClose={() => console.log("Cart closed")}
|
||||
items={dummyCartItems}
|
||||
onQuantityChange={handleQuantityChange}
|
||||
onRemove={handleRemoveItem}
|
||||
total="$599.97"
|
||||
buttons={[
|
||||
{ text: "Continue Shopping", href: "/" },
|
||||
{ text: "Proceed to Checkout", href: "/checkout" },
|
||||
]}
|
||||
title="Your Items"
|
||||
/>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div id="footer" data-section="footer">
|
||||
<FooterMedia
|
||||
imageSrc="http://img.b2bpic.net/free-photo/blue-suit-hangers-dark-background_107420-101413.jpg"
|
||||
imageAlt="Blue suits on hangers in a dark setting"
|
||||
logoText="FCplus Center"
|
||||
columns={footerColumns}
|
||||
copyrightText="© 2024 FCplus Center. All rights reserved."
|
||||
/>
|
||||
</div>
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user