import React, { useState, useCallback } from 'react'; import { type Service } from './types'; import { useLocalStorage } from './hooks/useLocalStorage'; import { PRECONFIGURED_SERVICES } from './constants'; import ServiceCard from './components/ServiceCard'; import AddServiceModal from './components/AddServiceModal'; import Header from './components/Header'; import ScanInfoModal from './components/ScanInfoModal'; import { Plus } from 'lucide-react'; import { Globe } from 'lucide-react'; const App: React.FC = () => { const [services, setServices] = useLocalStorage('dashboard-services', PRECONFIGURED_SERVICES); const [isModalOpen, setIsModalOpen] = useState(false); const [isScanInfoModalOpen, setIsScanInfoModalOpen] = useState(false); const addService = useCallback((newService: Omit) => { setServices(prevServices => [ ...prevServices, { ...newService, id: Date.now().toString() } ]); }, [setServices]); const addDiscoveredServices = useCallback((discoveredServices: Omit[]) => { setServices(prevServices => { const existingUrls = new Set(prevServices.map(s => s.url)); const newServices = discoveredServices .filter(ds => !existingUrls.has(ds.url)) .map(ds => ({ ...ds, id: `${ds.name}-${ds.url}-${Math.random()}`, // Create a unique ID icon: Globe, // Default icon for discovered services })); return [...prevServices, ...newServices]; }); }, [setServices]); const deleteService = useCallback((id: string) => { setServices(prevServices => prevServices.filter(service => service.id !== id)); }, [setServices]); return (
setIsModalOpen(true)} onScanNetwork={() => setIsScanInfoModalOpen(true)} />
{services.length > 0 ? (
{services.map(service => ( ))}
) : (

Your Dashboard is Empty

Click the button below to start adding your local services.

)}
{isModalOpen && ( setIsModalOpen(false)} onAddService={addService} /> )} {isScanInfoModalOpen && ( setIsScanInfoModalOpen(false)} onScanComplete={addDiscoveredServices} /> )}
); }; export default App;