@onairos/react-native 3.0.64 โ 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 +200 -18
- 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 +200 -18
- 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 +218 -14
- package/src/types/index.d.ts +5 -0
- package/src/types/index.ts +12 -1
- package/src/types.ts +12 -1
|
@@ -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;
|
|
@@ -88,14 +88,34 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
88
88
|
const isMountedRef = useRef<boolean>(true);
|
|
89
89
|
const codeInputRefs = useRef<Array<TextInput | null>>([]);
|
|
90
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;
|
|
103
|
+
|
|
91
104
|
const platforms = [
|
|
92
105
|
{ id: 'instagram', name: 'Instagram', icon: require('../assets/images/instagram.png') },
|
|
93
106
|
{ id: 'youtube', name: 'YouTube', icon: require('../assets/images/youtube.png') },
|
|
107
|
+
{ id: 'email', name: 'Gmail', icon: require('../assets/images/email.png') },
|
|
94
108
|
{ id: 'reddit', name: 'Reddit', icon: require('../assets/images/reddit.png') },
|
|
95
109
|
{ id: 'pinterest', name: 'Pinterest', icon: require('../assets/images/pinterest.png') },
|
|
96
|
-
{ id: 'email', name: 'Gmail', icon: require('../assets/images/email.png') },
|
|
97
110
|
];
|
|
98
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
|
+
|
|
99
119
|
const {
|
|
100
120
|
connectPlatform,
|
|
101
121
|
disconnectPlatform,
|
|
@@ -570,21 +590,41 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
570
590
|
throw new Error('Email verification service not available');
|
|
571
591
|
}
|
|
572
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)
|
|
573
614
|
const result = await verifyEmailCode(email.trim(), verificationCode.trim());
|
|
574
615
|
|
|
575
616
|
if (result.success) {
|
|
576
617
|
console.log('โ
Email verification successful');
|
|
577
618
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
const existingUser = false; // TODO: Check backend for existing user
|
|
619
|
+
// Check if user exists in backend
|
|
620
|
+
const existingUser = (result as any).existingUser || false;
|
|
581
621
|
setIsExistingUser(existingUser);
|
|
582
622
|
|
|
583
623
|
if (existingUser) {
|
|
584
|
-
console.log('Existing user detected, showing data request modal');
|
|
624
|
+
console.log('๐ค Existing user detected, showing data request modal');
|
|
585
625
|
setShowDataRequestModal(true);
|
|
586
626
|
} else {
|
|
587
|
-
console.log('New user, proceeding to platform connection');
|
|
627
|
+
console.log('๐ New user, proceeding to platform connection');
|
|
588
628
|
// Safely set username from email prefix
|
|
589
629
|
try {
|
|
590
630
|
const emailPrefix = email.trim().split('@')[0];
|
|
@@ -693,23 +733,23 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
693
733
|
}, [handleClose]);
|
|
694
734
|
|
|
695
735
|
const canProceedToPin = useCallback(() => {
|
|
696
|
-
//
|
|
697
|
-
if (
|
|
698
|
-
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');
|
|
699
739
|
return true;
|
|
700
740
|
}
|
|
701
741
|
|
|
702
|
-
// Check if at least one platform is
|
|
742
|
+
// Production: Check if at least one platform is connected
|
|
703
743
|
const hasPlatformConnected = Object.values(platformToggles).some(value => value === true);
|
|
704
744
|
|
|
705
|
-
//
|
|
745
|
+
// Auto mode validation
|
|
706
746
|
if (auto && partner !== 'couplebible' && !inferenceData) {
|
|
707
747
|
console.warn('Auto mode enabled but no inference data provided (and partner is not couplebible)');
|
|
708
748
|
return false;
|
|
709
749
|
}
|
|
710
750
|
|
|
711
751
|
return hasPlatformConnected;
|
|
712
|
-
}, [platformToggles, auto, partner, inferenceData,
|
|
752
|
+
}, [platformToggles, auto, partner, inferenceData, isTestMode, testModeOptions]);
|
|
713
753
|
|
|
714
754
|
const handleProceed = () => {
|
|
715
755
|
console.log('Proceeding to next step');
|
|
@@ -931,7 +971,7 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
931
971
|
|
|
932
972
|
{/* Platform connection options */}
|
|
933
973
|
<View style={styles.platformsContainer}>
|
|
934
|
-
{
|
|
974
|
+
{platformsToDisplay.map((platform) => (
|
|
935
975
|
<TouchableOpacity
|
|
936
976
|
key={platform.id}
|
|
937
977
|
style={styles.platformItem}
|
|
@@ -964,7 +1004,71 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
964
1004
|
)}
|
|
965
1005
|
</TouchableOpacity>
|
|
966
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
|
+
)}
|
|
967
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
|
+
)}
|
|
968
1072
|
</ScrollView>
|
|
969
1073
|
|
|
970
1074
|
<View style={styles.footer}>
|
|
@@ -1038,6 +1142,7 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
1038
1142
|
onComplete={handleTrainingComplete}
|
|
1039
1143
|
modelKey="onairosTrainingModel"
|
|
1040
1144
|
username={username}
|
|
1145
|
+
test={isTestMode}
|
|
1041
1146
|
/>
|
|
1042
1147
|
)}
|
|
1043
1148
|
|
|
@@ -1072,6 +1177,20 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
1072
1177
|
AppName={AppName}
|
|
1073
1178
|
/>
|
|
1074
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
|
+
)}
|
|
1075
1194
|
</Modal>
|
|
1076
1195
|
);
|
|
1077
1196
|
};
|
|
@@ -1420,4 +1539,89 @@ const styles = StyleSheet.create({
|
|
|
1420
1539
|
color: '#666',
|
|
1421
1540
|
fontSize: 16,
|
|
1422
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
|
+
},
|
|
1423
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 {
|
package/src/types/index.ts
CHANGED
|
@@ -33,6 +33,16 @@ export interface OnairosButtonProps {
|
|
|
33
33
|
darkMode?: boolean;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
export interface TestModeOptions {
|
|
37
|
+
// Simple 2-flow system
|
|
38
|
+
existingUser?: boolean; // Flow 1: Email โ Code โ Data Request โ Close (return API URL)
|
|
39
|
+
newUser?: boolean; // Flow 2: Email โ Code โ Platform Connect โ PIN โ Training โ Complete
|
|
40
|
+
|
|
41
|
+
// Optional tweaks
|
|
42
|
+
fastTraining?: boolean; // Speed up training simulation
|
|
43
|
+
skipRealConnections?: boolean; // Allow mock platform connections
|
|
44
|
+
}
|
|
45
|
+
|
|
36
46
|
export interface UniversalOnboardingProps {
|
|
37
47
|
visible: boolean;
|
|
38
48
|
onClose: () => void;
|
|
@@ -48,7 +58,7 @@ export interface UniversalOnboardingProps {
|
|
|
48
58
|
onComplete: (apiUrl: string, token: string, userData: any) => void;
|
|
49
59
|
preferredPlatform?: string;
|
|
50
60
|
debug?: boolean;
|
|
51
|
-
test?: boolean;
|
|
61
|
+
test?: boolean | TestModeOptions; // Enhanced test mode with options
|
|
52
62
|
embedd?: boolean;
|
|
53
63
|
}
|
|
54
64
|
|
|
@@ -83,6 +93,7 @@ export interface TrainingModalProps {
|
|
|
83
93
|
onComplete?: () => void;
|
|
84
94
|
modelKey?: string;
|
|
85
95
|
username?: string;
|
|
96
|
+
test?: boolean; // Enable test mode for simulated training
|
|
86
97
|
}
|
|
87
98
|
|
|
88
99
|
export interface OAuthWebViewProps {
|
package/src/types.ts
CHANGED
|
@@ -10,6 +10,16 @@ export interface DataRequest {
|
|
|
10
10
|
reward: string;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
export interface TestModeOptions {
|
|
14
|
+
// Simple 2-flow system
|
|
15
|
+
existingUser?: boolean; // Flow 1: Email โ Code โ Data Request โ Close (return API URL)
|
|
16
|
+
newUser?: boolean; // Flow 2: Email โ Code โ Platform Connect โ PIN โ Training โ Complete
|
|
17
|
+
|
|
18
|
+
// Optional tweaks
|
|
19
|
+
fastTraining?: boolean; // Speed up training simulation
|
|
20
|
+
skipRealConnections?: boolean; // Allow mock platform connections
|
|
21
|
+
}
|
|
22
|
+
|
|
13
23
|
export interface UniversalOnboardingProps {
|
|
14
24
|
visible: boolean;
|
|
15
25
|
onClose: () => void;
|
|
@@ -29,7 +39,7 @@ export interface UniversalOnboardingProps {
|
|
|
29
39
|
onComplete: (apiUrl: string, token: string, data: any) => void;
|
|
30
40
|
embedd?: boolean;
|
|
31
41
|
debug?: boolean;
|
|
32
|
-
test?: boolean;
|
|
42
|
+
test?: boolean | TestModeOptions; // Enhanced test mode with options
|
|
33
43
|
buttonType?: 'default' | 'pill';
|
|
34
44
|
buttonForm?: 'signup' | 'login';
|
|
35
45
|
preferredPlatform?: string;
|
|
@@ -120,6 +130,7 @@ export interface TrainingModalProps {
|
|
|
120
130
|
onComplete?: () => void;
|
|
121
131
|
modelKey?: string;
|
|
122
132
|
username?: string;
|
|
133
|
+
test?: boolean; // Enable test mode for simulated training
|
|
123
134
|
}
|
|
124
135
|
|
|
125
136
|
export interface OAuthWebViewProps {
|