Commit 5c1ecb32 authored by tom goriunov's avatar tom goriunov Committed by GitHub

Metadata: show Notes (#2191)

Fixes #2174
parent 18eb8120
...@@ -27,6 +27,9 @@ export default function parseMetaPayload(meta: AddressMetadataTag['meta']): Addr ...@@ -27,6 +27,9 @@ export default function parseMetaPayload(meta: AddressMetadataTag['meta']): Addr
'appLogoURL', 'appLogoURL',
'appActionButtonText', 'appActionButtonText',
'warpcastHandle', 'warpcastHandle',
'data',
'alertBgColor',
'alertTextColor',
]; ];
for (const stringField of stringFields) { for (const stringField of stringFields) {
......
...@@ -90,3 +90,15 @@ export const warpcastTag: AddressMetadataTagApi = { ...@@ -90,3 +90,15 @@ export const warpcastTag: AddressMetadataTagApi = {
warpcastHandle: 'duckYduck', warpcastHandle: 'duckYduck',
}, },
}; };
export const noteTag: AddressMetadataTagApi = {
slug: 'scam-tag',
name: 'Phish 🐟',
tagType: 'note',
ordinal: 100,
meta: {
alertBgColor: 'deeppink',
alertTextColor: 'white',
data: '<b>Warning!</b> This is scam! See the <a href="https://example.com" target="_blank">report</a>',
},
};
...@@ -13,7 +13,7 @@ function getBg(props: StyleFunctionProps) { ...@@ -13,7 +13,7 @@ function getBg(props: StyleFunctionProps) {
const { theme, colorScheme: c } = props; const { theme, colorScheme: c } = props;
const darkBg = transparentize(`${ c }.200`, 0.16)(theme); const darkBg = transparentize(`${ c }.200`, 0.16)(theme);
return { return {
light: `colors.${ c }.${ c === 'red' ? '50' : '100' }`, light: `colors.${ c }.100`,
dark: darkBg, dark: darkBg,
}; };
} }
......
...@@ -32,6 +32,9 @@ export interface AddressMetadataTagApi extends Omit<AddressMetadataTag, 'meta'> ...@@ -32,6 +32,9 @@ export interface AddressMetadataTagApi extends Omit<AddressMetadataTag, 'meta'>
appLogoURL?: string; appLogoURL?: string;
appActionButtonText?: string; appActionButtonText?: string;
warpcastHandle?: string; warpcastHandle?: string;
data?: string;
alertBgColor?: string;
alertTextColor?: string;
} | null; } | null;
} }
......
import { Box } from '@chakra-ui/react';
import React from 'react';
import * as metadataMock from 'mocks/metadata/address';
import { test, expect } from 'playwright/lib';
import AddressMetadataAlert from './AddressMetadataAlert';
test('base view', async({ render }) => {
const component = await render(<Box mt={ 1 }><AddressMetadataAlert tags={ [ metadataMock.noteTag ] }/></Box>);
await expect(component).toHaveScreenshot();
});
import { Alert } from '@chakra-ui/react';
import React from 'react';
import type { AddressMetadataTagFormatted } from 'types/client/addressMetadata';
interface Props {
tags: Array<AddressMetadataTagFormatted> | undefined;
}
const AddressMetadataAlert = ({ tags }: Props) => {
const noteTag = tags?.find(({ tagType }) => tagType === 'note');
if (!noteTag) {
return null;
}
const content = noteTag.meta?.data;
if (!content) {
return null;
}
return (
<Alert
mt="-4px"
mb={ 6 }
status="error"
bgColor={ noteTag.meta?.alertBgColor }
color={ noteTag.meta?.alertTextColor }
whiteSpace="pre-wrap"
sx={{
'& a': {
color: 'link',
_hover: {
color: 'link_hovered',
},
},
}}
dangerouslySetInnerHTML={{ __html: content }}
/>
);
};
export default React.memo(AddressMetadataAlert);
...@@ -31,6 +31,7 @@ import AddressTxs from 'ui/address/AddressTxs'; ...@@ -31,6 +31,7 @@ import AddressTxs from 'ui/address/AddressTxs';
import AddressUserOps from 'ui/address/AddressUserOps'; import AddressUserOps from 'ui/address/AddressUserOps';
import AddressWithdrawals from 'ui/address/AddressWithdrawals'; import AddressWithdrawals from 'ui/address/AddressWithdrawals';
import AddressFavoriteButton from 'ui/address/details/AddressFavoriteButton'; import AddressFavoriteButton from 'ui/address/details/AddressFavoriteButton';
import AddressMetadataAlert from 'ui/address/details/AddressMetadataAlert';
import AddressQrCode from 'ui/address/details/AddressQrCode'; import AddressQrCode from 'ui/address/details/AddressQrCode';
import AddressEnsDomains from 'ui/address/ensDomains/AddressEnsDomains'; import AddressEnsDomains from 'ui/address/ensDomains/AddressEnsDomains';
import SolidityscanReport from 'ui/address/SolidityscanReport'; import SolidityscanReport from 'ui/address/SolidityscanReport';
...@@ -345,6 +346,8 @@ const AddressPageContent = () => { ...@@ -345,6 +346,8 @@ const AddressPageContent = () => {
secondRow={ titleSecondRow } secondRow={ titleSecondRow }
isLoading={ isLoading } isLoading={ isLoading }
/> />
{ !addressMetadataQuery.isPending &&
<AddressMetadataAlert tags={ addressMetadataQuery.data?.addresses?.[hash.toLowerCase()]?.tags }/> }
{ config.features.metasuites.isEnabled && <Box display="none" id="meta-suites__address" data-ready={ !isLoading }/> } { config.features.metasuites.isEnabled && <Box display="none" id="meta-suites__address" data-ready={ !isLoading }/> }
<AddressDetails addressQuery={ addressQuery } scrollRef={ tabsScrollRef }/> <AddressDetails addressQuery={ addressQuery } scrollRef={ tabsScrollRef }/>
{ /* should stay before tabs to scroll up with pagination */ } { /* should stay before tabs to scroll up with pagination */ }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment