Skip to content

Commit

Permalink
fix: mf-5996 back to compose dialog with correct compositionType
Browse files Browse the repository at this point in the history
  • Loading branch information
UncleBill committed Jan 24, 2024
1 parent 4724721 commit 5e26425
Show file tree
Hide file tree
Showing 10 changed files with 78 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,7 @@ export function useSubmit(onClose: () => void, reason: 'timeline' | 'popup' | 'r
await SteganographyPayload(typeof rawEncrypted === 'string' ? encrypted : rawEncrypted)
: undefined

const isTwitterCompose = location.href === 'https://twitter.com/compose/tweet'
if (
activatedSiteAdaptorUI?.automation.endpoint?.publishPost &&
reason === 'timeline' &&
!isTwitterCompose // the reason could be incorrect by chance, checking url to ensure the compose is not open
) {
if (activatedSiteAdaptorUI?.automation.endpoint?.publishPost && reason === 'timeline') {
const postId = await activatedSiteAdaptorUI.automation.endpoint.publishPost(
mediaObject ? [decoratedText || defaultText, mediaObject] : [decoratedText || defaultText],
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,8 @@ export function searchRetweetAvatarSelector() {
}

export function searchReplyToolbarSelector() {
return querySelector<E>('div[data-testid="primaryColumn"] div[data-testid="toolBar"]').querySelector<E>(
'[role="presentation"]:has(> div[data-testid="geoButton"])',
return querySelector<E>(
'div[data-testid="primaryColumn"] div[data-testid="toolBar"] [role="presentation"]:has(> div[data-testid="geoButton"])',
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useMemo, useState } from 'react'
import { useCallback, useContext, useMemo, useState } from 'react'
import * as web3_utils from /* webpackDefer: true */ 'web3-utils'
import { DialogContent, Tab, useTheme } from '@mui/material'
import { TabContext, TabPanel } from '@mui/lab'
Expand Down Expand Up @@ -27,6 +27,7 @@ import { RedPacketPast } from './RedPacketPast.js'
import { RedPacketERC20Form } from './RedPacketERC20Form.js'
import { RedPacketERC721Form } from './RedPacketERC721Form.js'
import { openComposition } from './openComposition.js'
import { CompositionTypeContext } from './RedPacketInjection.js'

const useStyles = makeStyles<{ scrollY: boolean; isDim: boolean }>()((theme, { isDim }) => {
// it's hard to set dynamic color, since the background color of the button is blended transparent
Expand Down Expand Up @@ -104,6 +105,7 @@ export default function RedPacketDialog(props: RedPacketDialogProps) {
const senderName =
lastRecognized?.identifier?.userId ?? currentIdentity?.identifier?.userId ?? linkedPersona?.nickname

const compositionType = useContext(CompositionTypeContext)
const onCreateOrSelect = useCallback(
async (payload: RedPacketJSONPayload) => {
if (payload.password === '') {
Expand All @@ -126,12 +128,12 @@ export default function RedPacketDialog(props: RedPacketDialogProps) {
}

senderName && (payload.sender.name = senderName)
openComposition(RedPacketMetaKey, reduceUselessPayloadInfo(payload))
openComposition(RedPacketMetaKey, reduceUselessPayloadInfo(payload), compositionType)
Telemetry.captureEvent(EventType.Access, EventID.EntryAppLuckCreate)
ApplicationBoardModal.close()
handleClose()
},
[senderName, handleClose],
[senderName, handleClose, compositionType],
)

const onBack = useCallback(() => {
Expand Down
23 changes: 16 additions & 7 deletions packages/plugins/RedPacket/src/SiteAdaptor/RedPacketInjection.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
import { useCallback, useEffect, useState } from 'react'
import { CrossIsolationMessages, type PluginID } from '@masknet/shared-base'
import { createContext, useCallback, useEffect, useState } from 'react'

import RedPacketDialog from './RedPacketDialog.js'
import type { CompositionType } from '@masknet/plugin-infra/content-script'
import { EVMWeb3ContextProvider } from '@masknet/web3-hooks-base'
import RedPacketDialog from './RedPacketDialog.js'

export const CompositionTypeContext = createContext<CompositionType>('timeline')

export function RedPacketInjection() {
const [open, setOpen] = useState(false)
const [source, setSource] = useState<PluginID>()
const [compositionType, setCompositionType] = useState<CompositionType>('timeline')

useEffect(() => {
return CrossIsolationMessages.events.redpacketDialogEvent.on(({ open, source: pluginId }) => {
setOpen(open)
setSource(pluginId)
})
return CrossIsolationMessages.events.redpacketDialogEvent.on(
({ open, source: pluginId, compositionType = 'timeline' }) => {
setCompositionType(compositionType)
setOpen(open)
setSource(pluginId)
},
)
}, [])

const handleClose = useCallback(() => {
Expand All @@ -22,7 +29,9 @@ export function RedPacketInjection() {
if (!open) return null
return (
<EVMWeb3ContextProvider>
<RedPacketDialog open onClose={handleClose} source={source} />
<CompositionTypeContext.Provider value={compositionType}>
<RedPacketDialog open onClose={handleClose} source={source} />
</CompositionTypeContext.Provider>
</EVMWeb3ContextProvider>
)
}
34 changes: 20 additions & 14 deletions packages/plugins/RedPacket/src/SiteAdaptor/RedPacketPast.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import type { NonFungibleCollection } from '@masknet/web3-shared-base'
import type { ChainId, SchemaType } from '@masknet/web3-shared-evm'
import { TabPanel } from '@mui/lab'
import { Box } from '@mui/material'
import { memo, useCallback } from 'react'
import { memo, useCallback, useContext } from 'react'
import { RedPacketNftMetaKey } from '../constants.js'
import { NftRedPacketHistoryList } from './NftRedPacketHistoryList.js'
import { RedPacketHistoryList } from './RedPacketHistoryList.js'
import { openComposition } from './openComposition.js'
import { CompositionTypeContext } from './RedPacketInjection.js'

const useStyles = makeStyles()((theme) => ({
tabWrapper: {
Expand All @@ -32,25 +33,30 @@ export const RedPacketPast = memo(function RedPacketPast({ onSelect, onClose, ta
const linkedPersona = useCurrentLinkedPersona()

const senderName = currentIdentity?.identifier?.userId ?? linkedPersona?.nickname ?? 'Unknown User'
const compositionType = useContext(CompositionTypeContext)
const handleSendNftRedpacket = useCallback(
(history: NftRedPacketJSONPayload, collection: NonFungibleCollection<ChainId, SchemaType>) => {
const { rpid, txid, duration, sender, password, chainId } = history
openComposition(RedPacketNftMetaKey, {
id: rpid,
txid,
duration,
message: sender.message,
senderName,
contractName: collection.name,
contractAddress: collection.address,
contractTokenURI: collection.iconURL ?? '',
privateKey: password,
chainId,
})
openComposition(
RedPacketNftMetaKey,
{
id: rpid,
txid,
duration,
message: sender.message,
senderName,
contractName: collection.name,
contractAddress: collection.address,
contractTokenURI: collection.iconURL ?? '',
privateKey: password,
chainId,
},
compositionType,
)
ApplicationBoardModal.close()
onClose?.()
},
[senderName],
[senderName, compositionType],
)

return (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useMemo, useCallback, useState, memo } from 'react'
import { useMemo, useCallback, useState, memo, useContext } from 'react'
import { makeStyles, ActionButton } from '@masknet/theme'
import {
formatEthereumAddress,
Expand Down Expand Up @@ -26,6 +26,7 @@ import { useCreateNftRedpacketCallback } from './hooks/useCreateNftRedpacketCall
import { RedPacketNftMetaKey } from '../constants.js'
import { RedPacketRPC } from '../messages.js'
import { openComposition } from './openComposition.js'
import { CompositionTypeContext } from './RedPacketInjection.js'

const useStyles = makeStyles()((theme) => ({
root: {
Expand Down Expand Up @@ -194,24 +195,29 @@ export function RedpacketNftConfirmDialog(props: RedpacketNftConfirmDialogProps)
onClose()
}, [publicKey])

const compositionType = useContext(CompositionTypeContext)
const onSendPost = useCallback(
(id: string) => {
openComposition(RedPacketNftMetaKey, {
id,
transactionId,
duration,
message,
senderName,
contractName: contract.name,
contractAddress: contract.address,
contractTokenURI: contract.iconURL ?? '',
contractVersion: 1,
privateKey,
chainId: contract.chainId,
})
openComposition(
RedPacketNftMetaKey,
{
id,
transactionId,
duration,
message,
senderName,
contractName: contract.name,
contractAddress: contract.address,
contractTokenURI: contract.iconURL ?? '',
contractVersion: 1,
privateKey,
chainId: contract.chainId,
},
compositionType,
)
ApplicationBoardModal.close()
},
[duration, message, senderName, contract, privateKey, transactionId],
[duration, message, senderName, contract, privateKey, transactionId, compositionType],
)

return (
Expand Down
5 changes: 3 additions & 2 deletions packages/plugins/RedPacket/src/SiteAdaptor/emitter.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { CompositionType } from '@masknet/plugin-infra/content-script'
import { CrossIsolationMessages } from '@masknet/shared-base'

export function openDialog() {
CrossIsolationMessages.events.redpacketDialogEvent.sendToLocal({ open: true })
export function openDialog(compositionType: CompositionType = 'timeline') {
CrossIsolationMessages.events.redpacketDialogEvent.sendToLocal({ open: true, compositionType })
}
9 changes: 6 additions & 3 deletions packages/plugins/RedPacket/src/SiteAdaptor/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import { memo } from 'react'
import { Trans } from 'react-i18next'
import { base } from '../base.js'
import { RedPacketMetaKey, RedPacketNftMetaKey } from '../constants.js'
import RedPacketDialog from './RedPacketDialog.js'
import { RedPacketInPost } from './RedPacketInPost.js'
import { RedPacketInjection } from './RedPacketInjection.js'
import { RedPacketNftInPost } from './RedPacketNftInPost.js'
Expand Down Expand Up @@ -89,13 +88,15 @@ const site: Plugin.SiteAdaptor.Definition = {
]),
GlobalInjection: RedPacketInjection,
CompositionDialogEntry: {
dialog: RedPacketDialog,
label: (
<>
<Icons.RedPacket size={16} />
<Trans ns={PluginID.RedPacket} i18nKey="name" />
</>
),
onClick: ({ compositionType }) => {
openDialog(compositionType)
},
},
ApplicationEntries: [
(() => {
Expand All @@ -116,7 +117,9 @@ const site: Plugin.SiteAdaptor.Definition = {
{...EntryComponentProps}
icon={icon}
onClick={() => {
EntryComponentProps.onClick ? EntryComponentProps.onClick?.(openDialog) : openDialog()
EntryComponentProps.onClick ?
EntryComponentProps.onClick(() => openDialog('timeline'))
: openDialog()
Telemetry.captureEvent(EventType.Access, EventID.EntryAppLuckOpen)
}}
/>
Expand Down
4 changes: 2 additions & 2 deletions packages/plugins/RedPacket/src/SiteAdaptor/openComposition.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { CrossIsolationMessages } from '@masknet/shared-base'

export function openComposition(metadataKey: string, payload: unknown) {
export function openComposition(metadataKey: string, payload: unknown, reason: 'popup' | 'timeline' = 'timeline') {
// Close the duplicated dialog if already opened by clicking the mask compose icon.
CrossIsolationMessages.events.compositionDialogEvent.sendToLocal({ reason: 'popup', open: false })
CrossIsolationMessages.events.compositionDialogEvent.sendToLocal({
reason: 'timeline',
reason,
open: true,
options: {
initialMetas: {
Expand Down
2 changes: 2 additions & 0 deletions packages/shared-base/src/Messages/Events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@ interface SettingsUpdateEvent {

export interface redpacketDialogEvent {
open: boolean
// CompositionType from '@masknet/plugin-infra/content-script'
compositionType?: 'popup' | 'timeline'
source?: PluginID
}

Expand Down

0 comments on commit 5e26425

Please sign in to comment.