react-native-fpay 0.2.9 → 0.3.2

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 (120) hide show
  1. package/lib/module/FountainPayProvider.js +5 -1
  2. package/lib/module/FountainPayProvider.js.map +1 -1
  3. package/lib/module/core/api/index.js +22 -12
  4. package/lib/module/core/api/index.js.map +1 -1
  5. package/lib/module/engine/BLEReceiverService.js.map +1 -1
  6. package/lib/module/engine/FPEngine.js +24 -13
  7. package/lib/module/engine/FPEngine.js.map +1 -1
  8. package/lib/module/engine/useIsForeground.js +17 -0
  9. package/lib/module/engine/useIsForeground.js.map +1 -0
  10. package/lib/module/ui/components/AnimatedDots.js +68 -0
  11. package/lib/module/ui/components/AnimatedDots.js.map +1 -0
  12. package/lib/module/ui/components/ConfirmScreen.js +333 -0
  13. package/lib/module/ui/components/ConfirmScreen.js.map +1 -0
  14. package/lib/module/ui/modals/FPPaymentRequestModal.js +6 -8
  15. package/lib/module/ui/modals/FPPaymentRequestModal.js.map +1 -1
  16. package/lib/module/ui/modals/FPShell.js +7 -4
  17. package/lib/module/ui/modals/FPShell.js.map +1 -1
  18. package/lib/module/ui/screens/ReceiveScreen.js +379 -274
  19. package/lib/module/ui/screens/ReceiveScreen.js.map +1 -1
  20. package/lib/module/ui/screens/SendScreen.js +154 -45
  21. package/lib/module/ui/screens/SendScreen.js.map +1 -1
  22. package/lib/module/ui/screens/styles.js +89 -0
  23. package/lib/module/ui/screens/styles.js.map +1 -0
  24. package/lib/module/ui/screens/sub/receivePayment/Nfc/index.js +361 -0
  25. package/lib/module/ui/screens/sub/receivePayment/Nfc/index.js.map +1 -0
  26. package/lib/module/ui/screens/sub/receivePayment/Qr/index.js +338 -0
  27. package/lib/module/ui/screens/sub/receivePayment/Qr/index.js.map +1 -0
  28. package/lib/module/ui/screens/sub/receivePayment/Transfer/index.js +453 -0
  29. package/lib/module/ui/screens/sub/receivePayment/Transfer/index.js.map +1 -0
  30. package/lib/module/ui/screens/sub/{BluetoothSubScreen.js → sendPayment/BluetoothSubScreen.js} +25 -32
  31. package/lib/module/ui/screens/sub/sendPayment/BluetoothSubScreen.js.map +1 -0
  32. package/lib/module/ui/screens/sub/sendPayment/NFCSubScreen.js +354 -0
  33. package/lib/module/ui/screens/sub/sendPayment/NFCSubScreen.js.map +1 -0
  34. package/lib/module/ui/screens/sub/sendPayment/NQRSubScreen.js +440 -0
  35. package/lib/module/ui/screens/sub/sendPayment/NQRSubScreen.js.map +1 -0
  36. package/lib/module/ui/screens/sub/{ProximitySubScreen.js → sendPayment/ProximitySubScreen.js} +20 -111
  37. package/lib/module/ui/screens/sub/sendPayment/ProximitySubScreen.js.map +1 -0
  38. package/lib/module/ui/screens/sub/sendPayment/TransferSubScreen.js +327 -0
  39. package/lib/module/ui/screens/sub/sendPayment/TransferSubScreen.js.map +1 -0
  40. package/lib/typescript/src/FountainPayProvider.d.ts.map +1 -1
  41. package/lib/typescript/src/core/api/index.d.ts +20 -27
  42. package/lib/typescript/src/core/api/index.d.ts.map +1 -1
  43. package/lib/typescript/src/core/types/index.d.ts +56 -13
  44. package/lib/typescript/src/core/types/index.d.ts.map +1 -1
  45. package/lib/typescript/src/engine/BLEReceiverService.d.ts +2 -0
  46. package/lib/typescript/src/engine/BLEReceiverService.d.ts.map +1 -1
  47. package/lib/typescript/src/engine/FPEngine.d.ts +3 -1
  48. package/lib/typescript/src/engine/FPEngine.d.ts.map +1 -1
  49. package/lib/typescript/src/engine/useIsForeground.d.ts +2 -0
  50. package/lib/typescript/src/engine/useIsForeground.d.ts.map +1 -0
  51. package/lib/typescript/src/ui/components/AnimatedDots.d.ts +2 -0
  52. package/lib/typescript/src/ui/components/AnimatedDots.d.ts.map +1 -0
  53. package/lib/typescript/src/ui/components/ConfirmScreen.d.ts +10 -0
  54. package/lib/typescript/src/ui/components/ConfirmScreen.d.ts.map +1 -0
  55. package/lib/typescript/src/ui/components/OtpInput/Styles.d.ts +3 -3
  56. package/lib/typescript/src/ui/modals/FPPaymentRequestModal.d.ts.map +1 -1
  57. package/lib/typescript/src/ui/modals/FPShell.d.ts.map +1 -1
  58. package/lib/typescript/src/ui/screens/ReceiveScreen.d.ts +2 -9
  59. package/lib/typescript/src/ui/screens/ReceiveScreen.d.ts.map +1 -1
  60. package/lib/typescript/src/ui/screens/SendScreen.d.ts +4 -2
  61. package/lib/typescript/src/ui/screens/SendScreen.d.ts.map +1 -1
  62. package/lib/typescript/src/ui/screens/styles.d.ts +1390 -0
  63. package/lib/typescript/src/ui/screens/styles.d.ts.map +1 -0
  64. package/lib/typescript/src/ui/screens/sub/receivePayment/Nfc/index.d.ts +10 -0
  65. package/lib/typescript/src/ui/screens/sub/receivePayment/Nfc/index.d.ts.map +1 -0
  66. package/lib/typescript/src/ui/screens/sub/receivePayment/Qr/index.d.ts +10 -0
  67. package/lib/typescript/src/ui/screens/sub/receivePayment/Qr/index.d.ts.map +1 -0
  68. package/lib/typescript/src/ui/screens/sub/receivePayment/Transfer/index.d.ts +5 -0
  69. package/lib/typescript/src/ui/screens/sub/receivePayment/Transfer/index.d.ts.map +1 -0
  70. package/lib/typescript/src/ui/screens/sub/{BluetoothSubScreen.d.ts → sendPayment/BluetoothSubScreen.d.ts} +2 -11
  71. package/lib/typescript/src/ui/screens/sub/sendPayment/BluetoothSubScreen.d.ts.map +1 -0
  72. package/lib/typescript/src/ui/screens/sub/sendPayment/NFCSubScreen.d.ts +3 -0
  73. package/lib/typescript/src/ui/screens/sub/sendPayment/NFCSubScreen.d.ts.map +1 -0
  74. package/lib/typescript/src/ui/screens/sub/sendPayment/NQRSubScreen.d.ts +3 -0
  75. package/lib/typescript/src/ui/screens/sub/sendPayment/NQRSubScreen.d.ts.map +1 -0
  76. package/lib/typescript/src/ui/screens/sub/{ProximitySubScreen.d.ts → sendPayment/ProximitySubScreen.d.ts} +2 -10
  77. package/lib/typescript/src/ui/screens/sub/sendPayment/ProximitySubScreen.d.ts.map +1 -0
  78. package/lib/typescript/src/ui/screens/sub/sendPayment/TransferSubScreen.d.ts +3 -0
  79. package/lib/typescript/src/ui/screens/sub/sendPayment/TransferSubScreen.d.ts.map +1 -0
  80. package/package.json +1 -1
  81. package/src/FountainPayProvider.tsx +7 -1
  82. package/src/core/api/index.ts +34 -19
  83. package/src/core/types/index.ts +67 -13
  84. package/src/engine/BLEReceiverService.ts +2 -0
  85. package/src/engine/FPEngine.ts +29 -14
  86. package/src/engine/useIsForeground.ts +18 -0
  87. package/src/ui/components/AnimatedDots.tsx +81 -0
  88. package/src/ui/components/ConfirmScreen.tsx +421 -0
  89. package/src/ui/modals/FPPaymentRequestModal.tsx +7 -6
  90. package/src/ui/modals/FPShell.tsx +9 -9
  91. package/src/ui/screens/ReceiveScreen.tsx +266 -115
  92. package/src/ui/screens/SendScreen.tsx +141 -19
  93. package/src/ui/screens/styles.ts +101 -0
  94. package/src/ui/screens/sub/receivePayment/Nfc/index.tsx +418 -0
  95. package/src/ui/screens/sub/receivePayment/Qr/index.tsx +391 -0
  96. package/src/ui/screens/sub/receivePayment/Transfer/index.tsx +512 -0
  97. package/src/ui/screens/sub/{BluetoothSubScreen.tsx → sendPayment/BluetoothSubScreen.tsx} +27 -46
  98. package/src/ui/screens/sub/sendPayment/NFCSubScreen.tsx +302 -0
  99. package/src/ui/screens/sub/sendPayment/NQRSubScreen.tsx +490 -0
  100. package/src/ui/screens/sub/{ProximitySubScreen.tsx → sendPayment/ProximitySubScreen.tsx} +24 -44
  101. package/src/ui/screens/sub/sendPayment/TransferSubScreen.tsx +345 -0
  102. package/lib/module/ui/screens/sub/BluetoothSubScreen.js.map +0 -1
  103. package/lib/module/ui/screens/sub/NFCSubScreen.js +0 -164
  104. package/lib/module/ui/screens/sub/NFCSubScreen.js.map +0 -1
  105. package/lib/module/ui/screens/sub/NQRSubScreen.js +0 -131
  106. package/lib/module/ui/screens/sub/NQRSubScreen.js.map +0 -1
  107. package/lib/module/ui/screens/sub/ProximitySubScreen.js.map +0 -1
  108. package/lib/module/ui/screens/sub/TransferSubScreen.js +0 -353
  109. package/lib/module/ui/screens/sub/TransferSubScreen.js.map +0 -1
  110. package/lib/typescript/src/ui/screens/sub/BluetoothSubScreen.d.ts.map +0 -1
  111. package/lib/typescript/src/ui/screens/sub/NFCSubScreen.d.ts +0 -18
  112. package/lib/typescript/src/ui/screens/sub/NFCSubScreen.d.ts.map +0 -1
  113. package/lib/typescript/src/ui/screens/sub/NQRSubScreen.d.ts +0 -12
  114. package/lib/typescript/src/ui/screens/sub/NQRSubScreen.d.ts.map +0 -1
  115. package/lib/typescript/src/ui/screens/sub/ProximitySubScreen.d.ts.map +0 -1
  116. package/lib/typescript/src/ui/screens/sub/TransferSubScreen.d.ts +0 -11
  117. package/lib/typescript/src/ui/screens/sub/TransferSubScreen.d.ts.map +0 -1
  118. package/src/ui/screens/sub/NFCSubScreen.tsx +0 -86
  119. package/src/ui/screens/sub/NQRSubScreen.tsx +0 -62
  120. package/src/ui/screens/sub/TransferSubScreen.tsx +0 -147
@@ -0,0 +1,345 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { View, Text, TextInput, FlatList, TouchableOpacity, StyleSheet, ActivityIndicator, ScrollView, Animated, Dimensions, Easing, Pressable } from 'react-native';
3
+ import { transferAPI } from '../../../../core/api';
4
+ import { FPButton } from '../../../components/FPButton';
5
+ import { C, R, S, F, shadow } from '../../../theme';
6
+ import type { FPCurrency, FPTransaction, FPError, Props, FPSendPaymentRequest } from '../../../../core/types';
7
+ import styled from 'styled-components/native';
8
+ import Ionicons from 'react-native-vector-icons/Ionicons';
9
+ import { AnimatedDots } from '../../../components/AnimatedDots';
10
+ import { ButtonContainer, ContentContainer, CTAButton, CTAText, HomeIndicator, InputBox, InputContainer, Label, List, ListText, StyledTextInput } from '../../styles';
11
+
12
+ type Step = 'bank' | 'account' | 'confirm' | 'processing' | 'done';
13
+ const { width, height } = Dimensions.get('window');
14
+
15
+ const Container = styled(View)`
16
+ flex: 1;
17
+ background-color: #000000;
18
+ `;
19
+
20
+ const FormContainer = styled(View)`
21
+ flex: 1;
22
+ margin-top: 100px;
23
+ `;
24
+
25
+ const Header = styled(View)`
26
+ flex-direction: row;
27
+ align-items: center;
28
+ justify-content: space-between;
29
+ padding: 12px 16px;
30
+ position: absolute !important;
31
+ top: 40px;
32
+ left: 0;
33
+ right: 0;
34
+ z-index: 10;
35
+ elevation: 4;
36
+ shadow-color: #000;
37
+ shadow-offset: 0px 2px;
38
+ shadow-opacity: 0.1;
39
+ shadow-radius: 4px;
40
+ z-index: 9999999999 !important;
41
+ `;
42
+
43
+ const HeaderButton = styled(TouchableOpacity)`
44
+ padding: 8px;
45
+ background-color: #fff;
46
+ width: 40px;
47
+ height: 40px;
48
+ border-radius: 50%;
49
+ justify-content: center;
50
+ align-items: center;
51
+ `;
52
+
53
+ const HeaderCenter = styled(View)`
54
+ flex-direction: row;
55
+ align-items: center;
56
+ gap: 8px;
57
+ `;
58
+
59
+ const HeaderRight = styled(View)`
60
+ flex-direction: row;
61
+ align-items: center;
62
+ gap: 8px;
63
+ `;
64
+
65
+
66
+
67
+ const BottomSheet = styled(View)`
68
+ position: absolute;
69
+ bottom: 0;
70
+ left: 0;
71
+ right: 0;
72
+ background-color: #ffffff;
73
+ border-top-left-radius: 24px;
74
+ border-top-right-radius: 24px;
75
+ padding: 20px 20px 32px;
76
+ elevation: 20;
77
+ shadow-color: #000;
78
+ shadow-offset: 0px -4px;
79
+ shadow-opacity: 0.15;
80
+ shadow-radius: 12px;
81
+ height: ${height * 0.9}px;
82
+ z-index: 9999999999 !important;
83
+ `;
84
+
85
+ const AnimatedBottomSheet = styled(Animated.View)`
86
+ position: absolute;
87
+ bottom: 0;
88
+ left: 0;
89
+ right: 0;
90
+ background-color: #ffffff;
91
+ border-top-left-radius: 24px;
92
+ border-top-right-radius: 24px;
93
+ padding: 20px 20px 32px;
94
+ shadow-color: #000;
95
+ shadow-offset: 0px -4px;
96
+ shadow-opacity: 0.15;
97
+ shadow-radius: 12px;
98
+ height: ${height * 0.9}px;
99
+ z-index: 9999999999 !important;
100
+ `;
101
+
102
+
103
+ const SheetHeader = styled(View)`
104
+ flex-direction: row;
105
+ justify-content: flex-end;
106
+ align-items: center;
107
+ gap: 40%;
108
+ margin-bottom: 12px;
109
+ `;
110
+
111
+ const SheetHandle = styled(View)`
112
+ width: 40px;
113
+ height: 4px;
114
+ background-color: #d1d5db;
115
+ border-radius: 2px;
116
+ align-self: center;
117
+ margin-bottom: 20px;
118
+ `;
119
+
120
+ const SheetScrollView = styled(ScrollView)`
121
+ flex: 1;
122
+ `;
123
+
124
+ const SectionTitle = styled(Text)`
125
+ font-size: 18px;
126
+ font-weight: 700;
127
+ color: #1f2937;
128
+ margin-bottom: 16px;
129
+ `;
130
+
131
+
132
+
133
+ const SearchContainer = styled(View)`
134
+ flex-direction: row;
135
+ align-items: center;
136
+ background-color: #f9fafb;
137
+ border-radius: 12px;
138
+ padding: 14px 16px;
139
+ margin-bottom: 24px;
140
+ border: 1px solid #e5e7eb;
141
+ `;
142
+
143
+ const SearchInput = styled(TextInput)`
144
+ flex: 1;
145
+ margin-left: 10px;
146
+ font-size: 14px;
147
+ color: #1f2937;
148
+ padding: 0;
149
+ `;
150
+
151
+
152
+
153
+ export function TransferSubScreen({ amount, currency, onClose, onProcessTransaction, onError }: Props) {
154
+ const [searchStr, setSearchStr] = useState<string>("");
155
+ const [accountNumber, setAccountNumber] = useState<string>("");
156
+ const [bank, setBank] = useState<any>({});
157
+ const [accountDetail, setAccountDetail] = useState<any>({});
158
+
159
+ const [isVerifying, setIsVerifying] = useState<boolean>(false);
160
+
161
+ const [showBankList, setShowBankList] = useState<boolean>(false);
162
+
163
+ const [banks, setBanks] = useState<any>([])
164
+ const [filteredBanks, setFilteredBanks] = useState<any>([]);
165
+ const slideAnim = React.useRef(new Animated.Value(height)).current;
166
+
167
+
168
+ const openSheet = () => {
169
+ setShowBankList(true);
170
+ Animated.timing(slideAnim, {
171
+ toValue: 0,
172
+ duration: 300,
173
+ easing: Easing.bezier(0.25, 0.8, 0.25, 1),
174
+ useNativeDriver: true,
175
+ }).start();
176
+ };
177
+
178
+ const closeSheet = () => {
179
+ Animated.timing(slideAnim, {
180
+ toValue: height,
181
+ duration: 250,
182
+ easing: Easing.bezier(0.25, 0.8, 0.25, 1),
183
+ useNativeDriver: true,
184
+ }).start(() => {
185
+ setShowBankList(false);
186
+ });
187
+ };
188
+
189
+ const handleSend = async () => {
190
+ if (!bank || !accountDetail) return;
191
+ try {
192
+ const paylaod: FPSendPaymentRequest = {
193
+ amount: amount,
194
+ currency: currency,
195
+ channel: 'transfer',
196
+ narration: `Send ${currency}${amount} to ${accountDetail.accountName}`,
197
+ recipient: accountDetail
198
+ }
199
+ onProcessTransaction?.(paylaod);
200
+ } catch (err) {
201
+ onError?.(err as FPError);
202
+ }
203
+ }
204
+
205
+ const handleSelectBank = (bank: any) => {
206
+ setBank(bank);
207
+ closeSheet();
208
+ };
209
+
210
+
211
+ useEffect(() => { transferAPI.getBanks().then(setBanks).catch(() => {}); }, []);
212
+
213
+ useEffect(() => {
214
+ if (accountNumber.length === 10 && bank) {
215
+ setIsVerifying(true);
216
+ setAccountDetail(null);
217
+ transferAPI.verifyAccount(accountNumber, bank.code)
218
+ .then(r => setAccountDetail(r))
219
+ .catch(() => setAccountDetail(null))
220
+ .finally(() => setIsVerifying(false));
221
+ }
222
+ }, [accountNumber, bank]);
223
+
224
+
225
+
226
+ useEffect(() => {
227
+ const query = searchStr.trim().toLowerCase();
228
+
229
+ if (!query) {
230
+ setFilteredBanks(banks);
231
+ return;
232
+ }
233
+
234
+ const filtered = banks.filter((bank: any) =>
235
+ bank.name.toLowerCase().includes(query)
236
+ );
237
+
238
+ setFilteredBanks(filtered);
239
+ }, [searchStr, banks]);
240
+
241
+ return(
242
+ <Container>
243
+ {/* Header */}
244
+ <Header>
245
+ <HeaderButton onPress={onClose}>
246
+ <Ionicons name="close" size={24} />
247
+ </HeaderButton>
248
+
249
+ <HeaderCenter>
250
+ <Text style={{ fontWeight: 'bold', fontSize: 16, color:'#FFF' }}>Bank</Text>
251
+ <Text style={{ fontSize: 10, color: '#FFF' }}>Transfer</Text>
252
+ </HeaderCenter>
253
+
254
+ <HeaderRight>
255
+
256
+ </HeaderRight>
257
+ </Header>
258
+ <FormContainer>
259
+ <InputContainer>
260
+ <Label>Account Details</Label>
261
+ <InputBox>
262
+ <StyledTextInput
263
+ placeholder="Enter account number"
264
+ placeholderTextColor="#d1d5db"
265
+ value={accountNumber}
266
+ keyboardType="number-pad"
267
+ maxLength={10}
268
+ onChangeText={(text) => {
269
+ // remove anything that is not a number
270
+ const numericText = text.replace(/[^0-9]/g, '');
271
+ setAccountNumber(numericText);
272
+ }}
273
+ />
274
+
275
+ </InputBox>
276
+ </InputContainer>
277
+
278
+ <InputContainer>
279
+ <Label>Bank</Label>
280
+ <InputBox>
281
+ <StyledTextInput
282
+ placeholder="Enter Bank"
283
+ placeholderTextColor="#d1d5db"
284
+ value={bank?.name ?? ''}
285
+ editable={false}
286
+ onPress={()=>{openSheet()}}
287
+ />
288
+ </InputBox>
289
+ <View style={{flexDirection: 'row', alignItems: 'center', paddingTop: 16}}>
290
+ {isVerifying && <AnimatedDots />}
291
+ {!isVerifying && accountDetail && <Label>{accountDetail.name?.toUpperCase()}</Label>}
292
+ </View>
293
+
294
+ </InputContainer>
295
+ <HomeIndicator />
296
+ <ContentContainer>
297
+ <ButtonContainer>
298
+ <CTAButton activeOpacity={0.8} disabled={!accountDetail || !accountDetail.name} onPress={handleSend}>
299
+ <CTAText>Send</CTAText>
300
+ </CTAButton>
301
+ </ButtonContainer>
302
+ </ContentContainer>
303
+
304
+ </FormContainer>
305
+ {showBankList && (
306
+ <AnimatedBottomSheet
307
+ style={{
308
+ transform: [{ translateY: slideAnim }],
309
+ }}
310
+ >
311
+ <SheetHeader>
312
+ <SheetHandle />
313
+ <Pressable onPress={() => setShowBankList(false)}>
314
+ <Ionicons name="close" size={22} />
315
+ </Pressable>
316
+ </SheetHeader>
317
+
318
+ <SheetScrollView showsVerticalScrollIndicator={false}>
319
+ <SearchContainer>
320
+ <Ionicons name="search" size={18} color="#9ca3af" />
321
+ <SearchInput
322
+ placeholder="Type a name or phone number to send"
323
+ placeholderTextColor="#9ca3af"
324
+ value={searchStr}
325
+ onChangeText={setSearchStr}
326
+ />
327
+ </SearchContainer>
328
+ <SectionTitle>Banks</SectionTitle>
329
+ {filteredBanks && filteredBanks.map((bank: any, index: number)=>{
330
+ return (
331
+ <List key={`bank-id-${index}`} onPress={() => handleSelectBank(bank)}>
332
+ <ListText>{bank.name}</ListText>
333
+ <Ionicons name="chevron-forward" size={20} color="#1f2937" />
334
+ </List>
335
+ )
336
+ })}
337
+ </SheetScrollView>
338
+ </AnimatedBottomSheet>
339
+ )}
340
+
341
+ </Container>
342
+ );
343
+ }
344
+
345
+
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useState","View","Text","TouchableOpacity","Alert","styled","Svg","Path","Ionicons","transferAPI","FPEngine","PulseAnimation","InLoading","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Container","Header","HeaderButton","HeaderCenter","HeaderRight","QuickLinksContainer","QuickLinksContainerWithDevices","QuickLinksIcon","QuickLinksText","DeviceCard","DeviceInfo","DeviceName","DeviceSignal","PayButton","PayButtonText","ScrollContainer","ScrollView","ContentContainer","BluetoothIconContainer","BluetoothIcon","color","size","width","height","strokeWidth","viewBox","fill","children","d","stroke","strokeLinecap","strokeLinejoin","fillRule","clipRule","BluetoothScanningIcon","PHASE_LABEL","idle","scanning","selected","requesting","transferring","done","declined","error","BluetoothSubScreen","mode","amount","currency","onDone","onSuccess","onError","devices","setDevices","setScanning","status","setStatus","currentDevice","setCurrentDevice","handleScan","scanForBluetoothDevices","device","prevDevices","exists","find","id","length","console","alert","handlePayment","userName","name","text","style","onPress","initiatePayment","user","getUser","deviceConnection","request","senderId","userId","accountNumber","senderName","accountName","timestamp","Date","now","log","response","sendBluetoothPaymentRequest","accepted","accountDetails","code","message","result","send","bankCode","narration","reference","transactionId","tx","type","channel","recipient","createdAt","fp","includes","fontWeight","fontSize","showsVerticalScrollIndicator","map","appName","rssi","activeOpacity"],"sourceRoot":"../../../../../src","sources":["ui/screens/sub/BluetoothSubScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,164 +0,0 @@
1
- "use strict";
2
-
3
- import React, { useState } from 'react';
4
- import { View, Text, StyleSheet } from 'react-native';
5
- import NfcManager, { NfcTech, Ndef } from 'react-native-nfc-manager';
6
- import { transferAPI } from "../../../core/api/index.js";
7
- import { FPButton } from "../../components/FPButton.js";
8
- import { C, R, S, F } from "../../theme/index.js";
9
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
10
- export function NFCSubScreen({
11
- mode,
12
- amount,
13
- currency = 'NGN',
14
- myWallet,
15
- onDone,
16
- onSuccess,
17
- onError
18
- }) {
19
- const [phase, setPhase] = useState('idle');
20
- const [msg, setMsg] = useState('');
21
- const tapToReceive = async () => {
22
- if (!myWallet) return;
23
- setPhase('active');
24
- try {
25
- await NfcManager.start();
26
- await NfcManager.requestTechnology(NfcTech.Ndef);
27
- const bytes = Ndef.encodeMessage([Ndef.textRecord(JSON.stringify(myWallet))]);
28
- if (bytes) await NfcManager.ndefHandler.writeNdefMessage(bytes);
29
- setPhase('success');
30
- setMsg('Your payment details are now on the NFC tag.');
31
- } catch (e) {
32
- setPhase('error');
33
- setMsg(e.message);
34
- onError?.({
35
- code: 'NFC_ERROR',
36
- message: e.message
37
- });
38
- } finally {
39
- NfcManager.cancelTechnologyRequest();
40
- }
41
- };
42
- const tapToSend = async () => {
43
- setPhase('active');
44
- try {
45
- await NfcManager.start();
46
- await NfcManager.requestTechnology(NfcTech.Ndef);
47
- const tag = await NfcManager.getTag();
48
- if (!tag?.ndefMessage?.[0]?.payload) throw new Error('No wallet data on tag');
49
- const payload = new Uint8Array(tag.ndefMessage[0].payload);
50
- const text = Ndef.text.decodePayload(payload);
51
- const wallet = JSON.parse(text);
52
- const result = await transferAPI.send({
53
- accountNumber: wallet.accountNumber,
54
- bankCode: wallet.bankCode,
55
- amount: (amount ?? 0) * 100,
56
- narration: 'NFC payment'
57
- });
58
- onSuccess?.({
59
- id: result.reference,
60
- reference: result.reference,
61
- type: 'debit',
62
- channel: 'nfc',
63
- amount: result.amount,
64
- currency: result.currency,
65
- status: result.status,
66
- recipient: {
67
- accountName: wallet.accountName
68
- },
69
- createdAt: result.createdAt
70
- });
71
- setPhase('success');
72
- setMsg('Payment sent!');
73
- } catch (e) {
74
- setPhase('error');
75
- setMsg(e.message);
76
- onError?.({
77
- code: 'NFC_ERROR',
78
- message: e.message
79
- });
80
- } finally {
81
- NfcManager.cancelTechnologyRequest();
82
- }
83
- };
84
- return /*#__PURE__*/_jsxs(View, {
85
- style: st.wrap,
86
- children: [/*#__PURE__*/_jsxs(Text, {
87
- style: st.title,
88
- children: ["NFC ", mode === 'send' ? 'Payment' : 'Receive']
89
- }), /*#__PURE__*/_jsxs(View, {
90
- style: [st.tapZone, phase === 'active' && st.tapActive, phase === 'success' && st.tapSuccess, phase === 'error' && st.tapError],
91
- children: [/*#__PURE__*/_jsx(Text, {
92
- style: st.tapEmoji,
93
- children: phase === 'success' ? 'OK' : phase === 'error' ? 'ERR' : 'NFC'
94
- }), /*#__PURE__*/_jsx(Text, {
95
- style: st.tapLabel,
96
- children: phase === 'idle' ? mode === 'send' ? 'Tap to pay' : 'Tap to receive' : phase === 'active' ? 'Scanning...' : phase === 'success' ? 'Success!' : msg
97
- })]
98
- }), phase === 'idle' && /*#__PURE__*/_jsx(FPButton, {
99
- label: mode === 'send' ? 'Start NFC Scan' : 'Write to NFC Tag',
100
- onPress: mode === 'send' ? tapToSend : tapToReceive,
101
- style: {
102
- marginTop: S.md
103
- }
104
- }), phase === 'success' && /*#__PURE__*/_jsx(FPButton, {
105
- label: "Done",
106
- onPress: onDone,
107
- style: {
108
- marginTop: S.md
109
- }
110
- }), phase === 'error' && /*#__PURE__*/_jsx(FPButton, {
111
- label: "Try Again",
112
- onPress: () => setPhase('idle'),
113
- style: {
114
- marginTop: S.md
115
- }
116
- })]
117
- });
118
- }
119
- const st = StyleSheet.create({
120
- wrap: {
121
- flex: 1,
122
- padding: S.lg
123
- },
124
- back: {
125
- color: C.brand,
126
- fontSize: F.md,
127
- fontWeight: '600',
128
- marginBottom: S.md
129
- },
130
- title: {
131
- fontSize: F.xl,
132
- fontWeight: '800',
133
- color: C.ink,
134
- marginBottom: S.lg
135
- },
136
- tapZone: {
137
- height: 180,
138
- backgroundColor: C.ink,
139
- borderRadius: R.xl,
140
- justifyContent: 'center',
141
- alignItems: 'center'
142
- },
143
- tapActive: {
144
- backgroundColor: C.brand
145
- },
146
- tapSuccess: {
147
- backgroundColor: C.green
148
- },
149
- tapError: {
150
- backgroundColor: C.red
151
- },
152
- tapEmoji: {
153
- fontSize: 40,
154
- color: C.white,
155
- fontWeight: '800',
156
- marginBottom: S.sm
157
- },
158
- tapLabel: {
159
- color: C.white,
160
- fontSize: F.lg,
161
- fontWeight: '700'
162
- }
163
- });
164
- //# sourceMappingURL=NFCSubScreen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useState","View","Text","StyleSheet","NfcManager","NfcTech","Ndef","transferAPI","FPButton","C","R","S","F","jsxs","_jsxs","jsx","_jsx","NFCSubScreen","mode","amount","currency","myWallet","onDone","onSuccess","onError","phase","setPhase","msg","setMsg","tapToReceive","start","requestTechnology","bytes","encodeMessage","textRecord","JSON","stringify","ndefHandler","writeNdefMessage","e","message","code","cancelTechnologyRequest","tapToSend","tag","getTag","ndefMessage","payload","Error","Uint8Array","text","decodePayload","wallet","parse","result","send","accountNumber","bankCode","narration","id","reference","type","channel","status","recipient","accountName","createdAt","style","st","wrap","children","title","tapZone","tapActive","tapSuccess","tapError","tapEmoji","tapLabel","label","onPress","marginTop","md","create","flex","padding","lg","back","color","brand","fontSize","fontWeight","marginBottom","xl","ink","height","backgroundColor","borderRadius","justifyContent","alignItems","green","red","white","sm"],"sourceRoot":"../../../../../src","sources":["ui/screens/sub/NFCSubScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,131 +0,0 @@
1
- "use strict";
2
-
3
- import React, { useEffect, useState } from 'react';
4
- import { View, Text, StyleSheet, ActivityIndicator, Image } from 'react-native';
5
- import { nqrAPI } from "../../../core/api/index.js";
6
- import { C, R, S, F, shadow } from "../../theme/index.js";
7
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
- export function NQRSubScreen({
9
- mode,
10
- amount,
11
- currency = 'NGN',
12
- onDone,
13
- onError
14
- }) {
15
- const [qr, setQr] = useState(null);
16
- const [loading, setLoading] = useState(false);
17
- useEffect(() => {
18
- if (mode === 'receive') {
19
- setLoading(true);
20
- nqrAPI.generate({
21
- amount: amount ? amount * 100 : undefined,
22
- currency
23
- }).then(setQr).catch(e => onError?.(e)).finally(() => setLoading(false));
24
- }
25
- }, []);
26
- return /*#__PURE__*/_jsxs(View, {
27
- style: st.wrap,
28
- children: [/*#__PURE__*/_jsx(Text, {
29
- style: st.title,
30
- children: mode === 'receive' ? 'Your QR Code' : 'Scan QR Code'
31
- }), loading && /*#__PURE__*/_jsx(ActivityIndicator, {
32
- size: "large",
33
- color: C.brand,
34
- style: {
35
- marginTop: S.xl
36
- }
37
- }), qr && /*#__PURE__*/_jsxs(View, {
38
- style: st.qrCard,
39
- children: [/*#__PURE__*/_jsx(Image, {
40
- source: {
41
- uri: 'data:image/png;base64,' + qr.qrCodeImageBase64
42
- },
43
- style: {
44
- width: 200,
45
- height: 200
46
- }
47
- }), amount && /*#__PURE__*/_jsxs(Text, {
48
- style: st.amount,
49
- children: [currency, " ", amount.toLocaleString('en-NG', {
50
- minimumFractionDigits: 2
51
- })]
52
- }), /*#__PURE__*/_jsxs(Text, {
53
- style: st.ref,
54
- children: ["Ref: ", qr.reference]
55
- }), qr.expiresAt && /*#__PURE__*/_jsxs(Text, {
56
- style: st.expiry,
57
- children: ["Expires: ", new Date(qr.expiresAt).toLocaleTimeString()]
58
- })]
59
- }), mode === 'send' && /*#__PURE__*/_jsxs(View, {
60
- style: st.placeholder,
61
- children: [/*#__PURE__*/_jsx(Text, {
62
- style: st.placeholderText,
63
- children: "Camera scanner"
64
- }), /*#__PURE__*/_jsx(Text, {
65
- style: st.placeholderSub,
66
- children: "Integrate your preferred camera/QR library here and pass the scanned qrString to nqrAPI.pay()"
67
- })]
68
- })]
69
- });
70
- }
71
- const st = StyleSheet.create({
72
- wrap: {
73
- flex: 1,
74
- padding: S.lg
75
- },
76
- back: {
77
- color: C.brand,
78
- fontSize: F.md,
79
- fontWeight: '600',
80
- marginBottom: S.md
81
- },
82
- title: {
83
- fontSize: F.xl,
84
- fontWeight: '800',
85
- color: C.ink,
86
- marginBottom: S.lg
87
- },
88
- qrCard: {
89
- alignItems: 'center',
90
- backgroundColor: C.white,
91
- borderRadius: R.xl,
92
- padding: S.xl,
93
- ...shadow.lg
94
- },
95
- amount: {
96
- fontSize: F.xxl,
97
- fontWeight: '800',
98
- color: C.ink,
99
- marginTop: S.md
100
- },
101
- ref: {
102
- fontSize: F.sm,
103
- color: C.muted,
104
- marginTop: S.sm
105
- },
106
- expiry: {
107
- fontSize: F.xs,
108
- color: C.amber,
109
- marginTop: 4
110
- },
111
- placeholder: {
112
- flex: 1,
113
- backgroundColor: C.ink,
114
- borderRadius: R.xl,
115
- justifyContent: 'center',
116
- alignItems: 'center',
117
- padding: S.xl
118
- },
119
- placeholderText: {
120
- color: C.white,
121
- fontSize: F.xl,
122
- fontWeight: '700'
123
- },
124
- placeholderSub: {
125
- color: C.ghost,
126
- fontSize: F.sm,
127
- textAlign: 'center',
128
- marginTop: S.sm
129
- }
130
- });
131
- //# sourceMappingURL=NQRSubScreen.js.map