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 */}
{/* Main Content */}
{/* Section Header */}
Your Decks
{/* Deck List with Suspense */}
}>
{/* Modals */}
setIsCreateModalOpen(false)}
onDeckCreated={handleDeckMutation}
/>
setEditingDeck(null)}
onDeckUpdated={handleDeckMutation}
/>
setDeletingDeck(null)}
onDeckDeleted={handleDeckMutation}
/>
);
}