Various fixes for portal on mobile and top bar layout
This commit is contained in:
		@@ -91,7 +91,7 @@ interface PortalState {
 | 
			
		||||
 | 
			
		||||
interface AccountManagementItem {
 | 
			
		||||
    pathName: string;
 | 
			
		||||
    headerText: string;
 | 
			
		||||
    headerText?: string;
 | 
			
		||||
    render: () => React.ReactNode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -106,7 +106,8 @@ const TOP_BAR_HEIGHT = TopBar.heightForDisplayType(TopBarDisplayType.Expanded);
 | 
			
		||||
const LEFT_COLUMN_WIDTH = 346;
 | 
			
		||||
const MENU_PADDING_LEFT = 185;
 | 
			
		||||
const LARGE_LAYOUT_MAX_WIDTH = 1200;
 | 
			
		||||
const LARGE_LAYOUT_MARGIN = 30;
 | 
			
		||||
const LARGE_LAYOUT_SIDE_PADDING = 30;
 | 
			
		||||
const SMALL_LAYOUT_SIDE_PADDING = 20;
 | 
			
		||||
 | 
			
		||||
export class Portal extends React.Component<PortalProps, PortalState> {
 | 
			
		||||
    private _blockchain: Blockchain;
 | 
			
		||||
@@ -243,7 +244,9 @@ export class Portal extends React.Component<PortalProps, PortalState> {
 | 
			
		||||
                        position: 'fixed',
 | 
			
		||||
                        zIndex: zIndex.topBar,
 | 
			
		||||
                    }}
 | 
			
		||||
                    maxWidth={LARGE_LAYOUT_MAX_WIDTH}
 | 
			
		||||
                    maxWidth={!this._isSmallScreen() ? LARGE_LAYOUT_MAX_WIDTH : undefined}
 | 
			
		||||
                    paddingLeft={!this._isSmallScreen() ? LARGE_LAYOUT_SIDE_PADDING : SMALL_LAYOUT_SIDE_PADDING}
 | 
			
		||||
                    paddingRight={!this._isSmallScreen() ? LARGE_LAYOUT_SIDE_PADDING : SMALL_LAYOUT_SIDE_PADDING}
 | 
			
		||||
                />
 | 
			
		||||
                <Container marginTop={TOP_BAR_HEIGHT} minHeight="100vh" backgroundColor={colors.lightestGrey}>
 | 
			
		||||
                    <Switch>
 | 
			
		||||
@@ -324,7 +327,11 @@ export class Portal extends React.Component<PortalProps, PortalState> {
 | 
			
		||||
        return (
 | 
			
		||||
            <div>
 | 
			
		||||
                <Container className="flex flex-column items-center">
 | 
			
		||||
                    {isMobile && <Container marginBottom="20px">{this._renderStartOnboarding()}</Container>}
 | 
			
		||||
                    {isMobile && (
 | 
			
		||||
                        <Container marginTop="20px" marginBottom="20px">
 | 
			
		||||
                            {this._renderStartOnboarding()}
 | 
			
		||||
                        </Container>
 | 
			
		||||
                    )}
 | 
			
		||||
                    <Container marginBottom={marginBottom} width="100%">
 | 
			
		||||
                        <Wallet
 | 
			
		||||
                            style={
 | 
			
		||||
@@ -402,7 +409,7 @@ export class Portal extends React.Component<PortalProps, PortalState> {
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                pathName: `${WebsitePaths.Portal}/account`,
 | 
			
		||||
                headerText: 'Your Account',
 | 
			
		||||
                headerText: this._isSmallScreen() ? undefined : 'Your Account',
 | 
			
		||||
                render: this._isSmallScreen() ? this._renderWallet.bind(this) : this._renderTokenBalances.bind(this),
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
@@ -445,7 +452,7 @@ export class Portal extends React.Component<PortalProps, PortalState> {
 | 
			
		||||
    private _renderAccountManagementItem(item: AccountManagementItem): React.ReactNode {
 | 
			
		||||
        return (
 | 
			
		||||
            <Section
 | 
			
		||||
                header={<TextHeader labelText={item.headerText} />}
 | 
			
		||||
                header={!_.isUndefined(item.headerText) && <TextHeader labelText={item.headerText} />}
 | 
			
		||||
                body={<Loading isLoading={!this.props.blockchainIsLoaded} content={item.render()} />}
 | 
			
		||||
            />
 | 
			
		||||
        );
 | 
			
		||||
@@ -527,15 +534,21 @@ export class Portal extends React.Component<PortalProps, PortalState> {
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
    private _renderRelayerIndexSection(): React.ReactNode {
 | 
			
		||||
        return <Section header={<TextHeader labelText="0x Relayers" />} body={this._renderRelayerIndex()} />;
 | 
			
		||||
    }
 | 
			
		||||
    private _renderRelayerIndex(): React.ReactNode {
 | 
			
		||||
        const isMobile = utils.isMobileWidth(this.props.screenWidth);
 | 
			
		||||
        return (
 | 
			
		||||
            <Section
 | 
			
		||||
                header={!isMobile && <TextHeader labelText="0x Relayers" />}
 | 
			
		||||
                body={
 | 
			
		||||
                    <Container className="flex flex-column items-center">
 | 
			
		||||
                {isMobile && <Container marginBottom="20px">{this._renderStartOnboarding()}</Container>}
 | 
			
		||||
                        {isMobile && (
 | 
			
		||||
                            <Container marginTop="20px" marginBottom="20px">
 | 
			
		||||
                                {this._renderStartOnboarding()}
 | 
			
		||||
                            </Container>
 | 
			
		||||
                        )}
 | 
			
		||||
                        <RelayerIndex networkId={this.props.networkId} screenWidth={this.props.screenWidth} />
 | 
			
		||||
                    </Container>
 | 
			
		||||
                }
 | 
			
		||||
            />
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
    private _renderNotFoundMessage(): React.ReactNode {
 | 
			
		||||
@@ -685,19 +698,19 @@ interface LargeLayoutProps {
 | 
			
		||||
}
 | 
			
		||||
const LargeLayout = (props: LargeLayoutProps) => {
 | 
			
		||||
    return (
 | 
			
		||||
        <Container className="mx-auto flex flex-center" maxWidth={LARGE_LAYOUT_MAX_WIDTH}>
 | 
			
		||||
            <div className="flex-last">
 | 
			
		||||
        <Container
 | 
			
		||||
                    width={LEFT_COLUMN_WIDTH}
 | 
			
		||||
                    position="fixed"
 | 
			
		||||
                    zIndex={zIndex.aboveTopBar}
 | 
			
		||||
                    marginLeft={LARGE_LAYOUT_MARGIN}
 | 
			
		||||
            className="mx-auto flex flex-center"
 | 
			
		||||
            maxWidth={LARGE_LAYOUT_MAX_WIDTH}
 | 
			
		||||
            paddingLeft={LARGE_LAYOUT_SIDE_PADDING}
 | 
			
		||||
            paddingRight={LARGE_LAYOUT_SIDE_PADDING}
 | 
			
		||||
        >
 | 
			
		||||
            <div className="flex-last">
 | 
			
		||||
                <Container width={LEFT_COLUMN_WIDTH} position="fixed" zIndex={zIndex.aboveTopBar}>
 | 
			
		||||
                    {props.left}
 | 
			
		||||
                </Container>
 | 
			
		||||
            </div>
 | 
			
		||||
            <Container className="flex-auto" marginLeft={LEFT_COLUMN_WIDTH + LARGE_LAYOUT_MARGIN}>
 | 
			
		||||
                <Container className="flex-auto" marginLeft={LARGE_LAYOUT_MARGIN} marginRight={LARGE_LAYOUT_MARGIN}>
 | 
			
		||||
            <Container className="flex-auto" marginLeft={LEFT_COLUMN_WIDTH}>
 | 
			
		||||
                <Container className="flex-auto" marginLeft={LARGE_LAYOUT_SIDE_PADDING}>
 | 
			
		||||
                    {props.right}
 | 
			
		||||
                </Container>
 | 
			
		||||
            </Container>
 | 
			
		||||
@@ -711,7 +724,13 @@ interface SmallLayoutProps {
 | 
			
		||||
const SmallLayout = (props: SmallLayoutProps) => {
 | 
			
		||||
    return (
 | 
			
		||||
        <div className="flex flex-center">
 | 
			
		||||
            <div className="flex-auto px3">{props.content}</div>
 | 
			
		||||
            <Container
 | 
			
		||||
                className="flex-auto"
 | 
			
		||||
                paddingLeft={SMALL_LAYOUT_SIDE_PADDING}
 | 
			
		||||
                paddingRight={SMALL_LAYOUT_SIDE_PADDING}
 | 
			
		||||
            >
 | 
			
		||||
                {props.content}
 | 
			
		||||
            </Container>
 | 
			
		||||
        </div>
 | 
			
		||||
    );
 | 
			
		||||
}; // tslint:disable:max-file-line-count
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ import { LegacyPortalMenu } from 'ts/components/legacy_portal/legacy_portal_menu
 | 
			
		||||
import { DrawerMenu } from 'ts/components/portal/drawer_menu';
 | 
			
		||||
import { ProviderDisplay } from 'ts/components/top_bar/provider_display';
 | 
			
		||||
import { TopBarMenuItem } from 'ts/components/top_bar/top_bar_menu_item';
 | 
			
		||||
import { Container } from 'ts/components/ui/container';
 | 
			
		||||
import { DropDown } from 'ts/components/ui/drop_down';
 | 
			
		||||
import { Dispatcher } from 'ts/redux/dispatcher';
 | 
			
		||||
import { Deco, Key, ProviderType, WebsiteLegacyPaths, WebsitePaths } from 'ts/types';
 | 
			
		||||
@@ -45,6 +46,8 @@ export interface TopBarProps {
 | 
			
		||||
    onVersionSelected?: (semver: string) => void;
 | 
			
		||||
    sidebarHeader?: React.ReactNode;
 | 
			
		||||
    maxWidth?: number;
 | 
			
		||||
    paddingLeft?: number;
 | 
			
		||||
    paddingRight?: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface TopBarState {
 | 
			
		||||
@@ -67,13 +70,12 @@ const styles: Styles = {
 | 
			
		||||
        color: colors.darkestGrey,
 | 
			
		||||
        paddingTop: 6,
 | 
			
		||||
        paddingBottom: 6,
 | 
			
		||||
        marginTop: 17,
 | 
			
		||||
        cursor: 'pointer',
 | 
			
		||||
        fontWeight: 400,
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const DEFAULT_HEIGHT = 59;
 | 
			
		||||
const DEFAULT_HEIGHT = 68;
 | 
			
		||||
const EXPANDED_HEIGHT = 75;
 | 
			
		||||
 | 
			
		||||
export class TopBar extends React.Component<TopBarProps, TopBarState> {
 | 
			
		||||
@@ -81,6 +83,8 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
 | 
			
		||||
        displayType: TopBarDisplayType.Default,
 | 
			
		||||
        style: {},
 | 
			
		||||
        isNightVersion: false,
 | 
			
		||||
        paddingLeft: 20,
 | 
			
		||||
        paddingRight: 20,
 | 
			
		||||
    };
 | 
			
		||||
    public static heightForDisplayType(displayType: TopBarDisplayType): number {
 | 
			
		||||
        const result = displayType === TopBarDisplayType.Expanded ? EXPANDED_HEIGHT : DEFAULT_HEIGHT;
 | 
			
		||||
@@ -102,7 +106,9 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
 | 
			
		||||
    public render(): React.ReactNode {
 | 
			
		||||
        const isNightVersion = this.props.isNightVersion;
 | 
			
		||||
        const isExpandedDisplayType = this.props.displayType === TopBarDisplayType.Expanded;
 | 
			
		||||
        const parentClassNames = `flex mx-auto ${isExpandedDisplayType ? 'pl3 py1' : 'max-width-4'}`;
 | 
			
		||||
        const parentClassNames = !isExpandedDisplayType
 | 
			
		||||
            ? 'flex mx-auto items-center max-width-4'
 | 
			
		||||
            : 'flex mx-auto items-center';
 | 
			
		||||
        const height = isExpandedDisplayType ? EXPANDED_HEIGHT : DEFAULT_HEIGHT;
 | 
			
		||||
        const developerSectionMenuItems = [
 | 
			
		||||
            <Link key="subMenuItem-zeroEx" to={WebsitePaths.ZeroExJs} className="text-decoration-none">
 | 
			
		||||
@@ -197,7 +203,6 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
 | 
			
		||||
            fontSize: 25,
 | 
			
		||||
            color: isNightVersion ? 'white' : 'black',
 | 
			
		||||
            cursor: 'pointer',
 | 
			
		||||
            paddingTop: 16,
 | 
			
		||||
        };
 | 
			
		||||
        const activeNode = (
 | 
			
		||||
            <div className="flex relative" style={{ color: menuIconStyle.color }}>
 | 
			
		||||
@@ -211,15 +216,21 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
 | 
			
		||||
        // TODO : Remove this once we ship portal v2
 | 
			
		||||
        const shouldShowPortalV2Drawer = this._isViewingPortal() && utils.shouldShowPortalV2();
 | 
			
		||||
        return (
 | 
			
		||||
            <div style={{ ...styles.topBar, ...bottomBorderStyle, ...this.props.style, ...{ height } }} className="pb1">
 | 
			
		||||
                <div className={parentClassNames} style={{ maxWidth: this.props.maxWidth }}>
 | 
			
		||||
                    <div className="col col-2 sm-pl1 md-pl2 lg-pl0" style={{ paddingTop: 15 }}>
 | 
			
		||||
            <div
 | 
			
		||||
                style={{ ...styles.topBar, ...bottomBorderStyle, ...this.props.style, ...{ height } }}
 | 
			
		||||
                className="pb1 flex items-center"
 | 
			
		||||
            >
 | 
			
		||||
                <Container
 | 
			
		||||
                    className={parentClassNames}
 | 
			
		||||
                    width="100%"
 | 
			
		||||
                    maxWidth={this.props.maxWidth}
 | 
			
		||||
                    paddingLeft={this.props.paddingLeft}
 | 
			
		||||
                    paddingRight={this.props.paddingRight}
 | 
			
		||||
                >
 | 
			
		||||
                    <Link to={`${WebsitePaths.Home}`} className="text-decoration-none">
 | 
			
		||||
                        <img src={logoUrl} height="30" />
 | 
			
		||||
                    </Link>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div className={`col col-${isExpandedDisplayType ? '8' : '9'} lg-hide md-hide`} />
 | 
			
		||||
                    <div className={`col col-${isExpandedDisplayType ? '6' : '5'} sm-hide xs-hide`} />
 | 
			
		||||
                    <div className="flex-auto" />
 | 
			
		||||
                    {!this._isViewingPortal() && (
 | 
			
		||||
                        <div className={menuClasses}>
 | 
			
		||||
                            <div className="flex justify-between">
 | 
			
		||||
@@ -264,7 +275,7 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
 | 
			
		||||
                        </div>
 | 
			
		||||
                    )}
 | 
			
		||||
                    {this._isViewingPortal() && (
 | 
			
		||||
                        <div className="sm-hide xs-hide col col-5" style={{ paddingTop: 8, marginRight: 36 }}>
 | 
			
		||||
                        <div className="sm-hide xs-hide">
 | 
			
		||||
                            <ProviderDisplay
 | 
			
		||||
                                dispatcher={this.props.dispatcher}
 | 
			
		||||
                                userAddress={this.props.userAddress}
 | 
			
		||||
@@ -277,12 +288,12 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
 | 
			
		||||
                            />
 | 
			
		||||
                        </div>
 | 
			
		||||
                    )}
 | 
			
		||||
                    <div className={`col ${isExpandedDisplayType ? 'col-2 pl2' : 'col-1'} md-hide lg-hide`}>
 | 
			
		||||
                    <div className={'md-hide lg-hide'}>
 | 
			
		||||
                        <div style={menuIconStyle}>
 | 
			
		||||
                            <i className="zmdi zmdi-menu" onClick={this._onMenuButtonClick.bind(this)} />
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                </Container>
 | 
			
		||||
                {shouldShowPortalV2Drawer ? this._renderPortalV2Drawer() : this._renderDrawer()}
 | 
			
		||||
            </div>
 | 
			
		||||
        );
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,6 @@ export class TopBarMenuItem extends React.Component<TopBarMenuItemProps, TopBarM
 | 
			
		||||
            ? {
 | 
			
		||||
                  borderRadius: 4,
 | 
			
		||||
                  border: `1px solid ${this.props.isNightVersion ? colors.grey : colors.greyishPink}`,
 | 
			
		||||
                  marginTop: 15,
 | 
			
		||||
                  paddingLeft: 9,
 | 
			
		||||
                  paddingRight: 9,
 | 
			
		||||
                  minWidth: 77,
 | 
			
		||||
 
 | 
			
		||||
@@ -224,10 +224,10 @@ export class Wallet extends React.Component<WalletProps, WalletState> {
 | 
			
		||||
                popoverContent={
 | 
			
		||||
                    <SimpleMenu minWidth="150px">
 | 
			
		||||
                        <CopyAddressSimpleMenuItem userAddress={this.props.userAddress} />
 | 
			
		||||
                        <DifferentWalletSimpleMenuItem onClick={this.props.onToggleLedgerDialog} />
 | 
			
		||||
                        {!isMobile && <DifferentWalletSimpleMenuItem onClick={this.props.onToggleLedgerDialog} />}
 | 
			
		||||
                        <SimpleMenuItem displayText="Add Tokens..." onClick={this.props.onAddToken} />
 | 
			
		||||
                        <SimpleMenuItem displayText="Remove Tokens..." onClick={this.props.onRemoveToken} />
 | 
			
		||||
                        <GoToAccountManagementSimpleMenuItem />
 | 
			
		||||
                        {!isMobile && <GoToAccountManagementSimpleMenuItem />}
 | 
			
		||||
                    </SimpleMenu>
 | 
			
		||||
                }
 | 
			
		||||
                anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user