| '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; |
| } |
|
|
| export function useRecentFiles() { |
| const [recentFiles, setRecentFiles] = useState<RecentFile[]>([]); |
|
|
| |
| 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); |
| } |
| }, []); |
|
|
| |
| 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) => { |
| |
| const filtered = prev.filter((f) => f.name !== name); |
| |
| const updated = [newFile, ...filtered].slice(0, MAX_RECENT_FILES); |
|
|
| |
| localStorage.setItem(RECENT_FILES_KEY, JSON.stringify(updated)); |
|
|
| return updated; |
| }); |
| } catch (error) { |
| console.error('Failed to save recent file:', error); |
| } |
| }, []); |
|
|
| |
| const clearRecentFiles = useCallback(() => { |
| try { |
| localStorage.removeItem(RECENT_FILES_KEY); |
| setRecentFiles([]); |
| } catch (error) { |
| console.error('Failed to clear recent files:', error); |
| } |
| }, []); |
|
|
| |
| 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, |
| }; |
| } |
|
|