import React from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { ModalState } from "@/types"; import { TraceDetailsModal } from "@/components/shared/modals/TraceDetailsModal"; import { StageResultsModal } from "@/components/shared/modals/StageResultsModal"; import { KnowledgeGraphModal } from "@/components/shared/modals/KnowledgeGraphModal"; import { TraceSegmentModal } from "@/components/shared/modals/TraceSegmentModal"; import ExampleTraceModal from "./modals/ExampleTraceModal"; import { ObservabilityConnectionDialog } from "@/components/features/observability/ObservabilityConnectionDialog"; import { UploadDialog } from "@/components/features/upload/UploadDialog"; import { AuthModal } from "@/components/auth/AuthModal"; interface ModalSystemProps { modalState: ModalState; onClose: () => void; } export function ModalSystem({ modalState, onClose }: ModalSystemProps) { const { isOpen, type, title, data, config } = modalState; const getModalSize = () => { switch (config?.size) { case "sm": return "max-w-md"; case "md": return "max-w-lg"; case "lg": return "max-w-2xl"; case "xl": return "max-w-4xl"; case "full": return "max-w-[95vw] max-h-[95vh]"; default: return "max-w-3xl"; } }; const renderModalContent = () => { switch (type) { case "trace-details": return ; case "stage-results": return ; case "knowledge-graph": return ; case "trace-segment": return ; case "example-traces": return ; case "upload-trace": return ; case "observability-connection": return ( ); case "auth-login": return ; default: return (
Unknown modal type: {type}
); } }; // Some modals have their own Dialog wrapper const hasOwnDialog = type === "upload-trace" || type === "observability-connection" || type === "auth-login"; if (hasOwnDialog) { return <>{renderModalContent()}; } return ( {title}
{renderModalContent()}
); }