From aeff7c6ff0e1fee3625cffa920e9ce2f90902d97 Mon Sep 17 00:00:00 2001 From: Archben Date: Tue, 10 Mar 2026 13:42:50 +0000 Subject: [PATCH] Updates --- .../cluster-server-log-selector.tsx | 88 ++++++++++++------- .../service/(partials)/cluster-server.tsx | 24 +++-- .../services/service/(partials)/cluster.tsx | 17 +++- .../services/service/(sections)/clusters.tsx | 68 ++++++++------ src/styles/globals.css | 7 +- 5 files changed, 137 insertions(+), 67 deletions(-) diff --git a/src/components/pages/admin/services/service/(partials)/cluster-server-log-selector.tsx b/src/components/pages/admin/services/service/(partials)/cluster-server-log-selector.tsx index 5df04cf..300051f 100644 --- a/src/components/pages/admin/services/service/(partials)/cluster-server-log-selector.tsx +++ b/src/components/pages/admin/services/service/(partials)/cluster-server-log-selector.tsx @@ -13,8 +13,13 @@ import { ParsedDeploymentServiceConfig, } from "@/src/types"; import Select, { TWUISelectOptionObject } from "@/twui/components/form/Select"; -import Input from "@/twui/components/form/Input"; import AceEditor from "@/twui/components/editors/AceEditor"; +import Row from "@/twui/components/layout/Row"; +import Button from "@/twui/components/layout/Button"; +import Modal from "@/twui/components/elements/Modal"; +import H3 from "@/twui/components/layout/H3"; +import Span from "@/twui/components/layout/Span"; +import useStatus from "@/twui/components/hooks/useStatus"; type Props = { service: ParsedDeploymentServiceConfig; @@ -36,42 +41,63 @@ export default function ServiceClusterServerLogSelector({ const [log, setLog] = useState(log_strings?.[0]); const [isCustomLog, setIsCustomLog] = useState(false); + const { open, setOpen } = useStatus(); + const customLogRef = useRef(""); - useEffect(() => { - externalSetLog(log); - }, [log]); return ( - - + ({ + value: l, + title: l, + }) as TWUISelectOptionObject, + ) || []), + ]} + changeHandler={(v) => { + if (v == "custom") { + setIsCustomLog(true); + } else { + setIsCustomLog(false); + setLog(v); + } }} /> - ) : null} + + Custom + + } + setOpen={setOpen} + open={open} + > + + +

Enter a custom Command

+ + Enter a command to run a custom log + +
+ { + customLogRef.current = v; + }} + /> + +
+
+
); } diff --git a/src/components/pages/admin/services/service/(partials)/cluster-server.tsx b/src/components/pages/admin/services/service/(partials)/cluster-server.tsx index 4c6ff95..dfc1439 100644 --- a/src/components/pages/admin/services/service/(partials)/cluster-server.tsx +++ b/src/components/pages/admin/services/service/(partials)/cluster-server.tsx @@ -1,5 +1,5 @@ import Stack from "@/twui/components/layout/Stack"; -import { useContext, useRef, useState } from "react"; +import { ComponentProps, useContext, useRef, useState } from "react"; import { AppContext } from "@/src/pages/_app"; import { NormalizedServerObject, @@ -13,13 +13,19 @@ import ServiceClusterServerViews from "./cluster-server-views"; import Row from "@/twui/components/layout/Row"; import Button from "@/twui/components/layout/Button"; import ServiceClusterServerLogSelector from "./cluster-server-log-selector"; +import { twMerge } from "tailwind-merge"; type Props = { service: ParsedDeploymentServiceConfig; server: NormalizedServerObject; + wrapperProps?: ComponentProps; }; -export default function ServiceClusterServer({ service, server }: Props) { +export default function ServiceClusterServer({ + service, + server, + wrapperProps, +}: Props) { const { pageProps } = useContext(AppContext); const elementRef = useRef(undefined); @@ -31,12 +37,16 @@ export default function ServiceClusterServer({ service, server }: Props) { const [log, setLog] = useState(); return ( - - - {/* - {server.private_ip} - */} + + + {server.private_ip} + + + {ServerTerminalTargets.map((targ, index) => { const is_active = targ.name == target; diff --git a/src/components/pages/admin/services/service/(partials)/cluster.tsx b/src/components/pages/admin/services/service/(partials)/cluster.tsx index 8e129a9..9949770 100644 --- a/src/components/pages/admin/services/service/(partials)/cluster.tsx +++ b/src/components/pages/admin/services/service/(partials)/cluster.tsx @@ -25,7 +25,20 @@ export default function ServiceCluster({ service }: Props) { return ( - + + {cluster_servers?.map((server, index) => { + return ( + + ); + })} + + + {/* {cluster_servers?.map((server, index) => { const is_active = server?.private_ip == targetServer?.private_ip; @@ -55,7 +68,7 @@ export default function ServiceCluster({ service }: Props) { {targetServer ? ( - ) : undefined} + ) : undefined} */} ); } diff --git a/src/components/pages/admin/services/service/(sections)/clusters.tsx b/src/components/pages/admin/services/service/(sections)/clusters.tsx index 21081a2..03cdde3 100644 --- a/src/components/pages/admin/services/service/(sections)/clusters.tsx +++ b/src/components/pages/admin/services/service/(sections)/clusters.tsx @@ -11,6 +11,7 @@ import Row from "@/twui/components/layout/Row"; import { twMerge } from "tailwind-merge"; import Select from "@/twui/components/form/Select"; import ServiceClusterServer from "../(partials)/cluster-server"; +import H2 from "@/twui/components/layout/H2"; export default function ServiceClusters() { const { pageProps } = useContext(AppContext); @@ -36,24 +37,32 @@ export default function ServiceClusters() { - ({ + value: srv?.service_name!, + title: `Cluster #${clusterIndex}`, + }))} + wrapperWrapperProps={{ + className: `max-w-[250px]`, + }} + changeHandler={(v) => { + setTargetCluster(undefined); + setTimeout(() => { + setTargetCluster( + all_services.find( + (s) => s?.service_name == v, + ) || undefined, + ); + }, 200); + }} + /> - {cluster_servers?.[0] ? ( + {/* {cluster_servers?.[0] ? (