diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/hooks/__mocks__/useNavigatorOnline.ts b/packages/core/admin/admin/src/pages/MarketplacePage/hooks/__mocks__/useNavigatorOnline.ts new file mode 100644 index 0000000000..c52098a095 --- /dev/null +++ b/packages/core/admin/admin/src/pages/MarketplacePage/hooks/__mocks__/useNavigatorOnline.ts @@ -0,0 +1 @@ +export const useNavigatorOnline = () => true; diff --git a/packages/core/admin/admin/src/hooks/useNavigatorOnLine/tests/index.test.js b/packages/core/admin/admin/src/pages/MarketplacePage/hooks/tests/useNavigatorOnline.test.ts similarity index 77% rename from packages/core/admin/admin/src/hooks/useNavigatorOnLine/tests/index.test.js rename to packages/core/admin/admin/src/pages/MarketplacePage/hooks/tests/useNavigatorOnline.test.ts index 4b08738f0a..a3adc68f5a 100644 --- a/packages/core/admin/admin/src/hooks/useNavigatorOnLine/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/hooks/tests/useNavigatorOnline.test.ts @@ -1,18 +1,18 @@ import { act, renderHook, waitFor } from '@testing-library/react'; -import useNavigatorOnLine from '../index'; +import { useNavigatorOnline } from '../useNavigatorOnline'; -describe('useNavigatorOnLine', () => { +describe('useNavigatorOnline', () => { it('returns the online state', () => { jest.spyOn(window.navigator, 'onLine', 'get').mockReturnValue(true); - const { result } = renderHook(() => useNavigatorOnLine()); + const { result } = renderHook(() => useNavigatorOnline()); expect(result.current).toEqual(true); }); it('returns the offline state', () => { jest.spyOn(window.navigator, 'onLine', 'get').mockReturnValue(false); - const { result } = renderHook(() => useNavigatorOnLine()); + const { result } = renderHook(() => useNavigatorOnline()); expect(result.current).toEqual(false); }); @@ -20,7 +20,7 @@ describe('useNavigatorOnLine', () => { it('listens for network change online', async () => { // Initialize an offline state jest.spyOn(window.navigator, 'onLine', 'get').mockReturnValue(false); - const { result } = renderHook(() => useNavigatorOnLine()); + const { result } = renderHook(() => useNavigatorOnline()); await act(async () => { // Simulate a change from offline to online @@ -35,7 +35,7 @@ describe('useNavigatorOnLine', () => { it('listens for network change offline', async () => { // Initialize an online state jest.spyOn(window.navigator, 'onLine', 'get').mockReturnValue(true); - const { result } = renderHook(() => useNavigatorOnLine()); + const { result } = renderHook(() => useNavigatorOnline()); await act(async () => { // Simulate a change from online to offline diff --git a/packages/core/admin/admin/src/hooks/useNavigatorOnLine/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/hooks/useNavigatorOnline.ts similarity index 76% rename from packages/core/admin/admin/src/hooks/useNavigatorOnLine/index.js rename to packages/core/admin/admin/src/pages/MarketplacePage/hooks/useNavigatorOnline.ts index f2fed9c827..94bb6ab8c7 100644 --- a/packages/core/admin/admin/src/hooks/useNavigatorOnLine/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/hooks/useNavigatorOnline.ts @@ -1,21 +1,21 @@ -import { useEffect, useState } from 'react'; +import * as React from 'react'; /** * For more details about this hook see: * https://www.30secondsofcode.org/react/s/use-navigator-on-line */ -const useNavigatorOnLine = () => { +export const useNavigatorOnline = (): boolean => { const onlineStatus = typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean' ? navigator.onLine : true; - const [isOnline, setIsOnline] = useState(onlineStatus); + const [isOnline, setIsOnline] = React.useState(onlineStatus); const setOnline = () => setIsOnline(true); const setOffline = () => setIsOnline(false); - useEffect(() => { + React.useEffect(() => { window.addEventListener('online', setOnline); window.addEventListener('offline', setOffline); @@ -27,5 +27,3 @@ const useNavigatorOnLine = () => { return isOnline; }; - -export default useNavigatorOnLine; diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/index.js index 4f07924e4d..d4df98c6b0 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/index.js @@ -26,7 +26,6 @@ import { useIntl } from 'react-intl'; import { useSelector } from 'react-redux'; import useDebounce from '../../hooks/useDebounce'; -import useNavigatorOnLine from '../../hooks/useNavigatorOnLine'; import { selectAdminPermissions } from '../App/selectors'; import MissingPluginBanner from './components/MissingPluginBanner'; @@ -36,6 +35,7 @@ import NpmPackagesPagination from './components/NpmPackagesPagination'; import OfflineLayout from './components/OfflineLayout'; import PageHeader from './components/PageHeader'; import SortSelect from './components/SortSelect'; +import { useNavigatorOnline } from './hooks/useNavigatorOnline'; import useMarketplaceData from './utils/useMarketplaceData'; const MarketPlacePage = () => { @@ -47,7 +47,7 @@ const MarketPlacePage = () => { const debouncedSearch = useDebounce(query?.search, 500) || ''; const { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = useAppInfo(); - const isOnline = useNavigatorOnLine(); + const isOnline = useNavigatorOnline(); const npmPackageType = query?.npmPackageType || 'plugin'; diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/tests/index.test.js b/packages/core/admin/admin/src/pages/MarketplacePage/tests/index.test.js index a76c2b65e4..b325830a79 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/tests/index.test.js @@ -12,7 +12,7 @@ import { MarketPlacePage } from '../index'; import server from './server'; -jest.mock('../../../hooks/useNavigatorOnLine', () => jest.fn(() => true)); +jest.mock('../hooks/useNavigatorOnline'); jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/tests/plugins.test.js b/packages/core/admin/admin/src/pages/MarketplacePage/tests/plugins.test.js index 4b1e460e2c..d75d534df2 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/tests/plugins.test.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/tests/plugins.test.js @@ -14,7 +14,7 @@ import server from './server'; // Increase the jest timeout to accommodate long running tests jest.setTimeout(50000); -jest.mock('../../../hooks/useNavigatorOnLine', () => jest.fn(() => true)); +jest.mock('../hooks/useNavigatorOnline'); jest.mock('../../../hooks/useDebounce', () => (value) => value); jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/tests/providers.test.js b/packages/core/admin/admin/src/pages/MarketplacePage/tests/providers.test.js index f7ddf4e296..839b5aa9fb 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/tests/providers.test.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/tests/providers.test.js @@ -19,7 +19,7 @@ jest.setTimeout(50000); * MOCKS */ jest.mock('../../../hooks/useDebounce', () => (value) => value); -jest.mock('../../../hooks/useNavigatorOnLine', () => jest.fn(() => true)); +jest.mock('../hooks/useNavigatorOnline'); jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), useAppInfo: jest.fn(() => ({