Add autobind decorator and fix Android login screen

This commit is contained in:
John Lyon-Smith
2018-03-27 08:22:40 -07:00
parent da0eb58a8c
commit 7f6bf52334
8 changed files with 21 additions and 23 deletions

View File

@@ -6,6 +6,7 @@
"development": {
"plugins": [
"transform-react-jsx-source",
"transform-decorators-legacy",
"transform-inline-environment-variables"
]
}

View File

@@ -454,10 +454,10 @@
"resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
"integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10="
},
"auto-bind2": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/auto-bind2/-/auto-bind2-1.0.3.tgz",
"integrity": "sha512-+br9nya9M8ayHjai7m9rdpRxuEr8xcYRDrIp7HybNe0ixUHbc1kDiWXKMb0ldsfWb9Zi+SqJ9JfjW8nTkYD0QQ=="
"autobind-decorator": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/autobind-decorator/-/autobind-decorator-2.1.0.tgz",
"integrity": "sha512-bgyxeRi1R2Q8kWpHsb1c+lXCulbIAHsyZRddaS+agAUX3hFUVZMociwvRgeZi1zWvfqEEjybSv4zxWvFV8ydQQ=="
},
"aws-sign2": {
"version": "0.7.0",

View File

@@ -3,10 +3,11 @@
"version": "0.1.0",
"private": true,
"devDependencies": {
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-plugin-transform-inline-environment-variables": "^0.3.0",
"babel-preset-react-native-stage-0": "^1.0.1",
"jest-react-native": "^18.0.0",
"react-test-renderer": "16.2.0",
"babel-plugin-transform-inline-environment-variables": "^0.3.0"
"react-test-renderer": "16.2.0"
},
"scripts": {
"start": "react-native start",
@@ -18,7 +19,7 @@
"preset": "react-native"
},
"dependencies": {
"auto-bind2": "^1.0.3",
"autobind-decorator": "^2.1.0",
"eventemitter3": "^3.0.1",
"npm": "^5.7.1",
"react": "16.2.0",

View File

@@ -1,6 +1,5 @@
import React from 'react';
import { StyleSheet, Text, Image, Button } from 'react-native';
import { reactAutoBind } from 'auto-bind2'
export class Error extends React.Component {
static navigatorStyle = {
@@ -17,11 +16,6 @@ export class Error extends React.Component {
},
})
constructor(props) {
super(props)
reactAutoBind(this)
}
render() {
return (
<View style={Login.styles.page}>

View File

@@ -1,10 +1,11 @@
import React from 'react';
import { StyleSheet, Text, Image, Switch, TextInput, KeyboardAvoidingView, ScrollView, View, Button, Alert, InteractionManager } from 'react-native';
import { Platform, StyleSheet, Text, Image, Switch, TextInput,
KeyboardAvoidingView, ScrollView, View, Button, Alert, InteractionManager } from 'react-native';
import logoImage from './images/deighton.png'
import { FormBinder } from 'react-form-binder'
import { api } from '../API'
import { BoundSwitch, BoundInput, BoundButton } from '../ui'
import { reactAutoBind } from 'auto-bind2'
import autobind from 'autobind-decorator'
export class Login extends React.Component {
static navigatorStyle = {
@@ -67,12 +68,12 @@ export class Login extends React.Component {
constructor(props) {
super(props)
reactAutoBind(this)
this.state = {
binder: new FormBinder({}, Login.bindings)
}
}
@autobind
handleLogin() {
let obj = this.state.binder.getModifiedFieldValues()
let { navigator } = this.props
@@ -88,7 +89,8 @@ export class Login extends React.Component {
render() {
return (
<KeyboardAvoidingView style={Login.styles.page} behavior='padding'>
<KeyboardAvoidingView style={Login.styles.page} behavior='padding'
keyboardVerticalOffset={Platform.select({ios: () => 0, android: () => 200})}>
<Image style={Login.styles.logo} source={logoImage} resizeMode='contain' />
<View style={Login.styles.inputRow}>
<BoundInput name='email' label='Email:' placeholder='name@xyz.com' message='Must enter a valid email' binder={this.state.binder} />

View File

@@ -1,7 +1,7 @@
import React from 'react'
import PropTypes from 'prop-types'
import { View, Text, TouchableHighlight } from 'react-native'
import { reactAutoBind } from 'auto-bind2'
import autobind from 'autobind-decorator'
export class BoundButton extends React.Component {
static propTypes = {
@@ -15,7 +15,6 @@ export class BoundButton extends React.Component {
constructor(props) {
super(props)
reactAutoBind(this)
let { name, binder } = this.props
@@ -23,6 +22,7 @@ export class BoundButton extends React.Component {
this.state = binder.getFieldState(name)
}
@autobind
updateValue(e) {
this.setState(e.state)
}

View File

@@ -1,7 +1,7 @@
import React from 'react'
import PropTypes from 'prop-types'
import { TextInput, Text, View } from 'react-native'
import { reactAutoBind } from 'auto-bind2'
import autobind from 'autobind-decorator'
export class BoundInput extends React.Component {
static propTypes = {
@@ -15,10 +15,10 @@ export class BoundInput extends React.Component {
constructor(props) {
super(props)
reactAutoBind(this)
this.state = props.binder.getFieldState(props.name)
}
@autobind
handleChangeText(newText) {
const { binder, name } = this.props
const state = binder.getFieldState(name)

View File

@@ -1,7 +1,7 @@
import React from 'react'
import PropTypes from 'prop-types'
import { View, Switch, Text } from 'react-native'
import { reactAutoBind } from 'auto-bind2'
import autobind from 'autobind-decorator'
export class BoundSwitch extends React.Component {
static propTypes = {
@@ -12,10 +12,10 @@ export class BoundSwitch extends React.Component {
constructor(props) {
super(props)
reactAutoBind(this)
this.state = props.binder.getFieldState(props.name)
}
@autobind
handleValueChange() {
const { binder, name } = this.props
const state = binder.getFieldState(name)