clinicpal / src /hooks /use-recent-files.ts
Vrda's picture
Deploy ClinIcPal frontend
9bc2f29 verified
'use client';
import { useState, useEffect, useCallback } from 'react';
const RECENT_FILES_KEY = 'clinical-note-recent-files';
const MAX_RECENT_FILES = 5;
export interface RecentFile {
id: string;
name: string;
content: string;
timestamp: number;
preview: string; // First 100 chars
}
export function useRecentFiles() {
const [recentFiles, setRecentFiles] = useState<RecentFile[]>([]);
// Load recent files on mount
useEffect(() => {
try {
const saved = localStorage.getItem(RECENT_FILES_KEY);
if (saved) {
const files = JSON.parse(saved) as RecentFile[];
setRecentFiles(files);
}
} catch (error) {
console.error('Failed to load recent files:', error);
}
}, []);
// Save file to recent files
const addRecentFile = useCallback((name: string, content: string) => {
try {
const newFile: RecentFile = {
id: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,
name,
content,
timestamp: Date.now(),
preview: content.slice(0, 100).replace(/\n/g, ' '),
};
setRecentFiles((prev) => {
// Remove duplicate if exists (same name)
const filtered = prev.filter((f) => f.name !== name);
// Add new file to the beginning
const updated = [newFile, ...filtered].slice(0, MAX_RECENT_FILES);
// Save to localStorage
localStorage.setItem(RECENT_FILES_KEY, JSON.stringify(updated));
return updated;
});
} catch (error) {
console.error('Failed to save recent file:', error);
}
}, []);
// Clear all recent files
const clearRecentFiles = useCallback(() => {
try {
localStorage.removeItem(RECENT_FILES_KEY);
setRecentFiles([]);
} catch (error) {
console.error('Failed to clear recent files:', error);
}
}, []);
// Remove specific file
const removeRecentFile = useCallback((id: string) => {
try {
setRecentFiles((prev) => {
const updated = prev.filter((f) => f.id !== id);
localStorage.setItem(RECENT_FILES_KEY, JSON.stringify(updated));
return updated;
});
} catch (error) {
console.error('Failed to remove recent file:', error);
}
}, []);
return {
recentFiles,
addRecentFile,
clearRecentFiles,
removeRecentFile,
};
}