import React from 'react'; import {render} from 'react-dom'; import {AutoSizer, InfiniteLoader, List} from 'react-virtualized'; import classNames from 'classnames/bind'; import io from 'socket.io-client'; import scrollbarSize from 'dom-helpers/util/scrollbarSize'; class RayUI extends React.Component { constructor(props) { super(props); this.state = { table_one: "object_table", table_two: "task_table", table_three: "failure_table", table_four: "Remote_table", table_one_channel:"object", table_two_channel:"task", table_three_channel:"failure", table_four_channel:"remote", websocket_connection: io() }; } render() { return (
); } } class TableView extends React.Component { constructor(props) { super(props); this.state= { press: false }; this._toggle=this._toggle.bind(this) } _toggle(e){ this.setState({press: !this.state.press}); } render() { return (
); } } class TableScroll extends React.Component{ constructor(props) { super(props); this.state = { messages: [], filteredmsg: [], loadedRowsMap: {}, content: "This is the view pane.", atEnd: true, currentpos: 0, filter: "" }; this._onfilter = this._onfilter.bind(this); this.filterdata = this.filterdata.bind(this); this._isRowLoaded = this._isRowLoaded.bind(this); this._rowRenderer = this._rowRenderer.bind(this); this._loadMoreRows = this._loadMoreRows.bind(this); this.objectselect = this.objectselect.bind(this); this._objectrenderer = this._objectrenderer.bind(this); this.taskselect = this.taskselect.bind(this); this._taskrenderer = this._taskrenderer.bind(this); this.computationselect = this.computationselect.bind(this); this._computationrenderer = this._computationrenderer.bind(this); this.failureselect = this.failureselect.bind(this); this._failurerenderer = this._failurerenderer.bind(this); this.remoteselect = this.remoteselect.bind(this); this._remoterenderer = this._remoterenderer.bind(this); this.scrollcontroller = this.scrollcontroller.bind(this); switch (this.props.channel) { case "object": this.renderfunction = this._objectrenderer; this.header = (
{"Object ID"}
{"Plasma Store ID"}
); break; case "failure": this.renderfunction = this._failurerenderer; this.header = (
{"Failed Function"}
); break; case "computation": this.renderfunction = this._computationrenderer; this.header = (
{"Task iid"}
{"Function_id"}
); break; case "task": this.renderfunction = this._taskrenderer; this.header = (
{"Node id"}
{"Function_id"}
); break; case "remote": this.renderfunction = this._remoterenderer; this.header = (
{"Function id"}
{"Module"}
{"Function Name"}
); break; default: break; } } componentDidMount() { var self = this; console.log("port" + location.port); this.props.socket.emit('getall', {table:this.props.channel}); var arr = []; this.props.socket.on(this.props.channel, function(message) { console.log("got message " + message); var filteredarray = self.state.filteredmsg; message.forEach(function(msg,i){ // console.log("Content is " + JSON.stringify(msg)); arr.push(msg); if (self.filterdata(msg, self.state.filter)) {filteredarray.push(msg);} }); self.setState({messages: arr, filteredmsg: filteredarray}); }); } filterdata(data, filter) { console.log(data); var self = this; return filter != "" ? Object.values(data).filter(function(data){return data === Object(data) ? self.filterdata(data, filter) : String(data).includes(filter)}).length != 0 : true; } _onfilter(e) { var self = this; this.setState({filteredmsg: e.target.value != "" ? self.state.messages.filter(function(data){return self.filterdata(data, e.target.value)}) : self.state.messages, filter:e.target.value}); } _isRowLoaded({ index }) { return !!this.state.loadedRowsMap[index]; } objectselect(data, e) { console.log(data); this.setState({content:JSON.stringify(data)}) } _objectrenderer(record, key, style) { const className = classNames("evenRow", "cell", "centeredCell"); return ( ); } failureselect(data, e) { console.log(data); this.setState({content:data.error}) } _failurerenderer(record, key, style) { const className = classNames("evenRow", "cell", "centeredCell"); return ( ); } computationselect(data, e) { console.log(data); this.setState({content: JSON.stringify}); } _computationrenderer(record, key, style) { const className = classNames("evenRow", "cell", "centeredCell"); return ( ); } taskselect(data, e) { console.log(data); this.setState({content: JSON.stringify(data)}); } _taskrenderer(record, key, style) { const className = classNames("evenRow", "cell", "centeredCell"); return ( ); } remoteselect(data, e) { console.log(data); this.setState({content: JSON.stringify(data)}); } _remoterenderer(record, key, style) { const className = classNames("evenRow", "cell", "centeredCell"); return ( ); } _rowRenderer({ index, key, style, isScrolling}){ const record = this.state.filteredmsg[index]; return this.renderfunction(record, key, style); } _loadMoreRows({ startIndex, stopIndex }) { for (var i = startIndex; i <= stopIndex; i++) { this.state.loadedRowsMap[i] = 1; } let promiseResolver; return new Promise(resolve => { promiseResolver = resolve; }) } scrollcontroller({clientHeight, scrollHeight, scrollTop}){ this.setState({atEnd:scrollTop >= scrollHeight- clientHeight, currentpos: Math.floor(scrollTop/20)-1}); } render() { if (!this.props.press) { var style = {display:'none'} } var self = this; return ( {({ width }) => (
{this.header}
{({ onRowsRendered, registerChild }) => ( )}
)}
);} } render(, document.getElementById('mount-point'));