@oxyhq/services 5.16.16 → 5.16.18
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/core/mixins/OxyServices.payment.js +102 -0
- package/lib/commonjs/core/mixins/OxyServices.payment.js.map +1 -1
- package/lib/commonjs/core/mixins/OxyServices.security.js +42 -0
- package/lib/commonjs/core/mixins/OxyServices.security.js.map +1 -1
- package/lib/commonjs/crypto/keyManager.js +44 -0
- package/lib/commonjs/crypto/keyManager.js.map +1 -1
- package/lib/commonjs/models/interfaces.js +2 -0
- package/lib/commonjs/models/interfaces.js.map +1 -1
- package/lib/commonjs/ui/components/FollowButton.js +19 -1
- package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
- package/lib/commonjs/ui/components/GroupedItem.js +1 -27
- package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
- package/lib/commonjs/ui/components/Section.js +2 -1
- package/lib/commonjs/ui/components/Section.js.map +1 -1
- package/lib/commonjs/ui/components/SectionTitle.js +1 -2
- package/lib/commonjs/ui/components/SectionTitle.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js +3 -3
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +48 -6
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +9 -2
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useDeviceManagement.js +1 -1
- package/lib/commonjs/ui/context/hooks/useLanguageManagement.js +1 -1
- package/lib/commonjs/ui/context/hooks/useSessionManagement.js +3 -3
- package/lib/commonjs/ui/context/hooks/useStorage.js +2 -2
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +1 -1
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +1 -1
- package/lib/commonjs/ui/hooks/useSessionSocket.js +22 -7
- package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +13 -13
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +17 -17
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +2 -2
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +10 -9
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AppInfoScreen.js +15 -15
- package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js +1 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +1 -1
- package/lib/commonjs/ui/screens/HelpSupportScreen.js +3 -3
- package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HistoryViewScreen.js +2 -2
- package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +3 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +4 -4
- package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +1 -2
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +44 -16
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +3 -1
- package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +2 -2
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +8 -5
- package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
- package/lib/commonjs/ui/utils/errorHandlers.js +49 -2
- package/lib/commonjs/ui/utils/errorHandlers.js.map +1 -1
- package/lib/commonjs/ui/utils/sessionHelpers.js +0 -2
- package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/commonjs/utils/languageUtils.js +11 -11
- package/lib/commonjs/utils/languageUtils.js.map +1 -1
- package/lib/module/core/mixins/OxyServices.payment.js +102 -0
- package/lib/module/core/mixins/OxyServices.payment.js.map +1 -1
- package/lib/module/core/mixins/OxyServices.security.js +42 -0
- package/lib/module/core/mixins/OxyServices.security.js.map +1 -1
- package/lib/module/crypto/keyManager.js +45 -0
- package/lib/module/crypto/keyManager.js.map +1 -1
- package/lib/module/models/interfaces.js +2 -0
- package/lib/module/models/interfaces.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js +19 -1
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/GroupedItem.js +1 -29
- package/lib/module/ui/components/GroupedItem.js.map +1 -1
- package/lib/module/ui/components/Section.js +2 -1
- package/lib/module/ui/components/Section.js.map +1 -1
- package/lib/module/ui/components/SectionTitle.js +1 -2
- package/lib/module/ui/components/SectionTitle.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileViewer.js +3 -3
- package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +49 -7
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +9 -2
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/context/hooks/useDeviceManagement.js +1 -1
- package/lib/module/ui/context/hooks/useDeviceManagement.js.map +1 -1
- package/lib/module/ui/context/hooks/useLanguageManagement.js +1 -1
- package/lib/module/ui/context/hooks/useLanguageManagement.js.map +1 -1
- package/lib/module/ui/context/hooks/useSessionManagement.js +3 -3
- package/lib/module/ui/context/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/context/hooks/useStorage.js +2 -2
- package/lib/module/ui/context/hooks/useStorage.js.map +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useServicesQueries.js +1 -1
- package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/module/ui/hooks/useSessionSocket.js +22 -7
- package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +13 -13
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +17 -17
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +2 -2
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +11 -10
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/AppInfoScreen.js +15 -15
- package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +1 -1
- package/lib/module/ui/screens/HelpSupportScreen.js +3 -3
- package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/module/ui/screens/HistoryViewScreen.js +2 -2
- package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js +4 -2
- package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/module/ui/screens/LegalDocumentsScreen.js +4 -4
- package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1 -2
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +44 -16
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaAboutScreen.js +3 -1
- package/lib/module/ui/screens/karma/KarmaAboutScreen.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/KarmaRewardsScreen.js +9 -6
- package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
- package/lib/module/ui/utils/errorHandlers.js +46 -0
- package/lib/module/ui/utils/errorHandlers.js.map +1 -1
- package/lib/module/ui/utils/sessionHelpers.js +0 -2
- package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/module/utils/languageUtils.js +11 -11
- package/lib/module/utils/languageUtils.js.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.payment.d.ts +41 -0
- package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.security.d.ts +12 -0
- package/lib/typescript/core/mixins/OxyServices.security.d.ts.map +1 -1
- package/lib/typescript/core/mixins/index.d.ts +14 -0
- package/lib/typescript/core/mixins/index.d.ts.map +1 -1
- package/lib/typescript/crypto/keyManager.d.ts.map +1 -1
- package/lib/typescript/models/interfaces.d.ts +1 -1
- package/lib/typescript/models/interfaces.d.ts.map +1 -1
- package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
- package/lib/typescript/ui/components/Section.d.ts.map +1 -1
- package/lib/typescript/ui/components/SectionTitle.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +1 -1
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useLanguageManagement.d.ts +1 -1
- package/lib/typescript/ui/context/hooks/useLanguageManagement.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +1 -1
- package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useStorage.d.ts +1 -1
- package/lib/typescript/ui/context/hooks/useStorage.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
- package/lib/typescript/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/utils/errorHandlers.d.ts +5 -0
- package/lib/typescript/ui/utils/errorHandlers.d.ts.map +1 -1
- package/lib/typescript/ui/utils/sessionHelpers.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/core/mixins/OxyServices.payment.ts +104 -0
- package/src/core/mixins/OxyServices.security.ts +44 -0
- package/src/crypto/keyManager.ts +44 -0
- package/src/models/interfaces.ts +4 -0
- package/src/ui/components/FollowButton.tsx +19 -1
- package/src/ui/components/GroupedItem.tsx +1 -29
- package/src/ui/components/Section.tsx +1 -0
- package/src/ui/components/SectionTitle.tsx +0 -1
- package/src/ui/components/fileManagement/FileViewer.tsx +3 -3
- package/src/ui/context/OxyContext.tsx +33 -9
- package/src/ui/context/hooks/useAuthOperations.ts +16 -9
- package/src/ui/context/hooks/useDeviceManagement.ts +1 -1
- package/src/ui/context/hooks/useLanguageManagement.ts +2 -2
- package/src/ui/context/hooks/useSessionManagement.ts +3 -3
- package/src/ui/context/hooks/useStorage.ts +2 -2
- package/src/ui/hooks/queries/useAccountQueries.ts +1 -1
- package/src/ui/hooks/queries/useServicesQueries.ts +1 -1
- package/src/ui/hooks/useSessionSocket.ts +8 -7
- package/src/ui/screens/AccountCenterScreen.tsx +13 -13
- package/src/ui/screens/AccountOverviewScreen.tsx +17 -17
- package/src/ui/screens/AccountSettingsScreen.tsx +2 -2
- package/src/ui/screens/AccountSwitcherScreen.tsx +8 -8
- package/src/ui/screens/AppInfoScreen.tsx +15 -15
- package/src/ui/screens/FeedbackScreen.tsx +1 -1
- package/src/ui/screens/FileManagementScreen.tsx +1 -1
- package/src/ui/screens/HelpSupportScreen.tsx +3 -3
- package/src/ui/screens/HistoryViewScreen.tsx +2 -2
- package/src/ui/screens/LanguageSelectorScreen.tsx +4 -1
- package/src/ui/screens/LegalDocumentsScreen.tsx +4 -4
- package/src/ui/screens/PaymentGatewayScreen.tsx +1 -1
- package/src/ui/screens/PremiumSubscriptionScreen.tsx +0 -1
- package/src/ui/screens/ProfileScreen.tsx +61 -22
- package/src/ui/screens/SavesCollectionsScreen.tsx +10 -1
- package/src/ui/screens/karma/KarmaAboutScreen.tsx +8 -1
- package/src/ui/screens/karma/KarmaCenterScreen.tsx +2 -2
- package/src/ui/screens/karma/KarmaRewardsScreen.tsx +9 -6
- package/src/ui/utils/errorHandlers.ts +58 -0
- package/src/ui/utils/sessionHelpers.ts +0 -2
- package/src/utils/languageUtils.ts +11 -11
- package/lib/commonjs/ui/context/utils/errorHandlers.js +0 -100
- package/lib/commonjs/ui/context/utils/errorHandlers.js.map +0 -1
- package/lib/commonjs/ui/context/utils/sessionHelpers.js +0 -103
- package/lib/commonjs/ui/context/utils/sessionHelpers.js.map +0 -1
- package/lib/commonjs/ui/context/utils/storageHelpers.js +0 -119
- package/lib/commonjs/ui/context/utils/storageHelpers.js.map +0 -1
- package/lib/module/ui/context/utils/errorHandlers.js +0 -93
- package/lib/module/ui/context/utils/errorHandlers.js.map +0 -1
- package/lib/module/ui/context/utils/sessionHelpers.js +0 -96
- package/lib/module/ui/context/utils/sessionHelpers.js.map +0 -1
- package/lib/module/ui/context/utils/storageHelpers.js +0 -111
- package/lib/module/ui/context/utils/storageHelpers.js.map +0 -1
- package/lib/typescript/ui/context/utils/errorHandlers.d.ts +0 -30
- package/lib/typescript/ui/context/utils/errorHandlers.d.ts.map +0 -1
- package/lib/typescript/ui/context/utils/sessionHelpers.d.ts +0 -59
- package/lib/typescript/ui/context/utils/sessionHelpers.d.ts.map +0 -1
- package/lib/typescript/ui/context/utils/storageHelpers.d.ts +0 -31
- package/lib/typescript/ui/context/utils/storageHelpers.d.ts.map +0 -1
- package/src/ui/context/utils/errorHandlers.ts +0 -146
- package/src/ui/context/utils/sessionHelpers.ts +0 -146
- package/src/ui/context/utils/storageHelpers.ts +0 -134
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
normalizeLanguageCode,
|
|
8
8
|
type LanguageMetadata,
|
|
9
9
|
} from '../../../utils/languageUtils';
|
|
10
|
-
import type { StorageInterface } from '
|
|
11
|
-
import { extractErrorMessage } from '
|
|
10
|
+
import type { StorageInterface } from '../../utils/storageHelpers';
|
|
11
|
+
import { extractErrorMessage } from '../../utils/errorHandlers';
|
|
12
12
|
|
|
13
13
|
export interface UseLanguageManagementOptions {
|
|
14
14
|
storage: StorageInterface | null;
|
|
@@ -2,9 +2,9 @@ import { useCallback, useMemo, useRef, useState } from 'react';
|
|
|
2
2
|
import type { ApiError, User } from '../../../models/interfaces';
|
|
3
3
|
import type { ClientSession } from '../../../models/session';
|
|
4
4
|
import { mergeSessions, normalizeAndSortSessions, sessionsArraysEqual } from '../../../utils/sessionUtils';
|
|
5
|
-
import { fetchSessionsWithFallback, mapSessionsToClient, validateSessionBatch } from '
|
|
6
|
-
import { getStorageKeys, type StorageInterface } from '
|
|
7
|
-
import { handleAuthError, isInvalidSessionError } from '
|
|
5
|
+
import { fetchSessionsWithFallback, mapSessionsToClient, validateSessionBatch } from '../../utils/sessionHelpers';
|
|
6
|
+
import { getStorageKeys, type StorageInterface } from '../../utils/storageHelpers';
|
|
7
|
+
import { handleAuthError, isInvalidSessionError } from '../../utils/errorHandlers';
|
|
8
8
|
import type { OxyServices } from '../../../core';
|
|
9
9
|
import type { QueryClient } from '@tanstack/react-query';
|
|
10
10
|
import { clearQueryCache } from '../../hooks/queryClient';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import type { ApiError } from '../../../models/interfaces';
|
|
3
|
-
import { createPlatformStorage, type StorageInterface } from '
|
|
4
|
-
import { extractErrorMessage } from '
|
|
3
|
+
import { createPlatformStorage, type StorageInterface } from '../../utils/storageHelpers';
|
|
4
|
+
import { extractErrorMessage } from '../../utils/errorHandlers';
|
|
5
5
|
|
|
6
6
|
export interface UseStorageOptions {
|
|
7
7
|
onError?: (error: ApiError) => void;
|
|
@@ -132,7 +132,7 @@ export const usePrivacySettings = (userId?: string, options?: { enabled?: boolea
|
|
|
132
132
|
const targetUserId = userId || user?.id;
|
|
133
133
|
|
|
134
134
|
return useQuery({
|
|
135
|
-
queryKey: queryKeys.privacy.settings(
|
|
135
|
+
queryKey: queryKeys.privacy.settings(targetUserId),
|
|
136
136
|
queryFn: async () => {
|
|
137
137
|
if (!targetUserId) {
|
|
138
138
|
throw new Error('User ID is required');
|
|
@@ -2,7 +2,7 @@ import { useQuery } from '@tanstack/react-query';
|
|
|
2
2
|
import type { ClientSession } from '../../../models/session';
|
|
3
3
|
import { queryKeys } from './queryKeys';
|
|
4
4
|
import { useOxy } from '../../context/OxyContext';
|
|
5
|
-
import { fetchSessionsWithFallback, mapSessionsToClient } from '../../
|
|
5
|
+
import { fetchSessionsWithFallback, mapSessionsToClient } from '../../utils/sessionHelpers';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Get all active sessions for the current user
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import io from 'socket.io-client';
|
|
3
3
|
import { toast } from '../../lib/sonner';
|
|
4
|
+
import { logger } from '../../utils/loggerUtils';
|
|
4
5
|
|
|
5
6
|
interface UseSessionSocketProps {
|
|
6
7
|
userId: string | null | undefined;
|
|
@@ -113,7 +114,7 @@ export function useSessionSocket({ userId, activeSessionId, currentDeviceId, ref
|
|
|
113
114
|
await clearSessionStateRef.current();
|
|
114
115
|
} catch (error) {
|
|
115
116
|
if (__DEV__) {
|
|
116
|
-
|
|
117
|
+
logger.error('Failed to clear session state after session_removed', error instanceof Error ? error : new Error(String(error)), { component: 'useSessionSocket' });
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
120
|
} else {
|
|
@@ -121,7 +122,7 @@ export function useSessionSocket({ userId, activeSessionId, currentDeviceId, ref
|
|
|
121
122
|
refreshSessionsRef.current().catch((error) => {
|
|
122
123
|
// Silently handle errors from refresh - they're expected if sessions were removed
|
|
123
124
|
if (__DEV__) {
|
|
124
|
-
|
|
125
|
+
logger.debug('Failed to refresh sessions after session_removed', { component: 'useSessionSocket' }, error as unknown);
|
|
125
126
|
}
|
|
126
127
|
});
|
|
127
128
|
}
|
|
@@ -146,7 +147,7 @@ export function useSessionSocket({ userId, activeSessionId, currentDeviceId, ref
|
|
|
146
147
|
await clearSessionStateRef.current();
|
|
147
148
|
} catch (error) {
|
|
148
149
|
if (__DEV__) {
|
|
149
|
-
|
|
150
|
+
logger.error('Failed to clear session state after device_removed', error instanceof Error ? error : new Error(String(error)), { component: 'useSessionSocket' });
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
} else {
|
|
@@ -154,7 +155,7 @@ export function useSessionSocket({ userId, activeSessionId, currentDeviceId, ref
|
|
|
154
155
|
refreshSessionsRef.current().catch((error) => {
|
|
155
156
|
// Silently handle errors from refresh - they're expected if sessions were removed
|
|
156
157
|
if (__DEV__) {
|
|
157
|
-
|
|
158
|
+
logger.debug('Failed to refresh sessions after device_removed', { component: 'useSessionSocket' }, error as unknown);
|
|
158
159
|
}
|
|
159
160
|
});
|
|
160
161
|
}
|
|
@@ -179,7 +180,7 @@ export function useSessionSocket({ userId, activeSessionId, currentDeviceId, ref
|
|
|
179
180
|
await clearSessionStateRef.current();
|
|
180
181
|
} catch (error) {
|
|
181
182
|
if (__DEV__) {
|
|
182
|
-
|
|
183
|
+
logger.error('Failed to clear session state after sessions_removed', error instanceof Error ? error : new Error(String(error)), { component: 'useSessionSocket' });
|
|
183
184
|
}
|
|
184
185
|
}
|
|
185
186
|
} else {
|
|
@@ -187,7 +188,7 @@ export function useSessionSocket({ userId, activeSessionId, currentDeviceId, ref
|
|
|
187
188
|
refreshSessionsRef.current().catch((error) => {
|
|
188
189
|
// Silently handle errors from refresh - they're expected if sessions were removed
|
|
189
190
|
if (__DEV__) {
|
|
190
|
-
|
|
191
|
+
logger.debug('Failed to refresh sessions after sessions_removed', { component: 'useSessionSocket' }, error as unknown);
|
|
191
192
|
}
|
|
192
193
|
});
|
|
193
194
|
}
|
|
@@ -196,7 +197,7 @@ export function useSessionSocket({ userId, activeSessionId, currentDeviceId, ref
|
|
|
196
197
|
refreshSessionsRef.current().catch((error) => {
|
|
197
198
|
// Log but don't throw - refresh errors shouldn't break the socket handler
|
|
198
199
|
if (__DEV__) {
|
|
199
|
-
|
|
200
|
+
logger.debug('Failed to refresh sessions after session_update', { component: 'useSessionSocket' }, error as unknown);
|
|
200
201
|
}
|
|
201
202
|
});
|
|
202
203
|
|
|
@@ -102,9 +102,9 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
102
102
|
<QuickActions
|
|
103
103
|
theme={normalizedTheme}
|
|
104
104
|
actions={useMemo(() => [
|
|
105
|
-
{ id: 'overview', icon: '
|
|
106
|
-
{ id: 'settings', icon: '
|
|
107
|
-
{ id: 'sessions', icon: 'shield-
|
|
105
|
+
{ id: 'overview', icon: 'account-circle', iconColor: colors.iconSecurity, title: t('accountCenter.quickActions.overview') || 'Overview', onPress: () => navigate?.('AccountOverview') },
|
|
106
|
+
{ id: 'settings', icon: 'cog', iconColor: colors.iconData, title: t('accountCenter.quickActions.editProfile') || 'Edit Profile', onPress: () => navigate?.('EditProfile') },
|
|
107
|
+
{ id: 'sessions', icon: 'shield-check', iconColor: colors.iconSecurity, title: t('accountCenter.quickActions.sessions') || 'Sessions', onPress: () => navigate?.('SessionManagement') },
|
|
108
108
|
{ id: 'premium', icon: 'star', iconColor: colors.iconPayments, title: t('accountCenter.quickActions.premium') || 'Premium', onPress: () => navigate?.('PremiumSubscription') },
|
|
109
109
|
...(user?.isPremium ? [{ id: 'billing', icon: 'card', iconColor: colors.iconPersonalInfo, title: t('accountCenter.quickActions.billing') || 'Billing', onPress: () => navigate?.('PaymentGateway') }] : []),
|
|
110
110
|
...(sessions && sessions.length > 1 ? [{ id: 'switch', icon: 'swap-horizontal', iconColor: colors.iconStorage, title: t('accountCenter.quickActions.switch') || 'Switch', onPress: () => navigate?.('AccountSwitcher') }] : []),
|
|
@@ -119,7 +119,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
119
119
|
items={useMemo(() => [
|
|
120
120
|
{
|
|
121
121
|
id: 'overview',
|
|
122
|
-
icon: '
|
|
122
|
+
icon: 'account-circle',
|
|
123
123
|
iconColor: colors.iconSecurity,
|
|
124
124
|
title: t('accountCenter.items.accountOverview.title') || 'Account Overview',
|
|
125
125
|
subtitle: t('accountCenter.items.accountOverview.subtitle') || 'Complete account information',
|
|
@@ -127,7 +127,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
id: 'settings',
|
|
130
|
-
icon: '
|
|
130
|
+
icon: 'cog',
|
|
131
131
|
iconColor: colors.iconData,
|
|
132
132
|
title: t('accountCenter.items.editProfile.title') || 'Edit Profile',
|
|
133
133
|
subtitle: t('accountCenter.items.editProfile.subtitle') || 'Manage your profile and preferences',
|
|
@@ -135,7 +135,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
id: 'sessions',
|
|
138
|
-
icon: 'shield-
|
|
138
|
+
icon: 'shield-check',
|
|
139
139
|
iconColor: colors.iconSecurity,
|
|
140
140
|
title: t('accountCenter.items.manageSessions.title') || 'Manage Sessions',
|
|
141
141
|
subtitle: t('accountCenter.items.manageSessions.subtitle') || 'Security and active devices',
|
|
@@ -177,7 +177,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
177
177
|
items={useMemo(() => [
|
|
178
178
|
{
|
|
179
179
|
id: 'switch',
|
|
180
|
-
icon: '
|
|
180
|
+
icon: 'account-group',
|
|
181
181
|
iconColor: colors.iconStorage,
|
|
182
182
|
title: t('accountCenter.items.switchAccount.title') || 'Switch Account',
|
|
183
183
|
subtitle: t('accountCenter.items.switchAccount.subtitle', { count: sessions.length }) || `${sessions.length} accounts available`,
|
|
@@ -185,7 +185,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
id: 'add',
|
|
188
|
-
icon: '
|
|
188
|
+
icon: 'account-plus',
|
|
189
189
|
iconColor: colors.iconPersonalInfo,
|
|
190
190
|
title: t('accountCenter.items.addAccount.title') || 'Add Another Account',
|
|
191
191
|
subtitle: t('accountCenter.items.addAccount.subtitle') || 'Sign in with a different account',
|
|
@@ -204,7 +204,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
204
204
|
items={useMemo(() => [
|
|
205
205
|
{
|
|
206
206
|
id: 'add',
|
|
207
|
-
icon: '
|
|
207
|
+
icon: 'account-plus',
|
|
208
208
|
iconColor: colors.iconPersonalInfo,
|
|
209
209
|
title: t('accountCenter.items.addAccount.title') || 'Add Another Account',
|
|
210
210
|
subtitle: t('accountCenter.items.addAccount.subtitle') || 'Sign in with a different account',
|
|
@@ -222,7 +222,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
222
222
|
items={useMemo(() => [
|
|
223
223
|
...(Platform.OS !== 'web' ? [{
|
|
224
224
|
id: 'notifications',
|
|
225
|
-
icon: '
|
|
225
|
+
icon: 'bell',
|
|
226
226
|
iconColor: colors.iconStorage,
|
|
227
227
|
title: t('accountCenter.items.notifications.title') || 'Notifications',
|
|
228
228
|
subtitle: t('accountCenter.items.notifications.subtitle') || 'Manage notification settings',
|
|
@@ -230,7 +230,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
230
230
|
}] : []),
|
|
231
231
|
{
|
|
232
232
|
id: 'language',
|
|
233
|
-
icon: '
|
|
233
|
+
icon: 'translate',
|
|
234
234
|
iconColor: colors.iconPersonalInfo,
|
|
235
235
|
title: t('language.title') || 'Language',
|
|
236
236
|
subtitle: t('language.subtitle') || 'Choose your preferred language',
|
|
@@ -246,7 +246,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
246
246
|
},
|
|
247
247
|
{
|
|
248
248
|
id: 'appinfo',
|
|
249
|
-
icon: 'information
|
|
249
|
+
icon: 'information',
|
|
250
250
|
iconColor: '#8E8E93',
|
|
251
251
|
title: t('accountCenter.items.appInfo.title') || 'App Information',
|
|
252
252
|
subtitle: t('accountCenter.items.appInfo.subtitle') || 'Version and system details',
|
|
@@ -260,7 +260,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
|
|
|
260
260
|
{/* Sign Out Section */}
|
|
261
261
|
<Section >
|
|
262
262
|
<GroupedItem
|
|
263
|
-
icon="
|
|
263
|
+
icon="logout"
|
|
264
264
|
iconColor={dangerColor}
|
|
265
265
|
title={isLoading ? (t('accountCenter.signingOut') || 'Signing out...') : (t('common.actions.signOut') || 'Sign Out')}
|
|
266
266
|
|
|
@@ -398,7 +398,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
398
398
|
items={[
|
|
399
399
|
{
|
|
400
400
|
id: 'profile-info',
|
|
401
|
-
icon: '
|
|
401
|
+
icon: 'account',
|
|
402
402
|
iconColor: baseThemeStyles.colors.iconSecurity,
|
|
403
403
|
title: displayName,
|
|
404
404
|
subtitle: user ? (user.email || user.username) : (t('common.status.loading') || 'Loading...'),
|
|
@@ -414,7 +414,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
414
414
|
items={[
|
|
415
415
|
{
|
|
416
416
|
id: 'edit-profile',
|
|
417
|
-
icon: '
|
|
417
|
+
icon: 'account-circle',
|
|
418
418
|
iconColor: baseThemeStyles.colors.iconPersonalInfo,
|
|
419
419
|
title: t('accountOverview.items.editProfile.title'),
|
|
420
420
|
subtitle: t('accountOverview.items.editProfile.subtitle'),
|
|
@@ -422,7 +422,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
422
422
|
},
|
|
423
423
|
{
|
|
424
424
|
id: 'security-privacy',
|
|
425
|
-
icon: 'shield-
|
|
425
|
+
icon: 'shield-check',
|
|
426
426
|
iconColor: baseThemeStyles.colors.iconSecurity,
|
|
427
427
|
title: t('accountOverview.items.security.title'),
|
|
428
428
|
subtitle: t('accountOverview.items.security.subtitle'),
|
|
@@ -430,7 +430,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
430
430
|
},
|
|
431
431
|
{
|
|
432
432
|
id: 'notifications',
|
|
433
|
-
icon: '
|
|
433
|
+
icon: 'bell',
|
|
434
434
|
iconColor: baseThemeStyles.colors.iconStorage,
|
|
435
435
|
title: t('accountOverview.items.notifications.title'),
|
|
436
436
|
subtitle: t('accountOverview.items.notifications.subtitle'),
|
|
@@ -483,7 +483,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
483
483
|
<GroupedSection
|
|
484
484
|
items={additionalAccountsData.map((account, index) => ({
|
|
485
485
|
id: `account-${account.id}`,
|
|
486
|
-
icon: '
|
|
486
|
+
icon: 'account',
|
|
487
487
|
iconColor: baseThemeStyles.colors.iconData,
|
|
488
488
|
title: typeof account.name === 'object'
|
|
489
489
|
? account.name?.full || account.name?.first || account.username
|
|
@@ -519,7 +519,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
519
519
|
items={[
|
|
520
520
|
{
|
|
521
521
|
id: 'no-accounts',
|
|
522
|
-
icon: '
|
|
522
|
+
icon: 'account-outline',
|
|
523
523
|
iconColor: '#ccc',
|
|
524
524
|
title: t('accountOverview.additional.noAccounts.title') || 'No other accounts',
|
|
525
525
|
subtitle: t('accountOverview.additional.noAccounts.subtitle') || 'Add another account to switch between them',
|
|
@@ -546,7 +546,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
546
546
|
},
|
|
547
547
|
{
|
|
548
548
|
id: 'sign-out-all',
|
|
549
|
-
icon: '
|
|
549
|
+
icon: 'logout',
|
|
550
550
|
iconColor: baseThemeStyles.colors.iconSharing,
|
|
551
551
|
title: t('accountOverview.items.signOutAll.title') || 'Sign out of all accounts',
|
|
552
552
|
subtitle: t('accountOverview.items.signOutAll.subtitle') || 'Remove all accounts from this device',
|
|
@@ -564,7 +564,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
564
564
|
items={[
|
|
565
565
|
{
|
|
566
566
|
id: 'account-switcher',
|
|
567
|
-
icon: '
|
|
567
|
+
icon: 'account-group',
|
|
568
568
|
iconColor: baseThemeStyles.colors.iconData,
|
|
569
569
|
title: showMoreAccounts
|
|
570
570
|
? t('accountOverview.items.accountSwitcher.titleHide')
|
|
@@ -580,7 +580,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
580
580
|
},
|
|
581
581
|
{
|
|
582
582
|
id: 'history-view',
|
|
583
|
-
icon: '
|
|
583
|
+
icon: 'clock',
|
|
584
584
|
iconColor: baseThemeStyles.colors.iconSecurity,
|
|
585
585
|
title: t('accountOverview.items.history.title') || 'History',
|
|
586
586
|
subtitle: t('accountOverview.items.history.subtitle') || 'View and manage your search history',
|
|
@@ -604,7 +604,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
604
604
|
},
|
|
605
605
|
{
|
|
606
606
|
id: 'delete-account',
|
|
607
|
-
icon: '
|
|
607
|
+
icon: 'delete',
|
|
608
608
|
iconColor: baseThemeStyles.colors.iconSharing,
|
|
609
609
|
title: t('accountOverview.items.deleteAccount.title'),
|
|
610
610
|
subtitle: t('accountOverview.items.deleteAccount.subtitle'),
|
|
@@ -621,7 +621,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
621
621
|
items={[
|
|
622
622
|
{
|
|
623
623
|
id: 'search-settings',
|
|
624
|
-
icon: '
|
|
624
|
+
icon: 'magnify',
|
|
625
625
|
iconColor: baseThemeStyles.colors.iconSecurity,
|
|
626
626
|
title: t('accountOverview.items.searchSettings.title') || 'Search Settings',
|
|
627
627
|
subtitle: t('accountOverview.items.searchSettings.subtitle') || 'SafeSearch and personalization',
|
|
@@ -629,7 +629,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
629
629
|
},
|
|
630
630
|
{
|
|
631
631
|
id: 'language-settings',
|
|
632
|
-
icon: '
|
|
632
|
+
icon: 'translate',
|
|
633
633
|
iconColor: baseThemeStyles.colors.iconPersonalInfo,
|
|
634
634
|
title: t('accountOverview.items.language.title') || 'Language',
|
|
635
635
|
subtitle: t('accountOverview.items.language.subtitle') || 'Choose your preferred language',
|
|
@@ -637,7 +637,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
637
637
|
},
|
|
638
638
|
{
|
|
639
639
|
id: 'account-preferences',
|
|
640
|
-
icon: '
|
|
640
|
+
icon: 'cog',
|
|
641
641
|
iconColor: '#8E8E93',
|
|
642
642
|
title: t('accountOverview.items.preferences.title'),
|
|
643
643
|
subtitle: t('accountOverview.items.preferences.subtitle'),
|
|
@@ -653,7 +653,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
653
653
|
},
|
|
654
654
|
{
|
|
655
655
|
id: 'privacy-policy',
|
|
656
|
-
icon: 'shield-
|
|
656
|
+
icon: 'shield-check',
|
|
657
657
|
iconColor: baseThemeStyles.colors.iconPersonalInfo,
|
|
658
658
|
title: t('accountOverview.items.privacyPolicy.title') || 'Privacy Policy',
|
|
659
659
|
subtitle: t('accountOverview.items.privacyPolicy.subtitle') || 'How we handle your data',
|
|
@@ -661,7 +661,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
661
661
|
},
|
|
662
662
|
{
|
|
663
663
|
id: 'terms-of-service',
|
|
664
|
-
icon: 'document
|
|
664
|
+
icon: 'file-document',
|
|
665
665
|
iconColor: baseThemeStyles.colors.iconSecurity,
|
|
666
666
|
title: t('accountOverview.items.termsOfService.title') || 'Terms of Service',
|
|
667
667
|
subtitle: t('accountOverview.items.termsOfService.subtitle') || 'Terms and conditions of use',
|
|
@@ -677,7 +677,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
677
677
|
},
|
|
678
678
|
{
|
|
679
679
|
id: 'about',
|
|
680
|
-
icon: 'information
|
|
680
|
+
icon: 'information',
|
|
681
681
|
iconColor: '#8E8E93',
|
|
682
682
|
title: t('accountOverview.items.about.title'),
|
|
683
683
|
subtitle: t('accountOverview.items.about.subtitle'),
|
|
@@ -691,7 +691,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
691
691
|
{/* Sign Out */}
|
|
692
692
|
<Section title={t('accountOverview.sections.actions')} >
|
|
693
693
|
<GroupedItem
|
|
694
|
-
icon="
|
|
694
|
+
icon="logout"
|
|
695
695
|
iconColor="#FF3B30"
|
|
696
696
|
title={t('accountOverview.items.signOut.title')}
|
|
697
697
|
subtitle={t('accountOverview.items.signOut.subtitle')}
|
|
@@ -1038,10 +1038,10 @@ const AccountSettingsScreen: React.FC<BaseScreenProps & { initialField?: string;
|
|
|
1038
1038
|
);
|
|
1039
1039
|
}
|
|
1040
1040
|
const fieldConfig = {
|
|
1041
|
-
displayName: { label: 'Display Name', value: displayName, placeholder: 'Enter your display name', icon: '
|
|
1041
|
+
displayName: { label: 'Display Name', value: displayName, placeholder: 'Enter your display name', icon: 'account', color: colors.iconPersonalInfo, multiline: false, keyboardType: 'default' as const },
|
|
1042
1042
|
username: { label: 'Username', value: username, placeholder: 'Choose a username', icon: 'at', color: colors.iconData, multiline: false, keyboardType: 'default' as const },
|
|
1043
1043
|
email: { label: 'Email', value: email, placeholder: 'Enter your email address', icon: 'mail', color: colors.iconStorage, multiline: false, keyboardType: 'email-address' as const },
|
|
1044
|
-
bio: { label: 'Bio', value: bio, placeholder: 'Tell people about yourself...', icon: 'document
|
|
1044
|
+
bio: { label: 'Bio', value: bio, placeholder: 'Tell people about yourself...', icon: 'file-document', color: colors.iconPersonalInfo, multiline: true, keyboardType: 'default' as const },
|
|
1045
1045
|
location: { label: 'Location', value: location, placeholder: 'Enter your location', icon: 'location', color: colors.iconSharing, multiline: false, keyboardType: 'default' as const },
|
|
1046
1046
|
links: { label: 'Links', value: links.join(', '), placeholder: 'Enter your links (comma separated)', icon: 'link', color: colors.iconPersonalInfo, multiline: false, keyboardType: 'url' as const }
|
|
1047
1047
|
};
|
|
@@ -456,7 +456,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
|
|
|
456
456
|
items={[
|
|
457
457
|
{
|
|
458
458
|
id: 'add-account',
|
|
459
|
-
icon: '
|
|
459
|
+
icon: 'account-plus',
|
|
460
460
|
iconColor: '#007AFF',
|
|
461
461
|
title: 'Add Another Account',
|
|
462
462
|
subtitle: 'Sign in with a different account',
|
|
@@ -464,7 +464,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
|
|
|
464
464
|
},
|
|
465
465
|
{
|
|
466
466
|
id: 'device-management',
|
|
467
|
-
icon: '
|
|
467
|
+
icon: 'cellphone',
|
|
468
468
|
iconColor: '#5856D6',
|
|
469
469
|
title: `${showDeviceManagement ? 'Hide' : 'Manage'} Device Sessions`,
|
|
470
470
|
subtitle: 'View and manage sessions on other devices',
|
|
@@ -472,7 +472,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
|
|
|
472
472
|
},
|
|
473
473
|
{
|
|
474
474
|
id: 'sign-out-all',
|
|
475
|
-
icon: '
|
|
475
|
+
icon: 'logout',
|
|
476
476
|
iconColor: '#FF3B30',
|
|
477
477
|
title: 'Sign Out All Accounts',
|
|
478
478
|
subtitle: 'Remove all accounts from this device',
|
|
@@ -511,7 +511,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
|
|
|
511
511
|
items={[
|
|
512
512
|
{
|
|
513
513
|
id: 'no-device-sessions',
|
|
514
|
-
icon: '
|
|
514
|
+
icon: 'cellphone',
|
|
515
515
|
iconColor: '#ccc',
|
|
516
516
|
title: t('accountSwitcher.device.noneTitle') || 'No device sessions found',
|
|
517
517
|
subtitle: t('accountSwitcher.device.noneSubtitle') || 'Device session management not available',
|
|
@@ -524,7 +524,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
|
|
|
524
524
|
<GroupedSection
|
|
525
525
|
items={deviceSessions.map((session, index) => ({
|
|
526
526
|
id: `device-session-${session.sessionId}`,
|
|
527
|
-
icon: session.isCurrent ? '
|
|
527
|
+
icon: session.isCurrent ? 'cellphone' : 'cellphone-basic',
|
|
528
528
|
iconColor: session.isCurrent ? '#34C759' : '#8E8E93',
|
|
529
529
|
title: `${session.deviceName} ${session.isCurrent ? '(' + (t('accountSwitcher.device.thisDevice') || 'This device') + ')' : ''}`,
|
|
530
530
|
subtitle: t('accountSwitcher.device.lastActive', { date: new Date(session.lastActive).toLocaleDateString() }) || `Last active: ${new Date(session.lastActive).toLocaleDateString()}`,
|
|
@@ -557,7 +557,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
|
|
|
557
557
|
items={[
|
|
558
558
|
{
|
|
559
559
|
id: 'empty-state',
|
|
560
|
-
icon: '
|
|
560
|
+
icon: 'account-outline',
|
|
561
561
|
iconColor: '#ccc',
|
|
562
562
|
title: t('accountSwitcher.empty.title') || 'No saved accounts',
|
|
563
563
|
subtitle: t('accountSwitcher.empty.subtitle') || 'Add another account to switch between them quickly',
|
|
@@ -605,9 +605,9 @@ const styles = StyleSheet.create({
|
|
|
605
605
|
},
|
|
606
606
|
sectionTitle: {
|
|
607
607
|
fontSize: 16,
|
|
608
|
-
fontWeight: '600',
|
|
608
|
+
fontWeight: Platform.OS === 'web' ? '600' : undefined,
|
|
609
|
+
fontFamily: fontFamilies.phuduSemiBold,
|
|
609
610
|
color: '#333',
|
|
610
|
-
marginBottom: 12,
|
|
611
611
|
},
|
|
612
612
|
settingItem: {
|
|
613
613
|
backgroundColor: '#fff',
|
|
@@ -175,7 +175,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
175
175
|
items={[
|
|
176
176
|
{
|
|
177
177
|
id: 'name',
|
|
178
|
-
icon: 'information
|
|
178
|
+
icon: 'information',
|
|
179
179
|
iconColor: themeStyles.colors.iconSecurity,
|
|
180
180
|
title: 'Name',
|
|
181
181
|
subtitle: packageInfo.name,
|
|
@@ -184,7 +184,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
184
184
|
},
|
|
185
185
|
{
|
|
186
186
|
id: 'version',
|
|
187
|
-
icon: '
|
|
187
|
+
icon: 'tag',
|
|
188
188
|
iconColor: themeStyles.colors.iconData,
|
|
189
189
|
title: 'Version',
|
|
190
190
|
subtitle: packageInfo.version,
|
|
@@ -192,14 +192,14 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
192
192
|
},
|
|
193
193
|
{
|
|
194
194
|
id: 'description',
|
|
195
|
-
icon: 'document
|
|
195
|
+
icon: 'file-document',
|
|
196
196
|
iconColor: themeStyles.colors.iconPersonalInfo,
|
|
197
197
|
title: 'Description',
|
|
198
198
|
subtitle: packageInfo.description || 'No description',
|
|
199
199
|
},
|
|
200
200
|
{
|
|
201
201
|
id: 'main-entry',
|
|
202
|
-
icon: 'code',
|
|
202
|
+
icon: 'code-tags',
|
|
203
203
|
iconColor: themeStyles.colors.iconStorage,
|
|
204
204
|
title: 'Main Entry',
|
|
205
205
|
subtitle: packageInfo.main || 'N/A',
|
|
@@ -215,7 +215,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
id: 'types-entry',
|
|
218
|
-
icon: '
|
|
218
|
+
icon: 'wrench',
|
|
219
219
|
iconColor: themeStyles.colors.iconPersonalInfo,
|
|
220
220
|
title: 'Types Entry',
|
|
221
221
|
subtitle: packageInfo.types || 'N/A',
|
|
@@ -231,14 +231,14 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
231
231
|
items={[
|
|
232
232
|
{
|
|
233
233
|
id: 'platform',
|
|
234
|
-
icon: '
|
|
234
|
+
icon: 'cellphone',
|
|
235
235
|
iconColor: themeStyles.colors.iconSecurity,
|
|
236
236
|
title: 'Platform',
|
|
237
237
|
subtitle: Platform.OS,
|
|
238
238
|
},
|
|
239
239
|
{
|
|
240
240
|
id: 'platform-version',
|
|
241
|
-
icon: '
|
|
241
|
+
icon: 'chip',
|
|
242
242
|
iconColor: themeStyles.colors.iconData,
|
|
243
243
|
title: 'Platform Version',
|
|
244
244
|
subtitle: systemInfo?.version || 'Loading...',
|
|
@@ -259,7 +259,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
259
259
|
},
|
|
260
260
|
{
|
|
261
261
|
id: 'environment',
|
|
262
|
-
icon: '
|
|
262
|
+
icon: 'cog',
|
|
263
263
|
iconColor: themeStyles.colors.iconPersonalInfo,
|
|
264
264
|
title: 'Environment',
|
|
265
265
|
subtitle: __DEV__ ? 'Development' : 'Production',
|
|
@@ -274,7 +274,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
274
274
|
items={[
|
|
275
275
|
{
|
|
276
276
|
id: 'auth-status',
|
|
277
|
-
icon: 'shield-
|
|
277
|
+
icon: 'shield-check',
|
|
278
278
|
iconColor: isAuthenticated ? themeStyles.colors.iconPersonalInfo : themeStyles.colors.iconSharing,
|
|
279
279
|
title: 'Authentication Status',
|
|
280
280
|
subtitle: isAuthenticated ? 'Authenticated' : 'Not Authenticated',
|
|
@@ -282,7 +282,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
282
282
|
...(user ? [
|
|
283
283
|
{
|
|
284
284
|
id: 'user-id',
|
|
285
|
-
icon: '
|
|
285
|
+
icon: 'account',
|
|
286
286
|
iconColor: themeStyles.colors.iconSecurity,
|
|
287
287
|
title: 'User ID',
|
|
288
288
|
subtitle: user.id,
|
|
@@ -319,7 +319,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
319
319
|
] : []),
|
|
320
320
|
{
|
|
321
321
|
id: 'active-sessions',
|
|
322
|
-
icon: '
|
|
322
|
+
icon: 'account-group',
|
|
323
323
|
iconColor: themeStyles.colors.iconPersonalInfo,
|
|
324
324
|
title: 'Total Active Sessions',
|
|
325
325
|
subtitle: sessions?.length?.toString() || '0',
|
|
@@ -375,7 +375,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
375
375
|
items={[
|
|
376
376
|
{
|
|
377
377
|
id: 'build-timestamp',
|
|
378
|
-
icon: '
|
|
378
|
+
icon: 'clock',
|
|
379
379
|
iconColor: themeStyles.colors.iconSecurity,
|
|
380
380
|
title: 'Build Timestamp',
|
|
381
381
|
subtitle: systemInfo?.timestamp || 'Loading...',
|
|
@@ -383,7 +383,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
383
383
|
},
|
|
384
384
|
{
|
|
385
385
|
id: 'react-native',
|
|
386
|
-
icon: '
|
|
386
|
+
icon: 'react',
|
|
387
387
|
iconColor: '#61DAFB',
|
|
388
388
|
title: 'React Native',
|
|
389
389
|
subtitle: 'Expo/React Native',
|
|
@@ -405,7 +405,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
405
405
|
items={[
|
|
406
406
|
{
|
|
407
407
|
id: 'copy-full-report',
|
|
408
|
-
icon: 'copy',
|
|
408
|
+
icon: 'content-copy',
|
|
409
409
|
iconColor: themeStyles.colors.iconSecurity,
|
|
410
410
|
title: 'Copy Full Report',
|
|
411
411
|
subtitle: 'Copy complete application information to clipboard',
|
|
@@ -413,7 +413,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
|
|
|
413
413
|
},
|
|
414
414
|
{
|
|
415
415
|
id: 'run-system-check',
|
|
416
|
-
icon: isRunningSystemCheck ? 'sync' : '
|
|
416
|
+
icon: isRunningSystemCheck ? 'sync' : 'check-circle',
|
|
417
417
|
iconColor: isRunningSystemCheck ? '#FF9500' : '#34C759',
|
|
418
418
|
title: isRunningSystemCheck ? 'Running System Check...' : 'Run System Check',
|
|
419
419
|
subtitle: isRunningSystemCheck
|
|
@@ -648,7 +648,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
648
648
|
|
|
649
649
|
const categoryItems = useMemo(() => (feedbackData.type ? (CATEGORIES[feedbackData.type as keyof typeof CATEGORIES] || []).map(cat => ({
|
|
650
650
|
id: cat,
|
|
651
|
-
icon: feedbackData.category === cat ? '
|
|
651
|
+
icon: feedbackData.category === cat ? 'check-circle' : 'ellipse-outline',
|
|
652
652
|
iconColor: feedbackData.category === cat ? colors.primary : colors.secondaryText,
|
|
653
653
|
title: cat,
|
|
654
654
|
onPress: () => updateField('category', cat),
|