import React from 'react' import ReduxDebugger from 'debuggers/redux' import * as antd from 'antd' import { FloatComponent } from 'components' import { connect } from 'umi' import * as Icons from 'components/Icons' import { __legacy__objectToArray } from 'core' @connect((store) => (store)) export default class Index extends React.Component { handleDispatchNamespace(key) { console.log(`Dispatching socket namespace (${key})`) this.props.dispatch({ type: "socket/namespaceConnector", node: this.props.socket.headerNode, namespace: key }) } render() { const dispatch = this.props.dispatch const headerNode = this.props.socket.nodes[this.props.socket.headerNode] ?? null const getListenersList = (data) => { if (typeof (data) == "undefined" && data == null) { return null } return ( __legacy__objectToArray(data).map(e => { return ( <div key={e.key}> <antd.Tag>{e.key} > <antd.Tag color={e.value ? "geekblue" : "orange"} >{e.value ? "Enabled" : "Disable"}</antd.Tag></antd.Tag> </div> ) }) ) } const getNamespacesMonitor = (data) => { if (typeof (data) == "undefined" && data == null) { return null } return ( __legacy__objectToArray(data).map(e => { return ( <div key={e.key} style={{ display: "flex", flexDirection: "column", justifyContent: "center", margin: "0 10px", width: "100%", height: "100%" }}> <h4>{e.value}</h4> <antd.Button onClick={() => { this.handleDispatchNamespace(e.value) }} > connect </antd.Button> </div> ) }) ) } return ( <div> <ReduxDebugger /> <antd.Card> <h1><Icons.ClusterOutlined style={{ marginRight: "7px" }} /> Socket </h1> <antd.Card> <h3> Header Node </h3> <antd.Card> <antd.Tag>{this.props.socket.socket_address}</antd.Tag> <antd.Tag> {headerNode.ioConn.nsp ?? ""} </antd.Tag> <antd.Tag color={headerNode.connectionState ?? "failed" === "connected" ? "green" : "volcano"} > {headerNode.connectionState ?? "destroyed"} </antd.Tag> <antd.Tag color={(headerNode.latency ?? 0) > 60 ? "red" : "green"} > ~{headerNode.latency ?? "not exist"}ms </antd.Tag> </antd.Card> </antd.Card> <antd.Card> <h3> Listener manager </h3> <antd.Card> {getListenersList(headerNode.listeners ?? null)} </antd.Card> </antd.Card> <antd.Card> <h3> Registered Namespaces </h3> <antd.Card> <div style={{ display: "flex", flexDirection: "row", backgroundColor: "#fefefe", overflow: "scroll", textAlign: "center" }}> {getNamespacesMonitor(headerNode.registeredNamespaces ?? null)} </div> </antd.Card> </antd.Card> <antd.Card> <h3> Misc </h3> <antd.Card> <antd.Button onClick={() => { dispatch({ type: "socket/resetHeader" }) }} > Reset HeaderSocket </antd.Button> <antd.Button onClick={() => { dispatch({ type: "app/refreshToken" }) }} > force refreshToken </antd.Button> </antd.Card> </antd.Card> </antd.Card> </div> ) } }