MATIH Platform is in active MVP development. Documentation reflects current implementation status.
15. Workbench Architecture
Widget Framework

Widget Framework

The BI Workbench widget system at frontend/bi-workbench/src/components/widgets/ provides a composable widget architecture where each widget type extends the BaseWidget container with specific visualization rendering.


BaseWidget

File: frontend/bi-workbench/src/components/widgets/BaseWidget.tsx

The foundational widget container providing header, loading/error states, resize handling, and context menu.

Widget Types

WidgetFileDescription
MetricCardWidgetMetricCardWidget.tsxSingle KPI value with trend indicator
TableWidgetTableWidget.tsxTabular data with sorting and pagination
GaugeWidgetGaugeWidget.tsxProgress gauge towards a goal
MapWidgetMapWidget.tsxGeographic data visualization
VegaWidgetVegaWidget.tsxGeneric Vega-Lite spec renderer
TextWidgetTextWidget.tsxMarkdown text content
WidgetRendererWidgetRenderer.tsxDynamic widget type resolver

WidgetRenderer

The WidgetRenderer dynamically selects the appropriate widget component based on the widget type:

function WidgetRenderer({ widget, data, isLoading, error }: WidgetRendererProps) {
  switch (widget.type) {
    case 'BAR_CHART':
    case 'LINE_CHART':
    case 'PIE_CHART':
    case 'AREA_CHART':
      return <VegaWidget widget={widget} data={data} />;
    case 'METRIC_CARD':
      return <MetricCardWidget widget={widget} data={data} />;
    case 'TABLE':
      return <TableWidget widget={widget} data={data} />;
    case 'GAUGE':
      return <GaugeWidget widget={widget} data={data} />;
    case 'TEXT':
      return <TextWidget widget={widget} />;
    // ...
  }
}

Widget Data Subscription

The useWidgetDataSubscription hook manages real-time data updates for widgets:

const { data, isLoading, error, refresh } = useWidgetDataSubscription(
  widget.id,
  widget.dataSourceType,
  widget.query,
  widget.filterBindings,
  activeFilters
);