@oxyhq/services 5.4.1 → 5.4.3
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/assets/icons/OxyServices.js +1 -1
- package/lib/commonjs/core/index.js +84 -2
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/index.js +22 -22
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/node/index.js +6 -6
- package/lib/commonjs/node/index.js.map +1 -1
- package/lib/commonjs/ui/components/Avatar.js +3 -3
- package/lib/commonjs/ui/components/Avatar.js.map +1 -1
- package/lib/commonjs/ui/components/FollowButton.js +3 -3
- package/lib/commonjs/ui/components/GroupedSection.js +1 -1
- package/lib/commonjs/ui/components/OxyLogo.js +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +13 -13
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js +2 -2
- package/lib/commonjs/ui/components/ProfileCard.js +2 -2
- package/lib/commonjs/ui/components/Section.js +1 -1
- package/lib/commonjs/ui/components/SectionTitle.js +1 -1
- package/lib/commonjs/ui/components/icon/index.js +1 -1
- package/lib/commonjs/ui/components/index.js +12 -12
- package/lib/commonjs/ui/context/OxyContext.js +20 -4
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/index.js +11 -11
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/navigation/OxyRouter.js +18 -18
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +18 -18
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountManagementDemo.js +3 -3
- package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +45 -27
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +29 -22
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +3 -3
- package/lib/commonjs/ui/screens/AppInfoScreen.js +6 -6
- package/lib/commonjs/ui/screens/BillingManagementScreen.js +3 -3
- package/lib/commonjs/ui/screens/FileManagementScreen.js +324 -306
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +3 -3
- package/lib/commonjs/ui/screens/ProfileScreen.js +2 -2
- package/lib/commonjs/ui/screens/SessionManagementScreen.js +2 -2
- package/lib/commonjs/ui/screens/SignInScreen.js +358 -310
- package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SignUpScreen.js +483 -308
- package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +3 -3
- package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +51 -26
- package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +2 -2
- package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
- package/lib/commonjs/ui/styles/index.js +2 -2
- package/lib/commonjs/ui/styles/theme.js +1 -1
- package/lib/commonjs/utils/index.js +1 -1
- package/lib/module/assets/icons/OxyServices.js +1 -1
- package/lib/module/assets/icons/OxyServices.js.map +1 -1
- package/lib/module/core/index.js +84 -2
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/index.js +10 -10
- package/lib/module/index.js.map +1 -1
- package/lib/module/node/index.js +4 -4
- package/lib/module/node/index.js.map +1 -1
- package/lib/module/ui/components/Avatar.js +2 -2
- package/lib/module/ui/components/Avatar.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js +3 -3
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/GroupedSection.js +1 -1
- package/lib/module/ui/components/GroupedSection.js.map +1 -1
- package/lib/module/ui/components/OxyLogo.js +1 -1
- package/lib/module/ui/components/OxyLogo.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +10 -10
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/OxySignInButton.js +2 -2
- package/lib/module/ui/components/OxySignInButton.js.map +1 -1
- package/lib/module/ui/components/ProfileCard.js +2 -2
- package/lib/module/ui/components/ProfileCard.js.map +1 -1
- package/lib/module/ui/components/Section.js +1 -1
- package/lib/module/ui/components/Section.js.map +1 -1
- package/lib/module/ui/components/SectionTitle.js +1 -1
- package/lib/module/ui/components/SectionTitle.js.map +1 -1
- package/lib/module/ui/components/icon/index.js +1 -1
- package/lib/module/ui/components/icon/index.js.map +1 -1
- package/lib/module/ui/components/index.js +12 -12
- package/lib/module/ui/components/index.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +20 -4
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/index.js +10 -10
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/navigation/OxyRouter.js +18 -18
- package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +5 -5
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountManagementDemo.js +2 -2
- package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +46 -28
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +30 -23
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +3 -3
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/AppInfoScreen.js +6 -6
- package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/module/ui/screens/BillingManagementScreen.js +3 -3
- package/lib/module/ui/screens/BillingManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +325 -307
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +3 -3
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +2 -2
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SessionManagementScreen.js +2 -2
- package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/SignInScreen.js +358 -310
- package/lib/module/ui/screens/SignInScreen.js.map +1 -1
- package/lib/module/ui/screens/SignUpScreen.js +486 -309
- package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js +3 -3
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaFAQScreen.js +52 -27
- package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +2 -2
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
- package/lib/module/ui/styles/index.js +2 -2
- package/lib/module/ui/styles/index.js.map +1 -1
- package/lib/module/ui/styles/theme.js +1 -1
- package/lib/module/ui/styles/theme.js.map +1 -1
- package/lib/module/utils/index.js +1 -1
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/core/index.d.ts +24 -0
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts +2 -2
- package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts +2 -2
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts +2 -2
- package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
- package/package.json +21 -5
- package/src/core/index.ts +68 -0
- package/src/ui/components/OxyProvider.tsx +5 -5
- package/src/ui/context/OxyContext.tsx +61 -41
- package/src/ui/screens/AccountOverviewScreen.tsx +44 -26
- package/src/ui/screens/AccountSettingsScreen.tsx +24 -18
- package/src/ui/screens/FileManagementScreen.tsx +246 -211
- package/src/ui/screens/SignInScreen.tsx +382 -326
- package/src/ui/screens/SignUpScreen.tsx +443 -273
- package/src/ui/screens/karma/KarmaFAQScreen.tsx +50 -29
- package/lib/commonjs/package.json +0 -1
- package/lib/module/package.json +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
1
|
+
import React, { useState, useMemo, useCallback } from 'react';
|
|
2
2
|
import { View, Text, StyleSheet, ScrollView, Platform, TouchableOpacity, TextInput, LayoutAnimation, UIManager } from 'react-native';
|
|
3
3
|
import { BaseScreenProps } from '../../navigation/types';
|
|
4
4
|
import { Ionicons } from '@expo/vector-icons';
|
|
@@ -34,37 +34,58 @@ const FAQS = [
|
|
|
34
34
|
},
|
|
35
35
|
];
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* KarmaFAQScreen - Optimized for performance
|
|
39
|
+
*
|
|
40
|
+
* Performance optimizations implemented:
|
|
41
|
+
* - useMemo for theme calculations (only recalculates when theme changes)
|
|
42
|
+
* - useMemo for filtered FAQs (only recalculates when search changes)
|
|
43
|
+
* - useCallback for event handlers to prevent unnecessary re-renders
|
|
44
|
+
* - React.memo wrapper to prevent re-renders when props haven't changed
|
|
45
|
+
*/
|
|
37
46
|
const KarmaFAQScreen: React.FC<BaseScreenProps> = ({ goBack, theme }) => {
|
|
38
|
-
const isDarkTheme = theme === 'dark';
|
|
39
|
-
const backgroundColor = isDarkTheme ? '#121212' : '#FFFFFF';
|
|
40
|
-
const textColor = isDarkTheme ? '#FFFFFF' : '#000000';
|
|
41
|
-
const cardColor = isDarkTheme ? '#23232b' : '#f7f7fa';
|
|
42
|
-
const primaryColor = '#d169e5';
|
|
43
|
-
const inputBg = isDarkTheme ? '#23232b' : '#f2f2f7';
|
|
44
|
-
const inputBorder = isDarkTheme ? '#444' : '#e0e0e0';
|
|
45
|
-
|
|
46
47
|
const [expanded, setExpanded] = useState<number | null>(0);
|
|
47
48
|
const [search, setSearch] = useState('');
|
|
48
49
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
// Memoize theme-related calculations to prevent unnecessary recalculations
|
|
51
|
+
const themeStyles = useMemo(() => {
|
|
52
|
+
const isDarkTheme = theme === 'dark';
|
|
53
|
+
return {
|
|
54
|
+
isDarkTheme,
|
|
55
|
+
backgroundColor: isDarkTheme ? '#121212' : '#FFFFFF',
|
|
56
|
+
textColor: isDarkTheme ? '#FFFFFF' : '#000000',
|
|
57
|
+
cardColor: isDarkTheme ? '#23232b' : '#f7f7fa',
|
|
58
|
+
primaryColor: '#d169e5',
|
|
59
|
+
inputBg: isDarkTheme ? '#23232b' : '#f2f2f7',
|
|
60
|
+
inputBorder: isDarkTheme ? '#444' : '#e0e0e0',
|
|
61
|
+
};
|
|
62
|
+
}, [theme]);
|
|
63
|
+
|
|
64
|
+
// Memoize filtered FAQs to prevent filtering on every render
|
|
65
|
+
const filteredFaqs = useMemo(() => {
|
|
66
|
+
if (!search.trim()) return FAQS;
|
|
67
|
+
const searchLower = search.toLowerCase();
|
|
68
|
+
return FAQS.filter(faq =>
|
|
69
|
+
faq.q.toLowerCase().includes(searchLower) ||
|
|
70
|
+
faq.a.toLowerCase().includes(searchLower)
|
|
71
|
+
);
|
|
72
|
+
}, [search]);
|
|
53
73
|
|
|
54
|
-
|
|
74
|
+
// Memoize toggle handler to prevent recreation on every render
|
|
75
|
+
const handleToggle = useCallback((idx: number) => {
|
|
55
76
|
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
|
|
56
|
-
setExpanded(
|
|
57
|
-
};
|
|
77
|
+
setExpanded(prev => prev === idx ? null : idx);
|
|
78
|
+
}, []);
|
|
58
79
|
|
|
59
80
|
return (
|
|
60
|
-
<View style={[styles.container, { backgroundColor }]}>
|
|
61
|
-
<Text style={[styles.title, { color: textColor }]}>Karma FAQ</Text>
|
|
62
|
-
<View style={[styles.searchBar, { backgroundColor: inputBg, borderColor: inputBorder }]}>
|
|
63
|
-
<Ionicons name="search-outline" size={20} color={primaryColor} style={{ marginRight: 8 }} />
|
|
81
|
+
<View style={[styles.container, { backgroundColor: themeStyles.backgroundColor }]}>
|
|
82
|
+
<Text style={[styles.title, { color: themeStyles.textColor }]}>Karma FAQ</Text>
|
|
83
|
+
<View style={[styles.searchBar, { backgroundColor: themeStyles.inputBg, borderColor: themeStyles.inputBorder }]}>
|
|
84
|
+
<Ionicons name="search-outline" size={20} color={themeStyles.primaryColor} style={{ marginRight: 8 }} />
|
|
64
85
|
<TextInput
|
|
65
|
-
style={[styles.searchInput, { color: textColor }]}
|
|
86
|
+
style={[styles.searchInput, { color: themeStyles.textColor }]}
|
|
66
87
|
placeholder="Search FAQ..."
|
|
67
|
-
placeholderTextColor={isDarkTheme ? '#aaa' : '#888'}
|
|
88
|
+
placeholderTextColor={themeStyles.isDarkTheme ? '#aaa' : '#888'}
|
|
68
89
|
value={search}
|
|
69
90
|
onChangeText={setSearch}
|
|
70
91
|
returnKeyType="search"
|
|
@@ -72,29 +93,29 @@ const KarmaFAQScreen: React.FC<BaseScreenProps> = ({ goBack, theme }) => {
|
|
|
72
93
|
</View>
|
|
73
94
|
<ScrollView contentContainerStyle={styles.contentContainer} keyboardShouldPersistTaps="handled">
|
|
74
95
|
{filteredFaqs.length === 0 ? (
|
|
75
|
-
<Text style={[styles.noResults, { color: textColor }]}>No results found.</Text>
|
|
96
|
+
<Text style={[styles.noResults, { color: themeStyles.textColor }]}>No results found.</Text>
|
|
76
97
|
) : (
|
|
77
98
|
filteredFaqs.map((item, idx) => {
|
|
78
99
|
const isOpen = expanded === idx;
|
|
79
100
|
return (
|
|
80
101
|
<TouchableOpacity
|
|
81
102
|
key={idx}
|
|
82
|
-
style={[styles.card, { backgroundColor: cardColor, shadowColor: isDarkTheme ? '#000' : '#d169e5' }]}
|
|
103
|
+
style={[styles.card, { backgroundColor: themeStyles.cardColor, shadowColor: themeStyles.isDarkTheme ? '#000' : '#d169e5' }]}
|
|
83
104
|
activeOpacity={0.95}
|
|
84
105
|
onPress={() => handleToggle(idx)}
|
|
85
106
|
>
|
|
86
107
|
<View style={styles.questionRow}>
|
|
87
|
-
<Ionicons name={isOpen ? 'chevron-down' : 'chevron-forward'} size={22} color={primaryColor} style={{ marginRight: 8 }} />
|
|
88
|
-
<Text style={[styles.question, { color: primaryColor }]}>{item.q}</Text>
|
|
108
|
+
<Ionicons name={isOpen ? 'chevron-down' : 'chevron-forward'} size={22} color={themeStyles.primaryColor} style={{ marginRight: 8 }} />
|
|
109
|
+
<Text style={[styles.question, { color: themeStyles.primaryColor }]}>{item.q}</Text>
|
|
89
110
|
</View>
|
|
90
111
|
{isOpen && (
|
|
91
|
-
<Text style={[styles.answer, { color: textColor }]}>{item.a}</Text>
|
|
112
|
+
<Text style={[styles.answer, { color: themeStyles.textColor }]}>{item.a}</Text>
|
|
92
113
|
)}
|
|
93
114
|
</TouchableOpacity>
|
|
94
115
|
);
|
|
95
116
|
})
|
|
96
117
|
)}
|
|
97
|
-
<Text style={[styles.paragraph, { color: textColor, marginTop: 32, textAlign: 'center' }]}>Still have questions? Contact support!</Text>
|
|
118
|
+
<Text style={[styles.paragraph, { color: themeStyles.textColor, marginTop: 32, textAlign: 'center' }]}>Still have questions? Contact support!</Text>
|
|
98
119
|
</ScrollView>
|
|
99
120
|
</View>
|
|
100
121
|
);
|
|
@@ -161,4 +182,4 @@ const styles = StyleSheet.create({
|
|
|
161
182
|
},
|
|
162
183
|
});
|
|
163
184
|
|
|
164
|
-
export default KarmaFAQScreen;
|
|
185
|
+
export default React.memo(KarmaFAQScreen);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"type":"commonjs"}
|
package/lib/module/package.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"type":"module"}
|