summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-10 20:37:31 -0800
committerFuwn <[email protected]>2026-02-10 20:37:31 -0800
commite23bfeb24690b666e41f95ab694ae44cdbb872b2 (patch)
tree1c3b77321b69c0f93ea470f0c4730f1fdc4bdcd0 /apps
parentfix: query entry state directly instead of relying on unfiltered timeline (diff)
downloadasa.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.ts16
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 })