diff --git a/packages/web_ui/src/components/HostStatusTag.tsx b/packages/web_ui/src/components/HostStatusTag.tsx
new file mode 100644
index 00000000..eebf61a3
--- /dev/null
+++ b/packages/web_ui/src/components/HostStatusTag.tsx
@@ -0,0 +1,17 @@
+import { Tag } from "antd";
+import React from "react";
+
+import { CheckCircleOutlined, CloseCircleOutlined } from "@ant-design/icons";
+
+const statusOptions = {
+ connected: } >Connected,
+ disconnected: } >Disconnected,
+};
+
+type HostStatusTagProps = {
+ connected: boolean;
+};
+
+export default function HostStatusTag(props: HostStatusTagProps) {
+ return props.connected ? statusOptions.connected : statusOptions.disconnected;
+}
diff --git a/packages/web_ui/src/components/HostViewPage.tsx b/packages/web_ui/src/components/HostViewPage.tsx
index f6f4d9dd..c55eddd8 100644
--- a/packages/web_ui/src/components/HostViewPage.tsx
+++ b/packages/web_ui/src/components/HostViewPage.tsx
@@ -1,5 +1,5 @@
import React, { useContext, useState } from "react";
-import { Descriptions, Spin, Tag, Typography, Button, Space, Modal, Popconfirm, Flex, Tooltip } from "antd";
+import { Descriptions, Spin, Typography, Button, Space, Popconfirm, Flex, Tooltip } from "antd";
import { ExclamationCircleOutlined } from "@ant-design/icons";
import { useParams } from "react-router-dom";
@@ -7,6 +7,7 @@ import * as lib from "@clusterio/lib";
import notify, { notifyErrorHandler } from "../util/notify";
import ControlContext from "./ControlContext";
import HostConfigTree from "./HostConfigTree";
+import HostStatusTag from "./HostStatusTag";
import InstanceList from "./InstanceList";
import LogConsole, { SelectMaxLogLevel } from "./LogConsole";
import { useAccount } from "../model/account";
@@ -134,15 +135,10 @@ export default function HostViewPage() {
return
}
extra={hostButtons}
/>
- {host["name"]}
-
-
- {host["connected"] ? "Connected" : "Disconnected"}
-
-
{host.version}
{system?.node}
{system?.kernel}
diff --git a/packages/web_ui/src/components/HostsPage.tsx b/packages/web_ui/src/components/HostsPage.tsx
index e6212271..010b56fe 100644
--- a/packages/web_ui/src/components/HostsPage.tsx
+++ b/packages/web_ui/src/components/HostsPage.tsx
@@ -1,6 +1,6 @@
import React, { useContext, useRef, useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";
-import { Button, Flex, Form, InputNumber, Modal, Progress, Space, Switch, Table, Tag, Tooltip, Typography } from "antd";
+import { Button, Flex, Form, InputNumber, Modal, Space, Switch, Table, Tooltip, Typography } from "antd";
import { ExclamationCircleOutlined, CopyOutlined } from "@ant-design/icons";
import * as lib from "@clusterio/lib";
@@ -11,6 +11,7 @@ import ControlContext from "./ControlContext";
import PageHeader from "./PageHeader";
import PageLayout from "./PageLayout";
import PluginExtra from "./PluginExtra";
+import HostStatusTag from "./HostStatusTag";
import {
MetricCpuRatio, MetricCpuUsed, MetricMemoryRatio, MetricMemoryUsed,
MetricDiskUsed, MetricDiskRatio,
@@ -287,11 +288,7 @@ export default function HostsPage() {
title: "Connected",
key: "connected",
render: (_, host) => <>
-
- {host.connected ? "Connected" : "Disconnected"}
-
+
>,
sorter: (a, b) => Number(a.connected) - Number(b.connected),
diff --git a/packages/web_ui/src/components/InstanceStatusTag.tsx b/packages/web_ui/src/components/InstanceStatusTag.tsx
index 0ade6ff4..718db2a4 100644
--- a/packages/web_ui/src/components/InstanceStatusTag.tsx
+++ b/packages/web_ui/src/components/InstanceStatusTag.tsx
@@ -1,23 +1,27 @@
import { Tag } from "antd";
import React from "react";
-export const statusColors = {
- unknown: "#8c8c8c",
- unassigned: "#eb2f96",
- stopped: "#cf1322",
- starting: "#ad8b00",
- running: "#389e0d",
- stopping: "#d48806",
- creating_save: "#096dd9",
- exporting_data: "#08979c",
- deleted: "#262626",
+import {
+ QuestionCircleOutlined, ClockCircleOutlined, StopOutlined, LoadingOutlined,
+ CheckCircleOutlined, SaveOutlined, ExportOutlined, DeleteOutlined,
+} from "@ant-design/icons";
+
+export const statusOptions = {
+ unknown: }>Unknown,
+ unassigned: }>Unassigned,
+ stopped: }>Stopped,
+ starting: }>Starting,
+ running: }>Running,
+ stopping: }>Stopping,
+ creating_save: }>Creating Save,
+ exporting_data: }>Exporting Data,
+ deleted: }>Deleted,
};
type InstanceStatusTag = {
- status: keyof typeof statusColors;
+ status: keyof typeof statusOptions;
};
+
export default function InstanceStatusTag(props: InstanceStatusTag) {
- return
- {props.status.replace("_", " ")}
- ;
+ return statusOptions[props.status];
}
diff --git a/packages/web_ui/src/components/InstanceViewPage.tsx b/packages/web_ui/src/components/InstanceViewPage.tsx
index 8fad2747..622601b0 100644
--- a/packages/web_ui/src/components/InstanceViewPage.tsx
+++ b/packages/web_ui/src/components/InstanceViewPage.tsx
@@ -42,7 +42,7 @@ function InstanceDescription(props: InstanceDescriptionProps) {
return
{!assigned
@@ -66,9 +66,6 @@ function InstanceDescription(props: InstanceDescriptionProps) {
{instance.factorioVersion ?? "unknown"}
-
-
-
@@ -104,7 +101,7 @@ function InstanceButtons(props: { instance: lib.InstanceDetails }) {
instanceButtonMenuItems.push({ type: "divider" });
}
instanceButtonMenuItems.push({
- disabled: !["unknown", "unassigned", "stopped"].includes(instance.status!),
+ disabled: !["unknown", "unassigned", "stopped"].includes(instance.status),
danger: true,
key: "delete",
icon: ,
@@ -215,6 +212,7 @@ export default function InstanceViewPage() {
return
}
extra={}
/>
diff --git a/packages/web_ui/src/components/PageHeader.tsx b/packages/web_ui/src/components/PageHeader.tsx
index 4c78bf31..04a99d40 100644
--- a/packages/web_ui/src/components/PageHeader.tsx
+++ b/packages/web_ui/src/components/PageHeader.tsx
@@ -5,6 +5,7 @@ const { Text } = Typography;
type PageHeaderProps = {
title: string | React.ReactElement;
subTitle?: string | React.ReactElement;
+ status?: React.JSX.Element;
extra?: React.JSX.Element;
};
@@ -13,6 +14,7 @@ export default function PageHeader(props: PageHeaderProps): React.JSX.Element {
{props.title}
{props.subTitle && {props.subTitle}}
+ {props.status ?? null}
{props.extra && {props.extra}
}
;
diff --git a/packages/web_ui/src/index.ts b/packages/web_ui/src/index.ts
index 748e201f..0421bd5b 100644
--- a/packages/web_ui/src/index.ts
+++ b/packages/web_ui/src/index.ts
@@ -21,7 +21,7 @@ export { default as LogConsole } from "./components/LogConsole";
export { default as AssignInstanceModal } from "./components/AssignInstanceModal";
export { default as InstanceList } from "./components/InstanceList";
export { default as InstanceRcon } from "./components/InstanceRcon";
-export { default as InstanceStatusTag, statusColors } from "./components/InstanceStatusTag";
+export { default as InstanceStatusTag } from "./components/InstanceStatusTag";
export { default as InstanceControlButton, InstanceControlButtonPermissions } from "./components/InstanceControlButton";
export { default as PageHeader } from "./components/PageHeader";