diff options
Diffstat (limited to 'src/lib/shared/refresh-policy.ts')
| -rw-r--r-- | src/lib/shared/refresh-policy.ts | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/lib/shared/refresh-policy.ts b/src/lib/shared/refresh-policy.ts new file mode 100644 index 0000000..d79e6b7 --- /dev/null +++ b/src/lib/shared/refresh-policy.ts @@ -0,0 +1,31 @@ +/** + * 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<string, true> = { + '/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; +} |
