import type { Site } from '@/types/index.ts'; import { useSitesStore } from '@/store/sites.ts'; import { useToastStore } from '@/components/ui/Toast.tsx'; import Button from '@/components/ui/Button.tsx'; import BatchEdit from './BatchEdit.tsx'; interface SiteListProps { onEditSite: (site: Site) => void; onAddSite: () => void; } export default function SiteList({ onEditSite, onAddSite }: SiteListProps) { const sites = useSitesStore((s) => s.sites); const deleteSite = useSitesStore((s) => s.deleteSite); const selectSite = useSitesStore((s) => s.selectSite); const selectedSiteId = useSitesStore((s) => s.selectedSiteId); const isPlacingMode = useSitesStore((s) => s.isPlacingMode); const togglePlacingMode = useSitesStore((s) => s.togglePlacingMode); const selectedSiteIds = useSitesStore((s) => s.selectedSiteIds); const toggleSiteSelection = useSitesStore((s) => s.toggleSiteSelection); const selectAllSites = useSitesStore((s) => s.selectAllSites); const clearSelection = useSitesStore((s) => s.clearSelection); const addToast = useToastStore((s) => s.addToast); const handleDelete = async (id: string, name: string) => { await deleteSite(id); addToast(`"${name}" deleted`, 'info'); }; const allSelected = sites.length > 0 && selectedSiteIds.length === sites.length; return (
{/* Header */}

Sites ({sites.length})

{/* Select All row (only when sites exist) */} {sites.length > 0 && (
{selectedSiteIds.length > 0 && ( {selectedSiteIds.length} selected )}
)} {/* Batch edit panel (appears when sites are selected) */} {selectedSiteIds.length > 0 && (
)} {/* Sites list */} {sites.length === 0 ? (
No sites yet. Click on the map or use "+ Manual" to add one.
) : (
{sites.map((site) => { const isBatchSelected = selectedSiteIds.includes(site.id); return (
selectSite(site.id)} > {/* Batch checkbox */} toggleSiteSelection(site.id)} onClick={(e) => e.stopPropagation()} className="w-3.5 h-3.5 rounded border-gray-300 dark:border-dark-border accent-blue-600 flex-shrink-0" /> {/* Color indicator */}
{/* Info */}
{site.name}
{site.frequency} MHz · {site.power} dBm ·{' '} {site.antennaType === 'omni' ? 'Omni' : `Sector ${site.azimuth ?? 0}°`} {' '}· {site.height}m
{/* Actions */}
); })}
)}
); }