chore: convert useEnterprise to TS

This commit is contained in:
Gustav Hansen 2023-10-09 14:21:02 +02:00
parent 045254c459
commit 3a008ccc64
4 changed files with 40 additions and 10 deletions

View File

@ -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;
};
}
}

View File

@ -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<any>,
options?: UseEnterpriseOptions<any, any, any>
) {
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];
},
});

View File

@ -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<TCEData, TEEData, TCombinedData> {
defaultValue?: TCEData | TEEData | null;
combine?: (ceData: TCEData, eeData: TEEData) => TCEData | TEEData | TCombinedData;
enabled?: boolean;
}
export function useEnterprise<TCEData, TEEData, TCombinedData = unknown>(
ceData: TCEData,
eeCallback: () => Promise<TEEData>,
{
defaultValue = null,
combine = (ceData: TCEData, eeData: TEEData) => eeData,
enabled = true,
}: UseEnterpriseOptions<TCEData, TEEData, TCombinedData> = {}
) {
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,
});

View File

@ -1 +0,0 @@
export * from './useEnterprise';