import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { BookOpenIcon, PencilSquareIcon, TrashIcon, MagnifyingGlassIcon, } from '@heroicons/react/24/solid'; import NoteModal from './Note/NoteModal'; import ConfirmDialog from './Shared/ConfirmDialog'; import { Note } from '../entities/Note'; import { fetchNotes, createNote, updateNote, deleteNote as apiDeleteNote, } from '../utils/notesService'; const Notes: React.FC = () => { const { t } = useTranslation(); const [notes, setNotes] = useState([]); 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 [isLoading, setIsLoading] = useState(true); const [isError, setIsError] = useState(false); useEffect(() => { const loadNotes = async () => { setIsLoading(true); try { console.log('Attempting to fetch notes...'); const fetchedNotes = await fetchNotes(); console.log('Fetched notes:', fetchedNotes); console.log('Number of notes:', fetchedNotes.length); setNotes(fetchedNotes); } catch (error) { console.error('Error loading notes:', error); setIsError(true); } finally { setIsLoading(false); } }; loadNotes(); }, []); const handleDeleteNote = async () => { if (!noteToDelete) return; try { await apiDeleteNote(noteToDelete.id!); setNotes((prev) => prev.filter((note) => note.id !== 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 { let updatedNotes; if (noteData.id) { await updateNote(noteData.id, noteData); updatedNotes = notes.map((note) => note.id === noteData.id ? noteData : note ); } else { const newNote = await createNote(noteData); updatedNotes = [...notes, newNote]; } setNotes(updatedNotes); 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()) ); console.log('All notes:', notes); console.log('Search query:', searchQuery); console.log('Filtered notes:', filteredNotes); if (isLoading) { return (
{t('notes.loading')}
); } if (isError) { return (
{t('notes.error')}
); } return (
{/* Notes Header */}

{t('notes.title')}

{/* 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 ? (

{t('notes.noNotesFound')}

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