aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/pages
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-12-07 18:03:04 +0900
committernsfisis <nsfisis@gmail.com>2025-12-07 18:03:04 +0900
commit83789dd12efe82b645445fbb46d98bcb2a003b57 (patch)
tree984040fe8408b6e3dafcfac933c0495d719559c8 /src/client/pages
parent0b7acece277f80f1baeb7bb419544cdd11f7817f (diff)
downloadkioku-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.tsx35
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>
);
}