1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Enhance reusable SiteOrigin component (#14720)

* extend and reuse SiteOrigin component
This commit is contained in:
Alex Donesky 2022-05-20 09:35:18 -05:00 committed by GitHub
parent 3964940156
commit 634cf70a71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 103 additions and 49 deletions

View File

@ -14,6 +14,7 @@ import NicknamePopovers from '../../../modals/nickname-popovers';
import Typography from '../../../../ui/typography';
import { TYPOGRAPHY } from '../../../../../helpers/constants/design-system';
import { ORIGIN_METAMASK } from '../../../../../../shared/constants/app';
import SiteOrigin from '../../../../ui/site-origin';
const ConfirmPageContainerSummary = (props) => {
const {
@ -85,7 +86,10 @@ const ConfirmPageContainerSummary = (props) => {
return (
<div className={classnames('confirm-page-container-summary', className)}>
{origin === ORIGIN_METAMASK ? null : (
<div className="confirm-page-container-summary__origin">{origin}</div>
<SiteOrigin
className="confirm-page-container-summary__origin"
siteOrigin={origin}
/>
)}
<div className="confirm-page-container-summary__action-row">
<div className="confirm-page-container-summary__action">

View File

@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
import Button from '../../ui/button';
import SiteIcon from '../../ui/site-icon';
import { stripHttpsSchemeWithoutPort } from '../../../helpers/utils/util';
import SiteOrigin from '../../ui/site-origin';
export default class ConnectedSitesList extends Component {
static contextTypes = {
@ -33,12 +34,11 @@ export default class ConnectedSitesList extends Component {
>
<div className="connected-sites-list__subject-info">
<SiteIcon icon={subject.iconUrl} name={subject.name} size={32} />
<span
<SiteOrigin
className="connected-sites-list__subject-name"
title={subject.extensionId || subject.origin}
>
{this.getSubjectDisplayName(subject)}
</span>
siteOrigin={this.getSubjectDisplayName(subject)}
/>
</div>
<Button
className="connected-sites-list__content-row-link-button"

View File

@ -34,10 +34,6 @@
&__subject-name {
max-width: 215px;
white-space: nowrap;
overflow: hidden;
direction: rtl;
text-overflow: ellipsis;
margin-left: 6px;
}
}

View File

@ -170,8 +170,6 @@
&__origin {
margin-left: 5px;
overflow: hidden;
text-overflow: ellipsis;
}
&__notice,

View File

@ -13,6 +13,7 @@ import AccountListItem from '../account-list-item';
import { conversionUtil } from '../../../../shared/modules/conversion.utils';
import Button from '../../ui/button';
import SiteIcon from '../../ui/site-icon';
import SiteOrigin from '../../ui/site-origin';
export default class SignatureRequestOriginal extends Component {
static contextTypes = {
@ -148,9 +149,10 @@ export default class SignatureRequestOriginal extends Component {
size={24}
/>
) : null}
<div className="request-signature__origin">
{txData.msgParams.origin}
</div>
<SiteOrigin
className="request-signature__origin"
siteOrigin={txData.msgParams.origin}
/>
</div>
);
};

View File

@ -68,6 +68,8 @@
&__info {
@include H7;
padding: 0 12px 4px;
}
&__info--bolded {

View File

@ -4,6 +4,7 @@ import Identicon from '../../ui/identicon';
import LedgerInstructionField from '../ledger-instruction-field';
import { sanitizeMessage } from '../../../helpers/utils/util';
import { EVENT } from '../../../../shared/constants/metametrics';
import SiteOrigin from '../../ui/site-origin';
import Header from './signature-request-header';
import Footer from './signature-request-footer';
import Message from './signature-request-message';
@ -124,7 +125,10 @@ export default class SignatureRequest extends PureComponent {
<div className="signature-request-content__info--bolded">
{domain.name}
</div>
<div className="signature-request-content__info">{origin}</div>
<SiteOrigin
className="signature-request-content__info"
siteOrigin={origin}
/>
<div className="signature-request-content__info">
{this.formatWallet(fromAddress)}
</div>

View File

@ -53,15 +53,9 @@
margin: 0 4px;
}
&__origin,
&__address {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
&__origin {
/*rtl:ignore*/
direction: rtl;
}
}

View File

@ -14,6 +14,7 @@ import {
import CancelButton from '../cancel-button';
import { cancelSwapsSmartTransaction } from '../../../ducks/swaps/swaps';
import SiteOrigin from '../../ui/site-origin';
export default function SmartTransactionListItem({
smartTransaction,
@ -60,9 +61,11 @@ export default function SmartTransactionListItem({
date={date}
status={displayedStatusKey}
/>
<span className="transaction-list-item__origin" title={subtitle}>
{subtitle}
</span>
<SiteOrigin
className="transaction-list-item__origin"
siteOrigin={subtitle}
title={subtitle}
/>
</h3>
}
>

View File

@ -39,6 +39,7 @@ import CancelSpeedupPopover from '../cancel-speedup-popover';
import EditGasFeePopover from '../edit-gas-fee-popover';
import EditGasPopover from '../edit-gas-popover';
import { MetaMetricsContext } from '../../../contexts/metametrics';
import SiteOrigin from '../../ui/site-origin';
function TransactionListItemInner({
transactionGroup,
@ -191,16 +192,13 @@ function TransactionListItemInner({
date={date}
status={displayedStatusKey}
/>
<span
className={
subtitleContainsOrigin
? 'transaction-list-item__origin'
: 'transaction-list-item__address'
}
title={subtitle}
>
{subtitle}
</span>
{subtitleContainsOrigin ? (
<SiteOrigin siteOrigin={subtitle} />
) : (
<span className="transaction-list-item__address" title={subtitle}>
{subtitle}
</span>
)}
</h3>
}
rightContent={

View File

@ -1,12 +1,13 @@
.site-origin {
overflow: hidden;
max-width: 100%;
.chip {
max-width: 100%;
}
.chip__left-icon {
padding: 4px 0 4px 8px;
&__left-icon {
padding: 4px 0 4px 8px;
}
}
span {
@ -17,5 +18,6 @@
/*rtl:ignore*/
direction: rtl;
max-width: 100%;
}
}

View File

@ -1,22 +1,60 @@
import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import Chip from '../chip';
import IconWithFallback from '../icon-with-fallback';
export default function SiteOrigin({ siteOrigin, iconSrc, iconName }) {
export default function SiteOrigin({
siteOrigin,
iconSrc,
iconName,
chip,
className,
title,
}) {
return (
<div className="site-origin">
<Chip
label={siteOrigin}
maxContent={false}
leftIcon={<IconWithFallback icon={iconSrc} name={iconName} size={32} />}
/>
<div className={classnames('site-origin', className)} title={title}>
{chip ? (
<Chip
label={siteOrigin}
maxContent={false}
leftIcon={
<IconWithFallback icon={iconSrc} name={iconName} size={32} />
}
/>
) : (
<span>{siteOrigin}</span>
)}
</div>
);
}
SiteOrigin.propTypes = {
/**
* The origin of the site generally the URL
*/
siteOrigin: PropTypes.string.isRequired,
/**
* Icon name is used for the fallback icon and will display the first letter of the string
* when iconSrc errors or is not provided.
*/
iconName: PropTypes.string,
/**
* The image src of the icon
*/
iconSrc: PropTypes.string,
/**
* Additional className added to the root html element
*/
className: PropTypes.string,
/**
* title specifies extra information and is added to a title attribute added to the root html element
* It is most often shown as a tooltip text when the mouse moves over the element.
*/
title: PropTypes.string,
/**
* Whether the SiteOrigin is displayed as a chip or plain text.
* if false iconSrc and iconName props will not be used.
*/
chip: PropTypes.bool,
};

View File

@ -16,6 +16,12 @@ export default {
iconName: {
control: 'text',
},
title: {
control: 'text',
},
chip: {
control: 'boolean',
},
},
};
@ -25,6 +31,8 @@ DefaultStory.storyName = 'Default';
DefaultStory.args = {
siteOrigin: 'https://metamask.io',
title: 'https://metamask.io',
iconName: 'MetaMask',
iconSrc: './metamark.svg',
chip: true,
};

View File

@ -7,6 +7,7 @@ import Identicon from '../../components/ui/identicon';
import { EVENT } from '../../../shared/constants/metametrics';
import { conversionUtil } from '../../../shared/modules/conversion.utils';
import SiteOrigin from '../../components/ui/site-origin';
export default class ConfirmEncryptionPublicKey extends Component {
static contextTypes = {
@ -118,7 +119,9 @@ export default class ConfirmEncryptionPublicKey extends Component {
const { t } = this.context;
const targetSubjectMetadata = subjectMetadata[txData.origin];
const notice = t('encryptionPublicKeyNotice', [txData.origin]);
const notice = t('encryptionPublicKeyNotice', [
<SiteOrigin siteOrigin={txData.origin} key={txData.origin} />,
]);
const name = targetSubjectMetadata?.hostname || txData.origin;
return (

View File

@ -198,6 +198,7 @@
flex-direction: column;
align-items: center;
flex: 1;
width: 100%;
}
&-identicon {

View File

@ -10,7 +10,6 @@ import { useHistory } from 'react-router-dom';
import { isEqual } from 'lodash';
import { produce } from 'immer';
import Box from '../../components/ui/box';
import Chip from '../../components/ui/chip';
import MetaMaskTemplateRenderer from '../../components/app/metamask-template-renderer';
import SiteIcon from '../../components/ui/site-icon';
import { DEFAULT_ROUTE } from '../../helpers/constants/routes';
@ -25,6 +24,7 @@ import { useOriginMetadata } from '../../hooks/useOriginMetadata';
import { getUnapprovedTemplatedConfirmations } from '../../selectors';
import NetworkDisplay from '../../components/app/network-display/network-display';
import Callout from '../../components/ui/callout';
import SiteOrigin from '../../components/ui/site-origin';
import ConfirmationFooter from './components/confirmation-footer';
import { getTemplateValues, getTemplateAlerts } from './templates';
@ -208,9 +208,10 @@ export default function ConfirmationPage() {
name={originMetadata.hostname}
size={36}
/>
<Chip
label={stripHttpsScheme(originMetadata.origin)}
borderColor={COLORS.BORDER_DEFAULT}
<SiteOrigin
chip
siteOrigin={stripHttpsScheme(originMetadata.origin)}
title={stripHttpsScheme(originMetadata.origin)}
/>
</Box>
<MetaMaskTemplateRenderer sections={templatedValues.content} />