-
Notifications
You must be signed in to change notification settings - Fork 136
/
CrashesScreen.js
126 lines (107 loc) · 3.02 KB
/
CrashesScreen.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
/**
* Sample React Native App
* https://github.com/facebook/react-native
* @flow
*/
import React, { Component } from 'react';
import {
StyleSheet,
Text,
View,
ScrollView,
TouchableOpacity
} from 'react-native';
import Crashes from 'appcenter-crashes';
import { FooClass } from './js/FooClass';
import SharedStyles from './SharedStyles';
export default class CrashesScreen extends Component {
constructor() {
super();
this.state = {
crashesEnabled: false,
lastSessionStatus: '',
sendStatus: ''
};
this.toggleEnabled = this.toggleEnabled.bind(this);
this.jsCrash = this.jsCrash.bind(this);
this.nativeCrash = this.nativeCrash.bind(this);
}
async componentDidMount() {
let status = '';
const component = this;
const crashesEnabled = await Crashes.isEnabled();
component.setState({ crashesEnabled });
const crashedInLastSession = await Crashes.hasCrashedInLastSession();
status += `Crashed: ${crashedInLastSession ? 'yes' : 'no'}\n\n`;
component.setState({ lastSessionStatus: status });
if (crashedInLastSession) {
const crashReport = await Crashes.lastSessionCrashReport();
status += JSON.stringify(crashReport, null, 4);
component.setState({ lastSessionStatus: status });
}
}
async toggleEnabled() {
await Crashes.setEnabled(!this.state.crashesEnabled);
const crashesEnabled = await Crashes.isEnabled();
this.setState({ crashesEnabled });
}
jsCrash() {
const foo = new FooClass();
foo.method1();
}
nativeCrash() {
Crashes.generateTestCrash();
}
render() {
return (
<View style={SharedStyles.container}>
<ScrollView>
<Text style={SharedStyles.heading}>
Test Crashes
</Text>
<Text style={SharedStyles.enabledText}>
Crashes enabled: {this.state.crashesEnabled ? 'yes' : 'no'}
</Text>
<TouchableOpacity onPress={this.toggleEnabled}>
<Text style={SharedStyles.toggleEnabled}>
toggle
</Text>
</TouchableOpacity>
<TouchableOpacity onPress={this.jsCrash}>
<Text style={styles.button}>
Crash JavaScript
</Text>
</TouchableOpacity>
<TouchableOpacity onPress={this.nativeCrash}>
<Text style={styles.button}>
Crash native code
</Text>
</TouchableOpacity>
<Text style={styles.lastSessionHeader}>Last session:</Text>
<Text style={styles.lastSessionInfo}>
{this.state.lastSessionStatus}
</Text>
</ScrollView>
</View>
);
}
}
const styles = StyleSheet.create({
button: {
color: '#4444FF',
fontSize: 18,
textAlign: 'center',
margin: 10,
},
lastSessionHeader: {
fontSize: 20,
textAlign: 'center',
marginTop: 30
},
lastSessionInfo: {
fontSize: 14,
textAlign: 'center',
},
});