dp-widgets-framework 1.4.0 → 1.4.2
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.
- package/dist/index.esm.js +1373 -104
- package/dist/index.js +1373 -104
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1993,7 +1993,7 @@ const borderRadiusMap$2 = {
|
|
|
1993
1993
|
large: "0.5rem",
|
|
1994
1994
|
"extra-large": "0.75rem",
|
|
1995
1995
|
};
|
|
1996
|
-
const getStyleValues$
|
|
1996
|
+
const getStyleValues$a = (styles = {}) => {
|
|
1997
1997
|
return {
|
|
1998
1998
|
backgroundColor: styles.backgroundColor || "transparent",
|
|
1999
1999
|
borderRadius: borderRadiusMap$2[styles.borderRadius || "rounded"],
|
|
@@ -2006,7 +2006,7 @@ const getStyleValues$5 = (styles = {}) => {
|
|
|
2006
2006
|
};
|
|
2007
2007
|
function HeaderWidget({ widget }) {
|
|
2008
2008
|
var _a, _b;
|
|
2009
|
-
const styles = getStyleValues$
|
|
2009
|
+
const styles = getStyleValues$a((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
2010
2010
|
const content = ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
|
|
2011
2011
|
return (jsxRuntimeExports.jsx("div", { className: "w-full", style: styles, children: jsxRuntimeExports.jsxs("div", { className: cn("flex items-center justify-between"), children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [content.showLogo && content.logoUrl && (jsxRuntimeExports.jsx("img", { src: content.logoUrl, alt: "Logo", className: "h-8 w-auto" })), jsxRuntimeExports.jsx("h1", { className: cn("font-semibold", content.titleSize || "text-xl"), children: content.title || "Header" })] }), content.showRightContent && (jsxRuntimeExports.jsx("div", { className: "flex items-center gap-4", children: content.rightContent }))] }) }));
|
|
2012
2012
|
}
|
|
@@ -2017,7 +2017,7 @@ const borderRadiusMap$1 = {
|
|
|
2017
2017
|
large: "0.5rem",
|
|
2018
2018
|
"extra-large": "0.75rem",
|
|
2019
2019
|
};
|
|
2020
|
-
const getStyleValues$
|
|
2020
|
+
const getStyleValues$9 = (styles = {}) => {
|
|
2021
2021
|
return {
|
|
2022
2022
|
backgroundColor: styles.backgroundColor || "transparent",
|
|
2023
2023
|
borderRadius: borderRadiusMap$1[styles.borderRadius || "rounded"],
|
|
@@ -2030,7 +2030,7 @@ const getStyleValues$4 = (styles = {}) => {
|
|
|
2030
2030
|
};
|
|
2031
2031
|
function FooterWidget({ widget }) {
|
|
2032
2032
|
var _a, _b;
|
|
2033
|
-
const styles = getStyleValues$
|
|
2033
|
+
const styles = getStyleValues$9((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
2034
2034
|
const content = ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
|
|
2035
2035
|
return (jsxRuntimeExports.jsx("footer", { className: "w-full", style: styles, children: jsxRuntimeExports.jsxs("div", { className: cn("flex items-center", content.layout === "centered" ? "justify-center" : "justify-between"), children: [jsxRuntimeExports.jsx("div", { className: "text-sm", children: content.leftContent || "© 2024 Your Company" }), content.showCenterContent && (jsxRuntimeExports.jsx("div", { className: "text-sm", children: content.centerContent })), content.showRightContent && (jsxRuntimeExports.jsx("div", { className: "flex items-center gap-4 text-sm", children: content.rightContent }))] }) }));
|
|
2036
2036
|
}
|
|
@@ -2041,7 +2041,7 @@ const borderRadiusMap = {
|
|
|
2041
2041
|
large: "0.5rem",
|
|
2042
2042
|
"extra-large": "0.75rem",
|
|
2043
2043
|
};
|
|
2044
|
-
const getStyleValues$
|
|
2044
|
+
const getStyleValues$8 = (styles = {}) => {
|
|
2045
2045
|
const borderRadius = (styles.borderRadius || "rounded");
|
|
2046
2046
|
return {
|
|
2047
2047
|
backgroundColor: styles.backgroundColor || "transparent",
|
|
@@ -2056,12 +2056,12 @@ const getStyleValues$3 = (styles = {}) => {
|
|
|
2056
2056
|
};
|
|
2057
2057
|
function TextWidget({ widget }) {
|
|
2058
2058
|
var _a, _b;
|
|
2059
|
-
const styles = getStyleValues$
|
|
2059
|
+
const styles = getStyleValues$8((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
2060
2060
|
const content = ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
|
|
2061
2061
|
return (jsxRuntimeExports.jsx("div", { className: "w-full", style: styles, children: jsxRuntimeExports.jsx("div", { className: cn("prose max-w-none", content.blockType === "heading-1" && "text-[24px] font-bold", content.blockType === "heading-2" && "text-[22px] font-bold", content.blockType === "heading-3" && "text-[18px] font-bold", content.blockType === "paragraph" && "text-base"), dangerouslySetInnerHTML: { __html: content.displayText || "Text content" } }) }));
|
|
2062
2062
|
}
|
|
2063
2063
|
|
|
2064
|
-
const getStyleValues$
|
|
2064
|
+
const getStyleValues$7 = (styles = {}) => {
|
|
2065
2065
|
return {
|
|
2066
2066
|
borderColor: styles.color || "#e5e7eb",
|
|
2067
2067
|
borderStyle: styles.style || "solid",
|
|
@@ -2071,7 +2071,7 @@ const getStyleValues$2 = (styles = {}) => {
|
|
|
2071
2071
|
};
|
|
2072
2072
|
function DividerWidget({ widget }) {
|
|
2073
2073
|
var _a, _b;
|
|
2074
|
-
const styles = getStyleValues$
|
|
2074
|
+
const styles = getStyleValues$7((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
2075
2075
|
const content = ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
|
|
2076
2076
|
return (jsxRuntimeExports.jsxs("div", { className: "w-full", style: { margin: styles.margin }, children: [jsxRuntimeExports.jsx("hr", { className: cn("w-full", content.variant === "dashed" && "border-dashed", content.variant === "dotted" && "border-dotted"), style: {
|
|
2077
2077
|
borderColor: styles.borderColor,
|
|
@@ -17680,7 +17680,6 @@ function DataGrid({ title, data, className }) {
|
|
|
17680
17680
|
// Format the value with commas if it's a number or numeric string
|
|
17681
17681
|
let valueStr;
|
|
17682
17682
|
valueStr = formatWithCommas(value);
|
|
17683
|
-
console.log('value==>', valueStr, unit);
|
|
17684
17683
|
// If no unit or unit length > 3, return value only
|
|
17685
17684
|
if (!unit || unit.length > 3) {
|
|
17686
17685
|
return valueStr;
|
|
@@ -38410,10 +38409,10 @@ function SummaryWidget({ title, data, metadata, className }) {
|
|
|
38410
38409
|
}, children: title }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-auto space-y-4", children: jsxRuntimeExports.jsx("div", { className: "prose prose-sm max-w-none", children: jsxRuntimeExports.jsx(Markdown, { className: "text-gray-800", children: data.content }) }) })] }));
|
|
38411
38410
|
}
|
|
38412
38411
|
|
|
38413
|
-
const CHART_REFRESH_TIMEOUT = 3000;
|
|
38414
|
-
const DEFAULT_COLORS = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
|
|
38412
|
+
const CHART_REFRESH_TIMEOUT$4 = 3000;
|
|
38413
|
+
const DEFAULT_COLORS$3 = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
|
|
38415
38414
|
const LINE_COLORS = ["#243D84", "#69238B", "#4A959F", "#D0A677", "#B31E47", "#396431"];
|
|
38416
|
-
const clearChat = async (widgetBackendUrl, widgetId) => {
|
|
38415
|
+
const clearChat$4 = async (widgetBackendUrl, widgetId) => {
|
|
38417
38416
|
if (!widgetBackendUrl || !widgetId)
|
|
38418
38417
|
return;
|
|
38419
38418
|
console.log('clearChat called for widgetId:', widgetId);
|
|
@@ -38435,8 +38434,8 @@ const clearChat = async (widgetBackendUrl, widgetId) => {
|
|
|
38435
38434
|
console.error('Failed to clear chat:', error);
|
|
38436
38435
|
}
|
|
38437
38436
|
};
|
|
38438
|
-
const createLoadingComponent = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
|
|
38439
|
-
const createInitialChartState = (agentType, widgetIds, datasetId) => {
|
|
38437
|
+
const createLoadingComponent$4 = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
|
|
38438
|
+
const createInitialChartState$4 = (agentType, widgetIds, datasetId) => {
|
|
38440
38439
|
const baseState = { dataset_id: datasetId || "home_generation_dataset" };
|
|
38441
38440
|
switch (agentType) {
|
|
38442
38441
|
case "Pie Chart Agent":
|
|
@@ -38463,6 +38462,8 @@ const createInitialChartState = (agentType, widgetIds, datasetId) => {
|
|
|
38463
38462
|
title: "",
|
|
38464
38463
|
type: "series_bar",
|
|
38465
38464
|
chart_type: "financial",
|
|
38465
|
+
x_axis_title: "",
|
|
38466
|
+
y_axis_title: "",
|
|
38466
38467
|
orientation: "vertical",
|
|
38467
38468
|
units: "",
|
|
38468
38469
|
data: { labels: [], series: [], total: 0, average: 0 },
|
|
@@ -38491,7 +38492,7 @@ const createInitialChartState = (agentType, widgetIds, datasetId) => {
|
|
|
38491
38492
|
return Object.assign({ widget_ids: widgetIds }, baseState);
|
|
38492
38493
|
}
|
|
38493
38494
|
};
|
|
38494
|
-
const loadAgentState = async (widgetBackendUrl, threadId, agentName) => {
|
|
38495
|
+
const loadAgentState$4 = async (widgetBackendUrl, threadId, agentName) => {
|
|
38495
38496
|
try {
|
|
38496
38497
|
const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
|
|
38497
38498
|
method: 'POST',
|
|
@@ -38520,7 +38521,7 @@ const loadAgentState = async (widgetBackendUrl, threadId, agentName) => {
|
|
|
38520
38521
|
return null;
|
|
38521
38522
|
}
|
|
38522
38523
|
};
|
|
38523
|
-
const parseAndUpdateChartState = (apiResponse, setChartState) => {
|
|
38524
|
+
const parseAndUpdateChartState$4 = (apiResponse, setChartState) => {
|
|
38524
38525
|
var _a, _b;
|
|
38525
38526
|
try {
|
|
38526
38527
|
if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
|
|
@@ -38563,7 +38564,7 @@ const parseAndUpdateChartState = (apiResponse, setChartState) => {
|
|
|
38563
38564
|
console.error('Failed to parse and update chart state:', error);
|
|
38564
38565
|
}
|
|
38565
38566
|
};
|
|
38566
|
-
const getStyleValues$
|
|
38567
|
+
const getStyleValues$6 = (styles = {}) => {
|
|
38567
38568
|
const borderRadiusMap = {
|
|
38568
38569
|
none: "0px",
|
|
38569
38570
|
rounded: "0.375rem",
|
|
@@ -38597,7 +38598,7 @@ function BarChartComponent({ orientation, barChartState, styles, appendMessage,
|
|
|
38597
38598
|
const isEmpty = labels.length === 0 || values.length === 0;
|
|
38598
38599
|
const handleRefresh = async () => {
|
|
38599
38600
|
if (query && widgetBackendUrl && widgetId) {
|
|
38600
|
-
await clearChat(widgetBackendUrl, widgetId);
|
|
38601
|
+
await clearChat$4(widgetBackendUrl, widgetId);
|
|
38601
38602
|
appendMessage(new TextMessage({
|
|
38602
38603
|
content: `${query} and render data on a bar chart`,
|
|
38603
38604
|
role: Role.User,
|
|
@@ -38621,10 +38622,10 @@ function BarChartComponent({ orientation, barChartState, styles, appendMessage,
|
|
|
38621
38622
|
}
|
|
38622
38623
|
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
|
|
38623
38624
|
const finalColors = useMemo(() => {
|
|
38624
|
-
return shuffleColors(DEFAULT_COLORS, labels === null || labels === void 0 ? void 0 : labels.length);
|
|
38625
|
+
return shuffleColors(DEFAULT_COLORS$3, labels === null || labels === void 0 ? void 0 : labels.length);
|
|
38625
38626
|
}, [labels.length]);
|
|
38626
38627
|
if (isEmpty) {
|
|
38627
|
-
return createLoadingComponent();
|
|
38628
|
+
return createLoadingComponent$4();
|
|
38628
38629
|
}
|
|
38629
38630
|
const transformedData = {
|
|
38630
38631
|
labels: labels,
|
|
@@ -38638,7 +38639,7 @@ function BarChartComponent({ orientation, barChartState, styles, appendMessage,
|
|
|
38638
38639
|
};
|
|
38639
38640
|
return (jsxRuntimeExports.jsx(BarChart, { orientation: orientation, title: chartTitle, data: transformedData, units: units, content: content }));
|
|
38640
38641
|
}
|
|
38641
|
-
function SeriesBarChartComponent({ orientation, seriesBarChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content }) {
|
|
38642
|
+
function SeriesBarChartComponent$2({ orientation, seriesBarChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content }) {
|
|
38642
38643
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
38643
38644
|
const hasCalledRef = useRef(false);
|
|
38644
38645
|
const labels = ((_b = (_a = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || ((_e = (_d = (_c = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.state) === null || _c === void 0 ? void 0 : _c.series_bar_chart_data) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.labels) || [];
|
|
@@ -38650,7 +38651,7 @@ function SeriesBarChartComponent({ orientation, seriesBarChartState, styles, app
|
|
|
38650
38651
|
const isEmpty = labels.length === 0 || series.length === 0;
|
|
38651
38652
|
const handleRefresh = async () => {
|
|
38652
38653
|
if (query) {
|
|
38653
|
-
await clearChat(widgetBackendUrl, widgetId);
|
|
38654
|
+
await clearChat$4(widgetBackendUrl, widgetId);
|
|
38654
38655
|
// Send trigger event to clear chart state
|
|
38655
38656
|
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
38656
38657
|
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
@@ -38676,10 +38677,10 @@ function SeriesBarChartComponent({ orientation, seriesBarChartState, styles, app
|
|
|
38676
38677
|
}
|
|
38677
38678
|
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
|
|
38678
38679
|
const finalColors = useMemo(() => {
|
|
38679
|
-
return shuffleColors(DEFAULT_COLORS, series === null || series === void 0 ? void 0 : series.length);
|
|
38680
|
+
return shuffleColors(DEFAULT_COLORS$3, series === null || series === void 0 ? void 0 : series.length);
|
|
38680
38681
|
}, [series.length]);
|
|
38681
38682
|
if (isEmpty) {
|
|
38682
|
-
return createLoadingComponent();
|
|
38683
|
+
return createLoadingComponent$4();
|
|
38683
38684
|
}
|
|
38684
38685
|
const transformedData = {
|
|
38685
38686
|
labels: labels,
|
|
@@ -38703,7 +38704,7 @@ function SeriesLineChartComponent({ orientation, seriesLineChartState, styles, a
|
|
|
38703
38704
|
const isEmpty = labels.length === 0 || series.length === 0;
|
|
38704
38705
|
const handleRefresh = async () => {
|
|
38705
38706
|
if (query) {
|
|
38706
|
-
await clearChat(widgetBackendUrl, widgetId);
|
|
38707
|
+
await clearChat$4(widgetBackendUrl, widgetId);
|
|
38707
38708
|
// Send trigger event to clear chart state
|
|
38708
38709
|
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
38709
38710
|
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
@@ -38729,10 +38730,10 @@ function SeriesLineChartComponent({ orientation, seriesLineChartState, styles, a
|
|
|
38729
38730
|
}
|
|
38730
38731
|
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
|
|
38731
38732
|
const finalColors = useMemo(() => {
|
|
38732
|
-
return shuffleColors([...LINE_COLORS, ...DEFAULT_COLORS], series === null || series === void 0 ? void 0 : series.length);
|
|
38733
|
+
return shuffleColors([...LINE_COLORS, ...DEFAULT_COLORS$3], series === null || series === void 0 ? void 0 : series.length);
|
|
38733
38734
|
}, [series.length]);
|
|
38734
38735
|
if (isEmpty) {
|
|
38735
|
-
return createLoadingComponent();
|
|
38736
|
+
return createLoadingComponent$4();
|
|
38736
38737
|
}
|
|
38737
38738
|
const transformedData = {
|
|
38738
38739
|
labels: labels,
|
|
@@ -38751,7 +38752,7 @@ function SeriesLineChartComponent({ orientation, seriesLineChartState, styles, a
|
|
|
38751
38752
|
};
|
|
38752
38753
|
return (jsxRuntimeExports.jsx(SeriesLineChart, { orientation: orientation, title: chartTitle, data: transformedData, units: units, content: content, x_axis_title: x_axis_title, y_axis_title: y_axis_title }));
|
|
38753
38754
|
}
|
|
38754
|
-
function PieChartComponent({ pieChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content }) {
|
|
38755
|
+
function PieChartComponent$1({ pieChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content }) {
|
|
38755
38756
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
|
|
38756
38757
|
const hasCalledRef = useRef(false);
|
|
38757
38758
|
const labels = ((_b = (_a = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || ((_e = (_d = (_c = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.state) === null || _c === void 0 ? void 0 : _c.pie_chart_data) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.labels) || [];
|
|
@@ -38762,7 +38763,7 @@ function PieChartComponent({ pieChartState, styles, appendMessage, query, isFirs
|
|
|
38762
38763
|
const isEmpty = labels.length === 0 || values.length === 0;
|
|
38763
38764
|
const handleRefresh = async () => {
|
|
38764
38765
|
if (query) {
|
|
38765
|
-
await clearChat(widgetBackendUrl, widgetId);
|
|
38766
|
+
await clearChat$4(widgetBackendUrl, widgetId);
|
|
38766
38767
|
// Send trigger event to clear chart state
|
|
38767
38768
|
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
38768
38769
|
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
@@ -38788,10 +38789,10 @@ function PieChartComponent({ pieChartState, styles, appendMessage, query, isFirs
|
|
|
38788
38789
|
}
|
|
38789
38790
|
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
|
|
38790
38791
|
const backgroundColors = useMemo(() => {
|
|
38791
|
-
return shuffleColors(DEFAULT_COLORS, labels.length);
|
|
38792
|
+
return shuffleColors(DEFAULT_COLORS$3, labels.length);
|
|
38792
38793
|
}, [labels.length]);
|
|
38793
38794
|
if (isEmpty) {
|
|
38794
|
-
return createLoadingComponent();
|
|
38795
|
+
return createLoadingComponent$4();
|
|
38795
38796
|
}
|
|
38796
38797
|
const colors = ((_y = (_x = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _x === void 0 ? void 0 : _x.data) === null || _y === void 0 ? void 0 : _y.colors) || ((_1 = (_0 = (_z = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.state) === null || _z === void 0 ? void 0 : _z.pie_chart_data) === null || _0 === void 0 ? void 0 : _0.data) === null || _1 === void 0 ? void 0 : _1.colors) || labels.map((_, index) => backgroundColors[index % backgroundColors.length]);
|
|
38797
38798
|
const transformedData = {
|
|
@@ -38818,7 +38819,7 @@ function LineChartComponent({ lineChartState, styles, appendMessage, query, isFi
|
|
|
38818
38819
|
const isEmpty = labels.length === 0 || values.length === 0;
|
|
38819
38820
|
const handleRefresh = async () => {
|
|
38820
38821
|
if (query && widgetBackendUrl && widgetId) {
|
|
38821
|
-
await clearChat(widgetBackendUrl, widgetId);
|
|
38822
|
+
await clearChat$4(widgetBackendUrl, widgetId);
|
|
38822
38823
|
appendMessage(new TextMessage({
|
|
38823
38824
|
content: `${query} and render data on a bar chart`,
|
|
38824
38825
|
role: Role.User,
|
|
@@ -38844,7 +38845,7 @@ function LineChartComponent({ lineChartState, styles, appendMessage, query, isFi
|
|
|
38844
38845
|
return LINE_COLORS[Math.floor(Math.random() * LINE_COLORS.length)];
|
|
38845
38846
|
}, [labels.length]);
|
|
38846
38847
|
if (isEmpty) {
|
|
38847
|
-
return createLoadingComponent();
|
|
38848
|
+
return createLoadingComponent$4();
|
|
38848
38849
|
}
|
|
38849
38850
|
const transformedData = {
|
|
38850
38851
|
labels: labels,
|
|
@@ -38864,7 +38865,7 @@ function LineChartComponent({ lineChartState, styles, appendMessage, query, isFi
|
|
|
38864
38865
|
};
|
|
38865
38866
|
return (jsxRuntimeExports.jsx(LineChart, { title: chartTitle, data: transformedData, units: units, content: content }));
|
|
38866
38867
|
}
|
|
38867
|
-
function DataGridComponent({ dataGridState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout }) {
|
|
38868
|
+
function DataGridComponent$1({ dataGridState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout }) {
|
|
38868
38869
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
|
|
38869
38870
|
const hasCalledRef = useRef(false);
|
|
38870
38871
|
const columns = ((_b = (_a = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.headers) || ((_e = (_d = (_c = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.state) === null || _c === void 0 ? void 0 : _c.matrix_grid_data) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.headers) || [];
|
|
@@ -38874,7 +38875,7 @@ function DataGridComponent({ dataGridState, styles, appendMessage, query, isFirs
|
|
|
38874
38875
|
const isEmpty = columns.length === 0 || rows.length === 0;
|
|
38875
38876
|
const handleRefresh = async () => {
|
|
38876
38877
|
if (query) {
|
|
38877
|
-
await clearChat(widgetBackendUrl, widgetId);
|
|
38878
|
+
await clearChat$4(widgetBackendUrl, widgetId);
|
|
38878
38879
|
// Send trigger event to clear chart state
|
|
38879
38880
|
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
38880
38881
|
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
@@ -38900,7 +38901,7 @@ function DataGridComponent({ dataGridState, styles, appendMessage, query, isFirs
|
|
|
38900
38901
|
}
|
|
38901
38902
|
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
|
|
38902
38903
|
if (isEmpty) {
|
|
38903
|
-
return createLoadingComponent("Loading table data...");
|
|
38904
|
+
return createLoadingComponent$4("Loading table data...");
|
|
38904
38905
|
}
|
|
38905
38906
|
const transformedData = {
|
|
38906
38907
|
columns: columns,
|
|
@@ -38921,7 +38922,7 @@ function SummaryComponent({ summaryState, styles, appendMessage, query, isFirstL
|
|
|
38921
38922
|
const isEmpty = !content || content.trim() === "";
|
|
38922
38923
|
const handleRefresh = async () => {
|
|
38923
38924
|
if (query) {
|
|
38924
|
-
await clearChat(widgetBackendUrl, widgetId);
|
|
38925
|
+
await clearChat$4(widgetBackendUrl, widgetId);
|
|
38925
38926
|
// Send trigger event to clear chart state
|
|
38926
38927
|
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
38927
38928
|
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
@@ -38934,7 +38935,7 @@ function SummaryComponent({ summaryState, styles, appendMessage, query, isFirstL
|
|
|
38934
38935
|
useEffect(() => {
|
|
38935
38936
|
if (isEmpty && query && isFirstLoad && !(summaryState === null || summaryState === void 0 ? void 0 : summaryState.agent_message) && !hasCalledRef.current) {
|
|
38936
38937
|
hasCalledRef.current = true;
|
|
38937
|
-
setChartState(
|
|
38938
|
+
setChartState(Object.assign(Object.assign({}, summaryState), { widget_ids: widget_ids }));
|
|
38938
38939
|
setTimeout(() => {
|
|
38939
38940
|
handleRefresh();
|
|
38940
38941
|
}, 500);
|
|
@@ -38950,12 +38951,12 @@ function SummaryComponent({ summaryState, styles, appendMessage, query, isFirstL
|
|
|
38950
38951
|
}
|
|
38951
38952
|
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
|
|
38952
38953
|
if (isEmpty) {
|
|
38953
|
-
return createLoadingComponent("Loading summary...");
|
|
38954
|
+
return createLoadingComponent$4("Loading summary...");
|
|
38954
38955
|
}
|
|
38955
38956
|
return (jsxRuntimeExports.jsx(SummaryWidget, { title: title, data: data, metadata: metadata, className: "" }));
|
|
38956
38957
|
}
|
|
38957
|
-
function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds, widgetBackendUrl, datasetId }) {
|
|
38958
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29
|
|
38958
|
+
function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds, widgetBackendUrl, datasetId, widgetData, }) {
|
|
38959
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29;
|
|
38959
38960
|
const agentType = (_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentType;
|
|
38960
38961
|
const orientation = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.orientation;
|
|
38961
38962
|
const isFirstLoad = (_c = widget.config) === null || _c === void 0 ? void 0 : _c.isFirstLoad;
|
|
@@ -38970,7 +38971,7 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
|
|
|
38970
38971
|
}, [widget.id, setThreadId]);
|
|
38971
38972
|
const { state: chartState, setState: setChartState } = useCoAgent({
|
|
38972
38973
|
name: (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName,
|
|
38973
|
-
initialState: createInitialChartState(agentType || '', widgetIds, datasetId),
|
|
38974
|
+
initialState: createInitialChartState$4(agentType || '', widgetIds, datasetId),
|
|
38974
38975
|
});
|
|
38975
38976
|
// Function to handle timeout and call loadAgentState API
|
|
38976
38977
|
const handleLoadingTimeout = useCallback(async () => {
|
|
@@ -38989,9 +38990,9 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
|
|
|
38989
38990
|
// Increment the API call counter
|
|
38990
38991
|
setApiCallCount(prev => prev + 1);
|
|
38991
38992
|
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
|
|
38992
|
-
const apiResponse = await loadAgentState(widgetBackendUrl, widget.id, agentName);
|
|
38993
|
+
const apiResponse = await loadAgentState$4(widgetBackendUrl, widget.id, agentName);
|
|
38993
38994
|
if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
|
|
38994
|
-
parseAndUpdateChartState(apiResponse, setChartState);
|
|
38995
|
+
parseAndUpdateChartState$4(apiResponse, setChartState);
|
|
38995
38996
|
}
|
|
38996
38997
|
}, [widgetBackendUrl, widget.id, isTimeoutTriggered, setChartState, (_f = widget.config) === null || _f === void 0 ? void 0 : _f.agentName, chartState, apiCallCount, hasTimeoutError]);
|
|
38997
38998
|
// Function to start timeout
|
|
@@ -39002,7 +39003,7 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
|
|
|
39002
39003
|
setIsTimeoutTriggered(false);
|
|
39003
39004
|
timeoutRef.current = setTimeout(() => {
|
|
39004
39005
|
handleLoadingTimeout();
|
|
39005
|
-
}, CHART_REFRESH_TIMEOUT);
|
|
39006
|
+
}, CHART_REFRESH_TIMEOUT$4);
|
|
39006
39007
|
}, [handleLoadingTimeout]);
|
|
39007
39008
|
// Function to clear timeout
|
|
39008
39009
|
const clearLoadingTimeout = useCallback(() => {
|
|
@@ -39011,29 +39012,6 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
|
|
|
39011
39012
|
timeoutRef.current = null;
|
|
39012
39013
|
}
|
|
39013
39014
|
}, []);
|
|
39014
|
-
// Function to clear chat and reset chart state
|
|
39015
|
-
useCallback(async (widgetId) => {
|
|
39016
|
-
if (!widgetBackendUrl)
|
|
39017
|
-
return;
|
|
39018
|
-
try {
|
|
39019
|
-
await fetch(`${widgetBackendUrl}/api/clear-chat`, {
|
|
39020
|
-
method: 'POST',
|
|
39021
|
-
headers: {
|
|
39022
|
-
'Content-Type': 'application/json',
|
|
39023
|
-
},
|
|
39024
|
-
body: JSON.stringify({
|
|
39025
|
-
session_id: widgetId,
|
|
39026
|
-
delete_state: true
|
|
39027
|
-
}),
|
|
39028
|
-
});
|
|
39029
|
-
setChartState(createInitialChartState(agentType || '', widgetIds, datasetId));
|
|
39030
|
-
setApiCallCount(0);
|
|
39031
|
-
setHasTimeoutError(false);
|
|
39032
|
-
}
|
|
39033
|
-
catch (error) {
|
|
39034
|
-
console.error('Failed to clear chat and state:', error);
|
|
39035
|
-
}
|
|
39036
|
-
}, [widgetBackendUrl, setChartState, agentType, widgetIds]);
|
|
39037
39015
|
// Clean up timeout on unmount
|
|
39038
39016
|
useEffect(() => {
|
|
39039
39017
|
return () => {
|
|
@@ -39082,7 +39060,7 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
|
|
|
39082
39060
|
messageContent = `${query} and render the data on a summary widget`;
|
|
39083
39061
|
}
|
|
39084
39062
|
console.log('triggering to datasetId==>', datasetId);
|
|
39085
|
-
setChartState(createInitialChartState(agentType || '', widgetIds, datasetId));
|
|
39063
|
+
setChartState(createInitialChartState$4(agentType || '', widgetIds, datasetId));
|
|
39086
39064
|
appendMessage(new TextMessage({
|
|
39087
39065
|
content: messageContent,
|
|
39088
39066
|
role: Role.User,
|
|
@@ -39092,7 +39070,7 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
|
|
|
39092
39070
|
const handleClearChartState = (event) => {
|
|
39093
39071
|
const { widgetId } = event.detail;
|
|
39094
39072
|
if (widgetId === widget.id) {
|
|
39095
|
-
setChartState(createInitialChartState(agentType || '', widgetIds, datasetId));
|
|
39073
|
+
setChartState(createInitialChartState$4(agentType || '', widgetIds, datasetId));
|
|
39096
39074
|
setApiCallCount(0);
|
|
39097
39075
|
setHasTimeoutError(false);
|
|
39098
39076
|
}
|
|
@@ -39112,16 +39090,11 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
|
|
|
39112
39090
|
(agentType === "Pie Chart Agent" && (!((_2 = (_1 = (_0 = chartState.pie_chart_data) === null || _0 === void 0 ? void 0 : _0.data) === null || _1 === void 0 ? void 0 : _1.labels) === null || _2 === void 0 ? void 0 : _2.length) || !((_5 = (_4 = (_3 = chartState.pie_chart_data) === null || _3 === void 0 ? void 0 : _3.data) === null || _4 === void 0 ? void 0 : _4.values) === null || _5 === void 0 ? void 0 : _5.length))) ||
|
|
39113
39091
|
(agentType === "Line Chart Agent" && (!((_8 = (_7 = (_6 = chartState.bar_chart_data) === null || _6 === void 0 ? void 0 : _6.data) === null || _7 === void 0 ? void 0 : _7.labels) === null || _8 === void 0 ? void 0 : _8.length) || !((_11 = (_10 = (_9 = chartState.bar_chart_data) === null || _9 === void 0 ? void 0 : _9.data) === null || _10 === void 0 ? void 0 : _10.values) === null || _11 === void 0 ? void 0 : _11.length))) ||
|
|
39114
39092
|
(agentType === "Data Grid Agent" && (!((_14 = (_13 = (_12 = chartState.matrix_grid_data) === null || _12 === void 0 ? void 0 : _12.data) === null || _13 === void 0 ? void 0 : _13.headers) === null || _14 === void 0 ? void 0 : _14.length) || !((_17 = (_16 = (_15 = chartState.matrix_grid_data) === null || _15 === void 0 ? void 0 : _15.data) === null || _16 === void 0 ? void 0 : _16.rows) === null || _17 === void 0 ? void 0 : _17.length))) ||
|
|
39115
|
-
(agentType === "Summary Agent" && (!((_19 = (_18 = chartState.summary_data) === null || _18 === void 0 ? void 0 : _18.data) === null || _19 === void 0 ? void 0 : _19.content) || ((_22 = (_21 = (_20 = chartState.summary_data) === null || _20 === void 0 ? void 0 : _20.data) === null || _21 === void 0 ? void 0 : _21.content) === null || _22 === void 0 ? void 0 : _22.trim()) === ""))) ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : agentType === "Bar Chart Agent" ? (jsxRuntimeExports.jsx(BarChartComponent, { barChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_23 = widget.config) === null || _23 === void 0 ? void 0 : _23.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Series Bar Chart Agent" ? (jsxRuntimeExports.jsx(SeriesBarChartComponent, { seriesBarChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_24 = widget.config) === null || _24 === void 0 ? void 0 : _24.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Series Line Chart Agent" ? (jsxRuntimeExports.jsx(SeriesLineChartComponent, { seriesLineChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_25 = widget.config) === null || _25 === void 0 ? void 0 : _25.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Pie Chart Agent" ? (jsxRuntimeExports.jsx(PieChartComponent, { pieChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_26 = widget.config) === null || _26 === void 0 ? void 0 : _26.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Line Chart Agent" ? (jsxRuntimeExports.jsx(LineChartComponent, { lineChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_27 = widget.config) === null || _27 === void 0 ? void 0 : _27.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Data Grid Agent" ? (jsxRuntimeExports.jsx(DataGridComponent, { dataGridState: chartState, styles: styles, appendMessage: appendMessage, query: (_28 = widget.config) === null || _28 === void 0 ? void 0 : _28.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Summary Agent" ? (jsxRuntimeExports.jsx(SummaryComponent, { summaryState: chartState, styles: styles, appendMessage: appendMessage, query: (_29 = widget.config) === null || _29 === void 0 ? void 0 : _29.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, widget_ids: widgetIds, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, setChartState: setChartState })) :
|
|
39116
|
-
title: ((_30 = widget.config) === null || _30 === void 0 ? void 0 : _30.copilotTitle) || widget.title,
|
|
39117
|
-
initial: ((_31 = widget.config) === null || _31 === void 0 ? void 0 : _31.copilotInitialMessage) || ((_32 = widget.config) === null || _32 === void 0 ? void 0 : _32.placeholder) || "How can I help you today?"
|
|
39118
|
-
}, onSubmitMessage: () => {
|
|
39119
|
-
setChartState(prevState => (Object.assign(Object.assign({}, prevState), { widget_ids: widgetIds, dataset_id: datasetId })));
|
|
39120
|
-
} })) })] }));
|
|
39093
|
+
(agentType === "Summary Agent" && (!((_19 = (_18 = chartState.summary_data) === null || _18 === void 0 ? void 0 : _18.data) === null || _19 === void 0 ? void 0 : _19.content) || ((_22 = (_21 = (_20 = chartState.summary_data) === null || _20 === void 0 ? void 0 : _20.data) === null || _21 === void 0 ? void 0 : _21.content) === null || _22 === void 0 ? void 0 : _22.trim()) === ""))) ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : agentType === "Bar Chart Agent" ? (jsxRuntimeExports.jsx(BarChartComponent, { barChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_23 = widget.config) === null || _23 === void 0 ? void 0 : _23.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Series Bar Chart Agent" ? (jsxRuntimeExports.jsx(SeriesBarChartComponent$2, { seriesBarChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_24 = widget.config) === null || _24 === void 0 ? void 0 : _24.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Series Line Chart Agent" ? (jsxRuntimeExports.jsx(SeriesLineChartComponent, { seriesLineChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_25 = widget.config) === null || _25 === void 0 ? void 0 : _25.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Pie Chart Agent" ? (jsxRuntimeExports.jsx(PieChartComponent$1, { pieChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_26 = widget.config) === null || _26 === void 0 ? void 0 : _26.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Line Chart Agent" ? (jsxRuntimeExports.jsx(LineChartComponent, { lineChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_27 = widget.config) === null || _27 === void 0 ? void 0 : _27.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Data Grid Agent" ? (jsxRuntimeExports.jsx(DataGridComponent$1, { dataGridState: chartState, styles: styles, appendMessage: appendMessage, query: (_28 = widget.config) === null || _28 === void 0 ? void 0 : _28.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Summary Agent" ? (jsxRuntimeExports.jsx(SummaryComponent, { summaryState: chartState, styles: styles, appendMessage: appendMessage, query: (_29 = widget.config) === null || _29 === void 0 ? void 0 : _29.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, widget_ids: widgetIds, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, setChartState: setChartState })) : null })] }));
|
|
39121
39094
|
}
|
|
39122
|
-
function AgentWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, }) {
|
|
39095
|
+
function AgentWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
|
|
39123
39096
|
var _a, _b;
|
|
39124
|
-
const styles = getStyleValues$
|
|
39097
|
+
const styles = getStyleValues$6((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
39125
39098
|
// Construct the runtime URL using the configurable backend URL
|
|
39126
39099
|
const getRuntimeUrl = () => {
|
|
39127
39100
|
var _a;
|
|
@@ -39132,7 +39105,7 @@ function AgentWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady
|
|
|
39132
39105
|
return (jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitAgent, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetIds: widgetIds, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }) }));
|
|
39133
39106
|
}
|
|
39134
39107
|
|
|
39135
|
-
const getStyleValues = (styles = {}) => {
|
|
39108
|
+
const getStyleValues$5 = (styles = {}) => {
|
|
39136
39109
|
(styles.borderRadius || "rounded");
|
|
39137
39110
|
return {
|
|
39138
39111
|
// backgroundColor: styles.backgroundColor || "10px",
|
|
@@ -39140,37 +39113,1333 @@ const getStyleValues = (styles = {}) => {
|
|
|
39140
39113
|
};
|
|
39141
39114
|
function SpacerWidget({ widget }) {
|
|
39142
39115
|
var _a, _b;
|
|
39143
|
-
const styles = getStyleValues((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
39116
|
+
const styles = getStyleValues$5((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
39144
39117
|
((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
|
|
39145
39118
|
return (jsxRuntimeExports.jsx("div", { className: "w-full", style: styles }));
|
|
39146
39119
|
}
|
|
39147
39120
|
|
|
39148
|
-
|
|
39149
|
-
const
|
|
39150
|
-
|
|
39151
|
-
|
|
39121
|
+
const getStyleValues$4 = (styles = {}) => {
|
|
39122
|
+
const borderRadiusMap = {
|
|
39123
|
+
none: "0px",
|
|
39124
|
+
rounded: "0.375rem",
|
|
39125
|
+
large: "0.5rem",
|
|
39126
|
+
"extra-large": "0.75rem",
|
|
39127
|
+
};
|
|
39128
|
+
const paddingMap = {
|
|
39129
|
+
small: "0.5rem",
|
|
39130
|
+
medium: "1rem",
|
|
39131
|
+
large: "1.5rem",
|
|
39132
|
+
"extra-large": "2rem",
|
|
39133
|
+
};
|
|
39134
|
+
const alignment = styles.alignment || "left";
|
|
39135
|
+
return {
|
|
39136
|
+
backgroundColor: styles.backgroundColor || "#ffffff",
|
|
39137
|
+
borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
|
|
39138
|
+
padding: paddingMap[styles.padding || "medium"],
|
|
39139
|
+
color: styles.textColor || "#000000",
|
|
39140
|
+
fontSize: styles.fontSize || "14px",
|
|
39141
|
+
textAlign: alignment,
|
|
39142
|
+
};
|
|
39143
|
+
};
|
|
39144
|
+
function CopilotKitChatbot({ widget, showHeader, styles, onResetReady, widgetIds, datasetId, }) {
|
|
39145
|
+
var _a, _b, _c, _d;
|
|
39146
|
+
const { threadId, setThreadId } = useCopilotContext();
|
|
39147
|
+
useEffect(() => {
|
|
39148
|
+
setThreadId(widget.id);
|
|
39149
|
+
}, [widget.id, setThreadId]);
|
|
39150
|
+
const { state: chatbotState, setState: setChatbotState } = useCoAgent({
|
|
39151
|
+
name: ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "widget_assistant",
|
|
39152
|
+
initialState: {
|
|
39153
|
+
widget_ids: widgetIds,
|
|
39154
|
+
dataset_id: datasetId
|
|
39155
|
+
},
|
|
39156
|
+
});
|
|
39157
|
+
const { reset } = useCopilotChat();
|
|
39158
|
+
// Register the reset function with the parent component
|
|
39159
|
+
useEffect(() => {
|
|
39160
|
+
if (onResetReady && reset && widget.id) {
|
|
39161
|
+
console.log('on reset ready=>');
|
|
39162
|
+
const wrappedReset = () => {
|
|
39163
|
+
reset();
|
|
39164
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
|
|
39165
|
+
};
|
|
39166
|
+
onResetReady(widget.id, wrappedReset);
|
|
39152
39167
|
}
|
|
39168
|
+
}, [reset, widget.id, onResetReady]);
|
|
39169
|
+
// Listen for clearChartState events for this widget
|
|
39170
|
+
useEffect(() => {
|
|
39171
|
+
const handleClearChartState = (event) => {
|
|
39172
|
+
const { widgetId } = event.detail;
|
|
39173
|
+
if (widgetId === widget.id) {
|
|
39174
|
+
setChatbotState({
|
|
39175
|
+
widget_ids: widgetIds,
|
|
39176
|
+
dataset_id: datasetId
|
|
39177
|
+
});
|
|
39178
|
+
}
|
|
39179
|
+
};
|
|
39180
|
+
window.addEventListener('clearChartState', handleClearChartState);
|
|
39181
|
+
return () => {
|
|
39182
|
+
window.removeEventListener('clearChartState', handleClearChartState);
|
|
39183
|
+
};
|
|
39184
|
+
}, [widget.id, widgetIds, datasetId, setChatbotState]);
|
|
39185
|
+
return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: jsxRuntimeExports.jsx(CopilotChat, { className: "h-full text-xs [&_.copilot-chat-message]:text-xs [&_.copilot-chat-input]:text-xs", labels: {
|
|
39186
|
+
title: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.copilotTitle) || widget.title,
|
|
39187
|
+
initial: ((_c = widget.config) === null || _c === void 0 ? void 0 : _c.copilotInitialMessage) || ((_d = widget.config) === null || _d === void 0 ? void 0 : _d.placeholder) || "How can I help you today?"
|
|
39188
|
+
}, onSubmitMessage: () => {
|
|
39189
|
+
setChatbotState(prevState => (Object.assign(Object.assign({}, prevState), { widget_ids: widgetIds, dataset_id: datasetId })));
|
|
39190
|
+
} }) })] }));
|
|
39191
|
+
}
|
|
39192
|
+
function ChatbotWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, }) {
|
|
39193
|
+
var _a, _b;
|
|
39194
|
+
const styles = getStyleValues$4((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
39195
|
+
// Construct the runtime URL using the configurable backend URL
|
|
39196
|
+
const getRuntimeUrl = () => {
|
|
39197
|
+
var _a;
|
|
39198
|
+
const baseUrl = widgetBackendUrl || '';
|
|
39199
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
|
|
39200
|
+
return `${baseUrl}/api/copilot/${agentName}`;
|
|
39153
39201
|
};
|
|
39154
|
-
|
|
39155
|
-
|
|
39156
|
-
|
|
39157
|
-
|
|
39158
|
-
|
|
39159
|
-
|
|
39160
|
-
|
|
39161
|
-
|
|
39162
|
-
|
|
39163
|
-
|
|
39164
|
-
|
|
39165
|
-
|
|
39166
|
-
|
|
39167
|
-
|
|
39168
|
-
|
|
39169
|
-
|
|
39170
|
-
|
|
39171
|
-
|
|
39172
|
-
|
|
39173
|
-
|
|
39202
|
+
return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitChatbot, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId }) }));
|
|
39203
|
+
}
|
|
39204
|
+
|
|
39205
|
+
const CHART_REFRESH_TIMEOUT$3 = 3000;
|
|
39206
|
+
const DEFAULT_COLORS$2 = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
|
|
39207
|
+
const clearChat$3 = async (widgetBackendUrl, widgetId) => {
|
|
39208
|
+
if (!widgetBackendUrl || !widgetId)
|
|
39209
|
+
return;
|
|
39210
|
+
console.log('clearChat called for widgetId:', widgetId);
|
|
39211
|
+
try {
|
|
39212
|
+
await fetch(`${widgetBackendUrl}/api/clear-chat`, {
|
|
39213
|
+
method: 'POST',
|
|
39214
|
+
headers: {
|
|
39215
|
+
'Content-Type': 'application/json',
|
|
39216
|
+
},
|
|
39217
|
+
body: JSON.stringify({
|
|
39218
|
+
session_id: widgetId,
|
|
39219
|
+
delete_state: true
|
|
39220
|
+
}),
|
|
39221
|
+
});
|
|
39222
|
+
console.log('Dispatching clearChartState event from clearChat for widgetId:', widgetId);
|
|
39223
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
39224
|
+
}
|
|
39225
|
+
catch (error) {
|
|
39226
|
+
console.error('Failed to clear chat:', error);
|
|
39227
|
+
}
|
|
39228
|
+
};
|
|
39229
|
+
const createLoadingComponent$3 = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
|
|
39230
|
+
const createInitialChartState$3 = (datasetId, pieChartState) => {
|
|
39231
|
+
return {
|
|
39232
|
+
pie_chart_data: {
|
|
39233
|
+
title: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.title) || "",
|
|
39234
|
+
type: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.type) || "pie",
|
|
39235
|
+
chart_type: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.chart_type) || "financial",
|
|
39236
|
+
data: { labels: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.data.labels) || [], values: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.data.values) || [], percentages: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.data.percentages) || [], total: pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.data.total },
|
|
39237
|
+
metadata: { categories: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.metadata.categories) || 0, largest_category: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.metadata.largest_category) || "", largest_value: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.metadata.largest_value) || 0, largest_percentage: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.metadata.largest_percentage) || 0 }
|
|
39238
|
+
},
|
|
39239
|
+
dataset_id: datasetId || "home_generation_dataset"
|
|
39240
|
+
};
|
|
39241
|
+
};
|
|
39242
|
+
const loadAgentState$3 = async (widgetBackendUrl, threadId, agentName) => {
|
|
39243
|
+
try {
|
|
39244
|
+
const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
|
|
39245
|
+
method: 'POST',
|
|
39246
|
+
headers: {
|
|
39247
|
+
'Content-Type': 'application/json',
|
|
39248
|
+
},
|
|
39249
|
+
body: JSON.stringify({
|
|
39250
|
+
"operationName": "loadAgentState",
|
|
39251
|
+
"query": "query loadAgentState($data: LoadAgentStateInput!) {\n loadAgentState(data: $data) {\n threadId\n threadExists\n state\n messages\n __typename\n }\n}",
|
|
39252
|
+
"variables": {
|
|
39253
|
+
"data": {
|
|
39254
|
+
"agentName": agentName,
|
|
39255
|
+
"threadId": threadId
|
|
39256
|
+
}
|
|
39257
|
+
}
|
|
39258
|
+
}),
|
|
39259
|
+
});
|
|
39260
|
+
if (!response.ok) {
|
|
39261
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
39262
|
+
}
|
|
39263
|
+
const result = await response.json();
|
|
39264
|
+
return result;
|
|
39265
|
+
}
|
|
39266
|
+
catch (error) {
|
|
39267
|
+
console.error('Failed to load agent state:', error);
|
|
39268
|
+
return null;
|
|
39269
|
+
}
|
|
39270
|
+
};
|
|
39271
|
+
const parseAndUpdateChartState$3 = (apiResponse, setChartState) => {
|
|
39272
|
+
var _a, _b;
|
|
39273
|
+
try {
|
|
39274
|
+
if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
|
|
39275
|
+
const stateString = apiResponse.data.loadAgentState.state;
|
|
39276
|
+
const parsedState = JSON.parse(stateString);
|
|
39277
|
+
if (parsedState.state) {
|
|
39278
|
+
const chartData = parsedState.state;
|
|
39279
|
+
setChartState((prevState) => {
|
|
39280
|
+
const newChartState = Object.assign({}, prevState);
|
|
39281
|
+
if (chartData.pie_chart_data) {
|
|
39282
|
+
newChartState.pie_chart_data = chartData.pie_chart_data;
|
|
39283
|
+
}
|
|
39284
|
+
if (chartData.agent_message) {
|
|
39285
|
+
newChartState.agent_message = chartData.agent_message;
|
|
39286
|
+
}
|
|
39287
|
+
return newChartState;
|
|
39288
|
+
});
|
|
39289
|
+
}
|
|
39290
|
+
}
|
|
39291
|
+
}
|
|
39292
|
+
catch (error) {
|
|
39293
|
+
console.error('Failed to parse and update chart state:', error);
|
|
39294
|
+
}
|
|
39295
|
+
};
|
|
39296
|
+
const getStyleValues$3 = (styles = {}) => {
|
|
39297
|
+
const borderRadiusMap = {
|
|
39298
|
+
none: "0px",
|
|
39299
|
+
rounded: "0.375rem",
|
|
39300
|
+
large: "0.5rem",
|
|
39301
|
+
"extra-large": "0.75rem",
|
|
39302
|
+
};
|
|
39303
|
+
const paddingMap = {
|
|
39304
|
+
small: "0.5rem",
|
|
39305
|
+
medium: "1rem",
|
|
39306
|
+
large: "1.5rem",
|
|
39307
|
+
"extra-large": "2rem",
|
|
39308
|
+
};
|
|
39309
|
+
const alignment = styles.alignment || "left";
|
|
39310
|
+
return {
|
|
39311
|
+
backgroundColor: styles.backgroundColor || "#ffffff",
|
|
39312
|
+
borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
|
|
39313
|
+
padding: paddingMap[styles.padding || "medium"],
|
|
39314
|
+
color: styles.textColor || "#000000",
|
|
39315
|
+
fontSize: styles.fontSize || "14px",
|
|
39316
|
+
textAlign: alignment,
|
|
39317
|
+
};
|
|
39318
|
+
};
|
|
39319
|
+
function PieChartComponent({ pieChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content, hasWidgetData }) {
|
|
39320
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
39321
|
+
const hasCalledRef = useRef(false);
|
|
39322
|
+
const labels = ((_b = (_a = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || [];
|
|
39323
|
+
const values = ((_d = (_c = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.values) || [];
|
|
39324
|
+
((_f = (_e = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.percentages) || [];
|
|
39325
|
+
const chartTitle = ((_g = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _g === void 0 ? void 0 : _g.title) || "";
|
|
39326
|
+
const units = ((_h = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _h === void 0 ? void 0 : _h.units) || "";
|
|
39327
|
+
const isEmpty = labels.length === 0 || values.length === 0;
|
|
39328
|
+
const handleRefresh = async () => {
|
|
39329
|
+
if (query) {
|
|
39330
|
+
await clearChat$3(widgetBackendUrl, widgetId);
|
|
39331
|
+
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
39332
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
39333
|
+
appendMessage(new TextMessage({
|
|
39334
|
+
content: `${query} and render data on pie chart`,
|
|
39335
|
+
role: Role.User,
|
|
39336
|
+
}));
|
|
39337
|
+
}
|
|
39338
|
+
};
|
|
39339
|
+
useEffect(() => {
|
|
39340
|
+
if (isEmpty && query && isFirstLoad && !(pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.agent_message) && !hasCalledRef.current) {
|
|
39341
|
+
hasCalledRef.current = true;
|
|
39342
|
+
handleRefresh();
|
|
39343
|
+
}
|
|
39344
|
+
}, [isEmpty, query, isFirstLoad, pieChartState]);
|
|
39345
|
+
useEffect(() => {
|
|
39346
|
+
console.log('PieChartComponent useEffect - isEmpty:', isEmpty, 'hasMessage:', !!(pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.agent_message), 'hasWidgetData:', hasWidgetData, 'isFirstLoad:', isFirstLoad);
|
|
39347
|
+
if (isEmpty && startLoadingTimeout && !(pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.agent_message)) {
|
|
39348
|
+
console.log('Starting loading timeout from PieChartComponent useEffect');
|
|
39349
|
+
startLoadingTimeout();
|
|
39350
|
+
}
|
|
39351
|
+
else if (!isEmpty && clearLoadingTimeout) {
|
|
39352
|
+
clearLoadingTimeout();
|
|
39353
|
+
}
|
|
39354
|
+
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout, pieChartState]);
|
|
39355
|
+
const backgroundColors = useMemo(() => {
|
|
39356
|
+
return shuffleColors(DEFAULT_COLORS$2, labels.length);
|
|
39357
|
+
}, [labels.length]);
|
|
39358
|
+
if (isEmpty) {
|
|
39359
|
+
return createLoadingComponent$3();
|
|
39360
|
+
}
|
|
39361
|
+
const colors = ((_k = (_j = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _j === void 0 ? void 0 : _j.data) === null || _k === void 0 ? void 0 : _k.colors) || labels.map((_, index) => backgroundColors[index % backgroundColors.length]);
|
|
39362
|
+
const transformedData = {
|
|
39363
|
+
labels: labels,
|
|
39364
|
+
datasets: [
|
|
39365
|
+
{
|
|
39366
|
+
label: chartTitle || "Data",
|
|
39367
|
+
data: values,
|
|
39368
|
+
backgroundColor: colors,
|
|
39369
|
+
borderWidth: 0,
|
|
39370
|
+
},
|
|
39371
|
+
],
|
|
39372
|
+
};
|
|
39373
|
+
return (jsxRuntimeExports.jsx(PieChart, { title: chartTitle, data: transformedData, units: units, content: content }));
|
|
39374
|
+
}
|
|
39375
|
+
function CopilotKitPieChart({ widget, showHeader, styles, onResetReady, widgetBackendUrl, datasetId, widgetData, }) {
|
|
39376
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
39377
|
+
const isFirstLoad = (_a = widget.config) === null || _a === void 0 ? void 0 : _a.isFirstLoad;
|
|
39378
|
+
const content = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.content;
|
|
39379
|
+
const widget_data = (_c = widget.widget_data) === null || _c === void 0 ? void 0 : _c.pie_chart_data;
|
|
39380
|
+
console.log('widget_data===>', widget_data);
|
|
39381
|
+
const { threadId, setThreadId } = useCopilotContext();
|
|
39382
|
+
const timeoutRef = useRef(null);
|
|
39383
|
+
const [apiCallCount, setApiCallCount] = useState(0);
|
|
39384
|
+
const [hasTimeoutError, setHasTimeoutError] = useState(false);
|
|
39385
|
+
useEffect(() => {
|
|
39386
|
+
setThreadId(widget.id);
|
|
39387
|
+
}, [widget.id, setThreadId]);
|
|
39388
|
+
const { state: agentState, setState: setAgentState } = useCoAgent({
|
|
39389
|
+
name: (_d = widget.config) === null || _d === void 0 ? void 0 : _d.agentName,
|
|
39390
|
+
initialState: createInitialChartState$3(datasetId, widget_data),
|
|
39391
|
+
});
|
|
39392
|
+
const [chartState, setChartState] = useState(createInitialChartState$3(datasetId, widget_data));
|
|
39393
|
+
const handleLoadingTimeout = useCallback(async () => {
|
|
39394
|
+
var _a;
|
|
39395
|
+
if (!widgetBackendUrl || !widget.id || (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) || hasTimeoutError) {
|
|
39396
|
+
console.log('Skipping API call - conditions not met');
|
|
39397
|
+
return;
|
|
39398
|
+
}
|
|
39399
|
+
console.log('Loading timeout triggered for widget:', widget.id, 'API call count:', apiCallCount);
|
|
39400
|
+
if (apiCallCount >= 30) {
|
|
39401
|
+
console.log('API call limit reached for widget:', widget.id);
|
|
39402
|
+
setHasTimeoutError(true);
|
|
39403
|
+
setChartState(prevState => (Object.assign(Object.assign({}, prevState), { agent_message: "Timeout: Unable to load data after multiple attempts. Please try refreshing the widget." })));
|
|
39404
|
+
return;
|
|
39405
|
+
}
|
|
39406
|
+
setApiCallCount(prev => prev + 1);
|
|
39407
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
|
|
39408
|
+
console.log('Calling loadAgentState API for widget:', widget.id);
|
|
39409
|
+
const apiResponse = await loadAgentState$3(widgetBackendUrl, widget.id, agentName);
|
|
39410
|
+
console.log('API response received:', apiResponse);
|
|
39411
|
+
if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
|
|
39412
|
+
parseAndUpdateChartState$3(apiResponse, setChartState);
|
|
39413
|
+
}
|
|
39414
|
+
}, [widgetBackendUrl, widget.id, setChartState, (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName, chartState, apiCallCount, hasTimeoutError]);
|
|
39415
|
+
const startLoadingTimeout = useCallback(() => {
|
|
39416
|
+
if (timeoutRef.current) {
|
|
39417
|
+
clearTimeout(timeoutRef.current);
|
|
39418
|
+
}
|
|
39419
|
+
console.log('Scheduling next API call in 3 seconds');
|
|
39420
|
+
timeoutRef.current = setTimeout(() => {
|
|
39421
|
+
handleLoadingTimeout();
|
|
39422
|
+
}, CHART_REFRESH_TIMEOUT$3);
|
|
39423
|
+
}, [handleLoadingTimeout]);
|
|
39424
|
+
const clearLoadingTimeout = useCallback(() => {
|
|
39425
|
+
if (timeoutRef.current) {
|
|
39426
|
+
clearTimeout(timeoutRef.current);
|
|
39427
|
+
timeoutRef.current = null;
|
|
39428
|
+
}
|
|
39429
|
+
}, []);
|
|
39430
|
+
useEffect(() => {
|
|
39431
|
+
return () => {
|
|
39432
|
+
if (timeoutRef.current) {
|
|
39433
|
+
clearTimeout(timeoutRef.current);
|
|
39434
|
+
}
|
|
39435
|
+
};
|
|
39436
|
+
}, []);
|
|
39437
|
+
const { appendMessage, reset } = useCopilotChat();
|
|
39438
|
+
useEffect(() => {
|
|
39439
|
+
if (onResetReady && reset && widget.id) {
|
|
39440
|
+
const wrappedReset = () => {
|
|
39441
|
+
reset();
|
|
39442
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
|
|
39443
|
+
};
|
|
39444
|
+
onResetReady(widget.id, wrappedReset);
|
|
39445
|
+
}
|
|
39446
|
+
}, [reset, widget.id, onResetReady]);
|
|
39447
|
+
useEffect(() => {
|
|
39448
|
+
const handleTriggerAgent = (event) => {
|
|
39449
|
+
const { widgetId, query, agentType: eventAgentType, datasetId } = event.detail;
|
|
39450
|
+
reset();
|
|
39451
|
+
if (widgetId === widget.id) {
|
|
39452
|
+
let messageContent = `${query} and render data on pie chart`;
|
|
39453
|
+
console.log('triggering to datasetId==>', datasetId);
|
|
39454
|
+
setChartState(createInitialChartState$3(datasetId));
|
|
39455
|
+
setAgentState(createInitialChartState$3(datasetId));
|
|
39456
|
+
setApiCallCount(0);
|
|
39457
|
+
setHasTimeoutError(false);
|
|
39458
|
+
appendMessage(new TextMessage({
|
|
39459
|
+
content: messageContent,
|
|
39460
|
+
role: Role.User,
|
|
39461
|
+
}));
|
|
39462
|
+
// Start polling for chart data
|
|
39463
|
+
startLoadingTimeout();
|
|
39464
|
+
}
|
|
39465
|
+
};
|
|
39466
|
+
const handleClearChartState = (event) => {
|
|
39467
|
+
const { widgetId } = event.detail;
|
|
39468
|
+
if (widgetId === widget.id) {
|
|
39469
|
+
setChartState(createInitialChartState$3(datasetId));
|
|
39470
|
+
setAgentState(createInitialChartState$3(datasetId));
|
|
39471
|
+
setApiCallCount(0);
|
|
39472
|
+
setHasTimeoutError(false);
|
|
39473
|
+
}
|
|
39474
|
+
};
|
|
39475
|
+
window.addEventListener('triggerAgent', handleTriggerAgent);
|
|
39476
|
+
window.addEventListener('clearChartState', handleClearChartState);
|
|
39477
|
+
return () => {
|
|
39478
|
+
window.removeEventListener('triggerAgent', handleTriggerAgent);
|
|
39479
|
+
window.removeEventListener('clearChartState', handleClearChartState);
|
|
39480
|
+
};
|
|
39481
|
+
}, [widget.id, appendMessage, setChartState, startLoadingTimeout]);
|
|
39482
|
+
return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) &&
|
|
39483
|
+
(!((_h = (_g = (_f = chartState.pie_chart_data) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.labels) === null || _h === void 0 ? void 0 : _h.length) || !((_l = (_k = (_j = chartState.pie_chart_data) === null || _j === void 0 ? void 0 : _j.data) === null || _k === void 0 ? void 0 : _k.values) === null || _l === void 0 ? void 0 : _l.length))
|
|
39484
|
+
? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : (jsxRuntimeExports.jsx(PieChartComponent, { pieChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_m = widget.config) === null || _m === void 0 ? void 0 : _m.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, hasWidgetData: !!(((_p = (_o = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _o === void 0 ? void 0 : _o.labels) === null || _p === void 0 ? void 0 : _p.length) && ((_r = (_q = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _q === void 0 ? void 0 : _q.values) === null || _r === void 0 ? void 0 : _r.length)) })) })] }));
|
|
39485
|
+
}
|
|
39486
|
+
function PieChartWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
|
|
39487
|
+
var _a, _b;
|
|
39488
|
+
const styles = getStyleValues$3((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
39489
|
+
const getRuntimeUrl = () => {
|
|
39490
|
+
var _a;
|
|
39491
|
+
const baseUrl = widgetBackendUrl || '';
|
|
39492
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
|
|
39493
|
+
return `${baseUrl}/api/copilot/${agentName}`;
|
|
39494
|
+
};
|
|
39495
|
+
return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitPieChart, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }));
|
|
39496
|
+
}
|
|
39497
|
+
|
|
39498
|
+
const CHART_REFRESH_TIMEOUT$2 = 3000;
|
|
39499
|
+
const DEFAULT_COLORS$1 = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
|
|
39500
|
+
const clearChat$2 = async (widgetBackendUrl, widgetId) => {
|
|
39501
|
+
if (!widgetBackendUrl || !widgetId)
|
|
39502
|
+
return;
|
|
39503
|
+
console.log('clearChat called for widgetId:', widgetId);
|
|
39504
|
+
try {
|
|
39505
|
+
await fetch(`${widgetBackendUrl}/api/clear-chat`, {
|
|
39506
|
+
method: 'POST',
|
|
39507
|
+
headers: {
|
|
39508
|
+
'Content-Type': 'application/json',
|
|
39509
|
+
},
|
|
39510
|
+
body: JSON.stringify({
|
|
39511
|
+
session_id: widgetId,
|
|
39512
|
+
delete_state: true
|
|
39513
|
+
}),
|
|
39514
|
+
});
|
|
39515
|
+
console.log('Dispatching clearChartState event from clearChat for widgetId:', widgetId);
|
|
39516
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
39517
|
+
}
|
|
39518
|
+
catch (error) {
|
|
39519
|
+
console.error('Failed to clear chat:', error);
|
|
39520
|
+
}
|
|
39521
|
+
};
|
|
39522
|
+
const createLoadingComponent$2 = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
|
|
39523
|
+
const createInitialChartState$2 = (datasetId, seriesBarChartState) => {
|
|
39524
|
+
return {
|
|
39525
|
+
series_bar_chart_data: {
|
|
39526
|
+
title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.title) || "",
|
|
39527
|
+
type: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.type) || "series_bar",
|
|
39528
|
+
chart_type: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.chart_type) || "financial",
|
|
39529
|
+
x_axis_title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.x_axis_title) || "",
|
|
39530
|
+
y_axis_title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.y_axis_title) || "",
|
|
39531
|
+
orientation: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.orientation) || "vertical",
|
|
39532
|
+
units: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.units) || "",
|
|
39533
|
+
data: {
|
|
39534
|
+
labels: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.labels) || [],
|
|
39535
|
+
series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.series) || [],
|
|
39536
|
+
total: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.total) || 0,
|
|
39537
|
+
average: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.average) || 0
|
|
39538
|
+
},
|
|
39539
|
+
metadata: {
|
|
39540
|
+
categories: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.categories) || 0,
|
|
39541
|
+
series_count: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_count) || 0,
|
|
39542
|
+
highest_category: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_category) || "",
|
|
39543
|
+
highest_value: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_value) || 0,
|
|
39544
|
+
highest_series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_series) || "",
|
|
39545
|
+
lowest_category: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_category) || "",
|
|
39546
|
+
lowest_value: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_value) || 0,
|
|
39547
|
+
lowest_series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_series) || "",
|
|
39548
|
+
range: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.range) || 0,
|
|
39549
|
+
series_totals: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_totals) || {},
|
|
39550
|
+
series_averages: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_averages) || {}
|
|
39551
|
+
}
|
|
39552
|
+
},
|
|
39553
|
+
dataset_id: datasetId || "home_generation_dataset"
|
|
39554
|
+
};
|
|
39555
|
+
};
|
|
39556
|
+
const loadAgentState$2 = async (widgetBackendUrl, threadId, agentName) => {
|
|
39557
|
+
try {
|
|
39558
|
+
const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
|
|
39559
|
+
method: 'POST',
|
|
39560
|
+
headers: {
|
|
39561
|
+
'Content-Type': 'application/json',
|
|
39562
|
+
},
|
|
39563
|
+
body: JSON.stringify({
|
|
39564
|
+
"operationName": "loadAgentState",
|
|
39565
|
+
"query": "query loadAgentState($data: LoadAgentStateInput!) {\n loadAgentState(data: $data) {\n threadId\n threadExists\n state\n messages\n __typename\n }\n}",
|
|
39566
|
+
"variables": {
|
|
39567
|
+
"data": {
|
|
39568
|
+
"agentName": agentName,
|
|
39569
|
+
"threadId": threadId
|
|
39570
|
+
}
|
|
39571
|
+
}
|
|
39572
|
+
}),
|
|
39573
|
+
});
|
|
39574
|
+
if (!response.ok) {
|
|
39575
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
39576
|
+
}
|
|
39577
|
+
const result = await response.json();
|
|
39578
|
+
return result;
|
|
39579
|
+
}
|
|
39580
|
+
catch (error) {
|
|
39581
|
+
console.error('Failed to load agent state:', error);
|
|
39582
|
+
return null;
|
|
39583
|
+
}
|
|
39584
|
+
};
|
|
39585
|
+
const parseAndUpdateChartState$2 = (apiResponse, setChartState) => {
|
|
39586
|
+
var _a, _b;
|
|
39587
|
+
try {
|
|
39588
|
+
if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
|
|
39589
|
+
const stateString = apiResponse.data.loadAgentState.state;
|
|
39590
|
+
const parsedState = JSON.parse(stateString);
|
|
39591
|
+
if (parsedState.state) {
|
|
39592
|
+
const chartData = parsedState.state;
|
|
39593
|
+
setChartState((prevState) => {
|
|
39594
|
+
const newChartState = Object.assign({}, prevState);
|
|
39595
|
+
if (chartData.series_bar_chart_data) {
|
|
39596
|
+
newChartState.series_bar_chart_data = chartData.series_bar_chart_data;
|
|
39597
|
+
}
|
|
39598
|
+
if (chartData.agent_message) {
|
|
39599
|
+
newChartState.agent_message = chartData.agent_message;
|
|
39600
|
+
}
|
|
39601
|
+
return newChartState;
|
|
39602
|
+
});
|
|
39603
|
+
}
|
|
39604
|
+
}
|
|
39605
|
+
}
|
|
39606
|
+
catch (error) {
|
|
39607
|
+
console.error('Failed to parse and update chart state:', error);
|
|
39608
|
+
}
|
|
39609
|
+
};
|
|
39610
|
+
const getStyleValues$2 = (styles = {}) => {
|
|
39611
|
+
const borderRadiusMap = {
|
|
39612
|
+
none: "0px",
|
|
39613
|
+
rounded: "0.375rem",
|
|
39614
|
+
large: "0.5rem",
|
|
39615
|
+
"extra-large": "0.75rem",
|
|
39616
|
+
};
|
|
39617
|
+
const paddingMap = {
|
|
39618
|
+
small: "0.5rem",
|
|
39619
|
+
medium: "1rem",
|
|
39620
|
+
large: "1.5rem",
|
|
39621
|
+
"extra-large": "2rem",
|
|
39622
|
+
};
|
|
39623
|
+
const alignment = styles.alignment || "left";
|
|
39624
|
+
return {
|
|
39625
|
+
backgroundColor: styles.backgroundColor || "#ffffff",
|
|
39626
|
+
borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
|
|
39627
|
+
padding: paddingMap[styles.padding || "medium"],
|
|
39628
|
+
color: styles.textColor || "#000000",
|
|
39629
|
+
fontSize: styles.fontSize || "14px",
|
|
39630
|
+
textAlign: alignment,
|
|
39631
|
+
};
|
|
39632
|
+
};
|
|
39633
|
+
function SeriesBarChartComponent$1({ orientation, seriesBarChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content, hasWidgetData }) {
|
|
39634
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
39635
|
+
const hasCalledRef = useRef(false);
|
|
39636
|
+
const labels = ((_b = (_a = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || [];
|
|
39637
|
+
const series = ((_d = (_c = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.series) || [];
|
|
39638
|
+
const chartTitle = ((_e = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _e === void 0 ? void 0 : _e.title) || "";
|
|
39639
|
+
const units = ((_f = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _f === void 0 ? void 0 : _f.units) || "";
|
|
39640
|
+
const x_axis_title = ((_g = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _g === void 0 ? void 0 : _g.x_axis_title) || "";
|
|
39641
|
+
const y_axis_title = ((_h = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _h === void 0 ? void 0 : _h.y_axis_title) || "";
|
|
39642
|
+
const isEmpty = labels.length === 0 || series.length === 0;
|
|
39643
|
+
const handleRefresh = async () => {
|
|
39644
|
+
if (query) {
|
|
39645
|
+
await clearChat$2(widgetBackendUrl, widgetId);
|
|
39646
|
+
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
39647
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
39648
|
+
appendMessage(new TextMessage({
|
|
39649
|
+
content: `${query} and render data on a series bar chart`,
|
|
39650
|
+
role: Role.User,
|
|
39651
|
+
}));
|
|
39652
|
+
}
|
|
39653
|
+
};
|
|
39654
|
+
useEffect(() => {
|
|
39655
|
+
if (isEmpty && query && isFirstLoad && !(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message) && !hasCalledRef.current) {
|
|
39656
|
+
hasCalledRef.current = true;
|
|
39657
|
+
handleRefresh();
|
|
39658
|
+
}
|
|
39659
|
+
}, [isEmpty, query, isFirstLoad, seriesBarChartState]);
|
|
39660
|
+
useEffect(() => {
|
|
39661
|
+
console.log('SeriesBarChartComponent useEffect - isEmpty:', isEmpty, 'hasMessage:', !!(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message), 'hasWidgetData:', hasWidgetData, 'isFirstLoad:', isFirstLoad);
|
|
39662
|
+
if (isEmpty && startLoadingTimeout && !(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message)) {
|
|
39663
|
+
console.log('Starting loading timeout from SeriesBarChartComponent useEffect');
|
|
39664
|
+
startLoadingTimeout();
|
|
39665
|
+
}
|
|
39666
|
+
else if (!isEmpty && clearLoadingTimeout) {
|
|
39667
|
+
clearLoadingTimeout();
|
|
39668
|
+
}
|
|
39669
|
+
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout, seriesBarChartState]);
|
|
39670
|
+
const finalColors = useMemo(() => {
|
|
39671
|
+
return shuffleColors(DEFAULT_COLORS$1, series.length);
|
|
39672
|
+
}, [series.length]);
|
|
39673
|
+
if (isEmpty) {
|
|
39674
|
+
return createLoadingComponent$2();
|
|
39675
|
+
}
|
|
39676
|
+
const transformedData = {
|
|
39677
|
+
labels: labels,
|
|
39678
|
+
datasets: series.map((seriesItem, index) => ({
|
|
39679
|
+
label: seriesItem.name,
|
|
39680
|
+
data: seriesItem.values,
|
|
39681
|
+
backgroundColor: (seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.colors) || (seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.color) || finalColors[index % finalColors.length],
|
|
39682
|
+
})),
|
|
39683
|
+
};
|
|
39684
|
+
return (jsxRuntimeExports.jsx(SeriesChart, { orientation: orientation, title: chartTitle, data: transformedData, units: units, content: content, x_axis_title: x_axis_title, y_axis_title: y_axis_title }));
|
|
39685
|
+
}
|
|
39686
|
+
function CopilotKitSeriesBarChart$1({ widget, showHeader, styles, onResetReady, widgetBackendUrl, datasetId, widgetData, }) {
|
|
39687
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
39688
|
+
const orientation = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.orientation) || "vertical";
|
|
39689
|
+
const isFirstLoad = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.isFirstLoad;
|
|
39690
|
+
const content = (_c = widget.config) === null || _c === void 0 ? void 0 : _c.content;
|
|
39691
|
+
const widget_data = (_d = widget.widget_data) === null || _d === void 0 ? void 0 : _d.series_bar_chart_data;
|
|
39692
|
+
console.log('widget_data===>', widget_data);
|
|
39693
|
+
const { threadId, setThreadId } = useCopilotContext();
|
|
39694
|
+
const timeoutRef = useRef(null);
|
|
39695
|
+
const [apiCallCount, setApiCallCount] = useState(0);
|
|
39696
|
+
const [hasTimeoutError, setHasTimeoutError] = useState(false);
|
|
39697
|
+
useEffect(() => {
|
|
39698
|
+
setThreadId(widget.id);
|
|
39699
|
+
}, [widget.id, setThreadId]);
|
|
39700
|
+
const { state: agentState, setState: setAgentState } = useCoAgent({
|
|
39701
|
+
name: (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName,
|
|
39702
|
+
initialState: createInitialChartState$2(datasetId, widget_data),
|
|
39703
|
+
});
|
|
39704
|
+
const [chartState, setChartState] = useState(createInitialChartState$2(datasetId, widget_data));
|
|
39705
|
+
const handleLoadingTimeout = useCallback(async () => {
|
|
39706
|
+
var _a;
|
|
39707
|
+
if (!widgetBackendUrl || !widget.id || (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) || hasTimeoutError) {
|
|
39708
|
+
console.log('Skipping API call - conditions not met');
|
|
39709
|
+
return;
|
|
39710
|
+
}
|
|
39711
|
+
console.log('Loading timeout triggered for widget:', widget.id, 'API call count:', apiCallCount);
|
|
39712
|
+
if (apiCallCount >= 30) {
|
|
39713
|
+
console.log('API call limit reached for widget:', widget.id);
|
|
39714
|
+
setHasTimeoutError(true);
|
|
39715
|
+
setChartState(prevState => (Object.assign(Object.assign({}, prevState), { agent_message: "Timeout: Unable to load data after multiple attempts. Please try refreshing the widget." })));
|
|
39716
|
+
return;
|
|
39717
|
+
}
|
|
39718
|
+
setApiCallCount(prev => prev + 1);
|
|
39719
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
|
|
39720
|
+
console.log('Calling loadAgentState API for widget:', widget.id);
|
|
39721
|
+
const apiResponse = await loadAgentState$2(widgetBackendUrl, widget.id, agentName);
|
|
39722
|
+
console.log('API response received:', apiResponse);
|
|
39723
|
+
if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
|
|
39724
|
+
parseAndUpdateChartState$2(apiResponse, setChartState);
|
|
39725
|
+
}
|
|
39726
|
+
}, [widgetBackendUrl, widget.id, setChartState, (_f = widget.config) === null || _f === void 0 ? void 0 : _f.agentName, chartState, apiCallCount, hasTimeoutError]);
|
|
39727
|
+
const startLoadingTimeout = useCallback(() => {
|
|
39728
|
+
if (timeoutRef.current) {
|
|
39729
|
+
clearTimeout(timeoutRef.current);
|
|
39730
|
+
}
|
|
39731
|
+
console.log('Scheduling next API call in 3 seconds');
|
|
39732
|
+
timeoutRef.current = setTimeout(() => {
|
|
39733
|
+
handleLoadingTimeout();
|
|
39734
|
+
}, CHART_REFRESH_TIMEOUT$2);
|
|
39735
|
+
}, [handleLoadingTimeout]);
|
|
39736
|
+
const clearLoadingTimeout = useCallback(() => {
|
|
39737
|
+
if (timeoutRef.current) {
|
|
39738
|
+
clearTimeout(timeoutRef.current);
|
|
39739
|
+
timeoutRef.current = null;
|
|
39740
|
+
}
|
|
39741
|
+
}, []);
|
|
39742
|
+
useEffect(() => {
|
|
39743
|
+
return () => {
|
|
39744
|
+
if (timeoutRef.current) {
|
|
39745
|
+
clearTimeout(timeoutRef.current);
|
|
39746
|
+
}
|
|
39747
|
+
};
|
|
39748
|
+
}, []);
|
|
39749
|
+
const { appendMessage, reset } = useCopilotChat();
|
|
39750
|
+
useEffect(() => {
|
|
39751
|
+
if (onResetReady && reset && widget.id) {
|
|
39752
|
+
const wrappedReset = () => {
|
|
39753
|
+
reset();
|
|
39754
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
|
|
39755
|
+
};
|
|
39756
|
+
onResetReady(widget.id, wrappedReset);
|
|
39757
|
+
}
|
|
39758
|
+
}, [reset, widget.id, onResetReady]);
|
|
39759
|
+
useEffect(() => {
|
|
39760
|
+
const handleTriggerAgent = (event) => {
|
|
39761
|
+
const { widgetId, query, agentType: eventAgentType, datasetId } = event.detail;
|
|
39762
|
+
if (widgetId === widget.id) {
|
|
39763
|
+
let messageContent = `${query} and render data on a series bar chart`;
|
|
39764
|
+
reset();
|
|
39765
|
+
console.log('triggering to datasetId==>', datasetId);
|
|
39766
|
+
setChartState(createInitialChartState$2(datasetId));
|
|
39767
|
+
setAgentState(createInitialChartState$2(datasetId));
|
|
39768
|
+
setApiCallCount(0);
|
|
39769
|
+
setHasTimeoutError(false);
|
|
39770
|
+
appendMessage(new TextMessage({
|
|
39771
|
+
content: messageContent,
|
|
39772
|
+
role: Role.User,
|
|
39773
|
+
}));
|
|
39774
|
+
// Start polling for chart data
|
|
39775
|
+
startLoadingTimeout();
|
|
39776
|
+
}
|
|
39777
|
+
};
|
|
39778
|
+
const handleClearChartState = (event) => {
|
|
39779
|
+
const { widgetId } = event.detail;
|
|
39780
|
+
if (widgetId === widget.id) {
|
|
39781
|
+
setChartState(createInitialChartState$2(datasetId));
|
|
39782
|
+
setAgentState(createInitialChartState$2(datasetId));
|
|
39783
|
+
setApiCallCount(0);
|
|
39784
|
+
setHasTimeoutError(false);
|
|
39785
|
+
}
|
|
39786
|
+
};
|
|
39787
|
+
window.addEventListener('triggerAgent', handleTriggerAgent);
|
|
39788
|
+
window.addEventListener('clearChartState', handleClearChartState);
|
|
39789
|
+
return () => {
|
|
39790
|
+
window.removeEventListener('triggerAgent', handleTriggerAgent);
|
|
39791
|
+
window.removeEventListener('clearChartState', handleClearChartState);
|
|
39792
|
+
};
|
|
39793
|
+
}, [widget.id, appendMessage, setChartState, startLoadingTimeout]);
|
|
39794
|
+
return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) &&
|
|
39795
|
+
(!((_j = (_h = (_g = chartState.series_bar_chart_data) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.labels) === null || _j === void 0 ? void 0 : _j.length) || !((_m = (_l = (_k = chartState.series_bar_chart_data) === null || _k === void 0 ? void 0 : _k.data) === null || _l === void 0 ? void 0 : _l.series) === null || _m === void 0 ? void 0 : _m.length))
|
|
39796
|
+
? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : (jsxRuntimeExports.jsx(SeriesBarChartComponent$1, { orientation: orientation, seriesBarChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_o = widget.config) === null || _o === void 0 ? void 0 : _o.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, hasWidgetData: !!(((_q = (_p = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _p === void 0 ? void 0 : _p.labels) === null || _q === void 0 ? void 0 : _q.length) && ((_s = (_r = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _r === void 0 ? void 0 : _r.series) === null || _s === void 0 ? void 0 : _s.length)) })) })] }));
|
|
39797
|
+
}
|
|
39798
|
+
function SeriesBarChartWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
|
|
39799
|
+
var _a, _b;
|
|
39800
|
+
const styles = getStyleValues$2((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
39801
|
+
const getRuntimeUrl = () => {
|
|
39802
|
+
var _a;
|
|
39803
|
+
const baseUrl = widgetBackendUrl || '';
|
|
39804
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
|
|
39805
|
+
return `${baseUrl}/api/copilot/${agentName}`;
|
|
39806
|
+
};
|
|
39807
|
+
return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitSeriesBarChart$1, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }));
|
|
39808
|
+
}
|
|
39809
|
+
|
|
39810
|
+
const CHART_REFRESH_TIMEOUT$1 = 3000;
|
|
39811
|
+
const DEFAULT_COLORS = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
|
|
39812
|
+
const clearChat$1 = async (widgetBackendUrl, widgetId) => {
|
|
39813
|
+
if (!widgetBackendUrl || !widgetId)
|
|
39814
|
+
return;
|
|
39815
|
+
console.log('clearChat called for widgetId:', widgetId);
|
|
39816
|
+
try {
|
|
39817
|
+
await fetch(`${widgetBackendUrl}/api/clear-chat`, {
|
|
39818
|
+
method: 'POST',
|
|
39819
|
+
headers: {
|
|
39820
|
+
'Content-Type': 'application/json',
|
|
39821
|
+
},
|
|
39822
|
+
body: JSON.stringify({
|
|
39823
|
+
session_id: widgetId,
|
|
39824
|
+
delete_state: true
|
|
39825
|
+
}),
|
|
39826
|
+
});
|
|
39827
|
+
console.log('Dispatching clearChartState event from clearChat for widgetId:', widgetId);
|
|
39828
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
39829
|
+
}
|
|
39830
|
+
catch (error) {
|
|
39831
|
+
console.error('Failed to clear chat:', error);
|
|
39832
|
+
}
|
|
39833
|
+
};
|
|
39834
|
+
const createLoadingComponent$1 = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
|
|
39835
|
+
const createInitialChartState$1 = (datasetId, seriesBarChartState) => {
|
|
39836
|
+
return {
|
|
39837
|
+
series_bar_chart_data: {
|
|
39838
|
+
title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.title) || "",
|
|
39839
|
+
type: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.type) || "series_bar",
|
|
39840
|
+
chart_type: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.chart_type) || "financial",
|
|
39841
|
+
x_axis_title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.x_axis_title) || "",
|
|
39842
|
+
y_axis_title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.y_axis_title) || "",
|
|
39843
|
+
orientation: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.orientation) || "vertical",
|
|
39844
|
+
units: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.units) || "",
|
|
39845
|
+
data: {
|
|
39846
|
+
labels: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.labels) || [],
|
|
39847
|
+
series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.series) || [],
|
|
39848
|
+
total: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.total) || 0,
|
|
39849
|
+
average: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.average) || 0
|
|
39850
|
+
},
|
|
39851
|
+
metadata: {
|
|
39852
|
+
categories: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.categories) || 0,
|
|
39853
|
+
series_count: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_count) || 0,
|
|
39854
|
+
highest_category: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_category) || "",
|
|
39855
|
+
highest_value: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_value) || 0,
|
|
39856
|
+
highest_series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_series) || "",
|
|
39857
|
+
lowest_category: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_category) || "",
|
|
39858
|
+
lowest_value: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_value) || 0,
|
|
39859
|
+
lowest_series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_series) || "",
|
|
39860
|
+
range: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.range) || 0,
|
|
39861
|
+
series_totals: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_totals) || {},
|
|
39862
|
+
series_averages: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_averages) || {}
|
|
39863
|
+
}
|
|
39864
|
+
},
|
|
39865
|
+
dataset_id: datasetId || "home_generation_dataset"
|
|
39866
|
+
};
|
|
39867
|
+
};
|
|
39868
|
+
const loadAgentState$1 = async (widgetBackendUrl, threadId, agentName) => {
|
|
39869
|
+
try {
|
|
39870
|
+
const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
|
|
39871
|
+
method: 'POST',
|
|
39872
|
+
headers: {
|
|
39873
|
+
'Content-Type': 'application/json',
|
|
39874
|
+
},
|
|
39875
|
+
body: JSON.stringify({
|
|
39876
|
+
"operationName": "loadAgentState",
|
|
39877
|
+
"query": "query loadAgentState($data: LoadAgentStateInput!) {\n loadAgentState(data: $data) {\n threadId\n threadExists\n state\n messages\n __typename\n }\n}",
|
|
39878
|
+
"variables": {
|
|
39879
|
+
"data": {
|
|
39880
|
+
"agentName": agentName,
|
|
39881
|
+
"threadId": threadId
|
|
39882
|
+
}
|
|
39883
|
+
}
|
|
39884
|
+
}),
|
|
39885
|
+
});
|
|
39886
|
+
if (!response.ok) {
|
|
39887
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
39888
|
+
}
|
|
39889
|
+
const result = await response.json();
|
|
39890
|
+
return result;
|
|
39891
|
+
}
|
|
39892
|
+
catch (error) {
|
|
39893
|
+
console.error('Failed to load agent state:', error);
|
|
39894
|
+
return null;
|
|
39895
|
+
}
|
|
39896
|
+
};
|
|
39897
|
+
const parseAndUpdateChartState$1 = (apiResponse, setChartState) => {
|
|
39898
|
+
var _a, _b;
|
|
39899
|
+
try {
|
|
39900
|
+
if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
|
|
39901
|
+
const stateString = apiResponse.data.loadAgentState.state;
|
|
39902
|
+
const parsedState = JSON.parse(stateString);
|
|
39903
|
+
if (parsedState.state) {
|
|
39904
|
+
const chartData = parsedState.state;
|
|
39905
|
+
setChartState((prevState) => {
|
|
39906
|
+
const newChartState = Object.assign({}, prevState);
|
|
39907
|
+
if (chartData.series_bar_chart_data) {
|
|
39908
|
+
newChartState.series_bar_chart_data = chartData.series_bar_chart_data;
|
|
39909
|
+
}
|
|
39910
|
+
if (chartData.agent_message) {
|
|
39911
|
+
newChartState.agent_message = chartData.agent_message;
|
|
39912
|
+
}
|
|
39913
|
+
return newChartState;
|
|
39914
|
+
});
|
|
39915
|
+
}
|
|
39916
|
+
}
|
|
39917
|
+
}
|
|
39918
|
+
catch (error) {
|
|
39919
|
+
console.error('Failed to parse and update chart state:', error);
|
|
39920
|
+
}
|
|
39921
|
+
};
|
|
39922
|
+
const getStyleValues$1 = (styles = {}) => {
|
|
39923
|
+
const borderRadiusMap = {
|
|
39924
|
+
none: "0px",
|
|
39925
|
+
rounded: "0.375rem",
|
|
39926
|
+
large: "0.5rem",
|
|
39927
|
+
"extra-large": "0.75rem",
|
|
39928
|
+
};
|
|
39929
|
+
const paddingMap = {
|
|
39930
|
+
small: "0.5rem",
|
|
39931
|
+
medium: "1rem",
|
|
39932
|
+
large: "1.5rem",
|
|
39933
|
+
"extra-large": "2rem",
|
|
39934
|
+
};
|
|
39935
|
+
const alignment = styles.alignment || "left";
|
|
39936
|
+
return {
|
|
39937
|
+
backgroundColor: styles.backgroundColor || "#ffffff",
|
|
39938
|
+
borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
|
|
39939
|
+
padding: paddingMap[styles.padding || "medium"],
|
|
39940
|
+
color: styles.textColor || "#000000",
|
|
39941
|
+
fontSize: styles.fontSize || "14px",
|
|
39942
|
+
textAlign: alignment,
|
|
39943
|
+
};
|
|
39944
|
+
};
|
|
39945
|
+
function SeriesBarChartComponent({ orientation, seriesBarChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content, hasWidgetData }) {
|
|
39946
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
39947
|
+
const hasCalledRef = useRef(false);
|
|
39948
|
+
const labels = ((_b = (_a = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || [];
|
|
39949
|
+
const series = ((_d = (_c = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.series) || [];
|
|
39950
|
+
const chartTitle = ((_e = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _e === void 0 ? void 0 : _e.title) || "";
|
|
39951
|
+
const units = ((_f = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _f === void 0 ? void 0 : _f.units) || "";
|
|
39952
|
+
const x_axis_title = ((_g = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _g === void 0 ? void 0 : _g.x_axis_title) || "";
|
|
39953
|
+
const y_axis_title = ((_h = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _h === void 0 ? void 0 : _h.y_axis_title) || "";
|
|
39954
|
+
const isEmpty = labels.length === 0 || series.length === 0;
|
|
39955
|
+
const handleRefresh = async () => {
|
|
39956
|
+
if (query) {
|
|
39957
|
+
await clearChat$1(widgetBackendUrl, widgetId);
|
|
39958
|
+
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
39959
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
39960
|
+
appendMessage(new TextMessage({
|
|
39961
|
+
content: `${query} and render data on a series bar chart`,
|
|
39962
|
+
role: Role.User,
|
|
39963
|
+
}));
|
|
39964
|
+
}
|
|
39965
|
+
};
|
|
39966
|
+
useEffect(() => {
|
|
39967
|
+
if (isEmpty && query && isFirstLoad && !(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message) && !hasCalledRef.current) {
|
|
39968
|
+
hasCalledRef.current = true;
|
|
39969
|
+
handleRefresh();
|
|
39970
|
+
}
|
|
39971
|
+
}, [isEmpty, query, isFirstLoad, seriesBarChartState]);
|
|
39972
|
+
useEffect(() => {
|
|
39973
|
+
console.log('SeriesBarChartComponent useEffect - isEmpty:', isEmpty, 'hasMessage:', !!(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message), 'hasWidgetData:', hasWidgetData, 'isFirstLoad:', isFirstLoad);
|
|
39974
|
+
if (isEmpty && startLoadingTimeout && !(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message)) {
|
|
39975
|
+
console.log('Starting loading timeout from SeriesBarChartComponent useEffect');
|
|
39976
|
+
startLoadingTimeout();
|
|
39977
|
+
}
|
|
39978
|
+
else if (!isEmpty && clearLoadingTimeout) {
|
|
39979
|
+
clearLoadingTimeout();
|
|
39980
|
+
}
|
|
39981
|
+
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout, seriesBarChartState]);
|
|
39982
|
+
const finalColors = useMemo(() => {
|
|
39983
|
+
return shuffleColors(DEFAULT_COLORS, series.length);
|
|
39984
|
+
}, [series.length]);
|
|
39985
|
+
if (isEmpty) {
|
|
39986
|
+
return createLoadingComponent$1();
|
|
39987
|
+
}
|
|
39988
|
+
const transformedData = {
|
|
39989
|
+
labels: labels,
|
|
39990
|
+
datasets: series.map((seriesItem, index) => ({
|
|
39991
|
+
label: seriesItem.name,
|
|
39992
|
+
data: seriesItem.values,
|
|
39993
|
+
backgroundColor: (seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.colors) || (seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.color) || finalColors[index % finalColors.length],
|
|
39994
|
+
})),
|
|
39995
|
+
};
|
|
39996
|
+
return (jsxRuntimeExports.jsx(SeriesLineChart, { orientation: orientation, title: chartTitle, data: transformedData, units: units, content: content, x_axis_title: x_axis_title, y_axis_title: y_axis_title }));
|
|
39997
|
+
}
|
|
39998
|
+
function CopilotKitSeriesBarChart({ widget, showHeader, styles, onResetReady, widgetBackendUrl, datasetId, widgetData, }) {
|
|
39999
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
40000
|
+
const orientation = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.orientation) || "vertical";
|
|
40001
|
+
const isFirstLoad = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.isFirstLoad;
|
|
40002
|
+
const content = (_c = widget.config) === null || _c === void 0 ? void 0 : _c.content;
|
|
40003
|
+
const widget_data = (_d = widget.widget_data) === null || _d === void 0 ? void 0 : _d.series_bar_chart_data;
|
|
40004
|
+
console.log('widget_data===>', widget_data);
|
|
40005
|
+
const { threadId, setThreadId } = useCopilotContext();
|
|
40006
|
+
const timeoutRef = useRef(null);
|
|
40007
|
+
const [apiCallCount, setApiCallCount] = useState(0);
|
|
40008
|
+
const [hasTimeoutError, setHasTimeoutError] = useState(false);
|
|
40009
|
+
useEffect(() => {
|
|
40010
|
+
setThreadId(widget.id);
|
|
40011
|
+
}, [widget.id, setThreadId]);
|
|
40012
|
+
const { state: agentState, setState: setAgentState } = useCoAgent({
|
|
40013
|
+
name: (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName,
|
|
40014
|
+
initialState: createInitialChartState$1(datasetId, widget_data),
|
|
40015
|
+
});
|
|
40016
|
+
const [chartState, setChartState] = useState(createInitialChartState$1(datasetId, widget_data));
|
|
40017
|
+
const handleLoadingTimeout = useCallback(async () => {
|
|
40018
|
+
var _a;
|
|
40019
|
+
if (!widgetBackendUrl || !widget.id || (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) || hasTimeoutError) {
|
|
40020
|
+
console.log('Skipping API call - conditions not met');
|
|
40021
|
+
return;
|
|
40022
|
+
}
|
|
40023
|
+
console.log('Loading timeout triggered for widget:', widget.id, 'API call count:', apiCallCount);
|
|
40024
|
+
if (apiCallCount >= 30) {
|
|
40025
|
+
console.log('API call limit reached for widget:', widget.id);
|
|
40026
|
+
setHasTimeoutError(true);
|
|
40027
|
+
setChartState(prevState => (Object.assign(Object.assign({}, prevState), { agent_message: "Timeout: Unable to load data after multiple attempts. Please try refreshing the widget." })));
|
|
40028
|
+
return;
|
|
40029
|
+
}
|
|
40030
|
+
setApiCallCount(prev => prev + 1);
|
|
40031
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
|
|
40032
|
+
console.log('Calling loadAgentState API for widget:', widget.id);
|
|
40033
|
+
const apiResponse = await loadAgentState$1(widgetBackendUrl, widget.id, agentName);
|
|
40034
|
+
console.log('API response received:', apiResponse);
|
|
40035
|
+
if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
|
|
40036
|
+
parseAndUpdateChartState$1(apiResponse, setChartState);
|
|
40037
|
+
}
|
|
40038
|
+
}, [widgetBackendUrl, widget.id, setChartState, (_f = widget.config) === null || _f === void 0 ? void 0 : _f.agentName, chartState, apiCallCount, hasTimeoutError]);
|
|
40039
|
+
const startLoadingTimeout = useCallback(() => {
|
|
40040
|
+
if (timeoutRef.current) {
|
|
40041
|
+
clearTimeout(timeoutRef.current);
|
|
40042
|
+
}
|
|
40043
|
+
console.log('Scheduling next API call in 3 seconds');
|
|
40044
|
+
timeoutRef.current = setTimeout(() => {
|
|
40045
|
+
handleLoadingTimeout();
|
|
40046
|
+
}, CHART_REFRESH_TIMEOUT$1);
|
|
40047
|
+
}, [handleLoadingTimeout]);
|
|
40048
|
+
const clearLoadingTimeout = useCallback(() => {
|
|
40049
|
+
if (timeoutRef.current) {
|
|
40050
|
+
clearTimeout(timeoutRef.current);
|
|
40051
|
+
timeoutRef.current = null;
|
|
40052
|
+
}
|
|
40053
|
+
}, []);
|
|
40054
|
+
useEffect(() => {
|
|
40055
|
+
return () => {
|
|
40056
|
+
if (timeoutRef.current) {
|
|
40057
|
+
clearTimeout(timeoutRef.current);
|
|
40058
|
+
}
|
|
40059
|
+
};
|
|
40060
|
+
}, []);
|
|
40061
|
+
const { appendMessage, reset } = useCopilotChat();
|
|
40062
|
+
useEffect(() => {
|
|
40063
|
+
if (onResetReady && reset && widget.id) {
|
|
40064
|
+
const wrappedReset = () => {
|
|
40065
|
+
reset();
|
|
40066
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
|
|
40067
|
+
};
|
|
40068
|
+
onResetReady(widget.id, wrappedReset);
|
|
40069
|
+
}
|
|
40070
|
+
}, [reset, widget.id, onResetReady]);
|
|
40071
|
+
useEffect(() => {
|
|
40072
|
+
const handleTriggerAgent = (event) => {
|
|
40073
|
+
const { widgetId, query, agentType: eventAgentType, datasetId } = event.detail;
|
|
40074
|
+
if (widgetId === widget.id) {
|
|
40075
|
+
let messageContent = `${query} and render data on a series bar chart`;
|
|
40076
|
+
reset();
|
|
40077
|
+
console.log('triggering to datasetId==>', datasetId);
|
|
40078
|
+
setChartState(createInitialChartState$1(datasetId));
|
|
40079
|
+
setAgentState(createInitialChartState$1(datasetId));
|
|
40080
|
+
setApiCallCount(0);
|
|
40081
|
+
setHasTimeoutError(false);
|
|
40082
|
+
appendMessage(new TextMessage({
|
|
40083
|
+
content: messageContent,
|
|
40084
|
+
role: Role.User,
|
|
40085
|
+
}));
|
|
40086
|
+
// Start polling for chart data
|
|
40087
|
+
startLoadingTimeout();
|
|
40088
|
+
}
|
|
40089
|
+
};
|
|
40090
|
+
const handleClearChartState = (event) => {
|
|
40091
|
+
const { widgetId } = event.detail;
|
|
40092
|
+
if (widgetId === widget.id) {
|
|
40093
|
+
setChartState(createInitialChartState$1(datasetId));
|
|
40094
|
+
setAgentState(createInitialChartState$1(datasetId));
|
|
40095
|
+
setApiCallCount(0);
|
|
40096
|
+
setHasTimeoutError(false);
|
|
40097
|
+
}
|
|
40098
|
+
};
|
|
40099
|
+
window.addEventListener('triggerAgent', handleTriggerAgent);
|
|
40100
|
+
window.addEventListener('clearChartState', handleClearChartState);
|
|
40101
|
+
return () => {
|
|
40102
|
+
window.removeEventListener('triggerAgent', handleTriggerAgent);
|
|
40103
|
+
window.removeEventListener('clearChartState', handleClearChartState);
|
|
40104
|
+
};
|
|
40105
|
+
}, [widget.id, appendMessage, setChartState, startLoadingTimeout]);
|
|
40106
|
+
return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) &&
|
|
40107
|
+
(!((_j = (_h = (_g = chartState.series_bar_chart_data) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.labels) === null || _j === void 0 ? void 0 : _j.length) || !((_m = (_l = (_k = chartState.series_bar_chart_data) === null || _k === void 0 ? void 0 : _k.data) === null || _l === void 0 ? void 0 : _l.series) === null || _m === void 0 ? void 0 : _m.length))
|
|
40108
|
+
? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : (jsxRuntimeExports.jsx(SeriesBarChartComponent, { orientation: orientation, seriesBarChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_o = widget.config) === null || _o === void 0 ? void 0 : _o.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, hasWidgetData: !!(((_q = (_p = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _p === void 0 ? void 0 : _p.labels) === null || _q === void 0 ? void 0 : _q.length) && ((_s = (_r = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _r === void 0 ? void 0 : _r.series) === null || _s === void 0 ? void 0 : _s.length)) })) })] }));
|
|
40109
|
+
}
|
|
40110
|
+
function SeriesLineChartWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
|
|
40111
|
+
var _a, _b;
|
|
40112
|
+
const styles = getStyleValues$1((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
40113
|
+
const getRuntimeUrl = () => {
|
|
40114
|
+
var _a;
|
|
40115
|
+
const baseUrl = widgetBackendUrl || '';
|
|
40116
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
|
|
40117
|
+
return `${baseUrl}/api/copilot/${agentName}`;
|
|
40118
|
+
};
|
|
40119
|
+
return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitSeriesBarChart, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }));
|
|
40120
|
+
}
|
|
40121
|
+
|
|
40122
|
+
const CHART_REFRESH_TIMEOUT = 3000;
|
|
40123
|
+
const clearChat = async (widgetBackendUrl, widgetId) => {
|
|
40124
|
+
if (!widgetBackendUrl || !widgetId)
|
|
40125
|
+
return;
|
|
40126
|
+
console.log('clearChat called for widgetId:', widgetId);
|
|
40127
|
+
try {
|
|
40128
|
+
await fetch(`${widgetBackendUrl}/api/clear-chat`, {
|
|
40129
|
+
method: 'POST',
|
|
40130
|
+
headers: {
|
|
40131
|
+
'Content-Type': 'application/json',
|
|
40132
|
+
},
|
|
40133
|
+
body: JSON.stringify({
|
|
40134
|
+
session_id: widgetId,
|
|
40135
|
+
delete_state: true
|
|
40136
|
+
}),
|
|
40137
|
+
});
|
|
40138
|
+
console.log('Dispatching clearChartState event from clearChat for widgetId:', widgetId);
|
|
40139
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
40140
|
+
}
|
|
40141
|
+
catch (error) {
|
|
40142
|
+
console.error('Failed to clear chat:', error);
|
|
40143
|
+
}
|
|
40144
|
+
};
|
|
40145
|
+
const createLoadingComponent = (message = "Loading table data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
|
|
40146
|
+
const createInitialChartState = (datasetId, dataGridState) => {
|
|
40147
|
+
return {
|
|
40148
|
+
matrix_grid_data: {
|
|
40149
|
+
title: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.title) || "",
|
|
40150
|
+
type: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.type) || "data_grid",
|
|
40151
|
+
grid_type: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.grid_type) || "",
|
|
40152
|
+
grouped: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.grouped) || false,
|
|
40153
|
+
data: {
|
|
40154
|
+
headers: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.headers) || [],
|
|
40155
|
+
units: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.units) || [],
|
|
40156
|
+
rows: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.rows) || [],
|
|
40157
|
+
row_count: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.row_count) || 0,
|
|
40158
|
+
column_count: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.column_count) || 0
|
|
40159
|
+
},
|
|
40160
|
+
metadata: {
|
|
40161
|
+
total_rows: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.metadata.total_rows) || 0,
|
|
40162
|
+
total_columns: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.metadata.total_columns) || 0,
|
|
40163
|
+
numeric_columns: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.metadata.numeric_columns) || []
|
|
40164
|
+
}
|
|
40165
|
+
},
|
|
40166
|
+
dataset_id: datasetId || "home_generation_dataset"
|
|
40167
|
+
};
|
|
40168
|
+
};
|
|
40169
|
+
const loadAgentState = async (widgetBackendUrl, threadId, agentName) => {
|
|
40170
|
+
try {
|
|
40171
|
+
const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
|
|
40172
|
+
method: 'POST',
|
|
40173
|
+
headers: {
|
|
40174
|
+
'Content-Type': 'application/json',
|
|
40175
|
+
},
|
|
40176
|
+
body: JSON.stringify({
|
|
40177
|
+
"operationName": "loadAgentState",
|
|
40178
|
+
"query": "query loadAgentState($data: LoadAgentStateInput!) {\n loadAgentState(data: $data) {\n threadId\n threadExists\n state\n messages\n __typename\n }\n}",
|
|
40179
|
+
"variables": {
|
|
40180
|
+
"data": {
|
|
40181
|
+
"agentName": agentName,
|
|
40182
|
+
"threadId": threadId
|
|
40183
|
+
}
|
|
40184
|
+
}
|
|
40185
|
+
}),
|
|
40186
|
+
});
|
|
40187
|
+
if (!response.ok) {
|
|
40188
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
40189
|
+
}
|
|
40190
|
+
const result = await response.json();
|
|
40191
|
+
return result;
|
|
40192
|
+
}
|
|
40193
|
+
catch (error) {
|
|
40194
|
+
console.error('Failed to load agent state:', error);
|
|
40195
|
+
return null;
|
|
40196
|
+
}
|
|
40197
|
+
};
|
|
40198
|
+
const parseAndUpdateChartState = (apiResponse, setChartState) => {
|
|
40199
|
+
var _a, _b;
|
|
40200
|
+
try {
|
|
40201
|
+
if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
|
|
40202
|
+
const stateString = apiResponse.data.loadAgentState.state;
|
|
40203
|
+
const parsedState = JSON.parse(stateString);
|
|
40204
|
+
if (parsedState.state) {
|
|
40205
|
+
const chartData = parsedState.state;
|
|
40206
|
+
setChartState((prevState) => {
|
|
40207
|
+
const newChartState = Object.assign({}, prevState);
|
|
40208
|
+
if (chartData.matrix_grid_data) {
|
|
40209
|
+
newChartState.matrix_grid_data = chartData.matrix_grid_data;
|
|
40210
|
+
}
|
|
40211
|
+
if (chartData.agent_message) {
|
|
40212
|
+
newChartState.agent_message = chartData.agent_message;
|
|
40213
|
+
}
|
|
40214
|
+
return newChartState;
|
|
40215
|
+
});
|
|
40216
|
+
}
|
|
40217
|
+
}
|
|
40218
|
+
}
|
|
40219
|
+
catch (error) {
|
|
40220
|
+
console.error('Failed to parse and update chart state:', error);
|
|
40221
|
+
}
|
|
40222
|
+
};
|
|
40223
|
+
const getStyleValues = (styles = {}) => {
|
|
40224
|
+
const borderRadiusMap = {
|
|
40225
|
+
none: "0px",
|
|
40226
|
+
rounded: "0.375rem",
|
|
40227
|
+
large: "0.5rem",
|
|
40228
|
+
"extra-large": "0.75rem",
|
|
40229
|
+
};
|
|
40230
|
+
const paddingMap = {
|
|
40231
|
+
small: "0.5rem",
|
|
40232
|
+
medium: "1rem",
|
|
40233
|
+
large: "1.5rem",
|
|
40234
|
+
"extra-large": "2rem",
|
|
40235
|
+
};
|
|
40236
|
+
const alignment = styles.alignment || "left";
|
|
40237
|
+
return {
|
|
40238
|
+
backgroundColor: styles.backgroundColor || "#ffffff",
|
|
40239
|
+
borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
|
|
40240
|
+
padding: paddingMap[styles.padding || "medium"],
|
|
40241
|
+
color: styles.textColor || "#000000",
|
|
40242
|
+
fontSize: styles.fontSize || "14px",
|
|
40243
|
+
textAlign: alignment,
|
|
40244
|
+
};
|
|
40245
|
+
};
|
|
40246
|
+
function DataGridComponent({ dataGridState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content, hasWidgetData }) {
|
|
40247
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
40248
|
+
const hasCalledRef = useRef(false);
|
|
40249
|
+
const columns = ((_b = (_a = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.headers) || [];
|
|
40250
|
+
const rows = ((_d = (_c = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.rows) || [];
|
|
40251
|
+
const gridTitle = ((_e = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _e === void 0 ? void 0 : _e.title) || "";
|
|
40252
|
+
const units = ((_g = (_f = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.units) || [];
|
|
40253
|
+
const isEmpty = columns.length === 0 || rows.length === 0;
|
|
40254
|
+
const handleRefresh = async () => {
|
|
40255
|
+
if (query) {
|
|
40256
|
+
await clearChat(widgetBackendUrl, widgetId);
|
|
40257
|
+
console.log('Dispatching clearChartState event for widgetId:', widgetId);
|
|
40258
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
|
|
40259
|
+
appendMessage(new TextMessage({
|
|
40260
|
+
content: `${query} and render data in a data grid table`,
|
|
40261
|
+
role: Role.User,
|
|
40262
|
+
}));
|
|
40263
|
+
}
|
|
40264
|
+
};
|
|
40265
|
+
useEffect(() => {
|
|
40266
|
+
if (isEmpty && query && isFirstLoad && !(dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.agent_message) && !hasCalledRef.current) {
|
|
40267
|
+
hasCalledRef.current = true;
|
|
40268
|
+
handleRefresh();
|
|
40269
|
+
}
|
|
40270
|
+
}, [isEmpty, query, isFirstLoad, dataGridState]);
|
|
40271
|
+
useEffect(() => {
|
|
40272
|
+
console.log('DataGridComponent useEffect - isEmpty:', isEmpty, 'hasMessage:', !!(dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.agent_message), 'hasWidgetData:', hasWidgetData, 'isFirstLoad:', isFirstLoad);
|
|
40273
|
+
if (isEmpty && startLoadingTimeout && !(dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.agent_message)) {
|
|
40274
|
+
console.log('Starting loading timeout from DataGridComponent useEffect');
|
|
40275
|
+
startLoadingTimeout();
|
|
40276
|
+
}
|
|
40277
|
+
else if (!isEmpty && clearLoadingTimeout) {
|
|
40278
|
+
clearLoadingTimeout();
|
|
40279
|
+
}
|
|
40280
|
+
}, [isEmpty, startLoadingTimeout, clearLoadingTimeout, dataGridState]);
|
|
40281
|
+
if (isEmpty) {
|
|
40282
|
+
return createLoadingComponent();
|
|
40283
|
+
}
|
|
40284
|
+
const transformedData = {
|
|
40285
|
+
columns: columns,
|
|
40286
|
+
units: units,
|
|
40287
|
+
rows: rows,
|
|
40288
|
+
grouped: ((_h = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _h === void 0 ? void 0 : _h.grouped) || false,
|
|
40289
|
+
grouping: (_j = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _j === void 0 ? void 0 : _j.grouping
|
|
40290
|
+
};
|
|
40291
|
+
return (jsxRuntimeExports.jsx(DataGrid, { title: gridTitle, data: transformedData, className: "" }));
|
|
40292
|
+
}
|
|
40293
|
+
function CopilotKitDataGrid({ widget, showHeader, styles, onResetReady, widgetBackendUrl, datasetId, widgetData, }) {
|
|
40294
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
40295
|
+
const isFirstLoad = (_a = widget.config) === null || _a === void 0 ? void 0 : _a.isFirstLoad;
|
|
40296
|
+
const content = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.content;
|
|
40297
|
+
const widget_data = (_c = widget.widget_data) === null || _c === void 0 ? void 0 : _c.matrix_grid_data;
|
|
40298
|
+
console.log('widget_data===>', widget_data);
|
|
40299
|
+
const { threadId, setThreadId } = useCopilotContext();
|
|
40300
|
+
const timeoutRef = useRef(null);
|
|
40301
|
+
const [apiCallCount, setApiCallCount] = useState(0);
|
|
40302
|
+
const [hasTimeoutError, setHasTimeoutError] = useState(false);
|
|
40303
|
+
useEffect(() => {
|
|
40304
|
+
setThreadId(widget.id);
|
|
40305
|
+
}, [widget.id, setThreadId]);
|
|
40306
|
+
const { state: agentState, setState: setAgentState } = useCoAgent({
|
|
40307
|
+
name: (_d = widget.config) === null || _d === void 0 ? void 0 : _d.agentName,
|
|
40308
|
+
initialState: createInitialChartState(datasetId, widget_data),
|
|
40309
|
+
});
|
|
40310
|
+
const [chartState, setChartState] = useState(createInitialChartState(datasetId, widget_data));
|
|
40311
|
+
const handleLoadingTimeout = useCallback(async () => {
|
|
40312
|
+
var _a;
|
|
40313
|
+
if (!widgetBackendUrl || !widget.id || (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) || hasTimeoutError) {
|
|
40314
|
+
console.log('Skipping API call - conditions not met');
|
|
40315
|
+
return;
|
|
40316
|
+
}
|
|
40317
|
+
console.log('Loading timeout triggered for widget:', widget.id, 'API call count:', apiCallCount);
|
|
40318
|
+
if (apiCallCount >= 30) {
|
|
40319
|
+
console.log('API call limit reached for widget:', widget.id);
|
|
40320
|
+
setHasTimeoutError(true);
|
|
40321
|
+
setChartState(prevState => (Object.assign(Object.assign({}, prevState), { agent_message: "Timeout: Unable to load data after multiple attempts. Please try refreshing the widget." })));
|
|
40322
|
+
return;
|
|
40323
|
+
}
|
|
40324
|
+
setApiCallCount(prev => prev + 1);
|
|
40325
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
|
|
40326
|
+
console.log('Calling loadAgentState API for widget:', widget.id);
|
|
40327
|
+
const apiResponse = await loadAgentState(widgetBackendUrl, widget.id, agentName);
|
|
40328
|
+
console.log('API response received:', apiResponse);
|
|
40329
|
+
if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
|
|
40330
|
+
parseAndUpdateChartState(apiResponse, setChartState);
|
|
40331
|
+
}
|
|
40332
|
+
}, [widgetBackendUrl, widget.id, setChartState, (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName, chartState, apiCallCount, hasTimeoutError]);
|
|
40333
|
+
const startLoadingTimeout = useCallback(() => {
|
|
40334
|
+
if (timeoutRef.current) {
|
|
40335
|
+
clearTimeout(timeoutRef.current);
|
|
40336
|
+
}
|
|
40337
|
+
console.log('Scheduling next API call in 3 seconds');
|
|
40338
|
+
timeoutRef.current = setTimeout(() => {
|
|
40339
|
+
handleLoadingTimeout();
|
|
40340
|
+
}, CHART_REFRESH_TIMEOUT);
|
|
40341
|
+
}, [handleLoadingTimeout]);
|
|
40342
|
+
const clearLoadingTimeout = useCallback(() => {
|
|
40343
|
+
if (timeoutRef.current) {
|
|
40344
|
+
clearTimeout(timeoutRef.current);
|
|
40345
|
+
timeoutRef.current = null;
|
|
40346
|
+
}
|
|
40347
|
+
}, []);
|
|
40348
|
+
useEffect(() => {
|
|
40349
|
+
return () => {
|
|
40350
|
+
if (timeoutRef.current) {
|
|
40351
|
+
clearTimeout(timeoutRef.current);
|
|
40352
|
+
}
|
|
40353
|
+
};
|
|
40354
|
+
}, []);
|
|
40355
|
+
const { appendMessage, reset } = useCopilotChat();
|
|
40356
|
+
useEffect(() => {
|
|
40357
|
+
if (onResetReady && reset && widget.id) {
|
|
40358
|
+
const wrappedReset = () => {
|
|
40359
|
+
reset();
|
|
40360
|
+
window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
|
|
40361
|
+
};
|
|
40362
|
+
onResetReady(widget.id, wrappedReset);
|
|
40363
|
+
}
|
|
40364
|
+
}, [reset, widget.id, onResetReady]);
|
|
40365
|
+
useEffect(() => {
|
|
40366
|
+
const handleTriggerAgent = (event) => {
|
|
40367
|
+
const { widgetId, query, agentType: eventAgentType, datasetId } = event.detail;
|
|
40368
|
+
reset();
|
|
40369
|
+
if (widgetId === widget.id) {
|
|
40370
|
+
let messageContent = `${query} and render data in a data grid table`;
|
|
40371
|
+
console.log('triggering to datasetId==>', datasetId);
|
|
40372
|
+
setChartState(createInitialChartState(datasetId));
|
|
40373
|
+
setAgentState(createInitialChartState(datasetId));
|
|
40374
|
+
setApiCallCount(0);
|
|
40375
|
+
setHasTimeoutError(false);
|
|
40376
|
+
appendMessage(new TextMessage({
|
|
40377
|
+
content: messageContent,
|
|
40378
|
+
role: Role.User,
|
|
40379
|
+
}));
|
|
40380
|
+
// Start polling for chart data
|
|
40381
|
+
startLoadingTimeout();
|
|
40382
|
+
}
|
|
40383
|
+
};
|
|
40384
|
+
const handleClearChartState = (event) => {
|
|
40385
|
+
const { widgetId } = event.detail;
|
|
40386
|
+
if (widgetId === widget.id) {
|
|
40387
|
+
setChartState(createInitialChartState(datasetId));
|
|
40388
|
+
setAgentState(createInitialChartState(datasetId));
|
|
40389
|
+
setApiCallCount(0);
|
|
40390
|
+
setHasTimeoutError(false);
|
|
40391
|
+
}
|
|
40392
|
+
};
|
|
40393
|
+
window.addEventListener('triggerAgent', handleTriggerAgent);
|
|
40394
|
+
window.addEventListener('clearChartState', handleClearChartState);
|
|
40395
|
+
return () => {
|
|
40396
|
+
window.removeEventListener('triggerAgent', handleTriggerAgent);
|
|
40397
|
+
window.removeEventListener('clearChartState', handleClearChartState);
|
|
40398
|
+
};
|
|
40399
|
+
}, [widget.id, appendMessage, setChartState, startLoadingTimeout]);
|
|
40400
|
+
return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) &&
|
|
40401
|
+
(!((_h = (_g = (_f = chartState.matrix_grid_data) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.headers) === null || _h === void 0 ? void 0 : _h.length) || !((_l = (_k = (_j = chartState.matrix_grid_data) === null || _j === void 0 ? void 0 : _j.data) === null || _k === void 0 ? void 0 : _k.rows) === null || _l === void 0 ? void 0 : _l.length))
|
|
40402
|
+
? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : (jsxRuntimeExports.jsx(DataGridComponent, { dataGridState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_m = widget.config) === null || _m === void 0 ? void 0 : _m.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, hasWidgetData: !!(((_p = (_o = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _o === void 0 ? void 0 : _o.headers) === null || _p === void 0 ? void 0 : _p.length) && ((_r = (_q = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _q === void 0 ? void 0 : _q.rows) === null || _r === void 0 ? void 0 : _r.length)) })) })] }));
|
|
40403
|
+
}
|
|
40404
|
+
function DatagridWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
|
|
40405
|
+
var _a, _b;
|
|
40406
|
+
const styles = getStyleValues((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
|
|
40407
|
+
const getRuntimeUrl = () => {
|
|
40408
|
+
var _a;
|
|
40409
|
+
const baseUrl = widgetBackendUrl || '';
|
|
40410
|
+
const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
|
|
40411
|
+
return `${baseUrl}/api/copilot/${agentName}`;
|
|
40412
|
+
};
|
|
40413
|
+
return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitDataGrid, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }));
|
|
40414
|
+
}
|
|
40415
|
+
|
|
40416
|
+
function WidgetRenderer({ widget, isTemplate = false, onConfigUpdate, widgetBackendUrl, onResetReady, widgetIds, datasetId, }) {
|
|
40417
|
+
const handleConfigUpdate = (config) => {
|
|
40418
|
+
if (onConfigUpdate) {
|
|
40419
|
+
onConfigUpdate(widget.id, config);
|
|
40420
|
+
}
|
|
40421
|
+
};
|
|
40422
|
+
getWidgetStyles(widget);
|
|
40423
|
+
const renderWidget = () => {
|
|
40424
|
+
switch (widget.type) {
|
|
40425
|
+
// Search-related widget cases removed
|
|
40426
|
+
// Available widgets
|
|
40427
|
+
case "header":
|
|
40428
|
+
return jsxRuntimeExports.jsx(HeaderWidget, { widget: widget, showHeader: false });
|
|
40429
|
+
case "footer":
|
|
40430
|
+
return jsxRuntimeExports.jsx(FooterWidget, { widget: widget, showHeader: false });
|
|
40431
|
+
case "text":
|
|
40432
|
+
return jsxRuntimeExports.jsx(TextWidget, { widget: widget, showHeader: false });
|
|
40433
|
+
case "spacer":
|
|
40434
|
+
return jsxRuntimeExports.jsx(SpacerWidget, { widget: widget, showHeader: false });
|
|
40435
|
+
case "divider":
|
|
40436
|
+
return jsxRuntimeExports.jsx(DividerWidget, { widget: widget, showHeader: false });
|
|
40437
|
+
case "facet":
|
|
40438
|
+
return (jsxRuntimeExports.jsx(FacetWidget, { widget: widget, showHeader: false, onConfigUpdate: handleConfigUpdate }));
|
|
40439
|
+
case "chatbot":
|
|
40440
|
+
return jsxRuntimeExports.jsx(ChatbotWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId });
|
|
40441
|
+
case "agent":
|
|
40442
|
+
return widget.config.agentType === "Pie Chart Agent" ? (jsxRuntimeExports.jsx(PieChartWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId })) : widget.config.agentType === "Series Bar Chart Agent" ? (jsxRuntimeExports.jsx(SeriesBarChartWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId })) : widget.config.agentType === "Series Line Chart Agent" ? (jsxRuntimeExports.jsx(SeriesLineChartWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId })) : widget.config.agentType === "Data Grid Agent" ? (jsxRuntimeExports.jsx(DatagridWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId })) : (jsxRuntimeExports.jsx(AgentWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId }));
|
|
39174
40443
|
default:
|
|
39175
40444
|
return (jsxRuntimeExports.jsxs("div", { className: "text-muted-foreground", children: ["Unknown widget type: ", widget.type] }));
|
|
39176
40445
|
}
|