153 lines
6.4 KiB
TypeScript
153 lines
6.4 KiB
TypeScript
import type { Component } from "vue";
|
|
import { Archive, Braces, Clock, Columns3, Database, Eye, FileCode, FolderClosed, FolderOpen, Gauge, Key, Link, Link2, ListTree, Network, Package, Plus, ScrollText, Server, ShieldCheck, Table, TableProperties, UsersRound, Zap } from "@lucide/vue";
|
|
import type { ColumnInfo, TreeNode } from "@/types/database";
|
|
|
|
export type TreeNodeIconInfo = {
|
|
icon: Component;
|
|
colorClass: string;
|
|
};
|
|
|
|
export function getTreeNodeIconInfo(node: TreeNode): TreeNodeIconInfo | null {
|
|
switch (node.type) {
|
|
case "schema":
|
|
return { icon: node.isExpanded ? FolderOpen : FolderClosed, colorClass: "text-amber-500" };
|
|
case "connection":
|
|
case "database":
|
|
case "mongo-db":
|
|
return { icon: Database, colorClass: "text-yellow-500" };
|
|
case "vector-database":
|
|
return { icon: Database, colorClass: "text-cyan-500" };
|
|
case "linked-server-root":
|
|
return { icon: Network, colorClass: "text-blue-500" };
|
|
case "linked-server":
|
|
return { icon: Server, colorClass: "text-blue-400" };
|
|
case "linked-server-catalog":
|
|
case "linked-server-schema":
|
|
case "mq-tenant":
|
|
return { icon: FolderOpen, colorClass: "text-sky-400" };
|
|
case "doris-catalog":
|
|
return { icon: FolderOpen, colorClass: "text-emerald-500" };
|
|
case "nacos-namespace":
|
|
case "etcd-root":
|
|
case "mqtt-topic":
|
|
return { icon: FolderOpen, colorClass: "text-sky-500" };
|
|
case "etcd-dashboard":
|
|
return { icon: Gauge, colorClass: "text-sky-500" };
|
|
case "nacos-access-control":
|
|
case "etcd-access-control":
|
|
return { icon: ShieldCheck, colorClass: "text-sky-500" };
|
|
case "zookeeper-root":
|
|
case "consul-root":
|
|
return { icon: Database, colorClass: "text-blue-500" };
|
|
case "table":
|
|
return { icon: Table, colorClass: "text-green-500" };
|
|
case "view":
|
|
return { icon: Eye, colorClass: "text-purple-500" };
|
|
case "materialized_view":
|
|
return { icon: Eye, colorClass: "text-indigo-500" };
|
|
case "column":
|
|
return { icon: Columns3, colorClass: (node.meta as ColumnInfo | undefined)?.is_primary_key ? "text-orange-400" : "text-muted-foreground" };
|
|
case "type-attribute":
|
|
return { icon: Columns3, colorClass: "text-muted-foreground" };
|
|
case "type-method":
|
|
return { icon: Braces, colorClass: "text-amber-500" };
|
|
case "type-attributes":
|
|
return { icon: ListTree, colorClass: "text-green-400" };
|
|
case "type-methods":
|
|
return { icon: Braces, colorClass: "text-amber-500" };
|
|
case "group-columns":
|
|
return { icon: ListTree, colorClass: "text-green-400" };
|
|
case "group-indexes":
|
|
case "index":
|
|
return { icon: Key, colorClass: "text-amber-500" };
|
|
case "group-fkeys":
|
|
return { icon: Link, colorClass: "text-blue-400" };
|
|
case "fkey":
|
|
return { icon: Link, colorClass: "text-blue-300" };
|
|
case "group-triggers":
|
|
return { icon: Zap, colorClass: "text-orange-400" };
|
|
case "trigger":
|
|
return { icon: Zap, colorClass: "text-orange-300" };
|
|
case "group-events":
|
|
return { icon: Clock, colorClass: "text-orange-400" };
|
|
case "event":
|
|
return { icon: Clock, colorClass: "text-orange-400" };
|
|
case "group-constraints":
|
|
case "constraint":
|
|
return { icon: Key, colorClass: "text-amber-500" };
|
|
case "group-table-partitions":
|
|
case "group-table-subpartitions":
|
|
return { icon: node.isExpanded ? FolderOpen : FolderClosed, colorClass: "text-green-400" };
|
|
case "partition":
|
|
case "subpartition":
|
|
return { icon: TableProperties, colorClass: "text-green-400" };
|
|
case "object-browser":
|
|
return { icon: TableProperties, colorClass: "text-primary" };
|
|
case "user-admin":
|
|
return { icon: UsersRound, colorClass: "text-primary" };
|
|
case "dameng-users":
|
|
return { icon: UsersRound, colorClass: "text-primary" };
|
|
case "dameng-roles":
|
|
return { icon: ShieldCheck, colorClass: "text-primary" };
|
|
case "redis-db":
|
|
return { icon: Database, colorClass: "text-red-400" };
|
|
case "mongo-gridfs":
|
|
case "mongo-buckets":
|
|
return { icon: Archive, colorClass: "text-cyan-500" };
|
|
case "mongo-bucket":
|
|
return { icon: Archive, colorClass: "text-cyan-400" };
|
|
case "mongo-collection":
|
|
return { icon: Table, colorClass: "text-green-400" };
|
|
case "vector-collection":
|
|
return { icon: TableProperties, colorClass: "text-cyan-400" };
|
|
case "elasticsearch-index":
|
|
return { icon: Table, colorClass: "text-emerald-400" };
|
|
case "meilisearch-system":
|
|
return { icon: Gauge, colorClass: "text-emerald-500" };
|
|
case "procedure":
|
|
return { icon: ScrollText, colorClass: "text-blue-500" };
|
|
case "function":
|
|
return { icon: Braces, colorClass: "text-amber-500" };
|
|
case "sequence":
|
|
return { icon: ListTree, colorClass: "text-emerald-500" };
|
|
case "synonym":
|
|
return { icon: Link2, colorClass: "text-sky-500" };
|
|
case "job":
|
|
return { icon: Clock, colorClass: "text-orange-400" };
|
|
case "package":
|
|
return { icon: Package, colorClass: "text-cyan-500" };
|
|
case "package-body":
|
|
return { icon: FileCode, colorClass: "text-cyan-400" };
|
|
case "group-tables":
|
|
return { icon: Table, colorClass: "text-green-500" };
|
|
case "group-dolt-system-tables":
|
|
return { icon: Table, colorClass: "text-slate-500" };
|
|
case "group-views":
|
|
return { icon: Eye, colorClass: "text-purple-500" };
|
|
case "group-materialized-views":
|
|
return { icon: Eye, colorClass: "text-indigo-500" };
|
|
case "group-procedures":
|
|
return { icon: ScrollText, colorClass: "text-blue-500" };
|
|
case "group-functions":
|
|
return { icon: Braces, colorClass: "text-amber-500" };
|
|
case "group-sequences":
|
|
return { icon: ListTree, colorClass: "text-emerald-500" };
|
|
case "group-synonyms":
|
|
return { icon: Link2, colorClass: "text-sky-500" };
|
|
case "group-jobs":
|
|
return { icon: Clock, colorClass: "text-orange-400" };
|
|
case "group-packages":
|
|
return { icon: Package, colorClass: "text-cyan-500" };
|
|
case "group-partitions":
|
|
return { icon: node.isExpanded ? FolderOpen : FolderClosed, colorClass: "text-green-400" };
|
|
case "group-extensions":
|
|
return { icon: Package, colorClass: "text-violet-500" };
|
|
case "extension":
|
|
return { icon: Package, colorClass: "text-violet-400" };
|
|
case "load-more":
|
|
return { icon: Plus, colorClass: "text-primary" };
|
|
default:
|
|
return { icon: Database, colorClass: "text-muted-foreground" };
|
|
}
|
|
}
|