diff --git a/src/pages/partials/card-modal.astro b/src/pages/partials/card-modal.astro index 37a53e6..fb69a80 100644 --- a/src/pages/partials/card-modal.astro +++ b/src/pages/partials/card-modal.astro @@ -27,15 +27,7 @@ const card = await db.query.cards.findFirst({ } }); -const nearMint = await db.query.skus.findFirst({ - where: { - productId: card?.productId || 0, - variant: card?.variant || "", - } -}); - -const nearMintPrice = nearMint?.marketPrice ?? null; - +const nearMint = card?.prices.find(price => price.condition === "Near Mint") || null; const calculatedAt = new Date(nearMint?.calculatedAt || 0); function timeAgo(date: any) { @@ -59,24 +51,40 @@ function timeAgo(date: any) { return "just now"; } -function getPriceVolatility({ current, low, high }) { - if (!current || !low || !high) return "—"; +const conditionOrder = ["Near Mint", "Lightly Played", "Moderately Played", "Heavily Played", "Damaged"]; - const range = high - low; - if (range <= 0) return "Low"; +const conditionAttributes = (price: any) => { + const volatility = (() => { + const current = price; + const low = price?.lowestPrice; + const high = price?.highestPrice; - const position = (current - low) / range; + if (current === null || low === null || high === null) return "—"; - if (position > 0.75) return "High"; - if (position < 0.46 || position > 0.74) return "Medium"; - return "Low"; -} + const range = Number(high) - Number(low); + if (range <= 0) return "Low"; -const volatility = getPriceVolatility({ - current: nearMintPrice, - low: nearMint?.lowestPrice, - high: nearMint?.highestPrice -}); + const position = (Number(current) - Number(low)) / range; + if (position > 0.75) return "High"; + if (position > 0.46) return "Medium"; + return "Low"; + })(); + + const volatilityClass = + volatility === "High" ? "alert-danger" : + volatility === "Medium" ? "alert-warning" : + volatility === "Low" ? "alert-success" : + ""; + + const condition: string = price?.condition || "Near Mint"; + return { + "Near Mint": { label: "nav-nm", volatility: volatility, volatilityClass: volatilityClass, class:"show active" }, + "Lightly Played": { label: "nav-lp", volatility: volatility, volatilityClass: volatilityClass }, + "Moderately Played": { label: "nav-mp", volatility: volatility, volatilityClass: volatilityClass }, + "Heavily Played": { label: "nav-hp", volatility: volatility, volatilityClass: volatilityClass }, + "Damaged": { label: "nav-dmg", volatility: volatility, volatilityClass: volatilityClass}, + }[condition]; +}; ---