@solidxai/core-ui 0.1.9-beta.14 → 0.1.9-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/components/core/dashboard/mappers/echartsOptionMapper.d.ts +4 -0
  2. package/dist/components/core/dashboard/mappers/echartsOptionMapper.d.ts.map +1 -0
  3. package/dist/components/core/dashboard/mappers/echartsOptionMapper.js +76 -0
  4. package/dist/components/core/dashboard/mappers/echartsOptionMapper.js.map +1 -0
  5. package/dist/components/core/dashboard/mappers/echartsOptionMapper.ts +78 -0
  6. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.d.ts +3 -0
  7. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.d.ts.map +1 -0
  8. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.js +17 -0
  9. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.js.map +1 -0
  10. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.tsx +6 -0
  11. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.d.ts +3 -0
  12. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.d.ts.map +1 -0
  13. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.js +41 -0
  14. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.js.map +1 -0
  15. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.tsx +56 -0
  16. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.d.ts +3 -0
  17. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.d.ts.map +1 -0
  18. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.js +9 -0
  19. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.js.map +1 -0
  20. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.tsx +7 -0
  21. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.d.ts +3 -0
  22. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.d.ts.map +1 -0
  23. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.js +17 -0
  24. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.js.map +1 -0
  25. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.tsx +6 -0
  26. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.d.ts +3 -0
  27. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.d.ts.map +1 -0
  28. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.js +17 -0
  29. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.js.map +1 -0
  30. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.tsx +6 -0
  31. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.d.ts +3 -0
  32. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.d.ts.map +1 -0
  33. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.js +12 -0
  34. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.js.map +1 -0
  35. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.tsx +39 -0
  36. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.d.ts +3 -0
  37. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.d.ts.map +1 -0
  38. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.js +7 -0
  39. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.js.map +1 -0
  40. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.tsx +9 -0
  41. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.d.ts +3 -0
  42. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.d.ts.map +1 -0
  43. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.js +159 -0
  44. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.js.map +1 -0
  45. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.tsx +205 -0
  46. package/dist/helpers/registry.d.ts.map +1 -1
  47. package/dist/helpers/registry.js +15 -10
  48. package/dist/helpers/registry.js.map +1 -1
  49. package/dist/helpers/registry.ts +16 -12
  50. package/dist/index.d.ts +4 -7
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +3 -7
  53. package/dist/index.js.map +1 -1
  54. package/dist/index.ts +12 -13
  55. package/dist/redux/api/dashboardRuntimeApi.d.ts +34 -0
  56. package/dist/redux/api/dashboardRuntimeApi.d.ts.map +1 -0
  57. package/dist/redux/api/dashboardRuntimeApi.js +79 -0
  58. package/dist/redux/api/dashboardRuntimeApi.js.map +1 -0
  59. package/dist/redux/api/dashboardRuntimeApi.ts +75 -0
  60. package/dist/redux/store/defaultStoreConfig.d.ts +34 -9
  61. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  62. package/dist/redux/store/defaultStoreConfig.js +2 -6
  63. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  64. package/dist/redux/store/defaultStoreConfig.ts +2 -6
  65. package/dist/routes/pages/admin/core/DashboardPage.d.ts +1 -0
  66. package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
  67. package/dist/routes/pages/admin/core/DashboardPage.js +780 -5
  68. package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
  69. package/dist/routes/pages/admin/core/DashboardPage.module.css +186 -0
  70. package/dist/routes/pages/admin/core/DashboardPage.tsx +898 -7
  71. package/dist/routes/solidRoutes.d.ts.map +1 -1
  72. package/dist/routes/solidRoutes.js +2 -2
  73. package/dist/routes/solidRoutes.js.map +1 -1
  74. package/dist/routes/solidRoutes.tsx +2 -2
  75. package/dist/routes/types.d.ts +1 -1
  76. package/dist/routes/types.d.ts.map +1 -1
  77. package/dist/routes/types.js.map +1 -1
  78. package/dist/routes/types.ts +1 -1
  79. package/dist/types/dashboard.d.ts +16 -0
  80. package/dist/types/dashboard.d.ts.map +1 -0
  81. package/dist/types/dashboard.js +2 -0
  82. package/dist/types/dashboard.js.map +1 -0
  83. package/dist/types/dashboard.ts +23 -0
  84. package/dist/types/extension-registry.d.ts +1 -0
  85. package/dist/types/extension-registry.d.ts.map +1 -1
  86. package/dist/types/extension-registry.js +1 -0
  87. package/dist/types/extension-registry.js.map +1 -1
  88. package/dist/types/extension-registry.ts +1 -0
  89. package/package.json +3 -1
@@ -0,0 +1,159 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ import ReactECharts from "echarts-for-react";
4
+ var formatBucketLabel = function (value) {
5
+ if (!value)
6
+ return "";
7
+ var date = new Date(value);
8
+ if (Number.isNaN(date.getTime()))
9
+ return value;
10
+ return new Intl.DateTimeFormat("en-GB", {
11
+ day: "2-digit",
12
+ month: "short",
13
+ hour: "2-digit",
14
+ minute: "2-digit",
15
+ }).format(date);
16
+ };
17
+ var formatMetric = function (value, unit) {
18
+ if (unit === void 0) { unit = "ms"; }
19
+ if (value === undefined || value === null || Number.isNaN(Number(value))) {
20
+ return "--";
21
+ }
22
+ return "".concat(new Intl.NumberFormat("en-GB", { maximumFractionDigits: 2 }).format(Number(value))).concat(unit);
23
+ };
24
+ export function QueueSlaHeatmapWidget(_a) {
25
+ var _b, _c;
26
+ var runtime = _a.runtime;
27
+ var chartRef = useRef(null);
28
+ var containerRef = useRef(null);
29
+ var data = (_c = (_b = runtime === null || runtime === void 0 ? void 0 : runtime.data) !== null && _b !== void 0 ? _b : runtime) !== null && _c !== void 0 ? _c : {};
30
+ var xCategories = Array.isArray(data === null || data === void 0 ? void 0 : data.xCategories) ? data.xCategories : [];
31
+ var yCategories = Array.isArray(data === null || data === void 0 ? void 0 : data.yCategories) ? data.yCategories : [];
32
+ var points = Array.isArray(data === null || data === void 0 ? void 0 : data.points) ? data.points : [];
33
+ var pointDetails = Array.isArray(data === null || data === void 0 ? void 0 : data.pointDetails) ? data.pointDetails : [];
34
+ var tooltipFields = Array.isArray(data === null || data === void 0 ? void 0 : data.tooltipFields) ? data.tooltipFields : [];
35
+ var legendThresholds = Array.isArray(data === null || data === void 0 ? void 0 : data.legendThresholds) ? data.legendThresholds : [];
36
+ if (xCategories.length === 0 || yCategories.length === 0 || points.length === 0) {
37
+ return (_jsx("div", { style: { height: "100%", minHeight: 260, display: "flex", alignItems: "center", justifyContent: "center", color: "#64748b", fontSize: "0.92rem" }, children: "No SLA heatmap data available for the current filters." }));
38
+ }
39
+ var detailMap = new Map(pointDetails.map(function (detail) { return ["".concat(detail.xIndex, ":").concat(detail.yIndex), detail]; }));
40
+ var metricValues = points.map(function (entry) { var _a; return Number((_a = entry === null || entry === void 0 ? void 0 : entry[2]) !== null && _a !== void 0 ? _a : 0); }).filter(function (entry) { return Number.isFinite(entry); });
41
+ var min = metricValues.length ? Math.min.apply(Math, metricValues) : 0;
42
+ var max = metricValues.length ? Math.max.apply(Math, metricValues) : 0;
43
+ var visualMap = legendThresholds.length > 0
44
+ ? {
45
+ type: "piecewise",
46
+ orient: "horizontal",
47
+ left: "center",
48
+ bottom: 0,
49
+ pieces: legendThresholds.map(function (threshold) { return ({
50
+ label: threshold.label,
51
+ color: threshold.color,
52
+ lte: threshold.lte,
53
+ gte: threshold.gte,
54
+ gt: threshold.gt,
55
+ }); }),
56
+ }
57
+ : {
58
+ min: min,
59
+ max: max,
60
+ calculable: true,
61
+ orient: "horizontal",
62
+ left: "center",
63
+ bottom: 0,
64
+ };
65
+ var option = {
66
+ tooltip: {
67
+ position: "top",
68
+ formatter: function (params) {
69
+ var _a, _b, _c, _d, _e, _f, _g, _h;
70
+ var point = Array.isArray(params === null || params === void 0 ? void 0 : params.data) ? params.data : [];
71
+ var xIndex = Number((_a = point === null || point === void 0 ? void 0 : point[0]) !== null && _a !== void 0 ? _a : -1);
72
+ var yIndex = Number((_b = point === null || point === void 0 ? void 0 : point[1]) !== null && _b !== void 0 ? _b : -1);
73
+ var metricValue = Number((_c = point === null || point === void 0 ? void 0 : point[2]) !== null && _c !== void 0 ? _c : 0);
74
+ var detail = detailMap.get("".concat(xIndex, ":").concat(yIndex));
75
+ var rows = [
76
+ "<div style=\"font-weight:600;margin-bottom:4px;\">".concat((_e = (_d = detail === null || detail === void 0 ? void 0 : detail.queueName) !== null && _d !== void 0 ? _d : yCategories[yIndex]) !== null && _e !== void 0 ? _e : "", "</div>"),
77
+ "<div>Bucket: ".concat(formatBucketLabel((_g = (_f = detail === null || detail === void 0 ? void 0 : detail.bucket) !== null && _f !== void 0 ? _f : xCategories[xIndex]) !== null && _g !== void 0 ? _g : ""), "</div>"),
78
+ "<div>Average Elapsed: ".concat(formatMetric((_h = detail === null || detail === void 0 ? void 0 : detail.avgElapsedMillis) !== null && _h !== void 0 ? _h : metricValue), "</div>"),
79
+ ];
80
+ if (tooltipFields.includes("messageCount") && (detail === null || detail === void 0 ? void 0 : detail.messageCount) !== undefined) {
81
+ rows.push("<div>Message Count: ".concat(new Intl.NumberFormat("en-GB").format(detail.messageCount), "</div>"));
82
+ }
83
+ if (tooltipFields.includes("peakElapsedMillis") && (detail === null || detail === void 0 ? void 0 : detail.peakElapsedMillis) !== undefined) {
84
+ rows.push("<div>Peak Elapsed: ".concat(formatMetric(detail.peakElapsedMillis), "</div>"));
85
+ }
86
+ return rows.join("");
87
+ },
88
+ },
89
+ grid: {
90
+ left: 110,
91
+ right: 20,
92
+ top: 18,
93
+ bottom: 70,
94
+ containLabel: true,
95
+ },
96
+ xAxis: {
97
+ type: "category",
98
+ data: xCategories,
99
+ splitArea: { show: true },
100
+ axisLabel: {
101
+ formatter: function (value) { return formatBucketLabel(value); },
102
+ rotate: 30,
103
+ },
104
+ },
105
+ yAxis: {
106
+ type: "category",
107
+ data: yCategories,
108
+ splitArea: { show: true },
109
+ axisLabel: {
110
+ interval: 0,
111
+ },
112
+ },
113
+ visualMap: visualMap,
114
+ series: [
115
+ {
116
+ name: "Queue SLA",
117
+ type: "heatmap",
118
+ data: points,
119
+ label: { show: false },
120
+ emphasis: {
121
+ itemStyle: {
122
+ shadowBlur: 10,
123
+ shadowColor: "rgba(0,0,0,0.25)",
124
+ },
125
+ },
126
+ },
127
+ ],
128
+ };
129
+ useEffect(function () {
130
+ var _a, _b;
131
+ var resizeChart = function () {
132
+ var _a, _b, _c, _d;
133
+ try {
134
+ (_d = (_c = (_b = (_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.getEchartsInstance) === null || _b === void 0 ? void 0 : _b.call(_a)) === null || _c === void 0 ? void 0 : _c.resize) === null || _d === void 0 ? void 0 : _d.call(_c, { width: "auto", height: "auto" });
135
+ }
136
+ catch (_e) {
137
+ // no-op: chart may not be ready yet
138
+ }
139
+ };
140
+ var observedElement = (_b = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.closest(".grid-stack-item-content")) !== null && _b !== void 0 ? _b : containerRef.current;
141
+ var observer = typeof ResizeObserver !== "undefined" && observedElement
142
+ ? new ResizeObserver(function () { return resizeChart(); })
143
+ : null;
144
+ if (observer && observedElement) {
145
+ observer.observe(observedElement);
146
+ }
147
+ var rafId = window.requestAnimationFrame(resizeChart);
148
+ var timeoutId = window.setTimeout(resizeChart, 120);
149
+ var timeoutIdLong = window.setTimeout(resizeChart, 320);
150
+ return function () {
151
+ window.cancelAnimationFrame(rafId);
152
+ window.clearTimeout(timeoutId);
153
+ window.clearTimeout(timeoutIdLong);
154
+ observer === null || observer === void 0 ? void 0 : observer.disconnect();
155
+ };
156
+ }, [option]);
157
+ return (_jsx("div", { ref: containerRef, style: { width: "100%", height: "100%", minHeight: 280, flex: 1 }, children: _jsx(ReactECharts, { ref: chartRef, option: option, style: { width: "100%", height: "100%", minHeight: 280 }, notMerge: true, lazyUpdate: true, autoResize: true }) }));
158
+ }
159
+ //# sourceMappingURL=QueueSlaHeatmapWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueueSlaHeatmapWidget.js","sourceRoot":"","sources":["../../../../../src/components/core/dashboard/widgets/QueueSlaHeatmapWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef } from \"react\";\nimport ReactECharts from \"echarts-for-react\";\nimport type { DashboardWidgetComponentProps } from \"../../../../types/dashboard\";\n\ntype HeatmapPointDetail = {\n xIndex: number;\n yIndex: number;\n bucket?: string;\n queueName?: string;\n avgElapsedMillis?: number;\n messageCount?: number;\n peakElapsedMillis?: number;\n [key: string]: any;\n};\n\ntype HeatmapLegendThreshold = {\n label?: string;\n color?: string;\n lte?: number;\n gte?: number;\n gt?: number;\n};\n\nconst formatBucketLabel = (value: string): string => {\n if (!value) return \"\";\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n return new Intl.DateTimeFormat(\"en-GB\", {\n day: \"2-digit\",\n month: \"short\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(date);\n};\n\nconst formatMetric = (value: number | undefined, unit = \"ms\"): string => {\n if (value === undefined || value === null || Number.isNaN(Number(value))) {\n return \"--\";\n }\n return `${new Intl.NumberFormat(\"en-GB\", { maximumFractionDigits: 2 }).format(Number(value))}${unit}`;\n};\n\nexport function QueueSlaHeatmapWidget({ runtime }: DashboardWidgetComponentProps) {\n const chartRef = useRef<any>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const data = runtime?.data ?? runtime ?? {};\n const xCategories: string[] = Array.isArray(data?.xCategories) ? data.xCategories : [];\n const yCategories: string[] = Array.isArray(data?.yCategories) ? data.yCategories : [];\n const points: [number, number, number][] = Array.isArray(data?.points) ? data.points : [];\n const pointDetails: HeatmapPointDetail[] = Array.isArray(data?.pointDetails) ? data.pointDetails : [];\n const tooltipFields: string[] = Array.isArray(data?.tooltipFields) ? data.tooltipFields : [];\n const legendThresholds: HeatmapLegendThreshold[] = Array.isArray(data?.legendThresholds) ? data.legendThresholds : [];\n\n if (xCategories.length === 0 || yCategories.length === 0 || points.length === 0) {\n return (\n <div style={{ height: \"100%\", minHeight: 260, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: \"#64748b\", fontSize: \"0.92rem\" }}>\n No SLA heatmap data available for the current filters.\n </div>\n );\n }\n\n const detailMap = new Map(\n pointDetails.map((detail) => [`${detail.xIndex}:${detail.yIndex}`, detail] satisfies [string, HeatmapPointDetail])\n );\n\n const metricValues = points.map((entry) => Number(entry?.[2] ?? 0)).filter((entry) => Number.isFinite(entry));\n const min = metricValues.length ? Math.min(...metricValues) : 0;\n const max = metricValues.length ? Math.max(...metricValues) : 0;\n\n const visualMap = legendThresholds.length > 0\n ? {\n type: \"piecewise\",\n orient: \"horizontal\" as const,\n left: \"center\" as const,\n bottom: 0,\n pieces: legendThresholds.map((threshold) => ({\n label: threshold.label,\n color: threshold.color,\n lte: threshold.lte,\n gte: threshold.gte,\n gt: threshold.gt,\n })),\n }\n : {\n min,\n max,\n calculable: true,\n orient: \"horizontal\" as const,\n left: \"center\" as const,\n bottom: 0,\n };\n\n const option = {\n tooltip: {\n position: \"top\" as const,\n formatter: (params: any) => {\n const point = Array.isArray(params?.data) ? params.data : [];\n const xIndex = Number(point?.[0] ?? -1);\n const yIndex = Number(point?.[1] ?? -1);\n const metricValue = Number(point?.[2] ?? 0);\n const detail = detailMap.get(`${xIndex}:${yIndex}`);\n\n const rows = [\n `<div style=\"font-weight:600;margin-bottom:4px;\">${detail?.queueName ?? yCategories[yIndex] ?? \"\"}</div>`,\n `<div>Bucket: ${formatBucketLabel(detail?.bucket ?? xCategories[xIndex] ?? \"\")}</div>`,\n `<div>Average Elapsed: ${formatMetric(detail?.avgElapsedMillis ?? metricValue)}</div>`,\n ];\n\n if (tooltipFields.includes(\"messageCount\") && detail?.messageCount !== undefined) {\n rows.push(`<div>Message Count: ${new Intl.NumberFormat(\"en-GB\").format(detail.messageCount)}</div>`);\n }\n if (tooltipFields.includes(\"peakElapsedMillis\") && detail?.peakElapsedMillis !== undefined) {\n rows.push(`<div>Peak Elapsed: ${formatMetric(detail.peakElapsedMillis)}</div>`);\n }\n\n return rows.join(\"\");\n },\n },\n grid: {\n left: 110,\n right: 20,\n top: 18,\n bottom: 70,\n containLabel: true,\n },\n xAxis: {\n type: \"category\",\n data: xCategories,\n splitArea: { show: true },\n axisLabel: {\n formatter: (value: string) => formatBucketLabel(value),\n rotate: 30,\n },\n },\n yAxis: {\n type: \"category\",\n data: yCategories,\n splitArea: { show: true },\n axisLabel: {\n interval: 0,\n },\n },\n visualMap,\n series: [\n {\n name: \"Queue SLA\",\n type: \"heatmap\",\n data: points,\n label: { show: false },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowColor: \"rgba(0,0,0,0.25)\",\n },\n },\n },\n ],\n };\n\n useEffect(() => {\n const resizeChart = () => {\n try {\n chartRef.current?.getEchartsInstance?.()?.resize?.({ width: \"auto\", height: \"auto\" });\n } catch {\n // no-op: chart may not be ready yet\n }\n };\n\n const observedElement =\n containerRef.current?.closest(\".grid-stack-item-content\") as HTMLElement | null ??\n containerRef.current;\n\n const observer = typeof ResizeObserver !== \"undefined\" && observedElement\n ? new ResizeObserver(() => resizeChart())\n : null;\n\n if (observer && observedElement) {\n observer.observe(observedElement);\n }\n\n const rafId = window.requestAnimationFrame(resizeChart);\n const timeoutId = window.setTimeout(resizeChart, 120);\n const timeoutIdLong = window.setTimeout(resizeChart, 320);\n\n return () => {\n window.cancelAnimationFrame(rafId);\n window.clearTimeout(timeoutId);\n window.clearTimeout(timeoutIdLong);\n observer?.disconnect();\n };\n }, [option]);\n\n return (\n <div ref={containerRef} style={{ width: \"100%\", height: \"100%\", minHeight: 280, flex: 1 }}>\n <ReactECharts\n ref={chartRef}\n option={option}\n style={{ width: \"100%\", height: \"100%\", minHeight: 280 }}\n notMerge\n lazyUpdate\n autoResize\n />\n </div>\n );\n}\n"]}
@@ -0,0 +1,205 @@
1
+ import { useEffect, useRef } from "react";
2
+ import ReactECharts from "echarts-for-react";
3
+ import type { DashboardWidgetComponentProps } from "../../../../types/dashboard";
4
+
5
+ type HeatmapPointDetail = {
6
+ xIndex: number;
7
+ yIndex: number;
8
+ bucket?: string;
9
+ queueName?: string;
10
+ avgElapsedMillis?: number;
11
+ messageCount?: number;
12
+ peakElapsedMillis?: number;
13
+ [key: string]: any;
14
+ };
15
+
16
+ type HeatmapLegendThreshold = {
17
+ label?: string;
18
+ color?: string;
19
+ lte?: number;
20
+ gte?: number;
21
+ gt?: number;
22
+ };
23
+
24
+ const formatBucketLabel = (value: string): string => {
25
+ if (!value) return "";
26
+ const date = new Date(value);
27
+ if (Number.isNaN(date.getTime())) return value;
28
+ return new Intl.DateTimeFormat("en-GB", {
29
+ day: "2-digit",
30
+ month: "short",
31
+ hour: "2-digit",
32
+ minute: "2-digit",
33
+ }).format(date);
34
+ };
35
+
36
+ const formatMetric = (value: number | undefined, unit = "ms"): string => {
37
+ if (value === undefined || value === null || Number.isNaN(Number(value))) {
38
+ return "--";
39
+ }
40
+ return `${new Intl.NumberFormat("en-GB", { maximumFractionDigits: 2 }).format(Number(value))}${unit}`;
41
+ };
42
+
43
+ export function QueueSlaHeatmapWidget({ runtime }: DashboardWidgetComponentProps) {
44
+ const chartRef = useRef<any>(null);
45
+ const containerRef = useRef<HTMLDivElement | null>(null);
46
+ const data = runtime?.data ?? runtime ?? {};
47
+ const xCategories: string[] = Array.isArray(data?.xCategories) ? data.xCategories : [];
48
+ const yCategories: string[] = Array.isArray(data?.yCategories) ? data.yCategories : [];
49
+ const points: [number, number, number][] = Array.isArray(data?.points) ? data.points : [];
50
+ const pointDetails: HeatmapPointDetail[] = Array.isArray(data?.pointDetails) ? data.pointDetails : [];
51
+ const tooltipFields: string[] = Array.isArray(data?.tooltipFields) ? data.tooltipFields : [];
52
+ const legendThresholds: HeatmapLegendThreshold[] = Array.isArray(data?.legendThresholds) ? data.legendThresholds : [];
53
+
54
+ if (xCategories.length === 0 || yCategories.length === 0 || points.length === 0) {
55
+ return (
56
+ <div style={{ height: "100%", minHeight: 260, display: "flex", alignItems: "center", justifyContent: "center", color: "#64748b", fontSize: "0.92rem" }}>
57
+ No SLA heatmap data available for the current filters.
58
+ </div>
59
+ );
60
+ }
61
+
62
+ const detailMap = new Map(
63
+ pointDetails.map((detail) => [`${detail.xIndex}:${detail.yIndex}`, detail] satisfies [string, HeatmapPointDetail])
64
+ );
65
+
66
+ const metricValues = points.map((entry) => Number(entry?.[2] ?? 0)).filter((entry) => Number.isFinite(entry));
67
+ const min = metricValues.length ? Math.min(...metricValues) : 0;
68
+ const max = metricValues.length ? Math.max(...metricValues) : 0;
69
+
70
+ const visualMap = legendThresholds.length > 0
71
+ ? {
72
+ type: "piecewise",
73
+ orient: "horizontal" as const,
74
+ left: "center" as const,
75
+ bottom: 0,
76
+ pieces: legendThresholds.map((threshold) => ({
77
+ label: threshold.label,
78
+ color: threshold.color,
79
+ lte: threshold.lte,
80
+ gte: threshold.gte,
81
+ gt: threshold.gt,
82
+ })),
83
+ }
84
+ : {
85
+ min,
86
+ max,
87
+ calculable: true,
88
+ orient: "horizontal" as const,
89
+ left: "center" as const,
90
+ bottom: 0,
91
+ };
92
+
93
+ const option = {
94
+ tooltip: {
95
+ position: "top" as const,
96
+ formatter: (params: any) => {
97
+ const point = Array.isArray(params?.data) ? params.data : [];
98
+ const xIndex = Number(point?.[0] ?? -1);
99
+ const yIndex = Number(point?.[1] ?? -1);
100
+ const metricValue = Number(point?.[2] ?? 0);
101
+ const detail = detailMap.get(`${xIndex}:${yIndex}`);
102
+
103
+ const rows = [
104
+ `<div style="font-weight:600;margin-bottom:4px;">${detail?.queueName ?? yCategories[yIndex] ?? ""}</div>`,
105
+ `<div>Bucket: ${formatBucketLabel(detail?.bucket ?? xCategories[xIndex] ?? "")}</div>`,
106
+ `<div>Average Elapsed: ${formatMetric(detail?.avgElapsedMillis ?? metricValue)}</div>`,
107
+ ];
108
+
109
+ if (tooltipFields.includes("messageCount") && detail?.messageCount !== undefined) {
110
+ rows.push(`<div>Message Count: ${new Intl.NumberFormat("en-GB").format(detail.messageCount)}</div>`);
111
+ }
112
+ if (tooltipFields.includes("peakElapsedMillis") && detail?.peakElapsedMillis !== undefined) {
113
+ rows.push(`<div>Peak Elapsed: ${formatMetric(detail.peakElapsedMillis)}</div>`);
114
+ }
115
+
116
+ return rows.join("");
117
+ },
118
+ },
119
+ grid: {
120
+ left: 110,
121
+ right: 20,
122
+ top: 18,
123
+ bottom: 70,
124
+ containLabel: true,
125
+ },
126
+ xAxis: {
127
+ type: "category",
128
+ data: xCategories,
129
+ splitArea: { show: true },
130
+ axisLabel: {
131
+ formatter: (value: string) => formatBucketLabel(value),
132
+ rotate: 30,
133
+ },
134
+ },
135
+ yAxis: {
136
+ type: "category",
137
+ data: yCategories,
138
+ splitArea: { show: true },
139
+ axisLabel: {
140
+ interval: 0,
141
+ },
142
+ },
143
+ visualMap,
144
+ series: [
145
+ {
146
+ name: "Queue SLA",
147
+ type: "heatmap",
148
+ data: points,
149
+ label: { show: false },
150
+ emphasis: {
151
+ itemStyle: {
152
+ shadowBlur: 10,
153
+ shadowColor: "rgba(0,0,0,0.25)",
154
+ },
155
+ },
156
+ },
157
+ ],
158
+ };
159
+
160
+ useEffect(() => {
161
+ const resizeChart = () => {
162
+ try {
163
+ chartRef.current?.getEchartsInstance?.()?.resize?.({ width: "auto", height: "auto" });
164
+ } catch {
165
+ // no-op: chart may not be ready yet
166
+ }
167
+ };
168
+
169
+ const observedElement =
170
+ containerRef.current?.closest(".grid-stack-item-content") as HTMLElement | null ??
171
+ containerRef.current;
172
+
173
+ const observer = typeof ResizeObserver !== "undefined" && observedElement
174
+ ? new ResizeObserver(() => resizeChart())
175
+ : null;
176
+
177
+ if (observer && observedElement) {
178
+ observer.observe(observedElement);
179
+ }
180
+
181
+ const rafId = window.requestAnimationFrame(resizeChart);
182
+ const timeoutId = window.setTimeout(resizeChart, 120);
183
+ const timeoutIdLong = window.setTimeout(resizeChart, 320);
184
+
185
+ return () => {
186
+ window.cancelAnimationFrame(rafId);
187
+ window.clearTimeout(timeoutId);
188
+ window.clearTimeout(timeoutIdLong);
189
+ observer?.disconnect();
190
+ };
191
+ }, [option]);
192
+
193
+ return (
194
+ <div ref={containerRef} style={{ width: "100%", height: "100%", minHeight: 280, flex: 1 }}>
195
+ <ReactECharts
196
+ ref={chartRef}
197
+ option={option}
198
+ style={{ width: "100%", height: "100%", minHeight: 280 }}
199
+ notMerge
200
+ lazyUpdate
201
+ autoResize
202
+ />
203
+ </div>
204
+ );
205
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/helpers/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AA4D1B,OAAO,EAGH,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC7B,MAAM,6BAA6B,CAAC;AA0BrC,eAAO,MAAM,0BAA0B,SAAU,MAAM,aAAa,MAAM,aAAa,CAAC,GAAG,CAAC,SAAQ,sBAAsB,YAAyD,MAAM,EAAE,cAAkB,MAAM,SAMlN,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAU,MAAM,gBAAgB,GAAG,EAAE,KAAK,GAAG,SAAQ,qBAAqB,SAE/G,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,MAAM,KAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,IAM/E,CAAC;AAEF,eAAO,MAAM,sBAAsB,SAAU,sBAAsB,cAAa,MAAM,KAAQ,MAAM,EAAE,GAAG,EASxG,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,MAAM,eA7C/B,GAAG,EAAE,KAAK,GA+C3B,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/helpers/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AA+D1B,OAAO,EAGH,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC7B,MAAM,6BAA6B,CAAC;AA0BrC,eAAO,MAAM,0BAA0B,SAAU,MAAM,aAAa,MAAM,aAAa,CAAC,GAAG,CAAC,SAAQ,sBAAsB,YAAyD,MAAM,EAAE,cAAkB,MAAM,SAMlN,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAU,MAAM,gBAAgB,GAAG,EAAE,KAAK,GAAG,SAAQ,qBAAqB,SAE/G,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,MAAM,KAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,IAM/E,CAAC;AAEF,eAAO,MAAM,sBAAsB,SAAU,sBAAsB,cAAa,MAAM,KAAQ,MAAM,EAAE,GAAG,EASxG,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,MAAM,eA7C/B,GAAG,EAAE,KAAK,GA+C3B,CAAC"}
@@ -39,7 +39,6 @@ import { SolidManyToOneRelationAvatarListWidget } from "../components/core/list/
39
39
  import { SolidUserBlockedStatusListWidget } from "../components/core/list/widgets/SolidUserBlockedStatusListWidget";
40
40
  import { SolidShortTextFieldAvatarWidget } from "../components/core/form/fields/widgets/SolidShortTextFieldAvatarWidget";
41
41
  import DeleteModelRowAction from "../components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction";
42
- import ChartFormPreviewWidget from "../components/core/extension/solid-core/dashboardQuestion/ChartFormPreviewWidget";
43
42
  import { DefaultTimeFormEditWidget, DefaultTimeFormViewWidget } from "../components/core/form/fields/SolidTimeField";
44
43
  import { SolidAiInteractionMetadataFieldFormWidget } from "../components/core/form/fields/widgets/SolidAiInteractionMetadataFieldFormWidget";
45
44
  import { SolidAiInteractionMessageFieldFormWidget } from "../components/core/form/fields/widgets/SolidAiInteractionMessageFieldFormWidget";
@@ -47,9 +46,6 @@ import { SolidS3FileViewerWidget } from "../components/core/form/fields/widgets/
47
46
  import DeleteModuleRowAction from "../components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction";
48
47
  import hanldeModelSequenceFormViewChange from "../components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler";
49
48
  import { DefaultDateListWidget, DefaultDateTimeListWidget } from "../components/core/list/columns/SolidDateColumn";
50
- import dashboardFormViewChangeHandler from "../components/core/extension/solid-core/dashboard/dashboardFormViewChangeHandler";
51
- import dashboardQuestionFieldChangeHandler from "../components/core/extension/solid-core/dashboard/dashboardQuestionFieldChangeHandler";
52
- import dashboardQuestionOnFormLoadHandler from "../components/core/extension/solid-core/dashboard/dashboardQuestionOnFormLoadHandler";
53
49
  import MqMessageKanbanCardWidget from "../components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanCardWidget";
54
50
  import MediaCardWidget from "../components/core/extension/solid-core/media/card/MediaCardWidget";
55
51
  import { SolidChatterMessageCoModelEntityIdListViewWidget } from "../components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget";
@@ -60,6 +56,13 @@ import { SolidLovTypeChangeFormEditWidget } from "../components/core/extension/s
60
56
  import mqMessageOnFormLoadHandler from "../components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler";
61
57
  import { SolidMqMessageStageFormViewWIdget } from "../components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget";
62
58
  import solidXGenAiCodeBuilderConfigWidget from "../components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget";
59
+ import { DefaultDashboardKpiWidget } from "../components/core/dashboard/widgets/DefaultDashboardKpiWidget";
60
+ import { DefaultDashboardLineChartWidget } from "../components/core/dashboard/widgets/DefaultDashboardLineChartWidget";
61
+ import { DefaultDashboardBarChartWidget } from "../components/core/dashboard/widgets/DefaultDashboardBarChartWidget";
62
+ import { DefaultDashboardPieChartWidget } from "../components/core/dashboard/widgets/DefaultDashboardPieChartWidget";
63
+ import { DefaultDashboardTableWidget } from "../components/core/dashboard/widgets/DefaultDashboardTableWidget";
64
+ import { DefaultDashboardUnknownWidget } from "../components/core/dashboard/widgets/DefaultDashboardUnknownWidget";
65
+ import { QueueSlaHeatmapWidget } from "../components/core/dashboard/widgets/QueueSlaHeatmapWidget";
63
66
  import { ExtensionComponentTypes, ExtensionFunctionTypes, } from "../types/extension-registry";
64
67
  import { scheduleFrequencyOnFieldChangeHandler } from "../components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler";
65
68
  var extensionRegistry = {
@@ -249,8 +252,6 @@ registerExtensionComponent("DeleteModuleRowAction", DeleteModuleRowAction, Exten
249
252
  // 7. form widget
250
253
  registerExtensionComponent("CustomHtml", CustomHtml, ExtensionComponentTypes.formWidget);
251
254
  registerExtensionComponent("solidXGenAiCodeBuilderConfigWidget", solidXGenAiCodeBuilderConfigWidget, ExtensionComponentTypes.settingsWidgets);
252
- // Common
253
- registerExtensionComponent("ChartFormPreviewWidget", ChartFormPreviewWidget, ExtensionComponentTypes.formWidget, ["chart"]);
254
255
  registerExtensionComponent("SolidChatterMessageCoModelEntityIdFormViewWidget", SolidChatterMessageCoModelEntityIdFormViewWidget, ExtensionComponentTypes.formFieldViewWidget);
255
256
  registerExtensionComponent("SolidLovTypeChangeFormEditWidget", SolidLovTypeChangeFormEditWidget, ExtensionComponentTypes.formFieldEditWidget);
256
257
  // Formview Default View widgets
@@ -271,14 +272,18 @@ registerExtensionComponent("SolidMqMessageStageFormViewWIdget", SolidMqMessageSt
271
272
  // Kanban
272
273
  registerExtensionComponent("MqMessageKanbanCardWidget", MqMessageKanbanCardWidget, ExtensionComponentTypes.kanbanCardWidget);
273
274
  registerExtensionComponent("MediaCardWidget", MediaCardWidget, ExtensionComponentTypes.cardWidget);
275
+ // Dashboard widgets (default first-party set)
276
+ registerExtensionComponent("DefaultDashboardKpiWidget", DefaultDashboardKpiWidget, ExtensionComponentTypes.dashboardWidget);
277
+ registerExtensionComponent("DefaultDashboardLineChartWidget", DefaultDashboardLineChartWidget, ExtensionComponentTypes.dashboardWidget);
278
+ registerExtensionComponent("DefaultDashboardBarChartWidget", DefaultDashboardBarChartWidget, ExtensionComponentTypes.dashboardWidget);
279
+ registerExtensionComponent("DefaultDashboardPieChartWidget", DefaultDashboardPieChartWidget, ExtensionComponentTypes.dashboardWidget);
280
+ registerExtensionComponent("DefaultDashboardTableWidget", DefaultDashboardTableWidget, ExtensionComponentTypes.dashboardWidget);
281
+ registerExtensionComponent("DefaultDashboardUnknownWidget", DefaultDashboardUnknownWidget, ExtensionComponentTypes.dashboardWidget);
282
+ registerExtensionComponent("QueueSlaHeatmapWidget", QueueSlaHeatmapWidget, ExtensionComponentTypes.dashboardWidget);
274
283
  // # Extension functions
275
284
  // Email Template
276
285
  registerExtensionFunction("emailFormTypeChangeHandler", hanldeEmailFormTypeChange, ExtensionFunctionTypes.onFieldChange);
277
286
  registerExtensionFunction("emailFormTypeLoad", hanldeEmailFormTypeLoad, ExtensionFunctionTypes.onFormLayoutLoad);
278
- // Dashboard
279
- registerExtensionFunction("dashboardFormViewChangeHandler", dashboardFormViewChangeHandler, ExtensionFunctionTypes.onFieldChange);
280
- registerExtensionFunction("dashboardQuestionFieldChangeHandler", dashboardQuestionFieldChangeHandler, ExtensionFunctionTypes.onFieldChange);
281
- registerExtensionFunction("dashboardQuestionOnFormLoadHandler", dashboardQuestionOnFormLoadHandler, ExtensionFunctionTypes.onFormLoad);
282
287
  // Model Sequence
283
288
  // TODO: @Jyotsana you need to create an extension function which will be used "onFieldChange"
284
289
  // on change of module, apply a where clause on the model & field fields..