feat: onglet Marchés + TvMiniChart sans popup + cache RP 48h + OIS default

- page.tsx: onglet '🌍 Marchés' — S&P 500, VIX, DXY, Or (TvMiniChart 2x2)
- TvChart: prop dateRange configurable sur TvMiniChart (défaut 1M)
- ReportTab: TvAdvancedChart → TvMiniChart (plus de popup TV), Or remplace US10Y
  S&P 500/VIX dateRange=12M (daily), DXY/Or dateRange=60M (weekly)
- rateprobability: cache TTL 4h → 48h (OIS revient même sans GitHub Actions hourly)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
caty21
2026-06-27 22:02:53 +02:00
co-authored by Claude Sonnet 4.6
parent dc801638d8
commit cf70e30db6
4 changed files with 34 additions and 15 deletions
+20 -2
View File
@@ -14,6 +14,7 @@ import YieldsTab from "@/components/YieldsTab";
import NewsTab from "@/components/NewsTab";
import CotTab from "@/components/CotTab";
import ReportTab from "@/components/ReportTab";
import { TvMiniChart } from "@/components/TvChart";
import type { CalendarEvent } from "@/app/api/calendar/route";
import type { NewsItem } from "@/app/api/news/route";
import type { CotHistory } from "@/app/api/cot-history/route";
@@ -28,7 +29,7 @@ export default function Dashboard() {
const [cot, setCot] = useState<Record<string, CotEntry> | null>(null);
const [calEvents, setCalEvents] = useState<CalendarEvent[]>([]);
const [nextWeekAvail, setNextWeekAvail] = useState(false);
const [activeTab, setActiveTab] = useState<"dashboard" | "calendar" | "pairs" | "yields" | "news" | "cot" | "report">("dashboard");
const [activeTab, setActiveTab] = useState<"dashboard" | "calendar" | "pairs" | "yields" | "news" | "cot" | "report" | "markets">("dashboard");
const [newsItems, setNewsItems] = useState<NewsItem[]>([]);
const [newsLoading, setNewsLoading] = useState(false);
const [cotHistory, setCotHistory] = useState<CotHistory | null>(null);
@@ -350,7 +351,7 @@ export default function Dashboard() {
{/* Tab navigation */}
<div className="flex gap-0 border-b border-slate-800 mb-4">
{(["dashboard", "calendar", "pairs", "yields", "news", "cot", "report"] as const).map((tab) => (
{(["dashboard", "markets", "calendar", "pairs", "yields", "news", "cot", "report"] as const).map((tab) => (
<button
key={tab}
onClick={() => setActiveTab(tab)}
@@ -361,6 +362,7 @@ export default function Dashboard() {
}`}
>
{tab === "dashboard" ? "Dashboard"
: tab === "markets" ? "🌍 Marchés"
: tab === "calendar" ? "📅 Calendrier"
: tab === "pairs" ? "↕ Paires"
: tab === "yields" ? "📈 Yields 10Y"
@@ -597,6 +599,22 @@ export default function Dashboard() {
</>
)}
{activeTab === "markets" && (
<div className="space-y-6">
<div className="flex items-center gap-4">
<div className="h-px flex-1 bg-sky-500/20" />
<span className="text-sky-400 text-xs font-bold uppercase tracking-[0.3em]">Vue d&apos;ensemble · Marchés Globaux</span>
<div className="h-px flex-1 bg-sky-500/20" />
</div>
<div className="grid grid-cols-2 gap-4">
<TvMiniChart symbol="SP:SPX" label="S&P 500 · Daily" dateRange="12M" height={220} />
<TvMiniChart symbol="TVC:VIX" label="VIX · Daily" dateRange="12M" height={220} />
<TvMiniChart symbol="TVC:DXY" label="DXY Dollar Index · Weekly" dateRange="60M" height={220} />
<TvMiniChart symbol="TVC:GOLD" label="Or (XAU/USD) · Weekly" dateRange="60M" height={220} />
</div>
</div>
)}
{activeTab === "calendar" && (
<CalendarTab events={calEvents} loading={loading} nextWeekAvail={nextWeekAvail} />
)}