humus-old/client/ui/debug/connection/index.js

69 lines
1.6 KiB
JavaScript
Raw Normal View History

2019-04-14 17:01:41 -05:00
// 3rd party.
import classnames from 'classnames';
import React, {useEffect, useState} from 'react';
// 2nd party.
import {compose} from '@avocado/core';
import contempo from 'contempo';
// 1st party.
import Throughput from './throughput';
const decorate = compose(
contempo(`
.connection {
background-color: rgba(0, 0, 0, .3);
border: 1px solid white;
color: white;
position: absolute;
top: 0.5em;
2019-04-20 02:14:40 -05:00
right: 0.5em;
2019-04-14 17:01:41 -05:00
line-height: 1em;
padding: 0.125em;
font-family: monospace;
}
.connection > p {
2019-04-14 17:14:13 -05:00
border-bottom: 1px solid rgb(180, 180, 180);
margin: 0.25em;
padding-bottom: 0.25em;
2019-04-14 17:01:41 -05:00
text-transform: uppercase;
}
.connection > p.connected {
color: rgb(0, 255, 0);
}
.connection > p.not-connected {
color: rgb(255, 0, 0);
}
`),
);
const ConnectionComponent = ({
Parser,
socket,
}) => {
2019-04-16 23:45:37 -05:00
const [isConnected, setIsConnected] = useState(false);
2019-04-14 17:01:41 -05:00
// Juggle connected state.
useEffect(() => {
2019-04-17 00:50:25 -05:00
setIsConnected(socket.isConnected);
2019-04-14 17:01:41 -05:00
const onConnect = () => {
setIsConnected(true);
};
socket.on('connect', onConnect);
const onDisconnect = () => {
setIsConnected(false);
};
socket.on('disconnect', onDisconnect);
return () => {
socket.off('connect', onConnect);
socket.off('disconnect', onDisconnect);
};
}, []);
return <div className="connection unselectable">
<p className={classnames(
isConnected ? 'connected' : 'not-connected',
'status',
)}>{isConnected ? 'connected' : 'not connected'}</p>
<Throughput Parser={Parser} />
</div>;
}
export default decorate(ConnectionComponent);