@oxyhq/services 6.9.45 → 6.9.46
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/ui/components/OxyProvider.js +6 -5
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/SignInModal.js +271 -102
- package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js +24 -15
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/commonjs/ui/components/index.js +0 -35
- package/lib/commonjs/ui/components/index.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +26 -13
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +50 -28
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +83 -48
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +11 -10
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +38 -23
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +4 -3
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +1 -3
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +47 -63
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +90 -68
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +72 -63
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js +5 -5
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js +57 -51
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +25 -36
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HistoryViewScreen.js +31 -31
- package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +15 -8
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +60 -54
- package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +12 -9
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +159 -190
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +20 -22
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SearchSettingsScreen.js +16 -17
- package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SessionManagementScreen.js +26 -4
- package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/UserLinksScreen.js +13 -29
- package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +110 -52
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +3 -5
- package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +6 -5
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/SignInModal.js +271 -100
- package/lib/module/ui/components/SignInModal.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileViewer.js +24 -15
- package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/module/ui/components/index.js +0 -5
- package/lib/module/ui/components/index.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentDetailsStep.js +26 -13
- package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentMethodStep.js +49 -26
- package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentReviewStep.js +84 -48
- package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSuccessStep.js +11 -9
- package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSummaryStep.js +38 -22
- package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +4 -3
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +1 -3
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +46 -62
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +90 -68
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +73 -64
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js +6 -6
- package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js +48 -42
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +25 -36
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/HistoryViewScreen.js +32 -32
- package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js +16 -9
- package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/module/ui/screens/LegalDocumentsScreen.js +61 -55
- package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js +12 -9
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/PrivacySettingsScreen.js +161 -192
- package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/SavesCollectionsScreen.js +21 -23
- package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/module/ui/screens/SearchSettingsScreen.js +17 -18
- package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/SessionManagementScreen.js +27 -5
- package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/UserLinksScreen.js +15 -31
- package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js +110 -52
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaFAQScreen.js +4 -6
- package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/index.d.ts +0 -5
- package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts +1 -1
- package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountCenterScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/SessionManagementScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/index.d.ts +0 -5
- package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts +1 -1
- package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountCenterScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/SessionManagementScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/ui/components/OxyProvider.tsx +6 -5
- package/src/ui/components/SignInModal.tsx +186 -42
- package/src/ui/components/fileManagement/FileViewer.tsx +25 -15
- package/src/ui/components/index.ts +0 -5
- package/src/ui/components/payment/PaymentDetailsStep.tsx +16 -19
- package/src/ui/components/payment/PaymentMethodStep.tsx +33 -35
- package/src/ui/components/payment/PaymentReviewStep.tsx +63 -67
- package/src/ui/components/payment/PaymentSuccessStep.tsx +4 -12
- package/src/ui/components/payment/PaymentSummaryStep.tsx +26 -33
- package/src/ui/context/hooks/useAuthOperations.ts +4 -3
- package/src/ui/screens/AccountCenterScreen.tsx +2 -3
- package/src/ui/screens/AccountOverviewScreen.tsx +44 -65
- package/src/ui/screens/AccountSettingsScreen.tsx +121 -149
- package/src/ui/screens/AccountSwitcherScreen.tsx +94 -115
- package/src/ui/screens/AccountVerificationScreen.tsx +10 -9
- package/src/ui/screens/FeedbackScreen.tsx +50 -38
- package/src/ui/screens/FileManagementScreen.tsx +26 -34
- package/src/ui/screens/HistoryViewScreen.tsx +29 -10
- package/src/ui/screens/LanguageSelectorScreen.tsx +19 -7
- package/src/ui/screens/LegalDocumentsScreen.tsx +46 -63
- package/src/ui/screens/PaymentGatewayScreen.tsx +11 -12
- package/src/ui/screens/PrivacySettingsScreen.tsx +81 -193
- package/src/ui/screens/SavesCollectionsScreen.tsx +23 -23
- package/src/ui/screens/SearchSettingsScreen.tsx +11 -19
- package/src/ui/screens/SessionManagementScreen.tsx +29 -3
- package/src/ui/screens/UserLinksScreen.tsx +15 -32
- package/src/ui/screens/WelcomeNewUserScreen.tsx +46 -20
- package/src/ui/screens/karma/KarmaFAQScreen.tsx +4 -6
- package/lib/commonjs/ui/components/GroupedItem.js +0 -138
- package/lib/commonjs/ui/components/GroupedItem.js.map +0 -1
- package/lib/commonjs/ui/components/GroupedSection.js +0 -41
- package/lib/commonjs/ui/components/GroupedSection.js.map +0 -1
- package/lib/commonjs/ui/components/Section.js +0 -39
- package/lib/commonjs/ui/components/Section.js.map +0 -1
- package/lib/commonjs/ui/components/SectionTitle.js +0 -29
- package/lib/commonjs/ui/components/SectionTitle.js.map +0 -1
- package/lib/commonjs/ui/components/SettingRow.js +0 -96
- package/lib/commonjs/ui/components/SettingRow.js.map +0 -1
- package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +0 -208
- package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +0 -1
- package/lib/module/ui/components/GroupedItem.js +0 -135
- package/lib/module/ui/components/GroupedItem.js.map +0 -1
- package/lib/module/ui/components/GroupedSection.js +0 -37
- package/lib/module/ui/components/GroupedSection.js.map +0 -1
- package/lib/module/ui/components/Section.js +0 -34
- package/lib/module/ui/components/Section.js.map +0 -1
- package/lib/module/ui/components/SectionTitle.js +0 -25
- package/lib/module/ui/components/SectionTitle.js.map +0 -1
- package/lib/module/ui/components/SettingRow.js +0 -91
- package/lib/module/ui/components/SettingRow.js.map +0 -1
- package/lib/module/ui/components/internal/GroupedPillButtons.js +0 -204
- package/lib/module/ui/components/internal/GroupedPillButtons.js.map +0 -1
- package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts +0 -24
- package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/GroupedSection.d.ts +0 -30
- package/lib/typescript/commonjs/ui/components/GroupedSection.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/Section.d.ts +0 -12
- package/lib/typescript/commonjs/ui/components/Section.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/SectionTitle.d.ts +0 -10
- package/lib/typescript/commonjs/ui/components/SectionTitle.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/SettingRow.d.ts +0 -20
- package/lib/typescript/commonjs/ui/components/SettingRow.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/internal/GroupedPillButtons.d.ts +0 -24
- package/lib/typescript/commonjs/ui/components/internal/GroupedPillButtons.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/GroupedItem.d.ts +0 -24
- package/lib/typescript/module/ui/components/GroupedItem.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/GroupedSection.d.ts +0 -30
- package/lib/typescript/module/ui/components/GroupedSection.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/Section.d.ts +0 -12
- package/lib/typescript/module/ui/components/Section.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/SectionTitle.d.ts +0 -10
- package/lib/typescript/module/ui/components/SectionTitle.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/SettingRow.d.ts +0 -20
- package/lib/typescript/module/ui/components/SettingRow.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/internal/GroupedPillButtons.d.ts +0 -24
- package/lib/typescript/module/ui/components/internal/GroupedPillButtons.d.ts.map +0 -1
- package/src/ui/components/GroupedItem.tsx +0 -161
- package/src/ui/components/GroupedSection.tsx +0 -60
- package/src/ui/components/Section.tsx +0 -42
- package/src/ui/components/SectionTitle.tsx +0 -27
- package/src/ui/components/SettingRow.tsx +0 -105
- package/src/ui/components/internal/GroupedPillButtons.tsx +0 -253
|
@@ -12,7 +12,8 @@ import type { BaseScreenProps } from '../types/navigation';
|
|
|
12
12
|
import { toast } from '../../lib/sonner';
|
|
13
13
|
import * as Prompt from '@oxyhq/bloom/prompt';
|
|
14
14
|
import { usePromptControl } from '@oxyhq/bloom/prompt';
|
|
15
|
-
import { Header
|
|
15
|
+
import { Header } from '../components';
|
|
16
|
+
import { SettingsListGroup } from '@oxyhq/bloom/settings-list';
|
|
16
17
|
import { useI18n } from '../hooks/useI18n';
|
|
17
18
|
import { useTheme } from '@oxyhq/bloom/theme';
|
|
18
19
|
import { useOxy } from '../context/OxyContext';
|
|
@@ -86,13 +87,13 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
|
|
|
86
87
|
/>
|
|
87
88
|
|
|
88
89
|
<ScrollView style={styles.content}>
|
|
89
|
-
<
|
|
90
|
+
<SettingsListGroup>
|
|
90
91
|
<Text style={styles.description} className="text-muted-foreground">
|
|
91
92
|
{t('accountVerification.description') || 'Request a verified badge for your account. Verified accounts help establish authenticity and credibility.'}
|
|
92
93
|
</Text>
|
|
93
|
-
</
|
|
94
|
+
</SettingsListGroup>
|
|
94
95
|
|
|
95
|
-
<
|
|
96
|
+
<SettingsListGroup title={t('accountVerification.sections.request') || 'VERIFICATION REQUEST'}>
|
|
96
97
|
<View style={styles.inputGroup}>
|
|
97
98
|
<Text style={styles.label} className="text-foreground">
|
|
98
99
|
{t('accountVerification.reasonLabel') || 'Reason for Verification *'}
|
|
@@ -134,9 +135,9 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
|
|
|
134
135
|
editable={!isSubmitting}
|
|
135
136
|
/>
|
|
136
137
|
</View>
|
|
137
|
-
</
|
|
138
|
+
</SettingsListGroup>
|
|
138
139
|
|
|
139
|
-
<
|
|
140
|
+
<SettingsListGroup>
|
|
140
141
|
<TouchableOpacity
|
|
141
142
|
style={styles.submitButton}
|
|
142
143
|
className={isSubmitting ? 'bg-muted-foreground' : 'bg-primary'}
|
|
@@ -151,13 +152,13 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
|
|
|
151
152
|
</Text>
|
|
152
153
|
)}
|
|
153
154
|
</TouchableOpacity>
|
|
154
|
-
</
|
|
155
|
+
</SettingsListGroup>
|
|
155
156
|
|
|
156
|
-
<
|
|
157
|
+
<SettingsListGroup>
|
|
157
158
|
<Text style={styles.note} className="text-muted-foreground">
|
|
158
159
|
{t('accountVerification.note') || 'Note: Verification requests are reviewed manually and may take several days. We will notify you once your request has been reviewed.'}
|
|
159
160
|
</Text>
|
|
160
|
-
</
|
|
161
|
+
</SettingsListGroup>
|
|
161
162
|
</ScrollView>
|
|
162
163
|
<Prompt.Basic
|
|
163
164
|
control={successPrompt}
|
|
@@ -17,7 +17,8 @@ import { normalizeTheme } from '../utils/themeUtils';
|
|
|
17
17
|
import { Ionicons } from '@expo/vector-icons';
|
|
18
18
|
import { toast } from '../../lib/sonner';
|
|
19
19
|
import { packageInfo } from '@oxyhq/core';
|
|
20
|
-
import {
|
|
20
|
+
import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
|
|
21
|
+
import { SettingsIcon } from '../components/SettingsIcon';
|
|
21
22
|
import { useI18n } from '../hooks/useI18n';
|
|
22
23
|
import { useOxy } from '../context/OxyContext';
|
|
23
24
|
|
|
@@ -143,40 +144,20 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
143
144
|
}
|
|
144
145
|
}, [feedbackData, user, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm, setFeedbackState, t]);
|
|
145
146
|
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
id: cat,
|
|
161
|
-
icon: feedbackData.category === cat ? 'check-circle' : 'ellipse-outline',
|
|
162
|
-
iconColor: feedbackData.category === cat ? colors.primary : colors.secondaryText,
|
|
163
|
-
title: cat,
|
|
164
|
-
onPress: () => updateField('category', cat),
|
|
165
|
-
selected: feedbackData.category === cat,
|
|
166
|
-
showChevron: false,
|
|
167
|
-
dense: true,
|
|
168
|
-
})) : []), [feedbackData.type, feedbackData.category, colors.primary, colors.secondaryText, updateField]);
|
|
169
|
-
|
|
170
|
-
const priorityItems = useMemo(() => PRIORITY_LEVELS.map(p => ({
|
|
171
|
-
id: p.id,
|
|
172
|
-
icon: p.icon,
|
|
173
|
-
iconColor: p.color,
|
|
174
|
-
title: p.label,
|
|
175
|
-
onPress: () => updateField('priority', p.id),
|
|
176
|
-
selected: feedbackData.priority === p.id,
|
|
177
|
-
showChevron: false,
|
|
178
|
-
dense: true,
|
|
179
|
-
})), [feedbackData.priority, updateField]);
|
|
147
|
+
const feedbackTypeData = useMemo(() => FEEDBACK_TYPES.map(type => ({
|
|
148
|
+
...type,
|
|
149
|
+
isSelected: feedbackData.type === type.id,
|
|
150
|
+
})), [feedbackData.type]);
|
|
151
|
+
|
|
152
|
+
const categoryData = useMemo(() => (feedbackData.type ? (CATEGORIES[feedbackData.type] || []).map(cat => ({
|
|
153
|
+
name: cat,
|
|
154
|
+
isSelected: feedbackData.category === cat,
|
|
155
|
+
})) : []), [feedbackData.type, feedbackData.category]);
|
|
156
|
+
|
|
157
|
+
const priorityData = useMemo(() => PRIORITY_LEVELS.map(p => ({
|
|
158
|
+
...p,
|
|
159
|
+
isSelected: feedbackData.priority === p.id,
|
|
160
|
+
})), [feedbackData.priority]);
|
|
180
161
|
|
|
181
162
|
const renderTypeStep = () => (
|
|
182
163
|
<Animated.View style={[styles.stepContainer, { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }]}>
|
|
@@ -189,7 +170,18 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
189
170
|
</Text>
|
|
190
171
|
</View>
|
|
191
172
|
<View style={styles.fullBleed}>
|
|
192
|
-
<
|
|
173
|
+
<SettingsListGroup>
|
|
174
|
+
{feedbackTypeData.map(type => (
|
|
175
|
+
<SettingsListItem
|
|
176
|
+
key={type.id}
|
|
177
|
+
icon={<SettingsIcon name={type.icon} color={type.color} />}
|
|
178
|
+
title={type.label}
|
|
179
|
+
description={type.description}
|
|
180
|
+
onPress={() => { updateField('type', type.id); updateField('category', ''); }}
|
|
181
|
+
showChevron={false}
|
|
182
|
+
/>
|
|
183
|
+
))}
|
|
184
|
+
</SettingsListGroup>
|
|
193
185
|
</View>
|
|
194
186
|
|
|
195
187
|
{feedbackData.type && (
|
|
@@ -198,7 +190,17 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
198
190
|
{t('feedback.category.label') || 'Category'}
|
|
199
191
|
</Text>
|
|
200
192
|
<View style={styles.fullBleed}>
|
|
201
|
-
<
|
|
193
|
+
<SettingsListGroup>
|
|
194
|
+
{categoryData.map(cat => (
|
|
195
|
+
<SettingsListItem
|
|
196
|
+
key={cat.name}
|
|
197
|
+
icon={<SettingsIcon name={cat.isSelected ? 'check-circle' : 'ellipse-outline'} color={cat.isSelected ? colors.primary : colors.secondaryText} />}
|
|
198
|
+
title={cat.name}
|
|
199
|
+
onPress={() => updateField('category', cat.name)}
|
|
200
|
+
showChevron={false}
|
|
201
|
+
/>
|
|
202
|
+
))}
|
|
203
|
+
</SettingsListGroup>
|
|
202
204
|
</View>
|
|
203
205
|
</View>
|
|
204
206
|
)}
|
|
@@ -274,7 +276,17 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
274
276
|
{t('feedback.priority.label') || 'Priority Level'}
|
|
275
277
|
</Text>
|
|
276
278
|
<View style={styles.fullBleed}>
|
|
277
|
-
<
|
|
279
|
+
<SettingsListGroup>
|
|
280
|
+
{priorityData.map(p => (
|
|
281
|
+
<SettingsListItem
|
|
282
|
+
key={p.id}
|
|
283
|
+
icon={<SettingsIcon name={p.icon} color={p.color} />}
|
|
284
|
+
title={p.label}
|
|
285
|
+
onPress={() => updateField('priority', p.id)}
|
|
286
|
+
showChevron={false}
|
|
287
|
+
/>
|
|
288
|
+
))}
|
|
289
|
+
</SettingsListGroup>
|
|
278
290
|
</View>
|
|
279
291
|
</View>
|
|
280
292
|
|
|
@@ -37,7 +37,7 @@ import type { FileMetadata } from '@oxyhq/core';
|
|
|
37
37
|
import { useFileStore, useFiles, useUploading as useUploadingStore, useUploadAggregateProgress, useDeleting as useDeletingStore } from '../stores/fileStore';
|
|
38
38
|
import Header from '../components/Header';
|
|
39
39
|
import JustifiedPhotoGrid from '../components/photogrid/JustifiedPhotoGrid';
|
|
40
|
-
import {
|
|
40
|
+
import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
|
|
41
41
|
import { useTheme } from '@oxyhq/bloom/theme';
|
|
42
42
|
import { useOxy } from '../context/OxyContext';
|
|
43
43
|
import { useI18n } from '../hooks/useI18n';
|
|
@@ -1360,8 +1360,8 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1360
1360
|
);
|
|
1361
1361
|
};
|
|
1362
1362
|
|
|
1363
|
-
//
|
|
1364
|
-
// biome-ignore lint/suspicious/noExplicitAny:
|
|
1363
|
+
// SettingsListItem-based file items (for 'all' view)
|
|
1364
|
+
// biome-ignore lint/suspicious/noExplicitAny: file items have dynamic props
|
|
1365
1365
|
const groupedFileItems: any[] = useMemo(() => {
|
|
1366
1366
|
// filteredFiles is already sorted, so just use it directly
|
|
1367
1367
|
const sortedFiles = filteredFiles;
|
|
@@ -1378,11 +1378,11 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1378
1378
|
const hasPreview = isImage || isPDF || isVideo;
|
|
1379
1379
|
const isSelected = selectedIds.has(file.id);
|
|
1380
1380
|
|
|
1381
|
-
// Create
|
|
1382
|
-
let
|
|
1381
|
+
// Create icon for preview thumbnails (36x36)
|
|
1382
|
+
let fileIcon: React.ReactNode | undefined;
|
|
1383
1383
|
if (hasPreview) {
|
|
1384
1384
|
if (isImage) {
|
|
1385
|
-
|
|
1385
|
+
fileIcon = (
|
|
1386
1386
|
<View style={{ width: 36, height: 36, borderRadius: 18, overflow: 'hidden' }}>
|
|
1387
1387
|
<ExpoImage
|
|
1388
1388
|
source={{ uri: getSafeDownloadUrlCallback(file, 'thumb') }}
|
|
@@ -1398,7 +1398,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1398
1398
|
</View>
|
|
1399
1399
|
);
|
|
1400
1400
|
} else if (isVideo) {
|
|
1401
|
-
|
|
1401
|
+
fileIcon = (
|
|
1402
1402
|
<View style={{ width: 36, height: 36, borderRadius: 18, overflow: 'hidden', backgroundColor: '#000000', position: 'relative' }}>
|
|
1403
1403
|
<ExpoImage
|
|
1404
1404
|
source={{ uri: getSafeDownloadUrlCallback(file, 'thumb') }}
|
|
@@ -1417,7 +1417,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1417
1417
|
</View>
|
|
1418
1418
|
);
|
|
1419
1419
|
} else if (isPDF) {
|
|
1420
|
-
|
|
1420
|
+
fileIcon = (
|
|
1421
1421
|
<View style={{ width: 36, height: 36, borderRadius: 18, alignItems: 'center', justifyContent: 'center', backgroundColor: '#FF6B6B20' }}>
|
|
1422
1422
|
<Ionicons name="document" size={20} color={colors.primary} />
|
|
1423
1423
|
</View>
|
|
@@ -1427,12 +1427,9 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1427
1427
|
|
|
1428
1428
|
return {
|
|
1429
1429
|
id: file.id,
|
|
1430
|
-
|
|
1431
|
-
icon: !hasPreview ? getFileIcon(file.contentType) : undefined,
|
|
1432
|
-
iconColor: colors.primary,
|
|
1430
|
+
icon: fileIcon ?? (!hasPreview ? <Ionicons name={getFileIcon(file.contentType)} size={20} color={colors.primary} /> : undefined),
|
|
1433
1431
|
title: file.filename,
|
|
1434
|
-
|
|
1435
|
-
theme: theme as 'light' | 'dark',
|
|
1432
|
+
description: `${formatFileSize(file.length)} • ${new Date(file.uploadDate).toLocaleDateString()}`,
|
|
1436
1433
|
onPress: () => {
|
|
1437
1434
|
// Support selection in regular mode with long press or if already selecting
|
|
1438
1435
|
if (!selectMode && selectedIds.size > 0) {
|
|
@@ -1442,20 +1439,8 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1442
1439
|
handleFileOpen(file);
|
|
1443
1440
|
}
|
|
1444
1441
|
},
|
|
1445
|
-
onLongPress: !selectMode ? () => {
|
|
1446
|
-
// Enable selection mode on long press
|
|
1447
|
-
if (selectedIds.size === 0) {
|
|
1448
|
-
setSelectedIds(new Set([file.id]));
|
|
1449
|
-
} else {
|
|
1450
|
-
toggleSelect(file);
|
|
1451
|
-
}
|
|
1452
|
-
} : undefined,
|
|
1453
|
-
showChevron: false,
|
|
1454
|
-
dense: true,
|
|
1455
|
-
multiRow: !!file.metadata?.description,
|
|
1456
|
-
selected: (selectMode || selectedIds.size > 0) && isSelected,
|
|
1457
1442
|
// Hide action buttons when selecting (in selectMode or bulk operations mode)
|
|
1458
|
-
|
|
1443
|
+
rightElement: (!selectMode && selectedIds.size === 0) ? (
|
|
1459
1444
|
<View style={fileManagementStyles.groupedActions}>
|
|
1460
1445
|
{(isImage || isVideo || file.contentType.includes('pdf')) && (
|
|
1461
1446
|
<TouchableOpacity
|
|
@@ -1484,11 +1469,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1484
1469
|
</TouchableOpacity>
|
|
1485
1470
|
</View>
|
|
1486
1471
|
) : undefined,
|
|
1487
|
-
customContentBelow: file.metadata?.description ? (
|
|
1488
|
-
<Text style={[fileManagementStyles.groupedDescription, { color: bloomTheme.isDark ? '#AAAAAA' : '#666666' }]} numberOfLines={2}>
|
|
1489
|
-
{file.metadata.description}
|
|
1490
|
-
</Text>
|
|
1491
|
-
) : undefined,
|
|
1492
1472
|
};
|
|
1493
1473
|
});
|
|
1494
1474
|
}, [filteredFiles, theme, deleting, handleFileDownload, confirmFileDelete, handleFileOpen, getSafeDownloadUrlCallback, selectMode, selectedIds]);
|
|
@@ -1836,7 +1816,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1836
1816
|
);
|
|
1837
1817
|
};
|
|
1838
1818
|
|
|
1839
|
-
// Skeleton file item matching
|
|
1819
|
+
// Skeleton file item matching SettingsListItem structure
|
|
1840
1820
|
const SkeletonFileItem = ({ index }: { index: number }) => (
|
|
1841
1821
|
<View
|
|
1842
1822
|
style={[
|
|
@@ -1908,7 +1888,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1908
1888
|
))}
|
|
1909
1889
|
</View>
|
|
1910
1890
|
|
|
1911
|
-
{/* File List Skeleton - Matching
|
|
1891
|
+
{/* File List Skeleton - Matching SettingsListItem */}
|
|
1912
1892
|
<ScrollView
|
|
1913
1893
|
style={fileManagementStyles.scrollView}
|
|
1914
1894
|
contentContainerStyle={fileManagementStyles.scrollContainer}
|
|
@@ -2240,7 +2220,19 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
2240
2220
|
</View>
|
|
2241
2221
|
) : filteredFiles.length === 0 ? renderEmptyState() : (
|
|
2242
2222
|
<>
|
|
2243
|
-
<
|
|
2223
|
+
<SettingsListGroup>
|
|
2224
|
+
{groupedFileItems.map(item => (
|
|
2225
|
+
<SettingsListItem
|
|
2226
|
+
key={item.id}
|
|
2227
|
+
icon={item.icon}
|
|
2228
|
+
title={item.title}
|
|
2229
|
+
description={item.description}
|
|
2230
|
+
onPress={item.onPress}
|
|
2231
|
+
showChevron={false}
|
|
2232
|
+
rightElement={item.rightElement}
|
|
2233
|
+
/>
|
|
2234
|
+
))}
|
|
2235
|
+
</SettingsListGroup>
|
|
2244
2236
|
{paging.loadingMore && (
|
|
2245
2237
|
<View style={fileManagementStyles.loadingMoreBar}>
|
|
2246
2238
|
<ActivityIndicator size="small" color={colors.primary} />
|
|
@@ -2,7 +2,9 @@ import React, { useState, useCallback } from 'react';
|
|
|
2
2
|
import { View, StyleSheet, ScrollView } from 'react-native';
|
|
3
3
|
import type { BaseScreenProps } from '../types/navigation';
|
|
4
4
|
import { toast } from '../../lib/sonner';
|
|
5
|
-
import { Header,
|
|
5
|
+
import { Header, LoadingState, EmptyState } from '../components';
|
|
6
|
+
import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
|
|
7
|
+
import { SettingsIcon } from '../components/SettingsIcon';
|
|
6
8
|
import { useI18n } from '../hooks/useI18n';
|
|
7
9
|
import { useTheme } from '@oxyhq/bloom/theme';
|
|
8
10
|
import { useColorScheme } from '../hooks/useColorScheme';
|
|
@@ -93,17 +95,34 @@ const HistoryViewScreen: React.FC<BaseScreenProps> = ({ onClose, theme, goBack }
|
|
|
93
95
|
<View style={[styles.container, { backgroundColor: bloomTheme.colors.background }]}>
|
|
94
96
|
<Header title={t('history.title') || 'History'} onBack={goBack || onClose} variant="minimal" elevation="subtle" />
|
|
95
97
|
<ScrollView style={styles.content}>
|
|
96
|
-
<
|
|
97
|
-
<
|
|
98
|
-
{
|
|
99
|
-
{
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
<SettingsListGroup title={t('history.actions') || 'Actions'}>
|
|
99
|
+
<SettingsListItem
|
|
100
|
+
icon={<SettingsIcon name="clock-outline" color={themeColors.iconStorage} />}
|
|
101
|
+
title={t('history.deleteLast15Minutes.title') || 'Delete Last 15 Minutes'}
|
|
102
|
+
description={t('history.deleteLast15Minutes.subtitle') || 'Remove recent history entries'}
|
|
103
|
+
onPress={() => deleteLast15Prompt.open()}
|
|
104
|
+
disabled={isDeleting || history.length === 0}
|
|
105
|
+
/>
|
|
106
|
+
<SettingsListItem
|
|
107
|
+
icon={<SettingsIcon name="delete-outline" color={themeColors.iconSharing} />}
|
|
108
|
+
title={t('history.clearAll.title') || 'Clear All History'}
|
|
109
|
+
description={t('history.clearAll.subtitle') || 'Remove all history entries'}
|
|
110
|
+
onPress={() => clearAllPrompt.open()}
|
|
111
|
+
disabled={isDeleting || history.length === 0}
|
|
112
|
+
/>
|
|
113
|
+
</SettingsListGroup>
|
|
114
|
+
<SettingsListGroup title={t('history.recent') || 'Recent History'}>
|
|
103
115
|
{isLoading ? <LoadingState message={t('history.loading') || 'Loading history...'} color={bloomTheme.colors.text} />
|
|
104
116
|
: history.length === 0 ? <EmptyState message={t('history.empty') || 'No history yet'} textColor={bloomTheme.colors.text} />
|
|
105
|
-
:
|
|
106
|
-
|
|
117
|
+
: history.map(item => (
|
|
118
|
+
<SettingsListItem
|
|
119
|
+
key={item.id}
|
|
120
|
+
icon={<SettingsIcon name={item.type === 'search' ? 'magnify' : 'earth'} color={item.type === 'search' ? themeColors.iconSecurity : themeColors.iconPersonalInfo} />}
|
|
121
|
+
title={item.query}
|
|
122
|
+
description={formatTime(item.timestamp)}
|
|
123
|
+
/>
|
|
124
|
+
))}
|
|
125
|
+
</SettingsListGroup>
|
|
107
126
|
</ScrollView>
|
|
108
127
|
<Prompt.Basic control={deleteLast15Prompt} title={t('history.deleteLast15Minutes.title') || 'Delete Last 15 Minutes'} description={t('history.deleteLast15Minutes.confirm') || 'Delete last 15 minutes of history?'} onConfirm={handleDeleteLast15Minutes} confirmButtonCta={t('common.actions.delete') || 'Delete'} confirmButtonColor="negative" />
|
|
109
128
|
<Prompt.Basic control={clearAllPrompt} title={t('history.clearAll.title') || 'Clear All History'} description={t('history.clearAll.confirm') || 'Clear all history? This cannot be undone.'} onConfirm={handleClearAll} confirmButtonCta={t('history.clearAll.title') || 'Clear All'} confirmButtonColor="negative" />
|
|
@@ -12,7 +12,8 @@ import { useTheme } from '@oxyhq/bloom/theme';
|
|
|
12
12
|
import { normalizeTheme } from '../utils/themeUtils';
|
|
13
13
|
import { Ionicons } from '@expo/vector-icons';
|
|
14
14
|
import { toast } from '../../lib/sonner';
|
|
15
|
-
import { Header
|
|
15
|
+
import { Header } from '../components';
|
|
16
|
+
import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
|
|
16
17
|
import { useI18n } from '../hooks/useI18n';
|
|
17
18
|
import { SUPPORTED_LANGUAGES } from '@oxyhq/core';
|
|
18
19
|
import { useOxy } from '../context/OxyContext';
|
|
@@ -98,18 +99,17 @@ const LanguageSelectorScreen: React.FC<LanguageSelectorScreenProps> = ({
|
|
|
98
99
|
return {
|
|
99
100
|
id: language.id,
|
|
100
101
|
title: language.name,
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
description: language.nativeName,
|
|
103
|
+
icon: (
|
|
103
104
|
<View style={[styles.languageFlag, { backgroundColor: `${language.color}15` }]}>
|
|
104
105
|
<Text style={styles.flagEmoji}>{language.flag}</Text>
|
|
105
106
|
</View>
|
|
106
107
|
),
|
|
107
|
-
iconColor: language.color,
|
|
108
|
-
selected: isSelected,
|
|
109
108
|
onPress: () => handleLanguageSelect(language.id),
|
|
110
|
-
|
|
109
|
+
rightElement: isSelected ? (
|
|
111
110
|
<Ionicons name="checkmark-circle" size={24} color={bloomTheme.colors.primary} />
|
|
112
111
|
) : undefined,
|
|
112
|
+
showChevron: false,
|
|
113
113
|
};
|
|
114
114
|
}),
|
|
115
115
|
[currentLanguage, handleLanguageSelect, bloomTheme]
|
|
@@ -150,7 +150,19 @@ const LanguageSelectorScreen: React.FC<LanguageSelectorScreenProps> = ({
|
|
|
150
150
|
<View style={[styles.materialCard, {
|
|
151
151
|
backgroundColor: bloomTheme.colors.card,
|
|
152
152
|
}]}>
|
|
153
|
-
<
|
|
153
|
+
<SettingsListGroup>
|
|
154
|
+
{languageItems.map(item => (
|
|
155
|
+
<SettingsListItem
|
|
156
|
+
key={item.id}
|
|
157
|
+
icon={item.icon}
|
|
158
|
+
title={item.title}
|
|
159
|
+
description={item.description}
|
|
160
|
+
onPress={item.onPress}
|
|
161
|
+
rightElement={item.rightElement}
|
|
162
|
+
showChevron={false}
|
|
163
|
+
/>
|
|
164
|
+
))}
|
|
165
|
+
</SettingsListGroup>
|
|
154
166
|
</View>
|
|
155
167
|
</View>
|
|
156
168
|
</ScrollView>
|
|
@@ -7,7 +7,9 @@ import {
|
|
|
7
7
|
} from 'react-native';
|
|
8
8
|
import type { BaseScreenProps } from '../types/navigation';
|
|
9
9
|
import { toast } from '../../lib/sonner';
|
|
10
|
-
import { Header,
|
|
10
|
+
import { Header, LoadingState } from '../components';
|
|
11
|
+
import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
|
|
12
|
+
import { SettingsIcon } from '../components/SettingsIcon';
|
|
11
13
|
import { useI18n } from '../hooks/useI18n';
|
|
12
14
|
import { useTheme } from '@oxyhq/bloom/theme';
|
|
13
15
|
import { useColorScheme } from '../hooks/useColorScheme';
|
|
@@ -121,69 +123,50 @@ const LegalDocumentsScreen: React.FC<BaseScreenProps> = ({
|
|
|
121
123
|
/>
|
|
122
124
|
|
|
123
125
|
<ScrollView style={styles.content}>
|
|
124
|
-
<
|
|
125
|
-
<
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
iconColor: themeColors.iconPersonalInfo,
|
|
131
|
-
title: t('legal.privacyPolicy.title') || 'Privacy Policy',
|
|
132
|
-
subtitle: t('legal.privacyPolicy.subtitle') || 'How we handle your data',
|
|
133
|
-
onPress: handleOpenPolicy('privacy'),
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
id: 'terms-of-service',
|
|
137
|
-
icon: 'file-document',
|
|
138
|
-
iconColor: themeColors.iconSecurity,
|
|
139
|
-
title: t('legal.termsOfService.title') || 'Terms of Service',
|
|
140
|
-
subtitle: t('legal.termsOfService.subtitle') || 'Terms and conditions of use',
|
|
141
|
-
onPress: handleOpenPolicy('terms'),
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
id: 'community-guidelines',
|
|
145
|
-
icon: 'account-group',
|
|
146
|
-
iconColor: themeColors.iconData,
|
|
147
|
-
title: t('legal.communityGuidelines.title') || 'Community Guidelines',
|
|
148
|
-
subtitle: t('legal.communityGuidelines.subtitle') || 'Rules and expectations for our community',
|
|
149
|
-
onPress: handleOpenPolicy('community'),
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
id: 'data-retention',
|
|
153
|
-
icon: 'clock',
|
|
154
|
-
iconColor: themeColors.iconStorage,
|
|
155
|
-
title: t('legal.dataRetention.title') || 'Data Retention Policy',
|
|
156
|
-
subtitle: t('legal.dataRetention.subtitle') || 'How long we keep your data',
|
|
157
|
-
onPress: handleOpenPolicy('dataRetention'),
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
id: 'content-moderation',
|
|
161
|
-
icon: 'eye',
|
|
162
|
-
iconColor: themeColors.iconSharing,
|
|
163
|
-
title: t('legal.contentModeration.title') || 'Content Moderation Policy',
|
|
164
|
-
subtitle: t('legal.contentModeration.subtitle') || 'How we moderate content',
|
|
165
|
-
onPress: handleOpenPolicy('contentModeration'),
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
id: 'child-safety',
|
|
169
|
-
icon: 'heart',
|
|
170
|
-
iconColor: '#FF2D55',
|
|
171
|
-
title: t('legal.childSafety.title') || 'Child Safety Policy',
|
|
172
|
-
subtitle: t('legal.childSafety.subtitle') || 'Protecting minors on our platform',
|
|
173
|
-
onPress: handleOpenPolicy('childSafety'),
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
id: 'cookie-policy',
|
|
177
|
-
icon: 'cookie',
|
|
178
|
-
iconColor: '#8E8E93',
|
|
179
|
-
title: t('legal.cookiePolicy.title') || 'Cookie Policy',
|
|
180
|
-
subtitle: t('legal.cookiePolicy.subtitle') || 'How we use cookies and similar technologies',
|
|
181
|
-
onPress: handleOpenPolicy('cookie'),
|
|
182
|
-
},
|
|
183
|
-
]}
|
|
184
|
-
|
|
126
|
+
<SettingsListGroup title={t('legal.policies') || 'Policies & Guidelines'}>
|
|
127
|
+
<SettingsListItem
|
|
128
|
+
icon={<SettingsIcon name="shield-check" color={themeColors.iconPersonalInfo} />}
|
|
129
|
+
title={t('legal.privacyPolicy.title') || 'Privacy Policy'}
|
|
130
|
+
description={t('legal.privacyPolicy.subtitle') || 'How we handle your data'}
|
|
131
|
+
onPress={handleOpenPolicy('privacy')}
|
|
185
132
|
/>
|
|
186
|
-
|
|
133
|
+
<SettingsListItem
|
|
134
|
+
icon={<SettingsIcon name="file-document" color={themeColors.iconSecurity} />}
|
|
135
|
+
title={t('legal.termsOfService.title') || 'Terms of Service'}
|
|
136
|
+
description={t('legal.termsOfService.subtitle') || 'Terms and conditions of use'}
|
|
137
|
+
onPress={handleOpenPolicy('terms')}
|
|
138
|
+
/>
|
|
139
|
+
<SettingsListItem
|
|
140
|
+
icon={<SettingsIcon name="account-group" color={themeColors.iconData} />}
|
|
141
|
+
title={t('legal.communityGuidelines.title') || 'Community Guidelines'}
|
|
142
|
+
description={t('legal.communityGuidelines.subtitle') || 'Rules and expectations for our community'}
|
|
143
|
+
onPress={handleOpenPolicy('community')}
|
|
144
|
+
/>
|
|
145
|
+
<SettingsListItem
|
|
146
|
+
icon={<SettingsIcon name="clock" color={themeColors.iconStorage} />}
|
|
147
|
+
title={t('legal.dataRetention.title') || 'Data Retention Policy'}
|
|
148
|
+
description={t('legal.dataRetention.subtitle') || 'How long we keep your data'}
|
|
149
|
+
onPress={handleOpenPolicy('dataRetention')}
|
|
150
|
+
/>
|
|
151
|
+
<SettingsListItem
|
|
152
|
+
icon={<SettingsIcon name="eye" color={themeColors.iconSharing} />}
|
|
153
|
+
title={t('legal.contentModeration.title') || 'Content Moderation Policy'}
|
|
154
|
+
description={t('legal.contentModeration.subtitle') || 'How we moderate content'}
|
|
155
|
+
onPress={handleOpenPolicy('contentModeration')}
|
|
156
|
+
/>
|
|
157
|
+
<SettingsListItem
|
|
158
|
+
icon={<SettingsIcon name="heart" color="#FF2D55" />}
|
|
159
|
+
title={t('legal.childSafety.title') || 'Child Safety Policy'}
|
|
160
|
+
description={t('legal.childSafety.subtitle') || 'Protecting minors on our platform'}
|
|
161
|
+
onPress={handleOpenPolicy('childSafety')}
|
|
162
|
+
/>
|
|
163
|
+
<SettingsListItem
|
|
164
|
+
icon={<SettingsIcon name="cookie" color="#8E8E93" />}
|
|
165
|
+
title={t('legal.cookiePolicy.title') || 'Cookie Policy'}
|
|
166
|
+
description={t('legal.cookiePolicy.subtitle') || 'How we use cookies and similar technologies'}
|
|
167
|
+
onPress={handleOpenPolicy('cookie')}
|
|
168
|
+
/>
|
|
169
|
+
</SettingsListGroup>
|
|
187
170
|
</ScrollView>
|
|
188
171
|
</View>
|
|
189
172
|
);
|
|
@@ -11,7 +11,8 @@ import {
|
|
|
11
11
|
import type { BaseScreenProps } from '../types/navigation';
|
|
12
12
|
import { useThemeColors } from '../styles';
|
|
13
13
|
import { normalizeTheme } from '../utils/themeUtils';
|
|
14
|
-
import
|
|
14
|
+
import { Button } from '@oxyhq/bloom/button';
|
|
15
|
+
import { Ionicons } from '@expo/vector-icons';
|
|
15
16
|
import { useI18n } from '../hooks/useI18n';
|
|
16
17
|
import QRCode from 'react-native-qrcode-svg';
|
|
17
18
|
|
|
@@ -184,17 +185,15 @@ const PaymentGatewayScreen: React.FC<PaymentGatewayScreenProps> = (props) => {
|
|
|
184
185
|
return (
|
|
185
186
|
<View style={styles.errorContainer}>
|
|
186
187
|
<Text style={styles.errorText}>{t('payment.errors.invalidAmount')}</Text>
|
|
187
|
-
<
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
colors={colors}
|
|
197
|
-
/>
|
|
188
|
+
<Button
|
|
189
|
+
variant="primary"
|
|
190
|
+
onPress={handleClose}
|
|
191
|
+
size="small"
|
|
192
|
+
icon={<Ionicons name="close" size={16} />}
|
|
193
|
+
iconPosition="right"
|
|
194
|
+
>
|
|
195
|
+
{t('payment.actions.close')}
|
|
196
|
+
</Button>
|
|
198
197
|
</View>
|
|
199
198
|
);
|
|
200
199
|
}
|