import React from "react"; import { NodeData } from "../../types"; import { DatabaseOperation } from "../../types/database"; import { Database, CheckCircle, XCircle, Clock, Search, Plus, Edit, Trash2, BarChart3, GitBranch, } from "lucide-react"; interface UnifiedDatabaseNodeProps { data: NodeData; selected: boolean; } export const UnifiedDatabaseNode: React.FC = ({ data, selected, }) => { // Get operation display info const getOperationInfo = () => { const operation = data.config?.operation as DatabaseOperation; const operationIcons: Record< DatabaseOperation, React.ComponentType > = { query: Search, insert: Plus, update: Edit, delete: Trash2, aggregate: BarChart3, transaction: GitBranch, }; const operationLabels: Record = { query: "Query", insert: "Insert", update: "Update", delete: "Delete", aggregate: "Aggregate", transaction: "Transaction", }; return { icon: operationIcons[operation] || Database, label: operationLabels[operation] || "Database", }; }; const operationInfo = getOperationInfo(); const OperationIcon = operationInfo.icon; // Enhanced data for display const enhancedData = { ...data, label: data.label || operationInfo.label, }; // Custom status display for database operations const getStatusDisplay = () => { if (data.status === "success" && data.outputs && data.outputs.length > 0) { const output = data.outputs[0]; if (output.rowsAffected !== undefined) { return `${output.rowsAffected} rows affected`; } if (output.data && Array.isArray(output.data)) { return `${output.data.length} rows returned`; } } return null; }; const statusDisplay = getStatusDisplay(); return (
{/* Top Handle */}
{/* Header */}

{enhancedData.label}

{data.config?.connectionId ? `Connected` : "No connection"}

{/* Status Indicator */}
{data.status === "running" && (
)} {data.status === "success" && (
)} {data.status === "error" && (
)}
{/* Operation-specific preview */} {data.config && (
{data.config.table && ( Table: {data.config.table} )} {data.config.updateTable && ( Table: {data.config.updateTable} )} {data.config.deleteTable && ( Table: {data.config.deleteTable} )} {data.config.aggregateTable && ( Table: {data.config.aggregateTable} )} {data.config.query && ( Query:{" "} {data.config.query.length > 20 ? `${data.config.query.substring(0, 20)}...` : data.config.query} )}
)} {/* Success status display */} {statusDisplay && (
{statusDisplay}
)} {/* Error State */} {data.error && (
Error

{data.error}

)}
{/* Bottom Accent Bar */}
{/* Bottom Handle */}
); };