import {
faChevronLeft,
faCirclePlay,
faLayerGroup,
faPlus,
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { useAtomValue } from "jotai";
import { Suspense, useState } from "react";
import { Link, useParams } from "wouter";
import { cardsByDeckAtomFamily, deckByIdAtomFamily } from "../atoms";
import { CreateNoteModal } from "../components/CreateNoteModal";
import { ErrorBoundary } from "../components/ErrorBoundary";
import { LoadingSpinner } from "../components/LoadingSpinner";
import { queryClient } from "../queryClient";
function DeckHeader({ deckId }: { deckId: string }) {
const { data: deck } = useAtomValue(deckByIdAtomFamily(deckId));
return (
{deck.name}
{deck.description &&
{deck.description}
}
);
}
function DeckStats({ deckId }: { deckId: string }) {
const { data: deck } = useAtomValue(deckByIdAtomFamily(deckId));
const { data: cards } = useAtomValue(cardsByDeckAtomFamily(deckId));
return (
);
}
function DeckContent({
deckId,
onCreateNote,
}: {
deckId: string;
onCreateNote: () => void;
}) {
return (
}
>
{/* Deck Stats */}
}
>
{/* Action Buttons */}
{/* Study Button */}
Study Now
{/* Add Note Button */}
{/* View Cards Link */}
View Cards
);
}
export function DeckDetailPage() {
const { deckId } = useParams<{ deckId: string }>();
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
if (!deckId) {
return (
Invalid deck ID
Back to decks
);
}
return (
{/* Header */}
{/* Main Content */}
}>
setIsCreateModalOpen(true)}
/>
setIsCreateModalOpen(false)}
onNoteCreated={() => {
queryClient.invalidateQueries({
queryKey: ["decks", deckId, "cards"],
});
}}
/>
);
}