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 b0f8000..4c6ff95 100644 --- a/src/components/pages/admin/services/service/(partials)/cluster-server.tsx +++ b/src/components/pages/admin/services/service/(partials)/cluster-server.tsx @@ -31,38 +31,36 @@ export default function ServiceClusterServer({ service, server }: Props) { const [log, setLog] = useState(); return ( - - - - - {server.private_ip} - - - {ServerTerminalTargets.map((targ, index) => { - const is_active = targ.name == target; + + + {/* + {server.private_ip} + */} + + {ServerTerminalTargets.map((targ, index) => { + const is_active = targ.name == target; - return ( - - ); - })} - + return ( + + ); + })} - - + +
- {isIntersecting ? ( + + {/* {isIntersecting ? ( @@ -70,7 +68,7 @@ export default function ServiceClusterServer({ service, server }: Props) {
- )} + )} */}
); } diff --git a/src/components/pages/admin/services/service/(partials)/cluster.tsx b/src/components/pages/admin/services/service/(partials)/cluster.tsx index 0d19bfd..8e129a9 100644 --- a/src/components/pages/admin/services/service/(partials)/cluster.tsx +++ b/src/components/pages/admin/services/service/(partials)/cluster.tsx @@ -1,37 +1,61 @@ import Stack from "@/twui/components/layout/Stack"; -import { useContext } from "react"; +import { useContext, useState } from "react"; import { AppContext } from "@/src/pages/_app"; -import { ParsedDeploymentServiceConfig } from "@/src/types"; +import { + NormalizedServerObject, + ParsedDeploymentServiceConfig, +} from "@/src/types"; import Row from "@/twui/components/layout/Row"; import H2 from "@/twui/components/layout/H2"; import ServiceClusterServer from "./cluster-server"; +import Button from "@/twui/components/layout/Button"; +import { twMerge } from "tailwind-merge"; type Props = { service: ParsedDeploymentServiceConfig; - cluster_index: number; }; -export default function ServiceCluster({ service, cluster_index }: Props) { +export default function ServiceCluster({ service }: Props) { const { pageProps } = useContext(AppContext); const cluster_servers = service.servers; + const [targetServer, setTargetServer] = useState< + NormalizedServerObject | undefined + >(cluster_servers?.[0]); + return ( - -

Cluster #{cluster_index}

-
-
- + {cluster_servers?.map((server, index) => { + const is_active = + server?.private_ip == targetServer?.private_ip; + return ( - + color="gray" + variant={is_active ? undefined : "outlined"} + size="small" + onClick={() => { + setTargetServer(server); + }} + > + + {server.private_ip} + + ); })} + + {targetServer ? ( + + ) : undefined}
); } diff --git a/src/components/pages/admin/services/service/(sections)/clusters.tsx b/src/components/pages/admin/services/service/(sections)/clusters.tsx index 67f32db..21081a2 100644 --- a/src/components/pages/admin/services/service/(sections)/clusters.tsx +++ b/src/components/pages/admin/services/service/(sections)/clusters.tsx @@ -1,7 +1,16 @@ import Stack from "@/twui/components/layout/Stack"; -import { useContext } from "react"; +import { useContext, useState } from "react"; import { AppContext } from "@/src/pages/_app"; import ServiceCluster from "../(partials)/cluster"; +import { + NormalizedServerObject, + ParsedDeploymentServiceConfig, +} from "@/src/types"; +import Button from "@/twui/components/layout/Button"; +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"; export default function ServiceClusters() { const { pageProps } = useContext(AppContext); @@ -9,18 +18,93 @@ export default function ServiceClusters() { const all_services = [service, ...(children_services || [])]; + const [targetCluster, setTargetCluster] = useState< + ParsedDeploymentServiceConfig | undefined + >(service || undefined); + const clusterIndex = + all_services.findIndex( + (srv) => srv?.service_name == targetCluster?.service_name, + ) + 1; + + const cluster_servers = targetCluster?.servers; + + const [targetServer, setTargetServer] = useState< + NormalizedServerObject | undefined + >(cluster_servers?.[0]); + return ( - {all_services.map((srv, index) => { - if (!srv) return null; - return ( - + + ({ + value: server?.private_ip!, + title: `${server?.private_ip}`, + }))} + wrapperWrapperProps={{ + className: `max-w-[250px]`, + }} + changeHandler={(v) => { + setTargetServer( + cluster_servers.find( + (s) => s?.private_ip == v, + ) || undefined, + ); + }} + /> + ) : undefined} + {/* {all_services.map((srv, index) => { + const is_active = + srv?.service_name == targetCluster?.service_name; + if (!srv) return null; + return ( + + ); + })} */} + +
+ {targetCluster ? ( + + ) : undefined} + {targetServer && service ? ( + + ) : undefined} +
); } diff --git a/src/components/pages/admin/services/service/index.tsx b/src/components/pages/admin/services/service/index.tsx index 90ad897..bccf778 100644 --- a/src/components/pages/admin/services/service/index.tsx +++ b/src/components/pages/admin/services/service/index.tsx @@ -1,4 +1,3 @@ -import Stack from "@/twui/components/layout/Stack"; import { Fragment, useContext } from "react"; import { AppContext } from "@/src/pages/_app"; import twuiSlugToNormalText from "@/twui/components/utils/slug-to-normal-text"; diff --git a/src/styles/globals.css b/src/styles/globals.css index db64a63..88037c6 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -76,6 +76,10 @@ @apply text-primary-text; } +.twui-button-primary * { + @apply text-primary-text; +} + .twui-h1, .twui-h2, .twui-h3 {