From 3a008ccc64805f2cc9e9b6de2fcc7731082c9f3a Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Mon, 9 Oct 2023 14:21:02 +0200 Subject: [PATCH] chore: convert useEnterprise to TS --- packages/core/admin/admin/custom.d.ts | 17 ++++++++++++++++ .../useEnterprise.test.ts} | 12 +++++++---- .../useEnterprise.js => useEnterprise.ts} | 20 ++++++++++++++----- .../admin/src/hooks/useEnterprise/index.js | 1 - 4 files changed, 40 insertions(+), 10 deletions(-) rename packages/core/admin/admin/src/hooks/{useEnterprise/tests/useEnterprise.test.js => tests/useEnterprise.test.ts} (86%) rename packages/core/admin/admin/src/hooks/{useEnterprise/useEnterprise.js => useEnterprise.ts} (54%) delete mode 100644 packages/core/admin/admin/src/hooks/useEnterprise/index.js diff --git a/packages/core/admin/admin/custom.d.ts b/packages/core/admin/admin/custom.d.ts index 718602df09..593192617a 100644 --- a/packages/core/admin/admin/custom.d.ts +++ b/packages/core/admin/admin/custom.d.ts @@ -6,3 +6,20 @@ declare module 'styled-components' { // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface DefaultTheme extends StrapiTheme {} } + +declare global { + interface Window { + strapi: { + backendURL: string; + isEE: boolean; + features: { + SSO: 'sso'; + AUDIT_LOGS: 'audit-logs'; + REVIEW_WORKFLOWS: 'review-workflows'; + isEnabled: (featureName?: string) => boolean; + }; + projectType: 'Community' | 'Enterprise'; + telemetryDisabled: boolean; + }; + } +} diff --git a/packages/core/admin/admin/src/hooks/useEnterprise/tests/useEnterprise.test.js b/packages/core/admin/admin/src/hooks/tests/useEnterprise.test.ts similarity index 86% rename from packages/core/admin/admin/src/hooks/useEnterprise/tests/useEnterprise.test.js rename to packages/core/admin/admin/src/hooks/tests/useEnterprise.test.ts index 96b3a59e79..e2660144e1 100644 --- a/packages/core/admin/admin/src/hooks/useEnterprise/tests/useEnterprise.test.js +++ b/packages/core/admin/admin/src/hooks/tests/useEnterprise.test.ts @@ -1,12 +1,16 @@ import { renderHook, waitFor } from '@testing-library/react'; -import { useEnterprise } from '../useEnterprise'; +import { useEnterprise, UseEnterpriseOptions } from '../useEnterprise'; const CE_DATA_FIXTURE = ['CE']; const EE_DATA_FIXTURE = ['EE']; -function setup(...args) { - return renderHook(() => useEnterprise(...args)); +function setup( + ceData: any, + eeCallback: () => Promise, + options?: UseEnterpriseOptions +) { + return renderHook(() => useEnterprise(ceData, eeCallback, options)); } describe('useEnterprise (CE)', () => { @@ -36,7 +40,7 @@ describe('useEnterprise (EE)', () => { test('Combines CE and EE data', async () => { const { result } = setup(CE_DATA_FIXTURE, async () => EE_DATA_FIXTURE, { - combine(ceData, eeData) { + combine(ceData: string[], eeData: string[]) { return [...ceData, ...eeData]; }, }); diff --git a/packages/core/admin/admin/src/hooks/useEnterprise/useEnterprise.js b/packages/core/admin/admin/src/hooks/useEnterprise.ts similarity index 54% rename from packages/core/admin/admin/src/hooks/useEnterprise/useEnterprise.js rename to packages/core/admin/admin/src/hooks/useEnterprise.ts index 03ab26c88f..1534031ece 100644 --- a/packages/core/admin/admin/src/hooks/useEnterprise/useEnterprise.js +++ b/packages/core/admin/admin/src/hooks/useEnterprise.ts @@ -6,17 +6,27 @@ function isEnterprise() { return window.strapi.isEE; } -export function useEnterprise( - ceData, - eeCallback, - { defaultValue = null, combine = (ceData, eeData) => eeData, enabled = true } = {} +export interface UseEnterpriseOptions { + defaultValue?: TCEData | TEEData | null; + combine?: (ceData: TCEData, eeData: TEEData) => TCEData | TEEData | TCombinedData; + enabled?: boolean; +} + +export function useEnterprise( + ceData: TCEData, + eeCallback: () => Promise, + { + defaultValue = null, + combine = (ceData: TCEData, eeData: TEEData) => eeData, + enabled = true, + }: UseEnterpriseOptions = {} ) { const eeCallbackRef = useCallbackRef(eeCallback); const combineCallbackRef = useCallbackRef(combine); // We have to use a nested object here, because functions (e.g. Components) // can not be stored as value directly - const [{ data }, setData] = React.useState({ + const [{ data }, setData] = React.useState<{ data: TCEData | TEEData | TCombinedData | null }>({ data: isEnterprise() && enabled ? defaultValue : ceData, }); diff --git a/packages/core/admin/admin/src/hooks/useEnterprise/index.js b/packages/core/admin/admin/src/hooks/useEnterprise/index.js deleted file mode 100644 index 72bb02a9a4..0000000000 --- a/packages/core/admin/admin/src/hooks/useEnterprise/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './useEnterprise';