@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.
Files changed (229) hide show
  1. package/lib/commonjs/ui/components/BottomSheet.js +5 -3
  2. package/lib/commonjs/ui/components/BottomSheet.js.map +1 -1
  3. package/lib/commonjs/ui/components/FontLoader.js +1 -1
  4. package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
  5. package/lib/commonjs/ui/components/Header.js.map +1 -1
  6. package/lib/commonjs/ui/components/HelperText.js +1 -1
  7. package/lib/commonjs/ui/components/HelperText.js.map +1 -1
  8. package/lib/commonjs/ui/components/Icon.js +6 -2
  9. package/lib/commonjs/ui/components/Icon.js.map +1 -1
  10. package/lib/commonjs/ui/components/OxyProvider.js +9 -1
  11. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  12. package/lib/commonjs/ui/components/QuickActions.js.map +1 -1
  13. package/lib/commonjs/ui/components/SignInModal.js +5 -4
  14. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  15. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js.map +1 -1
  16. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  17. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +1 -1
  18. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  19. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +26 -20
  20. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  21. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +9 -5
  22. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  23. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +19 -13
  24. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  25. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +9 -5
  26. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  27. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +14 -10
  28. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  29. package/lib/commonjs/ui/hooks/useAssets.js +4 -4
  30. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
  31. package/lib/commonjs/ui/hooks/useAsyncAction.js +2 -2
  32. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
  33. package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
  34. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  35. package/lib/commonjs/ui/hooks/useSettingToggle.js +2 -2
  36. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
  37. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +3 -3
  38. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  39. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +1 -1
  40. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/FeedbackScreen.js +2 -2
  42. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +2 -2
  44. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  45. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +22 -17
  46. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/OxyAuthScreen.js +2 -2
  48. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +6 -2
  50. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/UserLinksScreen.js +11 -3
  52. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +1 -1
  54. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  56. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
  58. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  59. package/lib/commonjs/ui/stores/followStore.js +2 -2
  60. package/lib/commonjs/ui/stores/followStore.js.map +1 -1
  61. package/lib/commonjs/ui/utils/errorHandlers.js +2 -2
  62. package/lib/commonjs/ui/utils/errorHandlers.js.map +1 -1
  63. package/lib/commonjs/ui/utils/fileManagement.js +8 -3
  64. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  65. package/lib/commonjs/ui/utils/sessionHelpers.js +3 -2
  66. package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
  67. package/lib/commonjs/ui/utils/storageHelpers.js +1 -1
  68. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
  69. package/lib/commonjs/utils/hookUtils.js +4 -0
  70. package/lib/commonjs/utils/hookUtils.js.map +1 -1
  71. package/lib/module/ui/components/BottomSheet.js +5 -3
  72. package/lib/module/ui/components/BottomSheet.js.map +1 -1
  73. package/lib/module/ui/components/FontLoader.js +1 -1
  74. package/lib/module/ui/components/FontLoader.js.map +1 -1
  75. package/lib/module/ui/components/Header.js.map +1 -1
  76. package/lib/module/ui/components/HelperText.js +1 -1
  77. package/lib/module/ui/components/HelperText.js.map +1 -1
  78. package/lib/module/ui/components/Icon.js +6 -2
  79. package/lib/module/ui/components/Icon.js.map +1 -1
  80. package/lib/module/ui/components/OxyProvider.js +9 -1
  81. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  82. package/lib/module/ui/components/QuickActions.js.map +1 -1
  83. package/lib/module/ui/components/SignInModal.js +5 -4
  84. package/lib/module/ui/components/SignInModal.js.map +1 -1
  85. package/lib/module/ui/components/TouchableRipple/Pressable.js.map +1 -1
  86. package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  87. package/lib/module/ui/components/modals/DeleteAccountModal.js +1 -1
  88. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  89. package/lib/module/ui/components/payment/PaymentDetailsStep.js +26 -20
  90. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  91. package/lib/module/ui/components/payment/PaymentMethodStep.js +9 -5
  92. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  93. package/lib/module/ui/components/payment/PaymentReviewStep.js +19 -13
  94. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  95. package/lib/module/ui/components/payment/PaymentSuccessStep.js +9 -5
  96. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  97. package/lib/module/ui/components/payment/PaymentSummaryStep.js +14 -10
  98. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  99. package/lib/module/ui/hooks/useAssets.js +4 -4
  100. package/lib/module/ui/hooks/useAssets.js.map +1 -1
  101. package/lib/module/ui/hooks/useAsyncAction.js +2 -2
  102. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
  103. package/lib/module/ui/hooks/useFollow.js.map +1 -1
  104. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  105. package/lib/module/ui/hooks/useSettingToggle.js +2 -2
  106. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
  107. package/lib/module/ui/screens/AccountOverviewScreen.js +3 -3
  108. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  109. package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
  110. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  111. package/lib/module/ui/screens/FeedbackScreen.js +2 -2
  112. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  113. package/lib/module/ui/screens/LanguageSelectorScreen.js +2 -2
  114. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  115. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +22 -17
  116. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  117. package/lib/module/ui/screens/OxyAuthScreen.js +2 -2
  118. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  119. package/lib/module/ui/screens/PaymentGatewayScreen.js +6 -2
  120. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  121. package/lib/module/ui/screens/UserLinksScreen.js +11 -3
  122. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  123. package/lib/module/ui/screens/WelcomeNewUserScreen.js +1 -1
  124. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  125. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  126. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  127. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
  128. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  129. package/lib/module/ui/stores/followStore.js +2 -2
  130. package/lib/module/ui/stores/followStore.js.map +1 -1
  131. package/lib/module/ui/utils/errorHandlers.js +2 -2
  132. package/lib/module/ui/utils/errorHandlers.js.map +1 -1
  133. package/lib/module/ui/utils/fileManagement.js +8 -3
  134. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  135. package/lib/module/ui/utils/sessionHelpers.js +3 -2
  136. package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
  137. package/lib/module/ui/utils/storageHelpers.js +1 -1
  138. package/lib/module/ui/utils/storageHelpers.js.map +1 -1
  139. package/lib/module/utils/hookUtils.js +4 -0
  140. package/lib/module/utils/hookUtils.js.map +1 -1
  141. package/lib/typescript/commonjs/ui/components/BottomSheet.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/ui/components/Icon.d.ts.map +1 -1
  143. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  144. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  145. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts +1 -1
  146. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/ui/components/TouchableRipple/Pressable.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts +1 -1
  149. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  156. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  157. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  158. package/lib/typescript/commonjs/ui/types/navigation.d.ts +2 -0
  159. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  160. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +1 -1
  161. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  162. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts +2 -1
  163. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/utils/hookUtils.d.ts.map +1 -1
  165. package/lib/typescript/module/ui/components/BottomSheet.d.ts.map +1 -1
  166. package/lib/typescript/module/ui/components/Icon.d.ts.map +1 -1
  167. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  168. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  169. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts +1 -1
  170. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts.map +1 -1
  171. package/lib/typescript/module/ui/components/TouchableRipple/Pressable.d.ts.map +1 -1
  172. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts +1 -1
  173. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -1
  174. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  175. package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  176. package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  177. package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  178. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  179. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  180. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  181. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  182. package/lib/typescript/module/ui/types/navigation.d.ts +2 -0
  183. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  184. package/lib/typescript/module/ui/utils/fileManagement.d.ts +1 -1
  185. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  186. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts +2 -1
  187. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts.map +1 -1
  188. package/lib/typescript/module/utils/hookUtils.d.ts.map +1 -1
  189. package/package.json +1 -1
  190. package/src/ui/components/BottomSheet.tsx +4 -3
  191. package/src/ui/components/FontLoader.tsx +1 -1
  192. package/src/ui/components/Header.tsx +2 -2
  193. package/src/ui/components/HelperText.tsx +1 -1
  194. package/src/ui/components/Icon.tsx +2 -0
  195. package/src/ui/components/OxyProvider.tsx +6 -0
  196. package/src/ui/components/QuickActions.tsx +1 -1
  197. package/src/ui/components/SignInModal.tsx +6 -5
  198. package/src/ui/components/TextField/Adornment/types.tsx +1 -1
  199. package/src/ui/components/TouchableRipple/Pressable.tsx +1 -0
  200. package/src/ui/components/fileManagement/AnimatedButton.tsx +2 -2
  201. package/src/ui/components/modals/DeleteAccountModal.tsx +2 -2
  202. package/src/ui/components/payment/PaymentDetailsStep.tsx +24 -22
  203. package/src/ui/components/payment/PaymentMethodStep.tsx +7 -5
  204. package/src/ui/components/payment/PaymentReviewStep.tsx +15 -13
  205. package/src/ui/components/payment/PaymentSuccessStep.tsx +7 -5
  206. package/src/ui/components/payment/PaymentSummaryStep.tsx +12 -10
  207. package/src/ui/hooks/useAssets.ts +8 -8
  208. package/src/ui/hooks/useAsyncAction.ts +4 -4
  209. package/src/ui/hooks/useFollow.ts +1 -1
  210. package/src/ui/hooks/useProfileEditing.ts +1 -1
  211. package/src/ui/hooks/useSettingToggle.ts +4 -4
  212. package/src/ui/screens/AccountOverviewScreen.tsx +6 -6
  213. package/src/ui/screens/AccountVerificationScreen.tsx +2 -2
  214. package/src/ui/screens/FeedbackScreen.tsx +3 -3
  215. package/src/ui/screens/LanguageSelectorScreen.tsx +3 -3
  216. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +22 -19
  217. package/src/ui/screens/OxyAuthScreen.tsx +3 -3
  218. package/src/ui/screens/PaymentGatewayScreen.tsx +4 -2
  219. package/src/ui/screens/UserLinksScreen.tsx +5 -3
  220. package/src/ui/screens/WelcomeNewUserScreen.tsx +2 -2
  221. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +1 -1
  222. package/src/ui/screens/karma/KarmaRulesScreen.tsx +1 -1
  223. package/src/ui/stores/followStore.ts +4 -4
  224. package/src/ui/types/navigation.ts +2 -0
  225. package/src/ui/utils/errorHandlers.ts +2 -2
  226. package/src/ui/utils/fileManagement.ts +13 -8
  227. package/src/ui/utils/sessionHelpers.ts +3 -2
  228. package/src/ui/utils/storageHelpers.ts +1 -1
  229. 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('Address copied to clipboard!');
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' ? 'Card Details' :
72
- paymentMethod === 'oxy' ? 'Oxy Pay' :
73
- paymentMethod === 'faircoin' ? 'FairCoin Payment' : 'Payment Details'}
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}>Credit Card</Text>
81
- <Text style={styles.cardPaymentSubtitle}>Enter your card details securely</Text>
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}>We accept Visa, Mastercard, and more</Text>
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}>Ready to process payment...</Text>
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}>Oxy Pay</Text>
144
- <Text style={styles.oxyPaySubtitle}>Pay with your in-app wallet</Text>
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}>Balance: ⊜ 123.45</Text>
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}>Ready to process payment...</Text>
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}>Pay with FairCoin</Text>
161
+ <Text style={styles.faircoinSubtitle}>{t('payment.details.payWithFairCoin')}</Text>
160
162
  {!isMobile && QRCodeComponent ? (
161
163
  <>
162
- <Text style={styles.faircoinScanText}>Scan to Pay</Text>
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}>Use the options below to pay with FAIRWallet</Text>
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="Open in FAIRWallet"
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 }]}>Open in FAIRWallet</Text>
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="Copy FairCoin address"
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 }]}>Copy Address</Text>
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}>Waiting for payment...</Text>
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: 'Back',
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: 'Continue',
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}>Choose Payment Method</Text>
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: 'Back',
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: 'Continue',
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}>Review Payment</Text>
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: 'Secure payment',
64
- subtitle: 'Your payment is protected by industry-standard encryption',
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: 'Amount',
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: 'Payment Method',
78
- subtitle: selectedMethod?.label,
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: 'Card',
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: 'Oxy Pay Account',
92
- subtitle: 'Balance: ⊜ 123.45',
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: 'FairCoin Wallet',
99
- subtitle: 'Paid via QR',
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: 'Back',
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 ? 'Processing...' : 'Pay Now',
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}>Payment Complete</Text>
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}>Payment Successful!</Text>
50
- <Text style={styles.successSubtitle}>Thank you for your payment.</Text>
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}>Your transaction has been processed successfully.</Text>
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: 'Done',
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}>Payment Summary</Text>
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 ? 'Order Summary' : 'Payment'}
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 ? 'Review your payment details' : 'Complete your payment'}
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}>Subtotal</Text>
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}>Tax</Text>
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}>Total</Text>
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}>Amount to Pay</Text>
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}>Total</Text>
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: 'Close',
144
+ text: t('payment.actions.close'),
143
145
  onPress: onClose,
144
146
  icon: 'close',
145
147
  variant: 'transparent',
146
148
  },
147
149
  {
148
- text: 'Continue',
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: any) {
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: any) {
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: any) {
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: any) {
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: any) {
78
+ } catch (err: unknown) {
79
79
  const message = typeof errorMessage === 'function'
80
80
  ? errorMessage(err)
81
- : errorMessage || err?.message || 'An error occurred';
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: any) {
124
- toast.error(errorMessage || err?.message || 'An error occurred');
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: any) => console.warn('useFollow: fetchUserCounts failed', err));
64
+ fetchUserCounts().catch((err: unknown) => console.warn('useFollow: fetchUserCounts failed', err));
65
65
  }
66
66
  }, [isSingleUser, userId, followerCount, followingCount, isLoadingCounts, fetchUserCounts]);
67
67
 
@@ -82,7 +82,7 @@ export const useProfileEditing = () => {
82
82
  try {
83
83
  await updateProfileMutation.mutateAsync(updateData);
84
84
  return true;
85
- } catch (error: any) {
85
+ } catch (error: unknown) {
86
86
  // Error toast is handled by the mutation
87
87
  return false;
88
88
  }
@@ -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: any) {
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?.message || 'An error occurred');
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: any) {
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?.message || 'An error occurred');
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: any) {
249
+ } catch (error: unknown) {
250
250
  if (__DEV__) {
251
251
  console.error('Failed to download data:', error);
252
252
  }
253
- toast.error(error?.message || t('accountOverview.items.downloadData.error') || 'Failed to download data');
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: any) {
279
+ } catch (error: unknown) {
280
280
  if (__DEV__) {
281
281
  console.error('Failed to download data:', error);
282
282
  }
283
- toast.error(error?.message || t('accountOverview.items.downloadData.error') || 'Failed to download data');
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: any) {
289
+ } catch (error: unknown) {
290
290
  if (__DEV__) {
291
291
  console.error('Failed to initiate download:', error);
292
292
  }
293
- toast.error(error?.message || t('accountOverview.items.downloadData.error') || 'Failed to download data');
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: any) {
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?.message || t('accountVerification.submitError') || 'Failed to submit verification request'
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: any) {
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