import { faBoxOpen, faLayerGroup, faPen, faPlus, faTrash, } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useAtomValue, useSetAtom } from "jotai"; import { Suspense, useState, useTransition } from "react"; import { Link } from "wouter"; import { type Deck, decksAtom, logoutAtom } from "../atoms"; import { CreateDeckModal } from "../components/CreateDeckModal"; import { DeleteDeckModal } from "../components/DeleteDeckModal"; import { EditDeckModal } from "../components/EditDeckModal"; import { ErrorBoundary } from "../components/ErrorBoundary"; import { LoadingSpinner } from "../components/LoadingSpinner"; import { SyncButton } from "../components/SyncButton"; import { SyncStatusIndicator } from "../components/SyncStatusIndicator"; function DeckList({ onEditDeck, onDeleteDeck, }: { onEditDeck: (deck: Deck) => void; onDeleteDeck: (deck: Deck) => void; }) { const decks = useAtomValue(decksAtom); if (decks.length === 0) { return (

No decks yet

Create your first deck to start learning

); } return (
{decks.map((deck, index) => (

{deck.name}

{deck.description && (

{deck.description}

)}
))}
); } export function HomePage() { const logout = useSetAtom(logoutAtom); const reloadDecks = useSetAtom(decksAtom); const [, startTransition] = useTransition(); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const [editingDeck, setEditingDeck] = useState(null); const [deletingDeck, setDeletingDeck] = useState(null); const handleDeckMutation = () => { startTransition(() => { reloadDecks(); }); }; return (
{/* Header */}

Kioku

{/* Main Content */}
{/* Section Header */}

Your Decks

{/* Deck List with Suspense */} }>
{/* Modals */} setIsCreateModalOpen(false)} onDeckCreated={handleDeckMutation} /> setEditingDeck(null)} onDeckUpdated={handleDeckMutation} /> setDeletingDeck(null)} onDeckDeleted={handleDeckMutation} />
); }