react-native-keychain/KeychainExample/index.ios.js

164 lines
3.8 KiB
JavaScript

/**
* Sample React Native App
* https://github.com/facebook/react-native
*/
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
TextInput,
View,
TouchableHighlight,
} = React;
var Keychain = require('react-native-keychain');
var KeychainExample = React.createClass({
getInitialState: function() {
return {
username: '',
password: '',
status: '',
};
},
_save: function() {
Keychain
.setGenericPassword(this.state.username, this.state.password)
.then(() => {
this.setState({status: 'Credentials saved!'});
})
.catch((err) => {
this.setState({status: 'Could not save credentials, ' + err});
});
},
_load: function() {
Keychain
.getGenericPassword()
.then((credentials) => {
this.setState(credentials);
this.setState({status: 'Credentials loaded!'});
})
.catch((err) => {
this.setState({status: 'Could not load credentials. ' + err});
});
},
_reset: function() {
Keychain
.resetGenericPassword()
.then(() => {
this.setState({status: 'Credentials Reset!', username: '', password: '' });
})
.catch((err) => {
this.setState({status: 'Could not reset credentials, ' + err});
});
},
render: function() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
React Native Keychain Example
</Text>
<View style={styles.field}>
<Text style={styles.label}>Username</Text>
<TextInput
style={styles.input}
autoFocus={true}
autoCapitalize="none"
value={this.state.username}
onChange={(event) => this.setState({ username: event.nativeEvent.text })}
/>
</View>
<View style={styles.field}>
<Text style={styles.label}>Password</Text>
<TextInput
style={styles.input}
password={true}
autoCapitalize="none"
value={this.state.password}
onChange={(event) => this.setState({ password: event.nativeEvent.text })}
/>
</View>
<Text style={styles.status}>{this.state.status}</Text>
<View style={styles.buttons}>
<TouchableHighlight onPress={this._save} style={[styles.button, styles.save]}>
<View>
<Text style={styles.buttonText}>Save</Text>
</View>
</TouchableHighlight>
<TouchableHighlight onPress={this._load} style={styles.button}>
<View>
<Text style={styles.buttonText}>Load</Text>
</View>
</TouchableHighlight>
<TouchableHighlight onPress={this._reset} style={[styles.button, styles.reset]}>
<View>
<Text style={styles.buttonText}>Reset</Text>
</View>
</TouchableHighlight>
</View>
</View>
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
backgroundColor: '#F5FCFF',
paddingTop: 30,
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
field: {
marginVertical: 5,
},
label: {
fontWeight: '500',
},
input: {
borderWidth: 1,
borderColor: '#ccc',
height: 30,
fontSize: 14,
padding: 4,
width: 250,
},
status: {
width: 250,
},
buttons: {
flexDirection: 'row',
marginTop: 15,
},
button: {
marginHorizontal: 5,
paddingHorizontal: 8,
borderRadius: 4,
backgroundColor: '#333',
overflow: 'hidden',
},
save: {
backgroundColor: '#0c0',
},
reset: {
backgroundColor: '#c00',
},
buttonText: {
color: 'white',
padding: 5,
}
});
AppRegistry.registerComponent('KeychainExample', () => KeychainExample);