Include App version and platform for Report a Problem (#458)

This commit is contained in:
enahum 2017-04-05 22:33:26 -03:00 committed by GitHub
parent 491fba7738
commit 8cfeb4b5db
2 changed files with 42 additions and 22 deletions

View file

@ -20,9 +20,11 @@ import Settings from './settings';
function mapStateToProps(state, ownProps) {
const showTeamSelection = Object.keys(state.entities.teams.teams).length > 1;
const {config} = state.entities.general;
return {
...ownProps,
config,
theme: getTheme(state),
errors: state.errors,
currentUserId: state.entities.users.currentUserId,

View file

@ -10,6 +10,7 @@ import {
TouchableHighlight,
View
} from 'react-native';
import DeviceInfo from 'react-native-device-info';
import MaterialIcon from 'react-native-vector-icons/MaterialIcons';
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
@ -27,6 +28,7 @@ export default class Settings extends PureComponent {
clearErrors: PropTypes.func.isRequired,
logout: PropTypes.func.isRequired
}).isRequired,
config: PropTypes.object.isRequired,
currentTeamId: PropTypes.string.isRequired,
currentUserId: PropTypes.string.isRequired,
errors: PropTypes.array.isRequired,
@ -53,6 +55,37 @@ export default class Settings extends PureComponent {
}
};
canPress = true;
errorEmailBody = () => {
const {config, currentUserId, currentTeamId, errors} = this.props;
let contents = [
`Current User Id: ${currentUserId}`,
`Current Team Id: ${currentTeamId}`,
`Server Version: ${config.Version} (Build ${config.BuildNumber})`,
`App Version: ${DeviceInfo.getVersion()} (Build ${DeviceInfo.getBuildNumber()})`,
`App Platform: ${Platform.OS}`
];
if (errors.length) {
contents = contents.concat([
'',
'Errors:',
JSON.stringify(errors.map((e) => e.error))
]);
}
return contents.join('\n');
};
handlePress = (action) => {
if (this.canPress) {
this.canPress = false;
action();
setTimeout(() => {
this.canPress = true;
}, 300);
}
};
logout = () => {
const {closeDrawers, logout} = this.props.actions;
closeDrawers();
@ -68,24 +101,9 @@ export default class Settings extends PureComponent {
this.props.actions.clearErrors();
};
errorEmailBody = () => {
const {currentUserId, currentTeamId, errors} = this.props;
let contents = [
`Current User Id: ${currentUserId}`,
`Current Team Id: ${currentTeamId}`
];
if (errors.length) {
contents = contents.concat([
'',
'Errors:',
JSON.stringify(errors.map((e) => e.error))
]);
}
return contents.join('\n');
};
render() {
const {showTeamSelection, theme} = this.props;
const {actions, showTeamSelection, theme} = this.props;
const {goToAccountSettings, goToSelectTeam, goToAbout} = actions;
const style = getStyleSheet(theme);
return (
@ -96,7 +114,7 @@ export default class Settings extends PureComponent {
i18nId='sidebar_right_menu.accountSettings'
iconName='cog'
iconType='fontawesome'
onPress={this.props.actions.goToAccountSettings}
onPress={() => this.handlePress(goToAccountSettings)}
separator={true}
theme={theme}
/>
@ -106,7 +124,7 @@ export default class Settings extends PureComponent {
i18nId='sidebar_right_menu.switch_team'
iconName='ios-people'
iconType='ion'
onPress={this.props.actions.goToSelectTeam}
onPress={() => this.handlePress(goToSelectTeam)}
separator={true}
theme={theme}
/>
@ -116,7 +134,7 @@ export default class Settings extends PureComponent {
i18nId='sidebar_right_menu.report'
iconName='warning'
iconType='material'
onPress={this.openErrorEmail}
onPress={() => this.handlePress(this.openErrorEmail)}
separator={true}
theme={theme}
/>
@ -125,7 +143,7 @@ export default class Settings extends PureComponent {
i18nId='about.title'
iconName='info-outline'
iconType='material'
onPress={this.props.actions.goToAbout}
onPress={() => this.handlePress(goToAbout)}
separator={false}
theme={theme}
/>
@ -139,7 +157,7 @@ export default class Settings extends PureComponent {
iconName='exit-to-app'
iconType='material'
isDestructor={true}
onPress={this.logout}
onPress={() => this.handlePress(this.logout)}
separator={false}
theme={theme}
/>