import Stack from "@/twui/components/layout/Stack"; import { ComponentProps, RefObject, useContext, useRef, useState } from "react"; import { AppContext } from "@/src/pages/_app"; import { NormalizedServerObject, ParsedDeploymentServiceConfig, } from "@/src/types/turboci"; import useIntersectionObserver from "@/twui/components/hooks/useIntersectionObserver"; import Center from "@/twui/components/layout/Center"; import Loading from "@/twui/components/elements/Loading"; 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"; import { ServerTerminalTargets } from "@/src/types"; type Props = { service: ParsedDeploymentServiceConfig; server: NormalizedServerObject; wrapperProps?: ComponentProps; portRef?: RefObject; }; export default function ServiceClusterServer({ service, server, wrapperProps, portRef, }: Props) { const { pageProps } = useContext(AppContext); const elementRef = useRef(undefined); const { isIntersecting } = useIntersectionObserver({ elementRef }); let service_logs = service.logs; if (service.type == "load_balancer") { if (!service_logs?.[0]) { service_logs = []; } service_logs.push( ...[ `tail -f /var/log/nginx/access.log`, `tail -f /var/log/nginx/error.log`, ], ); } const [target, setTarget] = useState< (typeof ServerTerminalTargets)[number]["name"] >(service_logs?.[0] ? "logs" : "shell"); const first_log = service_logs?.[0]; const intial_logs = typeof first_log == "string" ? first_log : first_log?.cmd; const [log, setLog] = useState(intial_logs); return ( {server.private_ip} {server.public_ip ? {server.public_ip} : null} {ServerTerminalTargets.map((targ, index) => { const is_active = targ.name == target; return ( ); })} {target == "logs" ? ( ) : ( )}
{/* {isIntersecting ? ( ) : (
)} */}
); }