From b51d4efaa1e5e0417d4306c02797f424938766cb Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 31 Dec 2025 02:38:05 +0900 Subject: feat(client): add NoteTypesPage for note type management MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement Phase 6 of the roadmap - NoteType list page with CRUD modals: - NoteTypesPage displays all user's note types with templates and reversible badge - CreateNoteTypeModal for creating new note types with templates - EditNoteTypeModal for updating existing note types - DeleteNoteTypeModal with constraint warning - Navigation link from HomePage header - Comprehensive tests for all components (65 new tests) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/client/pages/HomePage.tsx | 13 + src/client/pages/NoteTypesPage.test.tsx | 551 ++++++++++++++++++++++++++++++++ src/client/pages/NoteTypesPage.tsx | 272 ++++++++++++++++ src/client/pages/index.ts | 1 + 4 files changed, 837 insertions(+) create mode 100644 src/client/pages/NoteTypesPage.test.tsx create mode 100644 src/client/pages/NoteTypesPage.tsx (limited to 'src/client/pages') diff --git a/src/client/pages/HomePage.tsx b/src/client/pages/HomePage.tsx index b7b2c29..9b9f2de 100644 --- a/src/client/pages/HomePage.tsx +++ b/src/client/pages/HomePage.tsx @@ -1,5 +1,6 @@ import { faBoxOpen, + faLayerGroup, faPen, faPlus, faSpinner, @@ -80,6 +81,18 @@ export function HomePage() {
+ +
+ + {/* Loading State */} + {isLoading && ( +
+
+ )} + + {/* Error State */} + {error && ( +
+ {error} + +
+ )} + + {/* Empty State */} + {!isLoading && !error && noteTypes.length === 0 && ( +
+
+
+

+ No note types yet +

+

+ Create a note type to define how your cards are structured +

+ +
+ )} + + {/* Note Type List */} + {!isLoading && !error && noteTypes.length > 0 && ( +
+ {noteTypes.map((noteType, index) => ( +
+
+
+
+
+
+ + Front: {noteType.frontTemplate} + + + Back: {noteType.backTemplate} + + {noteType.isReversible && ( + + Reversible + + )} +
+
+
+ + +
+
+
+ ))} +
+ )} + + + {/* Modals */} + setIsCreateModalOpen(false)} + onNoteTypeCreated={fetchNoteTypes} + /> + + setEditingNoteType(null)} + onNoteTypeUpdated={fetchNoteTypes} + /> + + setDeletingNoteType(null)} + onNoteTypeDeleted={fetchNoteTypes} + /> + + ); +} diff --git a/src/client/pages/index.ts b/src/client/pages/index.ts index 3fb507a..597ea39 100644 --- a/src/client/pages/index.ts +++ b/src/client/pages/index.ts @@ -1,5 +1,6 @@ export { DeckDetailPage } from "./DeckDetailPage"; export { HomePage } from "./HomePage"; export { LoginPage } from "./LoginPage"; +export { NoteTypesPage } from "./NoteTypesPage"; export { NotFoundPage } from "./NotFoundPage"; export { StudyPage } from "./StudyPage"; -- cgit v1.2.3-70-g09d2