import React, { useState, useMemo } from 'react' import DraggablePlaceCard from './DraggablePlaceCard' import { Search, Plus, Filter, Map, X, SlidersHorizontal } from 'lucide-react' export default function PlacesPanel({ places, categories, tags, assignments, tripId, onAddPlace, onEditPlace, hasMapKey, onSearchMaps, }) { const [search, setSearch] = useState('') const [selectedCategory, setSelectedCategory] = useState('') const [selectedTags, setSelectedTags] = useState([]) const [showFilters, setShowFilters] = useState(false) // Get set of assigned place IDs (for any day) const assignedPlaceIds = useMemo(() => { const ids = new Set() Object.values(assignments || {}).forEach(dayAssignments => { dayAssignments.forEach(a => { if (a.place?.id) ids.add(a.place.id) }) }) return ids }, [assignments]) const filteredPlaces = useMemo(() => { return places.filter(place => { if (search) { const q = search.toLowerCase() if (!place.name.toLowerCase().includes(q) && !place.address?.toLowerCase().includes(q) && !place.description?.toLowerCase().includes(q)) { return false } } if (selectedCategory && place.category_id !== parseInt(selectedCategory)) { return false } if (selectedTags.length > 0) { const placeTags = (place.tags || []).map(t => t.id) if (!selectedTags.every(tagId => placeTags.includes(tagId))) { return false } } return true }) }, [places, search, selectedCategory, selectedTags]) const toggleTag = (tagId) => { setSelectedTags(prev => prev.includes(tagId) ? prev.filter(id => id !== tagId) : [...prev, tagId] ) } const clearFilters = () => { setSearch('') setSelectedCategory('') setSelectedTags([]) } const hasActiveFilters = search || selectedCategory || selectedTags.length > 0 return (
No places yet
Add places and drag them to days
> ) : ( <>No matches found
Try adjusting your filters
> )}