jiti-meet/react/features/connection-indicator/components/native/ConnectionIndicator.js

70 lines
1.6 KiB
JavaScript
Raw Normal View History

2019-04-15 16:23:28 +00:00
// @flow
import React from 'react';
2019-08-30 16:39:06 +00:00
import { IconSignalLevel0, IconSignalLevel1, IconSignalLevel2 } from '../../../base/icons';
2019-04-15 16:23:28 +00:00
import { BaseIndicator } from '../../../base/react';
import { connect } from '../../../base/redux';
import AbstractConnectionIndicator, {
type Props,
type State
} from '../AbstractConnectionIndicator';
import { CONNECTOR_INDICATOR_COLORS } from './styles';
2019-08-30 16:39:06 +00:00
const ICONS = [
IconSignalLevel0,
IconSignalLevel1,
IconSignalLevel2
];
2019-04-15 16:23:28 +00:00
/**
* Implements an indicator to show the quality of the connection of a participant.
*/
class ConnectionIndicator extends AbstractConnectionIndicator<Props, State> {
/**
* Initializes a new {@code ConnectionIndicator} instance.
*
* @inheritdoc
*/
constructor(props: Props) {
super(props);
this.state = {
autoHideTimeout: undefined,
showIndicator: false,
stats: {}
};
}
/**
* Implements React's {@link Component#render()}.
*
* @inheritdoc
* @returns {ReactElement}
*/
render() {
const { showIndicator, stats } = this.state;
const { percent } = stats;
if (!showIndicator || typeof percent === 'undefined') {
return null;
}
// Signal level on a scale 0..2
const signalLevel = Math.floor(percent / 33.4);
return (
<BaseIndicator
2019-08-30 16:39:06 +00:00
icon = { ICONS[signalLevel] }
2019-04-15 16:23:28 +00:00
iconStyle = {{
color: CONNECTOR_INDICATOR_COLORS[signalLevel]
}} />
);
}
}
export default connect()(ConnectionIndicator);