mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 14:21:46 +00:00
fix: add versionchange handler to close stale Dexie connection on external IDB delete
All repo mutations (places, budget, packing, todo, accommodation, reservations, files) and tripSyncManager's syncTrip() use awaited Dexie writes that would stall indefinitely under the same root cause as the dashboard cold-path hang: Dexie keeping a stale connection after DevTools "Clear site data" fires a versionchange event while the tab is open. Registering an explicit versionchange handler that calls close() lets Dexie cleanly discard the stale connection. The next operation triggers auto-reopen with a fresh IDB connection where writes succeed. This is the standard Dexie pattern and prevents the stall from affecting any part of the app. Also tighten the toArray() guard in tripRepo.list() to catch() a rejection (from a potential close() race) in addition to timing out.
This commit is contained in:
@@ -8,10 +8,11 @@ type TripRefresh = Promise<{ trip: Trip } | null>
|
||||
|
||||
export const tripRepo = {
|
||||
async list(): Promise<{ trips: Trip[]; archivedTrips: Trip[]; refresh: TripsRefresh }> {
|
||||
// 2-second guard: if Dexie is in a bad state (e.g. externally deleted while tab
|
||||
// was open), toArray() may hang. Fall back to the cold/network path.
|
||||
// Guard: if Dexie is in a bad state (e.g. externally deleted while tab was
|
||||
// open and the versionchange close() races with this read), fall back to the
|
||||
// cold/network path rather than throwing or hanging.
|
||||
const all = await Promise.race([
|
||||
offlineDb.trips.toArray(),
|
||||
offlineDb.trips.toArray().catch(() => [] as Trip[]),
|
||||
new Promise<Trip[]>(resolve => setTimeout(() => resolve([]), 2000)),
|
||||
])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user