Checkpoint: Persistance "marquer comme lu" entre sessions :

- Ajout de veille.getReadIds et aap.getReadIds dans routers.ts (procédures protectedProcedure)
- VeilleDashboard.tsx : chargement des IDs lus depuis la DB au montage (useEffect sur readIdsQuery), invalidation getReadIds dans markAsRead et markAllAsRead
- AAPDashboard.tsx : même pattern
- 0 erreur TypeScript
This commit is contained in:
Manus
2026-07-10 21:08:26 -04:00
parent 465e33c3b8
commit 8782883bea
4 changed files with 42 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
import { useState, useMemo } from "react";
import { useState, useMemo, useEffect } from "react";
import { useLocalAuth } from "@/contexts/LocalAuthContext";
import { toast } from "sonner";
import { trpc } from "@/lib/trpc";
@@ -117,13 +117,23 @@ export default function AAPDashboard() {
// Marquage lu/non lu
const [readIds, setReadIds] = useState<Set<number>>(new Set());
const readIdsQuery = trpc.aap.getReadIds.useQuery(undefined, { enabled: !!user });
useEffect(() => {
if (readIdsQuery.data?.ids) {
setReadIds(new Set(readIdsQuery.data.ids));
}
}, [readIdsQuery.data]);
const markAsReadMutation = trpc.aap.markAsRead.useMutation({
onSuccess: (_, vars) => {
setReadIds((prev) => { const next = new Set(prev); next.add(vars.articleId); return next; });
utils.aap.getReadIds.invalidate();
},
});
const markAllAsReadMutation = trpc.aap.markAllAsRead.useMutation({
onSuccess: () => { utils.aap.unreadCount.invalidate(); },
onSuccess: () => {
utils.aap.unreadCount.invalidate();
utils.aap.getReadIds.invalidate();
},
});
const unreadCountQuery = trpc.aap.unreadCount.useQuery();
const unreadCount = unreadCountQuery.data?.count ?? 0;

View File

@@ -1,4 +1,4 @@
import { useState, useMemo } from "react";
import { useState, useMemo, useEffect } from "react";
import { useLocalAuth } from "@/contexts/LocalAuthContext";
import { toast } from "sonner";
import { trpc } from "@/lib/trpc";
@@ -234,14 +234,22 @@ export default function VeilleDashboard() {
// Marquage lu/non lu
const [readIds, setReadIds] = useState<Set<number>>(new Set());
const readIdsQuery = trpc.veille.getReadIds.useQuery(undefined, { enabled: !!user });
useEffect(() => {
if (readIdsQuery.data?.ids) {
setReadIds(new Set(readIdsQuery.data.ids));
}
}, [readIdsQuery.data]);
const markAsReadMutation = trpc.veille.markAsRead.useMutation({
onSuccess: (_, vars) => {
setReadIds((prev) => { const next = new Set(prev); next.add(vars.articleId); return next; });
utils.veille.getReadIds.invalidate();
},
});
const markAllAsReadMutation = trpc.veille.markAllAsRead.useMutation({
onSuccess: () => {
utils.veille.unreadCount.invalidate();
utils.veille.getReadIds.invalidate();
},
});
const unreadCountQuery = trpc.veille.unreadCount.useQuery();