blob: 9a7c564d10264d7b9642cca54db900f3b8d3468f [file] [log] [blame]
gioa2a845c2025-05-08 11:27:14 +00001import { ReactElement } from "react";
2import { SiGithub, SiMongodb, SiPostgresql } from "react-icons/si";
3import { GrServices } from "react-icons/gr";
4import { GoFileDirectoryFill } from "react-icons/go";
5import { TbWorldWww } from "react-icons/tb";
6import { PiNetwork } from "react-icons/pi";
giocc5ce582025-06-25 07:45:21 +04007import { AiOutlineGlobal } from "react-icons/ai";
8import { Bot } from "lucide-react";
gio48679462025-05-21 04:27:27 +00009import { Terminal } from "lucide-react";
giocc5ce582025-06-25 07:45:21 +040010import { AppNode, Access } from "config";
gio5f2f1002025-03-20 18:38:48 +040011
gio0b4002c2025-05-11 15:48:51 +000012type Props = {
gio69148322025-06-19 23:16:12 +040013 node: AppNode | undefined;
gio0b4002c2025-05-11 15:48:51 +000014 className?: string;
15};
16
gio69148322025-06-19 23:16:12 +040017export function Icon({ node, className }: Props): ReactElement {
18 if (!node) {
19 return <></>;
20 }
21 switch (node.type) {
giod0026612025-05-08 13:00:36 +000022 case "app":
gio69148322025-06-19 23:16:12 +040023 if (node.data.type === "sketch:latest") {
24 return <Bot className={className} />;
25 } else {
26 return <GrServices className={className} />;
27 }
giod0026612025-05-08 13:00:36 +000028 case "github":
gio0b4002c2025-05-11 15:48:51 +000029 return <SiGithub className={className} />;
giod0026612025-05-08 13:00:36 +000030 case "gateway-https":
gio0b4002c2025-05-11 15:48:51 +000031 return <TbWorldWww className={className} />;
giod0026612025-05-08 13:00:36 +000032 case "gateway-tcp":
gio0b4002c2025-05-11 15:48:51 +000033 return <PiNetwork className={className} />;
giod0026612025-05-08 13:00:36 +000034 case "mongodb":
gio0b4002c2025-05-11 15:48:51 +000035 return <SiMongodb className={className} />;
giod0026612025-05-08 13:00:36 +000036 case "postgresql":
gio0b4002c2025-05-11 15:48:51 +000037 return <SiPostgresql className={className} />;
giod0026612025-05-08 13:00:36 +000038 case "volume":
gio0b4002c2025-05-11 15:48:51 +000039 return <GoFileDirectoryFill className={className} />;
giod0026612025-05-08 13:00:36 +000040 case "network":
gio0b4002c2025-05-11 15:48:51 +000041 return <AiOutlineGlobal className={className} />;
giod0026612025-05-08 13:00:36 +000042 default:
gio69148322025-06-19 23:16:12 +040043 throw new Error(`MUST NOT REACH! ${node.type}`);
giod0026612025-05-08 13:00:36 +000044 }
45}
gio48679462025-05-21 04:27:27 +000046
giocc5ce582025-06-25 07:45:21 +040047export function AccessType({ access, className }: { access: Access; className?: string }) {
48 switch (access.type) {
gio48679462025-05-21 04:27:27 +000049 case "https":
giocc5ce582025-06-25 07:45:21 +040050 if (access.agentName) {
51 return <Bot className={className} />;
52 } else {
53 return <TbWorldWww className={className} />;
54 }
gio48679462025-05-21 04:27:27 +000055 case "ssh":
56 return <Terminal className={className} />;
57 case "tcp":
58 case "udp":
59 return <PiNetwork className={className} />;
60 case "postgresql":
61 return <SiPostgresql className={className} />;
62 case "mongodb":
63 return <SiMongodb className={className} />;
64 }
65}