From 7085a4323845009f055b5b0acfdc0dff40e534f9 Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Thu, 26 May 2022 12:06:03 +0800 Subject: [PATCH 01/12] chore: bump version to 2.8.1 --- package.json | 2 +- packages/mask/src/manifest.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 671aa07fea2e..d1c6a2792c9a 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "yarn": ">=999.0.0", "npm": ">=999.0.0" }, - "version": "2.8.0", + "version": "2.8.1", "private": true, "license": "AGPL-3.0-or-later", "scripts": { diff --git a/packages/mask/src/manifest.json b/packages/mask/src/manifest.json index 9f1dfefa71f5..11ca601842b0 100644 --- a/packages/mask/src/manifest.json +++ b/packages/mask/src/manifest.json @@ -1,6 +1,6 @@ { "name": "Mask Network", - "version": "2.8.0", + "version": "2.8.1", "manifest_version": 2, "permissions": ["storage", "downloads", "webNavigation", "activeTab"], "optional_permissions": ["", "notifications", "clipboardRead"], From 25aae2719d2e388bf16c5bf3ef86367c603f83bb Mon Sep 17 00:00:00 2001 From: BillyS Date: Thu, 26 May 2022 12:41:51 +0800 Subject: [PATCH 02/12] fix: kill no connect when no localkey (#6352) --- .../EncryptionTargetSelector.tsx | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx b/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx index 1287d155aa87..2777f807aadc 100644 --- a/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx +++ b/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx @@ -90,21 +90,22 @@ export function EncryptionTargetSelector(props: EncryptionTargetSelectorProps) { const { t } = useI18N() const { classes } = useStyles() const [anchorEl, setAnchorEl] = useState(null) - const e2eDisabledMessage = props.e2eDisabled ? ( -
- {t('persona_required')} - { - if (props.e2eDisabled === E2EUnavailableReason.NoLocalKey) return - props.e2eDisabled === E2EUnavailableReason.NoPersona - ? props.onCreatePersona() - : props.onConnectPersona() - }}> - {props.e2eDisabled === E2EUnavailableReason.NoPersona ? t('create') : t('connect')} - -
- ) : null + const e2eDisabledMessage = + props.e2eDisabled && props.e2eDisabled !== E2EUnavailableReason.NoLocalKey ? ( +
+ {t('persona_required')} + { + if (props.e2eDisabled === E2EUnavailableReason.NoLocalKey) return + props.e2eDisabled === E2EUnavailableReason.NoPersona + ? props.onCreatePersona() + : props.onConnectPersona() + }}> + {props.e2eDisabled === E2EUnavailableReason.NoPersona ? t('create') : t('connect')} + +
+ ) : null const noLocalKeyMessage = props.e2eDisabled === E2EUnavailableReason.NoLocalKey && (
{t('compose_no_local_key')} From dca240cf64789f10220be3e914f3f09668191223 Mon Sep 17 00:00:00 2001 From: BillyS Date: Thu, 26 May 2022 13:44:32 +0800 Subject: [PATCH 03/12] hotfix: some ui issues (#6354) * fix: kill no connect when no localkey * fix: some ui issues --- .../CompositionDialog/EncryptionTargetSelector.tsx | 4 ++-- .../components/CompositionDialog/PopoverListItem.tsx | 10 +--------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx b/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx index 2777f807aadc..5937def1eeb3 100644 --- a/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx +++ b/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx @@ -138,18 +138,18 @@ export function EncryptionTargetSelector(props: EncryptionTargetSelectorProps) { value={EncryptionTargetType.Public} title={t('compose_encrypt_visible_to_all')} subTitle={t('compose_encrypt_visible_to_all_sub')} - showDivider /> +
props.onChange(EncryptionTargetType.Self)} disabled={!!props.e2eDisabled} value={EncryptionTargetType.Self} title={t('compose_encrypt_visible_to_private')} subTitle={t('compose_encrypt_visible_to_private_sub')} - showDivider /> {e2eDisabledMessage} {noLocalKeyMessage} +
{ props.onChange(EncryptionTargetType.E2E) diff --git a/packages/mask/src/components/CompositionDialog/PopoverListItem.tsx b/packages/mask/src/components/CompositionDialog/PopoverListItem.tsx index 3024a9274cf9..b69206b74ce4 100644 --- a/packages/mask/src/components/CompositionDialog/PopoverListItem.tsx +++ b/packages/mask/src/components/CompositionDialog/PopoverListItem.tsx @@ -8,12 +8,6 @@ const useStyles = makeStyles()((theme) => ({ display: 'flex', alignItems: 'center', }, - divider: { - width: '100%', - height: 1, - background: theme.palette.divider, - margin: '8px 0', - }, mainTitle: { fontSize: 14, color: theme.palette.text.primary, @@ -34,11 +28,10 @@ interface PopoverListItemProps { title: string subTitle?: string disabled?: boolean - showDivider?: boolean onItemClick?(): void } export function PopoverListItem(props: PopoverListItemProps) { - const { title, subTitle, value, itemTail, disabled, showDivider, onItemClick } = props + const { title, subTitle, value, itemTail, disabled, onItemClick } = props const { classes, cx } = useStyles() return ( <> @@ -53,7 +46,6 @@ export function PopoverListItem(props: PopoverListItemProps) { {itemTail}
- {showDivider &&
} ) } From 278776f1bc2ecc8afe059541bab0f96be5cc6e2a Mon Sep 17 00:00:00 2001 From: billy Date: Thu, 26 May 2022 13:54:20 +0800 Subject: [PATCH 04/12] fix: build err --- .../CompositionDialog/EncryptionMethodSelector.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/mask/src/components/CompositionDialog/EncryptionMethodSelector.tsx b/packages/mask/src/components/CompositionDialog/EncryptionMethodSelector.tsx index 66628247b110..27c34a0ba7d7 100644 --- a/packages/mask/src/components/CompositionDialog/EncryptionMethodSelector.tsx +++ b/packages/mask/src/components/CompositionDialog/EncryptionMethodSelector.tsx @@ -13,6 +13,12 @@ const useStyles = makeStyles()((theme) => ({ color: theme.palette.text.secondary, marginRight: 12, }, + divider: { + width: '100%', + height: 1, + background: theme.palette.divider, + margin: '8px 0', + }, rightIcon: { marginLeft: 'auto', }, @@ -48,8 +54,8 @@ export function EncryptionMethodSelector(props: EncryptionMethodSelectorProps) { value={EncryptionMethodType.Text} title={t('compose_encrypt_method_text')} subTitle={t('compose_encrypt_method_text_sub_title')} - showDivider /> +
Date: Mon, 23 May 2022 18:30:09 +0800 Subject: [PATCH 05/12] fix: e2e key partition compat (#6230) * fix: e2e key partition compat * fix: key partition * fix: key partition path --- .../network/gun/encryption/queryPostKey.ts | 73 +++++++++++++------ .../services/crypto/appendEncryption.ts | 11 ++- .../background/services/crypto/decryption.ts | 16 +--- .../background/services/crypto/encryption.ts | 10 +-- .../components/CompositionDialog/useSubmit.ts | 2 +- .../DecryptedPost/DecryptedPostSuccess.tsx | 2 + 6 files changed, 70 insertions(+), 44 deletions(-) diff --git a/packages/mask/background/network/gun/encryption/queryPostKey.ts b/packages/mask/background/network/gun/encryption/queryPostKey.ts index b5fecca3f820..b321a06eaf98 100644 --- a/packages/mask/background/network/gun/encryption/queryPostKey.ts +++ b/packages/mask/background/network/gun/encryption/queryPostKey.ts @@ -1,10 +1,10 @@ -import { decodeArrayBuffer, encodeArrayBuffer } from '@dimensiondev/kit' -import type { DecryptStaticECDH_PostKey, EncryptionResultE2EMap } from '@masknet/encryption' +import { decodeArrayBuffer, encodeArrayBuffer, isNonNull, unreachable } from '@dimensiondev/kit' +import { type DecryptStaticECDH_PostKey, type EncryptionResultE2EMap, SocialNetworkEnum } from '@masknet/encryption' import type { EC_Public_CryptoKey, EC_Public_JsonWebKey } from '@masknet/shared-base' import { CryptoKeyToJsonWebKey } from '../../../../utils-pure' import { getGunData, pushToGunDataArray, subscribeGunMapData } from '@masknet/gun-utils' import { EventIterator } from 'event-iterator' -import { noop } from 'lodash-unified' +import { isObject, noop, uniq } from 'lodash-unified' import { queryPublicKey } from '../../../database/persona/helper' // !!! Change how this file access Gun will break the compatibility of v40 payload decryption. @@ -36,31 +36,47 @@ namespace Version38Or39 { version: -38 | -39, iv: Uint8Array, minePublicKey: EC_Public_CryptoKey, - networkHint: string, + network: SocialNetworkEnum, abortSignal: AbortSignal, ): AsyncGenerator { const minePublicKeyJWK = await CryptoKeyToJsonWebKey(minePublicKey) - const { keyHash, postHash } = await calculatePostKeyPartition(version, networkHint, iv, minePublicKeyJWK) + const { keyHash, postHash } = await calculatePostKeyPartition(version, network, iv, minePublicKeyJWK) /* cspell:disable-next-line */ // ? In this step we get something like ["jzarhbyjtexiE7aB1DvQ", "jzarhuse6xlTAtblKRx9"] - console.log(`[@masknet/encryption] Reading key partition [${postHash}][${keyHash}]`) - const internalNodeNames = Object.keys((await getGunData(postHash, keyHash)) || {}).filter((x) => x !== '_') + console.log( + `[@masknet/encryption] Reading key partition [${postHash[0]}][${keyHash}] and [${postHash[1]}][${keyHash}]`, + ) + const internalNodeNames = uniq( + ( + await Promise.all([ + // + getGunData(postHash[0], keyHash), + getGunData(postHash[1], keyHash), + ]) + ) + .filter(isNonNull) + .filter(isObject) + .map(Object.keys) + .flat() + .filter((x) => x !== '_'), + ) // ? In this step we get all keys in this category (gun2[postHash][keyHash]) const resultPromise = internalNodeNames.map((key) => getGunData(key)) const iter = new EventIterator((queue) => { + // immediate results for (const result of resultPromise) result.then(emit, noop) - - async function main() { - const iter = subscribeGunMapData([postHash], isValidData, abortSignal) - for await (const data of iter) emit(data) - queue.stop() + // future results + Promise.all([ + main(subscribeGunMapData([postHash[1]], isValidData, abortSignal)), + main(subscribeGunMapData([postHash[0]], isValidData, abortSignal)), + ]).then(() => queue.stop()) + + async function main(keyProvider: AsyncGenerator) { + for await (const data of keyProvider) emit(data) } - - main() - - function emit(result: any) { + function emit(result: unknown) { if (abortSignal.aborted) return if (!isValidData(result)) return queue.push({ @@ -86,10 +102,10 @@ namespace Version38Or39 { export async function publishPostAESKey_version39Or38( version: -39 | -38, postIV: Uint8Array, - networkHint: string, + network: SocialNetworkEnum, receiversKeys: PublishedAESKeyRecord[] | EncryptionResultE2EMap, ) { - const postHash = await hashIV(networkHint, postIV) + const [postHash] = await hashIV(network, postIV) if (Array.isArray(receiversKeys)) { // Store AES key to gun receiversKeys.forEach(async ({ aesKey, receiverKey }) => { @@ -137,23 +153,34 @@ namespace Version38Or39 { async function calculatePostKeyPartition( version: -38 | -39, - networkHint: string, + network: SocialNetworkEnum, iv: Uint8Array, key: EC_Public_JsonWebKey, ) { - const postHash = await hashIV(networkHint, iv) + const postHash = await hashIV(network, iv) // In version > -39, we will use stable hash to prevent unstable result for key hashing const keyHash = version === -39 ? await hashKey39(key) : await hashKey38(key) return { postHash, keyHash } } - async function hashIV(networkHint: string, iv: Uint8Array) { + async function hashIV(network: SocialNetworkEnum, iv: Uint8Array): Promise<[string, string]> { const hashPair = '9283464d-ee4e-4e8d-a7f3-cf392a88133f' const N = 2 - const hash = await work(encodeArrayBuffer(iv), hashPair) - return networkHint + '-' + hash.slice(0, N) + const hash = (await work(encodeArrayBuffer(iv), hashPair)).slice(0, N) + const networkHint = getNetworkHint(network) + return [`${networkHint}${hash}`, `${networkHint}-${hash}`] + } + + function getNetworkHint(x: SocialNetworkEnum) { + if (x === SocialNetworkEnum.Facebook) return '' + if (x === SocialNetworkEnum.Twitter) return 'twitter-' + if (x === SocialNetworkEnum.Minds) return 'minds-' + if (x === SocialNetworkEnum.Instagram) return 'instagram-' + if (x === SocialNetworkEnum.Unknown) + throw new TypeError('[@masknet/encryption] Current SNS network is not correctly configured.') + unreachable(x) } // The difference between V38 and V39 is: V39 is not stable (JSON.stringify) diff --git a/packages/mask/background/services/crypto/appendEncryption.ts b/packages/mask/background/services/crypto/appendEncryption.ts index 9eacc2f45ed2..85913162c69b 100644 --- a/packages/mask/background/services/crypto/appendEncryption.ts +++ b/packages/mask/background/services/crypto/appendEncryption.ts @@ -1,4 +1,10 @@ -import { appendEncryptionTarget, EC_Key, EC_KeyCurveEnum, SupportedPayloadVersions } from '@masknet/encryption' +import { + appendEncryptionTarget, + EC_Key, + EC_KeyCurveEnum, + SocialNetworkEnum, + SupportedPayloadVersions, +} from '@masknet/encryption' import type { EC_Public_CryptoKey, PostIVIdentifier, ProfileIdentifier } from '@masknet/shared-base' import { deriveAESByECDH, queryPublicKey } from '../../database/persona/helper' import { updatePostDB, queryPostDB } from '../../database/post' @@ -10,6 +16,7 @@ export async function appendShareTarget( post: PostIVIdentifier, target: ProfileIdentifier[], whoAmI: ProfileIdentifier, + network: SocialNetworkEnum, ): Promise { if (version === -39 || version === -40) throw new TypeError('invalid version') const key = await getPostKeyCache(post) @@ -38,7 +45,7 @@ export async function appendShareTarget( }, ) - publishPostAESKey_version39Or38(-38, post.toIV(), whoAmI.network, e2e) + publishPostAESKey_version39Or38(-38, post.toIV(), network, e2e) updatePostDB( { diff --git a/packages/mask/background/services/crypto/decryption.ts b/packages/mask/background/services/crypto/decryption.ts index 22d2640a2238..d38f57442e67 100644 --- a/packages/mask/background/services/crypto/decryption.ts +++ b/packages/mask/background/services/crypto/decryption.ts @@ -1,4 +1,4 @@ -import { encodeArrayBuffer, unreachable } from '@dimensiondev/kit' +import { encodeArrayBuffer } from '@dimensiondev/kit' import { decrypt, parsePayload, @@ -158,7 +158,7 @@ async function* decryption(payload: string | Uint8Array, context: DecryptionCont -38, iv, author, - getNetworkHint(context.currentSocialNetwork), + context.currentSocialNetwork, signal || new AbortController().signal, ) }, @@ -170,7 +170,7 @@ async function* decryption(payload: string | Uint8Array, context: DecryptionCont -39, iv, author, - getNetworkHint(context.currentSocialNetwork), + context.currentSocialNetwork, signal || new AbortController().signal, ) }, @@ -185,16 +185,6 @@ async function* decryption(payload: string | Uint8Array, context: DecryptionCont return null } -function getNetworkHint(x: SocialNetworkEnum) { - if (x === SocialNetworkEnum.Facebook) return '' - if (x === SocialNetworkEnum.Twitter) return 'twitter-' - if (x === SocialNetworkEnum.Minds) return 'minds-' - if (x === SocialNetworkEnum.Instagram) return 'instagram-' - if (x === SocialNetworkEnum.Unknown) - throw new TypeError('[@masknet/encryption] Current SNS network is not correctly configured.') - unreachable(x) -} - /** @internal */ export async function getPostKeyCache(id: PostIVIdentifier) { const post = await queryPostDB(id) diff --git a/packages/mask/background/services/crypto/encryption.ts b/packages/mask/background/services/crypto/encryption.ts index 6f3a30844055..17f3d8774732 100644 --- a/packages/mask/background/services/crypto/encryption.ts +++ b/packages/mask/background/services/crypto/encryption.ts @@ -7,6 +7,8 @@ import { EncryptionResultE2EMap, EncryptTargetE2E, EncryptTargetPublic, + SocialNetworkEnum, + SocialNetworkEnumToProfileDomain, } from '@masknet/encryption' import { encryptByLocalKey, deriveAESByECDH, queryPublicKey } from '../../database/persona/helper' import { savePostKeyToDB } from '../../database/post/helper' @@ -18,13 +20,11 @@ export async function encryptTo( content: SerializableTypedMessages, target: EncryptTargetPublic | EncryptTargetE2E, whoAmI: ProfileIdentifier | undefined, - IdentifierNetwork: string, + network: SocialNetworkEnum, ): Promise { - // always use identifier network from ProfileIdentifier if possible. - if (whoAmI) IdentifierNetwork = whoAmI.network const { identifier, output, postKey, e2e } = await encrypt( { - network: IdentifierNetwork, + network: whoAmI?.network || SocialNetworkEnumToProfileDomain(network), author: whoAmI, message: content, target, @@ -59,7 +59,7 @@ export async function encryptTo( })().catch((error) => console.error('[@masknet/encryption] Failed to save post key to DB', error)) if (target.type === 'E2E') { - publishPostAESKey_version39Or38(-38, identifier.toIV(), IdentifierNetwork, e2e!) + publishPostAESKey_version39Or38(-38, identifier.toIV(), network, e2e!) } if (typeof output !== 'string') throw new Error('version -37 is not enabled yet!') return output diff --git a/packages/mask/src/components/CompositionDialog/useSubmit.ts b/packages/mask/src/components/CompositionDialog/useSubmit.ts index c58b539f13b9..632718d60c6e 100644 --- a/packages/mask/src/components/CompositionDialog/useSubmit.ts +++ b/packages/mask/src/components/CompositionDialog/useSubmit.ts @@ -25,7 +25,7 @@ export function useSubmit(onClose: () => void, reason: 'timeline' | 'popup' | 'r content, target, lastRecognizedIdentity?.identifier ?? fallbackProfile, - activatedSocialNetworkUI.networkIdentifier, + activatedSocialNetworkUI.encryptionNetwork, ) const encrypted = socialNetworkEncoder(activatedSocialNetworkUI.encryptionNetwork, _encrypted) diff --git a/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPostSuccess.tsx b/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPostSuccess.tsx index 1d3575ceaebd..10fa0f051c6a 100644 --- a/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPostSuccess.tsx +++ b/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPostSuccess.tsx @@ -14,6 +14,7 @@ import { useAsyncRetry } from 'react-use' import Services from '../../../extension/service' import type { LazyRecipients } from '../../CompositionDialog/CompositionUI' import { delay } from '@dimensiondev/kit' +import { activatedSocialNetworkUI } from '../../../social-network' export interface DecryptPostSuccessProps { message: TypedMessage @@ -109,6 +110,7 @@ function AppendShareDetail(props: { onClose(): void; recipients: LazyRecipients; iv, profiles.map((x) => x.identifier), props.whoAmI, + activatedSocialNetworkUI.encryptionNetwork, ) await delay(1500) retry() From a0b39e3fd7e6110ed4606202e9b253735dc043b9 Mon Sep 17 00:00:00 2001 From: guanbinrui <52657989+guanbinrui@users.noreply.github.com> Date: Thu, 26 May 2022 15:03:19 +0800 Subject: [PATCH 06/12] refactor: match more links on opensea (#6351) * refactor: match more links on opensea * fix: the wrong group index * refactor: remove matic --- packages/mask/src/plugins/Collectible/constants.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/mask/src/plugins/Collectible/constants.ts b/packages/mask/src/plugins/Collectible/constants.ts index 65e2309325f2..15e3bab7f736 100644 --- a/packages/mask/src/plugins/Collectible/constants.ts +++ b/packages/mask/src/plugins/Collectible/constants.ts @@ -6,8 +6,7 @@ export const PLUGIN_ID = PluginId.Collectible export const PLUGIN_META_KEY = `${PluginId.Collectible}:1` export const openseaHostnames = ['opensea.io', 'testnets.opensea.io'] -export const openseaPathnameRegexMatcher = /^\/assets\/(0x[\dA-Fa-f]{40})\/(\d+)/ - +export const openseaPathnameRegexMatcher = /^\/assets\/(?:ethereum\/)?(0x[\dA-Fa-f]{40})\/(\d+)/ export const raribleHostnames = ['rarible.com', 'app.rarible.com', 'ropsten.rarible.com'] export const rariblePathnameRegexMatcher = /^\/token\/(0x[\dA-Fa-f]{40}):(\d+)/ From 38580e1bef8024c19a99f7a36d504b25ed4150fe Mon Sep 17 00:00:00 2001 From: Hancheng Zhou Date: Thu, 26 May 2022 15:29:55 +0800 Subject: [PATCH 07/12] fix: collectible loading icon position (#6353) * fix: opensea parse && asset player loading icon position * chore: duplicate --- packages/shared/src/UI/components/AssetPlayer/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/src/UI/components/AssetPlayer/index.tsx b/packages/shared/src/UI/components/AssetPlayer/index.tsx index ed4b076351a1..daf41f78b39d 100644 --- a/packages/shared/src/UI/components/AssetPlayer/index.tsx +++ b/packages/shared/src/UI/components/AssetPlayer/index.tsx @@ -202,7 +202,7 @@ export const AssetPlayer = memo((props) => { )) : props.loadingIcon ?? } - {IframeResizerMemo} + {AssetPlayerState.LOADING !== playerState && IframeResizerMemo} ) }) From 9f5fac62756e61de5f7e2dabf0735696afd4f928 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Thu, 26 May 2022 15:58:28 +0800 Subject: [PATCH 08/12] fix: big number to string as react node --- packages/mask/src/plugins/Collectible/SNSAdaptor/OrderRow.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/OrderRow.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/OrderRow.tsx index f0b8f0a75305..b7e6d9c1f330 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/OrderRow.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/OrderRow.tsx @@ -108,7 +108,7 @@ export function OrderRow({ order, isDifferenceToken }: IRowProps) { order.current_price, order.payment_token_contract?.decimals, order.quantity, - )}{' '} + )?.toFixed()}{' '} {order.payment_token_contract?.symbol} From 82e38222978956db9cb1a9e7202b6cf0cfc42b8e Mon Sep 17 00:00:00 2001 From: Hancheng Zhou Date: Thu, 26 May 2022 17:44:11 +0800 Subject: [PATCH 09/12] fix(ui): claim button && mind fb tool box hint (#6337) --- cspell.json | 1 + .../InjectedComponents/ToolboxUnstyled.tsx | 5 ++++- .../DashboardComponents/ActionButton.tsx | 21 +++++++++++++++---- .../plugins/ITO/SNSAdaptor/ClaimAllDialog.tsx | 2 ++ .../facebook.com/injection/Toolbar.tsx | 3 ++- .../facebook.com/injection/ToolbarUI.tsx | 19 +++++++++-------- .../minds.com/customization/custom.ts | 13 ++++++------ .../minds.com/injection/ToolboxHint_UI.tsx | 4 ++-- .../minds.com/utils/selector.ts | 4 +--- .../src/web3/UI/EthereumChainBoundary.tsx | 3 +++ 10 files changed, 49 insertions(+), 26 deletions(-) diff --git a/cspell.json b/cspell.json index aad883a441e1..fd922f7317f4 100644 --- a/cspell.json +++ b/cspell.json @@ -288,6 +288,7 @@ "redpackets", "renfil", "shapeclip", + "ssrb", "steth", "swaptoken", "testweb", diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index 106098381aeb..6a2593c93cca 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -91,6 +91,7 @@ export function ToolboxHintUnstyled(props: ToolboxHintProps) { function ToolboxHintForApplication(props: ToolboxHintProps) { const { ListItemButton = MuiListItemButton, + ListItemIcon = MuiListItemIcon, Container = 'div', Typography = MuiTypography, iconSize = 24, @@ -104,7 +105,9 @@ function ToolboxHintForApplication(props: ToolboxHintProps) { - + + + {mini ? null : ( ('init') - const completeClass = classNames(classes.success, b.className) - const failClass = classNames(classes.failed, b.className) + const basicClass = classNames(classes.button, b.className) + const completeClass = classNames(basicClass, classes.success) + const failClass = classNames(basicClass, classes.failed) const run = () => { setState('wait') @@ -144,7 +145,16 @@ export function ActionButtonPromise(props: ActionButtonPromiseProps) { }, [executor, noUpdateEffect]) if (state === 'wait') - return