Show an offline/server-unreachable banner so actions don't fail silently #133
Labels
No labels
app:activities
app:chat
app:events
app:forum
app:libra
app:market
app:restaurant
app:tasks
app:wallet
app:webapp
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiolabs/webapp#133
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
When the backend server is down or the device can't reach it (no network, server restart, NAT/relay hiccup), the webapp gives no up-front signal. A user can go all the way through a multi-step flow — e.g. composing and submitting a transaction in libra — only to have it error out at the final submit. From their side this looks like a bug or a broken feature, and the wasted effort is frustrating. They have no way to know the real cause is "the server isn't reachable right now."
Proposed solution
A global connectivity banner, shown across the webapp (and standalone apps), that surfaces when the app is offline or the server is unreachable. When the banner is visible, the user understands why an action might fail before they invest effort in it.
Behaviour to consider:
navigator.onLine/offline/onlineevents) and server unreachable (API requests failing / health-check timing out even though the device has connectivity — the two are distinct and worth distinguishing in the message).Why it matters
Affects every module, but libra's transaction-entry flow is the motivating example: a long form that errors only at the end reads as a product bug rather than a transient connectivity issue. A shared banner fixes this once for all modules.
Scope
Cross-cutting — belongs in the shared app shell so all modules (and the standalone PWAs) inherit it, rather than being re-implemented per module.