Skip to content

Commit b11366f

Browse files
committed
♻️(service-worker) improve SW registration and update handling
It is apparently a bad practice to add the version number to the service worker file name. This prevents the browser from properly updating the service worker when a new version is available. We improve the update handling by a more usual pattern.
1 parent 91eba31 commit b11366f

File tree

3 files changed

+9
-8
lines changed

3 files changed

+9
-8
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ and this project adheres to
3030
- ♿ add h1 for SR on 40X pages and remove alt texts #1438
3131
- ♿ update labels and shared document icon accessibility #1442
3232
- 🍱(frontend) Fonts GDPR compliants #1453
33+
- ♻️(service-worker) improve SW registration and update handling #1473
3334

3435
### Fixed
3536

src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ const TestComponent = () => {
1111

1212
describe('useSWRegister', () => {
1313
it('checks service-worker is register', () => {
14-
process.env.NEXT_PUBLIC_BUILD_ID = '123456';
1514
vi.spyOn(console, 'error').mockImplementation(() => {});
1615

1716
const registerSpy = vi.fn();
@@ -35,7 +34,7 @@ describe('useSWRegister', () => {
3534

3635
render(<TestComponent />);
3736

38-
expect(registerSpy).toHaveBeenCalledWith('/service-worker.js?v=123456');
37+
expect(registerSpy).toHaveBeenCalledWith('/service-worker.js');
3938
expect(addEventListenerSpy).toHaveBeenCalledWith(
4039
'controllerchange',
4140
expect.any(Function),
@@ -44,7 +43,6 @@ describe('useSWRegister', () => {
4443

4544
it('checks service-worker is not register', () => {
4645
process.env.NEXT_PUBLIC_SW_DEACTIVATED = 'true';
47-
process.env.NEXT_PUBLIC_BUILD_ID = '123456';
4846

4947
const registerSpy = vi.fn();
5048
registerSpy.mockImplementation(
@@ -62,6 +60,6 @@ describe('useSWRegister', () => {
6260

6361
render(<TestComponent />);
6462

65-
expect(registerSpy).not.toHaveBeenCalledWith('/service-worker.js?v=123456');
63+
expect(registerSpy).not.toHaveBeenCalledWith('/service-worker.js');
6664
});
6765
});

src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export const useSWRegister = () => {
77
process.env.NEXT_PUBLIC_SW_DEACTIVATED !== 'true'
88
) {
99
navigator.serviceWorker
10-
.register(`/service-worker.js?v=${process.env.NEXT_PUBLIC_BUILD_ID}`)
10+
.register(`/service-worker.js`)
1111
.then((registration) => {
1212
registration.onupdatefound = () => {
1313
const newWorker = registration.installing;
@@ -29,11 +29,13 @@ export const useSWRegister = () => {
2929
console.error('Service worker registration failed:', err);
3030
});
3131

32-
const currentController = navigator.serviceWorker.controller;
32+
let refreshing = false;
3333
const onControllerChange = () => {
34-
if (currentController) {
35-
window.location.reload();
34+
if (refreshing) {
35+
return;
3636
}
37+
refreshing = true;
38+
window.location.reload();
3739
};
3840
navigator.serviceWorker.addEventListener(
3941
'controllerchange',

0 commit comments

Comments
 (0)