@onairos/react-native 3.0.63 → 3.0.65
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/TrainingModal.js +75 -4
- package/lib/commonjs/components/TrainingModal.js.map +1 -1
- package/lib/commonjs/components/UniversalOnboarding.js +244 -33
- package/lib/commonjs/components/UniversalOnboarding.js.map +1 -1
- package/lib/module/components/TrainingModal.js +75 -4
- package/lib/module/components/TrainingModal.js.map +1 -1
- package/lib/module/components/UniversalOnboarding.js +244 -33
- package/lib/module/components/UniversalOnboarding.js.map +1 -1
- package/lib/module/index.js +10 -9
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/components/TrainingModal.d.ts.map +1 -1
- package/lib/typescript/components/UniversalOnboarding.d.ts.map +1 -1
- package/lib/typescript/types/index.d.ts +8 -1
- package/lib/typescript/types/index.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +8 -1
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/TrainingModal.tsx +58 -4
- package/src/components/UniversalOnboarding.tsx +259 -27
- package/src/types/index.d.ts +5 -0
- package/src/types/index.ts +12 -1
- package/src/types.ts +12 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrainingModal.d.ts","sourceRoot":"","sources":["../../../src/components/TrainingModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAiB3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAInD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"TrainingModal.d.ts","sourceRoot":"","sources":["../../../src/components/TrainingModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAiB3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAInD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA+StD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalOnboarding.d.ts","sourceRoot":"","sources":["../../../src/components/UniversalOnboarding.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AA6BxE,OAAO,KAAK,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"UniversalOnboarding.d.ts","sourceRoot":"","sources":["../../../src/components/UniversalOnboarding.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AA6BxE,OAAO,KAAK,EAAE,wBAAwB,EAAqC,MAAM,UAAU,CAAC;AAmB5F,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA2nClE,CAAC"}
|
|
@@ -31,6 +31,12 @@ export interface OnairosButtonProps {
|
|
|
31
31
|
testMode?: boolean;
|
|
32
32
|
darkMode?: boolean;
|
|
33
33
|
}
|
|
34
|
+
export interface TestModeOptions {
|
|
35
|
+
existingUser?: boolean;
|
|
36
|
+
newUser?: boolean;
|
|
37
|
+
fastTraining?: boolean;
|
|
38
|
+
skipRealConnections?: boolean;
|
|
39
|
+
}
|
|
34
40
|
export interface UniversalOnboardingProps {
|
|
35
41
|
visible: boolean;
|
|
36
42
|
onClose: () => void;
|
|
@@ -46,7 +52,7 @@ export interface UniversalOnboardingProps {
|
|
|
46
52
|
onComplete: (apiUrl: string, token: string, userData: any) => void;
|
|
47
53
|
preferredPlatform?: string;
|
|
48
54
|
debug?: boolean;
|
|
49
|
-
test?: boolean;
|
|
55
|
+
test?: boolean | TestModeOptions;
|
|
50
56
|
embedd?: boolean;
|
|
51
57
|
}
|
|
52
58
|
export interface ConnectionStatus {
|
|
@@ -77,6 +83,7 @@ export interface TrainingModalProps {
|
|
|
77
83
|
onComplete?: () => void;
|
|
78
84
|
modelKey?: string;
|
|
79
85
|
username?: string;
|
|
86
|
+
test?: boolean;
|
|
80
87
|
}
|
|
81
88
|
export interface OAuthWebViewProps {
|
|
82
89
|
url: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,IAAI,EAAE,MAAM,CAAC;YACb,YAAY,EAAE,MAAM,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,IAAI,EAAE,MAAM,CAAC;YACb,YAAY,EAAE,MAAM,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,12 @@ export interface DataRequest {
|
|
|
8
8
|
description: string;
|
|
9
9
|
reward: string;
|
|
10
10
|
}
|
|
11
|
+
export interface TestModeOptions {
|
|
12
|
+
existingUser?: boolean;
|
|
13
|
+
newUser?: boolean;
|
|
14
|
+
fastTraining?: boolean;
|
|
15
|
+
skipRealConnections?: boolean;
|
|
16
|
+
}
|
|
11
17
|
export interface UniversalOnboardingProps {
|
|
12
18
|
visible: boolean;
|
|
13
19
|
onClose: () => void;
|
|
@@ -25,7 +31,7 @@ export interface UniversalOnboardingProps {
|
|
|
25
31
|
onComplete: (apiUrl: string, token: string, data: any) => void;
|
|
26
32
|
embedd?: boolean;
|
|
27
33
|
debug?: boolean;
|
|
28
|
-
test?: boolean;
|
|
34
|
+
test?: boolean | TestModeOptions;
|
|
29
35
|
buttonType?: 'default' | 'pill';
|
|
30
36
|
buttonForm?: 'signup' | 'login';
|
|
31
37
|
preferredPlatform?: string;
|
|
@@ -109,6 +115,7 @@ export interface TrainingModalProps {
|
|
|
109
115
|
onComplete?: () => void;
|
|
110
116
|
modelKey?: string;
|
|
111
117
|
username?: string;
|
|
118
|
+
test?: boolean;
|
|
112
119
|
}
|
|
113
120
|
export interface OAuthWebViewProps {
|
|
114
121
|
url: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,WAAW,EAAE;QAEX,KAAK,CAAC,EAAE,QAAQ,CAAC;QACjB,MAAM,CAAC,EAAE,QAAQ,CAAC;QAClB,KAAK,CAAC,EAAE,QAAQ,CAAC;QAEjB,kBAAkB,CAAC,EAAE,WAAW,CAAC;QACjC,kBAAkB,CAAC,EAAE,WAAW,CAAC;QACjC,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;KACnD,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -27,6 +27,7 @@ export const TrainingModal: React.FC<TrainingModalProps> = ({
|
|
|
27
27
|
onComplete,
|
|
28
28
|
modelKey,
|
|
29
29
|
username,
|
|
30
|
+
test = false,
|
|
30
31
|
}) => {
|
|
31
32
|
// Socket and training state
|
|
32
33
|
const socketRef = useRef<Socket | null>(null);
|
|
@@ -106,6 +107,50 @@ export const TrainingModal: React.FC<TrainingModalProps> = ({
|
|
|
106
107
|
setHasError(true);
|
|
107
108
|
}
|
|
108
109
|
};
|
|
110
|
+
|
|
111
|
+
// Simulate training progress for test mode
|
|
112
|
+
const simulateTraining = () => {
|
|
113
|
+
console.log('🧪 Starting simulated training...');
|
|
114
|
+
setTrainingStatus('Initializing training...');
|
|
115
|
+
setInternalProgress(10);
|
|
116
|
+
|
|
117
|
+
// Fast training for test mode (shorter delays)
|
|
118
|
+
const baseDelay = 800;
|
|
119
|
+
const stages = [
|
|
120
|
+
{ progress: 20, status: 'Analyzing data patterns...', delay: baseDelay },
|
|
121
|
+
{ progress: 35, status: 'Building neural network...', delay: baseDelay },
|
|
122
|
+
{ progress: 50, status: 'Training model...', delay: baseDelay },
|
|
123
|
+
{ progress: 65, status: 'Optimizing parameters...', delay: baseDelay },
|
|
124
|
+
{ progress: 80, status: 'Running test inference...', delay: baseDelay },
|
|
125
|
+
{ progress: 95, status: 'Finalizing model...', delay: baseDelay },
|
|
126
|
+
{ progress: 100, status: 'Complete!', delay: 300 },
|
|
127
|
+
];
|
|
128
|
+
|
|
129
|
+
let currentStage = 0;
|
|
130
|
+
|
|
131
|
+
const progressInterval = setInterval(() => {
|
|
132
|
+
if (currentStage < stages.length) {
|
|
133
|
+
const stage = stages[currentStage];
|
|
134
|
+
setInternalProgress(stage.progress);
|
|
135
|
+
setTrainingStatus(stage.status);
|
|
136
|
+
|
|
137
|
+
if (stage.progress === 100) {
|
|
138
|
+
setIsTrainingComplete(true);
|
|
139
|
+
clearInterval(progressInterval);
|
|
140
|
+
|
|
141
|
+
// Auto-complete after a short delay
|
|
142
|
+
setTimeout(() => {
|
|
143
|
+
onComplete && onComplete();
|
|
144
|
+
}, 800);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
currentStage++;
|
|
148
|
+
}
|
|
149
|
+
}, stages[currentStage]?.delay || baseDelay);
|
|
150
|
+
|
|
151
|
+
// Cleanup interval on unmount
|
|
152
|
+
return () => clearInterval(progressInterval);
|
|
153
|
+
};
|
|
109
154
|
|
|
110
155
|
// Setup socket connection and training
|
|
111
156
|
useEffect(() => {
|
|
@@ -113,6 +158,15 @@ export const TrainingModal: React.FC<TrainingModalProps> = ({
|
|
|
113
158
|
|
|
114
159
|
console.log('Setting up socket connection for training...');
|
|
115
160
|
console.log('🧑💻 User info available:', userInfo);
|
|
161
|
+
console.log('🧪 Test mode:', test);
|
|
162
|
+
|
|
163
|
+
// If test mode is enabled, use simulation instead of real API
|
|
164
|
+
if (test) {
|
|
165
|
+
console.log('🧪 Test mode enabled - Using simulated training');
|
|
166
|
+
setSocketConnected(true);
|
|
167
|
+
simulateTraining();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
116
170
|
|
|
117
171
|
// Initialize real socket connection - backend confirmed this is working
|
|
118
172
|
try {
|
|
@@ -159,7 +213,7 @@ export const TrainingModal: React.FC<TrainingModalProps> = ({
|
|
|
159
213
|
|
|
160
214
|
// Auto-complete after a short delay
|
|
161
215
|
setTimeout(() => {
|
|
162
|
-
onComplete();
|
|
216
|
+
onComplete && onComplete();
|
|
163
217
|
}, 1500);
|
|
164
218
|
});
|
|
165
219
|
|
|
@@ -180,8 +234,8 @@ export const TrainingModal: React.FC<TrainingModalProps> = ({
|
|
|
180
234
|
console.error('Socket connection failed, falling back to simulation:', socketError);
|
|
181
235
|
// Fallback to simulation if socket fails
|
|
182
236
|
console.log('🔌 Falling back to simulated socket connection...');
|
|
183
|
-
|
|
184
|
-
|
|
237
|
+
setSocketConnected(true);
|
|
238
|
+
simulateTraining();
|
|
185
239
|
}
|
|
186
240
|
|
|
187
241
|
// Cleanup function
|
|
@@ -192,7 +246,7 @@ export const TrainingModal: React.FC<TrainingModalProps> = ({
|
|
|
192
246
|
socketRef.current = null;
|
|
193
247
|
}
|
|
194
248
|
};
|
|
195
|
-
}, [visible, userInfo]);
|
|
249
|
+
}, [visible, userInfo, test]);
|
|
196
250
|
|
|
197
251
|
return (
|
|
198
252
|
<Modal
|
|
@@ -27,7 +27,7 @@ import { OAuthWebView } from './onboarding/OAuthWebView';
|
|
|
27
27
|
import { useConnections } from '../hooks/useConnections';
|
|
28
28
|
import { COLORS, DEEP_LINK_CONFIG } from '../constants';
|
|
29
29
|
import { initiateOAuth, initiateNativeAuth, hasNativeSDK, isOAuthCallback, testApiConnectivity, handleOAuthCallbackUrl, refreshYouTubeTokens, requestEmailVerification, verifyEmailCode, checkEmailVerificationStatus, disconnectPlatform } from '../services/platformAuthService';
|
|
30
|
-
import type { UniversalOnboardingProps, ConnectionStatus } from '../types';
|
|
30
|
+
import type { UniversalOnboardingProps, ConnectionStatus, TestModeOptions } from '../types';
|
|
31
31
|
|
|
32
32
|
// Optional Opacity SDK imports with error handling
|
|
33
33
|
let opacityInit: any = null;
|
|
@@ -83,18 +83,39 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
83
83
|
const [showDataRequestModal, setShowDataRequestModal] = useState<boolean>(false);
|
|
84
84
|
const [isExistingUser, setIsExistingUser] = useState<boolean>(false);
|
|
85
85
|
|
|
86
|
-
// Add refs for cleanup
|
|
86
|
+
// Add refs for cleanup and code inputs
|
|
87
87
|
const successTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
88
88
|
const isMountedRef = useRef<boolean>(true);
|
|
89
|
+
const codeInputRefs = useRef<Array<TextInput | null>>([]);
|
|
90
|
+
|
|
91
|
+
// Add state for showing additional platforms
|
|
92
|
+
const [showAllPlatforms, setShowAllPlatforms] = useState<boolean>(false);
|
|
93
|
+
const [showTestDataRequest, setShowTestDataRequest] = useState<boolean>(false);
|
|
94
|
+
|
|
95
|
+
// Parse test mode options
|
|
96
|
+
const testModeOptions = typeof test === 'object' ? test : {};
|
|
97
|
+
const isTestMode = test === true || (typeof test === 'object' && test !== null);
|
|
98
|
+
const showTestControls = (debug || isTestMode) && requestData;
|
|
99
|
+
|
|
100
|
+
// Simple 2-flow system
|
|
101
|
+
const isExistingUserFlow = testModeOptions.existingUser || false;
|
|
102
|
+
const isNewUserFlow = testModeOptions.newUser || false;
|
|
89
103
|
|
|
90
104
|
const platforms = [
|
|
91
105
|
{ id: 'instagram', name: 'Instagram', icon: require('../assets/images/instagram.png') },
|
|
92
106
|
{ id: 'youtube', name: 'YouTube', icon: require('../assets/images/youtube.png') },
|
|
107
|
+
{ id: 'email', name: 'Gmail', icon: require('../assets/images/email.png') },
|
|
93
108
|
{ id: 'reddit', name: 'Reddit', icon: require('../assets/images/reddit.png') },
|
|
94
109
|
{ id: 'pinterest', name: 'Pinterest', icon: require('../assets/images/pinterest.png') },
|
|
95
|
-
{ id: 'email', name: 'Gmail', icon: require('../assets/images/email.png') },
|
|
96
110
|
];
|
|
97
111
|
|
|
112
|
+
// Define primary platforms (shown by default)
|
|
113
|
+
const primaryPlatforms = platforms.slice(0, 3); // Instagram, YouTube, Gmail
|
|
114
|
+
const additionalPlatforms = platforms.slice(3); // Reddit, Pinterest
|
|
115
|
+
|
|
116
|
+
// Get platforms to display based on showAllPlatforms state
|
|
117
|
+
const platformsToDisplay = showAllPlatforms ? platforms : primaryPlatforms;
|
|
118
|
+
|
|
98
119
|
const {
|
|
99
120
|
connectPlatform,
|
|
100
121
|
disconnectPlatform,
|
|
@@ -569,21 +590,41 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
569
590
|
throw new Error('Email verification service not available');
|
|
570
591
|
}
|
|
571
592
|
|
|
593
|
+
// Test Mode: Use specific flows
|
|
594
|
+
if (isTestMode) {
|
|
595
|
+
console.log('🧪 Test mode verification - simulating success');
|
|
596
|
+
|
|
597
|
+
if (isExistingUserFlow) {
|
|
598
|
+
// Flow 1: Existing User → Data Request → Close (return API URL)
|
|
599
|
+
console.log('🧪 Test Flow 1: Existing User → Show Data Request');
|
|
600
|
+
setIsExistingUser(true);
|
|
601
|
+
setShowDataRequestModal(true);
|
|
602
|
+
return;
|
|
603
|
+
} else if (isNewUserFlow) {
|
|
604
|
+
// Flow 2: New User → Platform Connect → PIN → Training
|
|
605
|
+
console.log('🧪 Test Flow 2: New User → Platform Connect');
|
|
606
|
+
const emailPrefix = email.trim().split('@')[0] || 'TestUser';
|
|
607
|
+
setUsername(emailPrefix);
|
|
608
|
+
setStep('connect');
|
|
609
|
+
return;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// Real API call (production)
|
|
572
614
|
const result = await verifyEmailCode(email.trim(), verificationCode.trim());
|
|
573
615
|
|
|
574
616
|
if (result.success) {
|
|
575
617
|
console.log('✅ Email verification successful');
|
|
576
618
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
const existingUser = false; // TODO: Check backend for existing user
|
|
619
|
+
// Check if user exists in backend
|
|
620
|
+
const existingUser = (result as any).existingUser || false;
|
|
580
621
|
setIsExistingUser(existingUser);
|
|
581
622
|
|
|
582
623
|
if (existingUser) {
|
|
583
|
-
console.log('Existing user detected, showing data request modal');
|
|
624
|
+
console.log('👤 Existing user detected, showing data request modal');
|
|
584
625
|
setShowDataRequestModal(true);
|
|
585
626
|
} else {
|
|
586
|
-
console.log('New user, proceeding to platform connection');
|
|
627
|
+
console.log('🆕 New user, proceeding to platform connection');
|
|
587
628
|
// Safely set username from email prefix
|
|
588
629
|
try {
|
|
589
630
|
const emailPrefix = email.trim().split('@')[0];
|
|
@@ -692,23 +733,23 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
692
733
|
}, [handleClose]);
|
|
693
734
|
|
|
694
735
|
const canProceedToPin = useCallback(() => {
|
|
695
|
-
//
|
|
696
|
-
if (
|
|
697
|
-
console.log('🧪
|
|
736
|
+
// Test mode: Always allow proceeding (simulates platform connections)
|
|
737
|
+
if (isTestMode || testModeOptions.skipRealConnections) {
|
|
738
|
+
console.log('🧪 Test mode: Allowing proceed without real platform connections');
|
|
698
739
|
return true;
|
|
699
740
|
}
|
|
700
741
|
|
|
701
|
-
// Check if at least one platform is
|
|
742
|
+
// Production: Check if at least one platform is connected
|
|
702
743
|
const hasPlatformConnected = Object.values(platformToggles).some(value => value === true);
|
|
703
744
|
|
|
704
|
-
//
|
|
745
|
+
// Auto mode validation
|
|
705
746
|
if (auto && partner !== 'couplebible' && !inferenceData) {
|
|
706
747
|
console.warn('Auto mode enabled but no inference data provided (and partner is not couplebible)');
|
|
707
748
|
return false;
|
|
708
749
|
}
|
|
709
750
|
|
|
710
751
|
return hasPlatformConnected;
|
|
711
|
-
}, [platformToggles, auto, partner, inferenceData,
|
|
752
|
+
}, [platformToggles, auto, partner, inferenceData, isTestMode, testModeOptions]);
|
|
712
753
|
|
|
713
754
|
const handleProceed = () => {
|
|
714
755
|
console.log('Proceeding to next step');
|
|
@@ -815,6 +856,7 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
815
856
|
{[0, 1, 2, 3, 4, 5].map((index) => (
|
|
816
857
|
<TextInput
|
|
817
858
|
key={index}
|
|
859
|
+
ref={(ref) => (codeInputRefs.current[index] = ref)}
|
|
818
860
|
style={[
|
|
819
861
|
styles.codeDigit,
|
|
820
862
|
verificationCode.length === index && styles.codeDigitActive
|
|
@@ -829,10 +871,16 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
829
871
|
|
|
830
872
|
// Auto-focus next input
|
|
831
873
|
if (text && index < 5) {
|
|
832
|
-
|
|
874
|
+
codeInputRefs.current[index + 1]?.focus();
|
|
833
875
|
}
|
|
834
876
|
}
|
|
835
877
|
}}
|
|
878
|
+
onKeyPress={({ nativeEvent }) => {
|
|
879
|
+
// Handle backspace to move to previous input
|
|
880
|
+
if (nativeEvent.key === 'Backspace' && !verificationCode[index] && index > 0) {
|
|
881
|
+
codeInputRefs.current[index - 1]?.focus();
|
|
882
|
+
}
|
|
883
|
+
}}
|
|
836
884
|
keyboardType="number-pad"
|
|
837
885
|
maxLength={1}
|
|
838
886
|
textAlign="center"
|
|
@@ -914,11 +962,16 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
914
962
|
<Text style={styles.privacyMessage}>
|
|
915
963
|
None of your app data is shared with ANYONE
|
|
916
964
|
</Text>
|
|
965
|
+
{(debug || test) && (
|
|
966
|
+
<Text style={styles.developmentNote}>
|
|
967
|
+
🧪 Test Mode: You can proceed without connecting any platforms
|
|
968
|
+
</Text>
|
|
969
|
+
)}
|
|
917
970
|
</View>
|
|
918
971
|
|
|
919
972
|
{/* Platform connection options */}
|
|
920
973
|
<View style={styles.platformsContainer}>
|
|
921
|
-
{
|
|
974
|
+
{platformsToDisplay.map((platform) => (
|
|
922
975
|
<TouchableOpacity
|
|
923
976
|
key={platform.id}
|
|
924
977
|
style={styles.platformItem}
|
|
@@ -943,14 +996,79 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
943
996
|
styles.platformToggle,
|
|
944
997
|
platformToggles[platform.id] && styles.platformToggleActive
|
|
945
998
|
]}>
|
|
946
|
-
{
|
|
947
|
-
|
|
948
|
-
|
|
999
|
+
<View style={[
|
|
1000
|
+
styles.platformToggleThumb,
|
|
1001
|
+
platformToggles[platform.id] && styles.platformToggleThumbActive
|
|
1002
|
+
]} />
|
|
949
1003
|
</View>
|
|
950
1004
|
)}
|
|
951
1005
|
</TouchableOpacity>
|
|
952
1006
|
))}
|
|
1007
|
+
|
|
1008
|
+
{/* Show more/less platforms button */}
|
|
1009
|
+
{additionalPlatforms.length > 0 && (
|
|
1010
|
+
<TouchableOpacity
|
|
1011
|
+
style={styles.expandButton}
|
|
1012
|
+
onPress={() => setShowAllPlatforms(!showAllPlatforms)}
|
|
1013
|
+
>
|
|
1014
|
+
<Icon
|
|
1015
|
+
name={showAllPlatforms ? "expand_less" : "add"}
|
|
1016
|
+
size={24}
|
|
1017
|
+
color={COLORS.primary}
|
|
1018
|
+
/>
|
|
1019
|
+
<Text style={styles.expandButtonText}>
|
|
1020
|
+
{showAllPlatforms
|
|
1021
|
+
? "Show Less"
|
|
1022
|
+
: `${additionalPlatforms.length} More Connectors`
|
|
1023
|
+
}
|
|
1024
|
+
</Text>
|
|
1025
|
+
</TouchableOpacity>
|
|
1026
|
+
)}
|
|
953
1027
|
</View>
|
|
1028
|
+
|
|
1029
|
+
{/* Test mode controls - Simple 2-flow system */}
|
|
1030
|
+
{showTestControls && (
|
|
1031
|
+
<View style={styles.testModeContainer}>
|
|
1032
|
+
<Text style={styles.testModeTitle}>🧪 Test Mode - 2 Main Flows</Text>
|
|
1033
|
+
|
|
1034
|
+
<TouchableOpacity
|
|
1035
|
+
style={styles.testExistingUserButton}
|
|
1036
|
+
onPress={() => {
|
|
1037
|
+
// Flow 1: Existing User
|
|
1038
|
+
setIsExistingUser(true);
|
|
1039
|
+
setShowDataRequestModal(true);
|
|
1040
|
+
}}
|
|
1041
|
+
>
|
|
1042
|
+
<Icon name="person" size={20} color="#28a745" />
|
|
1043
|
+
<Text style={styles.testExistingUserButtonText}>
|
|
1044
|
+
Flow 1: Existing User (Email → Code → Data Request → Close)
|
|
1045
|
+
</Text>
|
|
1046
|
+
</TouchableOpacity>
|
|
1047
|
+
|
|
1048
|
+
<TouchableOpacity
|
|
1049
|
+
style={styles.testSkipToTrainingButton}
|
|
1050
|
+
onPress={() => {
|
|
1051
|
+
// Flow 2: New User - Skip to connect step
|
|
1052
|
+
setStep('connect');
|
|
1053
|
+
}}
|
|
1054
|
+
>
|
|
1055
|
+
<Icon name="person-add" size={20} color="#17a2b8" />
|
|
1056
|
+
<Text style={styles.testSkipToTrainingButtonText}>
|
|
1057
|
+
Flow 2: New User (Connect → PIN → Training)
|
|
1058
|
+
</Text>
|
|
1059
|
+
</TouchableOpacity>
|
|
1060
|
+
|
|
1061
|
+
<TouchableOpacity
|
|
1062
|
+
style={styles.testDataRequestButton}
|
|
1063
|
+
onPress={() => setShowTestDataRequest(true)}
|
|
1064
|
+
>
|
|
1065
|
+
<Icon name="preview" size={20} color={COLORS.primary} />
|
|
1066
|
+
<Text style={styles.testDataRequestButtonText}>
|
|
1067
|
+
Preview Data Request Modal
|
|
1068
|
+
</Text>
|
|
1069
|
+
</TouchableOpacity>
|
|
1070
|
+
</View>
|
|
1071
|
+
)}
|
|
954
1072
|
</ScrollView>
|
|
955
1073
|
|
|
956
1074
|
<View style={styles.footer}>
|
|
@@ -1024,6 +1142,7 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
1024
1142
|
onComplete={handleTrainingComplete}
|
|
1025
1143
|
modelKey="onairosTrainingModel"
|
|
1026
1144
|
username={username}
|
|
1145
|
+
test={isTestMode}
|
|
1027
1146
|
/>
|
|
1028
1147
|
)}
|
|
1029
1148
|
|
|
@@ -1058,6 +1177,20 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
1058
1177
|
AppName={AppName}
|
|
1059
1178
|
/>
|
|
1060
1179
|
)}
|
|
1180
|
+
|
|
1181
|
+
{/* Test mode data request modal */}
|
|
1182
|
+
{showTestDataRequest && requestData && (
|
|
1183
|
+
<DataRequestModal
|
|
1184
|
+
visible={showTestDataRequest}
|
|
1185
|
+
onClose={() => setShowTestDataRequest(false)}
|
|
1186
|
+
onAccept={() => {
|
|
1187
|
+
setShowTestDataRequest(false);
|
|
1188
|
+
Alert.alert('Test Mode', 'This is a preview of the data request. In actual implementation, this would proceed with the data sharing agreement.');
|
|
1189
|
+
}}
|
|
1190
|
+
requestData={requestData}
|
|
1191
|
+
AppName={`${AppName} (Test Preview)`}
|
|
1192
|
+
/>
|
|
1193
|
+
)}
|
|
1061
1194
|
</Modal>
|
|
1062
1195
|
);
|
|
1063
1196
|
};
|
|
@@ -1266,18 +1399,32 @@ const styles = StyleSheet.create({
|
|
|
1266
1399
|
color: '#666',
|
|
1267
1400
|
},
|
|
1268
1401
|
platformToggle: {
|
|
1269
|
-
width:
|
|
1270
|
-
height:
|
|
1271
|
-
borderRadius:
|
|
1402
|
+
width: 50,
|
|
1403
|
+
height: 28,
|
|
1404
|
+
borderRadius: 14,
|
|
1272
1405
|
borderWidth: 1,
|
|
1273
|
-
borderColor: '#
|
|
1274
|
-
|
|
1406
|
+
borderColor: '#ddd',
|
|
1407
|
+
backgroundColor: '#f0f0f0',
|
|
1275
1408
|
justifyContent: 'center',
|
|
1276
|
-
|
|
1409
|
+
paddingHorizontal: 2,
|
|
1277
1410
|
},
|
|
1278
1411
|
platformToggleActive: {
|
|
1279
|
-
borderColor: '#
|
|
1280
|
-
backgroundColor: '#
|
|
1412
|
+
borderColor: '#4CAF50',
|
|
1413
|
+
backgroundColor: '#4CAF50',
|
|
1414
|
+
},
|
|
1415
|
+
platformToggleThumb: {
|
|
1416
|
+
width: 22,
|
|
1417
|
+
height: 22,
|
|
1418
|
+
borderRadius: 11,
|
|
1419
|
+
backgroundColor: '#fff',
|
|
1420
|
+
shadowColor: '#000',
|
|
1421
|
+
shadowOffset: { width: 0, height: 1 },
|
|
1422
|
+
shadowOpacity: 0.2,
|
|
1423
|
+
shadowRadius: 2,
|
|
1424
|
+
elevation: 2,
|
|
1425
|
+
},
|
|
1426
|
+
platformToggleThumbActive: {
|
|
1427
|
+
alignSelf: 'flex-end',
|
|
1281
1428
|
},
|
|
1282
1429
|
// Dark mode styles
|
|
1283
1430
|
darkPlatformItem: {
|
|
@@ -1392,4 +1539,89 @@ const styles = StyleSheet.create({
|
|
|
1392
1539
|
color: '#666',
|
|
1393
1540
|
fontSize: 16,
|
|
1394
1541
|
},
|
|
1542
|
+
// Expand button styles
|
|
1543
|
+
expandButton: {
|
|
1544
|
+
flexDirection: 'row',
|
|
1545
|
+
alignItems: 'center',
|
|
1546
|
+
justifyContent: 'center',
|
|
1547
|
+
padding: 12,
|
|
1548
|
+
backgroundColor: '#f8f9fa',
|
|
1549
|
+
borderRadius: 12,
|
|
1550
|
+
borderWidth: 1,
|
|
1551
|
+
borderColor: '#e9ecef',
|
|
1552
|
+
marginTop: 8,
|
|
1553
|
+
},
|
|
1554
|
+
expandButtonText: {
|
|
1555
|
+
fontSize: 14,
|
|
1556
|
+
fontWeight: '500',
|
|
1557
|
+
color: COLORS.primary,
|
|
1558
|
+
marginLeft: 8,
|
|
1559
|
+
},
|
|
1560
|
+
// Test mode styles
|
|
1561
|
+
testModeContainer: {
|
|
1562
|
+
marginTop: 16,
|
|
1563
|
+
paddingHorizontal: 16,
|
|
1564
|
+
backgroundColor: '#f8f9fa',
|
|
1565
|
+
borderRadius: 12,
|
|
1566
|
+
padding: 16,
|
|
1567
|
+
borderWidth: 1,
|
|
1568
|
+
borderColor: '#e9ecef',
|
|
1569
|
+
},
|
|
1570
|
+
testModeTitle: {
|
|
1571
|
+
fontSize: 16,
|
|
1572
|
+
fontWeight: '600',
|
|
1573
|
+
color: '#495057',
|
|
1574
|
+
marginBottom: 12,
|
|
1575
|
+
textAlign: 'center',
|
|
1576
|
+
},
|
|
1577
|
+
testDataRequestButton: {
|
|
1578
|
+
flexDirection: 'row',
|
|
1579
|
+
alignItems: 'center',
|
|
1580
|
+
justifyContent: 'center',
|
|
1581
|
+
padding: 12,
|
|
1582
|
+
backgroundColor: '#fff3cd',
|
|
1583
|
+
borderRadius: 12,
|
|
1584
|
+
borderWidth: 1,
|
|
1585
|
+
borderColor: '#ffeaa7',
|
|
1586
|
+
marginBottom: 8,
|
|
1587
|
+
},
|
|
1588
|
+
testDataRequestButtonText: {
|
|
1589
|
+
fontSize: 14,
|
|
1590
|
+
fontWeight: '500',
|
|
1591
|
+
color: '#856404',
|
|
1592
|
+
marginLeft: 8,
|
|
1593
|
+
},
|
|
1594
|
+
testExistingUserButton: {
|
|
1595
|
+
flexDirection: 'row',
|
|
1596
|
+
alignItems: 'center',
|
|
1597
|
+
justifyContent: 'center',
|
|
1598
|
+
padding: 12,
|
|
1599
|
+
backgroundColor: '#d4edda',
|
|
1600
|
+
borderRadius: 12,
|
|
1601
|
+
borderWidth: 1,
|
|
1602
|
+
borderColor: '#c3e6cb',
|
|
1603
|
+
marginBottom: 8,
|
|
1604
|
+
},
|
|
1605
|
+
testExistingUserButtonText: {
|
|
1606
|
+
fontSize: 14,
|
|
1607
|
+
fontWeight: '500',
|
|
1608
|
+
color: '#155724',
|
|
1609
|
+
marginLeft: 8,
|
|
1610
|
+
},
|
|
1611
|
+
testSkipToTrainingButton: {
|
|
1612
|
+
flexDirection: 'row',
|
|
1613
|
+
alignItems: 'center',
|
|
1614
|
+
justifyContent: 'center',
|
|
1615
|
+
padding: 12,
|
|
1616
|
+
backgroundColor: '#d1ecf1',
|
|
1617
|
+
borderRadius: 12,
|
|
1618
|
+
borderWidth: 1,
|
|
1619
|
+
borderColor: '#bee5eb',
|
|
1620
|
+
},
|
|
1621
|
+
testSkipToTrainingButtonText: {
|
|
1622
|
+
fontSize: 14,
|
|
1623
|
+
fontWeight: '500',
|
|
1624
|
+
color: '#0c5460',
|
|
1625
|
+
marginLeft: 8,
|
|
1626
|
+
},
|
|
1395
1627
|
});
|
package/src/types/index.d.ts
CHANGED
|
@@ -90,9 +90,14 @@ declare module '@onairos/react-native' {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
export interface TrainingModalProps {
|
|
93
|
+
visible: boolean;
|
|
93
94
|
progress: number;
|
|
94
95
|
eta: string;
|
|
95
96
|
onCancel: () => void;
|
|
97
|
+
onComplete?: () => void;
|
|
98
|
+
modelKey?: string;
|
|
99
|
+
username?: string;
|
|
100
|
+
test?: boolean; // Enable test mode for simulated training
|
|
96
101
|
}
|
|
97
102
|
|
|
98
103
|
export interface OAuthWebViewProps {
|