diff --git a/packages/outdated-browser/src/__tests__/index.ts b/packages/outdated-browser/src/__tests__/index.ts index 6e8fb2e4c..3fe7dedd7 100644 --- a/packages/outdated-browser/src/__tests__/index.ts +++ b/packages/outdated-browser/src/__tests__/index.ts @@ -7,7 +7,7 @@ const localStorageMock = (() => { return { getItem(key: string): unknown { - return store?.[key] || null + return store[key] || null }, setItem(key: string, value: unknown) { store[key] = value?.toString() @@ -42,7 +42,10 @@ describe('@outdated-browser', () => { jest.restoreAllMocks() sessionStorage.clear() // Clear dom for next test - document.getElementsByTagName('html')[0].innerHTML = '' + const htmlDocument = document.getElementsByTagName('html')[0] + if (htmlDocument) { + htmlDocument.innerHTML = '' + } fakeUA = undefined }) diff --git a/packages/random-name/src/index.ts b/packages/random-name/src/index.ts index 5f6e90fec..4e476c8fc 100644 --- a/packages/random-name/src/index.ts +++ b/packages/random-name/src/index.ts @@ -826,8 +826,8 @@ const NAMES = [ const randomName = (prefix = '', separator = '-'): string => { const name = `${ - ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)] - }${separator}${NAMES[Math.floor(Math.random() * NAMES.length)]}` + ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)] ?? '' + }${separator}${NAMES[Math.floor(Math.random() * NAMES.length)] ?? ''}` /* Steve Wozniak is not boring. This is part of the docker names spec. */ if (name === `boring${separator}wozniak`) { diff --git a/packages/use-dataloader/src/DataLoaderProvider.tsx b/packages/use-dataloader/src/DataLoaderProvider.tsx index 4f97f818c..2aebf4630 100644 --- a/packages/use-dataloader/src/DataLoaderProvider.tsx +++ b/packages/use-dataloader/src/DataLoaderProvider.tsx @@ -76,7 +76,8 @@ const DataLoaderProvider = ({ ) const getRequest = useCallback( - (key: string) => requestsRef.current[computeKey(key)], + (key: string): DataLoader | undefined => + requestsRef.current[computeKey(key)], [computeKey], ) @@ -114,13 +115,11 @@ const DataLoaderProvider = ({ const clearCachedData = useCallback( (key: string) => { - if (typeof key === 'string') { - if (requestsRef.current[computeKey(key)]) { - requestsRef.current[computeKey(key)].clearData() - } + if (key && typeof key === 'string') { + getRequest(key)?.clearData() } else throw new Error(KEY_IS_NOT_STRING_ERROR) }, - [computeKey], + [getRequest], ) const clearAllCachedData = useCallback(() => { Object.values(requestsRef.current).forEach(request => { @@ -149,12 +148,12 @@ const DataLoaderProvider = ({ return getRequest(key)?.getData() } - return Object.values(requestsRef.current).reduce( + return Object.values(requestsRef.current).reduce( (acc, request) => ({ ...acc, [request.key]: request.getData(), }), - {} as CachedData, + {}, ) }, [getRequest], @@ -163,15 +162,15 @@ const DataLoaderProvider = ({ const getReloads = useCallback( (key?: string) => { if (key) { - return getRequest(key) ? () => getRequest(key).load(true) : undefined + return getRequest(key) ? () => getRequest(key)?.load(true) : undefined } - return Object.entries(requestsRef.current).reduce( + return Object.entries(requestsRef.current).reduce( (acc, [requestKey, { load }]) => ({ ...acc, [requestKey]: () => load(true), }), - {} as Reloads, + {}, ) }, [getRequest], diff --git a/packages/use-dataloader/src/__tests__/DataLoaderProvider.test.tsx b/packages/use-dataloader/src/__tests__/DataLoaderProvider.test.tsx index 15013e06d..587663e6a 100644 --- a/packages/use-dataloader/src/__tests__/DataLoaderProvider.test.tsx +++ b/packages/use-dataloader/src/__tests__/DataLoaderProvider.test.tsx @@ -129,7 +129,7 @@ describe('DataLoaderProvider', () => { expect(result.current.getRequest(TEST_KEY)).toBeDefined() const unknownReload = result.current.getReloads('unknown') expect(unknownReload).toBeUndefined() - await reloads?.['test']() + await reloads['test']?.() expect(method).toBeCalledTimes(3) await result.current.reloadAll() expect(method).toBeCalledTimes(4) diff --git a/packages/use-dataloader/src/__tests__/useDataLoader.test.tsx b/packages/use-dataloader/src/__tests__/useDataLoader.test.tsx index ab2e6b35a..e13897d51 100644 --- a/packages/use-dataloader/src/__tests__/useDataLoader.test.tsx +++ b/packages/use-dataloader/src/__tests__/useDataLoader.test.tsx @@ -199,19 +199,19 @@ describe('useDataLoader', () => { }, ) - expect(result.current[0].data).toBe(undefined) - expect(result.current[0].isLoading).toBe(true) - expect(result.current[1].data).toBe(undefined) - expect(result.current[1].isIdle).toBe(true) - await waitFor(() => expect(result.current[0].isSuccess).toBe(true)) - expect(result.current[0].data).toBe(true) - - result.current[1].reload().catch(undefined) - await waitFor(() => expect(result.current[1].isLoading).toBe(true)) - expect(result.current[1].data).toBe(undefined) - - await waitFor(() => expect(result.current[1].isSuccess).toBe(true)) - expect(result.current[1].data).toBe(true) + expect(result.current[0]?.data).toBe(undefined) + expect(result.current[0]?.isLoading).toBe(true) + expect(result.current[1]?.data).toBe(undefined) + expect(result.current[1]?.isIdle).toBe(true) + await waitFor(() => expect(result.current[0]?.isSuccess).toBe(true)) + expect(result.current[0]?.data).toBe(true) + + result.current[1]?.reload().catch(undefined) + await waitFor(() => expect(result.current[1]?.isLoading).toBe(true)) + expect(result.current[1]?.data).toBe(undefined) + + await waitFor(() => expect(result.current[1]?.isSuccess).toBe(true)) + expect(result.current[1]?.data).toBe(true) }) test('should render correctly with enabled true', async () => { @@ -693,23 +693,23 @@ describe('useDataLoader', () => { }, ) - expect(result.current[0].data).toBe(undefined) - expect(result.current[0].isLoading).toBe(true) - expect(result.current[0].isIdle).toBe(false) - expect(result.current[0].isSuccess).toBe(false) - expect(result.current[1].data).toBe(undefined) - expect(result.current[1].isIdle).toBe(false) - expect(result.current[1].isSuccess).toBe(false) - expect(result.current[1].isLoading).toBe(true) - await waitFor(() => expect(result.current[0].isSuccess).toBe(true)) - expect(result.current[0].data).toBe(true) - - result.current[1].reload().catch(undefined) - await waitFor(() => expect(result.current[1].isLoading).toBe(true)) - expect(result.current[1].data).toBe(true) - - await waitFor(() => expect(result.current[1].isSuccess).toBe(true)) - expect(result.current[1].isSuccess).toBe(true) + expect(result.current[0]?.data).toBe(undefined) + expect(result.current[0]?.isLoading).toBe(true) + expect(result.current[0]?.isIdle).toBe(false) + expect(result.current[0]?.isSuccess).toBe(false) + expect(result.current[1]?.data).toBe(undefined) + expect(result.current[1]?.isIdle).toBe(false) + expect(result.current[1]?.isSuccess).toBe(false) + expect(result.current[1]?.isLoading).toBe(true) + await waitFor(() => expect(result.current[0]?.isSuccess).toBe(true)) + expect(result.current[0]?.data).toBe(true) + + result.current[1]?.reload().catch(undefined) + await waitFor(() => expect(result.current[1]?.isLoading).toBe(true)) + expect(result.current[1]?.data).toBe(true) + + await waitFor(() => expect(result.current[1]?.isSuccess).toBe(true)) + expect(result.current[1]?.isSuccess).toBe(true) expect(fakePromise).toBeCalledTimes(2) }) @@ -782,20 +782,20 @@ describe('useDataLoader', () => { wrapper, }, ) - expect(result.current[0].data).toBe(undefined) - expect(result.current[0].isLoading).toBe(true) - expect(result.current[0].previousData).toBe(undefined) + expect(result.current[0]?.data).toBe(undefined) + expect(result.current[0]?.isLoading).toBe(true) + expect(result.current[0]?.previousData).toBe(undefined) expect(testingProps.method).toBeCalledTimes(1) - await waitFor(() => expect(result.current[0].isSuccess).toBe(true)) + await waitFor(() => expect(result.current[0]?.isSuccess).toBe(true)) testingProps.config2.enabled = true rerender(testingProps) expect(testingProps.method).toBeCalledTimes(1) - expect(result.current[0].data).toBe(true) - expect(result.current[1].data).toBe(true) - expect(result.current[0].isLoading).toBe(false) - expect(result.current[1].isLoading).toBe(false) - expect(result.current[0].previousData).toBe(undefined) - expect(result.current[1].previousData).toBe(undefined) + expect(result.current[0]?.data).toBe(true) + expect(result.current[1]?.data).toBe(true) + expect(result.current[0]?.isLoading).toBe(false) + expect(result.current[1]?.isLoading).toBe(false) + expect(result.current[0]?.previousData).toBe(undefined) + expect(result.current[1]?.previousData).toBe(undefined) }) test('should render correctly with dataLifetime dont prevent double call', async () => { @@ -819,24 +819,24 @@ describe('useDataLoader', () => { wrapper, }, ) - expect(result.current[0].data).toBe(undefined) - expect(result.current[0].isLoading).toBe(true) - expect(result.current[0].previousData).toBe(undefined) + expect(result.current[0]?.data).toBe(undefined) + expect(result.current[0]?.isLoading).toBe(true) + expect(result.current[0]?.previousData).toBe(undefined) expect(testingProps.method).toBeCalledTimes(1) - await waitFor(() => expect(result.current[0].isSuccess).toBe(true)) + await waitFor(() => expect(result.current[0]?.isSuccess).toBe(true)) testingProps.config2.enabled = true rerender(testingProps) - await waitFor(() => expect(result.current[0].isLoading).toBe(true)) - await waitFor(() => expect(result.current[1].isLoading).toBe(true)) + await waitFor(() => expect(result.current[0]?.isLoading).toBe(true)) + await waitFor(() => expect(result.current[1]?.isLoading).toBe(true)) expect(testingProps.method).toBeCalledTimes(2) - expect(result.current[0].data).toBe(true) - expect(result.current[0].isLoading).toBe(true) - expect(result.current[0].previousData).toBe(undefined) - expect(result.current[1].data).toBe(true) - expect(result.current[1].isLoading).toBe(true) - expect(result.current[1].previousData).toBe(undefined) - await waitFor(() => expect(result.current[0].isSuccess).toBe(true)) - await waitFor(() => expect(result.current[1].isSuccess).toBe(true)) + expect(result.current[0]?.data).toBe(true) + expect(result.current[0]?.isLoading).toBe(true) + expect(result.current[0]?.previousData).toBe(undefined) + expect(result.current[1]?.data).toBe(true) + expect(result.current[1]?.isLoading).toBe(true) + expect(result.current[1]?.previousData).toBe(undefined) + await waitFor(() => expect(result.current[0]?.isSuccess).toBe(true)) + await waitFor(() => expect(result.current[1]?.isSuccess).toBe(true)) }) }) /* eslint-enable no-console */ diff --git a/packages/use-dataloader/src/dataloader.ts b/packages/use-dataloader/src/dataloader.ts index 776ff9ea8..9a7bdeb49 100644 --- a/packages/use-dataloader/src/dataloader.ts +++ b/packages/use-dataloader/src/dataloader.ts @@ -31,7 +31,7 @@ class DataLoader { public data?: ResultType - public observers: Array<() => void> = [] + public observers: (() => void)[] = [] public timeout?: number @@ -99,6 +99,8 @@ class DataLoader { const data = await this.method() + // This can be set to false with .cancel even while the launch is pending + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!this.isCancelled) { DataLoader.cachedData[this.key] = data this.status = StatusEnum.SUCCESS diff --git a/packages/use-dataloader/src/helpers.ts b/packages/use-dataloader/src/helpers.ts index 5c09dd793..1f5eb459a 100644 --- a/packages/use-dataloader/src/helpers.ts +++ b/packages/use-dataloader/src/helpers.ts @@ -17,4 +17,4 @@ export const marshalQueryKey = (queryKey: KeyType) => return subKey?.toString() }) .join('.') - : queryKey?.toString() + : queryKey.toString() diff --git a/packages/use-dataloader/src/useDataLoader.ts b/packages/use-dataloader/src/useDataLoader.ts index e0d8c7c33..3157845c7 100644 --- a/packages/use-dataloader/src/useDataLoader.ts +++ b/packages/use-dataloader/src/useDataLoader.ts @@ -118,7 +118,7 @@ function useDataLoader( }, [needLoad, request]) useEffect(() => { - let interval: NodeJS.Timer + let interval: NodeJS.Timer | undefined if (pollingInterval) { interval = setInterval(() => { diff --git a/packages/use-gtm/src/__tests__/__snapshots__/index.tsx.snap b/packages/use-gtm/src/__tests__/__snapshots__/index.tsx.snap index 17321feef..f6fa45e0a 100644 --- a/packages/use-gtm/src/__tests__/__snapshots__/index.tsx.snap +++ b/packages/use-gtm/src/__tests__/__snapshots__/index.tsx.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`GTM hook Provider should call onLoadError if script fail to load 1`] = ` -"