import React from 'react'; import { useMapActions, useMapFilter, useMapInteraction, useMapUI, } from '@/contexts/MapContexts.tsx'; import { useMapData } from '@/hooks/map/useMapData.ts'; import { useTranslation } from '@/hooks/useI18n.tsx'; import OrganizationListItem from '@/components/map/OrganizationListItem.tsx'; const SidebarList: React.FC = () => { const { t } = useTranslation(); const { filteredAndSortedOrgs, searchTerm } = useMapFilter(); const { selectedOrg, selectedLandmark, setHoveredOrgId, setHoveredLandmarkId } = useMapInteraction(); const { mapViewMode } = useMapUI(); const { historicalLandmarks } = useMapData(); const { handleSelectOrg, handleSelectLandmark } = useMapActions(); // Hide content when an organization or landmark is selected, but keep hooks running if (selectedOrg || selectedLandmark) { return
; } const itemsToDisplay = mapViewMode === 'organizations' ? filteredAndSortedOrgs || [] : historicalLandmarks || []; return (
{itemsToDisplay && itemsToDisplay.length > 0 ? ( mapViewMode === 'organizations' ? ( (filteredAndSortedOrgs || []).map((org) => ( )) ) : ( (historicalLandmarks || []).map((landmark) => (
setHoveredLandmarkId(landmark.id)} onMouseLeave={() => setHoveredLandmarkId(null)} onClick={() => handleSelectLandmark(landmark)} className={`p-3 rounded-lg cursor-pointer transition-colors ${selectedLandmark?.id === landmark.id ? 'bg-primary/10' : 'hover:bg-muted'}`} >

{landmark.name}

{landmark.period}

)) ) ) : (

{t('mapSidebar.noResults')}

)}
); }; export default React.memo(SidebarList);