From 9353d652e973d318fad2d7d9e0dd52f86f6d1f8c Mon Sep 17 00:00:00 2001 From: billy Date: Fri, 11 Mar 2022 14:41:45 +0800 Subject: [PATCH 01/15] fix: fix disconnect --- .../components/DisconnectProfileDialog/index.tsx | 1 + .../src/pages/Personas/components/PersonaCard/Row.tsx | 4 ++-- .../src/pages/Personas/components/PersonaLine/index.tsx | 9 ++++----- .../src/pages/Personas/hooks/useOperateBindingProof.ts | 4 ++-- .../src/pages/Personas/hooks/usePersonaContext.ts | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/DisconnectProfileDialog/index.tsx b/packages/dashboard/src/pages/Personas/components/DisconnectProfileDialog/index.tsx index 895750ea549a..e0dcd18c3551 100644 --- a/packages/dashboard/src/pages/Personas/components/DisconnectProfileDialog/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/DisconnectProfileDialog/index.tsx @@ -99,6 +99,7 @@ export const DisconnectProfileDialog = ({ variant="contained" onClick={() => { onDisconnect(profileIdentifier) + setCurrentStep(steps.selection) onClose() }}> {t.confirm()} diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx index 6a8bfb8fa683..62459bbf4d72 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx @@ -68,7 +68,7 @@ export const PersonaRowCard = memo(() => { connectPersona, disconnectPersona, renamePersona, - operateBound, + deleteBound, definedSocialNetworks, verification, } = PersonaContext.useContainer() @@ -83,7 +83,7 @@ export const PersonaRowCard = memo(() => { profiles={currentPersona.linkedProfiles} onConnect={connectPersona} onDisconnect={disconnectPersona} - onDeleteBound={operateBound} + onDeleteBound={deleteBound} onRename={renamePersona} definedSocialNetworks={definedSocialNetworks} /> diff --git a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx index 308cdfe5c00b..a1fe533898d8 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx @@ -101,7 +101,7 @@ export const ConnectedPersonaLine = memo( const handleUserIdClick = async (network: string, userId: string) => { await openProfilePage(network, userId) } - const handleProofIconClick = async (e: MouseEvent, proof: any, profile: any) => { + const handleProofIconClick = (e: MouseEvent, proof: any, profile: any) => { e.stopPropagation() if (!proof || !proof.is_valid) { onConnect() @@ -112,12 +112,11 @@ export const ConnectedPersonaLine = memo( const isProved = verification?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() }) - - if (!isProved || !onDeleteBound) { - onDisconnect(profile) - } else { + if (isProved && onDeleteBound) { onDeleteBound(profile) + return } + onDisconnect(profile) } const userIdBox = (profile: any) => { const proofSupport = ['twitter.com'].includes(profile.network) diff --git a/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts b/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts index 9789559471c6..25bda7a11f38 100644 --- a/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts +++ b/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts @@ -3,7 +3,7 @@ import { bindProof, createPersonaPayload } from '@masknet/web3-providers' import { useAsyncFn } from 'react-use' import { Services } from '../../../API' -export function useOperateBound() { +export function useDeleteBound() { return useAsyncFn(async (identifier: ECKeyIdentifier, profile, network, action) => { const persona_ = await Services.Identity.queryPersona(identifier) const username = profile.userId.toLowerCase() @@ -21,6 +21,6 @@ export function useOperateBound() { await bindProof(persona_.publicHexKey, action, platform, username, { signature: signature, }) - await Services.Identity.detachProfile(profile) + Services.Identity.detachProfile(profile) }) } diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts index 8694fb2117c9..b3154d7e458d 100644 --- a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts @@ -7,7 +7,7 @@ import { useCreatePersona } from './useCreatePersona' import { queryExistedBindingByPersona } from '@masknet/web3-providers' import { useAsync, useAsyncRetry } from 'react-use' import type { ECKeyIdentifier } from '@masknet/shared-base' -import { useOperateBound } from './useOperateBindingProof' +import { useDeleteBound } from './useOperateBindingProof' function usePersonaContext() { const currentPersonaIdentifier = useCurrentPersonaIdentifier() @@ -28,7 +28,7 @@ function usePersonaContext() { const [, openProfilePage] = useOpenProfilePage() const [, disconnectPersona] = useDisconnectSocialNetwork() const [, createPersona] = useCreatePersona() - const [, operateBound] = useOperateBound() + const [, deleteBound] = useDeleteBound() const renamePersona = Services.Identity.renamePersona const changeCurrentPersona = useCallback(Services.Settings.setCurrentPersonaIdentifier, []) @@ -38,7 +38,7 @@ function usePersonaContext() { createPersona, renamePersona, changeCurrentPersona, - operateBound, + deleteBound, currentPersona, definedSocialNetworks, personas, From 4a92a64fae6fdfcb6f4ac1770567f824c7fb2c31 Mon Sep 17 00:00:00 2001 From: billy Date: Fri, 11 Mar 2022 14:51:33 +0800 Subject: [PATCH 02/15] fix: types --- .../Personas/components/PersonaLine/index.tsx | 10 ++++------ packages/shared-base/src/NextID/type.ts | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx index a1fe533898d8..405515bafc09 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx @@ -3,7 +3,7 @@ import { Box, Button, Link, Stack, Typography } from '@mui/material' import { getMaskColor, MaskColorVar, makeStyles } from '@masknet/theme' import { useDashboardI18N } from '../../../../locales' import { DisconnectProfileDialog } from '../DisconnectProfileDialog' -import type { NextIDPersonaBindings, PersonaIdentifier, ProfileIdentifier } from '@masknet/shared-base' +import type { NextIDPersonaBindings, PersonaIdentifier, ProfileIdentifier, BindingProof } from '@masknet/shared-base' import { SOCIAL_MEDIA_ICON_MAPPING } from '@masknet/shared' import { PersonaContext } from '../../hooks/usePersonaContext' import { NextIdPersonaWarningIcon, NextIdPersonaVerifiedIcon } from '@masknet/icons' @@ -101,7 +101,7 @@ export const ConnectedPersonaLine = memo( const handleUserIdClick = async (network: string, userId: string) => { await openProfilePage(network, userId) } - const handleProofIconClick = (e: MouseEvent, proof: any, profile: any) => { + const handleProofIconClick = (e: MouseEvent, proof: BindingProof | undefined) => { e.stopPropagation() if (!proof || !proof.is_valid) { onConnect() @@ -118,7 +118,7 @@ export const ConnectedPersonaLine = memo( } onDisconnect(profile) } - const userIdBox = (profile: any) => { + const userIdBox = (profile: ProfileIdentifier) => { const proofSupport = ['twitter.com'].includes(profile.network) const proof = verification?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() @@ -126,9 +126,7 @@ export const ConnectedPersonaLine = memo( return (
@{profile.userId}
-
handleProofIconClick(e, proof, profile)}> +
handleProofIconClick(e, proof)}> {!proofSupport ? null : proof?.is_valid ? ( ) : ( diff --git a/packages/shared-base/src/NextID/type.ts b/packages/shared-base/src/NextID/type.ts index 35886def5132..90e920bd141b 100644 --- a/packages/shared-base/src/NextID/type.ts +++ b/packages/shared-base/src/NextID/type.ts @@ -23,14 +23,16 @@ export interface Binding { export interface NextIDPersonaBindings { persona: string - proofs: { - platform: NextIDPlatform - identity: string - created_at: string - invalid_reason: string - latest_checked_at: string - is_valid: boolean - }[] + proofs: BindingProof[] +} + +export interface BindingProof { + platform: NextIDPlatform + identity: string + created_at: string + invalid_reason: string + latest_checked_at: string + is_valid: boolean } export interface NextIDBindings { From 21647bfc2fbb191d15114ea08cbd109422f6d936 Mon Sep 17 00:00:00 2001 From: billy Date: Mon, 14 Mar 2022 15:24:50 +0800 Subject: [PATCH 03/15] fix: return !publickey situation --- .../dashboard/src/pages/Personas/hooks/usePersonaContext.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts index b3154d7e458d..990c6a798474 100644 --- a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts @@ -5,7 +5,7 @@ import { Services } from '../../../API' import { useOwnedPersonas, useDefinedSocialNetworkUIs, SocialNetwork, useCurrentPersonaIdentifier } from '../api' import { useCreatePersona } from './useCreatePersona' import { queryExistedBindingByPersona } from '@masknet/web3-providers' -import { useAsync, useAsyncRetry } from 'react-use' +import { useAsyncRetry } from 'react-use' import type { ECKeyIdentifier } from '@masknet/shared-base' import { useDeleteBound } from './useOperateBindingProof' @@ -17,10 +17,11 @@ function usePersonaContext() { const [open, setOpen] = useState(false) - const personaPublicKey = useAsync(async () => { + const personaPublicKey = useAsyncRetry(async () => { return Services.Identity.queryPersona(currentPersonaIdentifier as ECKeyIdentifier) }, [currentPersonaIdentifier]).value?.publicHexKey const verification = useAsyncRetry(async () => { + if (!personaPublicKey) return return queryExistedBindingByPersona(personaPublicKey as string) }, [personaPublicKey]).value From bfb66f8b8ccd610f1911282eea4301c53a283d5c Mon Sep 17 00:00:00 2001 From: billy Date: Mon, 14 Mar 2022 18:22:53 +0800 Subject: [PATCH 04/15] fix: systis drawercard verification proof --- .../Personas/components/PersonaCard/Row.tsx | 19 ++++++------------- .../Personas/components/PersonaCard/index.tsx | 9 ++++----- .../components/PersonaDrawer/index.tsx | 3 ++- .../Personas/components/PersonaLine/index.tsx | 14 ++++++++------ .../pages/Personas/hooks/usePersonaContext.ts | 18 +++++++----------- packages/shared-base/src/Persona/type.ts | 3 ++- 6 files changed, 29 insertions(+), 37 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx index 62459bbf4d72..030d110dcfef 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx @@ -63,21 +63,14 @@ const MenuText = styled('span')(` `) export const PersonaRowCard = memo(() => { - const { - currentPersona, - connectPersona, - disconnectPersona, - renamePersona, - deleteBound, - definedSocialNetworks, - verification, - } = PersonaContext.useContainer() + const { currentPersona, connectPersona, disconnectPersona, renamePersona, deleteBound, definedSocialNetworks } = + PersonaContext.useContainer() if (!currentPersona) return null return ( void onDisconnect: (identifier: ProfileIdentifier) => void onRename: (identifier: PersonaIdentifier, target: string, callback?: () => void) => Promise - verification?: NextIDPersonaBindings + proof?: NextIDPersonaBindings onDeleteBound: ( identifier: PersonaIdentifier, profile: ProfileIdentifier, @@ -113,7 +106,7 @@ export const PersonaRowCardUI = memo((props) => { const { classes } = useStyles() const { confirmPassword } = useContext(UserContext) - const { nickname, definedSocialNetworks, identifier, profiles, verification } = props + const { nickname, definedSocialNetworks, identifier, profiles, proof } = props const { onConnect, onDisconnect, onRename, onDeleteBound } = props const { value: privateKey } = useExportPrivateKey(identifier) @@ -205,7 +198,7 @@ export const PersonaRowCardUI = memo((props) => { } else { return ( = 5} isHideOperations={false} key={networkIdentifier} diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx index 79964aeea168..89e4a21c56bc 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx @@ -60,16 +60,15 @@ export interface PersonaCardProps { active?: boolean identifier: PersonaIdentifier profiles: ProfileInformation[] + proof?: NextIDPersonaBindings onClick(): void } export const PersonaCard = memo((props) => { - const { connectPersona, disconnectPersona, definedSocialNetworks, verification } = PersonaContext.useContainer() - + const { connectPersona, disconnectPersona, definedSocialNetworks } = PersonaContext.useContainer() return ( ((props) => { - const { nickname, active = false, definedSocialNetworks, identifier, profiles, verification } = props + const { nickname, active = false, definedSocialNetworks, identifier, profiles, proof } = props const { onConnect, onDisconnect, onClick } = props const { classes } = useStyles() @@ -118,7 +117,7 @@ export const PersonaCardUI = memo((props) => { } else { return ( onConnect(identifier, networkIdentifier)} diff --git a/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx index 3804da3758dc..473605983e37 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx @@ -83,10 +83,11 @@ export const PersonaDrawerUI = memo( {personas.map((item) => { - const { identifier, nickname, linkedProfiles } = item + const { identifier, nickname, linkedProfiles, proof } = item return ( ( networkIdentifier, isHideOperations, disableAdd, - verification, + proof, personaIdentifier, }) => { const t = useDashboardI18N() @@ -109,7 +109,7 @@ export const ConnectedPersonaLine = memo( } const handleDisconnect = (profile: ProfileIdentifier) => { - const isProved = verification?.proofs.find((x) => { + const isProved = proof?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() }) if (isProved && onDeleteBound) { @@ -120,14 +120,16 @@ export const ConnectedPersonaLine = memo( } const userIdBox = (profile: ProfileIdentifier) => { const proofSupport = ['twitter.com'].includes(profile.network) - const proof = verification?.proofs.find((x) => { + const isProved = proof?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() }) return (
@{profile.userId}
-
handleProofIconClick(e, proof)}> - {!proofSupport ? null : proof?.is_valid ? ( +
handleProofIconClick(e, isProved)}> + {!proofSupport ? null : isProved?.is_valid ? ( ) : ( diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts index 990c6a798474..8619c3401c24 100644 --- a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts @@ -6,25 +6,22 @@ import { useOwnedPersonas, useDefinedSocialNetworkUIs, SocialNetwork, useCurrent import { useCreatePersona } from './useCreatePersona' import { queryExistedBindingByPersona } from '@masknet/web3-providers' import { useAsyncRetry } from 'react-use' -import type { ECKeyIdentifier } from '@masknet/shared-base' import { useDeleteBound } from './useOperateBindingProof' function usePersonaContext() { const currentPersonaIdentifier = useCurrentPersonaIdentifier() const definedSocialNetworks: SocialNetwork[] = useDefinedSocialNetworkUIs() const personas = useOwnedPersonas() + const currentPersona = personas.find((x) => x.identifier.equals(currentPersonaIdentifier)) const [open, setOpen] = useState(false) - - const personaPublicKey = useAsyncRetry(async () => { - return Services.Identity.queryPersona(currentPersonaIdentifier as ECKeyIdentifier) - }, [currentPersonaIdentifier]).value?.publicHexKey - const verification = useAsyncRetry(async () => { - if (!personaPublicKey) return - return queryExistedBindingByPersona(personaPublicKey as string) - }, [personaPublicKey]).value - + useAsyncRetry(async () => { + personas.forEach(async (item) => { + if (!item.publicHexKey) return + return (item.proof = await queryExistedBindingByPersona(item.publicHexKey)) + }) + }, [personas]) const [, connectPersona] = useConnectSocialNetwork() const [, openProfilePage] = useOpenProfilePage() const [, disconnectPersona] = useDisconnectSocialNetwork() @@ -46,7 +43,6 @@ function usePersonaContext() { openProfilePage, drawerOpen: open, toggleDrawer: () => setOpen((e) => !e), - verification, } } diff --git a/packages/shared-base/src/Persona/type.ts b/packages/shared-base/src/Persona/type.ts index fe5ccf8c9cb3..23661ec52320 100644 --- a/packages/shared-base/src/Persona/type.ts +++ b/packages/shared-base/src/Persona/type.ts @@ -1,9 +1,10 @@ import type { PersonaIdentifier, ProfileIdentifier } from '../Identifier/type' - +import type { NextIDPersonaBindings } from '../NextID/type' /** * This interface contains the minimal information for UI display */ export interface PersonaInformation { + proof?: NextIDPersonaBindings /** The nickname of the persona. Should use profile.nickname if it presents. */ nickname?: string publicHexKey?: string From 08a5b7e31ba81045a7fad7cc19640ce3193f8deb Mon Sep 17 00:00:00 2001 From: billy Date: Tue, 15 Mar 2022 15:56:07 +0800 Subject: [PATCH 05/15] fix: persona proof systis --- .../pages/Personas/components/PersonaCard/Row.tsx | 14 ++++++++++---- .../src/pages/Personas/hooks/usePersonaContext.ts | 12 ++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx index 030d110dcfef..78194580c8aa 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx @@ -63,14 +63,20 @@ const MenuText = styled('span')(` `) export const PersonaRowCard = memo(() => { - const { currentPersona, connectPersona, disconnectPersona, renamePersona, deleteBound, definedSocialNetworks } = - PersonaContext.useContainer() - + const { + currentPersona, + connectPersona, + disconnectPersona, + renamePersona, + deleteBound, + definedSocialNetworks, + curProof, + } = PersonaContext.useContainer() if (!currentPersona) return null return ( x.identifier.equals(currentPersonaIdentifier)) - const [open, setOpen] = useState(false) + + const { value: curProof } = useAsyncRetry(async () => { + return queryExistedBindingByPersona(currentPersona?.publicHexKey as string) + }) useAsyncRetry(async () => { - personas.forEach(async (item) => { + personas.map(async (item) => { if (!item.publicHexKey) return return (item.proof = await queryExistedBindingByPersona(item.publicHexKey)) }) - }, [personas]) + }) + const [, connectPersona] = useConnectSocialNetwork() const [, openProfilePage] = useOpenProfilePage() const [, disconnectPersona] = useDisconnectSocialNetwork() @@ -41,6 +44,7 @@ function usePersonaContext() { definedSocialNetworks, personas, openProfilePage, + curProof, drawerOpen: open, toggleDrawer: () => setOpen((e) => !e), } From b58e128ea92b5ea9c4ce08bb1ce51d9c01bf847f Mon Sep 17 00:00:00 2001 From: billy Date: Tue, 15 Mar 2022 19:18:17 +0800 Subject: [PATCH 06/15] fix: refactor proof in personas --- .../pages/Personas/components/PersonaCard/Row.tsx | 13 +++---------- .../src/pages/Personas/hooks/usePersonaContext.ts | 13 ------------- .../components/InjectedComponents/SetupGuide.tsx | 2 +- .../extension/background-script/IdentityService.ts | 3 +++ 4 files changed, 7 insertions(+), 24 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx index 78194580c8aa..ae7e01a4bdc8 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx @@ -63,20 +63,13 @@ const MenuText = styled('span')(` `) export const PersonaRowCard = memo(() => { - const { - currentPersona, - connectPersona, - disconnectPersona, - renamePersona, - deleteBound, - definedSocialNetworks, - curProof, - } = PersonaContext.useContainer() + const { currentPersona, connectPersona, disconnectPersona, renamePersona, deleteBound, definedSocialNetworks } = + PersonaContext.useContainer() if (!currentPersona) return null return ( x.identifier.equals(currentPersonaIdentifier)) const [open, setOpen] = useState(false) - const { value: curProof } = useAsyncRetry(async () => { - return queryExistedBindingByPersona(currentPersona?.publicHexKey as string) - }) - useAsyncRetry(async () => { - personas.map(async (item) => { - if (!item.publicHexKey) return - return (item.proof = await queryExistedBindingByPersona(item.publicHexKey)) - }) - }) - const [, connectPersona] = useConnectSocialNetwork() const [, openProfilePage] = useOpenProfilePage() const [, disconnectPersona] = useDisconnectSocialNetwork() @@ -44,7 +32,6 @@ function usePersonaContext() { definedSocialNetworks, personas, openProfilePage, - curProof, drawerOpen: open, toggleDrawer: () => setOpen((e) => !e), } diff --git a/packages/mask/src/components/InjectedComponents/SetupGuide.tsx b/packages/mask/src/components/InjectedComponents/SetupGuide.tsx index 6fc6378e4820..a41f908ab8b3 100644 --- a/packages/mask/src/components/InjectedComponents/SetupGuide.tsx +++ b/packages/mask/src/components/InjectedComponents/SetupGuide.tsx @@ -111,7 +111,6 @@ function SetupGuideUI(props: SetupGuideUIProps) { // auto-finish the setup process if (!persona_?.hasPrivateKey) throw new Error('invalid persona') await Services.Identity.setupPersona(persona_?.identifier) - MaskMessages.events.ownPersonaChanged.sendToAll(undefined) } const onVerify = async () => { @@ -155,6 +154,7 @@ function SetupGuideUI(props: SetupGuideUIProps) { }) await waitingPost + MaskMessages.events.ownPersonaChanged.sendToAll(undefined) } } diff --git a/packages/mask/src/extension/background-script/IdentityService.ts b/packages/mask/src/extension/background-script/IdentityService.ts index 1586d9a3bba9..6c94c9d0e8ac 100644 --- a/packages/mask/src/extension/background-script/IdentityService.ts +++ b/packages/mask/src/extension/background-script/IdentityService.ts @@ -61,6 +61,7 @@ import { MaskMessages } from '../../utils' import { split_ec_k256_keypair_into_pub_priv } from '../../modules/CryptoAlgorithm/helper' import { first, orderBy } from 'lodash-unified' import { recover_ECDH_256k1_KeyPair_ByMnemonicWord } from '../../utils/mnemonic-code' +import { queryExistedBindingByPersona } from '@masknet/web3-providers' assertEnvironment(Environment.ManifestBackground) @@ -179,11 +180,13 @@ export async function queryOwnedPersonaInformation(): Promise (a.updatedAt > b.updatedAt ? 1 : -1))) { const map: ProfileInformation[] = [] + const _proof = await queryExistedBindingByPersona(persona.publicHexKey as string) result.push({ nickname: persona.nickname, identifier: persona.identifier, linkedProfiles: map, publicHexKey: persona.publicHexKey, + proof: _proof, }) for (const [profile] of persona.linkedProfiles) { const linkedProfile = await queryProfile(profile) From cc216e0863c075ccda169139f2de69b78a1e4e60 Mon Sep 17 00:00:00 2001 From: billy Date: Wed, 16 Mar 2022 15:30:03 +0800 Subject: [PATCH 07/15] refactor: refact nextid query from services --- .../src/pages/Personas/components/PersonaLine/index.tsx | 7 +------ .../src/pages/Personas/hooks/usePersonaContext.ts | 8 ++++++++ .../mask/src/components/InjectedComponents/SetupGuide.tsx | 2 +- .../src/extension/background-script/IdentityService.ts | 3 --- packages/shared-base/src/Messages/Mask.ts | 1 + 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx index ded50a8b3fa7..a9c579d32ec8 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx @@ -119,7 +119,6 @@ export const ConnectedPersonaLine = memo( onDisconnect(profile) } const userIdBox = (profile: ProfileIdentifier) => { - const proofSupport = ['twitter.com'].includes(profile.network) const isProved = proof?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() }) @@ -129,11 +128,7 @@ export const ConnectedPersonaLine = memo(
handleProofIconClick(e, isProved)}> - {!proofSupport ? null : isProved?.is_valid ? ( - - ) : ( - - )} + {isProved?.is_valid ? : }
) diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts index cbbfb8cd6734..4964aabd3c9b 100644 --- a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts @@ -5,6 +5,8 @@ import { Services } from '../../../API' import { useOwnedPersonas, useDefinedSocialNetworkUIs, SocialNetwork, useCurrentPersonaIdentifier } from '../api' import { useCreatePersona } from './useCreatePersona' import { useDeleteBound } from './useOperateBindingProof' +import { useAsyncRetry } from 'react-use' +import { queryExistedBindingByPersona } from '@masknet/web3-providers' function usePersonaContext() { const currentPersonaIdentifier = useCurrentPersonaIdentifier() @@ -13,6 +15,12 @@ function usePersonaContext() { const currentPersona = personas.find((x) => x.identifier.equals(currentPersonaIdentifier)) const [open, setOpen] = useState(false) + useAsyncRetry(async () => { + personas.forEach(async (item) => { + item.proof = await queryExistedBindingByPersona(item.publicHexKey as string) + }) + }) + const [, connectPersona] = useConnectSocialNetwork() const [, openProfilePage] = useOpenProfilePage() const [, disconnectPersona] = useDisconnectSocialNetwork() diff --git a/packages/mask/src/components/InjectedComponents/SetupGuide.tsx b/packages/mask/src/components/InjectedComponents/SetupGuide.tsx index a41f908ab8b3..02600672d488 100644 --- a/packages/mask/src/components/InjectedComponents/SetupGuide.tsx +++ b/packages/mask/src/components/InjectedComponents/SetupGuide.tsx @@ -154,7 +154,7 @@ function SetupGuideUI(props: SetupGuideUIProps) { }) await waitingPost - MaskMessages.events.ownPersonaChanged.sendToAll(undefined) + MaskMessages.events.ownProofChange.sendToAll(undefined) } } diff --git a/packages/mask/src/extension/background-script/IdentityService.ts b/packages/mask/src/extension/background-script/IdentityService.ts index 6c94c9d0e8ac..1586d9a3bba9 100644 --- a/packages/mask/src/extension/background-script/IdentityService.ts +++ b/packages/mask/src/extension/background-script/IdentityService.ts @@ -61,7 +61,6 @@ import { MaskMessages } from '../../utils' import { split_ec_k256_keypair_into_pub_priv } from '../../modules/CryptoAlgorithm/helper' import { first, orderBy } from 'lodash-unified' import { recover_ECDH_256k1_KeyPair_ByMnemonicWord } from '../../utils/mnemonic-code' -import { queryExistedBindingByPersona } from '@masknet/web3-providers' assertEnvironment(Environment.ManifestBackground) @@ -180,13 +179,11 @@ export async function queryOwnedPersonaInformation(): Promise (a.updatedAt > b.updatedAt ? 1 : -1))) { const map: ProfileInformation[] = [] - const _proof = await queryExistedBindingByPersona(persona.publicHexKey as string) result.push({ nickname: persona.nickname, identifier: persona.identifier, linkedProfiles: map, publicHexKey: persona.publicHexKey, - proof: _proof, }) for (const [profile] of persona.linkedProfiles) { const linkedProfile = await queryProfile(profile) diff --git a/packages/shared-base/src/Messages/Mask.ts b/packages/shared-base/src/Messages/Mask.ts index b3d5fc4b1237..eb3fea31a475 100644 --- a/packages/shared-base/src/Messages/Mask.ts +++ b/packages/shared-base/src/Messages/Mask.ts @@ -58,6 +58,7 @@ export interface MaskEvents extends MaskSettingsEvents, MaskMobileOnlyEvents, Ma /** emit when the settings finished syncing with storage. */ createInternalSettingsUpdated: SettingsUpdateEvent ownPersonaChanged: void + ownProofChange: void restoreSuccess: void profilesChanged: UpdateEvent[] relationsChanged: RelationChangedEvent[] From 242396163d0c7d1d0f4e77be2b452058244b7df6 Mon Sep 17 00:00:00 2001 From: billy Date: Wed, 16 Mar 2022 15:47:39 +0800 Subject: [PATCH 08/15] refactor: fix --- .../pages/Personas/components/PersonaCard/Row.tsx | 6 +----- .../pages/Personas/components/PersonaLine/index.tsx | 12 +++++++----- .../src/pages/Personas/hooks/usePersonaContext.ts | 8 -------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx index ae7e01a4bdc8..710dd469c31f 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx @@ -8,7 +8,6 @@ import { ProfileIdentifier, ProfileInformation, DashboardRoutes, - NextIDPersonaBindings, NextIDAction, } from '@masknet/shared-base' import { useMenu } from '@masknet/shared' @@ -69,7 +68,6 @@ export const PersonaRowCard = memo(() => { return ( void onDisconnect: (identifier: ProfileIdentifier) => void onRename: (identifier: PersonaIdentifier, target: string, callback?: () => void) => Promise - proof?: NextIDPersonaBindings onDeleteBound: ( identifier: PersonaIdentifier, profile: ProfileIdentifier, @@ -105,7 +102,7 @@ export const PersonaRowCardUI = memo((props) => { const { classes } = useStyles() const { confirmPassword } = useContext(UserContext) - const { nickname, definedSocialNetworks, identifier, profiles, proof } = props + const { nickname, definedSocialNetworks, identifier, profiles } = props const { onConnect, onDisconnect, onRename, onDeleteBound } = props const { value: privateKey } = useExportPrivateKey(identifier) @@ -197,7 +194,6 @@ export const PersonaRowCardUI = memo((props) => { } else { return ( = 5} isHideOperations={false} key={networkIdentifier} diff --git a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx index a9c579d32ec8..a14ca9214b73 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx @@ -3,10 +3,12 @@ import { Box, Button, Link, Stack, Typography } from '@mui/material' import { getMaskColor, MaskColorVar, makeStyles } from '@masknet/theme' import { useDashboardI18N } from '../../../../locales' import { DisconnectProfileDialog } from '../DisconnectProfileDialog' -import type { NextIDPersonaBindings, PersonaIdentifier, ProfileIdentifier, BindingProof } from '@masknet/shared-base' +import type { PersonaIdentifier, ProfileIdentifier, BindingProof } from '@masknet/shared-base' import { SOCIAL_MEDIA_ICON_MAPPING } from '@masknet/shared' import { PersonaContext } from '../../hooks/usePersonaContext' import { NextIdPersonaWarningIcon, NextIdPersonaVerifiedIcon } from '@masknet/icons' +import { queryExistedBindingByPersona } from '@masknet/web3-providers' +import { useAsyncRetry } from 'react-use' const useStyles = makeStyles()((theme) => ({ connect: { @@ -76,7 +78,6 @@ export interface ConnectedPersonaLineProps { profileIdentifiers: ProfileIdentifier[] networkIdentifier: string disableAdd?: boolean - proof?: NextIDPersonaBindings personaIdentifier: PersonaIdentifier } @@ -89,15 +90,16 @@ export const ConnectedPersonaLine = memo( networkIdentifier, isHideOperations, disableAdd, - proof, personaIdentifier, }) => { const t = useDashboardI18N() - const { openProfilePage } = PersonaContext.useContainer() + const { openProfilePage, currentPersona } = PersonaContext.useContainer() const { classes } = useStyles() const [openDisconnectDialog, setOpenDisconnectDialog] = useState(false) - + const proof = useAsyncRetry(async () => { + return currentPersona?.proof || queryExistedBindingByPersona(currentPersona?.publicHexKey as string) + }).value const handleUserIdClick = async (network: string, userId: string) => { await openProfilePage(network, userId) } diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts index 4964aabd3c9b..cbbfb8cd6734 100644 --- a/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaContext.ts @@ -5,8 +5,6 @@ import { Services } from '../../../API' import { useOwnedPersonas, useDefinedSocialNetworkUIs, SocialNetwork, useCurrentPersonaIdentifier } from '../api' import { useCreatePersona } from './useCreatePersona' import { useDeleteBound } from './useOperateBindingProof' -import { useAsyncRetry } from 'react-use' -import { queryExistedBindingByPersona } from '@masknet/web3-providers' function usePersonaContext() { const currentPersonaIdentifier = useCurrentPersonaIdentifier() @@ -15,12 +13,6 @@ function usePersonaContext() { const currentPersona = personas.find((x) => x.identifier.equals(currentPersonaIdentifier)) const [open, setOpen] = useState(false) - useAsyncRetry(async () => { - personas.forEach(async (item) => { - item.proof = await queryExistedBindingByPersona(item.publicHexKey as string) - }) - }) - const [, connectPersona] = useConnectSocialNetwork() const [, openProfilePage] = useOpenProfilePage() const [, disconnectPersona] = useDisconnectSocialNetwork() From 97106775f2a0375e458fcecd907250564e42ef33 Mon Sep 17 00:00:00 2001 From: billy Date: Wed, 16 Mar 2022 17:36:16 +0800 Subject: [PATCH 09/15] fix: usePersonaProof hook --- .../Personas/components/PersonaLine/index.tsx | 24 ++++++++++++------- .../Personas/hooks/useOperateBindingProof.ts | 3 ++- .../pages/Personas/hooks/usePersonaProof.ts | 14 +++++++++++ 3 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts diff --git a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx index a14ca9214b73..a53874a2ebce 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx @@ -4,11 +4,10 @@ import { getMaskColor, MaskColorVar, makeStyles } from '@masknet/theme' import { useDashboardI18N } from '../../../../locales' import { DisconnectProfileDialog } from '../DisconnectProfileDialog' import type { PersonaIdentifier, ProfileIdentifier, BindingProof } from '@masknet/shared-base' -import { SOCIAL_MEDIA_ICON_MAPPING } from '@masknet/shared' +import { LoadingAnimation, SOCIAL_MEDIA_ICON_MAPPING } from '@masknet/shared' import { PersonaContext } from '../../hooks/usePersonaContext' +import { usePersonaProof } from '../../hooks/usePersonaProof' import { NextIdPersonaWarningIcon, NextIdPersonaVerifiedIcon } from '@masknet/icons' -import { queryExistedBindingByPersona } from '@masknet/web3-providers' -import { useAsyncRetry } from 'react-use' const useStyles = makeStyles()((theme) => ({ connect: { @@ -97,9 +96,9 @@ export const ConnectedPersonaLine = memo( const { classes } = useStyles() const [openDisconnectDialog, setOpenDisconnectDialog] = useState(false) - const proof = useAsyncRetry(async () => { - return currentPersona?.proof || queryExistedBindingByPersona(currentPersona?.publicHexKey as string) - }).value + + const proof = usePersonaProof() + const handleUserIdClick = async (network: string, userId: string) => { await openProfilePage(network, userId) } @@ -111,7 +110,7 @@ export const ConnectedPersonaLine = memo( } const handleDisconnect = (profile: ProfileIdentifier) => { - const isProved = proof?.proofs.find((x) => { + const isProved = proof?.value?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() }) if (isProved && onDeleteBound) { @@ -121,16 +120,23 @@ export const ConnectedPersonaLine = memo( onDisconnect(profile) } const userIdBox = (profile: ProfileIdentifier) => { - const isProved = proof?.proofs.find((x) => { + const isProved = proof?.value?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() }) + return (
@{profile.userId}
handleProofIconClick(e, isProved)}> - {isProved?.is_valid ? : } + {proof.loading ? ( + + ) : isProved?.is_valid ? ( + + ) : ( + + )}
) diff --git a/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts b/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts index 25bda7a11f38..7e208fa383a8 100644 --- a/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts +++ b/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts @@ -1,7 +1,7 @@ import type { ECKeyIdentifier } from '@masknet/shared-base' import { bindProof, createPersonaPayload } from '@masknet/web3-providers' import { useAsyncFn } from 'react-use' -import { Services } from '../../../API' +import { Services, Messages } from '../../../API' export function useDeleteBound() { return useAsyncFn(async (identifier: ECKeyIdentifier, profile, network, action) => { @@ -22,5 +22,6 @@ export function useDeleteBound() { signature: signature, }) Services.Identity.detachProfile(profile) + Messages.events.ownProofChange.sendToAll(undefined) }) } diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts new file mode 100644 index 000000000000..0b0172e1361a --- /dev/null +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts @@ -0,0 +1,14 @@ +import { queryExistedBindingByPersona } from '@masknet/web3-providers' +import { useEffect } from 'react' +import { useAsyncRetry } from 'react-use' +import { Messages } from '../../../API' +import { PersonaContext } from './usePersonaContext' + +export function usePersonaProof() { + const { currentPersona } = PersonaContext.useContainer() + const res = useAsyncRetry(async () => { + return queryExistedBindingByPersona(currentPersona?.publicHexKey as string) + }, []) + useEffect(() => Messages.events.ownProofChange.on(res.retry), [res.retry]) + return res +} From 76fc4a97aafaac47000feca4fbd32b5306dbdc47 Mon Sep 17 00:00:00 2001 From: billy Date: Wed, 16 Mar 2022 17:40:49 +0800 Subject: [PATCH 10/15] style: kill unused code --- .../src/pages/Personas/components/PersonaCard/index.tsx | 4 +--- .../src/pages/Personas/components/PersonaLine/index.tsx | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx index 89e4a21c56bc..59a44ed9d639 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx @@ -60,7 +60,6 @@ export interface PersonaCardProps { active?: boolean identifier: PersonaIdentifier profiles: ProfileInformation[] - proof?: NextIDPersonaBindings onClick(): void } @@ -84,7 +83,7 @@ export interface PersonaCardUIProps extends PersonaCardProps { } export const PersonaCardUI = memo((props) => { - const { nickname, active = false, definedSocialNetworks, identifier, profiles, proof } = props + const { nickname, active = false, definedSocialNetworks, identifier, profiles } = props const { onConnect, onDisconnect, onClick } = props const { classes } = useStyles() @@ -117,7 +116,6 @@ export const PersonaCardUI = memo((props) => { } else { return ( onConnect(identifier, networkIdentifier)} diff --git a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx index a53874a2ebce..fb1323b5b873 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx @@ -92,7 +92,7 @@ export const ConnectedPersonaLine = memo( personaIdentifier, }) => { const t = useDashboardI18N() - const { openProfilePage, currentPersona } = PersonaContext.useContainer() + const { openProfilePage } = PersonaContext.useContainer() const { classes } = useStyles() const [openDisconnectDialog, setOpenDisconnectDialog] = useState(false) From 96a16311e7e43c505acb6afa000b2a241cf0c33c Mon Sep 17 00:00:00 2001 From: billy Date: Wed, 16 Mar 2022 17:53:04 +0800 Subject: [PATCH 11/15] fix: type --- .../src/pages/Personas/components/PersonaDrawer/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx index 473605983e37..3804da3758dc 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx @@ -83,11 +83,10 @@ export const PersonaDrawerUI = memo( {personas.map((item) => { - const { identifier, nickname, linkedProfiles, proof } = item + const { identifier, nickname, linkedProfiles } = item return ( Date: Wed, 16 Mar 2022 18:12:28 +0800 Subject: [PATCH 12/15] style: renamed events --- .../src/pages/Personas/hooks/useOperateBindingProof.ts | 2 +- packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts | 2 +- packages/mask/src/components/InjectedComponents/SetupGuide.tsx | 2 +- packages/shared-base/src/Messages/Mask.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts b/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts index 7e208fa383a8..68636214c2d9 100644 --- a/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts +++ b/packages/dashboard/src/pages/Personas/hooks/useOperateBindingProof.ts @@ -22,6 +22,6 @@ export function useDeleteBound() { signature: signature, }) Services.Identity.detachProfile(profile) - Messages.events.ownProofChange.sendToAll(undefined) + Messages.events.ownProofChanged.sendToAll(undefined) }) } diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts index 0b0172e1361a..4a19ac007b2b 100644 --- a/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts @@ -9,6 +9,6 @@ export function usePersonaProof() { const res = useAsyncRetry(async () => { return queryExistedBindingByPersona(currentPersona?.publicHexKey as string) }, []) - useEffect(() => Messages.events.ownProofChange.on(res.retry), [res.retry]) + useEffect(() => Messages.events.ownProofChanged.on(res.retry), [res.retry]) return res } diff --git a/packages/mask/src/components/InjectedComponents/SetupGuide.tsx b/packages/mask/src/components/InjectedComponents/SetupGuide.tsx index 02600672d488..82ec465f3bb5 100644 --- a/packages/mask/src/components/InjectedComponents/SetupGuide.tsx +++ b/packages/mask/src/components/InjectedComponents/SetupGuide.tsx @@ -154,7 +154,7 @@ function SetupGuideUI(props: SetupGuideUIProps) { }) await waitingPost - MaskMessages.events.ownProofChange.sendToAll(undefined) + MaskMessages.events.ownProofChanged.sendToAll(undefined) } } diff --git a/packages/shared-base/src/Messages/Mask.ts b/packages/shared-base/src/Messages/Mask.ts index eb3fea31a475..d1d176621393 100644 --- a/packages/shared-base/src/Messages/Mask.ts +++ b/packages/shared-base/src/Messages/Mask.ts @@ -58,7 +58,7 @@ export interface MaskEvents extends MaskSettingsEvents, MaskMobileOnlyEvents, Ma /** emit when the settings finished syncing with storage. */ createInternalSettingsUpdated: SettingsUpdateEvent ownPersonaChanged: void - ownProofChange: void + ownProofChanged: void restoreSuccess: void profilesChanged: UpdateEvent[] relationsChanged: RelationChangedEvent[] From 6554a21f0c498ec4cabed78632e9a7e87d346b5c Mon Sep 17 00:00:00 2001 From: billy Date: Wed, 16 Mar 2022 18:14:57 +0800 Subject: [PATCH 13/15] fix: remove as string --- packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts index 4a19ac007b2b..34557f2f302f 100644 --- a/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts @@ -7,7 +7,8 @@ import { PersonaContext } from './usePersonaContext' export function usePersonaProof() { const { currentPersona } = PersonaContext.useContainer() const res = useAsyncRetry(async () => { - return queryExistedBindingByPersona(currentPersona?.publicHexKey as string) + if (!currentPersona || !currentPersona.publicHexKey) return + return queryExistedBindingByPersona(currentPersona.publicHexKey) }, []) useEffect(() => Messages.events.ownProofChanged.on(res.retry), [res.retry]) return res From 5b2f67db821004a2cace3565d87c0ee441158af7 Mon Sep 17 00:00:00 2001 From: billy Date: Wed, 16 Mar 2022 19:06:20 +0800 Subject: [PATCH 14/15] fix: fix --- .../src/pages/Personas/components/PersonaCard/Row.tsx | 11 +++++++---- .../pages/Personas/components/PersonaCard/index.tsx | 7 +++++-- .../pages/Personas/components/PersonaDrawer/index.tsx | 4 +++- .../pages/Personas/components/PersonaLine/index.tsx | 11 +++++------ .../src/pages/Personas/hooks/usePersonaProof.ts | 9 +++------ 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx index 710dd469c31f..4bc0b1c6d8b3 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/Row.tsx @@ -25,6 +25,7 @@ import { styled } from '@mui/material/styles' import { PreviewDialog as ExportPersonaDialog } from '../../../SignUp/steps/PreviewDialog' import { useExportPrivateKey } from '../../hooks/useExportPrivateKey' import { useExportMnemonicWords } from '../../hooks/useExportMnemonicWords' +import { usePersonaProof } from '../../hooks/usePersonaProof' const useStyles = makeStyles()((theme) => ({ setting: { @@ -64,10 +65,11 @@ const MenuText = styled('span')(` export const PersonaRowCard = memo(() => { const { currentPersona, connectPersona, disconnectPersona, renamePersona, deleteBound, definedSocialNetworks } = PersonaContext.useContainer() - if (!currentPersona) return null + if (!currentPersona || !currentPersona.publicHexKey) return null return ( void onDisconnect: (identifier: ProfileIdentifier) => void onRename: (identifier: PersonaIdentifier, target: string, callback?: () => void) => Promise @@ -102,12 +105,11 @@ export const PersonaRowCardUI = memo((props) => { const { classes } = useStyles() const { confirmPassword } = useContext(UserContext) - const { nickname, definedSocialNetworks, identifier, profiles } = props + const { nickname, definedSocialNetworks, identifier, profiles, publicKey } = props const { onConnect, onDisconnect, onRename, onDeleteBound } = props - const { value: privateKey } = useExportPrivateKey(identifier) const { value: words } = useExportMnemonicWords(identifier) - + const proof = usePersonaProof(publicKey) const [avatarOn, toggleAvatar] = useToggle(false) const [renameDialogOpen, setRenameDialogOpen] = useState(false) const [logoutDialogOpen, setLogoutDialogOpen] = useState(false) @@ -194,6 +196,7 @@ export const PersonaRowCardUI = memo((props) => { } else { return ( = 5} isHideOperations={false} key={networkIdentifier} diff --git a/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx index 59a44ed9d639..08402339468e 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaCard/index.tsx @@ -12,6 +12,7 @@ import { formatFingerprint } from '@masknet/shared' import { PersonaContext } from '../../hooks/usePersonaContext' import type { SocialNetwork } from '../../api' import classNames from 'classnames' +import { usePersonaProof } from '../../hooks/usePersonaProof' const useStyles = makeStyles()((theme) => ({ card: { @@ -60,6 +61,7 @@ export interface PersonaCardProps { active?: boolean identifier: PersonaIdentifier profiles: ProfileInformation[] + publicKey: string onClick(): void } @@ -83,10 +85,10 @@ export interface PersonaCardUIProps extends PersonaCardProps { } export const PersonaCardUI = memo((props) => { - const { nickname, active = false, definedSocialNetworks, identifier, profiles } = props + const { nickname, active = false, definedSocialNetworks, identifier, profiles, publicKey } = props const { onConnect, onDisconnect, onClick } = props const { classes } = useStyles() - + const proof = usePersonaProof(publicKey) return (
@@ -116,6 +118,7 @@ export const PersonaCardUI = memo((props) => { } else { return ( onConnect(identifier, networkIdentifier)} diff --git a/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx index 3804da3758dc..a28f8b73a0ea 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx @@ -83,10 +83,12 @@ export const PersonaDrawerUI = memo( {personas.map((item) => { - const { identifier, nickname, linkedProfiles } = item + const { identifier, nickname, linkedProfiles, publicHexKey } = item + if (!publicHexKey) return null return ( ({ @@ -78,6 +77,7 @@ export interface ConnectedPersonaLineProps { networkIdentifier: string disableAdd?: boolean personaIdentifier: PersonaIdentifier + proof: { loading: boolean; value?: NextIDPersonaBindings } } export const ConnectedPersonaLine = memo( @@ -90,6 +90,7 @@ export const ConnectedPersonaLine = memo( isHideOperations, disableAdd, personaIdentifier, + proof, }) => { const t = useDashboardI18N() const { openProfilePage } = PersonaContext.useContainer() @@ -97,8 +98,6 @@ export const ConnectedPersonaLine = memo( const [openDisconnectDialog, setOpenDisconnectDialog] = useState(false) - const proof = usePersonaProof() - const handleUserIdClick = async (network: string, userId: string) => { await openProfilePage(network, userId) } @@ -110,7 +109,7 @@ export const ConnectedPersonaLine = memo( } const handleDisconnect = (profile: ProfileIdentifier) => { - const isProved = proof?.value?.proofs.find((x) => { + const isProved = proof.value?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() }) if (isProved && onDeleteBound) { @@ -120,7 +119,7 @@ export const ConnectedPersonaLine = memo( onDisconnect(profile) } const userIdBox = (profile: ProfileIdentifier) => { - const isProved = proof?.value?.proofs.find((x) => { + const isProved = proof.value?.proofs.find((x) => { return x.platform === 'twitter' && x.identity === profile.userId.toLowerCase() }) diff --git a/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts b/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts index 34557f2f302f..845204bdcdb1 100644 --- a/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts +++ b/packages/dashboard/src/pages/Personas/hooks/usePersonaProof.ts @@ -2,14 +2,11 @@ import { queryExistedBindingByPersona } from '@masknet/web3-providers' import { useEffect } from 'react' import { useAsyncRetry } from 'react-use' import { Messages } from '../../../API' -import { PersonaContext } from './usePersonaContext' -export function usePersonaProof() { - const { currentPersona } = PersonaContext.useContainer() +export function usePersonaProof(publicHexKey: string) { const res = useAsyncRetry(async () => { - if (!currentPersona || !currentPersona.publicHexKey) return - return queryExistedBindingByPersona(currentPersona.publicHexKey) - }, []) + return queryExistedBindingByPersona(publicHexKey) + }, [publicHexKey]) useEffect(() => Messages.events.ownProofChanged.on(res.retry), [res.retry]) return res } From 97dbbfed3003c932f520e97cecd8bccd927034f1 Mon Sep 17 00:00:00 2001 From: billy Date: Wed, 16 Mar 2022 20:51:55 +0800 Subject: [PATCH 15/15] fix: only twitter proof check --- .../Personas/components/PersonaLine/index.tsx | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx index 722ee0223e3c..411396d1a0e2 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaLine/index.tsx @@ -126,17 +126,19 @@ export const ConnectedPersonaLine = memo( return (
@{profile.userId}
-
handleProofIconClick(e, isProved)}> - {proof.loading ? ( - - ) : isProved?.is_valid ? ( - - ) : ( - - )} -
+ {profile.network === 'twitter.com' && ( +
handleProofIconClick(e, isProved)}> + {proof.loading ? ( + + ) : isProved?.is_valid ? ( + + ) : ( + + )} +
+ )}
) }