Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 34 additions & 10 deletions about.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import { serviceWorkerManager } from './src/ServiceWorkerManager.js';
import type {
UpdateAvailableDetail,
UpdateRestartRequiredDetail,
} from './src/ServiceWorkerManager.js';
import '/components/UpdateNotification.js';
import '/components/ConfirmationModal.js';

Expand All @@ -10,8 +14,11 @@ interface ConfirmationModal extends HTMLElement {
}

interface UpdateNotification extends HTMLElement {
show(pendingWorker: ServiceWorker | null): void;
pendingWorkerInstance: ServiceWorker | null;
show(update: UpdateAvailableDetail): void;
showRestartRequired(release: UpdateRestartRequiredDetail['release']): void;
showUnavailable(message: string): void;
showUpdating(status?: string): void;
showFailure(message: string): void;
}

const whenLoaded = Promise.all([
Expand All @@ -25,7 +32,30 @@ whenLoaded.then(async () => {

window.addEventListener('sw-update-available', event => {
console.log('Service worker update available, showing notification');
updateNotification?.show((event as CustomEvent).detail.pendingWorker);
updateNotification?.show((event as CustomEvent<UpdateAvailableDetail>).detail);
});
window.addEventListener('sw-update-restart-required', event => {
const detail = (event as CustomEvent<UpdateRestartRequiredDetail>).detail;
updateNotification?.showRestartRequired(detail.release);
});
window.addEventListener('sw-update-error', event => {
const detail = (event as CustomEvent<{ message: string }>).detail;
updateNotification?.showUnavailable(detail.message);
});
window.addEventListener('sw-update-progress', event => {
const detail = (event as CustomEvent<{ status: string }>).detail;
updateNotification?.showUpdating(detail.status);
});
updateNotification?.addEventListener('update-accepted', event => {
const pendingWorker = (event as CustomEvent<{ pendingWorker: ServiceWorker }>).detail
.pendingWorker;
serviceWorkerManager.handleUpdateNow(pendingWorker).catch(error => {
console.error('[about] Update failed:', error);
updateNotification.showFailure('Update failed. The current version remains active.');
});
});
updateNotification?.addEventListener('update-restart-requested', () => {
window.location.reload();
});

await serviceWorkerManager.register();
Expand Down Expand Up @@ -60,13 +90,7 @@ whenLoaded.then(async () => {
}

btnUpdate?.addEventListener('click', () => {
const pendingWorker =
updateNotification?.pendingWorkerInstance || serviceWorkerManager.getRegistration()?.waiting;
if (pendingWorker) {
serviceWorkerManager.handleUpdateNow(pendingWorker);
} else {
serviceWorkerManager.checkForUpdates();
}
serviceWorkerManager.checkForUpdates();
});

const btnClearCache = document.getElementById('btnClearCache') as HTMLButtonElement;
Expand Down
Loading
Loading