diff --git a/package.json b/package.json index 17a7d5427bbb..091418e1f01d 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "yarn": ">=999.0.0", "npm": ">=999.0.0" }, - "version": "2.32.1", + "version": "2.32.2", "private": true, "license": "AGPL-3.0-or-later", "scripts": { diff --git a/packages/mask/content-script/components/InjectedComponents/ProfileTabContent.tsx b/packages/mask/content-script/components/InjectedComponents/ProfileTabContent.tsx index 700649668fd5..4d8c04e0a116 100644 --- a/packages/mask/content-script/components/InjectedComponents/ProfileTabContent.tsx +++ b/packages/mask/content-script/components/InjectedComponents/ProfileTabContent.tsx @@ -188,9 +188,8 @@ function Content(props: ProfileTabContentProps) { return plugins .flatMap((x) => x.ProfileTabs?.map((y) => ({ ...y, pluginID: x.ID })) || []) .filter((x) => { - const shouldDisplay = - x.Utils?.shouldDisplay?.(currentVisitingSocialIdentity, selectedSocialAccount) ?? true - return x.pluginID !== PluginID.NextID && shouldDisplay + if (x.pluginID === PluginID.NextID) return false + return x.Utils?.shouldDisplay?.(currentVisitingSocialIdentity, selectedSocialAccount) ?? true }) .sort((a, z) => a.priority - z.priority) }) @@ -199,7 +198,7 @@ function Content(props: ProfileTabContentProps) { id: x.ID, label: typeof x.label === 'string' ? x.label : translate(x.label), })) - }, [activatedPlugins, translate]) + }, [activatedPlugins, translate, selectedSocialAccount]) const [currentTab, onChange] = useTabs(first(tabs)?.id ?? PluginID.Collectible, ...tabs.map((tab) => tab.id)) diff --git a/packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts b/packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts index a90f38f27692..9f872476628e 100644 --- a/packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts +++ b/packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts @@ -119,7 +119,7 @@ function resolveCurrentVisitingIdentityInner( const domAvatar = document.querySelector(`a[href="/${handle}/photo"] img`) // DOM avatar is more accurate, avatar from api could be outdate const avatar = domAvatar?.getAttribute('src') || legacy.profile_image_url_https - const bio = legacy.profile_image_url_https + const bio = legacy.description const homepage = legacy.entities.url?.urls?.[0]?.expanded_url ref.value = { diff --git a/packages/plugins/RedPacket/src/SiteAdaptor/RedPacket/index.tsx b/packages/plugins/RedPacket/src/SiteAdaptor/RedPacket/index.tsx index 52949184de5a..e802275c4411 100644 --- a/packages/plugins/RedPacket/src/SiteAdaptor/RedPacket/index.tsx +++ b/packages/plugins/RedPacket/src/SiteAdaptor/RedPacket/index.tsx @@ -1,5 +1,7 @@ import { msg } from '@lingui/core/macro' import { useLingui } from '@lingui/react' +import { Trans } from '@lingui/react/macro' +import { Icons } from '@masknet/icons' import { usePostInfoDetails, usePostLink } from '@masknet/plugin-infra/content-script' import { share } from '@masknet/plugin-infra/content-script/context' import { LoadingStatus, TransactionConfirmModal } from '@masknet/shared' @@ -12,16 +14,17 @@ import { EVMChainResolver } from '@masknet/web3-providers' import { RedPacketStatus, type RedPacketJSONPayload } from '@masknet/web3-providers/types' import { TokenType, formatBalance, isZero, minus } from '@masknet/web3-shared-base' import { ChainId } from '@masknet/web3-shared-evm' -import { Card, Grow } from '@mui/material' +import { Card, Grow, Link } from '@mui/material' import { memo, useCallback, useMemo, useState } from 'react' import { RedPacketEnvelope } from '../components/RedPacketEnvelope.js' import { Conditions } from '../Conditions/index.js' import { useAvailabilityComputed } from '../hooks/useAvailabilityComputed.js' import { useClaimCallback } from '../hooks/useClaimCallback.js' +import { useIsFireflyRedpacket } from '../hooks/useIsFireflyRedpacket.js' import { useRedPacketContract } from '../hooks/useRedPacketContract.js' +import { useRedPacketCover } from '../hooks/useRedPacketCover.js' import { useRefundCallback } from '../hooks/useRefundCallback.js' import { OperationFooter } from './OperationFooter.js' -import { useRedPacketCover } from '../hooks/useRedPacketCover.js' const useStyles = makeStyles()((theme) => { return { @@ -47,6 +50,18 @@ const useStyles = makeStyles()((theme) => { }, footer: { margin: theme.spacing(2), + display: 'flex', + height: 40, + gap: theme.spacing(0.5), + alignItems: 'center', + justifyContent: 'center', + borderRadius: 99, + fontSize: 14, + fontWeight: 700, + backgroundColor: theme.palette.maskColor.dark, + color: 'white', + cursor: 'pointer', + textDecoration: 'none !important', }, envelope: { height: '100%', @@ -96,6 +111,8 @@ export const RedPacket = memo(function RedPacket({ payload, currentPluginID }: R const postUrl = usePostInfoDetails.url() const handle = usePostInfoDetails.handle() const link = postLink.toString() || postUrl?.toString() + const isFireflyRedpacket = useIsFireflyRedpacket() + const postId = usePostInfoDetails.postID() // TODO payload.chainId is undefined on production mode const network = useNetwork( @@ -225,6 +242,22 @@ export const RedPacket = memo(function RedPacket({ payload, currentPluginID }: R if (outdated) return card + if (isFireflyRedpacket) { + return ( + <> + {card} + + + Claim on Firefly + + + ) + } + return ( <> {card} diff --git a/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useAvailability.ts b/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useAvailability.ts index 760fabd364b8..b1962091114b 100644 --- a/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useAvailability.ts +++ b/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useAvailability.ts @@ -21,10 +21,11 @@ export function useAvailability( queryKey: ['red-packet', 'check-availability', chainId, version, id, account], queryFn: async () => { if (!id || !redPacketContract) return null - return redPacketContract.methods.check_availability(id).call({ + const availability = await redPacketContract.methods.check_availability(id).call({ // check availability is ok w/o account from: account, }) + return availability }, refetchInterval(query) { const { data } = query.state diff --git a/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useIsFireflyRedpacket.ts b/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useIsFireflyRedpacket.ts new file mode 100644 index 000000000000..33f562e7b798 --- /dev/null +++ b/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useIsFireflyRedpacket.ts @@ -0,0 +1,7 @@ +import { usePostInfoDetails } from '@masknet/plugin-infra/content-script' + +export function useIsFireflyRedpacket() { + const raw = usePostInfoDetails.rootNode()?.textContent + + return raw?.includes('#FireflyLuckyDrop') || false +} diff --git a/packages/plugins/RedPacket/src/locale/en-US.json b/packages/plugins/RedPacket/src/locale/en-US.json index 624497aea715..ad188e641511 100644 --- a/packages/plugins/RedPacket/src/locale/en-US.json +++ b/packages/plugins/RedPacket/src/locale/en-US.json @@ -61,6 +61,7 @@ "ZDcdss": ["Claim Conditions"], "NdlvGd": ["Claim Details"], "4iA6eo": ["Claim on Farcaster: ", ["link"]], + "3bGj61": ["Claim on Firefly"], "Jc0uDj": ["Claim on Lens: ", ["link"]], "3vMA+/": ["Claim on: ", ["link"]], "s13D96": ["Claim Requirements"], diff --git a/packages/plugins/RedPacket/src/locale/en-US.po b/packages/plugins/RedPacket/src/locale/en-US.po index 4c20ecc9a992..613b15e569a4 100644 --- a/packages/plugins/RedPacket/src/locale/en-US.po +++ b/packages/plugins/RedPacket/src/locale/en-US.po @@ -199,6 +199,10 @@ msgstr "" #~ msgid "Claim on Farcaster: {link}" #~ msgstr "" +#: src/SiteAdaptor/RedPacket/index.tsx +msgid "Claim on Firefly" +msgstr "" + #: src/SiteAdaptor/RedPacket/index.tsx #: src/SiteAdaptor/RedPacket/index.tsx #~ msgid "Claim on Lens: {link}" diff --git a/packages/plugins/RedPacket/src/locale/ja-JP.json b/packages/plugins/RedPacket/src/locale/ja-JP.json index b4e7a3047c0e..beb58b8acbb2 100644 --- a/packages/plugins/RedPacket/src/locale/ja-JP.json +++ b/packages/plugins/RedPacket/src/locale/ja-JP.json @@ -61,6 +61,7 @@ "ZDcdss": ["Claim Conditions"], "NdlvGd": ["Claim Details"], "4iA6eo": ["Claim on Farcaster: ", ["link"]], + "3bGj61": ["Claim on Firefly"], "Jc0uDj": ["Claim on Lens: ", ["link"]], "3vMA+/": ["Claim on: ", ["link"]], "s13D96": ["要件を要求する"], diff --git a/packages/plugins/RedPacket/src/locale/ja-JP.po b/packages/plugins/RedPacket/src/locale/ja-JP.po index d32449b5ab1d..8ebb91b46a17 100644 --- a/packages/plugins/RedPacket/src/locale/ja-JP.po +++ b/packages/plugins/RedPacket/src/locale/ja-JP.po @@ -204,6 +204,10 @@ msgstr "" #~ msgid "Claim on Farcaster: {link}" #~ msgstr "" +#: src/SiteAdaptor/RedPacket/index.tsx +msgid "Claim on Firefly" +msgstr "" + #: src/SiteAdaptor/RedPacket/index.tsx #: src/SiteAdaptor/RedPacket/index.tsx #~ msgid "Claim on Lens: {link}" diff --git a/packages/plugins/RedPacket/src/locale/ko-KR.json b/packages/plugins/RedPacket/src/locale/ko-KR.json index d39cc26300b6..5ad0259c45b5 100644 --- a/packages/plugins/RedPacket/src/locale/ko-KR.json +++ b/packages/plugins/RedPacket/src/locale/ko-KR.json @@ -61,6 +61,7 @@ "ZDcdss": ["Claim Conditions"], "NdlvGd": ["Claim Details"], "4iA6eo": ["Claim on Farcaster: ", ["link"]], + "3bGj61": ["Claim on Firefly"], "Jc0uDj": ["Claim on Lens: ", ["link"]], "3vMA+/": ["Claim on: ", ["link"]], "s13D96": ["Claim Requirements"], diff --git a/packages/plugins/RedPacket/src/locale/ko-KR.po b/packages/plugins/RedPacket/src/locale/ko-KR.po index 983399d4dba0..81246c56e410 100644 --- a/packages/plugins/RedPacket/src/locale/ko-KR.po +++ b/packages/plugins/RedPacket/src/locale/ko-KR.po @@ -204,6 +204,10 @@ msgstr "" #~ msgid "Claim on Farcaster: {link}" #~ msgstr "" +#: src/SiteAdaptor/RedPacket/index.tsx +msgid "Claim on Firefly" +msgstr "" + #: src/SiteAdaptor/RedPacket/index.tsx #: src/SiteAdaptor/RedPacket/index.tsx #~ msgid "Claim on Lens: {link}" diff --git a/packages/plugins/RedPacket/src/locale/zh-CN.json b/packages/plugins/RedPacket/src/locale/zh-CN.json index 6b9ed2283a7f..50df04aa888a 100644 --- a/packages/plugins/RedPacket/src/locale/zh-CN.json +++ b/packages/plugins/RedPacket/src/locale/zh-CN.json @@ -61,6 +61,7 @@ "ZDcdss": ["Claim Conditions"], "NdlvGd": ["Claim Details"], "4iA6eo": ["Claim on Farcaster: ", ["link"]], + "3bGj61": ["Claim on Firefly"], "Jc0uDj": ["Claim on Lens: ", ["link"]], "3vMA+/": ["Claim on: ", ["link"]], "s13D96": ["Claim Requirements"], diff --git a/packages/plugins/RedPacket/src/locale/zh-CN.po b/packages/plugins/RedPacket/src/locale/zh-CN.po index 25d037c60427..512e64cd5592 100644 --- a/packages/plugins/RedPacket/src/locale/zh-CN.po +++ b/packages/plugins/RedPacket/src/locale/zh-CN.po @@ -204,6 +204,10 @@ msgstr "" #~ msgid "Claim on Farcaster: {link}" #~ msgstr "" +#: src/SiteAdaptor/RedPacket/index.tsx +msgid "Claim on Firefly" +msgstr "" + #: src/SiteAdaptor/RedPacket/index.tsx #: src/SiteAdaptor/RedPacket/index.tsx #~ msgid "Claim on Lens: {link}" diff --git a/packages/plugins/RedPacket/src/locale/zh-TW.json b/packages/plugins/RedPacket/src/locale/zh-TW.json index 3220ee71df8d..eb79b199bb02 100644 --- a/packages/plugins/RedPacket/src/locale/zh-TW.json +++ b/packages/plugins/RedPacket/src/locale/zh-TW.json @@ -61,6 +61,7 @@ "ZDcdss": ["Claim Conditions"], "NdlvGd": ["Claim Details"], "4iA6eo": ["Claim on Farcaster: ", ["link"]], + "3bGj61": ["Claim on Firefly"], "Jc0uDj": ["Claim on Lens: ", ["link"]], "3vMA+/": ["Claim on: ", ["link"]], "s13D96": ["Claim Requirements"], diff --git a/packages/plugins/RedPacket/src/locale/zh-TW.po b/packages/plugins/RedPacket/src/locale/zh-TW.po index dfcecdafe691..f6cc5170d0b4 100644 --- a/packages/plugins/RedPacket/src/locale/zh-TW.po +++ b/packages/plugins/RedPacket/src/locale/zh-TW.po @@ -204,6 +204,10 @@ msgstr "" #~ msgid "Claim on Farcaster: {link}" #~ msgstr "" +#: src/SiteAdaptor/RedPacket/index.tsx +msgid "Claim on Firefly" +msgstr "" + #: src/SiteAdaptor/RedPacket/index.tsx #: src/SiteAdaptor/RedPacket/index.tsx #~ msgid "Claim on Lens: {link}" diff --git a/packages/theme/src/Components/CountdownButton/index.tsx b/packages/theme/src/Components/CountdownButton/index.tsx index ad21f87e2f98..c37d5a33518c 100644 --- a/packages/theme/src/Components/CountdownButton/index.tsx +++ b/packages/theme/src/Components/CountdownButton/index.tsx @@ -4,6 +4,7 @@ import { makeStyles } from '../../entry-base.js' const useStyles = makeStyles()({ button: { + whiteSpace: 'nowrap', '&:hover': { background: 'transparent', }, @@ -15,7 +16,7 @@ export interface CountdownButtonProps extends ButtonProps { } export function CountdownButton(props: CountdownButtonProps) { - const { classes } = useStyles() + const { classes, cx } = useStyles() const { duration = 60, children, repeatContent = 'Resend', onClick, disabled, ...others } = props const [countdown, setCountdown] = useState(undefined) const handleClick = (event: React.MouseEvent) => { @@ -29,7 +30,7 @@ export function CountdownButton(props: CountdownButtonProps) { else return ( <> - {children} (${countdown}) + {children} ({countdown}) ) } else if (countdown === 0) { @@ -55,7 +56,7 @@ export function CountdownButton(props: CountdownButtonProps) { return (