srs-heritage-chatbot 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +194 -0
  3. package/lib/commonjs/assets/chat-icon-mobile.svg +1 -0
  4. package/lib/commonjs/assets/heritage.png +0 -0
  5. package/lib/commonjs/assets/posiden.svg +51 -0
  6. package/lib/commonjs/components/LoadingTips.js +104 -0
  7. package/lib/commonjs/components/LoadingTips.js.map +1 -0
  8. package/lib/commonjs/components/email.js +461 -0
  9. package/lib/commonjs/components/email.js.map +1 -0
  10. package/lib/commonjs/components/feedback.js +114 -0
  11. package/lib/commonjs/components/feedback.js.map +1 -0
  12. package/lib/commonjs/components/header.js +126 -0
  13. package/lib/commonjs/components/header.js.map +1 -0
  14. package/lib/commonjs/components/input.js +144 -0
  15. package/lib/commonjs/components/input.js.map +1 -0
  16. package/lib/commonjs/components/productCard.js +688 -0
  17. package/lib/commonjs/components/productCard.js.map +1 -0
  18. package/lib/commonjs/components/progressCircle.js +99 -0
  19. package/lib/commonjs/components/progressCircle.js.map +1 -0
  20. package/lib/commonjs/components/testing.js +74 -0
  21. package/lib/commonjs/components/testing.js.map +1 -0
  22. package/lib/commonjs/components/voice.js +184 -0
  23. package/lib/commonjs/components/voice.js.map +1 -0
  24. package/lib/commonjs/components/welcomeButton.js +149 -0
  25. package/lib/commonjs/components/welcomeButton.js.map +1 -0
  26. package/lib/commonjs/components/welcomeInput.js +137 -0
  27. package/lib/commonjs/components/welcomeInput.js.map +1 -0
  28. package/lib/commonjs/contexts/AppContext.js +552 -0
  29. package/lib/commonjs/contexts/AppContext.js.map +1 -0
  30. package/lib/commonjs/hooks/Stream.js +599 -0
  31. package/lib/commonjs/hooks/Stream.js.map +1 -0
  32. package/lib/commonjs/hooks/useAsyncStorage.js +36 -0
  33. package/lib/commonjs/hooks/useAsyncStorage.js.map +1 -0
  34. package/lib/commonjs/index.js +44 -0
  35. package/lib/commonjs/index.js.map +1 -0
  36. package/lib/commonjs/layout/disclaimer.js +208 -0
  37. package/lib/commonjs/layout/disclaimer.js.map +1 -0
  38. package/lib/commonjs/layout/ex.js +254 -0
  39. package/lib/commonjs/layout/ex.js.map +1 -0
  40. package/lib/commonjs/layout/icon.js +118 -0
  41. package/lib/commonjs/layout/icon.js.map +1 -0
  42. package/lib/commonjs/layout/layout.js +168 -0
  43. package/lib/commonjs/layout/layout.js.map +1 -0
  44. package/lib/commonjs/layout/welcome.js +160 -0
  45. package/lib/commonjs/layout/welcome.js.map +1 -0
  46. package/lib/commonjs/layout/window.js +396 -0
  47. package/lib/commonjs/layout/window.js.map +1 -0
  48. package/lib/commonjs/utils/audioRecorder.js +412 -0
  49. package/lib/commonjs/utils/audioRecorder.js.map +1 -0
  50. package/lib/commonjs/utils/cloudinary.js +69 -0
  51. package/lib/commonjs/utils/cloudinary.js.map +1 -0
  52. package/lib/commonjs/utils/storage.js +76 -0
  53. package/lib/commonjs/utils/storage.js.map +1 -0
  54. package/lib/commonjs/utils/textToSpeech.js +53 -0
  55. package/lib/commonjs/utils/textToSpeech.js.map +1 -0
  56. package/lib/module/assets/chat-icon-mobile.svg +1 -0
  57. package/lib/module/assets/heritage.png +0 -0
  58. package/lib/module/assets/posiden.svg +51 -0
  59. package/lib/module/components/LoadingTips.js +95 -0
  60. package/lib/module/components/LoadingTips.js.map +1 -0
  61. package/lib/module/components/email.js +452 -0
  62. package/lib/module/components/email.js.map +1 -0
  63. package/lib/module/components/feedback.js +105 -0
  64. package/lib/module/components/feedback.js.map +1 -0
  65. package/lib/module/components/header.js +117 -0
  66. package/lib/module/components/header.js.map +1 -0
  67. package/lib/module/components/input.js +135 -0
  68. package/lib/module/components/input.js.map +1 -0
  69. package/lib/module/components/productCard.js +679 -0
  70. package/lib/module/components/productCard.js.map +1 -0
  71. package/lib/module/components/progressCircle.js +91 -0
  72. package/lib/module/components/progressCircle.js.map +1 -0
  73. package/lib/module/components/testing.js +66 -0
  74. package/lib/module/components/testing.js.map +1 -0
  75. package/lib/module/components/voice.js +175 -0
  76. package/lib/module/components/voice.js.map +1 -0
  77. package/lib/module/components/welcomeButton.js +140 -0
  78. package/lib/module/components/welcomeButton.js.map +1 -0
  79. package/lib/module/components/welcomeInput.js +128 -0
  80. package/lib/module/components/welcomeInput.js.map +1 -0
  81. package/lib/module/contexts/AppContext.js +542 -0
  82. package/lib/module/contexts/AppContext.js.map +1 -0
  83. package/lib/module/hooks/Stream.js +592 -0
  84. package/lib/module/hooks/Stream.js.map +1 -0
  85. package/lib/module/hooks/useAsyncStorage.js +29 -0
  86. package/lib/module/hooks/useAsyncStorage.js.map +1 -0
  87. package/lib/module/index.js +36 -0
  88. package/lib/module/index.js.map +1 -0
  89. package/lib/module/layout/disclaimer.js +199 -0
  90. package/lib/module/layout/disclaimer.js.map +1 -0
  91. package/lib/module/layout/ex.js +253 -0
  92. package/lib/module/layout/ex.js.map +1 -0
  93. package/lib/module/layout/icon.js +108 -0
  94. package/lib/module/layout/icon.js.map +1 -0
  95. package/lib/module/layout/layout.js +160 -0
  96. package/lib/module/layout/layout.js.map +1 -0
  97. package/lib/module/layout/welcome.js +150 -0
  98. package/lib/module/layout/welcome.js.map +1 -0
  99. package/lib/module/layout/window.js +387 -0
  100. package/lib/module/layout/window.js.map +1 -0
  101. package/lib/module/utils/audioRecorder.js +398 -0
  102. package/lib/module/utils/audioRecorder.js.map +1 -0
  103. package/lib/module/utils/cloudinary.js +61 -0
  104. package/lib/module/utils/cloudinary.js.map +1 -0
  105. package/lib/module/utils/storage.js +67 -0
  106. package/lib/module/utils/storage.js.map +1 -0
  107. package/lib/module/utils/textToSpeech.js +43 -0
  108. package/lib/module/utils/textToSpeech.js.map +1 -0
  109. package/lib/typescript/components/LoadingTips.d.ts +3 -0
  110. package/lib/typescript/components/LoadingTips.d.ts.map +1 -0
  111. package/lib/typescript/components/email.d.ts +6 -0
  112. package/lib/typescript/components/email.d.ts.map +1 -0
  113. package/lib/typescript/components/feedback.d.ts +6 -0
  114. package/lib/typescript/components/feedback.d.ts.map +1 -0
  115. package/lib/typescript/components/header.d.ts +3 -0
  116. package/lib/typescript/components/header.d.ts.map +1 -0
  117. package/lib/typescript/components/input.d.ts +6 -0
  118. package/lib/typescript/components/input.d.ts.map +1 -0
  119. package/lib/typescript/components/productCard.d.ts +7 -0
  120. package/lib/typescript/components/productCard.d.ts.map +1 -0
  121. package/lib/typescript/components/progressCircle.d.ts +3 -0
  122. package/lib/typescript/components/progressCircle.d.ts.map +1 -0
  123. package/lib/typescript/components/testing.d.ts +6 -0
  124. package/lib/typescript/components/testing.d.ts.map +1 -0
  125. package/lib/typescript/components/voice.d.ts +5 -0
  126. package/lib/typescript/components/voice.d.ts.map +1 -0
  127. package/lib/typescript/components/welcomeButton.d.ts +4 -0
  128. package/lib/typescript/components/welcomeButton.d.ts.map +1 -0
  129. package/lib/typescript/components/welcomeInput.d.ts +6 -0
  130. package/lib/typescript/components/welcomeInput.d.ts.map +1 -0
  131. package/lib/typescript/contexts/AppContext.d.ts +10 -0
  132. package/lib/typescript/contexts/AppContext.d.ts.map +1 -0
  133. package/lib/typescript/hooks/Stream.d.ts +2 -0
  134. package/lib/typescript/hooks/Stream.d.ts.map +1 -0
  135. package/lib/typescript/hooks/useAsyncStorage.d.ts +2 -0
  136. package/lib/typescript/hooks/useAsyncStorage.d.ts.map +1 -0
  137. package/lib/typescript/index.d.ts +8 -0
  138. package/lib/typescript/index.d.ts.map +1 -0
  139. package/lib/typescript/layout/disclaimer.d.ts +5 -0
  140. package/lib/typescript/layout/disclaimer.d.ts.map +1 -0
  141. package/lib/typescript/layout/ex.d.ts +1 -0
  142. package/lib/typescript/layout/ex.d.ts.map +1 -0
  143. package/lib/typescript/layout/icon.d.ts +3 -0
  144. package/lib/typescript/layout/icon.d.ts.map +1 -0
  145. package/lib/typescript/layout/layout.d.ts +3 -0
  146. package/lib/typescript/layout/layout.d.ts.map +1 -0
  147. package/lib/typescript/layout/welcome.d.ts +6 -0
  148. package/lib/typescript/layout/welcome.d.ts.map +1 -0
  149. package/lib/typescript/layout/window.d.ts +5 -0
  150. package/lib/typescript/layout/window.d.ts.map +1 -0
  151. package/lib/typescript/utils/audioRecorder.d.ts +9 -0
  152. package/lib/typescript/utils/audioRecorder.d.ts.map +1 -0
  153. package/lib/typescript/utils/cloudinary.d.ts +17 -0
  154. package/lib/typescript/utils/cloudinary.d.ts.map +1 -0
  155. package/lib/typescript/utils/storage.d.ts +29 -0
  156. package/lib/typescript/utils/storage.d.ts.map +1 -0
  157. package/lib/typescript/utils/textToSpeech.d.ts +2 -0
  158. package/lib/typescript/utils/textToSpeech.d.ts.map +1 -0
  159. package/package.json +109 -0
  160. package/src/assets/chat-icon-mobile.svg +1 -0
  161. package/src/assets/heritage.png +0 -0
  162. package/src/assets/posiden.svg +51 -0
  163. package/src/components/LoadingTips.js +99 -0
  164. package/src/components/email.js +467 -0
  165. package/src/components/feedback.js +114 -0
  166. package/src/components/header.js +119 -0
  167. package/src/components/input.js +133 -0
  168. package/src/components/productCard.js +815 -0
  169. package/src/components/progressCircle.js +88 -0
  170. package/src/components/testing.js +60 -0
  171. package/src/components/voice.js +228 -0
  172. package/src/components/welcomeButton.js +161 -0
  173. package/src/components/welcomeInput.js +133 -0
  174. package/src/contexts/AppContext.js +678 -0
  175. package/src/hooks/Stream.js +655 -0
  176. package/src/hooks/useAsyncStorage.js +33 -0
  177. package/src/index.js +30 -0
  178. package/src/layout/disclaimer.js +231 -0
  179. package/src/layout/ex.js +252 -0
  180. package/src/layout/icon.js +105 -0
  181. package/src/layout/layout.js +160 -0
  182. package/src/layout/welcome.js +172 -0
  183. package/src/layout/window.js +476 -0
  184. package/src/utils/audioRecorder.js +445 -0
  185. package/src/utils/cloudinary.js +61 -0
  186. package/src/utils/storage.ts +89 -0
  187. package/src/utils/textToSpeech.js +49 -0
@@ -0,0 +1,128 @@
1
+ import React, { useState, useEffect, useContext, useRef } from 'react';
2
+ import { Text, StyleSheet, View, TextInput, TouchableOpacity, Platform, KeyboardAvoidingView, Keyboard } from 'react-native';
3
+ import { Header } from '../components/header';
4
+ import { AppContext } from '../contexts/AppContext';
5
+ import Ionicons from 'react-native-vector-icons/Ionicons';
6
+ import { VoiceButton } from './voice';
7
+ export const WelcomeInput = ({
8
+ onProductCardClick,
9
+ onAddToCartClick
10
+ }) => {
11
+ const {
12
+ data,
13
+ handleSend,
14
+ input,
15
+ setInput,
16
+ showModal,
17
+ theme,
18
+ isListening
19
+ } = useContext(AppContext);
20
+ const inputRef = useRef(null);
21
+ const handleKeyPress = ({
22
+ nativeEvent
23
+ }) => {
24
+ if (nativeEvent.key === 'return' && !nativeEvent.shiftKey) {
25
+ nativeEvent.preventDefault && nativeEvent.preventDefault();
26
+ handleSend(input);
27
+ return;
28
+ }
29
+ };
30
+ const onSubmitEditing = () => {
31
+ if (input.trim()) {
32
+ handleSend(input);
33
+ }
34
+ };
35
+ return /*#__PURE__*/React.createElement(View, {
36
+ style: styles.ringContainer
37
+ }, /*#__PURE__*/React.createElement(View, {
38
+ style: styles.inputContainer
39
+ }, /*#__PURE__*/React.createElement(TextInput, {
40
+ ref: inputRef,
41
+ style: styles.input,
42
+ value: input,
43
+ onChangeText: setInput,
44
+ placeholder: isListening && !input ? 'Listening...' : 'Ask away...',
45
+ placeholderTextColor: "#999",
46
+ editable: !isListening,
47
+ caretHidden: isListening,
48
+ showSoftInputOnFocus: !isListening,
49
+ multiline: false,
50
+ returnKeyType: "send",
51
+ enablesReturnKeyAutomatically: true,
52
+ onKeyPress: handleKeyPress,
53
+ onSubmitEditing: onSubmitEditing,
54
+ selection: undefined
55
+ // blurOnSubmit={false}
56
+ }), /*#__PURE__*/React.createElement(VoiceButton, {
57
+ setInput: text => {
58
+ setInput(text);
59
+ if (!isListening && inputRef.current) {
60
+ if (Platform.OS === 'android') {
61
+ setTimeout(() => {
62
+ if (inputRef.current) {
63
+ inputRef.current.setSelection(text.length, text.length);
64
+ }
65
+ }, 10);
66
+ } else {
67
+ inputRef.current.setSelection(text.length, text.length);
68
+ }
69
+ }
70
+ }
71
+ }), /*#__PURE__*/React.createElement(TouchableOpacity, {
72
+ style: styles.sendButton,
73
+ onPress: () => handleSend(input),
74
+ disabled: !input.trim()
75
+ }, /*#__PURE__*/React.createElement(Ionicons, {
76
+ name: "paper-plane-outline",
77
+ size: 24,
78
+ color: input.trim() ? theme.primaryColor : '#161616'
79
+ }))));
80
+ };
81
+ const styles = StyleSheet.create({
82
+ ringContainer: {
83
+ paddingHorizontal: 0.5,
84
+ paddingVertical: 0.5,
85
+ borderRadius: 18,
86
+ borderWidth: 3,
87
+ borderColor: '#FFFFFF',
88
+ // Or your theme color
89
+ backgroundColor: '#FFFFFF'
90
+ },
91
+ inputContainer: {
92
+ flexDirection: 'row',
93
+ alignItems: 'center',
94
+ paddingHorizontal: 8,
95
+ paddingVertical: 8,
96
+ backgroundColor: '#FFFFFF',
97
+ borderRadius: 16,
98
+ shadowColor: '#000',
99
+ shadowOffset: {
100
+ width: 0,
101
+ height: 2
102
+ },
103
+ shadowOpacity: 0.1,
104
+ shadowRadius: 4,
105
+ elevation: 3,
106
+ borderColor: '#dadada',
107
+ borderWidth: 1,
108
+ borderRadius: 14
109
+ },
110
+ input: {
111
+ flex: 1,
112
+ fontSize: 16,
113
+ paddingVertical: 8,
114
+ paddingHorizontal: 12,
115
+ color: '#000000'
116
+ },
117
+ inputButton: {
118
+ padding: 6
119
+ },
120
+ sendButton: {
121
+ padding: 6,
122
+ marginLeft: 'auto'
123
+ },
124
+ disabledButton: {
125
+ opacity: 0.7
126
+ }
127
+ });
128
+ //# sourceMappingURL=welcomeInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","useEffect","useContext","useRef","Text","StyleSheet","View","TextInput","TouchableOpacity","Platform","KeyboardAvoidingView","Keyboard","Header","AppContext","Ionicons","VoiceButton","WelcomeInput","onProductCardClick","onAddToCartClick","data","handleSend","input","setInput","showModal","theme","isListening","inputRef","handleKeyPress","nativeEvent","key","shiftKey","preventDefault","onSubmitEditing","trim","createElement","style","styles","ringContainer","inputContainer","ref","value","onChangeText","placeholder","placeholderTextColor","editable","caretHidden","showSoftInputOnFocus","multiline","returnKeyType","enablesReturnKeyAutomatically","onKeyPress","selection","undefined","text","current","OS","setTimeout","setSelection","length","sendButton","onPress","disabled","name","size","color","primaryColor","create","paddingHorizontal","paddingVertical","borderRadius","borderWidth","borderColor","backgroundColor","flexDirection","alignItems","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","flex","fontSize","inputButton","padding","marginLeft","disabledButton","opacity"],"sourceRoot":"../../../src","sources":["components/welcomeInput.js"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,542 @@
1
+ import React, { createContext, useContext, useState, useEffect, useMemo } from 'react';
2
+ import uuid from 'react-native-uuid';
3
+ // import useAsyncStorage from '../hooks/useAsyncStorage';
4
+ import { loadChat, updateChat, defaultState } from '../utils/storage';
5
+ export const AppContext = /*#__PURE__*/createContext();
6
+ export const AppProvider = ({
7
+ data,
8
+ onProductCardClick,
9
+ onAddToCartClick,
10
+ uiConfig = {},
11
+ children
12
+ }) => {
13
+ // Brand-driven configuration
14
+ const version = (data === null || data === void 0 ? void 0 : data.brand_version) === 'pool' || (data === null || data === void 0 ? void 0 : data.brand_version) === 'landscape' ? data.brand_version : 'landscape';
15
+ const API_PREFIX = 'https://';
16
+ const BRAND_CONFIG = (() => {
17
+ const isStage = (data === null || data === void 0 ? void 0 : data.env) === 'stage';
18
+ return {
19
+ pool: {
20
+ primaryColor: '#004687',
21
+ userMessageColor: '#003764',
22
+ cloudName: 'heritageplus',
23
+ // Pool assets live under mobileapp/ in heritageplus cloud
24
+ logoId: 'mobileapp/logos/HPSG_HPlus_Logo_White',
25
+ baseHost: isStage ? 'pool-stage-external-agent-adk-586731320826.us-east1.run.app' : 'pool-prod-external-agent-adk-586731320826.us-east1.run.app',
26
+ // baseHost: isStage
27
+ // ? '0.0.0.0:8080'
28
+ // : 'pool-prod-external-agent-adk-586731320826.us-east1.run.app',
29
+ loggingHost: 'srs-external-agent-logging-586731320826.us-central1.run.app'
30
+ },
31
+ landscape: {
32
+ primaryColor: '#437D3D',
33
+ userMessageColor: '#437D3D',
34
+ cloudName: 'mktg',
35
+ logoId: 'logos/HLSG_Logo_Lockup_Color',
36
+ baseHost: isStage ? 'landscape-stage-external-agent-adk-586731320826.us-east1.run.app' : 'landscape-prod-external-agent-adk-586731320826.us-east1.run.app',
37
+ loggingHost: 'srs-external-agent-landscape-logging-586731320826.us-central1.run.app'
38
+ }
39
+ }[version];
40
+ })();
41
+ const BASE_URL = BRAND_CONFIG.baseHost;
42
+ const LOGGING_URL = BRAND_CONFIG.loggingHost;
43
+ const TRACK_CLICK_URL = `${API_PREFIX}${LOGGING_URL}/track-click`;
44
+ const ADD_TO_CART_URL = `${API_PREFIX}${LOGGING_URL}/add-to-cart`;
45
+ const theme = {
46
+ userMessage: BRAND_CONFIG.userMessageColor,
47
+ botMessage: BRAND_CONFIG.userMessageColor,
48
+ backgroundColor: '#f6f6f6',
49
+ textColor: '#161616',
50
+ textColorSecondary: '#FFFFFF',
51
+ inlineButtonColor: '#dbd4c8',
52
+ primaryColor: BRAND_CONFIG.primaryColor
53
+ };
54
+ const brandLogo = BRAND_CONFIG.logoId;
55
+ const brandCloudName = BRAND_CONFIG.cloudName;
56
+
57
+ // Default Messages
58
+ const defaultMessage = [{
59
+ type: 'ai',
60
+ text: `Hi there 👋 I'm your ${version === 'pool' ? 'HeritagePool+' : 'Heritage+'} AI Assistant. I'm here to help you with Product and Account information during your online visit. I'm still learning and growing - the more we interact and the more feedback you share, the better I can assist you. How can I help you today?`
61
+ }];
62
+ const maintenanceMessage = [{
63
+ type: 'ai',
64
+ text: "Hi there 👋 I'm your Heritage+ AI Agent. I'm currently undergoing maintenance to improve my services. Thank you for your patience and understanding!"
65
+ }];
66
+
67
+ // user data variables
68
+ const customerToken = data.customer_token;
69
+
70
+ // Base Variables
71
+ const [showModal, setShowModal] = useState('Icon');
72
+ const [input, setInput] = useState('');
73
+ const [messages, setMessages] = useState(defaultState.messages);
74
+ const [conversationStartTime, setConversationStartTime] = useState(null);
75
+ const [lastUserMessage, setLastUserMessage] = useState('');
76
+ const [lastMessageId, setLastMessageId] = useState('');
77
+ const [sessionId, setSessionId] = useState(null);
78
+ const [isListening, setIsListening] = useState(false);
79
+
80
+ // Message UI
81
+ const [typingIndicator, setTypingIndicator] = useState(false);
82
+ const [ghostMessage, setGhostMessage] = useState(false);
83
+ const [ghostCard, setGhostCard] = useState(false);
84
+ const [stopActivated, setStopActivated] = useState(false);
85
+ const [disclaimer, setDisclaimer] = useState(false);
86
+ const [startStreaming, setStartStreaming] = useState(false);
87
+
88
+ // Load persisted state on mount
89
+ useEffect(() => {
90
+ if (!customerToken) return;
91
+ const init = async () => {
92
+ try {
93
+ const cachedState = await loadChat(customerToken);
94
+
95
+ // Update all stateful values
96
+ setTypingIndicator(cachedState.typingIndicator);
97
+ setGhostMessage(cachedState.ghostMessage);
98
+ setGhostCard(cachedState.ghostCard);
99
+ setStopActivated(cachedState.stopActivated);
100
+ setDisclaimer(cachedState.disclaimer);
101
+ setStartStreaming(cachedState.startStreaming);
102
+ setMessages(cachedState.messages);
103
+ // setShowModal(cachedState.showModal);
104
+
105
+ if (uiConfig.toggleChat === false) {
106
+ setShowModal('Icon');
107
+ } else {
108
+ if (!disclaimer) {
109
+ setShowModal('Form');
110
+ } else {
111
+ if ((uiConfig.showWelcome === true || cachedState.showWelcome === true) && messages.length < 2) {
112
+ // console.log("showWelcome", uiConfig.showWelcome, cachedState.showWelcome)
113
+ setShowModal('Welcome');
114
+ } else {
115
+ setShowModal('ChatWindow');
116
+ }
117
+ }
118
+ }
119
+ } catch (error) {
120
+ console.error('Error loading chat state:', error);
121
+ }
122
+ };
123
+ init();
124
+ }, [customerToken, uiConfig.toggleChat, uiConfig.showWelcome]);
125
+
126
+ // Persist state changes
127
+ useEffect(() => {
128
+ if (!customerToken) return;
129
+ const persistState = async () => {
130
+ const currentState = {
131
+ typingIndicator,
132
+ ghostMessage,
133
+ ghostCard,
134
+ stopActivated,
135
+ disclaimer,
136
+ startStreaming,
137
+ messages,
138
+ showModal,
139
+ showWelcome: uiConfig.showWelcome
140
+ };
141
+ await updateChat(customerToken, currentState);
142
+ };
143
+ persistState();
144
+ }, [customerToken, typingIndicator, ghostMessage, ghostCard, stopActivated, disclaimer, startStreaming, messages, showModal, uiConfig.showWelcome]);
145
+ useEffect(() => {
146
+ if (showModal == 'Off') {
147
+ setShowModal('Icon');
148
+ }
149
+ }, [uiConfig.showIcon]);
150
+ const stopGenerating = () => {
151
+ setTypingIndicator(false);
152
+ setStopActivated(true);
153
+ };
154
+ function handleSend(input) {
155
+ if (maintenance) {
156
+ setMessages([...messages, {
157
+ type: 'user',
158
+ text: input
159
+ }, {
160
+ type: 'ai',
161
+ text: 'The chat is currently unavailable, please come back later!'
162
+ }]);
163
+ return;
164
+ }
165
+
166
+ // Ensure input is a string and not empty
167
+ const userInput = typeof input === 'string' ? input.trim() : String(input || '').trim();
168
+ if (userInput !== '') {
169
+ // Ensure sessionId exists before starting a conversation
170
+ if (!sessionId) {
171
+ const newSessionId = uuid.v4();
172
+ setSessionId(newSessionId);
173
+ console.log('[AppContext] Generated new sessionId:', newSessionId);
174
+ }
175
+ if (messages.length <= 1) {
176
+ const startTime = new Date().toISOString();
177
+ setConversationStartTime(startTime);
178
+ }
179
+
180
+ // Create user message object with immutable text
181
+ const userMessage = {
182
+ type: 'user',
183
+ text: userInput,
184
+ session_id: data.session_id || data.session || sessionId
185
+ };
186
+
187
+ // Initiate streaming
188
+ setShowModal('ChatWindow');
189
+ setLastUserMessage(userInput);
190
+ setMessages([...messages, userMessage]);
191
+ setTypingIndicator(true);
192
+ setGhostMessage(true);
193
+ setStartStreaming(true);
194
+ setInput('');
195
+ }
196
+ }
197
+
198
+ // After form submission
199
+ function setNextMessage(name) {
200
+ setMessages(prevMessages => {
201
+ const updatedMessages = prevMessages.map((message, index) => {
202
+ if (index === prevMessages.length - 1 && message.form) {
203
+ return {
204
+ ...message,
205
+ form: false
206
+ };
207
+ }
208
+ return message;
209
+ });
210
+ const nextMessage = {
211
+ type: 'ai',
212
+ text: [`Nice to meet you ${name}. How can I help you today?`]
213
+ };
214
+ return [...updatedMessages, nextMessage];
215
+ });
216
+ }
217
+
218
+ // Confirm Disclaimer
219
+ async function confirmDisclaimer() {
220
+ setDisclaimer(true);
221
+ if (!maintenance) {
222
+ setShowModal('Welcome');
223
+ setMessages(defaultMessage);
224
+ } else {
225
+ setShowModal('ChatWindow');
226
+ setMessages(maintenanceMessage);
227
+ }
228
+ try {
229
+ const response = await fetch(API_PREFIX + LOGGING_URL + '/log-disclaimer', {
230
+ method: 'POST',
231
+ headers: {
232
+ 'Content-Type': 'application/json'
233
+ },
234
+ body: JSON.stringify({
235
+ email: data.user_email
236
+ })
237
+ });
238
+ if (!response.ok) {
239
+ throw new Error(`HTTP error! status: ${response.status}`);
240
+ }
241
+ } catch (error) {
242
+ console.error('Error in Log disclaimer:', error);
243
+ }
244
+ }
245
+ function handleButtonClick(buttonText) {
246
+ handleSend(buttonText);
247
+ }
248
+ const [maintenance, setMaintenance] = useState(false);
249
+ const handleClearState = async () => {
250
+ if (!maintenance) {
251
+ setShowModal('Welcome');
252
+ }
253
+ if (messages.length > 1) {
254
+ const newState = {
255
+ ...defaultState,
256
+ messages: maintenance ? maintenanceMessage : defaultMessage,
257
+ showModal: maintenance ? 'ChatWindow' : 'Welcome'
258
+ };
259
+
260
+ // Update all state variables
261
+ setMessages(newState.messages);
262
+ setTypingIndicator(false);
263
+ setGhostMessage(false);
264
+ setShowModal(newState.showModal);
265
+
266
+ // Generate new session
267
+ const newSessionId = uuid.v4();
268
+ setSessionId(newSessionId);
269
+
270
+ // Clear persisted state
271
+ if (customerToken) {
272
+ await updateChat(customerToken, newState);
273
+ }
274
+ }
275
+ };
276
+ const [feedback, setFeedback] = useState({});
277
+ async function handleFeedback(feedbackValue, messageId) {
278
+ switchFeedbackOpen(true, messageId, true);
279
+ setFeedback(prevFeedback => {
280
+ const updatedFeedback = {
281
+ ...prevFeedback
282
+ };
283
+ if (!updatedFeedback[messageId]) {
284
+ updatedFeedback[messageId] = 0;
285
+ }
286
+ updatedFeedback[messageId] = feedbackValue;
287
+ return updatedFeedback;
288
+ });
289
+ try {
290
+ const response = await fetch(API_PREFIX + LOGGING_URL + '/feedback', {
291
+ method: 'POST',
292
+ headers: {
293
+ 'Content-Type': 'application/json'
294
+ },
295
+ body: JSON.stringify({
296
+ message_id: messageId,
297
+ feedback: feedbackValue
298
+ })
299
+ });
300
+ if (!response.ok) {
301
+ throw new Error(`HTTP error! status: ${response.status}`);
302
+ }
303
+ //console.log(response)
304
+ } catch (error) {
305
+ console.error('Error in feedback post:', error);
306
+ }
307
+ }
308
+ const [feedbackOpen, setFeedbackOpen] = useState({});
309
+ const [writeFeedback, setWriteFeedback] = useState('');
310
+ const [writeAnswer, setWriteAnswer] = useState('');
311
+
312
+ // Written Feedback ----------------------------
313
+
314
+ function switchFeedbackOpen(newVal, messageId, resetvalue) {
315
+ console.log(newVal, feedbackOpen[messageId], messageId, resetvalue);
316
+ console.log(feedbackOpen);
317
+ if (newVal != feedbackOpen[messageId]) {
318
+ setWriteFeedback('');
319
+ setWriteAnswer('');
320
+ }
321
+ if (resetvalue) {
322
+ setWriteFeedback('');
323
+ setWriteAnswer('');
324
+ }
325
+ if (feedbackOpen[messageId] == 'done') {
326
+ return;
327
+ }
328
+ setFeedbackOpen(prevFeedback => {
329
+ const updatedFeedback = {
330
+ ...prevFeedback
331
+ };
332
+ updatedFeedback[messageId] = newVal;
333
+ return updatedFeedback;
334
+ });
335
+ console.log(feedbackOpen);
336
+ }
337
+ async function handleWrittenFeedback(messageId) {
338
+ if (writeFeedback.trim() !== '' || writeAnswer.trim() !== '') {
339
+ //console.log(messageId, writeFeedback)
340
+ switchFeedbackOpen(-1, messageId, true);
341
+ try {
342
+ const response = await fetch(API_PREFIX + LOGGING_URL + '/feedback-message', {
343
+ method: 'POST',
344
+ headers: {
345
+ 'Content-Type': 'application/json'
346
+ },
347
+ body: JSON.stringify({
348
+ message_id: messageId,
349
+ feedback_message: writeFeedback,
350
+ correct_answer: writeAnswer
351
+ })
352
+ });
353
+ if (!response.ok) {
354
+ throw new Error(`HTTP error! status: ${response.status}`);
355
+ }
356
+ //console.log(response)
357
+ } catch (error) {
358
+ console.error('Error in feedback_message:', error);
359
+ }
360
+ }
361
+ }
362
+ const formatChatHistory = () => {
363
+ // Skip the first message (index 0) which is the welcome message
364
+ return messages.slice(1).map(message => {
365
+ if (Array.isArray(message.text)) {
366
+ return {
367
+ type: message.type,
368
+ content: message.text.join('\n')
369
+ };
370
+ }
371
+ return {
372
+ type: message.type,
373
+ content: message.text
374
+ };
375
+ });
376
+ };
377
+ function handleVoiceSend(audio, transcription) {
378
+ //setReadAloud(true)
379
+ handleSend(transcription);
380
+ }
381
+
382
+ // Wrapper function for onAddToCartClick to add middle message
383
+ const handleAddToCartWithMessage = cartData => {
384
+ // Add middle message indicating item is being added to cart
385
+ setMessages(prevMessages => [...prevMessages, {
386
+ type: 'middle',
387
+ text: `${cartData.quantity} ${cartData.selectedUom} of item ${cartData.product.product_details.product_name} added to cart`,
388
+ products: [],
389
+ product_cards: 'False'
390
+ }]);
391
+
392
+ // Call the original onAddToCartClick function
393
+ if (onAddToCartClick) {
394
+ onAddToCartClick(cartData);
395
+ }
396
+ };
397
+
398
+ // translations from web: port to mobile in an effort to standardize experiences
399
+ const translations = {
400
+ en: {
401
+ greeting: 'Hi',
402
+ aiAssistantIntro: "I'm your Heritage Pool+ AI Assistant. I can help you during your online visit with Product and Account information.",
403
+ askAway: 'Ask away...',
404
+ betaDisclaimer: 'Beta version. AI Assistant is still learning!',
405
+ helpCategories: 'Here are some areas I can help you with:',
406
+ suggestedQuestions: 'Suggested Questions...',
407
+ languageToggle: 'Ayuda en Español',
408
+ products: 'Products',
409
+ orders: 'Orders',
410
+ invoices: 'Invoices',
411
+ branchInfo: 'Branch Information',
412
+ hiMessage: "Hi, I'm your Heritage Pool+ AI Assistant. How can I help you?",
413
+ hiMessageMobile: "Hi, I'm your Heritage Pool+ AI Assistant! How can I help you?",
414
+ defaultMessage: "Hi there 👋 I'm your Heritage Pool+ AI Assistant. I'm here to help you with Product and Account information during your online visit. I'm still learning and growing - the more we interact and the more feedback you share, the better I can assist you. How can I help you today?",
415
+ nameMessage: "Hi there 👋 I'm your Heritage Pool+ AI Assistant. I'm here to help you with Product and Account information during your online visit. I'm still learning and growing - the more we interact and the more feedback you share, the better I can assist you. How can I help you today?",
416
+ nextMessage: 'Nice to meet you {name}. How can I help you today?',
417
+ maintenanceMessage: "Hi there 👋 I'm your Heritage Pool+ AI Assistant. I'm currently undergoing maintenance to improve my services. Thank you for your patience and understanding!",
418
+ followUpQuestions: {
419
+ products: ['Do you have part # JNDDEV48 in stock?', 'Which grid assembly goes with the Hayward DE4820 filter?', "What's the max flow rate for the Tristar VS 950?", "What's the difference between the Jandy VS FloPro 2.7 HP and the Jandy VS PlusHP 2.7 HP?"],
420
+ branchInfo: ['What are the hours of my current branch?', 'How can I contact my branch?', 'Branches near me.'],
421
+ orders: ["Where can I find my PO's?", 'How do I change my shipping method?', 'How do I place my early buys?', 'Can I pick up my open order?', 'I need to edit a recently placed order.'],
422
+ invoices: ['How do I pay for invoices?', 'How do I print past invoices?', 'What is my current account balance?', 'How many unpaid invoices do I have?', 'How do I change my payment on file?']
423
+ },
424
+ loadingTips: ['Use 👍👎 next to each response to help us improve the AI Assistant', '🗑️ Clear the chat history after each conversation for continued accurate responses'],
425
+ addToCart: 'Add to Cart'
426
+ },
427
+ es: {
428
+ greeting: 'Hola',
429
+ aiAssistantIntro: 'Soy tu Asistente de IA de Heritage Pool+. Puedo ayudarte durante tu visita en línea con información de productos y cuentas.',
430
+ askAway: 'Pregunta lo que quieras...',
431
+ betaDisclaimer: 'Versión beta. ¡Asistente de IA sigue aprendiendo!',
432
+ helpCategories: 'Estas son algunas áreas en las que puedo ayudarte:',
433
+ suggestedQuestions: 'Preguntas Sugeridas...',
434
+ languageToggle: 'Assistance in English',
435
+ products: 'Productos',
436
+ orders: 'Pedidos',
437
+ invoices: 'Facturas',
438
+ branchInfo: 'Información de Sucursal',
439
+ hiMessage: 'Hola, soy tu Asistente de IA de Heritage Pool+. ¿Cómo puedo ayudarte?',
440
+ hiMessageMobile: '¡Hola, soy tu Asistente de IA de Heritage Pool+! ¿Cómo puedo ayudarte?',
441
+ defaultMessage: 'Hola 👋 Soy tu Asistente de IA de Heritage Pool+. Estoy aquí para ayudarte con información de productos y cuentas durante tu visita en línea. Sigo aprendiendo y creciendo - mientras más interactuemos y más comentarios compartas, mejor podré asistirte. ¿Cómo puedo ayudarte hoy?',
442
+ nameMessage: 'Hola 👋 Soy tu Asistente de IA de Heritage Pool+. Estoy aquí para ayudarte con información de productos y cuentas durante tu visita en línea. Sigo aprendiendo y creciendo - mientras más interactuemos y más comentarios compartas, mejor podré asistirte. ¿Cómo puedo ayudarte hoy?',
443
+ nextMessage: 'Mucho gusto en conocerte {name}. ¿Cómo puedo ayudarte hoy?',
444
+ maintenanceMessage: 'Hola 👋 Soy tu Asistente de IA de Heritage Pool+. Actualmente estoy en mantenimiento para mejorar mis servicios. ¡Gracias por tu paciencia y comprensión!',
445
+ followUpQuestions: {
446
+ products: ['¿Tienen la pieza # JNDDEV48 en existencia?', '¿Qué ensamble de rejilla corresponde al filtro Hayward DE4820?', '¿Cuál es el caudal máximo del Tristar VS 950?', '¿Cuál es la diferencia entre el Jandy VS FloPro de 2.7 HP y el Jandy VS PlusHP de 2.7 HP?'],
447
+ branchInfo: ['¿Cuáles son los horarios de mi sucursal actual?', '¿Cómo puedo contactar a mi sucursal?', 'Sucursales cerca de mí.'],
448
+ orders: ['¿Dónde puedo encontrar mis órdenes de compra?', '¿Cómo cambio mi método de envío?', '¿Cómo realizo mis compras anticipadas?', '¿Puedo recoger mi pedido abierto?', 'Necesito editar un pedido recién realizado.'],
449
+ invoices: ['¿Cómo pago las facturas?', '¿Cómo imprimo facturas anteriores?', '¿Cuál es el saldo actual de mi cuenta?', '¿Cuántas facturas sin pagar tengo?', '¿Cómo cambio mi método de pago registrado?']
450
+ },
451
+ loadingTips: ['Usa 👍👎 junto a cada respuesta para ayudarnos a mejorar el Asistente de IA', '🗑️ Borra el historial de chat después de cada conversación para mantener respuestas precisas'],
452
+ addToCart: 'Agregar al Carrito'
453
+ }
454
+ };
455
+ const [isSpanish, setIsSpanish] = useState('isSpanish', false);
456
+ const getCurrentTranslations = () => translations[isSpanish ? 'es' : 'en'];
457
+ const toggleLanguage = () => {
458
+ const newLanguage = !isSpanish;
459
+ setIsSpanish(newLanguage);
460
+
461
+ // Update messages when language changes
462
+ const currentTranslations = translations[newLanguage ? 'es' : 'en'];
463
+ if (maintenance) {
464
+ setMessages([{
465
+ type: 'ai',
466
+ text: [currentTranslations.maintenanceMessage]
467
+ }]);
468
+ } else {
469
+ setMessages([{
470
+ type: 'ai',
471
+ text: [currentTranslations.defaultMessage]
472
+ }]);
473
+ }
474
+ };
475
+ return /*#__PURE__*/React.createElement(AppContext.Provider, {
476
+ value: {
477
+ isSpanish,
478
+ getCurrentTranslations,
479
+ toggleLanguage,
480
+ showModal,
481
+ setShowModal,
482
+ messages,
483
+ setMessages,
484
+ handleSend,
485
+ input,
486
+ setInput,
487
+ defaultMessage,
488
+ typingIndicator,
489
+ setTypingIndicator,
490
+ handleClearState,
491
+ theme,
492
+ handleButtonClick,
493
+ conversationStartTime,
494
+ setConversationStartTime,
495
+ lastUserMessage,
496
+ setLastUserMessage,
497
+ ghostMessage,
498
+ setGhostMessage,
499
+ ghostCard,
500
+ setGhostCard,
501
+ stopActivated,
502
+ setStopActivated,
503
+ disclaimer,
504
+ setDisclaimer,
505
+ startStreaming,
506
+ setStartStreaming,
507
+ maintenance,
508
+ setMaintenance,
509
+ feedback,
510
+ setFeedback,
511
+ handleFeedback,
512
+ feedbackOpen,
513
+ setFeedbackOpen,
514
+ writeFeedback,
515
+ setWriteFeedback,
516
+ writeAnswer,
517
+ setWriteAnswer,
518
+ BASE_URL,
519
+ lastMessageId,
520
+ setLastMessageId,
521
+ onProductCardClick,
522
+ onAddToCartClick: handleAddToCartWithMessage,
523
+ data,
524
+ sessionId,
525
+ setSessionId,
526
+ handleWrittenFeedback,
527
+ switchFeedbackOpen,
528
+ confirmDisclaimer,
529
+ formatChatHistory,
530
+ uiConfig,
531
+ handleVoiceSend,
532
+ TRACK_CLICK_URL,
533
+ ADD_TO_CART_URL,
534
+ isListening,
535
+ setIsListening,
536
+ brandLogo,
537
+ brandCloudName,
538
+ version
539
+ }
540
+ }, children);
541
+ };
542
+ //# sourceMappingURL=AppContext.js.map