/** * @license * SPDX-License-Identifier: Apache-2.0 */ import { useState, useEffect, lazy, Suspense } from "react"; import Header from "./components/Header"; import Hero from "./components/Hero"; import Footer from "./components/Footer"; import { Toaster } from "sonner"; import { Product } from "./data/products"; import { useCartStore } from "./store/cartStore"; import { usePetStore } from "./store/usePetStore"; import { NetworkBanner } from './components/NetworkBanner'; import { ErrorBoundary } from './components/ErrorBoundary'; import { NotFoundPage } from './components/ErrorPages'; import { toast } from "sonner"; import labImage from "./assets/images/regenerated_image_1779109861747.png"; // Lazy Loaded Components const ArchivePage = lazy(() => import("./components/ArchivePage")); const ProductPage = lazy(() => import("./components/ProductPage")); const PetProfile = lazy(() => import("./components/PetProfile")); const UserDashboard = lazy(() => import("./components/UserDashboard")); const SearchResultsPage = lazy(() => import("./components/SearchResultsPage")); const IngredientWiki = lazy(() => import("./components/IngredientWiki")); const BlogPage = lazy(() => import("./components/BlogPage")); const VideosPage = lazy(() => import("./components/VideosPage")); const CheckoutPage = lazy(() => import("./components/CheckoutPage")); const OrderSuccess = lazy(() => import("./components/OrderSuccess")); const OrderTracking = lazy(() => import("./components/OrderTracking")); const SmartAdvisor = lazy(() => import("./components/SmartAdvisor")); const LoginModal = lazy(() => import("./components/LoginModal")); const CartDrawer = lazy(() => import("./components/CartDrawer")); const B2BPortal = lazy(() => import("./components/B2BPortal")); const FeaturedProducts = lazy(() => import("./components/FeaturedProducts")); const VetGallery = lazy(() => import("./components/VetGallery")); type View = "home" | "shop" | "wiki" | "product-detail" | "profile" | "checkout" | "search" | "order-success" | "order-tracking" | "blog" | "videos" | "user-dashboard"; function LoadingFallback() { return (
در حال آماده‌سازی لابراتوار...
); } export default function App() { const [currentView, setCurrentView] = useState("home"); const [subView, setSubView] = useState(null); const [advisorRecommendation, setAdvisorRecommendation] = useState(null); const [advisorData, setAdvisorData] = useState(null); const [selectedProduct, setSelectedProduct] = useState(null); const [lastOrderId, setLastOrderId] = useState(null); const [initialCategory, setInitialCategory] = useState("all"); const [initialSearch, setInitialSearch] = useState(""); const [isCartOpen, setIsCartOpen] = useState(false); const [showB2B, setShowB2B] = useState(false); const [isLoggedIn, setIsLoggedIn] = useState(false); const [showLoginModal, setShowLoginModal] = useState(false); const [isLoading, setIsLoading] = useState(true); const [searchQuery, setSearchQuery] = useState(""); useEffect(() => { const init = async () => { // Simulating initial data load await new Promise(resolve => setTimeout(resolve, 800)); setIsLoading(false); }; init(); }, []); useEffect(() => { const handlePopState = (event: PopStateEvent) => { const params = new URLSearchParams(window.location.search); const category = params.get("category") || "all"; const search = params.get("search") || ""; setInitialCategory(category); setInitialSearch(search); setCurrentView("shop"); }; window.addEventListener("popstate", handlePopState); return () => window.removeEventListener("popstate", handlePopState); }, []); const { clearCart, addOrder, getTotal, items } = useCartStore(); const { getActivePet, pets } = usePetStore(); // Global Scroll To Top on view change useEffect(() => { window.scrollTo({ top: 0, behavior: "smooth" }); }, [currentView]); const handleProductClick = (product: Product) => { setSelectedProduct(product); setCurrentView("product-detail"); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const navigateToShop = (category: string = "all", search: string = "") => { // Update URL with search params const params = new URLSearchParams(); if (category && category !== "all") params.set("category", category); if (search) params.set("search", search); const newUrl = params.toString() ? `?${params.toString()}` : "/shop"; window.history.pushState({ category, search }, "", newUrl); setInitialCategory(category); setInitialSearch(search); setCurrentView("shop"); window.scrollTo({ top: 0, behavior: "smooth" }); }; const navigateToWiki = () => { setCurrentView("wiki"); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleNavigate = (v: any) => { if (typeof v === 'object') { setCurrentView(v.view); setSubView(v.subview || null); } else { setCurrentView(v); setSubView(null); } }; const navigateToProfile = (subview: any = "index") => { setCurrentView("profile"); setSubView(subview); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const navigateToDashboard = () => { setCurrentView("user-dashboard"); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleCheckout = () => { setIsCartOpen(false); setCurrentView("checkout"); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleSearch = (q: string) => { setSearchQuery(q); setCurrentView("search"); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const finalizeOrder = () => { const activePet = getActivePet(); const orderId = addOrder({ items, total: getTotal(), petId: activePet?.id }); setLastOrderId(orderId); clearCart(); setCurrentView("order-success"); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleAdvisorComplete = (data: any) => { setAdvisorData(data); if (!isLoggedIn) { setShowLoginModal(true); } else { processAdvisorResult(data); } }; const processAdvisorResult = (data?: any) => { const d = data || advisorData; if (!d) return; // Map medical conditions to a broad recommendation category for the suggested items logic in PetProfile if (d.medicalConditions.includes("جراحی مفاصل")) setAdvisorRecommendation("joints"); else if (d.medicalConditions.includes("مشکلات گوارشی")) setAdvisorRecommendation("digestion"); else if (d.medicalConditions.includes("ریزش موی شدید")) setAdvisorRecommendation("skin"); else if (d.medicalConditions.includes("بی‌اشتهایی") || d.medicalConditions.includes("زایمان اخیر") || d.medicalConditions.includes("بارداری")) setAdvisorRecommendation("vitamins"); // Clear recommended items and add the pet to the store const { addPet } = usePetStore.getState(); addPet(d); toast.success(`تحلیل سلامت ${d.name} آماده است! شناسنامه صادر شد.`); navigateToProfile("detail"); setAdvisorData(null); }; const handleLogin = () => { setIsLoggedIn(true); setShowLoginModal(false); if (advisorData) { toast.success(`خوش آمدید! مشخصات ${advisorData.name} در شناسنامه ثبت شد.`); processAdvisorResult(); } else { toast.success("خوش آمدید!"); } }; const renderView = () => { if (isLoading) { return (
C
Canina Pharma Laboratory
); } return ( }> {(() => { switch (currentView) { case "user-dashboard": return setCurrentView("home")} onNavigate={handleNavigate} />; case "search": return ( setCurrentView("home")} /> ); case "checkout": return setIsCartOpen(true)} onComplete={finalizeOrder} />; case "product-detail": return selectedProduct ? ( setCurrentView("shop")} onProductClick={handleProductClick} onWikiNavigate={() => setCurrentView("wiki")} onShopNavigate={navigateToShop} /> ) : null; case "shop": return setCurrentView("home")} onShopNavigate={navigateToShop} />; case "home": return ( <> navigateToProfile("detail")} onShopNavigate={() => navigateToShop()} /> navigateToShop()} /> {/* Navigation to Sections */}
navigateToShop()} className="bg-white p-12 rounded-[3.5rem] border border-medical-gray-200 shadow-sm hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group" >

فروشگاه تخصصی

دسترسی به تمامی محصولات بر اساس علائم بالینی و نیازهای پت شما.

کاتالوگ کامل محصولات

دانشنامه علمی

آشنایی با ترکیبات نایاب و استانداردهای دارویی محصولات آلمانی کانینا.

مطالعه مقالات تخصصی
{/* About Section Teaser */}
Laboratory
کیفیت
استانداردهای فوق‌دارویی
میراث ما از آلمان

چرا برند آلمانی Canina مرجع دامپزشکان است؟

{[ { title: "مواد اولیه نایاب", desc: "استفاده از پودر صدف لب‌سبز اصل نیوزیلند و مواد ارگانیک با گرید دارویی." }, { title: "فاقد مواد نگهدارنده", desc: "تمامی محصولات ۱۰۰٪ طبیعی و فاقد رنگ‌های مصنوعی و طعم‌دهنده‌های شیمیایی هستند." }, { title: "تاییدیه اروپا", desc: "مطابق با سخت‌گیرانه‌ترین استانداردهای ایمنی مواد غذایی و دارویی در اتحادیه اروپا." } ].map((item, idx) => (
{idx + 1}

{item.title}

{item.desc}

))}
); case "wiki": return setCurrentView("home")} />; case "profile": return setCurrentView("home")} initialView={subView} advisorNeed={advisorRecommendation} />; case "order-success": return lastOrderId ? : null; case "order-tracking": return setCurrentView("home")} />; case "blog": return setCurrentView("home")} onProductClick={handleProductClick} />; case "videos": return setCurrentView("home")} />; default: return setCurrentView("home")} />; } })()}
); }; return (
setIsCartOpen(true)} onSearch={handleSearch} onB2BOpen={() => setShowB2B(true)} />
{renderView()} {/* Call to Action */}
{Array.from({length: 100}).map((_, i) => (
))}

می‌خواهید بدانید کدام محصول برای پت شما مناسب‌تر است؟

تیم متخصص دامپزشکی کانینا ایران آماده پاسخگویی به سوالات شماست.

); }