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";