import { useQueries, useQuery } from "@tanstack/react-query"; import { combineCardQueries, getCardByIdQueryOptions, getCardPrintingsQueryOptions, } from "@/lib/queries"; import type { Card, OracleId, ScryfallId } from "@/lib/scryfall-types"; interface UsePrintingsResult { printings: Card[]; printingsMap: Map | undefined; isLoading: boolean; } export function usePrintings( oracleId: OracleId | undefined, ): UsePrintingsResult { const { data: printingIds, isLoading: idsLoading } = useQuery({ ...getCardPrintingsQueryOptions(oracleId ?? ("" as OracleId)), enabled: !!oracleId, }); const printingsMap = useQueries({ queries: (printingIds ?? []).map((printingId) => getCardByIdQueryOptions(printingId), ), combine: combineCardQueries, }); const printings = (printingIds ?? []) .map((pid) => printingsMap?.get(pid)) .filter((c): c is Card => c !== undefined) .sort((a, b) => (b.released_at ?? "").localeCompare(a.released_at ?? "")); return { printings, printingsMap, isLoading: idsLoading || (!!printingIds && !printingsMap), }; }