summaryrefslogtreecommitdiffhomepage
path: root/app/components/styled/AppButton.js
diff options
context:
space:
mode:
authoranderklander <anderklander@gmail.com>2018-04-11 13:10:37 +0200
committeranderklander <anderklander@gmail.com>2018-04-11 13:45:43 +0200
commit0752afe7f1aa9d91384bc47f49c034503ccfd4ec (patch)
treeb89b4846b403619617659c51955006719a7928ef /app/components/styled/AppButton.js
parent2611996ba1a7ba2d4afdc5c76c96db6152847e74 (diff)
downloadmullvadvpn-0752afe7f1aa9d91384bc47f49c034503ccfd4ec.tar.xz
mullvadvpn-0752afe7f1aa9d91384bc47f49c034503ccfd4ec.zip
New AppButton differentiation and blur fix
Diffstat (limited to 'app/components/styled/AppButton.js')
-rw-r--r--app/components/styled/AppButton.js150
1 files changed, 37 insertions, 113 deletions
diff --git a/app/components/styled/AppButton.js b/app/components/styled/AppButton.js
index 5561aba4fb..a0cc2b7435 100644
--- a/app/components/styled/AppButton.js
+++ b/app/components/styled/AppButton.js
@@ -2,80 +2,7 @@
import * as React from 'react';
import { Text, Component } from 'reactxp';
import { Button } from './Button';
-import { colors } from '../../config';
-
-import { createViewStyles, createTextStyles } from '../../lib/styles';
-
-const styles = {
- ...createViewStyles({
- red:{
- backgroundColor: colors.red95,
- },
- redHover: {
- backgroundColor: colors.red,
- },
- green:{
- backgroundColor: colors.green,
- },
- greenHover:{
- backgroundColor: colors.green90,
- },
- blue:{
- backgroundColor: colors.blue80,
- },
- blueHover:{
- backgroundColor: colors.blue60,
- },
- transparent:{
- backgroundColor: colors.white20,
- },
- transparentHover:{
- backgroundColor: colors.white40,
- },
- white80:{
- color: colors.white80,
- },
- white: {
- color: colors.white,
- },
- icon:{
- position: 'absolute',
- alignSelf: 'flex-end',
- right: 8,
- marginLeft: 8,
- },
- iconTransparent:{
- position: 'absolute',
- alignSelf: 'flex-end',
- right: 42,
- },
- common:{
- paddingTop: 9,
- paddingLeft: 9,
- paddingRight: 9,
- paddingBottom: 9,
- marginTop: 8,
- marginBottom: 8,
- marginLeft: 24,
- marginRight: 24,
- borderRadius: 4,
- flex: 1,
- flexDirection: 'column',
- alignContent: 'center',
- justifyContent: 'center',
- },
- }),
- ...createTextStyles({
- label:{
- alignSelf: 'center',
- fontFamily: 'DINPro',
- fontSize: 20,
- fontWeight: '900',
- lineHeight: 26,
- flex: 1,
- },
- }),
-};
+import styles from './AppButtonStyles';
export class Label extends Text {}
@@ -83,46 +10,45 @@ class BaseButton extends Component {
props: {
children?: React.Node,
disabled: boolean,
- onPress?: ()=>{},
};
state = { hovered: false };
- cloneChildren = (children) => {return React.Children.map(children, (node) => {
- if (React.isValidElement(node)) {
- let updatedProps = {};
+ textStyle = () => this.state.hovered ? styles.white80 : styles.white;
+ iconStyle = () => this.state.hovered ? styles.white80 : styles.white;
+ backgroundStyle = () => this.state.hovered ? styles.white80 : styles.white;
- if(node.type.name === 'Label') {
- updatedProps = { style: [styles.label, this.textStyle()]};
- }
+ onHoverStart = () => !this.props.disabled ? this.setState({ hovered: true }) : null;
+ onHoverEnd = () => !this.props.disabled ? this.setState({ hovered: false }) : null;
+ render() {
+ const { children, ...otherProps } = this.props;
+ return (
+ <Button style={[ styles.common, this.backgroundStyle() ]}
+ onHoverStart={this.onHoverStart}
+ onHoverEnd={this.onHoverEnd}
+ {...otherProps}>
+ {
+ React.Children.map(children, (node) => {
+ if (React.isValidElement(node)) {
+ let updatedProps = {};
- if(node.type.name === 'Img') {
- updatedProps = { tintColor:'currentColor', style: [styles.icon, this.iconStyle()]};
- }
+ if(node.type.name === 'Label') {
+ updatedProps = { style: [styles.label, this.textStyle()]};
+ }
- return React.cloneElement(node, updatedProps);
- } else {
- return <Label style={[styles.label, this.textStyle()]}>{children}</Label>;
- }
- });
- }
+ if(node.type.name === 'Img') {
+ updatedProps = { tintColor:'currentColor', style: [styles.icon, this.iconStyle()]};
+ }
-textStyle = () => this.state.hovered ? styles.white80 : styles.white;
-iconStyle = () => this.state.hovered ? styles.white80 : styles.white;
-backgroundStyle = () => this.state.hovered ? styles.white80 : styles.white;
-
-onHoverStart = () => !this.props.disabled ? this.setState({ hovered: true }) : null;
-onHoverEnd = () => !this.props.disabled ? this.setState({ hovered: false }) : null;
-render() {
- const { children, ...otherProps } = this.props;
- return (
- <Button style={[ styles.common, this.backgroundStyle() ]}
- onHoverStart={this.onHoverStart}
- onHoverEnd={this.onHoverEnd}
- {...otherProps}>
- { this.cloneChildren(children) }
- </Button>);
-}
+ return React.cloneElement(node, updatedProps);
+ } else {
+ return <Label style={[styles.label, this.textStyle()]}>{children}</Label>;
+ }
+ })
+ }
+ </Button>
+ );
+ }
}
export class RedButton extends BaseButton {
@@ -138,11 +64,9 @@ export class BlueButton extends BaseButton {
}
export class TransparentButton extends BaseButton {
- iconStyle = () => [styles.iconTransparent, this.state.hovered ? styles.white80 : styles.white];
- render(){
- const { children, onPress, ...otherProps } = this.props;
- return (<button className="button button--neutral button--blur" onClick={ onPress } {...otherProps}>
- { this.cloneChildren(children) }
- </button>);
- }
+ backgroundStyle = () => this.state.hovered ? styles.transparentHover : styles.transparent;
+}
+
+export class RedTransparentButton extends BaseButton {
+ backgroundStyle = () => this.state.hovered ? styles.redTransparentHover : styles.redTransparent;
} \ No newline at end of file