Skip to content

Commit e7c6c70

Browse files
feat: mf-6611 redirect users to Firefly to claim firefly redpacket (#12171)
* feat: mf-6611 redirect users to Firefly to claim firefly redpacket * Update useAvailability.ts --------- Co-authored-by: guanbinrui <[email protected]>
1 parent 380c173 commit e7c6c70

File tree

13 files changed

+69
-3
lines changed

13 files changed

+69
-3
lines changed

packages/plugins/RedPacket/src/SiteAdaptor/RedPacket/index.tsx

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { msg } from '@lingui/core/macro'
22
import { useLingui } from '@lingui/react'
3+
import { Trans } from '@lingui/react/macro'
4+
import { Icons } from '@masknet/icons'
35
import { usePostInfoDetails, usePostLink } from '@masknet/plugin-infra/content-script'
46
import { share } from '@masknet/plugin-infra/content-script/context'
57
import { LoadingStatus, TransactionConfirmModal } from '@masknet/shared'
@@ -12,16 +14,17 @@ import { EVMChainResolver } from '@masknet/web3-providers'
1214
import { RedPacketStatus, type RedPacketJSONPayload } from '@masknet/web3-providers/types'
1315
import { TokenType, formatBalance, isZero, minus } from '@masknet/web3-shared-base'
1416
import { ChainId } from '@masknet/web3-shared-evm'
15-
import { Card, Grow } from '@mui/material'
17+
import { Card, Grow, Link } from '@mui/material'
1618
import { memo, useCallback, useMemo, useState } from 'react'
1719
import { RedPacketEnvelope } from '../components/RedPacketEnvelope.js'
1820
import { Conditions } from '../Conditions/index.js'
1921
import { useAvailabilityComputed } from '../hooks/useAvailabilityComputed.js'
2022
import { useClaimCallback } from '../hooks/useClaimCallback.js'
23+
import { useIsFireflyRedpacket } from '../hooks/useIsFireflyRedpacket.js'
2124
import { useRedPacketContract } from '../hooks/useRedPacketContract.js'
25+
import { useRedPacketCover } from '../hooks/useRedPacketCover.js'
2226
import { useRefundCallback } from '../hooks/useRefundCallback.js'
2327
import { OperationFooter } from './OperationFooter.js'
24-
import { useRedPacketCover } from '../hooks/useRedPacketCover.js'
2528

2629
const useStyles = makeStyles()((theme) => {
2730
return {
@@ -47,6 +50,18 @@ const useStyles = makeStyles()((theme) => {
4750
},
4851
footer: {
4952
margin: theme.spacing(2),
53+
display: 'flex',
54+
height: 40,
55+
gap: theme.spacing(0.5),
56+
alignItems: 'center',
57+
justifyContent: 'center',
58+
borderRadius: 99,
59+
fontSize: 14,
60+
fontWeight: 700,
61+
backgroundColor: theme.palette.maskColor.dark,
62+
color: 'white',
63+
cursor: 'pointer',
64+
textDecoration: 'none !important',
5065
},
5166
envelope: {
5267
height: '100%',
@@ -96,6 +111,8 @@ export const RedPacket = memo(function RedPacket({ payload, currentPluginID }: R
96111
const postUrl = usePostInfoDetails.url()
97112
const handle = usePostInfoDetails.handle()
98113
const link = postLink.toString() || postUrl?.toString()
114+
const isFireflyRedpacket = useIsFireflyRedpacket()
115+
const postId = usePostInfoDetails.postID()
99116

100117
// TODO payload.chainId is undefined on production mode
101118
const network = useNetwork<NetworkPluginID.PLUGIN_EVM>(
@@ -225,6 +242,22 @@ export const RedPacket = memo(function RedPacket({ payload, currentPluginID }: R
225242

226243
if (outdated) return card
227244

245+
if (isFireflyRedpacket) {
246+
return (
247+
<>
248+
{card}
249+
<Link
250+
className={classes.footer}
251+
href={`https://firefly.mask.social/post/twitter/${postId}`}
252+
target="_blank"
253+
rel="noreferrer noopener">
254+
<Icons.LinkOut size={18} />
255+
<Trans>Claim on Firefly</Trans>
256+
</Link>
257+
</>
258+
)
259+
}
260+
228261
return (
229262
<>
230263
{card}

packages/plugins/RedPacket/src/SiteAdaptor/hooks/useAvailability.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ export function useAvailability(
2121
queryKey: ['red-packet', 'check-availability', chainId, version, id, account],
2222
queryFn: async () => {
2323
if (!id || !redPacketContract) return null
24-
return redPacketContract.methods.check_availability(id).call({
24+
const availability = await redPacketContract.methods.check_availability(id).call({
2525
// check availability is ok w/o account
2626
from: account,
2727
})
28+
return availability
2829
},
2930
refetchInterval(query) {
3031
const { data } = query.state
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { usePostInfoDetails } from '@masknet/plugin-infra/content-script'
2+
3+
export function useIsFireflyRedpacket() {
4+
const raw = usePostInfoDetails.rootNode()?.textContent
5+
6+
return raw?.includes('#FireflyLuckyDrop') || false
7+
}

packages/plugins/RedPacket/src/locale/en-US.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/plugins/RedPacket/src/locale/en-US.po

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/plugins/RedPacket/src/locale/ja-JP.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/plugins/RedPacket/src/locale/ja-JP.po

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/plugins/RedPacket/src/locale/ko-KR.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/plugins/RedPacket/src/locale/ko-KR.po

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/plugins/RedPacket/src/locale/zh-CN.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)