Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: introduce concept of current user as my* #11512

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { EventID, EventType } from '@masknet/web3-telemetry/types'
import type { CompositionType } from '@masknet/plugin-infra/content-script'
import Services from '#services'
import { activatedSiteAdaptorUI } from '../../site-adaptor-infra/index.js'
import { useCurrentIdentity, useLastRecognizedIdentity } from '../DataSource/useActivatedUI.js'
import { useCurrentIdentity, useMyIdentity } from '../DataSource/useActivatedUI.js'
import { CompositionDialogUI, type CompositionRef, E2EUnavailableReason } from './CompositionUI.js'
import { useCompositionClipboardRequest } from './useCompositionClipboardRequest.js'
import { useRecipientsList } from './useRecipientsList.js'
Expand Down Expand Up @@ -51,13 +51,13 @@ export function Composition({ type = 'timeline', requireClipboardPermission }: P
const { classes, cx } = useStyles()
const currentIdentity = useCurrentIdentity()?.identifier
const allPersonas = usePersonasFromDB()
const lastRecognized = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const currentIdentifier = useValueRef(currentPersonaIdentifier)
const { value: connectStatus } = useCurrentPersonaConnectStatus(
allPersonas,
currentIdentifier,
Services.Helper.openDashboard,
lastRecognized,
myIdentity,
)
/** @deprecated */
const { value: hasLocalKey } = useAsync(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { PopoverListTrigger } from './PopoverListTrigger.js'
import { PopoverListItem } from './PopoverListItem.js'
import { E2EUnavailableReason } from './CompositionUI.js'
import { usePersonasFromDB } from '../../../shared-ui/hooks/usePersonasFromDB.js'
import { useLastRecognizedIdentity } from '../DataSource/useActivatedUI.js'
import { useMyIdentity } from '../DataSource/useActivatedUI.js'
import { useMaskSharedTrans } from '../../../shared-ui/index.js'
import Services from '#services'

Expand Down Expand Up @@ -62,7 +62,7 @@ export function EncryptionTargetSelector(props: EncryptionTargetSelectorProps) {

const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)
const allPersonas = usePersonasFromDB()
const lastRecognized = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const currentIdentifier = useValueRef(currentPersonaIdentifier)

const e2eDisabledMessage =
Expand All @@ -72,7 +72,7 @@ export function EncryptionTargetSelector(props: EncryptionTargetSelectorProps) {
<Box flex={1} />
<ConnectPersonaBoundary
personas={allPersonas}
identity={lastRecognized}
identity={myIdentity}
currentPersonaIdentifier={currentIdentifier}
openDashboard={Services.Helper.openDashboard}
customHint
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,26 @@ import { EventID, EventType } from '@masknet/web3-telemetry/types'
import { useCallback } from 'react'
import { useMaskSharedTrans } from '../../../shared-ui/index.js'
import { activatedSiteAdaptorUI } from '../../site-adaptor-infra/index.js'
import { useLastRecognizedIdentity } from '../DataSource/useActivatedUI.js'
import { useMyIdentity } from '../DataSource/useActivatedUI.js'
import type { SubmitComposition } from './CompositionUI.js'
import { SteganographyPayload } from './SteganographyPayload.js'

export function useSubmit(onClose: () => void, reason: 'timeline' | 'popup' | 'reply') {
const t = useMaskSharedTrans()
const lastRecognizedIdentity = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()

return useCallback(
async (info: SubmitComposition) => {
const { content, encode, target } = info
if (encode === 'image' && !lastRecognizedIdentity) throw new Error('No Current Profile')
if (encode === 'image' && !myIdentity) throw new Error('No Current Profile')

// rawEncrypted is either string or Uint8Array
// string is the old format, Uint8Array is the new format.
const rawEncrypted = await Services.Crypto.encryptTo(
info.version,
content,
target,
lastRecognizedIdentity.identifier,
myIdentity.identifier,
activatedSiteAdaptorUI!.encryptPayloadNetwork,
)
// Since we cannot directly send binary in the composition box, we need to encode it into a string.
Expand Down Expand Up @@ -72,7 +72,7 @@ export function useSubmit(onClose: () => void, reason: 'timeline' | 'popup' | 'r

onClose()
},
[t, lastRecognizedIdentity, onClose, reason],
[t, myIdentity, onClose, reason],
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export function useCurrentIdentity() {
return useSubscription(CurrentIdentitySubscription)
}

export function useLastRecognizedIdentity() {
export function useMyIdentity() {
return useValueRef(activatedSiteAdaptorUI!.collecting.identityProvider?.recognized || defaultIdentityResolved)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ import { useAsyncRetry } from 'react-use'
import type { PersonaPerSiteConnectStatus } from '@masknet/shared'
import type { PersonaInformation } from '@masknet/shared-base'
import Services from '#services'
import { useLastRecognizedIdentity } from './useActivatedUI.js'
import { useMyIdentity } from './useActivatedUI.js'
import { usePersonasFromDB } from '../../../shared-ui/hooks/usePersonasFromDB.js'
import { useSetupGuideStatus } from '../GuideStep/useSetupGuideStatus.js'

export function usePersonaPerSiteConnectStatus() {
const personas = usePersonasFromDB()
const lastState = useSetupGuideStatus()
const lastRecognized = useLastRecognizedIdentity()
const username = lastState.username || lastRecognized.identifier?.userId
const myIdentity = useMyIdentity()
const username = lastState.username || myIdentity.identifier?.userId
const checkSiteConnectedToCurrentPersona = useCallback(
(persona: PersonaInformation) =>
username ? persona.linkedProfiles.some((x) => x.identifier.userId === username) : false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import type { Web3Helper } from '@masknet/web3-helpers'
import { NextIDProof } from '@masknet/web3-providers'
import { useQuery } from '@tanstack/react-query'
import type { HTMLProps } from 'react'
import { useLastRecognizedIdentity } from '../../DataSource/useActivatedUI.js'
import { useMyIdentity } from '../../DataSource/useActivatedUI.js'
import { useCurrentPersona, usePersonasFromDB } from '../../../../shared-ui/hooks/index.js'
import { ProfileBar, ProfileBarSkeleton } from './ProfileBar.js'

Expand Down Expand Up @@ -59,7 +59,7 @@ function Web3ProfileSettingButton() {

const personas = usePersonasFromDB()
const persona = useCurrentPersona()
const identity = useLastRecognizedIdentity()
const identity = useMyIdentity()
const { value: status, loading } = useCurrentPersonaConnectStatus(
personas,
persona?.identifier,
Expand Down Expand Up @@ -100,11 +100,11 @@ export function ProfileCardTitle({
onAddressChange,
...rest
}: ProfileCardTitleProps) {
const me = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const { classes, cx } = useStyles()

const userId = identity?.identifier?.userId
const itsMe = !!userId && userId === me?.identifier?.userId
const itsMe = !!userId && userId === myIdentity?.identifier?.userId
const { data: nextIdBindings = EMPTY_LIST } = useQuery({
queryKey: ['next-id', 'profiles-by-twitter-id', userId],
enabled: !!userId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ import { ScopedDomainsContainer, useSnapshotSpacesByTwitterHandle } from '@maskn
import { useMaskSharedTrans } from '../../../shared-ui/index.js'
import {
useCurrentVisitingIdentity,
useLastRecognizedIdentity,
useMyIdentity,
useSocialIdentity,
useSocialIdentityByUserId,
} from '../DataSource/useActivatedUI.js'
Expand Down Expand Up @@ -147,15 +147,15 @@ function Content(props: ProfileTabContentProps) {
const [menuOpen, setMenuOpen] = useState(false)
const closeMenu = useCallback(() => setMenuOpen(false), [])
const allPersonas = usePersonasFromDB()
const lastRecognized = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const currentIdentifier = useValueRef(currentPersonaIdentifier)

const {
value: personaStatus,
loading: loadingPersonaStatus,
error: loadPersonaStatusError,
retry: retryLoadPersonaStatus,
} = useCurrentPersonaConnectStatus(allPersonas, currentIdentifier, Services.Helper.openDashboard, lastRecognized)
} = useCurrentPersonaConnectStatus(allPersonas, currentIdentifier, Services.Helper.openDashboard, myIdentity)

const currentVisitingSocialIdentity = useCurrentVisitingIdentity()
const { data: currentSocialIdentity } = useSocialIdentity(currentVisitingSocialIdentity)
Expand Down Expand Up @@ -483,7 +483,7 @@ function Content(props: ProfileTabContentProps) {
{isOwnerIdentity && isOnTwitter ?
<ConnectPersonaBoundary
personas={allPersonas}
identity={lastRecognized}
identity={myIdentity}
currentPersonaIdentifier={currentIdentifier}
openDashboard={Services.Helper.openDashboard}
customHint
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { useQuery } from '@tanstack/react-query'
import { useEffect, useMemo, useState } from 'react'
import { createContainer } from 'unstated-next'
import { activatedSiteAdaptorUI } from '../../../site-adaptor-infra/index.js'
import { useLastRecognizedIdentity } from '../../DataSource/useActivatedUI.js'
import { useMyIdentity } from '../../DataSource/useActivatedUI.js'
import { useSetupGuideStatus } from '../../GuideStep/useSetupGuideStatus.js'
import { useCurrentUserId } from './hooks/useCurrentUserId.js'
import { useConnectedVerified } from './hooks/useConnectedVerified.js'
Expand All @@ -22,7 +22,7 @@ export function useSetupGuideStepInfo(persona?: PersonaIdentifier) {
const setupGuide = useSetupGuideStatus()
// #endregion

const myIdentity = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const [loadingCurrentUserId, currentUserId] = useCurrentUserId()
const userId = setupGuide.username || currentUserId || ''

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { useTimeout } from 'react-use'
import { useLastRecognizedIdentity } from '../../../DataSource/useActivatedUI.js'
import { useMyIdentity } from '../../../DataSource/useActivatedUI.js'

export function useCurrentUserId() {
const lastRecognized = useLastRecognizedIdentity()
const currentUserId = lastRecognized.identifier?.userId
const myIdentity = useMyIdentity()
const currentUserId = myIdentity.identifier?.userId
// There is not state for getting current userId, setting a timeout for that.
const [timeout] = useTimeout(5000)
const [delay] = useTimeout(800)
Expand Down
8 changes: 4 additions & 4 deletions packages/mask/content-script/components/Welcomes/Banner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { useValueRef } from '@masknet/shared-base-ui'
import { MaskColors, makeStyles } from '@masknet/theme'
import Services from '#services'
import { activatedSiteAdaptorUI, activatedSiteAdaptor_state } from '../../site-adaptor-infra/index.js'
import { useLastRecognizedIdentity } from '../DataSource/useActivatedUI.js'
import { useMyIdentity } from '../DataSource/useActivatedUI.js'
import { usePersonasFromDB } from '../../../shared-ui/hooks/usePersonasFromDB.js'

interface BannerUIProps extends withClasses<'header' | 'content' | 'actions' | 'buttonText'> {
Expand Down Expand Up @@ -54,14 +54,14 @@ function BannerUI(props: BannerUIProps) {
interface BannerProps extends Partial<BannerUIProps> {}

export function Banner(props: BannerProps) {
const lastRecognizedIdentity = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const allPersonas = usePersonasFromDB()
const currentIdentifier = useValueRef(currentPersonaIdentifier)
const { value: personaConnectStatus } = useCurrentPersonaConnectStatus(
allPersonas,
currentIdentifier,
Services.Helper.openDashboard,
lastRecognizedIdentity,
myIdentity,
)
const { nextStep } = props
const networkIdentifier = activatedSiteAdaptorUI!.networkIdentifier
Expand All @@ -82,7 +82,7 @@ export function Banner(props: BannerProps) {
const defaultUserName =
networkIdentifier ?
{
defaultValue: lastRecognizedIdentity.identifier?.userId ?? '',
defaultValue: myIdentity.identifier?.userId ?? '',
value,
onChange,
isValid: activatedSiteAdaptorUI!.utils.isValidUsername || (() => true),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { useCallback } from 'react'
import type { PluginID } from '@masknet/shared-base'
import { ApplicationBoardModal } from '@masknet/shared'
import { useLastRecognizedIdentity } from '../DataSource/useActivatedUI.js'
import { useMyIdentity } from '../DataSource/useActivatedUI.js'
import { activatedSiteAdaptorUI } from '../../site-adaptor-infra/ui.js'
import { usePersonasFromDB } from '../../../shared-ui/hooks/usePersonasFromDB.js'
import { usePersonaPerSiteConnectStatus } from '../DataSource/usePersonaPerSiteConnectStatus.js'
import Services from '#services'

export function useOpenApplicationBoardDialog(quickMode?: boolean, focusPluginID?: PluginID) {
const lastRecognized = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const allPersonas = usePersonasFromDB()
const { value: applicationCurrentStatus, loading: personaPerSiteConnectStatusLoading } =
usePersonaPerSiteConnectStatus()
Expand All @@ -17,7 +17,7 @@ export function useOpenApplicationBoardDialog(quickMode?: boolean, focusPluginID
() =>
ApplicationBoardModal.open({
allPersonas,
lastRecognized,
myIdentity,
openDashboard: Services.Helper.openDashboard,
currentSite: activatedSiteAdaptorUI!.networkIdentifier,
queryOwnedPersonaInformation: Services.Identity.queryOwnedPersonaInformation,
Expand All @@ -29,7 +29,7 @@ export function useOpenApplicationBoardDialog(quickMode?: boolean, focusPluginID
}),
[
allPersonas,
lastRecognized,
myIdentity,
applicationCurrentStatus,
personaPerSiteConnectStatusLoading,
quickMode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { attachReactTreeWithContainer } from '../../../../utils/shadow-root/rend
import { searchEditProfileSelector } from '../../utils/selector.js'
import { injectOpenNFTAvatarEditProfileButtonAtEditProfileDialog } from './NFTAvatarEditProfileDialog.js'
import { ButtonStyle, type ButtonProps } from '../../constant.js'
import { useLastRecognizedIdentity, useThemeSettings } from '../../../../components/DataSource/useActivatedUI.js'
import { useMyIdentity, useThemeSettings } from '../../../../components/DataSource/useActivatedUI.js'
import { usePersonasFromDB } from '../../../../../shared-ui/hooks/usePersonasFromDB.js'
import Services from '#services'

Expand Down Expand Up @@ -60,7 +60,7 @@ function requestSettingAvatar() {
function OpenNFTAvatarEditProfileButtonInTwitter() {
const { classes } = useNFTAvatarButtonStyles()
const allPersonas = usePersonasFromDB()
const lastRecognized = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const currentIdentifier = useValueRef(currentPersonaIdentifier)

useEffect(() => {
Expand All @@ -81,7 +81,7 @@ function OpenNFTAvatarEditProfileButtonInTwitter() {
return (
<ConnectPersonaBoundary
personas={allPersonas}
identity={lastRecognized}
identity={myIdentity}
currentPersonaIdentifier={currentIdentifier}
openDashboard={Services.Helper.openDashboard}
handlerPosition="top-right"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { makeStyles } from '@masknet/theme'
import { Twitter } from '@masknet/web3-providers'
import {
useCurrentVisitingIdentity,
useLastRecognizedIdentity,
useMyIdentity,
useThemeSettings,
} from '../../../../components/DataSource/useActivatedUI.js'
import { usePersonasFromDB } from '../../../../../shared-ui/hooks/usePersonasFromDB.js'
Expand Down Expand Up @@ -73,7 +73,7 @@ function clickHandler() {
}
function OpenNFTAvatarEditProfileButtonInTwitter() {
const personas = usePersonasFromDB()
const lastRecognized = useLastRecognizedIdentity()
const myIdentity = useMyIdentity()
const currentIdentifier = useValueRef(currentPersonaIdentifier)
const themeSettings = useThemeSettings()
const buttonStyle = ButtonStyle[themeSettings.size]
Expand All @@ -84,7 +84,7 @@ function OpenNFTAvatarEditProfileButtonInTwitter() {
<div className={classes.root}>
<ConnectPersonaBoundary
personas={personas}
identity={lastRecognized}
identity={myIdentity}
currentPersonaIdentifier={currentIdentifier}
openDashboard={Services.Helper.openDashboard}
handlerPosition="top-right"
Expand Down
4 changes: 2 additions & 2 deletions packages/plugin-infra/src/entry-content-script.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ export {
useCurrentPersonaInformation,
useCurrentVisitingIdentity,
useCurrentVisitingSocialIdentity,
useLastRecognizedIdentity,
useLastRecognizedSocialIdentity,
useMyIdentity,
useMySocialIdentity,
usePostLink,
useSocialIdentity,
useSiteThemeMode,
Expand Down
4 changes: 2 additions & 2 deletions packages/plugin-infra/src/site-adaptor/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ export * from './useAllPersonas.js'
export * from './useCurrentPersonaInformation.js'
export * from './useCurrentVisitingIdentity.js'
export * from './useCurrentVisitingSocialIdentity.js'
export * from './useLastRecognizedIdentity.js'
export * from './useLastRecognizedSocialIdentity.js'
export * from './useMyIdentity.js'
export * from './useMySocialIdentity.js'
export * from './usePostInfo.js'
export * from './useSocialIdentity.js'
export * from './useThemeSettings.js'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ import { useSubscription } from 'use-subscription'
import { UNDEFINED } from '@masknet/shared-base'
import { lastRecognizedProfile } from './context.js'

export function useLastRecognizedIdentity() {
export function useMyIdentity() {
return useSubscription(lastRecognizedProfile ?? UNDEFINED)
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { useSocialIdentity } from './useSocialIdentity.js'
import { useLastRecognizedIdentity } from './useLastRecognizedIdentity.js'
import { useMyIdentity } from './useMyIdentity.js'
import type { UseQueryResult } from '@tanstack/react-query'

type T = UseQueryResult

/**
* Get the social identity of the last recognized identity
*/
export function useLastRecognizedSocialIdentity() {
const identity = useLastRecognizedIdentity()
export function useMySocialIdentity() {
const identity = useMyIdentity()
return useSocialIdentity(identity)
}