-
Notifications
You must be signed in to change notification settings - Fork 3.6k
/
Copy pathV3SwapPromotionIcon.tsx
108 lines (99 loc) · 3.15 KB
/
V3SwapPromotionIcon.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { IconButton, Text, TooltipText, useTooltip } from '@pancakeswap/uikit'
import { useTranslation } from '@pancakeswap/localization'
import { ChainId } from '@pancakeswap/chains'
import { useCallback, useEffect, useState } from 'react'
import { styled, keyframes } from 'styled-components'
export const v3PromotionFarms = {
[ChainId.BSC]: {
3: true, // BUSD-WBNB LP pid
10: true, // ETH-BNB LP pid
11: true, // BTCB-BNB LP pid
13: true, // USDT-BNB LP pid
},
}
const shineAnimation = keyframes`
0% {transform:translateX(-100%); opacity: 1;}
20% {transform:translateX(100%); opacity: 1;}
100% {transform:translateX(100%); opacity: 0;}
`
const ColoredIconButton = styled(IconButton)`
color: ${({ theme }) => theme.colors.textSubtle};
overflow: hidden;
&.is-shining {
&::after {
content: '';
top: 0;
transform: translateX(100%);
width: 100%;
height: 100%;
position: absolute;
z-index: 1;
animation: ${shineAnimation} 5s infinite 1s;
pointer-events: none;
background: -webkit-linear-gradient(
left,
${({ theme }) =>
theme.isDark
? `rgba(39,38,44, 0) 0%,
rgba(39,38,44, 0) 100%`
: `rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 0.8) 50%,
rgba(128, 186, 232, 0) 99%,
rgba(125, 185, 232, 0) 100%`}
);
}
}
`
export const V3SwapPromotionIcon: React.FC<{ wrapperStyle?: React.CSSProperties }> = ({ wrapperStyle }) => {
const { t } = useTranslation()
const [mobileCampaignTooltipShow, setMobileCampaignTooltipShow] = useState(false)
useEffect(() => {
setTimeout(() => {
setMobileCampaignTooltipShow(true)
}, 100)
}, [])
const mobileTooltipClickOutside = useCallback(() => {
setMobileCampaignTooltipShow(false)
}, [])
useEffect(() => {
document.body.addEventListener('click', mobileTooltipClickOutside)
return () => {
document.body.removeEventListener('click', mobileTooltipClickOutside)
}
}, [mobileTooltipClickOutside])
const {
tooltip: campaignTooltip,
tooltipVisible: campaignTooltipVisible,
targetRef: campaignTargetRef,
} = useTooltip(<Text>{t('Claim $135K CAKE Airdrop & Exclusive NFT')}</Text>, {
placement: 'top',
trigger: 'hover',
avoidToStopPropagation: true,
manualVisible: mobileCampaignTooltipShow,
})
return (
<Text style={wrapperStyle} display="inline-block">
<ColoredIconButton className="is-shining" variant="text" scale="sm">
<TooltipText
ref={campaignTargetRef}
display="flex"
style={{ justifyContent: 'center', textDecoration: 'none' }}
>
<Text
fontSize="20px"
onClick={() => {
window.open(
'https://blog.pancakeswap.finance/articles/participate-in-pancake-swap-v3-launch-claim-135-k-cake-airdrop-and-receive-an-exclusive-nft-for-early-supporters',
'_blank',
'noreferrer noopener',
)
}}
>
🎁
</Text>
</TooltipText>
</ColoredIconButton>
{campaignTooltipVisible && campaignTooltip}
</Text>
)
}