diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-12-07 18:03:04 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-12-07 18:03:04 +0900 |
| commit | 83789dd12efe82b645445fbb46d98bcb2a003b57 (patch) | |
| tree | 984040fe8408b6e3dafcfac933c0495d719559c8 /src/client/pages | |
| parent | 0b7acece277f80f1baeb7bb419544cdd11f7817f (diff) | |
| download | kioku-83789dd12efe82b645445fbb46d98bcb2a003b57.tar.gz kioku-83789dd12efe82b645445fbb46d98bcb2a003b57.tar.zst kioku-83789dd12efe82b645445fbb46d98bcb2a003b57.zip | |
feat(client): add delete deck modal with confirmation
Add DeleteDeckModal component that prompts users for confirmation
before deleting a deck. Includes warning about permanent deletion
and all associated cards.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/client/pages')
| -rw-r--r-- | src/client/pages/HomePage.tsx | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/client/pages/HomePage.tsx b/src/client/pages/HomePage.tsx index 08eccaa..a51dfc1 100644 --- a/src/client/pages/HomePage.tsx +++ b/src/client/pages/HomePage.tsx @@ -1,6 +1,7 @@ import { useCallback, useEffect, useState } from "react"; import { ApiClientError, apiClient } from "../api"; import { CreateDeckModal } from "../components/CreateDeckModal"; +import { DeleteDeckModal } from "../components/DeleteDeckModal"; import { EditDeckModal } from "../components/EditDeckModal"; import { useAuth } from "../stores"; @@ -20,6 +21,7 @@ export function HomePage() { const [error, setError] = useState<string | null>(null); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const [editingDeck, setEditingDeck] = useState<Deck | null>(null); + const [deletingDeck, setDeletingDeck] = useState<Deck | null>(null); const fetchDecks = useCallback(async () => { setIsLoading(true); @@ -136,13 +138,25 @@ export function HomePage() { </p> )} </div> - <button - type="button" - onClick={() => setEditingDeck(deck)} - style={{ marginLeft: "1rem" }} - > - Edit - </button> + <div style={{ display: "flex", gap: "0.5rem" }}> + <button type="button" onClick={() => setEditingDeck(deck)}> + Edit + </button> + <button + type="button" + onClick={() => setDeletingDeck(deck)} + style={{ + backgroundColor: "#dc3545", + color: "white", + border: "none", + padding: "0.25rem 0.5rem", + borderRadius: "4px", + cursor: "pointer", + }} + > + Delete + </button> + </div> </div> </li> ))} @@ -162,6 +176,13 @@ export function HomePage() { onClose={() => setEditingDeck(null)} onDeckUpdated={fetchDecks} /> + + <DeleteDeckModal + isOpen={deletingDeck !== null} + deck={deletingDeck} + onClose={() => setDeletingDeck(null)} + onDeckDeleted={fetchDecks} + /> </div> ); } |
