2020-09-26 21:35:11 +02:00
|
|
|
import * as React from "react";
|
|
|
|
import {RemoteIconRenderer} from "tc-shared/ui/react-elements/Icon";
|
|
|
|
import {Settings, settings} from "tc-shared/settings";
|
|
|
|
import {UnreadMarkerRenderer} from "./RendererTreeEntry";
|
|
|
|
import {getIconManager} from "tc-shared/file/Icons";
|
|
|
|
import {RDPServer} from "tc-shared/ui/tree/RendererDataProvider";
|
|
|
|
import {Translatable, VariadicTranslatable} from "tc-shared/ui/react-elements/i18n";
|
2021-01-07 12:58:53 +01:00
|
|
|
import {ChannelTreeView} from "tc-shared/ui/tree/RendererView";
|
|
|
|
import {ClientIconRenderer} from "tc-shared/ui/react-elements/Icons";
|
|
|
|
import {ClientIcon} from "svg-sprites/client-icons";
|
2020-09-26 21:35:11 +02:00
|
|
|
|
|
|
|
const serverStyle = require("./Server.scss");
|
|
|
|
const viewStyle = require("./View.scss");
|
|
|
|
|
|
|
|
export class ServerRenderer extends React.Component<{ server: RDPServer }, {}> {
|
|
|
|
render() {
|
|
|
|
const server = this.props.server;
|
|
|
|
const selected = this.props.server.selected;
|
|
|
|
|
|
|
|
let name, icon;
|
|
|
|
switch (server.state?.state) {
|
|
|
|
case undefined:
|
|
|
|
name = null;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "disconnected":
|
|
|
|
name = <Translatable key={"not-connected"}>Not connected to any server</Translatable>;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "connecting":
|
|
|
|
name = <VariadicTranslatable text={"Connecting to {}"} key={"connecting"}>{server.state.targetAddress}</VariadicTranslatable>;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "connected":
|
|
|
|
name = <React.Fragment key={"server-name"}>{server.state.name}</React.Fragment>;
|
|
|
|
icon = <RemoteIconRenderer icon={getIconManager().resolveIcon(server.state.icon.iconId, server.state.icon.serverUniqueId, server.getHandlerId())} key={"server-icon"} />;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div
|
|
|
|
className={serverStyle.serverEntry + " " + viewStyle.treeEntry + " " + (selected ? viewStyle.selected : "")}
|
2021-01-07 12:58:53 +01:00
|
|
|
style={{ top: (server.offsetTop * ChannelTreeView.EntryHeightEm) + "em" }}
|
2020-12-03 17:52:20 +01:00
|
|
|
onMouseDown={event => {
|
2020-09-26 21:35:11 +02:00
|
|
|
if (event.button !== 0) {
|
|
|
|
return; /* only left mouse clicks */
|
|
|
|
}
|
|
|
|
|
2020-12-03 17:52:20 +01:00
|
|
|
this.props.server.select("auto");
|
2020-09-26 21:35:11 +02:00
|
|
|
}}
|
|
|
|
onContextMenu={event => {
|
2021-01-10 16:13:15 +01:00
|
|
|
if (settings.getValue(Settings.KEY_DISABLE_CONTEXT_MENU)) {
|
2020-09-26 21:35:11 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
event.preventDefault();
|
2020-12-03 17:52:20 +01:00
|
|
|
this.props.server.handleUiContextMenu(event.pageX, event.pageY);
|
2020-09-26 21:35:11 +02:00
|
|
|
}}
|
2020-12-03 17:52:20 +01:00
|
|
|
draggable={true}
|
|
|
|
onDragStart={event => this.props.server.handleUiDragStart(event.nativeEvent)}
|
|
|
|
onDragOver={event => this.props.server.handleUiDragOver(event.nativeEvent)}
|
|
|
|
onDrop={event => this.props.server.handleUiDrop(event.nativeEvent)}
|
2020-09-26 21:35:11 +02:00
|
|
|
>
|
2020-09-26 22:53:33 +02:00
|
|
|
<div className={viewStyle.leftPadding} style={{ paddingLeft: server.offsetLeft + "em" }} />
|
2020-09-26 21:35:11 +02:00
|
|
|
<UnreadMarkerRenderer entry={server} ref={server.refUnread} />
|
2021-01-07 12:58:53 +01:00
|
|
|
<ClientIconRenderer icon={ClientIcon.ServerGreen} className={serverStyle.icon} />
|
2020-09-26 21:35:11 +02:00
|
|
|
<div className={serverStyle.name}>{name}</div>
|
|
|
|
{icon}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|