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) => (
))
)}
)}
)
}