This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
Sphere/app/components/routes/login.js
2016-02-02 22:26:55 +00:00

158 lines
3.8 KiB
JavaScript

import React from 'react-native';
import GlobalStyles from '../../settings/styles';
import TokenHelp from '../login/token-help';
var dismissKeyboard = require('dismissKeyboard');
const {
StyleSheet,
Text,
View,
TextInput,
TouchableHighlight,
ScrollView,
BackAndroid,
TouchableWithoutFeedback
} = React;
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: GlobalStyles.get('CIRCLE_GREY_DARK'),
},
contentWrapper: {
flex: 0.85,
justifyContent: 'flex-start',
alignItems: 'center'
},
input: {
marginHorizontal: 15,
fontSize: 15,
textAlign: 'center'
},
loginButton: {
flex: 1,
backgroundColor: GlobalStyles.get('CIRCLE_GREEN'),
justifyContent: 'center',
alignItems: 'center',
padding: 10,
borderColor: GlobalStyles.get('CIRCLE_GREEN'),
borderWidth: 2,
borderRadius: 12
},
loginButtonText: {
fontSize: 18,
color: 'white',
},
buttonContainer: {
flexDirection: 'row',
justifyContent: 'center',
padding: 10,
paddingVertical: 15
},
title: {
fontSize: 30,
margin: 13
},
heading: {
fontSize: 18,
margin: 8,
marginVertical: 20
},
helpText: {
fontSize: 11,
fontStyle: 'italic'
},
text: {
color: 'white'
}
});
export default class Login extends React.Component {
constructor() {
super();
this.state = {
token: '',
showTokenHelp: false
};
this.validate = this.validate.bind(this);
this.updateState = this.updateState.bind(this);
this.showTokenHelp = this.showTokenHelp.bind(this);
this.hideTokenHelp = this.hideTokenHelp.bind(this);
}
updateState(key, value) {
let state = this.state;
state[key] = value;
this.setState(state);
}
validate() {
dismissKeyboard();
}
showTokenHelp() {
dismissKeyboard();
this.setState({
showTokenHelp: true
});
}
hideTokenHelp() {
this.setState({
showTokenHelp: false
});
}
componentWillUnmount() {
BackAndroid.removeEventListener('hardwareBackPress', () => { return true; }); // Re-enable back button
}
componentWillMount() {
BackAndroid.addEventListener('hardwareBackPress', () => { return true; }); // Disable back button
}
render() {
return (
<View style={styles.container}>
<View style={styles.buttonContainer}>
<Text style={[styles.title, styles.text]}>
Sphere
</Text>
</View>
<ScrollView keyboardShouldPersistTaps={false} contentContainerStyle={styles.container}>
<View style={styles.contentWrapper}>
<Text style={[styles.heading, styles.text]}>
Please enter your CircleCI token
</Text>
<TextInput
style={[styles.input, styles.text]}
onChangeText={(token) => this.updateState('token', token)}
value={this.state.token}
onSubmitEditing={this.validate}
placeholder="CircleCI Token"
placeholderTextColor="#A7A7A7"
autoCorrect={false}
/>
<TouchableWithoutFeedback onPress={this.showTokenHelp}>
<Text style={[styles.helpText, styles.text]}>
What's this?
</Text>
</TouchableWithoutFeedback>
</View>
</ScrollView>
<View style={styles.buttonContainer}>
<TouchableHighlight
style={styles.loginButton}
onPress={this.validate}
underlayColor={GlobalStyles.get('CIRCLE_GREY_DARK')}>
<Text style={[styles.loginButtonText, styles.text]}>
Authenticate
</Text>
</TouchableHighlight>
</View>
<TokenHelp open={this.state.showTokenHelp} onClose={this.hideTokenHelp} />
</View>
);
}
};