diff --git a/src/components/HistoryPanel.tsx b/src/components/HistoryPanel.tsx index 40aa941..be45df8 100644 --- a/src/components/HistoryPanel.tsx +++ b/src/components/HistoryPanel.tsx @@ -5,6 +5,7 @@ import { History, Download, Image as ImageIcon } from 'lucide-react'; import { cn } from '../utils/cn'; import { ImagePreviewModal } from './ImagePreviewModal'; import * as indexedDBService from '../services/indexedDBService'; +import { useIndexedDBListener } from '../hooks/useIndexedDBListener'; export const HistoryPanel: React.FC = () => { const { @@ -37,9 +38,8 @@ export const HistoryPanel: React.FC = () => { // 存储从Blob URL解码的图像数据 const [decodedImages, setDecodedImages] = useState>({}); - // 存储从IndexedDB获取的完整记录 - const [dbGenerations, setDbGenerations] = useState([]); - const [dbEdits, setDbEdits] = useState([]); + // 使用自定义hook获取IndexedDB记录 + const { generations: dbGenerations, edits: dbEdits, loading, error, refresh } = useIndexedDBListener(); // 筛选和搜索状态 const [startDate, setStartDate] = useState(''); @@ -80,50 +80,39 @@ export const HistoryPanel: React.FC = () => { } }, [canvasImage]); - // 当组件挂载时,从IndexedDB获取记录 - useEffect(() => { - const loadDBRecords = async () => { - try { - // 初始化数据库 - await indexedDBService.initDB(); - - // 获取所有生成记录和编辑记录 - const allGenerations = await indexedDBService.getAllGenerations(); - const allEdits = await indexedDBService.getAllEdits(); - - setDbGenerations(allGenerations); - setDbEdits(allEdits); - } catch (err) { - console.error('从IndexedDB加载记录失败:', err); - } - }; - - loadDBRecords(); - }, []); - - // 当有新记录添加时,重新加载记录 - useEffect(() => { - // 监听store中的记录变化,如果有新记录则重新加载 - const handleStorageChange = (e: StorageEvent) => { - if (e.key === 'nano-banana-store') { - // 重新加载记录 - const loadDBRecords = async () => { - try { - const allGenerations = await indexedDBService.getAllGenerations(); - const allEdits = await indexedDBService.getAllEdits(); - setDbGenerations(allGenerations); - setDbEdits(allEdits); - } catch (err) { - console.error('从IndexedDB重新加载记录失败:', err); - } - }; - loadDBRecords(); - } - }; - - window.addEventListener('storage', handleStorageChange); - return () => window.removeEventListener('storage', handleStorageChange); - }, []); + // 错误处理显示 + if (error) { + return ( +
+
+
+ +

历史记录和变体

+
+ +
+
+

加载历史记录时出错: {error}

+ +
+
+ ); + } // 筛选记录的函数 const filterRecords = (records: any[], isGeneration: boolean) => { @@ -233,16 +222,7 @@ export const HistoryPanel: React.FC = () => {