Merge branch 'development' of https://github.com/0xProject/0x-monorepo into feature/instant/metamask-connect-flow
This commit is contained in:
		@@ -1,11 +1,15 @@
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
import { overlayBlack, styled } from '../../style/theme';
 | 
			
		||||
import { generateMediaWrapper, ScreenWidths } from '../../style/media';
 | 
			
		||||
import { generateOverlayBlack, styled } from '../../style/theme';
 | 
			
		||||
import { zIndex } from '../../style/z_index';
 | 
			
		||||
 | 
			
		||||
export interface OverlayProps {
 | 
			
		||||
    zIndex?: number;
 | 
			
		||||
    backgroundColor?: string;
 | 
			
		||||
    width?: string;
 | 
			
		||||
    height?: string;
 | 
			
		||||
    showMaxWidth?: ScreenWidths;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const Overlay =
 | 
			
		||||
@@ -20,12 +24,16 @@ export const Overlay =
 | 
			
		||||
        left: 0;
 | 
			
		||||
        z-index: ${props => props.zIndex}
 | 
			
		||||
        background-color: ${props => props.backgroundColor};
 | 
			
		||||
        ${props => props.width && `width: ${props.width};`}
 | 
			
		||||
        ${props => props.height && `height: ${props.height};`}
 | 
			
		||||
        display: ${props => (props.showMaxWidth ? 'none' : 'block')};
 | 
			
		||||
        ${props => props.showMaxWidth && generateMediaWrapper(props.showMaxWidth)`display: block;`}
 | 
			
		||||
    }
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
Overlay.defaultProps = {
 | 
			
		||||
    zIndex: zIndex.overlayDefault,
 | 
			
		||||
    backgroundColor: overlayBlack,
 | 
			
		||||
    backgroundColor: generateOverlayBlack(0.6),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Overlay.displayName = 'Overlay';
 | 
			
		||||
 
 | 
			
		||||
@@ -1,34 +1,59 @@
 | 
			
		||||
import * as React from 'react';
 | 
			
		||||
 | 
			
		||||
import { connect } from 'react-redux';
 | 
			
		||||
import { Dispatch } from 'redux';
 | 
			
		||||
 | 
			
		||||
import { SlidingError } from '../components/sliding_error';
 | 
			
		||||
import { Overlay } from '../components/ui/overlay';
 | 
			
		||||
import { Action } from '../redux/actions';
 | 
			
		||||
import { State } from '../redux/reducer';
 | 
			
		||||
import { Asset, DisplayStatus, SlideAnimationState } from '../types';
 | 
			
		||||
import { ScreenWidths } from '../style/media';
 | 
			
		||||
import { generateOverlayBlack } from '../style/theme';
 | 
			
		||||
import { zIndex } from '../style/z_index';
 | 
			
		||||
import { Asset, DisplayStatus, Omit, SlideAnimationState } from '../types';
 | 
			
		||||
import { errorFlasher } from '../util/error_flasher';
 | 
			
		||||
 | 
			
		||||
export interface LatestErrorComponentProps {
 | 
			
		||||
    asset?: Asset;
 | 
			
		||||
    latestErrorMessage?: string;
 | 
			
		||||
    animationState: SlideAnimationState;
 | 
			
		||||
    shouldRenderOverlay: boolean;
 | 
			
		||||
    onOverlayClick: () => void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const LatestErrorComponent: React.StatelessComponent<LatestErrorComponentProps> = props => {
 | 
			
		||||
    if (!props.latestErrorMessage) {
 | 
			
		||||
        return <div />;
 | 
			
		||||
    }
 | 
			
		||||
    return <SlidingError animationState={props.animationState} icon="😢" message={props.latestErrorMessage} />;
 | 
			
		||||
    return (
 | 
			
		||||
        <React.Fragment>
 | 
			
		||||
            <SlidingError animationState={props.animationState} icon="😢" message={props.latestErrorMessage} />
 | 
			
		||||
            {props.shouldRenderOverlay && (
 | 
			
		||||
                <Overlay
 | 
			
		||||
                    onClick={props.onOverlayClick}
 | 
			
		||||
                    zIndex={zIndex.containerOverlay}
 | 
			
		||||
                    showMaxWidth={ScreenWidths.Sm}
 | 
			
		||||
                    backgroundColor={generateOverlayBlack(0.4)}
 | 
			
		||||
                />
 | 
			
		||||
            )}
 | 
			
		||||
        </React.Fragment>
 | 
			
		||||
    );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
interface ConnectedState {
 | 
			
		||||
    asset?: Asset;
 | 
			
		||||
    latestErrorMessage?: string;
 | 
			
		||||
    animationState: SlideAnimationState;
 | 
			
		||||
}
 | 
			
		||||
export interface LatestErrorProps {}
 | 
			
		||||
interface ConnectedState extends Omit<LatestErrorComponentProps, 'onOverlayClick'> {}
 | 
			
		||||
const mapStateToProps = (state: State, _ownProps: LatestErrorProps): ConnectedState => ({
 | 
			
		||||
    asset: state.selectedAsset,
 | 
			
		||||
    latestErrorMessage: state.latestErrorMessage,
 | 
			
		||||
    animationState: state.latestErrorDisplayStatus === DisplayStatus.Present ? 'slidIn' : 'slidOut',
 | 
			
		||||
    shouldRenderOverlay: state.latestErrorDisplayStatus === DisplayStatus.Present,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export const LatestError = connect(mapStateToProps)(LatestErrorComponent);
 | 
			
		||||
type ConnectedDispatch = Pick<LatestErrorComponentProps, 'onOverlayClick'>;
 | 
			
		||||
const mapDispatchToProps = (dispatch: Dispatch<Action>, _ownProps: LatestErrorProps): ConnectedDispatch => ({
 | 
			
		||||
    onOverlayClick: () => {
 | 
			
		||||
        errorFlasher.clearError(dispatch);
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export const LatestError = connect(mapStateToProps, mapDispatchToProps)(LatestErrorComponent);
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ export enum ScreenWidths {
 | 
			
		||||
    Lg = 64,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const generateMediaWrapper = (screenWidth: ScreenWidths) => (...args: any[]) => css`
 | 
			
		||||
export const generateMediaWrapper = (screenWidth: ScreenWidths) => (...args: any[]) => css`
 | 
			
		||||
    @media (max-width: ${screenWidth}em) {
 | 
			
		||||
        ${css.apply(css, args)};
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,10 @@ export const theme: Theme = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const transparentWhite = 'rgba(255,255,255,0.3)';
 | 
			
		||||
export const overlayBlack = 'rgba(0, 0, 0, 0.6)';
 | 
			
		||||
export const completelyTransparent = 'rga(0, 0, 0, 0)';
 | 
			
		||||
 | 
			
		||||
export const generateOverlayBlack = (opacity = 0.6) => {
 | 
			
		||||
    return `rgba(0, 0, 0, ${opacity})`;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export { styled, css, keyframes, withTheme, createGlobalStyle, ThemeProvider };
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ export const zIndex = {
 | 
			
		||||
    mainContainer: 20,
 | 
			
		||||
    dropdownItems: 30,
 | 
			
		||||
    panel: 40,
 | 
			
		||||
    containerOverlay: 45,
 | 
			
		||||
    errorPopup: 50,
 | 
			
		||||
    overlayDefault: 100,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import { Web3Wrapper } from '@0x/web3-wrapper';
 | 
			
		||||
import { Provider } from 'ethereum-types';
 | 
			
		||||
 | 
			
		||||
// Reusable
 | 
			
		||||
export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
 | 
			
		||||
export type Maybe<T> = T | undefined;
 | 
			
		||||
export enum AsyncProcessState {
 | 
			
		||||
    None = 'NONE',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user