/** * Routes whose page data must not be refetched in the background: edit pages * hold in-progress work, and refreshing the login form is pointless. */ export const EXCLUDED_ROUTES: Record = { '/login': true, '/grocery/[id]': true, '/projects/[projectId]/routine/[routineId]': true, }; export interface RefreshConditions { /** `$page.route.id`; null when no route matched yet. */ routeId: string | null | undefined; /** Document is visible (not a backgrounded tab). */ visible: boolean; /** Browser reports a network connection. */ online: boolean; /** A navigation or form action is already in flight. */ navigating: boolean; } /** A background refetch may re-run the page load only if nothing is at stake. */ export function shouldAutoRefresh({ routeId, visible, online, navigating, }: RefreshConditions): boolean { if (!routeId || routeId in EXCLUDED_ROUTES) return false; return visible && online && !navigating; }