Merge branch 'development' of https://github.com/0xProject/0x-monorepo into feature/instant/move-features-over-from-zrx-buyer

This commit is contained in:
fragosti
2018-10-15 18:53:15 -07:00
5 changed files with 152 additions and 6 deletions

View File

@@ -0,0 +1,96 @@
import * as React from 'react';
import { keyframes, styled } from '../../style/theme';
const slideKeyframeGenerator = (fromY: string, toY: string) => keyframes`
from {
position: relative;
top: ${fromY};
}
to {
position: relative;
top: ${toY};
}
`;
export interface SlideAnimationProps {
keyframes: string;
animationType: string;
animationDirection?: string;
}
export const SlideAnimation =
styled.div <
SlideAnimationProps >
`
animation-name: ${props => props.keyframes};
animation-duration: 0.3s;
animation-timing-function: ${props => props.animationType};
animation-delay: 0s;
animation-iteration-count: 1;
animation-fill-mode: ${props => props.animationDirection || 'none'};
position: relative;
`;
export interface SlideAnimationComponentProps {
downY: string;
}
export const SlideUpAnimationComponent: React.StatelessComponent<SlideAnimationComponentProps> = props => (
<SlideAnimation animationType="ease-in" keyframes={slideKeyframeGenerator(props.downY, '0px')}>
{props.children}
</SlideAnimation>
);
export const SlideDownAnimationComponent: React.StatelessComponent<SlideAnimationComponentProps> = props => (
<SlideAnimation
animationDirection="forwards"
animationType="cubic-bezier(0.25, 0.1, 0.25, 1)"
keyframes={slideKeyframeGenerator('0px', props.downY)}
>
{props.children}
</SlideAnimation>
);
export interface SlideUpAndDownAnimationProps extends SlideAnimationComponentProps {
delayMs: number;
}
enum SlideState {
Up = 'up',
Down = 'down',
}
interface SlideUpAndDownState {
slideState: SlideState;
}
export class SlideUpAndDownAnimation extends React.Component<SlideUpAndDownAnimationProps, SlideUpAndDownState> {
public state = {
slideState: SlideState.Up,
};
private _timeoutId?: number;
public render(): React.ReactNode {
return this._renderSlide();
}
public componentDidMount(): void {
this._timeoutId = window.setTimeout(() => {
this.setState({
slideState: SlideState.Down,
});
}, this.props.delayMs);
return;
}
public componentWillUnmount(): void {
if (this._timeoutId) {
window.clearTimeout(this._timeoutId);
}
}
private _renderSlide(): React.ReactNode {
const SlideComponent = this.state.slideState === 'up' ? SlideUpAnimationComponent : SlideDownAnimationComponent;
return <SlideComponent downY={this.props.downY}>{this.props.children}</SlideComponent>;
}
}

View File

@@ -0,0 +1,36 @@
import * as React from 'react';
import { ColorOption } from '../style/theme';
import { SlideUpAndDownAnimation } from './animations/slide_up_and_down_animation';
import { Container, Text } from './ui';
export interface ErrorProps {
icon: string;
message: string;
}
export const Error: React.StatelessComponent<ErrorProps> = props => (
<Container
padding="10px"
border={`1px solid ${ColorOption.darkOrange}`}
backgroundColor={ColorOption.lightOrange}
width="100%"
borderRadius="6px"
marginBottom="10px"
>
<Container marginRight="5px" display="inline">
{props.icon}
</Container>
<Text fontWeight="500" fontColor={ColorOption.darkOrange}>
{props.message}
</Text>
</Container>
);
export const SlidingError: React.StatelessComponent<ErrorProps> = props => (
<SlideUpAndDownAnimation downY="120px" delayMs={5000}>
<Error icon={props.icon} message={props.message} />
</SlideUpAndDownAnimation>
);

View File

@@ -26,6 +26,7 @@ export interface ContainerProps {
className?: string;
backgroundColor?: ColorOption;
hasBoxShadow?: boolean;
zIndex?: number;
}
const PlainContainer: React.StatelessComponent<ContainerProps> = ({ children, className }) => (
@@ -52,6 +53,7 @@ export const Container = styled(PlainContainer)`
${props => cssRuleIfExists(props, 'border')}
${props => cssRuleIfExists(props, 'border-top')}
${props => cssRuleIfExists(props, 'border-bottom')}
${props => cssRuleIfExists(props, 'z-index')}
${props => (props.hasBoxShadow ? `box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1)` : '')};
background-color: ${props => (props.backgroundColor ? props.theme[props.backgroundColor] : 'none')};
border-color: ${props => (props.borderColor ? props.theme[props.borderColor] : 'none')};

View File

@@ -11,11 +11,19 @@ import { Container, Flex } from './ui';
export interface ZeroExInstantContainerProps {}
export const ZeroExInstantContainer: React.StatelessComponent<ZeroExInstantContainerProps> = props => (
<Container hasBoxShadow={true} width="350px" backgroundColor={ColorOption.white} borderRadius="3px">
<Flex direction="column" justify="flex-start">
<SelectedAssetInstantHeading />
<LatestBuyQuoteOrderDetails />
<SelectedAssetBuyButton />
</Flex>
<Container width="350px">
<Container
zIndex={2}
position="relative"
backgroundColor={ColorOption.white}
borderRadius="3px"
hasBoxShadow={true}
>
<Flex direction="column" justify="flex-start">
<SelectedAssetInstantHeading />
<LatestBuyQuoteOrderDetails />
<SelectedAssetBuyButton />
</Flex>
</Container>
</Container>
);

View File

@@ -12,6 +12,8 @@ export enum ColorOption {
feintGrey = 'feintGrey',
darkGrey = 'darkGrey',
white = 'white',
lightOrange = 'lightOrange',
darkOrange = 'darkOrange',
}
export const theme: Theme = {
@@ -22,6 +24,8 @@ export const theme: Theme = {
feintGrey: '#DEDEDE',
darkGrey: '#333333',
white: 'white',
lightOrange: '#F9F2ED',
darkOrange: '#F2994C',
};
export { styled, css, injectGlobal, keyframes, ThemeProvider };