@fusedashlabs/ui9000-workspace
Version:
UI9000 workspace MCP. One tool, show_workspace, draws a chart from your table. Set TYPESAFE_API_KEY to let Jev choose the chart.
44 lines (43 loc) • 1.79 kB
JavaScript
import { chartRole } from '../../catalog/chart-roles.js';
import { bindFieldMap } from './bind-fields.js';
import { barChartPayload } from './bar-chart.js';
import { chartTypeForComponent } from './chart-type.js';
import { histogramChartPayload } from './histogram-chart.js';
import { kpiWidgetPayload } from './kpi-widget.js';
import { hostedChartPayload } from './hosted-chart.js';
import { statusGaugeWidgetPayload } from './status-gauge-widget.js';
import { mapChartPayload } from './map-chart.js';
import { networkGraphPayload } from './network-graph.js';
import { asRowObjects } from './rows.js';
/** Components with a chart object. Anything else keeps the raw table rows. */
const PAYLOAD_BY_COMPONENT = {
'bar-chart': barChartPayload,
'histogram-chart': histogramChartPayload,
'map-chart': mapChartPayload,
'network-graph': networkGraphPayload,
'kpi-widget': (chartType, fields, rows, columns) => {
void chartType;
return kpiWidgetPayload(fields, rows, columns);
},
'status-gauge-widget': (chartType, fields, rows) => {
void chartType;
return statusGaugeWidgetPayload(fields, rows);
},
};
function builderFor(component) {
const known = PAYLOAD_BY_COMPONENT[component];
if (known)
return known;
if (!chartRole(component))
return undefined;
return (chartType, fields, rows) => hostedChartPayload(component, chartType, fields, rows);
}
export function workspaceWidgetPayload(component, chartType, binds, payload, columns) {
const rows = asRowObjects(payload);
if (!rows)
return payload;
const build = builderFor(component);
if (!build)
return payload;
return build(chartType ?? chartTypeForComponent(component), bindFieldMap(binds), rows, columns);
}