diff --git a/app/page.tsx b/app/page.tsx
index e61a99c..a309c83 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -14,7 +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 { TvAdvancedChart } 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";
@@ -607,10 +607,10 @@ export default function Dashboard() {
-
-
-
-
+
+
+
+
)}
diff --git a/components/NewsTab.tsx b/components/NewsTab.tsx
index 9357eaf..0a2f500 100644
--- a/components/NewsTab.tsx
+++ b/components/NewsTab.tsx
@@ -91,7 +91,7 @@ interface Props {
}
export default function NewsTab({ items, loading, onRefresh }: Props) {
- const [selectedCats, setSelectedCats] = useState>(new Set());
+ const [selectedCats, setSelectedCats] = useState([]);
const [filterDir, setFilterDir] = useState<"all" | "bullish" | "bearish">("all");
const [priorityOnly, setPriorityOnly] = useState(false);
const [autoRefresh, setAutoRefresh] = useState(true);
@@ -106,23 +106,20 @@ export default function NewsTab({ items, loading, onRefresh }: Props) {
}, [autoRefresh, onRefresh]);
const toggleCat = (cat: string) => {
- setSelectedCats(prev => {
- const next = new Set(prev);
- if (next.has(cat)) next.delete(cat);
- else next.add(cat);
- return next;
- });
+ setSelectedCats(prev =>
+ prev.includes(cat) ? prev.filter(c => c !== cat) : [...prev, cat]
+ );
};
// Filtre + tri — articles avec catégories macro et articles sans
const { topFiltered, otherItems } = useMemo(() => {
- const hasActiveFilter = selectedCats.size > 0 || filterDir !== "all" || priorityOnly;
+ const hasActiveFilter = selectedCats.length > 0 || filterDir !== "all" || priorityOnly;
// Articles filtrés (tous)
const allFiltered = items
.filter(item => {
if (priorityOnly && !item.categories.some(c => HIGH_PRIO.has(c))) return false;
- if (selectedCats.size > 0 && !item.categories.some(c => selectedCats.has(c))) return false;
+ if (selectedCats.length > 0 && !item.categories.some(c => selectedCats.includes(c))) return false;
if (filterDir !== "all" && !item.impacts.some(i => i.direction === filterDir)) return false;
return true;
})
@@ -143,14 +140,14 @@ export default function NewsTab({ items, loading, onRefresh }: Props) {
// Boutons de catégories : dynamiques + catégories "toujours visibles"
const activeCats = useMemo(() => {
- const set = new Set();
- for (const item of items) item.categories.forEach(c => set.add(c));
- ALWAYS_VISIBLE.forEach(c => set.add(c)); // toujours afficher ces catégories
- return PRIORITY_CATS.filter(c => set.has(c));
+ const seen = new Set();
+ for (const item of items) item.categories.forEach(c => seen.add(c));
+ ALWAYS_VISIBLE.forEach(c => seen.add(c));
+ return PRIORITY_CATS.filter(c => seen.has(c));
}, [items]);
- const anyFilter = selectedCats.size > 0 || filterDir !== "all" || priorityOnly;
- const clearFilters = () => { setSelectedCats(new Set()); setFilterDir("all"); setPriorityOnly(false); };
+ const anyFilter = selectedCats.length > 0 || filterDir !== "all" || priorityOnly;
+ const clearFilters = () => { setSelectedCats([]); setFilterDir("all"); setPriorityOnly(false); };
return (
@@ -226,9 +223,9 @@ export default function NewsTab({ items, loading, onRefresh }: Props) {
Catégorie
-