@onairos/react-native 3.0.55 โ 3.0.57
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/Overlay.js +1 -1
- package/lib/commonjs/components/TrainingModal.js +9 -15
- package/lib/commonjs/components/TrainingModal.js.map +1 -1
- package/lib/commonjs/components/UniversalOnboarding.js +89 -56
- package/lib/commonjs/components/UniversalOnboarding.js.map +1 -1
- package/lib/module/components/Overlay.js +1 -1
- package/lib/module/components/TrainingModal.js +10 -16
- package/lib/module/components/TrainingModal.js.map +1 -1
- package/lib/module/components/UniversalOnboarding.js +89 -56
- package/lib/module/components/UniversalOnboarding.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/package.json +1 -1
- package/src/components/Overlay.tsx +1 -1
- package/src/components/TrainingModal.tsx +9 -16
- package/src/components/UniversalOnboarding.tsx +94 -54
|
@@ -22,6 +22,7 @@ import Icon from 'react-native-vector-icons/MaterialIcons';
|
|
|
22
22
|
import { PlatformList } from './PlatformList';
|
|
23
23
|
import { PinInput } from './PinInput';
|
|
24
24
|
import { TrainingModal } from './TrainingModal';
|
|
25
|
+
import { DataRequestModal } from './DataRequestModal';
|
|
25
26
|
import { OAuthWebView } from './onboarding/OAuthWebView';
|
|
26
27
|
import { useConnections } from '../hooks/useConnections';
|
|
27
28
|
import { COLORS, DEEP_LINK_CONFIG } from '../constants';
|
|
@@ -60,7 +61,7 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
60
61
|
auto = false,
|
|
61
62
|
partner,
|
|
62
63
|
}) => {
|
|
63
|
-
const [step, setStep] = useState<'email' | 'verify' | 'connect' | 'pin' | 'training' | 'oauth' | 'success'>('email');
|
|
64
|
+
const [step, setStep] = useState<'email' | 'verify' | 'dataRequest' | 'connect' | 'pin' | 'training' | 'oauth' | 'success'>('email');
|
|
64
65
|
const [connections, setConnections] = useState<ConnectionStatus>({});
|
|
65
66
|
const [pin, setPin] = useState<string>('');
|
|
66
67
|
const [selectedTier, setSelectedTier] = useState<'Small' | 'Medium' | 'Large'>('Medium');
|
|
@@ -78,6 +79,8 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
78
79
|
const [email, setEmail] = useState<string>('');
|
|
79
80
|
const [verificationCode, setVerificationCode] = useState<string>('');
|
|
80
81
|
const [isVerifyingCode, setIsVerifyingCode] = useState<boolean>(false);
|
|
82
|
+
const [showDataRequestModal, setShowDataRequestModal] = useState<boolean>(false);
|
|
83
|
+
const [isExistingUser, setIsExistingUser] = useState<boolean>(false);
|
|
81
84
|
|
|
82
85
|
// Add refs for cleanup
|
|
83
86
|
const successTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
@@ -495,16 +498,14 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
495
498
|
if (result.success) {
|
|
496
499
|
console.log('โ
Email verification successful');
|
|
497
500
|
|
|
498
|
-
// For now,
|
|
499
|
-
|
|
501
|
+
// For now, always treat as new users for testing (can be updated later)
|
|
502
|
+
// In production, this would check if user exists in database
|
|
503
|
+
const existingUser = false; // TODO: Check backend for existing user
|
|
504
|
+
setIsExistingUser(existingUser);
|
|
500
505
|
|
|
501
|
-
if (
|
|
502
|
-
console.log('Existing user detected,
|
|
503
|
-
|
|
504
|
-
existingAccount: true,
|
|
505
|
-
email: email.trim(),
|
|
506
|
-
skipOnboarding: true,
|
|
507
|
-
});
|
|
506
|
+
if (existingUser) {
|
|
507
|
+
console.log('Existing user detected, showing data request modal');
|
|
508
|
+
setShowDataRequestModal(true);
|
|
508
509
|
} else {
|
|
509
510
|
console.log('New user, proceeding to platform connection');
|
|
510
511
|
setUsername(email.split('@')[0]); // Use email prefix as username
|
|
@@ -554,41 +555,62 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
554
555
|
} catch (error) {
|
|
555
556
|
console.error('Failed to save session data:', error);
|
|
556
557
|
}
|
|
558
|
+
}, [connections, selectedTier, platformToggles, username, AppName, auto, inferenceData, partner]);
|
|
559
|
+
|
|
560
|
+
const handleTrainingComplete = useCallback(() => {
|
|
561
|
+
console.log('๐ Training completed successfully');
|
|
557
562
|
|
|
558
|
-
//
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
if
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
563
|
+
// Prepare completion data
|
|
564
|
+
const completionData = {
|
|
565
|
+
pin,
|
|
566
|
+
connections,
|
|
567
|
+
platformToggles,
|
|
568
|
+
selectedTier,
|
|
569
|
+
tierData: requestData?.[selectedTier],
|
|
570
|
+
sessionSaved: true,
|
|
571
|
+
// Add inference data if auto mode is enabled
|
|
572
|
+
...(auto && inferenceData && { inferenceData }),
|
|
573
|
+
// Add partner info for special partners
|
|
574
|
+
...(partner && { partner: partner === 'couplebible' ? 'CoupleBible' : partner }),
|
|
575
|
+
};
|
|
576
|
+
|
|
577
|
+
console.log('Completion data prepared:', completionData);
|
|
578
|
+
|
|
579
|
+
// Close the modal first
|
|
580
|
+
handleClose();
|
|
581
|
+
|
|
582
|
+
// Then call the completion callback
|
|
583
|
+
setTimeout(() => {
|
|
584
|
+
onComplete('https://api2.onairos.uk', 'dummy-token', completionData);
|
|
585
|
+
}, 100);
|
|
586
|
+
}, [pin, connections, platformToggles, selectedTier, requestData, auto, inferenceData, partner, handleClose, onComplete]);
|
|
587
|
+
|
|
588
|
+
const handleDataRequestAccept = useCallback(() => {
|
|
589
|
+
console.log('Data request accepted for existing user');
|
|
590
|
+
setShowDataRequestModal(false);
|
|
591
|
+
|
|
592
|
+
// Complete onboarding for existing user
|
|
593
|
+
onComplete('https://api2.onairos.uk', 'existing-session-token', {
|
|
594
|
+
existingAccount: true,
|
|
595
|
+
email: email.trim(),
|
|
596
|
+
dataRequestAccepted: true,
|
|
597
|
+
requestData,
|
|
598
|
+
});
|
|
599
|
+
}, [email, onComplete, requestData]);
|
|
600
|
+
|
|
601
|
+
const handleDataRequestDecline = useCallback(() => {
|
|
602
|
+
console.log('Data request declined');
|
|
603
|
+
setShowDataRequestModal(false);
|
|
604
|
+
handleClose();
|
|
605
|
+
}, [handleClose]);
|
|
590
606
|
|
|
591
607
|
const canProceedToPin = useCallback(() => {
|
|
608
|
+
// For testing, allow proceeding without any platforms connected
|
|
609
|
+
if (debug || test) {
|
|
610
|
+
console.log('๐งช Testing mode: Allowing proceed without platform connections');
|
|
611
|
+
return true;
|
|
612
|
+
}
|
|
613
|
+
|
|
592
614
|
// Check if at least one platform is toggled on
|
|
593
615
|
const hasPlatformConnected = Object.values(platformToggles).some(value => value === true);
|
|
594
616
|
|
|
@@ -599,7 +621,7 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
599
621
|
}
|
|
600
622
|
|
|
601
623
|
return hasPlatformConnected;
|
|
602
|
-
}, [platformToggles, auto, partner, inferenceData]);
|
|
624
|
+
}, [platformToggles, auto, partner, inferenceData, debug, test]);
|
|
603
625
|
|
|
604
626
|
const handleProceed = () => {
|
|
605
627
|
console.log('Proceeding to next step');
|
|
@@ -904,15 +926,7 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
904
926
|
progress={training.progress}
|
|
905
927
|
eta={training.eta}
|
|
906
928
|
onCancel={handleClose}
|
|
907
|
-
onComplete={
|
|
908
|
-
onComplete('https://api2.onairos.uk', 'dummy-token', {
|
|
909
|
-
pin,
|
|
910
|
-
connections,
|
|
911
|
-
platformToggles,
|
|
912
|
-
selectedTier,
|
|
913
|
-
tierData: requestData?.[selectedTier],
|
|
914
|
-
});
|
|
915
|
-
}}
|
|
929
|
+
onComplete={handleTrainingComplete}
|
|
916
930
|
modelKey="onairosTrainingModel"
|
|
917
931
|
username={username}
|
|
918
932
|
/>
|
|
@@ -938,6 +952,31 @@ export const UniversalOnboarding: React.FC<UniversalOnboardingProps> = ({
|
|
|
938
952
|
</TouchableWithoutFeedback>
|
|
939
953
|
</View>
|
|
940
954
|
</TouchableWithoutFeedback>
|
|
955
|
+
|
|
956
|
+
{/* Data Request Modal for existing users */}
|
|
957
|
+
{showDataRequestModal && requestData && (
|
|
958
|
+
<DataRequestModal
|
|
959
|
+
visible={showDataRequestModal}
|
|
960
|
+
onClose={handleDataRequestDecline}
|
|
961
|
+
onAccept={handleDataRequestAccept}
|
|
962
|
+
requestData={{
|
|
963
|
+
// Convert DataTier format to expected format
|
|
964
|
+
Small: {
|
|
965
|
+
description: requestData.Small?.descriptions || 'Basic data access',
|
|
966
|
+
type: requestData.Small?.type || 'basic'
|
|
967
|
+
},
|
|
968
|
+
Medium: {
|
|
969
|
+
description: requestData.Medium?.descriptions || 'Standard data access',
|
|
970
|
+
type: requestData.Medium?.type || 'standard'
|
|
971
|
+
},
|
|
972
|
+
Large: {
|
|
973
|
+
description: requestData.Large?.descriptions || 'Full data access',
|
|
974
|
+
type: requestData.Large?.type || 'full'
|
|
975
|
+
}
|
|
976
|
+
}}
|
|
977
|
+
AppName={AppName}
|
|
978
|
+
/>
|
|
979
|
+
)}
|
|
941
980
|
</Modal>
|
|
942
981
|
);
|
|
943
982
|
};
|
|
@@ -952,7 +991,7 @@ const styles = StyleSheet.create({
|
|
|
952
991
|
bottomSheet: {
|
|
953
992
|
backgroundColor: '#fff',
|
|
954
993
|
width: width,
|
|
955
|
-
height: height * 0.
|
|
994
|
+
height: height * 0.8,
|
|
956
995
|
borderTopLeftRadius: 24,
|
|
957
996
|
borderTopRightRadius: 24,
|
|
958
997
|
overflow: 'hidden',
|
|
@@ -1180,9 +1219,10 @@ const styles = StyleSheet.create({
|
|
|
1180
1219
|
// Email input styles
|
|
1181
1220
|
emailInputContainer: {
|
|
1182
1221
|
flex: 1,
|
|
1183
|
-
justifyContent: '
|
|
1222
|
+
justifyContent: 'flex-start',
|
|
1184
1223
|
alignItems: 'center',
|
|
1185
1224
|
padding: 24,
|
|
1225
|
+
paddingTop: 60,
|
|
1186
1226
|
},
|
|
1187
1227
|
emailHeader: {
|
|
1188
1228
|
alignItems: 'center',
|