@onairos/react-native 3.0.24 → 3.0.25

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 (37) hide show
  1. package/lib/commonjs/components/OnairosButton.js +2 -3
  2. package/lib/commonjs/components/OnairosButton.js.map +1 -1
  3. package/lib/commonjs/components/TrainingModal.js +120 -16
  4. package/lib/commonjs/components/TrainingModal.js.map +1 -1
  5. package/lib/commonjs/components/UniversalOnboarding.js +131 -76
  6. package/lib/commonjs/components/UniversalOnboarding.js.map +1 -1
  7. package/lib/commonjs/components/onboarding/OAuthWebView.js +138 -27
  8. package/lib/commonjs/components/onboarding/OAuthWebView.js.map +1 -1
  9. package/lib/commonjs/constants/index.js +3 -3
  10. package/lib/commonjs/constants/index.js.map +1 -1
  11. package/lib/commonjs/services/platformAuthService.js +91 -44
  12. package/lib/commonjs/services/platformAuthService.js.map +1 -1
  13. package/lib/module/components/OnairosButton.js +2 -3
  14. package/lib/module/components/OnairosButton.js.map +1 -1
  15. package/lib/module/components/TrainingModal.js +120 -17
  16. package/lib/module/components/TrainingModal.js.map +1 -1
  17. package/lib/module/components/UniversalOnboarding.js +132 -77
  18. package/lib/module/components/UniversalOnboarding.js.map +1 -1
  19. package/lib/module/components/onboarding/OAuthWebView.js +139 -28
  20. package/lib/module/components/onboarding/OAuthWebView.js.map +1 -1
  21. package/lib/module/constants/index.js +3 -3
  22. package/lib/module/constants/index.js.map +1 -1
  23. package/lib/module/services/platformAuthService.js +88 -42
  24. package/lib/module/services/platformAuthService.js.map +1 -1
  25. package/lib/typescript/components/OnairosButton.d.ts.map +1 -1
  26. package/lib/typescript/components/TrainingModal.d.ts.map +1 -1
  27. package/lib/typescript/components/UniversalOnboarding.d.ts.map +1 -1
  28. package/lib/typescript/components/onboarding/OAuthWebView.d.ts.map +1 -1
  29. package/lib/typescript/services/platformAuthService.d.ts +11 -4
  30. package/lib/typescript/services/platformAuthService.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/components/OnairosButton.tsx +1 -4
  33. package/src/components/TrainingModal.tsx +202 -61
  34. package/src/components/UniversalOnboarding.tsx +129 -76
  35. package/src/components/onboarding/OAuthWebView.tsx +135 -25
  36. package/src/constants/index.ts +3 -3
  37. package/src/services/platformAuthService.ts +106 -40
@@ -1,11 +1,14 @@
1
- import React from 'react';
2
- import { View, Text, StyleSheet, TouchableOpacity, ActivityIndicator, Dimensions, Modal, TouchableWithoutFeedback, SafeAreaView } from 'react-native';
1
+ import React, { useState, useEffect } from 'react';
2
+ import { View, Text, StyleSheet, TouchableOpacity, ActivityIndicator, Dimensions, Modal, Animated, TouchableWithoutFeedback, SafeAreaView, TextInput, KeyboardAvoidingView, Platform } from 'react-native';
3
3
  import Icon from 'react-native-vector-icons/MaterialIcons';
4
4
  import { COLORS } from '../constants';
5
5
  const {
6
6
  width,
7
7
  height
8
8
  } = Dimensions.get('window');
9
+
10
+ // Dynamic training messages that appear during the process
11
+ const TRAINING_MESSAGES = ["Loading your data...", "Analyzing your digital footprint...", "Your mind is very unique...", "Creating your AI persona...", "Building neural pathways...", "Finalizing your digital twin...", "Almost ready...", "Training complete!"];
9
12
  export const TrainingModal = ({
10
13
  visible,
11
14
  progress,
@@ -15,13 +18,48 @@ export const TrainingModal = ({
15
18
  modelKey,
16
19
  username
17
20
  }) => {
21
+ const [email, setEmail] = useState('');
22
+ const [showEmailInput, setShowEmailInput] = useState(false);
23
+ const [currentMessage, setCurrentMessage] = useState(TRAINING_MESSAGES[0]);
24
+ const [messageIndex, setMessageIndex] = useState(0);
18
25
  const progressPercentage = Math.round(progress * 100);
26
+
27
+ // Update training message based on progress
28
+ useEffect(() => {
29
+ if (progress > 0) {
30
+ const newIndex = Math.min(Math.floor(progress * TRAINING_MESSAGES.length), TRAINING_MESSAGES.length - 1);
31
+ if (newIndex !== messageIndex) {
32
+ setMessageIndex(newIndex);
33
+ setCurrentMessage(TRAINING_MESSAGES[newIndex]);
34
+ }
35
+ }
36
+ }, [progress, messageIndex]);
37
+
38
+ // Show email input when training is complete
39
+ useEffect(() => {
40
+ if (progress >= 1 && !showEmailInput) {
41
+ setShowEmailInput(true);
42
+ }
43
+ }, [progress, showEmailInput]);
44
+ const handleEmailSubmit = () => {
45
+ if (email.trim() && onComplete) {
46
+ // Pass email data to the completion handler
47
+ onComplete();
48
+ }
49
+ };
50
+ const isValidEmail = email => {
51
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
52
+ return emailRegex.test(email);
53
+ };
19
54
  return /*#__PURE__*/React.createElement(Modal, {
20
55
  visible: visible,
21
56
  transparent: true,
22
57
  animationType: "none",
23
58
  statusBarTranslucent: true,
24
59
  onRequestClose: onCancel
60
+ }, /*#__PURE__*/React.createElement(KeyboardAvoidingView, {
61
+ style: styles.modalOverlay,
62
+ behavior: Platform.OS === 'ios' ? 'padding' : 'height'
25
63
  }, /*#__PURE__*/React.createElement(TouchableWithoutFeedback, null, /*#__PURE__*/React.createElement(View, {
26
64
  style: styles.modalOverlay
27
65
  }, /*#__PURE__*/React.createElement(TouchableWithoutFeedback, null, /*#__PURE__*/React.createElement(View, {
@@ -34,7 +72,7 @@ export const TrainingModal = ({
34
72
  style: styles.container
35
73
  }, /*#__PURE__*/React.createElement(View, {
36
74
  style: styles.content
37
- }, /*#__PURE__*/React.createElement(Icon, {
75
+ }, !showEmailInput ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {
38
76
  name: "auto_awesome",
39
77
  size: 48,
40
78
  color: COLORS.primary
@@ -46,7 +84,7 @@ export const TrainingModal = ({
46
84
  style: styles.progressContainer
47
85
  }, /*#__PURE__*/React.createElement(View, {
48
86
  style: styles.progressBar
49
- }, /*#__PURE__*/React.createElement(View, {
87
+ }, /*#__PURE__*/React.createElement(Animated.View, {
50
88
  style: [styles.progressFill, {
51
89
  width: `${progressPercentage}%`
52
90
  }]
@@ -61,19 +99,51 @@ export const TrainingModal = ({
61
99
  color: COLORS.primary
62
100
  }), /*#__PURE__*/React.createElement(Text, {
63
101
  style: styles.loadingText
64
- }, "Processing your data...")), /*#__PURE__*/React.createElement(View, {
102
+ }, currentMessage)), /*#__PURE__*/React.createElement(View, {
103
+ style: styles.footer
104
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
105
+ style: styles.cancelButton,
106
+ onPress: onCancel
107
+ }, /*#__PURE__*/React.createElement(Text, {
108
+ style: styles.cancelButtonText
109
+ }, "Cancel")))) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {
110
+ name: "check_circle",
111
+ size: 48,
112
+ color: "#4CAF50"
113
+ }), /*#__PURE__*/React.createElement(Text, {
114
+ style: styles.title
115
+ }, "Training Complete!"), /*#__PURE__*/React.createElement(Text, {
116
+ style: styles.subtitle
117
+ }, "Your AI model is ready. Enter your email to receive your account details and access your digital twin."), /*#__PURE__*/React.createElement(View, {
118
+ style: styles.emailContainer
119
+ }, /*#__PURE__*/React.createElement(Text, {
120
+ style: styles.emailLabel
121
+ }, "Email Address"), /*#__PURE__*/React.createElement(TextInput, {
122
+ style: styles.emailInput,
123
+ placeholder: "Enter your email address",
124
+ placeholderTextColor: "#999",
125
+ value: email,
126
+ onChangeText: setEmail,
127
+ keyboardType: "email-address",
128
+ autoCapitalize: "none",
129
+ autoCorrect: false,
130
+ autoComplete: "email"
131
+ }), /*#__PURE__*/React.createElement(Text, {
132
+ style: styles.emailHint
133
+ }, "We'll send you login credentials and access to your AI persona")), /*#__PURE__*/React.createElement(View, {
65
134
  style: styles.footer
66
135
  }, /*#__PURE__*/React.createElement(TouchableOpacity, {
67
136
  style: styles.cancelButton,
68
137
  onPress: onCancel
69
138
  }, /*#__PURE__*/React.createElement(Text, {
70
139
  style: styles.cancelButtonText
71
- }, "Cancel")), progress >= 1 && /*#__PURE__*/React.createElement(TouchableOpacity, {
72
- style: styles.completeButton,
73
- onPress: onComplete
140
+ }, "Cancel")), /*#__PURE__*/React.createElement(TouchableOpacity, {
141
+ style: [styles.completeButton, !isValidEmail(email) && styles.completeButtonDisabled],
142
+ onPress: handleEmailSubmit,
143
+ disabled: !isValidEmail(email)
74
144
  }, /*#__PURE__*/React.createElement(Text, {
75
- style: styles.completeButtonText
76
- }, "Complete"))))))))));
145
+ style: [styles.completeButtonText, !isValidEmail(email) && styles.completeButtonTextDisabled]
146
+ }, "Complete Setup"))))))))))));
77
147
  };
78
148
  const styles = StyleSheet.create({
79
149
  modalOverlay: {
@@ -85,7 +155,7 @@ const styles = StyleSheet.create({
85
155
  bottomSheet: {
86
156
  backgroundColor: '#fff',
87
157
  width: width,
88
- height: height * 0.6,
158
+ height: height * 0.7,
89
159
  borderTopLeftRadius: 24,
90
160
  borderTopRightRadius: 24,
91
161
  overflow: 'hidden'
@@ -125,7 +195,8 @@ const styles = StyleSheet.create({
125
195
  fontSize: 16,
126
196
  color: COLORS.text.secondary,
127
197
  textAlign: 'center',
128
- marginBottom: 32
198
+ marginBottom: 32,
199
+ lineHeight: 22
129
200
  },
130
201
  progressContainer: {
131
202
  width: '100%',
@@ -159,9 +230,37 @@ const styles = StyleSheet.create({
159
230
  marginBottom: 32
160
231
  },
161
232
  loadingText: {
233
+ fontSize: 16,
234
+ color: COLORS.text.primary,
235
+ marginLeft: 12,
236
+ fontWeight: '500'
237
+ },
238
+ emailContainer: {
239
+ width: '100%',
240
+ marginBottom: 32
241
+ },
242
+ emailLabel: {
243
+ fontSize: 16,
244
+ fontWeight: '600',
245
+ color: COLORS.text.primary,
246
+ marginBottom: 8
247
+ },
248
+ emailInput: {
249
+ width: '100%',
250
+ height: 48,
251
+ borderWidth: 1,
252
+ borderColor: '#E0E0E0',
253
+ borderRadius: 12,
254
+ paddingHorizontal: 16,
255
+ fontSize: 16,
256
+ color: COLORS.text.primary,
257
+ backgroundColor: '#F8F8F8'
258
+ },
259
+ emailHint: {
162
260
  fontSize: 14,
163
261
  color: COLORS.text.secondary,
164
- marginLeft: 8
262
+ marginTop: 8,
263
+ textAlign: 'center'
165
264
  },
166
265
  footer: {
167
266
  flexDirection: 'row',
@@ -186,14 +285,18 @@ const styles = StyleSheet.create({
186
285
  paddingVertical: 16,
187
286
  paddingHorizontal: 32,
188
287
  borderRadius: 16,
189
- backgroundColor: '#fff',
190
- borderWidth: 1,
191
- borderColor: '#000'
288
+ backgroundColor: '#000'
289
+ },
290
+ completeButtonDisabled: {
291
+ backgroundColor: '#E0E0E0'
192
292
  },
193
293
  completeButtonText: {
194
294
  fontSize: 16,
195
295
  fontWeight: '600',
196
- color: '#000'
296
+ color: '#fff'
297
+ },
298
+ completeButtonTextDisabled: {
299
+ color: '#999'
197
300
  }
198
301
  });
199
302
  //# sourceMappingURL=TrainingModal.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","Text","StyleSheet","TouchableOpacity","ActivityIndicator","Dimensions","Modal","TouchableWithoutFeedback","SafeAreaView","Icon","COLORS","width","height","get","TrainingModal","visible","progress","eta","onCancel","onComplete","modelKey","username","progressPercentage","Math","round","createElement","transparent","animationType","statusBarTranslucent","onRequestClose","style","styles","modalOverlay","bottomSheet","handleContainer","handle","container","content","name","size","color","primary","title","subtitle","progressContainer","progressBar","progressFill","progressText","etaText","loadingContainer","loadingText","footer","cancelButton","onPress","cancelButtonText","completeButton","completeButtonText","create","flex","backgroundColor","justifyContent","alignItems","borderTopLeftRadius","borderTopRightRadius","overflow","paddingTop","paddingBottom","borderRadius","padding","fontSize","fontWeight","marginTop","marginBottom","text","textAlign","secondary","border","flexDirection","marginLeft","borderTopWidth","borderTopColor","paddingHorizontal","paddingVertical","borderWidth","borderColor"],"sourceRoot":"..\\..\\..\\src","sources":["components/TrainingModal.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useEffect","View","Text","StyleSheet","TouchableOpacity","ActivityIndicator","Dimensions","Modal","Animated","TouchableWithoutFeedback","SafeAreaView","TextInput","KeyboardAvoidingView","Platform","Icon","COLORS","width","height","get","TRAINING_MESSAGES","TrainingModal","visible","progress","eta","onCancel","onComplete","modelKey","username","email","setEmail","showEmailInput","setShowEmailInput","currentMessage","setCurrentMessage","messageIndex","setMessageIndex","progressPercentage","Math","round","newIndex","min","floor","length","handleEmailSubmit","trim","isValidEmail","emailRegex","test","createElement","transparent","animationType","statusBarTranslucent","onRequestClose","style","styles","modalOverlay","behavior","OS","bottomSheet","handleContainer","handle","container","content","Fragment","name","size","color","primary","title","subtitle","progressContainer","progressBar","progressFill","progressText","etaText","loadingContainer","loadingText","footer","cancelButton","onPress","cancelButtonText","emailContainer","emailLabel","emailInput","placeholder","placeholderTextColor","value","onChangeText","keyboardType","autoCapitalize","autoCorrect","autoComplete","emailHint","completeButton","completeButtonDisabled","disabled","completeButtonText","completeButtonTextDisabled","create","flex","backgroundColor","justifyContent","alignItems","borderTopLeftRadius","borderTopRightRadius","overflow","paddingTop","paddingBottom","borderRadius","padding","fontSize","fontWeight","marginTop","marginBottom","text","textAlign","secondary","lineHeight","border","flexDirection","marginLeft","borderWidth","borderColor","paddingHorizontal","borderTopWidth","borderTopColor","paddingVertical"],"sourceRoot":"..\\..\\..\\src","sources":["components/TrainingModal.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,10 +1,11 @@
1
1
  import React, { useCallback, useEffect, useState } from 'react';
2
- import { View, Text, StyleSheet, TouchableOpacity, Dimensions, Platform, Modal, Animated, SafeAreaView, TouchableWithoutFeedback, ScrollView, Image, Switch, Linking } from 'react-native';
2
+ import { View, Text, StyleSheet, TouchableOpacity, ActivityIndicator, Dimensions, Platform, Modal, Animated, SafeAreaView, TouchableWithoutFeedback, ScrollView, Image, Switch, Linking } from 'react-native';
3
3
  import Icon from 'react-native-vector-icons/MaterialIcons';
4
4
  import { PinInput } from './PinInput';
5
5
  import { TrainingModal } from './TrainingModal';
6
6
  import { OAuthWebView } from './onboarding/OAuthWebView';
7
7
  import { useConnections } from '../hooks/useConnections';
8
+ import { COLORS } from '../constants';
8
9
  import { initiateOAuth, initiateNativeAuth, hasNativeSDK, isOAuthCallback } from '../services/platformAuthService';
9
10
  const {
10
11
  height,
@@ -34,7 +35,9 @@ export const UniversalOnboarding = ({
34
35
  const [platformToggles, setPlatformToggles] = useState({});
35
36
  const [oauthUrl, setOauthUrl] = useState('');
36
37
  const [currentPlatform, setCurrentPlatform] = useState('');
37
- const [username, setUsername] = useState(`user_${Math.floor(Math.random() * 10000)}`);
38
+ const [userEmail, setUserEmail] = useState('user@example.com'); // Use proper email instead of random username
39
+ const [isConnectingPlatform, setIsConnectingPlatform] = useState(false);
40
+ const [connectingPlatform, setConnectingPlatform] = useState(null);
38
41
  const platforms = [{
39
42
  id: 'instagram',
40
43
  name: 'Instagram',
@@ -156,64 +159,77 @@ export const UniversalOnboarding = ({
156
159
  setConnections(status);
157
160
  }, [getConnectionStatus]);
158
161
  const togglePlatform = useCallback(async platformId => {
159
- // If toggling on, initiate the OAuth flow for the platform
160
162
  if (!platformToggles[platformId]) {
163
+ // Attempt to connect platform
161
164
  try {
162
- // Special case for Instagram which uses the existing flow
163
- if (platformId === 'instagram') {
164
- setPlatformToggles(prev => ({
165
- ...prev,
166
- [platformId]: !prev[platformId]
167
- }));
168
- return;
169
- }
165
+ setIsConnectingPlatform(true);
166
+ setConnectingPlatform(platformId);
167
+ console.log(`Initiating connection for ${platformId}`);
170
168
 
171
- // Check if the platform has a native SDK
169
+ // Check if platform has a native SDK
172
170
  if (hasNativeSDK(platformId)) {
173
- // Use native SDK authentication
174
- setCurrentPlatform(platformId);
171
+ console.log(`Using native SDK for ${platformId}`);
172
+ // Use native SDK for authentication
175
173
  const success = await initiateNativeAuth(platformId);
176
174
  if (success) {
175
+ console.log(`Native authentication successful for ${platformId}`);
176
+ // Update platform toggle state
177
+ setPlatformToggles(prev => ({
178
+ ...prev,
179
+ [platformId]: true
180
+ }));
181
+
177
182
  // Update connections state
178
183
  setConnections(prev => ({
179
184
  ...prev,
180
185
  [platformId]: {
181
- userName: username,
186
+ userName: userEmail,
182
187
  connected: true
183
188
  }
184
189
  }));
185
-
186
- // Update platform toggles
187
- setPlatformToggles(prev => ({
188
- ...prev,
189
- [platformId]: true
190
- }));
191
190
  }
192
- return;
193
- }
194
-
195
- // For other platforms, use the web OAuth flow
196
- setCurrentPlatform(platformId);
197
- const oauthUrl = await initiateOAuth(platformId, username);
198
-
199
- // If oauthUrl is null, it means we should use native SDK (which should have been caught above)
200
- if (oauthUrl) {
201
- setOauthUrl(oauthUrl);
202
- setStep('oauth');
191
+ } else {
192
+ console.log(`Initiating OAuth flow for ${platformId}`);
193
+ // Use OAuth flow through proxy server
194
+ const oauthUrl = await initiateOAuth(platformId, userEmail);
195
+ if (oauthUrl) {
196
+ console.log(`Received OAuth URL for ${platformId}: ${oauthUrl}`);
197
+ setCurrentPlatform(platformId);
198
+ setOauthUrl(oauthUrl);
199
+ setStep('oauth');
200
+ } else {
201
+ console.error(`No OAuth URL returned for ${platformId}`);
202
+ }
203
203
  }
204
204
  } catch (error) {
205
- console.error(`Error initiating OAuth for ${platformId}:`, error);
206
- // If there's an error, don't toggle the platform
207
- return;
205
+ console.error(`Error connecting ${platformId}:`, error);
206
+ // Reset toggle state on error
207
+ setPlatformToggles(prev => ({
208
+ ...prev,
209
+ [platformId]: false
210
+ }));
211
+ } finally {
212
+ setIsConnectingPlatform(false);
213
+ setConnectingPlatform(null);
208
214
  }
209
215
  } else {
210
- // If toggling off, just update the state
216
+ // Disconnect platform
217
+ console.log(`Disconnecting ${platformId}`);
211
218
  setPlatformToggles(prev => ({
212
219
  ...prev,
213
- [platformId]: !prev[platformId]
220
+ [platformId]: false
214
221
  }));
222
+
223
+ // Update connections state
224
+ setConnections(prev => {
225
+ const newConnections = {
226
+ ...prev
227
+ };
228
+ delete newConnections[platformId];
229
+ return newConnections;
230
+ });
215
231
  }
216
- }, [platformToggles, username]);
232
+ }, [platformToggles, userEmail]);
217
233
 
218
234
  /**
219
235
  * Handles OAuth callback URLs
@@ -229,7 +245,7 @@ export const UniversalOnboarding = ({
229
245
  setConnections(prev => ({
230
246
  ...prev,
231
247
  [platform]: {
232
- userName: username,
248
+ userName: userEmail,
233
249
  connected: true
234
250
  }
235
251
  }));
@@ -246,18 +262,21 @@ export const UniversalOnboarding = ({
246
262
  } catch (error) {
247
263
  console.error('Error handling OAuth callback:', error);
248
264
  }
249
- }, [currentPlatform, username]);
265
+ }, [currentPlatform, userEmail]);
250
266
 
251
267
  /**
252
268
  * Handles completion of the OAuth flow
253
269
  */
254
270
  const handleOAuthSuccess = useCallback(code => {
271
+ console.log(`OAuth success for ${currentPlatform} with code: ${code}`);
272
+
273
+ // Update connections for the current platform
255
274
  if (currentPlatform) {
256
275
  // Update connections state
257
276
  setConnections(prev => ({
258
277
  ...prev,
259
278
  [currentPlatform]: {
260
- userName: username,
279
+ userName: userEmail,
261
280
  connected: true
262
281
  }
263
282
  }));
@@ -268,32 +287,36 @@ export const UniversalOnboarding = ({
268
287
  [currentPlatform]: true
269
288
  }));
270
289
 
271
- // Return to the connect step
272
- setStep('connect');
290
+ // In a real implementation, we would send the code to our server
291
+ // to exchange it for an access token and store it securely
292
+ console.log(`Simulating token exchange for ${currentPlatform}`);
293
+
294
+ // For demo purposes, we'll just simulate a successful token exchange
295
+ if (debug || test) {
296
+ console.log('Debug mode: Simulating successful token exchange');
297
+ }
273
298
  }
274
- }, [currentPlatform, username]);
299
+
300
+ // Close OAuth window and return to connect step
301
+ setOauthUrl('');
302
+ setStep('connect');
303
+ }, [currentPlatform, userEmail, debug, test]);
275
304
  const handlePinSubmit = useCallback(async userPin => {
276
305
  setPin(userPin);
277
306
  setStep('training');
278
- // Simulate training progress
307
+ // Simulate training progress over 10 seconds
279
308
  let progress = 0;
280
309
  const interval = setInterval(() => {
281
- progress += 0.1;
310
+ progress += 1; // 10% progress every second for 1 seconds total
282
311
  setTraining({
283
312
  progress,
284
- eta: `${Math.round((1 - progress) * 100)} seconds remaining`
313
+ eta: `${Math.round((1 - progress) * 10)} seconds remaining`
285
314
  });
286
315
  if (progress >= 1) {
287
316
  clearInterval(interval);
288
- onComplete('https://api2.onairos.uk', 'dummy-token', {
289
- pin: userPin,
290
- connections,
291
- platformToggles,
292
- selectedTier,
293
- tierData: requestData === null || requestData === void 0 ? void 0 : requestData[selectedTier]
294
- });
317
+ // Training complete - TrainingModal will handle email input and final completion
295
318
  }
296
- }, 1000);
319
+ }, 1000); // 1 second intervals for 10 total seconds
297
320
  }, [connections, onComplete, selectedTier, requestData, platformToggles]);
298
321
  const canProceedToPin = useCallback(() => {
299
322
  // Check if at least one platform is toggled on
@@ -355,26 +378,39 @@ export const UniversalOnboarding = ({
355
378
  style: styles.privacyMessage
356
379
  }, "None of your app data is shared with ANYONE")), /*#__PURE__*/React.createElement(View, {
357
380
  style: styles.platformsContainer
358
- }, platforms.map(platform => /*#__PURE__*/React.createElement(View, {
359
- key: platform.id,
360
- style: styles.platformItem
361
- }, /*#__PURE__*/React.createElement(View, {
362
- style: styles.platformInfo
363
- }, /*#__PURE__*/React.createElement(Image, {
364
- source: platform.icon,
365
- style: styles.platformIcon,
366
- resizeMode: "contain"
367
- }), /*#__PURE__*/React.createElement(Text, {
368
- style: styles.platformName
369
- }, platform.name)), /*#__PURE__*/React.createElement(Switch, {
370
- value: platformToggles[platform.id],
371
- onValueChange: () => togglePlatform(platform.id),
372
- trackColor: {
373
- false: '#767577',
374
- true: '#81b0ff'
375
- },
376
- thumbColor: platformToggles[platform.id] ? '#2196F3' : '#f4f3f4'
377
- }))))), /*#__PURE__*/React.createElement(View, {
381
+ }, platforms.map(platform => {
382
+ var _connections$platform, _connections$platform2, _connections$platform3, _connections$platform4;
383
+ return /*#__PURE__*/React.createElement(View, {
384
+ key: platform.id,
385
+ style: [styles.platformItem, ((_connections$platform = connections[platform.id]) === null || _connections$platform === void 0 ? void 0 : _connections$platform.connected) && styles.platformItemConnected]
386
+ }, /*#__PURE__*/React.createElement(View, {
387
+ style: styles.platformInfo
388
+ }, /*#__PURE__*/React.createElement(Image, {
389
+ source: platform.icon,
390
+ style: styles.platformIcon,
391
+ resizeMode: "contain"
392
+ }), /*#__PURE__*/React.createElement(View, {
393
+ style: styles.platformTextContainer
394
+ }, /*#__PURE__*/React.createElement(Text, {
395
+ style: styles.platformName
396
+ }, platform.name), ((_connections$platform2 = connections[platform.id]) === null || _connections$platform2 === void 0 ? void 0 : _connections$platform2.connected) && /*#__PURE__*/React.createElement(Text, {
397
+ style: styles.connectedText
398
+ }, "Connected"))), /*#__PURE__*/React.createElement(View, {
399
+ style: styles.platformActions
400
+ }, connectingPlatform === platform.id ? /*#__PURE__*/React.createElement(ActivityIndicator, {
401
+ size: "small",
402
+ color: COLORS.primary
403
+ }) : /*#__PURE__*/React.createElement(Switch, {
404
+ value: platformToggles[platform.id] || ((_connections$platform3 = connections[platform.id]) === null || _connections$platform3 === void 0 ? void 0 : _connections$platform3.connected) || false,
405
+ onValueChange: () => togglePlatform(platform.id),
406
+ trackColor: {
407
+ false: '#767577',
408
+ true: '#81b0ff'
409
+ },
410
+ thumbColor: platformToggles[platform.id] || (_connections$platform4 = connections[platform.id]) !== null && _connections$platform4 !== void 0 && _connections$platform4.connected ? '#2196F3' : '#f4f3f4',
411
+ disabled: connectingPlatform !== null
412
+ })));
413
+ }))), /*#__PURE__*/React.createElement(View, {
378
414
  style: styles.footer
379
415
  }, /*#__PURE__*/React.createElement(TouchableOpacity, {
380
416
  style: styles.footerButtonCancel,
@@ -404,11 +440,12 @@ export const UniversalOnboarding = ({
404
440
  connections,
405
441
  platformToggles,
406
442
  selectedTier,
407
- tierData: requestData === null || requestData === void 0 ? void 0 : requestData[selectedTier]
443
+ tierData: requestData === null || requestData === void 0 ? void 0 : requestData[selectedTier],
444
+ userEmail
408
445
  });
409
446
  },
410
447
  modelKey: "onairosTrainingModel",
411
- username: username
448
+ username: userEmail
412
449
  }), step === 'oauth' && oauthUrl && /*#__PURE__*/React.createElement(OAuthWebView, {
413
450
  url: oauthUrl,
414
451
  platform: currentPlatform,
@@ -536,6 +573,24 @@ const styles = StyleSheet.create({
536
573
  fontWeight: '500',
537
574
  color: '#000'
538
575
  },
576
+ platformTextContainer: {
577
+ flex: 1
578
+ },
579
+ connectedText: {
580
+ fontSize: 12,
581
+ color: '#4CAF50',
582
+ fontWeight: '500',
583
+ marginTop: 2
584
+ },
585
+ platformActions: {
586
+ alignItems: 'center',
587
+ justifyContent: 'center'
588
+ },
589
+ platformItemConnected: {
590
+ backgroundColor: '#F8F9FA',
591
+ borderColor: '#4CAF50',
592
+ borderWidth: 1
593
+ },
539
594
  footer: {
540
595
  flexDirection: 'row',
541
596
  alignItems: 'center',