|
1 | | -import React, { useState } from 'react'; |
2 | | -import AppLayout from '@/components/layout/AppLayout'; |
3 | | -import { useNotes } from '@/context/NotesContextTypes'; |
4 | | -import NotesList from '@/components/notes/NotesList'; |
5 | | -import NoteEditor from '@/components/notes/NoteEditor'; |
6 | | -import { Note } from '@/types'; |
7 | | -import { Button } from '@/components/ui/button'; |
8 | | -import { Plus, FileText } from 'lucide-react'; |
9 | | -import { ResizablePanel, ResizableHandle } from '@/components/ui/resizable'; |
10 | | - |
11 | | -const HomePage: React.FC = () => { |
12 | | - const { notes, activeNote, setActiveNote, addNote, deleteNote } = useNotes(); |
13 | | - const [isCreatingNote, setIsCreatingNote] = useState(false); |
| 1 | +import React, { useCallback, useEffect, useState } from 'react'; |
| 2 | +import AppLayout from '@/components/layout/AppLayout'; |
| 3 | +import { useNotes } from '@/context/NotesContextTypes'; |
| 4 | +import NotesList from '@/components/notes/NotesList'; |
| 5 | +import NoteEditor from '@/components/notes/NoteEditor'; |
| 6 | +import { Note } from '@/types'; |
| 7 | +import { Button } from '@/components/ui/button'; |
| 8 | +import { Plus, FileText } from 'lucide-react'; |
| 9 | +import { ResizablePanel, ResizableHandle } from '@/components/ui/resizable'; |
| 10 | +import { useLocation, useNavigate } from 'react-router-dom'; |
| 11 | + |
| 12 | +const HomePage: React.FC = () => { |
| 13 | + const { notes, activeNote, setActiveNote, deleteNote } = useNotes(); |
| 14 | + const [isCreatingNote, setIsCreatingNote] = useState(false); |
| 15 | + const location = useLocation(); |
| 16 | + const navigate = useNavigate(); |
14 | 17 |
|
15 | 18 | const handleSelectNote = (note: Note) => { |
16 | 19 | setActiveNote(note); |
17 | 20 | setIsCreatingNote(false); |
18 | 21 | }; |
19 | 22 |
|
20 | | - const handleCreateNote = () => { |
21 | | - setActiveNote(null); |
22 | | - setIsCreatingNote(true); |
23 | | - }; |
| 23 | + const handleCreateNote = useCallback(() => { |
| 24 | + setActiveNote(null); |
| 25 | + setIsCreatingNote(true); |
| 26 | + }, [setActiveNote]); |
| 27 | + |
| 28 | + useEffect(() => { |
| 29 | + if (location.state?.createNote) { |
| 30 | + handleCreateNote(); |
| 31 | + navigate(location.pathname, { replace: true, state: null }); |
| 32 | + } |
| 33 | + }, [handleCreateNote, location.pathname, location.state, navigate]); |
24 | 34 |
|
25 | 35 | const handleSaveNewNote = (note: Note) => { |
26 | 36 | setActiveNote(note); |
@@ -50,11 +60,20 @@ const HomePage: React.FC = () => { |
50 | 60 |
|
51 | 61 | <ResizablePanel defaultSize={70}> |
52 | 62 | <div className="h-full border-l border-border/30"> |
53 | | - {isCreatingNote ? ( |
54 | | - <NoteEditor isNew={true} onSave={handleSaveNewNote} /> |
55 | | - ) : activeNote ? ( |
56 | | - <NoteEditor note={activeNote} /> |
57 | | - ) : ( |
| 63 | + {isCreatingNote ? ( |
| 64 | + <NoteEditor |
| 65 | + key="new-note-editor" |
| 66 | + isNew={true} |
| 67 | + onSave={handleSaveNewNote} |
| 68 | + onCreateNote={handleCreateNote} |
| 69 | + /> |
| 70 | + ) : activeNote ? ( |
| 71 | + <NoteEditor |
| 72 | + key={activeNote.id} |
| 73 | + note={activeNote} |
| 74 | + onCreateNote={handleCreateNote} |
| 75 | + /> |
| 76 | + ) : ( |
58 | 77 | <div className="h-full flex flex-col items-center justify-center p-8 text-center"> |
59 | 78 | <div className="w-16 h-16 mb-4 rounded-full bg-primary/10 flex items-center justify-center"> |
60 | 79 | <FileText className="w-6 h-6 text-primary" /> |
|
0 commit comments