code-review-fix task 12.7: add hasLoaded flag to TalibPatternPanel to prevent re-fetch on empty array

This commit is contained in:
Marko Djordjevic 2026-02-18 20:39:53 +01:00
parent e8b8bbb56f
commit a4bb3efa70

View file

@ -1,6 +1,6 @@
'use client'; 'use client';
import { useState, useEffect, useCallback } from 'react'; import { useState, useEffect, useCallback, useRef } from 'react';
import { ChevronDown, Trash2 } from 'lucide-react'; import { ChevronDown, Trash2 } from 'lucide-react';
interface PatternInfo { interface PatternInfo {
@ -33,21 +33,23 @@ export default function TalibPatternPanel({
const [results, setResults] = useState<DetectionResult[]>([]); const [results, setResults] = useState<DetectionResult[]>([]);
const [deletingLabel, setDeletingLabel] = useState<string | null>(null); const [deletingLabel, setDeletingLabel] = useState<string | null>(null);
const [isDeletingAll, setIsDeletingAll] = useState(false); const [isDeletingAll, setIsDeletingAll] = useState(false);
const hasLoaded = useRef(false);
// Fetch available patterns when panel expands // Fetch available patterns when panel expands
useEffect(() => { useEffect(() => {
if (expanded && patterns.length === 0) { if (expanded && !hasLoaded.current) {
setIsFetchingPatterns(true); setIsFetchingPatterns(true);
fetch('/api/patterns/available') fetch('/api/patterns/available')
.then((r) => r.json()) .then((r) => r.json())
.then((data) => { .then((data) => {
const list: PatternInfo[] = data.patterns || data; const list: PatternInfo[] = data.patterns || data;
setPatterns(list); setPatterns(list);
hasLoaded.current = true;
}) })
.catch(() => setError('Failed to load patterns')) .catch(() => setError('Failed to load patterns'))
.finally(() => setIsFetchingPatterns(false)); .finally(() => setIsFetchingPatterns(false));
} }
}, [expanded, patterns.length]); }, [expanded]);
const handleSelectAll = () => { const handleSelectAll = () => {
setSelectedPatterns(new Set(patterns.map((p) => p.function_name))); setSelectedPatterns(new Set(patterns.map((p) => p.function_name)));