import React, { useState } from 'react'; import { Link } from 'react-router-dom'; import { BookOpenIcon, PencilSquareIcon, TrashIcon, MagnifyingGlassIcon } from '@heroicons/react/24/solid'; import NoteModal from './Note/NoteModal'; import ConfirmDialog from './Shared/ConfirmDialog'; import { useDataContext } from '../contexts/DataContext'; import { Note } from '../entities/Note'; const Notes: React.FC = () => { const { notes, createNote, updateNote, deleteNote, isLoading, isError } = useDataContext(); const [selectedNote, setSelectedNote] = useState(null); const [isNoteModalOpen, setIsNoteModalOpen] = useState(false); const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false); const [noteToDelete, setNoteToDelete] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const handleDeleteNote = async () => { if (!noteToDelete) return; try { await deleteNote(noteToDelete.id!); setIsConfirmDialogOpen(false); setNoteToDelete(null); } catch (err) { console.error('Error deleting note:', err); } }; const handleEditNote = (note: Note) => { setSelectedNote(note); setIsNoteModalOpen(true); }; const handleSaveNote = async (noteData: Note) => { try { if (noteData.id) { await updateNote(noteData.id, noteData); } else { await createNote(noteData); } setIsNoteModalOpen(false); setSelectedNote(null); } catch (err) { console.error('Error saving note:', err); } }; const filteredNotes = notes.filter( (note) => note.title.toLowerCase().includes(searchQuery.toLowerCase()) || note.content.toLowerCase().includes(searchQuery.toLowerCase()) ); if (isLoading) { return (
Loading notes...
); } if (isError) { return (
Error loading notes.
); } return (
{/* Notes Header */}

Notes

{/* Search Bar with Icon */}
setSearchQuery(e.target.value)} className="w-full bg-transparent border-none focus:ring-0 focus:outline-none dark:text-white" />
{/* Notes List */} {filteredNotes.length === 0 ? (

No notes found.

) : (
    {filteredNotes.map((note) => (
  • {note.title}

    {note.content}

  • ))}
)} {/* NoteModal */} {isNoteModalOpen && ( setIsNoteModalOpen(false)} onSave={handleSaveNote} note={selectedNote} /> )} {/* ConfirmDialog */} {isConfirmDialogOpen && noteToDelete && ( setIsConfirmDialogOpen(false)} /> )}
); }; export default Notes;