Skip to content

Commit b64fe12

Browse files
committed
feat: implement ad fetch delay and introduce useDelayedFlag hook
1 parent 73da20c commit b64fe12

File tree

5 files changed

+32
-14
lines changed

5 files changed

+32
-14
lines changed

src/features/adv/components/AdvBanner.tsx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import { useEffect, useState } from 'react'
1+
import { useEffect } from 'react'
22
import { AdPlaceholder } from 'src/components/placeholders'
3+
import { useRemoteConfigStore } from 'src/features/remoteConfig'
34
import { useUserPreferences } from 'src/stores/preferences'
45
import { useGetAd } from '../api/getAd'
6+
import { useDelayedFlag } from '../hooks/useDelayedFlag'
57
import { Ad } from '../types'
68
import './AdvBanner.css'
79

@@ -13,10 +15,9 @@ type AdvBannerProps = {
1315

1416
export const AdvBanner = ({ feedDisplay = false, loadingState, onAdLoaded }: AdvBannerProps) => {
1517
const { userSelectedTags } = useUserPreferences()
18+
const adsFetchDelayMs = useRemoteConfigStore((s) => s.adsFetchDelayMs)
19+
const isReady = useDelayedFlag(adsFetchDelayMs)
1620

17-
const [aditionalAdQueries, setAditionalAdQueries] = useState<
18-
{ [key: string]: string } | undefined
19-
>()
2021
const {
2122
isSuccess,
2223
data: ad,
@@ -25,18 +26,11 @@ export const AdvBanner = ({ feedDisplay = false, loadingState, onAdLoaded }: Adv
2526
} = useGetAd({
2627
keywords: userSelectedTags.map((tag) => tag.label.toLocaleLowerCase()),
2728
feed: true,
28-
aditionalAdQueries: aditionalAdQueries,
2929
config: {
3030
cacheTime: 0,
3131
staleTime: 0,
32+
enabled: isReady,
3233
useErrorBoundary: false,
33-
refetchInterval(data) {
34-
if (data?.nextAd) {
35-
setAditionalAdQueries(data.nextAd.queries)
36-
return data.nextAd.interval
37-
}
38-
return false
39-
},
4034
},
4135
})
4236

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { useEffect, useState, useTransition } from 'react'
2+
3+
export const useDelayedFlag = (ms: number | undefined) => {
4+
const [ready, setReady] = useState(false)
5+
const [, startTransition] = useTransition()
6+
useEffect(() => {
7+
if (ms === undefined || ms <= 0) {
8+
setReady(true)
9+
return
10+
}
11+
const t = setTimeout(() => startTransition(() => setReady(true)), ms)
12+
return () => clearTimeout(t)
13+
}, [ms])
14+
15+
return ready
16+
}

src/features/remoteConfig/api/getRemoteConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type UseGetRemoteConfigOptions = {
1515
export const useGetRemoteConfig = ({ config }: UseGetRemoteConfigOptions = {}) => {
1616
return useQuery<ExtractFnReturnType<QueryFnType>>({
1717
...config,
18-
queryKey: ['remote-config', 'v2'],
18+
queryKey: ['remote-config', 'v3'],
1919
queryFn: () => getRemoteConfig(),
2020
})
2121
}

src/features/remoteConfig/stores/remoteConfig.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ import { create } from 'zustand'
33
import { persist } from 'zustand/middleware'
44
import { RemoteConfig, Tag } from '../types'
55

6+
const DEFAULT_ADS_FETCH_DELAY_MS = 1750
67
type RemoteConfigStore = {
78
tags: Tag[]
9+
adsFetchDelayMs: number
810
setRemoteConfig: (remoteConfig: RemoteConfig) => void
911
}
1012

@@ -17,7 +19,12 @@ export const useRemoteConfigStore = create(
1719
label: 'Javascript',
1820
},
1921
],
20-
setRemoteConfig: (remoteConfig: RemoteConfig) => set({ tags: remoteConfig.tags }),
22+
adsFetchDelayMs: DEFAULT_ADS_FETCH_DELAY_MS,
23+
setRemoteConfig: (remoteConfig: RemoteConfig) =>
24+
set({
25+
tags: remoteConfig.tags,
26+
adsFetchDelayMs: remoteConfig.ads_fetch_delay_ms || DEFAULT_ADS_FETCH_DELAY_MS,
27+
}),
2128
}),
2229
{
2330
name: 'remote_config_storage',

src/features/remoteConfig/types/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export type Tag = {
66

77
export type RemoteConfig = {
88
tags: Tag[]
9+
ads_fetch_delay_ms?: number
910
}

0 commit comments

Comments
 (0)