impact-chatbot 2.3.76 → 2.3.77

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.cjs.js CHANGED
@@ -5721,6 +5721,10 @@ const ButtonContent = ({ bodyText, isFormDisabled = false, isStepFormSubmit = fa
5721
5721
  stepFormStreamControl.uniqueChatId = data?.chat_id ? data.chat_id : "";
5722
5722
  // Clear sessionStorage so stale session_id isn't picked up by future non-init calls
5723
5723
  sessionStorage.setItem("stepForm_sessionId", "");
5724
+ // Notify SmartBot to update its initValue/sessionId state
5725
+ window.dispatchEvent(new CustomEvent("stepFormInitStateUpdate", {
5726
+ detail: { initValue: true, sessionId: "", uniqueChatId: data?.chat_id || "" },
5727
+ }));
5724
5728
  }
5725
5729
  // Stream ended — dispatch all collected chunks at once
5726
5730
  stepFormStreamControl.isStreaming = false;
@@ -8114,7 +8118,7 @@ const Steps$1 = ({ steps, setSteps, done, setTabValue, setDone, finalStepDone, s
8114
8118
  }, children: jsxRuntime.jsx(ProgressBarItem$1, { question: "Thinking", questionSteps: [{ header: "", sub_header: "", step_status: "not-completed" }], isLast: true, classes: classes, formData: null, isFormDisabled: isFormDisabled }) }))] }));
8115
8119
  };
8116
8120
 
8117
- const renderWidgetItem = (item, index) => {
8121
+ const renderWidgetItem = (item, index, isFormDisabled) => {
8118
8122
  try {
8119
8123
  const parsedData = parseResponse(item, item.type, "", "", true);
8120
8124
  if (!parsedData)
@@ -8127,6 +8131,22 @@ const renderWidgetItem = (item, index) => {
8127
8131
  return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, key);
8128
8132
  case "graph":
8129
8133
  return jsxRuntime.jsx(GraphContent, { bodyText: parsedData.bodyText }, key);
8134
+ case "radio":
8135
+ return jsxRuntime.jsx(RadioContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
8136
+ case "checkbox":
8137
+ return jsxRuntime.jsx(CheckboxContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
8138
+ case "select":
8139
+ return jsxRuntime.jsx(SelectContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
8140
+ case "slider":
8141
+ return jsxRuntime.jsx(SliderContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
8142
+ case "button":
8143
+ return jsxRuntime.jsx(ButtonContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
8144
+ case "input":
8145
+ return jsxRuntime.jsx(InputContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
8146
+ case "datePicker":
8147
+ return jsxRuntime.jsx(DatePickerContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
8148
+ case "dateRangePicker":
8149
+ return jsxRuntime.jsx(DateRangePickerContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
8130
8150
  default:
8131
8151
  return null;
8132
8152
  }
@@ -8137,11 +8157,11 @@ const renderWidgetItem = (item, index) => {
8137
8157
  }
8138
8158
  };
8139
8159
  const AgentResponse$1 = (props) => {
8140
- const { content, isStreaming, streamingWidgetData = [] } = props;
8160
+ const { content, isStreaming, streamingWidgetData = [], isFormDisabled = false } = props;
8141
8161
  const classes = useStyles$6();
8142
8162
  const chatClasses = useStyles$9();
8143
8163
  const renderedWidgets = streamingWidgetData
8144
- .map((item, index) => renderWidgetItem(item, index))
8164
+ .map((item, index) => renderWidgetItem(item, index, isFormDisabled))
8145
8165
  .filter(Boolean);
8146
8166
  return (jsxRuntime.jsxs("div", { className: chatClasses.agentResponseContainer, children: [content ? (jsxRuntime.jsxs(material.Typography, { className: chatClasses.bodyTextStyling, children: [jsxRuntime.jsx(TextRenderer, { text: content }), isStreaming && renderedWidgets.length === 0 && jsxRuntime.jsx("span", { className: classes.cursor })] })) : null, renderedWidgets.length > 0 && (jsxRuntime.jsx("div", { className: "streaming-widget-content", children: renderedWidgets })), isStreaming && (renderedWidgets.length > 0 || !content) && (jsxRuntime.jsx("span", { className: classes.cursor }))] }));
8147
8167
  };
@@ -8212,7 +8232,7 @@ const StepsResponseTab = (props) => {
8212
8232
  },
8213
8233
  ], tabPanels: [
8214
8234
  jsxRuntime.jsx(Steps$1, { steps: steps, setSteps: setSteps, done: stepsDone, setDone: setStepsDone, setTabValue: setTabValue, finalStepDone: finalStepDone, setFinalStepDone: setFinalStepDone, stepChange: stepChange, currentMode: currentMode, questions: questions, questionsStepsMap: questionsStepsMap, stepFormDataMap: stepFormDataMap, isFormDisabled: isFormDisabled || isTimedOut }),
8215
- jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(AgentResponse$1, { content: content, isStreaming: isStreaming, streamingWidgetData: streamingWidgetData }), timeoutMessage && (jsxRuntime.jsx("div", { style: { marginTop: "8px", padding: "0 8px" }, children: jsxRuntime.jsx(TextRenderer, { text: timeoutMessage, thinking: "" }) }))] }),
8235
+ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(AgentResponse$1, { content: content, isStreaming: isStreaming, streamingWidgetData: streamingWidgetData, isFormDisabled: isFormDisabled || isTimedOut }), timeoutMessage && (jsxRuntime.jsx("div", { style: { marginTop: "8px", padding: "0 8px" }, children: jsxRuntime.jsx(TextRenderer, { text: timeoutMessage, thinking: "" }) }))] }),
8216
8236
  ], value: tabValue }) }));
8217
8237
  };
8218
8238
 
@@ -9357,6 +9377,16 @@ const StreamedContent = ({ botData }) => {
9357
9377
  ];
9358
9378
  botData.utilityObject.setInitValue(messageToStoreRef.current.initValue);
9359
9379
  botData.utilityObject.setSessionId(messageToStoreRef.current.sessionId);
9380
+ // Also update currentSessionId via event so the send button uses the correct session_id
9381
+ if (messageToStoreRef.current.status === "completed" || messageToStoreRef.current.status === "follow-up") {
9382
+ window.dispatchEvent(new CustomEvent("stepFormInitStateUpdate", {
9383
+ detail: {
9384
+ initValue: messageToStoreRef.current.initValue,
9385
+ sessionId: messageToStoreRef.current.sessionId,
9386
+ uniqueChatId: messageToStoreRef.current.uniqueChatId,
9387
+ },
9388
+ }));
9389
+ }
9360
9390
  botData.utilityObject.setAdditionalArgs(!isEmpty(messageToStoreRef.current.additionalArgs)
9361
9391
  ? messageToStoreRef.current.additionalArgs
9362
9392
  : {});
@@ -10118,6 +10148,22 @@ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questi
10118
10148
  return jsxRuntime.jsx(TableContent, { bodyText: parsedData.bodyText }, key);
10119
10149
  case "graph":
10120
10150
  return jsxRuntime.jsx(GraphContent, { bodyText: parsedData.bodyText }, key);
10151
+ case "radio":
10152
+ return jsxRuntime.jsx(RadioContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
10153
+ case "checkbox":
10154
+ return jsxRuntime.jsx(CheckboxContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
10155
+ case "select":
10156
+ return jsxRuntime.jsx(SelectContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
10157
+ case "slider":
10158
+ return jsxRuntime.jsx(SliderContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
10159
+ case "button":
10160
+ return jsxRuntime.jsx(ButtonContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
10161
+ case "input":
10162
+ return jsxRuntime.jsx(InputContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
10163
+ case "datePicker":
10164
+ return jsxRuntime.jsx(DatePickerContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
10165
+ case "dateRangePicker":
10166
+ return jsxRuntime.jsx(DateRangePickerContent, { bodyText: parsedData.bodyText, isFormDisabled: isFormDisabled }, key);
10121
10167
  default:
10122
10168
  return null;
10123
10169
  }
@@ -10418,6 +10464,29 @@ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questi
10418
10464
  setQuestionsStepsMapState(lodash.cloneDeep(newQuestionsStepsMap));
10419
10465
  setStepFormDataMapState(lodash.cloneDeep(newStepFormDataMap));
10420
10466
  if (newWidgets.length > 0) {
10467
+ // If widget data contains form components (radio, select, checkbox, etc.),
10468
+ // append a Submit button so the user can submit their selection
10469
+ const formTypes = ["radio", "select", "checkbox", "slider", "input", "datePicker", "dateRangePicker"];
10470
+ const hasFormWidget = newWidgets.some((item) => formTypes.includes(item?.type));
10471
+ const hasStepForm = chunks.some((c) => c.status === "step_form");
10472
+ if (hasFormWidget && !hasStepForm) {
10473
+ const sendButton = document.getElementById("chat-input-send-button");
10474
+ newWidgets.push({
10475
+ type: "button",
10476
+ data: {
10477
+ message: "",
10478
+ buttons: [
10479
+ {
10480
+ label: "Submit",
10481
+ variant: "primary",
10482
+ size: "medium",
10483
+ disabled: false,
10484
+ onClick: () => sendButton?.click(),
10485
+ },
10486
+ ],
10487
+ },
10488
+ });
10489
+ }
10421
10490
  // Replace (not append) to avoid duplicates from real-time widget_chunk dispatches
10422
10491
  setWidgetContent(newWidgets);
10423
10492
  }
@@ -14799,11 +14868,25 @@ const SmartBot = (props) => {
14799
14868
  console.error("Error updating timestamp after step form stream:", e);
14800
14869
  }
14801
14870
  };
14871
+ // Update SmartBot-level initValue/sessionId when ButtonContent's stream receives completed/follow-up
14872
+ const handleStepFormInitStateUpdate = (e) => {
14873
+ const { initValue: newInitValue, sessionId: newSessionId, uniqueChatId: newChatId } = e.detail || {};
14874
+ if (newInitValue !== undefined)
14875
+ setInitValue(newInitValue);
14876
+ if (newSessionId !== undefined) {
14877
+ setSessionId(newSessionId);
14878
+ setCurrentSessionId(newSessionId);
14879
+ }
14880
+ if (newChatId !== undefined)
14881
+ setUniqueChatId(newChatId);
14882
+ };
14802
14883
  window.addEventListener("stepFormStreamStart", handleStepFormStreamStart);
14803
14884
  window.addEventListener("stepFormStreamEnd", handleStepFormStreamEnd);
14885
+ window.addEventListener("stepFormInitStateUpdate", handleStepFormInitStateUpdate);
14804
14886
  return () => {
14805
14887
  window.removeEventListener("stepFormStreamStart", handleStepFormStreamStart);
14806
14888
  window.removeEventListener("stepFormStreamEnd", handleStepFormStreamEnd);
14889
+ window.removeEventListener("stepFormInitStateUpdate", handleStepFormInitStateUpdate);
14807
14890
  };
14808
14891
  }, []);
14809
14892
  const fetchCustomBotConfigurations = async () => {