"use client"; import React, { useState, useEffect } from 'react'; import { Search, Plus, X, FileText, Calendar, Heart, Users } from 'lucide-react'; import { format } from 'date-fns'; import { fr } from 'date-fns/locale'; interface Note { id: string; title: string; content: string; lastEdited: Date; category?: string; tags?: string[]; } interface NotesViewProps { onNoteSelect?: (note: Note) => void; currentFolder?: string; } export const NotesView: React.FC = ({ onNoteSelect, currentFolder = 'Notes' }) => { const [searchQuery, setSearchQuery] = useState(''); const [notes, setNotes] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const fetchNotes = async () => { try { setLoading(true); const response = await fetch(`/api/nextcloud/files?folder=${currentFolder}`); if (!response.ok) { throw new Error('Failed to fetch notes'); } const data = await response.json(); setNotes(data.files || []); } catch (err) { console.error('Error fetching notes:', err); setNotes([]); } finally { setLoading(false); } }; fetchNotes(); }, [currentFolder]); const handleNewNote = () => { const newNote: Note = { id: Date.now().toString(), title: 'New Note', content: '', lastEdited: new Date() }; setNotes([newNote, ...notes]); onNoteSelect?.(newNote); }; const formatDate = (date: Date) => { return format(date, 'EEEE d MMM yyyy, HH:mm', { locale: fr }); }; const getFolderIcon = (folder: string) => { switch (folder) { case 'Notes': return FileText; case 'Diary': return Calendar; case 'Health': return Heart; case 'Contacts': return Users; default: return FileText; } }; const Icon = getFolderIcon(currentFolder); return (
{/* Search Header */}
setSearchQuery(e.target.value)} placeholder="Rechercher des notes..." className="w-full pl-9 pr-4 py-2 bg-white border border-carnet-border rounded-md text-sm text-carnet-text-primary placeholder-carnet-text-muted focus:outline-none focus:ring-1 focus:ring-primary" /> {searchQuery && ( )}
{/* Folder Header */}
{currentFolder}
{/* Notes List */}
{loading ? (
) : notes.length === 0 ? (

Aucune note trouvée

) : ( notes.map((note) => (
onNoteSelect?.(note)} >
{note.title} {note.tags?.map((tag) => ( {tag} ))}
{formatDate(note.lastEdited)} {note.content && ( <> {note.content} )}
)) )}
); };