123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- // Copyright 2017-2020 @polkadot/app-staking authors & contributors
- // This software may be modified and distributed under the terms
- // of the Apache-2.0 license. See the LICENSE file for details.
- import { AccountId, AccountIndex, Address } from '@polkadot/types/interfaces';
- import BN from 'bn.js';
- import React from 'react';
- import styled from 'styled-components';
- import { KeyringItemType } from '@polkadot/ui-keyring/types';
- import { classes, toShortAddress } from './util';
- import AccountName from './AccountName';
- import BalanceDisplay from './Balance';
- import BondedDisplay from './Bonded';
- import IdentityIcon from './IdentityIcon';
- import LockedVote from './LockedVote';
- interface Props {
- balance?: BN | BN[];
- bonded?: BN | BN[];
- children?: React.ReactNode;
- className?: string;
- iconInfo?: React.ReactNode;
- isHighlight?: boolean;
- isPadded?: boolean;
- isShort?: boolean;
- label?: React.ReactNode;
- labelBalance?: React.ReactNode;
- noLookup?: boolean;
- summary?: React.ReactNode;
- type?: KeyringItemType;
- value?: AccountId | AccountIndex | Address | string | null | Uint8Array;
- withAddress?: boolean;
- withBalance?: boolean;
- withBonded?: boolean;
- withLockedVote?: boolean;
- withSidebar?: boolean;
- withName?: boolean;
- withShrink?: boolean;
- }
- function AddressMini ({ balance, bonded, children, className = '', iconInfo, isHighlight, isPadded = true, label, labelBalance, noLookup, summary, value, withAddress = true, withBalance = false, withBonded = false, withLockedVote = false, withName = true, withShrink = false, withSidebar = true }: Props): React.ReactElement<Props> | null {
- if (!value) {
- return null;
- }
- return (
- <div className={classes('ui--AddressMini', isHighlight ? 'isHighlight' : '', isPadded ? 'padded' : '', withShrink ? 'withShrink' : '', className)}>
- {label && (
- <label className='ui--AddressMini-label'>{label}</label>
- )}
- <div className='ui--AddressMini-icon'>
- <IdentityIcon value={value as Uint8Array} />
- {iconInfo && (
- <div className='ui--AddressMini-icon-info'>
- {iconInfo}
- </div>
- )}
- </div>
- <div className='ui--AddressMini-info'>
- {withAddress && (
- <div className='ui--AddressMini-address'>
- {withName
- ? (
- <AccountName
- noLookup={noLookup}
- value={value}
- withSidebar={withSidebar}
- />
- )
- : toShortAddress(value)
- }
- </div>
- )}
- {children}
- </div>
- <div className='ui--AddressMini-balances'>
- {withBalance && (
- <BalanceDisplay
- balance={balance}
- label={labelBalance}
- params={value}
- />
- )}
- {withBonded && (
- <BondedDisplay
- bonded={bonded}
- label=''
- params={value}
- />
- )}
- {withLockedVote && (
- <LockedVote params={value} />
- )}
- {summary && (
- <div className='ui--AddressMini-summary'>{summary}</div>
- )}
- </div>
- </div>
- );
- }
- export default React.memo(styled(AddressMini)`
- display: inline-block;
- padding: 0 0.25rem 0 1rem;
- text-align: left;
- white-space: nowrap;
- &.padded {
- display: inline-block;
- padding: 0 1rem 0 0;
- }
- &.summary {
- position: relative;
- top: -0.2rem;
- }
- .ui--AddressMini-info {
- max-width: 12rem;
- min-width: 12rem;
- @media only screen and (max-width: 1800px) {
- max-width: 11.5rem;
- min-width: 11.5rem;
- }
- @media only screen and (max-width: 1700px) {
- max-width: 11rem;
- min-width: 11rem;
- }
- @media only screen and (max-width: 1600px) {
- max-width: 10.5rem;
- min-width: 10.5rem;
- }
- @media only screen and (max-width: 1500px) {
- max-width: 10rem;
- min-width: 10rem;
- }
- @media only screen and (max-width: 1400px) {
- max-width: 9.5rem;
- min-width: 9.5rem;
- }
- @media only screen and (max-width: 1300px) {
- max-width: 9rem;
- min-width: 9rem;
- }
- }
- .ui--AddressMini-address {
- overflow: hidden;
- text-align: left;
- text-overflow: ellipsis;
- width: fit-content;
- max-width: inherit;
- > div {
- overflow: hidden;
- text-overflow: ellipsis;
- }
- }
- &.withShrink {
- .ui--AddressMini-address {
- min-width: 3rem;
- }
- }
- .ui--AddressMini-label {
- margin: 0 0 -0.5rem 2.25rem;
- }
- .ui--AddressMini-balances {
- display: grid;
- .ui--Balance,
- .ui--Bonded,
- .ui--LockedVote {
- font-size: 0.75rem;
- margin-left: 2.25rem;
- margin-top: -0.5rem;
- text-align: left;
- }
- }
- .ui--AddressMini-icon {
- margin: 0 0.5rem 0 0;
- .ui--AddressMini-icon-info {
- position: absolute;
- right: -0.5rem;
- top: -0.5rem;
- z-index: 1;
- }
- .ui--IdentityIcon {
- margin: 0;
- vertical-align: middle;
- }
- }
- .ui--AddressMini-icon,
- .ui--AddressMini-info {
- display: inline-block;
- position: relative;
- vertical-align: middle;
- }
- .ui--AddressMini-summary {
- font-size: 0.75rem;
- line-height: 1.2;
- margin-left: 2.25rem;
- margin-top: -0.2rem;
- text-align: left;
- }
- `);
|