@beyondcorp/beyond-ui 1.2.51 → 1.2.53
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/Marketplace/AllProductsView.d.ts +3 -1
- package/dist/components/Marketplace/AllProductsView.js +38 -50
- package/dist/components/Marketplace/AllProductsView.js.map +1 -1
- package/dist/components/Marketplace/CheckoutCompact.d.ts +1 -0
- package/dist/components/Marketplace/CheckoutCompact.js +3 -3
- package/dist/components/Marketplace/CheckoutCompact.js.map +1 -1
- package/dist/components/Marketplace/CheckoutComponent.js +1 -1
- package/dist/components/Marketplace/CheckoutComponent.js.map +1 -1
- package/dist/components/Marketplace/MarketplaceComponent.js +27 -2
- package/dist/components/Marketplace/MarketplaceComponent.js.map +1 -1
- package/dist/components/Marketplace/MarketplaceSidebar.js +2 -2
- package/dist/components/Marketplace/MarketplaceSidebar.js.map +1 -1
- package/dist/components/Marketplace/components/ProductCard.js +1 -1
- package/dist/components/Marketplace/components/ProductCard.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -2,9 +2,11 @@ import React from 'react';
|
|
|
2
2
|
import type { Product, FilterOptions } from './types';
|
|
3
3
|
interface AllProductsViewProps {
|
|
4
4
|
products?: Product[];
|
|
5
|
-
filters
|
|
5
|
+
filters: FilterOptions;
|
|
6
6
|
onProductClick?: (product: Product) => void;
|
|
7
7
|
onAddToCart?: (product: Product) => void;
|
|
8
|
+
onFiltersChange: (filters: FilterOptions) => void;
|
|
9
|
+
onClearFilters: () => void;
|
|
8
10
|
}
|
|
9
11
|
export declare const AllProductsView: React.FC<AllProductsViewProps>;
|
|
10
12
|
export {};
|
|
@@ -18,7 +18,7 @@ const sortOptions = [
|
|
|
18
18
|
{ value: 'newest', label: 'Newest First' },
|
|
19
19
|
{ value: 'popular', label: 'Most Popular' },
|
|
20
20
|
];
|
|
21
|
-
const AllProductsView = ({ products, filters: filtersProp, onProductClick, onAddToCart, }) => {
|
|
21
|
+
const AllProductsView = ({ products, filters: filtersProp, onProductClick, onAddToCart, onFiltersChange, onClearFilters, }) => {
|
|
22
22
|
const productsData = products ?? sampleProducts;
|
|
23
23
|
const [searchQuery, setSearchQuery] = useState('');
|
|
24
24
|
const [sortBy, setSortBy] = useState('relevance');
|
|
@@ -27,15 +27,8 @@ const AllProductsView = ({ products, filters: filtersProp, onProductClick, onAdd
|
|
|
27
27
|
const [showFilters, setShowFilters] = useState(false);
|
|
28
28
|
const [quickViewProduct, setQuickViewProduct] = useState(null);
|
|
29
29
|
const [wishlist, setWishlist] = useState(new Set());
|
|
30
|
-
// Use
|
|
31
|
-
const
|
|
32
|
-
categories: [],
|
|
33
|
-
brands: [],
|
|
34
|
-
priceRange: [0, 1000],
|
|
35
|
-
rating: 0,
|
|
36
|
-
inStock: false,
|
|
37
|
-
vendors: [],
|
|
38
|
-
});
|
|
30
|
+
// Use filters and handlers from props only
|
|
31
|
+
const filters = filtersProp;
|
|
39
32
|
const itemsPerPage = 12;
|
|
40
33
|
// Get unique filter options from products
|
|
41
34
|
const filterOptions = useMemo(() => {
|
|
@@ -106,21 +99,15 @@ const AllProductsView = ({ products, filters: filtersProp, onProductClick, onAdd
|
|
|
106
99
|
}, [filteredProducts, currentPage]);
|
|
107
100
|
const totalPages = Math.ceil(filteredProducts.length / itemsPerPage);
|
|
108
101
|
const handleFilterChange = (filterType, value) => {
|
|
109
|
-
|
|
110
|
-
...
|
|
102
|
+
const newFilters = {
|
|
103
|
+
...filters,
|
|
111
104
|
[filterType]: value,
|
|
112
|
-
}
|
|
105
|
+
};
|
|
106
|
+
onFiltersChange(newFilters);
|
|
113
107
|
setCurrentPage(1); // Reset to first page when filters change
|
|
114
108
|
};
|
|
115
109
|
const handleClearFilters = () => {
|
|
116
|
-
|
|
117
|
-
categories: [],
|
|
118
|
-
brands: [],
|
|
119
|
-
priceRange: [0, 1000],
|
|
120
|
-
rating: 0,
|
|
121
|
-
inStock: false,
|
|
122
|
-
vendors: [],
|
|
123
|
-
});
|
|
110
|
+
onClearFilters();
|
|
124
111
|
setSearchQuery('');
|
|
125
112
|
setCurrentPage(1);
|
|
126
113
|
};
|
|
@@ -152,35 +139,36 @@ const AllProductsView = ({ products, filters: filtersProp, onProductClick, onAdd
|
|
|
152
139
|
e.stopPropagation();
|
|
153
140
|
handleAddToCart(product);
|
|
154
141
|
}, disabled: !product.inStock, className: "w-full", children: [jsx(ShoppingCart, { className: "mr-2 h-4 w-4" }), "Add to Cart"] })] })] }));
|
|
155
|
-
return (jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8", children: [jsxs("div", { className: "flex flex-col lg:flex-row lg:items-center lg:justify-between mb-8", children: [jsxs("div", { children: [jsx("h1", { className: "text-3xl font-bold text-gray-900 mb-2", children: "All Products" }), jsxs("p", { className: "text-gray-600", children: ["Showing ", filteredProducts.length, " of ", productsData.length, " products"] })] }), jsxs("div", { className: "flex items-center space-x-4 mt-4 lg:mt-0", 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...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "pl-10 w-64" })] }), jsx("select", { value: sortBy, onChange: (e) => setSortBy(e.target.value), className: "border border-gray-300 rounded-lg px-3 py-2 bg-white", children: sortOptions.map(option => (jsx("option", { value: option.value, children: option.label }, option.value))) }), jsxs("div", { className: "flex items-center bg-gray-100 rounded-lg p-1", children: [jsx(Button, { variant: viewMode === 'grid' ? 'primary' : 'ghost', size: "sm", onClick: () => setViewMode('grid'), children: jsx(Grid2x2, { className: "h-4 w-4" }) }), jsx(Button, { variant: viewMode === 'list' ? 'primary' : 'ghost', size: "sm", onClick: () => setViewMode('list'), children: jsx(List, { className: "h-4 w-4" }) })] }), jsxs(Button, { variant: "outline", onClick: () => setShowFilters(true), className: "lg:hidden", children: [jsx(Filter, { className: "mr-2 h-4 w-4" }), "Filters"] })] })] }),
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
142
|
+
return (jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8", children: [jsxs("div", { className: "flex flex-col lg:flex-row lg:items-center lg:justify-between mb-8", children: [jsxs("div", { children: [jsx("h1", { className: "text-3xl font-bold text-gray-900 mb-2", children: "All Products" }), jsxs("p", { className: "text-gray-600", children: ["Showing ", filteredProducts.length, " of ", productsData.length, " products"] })] }), jsxs("div", { className: "flex items-center space-x-4 mt-4 lg:mt-0", 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...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "pl-10 w-64" })] }), jsx("select", { value: sortBy, onChange: (e) => setSortBy(e.target.value), className: "border border-gray-300 rounded-lg px-3 py-2 bg-white", children: sortOptions.map(option => (jsx("option", { value: option.value, children: option.label }, option.value))) }), jsxs("div", { className: "flex items-center bg-gray-100 rounded-lg p-1", children: [jsx(Button, { variant: viewMode === 'grid' ? 'primary' : 'ghost', size: "sm", onClick: () => setViewMode('grid'), children: jsx(Grid2x2, { className: "h-4 w-4" }) }), jsx(Button, { variant: viewMode === 'list' ? 'primary' : 'ghost', size: "sm", onClick: () => setViewMode('list'), children: jsx(List, { className: "h-4 w-4" }) })] }), jsxs(Button, { variant: "outline", onClick: () => setShowFilters(true), className: "lg:hidden", children: [jsx(Filter, { className: "mr-2 h-4 w-4" }), "Filters"] })] })] }), jsx("div", { className: "flex gap-8", children: jsx("div", { className: "flex-1", children: paginatedProducts.length === 0 ? (jsxs("div", { className: "text-center py-12", children: [jsx("div", { className: "text-gray-400 mb-4", children: jsx(Search, { className: "h-16 w-16 mx-auto" }) }), jsx("h3", { className: "text-lg font-medium text-gray-900 mb-2", children: "No products found" }), jsx("p", { className: "text-gray-600 mb-4", children: "Try adjusting your search or filter criteria" }), jsx(Button, { variant: "outline", onClick: handleClearFilters, children: "Clear Filters" })] })) : (jsxs(Fragment, { children: [jsx("div", { className: `grid gap-6 ${viewMode === 'grid'
|
|
143
|
+
? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'
|
|
144
|
+
: 'grid-cols-1'}`, children: paginatedProducts.map((product) => (jsx(ProductCard, { product: product }, product.id))) }), totalPages > 1 && (jsxs("div", { className: "flex items-center justify-center space-x-2 mt-12", children: [jsx(Button, { variant: "outline", onClick: () => setCurrentPage(prev => Math.max(1, prev - 1)), disabled: currentPage === 1, children: "Previous" }), Array.from({ length: Math.min(5, totalPages) }, (_, i) => {
|
|
145
|
+
const page = i + 1;
|
|
146
|
+
return (jsx(Button, { variant: currentPage === page ? 'primary' : 'outline', onClick: () => setCurrentPage(page), children: page }, page));
|
|
147
|
+
}), jsx(Button, { variant: "outline", onClick: () => setCurrentPage(prev => Math.min(totalPages, prev + 1)), disabled: currentPage === totalPages, children: "Next" })] }))] })) }) }), jsxs(Modal, { open: showFilters, onOpenChange: setShowFilters, children: [jsx(ModalHeader, { children: jsx(ModalTitle, { children: "Filters" }) }), jsx(ModalContent, { children: jsxs("div", { className: "space-y-6", children: [jsxs("div", { children: [jsx("h4", { className: "font-medium text-gray-900 mb-3", children: "Categories" }), jsx("div", { className: "space-y-2", children: filterOptions.categories.map((category, idx) => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.categories.includes(category), onChange: (e) => {
|
|
148
|
+
const alreadyChecked = filters.categories.includes(category);
|
|
149
|
+
const newCategories = e.target.checked
|
|
150
|
+
? alreadyChecked
|
|
151
|
+
? filters.categories
|
|
152
|
+
: [...filters.categories, category]
|
|
153
|
+
: filters.categories.filter((c) => c !== category);
|
|
154
|
+
handleFilterChange('categories', newCategories);
|
|
155
|
+
} }), jsx("span", { className: "text-sm text-gray-700", children: category })] }, category))) })] }), jsxs("div", { children: [jsx("h4", { className: "font-medium text-gray-900 mb-3", children: "Brands" }), jsx("div", { className: "space-y-2", children: filterOptions.brands.map((brand, idx) => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.brands.includes(brand), onChange: (e) => {
|
|
156
|
+
const alreadyChecked = filters.brands.includes(brand);
|
|
157
|
+
const newBrands = e.target.checked
|
|
158
|
+
? alreadyChecked
|
|
159
|
+
? filters.brands
|
|
160
|
+
: [...filters.brands, brand]
|
|
161
|
+
: filters.brands.filter((b) => b !== brand);
|
|
162
|
+
handleFilterChange('brands', newBrands);
|
|
163
|
+
} }), jsx("span", { className: "text-sm text-gray-700", children: brand })] }, brand))) })] }), jsxs("div", { children: [jsx("h4", { className: "font-medium text-gray-900 mb-3", children: "Vendors" }), jsx("div", { className: "space-y-2", children: filterOptions.vendors.map((vendor, idx) => (jsxs("label", { className: "flex items-center space-x-2", children: [jsx(Checkbox, { checked: filters.vendors.includes(vendor), onChange: (e) => {
|
|
164
|
+
const alreadyChecked = filters.vendors.includes(vendor);
|
|
165
|
+
const newVendors = e.target.checked
|
|
166
|
+
? alreadyChecked
|
|
167
|
+
? filters.vendors
|
|
168
|
+
: [...filters.vendors, vendor]
|
|
169
|
+
: filters.vendors.filter((v) => v !== vendor);
|
|
170
|
+
handleFilterChange('vendors', newVendors);
|
|
171
|
+
} }), jsx("span", { className: "text-sm text-gray-700", children: vendor })] }, vendor))) })] })] }) }), jsxs(ModalFooter, { children: [jsx(Button, { variant: "outline", onClick: handleClearFilters, children: "Clear All" }), jsx(Button, { variant: "primary", onClick: () => setShowFilters(false), children: "Apply Filters" })] })] }), jsx(Modal, { open: !!quickViewProduct, onOpenChange: () => setQuickViewProduct(null), size: "lg", children: quickViewProduct && (jsxs(Fragment, { children: [jsx(ModalHeader, { children: jsx(ModalTitle, { children: quickViewProduct.name }) }), jsx(ModalContent, { children: jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [jsx("div", { className: "aspect-square bg-gray-100 rounded-lg overflow-hidden", children: jsx("img", { src: quickViewProduct.images[0], alt: quickViewProduct.name, className: "w-full h-full object-cover" }) }), jsxs("div", { children: [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: [quickViewProduct.rating, " (", quickViewProduct.reviewCount, " reviews)"] })] }), jsxs("div", { className: "flex items-center space-x-2 mb-4", children: [jsxs("span", { className: "text-2xl font-bold text-gray-900", children: ["$", quickViewProduct.price.toFixed(2)] }), quickViewProduct.originalPrice && (jsxs("span", { className: "text-lg text-gray-500 line-through", children: ["$", quickViewProduct.originalPrice.toFixed(2)] }))] }), jsx("p", { className: "text-gray-600 mb-4", children: quickViewProduct.description }), jsx(Badge, { variant: quickViewProduct.inStock ? 'success' : 'danger', className: "mb-4", children: quickViewProduct.inStock ? 'In Stock' : 'Out of Stock' })] })] }) }), jsxs(ModalFooter, { children: [jsx(Button, { variant: "outline", onClick: () => onProductClick?.(quickViewProduct), children: "View Details" }), jsxs(Button, { variant: "primary", onClick: () => handleAddToCart(quickViewProduct), disabled: !quickViewProduct.inStock, children: [jsx(ShoppingCart, { className: "mr-2 h-4 w-4" }), "Add to Cart"] })] })] })) })] }));
|
|
184
172
|
};
|
|
185
173
|
|
|
186
174
|
export { AllProductsView };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AllProductsView.js","sources":["../../../src/components/Marketplace/AllProductsView.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { Search, Filter, Grid2x2 as Grid, List, Star, Heart, ShoppingCart, Eye, ChevronDown, X } from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { Modal, ModalHeader, ModalTitle, ModalContent, ModalFooter } from '../Modal';\nimport { Checkbox } from '../Checkbox';\nimport { showToast } from '../Toast';\nimport type { Product, FilterOptions, SortOption } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface AllProductsViewProps {\n products?: Product[];\n filters?: FilterOptions;\n onProductClick?: (product: Product) => void;\n onAddToCart?: (product: Product) => void;\n}\n\nconst sortOptions: SortOption[] = [\n { value: 'relevance', label: 'Most Relevant' },\n { value: 'price-low', label: 'Price: Low to High' },\n { value: 'price-high', label: 'Price: High to Low' },\n { value: 'rating', label: 'Highest Rated' },\n { value: 'newest', label: 'Newest First' },\n { value: 'popular', label: 'Most Popular' },\n];\n\nexport const AllProductsView: React.FC<AllProductsViewProps> = ({\n products,\n filters: filtersProp,\n onProductClick,\n onAddToCart,\n}) => {\n const productsData = products ?? sampleProducts;\n const [searchQuery, setSearchQuery] = useState('');\n const [sortBy, setSortBy] = useState('relevance');\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n const [currentPage, setCurrentPage] = useState(1);\n const [showFilters, setShowFilters] = useState(false);\n const [quickViewProduct, setQuickViewProduct] = useState<Product | null>(null);\n const [wishlist, setWishlist] = useState<Set<string>>(new Set());\n\n // Use prop filters if provided, otherwise fallback to internal state\n const [filters, setFilters] = useState<FilterOptions>(\n filtersProp ?? {\n categories: [],\n brands: [],\n priceRange: [0, 1000],\n rating: 0,\n inStock: false,\n vendors: [],\n }\n );\n\n const itemsPerPage = 12;\n\n // Get unique filter options from products\n const filterOptions = useMemo(() => {\n const categories = [...new Set(productsData.map((p: Product) => p.category))];\n const brands = [...new Set(productsData.map((p: Product) => p.brand))];\n const vendors = [...new Set(productsData.map((p: Product) => p.vendor.name))];\n\n return { categories, brands, vendors };\n }, [productsData]);\n\n // Filter and sort products\n const filteredProducts = useMemo(() => {\n let filtered = productsData.filter((product: Product) => {\n // Search query\n if (searchQuery && !product.name.toLowerCase().includes(searchQuery.toLowerCase()) &&\n !product.description.toLowerCase().includes(searchQuery.toLowerCase())) {\n return false;\n }\n\n // Category filter\n if (filters.categories.length > 0 && !filters.categories.includes(product.category)) {\n return false;\n }\n\n // Brand filter\n if (filters.brands.length > 0 && !filters.brands.includes(product.brand)) {\n return false;\n }\n\n // Price range\n if (product.price < filters.priceRange[0] || product.price > filters.priceRange[1]) {\n return false;\n }\n\n // Rating filter\n if (filters.rating > 0 && product.rating < filters.rating) {\n return false;\n }\n\n // In stock filter\n if (filters.inStock && !product.inStock) {\n return false;\n }\n\n // Vendor filter\n if (filters.vendors.length > 0 && !filters.vendors.includes(product.vendor.name)) {\n return false;\n }\n\n return true;\n });\n\n // Sort products\n switch (sortBy) {\n case 'price-low':\n filtered.sort((a: Product, b: Product) => a.price - b.price);\n break;\n case 'price-high':\n filtered.sort((a: Product, b: Product) => b.price - a.price);\n break;\n case 'rating':\n filtered.sort((a: Product, b: Product) => b.rating - a.rating);\n break;\n case 'newest':\n // Assuming newer products have higher IDs\n filtered.sort((a: Product, b: Product) => parseInt(b.id) - parseInt(a.id));\n break;\n case 'popular':\n filtered.sort((a: Product, b: Product) => b.reviewCount - a.reviewCount);\n break;\n default:\n // Keep original order for relevance\n break;\n }\n\n return filtered;\n }, [productsData, searchQuery, filters, sortBy]);\n\n // Paginate products\n const paginatedProducts = useMemo(() => {\n const startIndex = (currentPage - 1) * itemsPerPage;\n return filteredProducts.slice(startIndex, startIndex + itemsPerPage);\n }, [filteredProducts, currentPage]);\n\n const totalPages = Math.ceil(filteredProducts.length / itemsPerPage);\n\n const handleFilterChange = (filterType: keyof FilterOptions, value: any) => {\n setFilters(prev => ({\n ...prev,\n [filterType]: value,\n }));\n setCurrentPage(1); // Reset to first page when filters change\n };\n\n const handleClearFilters = () => {\n setFilters({\n categories: [],\n brands: [],\n priceRange: [0, 1000],\n rating: 0,\n inStock: false,\n vendors: [],\n });\n setSearchQuery('');\n setCurrentPage(1);\n };\n\n const toggleWishlist = (productId: string) => {\n setWishlist(prev => {\n const newWishlist = new Set(prev);\n if (newWishlist.has(productId)) {\n newWishlist.delete(productId);\n showToast.info('Removed from wishlist');\n } else {\n newWishlist.add(productId);\n showToast.success('Added to wishlist');\n }\n return newWishlist;\n });\n };\n\n const handleAddToCart = (product: Product) => {\n onAddToCart?.(product);\n showToast.success(`${product.name} added to cart!`);\n };\n\n const ProductCard: React.FC<{ product: Product }> = ({ product }) => (\n <Card className=\"group hover:shadow-lg transition-all duration-300\">\n <div className=\"relative aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-300\"\n />\n {product.discount && (\n <Badge variant=\"danger\" className=\"absolute top-2 left-2\">\n -{product.discount}%\n </Badge>\n )}\n <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n toggleWishlist(product.id);\n }}\n className=\"bg-white/80 hover:bg-white\"\n >\n <Heart className={`h-4 w-4 ${wishlist.has(product.id) ? 'fill-current text-red-500' : ''}`} />\n </Button>\n </div>\n <div className=\"absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n setQuickViewProduct(product);\n }}\n className=\"bg-white/80 hover:bg-white\"\n >\n <Eye className=\"h-4 w-4\" />\n </Button>\n </div>\n {!product.inStock && (\n <div className=\"absolute inset-0 bg-black/50 flex items-center justify-center\">\n <Badge variant=\"secondary\">Out of Stock</Badge>\n </div>\n )}\n </div>\n <CardContent className=\"p-4\">\n <div className=\"mb-2\">\n <h3 \n className=\"font-medium text-gray-900 line-clamp-2 cursor-pointer hover:text-primary-600\"\n onClick={() => onProductClick?.(product)}\n >\n {product.name}\n </h3>\n <p className=\"text-sm text-gray-600\">{product.brand}</p>\n </div>\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 mb-3\">\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 </div>\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleAddToCart(product);\n }}\n disabled={!product.inStock}\n className=\"w-full\"\n >\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\n Add to Cart\n </Button>\n </CardContent>\n </Card>\n );\n\n return (\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {/* Header */}\n <div className=\"flex flex-col lg:flex-row lg:items-center lg:justify-between mb-8\">\n <div>\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">All Products</h1>\n <p className=\"text-gray-600\">\n Showing {filteredProducts.length} of {productsData.length} products\n </p>\n </div>\n \n {/* Search and Controls */}\n <div className=\"flex items-center space-x-4 mt-4 lg:mt-0\">\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...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-10 w-64\"\n />\n </div>\n \n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value)}\n className=\"border border-gray-300 rounded-lg px-3 py-2 bg-white\"\n >\n {sortOptions.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n <div className=\"flex items-center bg-gray-100 rounded-lg p-1\">\n <Button\n variant={viewMode === 'grid' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setViewMode('grid')}\n >\n <Grid className=\"h-4 w-4\" />\n </Button>\n <Button\n variant={viewMode === 'list' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setViewMode('list')}\n >\n <List className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <Button\n variant=\"outline\"\n onClick={() => setShowFilters(true)}\n className=\"lg:hidden\"\n >\n <Filter className=\"mr-2 h-4 w-4\" />\n Filters\n </Button>\n </div>\n </div>\n\n <div className=\"flex gap-8\">\n {/* Filters Sidebar - Desktop */}\n <div className=\"hidden lg:block w-64 flex-shrink-0\">\n <Card className=\"sticky top-4\">\n <CardContent className=\"p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"font-semibold text-gray-900\">Filters</h3>\n <Button variant=\"ghost\" size=\"sm\" onClick={handleClearFilters}>\n Clear All\n </Button>\n </div>\n\n {/* Categories */}\n <div className=\"mb-6\">\n <h4 className=\"font-medium text-gray-900 mb-3\">Categories</h4>\n <div className=\"space-y-2\">\n {(filterOptions.categories as string[]).map((category, idx) => (\n <label key={category} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.categories.includes(category)}\n onChange={(e) => {\n const newCategories = e.target.checked\n ? [...filters.categories, category]\n : filters.categories.filter((c: string) => c !== category);\n handleFilterChange('categories', newCategories);\n }}\n />\n <span className=\"text-sm text-gray-700\">{category}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Brands */}\n <div className=\"mb-6\">\n <h4 className=\"font-medium text-gray-900 mb-3\">Brands</h4>\n <div className=\"space-y-2\">\n {(filterOptions.brands as string[]).map((brand, idx) => (\n <label key={brand} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.brands.includes(brand)}\n onChange={(e) => {\n const newBrands = e.target.checked\n ? [...filters.brands, brand]\n : filters.brands.filter((b: string) => b !== brand);\n handleFilterChange('brands', newBrands);\n }}\n />\n <span className=\"text-sm text-gray-700\">{brand}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Price Range */}\n <div className=\"mb-6\">\n <h4 className=\"font-medium text-gray-900 mb-3\">Price Range</h4>\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-2\">\n <Input\n type=\"number\"\n placeholder=\"Min\"\n value={filters.priceRange[0]}\n onChange={(e) => handleFilterChange('priceRange', [\n parseInt(e.target.value) || 0,\n filters.priceRange[1]\n ])}\n className=\"w-20\"\n />\n <span>-</span>\n <Input\n type=\"number\"\n placeholder=\"Max\"\n value={filters.priceRange[1]}\n onChange={(e) => handleFilterChange('priceRange', [\n filters.priceRange[0],\n parseInt(e.target.value) || 1000\n ])}\n className=\"w-20\"\n />\n </div>\n </div>\n </div>\n\n {/* Rating */}\n <div className=\"mb-6\">\n <h4 className=\"font-medium text-gray-900 mb-3\">Minimum Rating</h4>\n <div className=\"space-y-2\">\n {[4, 3, 2, 1].map(rating => (\n <label key={rating} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.rating === rating}\n onChange={(e) => {\n handleFilterChange('rating', e.target.checked ? rating : 0);\n }}\n />\n <div className=\"flex items-center space-x-1\">\n {[1, 2, 3, 4, 5].map(star => (\n <Star\n key={star}\n className={`h-4 w-4 ${\n star <= rating ? 'text-yellow-400 fill-current' : 'text-gray-300'\n }`}\n />\n ))}\n <span className=\"text-sm text-gray-700\">& up</span>\n </div>\n </label>\n ))}\n </div>\n </div>\n\n {/* In Stock */}\n <div className=\"mb-6\">\n <label className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.inStock}\n onChange={(e) => handleFilterChange('inStock', e.target.checked)}\n />\n <span className=\"text-sm text-gray-700\">In Stock Only</span>\n </label>\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Products Grid */}\n <div className=\"flex-1\">\n {paginatedProducts.length === 0 ? (\n <div className=\"text-center py-12\">\n <div className=\"text-gray-400 mb-4\">\n <Search className=\"h-16 w-16 mx-auto\" />\n </div>\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No products found</h3>\n <p className=\"text-gray-600 mb-4\">\n Try adjusting your search or filter criteria\n </p>\n <Button variant=\"outline\" onClick={handleClearFilters}>\n Clear Filters\n </Button>\n </div>\n ) : (\n <>\n <div className={`grid gap-6 ${\n viewMode === 'grid' \n ? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4' \n : 'grid-cols-1'\n }`}>\n {paginatedProducts.map((product: Product) => (\n <ProductCard key={product.id} product={product} />\n ))}\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"flex items-center justify-center space-x-2 mt-12\">\n <Button\n variant=\"outline\"\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n Previous\n </Button>\n \n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\n const page = i + 1;\n return (\n <Button\n key={page}\n variant={currentPage === page ? 'primary' : 'outline'}\n onClick={() => setCurrentPage(page)}\n >\n {page}\n </Button>\n );\n })}\n \n <Button\n variant=\"outline\"\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n Next\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {/* Mobile Filters Modal */}\n <Modal open={showFilters} onOpenChange={setShowFilters}>\n <ModalHeader>\n <ModalTitle>Filters</ModalTitle>\n </ModalHeader>\n <ModalContent>\n {/* Same filter content as sidebar but in modal */}\n <div className=\"space-y-6\">\n {/* Categories */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Categories</h4>\n <div className=\"space-y-2\">\n {(filterOptions.categories as string[]).map((category, idx) => (\n <label key={category} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.categories.includes(category)}\n onChange={(e) => {\n const newCategories = e.target.checked\n ? [...filters.categories, category]\n : filters.categories.filter((c: string) => c !== category);\n handleFilterChange('categories', newCategories);\n }}\n />\n <span className=\"text-sm text-gray-700\">{category}</span>\n </label>\n ))}\n </div>\n </div>\n {/* Add other filter sections here */}\n </div>\n </ModalContent>\n <ModalFooter>\n <Button variant=\"outline\" onClick={handleClearFilters}>\n Clear All\n </Button>\n <Button variant=\"primary\" onClick={() => setShowFilters(false)}>\n Apply Filters\n </Button>\n </ModalFooter>\n </Modal>\n\n {/* Quick View Modal */}\n <Modal open={!!quickViewProduct} onOpenChange={() => setQuickViewProduct(null)} size=\"lg\">\n {quickViewProduct && (\n <>\n <ModalHeader>\n <ModalTitle>{quickViewProduct.name}</ModalTitle>\n </ModalHeader>\n <ModalContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div className=\"aspect-square bg-gray-100 rounded-lg overflow-hidden\">\n <img\n src={quickViewProduct.images[0]}\n alt={quickViewProduct.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div>\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 {quickViewProduct.rating} ({quickViewProduct.reviewCount} reviews)\n </span>\n </div>\n <div className=\"flex items-center space-x-2 mb-4\">\n <span className=\"text-2xl font-bold text-gray-900\">\n ${quickViewProduct.price.toFixed(2)}\n </span>\n {quickViewProduct.originalPrice && (\n <span className=\"text-lg text-gray-500 line-through\">\n ${quickViewProduct.originalPrice.toFixed(2)}\n </span>\n )}\n </div>\n <p className=\"text-gray-600 mb-4\">{quickViewProduct.description}</p>\n <Badge variant={quickViewProduct.inStock ? 'success' : 'danger'} className=\"mb-4\">\n {quickViewProduct.inStock ? 'In Stock' : 'Out of Stock'}\n </Badge>\n </div>\n </div>\n </ModalContent>\n <ModalFooter>\n <Button variant=\"outline\" onClick={() => onProductClick?.(quickViewProduct)}>\n View Details\n </Button>\n <Button \n variant=\"primary\" \n onClick={() => handleAddToCart(quickViewProduct)}\n disabled={!quickViewProduct.inStock}\n >\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\n Add to Cart\n </Button>\n </ModalFooter>\n </>\n )}\n </Modal>\n </div>\n );\n};"],"names":["_jsxs","_jsx","Grid","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AllProductsView.js","sources":["../../../src/components/Marketplace/AllProductsView.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { Search, Filter, Grid2x2 as Grid, List, Star, Heart, ShoppingCart, Eye, ChevronDown, X } from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { Modal, ModalHeader, ModalTitle, ModalContent, ModalFooter } from '../Modal';\nimport { Checkbox } from '../Checkbox';\nimport { showToast } from '../Toast';\nimport type { Product, FilterOptions, SortOption } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface AllProductsViewProps {\n products?: Product[];\n filters: FilterOptions;\n onProductClick?: (product: Product) => void;\n onAddToCart?: (product: Product) => void;\n onFiltersChange: (filters: FilterOptions) => void;\n onClearFilters: () => void;\n}\n\nconst sortOptions: SortOption[] = [\n { value: 'relevance', label: 'Most Relevant' },\n { value: 'price-low', label: 'Price: Low to High' },\n { value: 'price-high', label: 'Price: High to Low' },\n { value: 'rating', label: 'Highest Rated' },\n { value: 'newest', label: 'Newest First' },\n { value: 'popular', label: 'Most Popular' },\n];\n\nexport const AllProductsView: React.FC<AllProductsViewProps> = ({\n products,\n filters: filtersProp,\n onProductClick,\n onAddToCart,\n onFiltersChange,\n onClearFilters,\n}) => {\n const productsData = products ?? sampleProducts;\n const [searchQuery, setSearchQuery] = useState('');\n const [sortBy, setSortBy] = useState('relevance');\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n const [currentPage, setCurrentPage] = useState(1);\n const [showFilters, setShowFilters] = useState(false);\n const [quickViewProduct, setQuickViewProduct] = useState<Product | null>(null);\n const [wishlist, setWishlist] = useState<Set<string>>(new Set());\n\n // Use filters and handlers from props only\n const filters = filtersProp;\n\n const itemsPerPage = 12;\n\n // Get unique filter options from products\n const filterOptions = useMemo(() => {\n const categories = [...new Set(productsData.map((p: Product) => p.category))];\n const brands = [...new Set(productsData.map((p: Product) => p.brand))];\n const vendors = [...new Set(productsData.map((p: Product) => p.vendor.name))];\n\n return { categories, brands, vendors };\n }, [productsData]);\n\n // Filter and sort products\n const filteredProducts = useMemo(() => {\n let filtered = productsData.filter((product: Product) => {\n // Search query\n if (searchQuery && !product.name.toLowerCase().includes(searchQuery.toLowerCase()) &&\n !product.description.toLowerCase().includes(searchQuery.toLowerCase())) {\n return false;\n }\n\n // Category filter\n if (filters.categories.length > 0 && !filters.categories.includes(product.category)) {\n return false;\n }\n\n // Brand filter\n if (filters.brands.length > 0 && !filters.brands.includes(product.brand)) {\n return false;\n }\n\n // Price range\n if (product.price < filters.priceRange[0] || product.price > filters.priceRange[1]) {\n return false;\n }\n\n // Rating filter\n if (filters.rating > 0 && product.rating < filters.rating) {\n return false;\n }\n\n // In stock filter\n if (filters.inStock && !product.inStock) {\n return false;\n }\n\n // Vendor filter\n if (filters.vendors.length > 0 && !filters.vendors.includes(product.vendor.name)) {\n return false;\n }\n\n return true;\n });\n\n // Sort products\n switch (sortBy) {\n case 'price-low':\n filtered.sort((a: Product, b: Product) => a.price - b.price);\n break;\n case 'price-high':\n filtered.sort((a: Product, b: Product) => b.price - a.price);\n break;\n case 'rating':\n filtered.sort((a: Product, b: Product) => b.rating - a.rating);\n break;\n case 'newest':\n // Assuming newer products have higher IDs\n filtered.sort((a: Product, b: Product) => parseInt(b.id) - parseInt(a.id));\n break;\n case 'popular':\n filtered.sort((a: Product, b: Product) => b.reviewCount - a.reviewCount);\n break;\n default:\n // Keep original order for relevance\n break;\n }\n\n return filtered;\n }, [productsData, searchQuery, filters, sortBy]);\n\n // Paginate products\n const paginatedProducts = useMemo(() => {\n const startIndex = (currentPage - 1) * itemsPerPage;\n return filteredProducts.slice(startIndex, startIndex + itemsPerPage);\n }, [filteredProducts, currentPage]);\n\n const totalPages = Math.ceil(filteredProducts.length / itemsPerPage);\n\n const handleFilterChange = (filterType: keyof FilterOptions, value: any) => {\n const newFilters = {\n ...filters,\n [filterType]: value,\n };\n onFiltersChange(newFilters);\n setCurrentPage(1); // Reset to first page when filters change\n };\n\n const handleClearFilters = () => {\n onClearFilters();\n setSearchQuery('');\n setCurrentPage(1);\n };\n\n const toggleWishlist = (productId: string) => {\n setWishlist(prev => {\n const newWishlist = new Set(prev);\n if (newWishlist.has(productId)) {\n newWishlist.delete(productId);\n showToast.info('Removed from wishlist');\n } else {\n newWishlist.add(productId);\n showToast.success('Added to wishlist');\n }\n return newWishlist;\n });\n };\n\n const handleAddToCart = (product: Product) => {\n onAddToCart?.(product);\n showToast.success(`${product.name} added to cart!`);\n };\n\n const ProductCard: React.FC<{ product: Product }> = ({ product }) => (\n <Card className=\"group hover:shadow-lg transition-all duration-300\">\n <div className=\"relative aspect-square bg-gray-100 rounded-t-lg overflow-hidden\">\n <img\n src={product.images[0]}\n alt={product.name}\n className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-300\"\n />\n {product.discount && (\n <Badge variant=\"danger\" className=\"absolute top-2 left-2\">\n -{product.discount}%\n </Badge>\n )}\n <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n toggleWishlist(product.id);\n }}\n className=\"bg-white/80 hover:bg-white\"\n >\n <Heart className={`h-4 w-4 ${wishlist.has(product.id) ? 'fill-current text-red-500' : ''}`} />\n </Button>\n </div>\n <div className=\"absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n setQuickViewProduct(product);\n }}\n className=\"bg-white/80 hover:bg-white\"\n >\n <Eye className=\"h-4 w-4\" />\n </Button>\n </div>\n {!product.inStock && (\n <div className=\"absolute inset-0 bg-black/50 flex items-center justify-center\">\n <Badge variant=\"secondary\">Out of Stock</Badge>\n </div>\n )}\n </div>\n <CardContent className=\"p-4\">\n <div className=\"mb-2\">\n <h3 \n className=\"font-medium text-gray-900 line-clamp-2 cursor-pointer hover:text-primary-600\"\n onClick={() => onProductClick?.(product)}\n >\n {product.name}\n </h3>\n <p className=\"text-sm text-gray-600\">{product.brand}</p>\n </div>\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 mb-3\">\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 </div>\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleAddToCart(product);\n }}\n disabled={!product.inStock}\n className=\"w-full\"\n >\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\n Add to Cart\n </Button>\n </CardContent>\n </Card>\n );\n\n return (\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {/* Header */}\n <div className=\"flex flex-col lg:flex-row lg:items-center lg:justify-between mb-8\">\n <div>\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">All Products</h1>\n <p className=\"text-gray-600\">\n Showing {filteredProducts.length} of {productsData.length} products\n </p>\n </div>\n \n {/* Search and Controls */}\n <div className=\"flex items-center space-x-4 mt-4 lg:mt-0\">\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...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-10 w-64\"\n />\n </div>\n \n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value)}\n className=\"border border-gray-300 rounded-lg px-3 py-2 bg-white\"\n >\n {sortOptions.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n <div className=\"flex items-center bg-gray-100 rounded-lg p-1\">\n <Button\n variant={viewMode === 'grid' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setViewMode('grid')}\n >\n <Grid className=\"h-4 w-4\" />\n </Button>\n <Button\n variant={viewMode === 'list' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setViewMode('list')}\n >\n <List className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <Button\n variant=\"outline\"\n onClick={() => setShowFilters(true)}\n className=\"lg:hidden\"\n >\n <Filter className=\"mr-2 h-4 w-4\" />\n Filters\n </Button>\n </div>\n </div>\n\n <div className=\"flex gap-8\">\n\n {/* Products Grid */}\n <div className=\"flex-1\">\n {paginatedProducts.length === 0 ? (\n <div className=\"text-center py-12\">\n <div className=\"text-gray-400 mb-4\">\n <Search className=\"h-16 w-16 mx-auto\" />\n </div>\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No products found</h3>\n <p className=\"text-gray-600 mb-4\">\n Try adjusting your search or filter criteria\n </p>\n <Button variant=\"outline\" onClick={handleClearFilters}>\n Clear Filters\n </Button>\n </div>\n ) : (\n <>\n <div className={`grid gap-6 ${\n viewMode === 'grid' \n ? 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4' \n : 'grid-cols-1'\n }`}>\n {paginatedProducts.map((product: Product) => (\n <ProductCard key={product.id} product={product} />\n ))}\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"flex items-center justify-center space-x-2 mt-12\">\n <Button\n variant=\"outline\"\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n Previous\n </Button>\n \n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\n const page = i + 1;\n return (\n <Button\n key={page}\n variant={currentPage === page ? 'primary' : 'outline'}\n onClick={() => setCurrentPage(page)}\n >\n {page}\n </Button>\n );\n })}\n \n <Button\n variant=\"outline\"\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n Next\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {/* Mobile Filters Modal */}\n <Modal open={showFilters} onOpenChange={setShowFilters}>\n <ModalHeader>\n <ModalTitle>Filters</ModalTitle>\n </ModalHeader>\n <ModalContent>\n {/* Same filter content as sidebar but in modal */}\n <div className=\"space-y-6\">\n {/* Categories */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Categories</h4>\n <div className=\"space-y-2\">\n {(filterOptions.categories as string[]).map((category, idx) => (\n <label key={category} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.categories.includes(category)}\n onChange={(e) => {\n const alreadyChecked = filters.categories.includes(category);\n const newCategories = e.target.checked\n ? alreadyChecked\n ? filters.categories\n : [...filters.categories, category]\n : filters.categories.filter((c: string) => c !== category);\n handleFilterChange('categories', newCategories);\n }}\n />\n <span className=\"text-sm text-gray-700\">{category}</span>\n </label>\n ))}\n </div>\n </div>\n {/* Brands */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Brands</h4>\n <div className=\"space-y-2\">\n {(filterOptions.brands as string[]).map((brand, idx) => (\n <label key={brand} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.brands.includes(brand)}\n onChange={(e) => {\n const alreadyChecked = filters.brands.includes(brand);\n const newBrands = e.target.checked\n ? alreadyChecked\n ? filters.brands\n : [...filters.brands, brand]\n : filters.brands.filter((b: string) => b !== brand);\n handleFilterChange('brands', newBrands);\n }}\n />\n <span className=\"text-sm text-gray-700\">{brand}</span>\n </label>\n ))}\n </div>\n </div>\n {/* Vendors */}\n <div>\n <h4 className=\"font-medium text-gray-900 mb-3\">Vendors</h4>\n <div className=\"space-y-2\">\n {(filterOptions.vendors as string[]).map((vendor, idx) => (\n <label key={vendor} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={filters.vendors.includes(vendor)}\n onChange={(e) => {\n const alreadyChecked = filters.vendors.includes(vendor);\n const newVendors = e.target.checked\n ? alreadyChecked\n ? filters.vendors\n : [...filters.vendors, vendor]\n : filters.vendors.filter((v: string) => v !== vendor);\n handleFilterChange('vendors', newVendors);\n }}\n />\n <span className=\"text-sm text-gray-700\">{vendor}</span>\n </label>\n ))}\n </div>\n </div>\n </div>\n </ModalContent>\n <ModalFooter>\n <Button variant=\"outline\" onClick={handleClearFilters}>\n Clear All\n </Button>\n <Button variant=\"primary\" onClick={() => setShowFilters(false)}>\n Apply Filters\n </Button>\n </ModalFooter>\n </Modal>\n\n {/* Quick View Modal */}\n <Modal open={!!quickViewProduct} onOpenChange={() => setQuickViewProduct(null)} size=\"lg\">\n {quickViewProduct && (\n <>\n <ModalHeader>\n <ModalTitle>{quickViewProduct.name}</ModalTitle>\n </ModalHeader>\n <ModalContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div className=\"aspect-square bg-gray-100 rounded-lg overflow-hidden\">\n <img\n src={quickViewProduct.images[0]}\n alt={quickViewProduct.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div>\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 {quickViewProduct.rating} ({quickViewProduct.reviewCount} reviews)\n </span>\n </div>\n <div className=\"flex items-center space-x-2 mb-4\">\n <span className=\"text-2xl font-bold text-gray-900\">\n ${quickViewProduct.price.toFixed(2)}\n </span>\n {quickViewProduct.originalPrice && (\n <span className=\"text-lg text-gray-500 line-through\">\n ${quickViewProduct.originalPrice.toFixed(2)}\n </span>\n )}\n </div>\n <p className=\"text-gray-600 mb-4\">{quickViewProduct.description}</p>\n <Badge variant={quickViewProduct.inStock ? 'success' : 'danger'} className=\"mb-4\">\n {quickViewProduct.inStock ? 'In Stock' : 'Out of Stock'}\n </Badge>\n </div>\n </div>\n </ModalContent>\n <ModalFooter>\n <Button variant=\"outline\" onClick={() => onProductClick?.(quickViewProduct)}>\n View Details\n </Button>\n <Button \n variant=\"primary\" \n onClick={() => handleAddToCart(quickViewProduct)}\n disabled={!quickViewProduct.inStock}\n >\n <ShoppingCart className=\"mr-2 h-4 w-4\" />\n Add to Cart\n </Button>\n </ModalFooter>\n </>\n )}\n </Modal>\n </div>\n );\n};"],"names":["_jsxs","_jsx","Grid","_Fragment"],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ const sampleCartItems = [
|
|
|
18
18
|
quantity: 2,
|
|
19
19
|
},
|
|
20
20
|
];
|
|
21
|
-
const CheckoutCompact = ({ cartItems = sampleCartItems, onClose, onCheckout, className = '', }) => {
|
|
21
|
+
const CheckoutCompact = ({ cartItems = sampleCartItems, onClose, onCheckout, onViewFullCheckout, className = '', }) => {
|
|
22
22
|
const [isExpanded, setIsExpanded] = useState(false);
|
|
23
23
|
const [paymentMethod, setPaymentMethod] = useState('card');
|
|
24
24
|
const [isProcessing, setIsProcessing] = useState(false);
|
|
@@ -53,13 +53,13 @@ const CheckoutCompact = ({ cartItems = sampleCartItems, onClose, onCheckout, cla
|
|
|
53
53
|
showToast.success('Order placed with saved payment method!');
|
|
54
54
|
setIsProcessing(false);
|
|
55
55
|
};
|
|
56
|
-
return (jsx("div", { className: `w-full max-w-md ${className}`, children: jsxs(Card, { children: [jsx(CardHeader, { className: "pb-3", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs(CardTitle, { className: "flex items-center text-lg", children: [jsx(ShoppingCart, { className: "h-5 w-5 mr-2" }), "Checkout (", cartItems.length, " items)"] }), onClose && (jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, children: jsx(X, { className: "h-4 w-4" }) }))] }) }), jsxs(CardContent, { className: "space-y-4", children: [jsxs("div", { children: [jsxs("button", { onClick: () => setIsExpanded(!isExpanded), className: "flex items-center justify-between w-full p-3 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx("span", { className: "font-medium text-gray-900", children: "Order Summary" }), jsxs(Badge, { variant: "outline", children: ["$", total.toFixed(2)] })] }), isExpanded ? (jsx(ChevronUp, { className: "h-4 w-4 text-gray-600" })) : (jsx(ChevronDown, { className: "h-4 w-4 text-gray-600" }))] }), isExpanded && (jsxs("div", { className: "mt-3 space-y-3", 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-10 h-10 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-xs 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: "pt-3 border-t border-gray-200 space-y-1", children: [jsxs("div", { className: "flex justify-between text-sm", children: [jsx("span", { className: "text-gray-600", children: "Subtotal" }), jsxs("span", { children: ["$", subtotal.toFixed(2)] })] }), jsxs("div", { className: "flex justify-between text-sm", children: [jsx("span", { className: "text-gray-600", children: "Shipping" }), jsx("span", { 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", { children: ["$", tax.toFixed(2)] })] }), jsxs("div", { className: "flex justify-between font-semibold pt-1 border-t border-gray-200", children: [jsx("span", { children: "Total" }), jsxs("span", { children: ["$", total.toFixed(2)] })] })] })] }))] }), jsxs("div", { className: "space-y-3", children: [jsx("h3", { className: "font-medium text-gray-900", children: "Quick Payment" }), jsxs(Button, { variant: "primary", onClick: handleOneClickCheckout, disabled: isProcessing, className: "w-full", children: [jsx(Zap, { className: "mr-2 h-4 w-4" }), isProcessing ? 'Processing...' : 'Buy with 1-Click'] }), jsxs("div", { className: "relative", children: [jsx("div", { className: "absolute inset-0 flex items-center", children: jsx("div", { className: "w-full border-t border-gray-300" }) }), jsx("div", { className: "relative flex justify-center text-sm", children: jsx("span", { className: "px-2 bg-white text-gray-500", children: "or" }) })] }), jsx("div", { className: "space-y-2", children: jsx("div", { className: "flex space-x-2", children: [
|
|
56
|
+
return (jsx("div", { className: `w-full max-w-md ${className}`, children: jsxs(Card, { className: "flex flex-col h-[70vh]", children: [jsx(CardHeader, { className: "pb-3", children: jsxs("div", { className: "flex items-center justify-between", children: [jsxs(CardTitle, { className: "flex items-center text-lg", children: [jsx(ShoppingCart, { className: "h-5 w-5 mr-2" }), "Checkout (", cartItems.length, " items)"] }), onClose && (jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, children: jsx(X, { className: "h-4 w-4" }) }))] }) }), jsxs(CardContent, { className: "space-y-4 flex-1 overflow-y-auto", children: [jsxs("div", { children: [jsxs("button", { onClick: () => setIsExpanded(!isExpanded), className: "flex items-center justify-between w-full p-3 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors", children: [jsxs("div", { className: "flex items-center space-x-2", children: [jsx("span", { className: "font-medium text-gray-900", children: "Order Summary" }), jsxs(Badge, { variant: "outline", children: ["$", total.toFixed(2)] })] }), isExpanded ? (jsx(ChevronUp, { className: "h-4 w-4 text-gray-600" })) : (jsx(ChevronDown, { className: "h-4 w-4 text-gray-600" }))] }), isExpanded && (jsxs("div", { className: "mt-3 space-y-3", 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-10 h-10 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-xs 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: "pt-3 border-t border-gray-200 space-y-1", children: [jsxs("div", { className: "flex justify-between text-sm", children: [jsx("span", { className: "text-gray-600", children: "Subtotal" }), jsxs("span", { children: ["$", subtotal.toFixed(2)] })] }), jsxs("div", { className: "flex justify-between text-sm", children: [jsx("span", { className: "text-gray-600", children: "Shipping" }), jsx("span", { 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", { children: ["$", tax.toFixed(2)] })] }), jsxs("div", { className: "flex justify-between font-semibold pt-1 border-t border-gray-200", children: [jsx("span", { children: "Total" }), jsxs("span", { children: ["$", total.toFixed(2)] })] })] })] }))] }), jsxs("div", { className: "space-y-3", children: [jsx("h3", { className: "font-medium text-gray-900", children: "Quick Payment" }), jsxs(Button, { variant: "primary", onClick: handleOneClickCheckout, disabled: isProcessing, className: "w-full", children: [jsx(Zap, { className: "mr-2 h-4 w-4" }), isProcessing ? 'Processing...' : 'Buy with 1-Click'] }), jsxs("div", { className: "relative", children: [jsx("div", { className: "absolute inset-0 flex items-center", children: jsx("div", { className: "w-full border-t border-gray-300" }) }), jsx("div", { className: "relative flex justify-center text-sm", children: jsx("span", { className: "px-2 bg-white text-gray-500", children: "or" }) })] }), jsx("div", { className: "space-y-2", children: jsx("div", { className: "flex space-x-2", children: [
|
|
57
57
|
{ id: 'card', name: 'Card', icon: CreditCard },
|
|
58
58
|
{ id: 'paypal', name: 'PayPal', icon: Lock },
|
|
59
59
|
{ id: 'apple_pay', name: 'Apple Pay', icon: Zap },
|
|
60
60
|
].map((method) => (jsxs("button", { onClick: () => setPaymentMethod(method.id), className: `flex-1 flex items-center justify-center p-2 border rounded-lg text-sm transition-colors ${paymentMethod === method.id
|
|
61
61
|
? 'border-primary-500 bg-primary-50 text-primary-700'
|
|
62
|
-
: 'border-gray-300 hover:border-gray-400'}`, children: [jsx(method.icon, { className: "h-4 w-4 mr-1" }), method.name] }, method.id))) }) }), jsxs("div", { className: "space-y-3", children: [jsx(Input, { type: "email", placeholder: "Email address", value: formData.email, onChange: (e) => handleInputChange('email', e.target.value), required: true }), paymentMethod === 'card' && (jsxs(Fragment, { children: [jsx(Input, { placeholder: "Card number", value: formData.cardNumber, onChange: (e) => handleInputChange('cardNumber', e.target.value), required: true }), jsxs("div", { className: "grid grid-cols-2 gap-2", children: [jsx(Input, { placeholder: "MM/YY", value: formData.expiryDate, onChange: (e) => handleInputChange('expiryDate', e.target.value), required: true }), jsx(Input, { placeholder: "CVV", value: formData.cvv, onChange: (e) => handleInputChange('cvv', e.target.value), required: true })] }), jsx(Input, { placeholder: "Cardholder name", value: formData.name, onChange: (e) => handleInputChange('name', e.target.value), required: true })] }))] }), jsx(Button, { variant: "secondary", onClick: handleQuickCheckout, disabled: isProcessing, className: "w-full", children: isProcessing ? 'Processing...' : `Complete Order - $${total.toFixed(2)}` })] }), jsxs("div", { className: "flex items-center justify-center text-xs text-gray-500 pt-2", children: [jsx(Lock, { className: "h-3 w-3 mr-1" }), "Secure 256-bit SSL encryption"] }), subtotal < 100 && (jsxs("div", { className: "text-center text-sm text-gray-600 bg-blue-50 p-2 rounded-lg", children: ["Add $", (100 - subtotal).toFixed(2), " more for free shipping!"] }))] })] }) }));
|
|
62
|
+
: 'border-gray-300 hover:border-gray-400'}`, children: [jsx(method.icon, { className: "h-4 w-4 mr-1" }), method.name] }, method.id))) }) }), jsxs("div", { className: "space-y-3", children: [jsx(Input, { type: "email", placeholder: "Email address", value: formData.email, onChange: (e) => handleInputChange('email', e.target.value), required: true }), paymentMethod === 'card' && (jsxs(Fragment, { children: [jsx(Input, { placeholder: "Card number", value: formData.cardNumber, onChange: (e) => handleInputChange('cardNumber', e.target.value), required: true }), jsxs("div", { className: "grid grid-cols-2 gap-2", children: [jsx(Input, { placeholder: "MM/YY", value: formData.expiryDate, onChange: (e) => handleInputChange('expiryDate', e.target.value), required: true }), jsx(Input, { placeholder: "CVV", value: formData.cvv, onChange: (e) => handleInputChange('cvv', e.target.value), required: true })] }), jsx(Input, { placeholder: "Cardholder name", value: formData.name, onChange: (e) => handleInputChange('name', e.target.value), required: true })] }))] }), jsx(Button, { variant: "secondary", onClick: handleQuickCheckout, disabled: isProcessing, className: "w-full", children: isProcessing ? 'Processing...' : `Complete Order - $${total.toFixed(2)}` })] }), jsxs("div", { className: "flex items-center justify-center text-xs text-gray-500 pt-2", children: [jsx(Lock, { className: "h-3 w-3 mr-1" }), "Secure 256-bit SSL encryption"] }), subtotal < 100 && (jsxs("div", { className: "text-center text-sm text-gray-600 bg-blue-50 p-2 rounded-lg", children: ["Add $", (100 - subtotal).toFixed(2), " more for free shipping!"] }))] }), onViewFullCheckout && (jsx("div", { className: "p-4 pt-2 border-t border-gray-200 bg-white", children: jsx(Button, { variant: "primary", size: "md", className: "w-full", onClick: onViewFullCheckout, type: "button", children: "View Full Checkout" }) }))] }) }));
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
export { CheckoutCompact };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckoutCompact.js","sources":["../../../src/components/Marketplace/CheckoutCompact.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { \n CreditCard, \n ChevronDown, \n ChevronUp, \n Lock, \n Zap,\n ShoppingCart,\n X\n} from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { showToast } from '../Toast';\nimport type { CartItem, PaymentMethod } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface CheckoutCompactProps {\n cartItems?: CartItem[];\n onClose?: () => void;\n onCheckout?: (items: CartItem[]) => void;\n className?: string;\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 CheckoutCompact: React.FC<CheckoutCompactProps> = ({\n cartItems = sampleCartItems,\n onClose,\n onCheckout,\n className = '',\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [paymentMethod, setPaymentMethod] = useState<'card' | 'paypal' | 'apple_pay'>('card');\n const [isProcessing, setIsProcessing] = useState(false);\n const [formData, setFormData] = useState({\n email: '',\n cardNumber: '',\n expiryDate: '',\n cvv: '',\n name: '',\n });\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;\n const total = subtotal + shipping + tax;\n\n const handleInputChange = (field: string, value: string) => {\n setFormData(prev => ({ ...prev, [field]: value }));\n };\n\n const handleQuickCheckout = async () => {\n setIsProcessing(true);\n \n // Simulate processing\n await new Promise(resolve => setTimeout(resolve, 1500));\n \n onCheckout?.(cartItems);\n showToast.success('Order placed successfully!');\n setIsProcessing(false);\n };\n\n const handleOneClickCheckout = async () => {\n setIsProcessing(true);\n \n // Simulate one-click processing\n await new Promise(resolve => setTimeout(resolve, 1000));\n \n onCheckout?.(cartItems);\n showToast.success('Order placed with saved payment method!');\n setIsProcessing(false);\n };\n\n return (\n <div className={`w-full max-w-md ${className}`}>\n <Card>\n {/* Header */}\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"flex items-center text-lg\">\n <ShoppingCart className=\"h-5 w-5 mr-2\" />\n Checkout ({cartItems.length} items)\n </CardTitle>\n {onClose && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose}>\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </CardHeader>\n\n <CardContent className=\"space-y-4\">\n {/* Order Summary Toggle */}\n <div>\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-between w-full p-3 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors\"\n >\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-medium text-gray-900\">Order Summary</span>\n <Badge variant=\"outline\">${total.toFixed(2)}</Badge>\n </div>\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-gray-600\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-gray-600\" />\n )}\n </button>\n\n {/* Expanded Order Details */}\n {isExpanded && (\n <div className=\"mt-3 space-y-3\">\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-10 h-10 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-xs 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 \n <div className=\"pt-3 border-t border-gray-200 space-y-1\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span>${subtotal.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span>{shipping === 0 ? 'Free' : `$${shipping.toFixed(2)}`}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span>${tax.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between font-semibold pt-1 border-t border-gray-200\">\n <span>Total</span>\n <span>${total.toFixed(2)}</span>\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Quick Payment Options */}\n <div className=\"space-y-3\">\n <h3 className=\"font-medium text-gray-900\">Quick Payment</h3>\n \n {/* One-Click Checkout */}\n <Button\n variant=\"primary\"\n onClick={handleOneClickCheckout}\n disabled={isProcessing}\n className=\"w-full\"\n >\n <Zap className=\"mr-2 h-4 w-4\" />\n {isProcessing ? 'Processing...' : 'Buy with 1-Click'}\n </Button>\n\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-gray-300\" />\n </div>\n <div className=\"relative flex justify-center text-sm\">\n <span className=\"px-2 bg-white text-gray-500\">or</span>\n </div>\n </div>\n\n {/* Payment Method Selection */}\n <div className=\"space-y-2\">\n <div className=\"flex space-x-2\">\n {[\n { id: 'card', name: 'Card', icon: CreditCard },\n { id: 'paypal', name: 'PayPal', icon: Lock },\n { id: 'apple_pay', name: 'Apple Pay', icon: Zap },\n ].map((method) => (\n <button\n key={method.id}\n onClick={() => setPaymentMethod(method.id as any)}\n className={`flex-1 flex items-center justify-center p-2 border rounded-lg text-sm transition-colors ${\n paymentMethod === method.id\n ? 'border-primary-500 bg-primary-50 text-primary-700'\n : 'border-gray-300 hover:border-gray-400'\n }`}\n >\n <method.icon className=\"h-4 w-4 mr-1\" />\n {method.name}\n </button>\n ))}\n </div>\n </div>\n\n {/* Essential Form Fields */}\n <div className=\"space-y-3\">\n <Input\n type=\"email\"\n placeholder=\"Email address\"\n value={formData.email}\n onChange={(e) => handleInputChange('email', e.target.value)}\n required\n />\n\n {paymentMethod === 'card' && (\n <>\n <Input\n placeholder=\"Card number\"\n value={formData.cardNumber}\n onChange={(e) => handleInputChange('cardNumber', e.target.value)}\n required\n />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input\n placeholder=\"MM/YY\"\n value={formData.expiryDate}\n onChange={(e) => handleInputChange('expiryDate', e.target.value)}\n required\n />\n <Input\n placeholder=\"CVV\"\n value={formData.cvv}\n onChange={(e) => handleInputChange('cvv', e.target.value)}\n required\n />\n </div>\n <Input\n placeholder=\"Cardholder name\"\n value={formData.name}\n onChange={(e) => handleInputChange('name', e.target.value)}\n required\n />\n </>\n )}\n </div>\n\n {/* Checkout Button */}\n <Button\n variant=\"secondary\"\n onClick={handleQuickCheckout}\n disabled={isProcessing}\n className=\"w-full\"\n >\n {isProcessing ? 'Processing...' : `Complete Order - $${total.toFixed(2)}`}\n </Button>\n </div>\n\n {/* Security Notice */}\n <div className=\"flex items-center justify-center text-xs text-gray-500 pt-2\">\n <Lock className=\"h-3 w-3 mr-1\" />\n Secure 256-bit SSL encryption\n </div>\n\n {/* Free Shipping Notice */}\n {subtotal < 100 && (\n <div className=\"text-center text-sm text-gray-600 bg-blue-50 p-2 rounded-lg\">\n Add ${(100 - subtotal).toFixed(2)} more for free shipping!\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n );\n};"],"names":["_jsx","_jsxs","_Fragment"],"mappings":";;;;;;;;;;AAyBA,MAAM,eAAe,GAAe;AAClC,IAAA;AACE,QAAA,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;AAC1B,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA;AACE,QAAA,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;AAC1B,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;CACF;AAEM,MAAM,eAAe,GAAmC,CAAC,EAC9D,SAAS,GAAG,eAAe,EAC3B,OAAO,EACP,UAAU,EACV,SAAS,GAAG,EAAE,GACf,KAAI;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACnD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAkC,MAAM,CAAC;IAC3F,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACvD,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC;AACvC,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,IAAI,EAAE,EAAE;AACT,KAAA,CAAC;;AAGF,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/F,IAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AAC1C,IAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI;AAC3B,IAAA,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,GAAG;AAEvC,IAAA,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,KAAa,KAAI;AACzD,QAAA,WAAW,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;AACpD,IAAA,CAAC;AAED,IAAA,MAAM,mBAAmB,GAAG,YAAW;QACrC,eAAe,CAAC,IAAI,CAAC;;AAGrB,QAAA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAEvD,QAAA,UAAU,GAAG,SAAS,CAAC;AACvB,QAAA,SAAS,CAAC,OAAO,CAAC,4BAA4B,CAAC;QAC/C,eAAe,CAAC,KAAK,CAAC;AACxB,IAAA,CAAC;AAED,IAAA,MAAM,sBAAsB,GAAG,YAAW;QACxC,eAAe,CAAC,IAAI,CAAC;;AAGrB,QAAA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAEvD,QAAA,UAAU,GAAG,SAAS,CAAC;AACvB,QAAA,SAAS,CAAC,OAAO,CAAC,yCAAyC,CAAC;QAC5D,eAAe,CAAC,KAAK,CAAC;AACxB,IAAA,CAAC;IAED,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAE,EAAA,QAAA,EAC5CC,IAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAAA,CAEHD,GAAA,CAAC,UAAU,EAAA,EAAC,SAAS,EAAC,MAAM,EAAA,QAAA,EAC1BC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,IAAA,CAAC,SAAS,EAAA,EAAC,SAAS,EAAC,2BAA2B,EAAA,QAAA,EAAA,CAC9CD,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,YAAA,EAC9B,SAAS,CAAC,MAAM,EAAA,SAAA,CAAA,EAAA,CACjB,EACX,OAAO,KACNA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,OAAO,EAAA,QAAA,EAChDA,IAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GAClB,CACV,CAAA,EAAA,CACG,EAAA,CACK,EAEbC,IAAA,CAAC,WAAW,IAAC,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CAEhCA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEA,IAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,aAAa,CAAC,CAAC,UAAU,CAAC,EACzC,SAAS,EAAC,wGAAwG,aAElHA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,2BAA2B,EAAA,QAAA,EAAA,eAAA,EAAA,CAAqB,EAChEC,IAAA,CAAC,KAAK,EAAA,EAAC,OAAO,EAAC,SAAS,EAAA,QAAA,EAAA,CAAA,GAAA,EAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAS,CAAA,EAAA,CAChD,EACL,UAAU,IACTD,GAAA,CAAC,SAAS,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,KAE/CA,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,uBAAuB,EAAA,CAAG,CAClD,CAAA,EAAA,CACM,EAGR,UAAU,KACTC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC5B,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,MAClBA,IAAA,CAAA,KAAA,EAAA,EAA2B,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAChED,aACE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAC3B,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EACtB,SAAS,EAAC,gCAAgC,EAAA,CAC1C,EACFC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC7BD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4CAA4C,EAAA,QAAA,EACtD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAA,CAChB,EACJC,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAAA,OAAA,EAAO,IAAI,CAAC,QAAQ,IAAK,CAAA,EAAA,CACzD,EACNA,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,mCAAmC,kBAC5C,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAC/C,CAAA,EAAA,EAdI,IAAI,CAAC,OAAO,CAAC,EAAE,CAenB,CACP,CAAC,EAEFA,cAAK,SAAS,EAAC,yCAAyC,EAAA,QAAA,EAAA,CACtDA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAAA,CAC3CD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,eAAe,yBAAgB,EAC/CC,IAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAQ,CAAA,EAAA,CAC/B,EACNA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAAA,CAC3CD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,eAAe,yBAAgB,EAC/CA,GAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,QAAQ,KAAK,CAAC,GAAG,MAAM,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAE,GAAQ,CAAA,EAAA,CAC9D,EACNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,aAC3CD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,KAAA,EAAA,CAAW,EAC1CC,IAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAQ,IAC1B,EACNA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/ED,kCAAkB,EAClBC,IAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAQ,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAQ,CAAA,EAAA,CAC5B,CAAA,EAAA,CACF,CAAA,EAAA,CACF,CACP,IACG,EAGNA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBD,YAAI,SAAS,EAAC,2BAA2B,EAAA,QAAA,EAAA,eAAA,EAAA,CAAmB,EAG5DC,IAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAC,QAAQ,EAAA,QAAA,EAAA,CAElBD,GAAA,CAAC,GAAG,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAC/B,YAAY,GAAG,eAAe,GAAG,kBAAkB,IAC7C,EAETC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CACvBD,aAAK,SAAS,EAAC,oCAAoC,EAAA,QAAA,EACjDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,CAAG,EAAA,CAC/C,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sCAAsC,EAAA,QAAA,EACnDA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,6BAA6B,mBAAU,EAAA,CACnD,CAAA,EAAA,CACF,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACxBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAC5B;4CACC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;4CAC9C,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;4CAC5C,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE;AAClD,yCAAA,CAAC,GAAG,CAAC,CAAC,MAAM,MACXC,IAAA,CAAA,QAAA,EAAA,EAEE,OAAO,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,EAAS,CAAC,EACjD,SAAS,EAAE,CAAA,wFAAA,EACT,aAAa,KAAK,MAAM,CAAC;AACvB,kDAAE;AACF,kDAAE,uCACN,CAAA,CAAE,EAAA,QAAA,EAAA,CAEFD,IAAC,MAAM,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EACvC,MAAM,CAAC,IAAI,CAAA,EAAA,EATP,MAAM,CAAC,EAAE,CAUP,CACV,CAAC,EAAA,CACE,EAAA,CACF,EAGNC,cAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBD,IAAC,KAAK,EAAA,EACJ,IAAI,EAAC,OAAO,EACZ,WAAW,EAAC,eAAe,EAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,EACrB,QAAQ,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC3D,QAAQ,EAAA,IAAA,EAAA,CACR,EAED,aAAa,KAAK,MAAM,KACvBC,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACEF,GAAA,CAAC,KAAK,EAAA,EACJ,WAAW,EAAC,aAAa,EACzB,KAAK,EAAE,QAAQ,CAAC,UAAU,EAC1B,QAAQ,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAChE,QAAQ,SACR,EACFC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wBAAwB,EAAA,QAAA,EAAA,CACrCD,GAAA,CAAC,KAAK,IACJ,WAAW,EAAC,OAAO,EACnB,KAAK,EAAE,QAAQ,CAAC,UAAU,EAC1B,QAAQ,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAChE,QAAQ,EAAA,IAAA,EAAA,CACR,EACFA,GAAA,CAAC,KAAK,EAAA,EACJ,WAAW,EAAC,KAAK,EACjB,KAAK,EAAE,QAAQ,CAAC,GAAG,EACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzD,QAAQ,EAAA,IAAA,EAAA,CACR,CAAA,EAAA,CACE,EACNA,IAAC,KAAK,EAAA,EACJ,WAAW,EAAC,iBAAiB,EAC7B,KAAK,EAAE,QAAQ,CAAC,IAAI,EACpB,QAAQ,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1D,QAAQ,EAAA,IAAA,EAAA,CACR,IACD,CACJ,CAAA,EAAA,CACG,EAGNA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAC,QAAQ,EAAA,QAAA,EAEjB,YAAY,GAAG,eAAe,GAAG,CAAA,kBAAA,EAAqB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAA,CAClE,CAAA,EAAA,CACL,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAAA,CAC1ED,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,+BAAA,CAAA,EAAA,CAE7B,EAGL,QAAQ,GAAG,GAAG,KACbC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAAA,CAAA,OAAA,EACpE,CAAC,GAAG,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,gCAC7B,CACP,CAAA,EAAA,CACW,CAAA,EAAA,CACT,EAAA,CACH;AAEV;;;;"}
|
|
1
|
+
{"version":3,"file":"CheckoutCompact.js","sources":["../../../src/components/Marketplace/CheckoutCompact.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { \n CreditCard, \n ChevronDown, \n ChevronUp, \n Lock, \n Zap,\n ShoppingCart,\n X\n} from 'lucide-react';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Card, CardHeader, CardTitle, CardContent } from '../Card';\nimport { Badge } from '../Badge';\nimport { showToast } from '../Toast';\nimport type { CartItem, PaymentMethod } from './types';\nimport { sampleProducts } from './data/sampleData';\n\ninterface CheckoutCompactProps {\n cartItems?: CartItem[];\n onClose?: () => void;\n onCheckout?: (items: CartItem[]) => void;\n className?: string;\n onViewFullCheckout?: () => 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 CheckoutCompact: React.FC<CheckoutCompactProps> = ({\n cartItems = sampleCartItems,\n onClose,\n onCheckout,\n onViewFullCheckout,\n className = '',\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [paymentMethod, setPaymentMethod] = useState<'card' | 'paypal' | 'apple_pay'>('card');\n const [isProcessing, setIsProcessing] = useState(false);\n const [formData, setFormData] = useState({\n email: '',\n cardNumber: '',\n expiryDate: '',\n cvv: '',\n name: '',\n });\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;\n const total = subtotal + shipping + tax;\n\n const handleInputChange = (field: string, value: string) => {\n setFormData(prev => ({ ...prev, [field]: value }));\n };\n\n const handleQuickCheckout = async () => {\n setIsProcessing(true);\n \n // Simulate processing\n await new Promise(resolve => setTimeout(resolve, 1500));\n \n onCheckout?.(cartItems);\n showToast.success('Order placed successfully!');\n setIsProcessing(false);\n };\n\n const handleOneClickCheckout = async () => {\n setIsProcessing(true);\n \n // Simulate one-click processing\n await new Promise(resolve => setTimeout(resolve, 1000));\n \n onCheckout?.(cartItems);\n showToast.success('Order placed with saved payment method!');\n setIsProcessing(false);\n };\n\n return (\n <div className={`w-full max-w-md ${className}`}>\n <Card className=\"flex flex-col h-[70vh]\">\n {/* Header */}\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"flex items-center text-lg\">\n <ShoppingCart className=\"h-5 w-5 mr-2\" />\n Checkout ({cartItems.length} items)\n </CardTitle>\n {onClose && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose}>\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </CardHeader>\n\n {/* Scrollable Content */}\n <CardContent className=\"space-y-4 flex-1 overflow-y-auto\">\n {/* Order Summary Toggle */}\n <div>\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-between w-full p-3 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors\"\n >\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-medium text-gray-900\">Order Summary</span>\n <Badge variant=\"outline\">${total.toFixed(2)}</Badge>\n </div>\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-gray-600\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-gray-600\" />\n )}\n </button>\n\n {/* Expanded Order Details */}\n {isExpanded && (\n <div className=\"mt-3 space-y-3\">\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-10 h-10 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-xs 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 \n <div className=\"pt-3 border-t border-gray-200 space-y-1\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span>${subtotal.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span>{shipping === 0 ? 'Free' : `$${shipping.toFixed(2)}`}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span>${tax.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between font-semibold pt-1 border-t border-gray-200\">\n <span>Total</span>\n <span>${total.toFixed(2)}</span>\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Quick Payment Options */}\n <div className=\"space-y-3\">\n <h3 className=\"font-medium text-gray-900\">Quick Payment</h3>\n \n {/* One-Click Checkout */}\n <Button\n variant=\"primary\"\n onClick={handleOneClickCheckout}\n disabled={isProcessing}\n className=\"w-full\"\n >\n <Zap className=\"mr-2 h-4 w-4\" />\n {isProcessing ? 'Processing...' : 'Buy with 1-Click'}\n </Button>\n\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-gray-300\" />\n </div>\n <div className=\"relative flex justify-center text-sm\">\n <span className=\"px-2 bg-white text-gray-500\">or</span>\n </div>\n </div>\n\n {/* Payment Method Selection */}\n <div className=\"space-y-2\">\n <div className=\"flex space-x-2\">\n {[\n { id: 'card', name: 'Card', icon: CreditCard },\n { id: 'paypal', name: 'PayPal', icon: Lock },\n { id: 'apple_pay', name: 'Apple Pay', icon: Zap },\n ].map((method) => (\n <button\n key={method.id}\n onClick={() => setPaymentMethod(method.id as any)}\n className={`flex-1 flex items-center justify-center p-2 border rounded-lg text-sm transition-colors ${\n paymentMethod === method.id\n ? 'border-primary-500 bg-primary-50 text-primary-700'\n : 'border-gray-300 hover:border-gray-400'\n }`}\n >\n <method.icon className=\"h-4 w-4 mr-1\" />\n {method.name}\n </button>\n ))}\n </div>\n </div>\n\n {/* Essential Form Fields */}\n <div className=\"space-y-3\">\n <Input\n type=\"email\"\n placeholder=\"Email address\"\n value={formData.email}\n onChange={(e) => handleInputChange('email', e.target.value)}\n required\n />\n\n {paymentMethod === 'card' && (\n <>\n <Input\n placeholder=\"Card number\"\n value={formData.cardNumber}\n onChange={(e) => handleInputChange('cardNumber', e.target.value)}\n required\n />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input\n placeholder=\"MM/YY\"\n value={formData.expiryDate}\n onChange={(e) => handleInputChange('expiryDate', e.target.value)}\n required\n />\n <Input\n placeholder=\"CVV\"\n value={formData.cvv}\n onChange={(e) => handleInputChange('cvv', e.target.value)}\n required\n />\n </div>\n <Input\n placeholder=\"Cardholder name\"\n value={formData.name}\n onChange={(e) => handleInputChange('name', e.target.value)}\n required\n />\n </>\n )}\n </div>\n\n {/* Checkout Button */}\n <Button\n variant=\"secondary\"\n onClick={handleQuickCheckout}\n disabled={isProcessing}\n className=\"w-full\"\n >\n {isProcessing ? 'Processing...' : `Complete Order - $${total.toFixed(2)}`}\n </Button>\n </div>\n\n {/* Security Notice */}\n <div className=\"flex items-center justify-center text-xs text-gray-500 pt-2\">\n <Lock className=\"h-3 w-3 mr-1\" />\n Secure 256-bit SSL encryption\n </div>\n\n {/* Free Shipping Notice */}\n {subtotal < 100 && (\n <div className=\"text-center text-sm text-gray-600 bg-blue-50 p-2 rounded-lg\">\n Add ${(100 - subtotal).toFixed(2)} more for free shipping!\n </div>\n )}\n </CardContent>\n {/* Fixed Button Area */}\n {onViewFullCheckout && (\n <div className=\"p-4 pt-2 border-t border-gray-200 bg-white\">\n <Button\n variant=\"primary\"\n size=\"md\"\n className=\"w-full\"\n onClick={onViewFullCheckout}\n type=\"button\"\n >\n View Full Checkout\n </Button>\n </div>\n )}\n </Card>\n </div>\n );\n};"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
@@ -116,7 +116,7 @@ const CheckoutComponent = ({ cartItems = sampleCartItems, onOrderComplete, }) =>
|
|
|
116
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
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
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:
|
|
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: jsxs(Card, { className: "flex flex-col h-[80vh]", children: [jsxs(CardContent, { className: "p-8 flex-1 overflow-y-auto", children: [currentStep === 1 && renderShippingStep(), currentStep === 2 && renderPaymentStep(), currentStep === 3 && renderReviewStep()] }), jsxs("div", { className: "flex justify-between p-8 pt-6 border-t border-gray-200 bg-white", 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
120
|
};
|
|
121
121
|
|
|
122
122
|
export { CheckoutComponent };
|