Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions packages/outdated-browser/src/__tests__/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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
})

Expand Down
4 changes: 2 additions & 2 deletions packages/random-name/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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`) {
Expand Down
21 changes: 10 additions & 11 deletions packages/use-dataloader/src/DataLoaderProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ const DataLoaderProvider = ({
)

const getRequest = useCallback(
(key: string) => requestsRef.current[computeKey(key)],
(key: string): DataLoader<unknown, unknown> | undefined =>
requestsRef.current[computeKey(key)],
[computeKey],
)

Expand Down Expand Up @@ -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 => {
Expand Down Expand Up @@ -149,12 +148,12 @@ const DataLoaderProvider = ({
return getRequest(key)?.getData()
}

return Object.values(requestsRef.current).reduce(
return Object.values(requestsRef.current).reduce<CachedData>(
(acc, request) => ({
...acc,
[request.key]: request.getData(),
}),
{} as CachedData,
{},
)
},
[getRequest],
Expand All @@ -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<Reloads>(
(acc, [requestKey, { load }]) => ({
...acc,
[requestKey]: () => load(true),
}),
{} as Reloads,
{},
)
},
[getRequest],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
108 changes: 54 additions & 54 deletions packages/use-dataloader/src/__tests__/useDataLoader.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down Expand Up @@ -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)
})

Expand Down Expand Up @@ -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 () => {
Expand All @@ -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 */
4 changes: 3 additions & 1 deletion packages/use-dataloader/src/dataloader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class DataLoader<ResultType, ErrorType> {

public data?: ResultType

public observers: Array<() => void> = []
public observers: (() => void)[] = []

public timeout?: number

Expand Down Expand Up @@ -99,6 +99,8 @@ class DataLoader<ResultType, ErrorType> {

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
Expand Down
2 changes: 1 addition & 1 deletion packages/use-dataloader/src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ export const marshalQueryKey = (queryKey: KeyType) =>
return subKey?.toString()
})
.join('.')
: queryKey?.toString()
: queryKey.toString()
2 changes: 1 addition & 1 deletion packages/use-dataloader/src/useDataLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ function useDataLoader<ResultType = unknown, ErrorType = Error>(
}, [needLoad, request])

useEffect(() => {
let interval: NodeJS.Timer
let interval: NodeJS.Timer | undefined

if (pollingInterval) {
interval = setInterval(() => {
Expand Down
8 changes: 4 additions & 4 deletions packages/use-gtm/src/__tests__/__snapshots__/index.tsx.snap
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`GTM hook Provider should call onLoadError if script fail to load 1`] = `
"<script src="https://www.googletagmanager.com/gtm.js?id=testId"></script><script>window.dataLayer = window.dataLayer || [];</script><script>(function(w,d,s,l,i){w[l]=w[l]||[];
"<script>window.dataLayer = window.dataLayer || [];</script><script src="https://www.googletagmanager.com/gtm.js?id=testId"></script><script>(function(w,d,s,l,i){w[l]=w[l]||[];
w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl+'';
Expand All @@ -16,7 +16,7 @@ exports[`GTM hook Provider should call onLoadError if script fail to load 1`] =
`;

exports[`GTM hook Provider should load env when environment auth is missing 1`] = `
"<script src="https://www.googletagmanager.com/gtm.js?id=testId"></script><script>window.dataLayer = window.dataLayer || [];</script><script>(function(w,d,s,l,i){w[l]=w[l]||[];
"<script>window.dataLayer = window.dataLayer || [];</script><script src="https://www.googletagmanager.com/gtm.js?id=testId"></script><script>(function(w,d,s,l,i){w[l]=w[l]||[];
w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl+'';
Expand All @@ -31,7 +31,7 @@ exports[`GTM hook Provider should load env when environment auth is missing 1`]
`;

exports[`GTM hook Provider should load when id and environment is provided 1`] = `
"<script src="https://www.googletagmanager.com/gtm.js?id=testId&amp;gtm_auth=gtm&amp;gtm_preview=world&amp;gtm_cookies_win=x"></script><script>window.dataLayer = window.dataLayer || [];</script><script>(function(w,d,s,l,i){w[l]=w[l]||[];
"<script>window.dataLayer = window.dataLayer || [];</script><script src="https://www.googletagmanager.com/gtm.js?id=testId&amp;gtm_auth=gtm&amp;gtm_preview=world&amp;gtm_cookies_win=x"></script><script>(function(w,d,s,l,i){w[l]=w[l]||[];
w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl+'&gtm_auth=gtm&gtm_preview=world&gtm_cookies_win=x';
Expand All @@ -46,7 +46,7 @@ exports[`GTM hook Provider should load when id and environment is provided 1`] =
`;

exports[`GTM hook Provider should load when id is provided 1`] = `
"<script src="https://www.googletagmanager.com/gtm.js?id=testId"></script><script>window.dataLayer = window.dataLayer || [];</script><script>(function(w,d,s,l,i){w[l]=w[l]||[];
"<script>window.dataLayer = window.dataLayer || [];</script><script src="https://www.googletagmanager.com/gtm.js?id=testId"></script><script>(function(w,d,s,l,i){w[l]=w[l]||[];
w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl+'';
Expand Down
2 changes: 1 addition & 1 deletion packages/use-gtm/src/__tests__/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ describe('GTM hook', () => {
try {
renderHook(() => useGTM())
} catch (error) {
expect((error as Error)?.message).toBe(
expect((error as Error).message).toBe(
'useGTM must be used within a GTMProvider',
)
}
Expand Down
2 changes: 1 addition & 1 deletion packages/use-gtm/src/scripts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export const DATALAYER_NAME = 'dataLayer'
export const LOAD_ERROR_EVENT = 'gtm_loading_error'

const flattenEnvironment = (environment?: GTMEnvironment) =>
environment && environment.auth
environment?.auth
? `&${Object.entries({ ...environment, cookies_win: 'x' })
.filter(([, value]) => !!value)
.map(([key, value]) => `gtm_${key}=${value}`, '')
Expand Down
8 changes: 4 additions & 4 deletions packages/use-gtm/src/useGTM.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ declare global {
}

export const sendGTM = (data: DataLayerEvent) => {
window?.[DATALAYER_NAME]?.push(data)
window[DATALAYER_NAME]?.push(data)
}

const GTMContext = createContext<GTMContextInterface | undefined>(undefined)
Expand Down Expand Up @@ -56,9 +56,9 @@ function GTMProvider<T extends Events>({
environment,
)

document.head.insertBefore(dataLayerInit, document.head.childNodes[0])
document.head.insertBefore(script, document.head.childNodes[1])
document.body.insertBefore(noScript, document.body.childNodes[0])
document.head.prepend(script)
document.head.prepend(dataLayerInit)
document.body.prepend(noScript)

if (onLoadError) document.addEventListener(LOAD_ERROR_EVENT, onLoadError)

Expand Down
Loading