diff --git a/apps/frontend/src/features/analysis/AnalysisPage.tsx b/apps/frontend/src/features/analysis/AnalysisPage.tsx index 1d36873..a32d92a 100644 --- a/apps/frontend/src/features/analysis/AnalysisPage.tsx +++ b/apps/frontend/src/features/analysis/AnalysisPage.tsx @@ -1,5 +1,5 @@ import { Link, useNavigate } from "@tanstack/react-router"; -import { subDays } from "date-fns"; +import { subDays, subMonths } from "date-fns"; import { ArrowLeft } from "lucide-react"; import { useMemo, useState } from "react"; import { @@ -13,7 +13,12 @@ import { YAxis, } from "recharts"; import { DatePicker } from "@/components/ui/date-picker"; -import { useDailyQuotes, useHistoricalMinMax, useQuotes } from "@/lib/queries"; +import { + useDailyQuotes, + useHistoricalMinMax, + useMonthlyLast, + useQuotes, +} from "@/lib/queries"; import { MonthlyVariationTable } from "./components/MonthlyVariationTable"; const CURRENCIES = ["BELO", "BLUE", "BNA"] as const; @@ -86,19 +91,13 @@ export function AnalysisPage({ currency }: { currency: string }) { const yesterday = subDays(today, 1); const yesterdayStr = formatDate(yesterday); - const firstOfMonth = new Date(today.getFullYear(), today.getMonth(), 1); - const firstOfMonthStr = formatDate(firstOfMonth); const { data: yesterdayQuote } = useDailyQuotes( currency, yesterdayStr, yesterdayStr, ); - const { data: firstDayQuote } = useDailyQuotes( - currency, - firstOfMonthStr, - firstOfMonthStr, - ); + const { data: monthlyLastData } = useMonthlyLast(); const chartData = useMemo(() => { if (!daily) return []; @@ -184,11 +183,21 @@ export function AnalysisPage({ currency }: { currency: string }) { ? (prevDayDiff / yesterdayBuy) * 100 : null; - const firstMonthBuy = firstDayQuote?.[0]?.buy ?? null; - const monthDiff = firstMonthBuy !== null ? currentBuy - firstMonthBuy : null; + const previousMonthBuy = useMemo(() => { + if (!monthlyLastData || monthlyLastData.length === 0) return null; + const prevMonth = subMonths(today, 1); + const prevMonthKey = `${prevMonth.getFullYear()}-${String(prevMonth.getMonth() + 1).padStart(2, "0")}`; + const entry = monthlyLastData.find( + (e) => e.month === prevMonthKey && e.type === currency, + ); + return entry?.buy ?? null; + }, [monthlyLastData, currency, today]); + + const monthDiff = + previousMonthBuy !== null ? currentBuy - previousMonthBuy : null; const monthPct = - monthDiff !== null && firstMonthBuy !== null && firstMonthBuy !== 0 - ? (monthDiff / firstMonthBuy) * 100 + monthDiff !== null && previousMonthBuy !== null && previousMonthBuy !== 0 + ? (monthDiff / previousMonthBuy) * 100 : null; const backTo = currency === "BELO" ? "/quotes/belo" : "/quotes"; @@ -305,9 +314,7 @@ export function AnalysisPage({ currency }: { currency: string }) {
-

- Vs. primer día del mes -

+

Vs. mes anterior