From 9c19b22a66766018f91262f9d1bd243cdecfa884 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 26 Jun 2024 17:03:45 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(service-worker)=20create=20u?= =?UTF-8?q?seSWRegister=20hook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Create useSWRegister hook, which will be used to register the service worker in the app. --- .../{_app.test.tsx => useSWRegister.test.tsx} | 29 +++++-------------- .../service-worker/hooks/useSWRegister.tsx | 16 ++++++++++ .../src/features/service-worker/index.ts | 1 + src/frontend/apps/impress/src/pages/_app.tsx | 16 ++-------- 4 files changed, 26 insertions(+), 36 deletions(-) rename src/frontend/apps/impress/src/features/service-worker/__tests__/{_app.test.tsx => useSWRegister.test.tsx} (62%) create mode 100644 src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx create mode 100644 src/frontend/apps/impress/src/features/service-worker/index.ts diff --git a/src/frontend/apps/impress/src/features/service-worker/__tests__/_app.test.tsx b/src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx similarity index 62% rename from src/frontend/apps/impress/src/features/service-worker/__tests__/_app.test.tsx rename to src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx index 91017b3d..36f4ad4f 100644 --- a/src/frontend/apps/impress/src/features/service-worker/__tests__/_app.test.tsx +++ b/src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx @@ -1,26 +1,15 @@ import '@testing-library/jest-dom'; import { render } from '@testing-library/react'; -import { Router } from 'next/router'; -import { PropsWithChildren, ReactElement } from 'react'; -import App from '@/pages/_app'; -import { AppWrapper } from '@/tests/utils'; -import { NextPageWithLayout } from '@/types/next'; +import { useSWRegister } from '../hooks/useSWRegister'; + +const TestComponent = () => { + useSWRegister(); -const Page: NextPageWithLayout = () => { return
Test Page
; }; -Page.getLayout = function getLayout(page: ReactElement) { - return
{page}
; -}; - -jest.mock('@/core/', () => ({ - ...jest.requireActual('@/core/'), - AppProvider: ({ children }: PropsWithChildren) =>
{children}
, -})); - -describe('App', () => { +describe('useSWRegister', () => { it('checks service-worker is register', () => { process.env.NEXT_PUBLIC_BUILD_ID = '123456'; jest.spyOn(console, 'error').mockImplementation(() => {}); @@ -39,9 +28,7 @@ describe('App', () => { writable: true, }); - render(, { - wrapper: AppWrapper, - }); + render(); expect(registerSpy).toHaveBeenCalledWith('/service-worker.js?v=123456'); }); @@ -64,9 +51,7 @@ describe('App', () => { writable: true, }); - render(, { - wrapper: AppWrapper, - }); + render(); expect(registerSpy).not.toHaveBeenCalledWith('/service-worker.js?v=123456'); }); diff --git a/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx b/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx new file mode 100644 index 00000000..eadeecc7 --- /dev/null +++ b/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx @@ -0,0 +1,16 @@ +import { useEffect } from 'react'; + +export const useSWRegister = () => { + useEffect(() => { + if ( + 'serviceWorker' in navigator && + process.env.NEXT_PUBLIC_SW_DEACTIVATED !== 'true' + ) { + navigator.serviceWorker + .register(`/service-worker.js?v=${process.env.NEXT_PUBLIC_BUILD_ID}`) + .catch((err) => { + console.error('Service worker registration failed:', err); + }); + } + }, []); +}; diff --git a/src/frontend/apps/impress/src/features/service-worker/index.ts b/src/frontend/apps/impress/src/features/service-worker/index.ts new file mode 100644 index 00000000..79604f23 --- /dev/null +++ b/src/frontend/apps/impress/src/features/service-worker/index.ts @@ -0,0 +1 @@ +export * from './hooks/useSWRegister'; diff --git a/src/frontend/apps/impress/src/pages/_app.tsx b/src/frontend/apps/impress/src/pages/_app.tsx index c78ded8b..61793e38 100644 --- a/src/frontend/apps/impress/src/pages/_app.tsx +++ b/src/frontend/apps/impress/src/pages/_app.tsx @@ -1,9 +1,9 @@ import type { AppProps } from 'next/app'; import Head from 'next/head'; -import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { AppProvider } from '@/core/'; +import { useSWRegister } from '@/features/service-worker/'; import { NextPageWithLayout } from '@/types/next'; import './globals.css'; @@ -13,22 +13,10 @@ type AppPropsWithLayout = AppProps & { }; export default function App({ Component, pageProps }: AppPropsWithLayout) { + useSWRegister(); const getLayout = Component.getLayout ?? ((page) => page); const { t } = useTranslation(); - useEffect(() => { - if ( - 'serviceWorker' in navigator && - process.env.NEXT_PUBLIC_SW_DEACTIVATED !== 'true' - ) { - navigator.serviceWorker - .register(`/service-worker.js?v=${process.env.NEXT_PUBLIC_BUILD_ID}`) - .catch((err) => { - console.error('Service worker registration failed:', err); - }); - } - }, []); - return ( <>