@oxyhq/services 5.13.22 → 5.13.23

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 (32) hide show
  1. package/lib/commonjs/ui/components/ErrorBoundary.js +145 -0
  2. package/lib/commonjs/ui/components/ErrorBoundary.js.map +1 -0
  3. package/lib/commonjs/ui/navigation/OxyRouter.js +83 -30
  4. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
  5. package/lib/commonjs/ui/screens/AccountCenterScreen.js +19 -14
  6. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  7. package/lib/commonjs/ui/screens/SessionManagementScreen.js +90 -77
  8. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  9. package/lib/commonjs/ui/screens/SignInScreen.js +1 -1
  10. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  11. package/lib/module/ui/components/ErrorBoundary.js +139 -0
  12. package/lib/module/ui/components/ErrorBoundary.js.map +1 -0
  13. package/lib/module/ui/navigation/OxyRouter.js +83 -31
  14. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  15. package/lib/module/ui/screens/AccountCenterScreen.js +19 -14
  16. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  17. package/lib/module/ui/screens/SessionManagementScreen.js +91 -78
  18. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  19. package/lib/module/ui/screens/SignInScreen.js +1 -1
  20. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  21. package/lib/typescript/ui/components/ErrorBoundary.d.ts +31 -0
  22. package/lib/typescript/ui/components/ErrorBoundary.d.ts.map +1 -0
  23. package/lib/typescript/ui/navigation/OxyRouter.d.ts +3 -1
  24. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -1
  25. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  26. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/src/ui/components/ErrorBoundary.tsx +154 -0
  29. package/src/ui/navigation/OxyRouter.tsx +90 -29
  30. package/src/ui/screens/AccountCenterScreen.tsx +17 -14
  31. package/src/ui/screens/SessionManagementScreen.tsx +81 -69
  32. package/src/ui/screens/SignInScreen.tsx +1 -1
@@ -1,12 +1,38 @@
1
1
  "use strict";
2
2
 
3
- import { useState, useEffect, useCallback } from 'react';
3
+ import { useState, useEffect, useCallback, memo } from 'react';
4
4
  import { View, StyleSheet } from 'react-native';
5
+ import ErrorBoundary from '../components/ErrorBoundary';
5
6
 
6
7
  // Import types and route registry
7
8
 
8
- import { routes } from './routes';
9
+ import { routes, routeNames } from './routes';
9
10
  import { jsx as _jsx } from "react/jsx-runtime";
11
+ // Helper function to validate route names at runtime
12
+ const isValidRouteName = screen => {
13
+ return routeNames.includes(screen);
14
+ };
15
+
16
+ // Helper function for safe navigation with validation
17
+ const validateAndNavigate = (screen, props, setCurrentScreen, setScreenHistory, setScreenPropsMap) => {
18
+ if (!isValidRouteName(screen)) {
19
+ const errorMsg = `Invalid route name: "${screen}". Valid routes are: ${routeNames.join(', ')}`;
20
+ console.error('OxyRouter:', errorMsg);
21
+ if (process.env.NODE_ENV !== 'production') {
22
+ console.error('Navigation error:', errorMsg);
23
+ }
24
+ return false;
25
+ }
26
+ if (!routes[screen]) {
27
+ const errorMsg = `Route "${screen}" is registered but component is missing`;
28
+ console.error('OxyRouter:', errorMsg);
29
+ if (process.env.NODE_ENV !== 'production') {
30
+ console.error('Navigation error:', errorMsg);
31
+ }
32
+ return false;
33
+ }
34
+ return true;
35
+ };
10
36
  const OxyRouter = ({
11
37
  oxyServices,
12
38
  initialScreen,
@@ -31,23 +57,22 @@ const OxyRouter = ({
31
57
  }
32
58
  }, [currentScreen, adjustSnapPoints]);
33
59
 
34
- // Memoized navigation methods
60
+ // Memoized navigation methods with validation
35
61
  const navigate = useCallback((screen, props = {}) => {
36
62
  if (__DEV__) console.log('OxyRouter: navigate called', screen, props);
37
- if (routes[screen]) {
38
- if (__DEV__) console.log('OxyRouter: screen found in routes');
39
- setCurrentScreen(screen);
40
- setScreenHistory(prev => [...prev, screen]);
41
- setScreenPropsMap(prev => ({
42
- ...prev,
43
- [screen]: props
44
- }));
45
- } else {
46
- console.error(`OxyRouter: Screen "${screen}" not found in routes:`, Object.keys(routes));
47
- if (process.env.NODE_ENV !== 'production') {
48
- console.error(`Screen "${screen}" not found`);
49
- }
63
+
64
+ // Validate route before navigating
65
+ if (!validateAndNavigate(screen, props, setCurrentScreen, setScreenHistory, setScreenPropsMap)) {
66
+ return; // Early return if validation fails
50
67
  }
68
+
69
+ // All validations passed, proceed with navigation
70
+ setCurrentScreen(screen);
71
+ setScreenHistory(prev => [...prev, screen]);
72
+ setScreenPropsMap(prev => ({
73
+ ...prev,
74
+ [screen]: props
75
+ }));
51
76
  }, []);
52
77
  const goBack = useCallback(() => {
53
78
  setScreenHistory(prev => {
@@ -83,13 +108,23 @@ const OxyRouter = ({
83
108
  const handleNavigationEvent = event => {
84
109
  if (event && event.detail) {
85
110
  if (typeof event.detail === 'string') {
86
- navigate(event.detail);
111
+ // Validate string route name before navigating
112
+ if (isValidRouteName(event.detail)) {
113
+ navigate(event.detail);
114
+ } else {
115
+ console.error('OxyRouter: Invalid route name in event:', event.detail);
116
+ }
87
117
  } else if (typeof event.detail === 'object' && event.detail.screen) {
88
118
  const {
89
119
  screen,
90
120
  props
91
121
  } = event.detail;
92
- navigate(screen, props || {});
122
+ // Validate route name before navigating
123
+ if (isValidRouteName(screen)) {
124
+ navigate(screen, props || {});
125
+ } else {
126
+ console.error('OxyRouter: Invalid route name in event:', screen);
127
+ }
93
128
  }
94
129
  }
95
130
  };
@@ -100,8 +135,14 @@ const OxyRouter = ({
100
135
  intervalId = setInterval(() => {
101
136
  const globalNav = globalThis.oxyNavigateEvent;
102
137
  if (globalNav && globalNav.screen) {
103
- navigate(globalNav.screen, globalNav.props || {});
104
- globalThis.oxyNavigateEvent = null;
138
+ // Validate route name before navigating
139
+ if (isValidRouteName(globalNav.screen)) {
140
+ navigate(globalNav.screen, globalNav.props || {});
141
+ globalThis.oxyNavigateEvent = null;
142
+ } else {
143
+ console.error('OxyRouter: Invalid route name in global event:', globalNav.screen);
144
+ globalThis.oxyNavigateEvent = null; // Clear invalid event
145
+ }
105
146
  }
106
147
  }, 100);
107
148
  }
@@ -115,7 +156,7 @@ const OxyRouter = ({
115
156
  };
116
157
  }, [navigate]);
117
158
 
118
- // Render the current screen component
159
+ // Render the current screen component with error boundary
119
160
  const renderScreen = () => {
120
161
  const CurrentScreen = routes[currentScreen]?.component;
121
162
  if (!CurrentScreen) {
@@ -126,15 +167,20 @@ const OxyRouter = ({
126
167
  style: styles.errorContainer
127
168
  });
128
169
  }
129
- return /*#__PURE__*/_jsx(CurrentScreen, {
130
- oxyServices: oxyServices,
131
- navigate: navigate,
132
- goBack: goBack,
133
- onClose: onClose,
134
- onAuthenticated: onAuthenticated,
135
- theme: theme,
136
- containerWidth: containerWidth,
137
- ...(screenPropsMap[currentScreen] || {})
170
+ return /*#__PURE__*/_jsx(ErrorBoundary, {
171
+ onError: (error, errorInfo) => {
172
+ console.error(`Error in screen "${currentScreen}":`, error, errorInfo);
173
+ },
174
+ children: /*#__PURE__*/_jsx(CurrentScreen, {
175
+ oxyServices: oxyServices,
176
+ navigate: navigate,
177
+ goBack: goBack,
178
+ onClose: onClose,
179
+ onAuthenticated: onAuthenticated,
180
+ theme: theme,
181
+ containerWidth: containerWidth,
182
+ ...(screenPropsMap[currentScreen] || {})
183
+ })
138
184
  });
139
185
  };
140
186
  return /*#__PURE__*/_jsx(View, {
@@ -142,6 +188,9 @@ const OxyRouter = ({
142
188
  children: renderScreen()
143
189
  });
144
190
  };
191
+
192
+ // Memoize the router component to prevent unnecessary re-renders
193
+ const MemoizedOxyRouter = /*#__PURE__*/memo(OxyRouter);
145
194
  const styles = StyleSheet.create({
146
195
  container: {
147
196
  flex: 1
@@ -153,5 +202,8 @@ const styles = StyleSheet.create({
153
202
  minHeight: 100
154
203
  }
155
204
  });
156
- export default OxyRouter;
205
+
206
+ // Export both the memoized version (default) and the original for testing
207
+ export { OxyRouter };
208
+ export default MemoizedOxyRouter;
157
209
  //# sourceMappingURL=OxyRouter.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useState","useEffect","useCallback","View","StyleSheet","routes","jsx","_jsx","OxyRouter","oxyServices","initialScreen","onClose","onAuthenticated","theme","adjustSnapPoints","navigationRef","containerWidth","currentScreen","setCurrentScreen","screenHistory","setScreenHistory","screenPropsMap","setScreenPropsMap","snapPoints","navigate","screen","props","__DEV__","console","log","prev","error","Object","keys","process","env","NODE_ENV","goBack","length","newHistory","pop","previousScreen","current","handleNavigationEvent","event","detail","intervalId","document","addEventListener","setInterval","globalNav","globalThis","oxyNavigateEvent","removeEventListener","clearInterval","renderScreen","CurrentScreen","component","style","styles","errorContainer","container","children","create","flex","justifyContent","alignItems","minHeight"],"sourceRoot":"../../../../src","sources":["ui/navigation/OxyRouter.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useState","useEffect","useCallback","memo","View","StyleSheet","ErrorBoundary","routes","routeNames","jsx","_jsx","isValidRouteName","screen","includes","validateAndNavigate","props","setCurrentScreen","setScreenHistory","setScreenPropsMap","errorMsg","join","console","error","process","env","NODE_ENV","OxyRouter","oxyServices","initialScreen","onClose","onAuthenticated","theme","adjustSnapPoints","navigationRef","containerWidth","currentScreen","screenHistory","screenPropsMap","snapPoints","navigate","__DEV__","log","prev","goBack","length","newHistory","pop","previousScreen","current","handleNavigationEvent","event","detail","intervalId","document","addEventListener","setInterval","globalNav","globalThis","oxyNavigateEvent","removeEventListener","clearInterval","renderScreen","CurrentScreen","component","style","styles","errorContainer","onError","errorInfo","children","container","MemoizedOxyRouter","create","flex","justifyContent","alignItems","minHeight"],"sourceRoot":"../../../../src","sources":["ui/navigation/OxyRouter.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { View, Text, StyleSheet, ActivityIndicator, ScrollView, Platform } from 'react-native';
4
+ import { useCallback, useMemo } from 'react';
4
5
  import { useOxy } from '../context/OxyContext';
5
6
  import { packageInfo } from '../../constants/version';
6
7
  import { toast } from '../../lib/sonner';
@@ -35,7 +36,9 @@ const AccountCenterScreen = ({
35
36
  const borderColor = isDarkTheme ? '#444444' : '#E0E0E0';
36
37
  const primaryColor = '#0066CC';
37
38
  const dangerColor = '#D32F2F';
38
- const handleLogout = async () => {
39
+
40
+ // Memoized logout handler - prevents unnecessary re-renders
41
+ const handleLogout = useCallback(async () => {
39
42
  try {
40
43
  await logout();
41
44
  if (onClose) {
@@ -45,10 +48,12 @@ const AccountCenterScreen = ({
45
48
  console.error('Logout failed:', error);
46
49
  toast.error(t('common.errors.signOutFailed') || 'There was a problem signing you out. Please try again.');
47
50
  }
48
- };
49
- const confirmLogout = () => {
51
+ }, [logout, onClose, t]);
52
+
53
+ // Memoized confirm logout handler - prevents unnecessary re-renders
54
+ const confirmLogout = useCallback(() => {
50
55
  confirmAction(t('common.confirms.signOut') || 'Are you sure you want to sign out?', handleLogout);
51
- };
56
+ }, [handleLogout, t]);
52
57
  if (!isAuthenticated) {
53
58
  return /*#__PURE__*/_jsx(View, {
54
59
  style: [styles.container, {
@@ -95,7 +100,7 @@ const AccountCenterScreen = ({
95
100
  theme: theme,
96
101
  isFirst: true,
97
102
  children: /*#__PURE__*/_jsx(QuickActions, {
98
- actions: [{
103
+ actions: useMemo(() => [{
99
104
  id: 'overview',
100
105
  icon: 'person-circle',
101
106
  iconColor: '#007AFF',
@@ -131,14 +136,14 @@ const AccountCenterScreen = ({
131
136
  iconColor: '#FF9500',
132
137
  title: t('accountCenter.quickActions.switch') || 'Switch',
133
138
  onPress: () => navigate('AccountSwitcher')
134
- }] : [])],
139
+ }] : [])], [user?.isPremium, sessions, navigate, t]),
135
140
  theme: theme
136
141
  })
137
142
  }), /*#__PURE__*/_jsx(Section, {
138
143
  title: t('accountCenter.sections.accountManagement') || 'Account Management',
139
144
  theme: theme,
140
145
  children: /*#__PURE__*/_jsx(GroupedSection, {
141
- items: [{
146
+ items: useMemo(() => [{
142
147
  id: 'overview',
143
148
  icon: 'person-circle',
144
149
  iconColor: '#007AFF',
@@ -180,14 +185,14 @@ const AccountCenterScreen = ({
180
185
  title: t('accountCenter.items.billing.title') || 'Billing Management',
181
186
  subtitle: t('accountCenter.items.billing.subtitle') || 'Payment methods and invoices',
182
187
  onPress: () => navigate('PaymentGateway')
183
- }] : [])],
188
+ }] : [])], [user?.isPremium, navigate, t]),
184
189
  theme: theme
185
190
  })
186
191
  }), sessions && sessions.length > 1 && /*#__PURE__*/_jsx(Section, {
187
192
  title: t('accountCenter.sections.multiAccount') || 'Multi-Account',
188
193
  theme: theme,
189
194
  children: /*#__PURE__*/_jsx(GroupedSection, {
190
- items: [{
195
+ items: useMemo(() => [{
191
196
  id: 'switch',
192
197
  icon: 'people',
193
198
  iconColor: '#FF9500',
@@ -203,28 +208,28 @@ const AccountCenterScreen = ({
203
208
  title: t('accountCenter.items.addAccount.title') || 'Add Another Account',
204
209
  subtitle: t('accountCenter.items.addAccount.subtitle') || 'Sign in with a different account',
205
210
  onPress: () => navigate('SignIn')
206
- }],
211
+ }], [sessions.length, navigate, t]),
207
212
  theme: theme
208
213
  })
209
214
  }), (!sessions || sessions.length <= 1) && /*#__PURE__*/_jsx(Section, {
210
215
  title: t('accountCenter.sections.addAccount') || 'Add Account',
211
216
  theme: theme,
212
217
  children: /*#__PURE__*/_jsx(GroupedSection, {
213
- items: [{
218
+ items: useMemo(() => [{
214
219
  id: 'add',
215
220
  icon: 'person-add',
216
221
  iconColor: '#30D158',
217
222
  title: t('accountCenter.items.addAccount.title') || 'Add Another Account',
218
223
  subtitle: t('accountCenter.items.addAccount.subtitle') || 'Sign in with a different account',
219
224
  onPress: () => navigate('SignIn')
220
- }],
225
+ }], [navigate, t]),
221
226
  theme: theme
222
227
  })
223
228
  }), /*#__PURE__*/_jsx(Section, {
224
229
  title: t('accountCenter.sections.moreOptions') || 'More Options',
225
230
  theme: theme,
226
231
  children: /*#__PURE__*/_jsx(GroupedSection, {
227
- items: [...(Platform.OS !== 'web' ? [{
232
+ items: useMemo(() => [...(Platform.OS !== 'web' ? [{
228
233
  id: 'notifications',
229
234
  icon: 'notifications',
230
235
  iconColor: '#FF9500',
@@ -252,7 +257,7 @@ const AccountCenterScreen = ({
252
257
  title: t('accountCenter.items.appInfo.title') || 'App Information',
253
258
  subtitle: t('accountCenter.items.appInfo.subtitle') || 'Version and system details',
254
259
  onPress: () => navigate('AppInfo')
255
- }],
260
+ }], [navigate, t]),
256
261
  theme: theme
257
262
  })
258
263
  }), /*#__PURE__*/_jsx(Section, {
@@ -1 +1 @@
1
- {"version":3,"names":["View","Text","StyleSheet","ActivityIndicator","ScrollView","Platform","useOxy","packageInfo","toast","confirmAction","fontFamilies","ProfileCard","Section","QuickActions","GroupedSection","GroupedItem","useI18n","jsx","_jsx","jsxs","_jsxs","AccountCenterScreen","onClose","theme","navigate","user","logout","isLoading","sessions","isAuthenticated","t","isDarkTheme","textColor","backgroundColor","secondaryBackgroundColor","borderColor","primaryColor","dangerColor","handleLogout","error","console","confirmLogout","style","styles","container","children","message","color","justifyContent","size","onEditPress","activeTab","onClosePress","showCloseButton","scrollView","contentContainerStyle","scrollContainer","showsVerticalScrollIndicator","title","isFirst","actions","id","icon","iconColor","onPress","isPremium","length","items","subtitle","count","OS","info","isLast","showChevron","disabled","customContent","marginRight","versionContainer","versionText","version","create","flex","padding","paddingBottom","alignItems","marginTop","marginBottom","fontSize","fontFamily","phudu","textAlign"],"sourceRoot":"../../../../src","sources":["ui/screens/AccountCenterScreen.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["View","Text","StyleSheet","ActivityIndicator","ScrollView","Platform","useCallback","useMemo","useOxy","packageInfo","toast","confirmAction","fontFamilies","ProfileCard","Section","QuickActions","GroupedSection","GroupedItem","useI18n","jsx","_jsx","jsxs","_jsxs","AccountCenterScreen","onClose","theme","navigate","user","logout","isLoading","sessions","isAuthenticated","t","isDarkTheme","textColor","backgroundColor","secondaryBackgroundColor","borderColor","primaryColor","dangerColor","handleLogout","error","console","confirmLogout","style","styles","container","children","message","color","justifyContent","size","onEditPress","activeTab","onClosePress","showCloseButton","scrollView","contentContainerStyle","scrollContainer","showsVerticalScrollIndicator","title","isFirst","actions","id","icon","iconColor","onPress","isPremium","length","items","subtitle","count","OS","info","isLast","showChevron","disabled","customContent","marginRight","versionContainer","versionText","version","create","flex","padding","paddingBottom","alignItems","marginTop","marginBottom","fontSize","fontFamily","phudu","textAlign"],"sourceRoot":"../../../../src","sources":["ui/screens/AccountCenterScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { useState, useEffect } from 'react';
3
+ import { useState, useEffect, useCallback, useMemo } from 'react';
4
4
  import { View, Text, TouchableOpacity, StyleSheet, ScrollView, ActivityIndicator, Alert, Platform, RefreshControl } from 'react-native';
5
5
  import { useOxy } from '../context/OxyContext';
6
6
  import { toast } from '../../lib/sonner';
@@ -33,7 +33,9 @@ const SessionManagementScreen = ({
33
33
  const primaryColor = '#0066CC';
34
34
  const dangerColor = '#D32F2F';
35
35
  const successColor = '#2E7D32';
36
- const loadSessions = async (isRefresh = false) => {
36
+
37
+ // Memoized load sessions function - prevents unnecessary re-renders
38
+ const loadSessions = useCallback(async (isRefresh = false) => {
37
39
  try {
38
40
  if (isRefresh) {
39
41
  setRefreshing(true);
@@ -55,8 +57,10 @@ const SessionManagementScreen = ({
55
57
  setLoading(false);
56
58
  setRefreshing(false);
57
59
  }
58
- };
59
- const handleLogoutSession = async sessionId => {
60
+ }, [refreshSessions]);
61
+
62
+ // Memoized logout session handler - prevents unnecessary re-renders
63
+ const handleLogoutSession = useCallback(async sessionId => {
60
64
  confirmAction('Are you sure you want to logout this session?', async () => {
61
65
  try {
62
66
  setActionLoading(sessionId);
@@ -70,8 +74,10 @@ const SessionManagementScreen = ({
70
74
  setActionLoading(null);
71
75
  }
72
76
  });
73
- };
74
- const handleLogoutOtherSessions = async () => {
77
+ }, [logout, refreshSessions]);
78
+
79
+ // Memoized logout other sessions handler - prevents unnecessary re-renders
80
+ const handleLogoutOtherSessions = useCallback(async () => {
75
81
  const otherSessionsCount = userSessions.filter(s => s.sessionId !== activeSessionId).length;
76
82
  if (otherSessionsCount === 0) {
77
83
  toast.info('No other sessions to logout.');
@@ -94,8 +100,10 @@ const SessionManagementScreen = ({
94
100
  setActionLoading(null);
95
101
  }
96
102
  });
97
- };
98
- const handleLogoutAllSessions = async () => {
103
+ }, [userSessions, activeSessionId, logout, refreshSessions]);
104
+
105
+ // Memoized logout all sessions handler - prevents unnecessary re-renders
106
+ const handleLogoutAllSessions = useCallback(async () => {
99
107
  confirmAction('This will logout all sessions including this one and you will need to sign in again. Continue?', async () => {
100
108
  try {
101
109
  setActionLoading('all');
@@ -106,10 +114,10 @@ const SessionManagementScreen = ({
106
114
  setActionLoading(null);
107
115
  }
108
116
  });
109
- };
117
+ }, [logoutAll]);
110
118
 
111
- // Relative time formatter (past & future)
112
- const formatRelative = dateString => {
119
+ // Memoized relative time formatter - prevents function recreation on every render
120
+ const formatRelative = useCallback(dateString => {
113
121
  if (!dateString) return 'Unknown';
114
122
  const date = new Date(dateString);
115
123
  const now = new Date();
@@ -124,8 +132,10 @@ const SessionManagementScreen = ({
124
132
  const days = hrs / 24;
125
133
  if (days < 7) return isFuture ? `in ${fmt(days)}d` : `${fmt(days)}d ago`;
126
134
  return date.toLocaleDateString();
127
- };
128
- const handleSwitchSession = async sessionId => {
135
+ }, []);
136
+
137
+ // Memoized switch session handler - prevents unnecessary re-renders
138
+ const handleSwitchSession = useCallback(async sessionId => {
129
139
  if (sessionId === activeSessionId) return;
130
140
  setSwitchLoading(sessionId);
131
141
  try {
@@ -137,10 +147,10 @@ const SessionManagementScreen = ({
137
147
  } finally {
138
148
  setSwitchLoading(null);
139
149
  }
140
- };
150
+ }, [activeSessionId, switchSession]);
141
151
  useEffect(() => {
142
152
  loadSessions();
143
- }, []);
153
+ }, [loadSessions]);
144
154
  if (loading) {
145
155
  return /*#__PURE__*/_jsxs(View, {
146
156
  style: [styles.container, styles.centerContent, {
@@ -158,84 +168,87 @@ const SessionManagementScreen = ({
158
168
  });
159
169
  }
160
170
 
161
- // Build grouped section items for sessions
162
- const sessionItems = userSessions.map(session => {
163
- const isCurrent = session.sessionId === activeSessionId;
164
- const subtitleParts = [];
165
- if (session.deviceId) subtitleParts.push(`Device ${session.deviceId.substring(0, 10)}...`);
166
- subtitleParts.push(`Last ${formatRelative(session.lastActive)}`);
167
- subtitleParts.push(`Expires ${formatRelative(session.expiresAt)}`);
168
- return {
169
- id: session.sessionId,
170
- icon: isCurrent ? 'shield-checkmark' : 'laptop-outline',
171
- iconColor: isCurrent ? successColor : primaryColor,
172
- title: isCurrent ? 'Current Session' : `Session ${session.sessionId.substring(0, 8)}...`,
173
- subtitle: subtitleParts.join(' \u2022 '),
174
- showChevron: false,
175
- multiRow: true,
176
- customContentBelow: !isCurrent ? /*#__PURE__*/_jsxs(View, {
177
- style: styles.sessionActionsRow,
178
- children: [/*#__PURE__*/_jsx(TouchableOpacity, {
179
- onPress: () => handleSwitchSession(session.sessionId),
180
- style: [styles.sessionPillButton, {
181
- backgroundColor: isDarkTheme ? '#1E2A38' : '#E6F2FF',
182
- borderColor: primaryColor
183
- }],
184
- disabled: switchLoading === session.sessionId || actionLoading === session.sessionId,
185
- children: switchLoading === session.sessionId ? /*#__PURE__*/_jsx(ActivityIndicator, {
186
- size: "small",
187
- color: primaryColor
188
- }) : /*#__PURE__*/_jsx(Text, {
189
- style: [styles.sessionPillText, {
171
+ // Memoized session items - prevents unnecessary re-renders when dependencies haven't changed
172
+ const sessionItems = useMemo(() => {
173
+ return userSessions.map(session => {
174
+ const isCurrent = session.sessionId === activeSessionId;
175
+ const subtitleParts = [];
176
+ if (session.deviceId) subtitleParts.push(`Device ${session.deviceId.substring(0, 10)}...`);
177
+ subtitleParts.push(`Last ${formatRelative(session.lastActive)}`);
178
+ subtitleParts.push(`Expires ${formatRelative(session.expiresAt)}`);
179
+ return {
180
+ id: session.sessionId,
181
+ icon: isCurrent ? 'shield-checkmark' : 'laptop-outline',
182
+ iconColor: isCurrent ? successColor : primaryColor,
183
+ title: isCurrent ? 'Current Session' : `Session ${session.sessionId.substring(0, 8)}...`,
184
+ subtitle: subtitleParts.join(' \u2022 '),
185
+ showChevron: false,
186
+ multiRow: true,
187
+ customContentBelow: !isCurrent ? /*#__PURE__*/_jsxs(View, {
188
+ style: styles.sessionActionsRow,
189
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
190
+ onPress: () => handleSwitchSession(session.sessionId),
191
+ style: [styles.sessionPillButton, {
192
+ backgroundColor: isDarkTheme ? '#1E2A38' : '#E6F2FF',
193
+ borderColor: primaryColor
194
+ }],
195
+ disabled: switchLoading === session.sessionId || actionLoading === session.sessionId,
196
+ children: switchLoading === session.sessionId ? /*#__PURE__*/_jsx(ActivityIndicator, {
197
+ size: "small",
190
198
  color: primaryColor
199
+ }) : /*#__PURE__*/_jsx(Text, {
200
+ style: [styles.sessionPillText, {
201
+ color: primaryColor
202
+ }],
203
+ children: "Switch"
204
+ })
205
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
206
+ onPress: () => handleLogoutSession(session.sessionId),
207
+ style: [styles.sessionPillButton, {
208
+ backgroundColor: isDarkTheme ? '#3A1E1E' : '#FFEBEE',
209
+ borderColor: dangerColor
191
210
  }],
192
- children: "Switch"
193
- })
194
- }), /*#__PURE__*/_jsx(TouchableOpacity, {
195
- onPress: () => handleLogoutSession(session.sessionId),
196
- style: [styles.sessionPillButton, {
197
- backgroundColor: isDarkTheme ? '#3A1E1E' : '#FFEBEE',
198
- borderColor: dangerColor
199
- }],
200
- disabled: actionLoading === session.sessionId || switchLoading === session.sessionId,
201
- children: actionLoading === session.sessionId ? /*#__PURE__*/_jsx(ActivityIndicator, {
202
- size: "small",
203
- color: dangerColor
204
- }) : /*#__PURE__*/_jsx(Text, {
205
- style: [styles.sessionPillText, {
211
+ disabled: actionLoading === session.sessionId || switchLoading === session.sessionId,
212
+ children: actionLoading === session.sessionId ? /*#__PURE__*/_jsx(ActivityIndicator, {
213
+ size: "small",
206
214
  color: dangerColor
215
+ }) : /*#__PURE__*/_jsx(Text, {
216
+ style: [styles.sessionPillText, {
217
+ color: dangerColor
218
+ }],
219
+ children: "Logout"
220
+ })
221
+ })]
222
+ }) : /*#__PURE__*/_jsx(View, {
223
+ style: styles.sessionActionsRow,
224
+ children: /*#__PURE__*/_jsx(Text, {
225
+ style: [styles.currentBadgeText, {
226
+ color: successColor
207
227
  }],
208
- children: "Logout"
228
+ children: "Active"
209
229
  })
210
- })]
211
- }) : /*#__PURE__*/_jsx(View, {
212
- style: styles.sessionActionsRow,
213
- children: /*#__PURE__*/_jsx(Text, {
214
- style: [styles.currentBadgeText, {
215
- color: successColor
216
- }],
217
- children: "Active"
218
- })
219
- }),
220
- selected: isCurrent,
221
- dense: true
222
- };
223
- });
230
+ }),
231
+ selected: isCurrent,
232
+ dense: true
233
+ };
234
+ });
235
+ }, [userSessions, activeSessionId, formatRelative, successColor, primaryColor, isDarkTheme, switchLoading, actionLoading, handleSwitchSession, handleLogoutSession, dangerColor]);
224
236
 
225
- // Bulk actions as grouped section items
226
- const bulkItems = [{
237
+ // Memoized bulk action items - prevents unnecessary re-renders when dependencies haven't changed
238
+ const otherSessionsCount = useMemo(() => userSessions.filter(s => s.sessionId !== activeSessionId).length, [userSessions, activeSessionId]);
239
+ const bulkItems = useMemo(() => [{
227
240
  id: 'logout-others',
228
241
  icon: 'exit-outline',
229
242
  iconColor: primaryColor,
230
243
  title: 'Logout Other Sessions',
231
- subtitle: userSessions.filter(s => s.sessionId !== activeSessionId).length === 0 ? 'No other sessions' : 'End all sessions except this one',
244
+ subtitle: otherSessionsCount === 0 ? 'No other sessions' : 'End all sessions except this one',
232
245
  onPress: handleLogoutOtherSessions,
233
246
  showChevron: false,
234
247
  customContent: actionLoading === 'others' ? /*#__PURE__*/_jsx(ActivityIndicator, {
235
248
  size: "small",
236
249
  color: primaryColor
237
250
  }) : undefined,
238
- disabled: actionLoading === 'others' || userSessions.filter(s => s.sessionId !== activeSessionId).length === 0,
251
+ disabled: actionLoading === 'others' || otherSessionsCount === 0,
239
252
  dense: true
240
253
  }, {
241
254
  id: 'logout-all',
@@ -251,7 +264,7 @@ const SessionManagementScreen = ({
251
264
  }) : undefined,
252
265
  disabled: actionLoading === 'all',
253
266
  dense: true
254
- }];
267
+ }], [otherSessionsCount, primaryColor, dangerColor, handleLogoutOtherSessions, handleLogoutAllSessions, actionLoading]);
255
268
  return /*#__PURE__*/_jsxs(View, {
256
269
  style: [styles.container, {
257
270
  backgroundColor