@beyondcorp/beyond-ui 1.2.28 → 1.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Card/Card.js +7 -9
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Marketplace/AllProductsView.d.ts +8 -0
- package/dist/components/Marketplace/AllProductsView.js +185 -0
- package/dist/components/Marketplace/AllProductsView.js.map +1 -0
- package/dist/components/Marketplace/CheckoutCompact.d.ts +10 -0
- package/dist/components/Marketplace/CheckoutCompact.js +66 -0
- package/dist/components/Marketplace/CheckoutCompact.js.map +1 -0
- package/dist/components/Marketplace/CheckoutComponent.d.ts +8 -0
- package/dist/components/Marketplace/CheckoutComponent.js +123 -0
- package/dist/components/Marketplace/CheckoutComponent.js.map +1 -0
- package/dist/components/Marketplace/MarketplaceComponent.d.ts +8 -0
- package/dist/components/Marketplace/MarketplaceComponent.js +108 -0
- package/dist/components/Marketplace/MarketplaceComponent.js.map +1 -0
- package/dist/components/Marketplace/MarketplaceSidebar.d.ts +12 -0
- package/dist/components/Marketplace/MarketplaceSidebar.js +167 -0
- package/dist/components/Marketplace/MarketplaceSidebar.js.map +1 -0
- package/dist/components/Marketplace/SingleProductView.d.ts +9 -0
- package/dist/components/Marketplace/SingleProductView.js +52 -0
- package/dist/components/Marketplace/SingleProductView.js.map +1 -0
- package/dist/components/Marketplace/data/sampleData.d.ts +3 -0
- package/dist/components/Marketplace/data/sampleData.js +153 -0
- package/dist/components/Marketplace/data/sampleData.js.map +1 -0
- package/dist/components/Marketplace/index.d.ts +7 -0
- package/dist/components/Marketplace/types.d.ts +82 -0
- package/dist/index.d.ts +1 -3
- package/dist/index.js +6 -5
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import React__default, { useState } from 'react';
|
|
3
|
+
import { Truck, CreditCard, Check, ChevronRight, Tag, Lock, Shield, MapPin } from 'lucide-react';
|
|
4
|
+
import { Button } from '../Button/Button.js';
|
|
5
|
+
import { Input } from '../Input/Input.js';
|
|
6
|
+
import { Card, CardContent, CardHeader, CardTitle } from '../Card/Card.js';
|
|
7
|
+
import { showToast } from '../Toast/Toast.js';
|
|
8
|
+
import { sampleProducts } from './data/sampleData.js';
|
|
9
|
+
|
|
10
|
+
const sampleCartItems = [
|
|
11
|
+
{
|
|
12
|
+
product: sampleProducts[0],
|
|
13
|
+
quantity: 1,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
product: sampleProducts[1],
|
|
17
|
+
quantity: 2,
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
const CheckoutComponent = ({ cartItems = sampleCartItems, onOrderComplete, }) => {
|
|
21
|
+
const [currentStep, setCurrentStep] = useState(1);
|
|
22
|
+
const [shippingAddress, setShippingAddress] = useState({});
|
|
23
|
+
const [paymentMethod, setPaymentMethod] = useState({});
|
|
24
|
+
const [couponCode, setCouponCode] = useState('');
|
|
25
|
+
const [appliedCoupon, setAppliedCoupon] = useState(null);
|
|
26
|
+
const [isProcessing, setIsProcessing] = useState(false);
|
|
27
|
+
const [errors, setErrors] = useState({});
|
|
28
|
+
// Calculate totals
|
|
29
|
+
const subtotal = cartItems.reduce((sum, item) => sum + (item.product.price * item.quantity), 0);
|
|
30
|
+
const shipping = subtotal > 100 ? 0 : 9.99;
|
|
31
|
+
const tax = subtotal * 0.08; // 8% tax
|
|
32
|
+
const discount = appliedCoupon ? subtotal * 0.1 : 0; // 10% discount
|
|
33
|
+
const total = subtotal + shipping + tax - discount;
|
|
34
|
+
const steps = [
|
|
35
|
+
{ id: 1, name: 'Shipping', icon: Truck },
|
|
36
|
+
{ id: 2, name: 'Payment', icon: CreditCard },
|
|
37
|
+
{ id: 3, name: 'Review', icon: Check },
|
|
38
|
+
];
|
|
39
|
+
const validateStep = (step) => {
|
|
40
|
+
const newErrors = {};
|
|
41
|
+
if (step === 1) {
|
|
42
|
+
// Validate shipping address
|
|
43
|
+
if (!shippingAddress.firstName)
|
|
44
|
+
newErrors.firstName = 'First name is required';
|
|
45
|
+
if (!shippingAddress.lastName)
|
|
46
|
+
newErrors.lastName = 'Last name is required';
|
|
47
|
+
if (!shippingAddress.email)
|
|
48
|
+
newErrors.email = 'Email is required';
|
|
49
|
+
if (!shippingAddress.address)
|
|
50
|
+
newErrors.address = 'Address is required';
|
|
51
|
+
if (!shippingAddress.city)
|
|
52
|
+
newErrors.city = 'City is required';
|
|
53
|
+
if (!shippingAddress.zipCode)
|
|
54
|
+
newErrors.zipCode = 'ZIP code is required';
|
|
55
|
+
}
|
|
56
|
+
else if (step === 2) {
|
|
57
|
+
// Validate payment method
|
|
58
|
+
if (!paymentMethod.type)
|
|
59
|
+
newErrors.paymentType = 'Payment method is required';
|
|
60
|
+
if (paymentMethod.type === 'card') {
|
|
61
|
+
if (!paymentMethod.name)
|
|
62
|
+
newErrors.cardName = 'Cardholder name is required';
|
|
63
|
+
// Add more card validation as needed
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
setErrors(newErrors);
|
|
67
|
+
return Object.keys(newErrors).length === 0;
|
|
68
|
+
};
|
|
69
|
+
const handleNextStep = () => {
|
|
70
|
+
if (validateStep(currentStep)) {
|
|
71
|
+
setCurrentStep(prev => Math.min(3, prev + 1));
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const handlePrevStep = () => {
|
|
75
|
+
setCurrentStep(prev => Math.max(1, prev - 1));
|
|
76
|
+
};
|
|
77
|
+
const handleApplyCoupon = () => {
|
|
78
|
+
if (couponCode.toLowerCase() === 'save10') {
|
|
79
|
+
setAppliedCoupon(couponCode);
|
|
80
|
+
showToast.success('Coupon applied! 10% discount added.');
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
showToast.error('Invalid coupon code');
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const handlePlaceOrder = async () => {
|
|
87
|
+
if (!validateStep(3))
|
|
88
|
+
return;
|
|
89
|
+
setIsProcessing(true);
|
|
90
|
+
// Simulate order processing
|
|
91
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
92
|
+
const order = {
|
|
93
|
+
id: `ORD-${Date.now()}`,
|
|
94
|
+
items: cartItems,
|
|
95
|
+
shippingAddress: shippingAddress,
|
|
96
|
+
paymentMethod: paymentMethod,
|
|
97
|
+
subtotal,
|
|
98
|
+
shipping,
|
|
99
|
+
tax,
|
|
100
|
+
discount,
|
|
101
|
+
total,
|
|
102
|
+
status: 'pending',
|
|
103
|
+
createdAt: new Date().toISOString(),
|
|
104
|
+
};
|
|
105
|
+
onOrderComplete?.(order);
|
|
106
|
+
showToast.success('Order placed successfully!');
|
|
107
|
+
setIsProcessing(false);
|
|
108
|
+
};
|
|
109
|
+
const renderShippingStep = () => (jsx("div", { className: "space-y-6", children: jsxs("div", { children: [jsx("h2", { className: "text-xl font-semibold text-gray-900 mb-4", children: "Shipping Information" }), jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "First Name *" }), jsx(Input, { value: shippingAddress.firstName || '', onChange: (e) => setShippingAddress(prev => ({ ...prev, firstName: e.target.value })), className: errors.firstName ? 'border-red-500' : '' }), errors.firstName && (jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.firstName }))] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Last Name *" }), jsx(Input, { value: shippingAddress.lastName || '', onChange: (e) => setShippingAddress(prev => ({ ...prev, lastName: e.target.value })), className: errors.lastName ? 'border-red-500' : '' }), errors.lastName && (jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.lastName }))] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Email *" }), jsx(Input, { type: "email", value: shippingAddress.email || '', onChange: (e) => setShippingAddress(prev => ({ ...prev, email: e.target.value })), className: errors.email ? 'border-red-500' : '' }), errors.email && (jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.email }))] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Phone" }), jsx(Input, { type: "tel", value: shippingAddress.phone || '', onChange: (e) => setShippingAddress(prev => ({ ...prev, phone: e.target.value })) })] }), jsxs("div", { className: "md:col-span-2", children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Address *" }), jsx(Input, { value: shippingAddress.address || '', onChange: (e) => setShippingAddress(prev => ({ ...prev, address: e.target.value })), className: errors.address ? 'border-red-500' : '' }), errors.address && (jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.address }))] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "City *" }), jsx(Input, { value: shippingAddress.city || '', onChange: (e) => setShippingAddress(prev => ({ ...prev, city: e.target.value })), className: errors.city ? 'border-red-500' : '' }), errors.city && (jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.city }))] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "State" }), jsx(Input, { value: shippingAddress.state || '', onChange: (e) => setShippingAddress(prev => ({ ...prev, state: e.target.value })) })] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "ZIP Code *" }), jsx(Input, { value: shippingAddress.zipCode || '', onChange: (e) => setShippingAddress(prev => ({ ...prev, zipCode: e.target.value })), className: errors.zipCode ? 'border-red-500' : '' }), errors.zipCode && (jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.zipCode }))] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Country" }), jsxs("select", { value: shippingAddress.country || 'US', onChange: (e) => setShippingAddress(prev => ({ ...prev, country: e.target.value })), className: "w-full border border-gray-300 rounded-lg px-3 py-2", children: [jsx("option", { value: "US", children: "United States" }), jsx("option", { value: "CA", children: "Canada" }), jsx("option", { value: "UK", children: "United Kingdom" })] })] })] })] }) }));
|
|
110
|
+
const renderPaymentStep = () => (jsx("div", { className: "space-y-6", children: jsxs("div", { children: [jsx("h2", { className: "text-xl font-semibold text-gray-900 mb-4", children: "Payment Method" }), jsx("div", { className: "space-y-3 mb-6", children: [
|
|
111
|
+
{ id: 'card', name: 'Credit/Debit Card', icon: CreditCard },
|
|
112
|
+
{ id: 'paypal', name: 'PayPal', icon: Shield },
|
|
113
|
+
].map((method) => (jsxs("label", { className: `flex items-center p-4 border rounded-lg cursor-pointer transition-colors ${paymentMethod.type === method.id
|
|
114
|
+
? 'border-primary-500 bg-primary-50'
|
|
115
|
+
: 'border-gray-200 hover:border-gray-300'}`, children: [jsx("input", { type: "radio", name: "paymentMethod", value: method.id, checked: paymentMethod.type === method.id, onChange: (e) => setPaymentMethod(prev => ({ ...prev, type: e.target.value })), className: "sr-only" }), jsx(method.icon, { className: "h-5 w-5 text-gray-600 mr-3" }), jsx("span", { className: "font-medium text-gray-900", children: method.name })] }, method.id))) }), paymentMethod.type === 'card' && (jsxs("div", { className: "space-y-4", children: [jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Cardholder Name *" }), jsx(Input, { value: paymentMethod.name || '', onChange: (e) => setPaymentMethod(prev => ({ ...prev, name: e.target.value })), className: errors.cardName ? 'border-red-500' : '' }), errors.cardName && (jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.cardName }))] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Card Number *" }), jsx(Input, { placeholder: "1234 5678 9012 3456", onChange: (e) => setPaymentMethod(prev => ({ ...prev, last4: e.target.value.slice(-4) })) })] }), jsxs("div", { className: "grid grid-cols-2 gap-4", children: [jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Expiry Date *" }), jsx(Input, { placeholder: "MM/YY", onChange: (e) => setPaymentMethod(prev => ({ ...prev, expiryDate: e.target.value })) })] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "CVV *" }), jsx(Input, { placeholder: "123" })] })] })] }))] }) }));
|
|
116
|
+
const renderReviewStep = () => (jsx("div", { className: "space-y-6", children: jsxs("div", { children: [jsx("h2", { className: "text-xl font-semibold text-gray-900 mb-4", children: "Order Review" }), jsxs(Card, { className: "mb-6", children: [jsx(CardHeader, { children: jsxs(CardTitle, { className: "flex items-center", children: [jsx(MapPin, { className: "h-5 w-5 mr-2" }), "Shipping Address"] }) }), jsx(CardContent, { children: jsxs("div", { className: "text-gray-600", children: [jsxs("p", { children: [shippingAddress.firstName, " ", shippingAddress.lastName] }), jsx("p", { children: shippingAddress.address }), jsxs("p", { children: [shippingAddress.city, ", ", shippingAddress.state, " ", shippingAddress.zipCode] }), jsx("p", { children: shippingAddress.email })] }) })] }), jsxs(Card, { className: "mb-6", children: [jsx(CardHeader, { children: jsxs(CardTitle, { className: "flex items-center", children: [jsx(CreditCard, { className: "h-5 w-5 mr-2" }), "Payment Method"] }) }), jsx(CardContent, { children: jsx("div", { className: "text-gray-600", children: paymentMethod.type === 'card' ? (jsxs("p", { children: ["Credit Card ending in ", paymentMethod.last4] })) : (jsx("p", { children: "PayPal" })) }) })] }), jsxs(Card, { children: [jsx(CardHeader, { children: jsx(CardTitle, { children: "Order Items" }) }), jsx(CardContent, { children: jsx("div", { className: "space-y-4", children: cartItems.map((item) => (jsxs("div", { className: "flex items-center space-x-4", children: [jsx("img", { src: item.product.images[0], alt: item.product.name, className: "w-16 h-16 object-cover rounded-lg" }), jsxs("div", { className: "flex-1", children: [jsx("h4", { className: "font-medium text-gray-900", children: item.product.name }), jsxs("p", { className: "text-gray-600", children: ["Quantity: ", item.quantity] })] }), jsx("div", { className: "text-right", children: jsxs("p", { className: "font-medium text-gray-900", children: ["$", (item.product.price * item.quantity).toFixed(2)] }) })] }, item.product.id))) }) })] })] }) }));
|
|
117
|
+
return (jsxs("div", { className: "max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8", children: [jsx("div", { className: "mb-8", children: jsx("div", { className: "flex items-center justify-center", children: steps.map((step, index) => (jsxs(React__default.Fragment, { children: [jsxs("div", { className: "flex items-center", children: [jsx("div", { className: `flex items-center justify-center w-10 h-10 rounded-full border-2 ${currentStep >= step.id
|
|
118
|
+
? 'bg-primary-600 border-primary-600 text-white'
|
|
119
|
+
: 'border-gray-300 text-gray-400'}`, children: currentStep > step.id ? (jsx(Check, { className: "h-5 w-5" })) : (jsx(step.icon, { className: "h-5 w-5" })) }), jsx("span", { className: `ml-2 text-sm font-medium ${currentStep >= step.id ? 'text-primary-600' : 'text-gray-400'}`, children: step.name })] }), index < steps.length - 1 && (jsx(ChevronRight, { className: "h-5 w-5 text-gray-400 mx-4" }))] }, step.id))) }) }), jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-8", children: [jsx("div", { className: "lg:col-span-2", children: jsx(Card, { children: jsxs(CardContent, { className: "p-8", children: [currentStep === 1 && renderShippingStep(), currentStep === 2 && renderPaymentStep(), currentStep === 3 && renderReviewStep(), jsxs("div", { className: "flex justify-between mt-8 pt-6 border-t border-gray-200", children: [jsx(Button, { variant: "outline", onClick: handlePrevStep, disabled: currentStep === 1, children: "Previous" }), currentStep < 3 ? (jsx(Button, { variant: "primary", onClick: handleNextStep, children: "Next" })) : (jsx(Button, { variant: "primary", onClick: handlePlaceOrder, disabled: isProcessing, children: isProcessing ? 'Processing...' : 'Place Order' }))] })] }) }) }), jsx("div", { children: jsxs(Card, { className: "sticky top-4", children: [jsx(CardHeader, { children: jsx(CardTitle, { children: "Order Summary" }) }), jsxs(CardContent, { children: [jsx("div", { className: "space-y-3 mb-4", children: cartItems.map((item) => (jsxs("div", { className: "flex items-center space-x-3", children: [jsx("img", { src: item.product.images[0], alt: item.product.name, className: "w-12 h-12 object-cover rounded" }), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("p", { className: "text-sm font-medium text-gray-900 truncate", children: item.product.name }), jsxs("p", { className: "text-sm text-gray-600", children: ["Qty: ", item.quantity] })] }), jsxs("p", { className: "text-sm font-medium text-gray-900", children: ["$", (item.product.price * item.quantity).toFixed(2)] })] }, item.product.id))) }), jsxs("div", { className: "mb-4 pb-4 border-b border-gray-200", children: [jsxs("div", { className: "flex space-x-2", children: [jsx(Input, { placeholder: "Coupon code", value: couponCode, onChange: (e) => setCouponCode(e.target.value), disabled: !!appliedCoupon }), jsx(Button, { variant: "outline", onClick: handleApplyCoupon, disabled: !!appliedCoupon || !couponCode, children: "Apply" })] }), appliedCoupon && (jsxs("div", { className: "flex items-center mt-2", children: [jsx(Tag, { className: "h-4 w-4 text-green-600 mr-1" }), jsxs("span", { className: "text-sm text-green-600", children: ["Coupon \"", appliedCoupon, "\" applied"] })] }))] }), jsxs("div", { className: "space-y-2", children: [jsxs("div", { className: "flex justify-between text-sm", children: [jsx("span", { className: "text-gray-600", children: "Subtotal" }), jsxs("span", { className: "text-gray-900", children: ["$", subtotal.toFixed(2)] })] }), jsxs("div", { className: "flex justify-between text-sm", children: [jsx("span", { className: "text-gray-600", children: "Shipping" }), jsx("span", { className: "text-gray-900", children: shipping === 0 ? 'Free' : `$${shipping.toFixed(2)}` })] }), jsxs("div", { className: "flex justify-between text-sm", children: [jsx("span", { className: "text-gray-600", children: "Tax" }), jsxs("span", { className: "text-gray-900", children: ["$", tax.toFixed(2)] })] }), discount > 0 && (jsxs("div", { className: "flex justify-between text-sm", children: [jsx("span", { className: "text-gray-600", children: "Discount" }), jsxs("span", { className: "text-green-600", children: ["-$", discount.toFixed(2)] })] })), jsxs("div", { className: "flex justify-between text-lg font-semibold pt-2 border-t border-gray-200", children: [jsx("span", { className: "text-gray-900", children: "Total" }), jsxs("span", { className: "text-gray-900", children: ["$", total.toFixed(2)] })] })] }), jsxs("div", { className: "flex items-center justify-center mt-6 pt-4 border-t border-gray-200", children: [jsx(Lock, { className: "h-4 w-4 text-gray-400 mr-2" }), jsx("span", { className: "text-xs text-gray-600", children: "Secure checkout" })] })] })] }) })] })] }));
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export { CheckoutComponent };
|
|
123
|
+
//# sourceMappingURL=CheckoutComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckoutComponent.js","sources":["../../../src/components/Marketplace/CheckoutComponent.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { \n CreditCard, \n Truck, \n Shield, \n Check, \n ChevronRight,\n MapPin,\n User,\n Mail,\n Phone,\n Tag,\n Lock\n} from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { Checkbox } from '../Checkbox';\nimport { showToast } from '../Toast';\nimport type { CartItem, ShippingAddress, PaymentMethod, Order } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface CheckoutComponentProps {\n cartItems?: CartItem[];\n onOrderComplete?: (order: Order) => void;\n}\n\nconst sampleCartItems: CartItem[] = [\n {\n product: sampleProducts[0],\n quantity: 1,\n },\n {\n product: sampleProducts[1],\n quantity: 2,\n },\n];\n\nexport const CheckoutComponent: React.FC<CheckoutComponentProps> = ({\n cartItems = sampleCartItems,\n onOrderComplete,\n}) => {\n const [currentStep, setCurrentStep] = useState(1);\n const [shippingAddress, setShippingAddress] = useState<Partial<ShippingAddress>>({});\n const [paymentMethod, setPaymentMethod] = useState<Partial<PaymentMethod>>({});\n const [couponCode, setCouponCode] = useState('');\n const [appliedCoupon, setAppliedCoupon] = useState<string | null>(null);\n const [isProcessing, setIsProcessing] = useState(false);\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n // Calculate totals\n const subtotal = cartItems.reduce((sum, item) => sum + (item.product.price * item.quantity), 0);\n const shipping = subtotal > 100 ? 0 : 9.99;\n const tax = subtotal * 0.08; // 8% tax\n const discount = appliedCoupon ? subtotal * 0.1 : 0; // 10% discount\n const total = subtotal + shipping + tax - discount;\n\n const steps = [\n { id: 1, name: 'Shipping', icon: Truck },\n { id: 2, name: 'Payment', icon: CreditCard },\n { id: 3, name: 'Review', icon: Check },\n ];\n\n const validateStep = (step: number): boolean => {\n const newErrors: Record<string, string> = {};\n\n if (step === 1) {\n // Validate shipping address\n if (!shippingAddress.firstName) newErrors.firstName = 'First name is required';\n if (!shippingAddress.lastName) newErrors.lastName = 'Last name is required';\n if (!shippingAddress.email) newErrors.email = 'Email is required';\n if (!shippingAddress.address) newErrors.address = 'Address is required';\n if (!shippingAddress.city) newErrors.city = 'City is required';\n if (!shippingAddress.zipCode) newErrors.zipCode = 'ZIP code is required';\n } else if (step === 2) {\n // Validate payment method\n if (!paymentMethod.type) newErrors.paymentType = 'Payment method is required';\n if (paymentMethod.type === 'card') {\n if (!paymentMethod.name) newErrors.cardName = 'Cardholder name is required';\n // Add more card validation as needed\n }\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleNextStep = () => {\n if (validateStep(currentStep)) {\n setCurrentStep(prev => Math.min(3, prev + 1));\n }\n };\n\n const handlePrevStep = () => {\n setCurrentStep(prev => Math.max(1, prev - 1));\n };\n\n const handleApplyCoupon = () => {\n if (couponCode.toLowerCase() === 'save10') {\n setAppliedCoupon(couponCode);\n showToast.success('Coupon applied! 10% discount added.');\n } else {\n showToast.error('Invalid coupon code');\n }\n };\n\n const handlePlaceOrder = async () => {\n if (!validateStep(3)) return;\n\n setIsProcessing(true);\n \n // Simulate order processing\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n const order: Order = {\n id: `ORD-${Date.now()}`,\n items: cartItems,\n shippingAddress: shippingAddress as ShippingAddress,\n paymentMethod: paymentMethod as PaymentMethod,\n subtotal,\n shipping,\n tax,\n discount,\n total,\n status: 'pending',\n createdAt: new Date().toISOString(),\n };\n\n onOrderComplete?.(order);\n showToast.success('Order placed successfully!');\n setIsProcessing(false);\n };\n\n const renderShippingStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Shipping Information</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n First Name *\n </label>\n <Input\n value={shippingAddress.firstName || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, firstName: e.target.value }))}\n className={errors.firstName ? 'border-red-500' : ''}\n />\n {errors.firstName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.firstName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Last Name *\n </label>\n <Input\n value={shippingAddress.lastName || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, lastName: e.target.value }))}\n className={errors.lastName ? 'border-red-500' : ''}\n />\n {errors.lastName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.lastName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Email *\n </label>\n <Input\n type=\"email\"\n value={shippingAddress.email || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, email: e.target.value }))}\n className={errors.email ? 'border-red-500' : ''}\n />\n {errors.email && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.email}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Phone\n </label>\n <Input\n type=\"tel\"\n value={shippingAddress.phone || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, phone: e.target.value }))}\n />\n </div>\n <div className=\"md:col-span-2\">\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Address *\n </label>\n <Input\n value={shippingAddress.address || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, address: e.target.value }))}\n className={errors.address ? 'border-red-500' : ''}\n />\n {errors.address && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.address}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n City *\n </label>\n <Input\n value={shippingAddress.city || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, city: e.target.value }))}\n className={errors.city ? 'border-red-500' : ''}\n />\n {errors.city && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.city}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n State\n </label>\n <Input\n value={shippingAddress.state || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, state: e.target.value }))}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n ZIP Code *\n </label>\n <Input\n value={shippingAddress.zipCode || ''}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, zipCode: e.target.value }))}\n className={errors.zipCode ? 'border-red-500' : ''}\n />\n {errors.zipCode && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.zipCode}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Country\n </label>\n <select\n value={shippingAddress.country || 'US'}\n onChange={(e) => setShippingAddress(prev => ({ ...prev, country: e.target.value }))}\n className=\"w-full border border-gray-300 rounded-lg px-3 py-2\"\n >\n <option value=\"US\">United States</option>\n <option value=\"CA\">Canada</option>\n <option value=\"UK\">United Kingdom</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n );\n\n const renderPaymentStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Payment Method</h2>\n \n {/* Payment Method Selection */}\n <div className=\"space-y-3 mb-6\">\n {[\n { id: 'card', name: 'Credit/Debit Card', icon: CreditCard },\n { id: 'paypal', name: 'PayPal', icon: Shield },\n ].map((method) => (\n <label\n key={method.id}\n className={`flex items-center p-4 border rounded-lg cursor-pointer transition-colors ${\n paymentMethod.type === method.id\n ? 'border-primary-500 bg-primary-50'\n : 'border-gray-200 hover:border-gray-300'\n }`}\n >\n <input\n type=\"radio\"\n name=\"paymentMethod\"\n value={method.id}\n checked={paymentMethod.type === method.id}\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, type: e.target.value as any }))}\n className=\"sr-only\"\n />\n <method.icon className=\"h-5 w-5 text-gray-600 mr-3\" />\n <span className=\"font-medium text-gray-900\">{method.name}</span>\n </label>\n ))}\n </div>\n\n {/* Card Details */}\n {paymentMethod.type === 'card' && (\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Cardholder Name *\n </label>\n <Input\n value={paymentMethod.name || ''}\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, name: e.target.value }))}\n className={errors.cardName ? 'border-red-500' : ''}\n />\n {errors.cardName && (\n <p className=\"text-red-500 text-sm mt-1\">{errors.cardName}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Card Number *\n </label>\n <Input\n placeholder=\"1234 5678 9012 3456\"\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, last4: e.target.value.slice(-4) }))}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Expiry Date *\n </label>\n <Input\n placeholder=\"MM/YY\"\n onChange={(e) => setPaymentMethod(prev => ({ ...prev, expiryDate: e.target.value }))}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n CVV *\n </label>\n <Input placeholder=\"123\" />\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n\n const renderReviewStep = () => (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">Order Review</h2>\n \n {/* Shipping Address Review */}\n <Card className=\"mb-6\">\n <CardHeader>\n <CardTitle className=\"flex items-center\">\n <MapPin className=\"h-5 w-5 mr-2\" />\n Shipping Address\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-gray-600\">\n <p>{shippingAddress.firstName} {shippingAddress.lastName}</p>\n <p>{shippingAddress.address}</p>\n <p>{shippingAddress.city}, {shippingAddress.state} {shippingAddress.zipCode}</p>\n <p>{shippingAddress.email}</p>\n </div>\n </CardContent>\n </Card>\n\n {/* Payment Method Review */}\n <Card className=\"mb-6\">\n <CardHeader>\n <CardTitle className=\"flex items-center\">\n <CreditCard className=\"h-5 w-5 mr-2\" />\n Payment Method\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-gray-600\">\n {paymentMethod.type === 'card' ? (\n <p>Credit Card ending in {paymentMethod.last4}</p>\n ) : (\n <p>PayPal</p>\n )}\n </div>\n </CardContent>\n </Card>\n\n {/* Order Items Review */}\n <Card>\n <CardHeader>\n <CardTitle>Order Items</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {cartItems.map((item) => (\n <div key={item.product.id} className=\"flex items-center space-x-4\">\n <img\n src={item.product.images[0]}\n alt={item.product.name}\n className=\"w-16 h-16 object-cover rounded-lg\"\n />\n <div className=\"flex-1\">\n <h4 className=\"font-medium text-gray-900\">{item.product.name}</h4>\n <p className=\"text-gray-600\">Quantity: {item.quantity}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"font-medium text-gray-900\">\n ${(item.product.price * item.quantity).toFixed(2)}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n\n return (\n <div className=\"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {/* Progress Indicator */}\n <div className=\"mb-8\">\n <div className=\"flex items-center justify-center\">\n {steps.map((step, index) => (\n <React.Fragment key={step.id}>\n <div className=\"flex items-center\">\n <div\n className={`flex items-center justify-center w-10 h-10 rounded-full border-2 ${\n currentStep >= step.id\n ? 'bg-primary-600 border-primary-600 text-white'\n : 'border-gray-300 text-gray-400'\n }`}\n >\n {currentStep > step.id ? (\n <Check className=\"h-5 w-5\" />\n ) : (\n <step.icon className=\"h-5 w-5\" />\n )}\n </div>\n <span\n className={`ml-2 text-sm font-medium ${\n currentStep >= step.id ? 'text-primary-600' : 'text-gray-400'\n }`}\n >\n {step.name}\n </span>\n </div>\n {index < steps.length - 1 && (\n <ChevronRight className=\"h-5 w-5 text-gray-400 mx-4\" />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n {/* Main Content */}\n <div className=\"lg:col-span-2\">\n <Card>\n <CardContent className=\"p-8\">\n {currentStep === 1 && renderShippingStep()}\n {currentStep === 2 && renderPaymentStep()}\n {currentStep === 3 && renderReviewStep()}\n\n {/* Navigation Buttons */}\n <div className=\"flex justify-between mt-8 pt-6 border-t border-gray-200\">\n <Button\n variant=\"outline\"\n onClick={handlePrevStep}\n disabled={currentStep === 1}\n >\n Previous\n </Button>\n \n {currentStep < 3 ? (\n <Button variant=\"primary\" onClick={handleNextStep}>\n Next\n </Button>\n ) : (\n <Button\n variant=\"primary\"\n onClick={handlePlaceOrder}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : 'Place Order'}\n </Button>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Order Summary */}\n <div>\n <Card className=\"sticky top-4\">\n <CardHeader>\n <CardTitle>Order Summary</CardTitle>\n </CardHeader>\n <CardContent>\n {/* Cart Items */}\n <div className=\"space-y-3 mb-4\">\n {cartItems.map((item) => (\n <div key={item.product.id} className=\"flex items-center space-x-3\">\n <img\n src={item.product.images[0]}\n alt={item.product.name}\n className=\"w-12 h-12 object-cover rounded\"\n />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {item.product.name}\n </p>\n <p className=\"text-sm text-gray-600\">Qty: {item.quantity}</p>\n </div>\n <p className=\"text-sm font-medium text-gray-900\">\n ${(item.product.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {/* Coupon Code */}\n <div className=\"mb-4 pb-4 border-b border-gray-200\">\n <div className=\"flex space-x-2\">\n <Input\n placeholder=\"Coupon code\"\n value={couponCode}\n onChange={(e) => setCouponCode(e.target.value)}\n disabled={!!appliedCoupon}\n />\n <Button\n variant=\"outline\"\n onClick={handleApplyCoupon}\n disabled={!!appliedCoupon || !couponCode}\n >\n Apply\n </Button>\n </div>\n {appliedCoupon && (\n <div className=\"flex items-center mt-2\">\n <Tag className=\"h-4 w-4 text-green-600 mr-1\" />\n <span className=\"text-sm text-green-600\">\n Coupon \"{appliedCoupon}\" applied\n </span>\n </div>\n )}\n </div>\n\n {/* Order Totals */}\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">${subtotal.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">\n {shipping === 0 ? 'Free' : `$${shipping.toFixed(2)}`}\n </span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">${tax.toFixed(2)}</span>\n </div>\n {discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-${discount.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-lg font-semibold pt-2 border-t border-gray-200\">\n <span className=\"text-gray-900\">Total</span>\n <span className=\"text-gray-900\">${total.toFixed(2)}</span>\n </div>\n </div>\n\n {/* Security Badge */}\n <div className=\"flex items-center justify-center mt-6 pt-4 border-t border-gray-200\">\n <Lock className=\"h-4 w-4 text-gray-400 mr-2\" />\n <span className=\"text-xs text-gray-600\">Secure checkout</span>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs","React"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Product } from './types';
|
|
3
|
+
interface MarketplaceComponentProps {
|
|
4
|
+
userRole?: 'buyer' | 'seller' | 'admin';
|
|
5
|
+
onProductClick?: (product: Product) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const MarketplaceComponent: React.FC<MarketplaceComponentProps>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Menu, Package, Search, ShoppingCart, Bell, Users, DollarSign, Eye, Star } from 'lucide-react';
|
|
4
|
+
import { Button } from '../Button/Button.js';
|
|
5
|
+
import { Input } from '../Input/Input.js';
|
|
6
|
+
import { Card, CardContent } from '../Card/Card.js';
|
|
7
|
+
import { Badge } from '../Badge/Badge.js';
|
|
8
|
+
import { Avatar, AvatarImage, AvatarFallback } from '../Avatar/Avatar.js';
|
|
9
|
+
import { StatsCard } from '../StatsCard/StatsCard.js';
|
|
10
|
+
import { showToast } from '../Toast/Toast.js';
|
|
11
|
+
import { MarketplaceSidebar } from './MarketplaceSidebar.js';
|
|
12
|
+
import { AllProductsView } from './AllProductsView.js';
|
|
13
|
+
import { SingleProductView } from './SingleProductView.js';
|
|
14
|
+
import { CheckoutCompact } from './CheckoutCompact.js';
|
|
15
|
+
import { sampleProducts } from './data/sampleData.js';
|
|
16
|
+
|
|
17
|
+
const MarketplaceComponent = ({ userRole = 'buyer', onProductClick, }) => {
|
|
18
|
+
const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
|
|
19
|
+
const [currentView, setCurrentView] = useState('dashboard');
|
|
20
|
+
const [selectedProduct, setSelectedProduct] = useState(null);
|
|
21
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
22
|
+
const [cartItems, setCartItems] = useState([]);
|
|
23
|
+
const [showCheckout, setShowCheckout] = useState(false);
|
|
24
|
+
const [filters, setFilters] = useState({
|
|
25
|
+
categories: [],
|
|
26
|
+
brands: [],
|
|
27
|
+
priceRange: [0, 1000],
|
|
28
|
+
rating: 0,
|
|
29
|
+
inStock: false,
|
|
30
|
+
vendors: [],
|
|
31
|
+
});
|
|
32
|
+
const featuredProducts = sampleProducts.slice(0, 4);
|
|
33
|
+
const recentlyViewed = sampleProducts.slice(8, 12);
|
|
34
|
+
const handleProductClick = (product) => {
|
|
35
|
+
setSelectedProduct(product);
|
|
36
|
+
setCurrentView('product');
|
|
37
|
+
onProductClick?.(product);
|
|
38
|
+
};
|
|
39
|
+
const handleAddToCart = (product, quantity = 1) => {
|
|
40
|
+
setCartItems(prev => {
|
|
41
|
+
const existingItem = prev.find(item => item.product.id === product.id);
|
|
42
|
+
if (existingItem) {
|
|
43
|
+
return prev.map(item => item.product.id === product.id
|
|
44
|
+
? { ...item, quantity: item.quantity + quantity }
|
|
45
|
+
: item);
|
|
46
|
+
}
|
|
47
|
+
return [...prev, { product, quantity }];
|
|
48
|
+
});
|
|
49
|
+
showToast.success(`${product.name} added to cart!`);
|
|
50
|
+
};
|
|
51
|
+
const handleSearch = (query) => {
|
|
52
|
+
setSearchQuery(query);
|
|
53
|
+
if (query.trim()) {
|
|
54
|
+
setCurrentView('products');
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const renderHeader = () => (jsx("header", { className: "bg-white border-b border-gray-200 sticky top-0 z-40", children: jsx("div", { className: "px-6 py-4", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-4", children: [jsx(Button, { variant: "ghost", size: "sm", onClick: () => setSidebarCollapsed(!sidebarCollapsed), className: "lg:hidden", children: jsx(Menu, { className: "h-5 w-5" }) }), jsxs("div", { className: "flex items-center space-x-3", children: [jsx("div", { className: "w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center", children: jsx(Package, { className: "h-5 w-5 text-white" }) }), jsxs("div", { children: [jsx("h1", { className: "font-bold text-xl text-gray-900", children: "MarketPlace" }), jsx("p", { className: "text-xs text-gray-500", children: "Your digital marketplace" })] })] })] }), jsx("div", { className: "flex-1 max-w-2xl mx-8", children: jsxs("div", { className: "relative", children: [jsx(Search, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400" }), jsx(Input, { placeholder: "Search products, brands, categories...", value: searchQuery, onChange: (e) => handleSearch(e.target.value), className: "pl-10 bg-gray-50 border-gray-200 focus:bg-white" })] }) }), jsxs("div", { className: "flex items-center space-x-3", children: [jsx("div", { className: "relative", children: jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setShowCheckout(!showCheckout), className: "relative", children: [jsx(ShoppingCart, { className: "h-5 w-5" }), cartItems.length > 0 && (jsx(Badge, { variant: "danger", className: "absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center", children: cartItems.reduce((sum, item) => sum + item.quantity, 0) }))] }) }), jsxs(Button, { variant: "ghost", size: "sm", className: "relative", children: [jsx(Bell, { className: "h-5 w-5" }), jsx(Badge, { variant: "danger", className: "absolute -top-1 -right-1 h-4 w-4 text-xs p-0 flex items-center justify-center", children: "3" })] }), jsxs("div", { className: "flex items-center space-x-3 pl-3 border-l border-gray-200", children: [jsxs("div", { className: "hidden sm:block text-right", children: [jsx("p", { className: "text-sm font-medium text-gray-900", children: "John Doe" }), jsx("p", { className: "text-xs text-gray-500 capitalize", children: userRole })] }), jsxs(Avatar, { size: "sm", children: [jsx(AvatarImage, { src: "https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64" }), jsx(AvatarFallback, { children: "JD" })] })] })] })] }) }) }));
|
|
58
|
+
const renderDashboard = () => (jsxs("div", { className: "space-y-8", children: [jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6", children: [jsx(StatsCard, { title: "Total Products", value: "2,543", trend: {
|
|
59
|
+
direction: "up",
|
|
60
|
+
value: "+12%",
|
|
61
|
+
label: "from last month"
|
|
62
|
+
}, icon: jsx(Package, { className: "h-6 w-6 text-primary-600" }) }), jsx(StatsCard, { title: "Active Sellers", value: "156", trend: {
|
|
63
|
+
direction: "up",
|
|
64
|
+
value: "+8%",
|
|
65
|
+
label: "from last month"
|
|
66
|
+
}, icon: jsx(Users, { className: "h-6 w-6 text-success-600" }) }), jsx(StatsCard, { title: "Total Sales", value: "$45,231", trend: {
|
|
67
|
+
direction: "up",
|
|
68
|
+
value: "+15%",
|
|
69
|
+
label: "from last month"
|
|
70
|
+
}, icon: jsx(DollarSign, { className: "h-6 w-6 text-warning-600" }) }), jsx(StatsCard, { title: "Page Views", value: "89,432", trend: {
|
|
71
|
+
direction: "up",
|
|
72
|
+
value: "+23%",
|
|
73
|
+
label: "from last month"
|
|
74
|
+
}, icon: jsx(Eye, { className: "h-6 w-6 text-danger-600" }) })] }), jsxs("div", { children: [jsxs("div", { className: "flex items-center justify-between mb-6", children: [jsx("h2", { className: "text-2xl font-bold text-gray-900", children: "Featured Categories" }), jsx(Button, { variant: "outline", onClick: () => setCurrentView('products'), children: "View All" })] }), jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4", children: [
|
|
75
|
+
{ name: 'Electronics', count: 156, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=400' },
|
|
76
|
+
{ name: 'Fashion', count: 234, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=400' },
|
|
77
|
+
{ name: 'Home & Garden', count: 178, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=400' },
|
|
78
|
+
{ name: 'Sports', count: 145, image: 'https://images.pexels.com/photos/863988/pexels-photo-863988.jpeg?auto=compress&cs=tinysrgb&w=400' },
|
|
79
|
+
].map((category) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", children: jsx("img", { src: category.image, alt: category.name, className: "w-full h-full object-cover" }) }), jsxs(CardContent, { className: "p-4 text-center", children: [jsx("h3", { className: "font-medium text-gray-900 mb-1", children: category.name }), jsxs("p", { className: "text-sm text-gray-600", children: [category.count, " products"] })] })] }, category.name))) })] }), jsxs("div", { children: [jsxs("div", { className: "flex items-center justify-between mb-6", children: [jsx("h2", { className: "text-2xl font-bold text-gray-900", children: "Featured Products" }), jsx(Button, { variant: "outline", onClick: () => setCurrentView('products'), children: "View All" })] }), jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6", children: featuredProducts.map((product) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsxs("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", onClick: () => handleProductClick(product), children: [jsx("img", { src: product.images[0], alt: product.name, className: "w-full h-full object-cover" }), product.discount && (jsxs(Badge, { variant: "danger", className: "absolute top-2 left-2", children: ["-", product.discount, "%"] }))] }), jsxs(CardContent, { className: "p-4", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2 line-clamp-2", children: product.name }), jsxs("div", { className: "flex items-center space-x-1 mb-2", children: [jsx(Star, { className: "h-4 w-4 text-yellow-400 fill-current" }), jsxs("span", { className: "text-sm text-gray-600", children: [product.rating, " (", product.reviewCount, ")"] })] }), jsxs("div", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsxs("span", { className: "text-lg font-bold text-gray-900", children: ["$", product.price.toFixed(2)] }), product.originalPrice && (jsxs("span", { className: "text-sm text-gray-500 line-through", children: ["$", product.originalPrice.toFixed(2)] }))] }), jsx(Button, { size: "sm", onClick: (e) => {
|
|
80
|
+
e.stopPropagation();
|
|
81
|
+
handleAddToCart(product);
|
|
82
|
+
}, children: "Add to Cart" })] })] })] }, product.id))) })] }), jsxs("div", { children: [jsx("h2", { className: "text-2xl font-bold text-gray-900 mb-6", children: "Top Sellers" }), jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [
|
|
83
|
+
{ name: 'TechWorld Store', rating: 4.8, products: 89, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=64' },
|
|
84
|
+
{ name: 'Fashion Hub', rating: 4.6, products: 76, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=64' },
|
|
85
|
+
{ name: 'Home Essentials', rating: 4.7, products: 65, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=64' },
|
|
86
|
+
].map((vendor) => (jsx(Card, { className: "hover:shadow-lg transition-shadow", children: jsxs(CardContent, { className: "p-6 text-center", children: [jsxs(Avatar, { size: "lg", className: "mx-auto mb-4", children: [jsx(AvatarImage, { src: vendor.image }), jsx(AvatarFallback, { children: vendor.name[0] })] }), jsx("h3", { className: "font-semibold text-gray-900 mb-2", children: vendor.name }), jsxs("div", { className: "flex items-center justify-center space-x-1 mb-2", children: [jsx(Star, { className: "h-4 w-4 text-yellow-400 fill-current" }), jsx("span", { className: "text-sm text-gray-600", children: vendor.rating })] }), jsxs("p", { className: "text-sm text-gray-600 mb-4", children: [vendor.products, " products"] }), jsx(Button, { variant: "outline", size: "sm", children: "Visit Store" })] }) }, vendor.name))) })] }), recentlyViewed.length > 0 && (jsxs("div", { children: [jsx("h2", { className: "text-2xl font-bold text-gray-900 mb-6", children: "Recently Viewed" }), jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6", children: recentlyViewed.map((product) => (jsxs(Card, { className: "hover:shadow-lg transition-shadow cursor-pointer", children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-t-lg overflow-hidden", onClick: () => handleProductClick(product), children: jsx("img", { src: product.images[0], alt: product.name, className: "w-full h-full object-cover" }) }), jsxs(CardContent, { className: "p-4", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2 line-clamp-2", children: product.name }), jsxs("div", { className: "flex items-center justify-between", children: [jsxs("span", { className: "text-lg font-bold text-gray-900", children: ["$", product.price.toFixed(2)] }), jsx(Button, { size: "sm", onClick: (e) => {
|
|
87
|
+
e.stopPropagation();
|
|
88
|
+
handleAddToCart(product);
|
|
89
|
+
}, children: jsx(ShoppingCart, { className: "h-4 w-4" }) })] })] })] }, product.id))) })] }))] }));
|
|
90
|
+
return (jsxs("div", { className: "min-h-screen bg-gray-50", children: [renderHeader(), jsxs("div", { className: "flex", children: [(currentView === 'products' || currentView === 'dashboard') && (jsx(MarketplaceSidebar, { filters: filters, onFiltersChange: setFilters, onClearFilters: () => setFilters({
|
|
91
|
+
categories: [],
|
|
92
|
+
brands: [],
|
|
93
|
+
priceRange: [0, 1000],
|
|
94
|
+
rating: 0,
|
|
95
|
+
inStock: false,
|
|
96
|
+
vendors: [],
|
|
97
|
+
}), collapsed: sidebarCollapsed, onToggleCollapse: () => setSidebarCollapsed(!sidebarCollapsed) })), jsxs("main", { className: "flex-1 p-6", children: [currentView === 'dashboard' && renderDashboard(), currentView === 'products' && (jsx(AllProductsView, { onProductClick: handleProductClick, onAddToCart: handleAddToCart })), currentView === 'product' && selectedProduct && (jsx(SingleProductView, { productId: selectedProduct.id, onAddToCart: handleAddToCart, onBuyNow: (product, quantity) => {
|
|
98
|
+
handleAddToCart(product, quantity);
|
|
99
|
+
setShowCheckout(true);
|
|
100
|
+
} }))] }), showCheckout && (jsx("div", { className: "fixed right-4 top-20 z-50", children: jsx(CheckoutCompact, { cartItems: cartItems, onClose: () => setShowCheckout(false), onCheckout: (items) => {
|
|
101
|
+
showToast.success('Order placed successfully!');
|
|
102
|
+
setCartItems([]);
|
|
103
|
+
setShowCheckout(false);
|
|
104
|
+
} }) }))] })] }));
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export { MarketplaceComponent };
|
|
108
|
+
//# sourceMappingURL=MarketplaceComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketplaceComponent.js","sources":["../../../src/components/Marketplace/MarketplaceComponent.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Search, ShoppingCart, User, Bell, Menu, TrendingUp, Star, Eye, Package, DollarSign, Users, BarChart3, Filter, Grid2x2 as Grid, List } from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { Avatar, AvatarImage, AvatarFallback } from '../Avatar';\nimport { StatsCard } from '../StatsCard';\nimport { showToast } from '../Toast';\nimport { MarketplaceSidebar } from './MarketplaceSidebar';\nimport { AllProductsView } from './AllProductsView';\nimport { SingleProductView } from './SingleProductView';\nimport { CheckoutCompact } from './CheckoutCompact';\nimport type { Product, FilterOptions, CartItem } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface MarketplaceComponentProps {\n userRole?: 'buyer' | 'seller' | 'admin';\n onProductClick?: (product: Product) => void;\n}\n\nexport const MarketplaceComponent: React.FC<MarketplaceComponentProps> = ({\n userRole = 'buyer',\n onProductClick,\n}) => {\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [currentView, setCurrentView] = useState<'dashboard' | 'products' | 'product' | 'checkout'>('dashboard');\n const [selectedProduct, setSelectedProduct] = useState<Product | null>(null);\n const [searchQuery, setSearchQuery] = useState('');\n const [cartItems, setCartItems] = useState<CartItem[]>([]);\n const [showCheckout, setShowCheckout] = useState(false);\n const [filters, setFilters] = useState<FilterOptions>({\n categories: [],\n brands: [],\n priceRange: [0, 1000],\n rating: 0,\n inStock: false,\n vendors: [],\n });\n\n const featuredProducts = sampleProducts.slice(0, 4);\n const trendingProducts = sampleProducts.slice(4, 8);\n const recentlyViewed = sampleProducts.slice(8, 12);\n\n const handleProductClick = (product: Product) => {\n setSelectedProduct(product);\n setCurrentView('product');\n onProductClick?.(product);\n };\n\n const handleAddToCart = (product: Product, quantity: number = 1) => {\n setCartItems(prev => {\n const existingItem = prev.find(item => item.product.id === product.id);\n if (existingItem) {\n return prev.map(item =>\n item.product.id === product.id\n ? { ...item, quantity: item.quantity + quantity }\n : item\n );\n }\n return [...prev, { product, quantity }];\n });\n showToast.success(`${product.name} added to cart!`);\n };\n\n const handleSearch = (query: string) => {\n setSearchQuery(query);\n if (query.trim()) {\n setCurrentView('products');\n }\n };\n\n const renderHeader = () => (\n <header className=\"bg-white border-b border-gray-200 sticky top-0 z-40\">\n <div className=\"px-6 py-4\">\n <div className=\"flex items-center justify-between\">\n {/* Left Section */}\n <div className=\"flex items-center space-x-4\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setSidebarCollapsed(!sidebarCollapsed)}\n className=\"lg:hidden\"\n >\n <Menu className=\"h-5 w-5\" />\n </Button>\n \n <div className=\"flex items-center space-x-3\">\n <div className=\"w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center\">\n <Package className=\"h-5 w-5 text-white\" />\n </div>\n <div>\n <h1 className=\"font-bold text-xl text-gray-900\">MarketPlace</h1>\n <p className=\"text-xs text-gray-500\">Your digital marketplace</p>\n </div>\n </div>\n </div>\n\n {/* Center Section - Search */}\n <div className=\"flex-1 max-w-2xl mx-8\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\" />\n <Input\n placeholder=\"Search products, brands, categories...\"\n value={searchQuery}\n onChange={(e) => handleSearch(e.target.value)}\n className=\"pl-10 bg-gray-50 border-gray-200 focus:bg-white\"\n />\n </div>\n </div>\n\n {/* Right Section */}\n <div className=\"flex items-center space-x-3\">\n {/* Cart */}\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowCheckout(!showCheckout)}\n className=\"relative\"\n >\n <ShoppingCart className=\"h-5 w-5\" />\n {cartItems.length > 0 && (\n <Badge \n variant=\"danger\" \n className=\"absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center\"\n >\n {cartItems.reduce((sum, item) => sum + item.quantity, 0)}\n </Badge>\n )}\n </Button>\n </div>\n\n {/* Notifications */}\n <Button variant=\"ghost\" size=\"sm\" className=\"relative\">\n <Bell className=\"h-5 w-5\" />\n <Badge \n variant=\"danger\" \n className=\"absolute -top-1 -right-1 h-4 w-4 text-xs p-0 flex items-center justify-center\"\n >\n 3\n </Badge>\n </Button>\n\n {/* User Profile */}\n <div className=\"flex items-center space-x-3 pl-3 border-l border-gray-200\">\n <div className=\"hidden sm:block text-right\">\n <p className=\"text-sm font-medium text-gray-900\">John Doe</p>\n <p className=\"text-xs text-gray-500 capitalize\">{userRole}</p>\n </div>\n <Avatar size=\"sm\">\n <AvatarImage src=\"https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64\" />\n <AvatarFallback>JD</AvatarFallback>\n </Avatar>\n </div>\n </div>\n </div>\n </div>\n </header>\n );\n\n const renderDashboard = () => (\n <div className=\"space-y-8\">\n {/* Stats Cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n <StatsCard\n title=\"Total Products\"\n value=\"2,543\"\n trend={{\n direction: \"up\",\n value: \"+12%\",\n label: \"from last month\"\n }}\n icon={<Package className=\"h-6 w-6 text-primary-600\" />}\n />\n <StatsCard\n title=\"Active Sellers\"\n value=\"156\"\n trend={{\n direction: \"up\",\n value: \"+8%\",\n label: \"from last month\"\n }}\n icon={<Users className=\"h-6 w-6 text-success-600\" />}\n />\n <StatsCard\n title=\"Total Sales\"\n value=\"$45,231\"\n trend={{\n direction: \"up\",\n value: \"+15%\",\n label: \"from last month\"\n }}\n icon={<DollarSign className=\"h-6 w-6 text-warning-600\" />}\n />\n <StatsCard\n title=\"Page Views\"\n value=\"89,432\"\n trend={{\n direction: \"up\",\n value: \"+23%\",\n label: \"from last month\"\n }}\n icon={<Eye className=\"h-6 w-6 text-danger-600\" />}\n />\n </div>\n\n {/* Featured Categories */}\n <div>\n <div className=\"flex items-center justify-between mb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900\">Featured Categories</h2>\n <Button variant=\"outline\" onClick={() => setCurrentView('products')}>\n View All\n </Button>\n </div>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {[\n { name: 'Electronics', count: 156, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Fashion', count: 234, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Home & Garden', count: 178, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=400' },\n { name: 'Sports', count: 145, image: 'https://images.pexels.com/photos/863988/pexels-photo-863988.jpeg?auto=compress&cs=tinysrgb&w=400' },\n ].map((category) => (\n <Card key={category.name} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\n <img\n src={category.image}\n alt={category.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <CardContent className=\"p-4 text-center\">\n <h3 className=\"font-medium text-gray-900 mb-1\">{category.name}</h3>\n <p className=\"text-sm text-gray-600\">{category.count} products</p>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Featured Products */}\n <div>\n <div className=\"flex items-center justify-between mb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900\">Featured Products</h2>\n <Button variant=\"outline\" onClick={() => setCurrentView('products')}>\n View All\n </Button>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6\">\n {featuredProducts.map((product) => (\n <Card key={product.id} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div \n className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\"\n onClick={() => handleProductClick(product)}\n >\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover\"\n />\n {product.discount && (\n <Badge variant=\"danger\" className=\"absolute top-2 left-2\">\n -{product.discount}%\n </Badge>\n )}\n </div>\n <CardContent className=\"p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2 line-clamp-2\">\n {product.name}\n </h3>\n <div className=\"flex items-center space-x-1 mb-2\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\n <span className=\"text-sm text-gray-600\">\n {product.rating} ({product.reviewCount})\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-lg font-bold text-gray-900\">\n ${product.price.toFixed(2)}\n </span>\n {product.originalPrice && (\n <span className=\"text-sm text-gray-500 line-through\">\n ${product.originalPrice.toFixed(2)}\n </span>\n )}\n </div>\n <Button\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleAddToCart(product);\n }}\n >\n Add to Cart\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Vendor Spotlight */}\n <div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-6\">Top Sellers</h2>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {[\n { name: 'TechWorld Store', rating: 4.8, products: 89, image: 'https://images.pexels.com/photos/3394650/pexels-photo-3394650.jpeg?auto=compress&cs=tinysrgb&w=64' },\n { name: 'Fashion Hub', rating: 4.6, products: 76, image: 'https://images.pexels.com/photos/1926769/pexels-photo-1926769.jpeg?auto=compress&cs=tinysrgb&w=64' },\n { name: 'Home Essentials', rating: 4.7, products: 65, image: 'https://images.pexels.com/photos/1571460/pexels-photo-1571460.jpeg?auto=compress&cs=tinysrgb&w=64' },\n ].map((vendor) => (\n <Card key={vendor.name} className=\"hover:shadow-lg transition-shadow\">\n <CardContent className=\"p-6 text-center\">\n <Avatar size=\"lg\" className=\"mx-auto mb-4\">\n <AvatarImage src={vendor.image} />\n <AvatarFallback>{vendor.name[0]}</AvatarFallback>\n </Avatar>\n <h3 className=\"font-semibold text-gray-900 mb-2\">{vendor.name}</h3>\n <div className=\"flex items-center justify-center space-x-1 mb-2\">\n <Star className=\"h-4 w-4 text-yellow-400 fill-current\" />\n <span className=\"text-sm text-gray-600\">{vendor.rating}</span>\n </div>\n <p className=\"text-sm text-gray-600 mb-4\">{vendor.products} products</p>\n <Button variant=\"outline\" size=\"sm\">\n Visit Store\n </Button>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n\n {/* Recently Viewed */}\n {recentlyViewed.length > 0 && (\n <div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-6\">Recently Viewed</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6\">\n {recentlyViewed.map((product) => (\n <Card key={product.id} className=\"hover:shadow-lg transition-shadow cursor-pointer\">\n <div \n className=\"aspect-square bg-gray-100 rounded-t-lg overflow-hidden\"\n onClick={() => handleProductClick(product)}\n >\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <CardContent className=\"p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2 line-clamp-2\">\n {product.name}\n </h3>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-lg font-bold text-gray-900\">\n ${product.price.toFixed(2)}\n </span>\n <Button\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleAddToCart(product);\n }}\n >\n <ShoppingCart className=\"h-4 w-4\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n\n return (\n <div className=\"min-h-screen bg-gray-50\">\n {/* Header */}\n {renderHeader()}\n\n <div className=\"flex\">\n {/* Sidebar */}\n {(currentView === 'products' || currentView === 'dashboard') && (\n <MarketplaceSidebar\n filters={filters}\n onFiltersChange={setFilters}\n onClearFilters={() => setFilters({\n categories: [],\n brands: [],\n priceRange: [0, 1000],\n rating: 0,\n inStock: false,\n vendors: [],\n })}\n collapsed={sidebarCollapsed}\n onToggleCollapse={() => setSidebarCollapsed(!sidebarCollapsed)}\n />\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 p-6\">\n {currentView === 'dashboard' && renderDashboard()}\n \n {currentView === 'products' && (\n <AllProductsView\n onProductClick={handleProductClick}\n onAddToCart={handleAddToCart}\n />\n )}\n \n {currentView === 'product' && selectedProduct && (\n <SingleProductView\n productId={selectedProduct.id}\n onAddToCart={handleAddToCart}\n onBuyNow={(product, quantity) => {\n handleAddToCart(product, quantity);\n setShowCheckout(true);\n }}\n />\n )}\n </main>\n\n {/* Checkout Sidebar */}\n {showCheckout && (\n <div className=\"fixed right-4 top-20 z-50\">\n <CheckoutCompact\n cartItems={cartItems}\n onClose={() => setShowCheckout(false)}\n onCheckout={(items) => {\n showToast.success('Order placed successfully!');\n setCartItems([]);\n setShowCheckout(false);\n }}\n />\n </div>\n )}\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FilterOptions } from './types';
|
|
3
|
+
interface MarketplaceSidebarProps {
|
|
4
|
+
filters: FilterOptions;
|
|
5
|
+
onFiltersChange: (filters: FilterOptions) => void;
|
|
6
|
+
onClearFilters: () => void;
|
|
7
|
+
className?: string;
|
|
8
|
+
collapsed?: boolean;
|
|
9
|
+
onToggleCollapse?: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const MarketplaceSidebar: React.FC<MarketplaceSidebarProps>;
|
|
12
|
+
export {};
|