From e9ee4789b758c42a61aaebde1a2241ba93f90de3 Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Wed, 4 Oct 2023 14:41:57 +0200 Subject: [PATCH] chore(admin): convert useRegenerate to TS --- packages/core/admin/admin/src/hooks/index.js | 1 - .../components/Tokens/Regenerate/index.js | 2 +- .../hooks/tests/useRegenerate.test.tsx} | 20 +++++++++---------- .../SettingsPage/hooks/useRegenerate.ts} | 20 ++++++++++++------- .../EditView/components/Regenerate/index.js | 2 +- .../src/features/Notifications.tsx | 8 +++++--- 6 files changed, 29 insertions(+), 24 deletions(-) rename packages/core/admin/admin/src/{hooks/useRegenerate/tests/index.test.js => pages/SettingsPage/hooks/tests/useRegenerate.test.tsx} (72%) rename packages/core/admin/admin/src/{hooks/useRegenerate/index.js => pages/SettingsPage/hooks/useRegenerate.ts} (64%) diff --git a/packages/core/admin/admin/src/hooks/index.js b/packages/core/admin/admin/src/hooks/index.js index 56c3abcd88..c7380d757e 100644 --- a/packages/core/admin/admin/src/hooks/index.js +++ b/packages/core/admin/admin/src/hooks/index.js @@ -3,7 +3,6 @@ export { useContentTypes } from './useContentTypes'; export { default as useLicenseLimitNotification } from './useLicenseLimitNotification'; export { default as useMenu } from './useMenu'; export { default as usePermissionsDataManager } from './usePermissionsDataManager'; -export { default as useRegenerate } from './useRegenerate'; export { default as useReleaseNotification } from './useReleaseNotification'; export { default as useSettingsForm } from './useSettingsForm'; export { default as useSettingsMenu } from './useSettingsMenu'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js index e232566eb3..7650bf4af1 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js @@ -6,7 +6,7 @@ import { Refresh } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useRegenerate } from '../../../../../hooks'; +import { useRegenerate } from '../../../hooks/useRegenerate'; export const Regenerate = ({ onRegenerate, idToRegenerate, backUrl, onError }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/hooks/useRegenerate/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/hooks/tests/useRegenerate.test.tsx similarity index 72% rename from packages/core/admin/admin/src/hooks/useRegenerate/tests/index.test.js rename to packages/core/admin/admin/src/pages/SettingsPage/hooks/tests/useRegenerate.test.tsx index 8b698f257c..0d71ba6157 100644 --- a/packages/core/admin/admin/src/hooks/useRegenerate/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/hooks/tests/useRegenerate.test.tsx @@ -1,9 +1,9 @@ -import React from 'react'; +/* eslint-disable check-file/filename-naming-convention */ import { renderHook } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import useRegenerate from '../index'; +import { useRegenerate } from '../useRegenerate'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), @@ -18,19 +18,17 @@ jest.mock('@strapi/helper-plugin', () => ({ }), }), })); -// eslint-disable-next-line react/prop-types -function RegenerateWrapper({ children }) { - return ( - - {children} - - ); -} describe('useRegenerate', () => { it('returns a function to regenerate the data and a boolean', () => { const { result } = renderHook(() => useRegenerate('/test', 1, (accessKey) => accessKey), { - wrapper: RegenerateWrapper, + wrapper({ children }) { + return ( + + {children} + + ); + }, }); expect(result.current).toEqual({ diff --git a/packages/core/admin/admin/src/hooks/useRegenerate/index.js b/packages/core/admin/admin/src/pages/SettingsPage/hooks/useRegenerate.ts similarity index 64% rename from packages/core/admin/admin/src/hooks/useRegenerate/index.js rename to packages/core/admin/admin/src/pages/SettingsPage/hooks/useRegenerate.ts index b8b7e34285..61f27da0c7 100644 --- a/packages/core/admin/admin/src/hooks/useRegenerate/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/hooks/useRegenerate.ts @@ -1,8 +1,14 @@ import { useState } from 'react'; import { useAPIErrorHandler, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { AxiosError } from 'axios'; -const useRegenerate = (url, id, onRegenerate, onError) => { +export const useRegenerate = ( + url: string, + id: number | string, + onRegenerate: (accessKey: string) => void, + onError?: (error: unknown) => void +): { isLoadingConfirmation: boolean; regenerateData: () => void } => { const [isLoadingConfirmation, setIsLoadingConfirmation] = useState(false); const toggleNotification = useNotification(); const { post } = useFetchClient(); @@ -23,10 +29,12 @@ const useRegenerate = (url, id, onRegenerate, onError) => { if (onError) { onError(error); } else { - toggleNotification({ - type: 'warning', - message: formatAPIError(error), - }); + if (error instanceof AxiosError) { + toggleNotification({ + type: 'warning', + message: formatAPIError(error), + }); + } } } }; @@ -36,5 +44,3 @@ const useRegenerate = (url, id, onRegenerate, onError) => { isLoadingConfirmation, }; }; - -export default useRegenerate; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js index 99a56a9f04..6de90778fa 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js @@ -6,7 +6,7 @@ import { Refresh } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useRegenerate } from '../../../../../../../hooks'; +import { useRegenerate } from '../../../../../hooks/useRegenerate'; export const Regenerate = ({ onRegenerate, idToRegenerate }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/helper-plugin/src/features/Notifications.tsx b/packages/core/helper-plugin/src/features/Notifications.tsx index 21dacd9c02..4ab681c7bc 100644 --- a/packages/core/helper-plugin/src/features/Notifications.tsx +++ b/packages/core/helper-plugin/src/features/Notifications.tsx @@ -44,7 +44,9 @@ export interface NotificationsContextValue { toggleNotification: (config: NotificationConfig) => void; } -const NotificationsContext = React.createContext(null); +const NotificationsContext = React.createContext({ + toggleNotification: () => {}, +}); /* ------------------------------------------------------------------------------------------------- * Provider @@ -255,10 +257,10 @@ const Notification = ({ * import { useNotification } from '@strapi/helper-plugin'; * * const MyComponent = () => { - * const { toggleNotification } = useNotification(); + * const toggleNotification = useNotification(); * * return ; */ -const useNotification = () => React.useContext(NotificationsContext)?.toggleNotification; +const useNotification = () => React.useContext(NotificationsContext).toggleNotification; export { NotificationsContext, NotificationsProvider, useNotification };