react-native-srschat 0.1.69 → 0.1.70
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/lib/commonjs/components/email.js +57 -53
- package/lib/commonjs/components/email.js.map +1 -1
- package/lib/commonjs/components/productCard.js +46 -3
- package/lib/commonjs/components/productCard.js.map +1 -1
- package/lib/commonjs/layout/disclaimer.js +13 -8
- package/lib/commonjs/layout/disclaimer.js.map +1 -1
- package/lib/commonjs/utils/audioRecorder.js +11 -5
- package/lib/commonjs/utils/audioRecorder.js.map +1 -1
- package/lib/module/components/email.js +57 -53
- package/lib/module/components/email.js.map +1 -1
- package/lib/module/components/productCard.js +46 -3
- package/lib/module/components/productCard.js.map +1 -1
- package/lib/module/layout/disclaimer.js +13 -8
- package/lib/module/layout/disclaimer.js.map +1 -1
- package/lib/module/utils/audioRecorder.js +11 -5
- package/lib/module/utils/audioRecorder.js.map +1 -1
- package/lib/typescript/components/email.d.ts.map +1 -1
- package/lib/typescript/components/productCard.d.ts +1 -1
- package/lib/typescript/components/productCard.d.ts.map +1 -1
- package/lib/typescript/utils/audioRecorder.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/email.js +61 -54
- package/src/components/productCard.js +45 -3
- package/src/layout/disclaimer.js +6 -8
- package/src/utils/audioRecorder.js +18 -13
|
@@ -50,10 +50,9 @@ export async function initVoice(onResult, onPartialResult = null) {
|
|
|
50
50
|
console.log('onSpeechStart: ', e);
|
|
51
51
|
isCurrentlyRecording = true;
|
|
52
52
|
finalResult = '';
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
53
|
+
|
|
54
|
+
// Start silence timer immediately when recording begins
|
|
55
|
+
handleSilenceDetection();
|
|
57
56
|
};
|
|
58
57
|
Voice.onSpeechRecognized = e => {
|
|
59
58
|
console.log('onSpeechRecognized: ', e);
|
|
@@ -140,11 +139,14 @@ const handleSilenceDetection = () => {
|
|
|
140
139
|
const handleFinalResult = async () => {
|
|
141
140
|
if (!isCurrentlyRecording) return;
|
|
142
141
|
console.log('handleFinalResult called with:', finalResult);
|
|
142
|
+
|
|
143
|
+
// Call the result callback first to update UI (button state)
|
|
144
|
+
// This ensures the button changes from stop to microphone immediately
|
|
143
145
|
if (finalResult && resultCallback) {
|
|
144
146
|
resultCallback(finalResult, null);
|
|
145
147
|
}
|
|
146
148
|
|
|
147
|
-
//
|
|
149
|
+
// Then stop recording
|
|
148
150
|
await stopRecording();
|
|
149
151
|
};
|
|
150
152
|
const cleanupVoiceSession = async () => {
|
|
@@ -221,6 +223,10 @@ export async function startRecording() {
|
|
|
221
223
|
await Voice.start('en-US');
|
|
222
224
|
console.log('Voice.start() completed');
|
|
223
225
|
isCurrentlyRecording = true;
|
|
226
|
+
|
|
227
|
+
// Start silence detection timer immediately
|
|
228
|
+
// This ensures recording stops after 3 seconds even if no speech is detected
|
|
229
|
+
handleSilenceDetection();
|
|
224
230
|
return true;
|
|
225
231
|
} catch (error) {
|
|
226
232
|
console.error('Error starting voice recognition:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","Voice","check","PERMISSIONS","request","RESULTS","resultCallback","partialResultCallback","silenceTimer","isCurrentlyRecording","finalResult","SILENCE_DURATION","PERMISSION_STORAGE_KEY","permissionStatusGetter","permissionStatusSetter","setPermissionStatusHandlers","getter","setter","initVoice","onResult","onPartialResult","console","error","isAvailable","removeAllListeners","onSpeechStart","e","log","clearTimeout","onSpeechRecognized","isFinal","handleFinalResult","onSpeechEnd","onSpeechError","_e$error","_e$error2","code","toString","msg","message","OS","includes","cleanupVoiceSession","onSpeechResults","value","length","handleSilenceDetection","onSpeechPartialResults","onSpeechVolumeChanged","setTimeout","stopRecording","isRecognizing","cancel","stop","Promise","resolve","destroy","startRecording","hasPermission","requestAudioPermission","start","cancelRecording","storedPermission","permissionResult","requestAndroidPermission","requestIOSPermission","micPermission","ANDROID","RECORD_AUDIO","GRANTED","services","getSpeechRecognitionServices","IOS","MICROPHONE","speechPermission","SPEECH_RECOGNITION","resetStoredPermission","cleanup","then","catch"],"sourceRoot":"../../../src","sources":["utils/audioRecorder.js"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Platform","Voice","check","PERMISSIONS","request","RESULTS","resultCallback","partialResultCallback","silenceTimer","isCurrentlyRecording","finalResult","SILENCE_DURATION","PERMISSION_STORAGE_KEY","permissionStatusGetter","permissionStatusSetter","setPermissionStatusHandlers","getter","setter","initVoice","onResult","onPartialResult","console","error","isAvailable","removeAllListeners","onSpeechStart","e","log","handleSilenceDetection","onSpeechRecognized","isFinal","handleFinalResult","onSpeechEnd","clearTimeout","onSpeechError","_e$error","_e$error2","code","toString","msg","message","OS","includes","cleanupVoiceSession","onSpeechResults","value","length","onSpeechPartialResults","onSpeechVolumeChanged","setTimeout","stopRecording","isRecognizing","cancel","stop","Promise","resolve","destroy","startRecording","hasPermission","requestAudioPermission","start","cancelRecording","storedPermission","permissionResult","requestAndroidPermission","requestIOSPermission","micPermission","ANDROID","RECORD_AUDIO","GRANTED","services","getSpeechRecognitionServices","IOS","MICROPHONE","speechPermission","SPEECH_RECOGNITION","resetStoredPermission","cleanup","then","catch"],"sourceRoot":"../../../src","sources":["utils/audioRecorder.js"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/components/email.js"],"names":[],"mappings":"AAiBO;;
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/components/email.js"],"names":[],"mappings":"AAiBO;;sBAqVN;;kBAtW8D,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"productCard.d.ts","sourceRoot":"","sources":["../../../src/components/productCard.js"],"names":[],"mappings":"AAOO;;;;
|
|
1
|
+
{"version":3,"file":"productCard.d.ts","sourceRoot":"","sources":["../../../src/components/productCard.js"],"names":[],"mappings":"AAOO;;;;6BAwgBN;kBA/gBsD,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioRecorder.d.ts","sourceRoot":"","sources":["../../../src/utils/audioRecorder.js"],"names":[],"mappings":"AAqBA,4EAGC;AAGD,
|
|
1
|
+
{"version":3,"file":"audioRecorder.d.ts","sourceRoot":"","sources":["../../../src/utils/audioRecorder.js"],"names":[],"mappings":"AAqBA,4EAGC;AAGD,mFAmHC;AAiFD,mDAwCC;AAED,+CAkDC;AAED,iDASC;AAED,2DA2BC;AAqDD,iDAMC;AAED,gCAgBC"}
|
package/package.json
CHANGED
package/src/components/email.js
CHANGED
|
@@ -16,11 +16,12 @@ import { Header } from "./header";
|
|
|
16
16
|
import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view";
|
|
17
17
|
|
|
18
18
|
export const EmailForm = ({ panHandlers }) => {
|
|
19
|
-
const { data, BASE_URL, setShowModal, formatChatHistory, conversationStartTime, sessionId } = useContext(AppContext);
|
|
19
|
+
const { data, BASE_URL, setShowModal, formatChatHistory, conversationStartTime, sessionId, theme } = useContext(AppContext);
|
|
20
|
+
const API_PREFIX = "https://";
|
|
20
21
|
const [subject, setSubject] = useState("");
|
|
21
22
|
const [message, setMessage] = useState("");
|
|
22
|
-
const [userEmail, setUserEmail] = useState(data?.user_email || "");
|
|
23
|
-
const [branchEmail, setBranchEmail] = useState((data?.branch_email) || "");
|
|
23
|
+
const [userEmail, setUserEmail] = useState(data?.user_email || ""); // Sender's email
|
|
24
|
+
const [branchEmail, setBranchEmail] = useState((data?.branch_email) || ""); // Recipient's email
|
|
24
25
|
const [isLoading, setIsLoading] = useState(false);
|
|
25
26
|
const [error, setError] = useState("");
|
|
26
27
|
const [success, setSuccess] = useState(false);
|
|
@@ -152,81 +153,89 @@ export const EmailForm = ({ panHandlers }) => {
|
|
|
152
153
|
const handleComposeEmail = async () => {
|
|
153
154
|
setIsComposing(true);
|
|
154
155
|
setError("");
|
|
155
|
-
setSuccess(false);
|
|
156
156
|
|
|
157
157
|
try {
|
|
158
|
-
const chatHistory = formatChatHistory();
|
|
159
|
-
|
|
158
|
+
const chatHistory = formatChatHistory().map(({ variant_type, ...rest }) => rest);
|
|
159
|
+
|
|
160
|
+
const payload = {
|
|
161
|
+
chat_history: chatHistory,
|
|
162
|
+
conversation_start_time: conversationStartTime || null,
|
|
163
|
+
customer_name: data?.customer_name || null,
|
|
164
|
+
user_id: data?.user_id || null,
|
|
165
|
+
session_id: data?.session_id || data?.session || sessionId || null,
|
|
166
|
+
user_email: data?.user_email || "",
|
|
167
|
+
branch_email: data?.branch_email || ""
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
console.log("Email composition request payload:", payload);
|
|
171
|
+
|
|
172
|
+
const response = await axios.post(`${API_PREFIX}${BASE_URL}/compose-email`, payload);
|
|
173
|
+
|
|
174
|
+
const textToType = response.data.message;
|
|
175
|
+
let currentText = "";
|
|
176
|
+
const typingSpeed = 10;
|
|
177
|
+
|
|
178
|
+
for (let i = 0; i < textToType.length; i++) {
|
|
179
|
+
await new Promise(resolve => setTimeout(resolve, typingSpeed));
|
|
180
|
+
currentText += textToType[i];
|
|
181
|
+
setMessage(currentText);
|
|
182
|
+
}
|
|
160
183
|
|
|
161
|
-
const response = await axios.post(`https://${BASE_URL}/compose-email`, payload);
|
|
162
|
-
// Use customer name from data if available, otherwise leave blank
|
|
163
|
-
|
|
164
|
-
setMessage(response.data.message);
|
|
165
184
|
setSubject(response.data.subject || "");
|
|
185
|
+
setUserEmail(response.data.user_email || userEmail || "");
|
|
186
|
+
// Don't overwrite branch email if response doesn't have it
|
|
187
|
+
if (response.data.branch_email) {
|
|
188
|
+
setBranchEmail(response.data.branch_email);
|
|
189
|
+
}
|
|
190
|
+
|
|
166
191
|
} catch (error) {
|
|
167
|
-
setError(
|
|
168
|
-
|
|
192
|
+
setError(
|
|
193
|
+
error.response?.data?.message ||
|
|
194
|
+
error.message ||
|
|
195
|
+
"Failed to compose email"
|
|
196
|
+
);
|
|
169
197
|
} finally {
|
|
170
198
|
setIsComposing(false);
|
|
171
199
|
}
|
|
172
200
|
};
|
|
173
201
|
|
|
174
202
|
const handleSubmit = async () => {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
setError(emailError);
|
|
178
|
-
setSuccess(false);
|
|
203
|
+
if (!userEmail || !subject || !message) {
|
|
204
|
+
setError("Please fill in all fields");
|
|
179
205
|
return;
|
|
180
206
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
207
|
+
|
|
208
|
+
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(userEmail)) {
|
|
209
|
+
setError("Please enter a valid email address");
|
|
184
210
|
return;
|
|
185
211
|
}
|
|
186
212
|
|
|
187
213
|
setIsLoading(true);
|
|
188
|
-
setError("");
|
|
189
|
-
setSuccess(false);
|
|
190
214
|
|
|
191
215
|
try {
|
|
192
|
-
const chatHistory = formatChatHistory();
|
|
193
|
-
|
|
194
|
-
|
|
216
|
+
const chatHistory = formatChatHistory().map(({ variant_type, ...rest }) => rest);
|
|
217
|
+
console.log("Sending email with chat history:", chatHistory);
|
|
218
|
+
|
|
219
|
+
await axios.post(`https://${BASE_URL}/send-email`, {
|
|
195
220
|
user_email: userEmail,
|
|
196
221
|
subject,
|
|
197
222
|
message,
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
await axios.post(`https://${BASE_URL}/send-email`, payload);
|
|
204
|
-
|
|
223
|
+
chat_history: chatHistory,
|
|
224
|
+
conversation_start_time: conversationStartTime,
|
|
225
|
+
customer_name: data?.customer_name,
|
|
226
|
+
branch_email: branchEmail || data?.branch_email || ""
|
|
227
|
+
});
|
|
205
228
|
setSuccess(true);
|
|
206
|
-
setError("");
|
|
207
229
|
setTimeout(() => {
|
|
208
230
|
setSuccess(false);
|
|
209
231
|
setShowModal("ChatWindow");
|
|
210
232
|
}, 2000);
|
|
211
233
|
} catch (error) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
requestPayload: {
|
|
218
|
-
user_email: userEmail,
|
|
219
|
-
subject,
|
|
220
|
-
message_length: message?.length,
|
|
221
|
-
branch_email: branchEmail,
|
|
222
|
-
customer_name: data?.customer_name,
|
|
223
|
-
conversation_start_time: conversationStartTime,
|
|
224
|
-
session_id: data?.session_id || data?.session || sessionId,
|
|
225
|
-
chat_history_length: chatHistory?.length
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
setError(error.response?.data?.message || "Failed to send email");
|
|
229
|
-
setSuccess(false);
|
|
234
|
+
setError(
|
|
235
|
+
error.response?.data?.message ||
|
|
236
|
+
error.message ||
|
|
237
|
+
"Failed to send email",
|
|
238
|
+
);
|
|
230
239
|
} finally {
|
|
231
240
|
setIsLoading(false);
|
|
232
241
|
}
|
|
@@ -257,7 +266,7 @@ export const EmailForm = ({ panHandlers }) => {
|
|
|
257
266
|
Press "Draft My Email" to generate an email based on your chat conversation. You can review and modify before sending.
|
|
258
267
|
</Text>
|
|
259
268
|
|
|
260
|
-
<TouchableOpacity style={styles.composeButton} onPress={handleComposeEmail} disabled={isComposing}>
|
|
269
|
+
<TouchableOpacity style={[styles.composeButton, { backgroundColor: theme.primaryColor }]} onPress={handleComposeEmail} disabled={isComposing}>
|
|
261
270
|
{isComposing ? (
|
|
262
271
|
<ActivityIndicator size="small" color="#FFFFFF" />
|
|
263
272
|
) : (
|
|
@@ -341,7 +350,7 @@ export const EmailForm = ({ panHandlers }) => {
|
|
|
341
350
|
{error ? <Text style={styles.errorText}>{error}</Text> : null}
|
|
342
351
|
{success ? <Text style={styles.successText}>Email sent successfully!</Text> : null}
|
|
343
352
|
|
|
344
|
-
<TouchableOpacity style={styles.sendButton} onPress={handleSubmit} disabled={isLoading}>
|
|
353
|
+
<TouchableOpacity style={[styles.sendButton, { backgroundColor: theme.primaryColor }]} onPress={handleSubmit} disabled={isLoading}>
|
|
345
354
|
{isLoading ? <ActivityIndicator size="small" color="#FFFFFF" /> : <Text style={styles.buttonText}>Send Email</Text>}
|
|
346
355
|
</TouchableOpacity>
|
|
347
356
|
</KeyboardAwareScrollView>
|
|
@@ -405,14 +414,12 @@ const styles = StyleSheet.create({
|
|
|
405
414
|
color: "#000",
|
|
406
415
|
},
|
|
407
416
|
composeButton: {
|
|
408
|
-
backgroundColor: "#367CB6",
|
|
409
417
|
borderRadius: 5,
|
|
410
418
|
padding: 12,
|
|
411
419
|
alignItems: "center",
|
|
412
420
|
marginBottom: 20,
|
|
413
421
|
},
|
|
414
422
|
sendButton: {
|
|
415
|
-
backgroundColor: "#367CB6",
|
|
416
423
|
borderRadius: 5,
|
|
417
424
|
padding: 12,
|
|
418
425
|
alignItems: "center",
|
|
@@ -9,6 +9,48 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
|
|
|
9
9
|
const { onProductCardClick, onAddToCartClick, sessionId, data, ADD_TO_CART_URL } = useContext(AppContext);
|
|
10
10
|
const [keyboardVisible, setKeyboardVisible] = useState(false);
|
|
11
11
|
|
|
12
|
+
// Validation: Check for incomplete product information
|
|
13
|
+
const hasValidProductDetails = () => {
|
|
14
|
+
if (!prod || !prod.product_details) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const details = prod.product_details;
|
|
19
|
+
if (!details.product_name || !details.part_number || !details.image_url) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return true;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const hasValidInventoryInfo = () => {
|
|
27
|
+
if (!prod.inventory_info || !prod.inventory_info.info_by_uom) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const uomData = prod.inventory_info.info_by_uom;
|
|
32
|
+
const uomKeys = Object.keys(uomData);
|
|
33
|
+
|
|
34
|
+
if (uomKeys.length === 0) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Check if at least one UOM has valid pricing
|
|
39
|
+
const hasValidPricing = uomKeys.some(uom => {
|
|
40
|
+
const uomInfo = uomData[uom];
|
|
41
|
+
return uomInfo &&
|
|
42
|
+
typeof uomInfo.gross_price === 'number' &&
|
|
43
|
+
uomInfo.gross_price > 0;
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
return hasValidPricing;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Return null if product lacks essential information
|
|
50
|
+
if (!hasValidProductDetails() || !hasValidInventoryInfo()) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
|
|
12
54
|
const [selectedUom, setSelectedUom] = useState(() => {
|
|
13
55
|
if (prod.inventory_info?.info_by_uom) {
|
|
14
56
|
const availableUoms = Object.keys(prod.inventory_info.info_by_uom);
|
|
@@ -360,13 +402,13 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
|
|
|
360
402
|
<View style={styles.priceContainer}>
|
|
361
403
|
{isOnSale ? (
|
|
362
404
|
<>
|
|
363
|
-
<Text style={styles.originalPrice} allowFontScaling={false}>${Number(grossPrice).
|
|
364
|
-
<Text style={styles.salePrice} allowFontScaling={false}>${Number(netPrice).
|
|
405
|
+
<Text style={styles.originalPrice} allowFontScaling={false}>${Number(grossPrice).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</Text>
|
|
406
|
+
<Text style={styles.salePrice} allowFontScaling={false}>${Number(netPrice).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</Text>
|
|
365
407
|
<Text style={styles.perUnit}>/ {selectedUom}</Text>
|
|
366
408
|
</>
|
|
367
409
|
) : (
|
|
368
410
|
<>
|
|
369
|
-
<Text style={styles.price} allowFontScaling={false}>${Number(grossPrice).
|
|
411
|
+
<Text style={styles.price} allowFontScaling={false}>${Number(grossPrice).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</Text>
|
|
370
412
|
<Text style={styles.perUnit}>/ {selectedUom}</Text>
|
|
371
413
|
</>
|
|
372
414
|
)}
|
package/src/layout/disclaimer.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Header } from '../components/header';
|
|
|
6
6
|
import { Testing } from "../components/testing";
|
|
7
7
|
|
|
8
8
|
export const Disclaimer = ({ panHandlers }) => {
|
|
9
|
-
const { setShowModal, confirmDisclaimer, uiConfig, onAddToCartClick, onProductCardClick } = useContext(AppContext);
|
|
9
|
+
const { setShowModal, confirmDisclaimer, uiConfig, onAddToCartClick, onProductCardClick, theme } = useContext(AppContext);
|
|
10
10
|
|
|
11
11
|
const sections = [
|
|
12
12
|
{
|
|
@@ -47,7 +47,7 @@ export const Disclaimer = ({ panHandlers }) => {
|
|
|
47
47
|
</Text>
|
|
48
48
|
|
|
49
49
|
{sections.map((section, index) => (
|
|
50
|
-
<Paragraph key={index} title={section.title} details={section.details} icon={section.icon} />
|
|
50
|
+
<Paragraph key={index} title={section.title} details={section.details} icon={section.icon} theme={theme} />
|
|
51
51
|
))}
|
|
52
52
|
|
|
53
53
|
<Text style={styles.disclaimerText}>
|
|
@@ -61,7 +61,7 @@ export const Disclaimer = ({ panHandlers }) => {
|
|
|
61
61
|
<Testing onProductCardClick={onProductCardClick} onAddToCartClick={onAddToCartClick} />
|
|
62
62
|
}
|
|
63
63
|
<View style={styles.confirmArea}>
|
|
64
|
-
<TouchableOpacity style={styles.button} onPress={confirmDisclaimer}>
|
|
64
|
+
<TouchableOpacity style={[styles.button, { backgroundColor: theme.primaryColor }]} onPress={confirmDisclaimer}>
|
|
65
65
|
<Text style={styles.buttonText}>Confirm</Text>
|
|
66
66
|
</TouchableOpacity>
|
|
67
67
|
<Text style={styles.confirmText}>
|
|
@@ -72,11 +72,11 @@ export const Disclaimer = ({ panHandlers }) => {
|
|
|
72
72
|
);
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
-
const Paragraph = ({ title, details, icon }) => {
|
|
75
|
+
const Paragraph = ({ title, details, icon, theme }) => {
|
|
76
76
|
return (
|
|
77
77
|
<View style={styles.sectionContainer}>
|
|
78
|
-
<View style={styles.iconContainer}>
|
|
79
|
-
<Feather name={icon} size={18} color=
|
|
78
|
+
<View style={[styles.iconContainer, { backgroundColor: `${theme.primaryColor}20` }]}>
|
|
79
|
+
<Feather name={icon} size={18} color={theme?.primaryColor || '#1976d2'} />
|
|
80
80
|
</View>
|
|
81
81
|
<View style={styles.textContainer}>
|
|
82
82
|
<Text style={styles.sectionTitle}>{title}</Text>
|
|
@@ -135,7 +135,6 @@ const styles = StyleSheet.create({
|
|
|
135
135
|
elevation: 1,
|
|
136
136
|
},
|
|
137
137
|
iconContainer: {
|
|
138
|
-
backgroundColor: "#bbdefb",
|
|
139
138
|
borderRadius: 10,
|
|
140
139
|
padding: 10,
|
|
141
140
|
alignItems: "center",
|
|
@@ -165,7 +164,6 @@ const styles = StyleSheet.create({
|
|
|
165
164
|
paddingBottom: 25,
|
|
166
165
|
},
|
|
167
166
|
button: {
|
|
168
|
-
backgroundColor: "#367CB6",
|
|
169
167
|
width: "100%",
|
|
170
168
|
paddingVertical: 12,
|
|
171
169
|
borderRadius: 5,
|
|
@@ -52,11 +52,9 @@ export async function initVoice(onResult, onPartialResult = null) {
|
|
|
52
52
|
console.log('onSpeechStart: ', e);
|
|
53
53
|
isCurrentlyRecording = true;
|
|
54
54
|
finalResult = '';
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
silenceTimer = null;
|
|
59
|
-
}
|
|
55
|
+
|
|
56
|
+
// Start silence timer immediately when recording begins
|
|
57
|
+
handleSilenceDetection();
|
|
60
58
|
};
|
|
61
59
|
|
|
62
60
|
Voice.onSpeechRecognized = (e) => {
|
|
@@ -158,14 +156,16 @@ const handleSilenceDetection = () => {
|
|
|
158
156
|
|
|
159
157
|
const handleFinalResult = async () => {
|
|
160
158
|
if (!isCurrentlyRecording) return;
|
|
161
|
-
|
|
159
|
+
|
|
162
160
|
console.log('handleFinalResult called with:', finalResult);
|
|
163
|
-
|
|
161
|
+
|
|
162
|
+
// Call the result callback first to update UI (button state)
|
|
163
|
+
// This ensures the button changes from stop to microphone immediately
|
|
164
164
|
if (finalResult && resultCallback) {
|
|
165
165
|
resultCallback(finalResult, null);
|
|
166
166
|
}
|
|
167
|
-
|
|
168
|
-
//
|
|
167
|
+
|
|
168
|
+
// Then stop recording
|
|
169
169
|
await stopRecording();
|
|
170
170
|
};
|
|
171
171
|
|
|
@@ -224,7 +224,7 @@ const cleanupVoiceSession = async () => {
|
|
|
224
224
|
export async function startRecording() {
|
|
225
225
|
try {
|
|
226
226
|
console.log('startRecording called');
|
|
227
|
-
|
|
227
|
+
|
|
228
228
|
// Check if Voice module is available
|
|
229
229
|
if (!Voice) {
|
|
230
230
|
console.error('Voice module is not available');
|
|
@@ -233,10 +233,10 @@ export async function startRecording() {
|
|
|
233
233
|
|
|
234
234
|
// Ensure cleanup of any existing session
|
|
235
235
|
await cleanupVoiceSession();
|
|
236
|
-
|
|
236
|
+
|
|
237
237
|
// Small delay to ensure cleanup is complete
|
|
238
238
|
await new Promise(resolve => setTimeout(resolve, 200));
|
|
239
|
-
|
|
239
|
+
|
|
240
240
|
const hasPermission = await requestAudioPermission();
|
|
241
241
|
if (!hasPermission) {
|
|
242
242
|
console.error('No permission to record audio');
|
|
@@ -245,11 +245,16 @@ export async function startRecording() {
|
|
|
245
245
|
|
|
246
246
|
// Re-initialize listeners each time for iOS stability
|
|
247
247
|
await initVoice(resultCallback, partialResultCallback);
|
|
248
|
-
|
|
248
|
+
|
|
249
249
|
// Start recognition
|
|
250
250
|
await Voice.start('en-US');
|
|
251
251
|
console.log('Voice.start() completed');
|
|
252
252
|
isCurrentlyRecording = true;
|
|
253
|
+
|
|
254
|
+
// Start silence detection timer immediately
|
|
255
|
+
// This ensures recording stops after 3 seconds even if no speech is detected
|
|
256
|
+
handleSilenceDetection();
|
|
257
|
+
|
|
253
258
|
return true;
|
|
254
259
|
} catch (error) {
|
|
255
260
|
console.error('Error starting voice recognition:', error);
|