This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
3.9 KiB
154 lines
3.9 KiB
/** |
|
* Copyright (c) 2015-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
* @providesModule InspectorPanel |
|
* @flow |
|
*/ |
|
'use strict'; |
|
|
|
const ElementProperties = require('ElementProperties'); |
|
const NetworkOverlay = require('NetworkOverlay'); |
|
const PerformanceOverlay = require('PerformanceOverlay'); |
|
const React = require('React'); |
|
const PropTypes = require('prop-types'); |
|
const ScrollView = require('ScrollView'); |
|
const StyleSheet = require('StyleSheet'); |
|
const Text = require('Text'); |
|
const TouchableHighlight = require('TouchableHighlight'); |
|
const View = require('View'); |
|
|
|
class InspectorPanel extends React.Component<$FlowFixMeProps> { |
|
renderWaiting() { |
|
if (this.props.inspecting) { |
|
return ( |
|
<Text style={styles.waitingText}> |
|
Tap something to inspect it |
|
</Text> |
|
); |
|
} |
|
return <Text style={styles.waitingText}>Nothing is inspected</Text>; |
|
} |
|
|
|
render() { |
|
let contents; |
|
if (this.props.inspected) { |
|
contents = ( |
|
<ScrollView style={styles.properties}> |
|
<ElementProperties |
|
style={this.props.inspected.style} |
|
frame={this.props.inspected.frame} |
|
source={this.props.inspected.source} |
|
hierarchy={this.props.hierarchy} |
|
selection={this.props.selection} |
|
setSelection={this.props.setSelection} |
|
/> |
|
</ScrollView> |
|
); |
|
} else if (this.props.perfing) { |
|
contents = ( |
|
<PerformanceOverlay /> |
|
); |
|
} else if (this.props.networking) { |
|
contents = ( |
|
<NetworkOverlay /> |
|
); |
|
} else { |
|
contents = ( |
|
<View style={styles.waiting}> |
|
{this.renderWaiting()} |
|
</View> |
|
); |
|
} |
|
return ( |
|
<View style={styles.container}> |
|
{!this.props.devtoolsIsOpen && contents} |
|
<View style={styles.buttonRow}> |
|
<Button |
|
title={'Inspect'} |
|
pressed={this.props.inspecting} |
|
onClick={this.props.setInspecting} |
|
/> |
|
<Button title={'Perf'} |
|
pressed={this.props.perfing} |
|
onClick={this.props.setPerfing} |
|
/> |
|
<Button title={'Network'} |
|
pressed={this.props.networking} |
|
onClick={this.props.setNetworking} |
|
/> |
|
<Button title={'Touchables'} |
|
pressed={this.props.touchTargeting} |
|
onClick={this.props.setTouchTargeting} |
|
/> |
|
</View> |
|
</View> |
|
); |
|
} |
|
} |
|
|
|
InspectorPanel.propTypes = { |
|
devtoolsIsOpen: PropTypes.bool, |
|
inspecting: PropTypes.bool, |
|
setInspecting: PropTypes.func, |
|
inspected: PropTypes.object, |
|
perfing: PropTypes.bool, |
|
setPerfing: PropTypes.func, |
|
touchTargeting: PropTypes.bool, |
|
setTouchTargeting: PropTypes.func, |
|
networking: PropTypes.bool, |
|
setNetworking: PropTypes.func, |
|
}; |
|
|
|
class Button extends React.Component<$FlowFixMeProps> { |
|
render() { |
|
return ( |
|
<TouchableHighlight onPress={() => this.props.onClick(!this.props.pressed)} style={[ |
|
styles.button, |
|
this.props.pressed && styles.buttonPressed |
|
]}> |
|
<Text style={styles.buttonText}>{this.props.title}</Text> |
|
</TouchableHighlight> |
|
); |
|
} |
|
} |
|
|
|
const styles = StyleSheet.create({ |
|
buttonRow: { |
|
flexDirection: 'row', |
|
}, |
|
button: { |
|
backgroundColor: 'rgba(0, 0, 0, 0.3)', |
|
margin: 2, |
|
height: 30, |
|
justifyContent: 'center', |
|
alignItems: 'center', |
|
}, |
|
buttonPressed: { |
|
backgroundColor: 'rgba(255, 255, 255, 0.3)', |
|
}, |
|
buttonText: { |
|
textAlign: 'center', |
|
color: 'white', |
|
margin: 5, |
|
}, |
|
container: { |
|
backgroundColor: 'rgba(0, 0, 0, 0.7)', |
|
}, |
|
properties: { |
|
height: 200, |
|
}, |
|
waiting: { |
|
height: 100, |
|
}, |
|
waitingText: { |
|
fontSize: 20, |
|
textAlign: 'center', |
|
marginVertical: 20, |
|
color: 'white', |
|
}, |
|
}); |
|
|
|
module.exports = InspectorPanel;
|
|
|