/** * Widget renderer - renders the appropriate widget component based on type */ /* eslint-disable @typescript-eslint/no-unnecessary-condition */ import { WidgetWrapper } from "./WidgetWrapper"; import { TasksWidget, CalendarWidget, QuickCaptureWidget, AgentStatusWidget, } from "@/components/widgets"; import type { WidgetPlacement } from "@mosaic/shared"; export interface WidgetRendererProps { widget: WidgetPlacement; isEditing?: boolean; onRemove?: (widgetId: string) => void; } const WIDGET_COMPONENTS = { tasks: TasksWidget, calendar: CalendarWidget, "quick-capture": QuickCaptureWidget, "agent-status": AgentStatusWidget, }; const WIDGET_CONFIG = { tasks: { displayName: "Tasks", description: "View and manage your tasks", }, calendar: { displayName: "Calendar", description: "Upcoming events and schedule", }, "quick-capture": { displayName: "Quick Capture", description: "Capture ideas and notes", }, "agent-status": { displayName: "Agent Status", description: "View running agent sessions", }, }; export function WidgetRenderer({ widget, isEditing = false, onRemove, }: WidgetRendererProps): React.JSX.Element { // Extract widget type from ID (e.g., "tasks-123" -> "tasks") const widgetType = widget.i.split("-")[0] as keyof typeof WIDGET_COMPONENTS; const WidgetComponent = WIDGET_COMPONENTS[widgetType]; const config = WIDGET_CONFIG[widgetType] || { displayName: "Widget", description: "" }; if (!WidgetComponent) { const wrapperProps = { id: widget.i, title: "Unknown Widget", isEditing: isEditing, ...(onRemove && { onRemove: (): void => { onRemove(widget.i); }, }), }; return (
Widget type not found: {widgetType}
); } const wrapperProps = { id: widget.i, title: config.displayName, isEditing: isEditing, ...(onRemove && { onRemove: (): void => { onRemove(widget.i); }, }), }; return ( ); }