impact-chatbot 2.3.86 → 2.3.88
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/components/message-template/components/message-content/ChipsContent.d.ts +3 -1
- package/dist/index.cjs.js +52 -57
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +53 -58
- package/dist/index.esm.js.map +1 -1
- package/dist/services/chatbot-services.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
declare const ChipsContent: ({ bodyText, props }: {
|
|
1
|
+
declare const ChipsContent: ({ bodyText, props, botData, isFormDisabled }: {
|
|
2
2
|
bodyText: any;
|
|
3
3
|
props: any;
|
|
4
|
+
botData: any;
|
|
5
|
+
isFormDisabled?: boolean;
|
|
4
6
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5
7
|
export default ChipsContent;
|
package/dist/index.cjs.js
CHANGED
|
@@ -107,6 +107,18 @@ const getAgentVisibilityData = () => {
|
|
|
107
107
|
console.error("getSmartBotVisibilityData error", error);
|
|
108
108
|
}
|
|
109
109
|
};
|
|
110
|
+
const getHideNavbotData = async (applicationCode) => {
|
|
111
|
+
try {
|
|
112
|
+
let { data } = await tenantConfigActions.tenantConfigApiCache(applicationCode, {
|
|
113
|
+
attribute_name: "hide_navbot",
|
|
114
|
+
})();
|
|
115
|
+
return data?.data?.[0]?.attribute_value?.value;
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error("getHideNavbotData error", error);
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
110
122
|
const getAgentExceptionUserList = (applicationCode) => {
|
|
111
123
|
try {
|
|
112
124
|
return tenantConfigActions.tenantConfigApiCache(applicationCode, {
|
|
@@ -1154,13 +1166,6 @@ const resolveInternalPath = (href) => {
|
|
|
1154
1166
|
return null;
|
|
1155
1167
|
}
|
|
1156
1168
|
};
|
|
1157
|
-
/**
|
|
1158
|
-
* Minimizes the chat window so the user can see the screen they navigated to.
|
|
1159
|
-
* SmartBot (index.tsx) listens for this event and sets partialClose.
|
|
1160
|
-
*/
|
|
1161
|
-
const minimizeChatBot = () => {
|
|
1162
|
-
window.dispatchEvent(new CustomEvent("smartBotMinimize"));
|
|
1163
|
-
};
|
|
1164
1169
|
/**
|
|
1165
1170
|
* Anchor rendered inside chatbot markdown. Internal links are navigated through
|
|
1166
1171
|
* react-router so the chatbot is not remounted by a full page load.
|
|
@@ -1179,7 +1184,6 @@ const MarkdownLink = ({ href, children, ...props }) => {
|
|
|
1179
1184
|
if (currentPath !== internalPath) {
|
|
1180
1185
|
navigate(internalPath);
|
|
1181
1186
|
}
|
|
1182
|
-
minimizeChatBot();
|
|
1183
1187
|
};
|
|
1184
1188
|
return (jsxRuntime.jsx("a", { href: href, target: "_self", onClick: handleClick, ...props, children: children }));
|
|
1185
1189
|
};
|
|
@@ -1282,7 +1286,6 @@ const TextRenderer = ({ text, thinking }) => {
|
|
|
1282
1286
|
if (currentPath !== internalPath) {
|
|
1283
1287
|
navigate(internalPath);
|
|
1284
1288
|
}
|
|
1285
|
-
minimizeChatBot();
|
|
1286
1289
|
};
|
|
1287
1290
|
// If the input contains rich HTML, render it directly with DOMPurify sanitization
|
|
1288
1291
|
if (containsRichHtml(text)) {
|
|
@@ -5150,17 +5153,26 @@ const TextContent = ({ bodyText, botData }) => {
|
|
|
5150
5153
|
return (jsxRuntime.jsx("div", { children: renderTextContent() }));
|
|
5151
5154
|
};
|
|
5152
5155
|
|
|
5153
|
-
const ChipsContent = ({ bodyText, props }) => {
|
|
5156
|
+
const ChipsContent = ({ bodyText, props, botData, isFormDisabled = false }) => {
|
|
5154
5157
|
const classes = useStyles$a();
|
|
5155
5158
|
const globalClasses = globalStyles();
|
|
5156
|
-
|
|
5157
|
-
|
|
5158
|
-
|
|
5159
|
-
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5159
|
+
// Suggested-question chips are one-shot: once the user has clicked one of them
|
|
5160
|
+
// or asked a new question the block disappears. isFormDisabled is true for
|
|
5161
|
+
// every bot message except the latest, so it flips exactly when the user
|
|
5162
|
+
// moves past these chips. Only chips that opt in via isQuestionsDisabled
|
|
5163
|
+
// behave this way; all other chips stay visible.
|
|
5164
|
+
if (botData?.isQuestionsDisabled && isFormDisabled) {
|
|
5165
|
+
return null;
|
|
5166
|
+
}
|
|
5167
|
+
const showHeaderTitle = !botData?.noShowHeaderTitle && Boolean(botData?.headerTitle?.length);
|
|
5168
|
+
return (jsxRuntime.jsxs(React.Fragment, { children: [showHeaderTitle && (jsxRuntime.jsx("div", { className: `${classes.chatbotText} ${classes.boldText} ${classes.combinedBlockHeaderTitle}`, children: botData.headerTitle })), jsxRuntime.jsx("div", { className: `${globalClasses.flexRow} ${globalClasses.flexWrap} ${globalClasses.gap} ${globalClasses.verticalAlignCenter}`, children: bodyText.map((data, index) => {
|
|
5169
|
+
const callBack = data.interactable && props
|
|
5170
|
+
? Object.entries(props).filter((entry) => entry[0] === data.actionName)?.[0]?.[1]
|
|
5171
|
+
: null;
|
|
5172
|
+
return (jsxRuntime.jsx(material.Typography, { component: "span", variant: "body1", className: `${classes.gptChips} ${data.interactable ? globalClasses.cursorPointer : ""}`, onClick: () => {
|
|
5173
|
+
callBack && callBack(data);
|
|
5174
|
+
}, children: data.displayText }, index));
|
|
5175
|
+
}) })] }));
|
|
5164
5176
|
};
|
|
5165
5177
|
|
|
5166
5178
|
/**
|
|
@@ -6157,7 +6169,8 @@ const TableContent = ({ bodyText }) => {
|
|
|
6157
6169
|
};
|
|
6158
6170
|
|
|
6159
6171
|
const GraphContent = ({ bodyText }) => {
|
|
6160
|
-
const { chartOptions } = bodyText || {};
|
|
6172
|
+
const { chartOptions, title } = bodyText || {};
|
|
6173
|
+
const classes = useStyles$a();
|
|
6161
6174
|
const chartRef = React.useRef(null);
|
|
6162
6175
|
const handleChartRef = (ref) => {
|
|
6163
6176
|
chartRef.current = ref;
|
|
@@ -6168,7 +6181,7 @@ const GraphContent = ({ bodyText }) => {
|
|
|
6168
6181
|
const options = {
|
|
6169
6182
|
...chartOptions,
|
|
6170
6183
|
};
|
|
6171
|
-
return (jsxRuntime.
|
|
6184
|
+
return (jsxRuntime.jsxs(material.Grid, { container: true, children: [Boolean(title?.length) && (jsxRuntime.jsx(material.Grid, { item: true, xs: 12, children: jsxRuntime.jsx("div", { className: `${classes.chatbotText} ${classes.boldText} ${classes.combinedBlockHeaderTitle}`, children: title }) })), jsxRuntime.jsx(material.Grid, { item: true, xs: 12, children: jsxRuntime.jsx(CoreChart, { options: options, handleChartRef: handleChartRef }) })] }));
|
|
6172
6185
|
};
|
|
6173
6186
|
|
|
6174
6187
|
const SelectableChips = ({ bodyText, chipType, props, utilityData }) => {
|
|
@@ -7556,7 +7569,6 @@ const STEP_FORM_TIMEOUT_KEY = "__stepFormTimedOut";
|
|
|
7556
7569
|
*/
|
|
7557
7570
|
const StepFormContent = ({ formData, messageIndex = 0, isFormDisabled = false, showSavedFilters = true, preSelectedFilters = null, botProps = null, currentMode = "", agentId = "", sessionId = "", }) => {
|
|
7558
7571
|
const dispatch = reactRedux.useDispatch();
|
|
7559
|
-
const classes = useStyles$a();
|
|
7560
7572
|
const savedFilterSets = reactRedux.useSelector((state) => state.smartBotReducer.savedFilterSets);
|
|
7561
7573
|
const persistedFormValues = reactRedux.useSelector((state) => state.smartBotReducer.persistedFormValues);
|
|
7562
7574
|
const chatbotContext = reactRedux.useSelector((state) => state.smartBotReducer.chatbotContext);
|
|
@@ -7829,13 +7841,13 @@ const StepFormContent = ({ formData, messageIndex = 0, isFormDisabled = false, s
|
|
|
7829
7841
|
case "text":
|
|
7830
7842
|
return jsxRuntime.jsx(TextContent, { bodyText: parsedData.bodyText, botData: parsedData }, key);
|
|
7831
7843
|
case "chips":
|
|
7832
|
-
return parsedData.isMultiSelect ? (jsxRuntime.jsx(SelectableChips, { bodyText: parsedData.bodyText, chipType: "selectable", utilityData: parsedData.utilityData, props: botProps }, key)) : (jsxRuntime.jsx(ChipsContent, { bodyText: parsedData.bodyText, props: botProps }, key));
|
|
7844
|
+
return parsedData.isMultiSelect ? (jsxRuntime.jsx(SelectableChips, { bodyText: parsedData.bodyText, chipType: "selectable", utilityData: parsedData.utilityData, props: botProps }, key)) : (jsxRuntime.jsx(ChipsContent, { bodyText: parsedData.bodyText, props: botProps, botData: parsedData, isFormDisabled: isFormDisabled }, key));
|
|
7833
7845
|
case "questions":
|
|
7834
7846
|
return jsxRuntime.jsx(QuestionsContent, { bodyText: parsedData.bodyText, props: botProps }, key);
|
|
7835
7847
|
case "html":
|
|
7836
7848
|
return jsxRuntime.jsx(HtmlContent, { bodyText: parsedData.bodyText }, key);
|
|
7837
7849
|
case "table":
|
|
7838
|
-
return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, key);
|
|
7850
|
+
return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, parsedData.bodyText?.table_name || key);
|
|
7839
7851
|
case "graph":
|
|
7840
7852
|
return jsxRuntime.jsx(GraphContent, { bodyText: parsedData.bodyText }, key);
|
|
7841
7853
|
case "slider":
|
|
@@ -7870,17 +7882,11 @@ const StepFormContent = ({ formData, messageIndex = 0, isFormDisabled = false, s
|
|
|
7870
7882
|
const body = renderItem(parsedData, index);
|
|
7871
7883
|
if (!body)
|
|
7872
7884
|
return;
|
|
7873
|
-
// Skip the block header when it is just a repeat of the label the widget
|
|
7874
|
-
// renders itself (parseResponse derives headerTitle from label for inputs).
|
|
7875
|
-
const showHeaderTitle = !parsedData?.noShowHeaderTitle &&
|
|
7876
|
-
Boolean(parsedData?.headerTitle?.length) &&
|
|
7877
|
-
parsedData.headerTitle !== parsedData?.bodyText?.label;
|
|
7878
|
-
const rendered = showHeaderTitle ? (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx("div", { className: `${classes.chatbotText} ${classes.boldText} ${classes.combinedBlockHeaderTitle}`, children: parsedData.headerTitle }), body] }, `step-form-block-${index}`)) : (body);
|
|
7879
7885
|
if (parsedData.bodyType === "button") {
|
|
7880
|
-
buttonItems.push(
|
|
7886
|
+
buttonItems.push(body);
|
|
7881
7887
|
}
|
|
7882
7888
|
else {
|
|
7883
|
-
formFields.push(
|
|
7889
|
+
formFields.push(body);
|
|
7884
7890
|
}
|
|
7885
7891
|
}
|
|
7886
7892
|
catch (error) {
|
|
@@ -8390,7 +8396,10 @@ const renderWidgetItem = (item, index, isFormDisabled) => {
|
|
|
8390
8396
|
case "text":
|
|
8391
8397
|
return jsxRuntime.jsx(TextContent, { bodyText: parsedData.bodyText, botData: parsedData }, key);
|
|
8392
8398
|
case "table":
|
|
8393
|
-
|
|
8399
|
+
// Key on table_name so a different table never reuses a mounted grid.
|
|
8400
|
+
// ag-grid captures its fetch callback once at init, so a reused grid
|
|
8401
|
+
// would keep querying the previous table's table_name.
|
|
8402
|
+
return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, parsedData.bodyText?.table_name || key);
|
|
8394
8403
|
case "graph":
|
|
8395
8404
|
return jsxRuntime.jsx(GraphContent, { bodyText: parsedData.bodyText }, key);
|
|
8396
8405
|
case "radio":
|
|
@@ -10339,7 +10348,6 @@ let instanceCounter = 0;
|
|
|
10339
10348
|
let activeTabularInstanceId = null;
|
|
10340
10349
|
const TabularContent = ({ steps: initialSteps, currentTabValue, children, questions: initialQuestions = [], questionsStepsMap: initialQuestionsStepsMap = {}, stepFormDataMap: initialStepFormDataMap = {}, isFormDisabled = false, sessionId: propSessionId = "", botProps = null, currentMode = "", agentId = "" }) => {
|
|
10341
10350
|
const dispatch = reactRedux.useDispatch();
|
|
10342
|
-
const chatClasses = useStyles$a();
|
|
10343
10351
|
const stepFormStreamData = reactRedux.useSelector((state) => state.smartBotReducer.stepFormStreamData);
|
|
10344
10352
|
const thinkingContext = reactRedux.useSelector((state) => state.smartBotReducer.thinkingContext);
|
|
10345
10353
|
const streamStartTimeRef = React.useRef(thinkingContext?.streamStartTime);
|
|
@@ -10428,13 +10436,13 @@ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questi
|
|
|
10428
10436
|
case "text":
|
|
10429
10437
|
return jsxRuntime.jsx(TextContent, { bodyText: parsedData.bodyText, botData: parsedData }, key);
|
|
10430
10438
|
case "chips":
|
|
10431
|
-
return parsedData.isMultiSelect ? (jsxRuntime.jsx(SelectableChips, { bodyText: parsedData.bodyText, chipType: "selectable", utilityData: parsedData.utilityData, props: botProps }, key)) : (jsxRuntime.jsx(ChipsContent, { bodyText: parsedData.bodyText, props: botProps }, key));
|
|
10439
|
+
return parsedData.isMultiSelect ? (jsxRuntime.jsx(SelectableChips, { bodyText: parsedData.bodyText, chipType: "selectable", utilityData: parsedData.utilityData, props: botProps }, key)) : (jsxRuntime.jsx(ChipsContent, { bodyText: parsedData.bodyText, props: botProps, botData: parsedData, isFormDisabled: isFormDisabled }, key));
|
|
10432
10440
|
case "questions":
|
|
10433
10441
|
return jsxRuntime.jsx(QuestionsContent, { bodyText: parsedData.bodyText, props: botProps }, key);
|
|
10434
10442
|
case "image":
|
|
10435
10443
|
return jsxRuntime.jsx(ImageContent, { bodyText: parsedData.bodyText }, key);
|
|
10436
10444
|
case "table":
|
|
10437
|
-
return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, key);
|
|
10445
|
+
return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, parsedData.bodyText?.table_name || key);
|
|
10438
10446
|
case "graph":
|
|
10439
10447
|
return jsxRuntime.jsx(GraphContent, { bodyText: parsedData.bodyText }, key);
|
|
10440
10448
|
case "radio":
|
|
@@ -10465,13 +10473,7 @@ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questi
|
|
|
10465
10473
|
if (!parsedData)
|
|
10466
10474
|
return null;
|
|
10467
10475
|
const key = `restream-widget-${index}`;
|
|
10468
|
-
|
|
10469
|
-
if (!body)
|
|
10470
|
-
return null;
|
|
10471
|
-
const showHeaderTitle = !parsedData?.noShowHeaderTitle && Boolean(parsedData?.headerTitle?.length);
|
|
10472
|
-
if (!showHeaderTitle)
|
|
10473
|
-
return body;
|
|
10474
|
-
return (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx("div", { className: `${chatClasses.chatbotText} ${chatClasses.boldText} ${chatClasses.combinedBlockHeaderTitle}`, children: parsedData.headerTitle }), body] }, `restream-widget-block-${index}`));
|
|
10476
|
+
return renderWidgetBody(parsedData, key);
|
|
10475
10477
|
}
|
|
10476
10478
|
catch (e) {
|
|
10477
10479
|
console.error("[TabularContent] renderWidget error:", e);
|
|
@@ -10835,19 +10837,10 @@ const resetActiveTabularInstance = () => {
|
|
|
10835
10837
|
};
|
|
10836
10838
|
|
|
10837
10839
|
const CombinedContent = ({ botData, props }) => {
|
|
10838
|
-
const classes = useStyles$a();
|
|
10839
10840
|
const isFormDisabled = botData?.isFormDisabled || false;
|
|
10840
10841
|
const isTabEnabled = botData?.utilityData?.isTabEnabled;
|
|
10841
10842
|
// Get the array of content items from bodyText
|
|
10842
10843
|
const contentItems = Array.isArray(botData.bodyText) ? botData.bodyText : [];
|
|
10843
|
-
// Renders the optional block-level header title above a content item.
|
|
10844
|
-
const renderHeaderTitle = (parsedData) => {
|
|
10845
|
-
const showHeaderTitle = !parsedData?.noShowHeaderTitle &&
|
|
10846
|
-
Boolean(parsedData?.headerTitle?.length);
|
|
10847
|
-
if (!showHeaderTitle)
|
|
10848
|
-
return null;
|
|
10849
|
-
return (jsxRuntime.jsx("div", { className: `${classes.chatbotText} ${classes.boldText} ${classes.combinedBlockHeaderTitle}`, children: parsedData.headerTitle }));
|
|
10850
|
-
};
|
|
10851
10844
|
// Function to render individual content based on its type
|
|
10852
10845
|
const renderIndividualContent = (parsedData, index) => {
|
|
10853
10846
|
const key = `combined-content-${index}`;
|
|
@@ -10859,12 +10852,12 @@ const CombinedContent = ({ botData, props }) => {
|
|
|
10859
10852
|
return (jsxRuntime.jsx(SelectableChips, { bodyText: parsedData.bodyText, chipType: "selectable", utilityData: parsedData.utilityData, props: props }, key));
|
|
10860
10853
|
}
|
|
10861
10854
|
else {
|
|
10862
|
-
return jsxRuntime.jsx(ChipsContent, { bodyText: parsedData.bodyText, props: props }, key);
|
|
10855
|
+
return (jsxRuntime.jsx(ChipsContent, { bodyText: parsedData.bodyText, props: props, botData: parsedData, isFormDisabled: isFormDisabled }, key));
|
|
10863
10856
|
}
|
|
10864
10857
|
case "questions":
|
|
10865
10858
|
return jsxRuntime.jsx(QuestionsContent, { bodyText: parsedData.bodyText, props: props }, key);
|
|
10866
10859
|
case "table":
|
|
10867
|
-
return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, key);
|
|
10860
|
+
return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, parsedData.bodyText?.table_name || key);
|
|
10868
10861
|
case "graph":
|
|
10869
10862
|
return jsxRuntime.jsx(GraphContent, { bodyText: parsedData.bodyText }, key);
|
|
10870
10863
|
case "slider":
|
|
@@ -10900,8 +10893,8 @@ const CombinedContent = ({ botData, props }) => {
|
|
|
10900
10893
|
if (!parsedData) {
|
|
10901
10894
|
return null;
|
|
10902
10895
|
}
|
|
10903
|
-
// Render the parsed content
|
|
10904
|
-
return
|
|
10896
|
+
// Render the parsed content
|
|
10897
|
+
return renderIndividualContent(parsedData, index);
|
|
10905
10898
|
}
|
|
10906
10899
|
catch (error) {
|
|
10907
10900
|
console.error(`Error parsing combined content item at index ${index}:`, error);
|
|
@@ -15314,9 +15307,11 @@ const SmartBot = (props) => {
|
|
|
15314
15307
|
skipHierarchyCall: true,
|
|
15315
15308
|
})();
|
|
15316
15309
|
let showAgentIcon = await getAgentVisibilityData();
|
|
15310
|
+
let appCode = utils$2.getApplicationCodeFromURL(applicationName);
|
|
15311
|
+
let hideNavbot = await getHideNavbotData(appCode);
|
|
15312
|
+
const filterNavigationTab = (tabs) => hideNavbot ? tabs.filter((tab) => tab.name !== "Navigation") : tabs;
|
|
15317
15313
|
if (!lodash.isEmpty(accessDataResponse) &&
|
|
15318
15314
|
showAgentIcon?.data?.data[0]?.attribute_value?.value) {
|
|
15319
|
-
let appCode = utils$2.getApplicationCodeFromURL(applicationName);
|
|
15320
15315
|
let list = await getAgentExceptionUserList(appCode);
|
|
15321
15316
|
let isWhitelisted = false;
|
|
15322
15317
|
if (list?.data?.data[0]?.attribute_value?.allow_all) {
|
|
@@ -15528,7 +15523,7 @@ const SmartBot = (props) => {
|
|
|
15528
15523
|
icon: jsxRuntime.jsx(SvgNavigationIcon, {}),
|
|
15529
15524
|
}
|
|
15530
15525
|
];
|
|
15531
|
-
setTabList(tabListData);
|
|
15526
|
+
setTabList(filterNavigationTab(tabListData));
|
|
15532
15527
|
}
|
|
15533
15528
|
else {
|
|
15534
15529
|
setCurrentMode("navigation");
|