Merge version_3 into main #6
@@ -11,8 +11,8 @@ import SocialProofOne from "@/components/sections/socialProof/SocialProofOne";
|
||||
import FaqSplitText from "@/components/sections/faq/FaqSplitText";
|
||||
import ContactSplit from "@/components/sections/contact/ContactSplit";
|
||||
import FooterCard from "@/components/sections/footer/FooterCard";
|
||||
import { Zap, Package, Star, Shield, Headphones, CreditCard, Check, Award, Sparkles, Heart, Trophy, Mail, Facebook, Instagram, Linkedin, Twitter, ShoppingCart } from "lucide-react";
|
||||
import { useState, useEffect } from "react";
|
||||
import { Zap, Package, Star, Shield, Headphones, CreditCard, Check, Award, Sparkles, Heart, Trophy, Mail, Facebook, Instagram, Linkedin, Twitter } from "lucide-react";
|
||||
import { useState, useEffect, useCallback } from "react";
|
||||
|
||||
interface CartItem {
|
||||
id: string;
|
||||
@@ -34,7 +34,7 @@ export default function LandingPage() {
|
||||
const [showCart, setShowCart] = useState(false);
|
||||
const [productCategories, setProductCategories] = useState<ProductCategory[]>([]);
|
||||
const [selectedCategoryId, setSelectedCategoryId] = useState<string | null>(null);
|
||||
const [isLoadingCategories, setIsLoadingCategories] = useState(true);
|
||||
const [isLoadingCategories, setIsLoadingCategories] = useState(false);
|
||||
|
||||
// All 60 products organized by category
|
||||
const allProducts = [
|
||||
@@ -110,8 +110,6 @@ export default function LandingPage() {
|
||||
|
||||
// Initialize categories on mount
|
||||
useEffect(() => {
|
||||
setIsLoadingCategories(true);
|
||||
// Simulate category loading delay
|
||||
const timer = setTimeout(() => {
|
||||
const categories = [
|
||||
{
|
||||
@@ -140,25 +138,25 @@ export default function LandingPage() {
|
||||
}
|
||||
];
|
||||
setProductCategories(categories);
|
||||
setIsLoadingCategories(false);
|
||||
// Set first category as default
|
||||
setSelectedCategoryId(categories[0].id);
|
||||
}, 500);
|
||||
return () => clearTimeout(timer);
|
||||
}, []);
|
||||
|
||||
const addToCart = (product: any) => {
|
||||
const existingItem = cart.find(item => item.id === product.id);
|
||||
if (existingItem) {
|
||||
setCart(cart.map(item =>
|
||||
item.id === product.id
|
||||
? { ...item, quantity: item.quantity + 1 }
|
||||
: item
|
||||
));
|
||||
} else {
|
||||
setCart([...cart, { ...product, quantity: 1 }]);
|
||||
}
|
||||
};
|
||||
const addToCart = useCallback((product: any) => {
|
||||
setCart(prevCart => {
|
||||
const existingItem = prevCart.find(item => item.id === product.id);
|
||||
if (existingItem) {
|
||||
return prevCart.map(item =>
|
||||
item.id === product.id
|
||||
? { ...item, quantity: item.quantity + 1 }
|
||||
: item
|
||||
);
|
||||
} else {
|
||||
return [...prevCart, { ...product, quantity: 1 }];
|
||||
}
|
||||
});
|
||||
}, []);
|
||||
|
||||
const removeFromCart = (id: string) => {
|
||||
setCart(cart.filter(item => item.id !== id));
|
||||
@@ -276,7 +274,7 @@ export default function LandingPage() {
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<div className="w-full py-16 md:py-20 px-4">
|
||||
{isLoadingCategories ? (
|
||||
{!productCategories.length ? (
|
||||
<div className="flex flex-col items-center justify-center min-h-96">
|
||||
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-current mb-4"></div>
|
||||
<p className="text-lg">Загрузка категорий товаров...</p>
|
||||
|
||||
Reference in New Issue
Block a user