import { Routes, Route, Navigate, useNavigate } from 'react-router-dom'; import { useStore } from './store'; import { Auth } from './components/Auth'; import { ProtectedRoute } from './components/ProtectedRoute'; import { KeyRound, Heart, X } from 'lucide-react'; import { useEffect, useState } from 'react'; import { socket } from './socket'; import { useLocation } from 'react-router-dom'; // Static imports for maximum build stability on Hugging Face import { BuyerDashboard } from './components/BuyerDashboard'; import { SellerDashboard } from './components/SellerDashboard'; import { AddListing } from './components/AddListing'; import { ListingDetails } from './components/ListingDetails'; import { CallOverlay } from './components/CallOverlay'; import { HelpOverlay } from './components/HelpOverlay'; import { ChatOverlay } from './components/ChatOverlay'; import { InboxOverlay } from './components/InboxOverlay'; import { AdminLogin } from './components/admin/AdminLogin'; import { AdminDashboard } from './components/admin/AdminDashboard'; export default function App() { const { currentUser, initDevice, logout } = useStore(); const [showQR, setShowQR] = useState(false); const navigate = useNavigate(); const location = useLocation(); const isAdminRoute = location.pathname.startsWith('/admin'); useEffect(() => { if ("Notification" in window && Notification.permission !== "granted" && Notification.permission !== "denied") { Notification.requestPermission(); } const { deviceId } = initDevice(); if (deviceId) { socket.connect(); socket.emit('join-network', deviceId); } socket.on('listing-updated', (data) => { useStore.getState().updateListingStatus(data.id, data.status); }); socket.on('listing-edited', (data) => { useStore.getState().editListingDetails(data.id, { cropName: data.cropName, quantity: data.quantity, price: data.price }); }); socket.on('receive-message', (data) => { const state = useStore.getState(); if (!state.activeChatUser || state.activeChatUser.id !== data.senderId) { state.fetchUnreadCount(); if ("Notification" in window && Notification.permission === "granted") { new Notification("New Message - Meri Mandi", { body: data.message, icon: '/upiqr.jpeg' }); } } }); return () => { socket.off('listing-updated'); socket.off('listing-edited'); socket.off('receive-message'); socket.disconnect(); } }, [initDevice]); useEffect(() => { if (currentUser) { useStore.getState().fetchUnreadCount(); } }, [currentUser]); const handleSwitchProfile = () => { logout(); navigate('/'); }; return (
Scan to keep Meri Mandi free for farmers!