Files
homepage/src/routes/(main)/+layout.svelte
T
Alexander 585c03a11e feat(offline): hoist sync UI to homepage, slow auto-sync to weekly
Move OfflineSyncIndicator (logo pip) and OfflineSyncBanner from the
[recipeLang] layout/page to (main)/+layout.svelte and (main)/+page.svelte.
Sync is an app-wide concern, not recipe-specific, and surfacing it on the
homepage gives the entry point users actually see when they install the
PWA. Indicator pulls language from languageStore since (main) doesn't
have data.lang from a recipe-scoped load.

Drop the now-unused .banner-wrap CSS and OfflineSyncIndicator/Banner
imports from the recipe routes.

Auto-sync cadence:
- AUTO_SYNC_INTERVAL 30 min -> 1 week. Recipes don't change often enough
  to justify a half-hourly background download (the user explicitly
  wanted this dialed back).
- Internal poll tick 5 min -> 1 hour. Polling 12x an hour for a weekly
  event is wasted work; hourly is fine and still responsive when the
  weekly window opens.

Bump 1.65.3 -> 1.66.0.
2026-05-04 22:21:16 +02:00

43 lines
964 B
Svelte

<script>
import Header from '$lib/components/Header.svelte'
import UserHeader from '$lib/components/UserHeader.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import OfflineSyncIndicator from '$lib/components/OfflineSyncIndicator.svelte';
import { languageStore } from '$lib/stores/language.svelte';
let { data, children } = $props();
let user = $derived(data.session?.user);
</script>
<Header fullSymbol={true}>
{#snippet language_selector_mobile()}
<LanguageSelector />
{/snippet}
{#snippet language_selector_desktop()}
<LanguageSelector />
{/snippet}
{#snippet logo_overlay()}
<div class="logo-pip">
<OfflineSyncIndicator lang={languageStore.value} />
</div>
{/snippet}
{#snippet right_side()}
<UserHeader {user}></UserHeader>
{/snippet}
{@render children()}
</Header>
<style>
:global(.logo-pip) {
position: absolute;
top: -8px;
right: -7px;
z-index: 2;
pointer-events: auto;
}
</style>