import React, { useState, useEffect, useCallback } from "react" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { ScrollArea } from "./ui/scroll-area" import { Memory, CaretRight } from "@phosphor-icons/react" import { cn } from "@/lib/utils" import { Button } from "./ui/button" import { MemoryCard } from "./MemoryCard" import { memoryRefreshTrigger } from "./DebugDisplay" interface MemoryItem { id: string // Kept for React key prop content: string createdAt: string categories: string[] } const fetchMemories = async () => { const response = await fetch("http://localhost:7860/memories") const data = await response.json() return data } const MemorySkeleton = () => (
) export default function StaticMemoryPanel() { const [isCollapsed, setIsCollapsed] = useState(false) const [memories, setMemories] = useState([]) const [isInitialLoading, setIsInitialLoading] = useState(true) const [localRefreshTrigger, setLocalRefreshTrigger] = useState(0) const fetchEffectMemories = useCallback(async () => { // Only set loading if this is the initial fetch (no memories) if (memories.length === 0) { setIsInitialLoading(true) } try { const memories = await fetchMemories() if (memories) { setMemories(memories as unknown as MemoryItem[]) } else { setMemories([]) console.log("No memories found") } } catch (error) { console.error("Error fetching memories:", error) setMemories([]) } finally { setIsInitialLoading(false) } }, [memories.length]) useEffect(() => { fetchEffectMemories() }, [fetchEffectMemories, localRefreshTrigger]) useEffect(() => { const handleRefresh = (value: number) => { setLocalRefreshTrigger(value); }; memoryRefreshTrigger.subscribers.add(handleRefresh); return () => { memoryRefreshTrigger.subscribers.delete(handleRefresh); }; }, []); return (
Memories ({memories.length})
{!isCollapsed && (
{isInitialLoading && memories.length === 0 ? ( <> ) : ( memories.map((memory) => ( )) )}
)}
) }