summaryrefslogtreecommitdiff
path: root/apps/web/lib
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/lib')
-rw-r--r--apps/web/lib/queries/use-entry-state-mutations.ts20
-rw-r--r--apps/web/lib/rate-limit.ts4
2 files changed, 23 insertions, 1 deletions
diff --git a/apps/web/lib/queries/use-entry-state-mutations.ts b/apps/web/lib/queries/use-entry-state-mutations.ts
index a8c72d0..80bab79 100644
--- a/apps/web/lib/queries/use-entry-state-mutations.ts
+++ b/apps/web/lib/queries/use-entry-state-mutations.ts
@@ -65,6 +65,13 @@ export function useToggleEntryReadState() {
return { previousTimeline }
},
+ onError: (_error, _variables, context) => {
+ if (context?.previousTimeline) {
+ for (const [queryKey, queryData] of context.previousTimeline) {
+ queryClient.setQueryData(queryKey, queryData)
+ }
+ }
+ },
onSettled: () => {
queryClient.invalidateQueries({ queryKey: queryKeys.timeline.all })
queryClient.invalidateQueries({ queryKey: queryKeys.savedEntries.all })
@@ -107,6 +114,10 @@ export function useToggleEntrySavedState() {
onMutate: async ({ entryIdentifier, isSaved }) => {
await queryClient.cancelQueries({ queryKey: queryKeys.timeline.all })
+ const previousTimeline = queryClient.getQueriesData<
+ InfiniteData<TimelineEntry[]>
+ >({ queryKey: queryKeys.timeline.all })
+
queryClient.setQueriesData<InfiniteData<TimelineEntry[]>>(
{ queryKey: queryKeys.timeline.all },
(existingData) => {
@@ -124,6 +135,15 @@ export function useToggleEntrySavedState() {
}
}
)
+
+ return { previousTimeline }
+ },
+ onError: (_error, _variables, context) => {
+ if (context?.previousTimeline) {
+ for (const [queryKey, queryData] of context.previousTimeline) {
+ queryClient.setQueryData(queryKey, queryData)
+ }
+ }
},
onSettled: () => {
queryClient.invalidateQueries({ queryKey: queryKeys.timeline.all })
diff --git a/apps/web/lib/rate-limit.ts b/apps/web/lib/rate-limit.ts
index 4016781..506511d 100644
--- a/apps/web/lib/rate-limit.ts
+++ b/apps/web/lib/rate-limit.ts
@@ -12,7 +12,9 @@ export function rateLimit(
(timestamp) => timestamp > windowStart
)
- if (recentTimestamps.length >= limit) {
+ if (recentTimestamps.length === 0) {
+ requestTimestamps.delete(identifier)
+ } else if (recentTimestamps.length >= limit) {
requestTimestamps.set(identifier, recentTimestamps)
return { success: false, remaining: 0 }
}