blob: 6bded3af24b0028e5e1354f2c0d89c097a27801a [file] [log] [blame]
import { ReactElement } from "react";
import { SiGithub, SiMongodb, SiPostgresql } from "react-icons/si";
import { GrServices } from "react-icons/gr";
import { GoFileDirectoryFill } from "react-icons/go";
import { TbWorldWww } from "react-icons/tb";
import { PiNetwork } from "react-icons/pi";
import { AiOutlineGlobal } from "react-icons/ai"; // Corrected import source
import { Bot } from "lucide-react"; // Bot import
import { Terminal } from "lucide-react";
import { z } from "zod";
import { AppNode, accessSchema } from "config";
type Props = {
node: AppNode | undefined;
className?: string;
};
export function Icon({ node, className }: Props): ReactElement {
if (!node) {
return <></>;
}
switch (node.type) {
case "app":
if (node.data.type === "sketch:latest") {
return <Bot className={className} />;
} else {
return <GrServices className={className} />;
}
case "github":
return <SiGithub className={className} />;
case "gateway-https":
return <TbWorldWww className={className} />;
case "gateway-tcp":
return <PiNetwork className={className} />;
case "mongodb":
return <SiMongodb className={className} />;
case "postgresql":
return <SiPostgresql className={className} />;
case "volume":
return <GoFileDirectoryFill className={className} />;
case "network":
return <AiOutlineGlobal className={className} />;
default:
throw new Error(`MUST NOT REACH! ${node.type}`);
}
}
export function AccessType({ type, className }: { type: z.infer<typeof accessSchema>["type"]; className?: string }) {
switch (type) {
case "https":
return <TbWorldWww className={className} />;
case "ssh":
return <Terminal className={className} />;
case "tcp":
case "udp":
return <PiNetwork className={className} />;
case "postgresql":
return <SiPostgresql className={className} />;
case "mongodb":
return <SiMongodb className={className} />;
}
}