Skip to content

Commit 68f3c45

Browse files
committed
Add close event support to marketing banner
1 parent 77843f7 commit 68f3c45

7 files changed

Lines changed: 63 additions & 28 deletions

File tree

src/App.js

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useState, useEffect } from 'react'
22
import 'src/assets/App.css'
33
import { Footer, Header } from 'src/components/Layout'
44
import { BookmarksSidebar } from 'src/features/bookmarks'
5-
import { MarketingBanner } from 'src/components/Elements'
5+
import { MarketingBanner } from 'src/features/MarketingBanner'
66
import { ScrollCardsNavigator } from './components/Layout'
77
import { AppContentLayout } from './components/Layout'
88
import 'react-contexify/dist/ReactContexify.css'
@@ -22,20 +22,22 @@ function App() {
2222
}, [])
2323

2424
return (
25-
<div className="App">
26-
<Header
27-
setShowSideBar={setShowSideBar}
28-
showSideBar={showSideBar}
29-
showSettings={showSettings}
30-
setShowSettings={setShowSettings}
31-
/>
32-
<ScrollCardsNavigator />
25+
<>
3326
<MarketingBanner {...marketingBannerConfig} />
34-
<AppContentLayout setShowSettings={setShowSettings} />
35-
<BookmarksSidebar showSidebar={showSideBar} onClose={() => setShowSideBar(false)} />
27+
<div className="App">
28+
<Header
29+
setShowSideBar={setShowSideBar}
30+
showSideBar={showSideBar}
31+
showSettings={showSettings}
32+
setShowSettings={setShowSettings}
33+
/>
34+
<ScrollCardsNavigator />
35+
<AppContentLayout setShowSettings={setShowSettings} />
36+
<BookmarksSidebar showSidebar={showSideBar} onClose={() => setShowSideBar(false)} />
3637

37-
<Footer />
38-
</div>
38+
<Footer />
39+
</div>
40+
</>
3941
)
4042
}
4143

src/components/Elements/MarketingBanner/MarketingBanner.tsx

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/components/Elements/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
export * from "./ColoredLanguagesBadges"
22
export * from "./Card"
3-
export * from "./MarketingBanner"
43
export * from "./SearchBar"
54
export * from "./UserTags"
65
export * from "./BottomNavigation"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import DOMPurify from 'dompurify'
2+
import { useMarketingBanner } from '../stores/marketingBanner'
3+
4+
type MarketingBannerProps = {
5+
show: boolean
6+
campaign_name: string
7+
htmlContent: string
8+
}
9+
export const MarketingBanner = ({ campaign_name, show, htmlContent }: MarketingBannerProps) => {
10+
const { setCampaignClosed, closedCampaigns } = useMarketingBanner()
11+
12+
if (!show || closedCampaigns.includes(campaign_name)) {
13+
return null
14+
}
15+
16+
let cleanHtmlContent = DOMPurify.sanitize(htmlContent)
17+
18+
const onBannerClick = (e: React.MouseEvent<HTMLElement>) => {
19+
if (e.target instanceof Element) {
20+
const closeButton = e.target.closest('.close')
21+
if (closeButton && e.currentTarget.contains(closeButton)) {
22+
setCampaignClosed(campaign_name)
23+
}
24+
}
25+
}
26+
27+
return (
28+
<div onClick={(e) => onBannerClick(e)} dangerouslySetInnerHTML={{ __html: cleanHtmlContent }} />
29+
)
30+
}
File renamed without changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./components"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import create from 'zustand';
2+
import { persist } from 'zustand/middleware'
3+
4+
type MarketingBannerStore = {
5+
closedCampaigns: string[];
6+
setCampaignClosed: (compaignName: string) => void;
7+
};
8+
9+
export const useMarketingBanner = create(persist<MarketingBannerStore>((set) => ({
10+
closedCampaigns: [],
11+
setCampaignClosed: (compaignName: string) =>
12+
set((state) => ({
13+
closedCampaigns: [...state.closedCampaigns, compaignName]
14+
})),
15+
}), {
16+
name: 'ht_marketing_storage',
17+
}));

0 commit comments

Comments
 (0)