Skip to content

Commit 50dba0a

Browse files
committed
Merge branch 'develop' of github.com:medyo/hackertab.dev into develop
2 parents 48da26c + 969a450 commit 50dba0a

File tree

6 files changed

+35
-25
lines changed

6 files changed

+35
-25
lines changed

src/features/adv/api/getAd.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,8 @@ import { axios } from 'src/lib/axios'
33
import { ExtractFnReturnType, QueryConfig } from 'src/lib/react-query'
44
import { Ad } from '../types'
55

6-
const getAd = async (
7-
keywords: string[],
8-
feed: boolean = false,
9-
aditionalAdQueries: { [key: string]: string } | undefined
10-
): Promise<Ad | null> => {
6+
const getAd = async (keywords: string[], feed: boolean = false): Promise<Ad | null> => {
117
let params = { keywords: keywords.join(','), feed: feed ? 'true' : 'false' }
12-
if (aditionalAdQueries) {
13-
params = { ...params, ...aditionalAdQueries }
14-
}
158
return axios.get('/engine/ads/', { params })
169
}
1710

@@ -21,12 +14,11 @@ type UseGetAdOptions = {
2114
keywords: string[]
2215
feed?: boolean
2316
config?: QueryConfig<QueryFnType>
24-
aditionalAdQueries: { [key: string]: string } | undefined
2517
}
26-
export const useGetAd = ({ keywords, feed, config, aditionalAdQueries }: UseGetAdOptions) => {
18+
export const useGetAd = ({ keywords, feed, config }: UseGetAdOptions) => {
2719
return useQuery<ExtractFnReturnType<QueryFnType>>({
2820
...config,
2921
queryKey: ['ad', keywords.join(',')],
30-
queryFn: () => getAd(keywords, feed, aditionalAdQueries),
22+
queryFn: () => getAd(keywords, feed),
3123
})
3224
}

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)