@oxyhq/services 6.9.5 → 6.9.6
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/BottomSheet.js +5 -3
- package/lib/commonjs/ui/components/BottomSheet.js.map +1 -1
- package/lib/commonjs/ui/components/FontLoader.js +1 -1
- package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
- package/lib/commonjs/ui/components/Header.js.map +1 -1
- package/lib/commonjs/ui/components/HelperText.js +1 -1
- package/lib/commonjs/ui/components/HelperText.js.map +1 -1
- package/lib/commonjs/ui/components/Icon.js +6 -2
- package/lib/commonjs/ui/components/Icon.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +9 -1
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/QuickActions.js.map +1 -1
- package/lib/commonjs/ui/components/SignInModal.js +5 -4
- package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
- package/lib/commonjs/ui/components/TouchableRipple/Pressable.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -1
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +1 -1
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +26 -20
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +9 -5
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +19 -13
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +9 -5
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +14 -10
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAssets.js +4 -4
- package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAsyncAction.js +2 -2
- package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
- package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
- package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSettingToggle.js +2 -2
- package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +3 -3
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js +2 -2
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +2 -2
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +22 -17
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/OxyAuthScreen.js +2 -2
- package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +6 -2
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/UserLinksScreen.js +11 -3
- package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
- package/lib/commonjs/ui/stores/followStore.js +2 -2
- package/lib/commonjs/ui/stores/followStore.js.map +1 -1
- package/lib/commonjs/ui/utils/errorHandlers.js +2 -2
- package/lib/commonjs/ui/utils/errorHandlers.js.map +1 -1
- package/lib/commonjs/ui/utils/fileManagement.js +8 -3
- package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
- package/lib/commonjs/ui/utils/sessionHelpers.js +3 -2
- package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/commonjs/ui/utils/storageHelpers.js +1 -1
- package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
- package/lib/commonjs/utils/hookUtils.js +4 -0
- package/lib/commonjs/utils/hookUtils.js.map +1 -1
- package/lib/module/ui/components/BottomSheet.js +5 -3
- package/lib/module/ui/components/BottomSheet.js.map +1 -1
- package/lib/module/ui/components/FontLoader.js +1 -1
- package/lib/module/ui/components/FontLoader.js.map +1 -1
- package/lib/module/ui/components/Header.js.map +1 -1
- package/lib/module/ui/components/HelperText.js +1 -1
- package/lib/module/ui/components/HelperText.js.map +1 -1
- package/lib/module/ui/components/Icon.js +6 -2
- package/lib/module/ui/components/Icon.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +9 -1
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/QuickActions.js.map +1 -1
- package/lib/module/ui/components/SignInModal.js +5 -4
- package/lib/module/ui/components/SignInModal.js.map +1 -1
- package/lib/module/ui/components/TouchableRipple/Pressable.js.map +1 -1
- package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -1
- package/lib/module/ui/components/modals/DeleteAccountModal.js +1 -1
- package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentDetailsStep.js +26 -20
- package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentMethodStep.js +9 -5
- package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentReviewStep.js +19 -13
- package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSuccessStep.js +9 -5
- package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSummaryStep.js +14 -10
- package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/module/ui/hooks/useAssets.js +4 -4
- package/lib/module/ui/hooks/useAssets.js.map +1 -1
- package/lib/module/ui/hooks/useAsyncAction.js +2 -2
- package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
- package/lib/module/ui/hooks/useFollow.js.map +1 -1
- package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/module/ui/hooks/useSettingToggle.js +2 -2
- package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +3 -3
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js +2 -2
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js +2 -2
- package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +22 -17
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/module/ui/screens/OxyAuthScreen.js +2 -2
- package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js +6 -2
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/UserLinksScreen.js +11 -3
- package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
- package/lib/module/ui/stores/followStore.js +2 -2
- package/lib/module/ui/stores/followStore.js.map +1 -1
- package/lib/module/ui/utils/errorHandlers.js +2 -2
- package/lib/module/ui/utils/errorHandlers.js.map +1 -1
- package/lib/module/ui/utils/fileManagement.js +8 -3
- package/lib/module/ui/utils/fileManagement.js.map +1 -1
- package/lib/module/ui/utils/sessionHelpers.js +3 -2
- package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/module/ui/utils/storageHelpers.js +1 -1
- package/lib/module/ui/utils/storageHelpers.js.map +1 -1
- package/lib/module/utils/hookUtils.js +4 -0
- package/lib/module/utils/hookUtils.js.map +1 -1
- package/lib/typescript/commonjs/ui/components/BottomSheet.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/Icon.d.ts.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/TextField/Adornment/types.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/TouchableRipple/Pressable.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.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/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/types/navigation.d.ts +2 -0
- package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +1 -1
- package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts +2 -1
- package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/hookUtils.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/BottomSheet.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/Icon.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/TextField/Adornment/types.d.ts +1 -1
- package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/TouchableRipple/Pressable.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts +1 -1
- package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.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/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/types/navigation.d.ts +2 -0
- package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/fileManagement.d.ts +1 -1
- package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/sessionHelpers.d.ts +2 -1
- package/lib/typescript/module/ui/utils/sessionHelpers.d.ts.map +1 -1
- package/lib/typescript/module/utils/hookUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ui/components/BottomSheet.tsx +4 -3
- package/src/ui/components/FontLoader.tsx +1 -1
- package/src/ui/components/Header.tsx +2 -2
- package/src/ui/components/HelperText.tsx +1 -1
- package/src/ui/components/Icon.tsx +2 -0
- package/src/ui/components/OxyProvider.tsx +6 -0
- package/src/ui/components/QuickActions.tsx +1 -1
- package/src/ui/components/SignInModal.tsx +6 -5
- package/src/ui/components/TextField/Adornment/types.tsx +1 -1
- package/src/ui/components/TouchableRipple/Pressable.tsx +1 -0
- package/src/ui/components/fileManagement/AnimatedButton.tsx +2 -2
- package/src/ui/components/modals/DeleteAccountModal.tsx +2 -2
- package/src/ui/components/payment/PaymentDetailsStep.tsx +24 -22
- package/src/ui/components/payment/PaymentMethodStep.tsx +7 -5
- package/src/ui/components/payment/PaymentReviewStep.tsx +15 -13
- package/src/ui/components/payment/PaymentSuccessStep.tsx +7 -5
- package/src/ui/components/payment/PaymentSummaryStep.tsx +12 -10
- package/src/ui/hooks/useAssets.ts +8 -8
- package/src/ui/hooks/useAsyncAction.ts +4 -4
- package/src/ui/hooks/useFollow.ts +1 -1
- package/src/ui/hooks/useProfileEditing.ts +1 -1
- package/src/ui/hooks/useSettingToggle.ts +4 -4
- package/src/ui/screens/AccountOverviewScreen.tsx +6 -6
- package/src/ui/screens/AccountVerificationScreen.tsx +2 -2
- package/src/ui/screens/FeedbackScreen.tsx +3 -3
- package/src/ui/screens/LanguageSelectorScreen.tsx +3 -3
- package/src/ui/screens/LearnMoreUsernamesScreen.tsx +22 -19
- package/src/ui/screens/OxyAuthScreen.tsx +3 -3
- package/src/ui/screens/PaymentGatewayScreen.tsx +4 -2
- package/src/ui/screens/UserLinksScreen.tsx +5 -3
- package/src/ui/screens/WelcomeNewUserScreen.tsx +2 -2
- package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +1 -1
- package/src/ui/screens/karma/KarmaRulesScreen.tsx +1 -1
- package/src/ui/stores/followStore.ts +4 -4
- package/src/ui/types/navigation.ts +2 -0
- package/src/ui/utils/errorHandlers.ts +2 -2
- package/src/ui/utils/fileManagement.ts +13 -8
- package/src/ui/utils/sessionHelpers.ts +3 -2
- package/src/ui/utils/storageHelpers.ts +1 -1
- package/src/utils/hookUtils.ts +4 -2
|
@@ -8,6 +8,7 @@ import { FAIRWalletIcon } from '../icon';
|
|
|
8
8
|
import { createPaymentStyles } from './paymentStyles';
|
|
9
9
|
import { toast } from '../../../lib/sonner';
|
|
10
10
|
import type { CardDetails, PaymentColors, PaymentStepAnimations } from './types';
|
|
11
|
+
import { useI18n } from '../../hooks/useI18n';
|
|
11
12
|
|
|
12
13
|
interface PaymentDetailsStepProps {
|
|
13
14
|
paymentMethod: string;
|
|
@@ -37,11 +38,12 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
|
|
|
37
38
|
QRCodeComponent,
|
|
38
39
|
}) => {
|
|
39
40
|
const styles = useMemo(() => createPaymentStyles(colors), [colors]);
|
|
41
|
+
const { t } = useI18n();
|
|
40
42
|
const { fadeAnim, slideAnim, scaleAnim } = animations;
|
|
41
43
|
|
|
42
44
|
const handleCopyAddress = () => {
|
|
43
45
|
Clipboard.setString(faircoinAddress);
|
|
44
|
-
toast('
|
|
46
|
+
toast(t('payment.details.addressCopied'));
|
|
45
47
|
};
|
|
46
48
|
|
|
47
49
|
const handleOpenFairWallet = () => {
|
|
@@ -68,22 +70,22 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
|
|
|
68
70
|
>
|
|
69
71
|
<View style={styles.section}>
|
|
70
72
|
<Text style={styles.sectionTitle}>
|
|
71
|
-
{paymentMethod === 'card' ? '
|
|
72
|
-
paymentMethod === 'oxy' ? '
|
|
73
|
-
paymentMethod === 'faircoin' ? '
|
|
73
|
+
{paymentMethod === 'card' ? t('payment.details.cardDetails') :
|
|
74
|
+
paymentMethod === 'oxy' ? t('payment.details.oxyPay') :
|
|
75
|
+
paymentMethod === 'faircoin' ? t('payment.details.faircoinPayment') : t('payment.details.paymentDetails')}
|
|
74
76
|
</Text>
|
|
75
77
|
|
|
76
78
|
{paymentMethod === 'card' && (
|
|
77
79
|
<View style={styles.cardPaymentCard}>
|
|
78
80
|
<View style={styles.cardPaymentContent}>
|
|
79
81
|
<Ionicons name="card-outline" size={64} color={colors.primary} style={styles.cardPaymentIcon} />
|
|
80
|
-
<Text style={styles.cardPaymentMainTitle}>
|
|
81
|
-
<Text style={styles.cardPaymentSubtitle}>
|
|
82
|
+
<Text style={styles.cardPaymentMainTitle}>{t('payment.details.creditCard')}</Text>
|
|
83
|
+
<Text style={styles.cardPaymentSubtitle}>{t('payment.details.enterCardSecurely')}</Text>
|
|
82
84
|
|
|
83
85
|
<View style={styles.cardPaymentFields}>
|
|
84
86
|
<View style={styles.cardRowInfo}>
|
|
85
87
|
<Ionicons name="card-outline" size={24} color={colors.primary} style={styles.cardRowIcon} />
|
|
86
|
-
<Text style={styles.cardRowText}>
|
|
88
|
+
<Text style={styles.cardRowText}>{t('payment.details.acceptedCards')}</Text>
|
|
87
89
|
</View>
|
|
88
90
|
<TextField
|
|
89
91
|
value={cardDetails.number}
|
|
@@ -131,7 +133,7 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
|
|
|
131
133
|
</View>
|
|
132
134
|
|
|
133
135
|
<View style={{ height: 18 }} />
|
|
134
|
-
<Text style={styles.cardPaymentWaiting}>
|
|
136
|
+
<Text style={styles.cardPaymentWaiting}>{t('payment.details.readyToProcess')}</Text>
|
|
135
137
|
</View>
|
|
136
138
|
</View>
|
|
137
139
|
)}
|
|
@@ -140,13 +142,13 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
|
|
|
140
142
|
<View style={styles.oxyPayCard}>
|
|
141
143
|
<View style={styles.oxyPayContent}>
|
|
142
144
|
<Ionicons name="wallet-outline" size={64} color={colors.primary} style={styles.oxyPayIcon} />
|
|
143
|
-
<Text style={styles.oxyPayMainTitle}>
|
|
144
|
-
<Text style={styles.oxyPaySubtitle}>
|
|
145
|
+
<Text style={styles.oxyPayMainTitle}>{t('payment.details.oxyPay')}</Text>
|
|
146
|
+
<Text style={styles.oxyPaySubtitle}>{t('payment.details.payWithWallet')}</Text>
|
|
145
147
|
<View style={styles.oxyPayBalanceBox}>
|
|
146
|
-
<Text style={styles.oxyPayBalanceText}>
|
|
148
|
+
<Text style={styles.oxyPayBalanceText}>{t('payment.details.balance', { balance: '⊜ 123.45' })}</Text>
|
|
147
149
|
</View>
|
|
148
150
|
<View style={{ height: 18 }} />
|
|
149
|
-
<Text style={styles.oxyPayWaiting}>
|
|
151
|
+
<Text style={styles.oxyPayWaiting}>{t('payment.details.readyToProcess')}</Text>
|
|
150
152
|
</View>
|
|
151
153
|
</View>
|
|
152
154
|
)}
|
|
@@ -156,10 +158,10 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
|
|
|
156
158
|
<View style={styles.faircoinContent}>
|
|
157
159
|
<FAIRWalletIcon size={64} style={styles.faircoinIcon} />
|
|
158
160
|
<Text style={styles.faircoinMainTitle}>FAIRWallet</Text>
|
|
159
|
-
<Text style={styles.faircoinSubtitle}>
|
|
161
|
+
<Text style={styles.faircoinSubtitle}>{t('payment.details.payWithFairCoin')}</Text>
|
|
160
162
|
{!isMobile && QRCodeComponent ? (
|
|
161
163
|
<>
|
|
162
|
-
<Text style={styles.faircoinScanText}>
|
|
164
|
+
<Text style={styles.faircoinScanText}>{t('payment.details.scanToPay')}</Text>
|
|
163
165
|
<View style={styles.faircoinQRCard}>
|
|
164
166
|
<QRCodeComponent value={faircoinAddress} size={qrSize - 32} />
|
|
165
167
|
<View style={styles.faircoinQRBadge}>
|
|
@@ -169,30 +171,30 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
|
|
|
169
171
|
</>
|
|
170
172
|
) : (
|
|
171
173
|
<>
|
|
172
|
-
<Text style={styles.faircoinTitle}>
|
|
174
|
+
<Text style={styles.faircoinTitle}>{t('payment.details.fairWalletInstructions')}</Text>
|
|
173
175
|
<Text style={styles.faircoinAddress}>{faircoinAddress}</Text>
|
|
174
176
|
<TouchableOpacity
|
|
175
177
|
style={[styles.faircoinButton, { backgroundColor: '#9ffb50', borderRadius: 18, marginTop: 12, width: '90%', flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }]}
|
|
176
178
|
onPress={handleOpenFairWallet}
|
|
177
179
|
accessibilityRole="button"
|
|
178
|
-
accessibilityLabel=
|
|
180
|
+
accessibilityLabel={t('payment.details.openInFairWallet')}
|
|
179
181
|
>
|
|
180
182
|
<FAIRWalletIcon size={20} style={{ marginRight: 8 }} />
|
|
181
|
-
<Text style={[styles.faircoinButtonText, { color: '#1b1f0a', fontWeight: 'bold', fontSize: 16 }]}>
|
|
183
|
+
<Text style={[styles.faircoinButtonText, { color: '#1b1f0a', fontWeight: 'bold', fontSize: 16 }]}>{t('payment.details.openInFairWallet')}</Text>
|
|
182
184
|
</TouchableOpacity>
|
|
183
185
|
<TouchableOpacity
|
|
184
186
|
style={[styles.faircoinButton, { backgroundColor: '#9ffb50', borderRadius: 18, marginTop: 10, width: '90%', flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }]}
|
|
185
187
|
onPress={handleCopyAddress}
|
|
186
188
|
accessibilityRole="button"
|
|
187
|
-
accessibilityLabel=
|
|
189
|
+
accessibilityLabel={t('payment.details.copyAddress')}
|
|
188
190
|
>
|
|
189
191
|
<FAIRWalletIcon size={20} style={{ marginRight: 8 }} />
|
|
190
|
-
<Text style={[styles.faircoinButtonText, { color: '#1b1f0a', fontWeight: 'bold', fontSize: 16 }]}>
|
|
192
|
+
<Text style={[styles.faircoinButtonText, { color: '#1b1f0a', fontWeight: 'bold', fontSize: 16 }]}>{t('payment.details.copyAddress')}</Text>
|
|
191
193
|
</TouchableOpacity>
|
|
192
194
|
</>
|
|
193
195
|
)}
|
|
194
196
|
<View style={{ height: 18 }} />
|
|
195
|
-
<Text style={styles.faircoinWaiting}>
|
|
197
|
+
<Text style={styles.faircoinWaiting}>{t('payment.details.waitingForPayment')}</Text>
|
|
196
198
|
</View>
|
|
197
199
|
</View>
|
|
198
200
|
)}
|
|
@@ -201,13 +203,13 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
|
|
|
201
203
|
<GroupedPillButtons
|
|
202
204
|
buttons={[
|
|
203
205
|
{
|
|
204
|
-
text: '
|
|
206
|
+
text: t('payment.actions.back'),
|
|
205
207
|
onPress: onBack,
|
|
206
208
|
icon: 'arrow-back',
|
|
207
209
|
variant: 'transparent',
|
|
208
210
|
},
|
|
209
211
|
{
|
|
210
|
-
text: '
|
|
212
|
+
text: t('payment.actions.continue'),
|
|
211
213
|
onPress: onNext,
|
|
212
214
|
icon: 'arrow-forward',
|
|
213
215
|
variant: 'primary',
|
|
@@ -6,6 +6,7 @@ import GroupedPillButtons from '../internal/GroupedPillButtons';
|
|
|
6
6
|
import { FAIRWalletIcon } from '../icon';
|
|
7
7
|
import { createPaymentStyles } from './paymentStyles';
|
|
8
8
|
import type { PaymentMethod, PaymentColors, PaymentStepAnimations } from './types';
|
|
9
|
+
import { useI18n } from '../../hooks/useI18n';
|
|
9
10
|
|
|
10
11
|
interface PaymentMethodStepProps {
|
|
11
12
|
availablePaymentMethods: PaymentMethod[];
|
|
@@ -27,6 +28,7 @@ const PaymentMethodStep: React.FC<PaymentMethodStepProps> = ({
|
|
|
27
28
|
onNext,
|
|
28
29
|
}) => {
|
|
29
30
|
const styles = useMemo(() => createPaymentStyles(colors), [colors]);
|
|
31
|
+
const { t } = useI18n();
|
|
30
32
|
const { fadeAnim, slideAnim, scaleAnim } = animations;
|
|
31
33
|
|
|
32
34
|
return (
|
|
@@ -45,7 +47,7 @@ const PaymentMethodStep: React.FC<PaymentMethodStepProps> = ({
|
|
|
45
47
|
accessibilityLabel="Choose payment method step"
|
|
46
48
|
>
|
|
47
49
|
<View style={styles.section}>
|
|
48
|
-
<Text style={styles.sectionTitle}>
|
|
50
|
+
<Text style={styles.sectionTitle}>{t('payment.method.title')}</Text>
|
|
49
51
|
|
|
50
52
|
<GroupedSection
|
|
51
53
|
items={availablePaymentMethods.map(method => ({
|
|
@@ -54,8 +56,8 @@ const PaymentMethodStep: React.FC<PaymentMethodStepProps> = ({
|
|
|
54
56
|
iconColor: method.key === 'card' ? '#007AFF' :
|
|
55
57
|
method.key === 'oxy' ? '#32D74B' :
|
|
56
58
|
method.key === 'faircoin' ? '#9ffb50' : colors.primary,
|
|
57
|
-
title: method.label,
|
|
58
|
-
subtitle: method.description,
|
|
59
|
+
title: t(`payment.methods.${method.key}.label`),
|
|
60
|
+
subtitle: t(`payment.methods.${method.key}.description`),
|
|
59
61
|
onPress: () => onSelectMethod(method.key),
|
|
60
62
|
selected: selectedMethod === method.key,
|
|
61
63
|
showChevron: false,
|
|
@@ -69,13 +71,13 @@ const PaymentMethodStep: React.FC<PaymentMethodStepProps> = ({
|
|
|
69
71
|
<GroupedPillButtons
|
|
70
72
|
buttons={[
|
|
71
73
|
{
|
|
72
|
-
text: '
|
|
74
|
+
text: t('payment.actions.back'),
|
|
73
75
|
onPress: onBack,
|
|
74
76
|
icon: 'arrow-back',
|
|
75
77
|
variant: 'transparent',
|
|
76
78
|
},
|
|
77
79
|
{
|
|
78
|
-
text: '
|
|
80
|
+
text: t('payment.actions.continue'),
|
|
79
81
|
onPress: onNext,
|
|
80
82
|
icon: 'arrow-forward',
|
|
81
83
|
variant: 'primary',
|
|
@@ -6,6 +6,7 @@ import GroupedPillButtons from '../internal/GroupedPillButtons';
|
|
|
6
6
|
import { createPaymentStyles } from './paymentStyles';
|
|
7
7
|
import { PAYMENT_METHODS, getCurrencySymbol } from './constants';
|
|
8
8
|
import type { CardDetails, PaymentColors, PaymentStepAnimations } from './types';
|
|
9
|
+
import { useI18n } from '../../hooks/useI18n';
|
|
9
10
|
|
|
10
11
|
interface PaymentReviewStepProps {
|
|
11
12
|
amount: string | number;
|
|
@@ -31,6 +32,7 @@ const PaymentReviewStep: React.FC<PaymentReviewStepProps> = ({
|
|
|
31
32
|
onPay,
|
|
32
33
|
}) => {
|
|
33
34
|
const styles = useMemo(() => createPaymentStyles(colors), [colors]);
|
|
35
|
+
const { t } = useI18n();
|
|
34
36
|
const currencySymbol = getCurrencySymbol(currency);
|
|
35
37
|
const { fadeAnim, slideAnim, scaleAnim } = animations;
|
|
36
38
|
|
|
@@ -52,7 +54,7 @@ const PaymentReviewStep: React.FC<PaymentReviewStepProps> = ({
|
|
|
52
54
|
accessibilityLabel="Review payment step"
|
|
53
55
|
>
|
|
54
56
|
<View style={styles.section}>
|
|
55
|
-
<Text style={styles.sectionTitle}>
|
|
57
|
+
<Text style={styles.sectionTitle}>{t('payment.review.title')}</Text>
|
|
56
58
|
|
|
57
59
|
<GroupedSection
|
|
58
60
|
items={[
|
|
@@ -60,43 +62,43 @@ const PaymentReviewStep: React.FC<PaymentReviewStepProps> = ({
|
|
|
60
62
|
id: 'secure-payment',
|
|
61
63
|
icon: 'shield-check',
|
|
62
64
|
iconColor: colors.success || '#4BB543',
|
|
63
|
-
title: '
|
|
64
|
-
subtitle: '
|
|
65
|
+
title: t('payment.review.securePayment'),
|
|
66
|
+
subtitle: t('payment.review.securePaymentDesc'),
|
|
65
67
|
},
|
|
66
68
|
{
|
|
67
69
|
id: 'amount',
|
|
68
70
|
icon: 'cash',
|
|
69
71
|
iconColor: colors.primary,
|
|
70
|
-
title: '
|
|
72
|
+
title: t('payment.review.amount'),
|
|
71
73
|
subtitle: `${currencySymbol} ${amount}`,
|
|
72
74
|
},
|
|
73
75
|
{
|
|
74
76
|
id: 'payment-method',
|
|
75
77
|
icon: selectedMethod?.icon as any,
|
|
76
78
|
iconColor: colors.primary,
|
|
77
|
-
title: '
|
|
78
|
-
subtitle: selectedMethod
|
|
79
|
+
title: t('payment.review.paymentMethod'),
|
|
80
|
+
subtitle: selectedMethod ? t(`payment.methods.${selectedMethod.key}.label`) : undefined,
|
|
79
81
|
},
|
|
80
82
|
...(paymentMethod === 'card' ? [{
|
|
81
83
|
id: 'card-details',
|
|
82
84
|
icon: 'card' as const,
|
|
83
85
|
iconColor: colors.primary,
|
|
84
|
-
title: '
|
|
86
|
+
title: t('payment.review.card'),
|
|
85
87
|
subtitle: cardDetails.number.replace(/.(?=.{4})/g, '*'),
|
|
86
88
|
}] : []),
|
|
87
89
|
...(paymentMethod === 'oxy' ? [{
|
|
88
90
|
id: 'oxy-balance',
|
|
89
91
|
icon: 'wallet' as const,
|
|
90
92
|
iconColor: colors.primary,
|
|
91
|
-
title: '
|
|
92
|
-
subtitle: '
|
|
93
|
+
title: t('payment.review.oxyPayAccount'),
|
|
94
|
+
subtitle: t('payment.details.balance', { balance: '⊜ 123.45' }),
|
|
93
95
|
}] : []),
|
|
94
96
|
...(paymentMethod === 'faircoin' ? [{
|
|
95
97
|
id: 'faircoin-wallet',
|
|
96
98
|
icon: 'qr-code' as const,
|
|
97
99
|
iconColor: colors.primary,
|
|
98
|
-
title: '
|
|
99
|
-
subtitle: '
|
|
100
|
+
title: t('payment.review.faircoinWallet'),
|
|
101
|
+
subtitle: t('payment.review.paidViaQR'),
|
|
100
102
|
}] : []),
|
|
101
103
|
]}
|
|
102
104
|
/>
|
|
@@ -105,13 +107,13 @@ const PaymentReviewStep: React.FC<PaymentReviewStepProps> = ({
|
|
|
105
107
|
<GroupedPillButtons
|
|
106
108
|
buttons={[
|
|
107
109
|
{
|
|
108
|
-
text: '
|
|
110
|
+
text: t('payment.actions.back'),
|
|
109
111
|
onPress: onBack,
|
|
110
112
|
icon: 'arrow-back',
|
|
111
113
|
variant: 'transparent',
|
|
112
114
|
},
|
|
113
115
|
{
|
|
114
|
-
text: isPaying ? '
|
|
116
|
+
text: isPaying ? t('payment.review.processing') : t('payment.review.payNow'),
|
|
115
117
|
onPress: onPay,
|
|
116
118
|
icon: 'checkmark',
|
|
117
119
|
variant: 'primary',
|
|
@@ -5,6 +5,7 @@ import { Ionicons } from '@expo/vector-icons';
|
|
|
5
5
|
import GroupedPillButtons from '../internal/GroupedPillButtons';
|
|
6
6
|
import { createPaymentStyles } from './paymentStyles';
|
|
7
7
|
import type { PaymentColors, PaymentStepAnimations } from './types';
|
|
8
|
+
import { useI18n } from '../../hooks/useI18n';
|
|
8
9
|
|
|
9
10
|
interface PaymentSuccessStepProps {
|
|
10
11
|
colors: PaymentColors;
|
|
@@ -18,6 +19,7 @@ const PaymentSuccessStep: React.FC<PaymentSuccessStepProps> = ({
|
|
|
18
19
|
onDone,
|
|
19
20
|
}) => {
|
|
20
21
|
const styles = useMemo(() => createPaymentStyles(colors), [colors]);
|
|
22
|
+
const { t } = useI18n();
|
|
21
23
|
const { fadeAnim, slideAnim, scaleAnim } = animations;
|
|
22
24
|
|
|
23
25
|
return (
|
|
@@ -36,7 +38,7 @@ const PaymentSuccessStep: React.FC<PaymentSuccessStepProps> = ({
|
|
|
36
38
|
accessibilityLabel="Payment complete"
|
|
37
39
|
>
|
|
38
40
|
<View style={styles.section}>
|
|
39
|
-
<Text style={styles.sectionTitle}>
|
|
41
|
+
<Text style={styles.sectionTitle}>{t('payment.success.title')}</Text>
|
|
40
42
|
|
|
41
43
|
<View style={styles.successCard}>
|
|
42
44
|
<View style={styles.successContent}>
|
|
@@ -46,10 +48,10 @@ const PaymentSuccessStep: React.FC<PaymentSuccessStepProps> = ({
|
|
|
46
48
|
color={colors.success || '#4BB543'}
|
|
47
49
|
style={styles.successIcon}
|
|
48
50
|
/>
|
|
49
|
-
<Text style={styles.successMainTitle}>
|
|
50
|
-
<Text style={styles.successSubtitle}>
|
|
51
|
+
<Text style={styles.successMainTitle}>{t('payment.success.heading')}</Text>
|
|
52
|
+
<Text style={styles.successSubtitle}>{t('payment.success.thanks')}</Text>
|
|
51
53
|
<View style={{ height: 18 }} />
|
|
52
|
-
<Text style={styles.successMessage}>
|
|
54
|
+
<Text style={styles.successMessage}>{t('payment.success.processed')}</Text>
|
|
53
55
|
</View>
|
|
54
56
|
</View>
|
|
55
57
|
</View>
|
|
@@ -57,7 +59,7 @@ const PaymentSuccessStep: React.FC<PaymentSuccessStepProps> = ({
|
|
|
57
59
|
<GroupedPillButtons
|
|
58
60
|
buttons={[
|
|
59
61
|
{
|
|
60
|
-
text: '
|
|
62
|
+
text: t('payment.actions.done'),
|
|
61
63
|
onPress: onDone,
|
|
62
64
|
icon: 'checkmark',
|
|
63
65
|
variant: 'primary',
|
|
@@ -7,6 +7,7 @@ import GroupedPillButtons from '../internal/GroupedPillButtons';
|
|
|
7
7
|
import { createPaymentStyles } from './paymentStyles';
|
|
8
8
|
import { getCurrencySymbol, CURRENCY_SYMBOLS } from './constants';
|
|
9
9
|
import type { PaymentItem, PaymentColors, PaymentStepAnimations } from './types';
|
|
10
|
+
import { useI18n } from '../../hooks/useI18n';
|
|
10
11
|
|
|
11
12
|
interface PaymentSummaryStepProps {
|
|
12
13
|
paymentItems: PaymentItem[];
|
|
@@ -40,6 +41,7 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
|
|
|
40
41
|
onNext,
|
|
41
42
|
}) => {
|
|
42
43
|
const styles = useMemo(() => createPaymentStyles(colors), [colors]);
|
|
44
|
+
const { t } = useI18n();
|
|
43
45
|
const currencySymbol = getCurrencySymbol(currency);
|
|
44
46
|
const { fadeAnim, slideAnim, scaleAnim } = animations;
|
|
45
47
|
|
|
@@ -59,7 +61,7 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
|
|
|
59
61
|
accessibilityLabel="Payment summary step"
|
|
60
62
|
>
|
|
61
63
|
<View style={styles.section}>
|
|
62
|
-
<Text style={styles.sectionTitle}>
|
|
64
|
+
<Text style={styles.sectionTitle}>{t('payment.summary.title')}</Text>
|
|
63
65
|
|
|
64
66
|
<View style={styles.summaryCard}>
|
|
65
67
|
<View style={styles.summaryCardContent}>
|
|
@@ -70,10 +72,10 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
|
|
|
70
72
|
style={styles.summaryCardIcon}
|
|
71
73
|
/>
|
|
72
74
|
<Text style={styles.summaryCardMainTitle}>
|
|
73
|
-
{paymentItems.length > 0 ? '
|
|
75
|
+
{paymentItems.length > 0 ? t('payment.summary.orderSummary') : t('payment.summary.payment')}
|
|
74
76
|
</Text>
|
|
75
77
|
<Text style={styles.summaryCardSubtitle}>
|
|
76
|
-
{paymentItems.length > 0 ? '
|
|
78
|
+
{paymentItems.length > 0 ? t('payment.summary.reviewDetails') : t('payment.summary.completePayment')}
|
|
77
79
|
</Text>
|
|
78
80
|
|
|
79
81
|
{paymentItems.length > 0 ? (
|
|
@@ -99,15 +101,15 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
|
|
|
99
101
|
|
|
100
102
|
<View style={styles.summaryCardTotalSection}>
|
|
101
103
|
<View style={styles.summaryCardTotalRow}>
|
|
102
|
-
<Text style={styles.summaryCardTotalLabel}>
|
|
104
|
+
<Text style={styles.summaryCardTotalLabel}>{t('payment.summary.subtotal')}</Text>
|
|
103
105
|
<Text style={styles.summaryCardTotalValue}>{currencySymbol} {amount}</Text>
|
|
104
106
|
</View>
|
|
105
107
|
<View style={styles.summaryCardTotalRow}>
|
|
106
|
-
<Text style={styles.summaryCardTotalLabel}>
|
|
108
|
+
<Text style={styles.summaryCardTotalLabel}>{t('payment.summary.tax')}</Text>
|
|
107
109
|
<Text style={styles.summaryCardTotalValue}>{currencySymbol} 0.00</Text>
|
|
108
110
|
</View>
|
|
109
111
|
<View style={styles.summaryCardTotalRow}>
|
|
110
|
-
<Text style={styles.summaryCardTotalLabel}>
|
|
112
|
+
<Text style={styles.summaryCardTotalLabel}>{t('payment.summary.total')}</Text>
|
|
111
113
|
<Text style={styles.summaryCardTotalValue}>{currencySymbol} {amount}</Text>
|
|
112
114
|
</View>
|
|
113
115
|
</View>
|
|
@@ -115,7 +117,7 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
|
|
|
115
117
|
) : (
|
|
116
118
|
<>
|
|
117
119
|
<View style={styles.summaryCardAmount}>
|
|
118
|
-
<Text style={styles.summaryCardAmountLabel}>
|
|
120
|
+
<Text style={styles.summaryCardAmountLabel}>{t('payment.summary.amountToPay')}</Text>
|
|
119
121
|
<Text style={styles.summaryCardAmountValue}>{currencySymbol} {amount}</Text>
|
|
120
122
|
{description && (
|
|
121
123
|
<Text style={styles.summaryCardAmountDescription}>{description}</Text>
|
|
@@ -126,7 +128,7 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
|
|
|
126
128
|
|
|
127
129
|
<View style={styles.summaryCardTotalSection}>
|
|
128
130
|
<View style={styles.summaryCardTotalRow}>
|
|
129
|
-
<Text style={styles.summaryCardTotalLabel}>
|
|
131
|
+
<Text style={styles.summaryCardTotalLabel}>{t('payment.summary.total')}</Text>
|
|
130
132
|
<Text style={styles.summaryCardTotalValue}>{currencySymbol} {amount}</Text>
|
|
131
133
|
</View>
|
|
132
134
|
</View>
|
|
@@ -139,13 +141,13 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
|
|
|
139
141
|
<GroupedPillButtons
|
|
140
142
|
buttons={[
|
|
141
143
|
{
|
|
142
|
-
text: '
|
|
144
|
+
text: t('payment.actions.close'),
|
|
143
145
|
onPress: onClose,
|
|
144
146
|
icon: 'close',
|
|
145
147
|
variant: 'transparent',
|
|
146
148
|
},
|
|
147
149
|
{
|
|
148
|
-
text: '
|
|
150
|
+
text: t('payment.actions.continue'),
|
|
149
151
|
onPress: onNext,
|
|
150
152
|
icon: 'arrow-forward',
|
|
151
153
|
variant: 'primary',
|
|
@@ -84,8 +84,8 @@ export const useAssets = () => {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
return null;
|
|
87
|
-
} catch (error:
|
|
88
|
-
setUploadError(error.message || 'Upload failed');
|
|
87
|
+
} catch (error: unknown) {
|
|
88
|
+
setUploadError((error instanceof Error ? error.message : null) || 'Upload failed');
|
|
89
89
|
throw error;
|
|
90
90
|
} finally {
|
|
91
91
|
setUploading(false);
|
|
@@ -133,8 +133,8 @@ export const useAssets = () => {
|
|
|
133
133
|
createdAt: new Date().toISOString()
|
|
134
134
|
});
|
|
135
135
|
}
|
|
136
|
-
} catch (error:
|
|
137
|
-
setLinkError(error.message || 'Link failed');
|
|
136
|
+
} catch (error: unknown) {
|
|
137
|
+
setLinkError((error instanceof Error ? error.message : null) || 'Link failed');
|
|
138
138
|
throw error;
|
|
139
139
|
} finally {
|
|
140
140
|
setLinking(false);
|
|
@@ -164,8 +164,8 @@ export const useAssets = () => {
|
|
|
164
164
|
// Update store optimistically
|
|
165
165
|
removeLink(assetId, app, entityType, entityId);
|
|
166
166
|
}
|
|
167
|
-
} catch (error:
|
|
168
|
-
setLinkError(error.message || 'Unlink failed');
|
|
167
|
+
} catch (error: unknown) {
|
|
168
|
+
setLinkError((error instanceof Error ? error.message : null) || 'Unlink failed');
|
|
169
169
|
throw error;
|
|
170
170
|
} finally {
|
|
171
171
|
setLinking(false);
|
|
@@ -213,8 +213,8 @@ export const useAssets = () => {
|
|
|
213
213
|
|
|
214
214
|
await oxyInstance.assetDelete(assetId, force);
|
|
215
215
|
removeAsset(assetId);
|
|
216
|
-
} catch (error:
|
|
217
|
-
setDeleteError(error.message || 'Delete failed');
|
|
216
|
+
} catch (error: unknown) {
|
|
217
|
+
setDeleteError((error instanceof Error ? error.message : null) || 'Delete failed');
|
|
218
218
|
throw error;
|
|
219
219
|
} finally {
|
|
220
220
|
setDeleting(false);
|
|
@@ -75,10 +75,10 @@ export function useAsyncAction<T = void>(
|
|
|
75
75
|
|
|
76
76
|
onSuccess?.(result);
|
|
77
77
|
return result;
|
|
78
|
-
} catch (err:
|
|
78
|
+
} catch (err: unknown) {
|
|
79
79
|
const message = typeof errorMessage === 'function'
|
|
80
80
|
? errorMessage(err)
|
|
81
|
-
: errorMessage || err
|
|
81
|
+
: errorMessage || (err instanceof Error ? err.message : null) || 'An error occurred';
|
|
82
82
|
|
|
83
83
|
toast.error(message);
|
|
84
84
|
setError(err instanceof Error ? err : new Error(message));
|
|
@@ -120,8 +120,8 @@ export async function executeWithToast<T>(
|
|
|
120
120
|
toast.success(successMessage);
|
|
121
121
|
}
|
|
122
122
|
return result;
|
|
123
|
-
} catch (err:
|
|
124
|
-
toast.error(errorMessage || err
|
|
123
|
+
} catch (err: unknown) {
|
|
124
|
+
toast.error(errorMessage || (err instanceof Error ? err.message : null) || 'An error occurred');
|
|
125
125
|
return undefined;
|
|
126
126
|
}
|
|
127
127
|
}
|
|
@@ -61,7 +61,7 @@ export const useFollow = (userId?: string | string[]) => {
|
|
|
61
61
|
|
|
62
62
|
// If either count is not set and we're not already loading counts, trigger a fetch.
|
|
63
63
|
if ((followerCount === null || followingCount === null) && !isLoadingCounts) {
|
|
64
|
-
fetchUserCounts().catch((err:
|
|
64
|
+
fetchUserCounts().catch((err: unknown) => console.warn('useFollow: fetchUserCounts failed', err));
|
|
65
65
|
}
|
|
66
66
|
}, [isSingleUser, userId, followerCount, followingCount, isLoadingCounts, fetchUserCounts]);
|
|
67
67
|
|
|
@@ -72,13 +72,13 @@ export function useSettingToggle(options: UseSettingToggleOptions): UseSettingTo
|
|
|
72
72
|
if (showSuccessToast && successMessage) {
|
|
73
73
|
toast.success(successMessage);
|
|
74
74
|
}
|
|
75
|
-
} catch (err:
|
|
75
|
+
} catch (err: unknown) {
|
|
76
76
|
// Revert on error
|
|
77
77
|
if (revertOnError) {
|
|
78
78
|
setValue(previousValue);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
toast.error(errorMessage || err
|
|
81
|
+
toast.error(errorMessage || (err instanceof Error ? err.message : null) || 'An error occurred');
|
|
82
82
|
} finally {
|
|
83
83
|
setIsSaving(false);
|
|
84
84
|
}
|
|
@@ -122,7 +122,7 @@ export function useSettingToggles<T extends { [K in keyof T]: boolean }>(options
|
|
|
122
122
|
|
|
123
123
|
try {
|
|
124
124
|
await onSave(key, newValue);
|
|
125
|
-
} catch (err:
|
|
125
|
+
} catch (err: unknown) {
|
|
126
126
|
// Revert on error
|
|
127
127
|
if (revertOnError) {
|
|
128
128
|
setValues(prev => ({ ...prev, [key]: previousValue }));
|
|
@@ -131,7 +131,7 @@ export function useSettingToggles<T extends { [K in keyof T]: boolean }>(options
|
|
|
131
131
|
const message = typeof errorMessage === 'function'
|
|
132
132
|
? errorMessage(key)
|
|
133
133
|
: errorMessage;
|
|
134
|
-
toast.error(message || err
|
|
134
|
+
toast.error(message || (err instanceof Error ? err.message : null) || 'An error occurred');
|
|
135
135
|
} finally {
|
|
136
136
|
setSavingKeys(prev => {
|
|
137
137
|
const next = new Set(prev);
|
|
@@ -246,11 +246,11 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
246
246
|
// For React Native, you'd need to use a library like expo-file-system
|
|
247
247
|
toast.success(t('accountOverview.items.downloadData.success') || 'Data downloaded successfully');
|
|
248
248
|
}
|
|
249
|
-
} catch (error:
|
|
249
|
+
} catch (error: unknown) {
|
|
250
250
|
if (__DEV__) {
|
|
251
251
|
console.error('Failed to download data:', error);
|
|
252
252
|
}
|
|
253
|
-
toast.error(error
|
|
253
|
+
toast.error((error instanceof Error ? error.message : null) || t('accountOverview.items.downloadData.error') || 'Failed to download data');
|
|
254
254
|
}
|
|
255
255
|
},
|
|
256
256
|
},
|
|
@@ -276,21 +276,21 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
|
|
|
276
276
|
// For React Native, you'd need to use a library like expo-file-system
|
|
277
277
|
toast.success(t('accountOverview.items.downloadData.success') || 'Data downloaded successfully');
|
|
278
278
|
}
|
|
279
|
-
} catch (error:
|
|
279
|
+
} catch (error: unknown) {
|
|
280
280
|
if (__DEV__) {
|
|
281
281
|
console.error('Failed to download data:', error);
|
|
282
282
|
}
|
|
283
|
-
toast.error(error
|
|
283
|
+
toast.error((error instanceof Error ? error.message : null) || t('accountOverview.items.downloadData.error') || 'Failed to download data');
|
|
284
284
|
}
|
|
285
285
|
},
|
|
286
286
|
},
|
|
287
287
|
]
|
|
288
288
|
);
|
|
289
|
-
} catch (error:
|
|
289
|
+
} catch (error: unknown) {
|
|
290
290
|
if (__DEV__) {
|
|
291
291
|
console.error('Failed to initiate download:', error);
|
|
292
292
|
}
|
|
293
|
-
toast.error(error
|
|
293
|
+
toast.error((error instanceof Error ? error.message : null) || t('accountOverview.items.downloadData.error') || 'Failed to download data');
|
|
294
294
|
}
|
|
295
295
|
}, [oxyServices, user, t]);
|
|
296
296
|
|
|
@@ -70,12 +70,12 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
|
|
|
70
70
|
},
|
|
71
71
|
]
|
|
72
72
|
);
|
|
73
|
-
} catch (error:
|
|
73
|
+
} catch (error: unknown) {
|
|
74
74
|
if (__DEV__) {
|
|
75
75
|
console.error('Failed to submit verification request:', error);
|
|
76
76
|
}
|
|
77
77
|
toast.error(
|
|
78
|
-
error
|
|
78
|
+
(error instanceof Error ? error.message : null) || t('accountVerification.submitError') || 'Failed to submit verification request'
|
|
79
79
|
);
|
|
80
80
|
} finally {
|
|
81
81
|
setIsSubmitting(false);
|
|
@@ -137,9 +137,9 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
137
137
|
setCurrentStep(0);
|
|
138
138
|
}, 3000);
|
|
139
139
|
|
|
140
|
-
} catch (error:
|
|
141
|
-
setFeedbackState({ status: 'error', message: error.message || (t('feedback.toasts.submitFailed') || 'Failed to submit feedback') });
|
|
142
|
-
toast.error(error.message || (t('feedback.toasts.submitFailed') || 'Failed to submit feedback'));
|
|
140
|
+
} catch (error: unknown) {
|
|
141
|
+
setFeedbackState({ status: 'error', message: (error instanceof Error ? error.message : null) || (t('feedback.toasts.submitFailed') || 'Failed to submit feedback') });
|
|
142
|
+
toast.error((error instanceof Error ? error.message : null) || (t('feedback.toasts.submitFailed') || 'Failed to submit feedback'));
|
|
143
143
|
}
|
|
144
144
|
}, [feedbackData, user, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm, setFeedbackState, t]);
|
|
145
145
|
|