diff --git a/frontend/src/components/facility3d/PlantSearch.tsx b/frontend/src/components/facility3d/PlantSearch.tsx index cda5c84..8d8f54a 100644 --- a/frontend/src/components/facility3d/PlantSearch.tsx +++ b/frontend/src/components/facility3d/PlantSearch.tsx @@ -29,15 +29,16 @@ interface PlantSearchProps { export function PlantSearch({ floorData, onSelectResult, onHighlightResults }: PlantSearchProps) { const [query, setQuery] = useState(''); const [isOpen, setIsOpen] = useState(false); + const [searchIndex, setSearchIndex] = useState([]); - // Build searchable index from floor data - // Use floorData.rooms as dependency to ensure we rebuild when data changes - const searchIndex = useMemo(() => { + // Build searchable index from floor data when it changes + useEffect(() => { const results: SearchResult[] = []; if (!floorData?.rooms) { - console.log('[PlantSearch] No floor data or rooms'); - return results; + console.log('[PlantSearch] No floor data or rooms available'); + setSearchIndex([]); + return; } for (const room of floorData.rooms) { @@ -66,22 +67,25 @@ export function PlantSearch({ floorData, onSelectResult, onHighlightResults }: P } } - console.log(`[PlantSearch] Built index with ${results.length} plants`); - return results; - }, [floorData?.rooms]); + console.log(`[PlantSearch] Built index with ${results.length} plants from ${floorData.rooms.length} rooms`); + setSearchIndex(results); + }, [floorData]); // Fuzzy search filter const filteredResults = useMemo(() => { if (!query.trim()) return []; const q = query.toLowerCase(); - return searchIndex + const results = searchIndex .filter(r => r.label.toLowerCase().includes(q) || r.sublabel.toLowerCase().includes(q) || r.roomName.toLowerCase().includes(q) ) - .slice(0, 10); // Limit to 10 results + .slice(0, 10); + + console.log(`[PlantSearch] Query "${query}" matched ${results.length} of ${searchIndex.length} plants`); + return results; }, [query, searchIndex]); // Update highlights when results change @@ -151,6 +155,7 @@ export function PlantSearch({ floorData, onSelectResult, onHighlightResults }: P {isOpen && query && filteredResults.length === 0 && (

No plants found

+

Index has {searchIndex.length} plants

)}