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