Skip to content

fix: correct online state on startup instead of waiting for a network event - #3147

Merged
afonsojramos merged 3 commits into
mainfrom
fix/online-state
Aug 6, 2026
Merged

fix: correct online state on startup instead of waiting for a network event#3147
afonsojramos merged 3 commits into
mainfrom
fix/online-state

Conversation

@setchy

@setchy setchy commented Aug 4, 2026

Copy link
Copy Markdown
Member

Problem
TanStack Query's onlineManager initializes to online: true regardless of the device's actual network state, and only self-corrects when the browser fires a native online/offline event. Since browsers only emit events on transitions, a device that's already offline when Gitify launches (airplane mode, VPN down, etc.) never gets one — so the app incorrectly believes it's online from the first render, fires the notifications query, and only discovers it's offline after that query fails and retries.

Fix
Added a single onlineManager.setOnline(navigator.onLine) call at the start of useOnlineStatus's mount effect, before the existing subscription logic. This actively force-corrects onlineManager's state to match reality on startup, instead of passively waiting for a future browser event that may never come.

Signed-off-by: Adam Setch <adam.setch@outlook.com>
@setchy
setchy requested a review from afonsojramos as a code owner August 4, 2026 14:32
@github-actions github-actions Bot added the bug Something isn't working label Aug 4, 2026
@sonarqubecloud

sonarqubecloud Bot commented Aug 4, 2026

Copy link
Copy Markdown

@afonsojramos afonsojramos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified the offline cold-start path and the follow-ups pushed here.

Moving the correction to queryClient.ts module scope means it runs at import, before the client exists and therefore before any query can fire — so it no longer depends on GlobalEffects rendering ahead of the router or on useOnlineStatus() being declared above useNotifications(). Seeding useState from onlineManager.isOnline() keeps a single source of truth and drops the one frame that painted as online.

Also replaced the confirms onlineManager as online when the device starts online case: it passed with the production line deleted (onlineManager already defaults to true, and setOnline only notifies on change). The replacements start from the opposite state in both directions and I confirmed both fail without the fix.

@afonsojramos
afonsojramos enabled auto-merge (squash) August 6, 2026 17:46
@afonsojramos
afonsojramos disabled auto-merge August 6, 2026 18:01
@afonsojramos
afonsojramos merged commit 1110bde into main Aug 6, 2026
5 of 7 checks passed
@afonsojramos
afonsojramos deleted the fix/online-state branch August 6, 2026 18:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Development

Successfully merging this pull request may close these issues.

2 participants