Skip to content

Commit 3fb4124

Browse files
Franc BeleFranc Bele
Franc Bele
authored and
Franc Bele
committed
revamped the SW according to the latest docs
1 parent 2f95323 commit 3fb4124

File tree

7 files changed

+86
-23
lines changed

7 files changed

+86
-23
lines changed

src/app.html

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
<link rel="icon" type="image/png" href="%sveltekit.assets%/favicon.png" />
88

99
<!-- PWA stuff -->
10-
<link rel="manifest" href="%sveltekit.assets%/manifest.webmanifest">
1110
<base href="/" />
1211
<meta name="viewport"
1312
content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />

src/lib/ReloadPrompt.svelte

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<script lang="ts">
2+
import { useRegisterSW } from "virtual:pwa-register/svelte";
3+
const { needRefresh, updateServiceWorker, offlineReady } = useRegisterSW({
4+
onRegistered(r) {
5+
// uncomment following code if you want check for updates
6+
// r && setInterval(() => {
7+
// console.log('Checking for sw update')
8+
// r.update()
9+
// }, 20000 /* 20s for testing purposes */)
10+
console.log(`SW Registered: ${r}`);
11+
},
12+
onRegisterError(error) {
13+
console.log("SW registration error", error);
14+
},
15+
});
16+
const close = () => {
17+
offlineReady.set(false);
18+
needRefresh.set(false);
19+
};
20+
$: toast = $offlineReady || $needRefresh;
21+
</script>
22+
23+
{#if toast}
24+
<div class="pwa-toast" role="alert">
25+
<div class="message">
26+
{#if $offlineReady}
27+
<span>App ready to work offline</span>
28+
{:else}
29+
<span>
30+
New content available, click on reload button to update.
31+
</span>
32+
{/if}
33+
</div>
34+
{#if $needRefresh}
35+
<button on:click={() => updateServiceWorker(true)}>Reload</button>
36+
{/if}
37+
<button on:click={close}>Close</button>
38+
</div>
39+
{/if}
40+
41+
<style>
42+
.pwa-toast {
43+
position: fixed;
44+
right: 0;
45+
bottom: 0;
46+
margin: 16px;
47+
padding: 12px;
48+
border: 1px solid #8885;
49+
border-radius: 4px;
50+
z-index: 2;
51+
text-align: left;
52+
box-shadow: 3px 4px 5px 0 #8885;
53+
background-color: white;
54+
}
55+
.pwa-toast .message {
56+
margin-bottom: 8px;
57+
}
58+
.pwa-toast button {
59+
border: 1px solid #8885;
60+
outline: none;
61+
margin-right: 5px;
62+
border-radius: 2px;
63+
padding: 3px 10px;
64+
}
65+
</style>

src/routes/+layout.svelte

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import './styles.css';
44
import { listenForBeforeInstallPrompt } from '$lib/pwa.store';
55
import { onMount } from 'svelte';
6+
import { pwaInfo } from "virtual:pwa-info";
67
78
// we do implicit registration of service worker using the Readable API in pwa.store.ts
89
@@ -23,7 +24,16 @@
2324
console.log(`Attaching 'beforeinstallprompt' listeners.`);
2425
listenForBeforeInstallPrompt();
2526
});
27+
28+
$: webManifestLink = pwaInfo ? pwaInfo.webManifest.linkTag : "";
2629
</script>
2730

28-
<svelte:head />
31+
<svelte:head>
32+
{@html webManifestLink}
33+
</svelte:head>
34+
2935
<slot />
36+
37+
{#await import('$lib/ReloadPrompt.svelte') then {default: ReloadPrompt}}
38+
<ReloadPrompt />
39+
{/await}

src/service-worker/index.ts

-16
This file was deleted.

svelte.config.js

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ const config = {
1717
precompress: false,
1818
strict: true
1919
})
20+
},
21+
serviceWorker: {
22+
register: false
2023
}
2124
};
2225

tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
],
77
"types": [
88
"ionic-svelte",
9+
"vite-plugin-pwa/info",
910
"vite-plugin-pwa/svelte"
1011
],
1112
"allowJs": true,

vite.config.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import { sveltekit } from '@sveltejs/kit/vite';
22
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
3-
import { VitePWA } from 'vite-plugin-pwa';
43
import mkcert from 'vite-plugin-mkcert';
54

6-
75
const pwaManifest = {
86
name: "Ionic SSR demo",
97
short_name: "IonicSSRDemo",
108
description: "Ionic SSR demo",
119
theme_color: '#f27649',
1210
orientation: "portrait",
1311
start_url: "/app/splash",
12+
id: "/",
13+
background_color: "#ffffff",
14+
lang: "en",
1415
icons: [
1516
// The original 192x192 icon size was actually 512x512
1617
{
@@ -42,14 +43,14 @@ const pwaConfiguration = {
4243
/** @type {import('vite').UserConfig} */
4344
const config = {
4445
define: {
45-
// we need it for 'workbox-precaching'
46-
'process.env.NODE_ENV': '"production"'
46+
'process.env.NODE_ENV': process.env.NODE_ENV === 'production'
47+
? '"production"'
48+
: '"development"'
4749
},
4850
plugins: [
4951
sveltekit(),
5052
// a plugin for enabling provisional certificate for https preview server
5153
mkcert(),
52-
// VitePWA(pwaConfiguration)
5354
SvelteKitPWA(pwaConfiguration)
5455
],
5556
// for service worker to work properly the PWA needs to be running on https protocol

0 commit comments

Comments
 (0)