Skip to content

Commit d11a05a

Browse files
committed
fix ads display
1 parent ba27ea5 commit d11a05a

File tree

5 files changed

+93
-41
lines changed

5 files changed

+93
-41
lines changed

src/components/Layout/DNDLayout/DNDLayout.css

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
transform: translate(0, 10px);
1010
filter: blur(1px);
1111
}
12-
12+
.dndState .blockContent {
13+
scroll-snap-type: none;
14+
}
1315
.DNDContent {
1416
min-height: 100%;
1517
display: flex;

src/components/Layout/DesktopCards.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useLayoutEffect, useRef } from 'react'
22
import SortableList, { SortableItem } from 'react-easy-sort'
33
import { SUPPORTED_CARDS } from 'src/config'
44
import { CustomRssCard } from 'src/features/cards'
5+
import { useRemoteConfigStore } from 'src/features/remoteConfig'
56
import { trackPageDrag } from 'src/lib/analytics'
67
import { useUserPreferences } from 'src/stores/preferences'
78
import { SelectedCard, SupportedCardType } from 'src/types'
@@ -16,6 +17,7 @@ export const DesktopCards = ({
1617
const AVAILABLE_CARDS = [...SUPPORTED_CARDS, ...userCustomCards]
1718
const { updateCardOrder } = useUserPreferences()
1819
const scrollHolderRef = useRef<HTMLElement | null>(null)
20+
const { adsConfig } = useRemoteConfigStore()
1921

2022
const onSortEnd = (oldIndex: number, newIndex: number) => {
2123
updateCardOrder(oldIndex, newIndex)
@@ -50,7 +52,11 @@ export const DesktopCards = ({
5052
return (
5153
<SortableItem key={card.name}>
5254
<div>
53-
<Component key={card.name} meta={constantCard} withAds={index === 0} />
55+
<Component
56+
key={card.name}
57+
meta={constantCard}
58+
withAds={index === adsConfig.columnPosition}
59+
/>
5460
</div>
5561
</SortableItem>
5662
)

src/components/List/ListComponent.tsx

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import React, { ReactNode } from 'react'
1+
import React, { ReactNode, useEffect } from 'react'
22
import { Placeholder } from 'src/components/placeholders'
33
import { MAX_ITEMS_PER_CARD } from 'src/config'
44
import { BannerAd } from 'src/features/ads'
5+
import { useRemoteConfigStore } from 'src/features/remoteConfig'
56
import { BaseEntry } from 'src/types'
67

78
type PlaceholdersProps = {
@@ -39,6 +40,29 @@ export function ListComponent<T extends BaseEntry>(props: ListComponentPropsType
3940
placeholder = <Placeholder />,
4041
limit = MAX_ITEMS_PER_CARD,
4142
} = props
43+
const { adsConfig } = useRemoteConfigStore()
44+
const [canAdsLoad, setCanAdsLoad] = React.useState(true)
45+
46+
useEffect(() => {
47+
if (!adsConfig.enabled || !withAds) {
48+
return
49+
}
50+
51+
const handleClassChange = () => {
52+
if (document.documentElement.classList.contains('dndState')) {
53+
setCanAdsLoad(false)
54+
} else {
55+
setCanAdsLoad(true)
56+
}
57+
}
58+
59+
const observer = new MutationObserver(handleClassChange)
60+
observer.observe(document.documentElement, { attributes: true })
61+
62+
return () => {
63+
observer.disconnect()
64+
}
65+
}, [withAds, adsConfig.enabled])
4266

4367
if (error) {
4468
return <p className="errorMsg">{error?.message || error}</p>
@@ -51,7 +75,7 @@ export function ListComponent<T extends BaseEntry>(props: ListComponentPropsType
5175

5276
return items.slice(0, limit).map((item, index) => {
5377
let content: ReactNode[] = [renderItem(item, index)]
54-
if (withAds && index === 0) {
78+
if (canAdsLoad && adsConfig.enabled && withAds && index === adsConfig.rowPosition) {
5579
content.unshift(<BannerAd key={'banner-ad'} />)
5680
}
5781
return content
Lines changed: 51 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,57 @@
1-
import { create } from 'zustand';
1+
import { create } from 'zustand'
22

3-
import { persist } from 'zustand/middleware';
4-
import { RemoteConfig, Tag } from "../types";
3+
import { persist } from 'zustand/middleware'
4+
import { RemoteConfig, Tag } from '../types'
55

66
type RemoteConfigStore = {
7-
supportedTags: Tag[];
8-
marketingBannerConfig?: any;
9-
setRemoteConfig: (remoteConfig: RemoteConfig) => void;
10-
};
7+
supportedTags: Tag[]
8+
marketingBannerConfig?: any
9+
adsConfig: {
10+
rowPosition: number
11+
columnPosition: number
12+
enabled: boolean
13+
}
14+
setRemoteConfig: (remoteConfig: RemoteConfig) => void
15+
}
1116

12-
export const useRemoteConfigStore = create(persist<RemoteConfigStore>((set) => ({
13-
marketingBannerConfig: undefined,
14-
supportedTags: [
15-
{
16-
value: 'javascript',
17-
label: 'Javascript',
18-
githubValues: ['javascript'],
19-
confsValues: ['javascript'],
20-
devtoValues: ['javascript'],
21-
hashnodeValues: ['javascript'],
22-
mediumValues: ['javascript'],
23-
redditValues: ['javascript'],
24-
freecodecampValues: ['javascript']
25-
},
26-
],
27-
setRemoteConfig: (remoteConfig: RemoteConfig) =>
28-
set(() => {
29-
const { marketingBannerConfig, ...otherConfigs } = remoteConfig
30-
return { ...otherConfigs }
17+
export const useRemoteConfigStore = create(
18+
persist<RemoteConfigStore>(
19+
(set) => ({
20+
marketingBannerConfig: undefined,
21+
adsConfig: {
22+
rowPosition: 0,
23+
columnPosition: 0,
24+
enabled: false,
25+
},
26+
supportedTags: [
27+
{
28+
value: 'javascript',
29+
label: 'Javascript',
30+
githubValues: ['javascript'],
31+
confsValues: ['javascript'],
32+
devtoValues: ['javascript'],
33+
hashnodeValues: ['javascript'],
34+
mediumValues: ['javascript'],
35+
redditValues: ['javascript'],
36+
freecodecampValues: ['javascript'],
37+
},
38+
],
39+
setRemoteConfig: (remoteConfig: RemoteConfig) =>
40+
set(() => {
41+
const { marketingBannerConfig, ...otherConfigs } = remoteConfig
42+
return { ...otherConfigs }
43+
}),
3144
}),
32-
}), {
33-
name: 'remote_config_storage',
34-
version: 1,
35-
migrate(persistedState, version) {
36-
const newState = persistedState as RemoteConfigStore;
37-
if (version === 0) {
38-
delete newState.marketingBannerConfig
45+
{
46+
name: 'remote_config_storage',
47+
version: 1,
48+
migrate(persistedState, version) {
49+
const newState = persistedState as RemoteConfigStore
50+
if (version === 0) {
51+
delete newState.marketingBannerConfig
52+
}
53+
return newState
54+
},
3955
}
40-
return newState;
41-
},
42-
}));
56+
)
57+
)

src/features/remoteConfig/types/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ export type TagValuesFieldType =
2121

2222
export type RemoteConfig = {
2323
supportedTags: Tag[]
24-
refresh_rate: number | false,
24+
refresh_rate: number | false
2525
marketingBannerConfig?: any
26+
adsConfig: {
27+
rowPosition: number
28+
columnPosition: number
29+
enabled: boolean
30+
}
2631
}

0 commit comments

Comments
 (0)