timepill-app/src/page/UserNameEditPage.js
xuwenyang d6331e6447 1. 日记操作组件
2. 设置页面:启动密码,意见反馈,关于,退出登录
3. 设置页面:用户头像,名称,简介
2019-06-01 05:12:23 +08:00

137 lines
3.4 KiB
JavaScript

import React, { Component } from 'react';
import {
StyleSheet,
View,
Alert,
Text,
TextInput,
DeviceEventEmitter,
Keyboard
} from 'react-native';
import {Navigation} from 'react-native-navigation';
import Color from '../style/color';
import {Icon} from '../style/icon';
import Msg from '../util/msg';
import Api from '../util/api';
import Token from '../util/token';
import Event from '../util/event';
export default class UserNameEditPage extends Component {
constructor(props) {
super(props);
Navigation.events().bindComponent(this);
this.state = {
name: props.user.name
}
}
static options(passProps) {
return {
topBar: {
title: {
text: '修改名字'
},
rightButtons: [{
id: 'save',
icon: Icon.navButtonSave
}]
},
bottomTabs: {
visible: false,
// hide bottom tab for android
drawBehind: true,
animate: true
}
};
}
componentDidMount() {
setTimeout(() => {
this.refs.input.focus();
}, 500);
}
navigationButtonPressed({buttonId}) {
this.saveUserName();
}
saveUserName() {
const len = this.state.name.length;
if (len === 0) {
Alert.alert('提示', '名字不能为空');
return;
} else if (len > 10) {
Alert.alert('提示', '名字不能超过10个字');
return;
}
Api.updateUserInfo(this.state.name, this.props.user.intro)
.then(async user => {
Keyboard.dismiss();
Msg.showMsg('修改成功');
await Token.setUserInfo(user);
DeviceEventEmitter.emit(Event.userInfoUpdated);
Navigation.pop(this.props.componentId);
})
.catch(e => {
Msg.showMsg('修改失败');
})
.done();
}
render() {
return (
<View style={{flex: 1, backgroundColor: '#EFEFF4'}}>
<View style={localStyle.group}>
<View style={localStyle.item}>
<Text style={localStyle.title}>名字</Text>
<TextInput ref='input'
style={localStyle.textInput}
underlineColorAndroid='transparent'
selectionColor={Color.primary}
value={this.state.name}
onChangeText={(text) => this.setState({name: text})}
/>
</View>
</View>
</View>
);
}
}
const localStyle = StyleSheet.create({
group: {
marginTop: 30,
backgroundColor: 'white',
borderTopWidth: StyleSheet.hairlineWidth,
borderBottomWidth: StyleSheet.hairlineWidth,
borderColor: '#c8c7cc'
},
item: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
paddingHorizontal: 15,
height: 45
},
title: {
fontSize: 16,
color: '#222'
},
textInput: {
flex: 1,
fontSize: 16,
marginLeft: 15,
padding: 0,
height: 24,
color: Color.content
}
});