summaryrefslogtreecommitdiffhomepage
path: root/gui/packages/components/src
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2018-10-23 13:07:00 +0200
committerAndrej Mihajlov <and@mullvad.net>2018-10-24 10:56:32 +0200
commit01e3a18cfd7a079f8df1af8f60d265bece365701 (patch)
treeb246e9e1f8c49f072dd1470f9b6018df8d02e78f /gui/packages/components/src
parentd0f7c4b3cb6e508a6a504d65484592ed6a8adf4b (diff)
downloadmullvadvpn-01e3a18cfd7a079f8df1af8f60d265bece365701.tar.xz
mullvadvpn-01e3a18cfd7a079f8df1af8f60d265bece365701.zip
Refactor ConnectionInfo to eliminate internal state
Diffstat (limited to 'gui/packages/components/src')
-rw-r--r--gui/packages/components/src/ConnectionInfo.tsx85
1 files changed, 27 insertions, 58 deletions
diff --git a/gui/packages/components/src/ConnectionInfo.tsx b/gui/packages/components/src/ConnectionInfo.tsx
index b22c510c23..546d0f9c44 100644
--- a/gui/packages/components/src/ConnectionInfo.tsx
+++ b/gui/packages/components/src/ConnectionInfo.tsx
@@ -31,75 +31,44 @@ interface IOutAddress {
}
interface IProps {
- inAddress: IInAddress;
+ inAddress?: IInAddress;
outAddress: IOutAddress;
- startExpanded: boolean;
- onToggle: (expanded: boolean) => void;
+ isExpanded: boolean;
+ onToggle?: () => void;
}
-interface IState {
- expanded: boolean;
-}
-
-export default class ConnectionInfo extends Component<IProps, IState> {
- public static defaultProps = {
- inAddress: {
- ip: null,
- port: null,
- protocol: null,
- },
- outAddress: null,
- startExpanded: false,
- onToggle: (_: boolean) => {},
- };
-
- constructor(props: IProps) {
- super(props);
-
- this.state = {
- expanded: props.startExpanded,
- };
- }
-
+export default class ConnectionInfo extends Component<IProps> {
public render() {
+ const { inAddress, outAddress } = this.props;
+
return (
<View>
- <Accordion height={this.state.expanded ? 'auto' : 0}>
- <Text style={styles.content}>{this.inAddress()}</Text>
- <Text style={styles.content}>{this.outAddress()}</Text>
+ <Accordion height={this.props.isExpanded ? 'auto' : 0}>
+ {inAddress && (
+ <Text style={styles.content}>{`IN: ${inAddress.ip}:${inAddress.port} - ${
+ inAddress.protocol
+ }`}</Text>
+ )}
+
+ {(outAddress.ipv4 || outAddress.ipv6) && (
+ <Text style={styles.content}>
+ {'OUT: ' +
+ [outAddress.ipv4, outAddress.ipv6]
+ .filter((a) => typeof a !== 'undefined')
+ .join(' / ')}
+ </Text>
+ )}
</Accordion>
- <Text style={styles.toggle} onPress={() => this.toggle()}>
- {this.state.expanded ? 'LESS' : 'MORE'}
+ <Text style={styles.toggle} onPress={this.toggle}>
+ {this.props.isExpanded ? 'LESS' : 'MORE'}
</Text>
</View>
);
}
- private toggle() {
- this.setState((state, props) => {
- const expanded = !state.expanded;
-
- props.onToggle(expanded);
-
- return { expanded };
- });
- }
-
- private inAddress() {
- const { ip, port, protocol } = this.props.inAddress;
-
- return (
- 'IN: ' + (ip || '<unknown>') + (port ? `:${port}` : '') + (protocol ? ` - ${protocol}` : '')
- );
- }
-
- private outAddress() {
- const { ipv4, ipv6 } = this.props.outAddress;
-
- if (ipv4 || ipv6) {
- return `OUT: ${ipv4}` + (ipv6 ? ` / ${ipv6}` : '');
- } else {
- return '';
+ private toggle = () => {
+ if (this.props.onToggle) {
+ this.props.onToggle();
}
- }
+ };
}