diff options
| author | Fuwn <[email protected]> | 2026-02-10 20:37:31 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-02-10 20:37:31 -0800 |
| commit | e23bfeb24690b666e41f95ab694ae44cdbb872b2 (patch) | |
| tree | 1c3b77321b69c0f93ea470f0c4730f1fdc4bdcd0 /apps | |
| parent | fix: query entry state directly instead of relying on unfiltered timeline (diff) | |
| download | asa.news-e23bfeb24690b666e41f95ab694ae44cdbb872b2.tar.xz asa.news-e23bfeb24690b666e41f95ab694ae44cdbb872b2.zip | |
fix: mark-all-read undo only reverts affected entries
RPC now returns uuid[] of affected entry IDs. Undo passes those IDs
back via p_entry_ids so only entries that actually changed are reverted.
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/web/lib/queries/use-mark-all-as-read.ts | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/apps/web/lib/queries/use-mark-all-as-read.ts b/apps/web/lib/queries/use-mark-all-as-read.ts index d2ba82e..14d9b35 100644 --- a/apps/web/lib/queries/use-mark-all-as-read.ts +++ b/apps/web/lib/queries/use-mark-all-as-read.ts @@ -15,22 +15,25 @@ export function useMarkAllAsRead() { feedIdentifier, folderIdentifier, readState = true, + entryIdentifiers, }: { feedIdentifier?: string | null folderIdentifier?: string | null readState?: boolean + entryIdentifiers?: string[] } = {}) => { const { data, error } = await supabaseClient.rpc("mark_all_as_read", { p_feed_id: feedIdentifier ?? null, p_folder_id: folderIdentifier ?? null, p_read_state: readState, + p_entry_ids: entryIdentifiers ?? null, }) if (error) throw error - return data as number + return (data as string[]) ?? [] }, - onSuccess: (affectedCount, variables) => { + onSuccess: (affectedEntryIdentifiers, variables) => { queryClient.invalidateQueries({ queryKey: queryKeys.timeline.all }) queryClient.invalidateQueries({ queryKey: queryKeys.unreadCounts.all }) queryClient.invalidateQueries({ queryKey: queryKeys.savedEntries.all }) @@ -38,16 +41,17 @@ export function useMarkAllAsRead() { const action = variables?.readState === false ? "unread" : "read" const undoReadState = !(variables?.readState ?? true) - if (affectedCount > 0) { - toast(`marked ${affectedCount} entries as ${action}`, { + if (affectedEntryIdentifiers.length > 0) { + toast(`marked ${affectedEntryIdentifiers.length} entries as ${action}`, { action: { label: "undo", onClick: () => { supabaseClient .rpc("mark_all_as_read", { - p_feed_id: variables?.feedIdentifier ?? null, - p_folder_id: variables?.folderIdentifier ?? null, + p_feed_id: null, + p_folder_id: null, p_read_state: undoReadState, + p_entry_ids: affectedEntryIdentifiers, }) .then(() => { queryClient.invalidateQueries({ queryKey: queryKeys.timeline.all }) |