@oxyhq/services 5.17.18 → 5.18.0

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 (238) hide show
  1. package/lib/commonjs/core/mixins/OxyServices.features.js +372 -0
  2. package/lib/commonjs/core/mixins/OxyServices.features.js.map +1 -0
  3. package/lib/commonjs/core/mixins/index.js +3 -2
  4. package/lib/commonjs/core/mixins/index.js.map +1 -1
  5. package/lib/commonjs/ui/components/GroupedItem.js +11 -1
  6. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
  7. package/lib/commonjs/ui/components/SettingRow.js +17 -4
  8. package/lib/commonjs/ui/components/SettingRow.js.map +1 -1
  9. package/lib/commonjs/ui/components/feedback/FormInput.js +72 -0
  10. package/lib/commonjs/ui/components/feedback/FormInput.js.map +1 -0
  11. package/lib/commonjs/ui/components/feedback/ProgressIndicator.js +33 -0
  12. package/lib/commonjs/ui/components/feedback/ProgressIndicator.js.map +1 -0
  13. package/lib/commonjs/ui/components/feedback/constants.js +59 -0
  14. package/lib/commonjs/ui/components/feedback/constants.js.map +1 -0
  15. package/lib/commonjs/ui/components/feedback/feedbackStyles.js +262 -0
  16. package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +1 -0
  17. package/lib/commonjs/ui/components/feedback/index.js +54 -0
  18. package/lib/commonjs/ui/components/feedback/index.js.map +1 -0
  19. package/lib/commonjs/ui/components/feedback/types.js +6 -0
  20. package/lib/commonjs/ui/components/feedback/types.js.map +1 -0
  21. package/lib/commonjs/ui/components/feedback/useFeedbackForm.js +52 -0
  22. package/lib/commonjs/ui/components/feedback/useFeedbackForm.js.map +1 -0
  23. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +282 -0
  24. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -0
  25. package/lib/commonjs/ui/components/modals/index.js +14 -0
  26. package/lib/commonjs/ui/components/modals/index.js.map +1 -0
  27. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +309 -0
  28. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -0
  29. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +79 -0
  30. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -0
  31. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +108 -0
  32. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -0
  33. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +79 -0
  34. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -0
  35. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +176 -0
  36. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -0
  37. package/lib/commonjs/ui/components/payment/constants.js +53 -0
  38. package/lib/commonjs/ui/components/payment/constants.js.map +1 -0
  39. package/lib/commonjs/ui/components/payment/index.js +80 -0
  40. package/lib/commonjs/ui/components/payment/index.js.map +1 -0
  41. package/lib/commonjs/ui/components/payment/paymentStyles.js +409 -0
  42. package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -0
  43. package/lib/commonjs/ui/components/payment/types.js +6 -0
  44. package/lib/commonjs/ui/components/payment/types.js.map +1 -0
  45. package/lib/commonjs/ui/hooks/index.js +26 -0
  46. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  47. package/lib/commonjs/ui/hooks/useAsyncAction.js +95 -0
  48. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -0
  49. package/lib/commonjs/ui/hooks/useSettingToggle.js +126 -0
  50. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -0
  51. package/lib/commonjs/ui/navigation/routes.js +1 -0
  52. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  53. package/lib/commonjs/ui/screens/AccountCenterScreen.js +4 -2
  54. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +33 -30
  56. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/FAQScreen.js +315 -0
  58. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -0
  59. package/lib/commonjs/ui/screens/FeedbackScreen.js +73 -590
  60. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  61. package/lib/commonjs/ui/screens/HelpSupportScreen.js +8 -7
  62. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  63. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +67 -1395
  64. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  65. package/lib/commonjs/ui/screens/ProfileScreen.js +13 -5
  66. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  67. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +16 -10
  68. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  69. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +23 -11
  70. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  71. package/lib/module/core/mixins/OxyServices.features.js +369 -0
  72. package/lib/module/core/mixins/OxyServices.features.js.map +1 -0
  73. package/lib/module/core/mixins/index.js +3 -2
  74. package/lib/module/core/mixins/index.js.map +1 -1
  75. package/lib/module/ui/components/GroupedItem.js +11 -1
  76. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  77. package/lib/module/ui/components/SettingRow.js +17 -4
  78. package/lib/module/ui/components/SettingRow.js.map +1 -1
  79. package/lib/module/ui/components/feedback/FormInput.js +67 -0
  80. package/lib/module/ui/components/feedback/FormInput.js.map +1 -0
  81. package/lib/module/ui/components/feedback/ProgressIndicator.js +28 -0
  82. package/lib/module/ui/components/feedback/ProgressIndicator.js.map +1 -0
  83. package/lib/module/ui/components/feedback/constants.js +55 -0
  84. package/lib/module/ui/components/feedback/constants.js.map +1 -0
  85. package/lib/module/ui/components/feedback/feedbackStyles.js +257 -0
  86. package/lib/module/ui/components/feedback/feedbackStyles.js.map +1 -0
  87. package/lib/module/ui/components/feedback/index.js +8 -0
  88. package/lib/module/ui/components/feedback/index.js.map +1 -0
  89. package/lib/module/ui/components/feedback/types.js +4 -0
  90. package/lib/module/ui/components/feedback/types.js.map +1 -0
  91. package/lib/module/ui/components/feedback/useFeedbackForm.js +47 -0
  92. package/lib/module/ui/components/feedback/useFeedbackForm.js.map +1 -0
  93. package/lib/module/ui/components/modals/DeleteAccountModal.js +276 -0
  94. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -0
  95. package/lib/module/ui/components/modals/index.js +4 -0
  96. package/lib/module/ui/components/modals/index.js.map +1 -0
  97. package/lib/module/ui/components/payment/PaymentDetailsStep.js +303 -0
  98. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -0
  99. package/lib/module/ui/components/payment/PaymentMethodStep.js +73 -0
  100. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -0
  101. package/lib/module/ui/components/payment/PaymentReviewStep.js +102 -0
  102. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -0
  103. package/lib/module/ui/components/payment/PaymentSuccessStep.js +73 -0
  104. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -0
  105. package/lib/module/ui/components/payment/PaymentSummaryStep.js +170 -0
  106. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -0
  107. package/lib/module/ui/components/payment/constants.js +47 -0
  108. package/lib/module/ui/components/payment/constants.js.map +1 -0
  109. package/lib/module/ui/components/payment/index.js +10 -0
  110. package/lib/module/ui/components/payment/index.js.map +1 -0
  111. package/lib/module/ui/components/payment/paymentStyles.js +404 -0
  112. package/lib/module/ui/components/payment/paymentStyles.js.map +1 -0
  113. package/lib/module/ui/components/payment/types.js +4 -0
  114. package/lib/module/ui/components/payment/types.js.map +1 -0
  115. package/lib/module/ui/hooks/index.js +2 -0
  116. package/lib/module/ui/hooks/index.js.map +1 -1
  117. package/lib/module/ui/hooks/useAsyncAction.js +89 -0
  118. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -0
  119. package/lib/module/ui/hooks/useSettingToggle.js +120 -0
  120. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -0
  121. package/lib/module/ui/navigation/routes.js +1 -0
  122. package/lib/module/ui/navigation/routes.js.map +1 -1
  123. package/lib/module/ui/screens/AccountCenterScreen.js +4 -2
  124. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  125. package/lib/module/ui/screens/AccountOverviewScreen.js +33 -30
  126. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  127. package/lib/module/ui/screens/FAQScreen.js +310 -0
  128. package/lib/module/ui/screens/FAQScreen.js.map +1 -0
  129. package/lib/module/ui/screens/FeedbackScreen.js +64 -581
  130. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  131. package/lib/module/ui/screens/HelpSupportScreen.js +8 -7
  132. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  133. package/lib/module/ui/screens/PaymentGatewayScreen.js +67 -1397
  134. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  135. package/lib/module/ui/screens/ProfileScreen.js +13 -5
  136. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  137. package/lib/module/ui/screens/SavesCollectionsScreen.js +16 -10
  138. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  139. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +23 -11
  140. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  141. package/lib/typescript/core/mixins/OxyServices.features.d.ts +229 -0
  142. package/lib/typescript/core/mixins/OxyServices.features.d.ts.map +1 -0
  143. package/lib/typescript/core/mixins/index.d.ts +71 -1
  144. package/lib/typescript/core/mixins/index.d.ts.map +1 -1
  145. package/lib/typescript/ui/components/GroupedItem.d.ts +5 -1
  146. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
  147. package/lib/typescript/ui/components/SettingRow.d.ts +6 -0
  148. package/lib/typescript/ui/components/SettingRow.d.ts.map +1 -1
  149. package/lib/typescript/ui/components/feedback/FormInput.d.ts +20 -0
  150. package/lib/typescript/ui/components/feedback/FormInput.d.ts.map +1 -0
  151. package/lib/typescript/ui/components/feedback/ProgressIndicator.d.ts +11 -0
  152. package/lib/typescript/ui/components/feedback/ProgressIndicator.d.ts.map +1 -0
  153. package/lib/typescript/ui/components/feedback/constants.d.ts +5 -0
  154. package/lib/typescript/ui/components/feedback/constants.d.ts.map +1 -0
  155. package/lib/typescript/ui/components/feedback/feedbackStyles.d.ts +280 -0
  156. package/lib/typescript/ui/components/feedback/feedbackStyles.d.ts.map +1 -0
  157. package/lib/typescript/ui/components/feedback/index.d.ts +7 -0
  158. package/lib/typescript/ui/components/feedback/index.d.ts.map +1 -0
  159. package/lib/typescript/ui/components/feedback/types.d.ts +46 -0
  160. package/lib/typescript/ui/components/feedback/types.d.ts.map +1 -0
  161. package/lib/typescript/ui/components/feedback/useFeedbackForm.d.ts +9 -0
  162. package/lib/typescript/ui/components/feedback/useFeedbackForm.d.ts.map +1 -0
  163. package/lib/typescript/ui/components/modals/DeleteAccountModal.d.ts +19 -0
  164. package/lib/typescript/ui/components/modals/DeleteAccountModal.d.ts.map +1 -0
  165. package/lib/typescript/ui/components/modals/index.d.ts +2 -0
  166. package/lib/typescript/ui/components/modals/index.d.ts.map +1 -0
  167. package/lib/typescript/ui/components/payment/PaymentDetailsStep.d.ts +21 -0
  168. package/lib/typescript/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -0
  169. package/lib/typescript/ui/components/payment/PaymentMethodStep.d.ts +14 -0
  170. package/lib/typescript/ui/components/payment/PaymentMethodStep.d.ts.map +1 -0
  171. package/lib/typescript/ui/components/payment/PaymentReviewStep.d.ts +16 -0
  172. package/lib/typescript/ui/components/payment/PaymentReviewStep.d.ts.map +1 -0
  173. package/lib/typescript/ui/components/payment/PaymentSuccessStep.d.ts +10 -0
  174. package/lib/typescript/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -0
  175. package/lib/typescript/ui/components/payment/PaymentSummaryStep.d.ts +15 -0
  176. package/lib/typescript/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -0
  177. package/lib/typescript/ui/components/payment/constants.d.ts +7 -0
  178. package/lib/typescript/ui/components/payment/constants.d.ts.map +1 -0
  179. package/lib/typescript/ui/components/payment/index.d.ts +9 -0
  180. package/lib/typescript/ui/components/payment/index.d.ts.map +1 -0
  181. package/lib/typescript/ui/components/payment/paymentStyles.d.ts +396 -0
  182. package/lib/typescript/ui/components/payment/paymentStyles.d.ts.map +1 -0
  183. package/lib/typescript/ui/components/payment/types.d.ts +40 -0
  184. package/lib/typescript/ui/components/payment/types.d.ts.map +1 -0
  185. package/lib/typescript/ui/hooks/index.d.ts +2 -0
  186. package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
  187. package/lib/typescript/ui/hooks/useAsyncAction.d.ts +51 -0
  188. package/lib/typescript/ui/hooks/useAsyncAction.d.ts.map +1 -0
  189. package/lib/typescript/ui/hooks/useSettingToggle.d.ts +55 -0
  190. package/lib/typescript/ui/hooks/useSettingToggle.d.ts.map +1 -0
  191. package/lib/typescript/ui/navigation/routes.d.ts +1 -1
  192. package/lib/typescript/ui/navigation/routes.d.ts.map +1 -1
  193. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  194. package/lib/typescript/ui/screens/FAQScreen.d.ts +5 -0
  195. package/lib/typescript/ui/screens/FAQScreen.d.ts.map +1 -0
  196. package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -1
  197. package/lib/typescript/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  198. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts +3 -15
  199. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  200. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  201. package/lib/typescript/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  202. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
  203. package/package.json +1 -1
  204. package/src/core/mixins/OxyServices.features.ts +428 -0
  205. package/src/core/mixins/index.ts +20 -17
  206. package/src/ui/components/GroupedItem.tsx +19 -1
  207. package/src/ui/components/SettingRow.tsx +26 -4
  208. package/src/ui/components/feedback/FormInput.tsx +84 -0
  209. package/src/ui/components/feedback/ProgressIndicator.tsx +35 -0
  210. package/src/ui/components/feedback/constants.ts +22 -0
  211. package/src/ui/components/feedback/feedbackStyles.ts +247 -0
  212. package/src/ui/components/feedback/index.ts +6 -0
  213. package/src/ui/components/feedback/types.ts +52 -0
  214. package/src/ui/components/feedback/useFeedbackForm.ts +44 -0
  215. package/src/ui/components/modals/DeleteAccountModal.tsx +294 -0
  216. package/src/ui/components/modals/index.ts +1 -0
  217. package/src/ui/components/payment/PaymentDetailsStep.tsx +222 -0
  218. package/src/ui/components/payment/PaymentMethodStep.tsx +89 -0
  219. package/src/ui/components/payment/PaymentReviewStep.tsx +126 -0
  220. package/src/ui/components/payment/PaymentSuccessStep.tsx +71 -0
  221. package/src/ui/components/payment/PaymentSummaryStep.tsx +159 -0
  222. package/src/ui/components/payment/constants.ts +39 -0
  223. package/src/ui/components/payment/index.ts +9 -0
  224. package/src/ui/components/payment/paymentStyles.ts +397 -0
  225. package/src/ui/components/payment/types.ts +45 -0
  226. package/src/ui/hooks/index.ts +3 -1
  227. package/src/ui/hooks/useAsyncAction.ts +129 -0
  228. package/src/ui/hooks/useSettingToggle.ts +147 -0
  229. package/src/ui/navigation/routes.ts +2 -0
  230. package/src/ui/screens/AccountCenterScreen.tsx +2 -2
  231. package/src/ui/screens/AccountOverviewScreen.tsx +35 -37
  232. package/src/ui/screens/FAQScreen.tsx +332 -0
  233. package/src/ui/screens/FeedbackScreen.tsx +91 -626
  234. package/src/ui/screens/HelpSupportScreen.tsx +7 -5
  235. package/src/ui/screens/PaymentGatewayScreen.tsx +96 -1275
  236. package/src/ui/screens/ProfileScreen.tsx +11 -6
  237. package/src/ui/screens/SavesCollectionsScreen.tsx +19 -10
  238. package/src/ui/screens/karma/KarmaCenterScreen.tsx +10 -10
@@ -1,119 +1,14 @@
1
1
  "use strict";
2
2
 
3
- import { useState, useRef, useMemo, useCallback } from 'react';
4
- import { View, Text, TouchableOpacity, StyleSheet, Platform, ScrollView, Animated, Linking, Clipboard, useWindowDimensions } from 'react-native';
5
- import { fontFamilies, useThemeColors, createCommonStyles } from '../styles';
3
+ import React, { useState, useRef, useMemo, useCallback } from 'react';
4
+ import { View, Text, ScrollView, Animated, Platform, useWindowDimensions } from 'react-native';
5
+ import { useThemeColors } from '../styles';
6
6
  import { normalizeTheme } from '../utils/themeUtils';
7
7
  import GroupedPillButtons from '../components/internal/GroupedPillButtons';
8
- import TextField from '../components/TextField';
9
- import { Ionicons } from '@expo/vector-icons';
10
- import { FAIRWalletIcon } from '../components/icon';
11
- import { toast } from 'sonner';
12
- import QRCode from 'react-native-qrcode-svg';
13
- import { GroupedSection } from '../components';
14
8
  import { useThemeStyles } from '../hooks/useThemeStyles';
15
-
16
- // Restrict payment methods to Card, Oxy Pay, and FairCoin (QR)
17
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
18
- const PAYMENT_METHODS = [{
19
- key: 'card',
20
- label: 'Credit/Debit Card',
21
- icon: 'card-outline',
22
- description: 'Pay securely with your credit or debit card.'
23
- }, {
24
- key: 'oxy',
25
- label: 'Oxy Pay',
26
- icon: 'wallet-outline',
27
- description: 'Use your Oxy Pay in-app balance.'
28
- }, {
29
- key: 'faircoin',
30
- label: 'FAIRWallet',
31
- icon: 'qr-code-outline',
32
- description: 'Pay with FairCoin by scanning a QR code.'
33
- }];
34
-
35
- // Add PaymentItem type
36
-
37
- // Extend props to accept onPaymentResult, amount, and currency
38
-
39
- // Currency symbol map
40
- const CURRENCY_SYMBOLS = {
41
- FAIR: '⊜',
42
- INR: '₹',
43
- USD: '$',
44
- EUR: '€',
45
- GBP: '£',
46
- JPY: '¥',
47
- CNY: '¥',
48
- AUD: 'A$',
49
- CAD: 'C$'
50
- // Add more as needed
51
- };
52
- const CURRENCY_NAMES = {
53
- FAIR: 'FairCoin',
54
- INR: 'Indian Rupee',
55
- USD: 'US Dollar',
56
- EUR: 'Euro',
57
- GBP: 'British Pound',
58
- JPY: 'Japanese Yen',
59
- CNY: 'Chinese Yuan',
60
- AUD: 'Australian Dollar',
61
- CAD: 'Canadian Dollar'
62
- // Add more as needed
63
- };
64
-
65
- // Helper: icon for item type (Ionicons only)
66
- const getItemTypeIcon = (type, color) => {
67
- switch (type) {
68
- case 'product':
69
- return /*#__PURE__*/_jsx(Ionicons, {
70
- name: "cart-outline",
71
- size: 22,
72
- color: color,
73
- style: {
74
- marginRight: 8
75
- }
76
- });
77
- case 'subscription':
78
- return /*#__PURE__*/_jsx(Ionicons, {
79
- name: "repeat-outline",
80
- size: 22,
81
- color: color,
82
- style: {
83
- marginRight: 8
84
- }
85
- });
86
- case 'service':
87
- return /*#__PURE__*/_jsx(Ionicons, {
88
- name: "construct-outline",
89
- size: 22,
90
- color: color,
91
- style: {
92
- marginRight: 8
93
- }
94
- });
95
- case 'fee':
96
- return /*#__PURE__*/_jsx(Ionicons, {
97
- name: "cash-outline",
98
- size: 22,
99
- color: color,
100
- style: {
101
- marginRight: 8
102
- }
103
- });
104
- default:
105
- return /*#__PURE__*/_jsx(Ionicons, {
106
- name: "pricetag-outline",
107
- size: 22,
108
- color: color,
109
- style: {
110
- marginRight: 8
111
- }
112
- });
113
- }
114
- };
115
-
116
- // Helper to get unique item types (move to top-level, before component)
9
+ import QRCode from 'react-native-qrcode-svg';
10
+ import { PaymentSummaryStep, PaymentMethodStep, PaymentDetailsStep, PaymentReviewStep, PaymentSuccessStep, PAYMENT_METHODS, createPaymentStyles } from '../components/payment';
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
117
12
  const getUniqueItemTypes = items => {
118
13
  const types = items.map(item => item.type);
119
14
  return Array.from(new Set(types));
@@ -128,8 +23,7 @@ const PaymentGatewayScreen = props => {
128
23
  currency = 'FAIR',
129
24
  onClose,
130
25
  paymentItems = [],
131
- // NEW
132
- description = '' // NEW
26
+ description = ''
133
27
  } = props;
134
28
 
135
29
  // DEV ENFORCEMENT: Only allow one type of payment item
@@ -148,9 +42,7 @@ const PaymentGatewayScreen = props => {
148
42
  expiry: '',
149
43
  cvv: ''
150
44
  });
151
- const [upiId, setUpiId] = useState('');
152
45
  const [isPaying, setIsPaying] = useState(false);
153
- const [success, setSuccess] = useState(false);
154
46
 
155
47
  // Animations
156
48
  const fadeAnim = useRef(new Animated.Value(1)).current;
@@ -159,23 +51,8 @@ const PaymentGatewayScreen = props => {
159
51
  const progressAnim = useRef(new Animated.Value(0.2)).current;
160
52
  const normalizedTheme = normalizeTheme(theme);
161
53
  const colors = useThemeColors(normalizedTheme);
162
- const commonStyles = createCommonStyles(normalizedTheme);
163
- const styles = useMemo(() => createStyles(colors, normalizedTheme), [colors, normalizedTheme]);
164
-
165
- // Get symbol and name for currency
166
- const currencySymbol = CURRENCY_SYMBOLS[currency.toUpperCase()] || currency;
167
- const currencyName = CURRENCY_NAMES[currency.toUpperCase()] || currency;
168
-
169
- // Calculate total from items if provided, else use amount
170
- const computedTotal = useMemo(() => {
171
- if (paymentItems && paymentItems.length > 0) {
172
- return paymentItems.reduce((sum, item) => {
173
- const qty = item.quantity ?? 1;
174
- return sum + item.price * qty;
175
- }, 0);
176
- }
177
- return Number(amount) || 0;
178
- }, [paymentItems, amount]);
54
+ const themeStyles = useThemeStyles(normalizedTheme);
55
+ const styles = useMemo(() => createPaymentStyles(colors), [colors]);
179
56
 
180
57
  // Determine if the payment is for a recurring item (subscription)
181
58
  const isRecurring = paymentItems.length > 0 && paymentItems[0].type === 'subscription';
@@ -188,15 +65,6 @@ const PaymentGatewayScreen = props => {
188
65
  return PAYMENT_METHODS;
189
66
  }, [isRecurring]);
190
67
 
191
- // Add after useState declarations
192
- // Remove itemTypeError state, useEffect, and user-facing error in renderSummaryStep
193
-
194
- // Helper to get unique item types
195
- // Remove itemTypeError state, useEffect, and user-facing error in renderSummaryStep
196
-
197
- // Validate item types on paymentItems change
198
- // Remove itemTypeError state, useEffect, and user-facing error in renderSummaryStep
199
-
200
68
  // Animation transitions
201
69
  const animateTransition = useCallback(nextStep => {
202
70
  Animated.timing(scaleAnim, {
@@ -228,7 +96,7 @@ const PaymentGatewayScreen = props => {
228
96
  useNativeDriver: Platform.OS !== 'web'
229
97
  })]).start();
230
98
  });
231
- }, []);
99
+ }, [fadeAnim, slideAnim, scaleAnim]);
232
100
  const nextStep = useCallback(() => {
233
101
  if (currentStep < 4) {
234
102
  Animated.timing(progressAnim, {
@@ -250,17 +118,14 @@ const PaymentGatewayScreen = props => {
250
118
  }
251
119
  }, [currentStep, progressAnim, animateTransition]);
252
120
 
253
- // Dummy pay handler
121
+ // Pay handler - TODO: Replace with actual payment API
254
122
  const handlePay = useCallback(() => {
255
123
  setIsPaying(true);
256
124
  setTimeout(() => {
257
125
  setIsPaying(false);
258
- setSuccess(true);
259
126
  nextStep();
260
127
  }, 1500);
261
128
  }, [nextStep]);
262
-
263
- // Success handler for Done button
264
129
  const handleDone = useCallback(() => {
265
130
  if (onPaymentResult) {
266
131
  onPaymentResult({
@@ -269,8 +134,6 @@ const PaymentGatewayScreen = props => {
269
134
  }
270
135
  navigate?.('AccountOverview');
271
136
  }, [onPaymentResult, navigate]);
272
-
273
- // Handle close/cancel: return failure result if payment is not completed
274
137
  const handleClose = useCallback(() => {
275
138
  if (onPaymentResult) {
276
139
  onPaymentResult({
@@ -285,10 +148,7 @@ const PaymentGatewayScreen = props => {
285
148
  }
286
149
  }, [onPaymentResult, onClose, goBack]);
287
150
 
288
- // Optionally, intercept goBack/onClose if user tries to close the screen
289
- // (You may want to use useEffect to listen for unmount or navigation away)
290
-
291
- // If amount is missing or invalid, show error
151
+ // Validate amount
292
152
  if (!amount || isNaN(Number(amount)) || Number(amount) <= 0) {
293
153
  return /*#__PURE__*/_jsxs(View, {
294
154
  style: styles.errorContainer,
@@ -302,619 +162,82 @@ const PaymentGatewayScreen = props => {
302
162
  icon: 'close',
303
163
  variant: 'primary'
304
164
  }],
305
- colors: useThemeColors(normalizedTheme)
165
+ colors: colors
306
166
  })]
307
167
  });
308
168
  }
309
169
 
310
- // Example FairCoin address (replace with real one)
170
+ // FairCoin address - TODO: Replace with dynamic address from backend
311
171
  const faircoinAddress = 'f1abc1234FAIRCOINADDRESS';
312
172
  const {
313
173
  width: windowWidth
314
174
  } = useWindowDimensions();
315
175
  const isMobile = windowWidth < 600;
316
176
  const qrSize = !isMobile ? Math.min(windowWidth * 0.3, 220) : Math.min(windowWidth * 0.8, 300);
317
- const handleCopyAddress = () => {
318
- Clipboard.setString(faircoinAddress);
319
- toast('Address copied to clipboard!');
320
- };
321
- const handleOpenFairWallet = () => {
322
- const url = `fairwallet://pay?address=${faircoinAddress}`;
323
- Linking.openURL(url);
177
+ const animations = {
178
+ fadeAnim,
179
+ slideAnim,
180
+ scaleAnim
324
181
  };
325
-
326
- // Helper for dynamic styles
327
- const getStepIndicatorStyle = active => [styles.stepIndicator, active ? styles.stepIndicatorActive : styles.stepIndicatorInactive];
328
- const getPaymentMethodButtonStyle = active => [styles.paymentMethodButton, active ? styles.paymentMethodButtonActive : styles.paymentMethodButtonInactive];
329
- const getPaymentMethodIconColor = active => active ? colors.primary : colors.text;
330
-
331
- // Step indicator
332
- const renderStepIndicator = () => {
333
- const totalSteps = 5;
334
- const activeStep = currentStep + 1;
335
- return /*#__PURE__*/_jsx(View, {
336
- style: styles.stepIndicatorContainer,
337
- children: Array.from({
338
- length: totalSteps
339
- }).map((_, idx) => /*#__PURE__*/_jsx(View, {
340
- style: getStepIndicatorStyle(activeStep === idx + 1)
341
- }, idx))
342
- });
343
- };
344
-
345
- // PaymentGatewayHeader component
346
- const stepTitles = ['Complete Your Payment', 'Select Payment Method', 'Enter Payment Details', 'Review & Pay', 'Success'];
347
-
348
- // Step 1: Summary step (new first step, no header/dots here)
349
- const renderSummaryStep = () => /*#__PURE__*/_jsxs(Animated.View, {
350
- style: [styles.stepContainer, {
351
- opacity: fadeAnim,
352
- transform: [{
353
- translateY: slideAnim
354
- }, {
355
- scale: scaleAnim
356
- }]
357
- }],
358
- children: [/*#__PURE__*/_jsxs(View, {
359
- style: styles.section,
360
- children: [/*#__PURE__*/_jsx(Text, {
361
- style: styles.sectionTitle,
362
- children: "Payment Summary"
363
- }), /*#__PURE__*/_jsx(View, {
364
- style: styles.summaryCard,
365
- children: /*#__PURE__*/_jsxs(View, {
366
- style: styles.summaryCardContent,
367
- children: [/*#__PURE__*/_jsx(Ionicons, {
368
- name: "receipt-outline",
369
- size: 64,
370
- color: colors.primary,
371
- style: styles.summaryCardIcon
372
- }), /*#__PURE__*/_jsx(Text, {
373
- style: styles.summaryCardMainTitle,
374
- children: paymentItems && paymentItems.length > 0 ? 'Order Summary' : 'Payment'
375
- }), /*#__PURE__*/_jsx(Text, {
376
- style: styles.summaryCardSubtitle,
377
- children: paymentItems && paymentItems.length > 0 ? 'Review your payment details' : 'Complete your payment'
378
- }), paymentItems && paymentItems.length > 0 ? /*#__PURE__*/_jsxs(_Fragment, {
379
- children: [/*#__PURE__*/_jsx(View, {
380
- style: styles.summaryCardItems,
381
- children: /*#__PURE__*/_jsx(GroupedSection, {
382
- items: paymentItems.map((item, idx) => ({
383
- id: `item-${idx}`,
384
- icon: getItemTypeIcon(item.type, colors.primary).props.name,
385
- iconColor: colors.primary,
386
- title: `${item.type === 'product' && item.quantity ? `${item.quantity} × ` : ''}${item.name}${item.type === 'subscription' && item.period ? ` (${item.period})` : ''}`,
387
- subtitle: item.description || `${item.currency ? CURRENCY_SYMBOLS[item.currency.toUpperCase()] || item.currency : currencySymbol} ${item.price * (item.quantity ?? 1)}`,
388
- customContent: /*#__PURE__*/_jsxs(Text, {
389
- style: styles.summaryItemPrice,
390
- children: [item.currency ? CURRENCY_SYMBOLS[item.currency.toUpperCase()] || item.currency : currencySymbol, " ", item.price * (item.quantity ?? 1)]
391
- })
392
- }))
393
- })
394
- }), /*#__PURE__*/_jsx(View, {
395
- style: styles.summaryCardDivider
396
- }), /*#__PURE__*/_jsxs(View, {
397
- style: styles.summaryCardTotalSection,
398
- children: [/*#__PURE__*/_jsxs(View, {
399
- style: styles.summaryCardTotalRow,
400
- children: [/*#__PURE__*/_jsx(Text, {
401
- style: styles.summaryCardTotalLabel,
402
- children: "Subtotal"
403
- }), /*#__PURE__*/_jsxs(Text, {
404
- style: styles.summaryCardTotalValue,
405
- children: [currencySymbol, " ", amount]
406
- })]
407
- }), /*#__PURE__*/_jsxs(View, {
408
- style: styles.summaryCardTotalRow,
409
- children: [/*#__PURE__*/_jsx(Text, {
410
- style: styles.summaryCardTotalLabel,
411
- children: "Tax"
412
- }), /*#__PURE__*/_jsxs(Text, {
413
- style: styles.summaryCardTotalValue,
414
- children: [currencySymbol, " 0.00"]
415
- })]
416
- }), /*#__PURE__*/_jsxs(View, {
417
- style: styles.summaryCardTotalRow,
418
- children: [/*#__PURE__*/_jsx(Text, {
419
- style: styles.summaryCardTotalLabel,
420
- children: "Total"
421
- }), /*#__PURE__*/_jsxs(Text, {
422
- style: styles.summaryCardTotalValue,
423
- children: [currencySymbol, " ", amount]
424
- })]
425
- })]
426
- })]
427
- }) : /*#__PURE__*/_jsxs(_Fragment, {
428
- children: [/*#__PURE__*/_jsxs(View, {
429
- style: styles.summaryCardAmount,
430
- children: [/*#__PURE__*/_jsx(Text, {
431
- style: styles.summaryCardAmountLabel,
432
- children: "Amount to Pay"
433
- }), /*#__PURE__*/_jsxs(Text, {
434
- style: styles.summaryCardAmountValue,
435
- children: [currencySymbol, " ", amount]
436
- }), description && /*#__PURE__*/_jsx(Text, {
437
- style: styles.summaryCardAmountDescription,
438
- children: description
439
- })]
440
- }), /*#__PURE__*/_jsx(View, {
441
- style: styles.summaryCardDivider
442
- }), /*#__PURE__*/_jsx(View, {
443
- style: styles.summaryCardTotalSection,
444
- children: /*#__PURE__*/_jsxs(View, {
445
- style: styles.summaryCardTotalRow,
446
- children: [/*#__PURE__*/_jsx(Text, {
447
- style: styles.summaryCardTotalLabel,
448
- children: "Total"
449
- }), /*#__PURE__*/_jsxs(Text, {
450
- style: styles.summaryCardTotalValue,
451
- children: [currencySymbol, " ", amount]
452
- })]
453
- })
454
- })]
455
- })]
456
- })
457
- })]
458
- }), /*#__PURE__*/_jsx(GroupedPillButtons, {
459
- buttons: [{
460
- text: 'Close',
461
- onPress: handleClose,
462
- icon: 'close',
463
- variant: 'transparent'
464
- }, {
465
- text: 'Continue',
466
- onPress: nextStep,
467
- icon: 'arrow-forward',
468
- variant: 'primary'
469
- }],
470
- colors: colors
471
- })]
472
- });
473
-
474
- // Step 2: Choose Payment Method (now the second step, no header/dots here)
475
- const renderMethodStep = () => /*#__PURE__*/_jsxs(Animated.View, {
476
- style: [styles.stepContainer, {
477
- opacity: fadeAnim,
478
- transform: [{
479
- translateY: slideAnim
480
- }, {
481
- scale: scaleAnim
482
- }]
483
- }],
484
- children: [/*#__PURE__*/_jsxs(View, {
485
- style: styles.section,
486
- children: [/*#__PURE__*/_jsx(Text, {
487
- style: styles.sectionTitle,
488
- children: "Choose Payment Method"
489
- }), /*#__PURE__*/_jsx(GroupedSection, {
490
- items: availablePaymentMethods.map(method => ({
491
- id: method.key,
492
- icon: method.key === 'faircoin' ? undefined : method.icon,
493
- iconColor: method.key === 'card' ? '#007AFF' : method.key === 'oxy' ? '#32D74B' : method.key === 'faircoin' ? '#9ffb50' : colors.primary,
494
- title: method.label,
495
- subtitle: method.description,
496
- onPress: () => setPaymentMethod(method.key),
497
- selected: paymentMethod === method.key,
498
- showChevron: false,
499
- customIcon: method.key === 'faircoin' ? /*#__PURE__*/_jsx(FAIRWalletIcon, {
500
- size: 20
501
- }) : undefined
502
- }))
503
- })]
504
- }), /*#__PURE__*/_jsx(GroupedPillButtons, {
505
- buttons: [{
506
- text: 'Back',
507
- onPress: prevStep,
508
- icon: 'arrow-back',
509
- variant: 'transparent'
510
- }, {
511
- text: 'Continue',
512
- onPress: nextStep,
513
- icon: 'arrow-forward',
514
- variant: 'primary'
515
- }],
516
- colors: colors
517
- })]
518
- });
519
-
520
- // Step 2: Enter Payment Details
521
- const renderDetailsStep = () => /*#__PURE__*/_jsxs(Animated.View, {
522
- style: [styles.stepContainer, {
523
- opacity: fadeAnim,
524
- transform: [{
525
- translateY: slideAnim
526
- }, {
527
- scale: scaleAnim
528
- }]
529
- }],
530
- children: [/*#__PURE__*/_jsxs(View, {
531
- style: styles.section,
532
- children: [/*#__PURE__*/_jsx(Text, {
533
- style: styles.sectionTitle,
534
- children: paymentMethod === 'card' ? 'Card Details' : paymentMethod === 'oxy' ? 'Oxy Pay' : paymentMethod === 'faircoin' ? 'FairCoin Payment' : 'Payment Details'
535
- }), paymentMethod === 'card' && /*#__PURE__*/_jsx(View, {
536
- style: styles.cardPaymentCard,
537
- children: /*#__PURE__*/_jsxs(View, {
538
- style: styles.cardPaymentContent,
539
- children: [/*#__PURE__*/_jsx(Ionicons, {
540
- name: "card-outline",
541
- size: 64,
542
- color: colors.primary,
543
- style: styles.cardPaymentIcon
544
- }), /*#__PURE__*/_jsx(Text, {
545
- style: styles.cardPaymentMainTitle,
546
- children: "Credit Card"
547
- }), /*#__PURE__*/_jsx(Text, {
548
- style: styles.cardPaymentSubtitle,
549
- children: "Enter your card details securely"
550
- }), /*#__PURE__*/_jsxs(View, {
551
- style: styles.cardPaymentFields,
552
- children: [/*#__PURE__*/_jsxs(View, {
553
- style: styles.cardRowInfo,
554
- children: [/*#__PURE__*/_jsx(Ionicons, {
555
- name: "card-outline",
556
- size: 24,
557
- color: colors.primary,
558
- style: styles.cardRowIcon
559
- }), /*#__PURE__*/_jsx(Text, {
560
- style: styles.cardRowText,
561
- children: "We accept Visa, Mastercard, and more"
562
- })]
563
- }), /*#__PURE__*/_jsx(TextField, {
564
- value: cardDetails.number,
565
- onChangeText: text => {
566
- // Format card number with spaces
567
- const formatted = text.replace(/\s/g, '').replace(/(\d{4})/g, '$1 ').trim();
568
- setCardDetails({
569
- ...cardDetails,
570
- number: formatted
571
- });
572
- },
573
- placeholder: "1234 5678 9012 3456",
574
- keyboardType: "numeric",
575
- maxLength: 19,
576
- style: styles.cardFieldContainer,
577
- left: /*#__PURE__*/_jsx(Ionicons, {
578
- name: "card-outline",
579
- size: 18,
580
- color: colors.primary
581
- })
582
- }), /*#__PURE__*/_jsxs(View, {
583
- style: styles.cardFieldRow,
584
- children: [/*#__PURE__*/_jsx(TextField, {
585
- value: cardDetails.expiry,
586
- onChangeText: text => {
587
- // Format expiry date
588
- const formatted = text.replace(/\D/g, '').replace(/(\d{2})(\d)/, '$1/$2');
589
- setCardDetails({
590
- ...cardDetails,
591
- expiry: formatted
592
- });
593
- },
594
- placeholder: "MM/YY",
595
- maxLength: 5,
596
- style: styles.cardFieldHalfLeft,
597
- left: /*#__PURE__*/_jsx(Ionicons, {
598
- name: "calendar-outline",
599
- size: 16,
600
- color: colors.primary
601
- })
602
- }), /*#__PURE__*/_jsx(TextField, {
603
- value: cardDetails.cvv,
604
- onChangeText: text => {
605
- // Only allow numbers
606
- const formatted = text.replace(/\D/g, '');
607
- setCardDetails({
608
- ...cardDetails,
609
- cvv: formatted
610
- });
611
- },
612
- placeholder: "123",
613
- keyboardType: "numeric",
614
- maxLength: 4,
615
- style: styles.cardFieldHalfRight,
616
- left: /*#__PURE__*/_jsx(Ionicons, {
617
- name: "lock-closed-outline",
618
- size: 16,
619
- color: colors.primary
620
- })
621
- })]
622
- })]
623
- }), /*#__PURE__*/_jsx(View, {
624
- style: {
625
- height: 18
626
- }
627
- }), /*#__PURE__*/_jsx(Text, {
628
- style: styles.cardPaymentWaiting,
629
- children: "Ready to process payment..."
630
- })]
631
- })
632
- }), paymentMethod === 'oxy' && /*#__PURE__*/_jsx(View, {
633
- style: styles.oxyPayCard,
634
- children: /*#__PURE__*/_jsxs(View, {
635
- style: styles.oxyPayContent,
636
- children: [/*#__PURE__*/_jsx(Ionicons, {
637
- name: "wallet-outline",
638
- size: 64,
639
- color: colors.primary,
640
- style: styles.oxyPayIcon
641
- }), /*#__PURE__*/_jsx(Text, {
642
- style: styles.oxyPayMainTitle,
643
- children: "Oxy Pay"
644
- }), /*#__PURE__*/_jsx(Text, {
645
- style: styles.oxyPaySubtitle,
646
- children: "Pay with your in-app wallet"
647
- }), /*#__PURE__*/_jsx(View, {
648
- style: styles.oxyPayBalanceBox,
649
- children: /*#__PURE__*/_jsx(Text, {
650
- style: styles.oxyPayBalanceText,
651
- children: "Balance: \u229C 123.45"
652
- })
653
- }), /*#__PURE__*/_jsx(View, {
654
- style: {
655
- height: 18
656
- }
657
- }), /*#__PURE__*/_jsx(Text, {
658
- style: styles.oxyPayWaiting,
659
- children: "Ready to process payment..."
660
- })]
661
- })
662
- }), paymentMethod === 'faircoin' && /*#__PURE__*/_jsx(View, {
663
- style: styles.faircoinCard,
664
- children: /*#__PURE__*/_jsxs(View, {
665
- style: styles.faircoinContent,
666
- children: [/*#__PURE__*/_jsx(FAIRWalletIcon, {
667
- size: 64,
668
- style: styles.faircoinIcon
669
- }), /*#__PURE__*/_jsx(Text, {
670
- style: styles.faircoinMainTitle,
671
- children: "FAIRWallet"
672
- }), /*#__PURE__*/_jsx(Text, {
673
- style: styles.faircoinSubtitle,
674
- children: "Pay with FairCoin"
675
- }), !isMobile ? /*#__PURE__*/_jsxs(_Fragment, {
676
- children: [/*#__PURE__*/_jsx(Text, {
677
- style: styles.faircoinScanText,
678
- children: "Scan to Pay"
679
- }), /*#__PURE__*/_jsxs(View, {
680
- style: styles.faircoinQRCard,
681
- children: [/*#__PURE__*/_jsx(QRCode, {
682
- value: faircoinAddress,
683
- size: qrSize - 32
684
- }), /*#__PURE__*/_jsx(View, {
685
- style: styles.faircoinQRBadge,
686
- children: /*#__PURE__*/_jsx(FAIRWalletIcon, {
687
- size: 28
688
- })
689
- })]
690
- })]
691
- }) : /*#__PURE__*/_jsxs(_Fragment, {
692
- children: [/*#__PURE__*/_jsx(Text, {
693
- style: styles.faircoinTitle,
694
- children: "Use the options below to pay with FAIRWallet"
695
- }), /*#__PURE__*/_jsx(Text, {
696
- style: styles.faircoinAddress,
697
- children: faircoinAddress
698
- }), /*#__PURE__*/_jsxs(TouchableOpacity, {
699
- style: [styles.faircoinButton, {
700
- backgroundColor: '#9ffb50',
701
- borderRadius: 18,
702
- marginTop: 12,
703
- width: '90%',
704
- flexDirection: 'row',
705
- alignItems: 'center',
706
- justifyContent: 'center'
707
- }],
708
- onPress: handleOpenFairWallet,
709
- children: [/*#__PURE__*/_jsx(FAIRWalletIcon, {
710
- size: 20,
711
- style: {
712
- marginRight: 8
713
- }
714
- }), /*#__PURE__*/_jsx(Text, {
715
- style: [styles.faircoinButtonText, {
716
- color: '#1b1f0a',
717
- fontWeight: 'bold',
718
- fontSize: 16
719
- }],
720
- children: "Open in FAIRWallet"
721
- })]
722
- }), /*#__PURE__*/_jsxs(TouchableOpacity, {
723
- style: [styles.faircoinButton, {
724
- backgroundColor: '#9ffb50',
725
- borderRadius: 18,
726
- marginTop: 10,
727
- width: '90%',
728
- flexDirection: 'row',
729
- alignItems: 'center',
730
- justifyContent: 'center'
731
- }],
732
- onPress: handleCopyAddress,
733
- children: [/*#__PURE__*/_jsx(FAIRWalletIcon, {
734
- size: 20,
735
- style: {
736
- marginRight: 8
737
- }
738
- }), /*#__PURE__*/_jsx(Text, {
739
- style: [styles.faircoinButtonText, {
740
- color: '#1b1f0a',
741
- fontWeight: 'bold',
742
- fontSize: 16
743
- }],
744
- children: "Copy Address"
745
- })]
746
- })]
747
- }), /*#__PURE__*/_jsx(View, {
748
- style: {
749
- height: 18
750
- }
751
- }), /*#__PURE__*/_jsx(Text, {
752
- style: styles.faircoinWaiting,
753
- children: "Waiting for payment..."
754
- }), /*#__PURE__*/_jsx(Text, {
755
- style: styles.faircoinPlaceholder,
756
- children: "(This is a placeholder. Integrate with a QR code generator for production.)"
757
- })]
758
- })
759
- })]
760
- }), /*#__PURE__*/_jsx(GroupedPillButtons, {
761
- buttons: [{
762
- text: 'Back',
763
- onPress: prevStep,
764
- icon: 'arrow-back',
765
- variant: 'transparent'
766
- }, {
767
- text: 'Continue',
768
- onPress: nextStep,
769
- icon: 'arrow-forward',
770
- variant: 'primary',
771
- disabled: paymentMethod === 'card' && (!cardDetails.number || !cardDetails.expiry || !cardDetails.cvv)
772
- }],
773
- colors: colors
774
- })]
775
- });
776
-
777
- // Step 4: Review & Pay
778
- const renderReviewStep = () => /*#__PURE__*/_jsxs(Animated.View, {
779
- style: [styles.stepContainer, {
780
- opacity: fadeAnim,
781
- transform: [{
782
- translateY: slideAnim
783
- }, {
784
- scale: scaleAnim
785
- }]
786
- }],
787
- children: [/*#__PURE__*/_jsxs(View, {
788
- style: styles.section,
789
- children: [/*#__PURE__*/_jsx(Text, {
790
- style: styles.sectionTitle,
791
- children: "Review Payment"
792
- }), /*#__PURE__*/_jsx(GroupedSection, {
793
- items: [{
794
- id: 'secure-payment',
795
- icon: 'shield-check',
796
- iconColor: colors.success || '#4BB543',
797
- title: 'Secure payment',
798
- subtitle: 'Your payment is protected by industry-standard encryption'
799
- }, {
800
- id: 'amount',
801
- icon: 'cash',
802
- iconColor: colors.primary,
803
- title: 'Amount',
804
- subtitle: `${currencySymbol} ${amount}`
805
- }, {
806
- id: 'payment-method',
807
- icon: PAYMENT_METHODS.find(m => m.key === paymentMethod)?.icon,
808
- iconColor: colors.primary,
809
- title: 'Payment Method',
810
- subtitle: PAYMENT_METHODS.find(m => m.key === paymentMethod)?.label
811
- }, ...(paymentMethod === 'card' ? [{
812
- id: 'card-details',
813
- icon: 'card',
814
- iconColor: colors.primary,
815
- title: 'Card',
816
- subtitle: cardDetails.number.replace(/.(?=.{4})/g, '*')
817
- }] : []), ...(paymentMethod === 'oxy' ? [{
818
- id: 'oxy-balance',
819
- icon: 'wallet',
820
- iconColor: colors.primary,
821
- title: 'Oxy Pay Account',
822
- subtitle: 'Balance: ⊜ 123.45'
823
- }] : []), ...(paymentMethod === 'faircoin' ? [{
824
- id: 'faircoin-wallet',
825
- icon: 'qr-code',
826
- iconColor: colors.primary,
827
- title: 'FairCoin Wallet',
828
- subtitle: 'Paid via QR'
829
- }] : [])]
830
- })]
831
- }), /*#__PURE__*/_jsx(GroupedPillButtons, {
832
- buttons: [{
833
- text: 'Back',
834
- onPress: prevStep,
835
- icon: 'arrow-back',
836
- variant: 'transparent'
837
- }, {
838
- text: isPaying ? 'Processing...' : 'Pay Now',
839
- onPress: handlePay,
840
- icon: 'checkmark',
841
- variant: 'primary',
842
- loading: isPaying
843
- }],
844
- colors: colors
845
- })]
846
- });
847
-
848
- // Step 5: Success
849
- const renderSuccessStep = () => /*#__PURE__*/_jsxs(Animated.View, {
850
- style: [styles.stepContainer, {
851
- opacity: fadeAnim,
852
- transform: [{
853
- translateY: slideAnim
854
- }, {
855
- scale: scaleAnim
856
- }]
857
- }],
858
- children: [/*#__PURE__*/_jsxs(View, {
859
- style: styles.section,
860
- children: [/*#__PURE__*/_jsx(Text, {
861
- style: styles.sectionTitle,
862
- children: "Payment Complete"
863
- }), /*#__PURE__*/_jsx(View, {
864
- style: styles.successCard,
865
- children: /*#__PURE__*/_jsxs(View, {
866
- style: styles.successContent,
867
- children: [/*#__PURE__*/_jsx(Ionicons, {
868
- name: "checkmark-circle",
869
- size: 64,
870
- color: colors.success || '#4BB543',
871
- style: styles.successIcon
872
- }), /*#__PURE__*/_jsx(Text, {
873
- style: styles.successMainTitle,
874
- children: "Payment Successful!"
875
- }), /*#__PURE__*/_jsx(Text, {
876
- style: styles.successSubtitle,
877
- children: "Thank you for your payment."
878
- }), /*#__PURE__*/_jsx(View, {
879
- style: {
880
- height: 18
881
- }
882
- }), /*#__PURE__*/_jsx(Text, {
883
- style: styles.successMessage,
884
- children: "Your transaction has been processed successfully."
885
- })]
886
- })
887
- })]
888
- }), /*#__PURE__*/_jsx(GroupedPillButtons, {
889
- buttons: [{
890
- text: 'Done',
891
- onPress: handleDone,
892
- icon: 'checkmark',
893
- variant: 'primary'
894
- }],
895
- colors: colors
896
- })]
897
- });
898
182
  const renderCurrentStep = () => {
899
183
  switch (currentStep) {
900
184
  case 0:
901
- return renderSummaryStep();
185
+ return /*#__PURE__*/_jsx(PaymentSummaryStep, {
186
+ paymentItems: paymentItems,
187
+ amount: amount,
188
+ currency: currency,
189
+ description: description,
190
+ colors: colors,
191
+ animations: animations,
192
+ onClose: handleClose,
193
+ onNext: nextStep
194
+ });
902
195
  case 1:
903
- return renderMethodStep();
196
+ return /*#__PURE__*/_jsx(PaymentMethodStep, {
197
+ availablePaymentMethods: availablePaymentMethods,
198
+ selectedMethod: paymentMethod,
199
+ onSelectMethod: setPaymentMethod,
200
+ colors: colors,
201
+ animations: animations,
202
+ onBack: prevStep,
203
+ onNext: nextStep
204
+ });
904
205
  case 2:
905
- return renderDetailsStep();
206
+ return /*#__PURE__*/_jsx(PaymentDetailsStep, {
207
+ paymentMethod: paymentMethod,
208
+ cardDetails: cardDetails,
209
+ onCardDetailsChange: setCardDetails,
210
+ colors: colors,
211
+ animations: animations,
212
+ faircoinAddress: faircoinAddress,
213
+ isMobile: isMobile,
214
+ qrSize: qrSize,
215
+ onBack: prevStep,
216
+ onNext: nextStep,
217
+ QRCodeComponent: QRCode
218
+ });
906
219
  case 3:
907
- return renderReviewStep();
220
+ return /*#__PURE__*/_jsx(PaymentReviewStep, {
221
+ amount: amount,
222
+ currency: currency,
223
+ paymentMethod: paymentMethod,
224
+ cardDetails: cardDetails,
225
+ colors: colors,
226
+ animations: animations,
227
+ isPaying: isPaying,
228
+ onBack: prevStep,
229
+ onPay: handlePay
230
+ });
908
231
  case 4:
909
- return renderSuccessStep();
232
+ return /*#__PURE__*/_jsx(PaymentSuccessStep, {
233
+ colors: colors,
234
+ animations: animations,
235
+ onDone: handleDone
236
+ });
910
237
  default:
911
- return renderSummaryStep();
238
+ return null;
912
239
  }
913
240
  };
914
-
915
- // Use centralized theme styles hook for consistency
916
- // primaryColor from hook (#007AFF) is already correct for this screen
917
- const themeStyles = useThemeStyles(normalizedTheme);
918
241
  return /*#__PURE__*/_jsx(View, {
919
242
  style: [styles.container, {
920
243
  backgroundColor: themeStyles.backgroundColor
@@ -926,658 +249,5 @@ const PaymentGatewayScreen = props => {
926
249
  })
927
250
  });
928
251
  };
929
- const createStyles = (colors, theme) => StyleSheet.create({
930
- container: {
931
- flex: 1
932
- },
933
- content: {
934
- flex: 1,
935
- padding: 16
936
- },
937
- stepContainer: {
938
- justifyContent: 'flex-start',
939
- alignItems: 'flex-start',
940
- width: '100%'
941
- },
942
- section: {
943
- marginBottom: 24,
944
- width: '100%'
945
- },
946
- sectionTitle: {
947
- fontSize: 16,
948
- fontWeight: '600',
949
- color: colors.text,
950
- marginBottom: 12,
951
- fontFamily: fontFamilies.phuduSemiBold
952
- },
953
- stepIndicatorContainer: {
954
- flexDirection: 'row',
955
- justifyContent: 'center',
956
- alignItems: 'center',
957
- marginVertical: 16
958
- },
959
- stepIndicator: {
960
- height: 10,
961
- borderRadius: 5,
962
- marginHorizontal: 4
963
- },
964
- stepIndicatorActive: {
965
- width: 28,
966
- backgroundColor: colors.primary
967
- },
968
- stepIndicatorInactive: {
969
- width: 10,
970
- backgroundColor: colors.border
971
- },
972
- logo: {
973
- width: 40,
974
- height: 20,
975
- alignSelf: 'center',
976
- resizeMode: 'contain'
977
- },
978
- headerTitle: {
979
- fontFamily: fontFamilies.phuduBold,
980
- fontSize: 22,
981
- fontWeight: Platform.OS === 'web' ? 'bold' : undefined,
982
- color: colors.text,
983
- letterSpacing: -0.5
984
- },
985
- paymentMethodButton: {
986
- flexDirection: 'row',
987
- alignItems: 'center',
988
- borderRadius: 16,
989
- padding: 14,
990
- marginBottom: 10,
991
- width: '90%',
992
- alignSelf: 'center',
993
- borderWidth: 1
994
- },
995
- paymentMethodButtonActive: {
996
- backgroundColor: colors.primary + '22',
997
- borderColor: colors.primary,
998
- borderWidth: 2
999
- },
1000
- paymentMethodButtonInactive: {
1001
- backgroundColor: 'transparent',
1002
- borderColor: colors.border,
1003
- borderWidth: 1
1004
- },
1005
- paymentMethodLabel: {
1006
- fontFamily: fontFamilies.phudu,
1007
- fontSize: 18,
1008
- color: colors.text,
1009
- fontWeight: '600'
1010
- },
1011
- paymentMethodDescription: {
1012
- fontFamily: fontFamilies.phudu,
1013
- fontSize: 15,
1014
- color: colors.secondaryText,
1015
- marginTop: 8,
1016
- minHeight: 36,
1017
- textAlign: 'center'
1018
- },
1019
- errorContainer: {
1020
- flex: 1,
1021
- justifyContent: 'center',
1022
- alignItems: 'center',
1023
- padding: 32
1024
- },
1025
- errorText: {
1026
- fontSize: 18,
1027
- color: 'red',
1028
- marginBottom: 24
1029
- },
1030
- methodListContainer: {
1031
- width: '100%',
1032
- alignItems: 'center'
1033
- },
1034
- methodIcon: {
1035
- marginRight: 12
1036
- },
1037
- methodCheckIcon: {
1038
- marginLeft: 'auto'
1039
- },
1040
- cardRowInfo: {
1041
- flexDirection: 'row',
1042
- alignItems: 'center',
1043
- marginBottom: 16
1044
- },
1045
- cardRowIcon: {
1046
- marginRight: 8
1047
- },
1048
- cardRowText: {
1049
- fontSize: 15,
1050
- color: colors.secondaryText
1051
- },
1052
- cardFieldContainer: {
1053
- marginBottom: 16
1054
- },
1055
- cardFieldRow: {
1056
- flexDirection: 'row',
1057
- gap: 12
1058
- },
1059
- cardFieldHalfLeft: {
1060
- flex: 1,
1061
- marginRight: 6
1062
- },
1063
- cardFieldHalfRight: {
1064
- flex: 1,
1065
- marginLeft: 6
1066
- },
1067
- oxyPayContainer: {
1068
- alignItems: 'center'
1069
- },
1070
- oxyPayIcon: {
1071
- marginBottom: 8
1072
- },
1073
- oxyPayTitle: {
1074
- fontSize: 16,
1075
- marginBottom: 8,
1076
- color: colors.text,
1077
- fontWeight: '600',
1078
- textAlign: 'center'
1079
- },
1080
- oxyPaySubtitle: {
1081
- fontSize: 14,
1082
- color: colors.secondaryText,
1083
- marginBottom: 8,
1084
- textAlign: 'center'
1085
- },
1086
- oxyPayBalanceBox: {
1087
- backgroundColor: colors.primary + '22',
1088
- borderRadius: 12,
1089
- padding: 8,
1090
- marginTop: 8
1091
- },
1092
- oxyPayBalanceText: {
1093
- color: colors.primary,
1094
- fontWeight: '600'
1095
- },
1096
- oxyPayCard: {
1097
- backgroundColor: '#fff',
1098
- borderRadius: 16,
1099
- padding: 24,
1100
- marginBottom: 24,
1101
- alignItems: 'center',
1102
- width: '100%'
1103
- },
1104
- oxyPayContent: {
1105
- alignItems: 'center',
1106
- width: '100%'
1107
- },
1108
- oxyPayMainTitle: {
1109
- fontFamily: fontFamilies.phuduBold,
1110
- fontWeight: 'bold',
1111
- fontSize: 28,
1112
- color: colors.text,
1113
- marginBottom: 2,
1114
- textAlign: 'center',
1115
- letterSpacing: 0.5
1116
- },
1117
- oxyPayWaiting: {
1118
- fontSize: 14,
1119
- color: colors.secondaryText,
1120
- textAlign: 'center',
1121
- marginBottom: 8
1122
- },
1123
- faircoinContainer: {
1124
- alignItems: 'center',
1125
- marginBottom: 24,
1126
- width: '100%'
1127
- },
1128
- faircoinIcon: {
1129
- marginBottom: 8
1130
- },
1131
- faircoinMainTitle: {
1132
- fontFamily: fontFamilies.phuduBold,
1133
- fontWeight: 'bold',
1134
- fontSize: 28,
1135
- color: '#1b1f0a',
1136
- marginBottom: 2,
1137
- textAlign: 'center',
1138
- letterSpacing: 0.5
1139
- },
1140
- faircoinSubtitle: {
1141
- color: '#1b1f0a',
1142
- fontWeight: '700',
1143
- fontSize: 17,
1144
- marginBottom: 18,
1145
- textAlign: 'center',
1146
- letterSpacing: 0.2
1147
- },
1148
- faircoinScanText: {
1149
- color: '#1b1f0a',
1150
- fontWeight: '600',
1151
- fontSize: 15,
1152
- marginBottom: 8
1153
- },
1154
- faircoinQRCard: {
1155
- width: 200,
1156
- height: 200,
1157
- backgroundColor: '#fff',
1158
- borderRadius: 32,
1159
- justifyContent: 'center',
1160
- alignItems: 'center',
1161
- marginBottom: 16,
1162
- padding: 16,
1163
- borderWidth: 3,
1164
- borderColor: '#9ffb50',
1165
- shadowColor: '#9ffb50',
1166
- shadowOffset: {
1167
- width: 0,
1168
- height: 4
1169
- },
1170
- shadowOpacity: 0.25,
1171
- shadowRadius: 12,
1172
- elevation: 8,
1173
- position: 'relative'
1174
- },
1175
- faircoinQRBadge: {
1176
- position: 'absolute',
1177
- bottom: 12,
1178
- right: 12,
1179
- backgroundColor: '#fff',
1180
- borderRadius: 16,
1181
- padding: 4,
1182
- shadowColor: '#000',
1183
- shadowOffset: {
1184
- width: 0,
1185
- height: 2
1186
- },
1187
- shadowOpacity: 0.1,
1188
- shadowRadius: 4,
1189
- elevation: 2
1190
- },
1191
- faircoinTitle: {
1192
- fontSize: 16,
1193
- marginBottom: 8,
1194
- color: colors.text,
1195
- fontWeight: '600',
1196
- textAlign: 'center'
1197
- },
1198
- faircoinQRBox: {
1199
- width: 160,
1200
- height: 160,
1201
- backgroundColor: '#eee',
1202
- borderRadius: 16,
1203
- justifyContent: 'center',
1204
- alignItems: 'center',
1205
- marginBottom: 12,
1206
- borderWidth: 2,
1207
- borderColor: colors.primary
1208
- },
1209
- faircoinQRText: {
1210
- color: '#aaa'
1211
- },
1212
- faircoinWaiting: {
1213
- fontSize: 14,
1214
- color: colors.secondaryText,
1215
- textAlign: 'center',
1216
- marginBottom: 8
1217
- },
1218
- faircoinPlaceholder: {
1219
- fontSize: 13,
1220
- color: colors.secondaryText,
1221
- textAlign: 'center'
1222
- },
1223
- faircoinCard: {
1224
- backgroundColor: '#fff',
1225
- borderRadius: 16,
1226
- padding: 24,
1227
- marginBottom: 24,
1228
- alignItems: 'center',
1229
- width: '100%'
1230
- },
1231
- faircoinContent: {
1232
- alignItems: 'center',
1233
- width: '100%'
1234
- },
1235
- successCard: {
1236
- backgroundColor: '#fff',
1237
- borderRadius: 16,
1238
- padding: 24,
1239
- marginBottom: 24,
1240
- alignItems: 'center',
1241
- width: '100%'
1242
- },
1243
- successContent: {
1244
- alignItems: 'center',
1245
- width: '100%'
1246
- },
1247
- successIcon: {
1248
- marginBottom: 8
1249
- },
1250
- successMainTitle: {
1251
- fontFamily: fontFamilies.phuduBold,
1252
- fontWeight: 'bold',
1253
- fontSize: 28,
1254
- color: colors.success || '#4BB543',
1255
- marginBottom: 2,
1256
- textAlign: 'center',
1257
- letterSpacing: 0.5
1258
- },
1259
- successSubtitle: {
1260
- fontSize: 16,
1261
- color: colors.text,
1262
- textAlign: 'center',
1263
- marginBottom: 8,
1264
- width: '100%'
1265
- },
1266
- successMessage: {
1267
- fontSize: 14,
1268
- color: colors.secondaryText,
1269
- textAlign: 'center',
1270
- marginBottom: 8
1271
- },
1272
- methodCard: {
1273
- flexDirection: 'row',
1274
- alignItems: 'center',
1275
- backgroundColor: '#fff',
1276
- borderRadius: 18,
1277
- paddingVertical: 18,
1278
- paddingHorizontal: 18,
1279
- marginBottom: 14,
1280
- borderWidth: 1.5,
1281
- borderColor: colors.border,
1282
- shadowColor: '#000',
1283
- shadowOffset: {
1284
- width: 0,
1285
- height: 2
1286
- },
1287
- shadowOpacity: 0.06,
1288
- shadowRadius: 6,
1289
- elevation: 2,
1290
- minHeight: 72
1291
- },
1292
- methodCardSelected: {
1293
- backgroundColor: colors.primary + '11',
1294
- borderColor: colors.primary,
1295
- shadowOpacity: 0.13,
1296
- shadowRadius: 10,
1297
- elevation: 4
1298
- },
1299
- methodCardContent: {
1300
- flexDirection: 'row',
1301
- alignItems: 'center',
1302
- flex: 1
1303
- },
1304
- methodCardIcon: {
1305
- marginRight: 18,
1306
- marginLeft: 2
1307
- },
1308
- methodCardTextContainer: {
1309
- flex: 1,
1310
- flexDirection: 'column',
1311
- justifyContent: 'center'
1312
- },
1313
- methodCardDescription: {
1314
- fontSize: 14,
1315
- color: colors.secondaryText,
1316
- marginTop: 2,
1317
- opacity: 0.85
1318
- },
1319
- methodCardCheckIcon: {
1320
- marginLeft: 12
1321
- },
1322
- paymentMethodLabelSelected: {
1323
- color: colors.primary
1324
- },
1325
- circleListContainer: {
1326
- flexDirection: 'row',
1327
- flexWrap: 'nowrap',
1328
- justifyContent: 'center',
1329
- alignItems: 'flex-start',
1330
- paddingHorizontal: 4,
1331
- width: '100%',
1332
- marginBottom: 0
1333
- },
1334
- circleMethod: {
1335
- alignItems: 'center',
1336
- marginHorizontal: 0,
1337
- flex: 1,
1338
- minWidth: 62,
1339
- paddingVertical: 2,
1340
- paddingHorizontal: 2
1341
- },
1342
- circleMethodSelected: {
1343
- // No extra margin, but highlight below
1344
- },
1345
- circleIconWrapper: {
1346
- width: 48,
1347
- // restored padding
1348
- height: 48,
1349
- // restored padding
1350
- borderRadius: 24,
1351
- // half of width/height
1352
- backgroundColor: '#fff',
1353
- borderWidth: 2,
1354
- borderColor: colors.border,
1355
- alignItems: 'center',
1356
- justifyContent: 'center',
1357
- marginBottom: 8,
1358
- // spacing below icon
1359
- shadowColor: '#000',
1360
- shadowOffset: {
1361
- width: 0,
1362
- height: 2
1363
- },
1364
- shadowOpacity: 0.07,
1365
- shadowRadius: 6,
1366
- elevation: 2
1367
- },
1368
- circleLabel: {
1369
- fontFamily: fontFamilies.phudu,
1370
- fontSize: 16,
1371
- color: colors.text,
1372
- fontWeight: '600',
1373
- textAlign: 'center',
1374
- marginBottom: 4,
1375
- marginTop: 2
1376
- },
1377
- circleLabelSelected: {
1378
- color: colors.primary
1379
- },
1380
- circleDescription: {
1381
- fontSize: 13,
1382
- color: colors.secondaryText,
1383
- textAlign: 'center',
1384
- opacity: 0.85,
1385
- minHeight: 36,
1386
- marginBottom: 2
1387
- },
1388
- headerStepIndicatorContainer: {
1389
- marginVertical: 2,
1390
- flexDirection: 'row',
1391
- justifyContent: 'center',
1392
- alignItems: 'center'
1393
- },
1394
- faircoinButton: {
1395
- flexDirection: 'row',
1396
- alignItems: 'center',
1397
- alignSelf: 'center',
1398
- backgroundColor: colors.primary + '11',
1399
- borderRadius: 16,
1400
- paddingHorizontal: 16,
1401
- paddingVertical: 8,
1402
- marginTop: 6,
1403
- marginBottom: 2
1404
- },
1405
- faircoinButtonText: {
1406
- color: colors.primary,
1407
- fontWeight: '600',
1408
- fontSize: 15
1409
- },
1410
- faircoinAddress: {
1411
- color: colors.secondaryText,
1412
- fontSize: 13,
1413
- textAlign: 'center',
1414
- marginTop: 6,
1415
- marginBottom: 2
1416
- },
1417
- // Summary step styles
1418
- summaryDescriptionContainer: {
1419
- marginBottom: 16
1420
- },
1421
- summaryDescriptionText: {
1422
- color: colors.secondaryText,
1423
- fontSize: 15,
1424
- lineHeight: 20
1425
- },
1426
- summaryItemPrice: {
1427
- color: colors.text,
1428
- fontWeight: '600',
1429
- fontSize: 16
1430
- },
1431
- summaryFallbackContainer: {
1432
- padding: 16,
1433
- backgroundColor: '#fff',
1434
- borderRadius: 12,
1435
- borderWidth: 1,
1436
- borderColor: colors.border
1437
- },
1438
- summaryFallbackText: {
1439
- color: colors.text,
1440
- fontSize: 16,
1441
- textAlign: 'center'
1442
- },
1443
- // Card payment styles
1444
- cardPaymentCard: {
1445
- backgroundColor: '#fff',
1446
- borderRadius: 16,
1447
- padding: 24,
1448
- marginBottom: 24,
1449
- alignItems: 'center',
1450
- width: '100%'
1451
- },
1452
- cardPaymentContent: {
1453
- alignItems: 'center',
1454
- width: '100%'
1455
- },
1456
- cardPaymentIcon: {
1457
- marginBottom: 8
1458
- },
1459
- cardPaymentMainTitle: {
1460
- fontFamily: fontFamilies.phuduBold,
1461
- fontWeight: 'bold',
1462
- fontSize: 28,
1463
- color: colors.text,
1464
- marginBottom: 2,
1465
- textAlign: 'center',
1466
- letterSpacing: 0.5
1467
- },
1468
- cardPaymentSubtitle: {
1469
- fontSize: 16,
1470
- color: colors.secondaryText,
1471
- textAlign: 'center',
1472
- marginBottom: 24,
1473
- width: '100%'
1474
- },
1475
- cardPaymentFields: {
1476
- width: '100%',
1477
- marginBottom: 16
1478
- },
1479
- cardPaymentWaiting: {
1480
- fontSize: 14,
1481
- color: colors.secondaryText,
1482
- textAlign: 'center',
1483
- marginBottom: 8
1484
- },
1485
- // Summary card styles
1486
- summaryCard: {
1487
- backgroundColor: '#fff',
1488
- borderRadius: 16,
1489
- padding: 24,
1490
- marginBottom: 24,
1491
- alignItems: 'center',
1492
- width: '100%'
1493
- },
1494
- summaryCardContent: {
1495
- alignItems: 'center',
1496
- width: '100%'
1497
- },
1498
- summaryCardIcon: {
1499
- marginBottom: 8
1500
- },
1501
- summaryCardMainTitle: {
1502
- fontFamily: fontFamilies.phuduBold,
1503
- fontWeight: 'bold',
1504
- fontSize: 28,
1505
- color: colors.text,
1506
- marginBottom: 2,
1507
- textAlign: 'center',
1508
- letterSpacing: 0.5
1509
- },
1510
- summaryCardSubtitle: {
1511
- fontSize: 16,
1512
- color: colors.secondaryText,
1513
- textAlign: 'center',
1514
- marginBottom: 24,
1515
- width: '100%'
1516
- },
1517
- summaryCardItems: {
1518
- width: '100%',
1519
- marginBottom: 16
1520
- },
1521
- summaryCardTotal: {
1522
- fontSize: 18,
1523
- fontWeight: 'bold',
1524
- color: colors.text,
1525
- textAlign: 'center',
1526
- marginBottom: 8
1527
- },
1528
- // Simple amount styles
1529
- summaryCardAmount: {
1530
- alignItems: 'center',
1531
- width: '100%',
1532
- marginBottom: 16
1533
- },
1534
- summaryCardAmountLabel: {
1535
- fontSize: 16,
1536
- color: colors.secondaryText,
1537
- textAlign: 'center',
1538
- marginBottom: 8
1539
- },
1540
- summaryCardAmountValue: {
1541
- fontSize: 32,
1542
- fontWeight: 'bold',
1543
- color: colors.text,
1544
- textAlign: 'center',
1545
- marginBottom: 8,
1546
- fontFamily: fontFamilies.phuduBold
1547
- },
1548
- summaryCardAmountDescription: {
1549
- fontSize: 14,
1550
- color: colors.secondaryText,
1551
- textAlign: 'center',
1552
- lineHeight: 20
1553
- },
1554
- // Enhanced summary styles
1555
- summaryCardDivider: {
1556
- height: 1,
1557
- backgroundColor: colors.border,
1558
- marginVertical: 16,
1559
- width: '100%'
1560
- },
1561
- summaryCardTotalSection: {
1562
- width: '100%',
1563
- marginBottom: 8
1564
- },
1565
- summaryCardTotalRow: {
1566
- flexDirection: 'row',
1567
- justifyContent: 'space-between',
1568
- alignItems: 'center',
1569
- paddingVertical: 4
1570
- },
1571
- summaryCardTotalLabel: {
1572
- fontSize: 16,
1573
- color: colors.secondaryText,
1574
- fontWeight: '500'
1575
- },
1576
- summaryCardTotalValue: {
1577
- fontSize: 16,
1578
- color: colors.text,
1579
- fontWeight: '600'
1580
- }
1581
- });
1582
252
  export default PaymentGatewayScreen;
1583
253
  //# sourceMappingURL=PaymentGatewayScreen.js.map