@oxyhq/services 5.13.12 → 5.13.15

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 (89) hide show
  1. package/lib/commonjs/core/OxyServices.js +159 -0
  2. package/lib/commonjs/core/OxyServices.js.map +1 -1
  3. package/lib/commonjs/index.js.map +1 -1
  4. package/lib/commonjs/ui/context/OxyContext.js +1 -47
  5. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  6. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +239 -1
  7. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  8. package/lib/commonjs/utils/apiUtils.js +0 -14
  9. package/lib/commonjs/utils/apiUtils.js.map +1 -1
  10. package/lib/commonjs/utils/asyncUtils.js +0 -20
  11. package/lib/commonjs/utils/asyncUtils.js.map +1 -1
  12. package/lib/module/core/OxyServices.js +159 -0
  13. package/lib/module/core/OxyServices.js.map +1 -1
  14. package/lib/module/index.js.map +1 -1
  15. package/lib/module/ui/context/OxyContext.js +1 -47
  16. package/lib/module/ui/context/OxyContext.js.map +1 -1
  17. package/lib/module/ui/navigation/types.js.map +1 -1
  18. package/lib/module/ui/screens/PrivacySettingsScreen.js +241 -3
  19. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  20. package/lib/module/utils/apiUtils.js +0 -13
  21. package/lib/module/utils/apiUtils.js.map +1 -1
  22. package/lib/module/utils/asyncUtils.js +0 -20
  23. package/lib/module/utils/asyncUtils.js.map +1 -1
  24. package/lib/typescript/core/OxyServices.d.ts +65 -1
  25. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  26. package/lib/typescript/index.d.ts +1 -1
  27. package/lib/typescript/index.d.ts.map +1 -1
  28. package/lib/typescript/models/interfaces.d.ts +26 -0
  29. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  30. package/lib/typescript/ui/context/OxyContext.d.ts +0 -6
  31. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  32. package/lib/typescript/ui/navigation/types.d.ts +0 -1
  33. package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
  34. package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  35. package/lib/typescript/utils/apiUtils.d.ts +0 -7
  36. package/lib/typescript/utils/apiUtils.d.ts.map +1 -1
  37. package/lib/typescript/utils/asyncUtils.d.ts +0 -11
  38. package/lib/typescript/utils/asyncUtils.d.ts.map +1 -1
  39. package/package.json +1 -1
  40. package/src/core/OxyServices.ts +174 -1
  41. package/src/index.ts +4 -0
  42. package/src/models/interfaces.ts +28 -0
  43. package/src/ui/context/OxyContext.tsx +0 -54
  44. package/src/ui/navigation/types.ts +0 -1
  45. package/src/ui/screens/PrivacySettingsScreen.tsx +240 -2
  46. package/src/utils/apiUtils.ts +0 -14
  47. package/src/utils/asyncUtils.ts +0 -20
  48. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +0 -192
  49. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +0 -1
  50. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +0 -142
  51. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +0 -1
  52. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js +0 -113
  53. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js.map +0 -1
  54. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js +0 -132
  55. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js.map +0 -1
  56. package/lib/commonjs/ui/screens/internal/SignUpSummaryStep.js +0 -83
  57. package/lib/commonjs/ui/screens/internal/SignUpSummaryStep.js.map +0 -1
  58. package/lib/commonjs/ui/screens/internal/SignUpWelcomeStep.js +0 -58
  59. package/lib/commonjs/ui/screens/internal/SignUpWelcomeStep.js.map +0 -1
  60. package/lib/module/ui/screens/internal/SignInPasswordStep.js +0 -186
  61. package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +0 -1
  62. package/lib/module/ui/screens/internal/SignInUsernameStep.js +0 -136
  63. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +0 -1
  64. package/lib/module/ui/screens/internal/SignUpIdentityStep.js +0 -108
  65. package/lib/module/ui/screens/internal/SignUpIdentityStep.js.map +0 -1
  66. package/lib/module/ui/screens/internal/SignUpSecurityStep.js +0 -127
  67. package/lib/module/ui/screens/internal/SignUpSecurityStep.js.map +0 -1
  68. package/lib/module/ui/screens/internal/SignUpSummaryStep.js +0 -78
  69. package/lib/module/ui/screens/internal/SignUpSummaryStep.js.map +0 -1
  70. package/lib/module/ui/screens/internal/SignUpWelcomeStep.js +0 -53
  71. package/lib/module/ui/screens/internal/SignUpWelcomeStep.js.map +0 -1
  72. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts +0 -28
  73. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +0 -1
  74. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts +0 -25
  75. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts.map +0 -1
  76. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts +0 -20
  77. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts.map +0 -1
  78. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts +0 -24
  79. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts.map +0 -1
  80. package/lib/typescript/ui/screens/internal/SignUpSummaryStep.d.ts +0 -15
  81. package/lib/typescript/ui/screens/internal/SignUpSummaryStep.d.ts.map +0 -1
  82. package/lib/typescript/ui/screens/internal/SignUpWelcomeStep.d.ts +0 -13
  83. package/lib/typescript/ui/screens/internal/SignUpWelcomeStep.d.ts.map +0 -1
  84. package/src/ui/screens/internal/SignInPasswordStep.tsx +0 -184
  85. package/src/ui/screens/internal/SignInUsernameStep.tsx +0 -145
  86. package/src/ui/screens/internal/SignUpIdentityStep.tsx +0 -112
  87. package/src/ui/screens/internal/SignUpSecurityStep.tsx +0 -132
  88. package/src/ui/screens/internal/SignUpSummaryStep.tsx +0 -66
  89. package/src/ui/screens/internal/SignUpWelcomeStep.tsx +0 -52
@@ -1,112 +0,0 @@
1
- import type React from 'react';
2
- import { useRef } from 'react';
3
- import { View, Text, Animated, TouchableOpacity, type TextInput } from 'react-native';
4
- import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
5
- import TextField from '../../components/internal/TextField';
6
- import HighFive from '../../../assets/illustrations/HighFive';
7
- import { Ionicons } from '@expo/vector-icons';
8
-
9
- interface SignUpIdentityStepProps {
10
- styles: any;
11
- fadeAnim: Animated.Value;
12
- slideAnim: Animated.Value;
13
- colors: any;
14
- formData: any;
15
- validationState: any;
16
- updateField: (field: string, value: string) => void;
17
- setErrorMessage: (msg: string) => void;
18
- prevStep: () => void;
19
- handleIdentityNext: () => void;
20
- ValidationMessage: React.FC<any>;
21
- validateEmail: (email: string) => boolean;
22
- navigate: any;
23
- }
24
-
25
- const SignUpIdentityStep: React.FC<SignUpIdentityStepProps> = ({
26
- styles,
27
- fadeAnim,
28
- slideAnim,
29
- colors,
30
- formData,
31
- validationState,
32
- updateField,
33
- setErrorMessage,
34
- prevStep,
35
- handleIdentityNext: parentHandleIdentityNext,
36
- ValidationMessage,
37
- validateEmail,
38
- navigate,
39
- }) => {
40
- const inputRef = useRef<TextInput>(null);
41
- const handleIdentityNext = () => {
42
- if (!formData.username || validationState.status === 'invalid') {
43
- setTimeout(() => {
44
- inputRef.current?.focus();
45
- }, 0);
46
- }
47
- parentHandleIdentityNext();
48
- };
49
- return (
50
- <Animated.View style={[
51
- styles.stepContainer,
52
- { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }
53
- ]}>
54
- <View style={styles.modernHeader}>
55
- <Text style={[styles.stepTitle, { color: colors.text }]}>Who are you?</Text>
56
- </View>
57
- <TextField
58
- ref={inputRef}
59
- leading={<Ionicons name="person-outline" size={24} color={colors.secondaryText} />}
60
- label="Username"
61
- value={formData.username}
62
- onChangeText={(text) => {
63
- updateField('username', text);
64
- setErrorMessage('');
65
- }}
66
- autoCapitalize="none"
67
- autoCorrect={false}
68
- testID="username-input"
69
- variant="filled"
70
- error={validationState.status === 'invalid' ? validationState.message : undefined}
71
- loading={validationState.status === 'validating'}
72
- success={validationState.status === 'valid'}
73
- onSubmitEditing={handleIdentityNext}
74
- autoFocus
75
- />
76
- <ValidationMessage validationState={validationState} colors={colors} styles={styles} />
77
- <TextField
78
- leading={<Ionicons name="mail-outline" size={24} color={colors.secondaryText} />}
79
- label="Email"
80
- value={formData.email}
81
- onChangeText={(text) => {
82
- updateField('email', text);
83
- }}
84
- keyboardType="email-address"
85
- autoCapitalize="none"
86
- autoCorrect={false}
87
- testID="email-input"
88
- variant="filled"
89
- error={formData.email && !validateEmail(formData.email) ? 'Please enter a valid email address' : undefined}
90
- />
91
- <GroupedPillButtons
92
- buttons={[
93
- {
94
- text: 'Back',
95
- onPress: prevStep,
96
- icon: 'arrow-back',
97
- variant: 'transparent',
98
- },
99
- {
100
- text: 'Next',
101
- onPress: handleIdentityNext,
102
- icon: 'arrow-forward',
103
- variant: 'primary',
104
- },
105
- ]}
106
- colors={colors}
107
- />
108
- </Animated.View>
109
- );
110
- };
111
-
112
- export default SignUpIdentityStep;
@@ -1,132 +0,0 @@
1
- import type React from 'react';
2
- import { useRef, useCallback, useEffect } from 'react';
3
- import { View, Text, Animated, type TextInput } from 'react-native';
4
- import { Ionicons } from '@expo/vector-icons';
5
- import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
6
- import TextField from '../../components/internal/TextField';
7
-
8
- interface SignUpSecurityStepProps {
9
- styles: any;
10
- fadeAnim: Animated.Value;
11
- slideAnim: Animated.Value;
12
- colors: any;
13
- formData: any;
14
- passwordVisibility: { password: boolean; confirmPassword: boolean };
15
- updateField: (field: string, value: string) => void;
16
- validatePassword: (password: string) => boolean;
17
- validatePasswordsMatch: (password: string, confirmPassword: string) => boolean;
18
- prevStep: () => void;
19
- handleSecurityNext: () => void;
20
- setErrorMessage: (msg: string) => void;
21
- togglePasswordVisibility: () => void;
22
- PASSWORD_MIN_LENGTH: number;
23
- }
24
-
25
- const SignUpSecurityStep: React.FC<SignUpSecurityStepProps> = ({
26
- styles,
27
- fadeAnim,
28
- slideAnim,
29
- colors,
30
- formData,
31
- passwordVisibility,
32
- updateField,
33
- validatePassword,
34
- validatePasswordsMatch,
35
- prevStep,
36
- handleSecurityNext: parentHandleSecurityNext,
37
- setErrorMessage,
38
- togglePasswordVisibility,
39
- PASSWORD_MIN_LENGTH,
40
- }) => {
41
- const passwordRef = useRef<TextInput>(null);
42
- const confirmPasswordRef = useRef<TextInput>(null);
43
-
44
- // Focus the first invalid field on error or when step becomes active
45
- useEffect(() => {
46
- if (formData.password && typeof formData.password === 'string' && !validatePassword(formData.password)) {
47
- setTimeout(() => {
48
- passwordRef.current?.focus();
49
- }, 0);
50
- } else if (formData.confirmPassword && typeof formData.confirmPassword === 'string' && !validatePasswordsMatch(formData.password, formData.confirmPassword)) {
51
- setTimeout(() => {
52
- confirmPasswordRef.current?.focus();
53
- }, 0);
54
- }
55
- }, [formData.password, formData.confirmPassword, validatePassword, validatePasswordsMatch]);
56
-
57
- const handleSecurityNext = useCallback(() => {
58
- if (!formData.password || !validatePassword(formData.password)) {
59
- setTimeout(() => {
60
- passwordRef.current?.focus();
61
- }, 0);
62
- return;
63
- }
64
- if (!formData.confirmPassword || !validatePasswordsMatch(formData.password, formData.confirmPassword)) {
65
- setTimeout(() => {
66
- confirmPasswordRef.current?.focus();
67
- }, 0);
68
- return;
69
- }
70
- parentHandleSecurityNext();
71
- }, [formData.password, formData.confirmPassword, validatePassword, validatePasswordsMatch, parentHandleSecurityNext]);
72
-
73
- return (
74
- <Animated.View style={[
75
- styles.stepContainer,
76
- { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }
77
- ]}>
78
- <View style={styles.modernHeader}>
79
- <Text style={[styles.stepTitle, { color: colors.text }]}>Secure your account</Text>
80
- </View>
81
- <TextField
82
- ref={passwordRef}
83
- leading={<Ionicons name="lock-closed-outline" size={24} color={colors.secondaryText} />}
84
- label="Password"
85
- value={formData.password}
86
- onChangeText={text => updateField('password', text)}
87
- secureTextEntry={!passwordVisibility.password}
88
- autoCapitalize="none"
89
- autoCorrect={false}
90
- testID="password-input"
91
- variant="filled"
92
- error={formData.password && typeof formData.password === 'string' && !validatePassword(formData.password) ? `Password must be at least ${PASSWORD_MIN_LENGTH} characters` : undefined}
93
- onSubmitEditing={() => confirmPasswordRef.current?.focus()}
94
- autoFocus
95
- />
96
- <Text style={[styles.passwordHint, { color: colors.secondaryText }]}>Password must be at least {PASSWORD_MIN_LENGTH} characters long</Text>
97
- <TextField
98
- ref={confirmPasswordRef}
99
- leading={<Ionicons name="lock-closed-outline" size={24} color={colors.secondaryText} />}
100
- label="Confirm Password"
101
- value={formData.confirmPassword}
102
- onChangeText={text => updateField('confirmPassword', text)}
103
- secureTextEntry={!passwordVisibility.confirmPassword}
104
- autoCapitalize="none"
105
- autoCorrect={false}
106
- testID="confirm-password-input"
107
- variant="filled"
108
- error={formData.confirmPassword && typeof formData.confirmPassword === 'string' && !validatePasswordsMatch(formData.password, formData.confirmPassword) ? 'Passwords do not match' : undefined}
109
- onSubmitEditing={handleSecurityNext}
110
- />
111
- <GroupedPillButtons
112
- buttons={[
113
- {
114
- text: 'Back',
115
- onPress: prevStep,
116
- icon: 'arrow-back',
117
- variant: 'transparent',
118
- },
119
- {
120
- text: 'Next',
121
- onPress: handleSecurityNext,
122
- icon: 'arrow-forward',
123
- variant: 'primary',
124
- },
125
- ]}
126
- colors={colors}
127
- />
128
- </Animated.View>
129
- );
130
- };
131
-
132
- export default SignUpSecurityStep;
@@ -1,66 +0,0 @@
1
- import type React from 'react';
2
- import { View, Text, Animated, TouchableOpacity } from 'react-native';
3
- import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
4
-
5
- interface SignUpSummaryStepProps {
6
- styles: any;
7
- fadeAnim: Animated.Value;
8
- slideAnim: Animated.Value;
9
- colors: any;
10
- formData: any;
11
- isLoading: boolean;
12
- handleSignUp: () => void;
13
- prevStep: () => void;
14
- }
15
-
16
- const SignUpSummaryStep: React.FC<SignUpSummaryStepProps> = ({
17
- styles,
18
- fadeAnim,
19
- slideAnim,
20
- colors,
21
- formData,
22
- isLoading,
23
- handleSignUp,
24
- prevStep,
25
- }) => (
26
- <Animated.View style={[
27
- styles.stepContainer,
28
- { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }
29
- ]}>
30
- <View style={styles.modernHeader}>
31
- <Text style={[styles.stepTitle, { color: colors.text }]}>Ready to join</Text>
32
- </View>
33
- <View style={styles.summaryContainer}>
34
- <View style={styles.summaryRow}>
35
- <Text style={[styles.summaryLabel, { color: colors.secondaryText }]}>Username:</Text>
36
- <Text style={[styles.summaryValue, { color: colors.text }]}>{formData.username}</Text>
37
- </View>
38
- <View style={styles.summaryRow}>
39
- <Text style={[styles.summaryLabel, { color: colors.secondaryText }]}>Email:</Text>
40
- <Text style={[styles.summaryValue, { color: colors.text }]}>{formData.email}</Text>
41
- </View>
42
- </View>
43
- <GroupedPillButtons
44
- buttons={[
45
- {
46
- text: 'Back',
47
- onPress: prevStep,
48
- icon: 'arrow-back',
49
- variant: 'transparent',
50
- },
51
- {
52
- text: 'Create Account',
53
- onPress: handleSignUp,
54
- icon: 'checkmark',
55
- variant: 'primary',
56
- disabled: isLoading,
57
- loading: isLoading,
58
- testID: 'signup-button',
59
- },
60
- ]}
61
- colors={colors}
62
- />
63
- </Animated.View>
64
- );
65
-
66
- export default SignUpSummaryStep;
@@ -1,52 +0,0 @@
1
- import type React from 'react';
2
- import { View, Text, Animated } from 'react-native';
3
- import HighFive from '../../../assets/illustrations/HighFive';
4
- import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
5
-
6
- interface SignUpWelcomeStepProps {
7
- styles: any;
8
- fadeAnim: Animated.Value;
9
- slideAnim: Animated.Value;
10
- colors: any;
11
- nextStep: () => void;
12
- navigate: any;
13
- }
14
-
15
- const SignUpWelcomeStep: React.FC<SignUpWelcomeStepProps> = ({
16
- styles,
17
- fadeAnim,
18
- slideAnim,
19
- colors,
20
- nextStep,
21
- navigate,
22
- }) => (
23
- <Animated.View style={[
24
- styles.stepContainer,
25
- { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }
26
- ]}>
27
- <HighFive width={100} height={100} />
28
- <View style={styles.modernHeader}>
29
- <Text style={[styles.modernTitle, { color: colors.text }]}>Welcome to Oxy</Text>
30
- <Text style={[styles.modernSubtitle, { color: colors.secondaryText }]}>We're excited to have you join us. Let's get your account set up in just a few easy steps.</Text>
31
- </View>
32
- <GroupedPillButtons
33
- buttons={[
34
- {
35
- text: 'Sign In',
36
- onPress: () => navigate('SignIn'),
37
- icon: 'log-in-outline',
38
- variant: 'transparent',
39
- },
40
- {
41
- text: 'Get Started',
42
- onPress: nextStep,
43
- icon: 'arrow-forward',
44
- variant: 'primary',
45
- },
46
- ]}
47
- colors={colors}
48
- />
49
- </Animated.View>
50
- );
51
-
52
- export default SignUpWelcomeStep;