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:
parent
3964940156
commit
634cf70a71
@ -14,6 +14,7 @@ import NicknamePopovers from '../../../modals/nickname-popovers';
|
|||||||
import Typography from '../../../../ui/typography';
|
import Typography from '../../../../ui/typography';
|
||||||
import { TYPOGRAPHY } from '../../../../../helpers/constants/design-system';
|
import { TYPOGRAPHY } from '../../../../../helpers/constants/design-system';
|
||||||
import { ORIGIN_METAMASK } from '../../../../../../shared/constants/app';
|
import { ORIGIN_METAMASK } from '../../../../../../shared/constants/app';
|
||||||
|
import SiteOrigin from '../../../../ui/site-origin';
|
||||||
|
|
||||||
const ConfirmPageContainerSummary = (props) => {
|
const ConfirmPageContainerSummary = (props) => {
|
||||||
const {
|
const {
|
||||||
@ -85,7 +86,10 @@ const ConfirmPageContainerSummary = (props) => {
|
|||||||
return (
|
return (
|
||||||
<div className={classnames('confirm-page-container-summary', className)}>
|
<div className={classnames('confirm-page-container-summary', className)}>
|
||||||
{origin === ORIGIN_METAMASK ? null : (
|
{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-row">
|
||||||
<div className="confirm-page-container-summary__action">
|
<div className="confirm-page-container-summary__action">
|
||||||
|
@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
|||||||
import Button from '../../ui/button';
|
import Button from '../../ui/button';
|
||||||
import SiteIcon from '../../ui/site-icon';
|
import SiteIcon from '../../ui/site-icon';
|
||||||
import { stripHttpsSchemeWithoutPort } from '../../../helpers/utils/util';
|
import { stripHttpsSchemeWithoutPort } from '../../../helpers/utils/util';
|
||||||
|
import SiteOrigin from '../../ui/site-origin';
|
||||||
|
|
||||||
export default class ConnectedSitesList extends Component {
|
export default class ConnectedSitesList extends Component {
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
@ -33,12 +34,11 @@ export default class ConnectedSitesList extends Component {
|
|||||||
>
|
>
|
||||||
<div className="connected-sites-list__subject-info">
|
<div className="connected-sites-list__subject-info">
|
||||||
<SiteIcon icon={subject.iconUrl} name={subject.name} size={32} />
|
<SiteIcon icon={subject.iconUrl} name={subject.name} size={32} />
|
||||||
<span
|
<SiteOrigin
|
||||||
className="connected-sites-list__subject-name"
|
className="connected-sites-list__subject-name"
|
||||||
title={subject.extensionId || subject.origin}
|
title={subject.extensionId || subject.origin}
|
||||||
>
|
siteOrigin={this.getSubjectDisplayName(subject)}
|
||||||
{this.getSubjectDisplayName(subject)}
|
/>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
className="connected-sites-list__content-row-link-button"
|
className="connected-sites-list__content-row-link-button"
|
||||||
|
@ -34,10 +34,6 @@
|
|||||||
|
|
||||||
&__subject-name {
|
&__subject-name {
|
||||||
max-width: 215px;
|
max-width: 215px;
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
direction: rtl;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,8 +170,6 @@
|
|||||||
|
|
||||||
&__origin {
|
&__origin {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&__notice,
|
&__notice,
|
||||||
|
@ -13,6 +13,7 @@ import AccountListItem from '../account-list-item';
|
|||||||
import { conversionUtil } from '../../../../shared/modules/conversion.utils';
|
import { conversionUtil } from '../../../../shared/modules/conversion.utils';
|
||||||
import Button from '../../ui/button';
|
import Button from '../../ui/button';
|
||||||
import SiteIcon from '../../ui/site-icon';
|
import SiteIcon from '../../ui/site-icon';
|
||||||
|
import SiteOrigin from '../../ui/site-origin';
|
||||||
|
|
||||||
export default class SignatureRequestOriginal extends Component {
|
export default class SignatureRequestOriginal extends Component {
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
@ -148,9 +149,10 @@ export default class SignatureRequestOriginal extends Component {
|
|||||||
size={24}
|
size={24}
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
<div className="request-signature__origin">
|
<SiteOrigin
|
||||||
{txData.msgParams.origin}
|
className="request-signature__origin"
|
||||||
</div>
|
siteOrigin={txData.msgParams.origin}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -68,6 +68,8 @@
|
|||||||
|
|
||||||
&__info {
|
&__info {
|
||||||
@include H7;
|
@include H7;
|
||||||
|
|
||||||
|
padding: 0 12px 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__info--bolded {
|
&__info--bolded {
|
||||||
|
@ -4,6 +4,7 @@ import Identicon from '../../ui/identicon';
|
|||||||
import LedgerInstructionField from '../ledger-instruction-field';
|
import LedgerInstructionField from '../ledger-instruction-field';
|
||||||
import { sanitizeMessage } from '../../../helpers/utils/util';
|
import { sanitizeMessage } from '../../../helpers/utils/util';
|
||||||
import { EVENT } from '../../../../shared/constants/metametrics';
|
import { EVENT } from '../../../../shared/constants/metametrics';
|
||||||
|
import SiteOrigin from '../../ui/site-origin';
|
||||||
import Header from './signature-request-header';
|
import Header from './signature-request-header';
|
||||||
import Footer from './signature-request-footer';
|
import Footer from './signature-request-footer';
|
||||||
import Message from './signature-request-message';
|
import Message from './signature-request-message';
|
||||||
@ -124,7 +125,10 @@ export default class SignatureRequest extends PureComponent {
|
|||||||
<div className="signature-request-content__info--bolded">
|
<div className="signature-request-content__info--bolded">
|
||||||
{domain.name}
|
{domain.name}
|
||||||
</div>
|
</div>
|
||||||
<div className="signature-request-content__info">{origin}</div>
|
<SiteOrigin
|
||||||
|
className="signature-request-content__info"
|
||||||
|
siteOrigin={origin}
|
||||||
|
/>
|
||||||
<div className="signature-request-content__info">
|
<div className="signature-request-content__info">
|
||||||
{this.formatWallet(fromAddress)}
|
{this.formatWallet(fromAddress)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -53,15 +53,9 @@
|
|||||||
margin: 0 4px;
|
margin: 0 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__origin,
|
|
||||||
&__address {
|
&__address {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__origin {
|
|
||||||
/*rtl:ignore*/
|
|
||||||
direction: rtl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ import {
|
|||||||
|
|
||||||
import CancelButton from '../cancel-button';
|
import CancelButton from '../cancel-button';
|
||||||
import { cancelSwapsSmartTransaction } from '../../../ducks/swaps/swaps';
|
import { cancelSwapsSmartTransaction } from '../../../ducks/swaps/swaps';
|
||||||
|
import SiteOrigin from '../../ui/site-origin';
|
||||||
|
|
||||||
export default function SmartTransactionListItem({
|
export default function SmartTransactionListItem({
|
||||||
smartTransaction,
|
smartTransaction,
|
||||||
@ -60,9 +61,11 @@ export default function SmartTransactionListItem({
|
|||||||
date={date}
|
date={date}
|
||||||
status={displayedStatusKey}
|
status={displayedStatusKey}
|
||||||
/>
|
/>
|
||||||
<span className="transaction-list-item__origin" title={subtitle}>
|
<SiteOrigin
|
||||||
{subtitle}
|
className="transaction-list-item__origin"
|
||||||
</span>
|
siteOrigin={subtitle}
|
||||||
|
title={subtitle}
|
||||||
|
/>
|
||||||
</h3>
|
</h3>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
|
@ -39,6 +39,7 @@ import CancelSpeedupPopover from '../cancel-speedup-popover';
|
|||||||
import EditGasFeePopover from '../edit-gas-fee-popover';
|
import EditGasFeePopover from '../edit-gas-fee-popover';
|
||||||
import EditGasPopover from '../edit-gas-popover';
|
import EditGasPopover from '../edit-gas-popover';
|
||||||
import { MetaMetricsContext } from '../../../contexts/metametrics';
|
import { MetaMetricsContext } from '../../../contexts/metametrics';
|
||||||
|
import SiteOrigin from '../../ui/site-origin';
|
||||||
|
|
||||||
function TransactionListItemInner({
|
function TransactionListItemInner({
|
||||||
transactionGroup,
|
transactionGroup,
|
||||||
@ -191,16 +192,13 @@ function TransactionListItemInner({
|
|||||||
date={date}
|
date={date}
|
||||||
status={displayedStatusKey}
|
status={displayedStatusKey}
|
||||||
/>
|
/>
|
||||||
<span
|
{subtitleContainsOrigin ? (
|
||||||
className={
|
<SiteOrigin siteOrigin={subtitle} />
|
||||||
subtitleContainsOrigin
|
) : (
|
||||||
? 'transaction-list-item__origin'
|
<span className="transaction-list-item__address" title={subtitle}>
|
||||||
: 'transaction-list-item__address'
|
{subtitle}
|
||||||
}
|
</span>
|
||||||
title={subtitle}
|
)}
|
||||||
>
|
|
||||||
{subtitle}
|
|
||||||
</span>
|
|
||||||
</h3>
|
</h3>
|
||||||
}
|
}
|
||||||
rightContent={
|
rightContent={
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
.site-origin {
|
.site-origin {
|
||||||
|
overflow: hidden;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
|
|
||||||
.chip {
|
.chip {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
|
||||||
|
|
||||||
.chip__left-icon {
|
&__left-icon {
|
||||||
padding: 4px 0 4px 8px;
|
padding: 4px 0 4px 8px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
@ -17,5 +18,6 @@
|
|||||||
|
|
||||||
/*rtl:ignore*/
|
/*rtl:ignore*/
|
||||||
direction: rtl;
|
direction: rtl;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,60 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
import classnames from 'classnames';
|
||||||
import Chip from '../chip';
|
import Chip from '../chip';
|
||||||
import IconWithFallback from '../icon-with-fallback';
|
import IconWithFallback from '../icon-with-fallback';
|
||||||
|
|
||||||
export default function SiteOrigin({ siteOrigin, iconSrc, iconName }) {
|
export default function SiteOrigin({
|
||||||
|
siteOrigin,
|
||||||
|
iconSrc,
|
||||||
|
iconName,
|
||||||
|
chip,
|
||||||
|
className,
|
||||||
|
title,
|
||||||
|
}) {
|
||||||
return (
|
return (
|
||||||
<div className="site-origin">
|
<div className={classnames('site-origin', className)} title={title}>
|
||||||
<Chip
|
{chip ? (
|
||||||
label={siteOrigin}
|
<Chip
|
||||||
maxContent={false}
|
label={siteOrigin}
|
||||||
leftIcon={<IconWithFallback icon={iconSrc} name={iconName} size={32} />}
|
maxContent={false}
|
||||||
/>
|
leftIcon={
|
||||||
|
<IconWithFallback icon={iconSrc} name={iconName} size={32} />
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<span>{siteOrigin}</span>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
SiteOrigin.propTypes = {
|
SiteOrigin.propTypes = {
|
||||||
|
/**
|
||||||
|
* The origin of the site generally the URL
|
||||||
|
*/
|
||||||
siteOrigin: PropTypes.string.isRequired,
|
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,
|
iconName: PropTypes.string,
|
||||||
|
/**
|
||||||
|
* The image src of the icon
|
||||||
|
*/
|
||||||
iconSrc: PropTypes.string,
|
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,
|
||||||
};
|
};
|
||||||
|
@ -16,6 +16,12 @@ export default {
|
|||||||
iconName: {
|
iconName: {
|
||||||
control: 'text',
|
control: 'text',
|
||||||
},
|
},
|
||||||
|
title: {
|
||||||
|
control: 'text',
|
||||||
|
},
|
||||||
|
chip: {
|
||||||
|
control: 'boolean',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -25,6 +31,8 @@ DefaultStory.storyName = 'Default';
|
|||||||
|
|
||||||
DefaultStory.args = {
|
DefaultStory.args = {
|
||||||
siteOrigin: 'https://metamask.io',
|
siteOrigin: 'https://metamask.io',
|
||||||
|
title: 'https://metamask.io',
|
||||||
iconName: 'MetaMask',
|
iconName: 'MetaMask',
|
||||||
iconSrc: './metamark.svg',
|
iconSrc: './metamark.svg',
|
||||||
|
chip: true,
|
||||||
};
|
};
|
||||||
|
@ -7,6 +7,7 @@ import Identicon from '../../components/ui/identicon';
|
|||||||
|
|
||||||
import { EVENT } from '../../../shared/constants/metametrics';
|
import { EVENT } from '../../../shared/constants/metametrics';
|
||||||
import { conversionUtil } from '../../../shared/modules/conversion.utils';
|
import { conversionUtil } from '../../../shared/modules/conversion.utils';
|
||||||
|
import SiteOrigin from '../../components/ui/site-origin';
|
||||||
|
|
||||||
export default class ConfirmEncryptionPublicKey extends Component {
|
export default class ConfirmEncryptionPublicKey extends Component {
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
@ -118,7 +119,9 @@ export default class ConfirmEncryptionPublicKey extends Component {
|
|||||||
const { t } = this.context;
|
const { t } = this.context;
|
||||||
|
|
||||||
const targetSubjectMetadata = subjectMetadata[txData.origin];
|
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;
|
const name = targetSubjectMetadata?.hostname || txData.origin;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -198,6 +198,7 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-identicon {
|
&-identicon {
|
||||||
|
@ -10,7 +10,6 @@ import { useHistory } from 'react-router-dom';
|
|||||||
import { isEqual } from 'lodash';
|
import { isEqual } from 'lodash';
|
||||||
import { produce } from 'immer';
|
import { produce } from 'immer';
|
||||||
import Box from '../../components/ui/box';
|
import Box from '../../components/ui/box';
|
||||||
import Chip from '../../components/ui/chip';
|
|
||||||
import MetaMaskTemplateRenderer from '../../components/app/metamask-template-renderer';
|
import MetaMaskTemplateRenderer from '../../components/app/metamask-template-renderer';
|
||||||
import SiteIcon from '../../components/ui/site-icon';
|
import SiteIcon from '../../components/ui/site-icon';
|
||||||
import { DEFAULT_ROUTE } from '../../helpers/constants/routes';
|
import { DEFAULT_ROUTE } from '../../helpers/constants/routes';
|
||||||
@ -25,6 +24,7 @@ import { useOriginMetadata } from '../../hooks/useOriginMetadata';
|
|||||||
import { getUnapprovedTemplatedConfirmations } from '../../selectors';
|
import { getUnapprovedTemplatedConfirmations } from '../../selectors';
|
||||||
import NetworkDisplay from '../../components/app/network-display/network-display';
|
import NetworkDisplay from '../../components/app/network-display/network-display';
|
||||||
import Callout from '../../components/ui/callout';
|
import Callout from '../../components/ui/callout';
|
||||||
|
import SiteOrigin from '../../components/ui/site-origin';
|
||||||
import ConfirmationFooter from './components/confirmation-footer';
|
import ConfirmationFooter from './components/confirmation-footer';
|
||||||
import { getTemplateValues, getTemplateAlerts } from './templates';
|
import { getTemplateValues, getTemplateAlerts } from './templates';
|
||||||
|
|
||||||
@ -208,9 +208,10 @@ export default function ConfirmationPage() {
|
|||||||
name={originMetadata.hostname}
|
name={originMetadata.hostname}
|
||||||
size={36}
|
size={36}
|
||||||
/>
|
/>
|
||||||
<Chip
|
<SiteOrigin
|
||||||
label={stripHttpsScheme(originMetadata.origin)}
|
chip
|
||||||
borderColor={COLORS.BORDER_DEFAULT}
|
siteOrigin={stripHttpsScheme(originMetadata.origin)}
|
||||||
|
title={stripHttpsScheme(originMetadata.origin)}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
<MetaMaskTemplateRenderer sections={templatedValues.content} />
|
<MetaMaskTemplateRenderer sections={templatedValues.content} />
|
||||||
|
Loading…
Reference in New Issue
Block a user