Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
I
InvestCustomer
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Giang Tran
InvestCustomer
Commits
e1170e14
Commit
e1170e14
authored
Jun 14, 2021
by
Nguyễn Thị Thúy
Browse files
Options
Browse Files
Download
Plain Diff
merge func_smart_otp
parents
e2d99add
7c6e90a3
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
2298 additions
and
914 deletions
+2298
-914
Info.plist
ios/Invest/Info.plist
+2
-0
Podfile.lock
ios/Podfile.lock
+702
-0
package.json
package.json
+1
-0
Functions.js
src/Config/Functions.js
+16
-0
constants.js
src/Config/constants.js
+78
-1
private.key
src/Config/private.key
+28
-0
public.key
src/Config/public.key
+10
-0
RootView.js
src/RootView.js
+6
-2
FeePro.js
src/Screens/Account/PacrtCQG/FeePro.js
+2
-1
PacketCQG.js
src/Screens/Account/PacrtCQG/PacketCQG.js
+32
-24
WrapNomarl.js
src/Screens/Account/PacrtCQG/WrapNomarl.js
+2
-1
ChooseMethod.js
src/Screens/Action/Deposit/ChooseMethod.js
+25
-11
WalletDeposit.js
src/Screens/Action/Wallet/WalletDeposit.js
+186
-172
WalletWithdraw.js
src/Screens/Action/Wallet/WalletWithdraw.js
+24
-18
Login.js
src/Screens/Authen/Login.js
+189
-236
NewPassWord.js
src/Screens/Authen/NewPassWord.js
+3
-2
RegisterOTP.js
src/Screens/Authen/RegisterOTP.js
+12
-6
Home.js
src/Screens/Home/Home.js
+7
-4
MethodPayView.js
src/Screens/MethodPay/MethodPayView.js
+13
-3
ChangeSmartOTP.js
src/Screens/SmartOTP/ChangeSmartOTP/ChangeSmartOTP.js
+21
-5
ConfirmChangeSmartOTP.js
src/Screens/SmartOTP/ChangeSmartOTP/ConfirmChangeSmartOTP.js
+64
-24
ConfirmCreate.js
src/Screens/SmartOTP/ConfirmCreate/ConfirmCreate.js
+238
-0
ConfirmCreateView.js
src/Screens/SmartOTP/ConfirmCreate/ConfirmCreateView.js
+200
-0
ConfirmOTPSmart.js
src/Screens/SmartOTP/ConfirmOTPSmart.js
+6
-10
EnterPasswordSmartOTP.js
src/Screens/SmartOTP/EnterPasswordSmartOTP.js
+101
-94
SmartOTP.js
src/Screens/SmartOTP/SmartOTP.js
+95
-86
index.js
src/Screens/VersionChecker/index.js
+1
-2
ConfirmOTPSmart.js
src/apis/Functions/ConfirmOTPSmart.js
+10
-3
helpers.js
src/apis/helpers.js
+193
-203
url.js
src/apis/url.js
+1
-1
en.js
src/helper/i18/locales/en.js
+2
-1
vn.js
src/helper/i18/locales/vn.js
+2
-1
ScreenNames.js
src/routers/ScreenNames.js
+2
-0
StackNavigation.js
src/routers/StackNavigation.js
+14
-2
TabNavigation.js
src/routers/TabNavigation.js
+5
-1
yarn.lock
yarn.lock
+5
-0
No files found.
ios/Invest/Info.plist
View file @
e1170e14
...
...
@@ -102,5 +102,7 @@
<
fa
ls
e
/
>
<
k
e
y
>
NSFaceIDUsageDescription
<
/k
e
y
>
<
string
>
Enabling
Face
ID
allows
you
quick
and
secure
access
to
your
account.
<
/string
>
<
k
e
y
>
NSFaceIDUsageDescription
<
/k
e
y
>
<
string
>
Enabling
Face
ID
allows
you
quick
and
secure
access
to
your
account.
<
/string
>
<
/
d
i
c
t
>
<
/plist
>
ios/Podfile.lock
0 → 100644
View file @
e1170e14
PODS:
- boost-for-react-native (1.63.0)
- BVLinearGradient (2.5.6):
- React
- CocoaAsyncSocket (7.6.5)
- CocoaLibEvent (1.0.0)
- DoubleConversion (1.1.6)
- FBLazyVector (0.62.2)
- FBReactNativeSpec (0.62.2):
- Folly (= 2018.10.22.00)
- RCTRequired (= 0.62.2)
- RCTTypeSafety (= 0.62.2)
- React-Core (= 0.62.2)
- React-jsi (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- Firebase/CoreOnly (6.25.0):
- FirebaseCore (= 6.7.1)
- Firebase/Messaging (6.25.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 4.4.1)
- FirebaseAnalyticsInterop (1.5.0)
- FirebaseCore (6.7.1):
- FirebaseCoreDiagnostics (~> 1.3)
- FirebaseCoreDiagnosticsInterop (~> 1.2)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/Logger (~> 6.5)
- FirebaseCoreDiagnostics (1.7.0):
- GoogleDataTransport (~> 7.4)
- GoogleUtilities/Environment (~> 6.7)
- GoogleUtilities/Logger (~> 6.7)
- nanopb (~> 1.30906.0)
- FirebaseCoreDiagnosticsInterop (1.2.0)
- FirebaseInstallations (1.3.0):
- FirebaseCore (~> 6.6)
- GoogleUtilities/Environment (~> 6.6)
- GoogleUtilities/UserDefaults (~> 6.6)
- PromisesObjC (~> 1.2)
- FirebaseInstanceID (4.3.4):
- FirebaseCore (~> 6.6)
- FirebaseInstallations (~> 1.0)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/UserDefaults (~> 6.5)
- FirebaseMessaging (4.4.1):
- FirebaseAnalyticsInterop (~> 1.5)
- FirebaseCore (~> 6.6)
- FirebaseInstanceID (~> 4.3)
- GoogleUtilities/AppDelegateSwizzler (~> 6.5)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/Reachability (~> 6.5)
- GoogleUtilities/UserDefaults (~> 6.5)
- Protobuf (>= 3.9.2, ~> 3.9)
- Flipper (0.33.1):
- Flipper-Folly (~> 2.1)
- Flipper-RSocket (~> 1.0)
- Flipper-DoubleConversion (1.1.7)
- Flipper-Folly (2.4.0):
- boost-for-react-native
- CocoaLibEvent (~> 1.0)
- Flipper-DoubleConversion
- Flipper-Glog
- OpenSSL-Universal (= 1.1.180)
- Flipper-Glog (0.3.6)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.2.0):
- Flipper-Folly (~> 2.4)
- FlipperKit (0.33.1):
- FlipperKit/Core (= 0.33.1)
- FlipperKit/Core (0.33.1):
- Flipper (~> 0.33.1)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- FlipperKit/CppBridge (0.33.1):
- Flipper (~> 0.33.1)
- FlipperKit/FBCxxFollyDynamicConvert (0.33.1):
- Flipper-Folly (~> 2.1)
- FlipperKit/FBDefines (0.33.1)
- FlipperKit/FKPortForwarding (0.33.1):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- FlipperKit/FlipperKitHighlightOverlay (0.33.1)
- FlipperKit/FlipperKitLayoutPlugin (0.33.1):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- FlipperKit/FlipperKitLayoutTextSearchable (0.33.1)
- FlipperKit/FlipperKitNetworkPlugin (0.33.1):
- FlipperKit/Core
- FlipperKit/FlipperKitReactPlugin (0.33.1):
- FlipperKit/Core
- FlipperKit/FlipperKitUserDefaultsPlugin (0.33.1):
- FlipperKit/Core
- FlipperKit/SKIOSNetworkPlugin (0.33.1):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- Folly (2018.10.22.00):
- boost-for-react-native
- DoubleConversion
- Folly/Default (= 2018.10.22.00)
- glog
- Folly/Default (2018.10.22.00):
- boost-for-react-native
- DoubleConversion
- glog
- glog (0.3.5)
- GoogleDataTransport (7.5.1):
- nanopb (~> 1.30906.0)
- GoogleUtilities/AppDelegateSwizzler (6.7.2):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (6.7.2):
- PromisesObjC (~> 1.2)
- GoogleUtilities/Logger (6.7.2):
- GoogleUtilities/Environment
- GoogleUtilities/Network (6.7.2):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (6.7.2)"
- GoogleUtilities/Reachability (6.7.2):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (6.7.2):
- GoogleUtilities/Logger
- libwebp (1.2.0):
- libwebp/demux (= 1.2.0)
- libwebp/mux (= 1.2.0)
- libwebp/webp (= 1.2.0)
- libwebp/demux (1.2.0):
- libwebp/webp
- libwebp/mux (1.2.0):
- libwebp/demux
- libwebp/webp (1.2.0)
- nanopb (1.30906.0):
- nanopb/decode (= 1.30906.0)
- nanopb/encode (= 1.30906.0)
- nanopb/decode (1.30906.0)
- nanopb/encode (1.30906.0)
- OpenSSL-Universal (1.1.180)
- PromisesObjC (1.2.12)
- Protobuf (3.17.0)
- RCTRequired (0.62.2)
- RCTTypeSafety (0.62.2):
- FBLazyVector (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTRequired (= 0.62.2)
- React-Core (= 0.62.2)
- RCTYouTube (2.0.1):
- React
- YoutubePlayer-in-WKWebView (~> 0.3.1)
- React (0.62.2):
- React-Core (= 0.62.2)
- React-Core/DevSupport (= 0.62.2)
- React-Core/RCTWebSocket (= 0.62.2)
- React-RCTActionSheet (= 0.62.2)
- React-RCTAnimation (= 0.62.2)
- React-RCTBlob (= 0.62.2)
- React-RCTImage (= 0.62.2)
- React-RCTLinking (= 0.62.2)
- React-RCTNetwork (= 0.62.2)
- React-RCTSettings (= 0.62.2)
- React-RCTText (= 0.62.2)
- React-RCTVibration (= 0.62.2)
- React-Core (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default (= 0.62.2)
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/CoreModulesHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/Default (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/DevSupport (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default (= 0.62.2)
- React-Core/RCTWebSocket (= 0.62.2)
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-jsinspector (= 0.62.2)
- Yoga
- React-Core/RCTActionSheetHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTAnimationHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTBlobHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTImageHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTLinkingHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTNetworkHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTSettingsHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTTextHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTVibrationHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-Core/RCTWebSocket (0.62.2):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default (= 0.62.2)
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- Yoga
- React-CoreModules (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/CoreModulesHeaders (= 0.62.2)
- React-RCTImage (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-cxxreact (0.62.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsinspector (= 0.62.2)
- React-jsi (0.62.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsi/Default (= 0.62.2)
- React-jsi/Default (0.62.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsiexecutor (0.62.2):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsinspector (0.62.2)
- react-native-netinfo (6.0.0):
- React-Core
- react-native-safe-area-context (3.1.9):
- React-Core
- react-native-webview (11.2.5):
- React-Core
- React-RCTActionSheet (0.62.2):
- React-Core/RCTActionSheetHeaders (= 0.62.2)
- React-RCTAnimation (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/RCTAnimationHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTBlob (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- React-Core/RCTBlobHeaders (= 0.62.2)
- React-Core/RCTWebSocket (= 0.62.2)
- React-jsi (= 0.62.2)
- React-RCTNetwork (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTImage (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/RCTImageHeaders (= 0.62.2)
- React-RCTNetwork (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTLinking (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- React-Core/RCTLinkingHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTNetwork (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/RCTNetworkHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTSettings (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/RCTSettingsHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTText (0.62.2):
- React-Core/RCTTextHeaders (= 0.62.2)
- React-RCTVibration (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- React-Core/RCTVibrationHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- ReactCommon/callinvoker (0.62.2):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-cxxreact (= 0.62.2)
- ReactCommon/turbomodule/core (0.62.2):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-Core (= 0.62.2)
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- ReactCommon/callinvoker (= 0.62.2)
- RNBootSplash (3.2.0):
- React-Core
- RNCAsyncStorage (1.12.1):
- React-Core
- RNCCheckbox (0.5.7):
- React-Core
- RNCClipboard (1.7.0):
- React-Core
- RNCMaskedView (0.1.10):
- React
- RNDeviceInfo (8.1.2):
- React-Core
- RNFastImage (8.3.4):
- React-Core
- SDWebImage (~> 5.8)
- SDWebImageWebPCoder (~> 0.6.1)
- RNFBApp (7.3.1):
- Firebase/CoreOnly (~> 6.25.0)
- React
- RNFBMessaging (7.9.2):
- Firebase/Messaging (~> 6.25.0)
- React-Core
- RNFBApp
- RNGestureHandler (1.10.3):
- React-Core
- RNI18n (2.0.15):
- React
- RNImageCropPicker (0.36.2):
- React-Core
- React-RCTImage
- RNImageCropPicker/QBImagePickerController (= 0.36.2)
- TOCropViewController
- RNImageCropPicker/QBImagePickerController (0.36.2):
- React-Core
- React-RCTImage
- TOCropViewController
- RNReanimated (1.13.2):
- React-Core
- RNScreens (2.18.0):
- React-Core
- RNVectorIcons (8.1.0):
- React-Core
- SDWebImage (5.11.1):
- SDWebImage/Core (= 5.11.1)
- SDWebImage/Core (5.11.1)
- SDWebImageWebPCoder (0.6.1):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.7)
- TOCropViewController (2.6.0)
- Yoga (1.14.0)
- YogaKit (1.18.1):
- Yoga (~> 1.14)
- YoutubePlayer-in-WKWebView (0.3.5)
DEPENDENCIES:
- BVLinearGradient (from `../node_modules/react-native-linear-gradient`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
- Flipper (~> 0.33.1)
- Flipper-DoubleConversion (= 1.1.7)
- Flipper-Folly (~> 2.1)
- Flipper-Glog (= 0.3.6)
- Flipper-PeerTalk (~> 0.0.4)
- Flipper-RSocket (~> 1.0)
- FlipperKit (~> 0.33.1)
- FlipperKit/Core (~> 0.33.1)
- FlipperKit/CppBridge (~> 0.33.1)
- FlipperKit/FBCxxFollyDynamicConvert (~> 0.33.1)
- FlipperKit/FBDefines (~> 0.33.1)
- FlipperKit/FKPortForwarding (~> 0.33.1)
- FlipperKit/FlipperKitHighlightOverlay (~> 0.33.1)
- FlipperKit/FlipperKitLayoutPlugin (~> 0.33.1)
- FlipperKit/FlipperKitLayoutTextSearchable (~> 0.33.1)
- FlipperKit/FlipperKitNetworkPlugin (~> 0.33.1)
- FlipperKit/FlipperKitReactPlugin (~> 0.33.1)
- FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.33.1)
- FlipperKit/SKIOSNetworkPlugin (~> 0.33.1)
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- RCTYouTube (from `../node_modules/react-native-youtube`)
- React (from `../node_modules/react-native/`)
- React-Core (from `../node_modules/react-native/`)
- React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
- React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
- React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
- React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
- React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
- React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- ReactCommon/callinvoker (from `../node_modules/react-native/ReactCommon`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- RNBootSplash (from `../node_modules/react-native-bootsplash`)
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
- "RNCCheckbox (from `../node_modules/@react-native-community/checkbox`)"
- "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)"
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFastImage (from `../node_modules/react-native-fast-image`)
- "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
- "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)"
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNI18n (from `../node_modules/react-native-i18n`)
- RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`)
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- RNVectorIcons (from `../node_modules/react-native-vector-icons`)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
trunk:
- boost-for-react-native
- CocoaAsyncSocket
- CocoaLibEvent
- Firebase
- FirebaseAnalyticsInterop
- FirebaseCore
- FirebaseCoreDiagnostics
- FirebaseCoreDiagnosticsInterop
- FirebaseInstallations
- FirebaseInstanceID
- FirebaseMessaging
- Flipper
- Flipper-DoubleConversion
- Flipper-Folly
- Flipper-Glog
- Flipper-PeerTalk
- Flipper-RSocket
- FlipperKit
- GoogleDataTransport
- GoogleUtilities
- libwebp
- nanopb
- OpenSSL-Universal
- PromisesObjC
- Protobuf
- SDWebImage
- SDWebImageWebPCoder
- TOCropViewController
- YogaKit
- YoutubePlayer-in-WKWebView
EXTERNAL SOURCES:
BVLinearGradient:
:path: "../node_modules/react-native-linear-gradient"
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
FBLazyVector:
:path: "../node_modules/react-native/Libraries/FBLazyVector"
FBReactNativeSpec:
:path: "../node_modules/react-native/Libraries/FBReactNativeSpec"
Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
RCTRequired:
:path: "../node_modules/react-native/Libraries/RCTRequired"
RCTTypeSafety:
:path: "../node_modules/react-native/Libraries/TypeSafety"
RCTYouTube:
:path: "../node_modules/react-native-youtube"
React:
:path: "../node_modules/react-native/"
React-Core:
:path: "../node_modules/react-native/"
React-CoreModules:
:path: "../node_modules/react-native/React/CoreModules"
React-cxxreact:
:path: "../node_modules/react-native/ReactCommon/cxxreact"
React-jsi:
:path: "../node_modules/react-native/ReactCommon/jsi"
React-jsiexecutor:
:path: "../node_modules/react-native/ReactCommon/jsiexecutor"
React-jsinspector:
:path: "../node_modules/react-native/ReactCommon/jsinspector"
react-native-netinfo:
:path: "../node_modules/@react-native-community/netinfo"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-RCTActionSheet:
:path: "../node_modules/react-native/Libraries/ActionSheetIOS"
React-RCTAnimation:
:path: "../node_modules/react-native/Libraries/NativeAnimation"
React-RCTBlob:
:path: "../node_modules/react-native/Libraries/Blob"
React-RCTImage:
:path: "../node_modules/react-native/Libraries/Image"
React-RCTLinking:
:path: "../node_modules/react-native/Libraries/LinkingIOS"
React-RCTNetwork:
:path: "../node_modules/react-native/Libraries/Network"
React-RCTSettings:
:path: "../node_modules/react-native/Libraries/Settings"
React-RCTText:
:path: "../node_modules/react-native/Libraries/Text"
React-RCTVibration:
:path: "../node_modules/react-native/Libraries/Vibration"
ReactCommon:
:path: "../node_modules/react-native/ReactCommon"
RNBootSplash:
:path: "../node_modules/react-native-bootsplash"
RNCAsyncStorage:
:path: "../node_modules/@react-native-community/async-storage"
RNCCheckbox:
:path: "../node_modules/@react-native-community/checkbox"
RNCClipboard:
:path: "../node_modules/@react-native-clipboard/clipboard"
RNCMaskedView:
:path: "../node_modules/@react-native-community/masked-view"
RNDeviceInfo:
:path: "../node_modules/react-native-device-info"
RNFastImage:
:path: "../node_modules/react-native-fast-image"
RNFBApp:
:path: "../node_modules/@react-native-firebase/app"
RNFBMessaging:
:path: "../node_modules/@react-native-firebase/messaging"
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
RNI18n:
:path: "../node_modules/react-native-i18n"
RNImageCropPicker:
:path: "../node_modules/react-native-image-crop-picker"
RNReanimated:
:path: "../node_modules/react-native-reanimated"
RNScreens:
:path: "../node_modules/react-native-screens"
RNVectorIcons:
:path: "../node_modules/react-native-vector-icons"
Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
FBLazyVector: 4aab18c93cd9546e4bfed752b4084585eca8b245
FBReactNativeSpec: 5465d51ccfeecb7faa12f9ae0024f2044ce4044e
Firebase: 5719b4f965f76643241a1bb8244483ff6117db39
FirebaseAnalyticsInterop: 3f86269c38ae41f47afeb43ebf32a001f58fcdae
FirebaseCore: 6023faeada5afa95a349fccafb40900e32e9ac42
FirebaseCoreDiagnostics: 770ac5958e1372ce67959ae4b4f31d8e127c3ac1
FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850
FirebaseInstallations: 6f5f680e65dc374397a483c32d1799ba822a395b
FirebaseInstanceID: cef67c4967c7cecb56ea65d8acbb4834825c587b
FirebaseMessaging: 29543feb343b09546ab3aa04d008ee8595b43c44
Flipper: 6c1f484f9a88d30ab3e272800d53688439e50f69
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
Flipper-Folly: ac90e2debaad40c347b90058feb263a80a3ba657
Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: a4adba0851ba12c1b011a320b2d99c93ce4e77f9
FlipperKit: 6dc9b8f4ef60d9e5ded7f0264db299c91f18832e
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833
GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3
libwebp: e90b9c01d99205d03b6bb8f2c8c415e5a4ef66f0
nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
Protobuf: 7327d4444215b5f18e560a97f879ff5503c4581c
RCTRequired: cec6a34b3ac8a9915c37e7e4ad3aa74726ce4035
RCTTypeSafety: 93006131180074cffa227a1075802c89a49dd4ce
RCTYouTube: 4509d59a7de050dd0c7c6cb1f427d37678d63b5c
React: 29a8b1a02bd764fb7644ef04019270849b9a7ac3
React-Core: b12bffb3f567fdf99510acb716ef1abd426e0e05
React-CoreModules: 4a9b87bbe669d6c3173c0132c3328e3b000783d0
React-cxxreact: e65f9c2ba0ac5be946f53548c1aaaee5873a8103
React-jsi: b6dc94a6a12ff98e8877287a0b7620d365201161
React-jsiexecutor: 1540d1c01bb493ae3124ed83351b1b6a155db7da
React-jsinspector: 512e560d0e985d0e8c479a54a4e5c147a9c83493
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
react-native-safe-area-context: b6e0e284002381d2ff29fa4fff42b4d8282e3c94
react-native-webview: e994346d13f4d8b240347bc5be043a860452e4b6
React-RCTActionSheet: f41ea8a811aac770e0cc6e0ad6b270c644ea8b7c
React-RCTAnimation: 49ab98b1c1ff4445148b72a3d61554138565bad0
React-RCTBlob: a332773f0ebc413a0ce85942a55b064471587a71
React-RCTImage: e70be9b9c74fe4e42d0005f42cace7981c994ac3
React-RCTLinking: c1b9739a88d56ecbec23b7f63650e44672ab2ad2
React-RCTNetwork: 73138b6f45e5a2768ad93f3d57873c2a18d14b44
React-RCTSettings: 6e3738a87e21b39a8cb08d627e68c44acf1e325a
React-RCTText: fae545b10cfdb3d247c36c56f61a94cfd6dba41d
React-RCTVibration: 4356114dbcba4ce66991096e51a66e61eda51256
ReactCommon: ed4e11d27609d571e7eee8b65548efc191116eb3
RNBootSplash: 24175aa28fe203b10c48dc34e78d946fd33c77af
RNCAsyncStorage: b03032fdbdb725bea0bd9e5ec5a7272865ae7398
RNCCheckbox: d1749e6a92178ce5dbc31e63becd1f34f0c76bbd
RNCClipboard: 245417a78ab585e0d4d83926c28907e7b2bc24bd
RNCMaskedView: 5a8ec07677aa885546a0d98da336457e2bea557f
RNDeviceInfo: 3266783bcb6aa4b0c785d6080a407f8a5fc68326
RNFastImage: d4870d58f5936111c56218dbd7fcfc18e65b58ff
RNFBApp: cd70a6c061bc485994e28c7d58ab760538850f0e
RNFBMessaging: c32b623b46dbbabf19079f801f053be75f428398
RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211
RNI18n: e2f7e76389fcc6e84f2c8733ea89b92502351fd8
RNImageCropPicker: 35a3ceb837446fa11547704709bb22b5fac6d584
RNReanimated: e03f7425cb7a38dcf1b644d680d1bfc91c3337ad
RNScreens: f0d7a2a440a8ba9f4574ca1ddb3368f473891be4
RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: d0dac55073088d24b2ac1b191a71a8f8d0adac21
TOCropViewController: 3105367e808b7d3d886a74ff59bf4804e7d3ab38
Yoga: 3ebccbdd559724312790e7742142d062476b698e
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
YoutubePlayer-in-WKWebView: cfbf46da51d7370662a695a8f351e5fa1d3e1008
PODFILE CHECKSUM: f6cddf7564cb78360d1490a138d2ad23d4135637
COCOAPODS: 1.10.1
package.json
View file @
e1170e14
...
...
@@ -24,6 +24,7 @@
"
async
"
:
"^3.2.0"
,
"
axios
"
:
"^0.21.1"
,
"
dateformat
"
:
"^4.5.1"
,
"
jsencrypt
"
:
"^3.2.0"
,
"
lodash
"
:
"^4.17.20"
,
"
moment
"
:
"^2.29.1"
,
"
react
"
:
"16.11.0"
,
...
...
src/Config/Functions.js
View file @
e1170e14
...
...
@@ -15,6 +15,22 @@ import AsyncStorage from '@react-native-community/async-storage';
import
{
DETAILNEW
,
TABNAVIGATOR
,
AUTHEN
}
from
'../routers/ScreenNames'
;
import
R
from
'../assets/R'
;
import
{
isTablet
}
from
'react-native-device-info'
;
import
{
RSA_KEY
,
MY_RSA_KEY
}
from
'./constants'
;
import
JSEncrypt
from
'jsencrypt'
;
export
const
encryptRSAString
=
(
val
)
=>
{
var
encrypt
=
new
JSEncrypt
();
encrypt
.
setPublicKey
(
RSA_KEY
.
publicKey
);
var
encrypted
=
encrypt
.
encrypt
(
val
);
return
encrypted
;
};
export
const
decryptRSAString
=
(
val
)
=>
{
var
decrypt
=
new
JSEncrypt
();
decrypt
.
setPrivateKey
(
MY_RSA_KEY
.
privateKey
);
var
uncrypted
=
decrypt
.
decrypt
(
val
);
return
uncrypted
;
};
export
const
logout
=
(
navigation
)
=>
{
AsyncStorage
.
clear
();
...
...
src/Config/constants.js
View file @
e1170e14
...
...
@@ -10,4 +10,81 @@ export const RadioBuySaleEN = [
export
const
OTP_TYPE
=
{
CUSTOMER_REQUEST_DEPOSIT
:
'CUSTOMER_REQUEST_DEPOSIT'
,
REQUEST_WITHDRAW
:
'REQUEST_WITHDRAW'
,
}
};
export
const
RSA_KEY
=
{
privateKey
:
`-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAriPaOfp9zSDIsde2OJPU3GKlV2EXqhEGxnmO6NHnz3SCJiTA
cTMIbckGKYsmsPoZyAmdP4irA+zMUA16vixXc1+R4whR1qVcXRQ2ZL/QOAtlgBUu
9rF3/+dexv3PW/2Di1uBdGn7khj3Mrs1PKWY9FEtb+NdgTF61RKWnhE6ktoKgukI
1XN5Xvt+5QqwOpPnDcByWyrw7J5N8Jc9bsP+GC7SzURE00nuw1uazrBvVpgcgyiA
yHj3SFJIF89MZYuulJxi9GYjv6ov3kcW5o14kNPExNEgPtlTVyoe1qub/xknSm12
GOTd5V8yvjgJ8ipjHxC7CvEEhG7AT5sJ/3pOywIDAQABAoIBAQCFQT4u+7XkkF/D
Z1Qzezx54KqxcMTRCPJsUny/QFDo+TjWw2zXsruSdy/V/nt/FgNAhcrk4UosWLoH
0CjK+dd5m/phBu7JGATT3TG6auWE3YOwPYWQlUFEe+KU14gj1p0guMcZNDikFaKk
GYmlfPrMiooAgrX8tMZP4keLcZem4xvclhOF49NOaQgbeydBGf33vFUN86qMG5V8
dUy80HkZ55TNXvY6GWpfKw7nOT7LjY1dNSGykNyMVoiLIQ7rMupzXVsu40Y6jajK
7S/pWZnDLPhMMepakFVzgy/D0ixwfrfRQN1PMFAS84r1n8CpA0rjm9xLyc7sLpEp
PEGbY9GxAoGBANUlhfK2e+kpoE40q3F1o2dwAglC+ombj8+VhJc7jnf8YLYcp4mG
+8RSqLueobR4UnFInkFRuN8VklkMISMHD+YuUhamzBkGnllA6THsgafqWOi1vO1A
9sm/UhHPnONm7tp5Ogxh3LZHSLStl8CaYazHkTt6IoHIkdwCWG/BJChXAoGBANEm
sh3ZgXxe0zBB7kuPcjk5VUU3oVjpkERYjBAsOD1vtmRgD74Ev+qMCDjIosalUo8B
jxpatmup+CHB3lwbvEmTy1y1Vjm85U++9KmDvhCjgVhh97uPYAqMapmTKTkoWKYm
OzCKzoltVHGAX9AXrfwRM+Nfz7Y1pJHvAACildStAoGBAJba5+LQpQJxI7Q2MuEq
kWw0KjzD2u5p227gM+eVj0/8n7ZEsY70qlxY5HNl4q0IO9FRxDAW1vGNIvdDTnCs
HuSbBB5kDy/nL0ucVW+wJFPj2OlbN0v0HrbLYhqZBkEsKQEXq6331W5tJVg7RJxc
p6TR2khuON4CRrmgL1dpK14hAoGBAJvb4EQKQEo0R+DgYPoB7bbjGL46FIyzkQS9
j7LFoSt3Qk5On6yU0YexzrayHUs3C+zx1nhnPSXCRdyyIkg1ivyxnIx7vcPNFn10
6dIhENRJZCw+5WPqFkIGHbJQThoADP/T4avs5LjYtmLWrY/e9ZKwJyC714gLNZZi
qnfOsSUJAoGAX9CAHHCz/X3GJ+HGYm5mu3ks2hCw9umJZkabpKxnWWhpgPrqysHF
wkSh32IW6zQqgN/H7Q2sndqb5NM88rHowxPyIL1sSnmpXPNmjUhjxP74stu0EcSM
KYdYznyvql2HvuWSfOHzOdbA2umFaL09lNSDBdGiaK4ji8oleyhlWPU=
-----END RSA PRIVATE KEY-----`
,
publicKey
:
`-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAriPaOfp9zSDIsde2OJPU
3GKlV2EXqhEGxnmO6NHnz3SCJiTAcTMIbckGKYsmsPoZyAmdP4irA+zMUA16vixX
c1+R4whR1qVcXRQ2ZL/QOAtlgBUu9rF3/+dexv3PW/2Di1uBdGn7khj3Mrs1PKWY
9FEtb+NdgTF61RKWnhE6ktoKgukI1XN5Xvt+5QqwOpPnDcByWyrw7J5N8Jc9bsP+
GC7SzURE00nuw1uazrBvVpgcgyiAyHj3SFJIF89MZYuulJxi9GYjv6ov3kcW5o14
kNPExNEgPtlTVyoe1qub/xknSm12GOTd5V8yvjgJ8ipjHxC7CvEEhG7AT5sJ/3pO
ywIDAQAB
-----END PUBLIC KEY-----`
,
};
export
const
MY_RSA_KEY
=
{
privateKey
:
`-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQBof1CpRwpsn3Nk6a831N2wc9S7Vx0hKUeiXX8yOYjBptFIEuJl
ssff7B6rRLKj/7oYKAzpXtNrNC4qqkReRLOjFQ4/gvln2h6eFRleZS0jAyYh8ukN
+yMIyT8c0YJb4jjzAjwQ7T62t8SyIVHKiMRQ0bZJAeXGvrx1t8Jwj0H+M5tu/gdt
5yvj+lMqRxxyl56WCFER3sKo/eB5dj+in31cKSdU2VW+xjXQM1jcL3k7KTfnhpq2
rIkbeYUs3qAoZ4Xn+6w1ZSf8Y2GONpnrOnQt1uF/A5ZNV3IHgwa/Y4jxF+KHcvlv
AyyOiDTVZAqn2/+JC+3z219OZCNet+VTmozzAgMBAAECggEAZmAE2DK/Jbf5R24h
uWMUZaC1U2x/H1Pf2FQdH0l6j64s7p2Bq/zBEMG1Mjm1gjIxUSU7sQ6zth2C9U2m
eWx5SVaBhPt9+J6azGkDV5Vr6RdWrn/aj1Xw9tSivksLmZVCEeGokzS68iuLyrAV
/4SKQFuUaGYxhMqsu+9x0PCoyK7nE35tLyYN9RIr9mqMBQJKeWA+4iNBZ+FPXNb4
/5p9mG7BupknXno0+3g1pf3n5hhTxCvZmIGNxkvgZP6XI8XAa6GBFSnix4q7DAEy
ODT0fq6cej7zLGjy1pjjj0681mJp+8IAOC1LrtsGCFaHqRSuYj36zsRkmz4bh5Fk
9MmNEQKBgQC73TIfG/wJKad9C+gb4Dj/FSL/5VTucGOH6/jDcVStwIrqcwq0XdwG
WplsRktPUoRt9I8xVggf3ToFL4bDutrpr5RnVAJSTX+BbnY/BWvsbcwWiDcVRL/u
78fFtjr+0Wq8vbVbvoJkT+xQ6vhNIxDklYWm+i5AaVWtap8oSwqqBwKBgQCOZa86
phESuAbF6ZZDOyESPVGDBR7nKeEjF5ingb9PqfyInesLBiUHt3LUW9LuffRHDnCG
11wI8ho/xNM/UvuzLERKcZ83cVqqsWzvR0nNfLXgpJHe/2epPmRhi91NF3lH9RbX
Q3Cmk4puUh3pK/lRlGnH4J25iNKP/bGtEW96tQKBgGKic1NkFQMWjKqZ2sbwBdzf
0x154grClW9i1JyA303OvuDzf9ZNRV1MqirwCVBfacp1Uc08d02LkI/ycRZI//Eb
z5YkxIdDy0NApPLXvN9IkpPt9sXC7+banA/Ras4pU5o/HH5L2xgh4lhl1fJiC9eI
LcEKr8f/xg0j4uZ75+B3AoGAbzGoK7wSCPP7FgDZfZZmtL99LzqIbyqcy7JZWjRP
F/49XNE0AV/C+sudt4YcqG9imToFVMZG8BVduf4Ql5pNQhSHHzqqgbjafAAgeJjK
YNPJkqnv3prCb75w1FtLbC+wXShdtarMBMehiZRGFxZnkfS6xYH4qDDXe+k3HVZI
HyECgYEAlRxGofeb/68W1XEK1rDtFtMHaQCTaKLb+vcLy/1FaHUtnFao4N393Ho8
KCJPQ/nJpO/Jz0ukvH5PKif0E3b6yaFrt94eqI7ezfxnjzJpEbh2Q8DeIRvpNWgC
lKn8Fz6kDKkofF7T5y98BqgnRSihewuhvgNM4yS6e9cU1cXesjs=
-----END RSA PRIVATE KEY-----`
,
publicKey
:
`-----BEGIN PUBLIC KEY-----
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBof1CpRwpsn3Nk6a831N2w
c9S7Vx0hKUeiXX8yOYjBptFIEuJlssff7B6rRLKj/7oYKAzpXtNrNC4qqkReRLOj
FQ4/gvln2h6eFRleZS0jAyYh8ukN+yMIyT8c0YJb4jjzAjwQ7T62t8SyIVHKiMRQ
0bZJAeXGvrx1t8Jwj0H+M5tu/gdt5yvj+lMqRxxyl56WCFER3sKo/eB5dj+in31c
KSdU2VW+xjXQM1jcL3k7KTfnhpq2rIkbeYUs3qAoZ4Xn+6w1ZSf8Y2GONpnrOnQt
1uF/A5ZNV3IHgwa/Y4jxF+KHcvlvAyyOiDTVZAqn2/+JC+3z219OZCNet+VTmozz
AgMBAAE=
-----END PUBLIC KEY-----`
,
};
src/Config/private.key
0 → 100644
View file @
e1170e14
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQBof1CpRwpsn3Nk6a831N2wc9S7Vx0hKUeiXX8yOYjBptFIEuJl
ssff7B6rRLKj/7oYKAzpXtNrNC4qqkReRLOjFQ4/gvln2h6eFRleZS0jAyYh8ukN
+yMIyT8c0YJb4jjzAjwQ7T62t8SyIVHKiMRQ0bZJAeXGvrx1t8Jwj0H+M5tu/gdt
5yvj+lMqRxxyl56WCFER3sKo/eB5dj+in31cKSdU2VW+xjXQM1jcL3k7KTfnhpq2
rIkbeYUs3qAoZ4Xn+6w1ZSf8Y2GONpnrOnQt1uF/A5ZNV3IHgwa/Y4jxF+KHcvlv
AyyOiDTVZAqn2/+JC+3z219OZCNet+VTmozzAgMBAAECggEAZmAE2DK/Jbf5R24h
uWMUZaC1U2x/H1Pf2FQdH0l6j64s7p2Bq/zBEMG1Mjm1gjIxUSU7sQ6zth2C9U2m
eWx5SVaBhPt9+J6azGkDV5Vr6RdWrn/aj1Xw9tSivksLmZVCEeGokzS68iuLyrAV
/4SKQFuUaGYxhMqsu+9x0PCoyK7nE35tLyYN9RIr9mqMBQJKeWA+4iNBZ+FPXNb4
/5p9mG7BupknXno0+3g1pf3n5hhTxCvZmIGNxkvgZP6XI8XAa6GBFSnix4q7DAEy
ODT0fq6cej7zLGjy1pjjj0681mJp+8IAOC1LrtsGCFaHqRSuYj36zsRkmz4bh5Fk
9MmNEQKBgQC73TIfG/wJKad9C+gb4Dj/FSL/5VTucGOH6/jDcVStwIrqcwq0XdwG
WplsRktPUoRt9I8xVggf3ToFL4bDutrpr5RnVAJSTX+BbnY/BWvsbcwWiDcVRL/u
78fFtjr+0Wq8vbVbvoJkT+xQ6vhNIxDklYWm+i5AaVWtap8oSwqqBwKBgQCOZa86
phESuAbF6ZZDOyESPVGDBR7nKeEjF5ingb9PqfyInesLBiUHt3LUW9LuffRHDnCG
11wI8ho/xNM/UvuzLERKcZ83cVqqsWzvR0nNfLXgpJHe/2epPmRhi91NF3lH9RbX
Q3Cmk4puUh3pK/lRlGnH4J25iNKP/bGtEW96tQKBgGKic1NkFQMWjKqZ2sbwBdzf
0x154grClW9i1JyA303OvuDzf9ZNRV1MqirwCVBfacp1Uc08d02LkI/ycRZI//Eb
z5YkxIdDy0NApPLXvN9IkpPt9sXC7+banA/Ras4pU5o/HH5L2xgh4lhl1fJiC9eI
LcEKr8f/xg0j4uZ75+B3AoGAbzGoK7wSCPP7FgDZfZZmtL99LzqIbyqcy7JZWjRP
F/49XNE0AV/C+sudt4YcqG9imToFVMZG8BVduf4Ql5pNQhSHHzqqgbjafAAgeJjK
YNPJkqnv3prCb75w1FtLbC+wXShdtarMBMehiZRGFxZnkfS6xYH4qDDXe+k3HVZI
HyECgYEAlRxGofeb/68W1XEK1rDtFtMHaQCTaKLb+vcLy/1FaHUtnFao4N393Ho8
KCJPQ/nJpO/Jz0ukvH5PKif0E3b6yaFrt94eqI7ezfxnjzJpEbh2Q8DeIRvpNWgC
lKn8Fz6kDKkofF7T5y98BqgnRSihewuhvgNM4yS6e9cU1cXesjs=
-----END RSA PRIVATE KEY-----
\ No newline at end of file
src/Config/public.key
0 → 100644
View file @
e1170e14
-----BEGIN PUBLIC KEY-----
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBof1CpRwpsn3Nk6a831N2w
c9S7Vx0hKUeiXX8yOYjBptFIEuJlssff7B6rRLKj/7oYKAzpXtNrNC4qqkReRLOj
FQ4/gvln2h6eFRleZS0jAyYh8ukN+yMIyT8c0YJb4jjzAjwQ7T62t8SyIVHKiMRQ
0bZJAeXGvrx1t8Jwj0H+M5tu/gdt5yvj+lMqRxxyl56WCFER3sKo/eB5dj+in31c
KSdU2VW+xjXQM1jcL3k7KTfnhpq2rIkbeYUs3qAoZ4Xn+6w1ZSf8Y2GONpnrOnQt
1uF/A5ZNV3IHgwa/Y4jxF+KHcvlvAyyOiDTVZAqn2/+JC+3z219OZCNet+VTmozz
AgMBAAE=
-----END PUBLIC KEY-----
\ No newline at end of file
src/RootView.js
View file @
e1170e14
import
React
,
{
useEffect
,
useRef
}
from
'react'
;
import
{
View
}
from
'react-native'
;
import
{
Alert
,
View
}
from
'react-native'
;
import
{
connect
}
from
'react-redux'
;
import
StackNavigation
from
'./routers/StackNavigation'
;
...
...
@@ -10,12 +10,14 @@ import NoInternetComponent from './components/NoInternet';
import
DropdownAlert
from
'react-native-dropdownalert'
;
import
DeviceInfo
from
'react-native-device-info'
;
import
R
from
'./assets/R'
;
import
{
WIDTHXD
,
HEIGHTXD
}
from
'./Config/Functions'
;
import
{
WIDTHXD
,
HEIGHTXD
,
decryptRSAString
}
from
'./Config/Functions'
;
import
DropdownManager
from
'./components/DropdownAlert/DropdownManager'
;
import
AsyncStorage
from
'@react-native-community/async-storage'
;
import
KEY
from
'./assets/AsynStorage'
;
import
I18n
,
{
setLocation
}
from
'./helper/i18/i18n'
;
import
{
changeLanguage
}
from
'./actions/language'
;
import
{
RSA_KEY
,
MY_RSA_KEY
}
from
'./Config/constants'
;
import
JSEncrypt
from
'jsencrypt'
;
enableScreens
();
...
...
@@ -25,6 +27,7 @@ const RootView = (props) => {
dropDownAlertRef
.
current
,
dropDownAlertLongTimeRef
.
current
,
);
setInitLanguage
();
},
[]);
...
...
@@ -35,6 +38,7 @@ const RootView = (props) => {
if
(
laguage
)
props
.
changeLanguage
(
laguage
);
setLocation
(
I18n
,
laguage
);
};
return
(
<>
<
View
style
=
{{
flex
:
1
}}
>
...
...
src/Screens/Account/PacrtCQG/FeePro.js
View file @
e1170e14
...
...
@@ -90,7 +90,8 @@ const FeePro = (props) => {
return
(
<
View
>
<
Text
style
=
{
styles
.
txtTitle
}
>
{
title
}
<
/Text
>
{
title
?
<
Text
style
=
{
styles
.
txtTitle
}
>
{
title
}
<
/Text> : null
}
<
View
style
=
{
styles
.
wrap
}
>
{
listItem
.
map
((
e
)
=>
(
<
View
key
=
{
e
.
id
+
'a'
}
style
=
{
styles
.
item
}
>
...
...
src/Screens/Account/PacrtCQG/PacketCQG.js
View file @
e1170e14
...
...
@@ -129,12 +129,15 @@ const PacketCQG = (props) => {
};
const
getData
=
async
()
=>
{
const
res
=
await
getListPacketCQG
({});
console
.
log
(
res
);
if
((
res
.
data
.
code
=
200
&&
res
.
data
.
data
))
{
setFee
(
res
.
data
.
data
.
fee
);
setFeeConnect
(
res
.
data
.
data
.
fee_connect
);
setFeeNonPro
(
res
.
data
.
data
.
fee_pro
);
setFeePro
(
res
.
data
.
data
.
fee_non_pro
);
setOperrating
(
res
.
data
.
data
.
fee_operating
);
if
(
res
.
data
.
data
.
fee
)
setFee
(
res
.
data
.
data
.
fee
);
if
(
res
.
data
.
data
.
fee_connect
)
setFeeConnect
(
res
.
data
.
data
.
fee_connect
);
if
(
res
.
data
.
data
.
fee_pro
)
setFeeNonPro
(
res
.
data
.
data
.
fee_pro
);
if
(
res
.
data
.
data
.
fee_non_pro
)
setFeePro
(
res
.
data
.
data
.
fee_non_pro
);
if
(
res
.
data
.
data
.
fee_operating
)
setOperrating
(
res
.
data
.
data
.
fee_operating
);
if
(
res
.
data
.
package_register
.
length
>
0
)
{
setListData
(
res
.
data
.
package_register
);
...
...
@@ -159,26 +162,31 @@ const PacketCQG = (props) => {
<
View
style
=
{
styles
.
container
}
>
<
AppText
i18nKey
=
{
'Note_cqg'
}
/
>
<
ContainerTop
fee
=
{
fee
}
/
>
{
feeOperating
.
data
.
length
>
0
?
(
<
WrapNomarl
onRemovePacket
=
{
onRemovePacket
}
onChoosePacket
=
{
onChoosePacket
}
data
=
{
feeOperating
}
listRegister
=
{
listRegister
}
/
>
)
:
null
}
{
feeConnect
.
data
.
length
>
0
?
(
<
WrapNomarl
onRemovePacket
=
{
onRemovePacket
}
onChoosePacket
=
{
onChoosePacket
}
data
=
{
feeConnect
}
listRegister
=
{
listRegister
}
/
>
)
:
null
}
<
WrapNomarl
onRemovePacket
=
{
onRemovePacket
}
onChoosePacket
=
{
onChoosePacket
}
data
=
{
feeOperating
}
listRegister
=
{
listRegister
}
/
>
<
WrapNomarl
onRemovePacket
=
{
onRemovePacket
}
onChoosePacket
=
{
onChoosePacket
}
data
=
{
feeConnect
}
listRegister
=
{
listRegister
}
/
>
<
WrapNomarl
onRemovePacket
=
{
onRemovePacket
}
onChoosePacket
=
{
onChoosePacket
}
data
=
{
feeNonPro
}
listRegister
=
{
listRegister
}
/
>
{
feeNonPro
.
data
.
length
>
0
?
(
<
WrapNomarl
onRemovePacket
=
{
onRemovePacket
}
onChoosePacket
=
{
onChoosePacket
}
data
=
{
feeNonPro
}
listRegister
=
{
listRegister
}
/
>
)
:
null
}
<
FeePro
onRemovePacket
=
{
onRemovePacket
}
...
...
src/Screens/Account/PacrtCQG/WrapNomarl.js
View file @
e1170e14
...
...
@@ -44,7 +44,8 @@ const ContainerTop = (props) => {
return
(
<
View
>
<
Text
style
=
{
styles
.
txtTitle
}
>
{
title
}
<
/Text
>
{
title
?
<
Text
style
=
{
styles
.
txtTitle
}
>
{
title
}
<
/Text> : null
}
<
View
style
=
{
styles
.
wrap
}
>
{
listItem
.
map
((
e
)
=>
(
<
View
key
=
{
e
.
id
+
'a'
}
style
=
{
styles
.
item
}
>
...
...
src/Screens/Action/Deposit/ChooseMethod.js
View file @
e1170e14
...
...
@@ -54,17 +54,31 @@ const MethodPayView = (props) => {
<
View
style
=
{{
flex
:
1
}}
>
<
HeaderBack
title
=
{
'SelectPaymentMethod'
}
/
>
<
View
style
=
{{
flex
:
1
}}
>
<
FlatList
keyExtractor
=
{(
item
)
=>
item
.
id
}
showsVerticalScrollIndicator
=
{
false
}
numColumns
=
{
2
}
columnWrapperStyle
=
{{
marginHorizontal
:
20
,
justifyContent
:
'space-between'
,
}}
data
=
{
data
}
renderItem
=
{({
item
})
=>
<
Item
userId
=
{
props
.
user
.
uid
}
item
=
{
item
}
/>
}
/>
{
data
.
length
==
0
?
(
<
View
style
=
{{
justifyContent
:
'center'
,
alignItems
:
'center'
,
flex
:
1
}}
>
<
AppText
i18nKey
=
{
'NoData'
}
style
=
{{
fontSize
:
18
,
fontWeight
:
'bold'
,
}}
><
/AppText
>
<
/View
>
)
:
(
<
FlatList
keyExtractor
=
{(
item
)
=>
item
.
id
}
showsVerticalScrollIndicator
=
{
false
}
numColumns
=
{
2
}
columnWrapperStyle
=
{{
marginHorizontal
:
20
,
justifyContent
:
'space-between'
,
}}
data
=
{
data
}
renderItem
=
{({
item
})
=>
(
<
Item
userId
=
{
props
.
user
.
uid
}
item
=
{
item
}
/
>
)}
/
>
)}
<
/View
>
<
/View
>
);
...
...
src/Screens/Action/Wallet/WalletDeposit.js
View file @
e1170e14
import
React
,
{
useState
}
from
'react'
;
import
{
DeviceEventEmitter
,
Dimensions
,
Keyboard
,
KeyboardAvoidingView
,
Platform
,
ScrollView
,
StyleSheet
,
Text
,
TouchableOpacity
,
TouchableWithoutFeedback
,
View
,
DeviceEventEmitter
,
Dimensions
,
Keyboard
,
KeyboardAvoidingView
,
Platform
,
ScrollView
,
StyleSheet
,
Text
,
TouchableOpacity
,
TouchableWithoutFeedback
,
View
,
}
from
'react-native'
;
import
R
from
'../../../assets/R'
;
import
HeaderBack
from
'../../../components/Header/HeaderBack'
;
import
TextMulti
from
'../../../components/Input/TextMulti'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
import
{
checkFormatArray
,
getFontXD
,
HEIGHTXD
,
toPriceVnd
,
WIDTHXD
}
from
'../../../Config/Functions'
;
import
{
checkFormatArray
,
getFontXD
,
HEIGHTXD
,
toPriceVnd
,
WIDTHXD
,
}
from
'../../../Config/Functions'
;
import
{
connect
}
from
'react-redux'
;
import
{
hideLoading
,
showLoading
}
from
'../../../actions/loadingAction'
;
import
TextMoney
from
'../../../components/Input/InputMoney'
;
import
I18n
from
'../../../helper/i18/i18n'
;
import
{
ENTER_PASSWORD_SMART_OTP
,
SETTINGOTP
,
SMARTOTP
}
from
'../../../routers/ScreenNames'
;
import
{
ENTER_PASSWORD_SMART_OTP
,
SETTINGOTP
,
SMARTOTP
,
CHANGESMARTOTP
,
}
from
'../../../routers/ScreenNames'
;
import
{
showAlert
,
TYPE
}
from
'../../../components/DropdownAlert'
;
import
{
confirmAlert
}
from
'../../../components/Aleart'
;
const
WalletDeposit
=
(
props
)
=>
{
const
[
amount
,
setAmount
]
=
useState
();
const
[
notes
,
setNotes
]
=
useState
();
const
navigate
=
useNavigation
();
const
[
amount
,
setAmount
]
=
useState
();
const
[
notes
,
setNotes
]
=
useState
();
const
navigate
=
useNavigation
();
const
onClick
=
async
()
=>
{
const
titles
=
[
I18n
.
t
(
'AmountOfMoney'
).
toLowerCase
(),
I18n
.
t
(
'Note'
).
toLowerCase
(),
];
const
onClick
=
async
()
=>
{
const
titles
=
[
I18n
.
t
(
'AmountOfMoney'
).
toLowerCase
(),
I18n
.
t
(
'Note'
).
toLowerCase
(),
];
const
index
=
checkFormatArray
([
amount
]);
if
(
index
===
true
)
{
if
(
!
props
.
user
.
smart_otp_status
)
{
confirmAlert
(
`
${
I18n
.
t
(
'YouHaveNotSettingSmartOTP'
)}
`
,
()
=>
{
navigate
.
navigate
(
SETTINGOTP
,
{
isFromTransaction
:
true
,
setupSmartOTPSuccess
:
()
=>
{
navigate
.
goBack
()
navigate
.
goBack
()
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
onGoToSmartOTP
:
(
pinCode
,
otp
)
=>
onGoToSmartOTP
(
pinCode
,
otp
),
});
DeviceEventEmitter
.
emit
(
'reloadUserInfo'
);
},
});
},
`
${
I18n
.
t
(
'setting'
)}
`
,
);
}
else
{
const
index
=
checkFormatArray
([
amount
]);
if
(
index
===
true
)
{
if
(
!
props
.
user
.
smart_otp_status
)
{
confirmAlert
(
`
${
I18n
.
t
(
'YouHaveNotSettingSmartOTP'
)}
`
,
()
=>
{
navigate
.
navigate
(
CHANGESMARTOTP
,
{
TYPE
:
'CREATE_SMART_OTP'
,
old_password
:
null
,
isFromTransaction
:
true
,
setupSmartOTPSuccess
:
()
=>
{
navigate
.
goBack
();
navigate
.
goBack
();
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
onGoToSmartOTP
:
(
pinCode
,
otp
)
=>
onGoToSmartOTP
(
pinCode
,
otp
),
onGoToSmartOTP
:
(
pinCode
,
otp
)
=>
onGoToSmartOTP
(
pinCode
,
otp
),
});
}
}
else
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'Please_fill_in'
)
+
titles
[
index
],
);
}
};
const
onGoToSmartOTP
=
(
pinCode
,
otp
)
=>
{
navigate
.
goBack
();
navigate
.
navigate
(
SMARTOTP
,
{
type
:
'DEPOSIT'
,
amount
,
notes
,
pinCode
,
otp
,
DeviceEventEmitter
.
emit
(
'reloadUserInfo'
);
},
});
},
`
${
I18n
.
t
(
'setting'
)}
`
,
);
}
else
{
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
onGoToSmartOTP
:
(
pinCode
,
otp
)
=>
onGoToSmartOTP
(
pinCode
,
otp
),
});
};
return
(
<
KeyboardAvoidingView
behavior
=
{
Platform
.
Os
===
'ios'
?
'padding'
:
'height'
}
style
=
{{
flex
:
1
,
backgroundColor
:
'white'
}}
keyboardVerticalOffset
=
{
-
50
}
>
<
TouchableWithoutFeedback
onPress
=
{
Keyboard
.
dismiss
}
>
<
View
style
=
{{
flex
:
1
}}
>
<
HeaderBack
title
=
{
'InvestmentDeposit'
}
/
>
<
ScrollView
showsVerticalScrollIndicator
=
{
false
}
>
<
View
style
=
{
styles
.
container
}
>
<
View
style
=
{
styles
.
wrapTop
}
>
<
View
style
=
{
styles
.
itemTop
}
>
<
Text
style
=
{
styles
.
txtTitle
}
>
{
I18n
.
t
(
'Wallet'
)}
<
/Text
>
<
Text
style
=
{
styles
.
txtMoney
}
>
{
' '
}
{
props
.
user
.
current_money
!=
0
?
toPriceVnd
(
props
.
user
.
current_money
)
:
0
}{
' '
}
<
/Text
>
<
/View
>
<
View
style
=
{{
width
:
1
,
backgroundColor
:
'#DBDBDB'
}}
/
>
<
View
style
=
{
styles
.
itemTop
}
>
<
Text
style
=
{
styles
.
txtTitle
}
>
CQG
<
/Text
>
<
Text
style
=
{
styles
.
txtMoney
}
>
{
' '
}
{
props
.
user
.
current_cqg_money
!=
0
?
toPriceVnd
(
props
.
user
.
current_cqg_money
)
:
0
}{
' '
}
đ
<
/Text
>
<
/View
>
<
/View
>
<
View
style
=
{
styles
.
wrapBody
}
>
{
/* <TextDisable value={'10010101'} title={'Số tài khoản CQG'} /> */
}
<
TextMoney
onChangeText
=
{(
val
)
=>
setAmount
(
val
)}
title
=
{
I18n
.
t
(
'AmountOfMoney'
)}
value
=
{
amount
}
/
>
<
TextMulti
onChangeText
=
{(
val
)
=>
setNotes
(
val
)}
title
=
{
I18n
.
t
(
'Note'
)}
placeholder
=
{
I18n
.
t
(
'noteWithdrawMoney'
)}
/
>
<
/View
>
<
/View
>
<
/ScrollView
>
<
View
style
=
{{
paddingVertical
:
10
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
}}
>
<
TouchableOpacity
onPress
=
{
onClick
}
style
=
{
styles
.
btnSend
}
>
<
Text
style
=
{
styles
.
txtSend
}
>
{
I18n
.
t
(
'Deposit'
)}
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
}
}
else
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'Please_fill_in'
)
+
titles
[
index
],
);
}
};
const
onGoToSmartOTP
=
(
pinCode
,
otp
)
=>
{
navigate
.
goBack
();
navigate
.
navigate
(
SMARTOTP
,
{
type
:
'DEPOSIT'
,
amount
,
notes
,
pinCode
,
otp
,
});
};
return
(
<
KeyboardAvoidingView
behavior
=
{
Platform
.
Os
===
'ios'
?
'padding'
:
'height'
}
style
=
{{
flex
:
1
,
backgroundColor
:
'white'
}}
keyboardVerticalOffset
=
{
-
50
}
>
<
TouchableWithoutFeedback
onPress
=
{
Keyboard
.
dismiss
}
>
<
View
style
=
{{
flex
:
1
}}
>
<
HeaderBack
title
=
{
'InvestmentDeposit'
}
/
>
<
ScrollView
showsVerticalScrollIndicator
=
{
false
}
>
<
View
style
=
{
styles
.
container
}
>
<
View
style
=
{
styles
.
wrapTop
}
>
<
View
style
=
{
styles
.
itemTop
}
>
<
Text
style
=
{
styles
.
txtTitle
}
>
{
I18n
.
t
(
'Wallet'
)}
<
/Text
>
<
Text
style
=
{
styles
.
txtMoney
}
>
{
' '
}
{
props
.
user
.
current_money
!=
0
?
toPriceVnd
(
props
.
user
.
current_money
)
:
0
}{
' '
}
<
/Text
>
<
/View
>
<
View
style
=
{{
width
:
1
,
backgroundColor
:
'#DBDBDB'
}}
/
>
<
View
style
=
{
styles
.
itemTop
}
>
<
Text
style
=
{
styles
.
txtTitle
}
>
CQG
<
/Text
>
<
Text
style
=
{
styles
.
txtMoney
}
>
{
' '
}
{
props
.
user
.
current_cqg_money
!=
0
?
toPriceVnd
(
props
.
user
.
current_cqg_money
)
:
0
}{
' '
}
đ
<
/Text
>
<
/View
>
<
/TouchableWithoutFeedback
>
<
/KeyboardAvoidingView
>
);
<
/View
>
<
View
style
=
{
styles
.
wrapBody
}
>
{
/* <TextDisable value={'10010101'} title={'Số tài khoản CQG'} /> */
}
<
TextMoney
onChangeText
=
{(
val
)
=>
setAmount
(
val
)}
title
=
{
I18n
.
t
(
'AmountOfMoney'
)}
value
=
{
amount
}
/
>
<
TextMulti
onChangeText
=
{(
val
)
=>
setNotes
(
val
)}
title
=
{
I18n
.
t
(
'Note'
)}
placeholder
=
{
I18n
.
t
(
'noteWithdrawMoney'
)}
/
>
<
/View
>
<
/View
>
<
/ScrollView
>
<
View
style
=
{{
paddingVertical
:
10
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
}}
>
<
TouchableOpacity
onPress
=
{
onClick
}
style
=
{
styles
.
btnSend
}
>
<
Text
style
=
{
styles
.
txtSend
}
>
{
I18n
.
t
(
'Deposit'
)}
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
<
/View
>
<
/TouchableWithoutFeedback
>
<
/KeyboardAvoidingView
>
);
};
const
styles
=
StyleSheet
.
create
({
container
:
{
backgroundColor
:
R
.
colors
.
white
,
marginVertical
:
10
,
shadowColor
:
'#AFA9A9'
,
shadowOffset
:
{
width
:
0
,
height
:
1
,
},
shadowOpacity
:
0.25
,
shadowRadius
:
1.84
,
elevation
:
1
,
},
wrapTop
:
{
flexDirection
:
'row'
,
borderBottomWidth
:
1
,
borderBottomColor
:
'#DBDBDB'
,
},
itemTop
:
{
flex
:
1
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
paddingVertical
:
20
,
},
wrapBody
:
{
paddingHorizontal
:
10
,
paddingVertical
:
20
,
},
txtMoney
:
{
color
:
'#1C6AF6'
,
fontSize
:
getFontXD
(
52
),
},
txtTitle
:
{
color
:
R
.
colors
.
black
,
fontSize
:
getFontXD
(
42
),
},
txtSend
:
{
fontSize
:
getFontXD
(
42
),
color
:
R
.
colors
.
white
,
fontWeight
:
'bold'
,
},
btnSend
:
{
width
:
WIDTHXD
(
400
),
height
:
HEIGHTXD
(
100
),
backgroundColor
:
R
.
colors
.
main
,
borderRadius
:
10
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
container
:
{
backgroundColor
:
R
.
colors
.
white
,
marginVertical
:
10
,
shadowColor
:
'#AFA9A9'
,
shadowOffset
:
{
width
:
0
,
height
:
1
,
},
shadowOpacity
:
0.25
,
shadowRadius
:
1.84
,
elevation
:
1
,
},
wrapTop
:
{
flexDirection
:
'row'
,
borderBottomWidth
:
1
,
borderBottomColor
:
'#DBDBDB'
,
},
itemTop
:
{
flex
:
1
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
paddingVertical
:
20
,
},
wrapBody
:
{
paddingHorizontal
:
10
,
paddingVertical
:
20
,
},
txtMoney
:
{
color
:
'#1C6AF6'
,
fontSize
:
getFontXD
(
52
),
},
txtTitle
:
{
color
:
R
.
colors
.
black
,
fontSize
:
getFontXD
(
42
),
},
txtSend
:
{
fontSize
:
getFontXD
(
42
),
color
:
R
.
colors
.
white
,
fontWeight
:
'bold'
,
},
btnSend
:
{
width
:
WIDTHXD
(
400
),
height
:
HEIGHTXD
(
100
),
backgroundColor
:
R
.
colors
.
main
,
borderRadius
:
10
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
},
});
const
mapStateToProps
=
(
state
)
=>
{
return
{
user
:
state
.
userReducer
,
};
return
{
user
:
state
.
userReducer
,
};
};
export
default
connect
(
mapStateToProps
,
{
showLoading
,
hideLoading
})(
WalletDeposit
,
WalletDeposit
,
);
src/Screens/Action/Wallet/WalletWithdraw.js
View file @
e1170e14
...
...
@@ -9,7 +9,8 @@ import {
TouchableWithoutFeedback
,
Keyboard
,
KeyboardAvoidingView
,
ScrollView
,
DeviceEventEmitter
,
ScrollView
,
DeviceEventEmitter
,
}
from
'react-native'
;
import
R
from
'../../../assets/R'
;
import
HeaderBack
from
'../../../components/Header/HeaderBack'
;
...
...
@@ -31,7 +32,9 @@ import {saveUserToRedux} from '../../../actions/users';
import
{
confirmAlert
}
from
'../../../components/Aleart'
;
import
{
ADDMETHODPAY
,
ENTER_PASSWORD_SMART_OTP
,
SETTINGOTP
,
ENTER_PASSWORD_SMART_OTP
,
SETTINGOTP
,
CHANGESMARTOTP
,
}
from
'../../../routers/ScreenNames'
;
import
TextMoney
from
'../../../components/Input/InputMoney'
;
import
I18n
from
'../../../helper/i18/i18n'
;
...
...
@@ -116,21 +119,24 @@ const WalletWithdraw = (props) => {
}
else
{
if
(
!
props
.
user
.
smart_otp_status
)
{
confirmAlert
(
`
${
I18n
.
t
(
'YouHaveNotSettingSmartOTP'
)}
`
,
()
=>
{
navigate
.
navigate
(
SETTINGOTP
,
{
isFromTransaction
:
true
,
setupSmartOTPSuccess
:
()
=>
{
navigate
.
goBack
()
navigate
.
goBack
()
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
onGoToSmartOTP
:
(
pinCode
,
otp
)
=>
onGoToSmartOTP
(
pinCode
,
otp
),
});
DeviceEventEmitter
.
emit
(
'reloadUserInfo'
);
},
});
},
`
${
I18n
.
t
(
'setting'
)}
`
,
`
${
I18n
.
t
(
'YouHaveNotSettingSmartOTP'
)}
`
,
()
=>
{
navigate
.
navigate
(
CHANGESMARTOTP
,
{
TYPE
:
'CREATE_SMART_OTP'
,
old_password
:
null
,
isFromTransaction
:
true
,
setupSmartOTPSuccess
:
()
=>
{
navigate
.
goBack
();
navigate
.
goBack
();
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
onGoToSmartOTP
:
(
pinCode
,
otp
)
=>
onGoToSmartOTP
(
pinCode
,
otp
),
});
DeviceEventEmitter
.
emit
(
'reloadUserInfo'
);
},
});
},
`
${
I18n
.
t
(
'setting'
)}
`
,
);
}
else
{
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
...
...
@@ -334,5 +340,5 @@ const mapStateToProps = (state) => {
export
default
connect
(
mapStateToProps
,
{
showLoading
,
hideLoading
,
saveUserToRedux
saveUserToRedux
,
})(
WalletWithdraw
);
src/Screens/Authen/Login.js
View file @
e1170e14
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
View
,
Text
,
StyleSheet
,
Image
,
TouchableOpacity
,
KeyboardAvoidingView
,
Platform
,
Alert
,
View
,
Text
,
StyleSheet
,
Image
,
TouchableOpacity
,
KeyboardAvoidingView
,
Platform
,
Alert
,
}
from
'react-native'
;
import
InputIcon
from
'../../components/Input/InputIcon'
;
import
{
getFontXD
,
HEIGHTXD
,
WIDTHXD
}
from
'../../Config/Functions'
;
import
R
from
'../../assets/R'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
import
{
TABNAVIGATOR
,
FORGOTPASSWORD
,
CONFIRMEMAIL
,
TABNAVIGATOR
,
FORGOTPASSWORD
,
CONFIRMEMAIL
,
}
from
'../../routers/ScreenNames'
;
import
{
checkFormatArray
}
from
'../../Config/Functions'
;
import
{
checkFormatArray
,
encryptRSAString
}
from
'../../Config/Functions'
;
import
{
loginApi
}
from
'../../apis/Functions/users'
;
import
KEY
from
'../../assets/AsynStorage'
;
import
AsyncStorage
from
'@react-native-community/async-storage'
;
...
...
@@ -29,257 +29,210 @@ import messaging from '@react-native-firebase/messaging';
import
I18n
from
'../../helper/i18/i18n'
;
import
AppText
from
'../../components/AppText'
;
import
{
showAlert
,
TYPE
}
from
'../../components/DropdownAlert'
;
import
EntypoIcon
from
'react-native-vector-icons/Entypo'
;
import
Icon
from
'react-native-vector-icons/MaterialCommunityIcons'
;
import
TouchID
from
'react-native-touch-id'
;
import
{
call
}
from
'redux-saga/effects'
;
import
KeychainService
from
'../../services/keychainService'
;
import
*
as
Keychain
from
'react-native-keychain'
;
const
Login
=
(
props
)
=>
{
const
{
navigation
}
=
props
;
const
{
navigation
}
=
props
;
const
[
email
,
setEmail
]
=
useState
(
''
);
const
[
pass
,
setPass
]
=
useState
(
''
);
const
[
email
,
setEmail
]
=
useState
(
''
);
const
[
pass
,
setPass
]
=
useState
(
''
);
const
navigate
=
useNavigation
();
const
navigate
=
useNavigation
();
const
optionalConfigObject
=
{
title
:
'Authentication Required'
,
// Android
color
:
'#e00606'
,
// Android,
fallbackLabel
:
''
,
// iOS (if empty, then label is hidden)
};
const
getTokenDevice
=
async
()
=>
{
let
fcmToken
=
await
AsyncStorage
.
getItem
(
KEY
.
FIREBASE
);
if
(
!
fcmToken
)
{
fcmToken
=
await
messaging
().
getToken
();
if
(
fcmToken
)
{
AsyncStorage
.
setItem
(
KEY
.
FIREBASE
,
fcmToken
);
const
getTokenDevice
=
async
()
=>
{
let
fcmToken
=
await
AsyncStorage
.
getItem
(
KEY
.
FIREBASE
);
if
(
!
fcmToken
)
{
fcmToken
=
await
messaging
().
getToken
();
if
(
fcmToken
)
{
AsyncStorage
.
setItem
(
KEY
.
FIREBASE
,
fcmToken
);
}
}
};
useEffect
(()
=>
{
props
.
hideLoading
();
getAccount
();
getTokenDevice
();
},
[]);
const
getAccount
=
async
()
=>
{
const
jsonValue
=
await
AsyncStorage
.
getItem
(
KEY
.
ACCOUNT
);
const
account
=
JSON
.
parse
(
jsonValue
);
if
(
account
)
{
onSubmitLogin
(
account
.
email
,
account
.
pass
);
}
else
{
getCredentialInfo
()
}
};
const
getCredentialInfo
=
async
()
=>
{
try
{
// Retrieve the credentials
const
credentials
=
await
Keychain
.
getGenericPassword
();
if
(
credentials
)
{
console
.
log
(
'Credentials successfully loaded for user '
,
credentials
,
);
}
else
{
console
.
log
(
'No credentials stored'
);
}
}
catch
(
error
)
{
console
.
log
(
'Keychain couldn
\'
t be accessed!'
,
error
);
}
};
useEffect
(()
=>
{
props
.
hideLoading
();
getAccount
();
getTokenDevice
();
},
[]);
const
getAccount
=
async
()
=>
{
const
jsonValue
=
await
AsyncStorage
.
getItem
(
KEY
.
ACCOUNT
);
const
account
=
JSON
.
parse
(
jsonValue
);
if
(
account
)
{
onSubmitLogin
(
account
.
email
,
account
.
pass
);
const
onSubmitLogin
=
async
(
email
,
pass
)
=>
{
const
titles
=
[
I18n
.
t
(
'Username'
).
toLowerCase
(),
I18n
.
t
(
'Password'
).
toLowerCase
(),
];
const
index
=
checkFormatArray
([
email
,
pass
]);
if
(
index
===
true
)
{
firebase
=
await
AsyncStorage
.
getItem
(
KEY
.
FIREBASE
);
props
.
showLoading
();
const
res
=
await
loginApi
({
email
,
password
:
encryptRSAString
(
pass
),
platform
:
Platform
.
OS
,
device_token
:
firebase
,
account_type
:
'CUSTOMER'
,
});
props
.
hideLoading
();
if
(
res
.
data
)
{
if
(
res
.
data
.
code
==
200
&&
res
.
data
.
data
)
{
const
jsonValue
=
JSON
.
stringify
({
email
,
pass
});
AsyncStorage
.
setItem
(
KEY
.
TOKEN
,
res
.
data
.
data
.
token
);
AsyncStorage
.
setItem
(
KEY
.
ACCOUNT
,
jsonValue
);
props
.
saveUserToRedux
(
res
.
data
.
data
);
navigate
.
reset
({
index
:
1
,
routes
:
[{
name
:
TABNAVIGATOR
}],
});
await
Keychain
.
setGenericPassword
(
email
,
pass
);
}
else
{
try
{
// Retrieve the credentials
const
credentials
=
await
Keychain
.
getGenericPassword
();
if
(
credentials
)
{
console
.
log
(
'Credentials successfully loaded for user '
+
credentials
);
}
else
{
console
.
log
(
'No credentials stored'
);
}
}
catch
(
error
)
{
console
.
log
(
"Keychain couldn't be accessed!"
,
error
);
}
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
};
function
*
authorize
()
{
let
isFingerPrintAuthenticated
=
yield
call
(
KeychainService
.
getCredentials
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'Systemmaintenance'
),
);
}
}
else
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'Please_fill_in'
)
+
titles
[
index
],
);
}
const
onSubmitLogin
=
async
(
email
,
pass
)
=>
{
const
titles
=
[
I18n
.
t
(
'Username'
).
toLowerCase
(),
I18n
.
t
(
'Password'
).
toLowerCase
(),
];
const
index
=
checkFormatArray
([
email
,
pass
]);
if
(
index
===
true
)
{
let
firebase
=
await
AsyncStorage
.
getItem
(
KEY
.
FIREBASE
);
props
.
showLoading
();
const
res
=
await
loginApi
({
email
,
password
:
pass
,
platform
:
Platform
.
OS
,
device_token
:
firebase
,
account_type
:
'CUSTOMER'
,
});
props
.
hideLoading
();
if
(
res
.
data
)
{
if
(
res
.
data
.
code
==
200
&&
res
.
data
.
data
)
{
const
jsonValue
=
JSON
.
stringify
({
email
,
pass
});
AsyncStorage
.
setItem
(
KEY
.
TOKEN
,
res
.
data
.
data
.
token
);
AsyncStorage
.
setItem
(
KEY
.
ACCOUNT
,
jsonValue
);
props
.
saveUserToRedux
(
res
.
data
.
data
);
navigate
.
reset
({
index
:
1
,
routes
:
[{
name
:
TABNAVIGATOR
}],
});
await
Keychain
.
setGenericPassword
(
email
,
pass
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'Systemmaintenance'
),
);
}
}
else
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'Please_fill_in'
)
+
titles
[
index
],
);
}
};
const
clickFingerprintHandler
=
()
=>
{
TouchID
.
isSupported
()
.
then
(
authenticate
=>
{
console
.
log
(
authenticate
);
pressHandler
();
})
.
catch
(
error
=>
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
'TouchID not supported'
);
});
};
const
pressHandler
=
()
=>
{
TouchID
.
authenticate
(
'to demo this react-native component'
,
optionalConfigObject
)
.
then
(
success
=>
{
console
.
log
(
success
);
onSubmitLogin
(
'thuynt@dcv.vn'
,
'123456'
);
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
'success'
);
})
.
catch
(
error
=>
{
console
.
log
(
error
);
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
'Authentication Failed'
);
});
};
return
(
<
View
style
=
{{
flex
:
1
,
paddingHorizontal
:
20
,
paddingTop
:
20
,
backgroundColor
:
'white'
,
};
return
(
<
View
style
=
{{
flex
:
1
,
paddingHorizontal
:
20
,
paddingTop
:
20
,
backgroundColor
:
'white'
,
}}
>
<
InputIcon
icon
=
{
R
.
images
.
iconUser3
}
title
=
{
'Email'
}
onChangeText
=
{(
val
)
=>
setEmail
(
val
)}
value
=
{
email
}
/
>
<
InputIcon
icon
=
{
R
.
images
.
iconLock
}
title
=
{
'Password'
}
isPassWord
=
{
true
}
onChangeText
=
{(
val
)
=>
setPass
(
val
)}
value
=
{
pass
}
/
>
<
TouchableOpacity
onPress
=
{()
=>
navigate
.
navigate
(
CONFIRMEMAIL
)}
style
=
{
styles
.
forgotView
}
>
<
AppText
i18nKey
=
{
'ForgotPassword'
}
style
=
{
styles
.
txtTitle
}
/
>
<
/TouchableOpacity
>
<
View
style
=
{{
marginVertical
:
20
,
alignItems
:
'center'
,
}}
>
<
TouchableOpacity
onPress
=
{()
=>
onSubmitLogin
(
email
,
pass
)}
style
=
{
styles
.
wrapLogin
}
>
<
AppText
i18nKey
=
{
'Login'
}
style
=
{
styles
.
txtLogin
}
/
>
<
Image
source
=
{
R
.
images
.
iconRight1
}
style
=
{
styles
.
imgIcon
}
/
>
<
/TouchableOpacity
>
<
View
style
=
{
styles
.
row
}
>
<
AppText
i18nKey
=
{
'Have_account'
}
style
=
{
styles
.
txtTitle
}
/
>
<
TouchableOpacity
onPress
=
{()
=>
{
navigation
.
navigate
(
'REGISTOR'
);
}}
>
<
InputIcon
icon
=
{
R
.
images
.
iconUser3
}
title
=
{
'Email'
}
onChangeText
=
{(
val
)
=>
setEmail
(
val
)}
value
=
{
email
}
/
>
<
InputIcon
icon
=
{
R
.
images
.
iconLock
}
title
=
{
'Password'
}
isPassWord
=
{
true
}
onChangeText
=
{(
val
)
=>
setPass
(
val
)}
value
=
{
pass
}
/
>
<
TouchableOpacity
onPress
=
{()
=>
navigate
.
navigate
(
CONFIRMEMAIL
)}
style
=
{
styles
.
forgotView
}
>
<
AppText
i18nKey
=
{
'ForgotPassword'
}
style
=
{
styles
.
txtTitle
}
/
>
<
/TouchableOpacity
>
<
View
style
=
{{
marginVertical
:
20
,
alignItems
:
'center'
,
}}
>
<
TouchableOpacity
onPress
=
{()
=>
onSubmitLogin
(
email
,
pass
)}
style
=
{
styles
.
wrapLogin
}
>
<
AppText
i18nKey
=
{
'Login'
}
style
=
{
styles
.
txtLogin
}
/
>
<
Image
source
=
{
R
.
images
.
iconRight1
}
style
=
{
styles
.
imgIcon
}
/
>
<
/TouchableOpacity
>
<
View
style
=
{{
flexDirection
:
'row'
,
marginTop
:
WIDTHXD
(
50
)}}
>
<
TouchableOpacity
onPress
=
{()
=>
{
clickFingerprintHandler
();
}}
>
<
EntypoIcon
name
=
{
'fingerprint'
}
size
=
{
WIDTHXD
(
80
)}
color
=
{
R
.
colors
.
main
}
/
>
<
/TouchableOpacity
>
<
View
style
=
{{
width
:
WIDTHXD
(
80
)}}
/
>
<
TouchableOpacity
onPress
=
{()
=>
{
// navigation.navigate('REGISTOR');
}}
>
<
Icon
name
=
{
'face-recognition'
}
size
=
{
WIDTHXD
(
80
)}
color
=
{
R
.
colors
.
main
}
/
>
<
/TouchableOpacity
>
<
/View
>
<
View
style
=
{
styles
.
row
}
>
<
AppText
i18nKey
=
{
'Have_account'
}
style
=
{
styles
.
txtTitle
}
/
>
<
TouchableOpacity
onPress
=
{()
=>
{
navigation
.
navigate
(
'REGISTOR'
);
}}
>
<
AppText
i18nKey
=
{
'Register'
}
style
=
{
styles
.
txtRegistor
}
/
>
<
/TouchableOpacity
>
<
/View
>
<
/View
>
<
View
style
=
{{
height
:
100
}}
/
>
<
AppText
i18nKey
=
{
'Register'
}
style
=
{
styles
.
txtRegistor
}
/
>
<
/TouchableOpacity
>
<
/View
>
);
<
/View
>
<
View
style
=
{{
height
:
100
}}
/
>
<
/View
>
);
};
const
styles
=
StyleSheet
.
create
({
forgotView
:
{
marginVertical
:
20
,
alignItems
:
'flex-end'
,
},
txtTitle
:
{
fontSize
:
getFontXD
(
42
),
color
:
'#929292'
,
},
txtLogin
:
{
fontSize
:
getFontXD
(
48
),
color
:
'white'
,
fontWeight
:
'700'
,
},
wrapLogin
:
{
width
:
WIDTHXD
(
512
),
height
:
HEIGHTXD
(
150
),
backgroundColor
:
'#1C6AF6'
,
borderRadius
:
30
,
flexDirection
:
'row'
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
},
imgIcon
:
{
width
:
WIDTHXD
(
72
),
height
:
HEIGHTXD
(
72
),
marginLeft
:
5
,
},
row
:
{
flexDirection
:
'row'
,
marginTop
:
30
,
},
txtRegistor
:
{
marginLeft
:
WIDTHXD
(
10
),
fontSize
:
getFontXD
(
42
),
color
:
'#1473E6'
,
},
forgotView
:
{
marginVertical
:
20
,
alignItems
:
'flex-end'
,
},
txtTitle
:
{
fontSize
:
getFontXD
(
42
),
color
:
'#929292'
,
},
txtLogin
:
{
fontSize
:
getFontXD
(
48
),
color
:
'white'
,
fontWeight
:
'700'
,
},
wrapLogin
:
{
width
:
WIDTHXD
(
512
),
height
:
HEIGHTXD
(
150
),
backgroundColor
:
'#1C6AF6'
,
borderRadius
:
30
,
flexDirection
:
'row'
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
},
imgIcon
:
{
width
:
WIDTHXD
(
72
),
height
:
HEIGHTXD
(
72
),
marginLeft
:
5
,
},
row
:
{
flexDirection
:
'row'
,
marginTop
:
30
,
},
txtRegistor
:
{
marginLeft
:
WIDTHXD
(
10
),
fontSize
:
getFontXD
(
42
),
color
:
'#1473E6'
,
},
});
const
mapStateToProps
=
(
state
)
=>
{
return
{};
return
{};
};
export
default
connect
(
mapStateToProps
,
{
showLoading
,
hideLoading
,
saveUserToRedux
,
showLoading
,
hideLoading
,
saveUserToRedux
,
})(
Login
);
src/Screens/Authen/NewPassWord.js
View file @
e1170e14
...
...
@@ -20,6 +20,7 @@ import I18n from '../../helper/i18/i18n';
import
{
showLoading
,
hideLoading
}
from
'../../actions/loadingAction'
;
import
{
connect
}
from
'react-redux'
;
import
{
showAlert
,
TYPE
}
from
'../../components/DropdownAlert'
;
import
{
encryptRSAString
}
from
'../../Config/Functions'
;
const
NewPassword
=
(
props
)
=>
{
const
[
password
,
setPassword
]
=
useState
(
''
);
...
...
@@ -36,8 +37,8 @@ const NewPassword = (props) => {
const
res
=
await
forgotPasswordApi
({
receiver_name
:
email
,
otp
,
password
,
password_confirmation
:
cfPassword
,
password
:
encryptRSAString
(
password
)
,
password_confirmation
:
encryptRSAString
(
cfPassword
)
,
platform
:
Platform
.
OS
,
});
props
.
hideLoading
();
...
...
src/Screens/Authen/RegisterOTP.js
View file @
e1170e14
...
...
@@ -16,7 +16,13 @@ import {
useBlurOnFulfill
,
useClearByFocusCell
,
}
from
'react-native-confirmation-code-field'
;
import
{
getFontXD
,
HEIGHTXD
,
WIDTHXD
}
from
'../../Config/Functions'
;
import
{
getFontXD
,
HEIGHTXD
,
WIDTHXD
,
encryptRSAString
,
decryptRSAString
,
}
from
'../../Config/Functions'
;
import
R
from
'../../assets/R'
;
import
{
NEWPASSWORD
}
from
'../../routers/ScreenNames'
;
import
{
verifyOTPApi
,
registorApi
,
getOTPApi
}
from
'../../apis/Functions/users'
;
...
...
@@ -52,7 +58,7 @@ const ConfirmOTP = (propsa) => {
const
res
=
await
verifyOTPApi
({
platform
:
Platform
.
OS
,
receiver_name
:
propsa
.
route
.
params
.
email
,
otp
:
value
,
otp
:
encryptRSAString
(
value
)
,
type
:
'CUSTOMER_VERIFY'
,
});
...
...
@@ -68,18 +74,18 @@ const ConfirmOTP = (propsa) => {
if
(
sponsor_id
)
{
res
=
await
registorApi
({
email
,
password
,
password
:
encryptRSAString
(
password
)
,
platform
:
Platform
.
OS
,
password_confirmation
,
password_confirmation
:
encryptRSAString
(
password_confirmation
)
,
sponsor_id
,
phone
,
});
}
else
{
res
=
await
registorApi
({
email
,
password
,
password
:
encryptRSAString
(
password
)
,
platform
:
Platform
.
OS
,
password_confirmation
,
password_confirmation
:
encryptRSAString
(
password_confirmation
)
,
phone
,
});
}
...
...
src/Screens/Home/Home.js
View file @
e1170e14
...
...
@@ -51,10 +51,13 @@ const Home = (props) => {
useEffect
(()
=>
{
getData
();
initSocket
();
let
reloadUserInfoListener
=
DeviceEventEmitter
.
addListener
(
'reloadUserInfo'
,
(
e
)
=>
{
console
.
log
(
'run in to reloadUserInfo'
);
onRefresh
();
});
let
reloadUserInfoListener
=
DeviceEventEmitter
.
addListener
(
'reloadUserInfo'
,
(
e
)
=>
{
console
.
log
(
'run in to reloadUserInfo'
);
onRefresh
();
},
);
return
()
=>
{
reloadUserInfoListener
.
remove
();
};
...
...
src/Screens/MethodPay/MethodPayView.js
View file @
e1170e14
...
...
@@ -7,7 +7,7 @@ import {WIDTHXD} from '../../Config/Functions';
import
Icon
from
'react-native-vector-icons/Entypo'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
import
{
ADDMETHODPAY
}
from
'../../routers/ScreenNames'
;
import
AppText
from
'../../components/AppText'
;
const
MethodPayView
=
(
props
)
=>
{
const
navigate
=
useNavigation
();
...
...
@@ -17,7 +17,17 @@ const MethodPayView = (props) => {
<
View
style
=
{{
flex
:
1
}}
>
<
HeaderBack
title
=
{
'PaymentSetting'
}
/
>
<
View
style
=
{{
flex
:
1
}}
>
{
listMethod
.
length
>
0
?
(
{
listMethod
.
length
==
0
?
(
<
View
style
=
{{
justifyContent
:
'center'
,
alignItems
:
'center'
,
flex
:
1
}}
>
<
AppText
i18nKey
=
{
'NoData'
}
style
=
{{
fontSize
:
18
,
fontWeight
:
'bold'
,
}}
><
/AppText
>
<
/View
>
)
:
(
<
FlatList
keyExtractor
=
{(
item
)
=>
item
.
method
}
showsVerticalScrollIndicator
=
{
false
}
...
...
@@ -27,7 +37,7 @@ const MethodPayView = (props) => {
data
=
{
listMethod
}
renderItem
=
{({
item
})
=>
<
Item
item
=
{
item
}
/>
}
/>
)
:
null
}
)}
<
TouchableOpacity
onPress
=
{()
=>
navigate
.
navigate
(
ADDMETHODPAY
)}
...
...
src/Screens/SmartOTP/ChangeSmartOTP/ChangeSmartOTP.js
View file @
e1170e14
...
...
@@ -33,13 +33,29 @@ const EnterPasswordSmartOTP = (props) => {
setFourNumber
(
number
.
toString
());
}
};
console
.
log
(
'Pros pass'
,
props
.
route
.
params
);
const
onCheckPINSmartOTPPin
=
async
()
=>
{
let
pinCode
=
`
${
firstNumber
}${
secondsNumber
}${
thirdNumber
}${
fourNumber
}
`
;
navigation
.
navigate
(
CONFIRMCHANGESMARTOTP
,
{
pre_otp
:
pinCode
,
old_password
:
props
.
route
.
params
.
old_password
,
});
setFirstNumber
(
null
);
setSecondsNumber
(
null
);
setThirdNumber
(
null
);
setFourNumber
(
null
);
if
(
props
.
route
.
params
.
isFromTransaction
)
{
navigation
.
navigate
(
CONFIRMCHANGESMARTOTP
,
{
pre_otp
:
pinCode
,
old_password
:
props
.
route
.
params
.
old_password
,
isFromTransaction
:
props
.
route
.
params
.
isFromTransaction
,
TYPE
:
props
.
route
.
params
.
TYPE
,
setupSmartOTPSuccess
:
props
.
route
.
params
.
setupSmartOTPSuccess
,
});
}
else
{
navigation
.
navigate
(
CONFIRMCHANGESMARTOTP
,
{
pre_otp
:
pinCode
,
old_password
:
props
.
route
.
params
.
old_password
,
TYPE
:
props
.
route
.
params
.
TYPE
,
});
}
};
const
onDeletePress
=
()
=>
{
if
(
fourNumber
)
{
...
...
src/Screens/SmartOTP/ChangeSmartOTP/ConfirmChangeSmartOTP.js
View file @
e1170e14
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
ConfirmSmartOTPView
from
'./ConfirmSmartOTPView'
;
import
{
updateOTPApiSmart
}
from
'../../../apis/Functions/users'
;
import
{
updateOTPApiSmart
,
getOTPApiSmartOTP
,
}
from
'../../../apis/Functions/users'
;
import
{
showAlert
,
TYPE
}
from
'../../../components/DropdownAlert'
;
import
{
connect
}
from
'react-redux'
;
import
{
hideLoading
,
showLoading
}
from
'../../../actions/loadingAction'
;
import
I18n
from
'../../../helper/i18/i18n'
;
import
{
SMARTOTPCONFIG
,
TABNAVIGATOR
}
from
'../../../routers/ScreenNames'
;
import
{
SMARTOTPCONFIG
,
TABNAVIGATOR
,
CONFIRMCREATEOTP
,
}
from
'../../../routers/ScreenNames'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
import
{
encryptRSAString
}
from
'../../../Config/Functions'
;
const
ConfirmChangeSmartOTP
=
(
props
)
=>
{
const
[
firstNumber
,
setFirstNumber
]
=
useState
(
null
);
...
...
@@ -31,32 +39,64 @@ const ConfirmChangeSmartOTP = (props) => {
}
};
console
.
log
(
'Pros pass'
,
props
.
route
.
params
);
const
onCheckPINSmartOTPPin
=
async
()
=>
{
let
pinCode
=
`
${
firstNumber
}${
secondsNumber
}${
thirdNumber
}${
fourNumber
}
`
;
props
.
showLoading
();
const
res
=
await
updateOTPApiSmart
({
platform
:
Platform
.
OS
,
password
:
props
.
route
.
params
.
pre_otp
,
password_confirmation
:
pinCode
,
old_password
:
props
.
route
.
params
.
old_password
,
});
props
.
hideLoading
();
if
(
res
.
data
.
code
==
200
)
{
showAlert
(
TYPE
.
SUCCESS
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
setFirstNumber
(
null
);
setSecondsNumber
(
null
);
setThirdNumber
(
null
);
setFourNumber
(
null
);
navigation
.
reset
({
index
:
1
,
routes
:
[{
name
:
TABNAVIGATOR
},
{
name
:
SMARTOTPCONFIG
}],
if
(
props
.
route
.
params
.
TYPE
==
'CHANGE_SMART_OTP'
)
{
props
.
showLoading
();
const
res
=
await
updateOTPApiSmart
({
platform
:
Platform
.
OS
,
password
:
encryptRSAString
(
props
.
route
.
params
.
pre_otp
),
password_confirmation
:
encryptRSAString
(
pinCode
),
old_password
:
encryptRSAString
(
props
.
route
.
params
.
old_password
),
});
props
.
hideLoading
();
if
(
res
.
data
.
code
==
200
)
{
showAlert
(
TYPE
.
SUCCESS
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
setFirstNumber
(
null
);
setSecondsNumber
(
null
);
setThirdNumber
(
null
);
setFourNumber
(
null
);
navigation
.
navigate
(
SMARTOTPCONFIG
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
setFirstNumber
(
null
);
setSecondsNumber
(
null
);
setThirdNumber
(
null
);
setFourNumber
(
null
);
}
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
setFirstNumber
(
null
);
setSecondsNumber
(
null
);
setThirdNumber
(
null
);
setFourNumber
(
null
);
props
.
showLoading
();
const
res
=
await
getOTPApiSmartOTP
({
platform
:
Platform
.
OS
,
otp_by
:
props
.
user
.
email
,
otp_password
:
'1234'
,
type
:
'CREATE_OTP_PASSWORD'
,
});
props
.
hideLoading
();
if
(
res
.
data
.
code
==
200
)
{
showAlert
(
TYPE
.
SUCCESS
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
if
(
props
.
route
.
params
.
isFromTransaction
)
{
navigation
.
navigate
(
CONFIRMCREATEOTP
,
{
password
:
props
.
route
.
params
.
pre_otp
,
password_confirmation
:
pinCode
,
isFromTransaction
:
props
.
route
.
params
.
isFromTransaction
,
setupSmartOTPSuccess
:
props
.
route
.
params
.
setupSmartOTPSuccess
,
});
}
else
{
navigation
.
navigate
(
CONFIRMCREATEOTP
,
{
password
:
props
.
route
.
params
.
pre_otp
,
password_confirmation
:
pinCode
,
});
}
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
}
};
const
onDeletePress
=
()
=>
{
...
...
src/Screens/SmartOTP/ConfirmCreate/ConfirmCreate.js
0 → 100644
View file @
e1170e14
import
React
,
{
Component
,
useEffect
,
useState
}
from
'react'
;
import
{
View
,
Text
,
TextInput
,
StyleSheet
,
TouchableOpacity
,
Platform
,
Alert
,
}
from
'react-native'
;
import
HeaderBack
from
'../../../components/Header/HeaderBack'
;
import
{
CodeField
,
Cursor
,
useBlurOnFulfill
,
useClearByFocusCell
,
}
from
'react-native-confirmation-code-field'
;
import
{
getFontXD
,
HEIGHTXD
,
WIDTHXD
,
encryptRSAString
,
}
from
'../../../Config/Functions'
;
import
R
from
'../../../assets/R'
;
import
{
NEWPASSWORD
,
TABNAVIGATOR
}
from
'../../../routers/ScreenNames'
;
import
{
verifyOTPApi
,
verifyStoreOTPApiSmart
,
getOTPApiSmartOTP
,
}
from
'../../../apis/Functions/users'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
import
I18n
from
'../../../helper/i18/i18n'
;
import
AppText
from
'../../../components/AppText'
;
import
{
showLoading
,
hideLoading
}
from
'../../../actions/loadingAction'
;
import
{
connect
}
from
'react-redux'
;
import
{
showAlert
,
TYPE
}
from
'../../../components/DropdownAlert'
;
import
CountDown
from
'../../../components/CountDown'
;
import
{
getOTPApi
}
from
'../../../apis/Functions/users'
;
const
CELL_COUNT
=
4
;
const
ConfirmOTP
=
(
propsa
)
=>
{
const
[
value
,
setValue
]
=
useState
(
''
);
const
[
isReset
,
setReset
]
=
useState
(
false
);
const
navigate
=
useNavigation
();
const
ref
=
useBlurOnFulfill
({
value
,
cellCount
:
CELL_COUNT
});
const
[
props
,
getCellOnLayoutHandler
]
=
useClearByFocusCell
({
value
,
setValue
,
});
const
getOTP
=
async
()
=>
{
propsa
.
showLoading
();
const
res
=
await
getOTPApiSmartOTP
({
platform
:
Platform
.
OS
,
otp_by
:
propsa
.
user
.
email
,
otp_password
:
'1234'
,
type
:
'CREATE_OTP_PASSWORD'
,
});
propsa
.
hideLoading
();
if
(
res
.
data
.
code
==
200
)
{
setReset
(
!
isReset
);
showAlert
(
TYPE
.
SUCCESS
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
};
const
confirm
=
async
()
=>
{
console
.
log
(
propsa
.
route
.
params
);
if
(
!
value
)
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'EnterOTPRequest'
));
}
else
if
(
value
.
length
!=
4
)
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'OTPInvalid'
));
}
else
{
propsa
.
showLoading
();
const
res
=
await
verifyStoreOTPApiSmart
({
platform
:
Platform
.
OS
,
password
:
encryptRSAString
(
propsa
.
route
.
params
.
password
),
password_confirmation
:
encryptRSAString
(
propsa
.
route
.
params
.
password_confirmation
,
),
otp
:
value
,
type
:
'CREATE_OTP_PASSWORD'
,
});
propsa
.
hideLoading
();
if
(
res
.
data
.
code
==
200
)
{
showAlert
(
TYPE
.
SUCCESS
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
if
(
propsa
.
route
.
params
.
isFromTransaction
)
{
propsa
.
route
.
params
.
setupSmartOTPSuccess
();
}
else
{
navigate
.
navigate
(
TABNAVIGATOR
);
}
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
}
};
return
(
<
View
style
=
{{
flex
:
1
}}
>
<
HeaderBack
title
=
{
'VerifyOTP'
}
/
>
<
View
style
=
{
styles
.
container
}
>
<
View
style
=
{{
height
:
20
}}
/
>
<
View
style
=
{
styles
.
wrap
}
>
<
AppText
i18nKey
=
{
'Verify_code'
}
style
=
{
styles
.
txtTitle
}
/
>
<
View
style
=
{
styles
.
containerCode
}
>
<
CodeField
ref
=
{
ref
}
{...
props
}
value
=
{
value
}
onChangeText
=
{
setValue
}
cellCount
=
{
CELL_COUNT
}
rootStyle
=
{
styles
.
codeFieldRoot
}
keyboardType
=
"number-pad"
textContentType
=
"oneTimeCode"
renderCell
=
{({
index
,
symbol
,
isFocused
})
=>
(
<
View
onLayout
=
{
getCellOnLayoutHandler
(
index
)}
key
=
{
index
}
style
=
{[
styles
.
cellRoot
,
isFocused
&&
styles
.
focusCell
]}
>
<
Text
style
=
{
styles
.
cellText
}
>
{
symbol
||
(
isFocused
?
<
Cursor
/>
:
null
)}
<
/Text
>
<
/View
>
)}
/
>
<
/View
>
<
/View
>
<
/View
>
<
View
style
=
{
styles
.
footer
}
>
<
TouchableOpacity
onPress
=
{
confirm
}
style
=
{
styles
.
btn
}
>
<
AppText
i18nKey
=
{
'Continue'
}
style
=
{
styles
.
txtBtn
}
/
>
<
/TouchableOpacity
>
<
TouchableOpacity
style
=
{
styles
.
wrapFooter
}
onPress
=
{
getOTP
}
>
<
Text
style
=
{
styles
.
txtNote
}
>
{
I18n
.
t
(
'OTPValidFiveMinute'
)}
<
/Text
>
<
AppText
i18nKey
=
{
'Re_send'
}
style
=
{
styles
.
txtSend
}
/
>
<
/TouchableOpacity
>
<
CountDown
isReset
=
{
isReset
}
/
>
<
/View
>
<
/View
>
);
};
const
styles
=
StyleSheet
.
create
({
container
:
{
flex
:
1
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
paddingVertical
:
20
,
},
footer
:
{
height
:
200
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
},
wrap
:
{
flex
:
1
,
paddingTop
:
30
,
alignItems
:
'center'
,
width
:
'100%'
,
paddingHorizontal
:
50
,
},
containerCode
:
{
height
:
50
,
width
:
'100%'
,
marginTop
:
30
,
},
codeFieldRoot
:
{
marginTop
:
20
,
},
focusCell
:
{
borderColor
:
'#000'
,
},
cellRoot
:
{
width
:
40
,
height
:
40
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
borderBottomColor
:
'#ccc'
,
borderBottomWidth
:
1
,
},
cellText
:
{
color
:
'#000'
,
fontSize
:
36
,
textAlign
:
'center'
,
},
focusCell
:
{
borderBottomColor
:
'#007AFF'
,
borderBottomWidth
:
2
,
},
txtTitle
:
{
fontSize
:
getFontXD
(
52
),
color
:
'#979797'
,
},
btn
:
{
width
:
WIDTHXD
(
521
),
height
:
HEIGHTXD
(
120
),
borderRadius
:
15
,
backgroundColor
:
'#1C6AF6'
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
},
txtBtn
:
{
color
:
R
.
colors
.
white
,
fontSize
:
getFontXD
(
52
),
textTransform
:
'uppercase'
,
},
txtSend
:
{
fontSize
:
getFontXD
(
42
),
color
:
'#1C6AF6'
,
},
wrapFooter
:
{
marginTop
:
30
,
flexDirection
:
'row'
,
alignItems
:
'center'
,
},
txtNote
:
{
color
:
'#A2A2A2'
,
fontSize
:
getFontXD
(
42
),
fontStyle
:
'italic'
,
},
});
const
mapStateToProps
=
(
state
)
=>
{
return
{
user
:
state
.
userReducer
};
};
export
default
connect
(
mapStateToProps
,
{
showLoading
,
hideLoading
})(
ConfirmOTP
);
src/Screens/SmartOTP/ConfirmCreate/ConfirmCreateView.js
0 → 100644
View file @
e1170e14
import
React
from
'react'
;
import
{
StyleSheet
,
Text
,
TouchableOpacity
,
View
}
from
'react-native'
;
import
HeaderBack
from
'../../../components/Header/HeaderBack'
;
import
{
getFontXD
,
HEIGHTXD
,
WIDTHXD
}
from
'../../../Config/Functions'
;
import
I18n
from
'../../../helper/i18/i18n'
;
import
R
from
'../../../assets/R'
;
import
Icon
from
'react-native-vector-icons/FontAwesome5'
;
const
ChangeSmartOTPView
=
(
props
)
=>
{
return
(
<
View
style
=
{{
flex
:
1
,
colorBackground
:
R
.
colors
.
white
}}
>
<
HeaderBack
title
=
{
'OTP'
}
/
>
<
Text
style
=
{[
styles
.
textNormal
,
{
marginTop
:
HEIGHTXD
(
40
)}]}
>
{
I18n
.
t
(
'EnterOTPRequest'
)}
<
/Text
>
<
View
style
=
{[
styles
.
rowNumber
]}
>
<
View
style
=
{[
styles
.
indicator
,
{
backgroundColor
:
props
.
firstNumber
?
R
.
colors
.
main
:
R
.
colors
.
white
,
},
]}
/
>
<
View
style
=
{[
styles
.
indicator
,
{
backgroundColor
:
props
.
secondsNumber
?
R
.
colors
.
main
:
R
.
colors
.
white
,
},
]}
/
>
<
View
style
=
{[
styles
.
indicator
,
{
backgroundColor
:
props
.
thirdNumber
?
R
.
colors
.
main
:
R
.
colors
.
white
,
},
]}
/
>
<
View
style
=
{[
styles
.
indicator
,
{
backgroundColor
:
props
.
fourNumber
?
R
.
colors
.
main
:
R
.
colors
.
white
,
},
]}
/
>
<
/View
>
<
View
style
=
{[
styles
.
rowNumber
,
{
marginTop
:
HEIGHTXD
(
80
)}]}
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
1
);
}}
style
=
{
styles
.
btnNumber
}
>
<
Text
style
=
{
styles
.
textNumber
}
>
1
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
2
);
}}
style
=
{[
styles
.
btnNumber
,
{
marginLeft
:
WIDTHXD
(
40
)}]}
>
<
Text
style
=
{
styles
.
textNumber
}
>
2
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
3
);
}}
style
=
{[
styles
.
btnNumber
,
{
marginLeft
:
WIDTHXD
(
40
)}]}
>
<
Text
style
=
{
styles
.
textNumber
}
>
3
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
<
View
style
=
{
styles
.
rowNumber
}
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
4
);
}}
style
=
{
styles
.
btnNumber
}
>
<
Text
style
=
{
styles
.
textNumber
}
>
4
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
5
);
}}
style
=
{[
styles
.
btnNumber
,
{
marginLeft
:
WIDTHXD
(
40
)}]}
>
<
Text
style
=
{
styles
.
textNumber
}
>
5
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
6
);
}}
style
=
{[
styles
.
btnNumber
,
{
marginLeft
:
WIDTHXD
(
40
)}]}
>
<
Text
style
=
{
styles
.
textNumber
}
>
6
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
<
View
style
=
{
styles
.
rowNumber
}
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
7
);
}}
style
=
{
styles
.
btnNumber
}
>
<
Text
style
=
{
styles
.
textNumber
}
>
7
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
8
);
}}
style
=
{[
styles
.
btnNumber
,
{
marginLeft
:
WIDTHXD
(
40
)}]}
>
<
Text
style
=
{
styles
.
textNumber
}
>
8
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
9
);
}}
style
=
{[
styles
.
btnNumber
,
{
marginLeft
:
WIDTHXD
(
40
)}]}
>
<
Text
style
=
{
styles
.
textNumber
}
>
9
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
<
View
style
=
{
styles
.
rowNumber
}
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onNumberPress
(
0
);
}}
style
=
{[
styles
.
btnNumber
,
{
marginLeft
:
WIDTHXD
(
300
)}]}
>
<
Text
style
=
{
styles
.
textNumber
}
>
0
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
onDeletePress
();
}}
style
=
{{
width
:
HEIGHTXD
(
260
),
height
:
HEIGHTXD
(
260
),
marginLeft
:
WIDTHXD
(
40
),
justifyContent
:
'center'
,
alignItems
:
'center'
,
}}
>
<
Icon
name
=
{
'backspace'
}
size
=
{
HEIGHTXD
(
80
)}
color
=
{
'#8E8C8C'
}
/
>
<
/TouchableOpacity
>
<
/View
>
<
/View
>
);
};
export
default
ChangeSmartOTPView
;
const
styles
=
StyleSheet
.
create
({
btnSend
:
{
height
:
HEIGHTXD
(
80
),
justifyContent
:
'center'
,
alignItems
:
'center'
,
},
rowNumber
:
{
flexDirection
:
'row'
,
justifyContent
:
'center'
,
marginTop
:
HEIGHTXD
(
40
),
},
btnNumber
:
{
height
:
HEIGHTXD
(
260
),
width
:
HEIGHTXD
(
260
),
justifyContent
:
'center'
,
alignItems
:
'center'
,
borderWidth
:
0.3
,
borderColor
:
R
.
colors
.
gray6
,
borderRadius
:
HEIGHTXD
(
130
),
},
indicator
:
{
height
:
HEIGHTXD
(
50
),
width
:
HEIGHTXD
(
50
),
borderWidth
:
0.3
,
borderColor
:
R
.
colors
.
gray6
,
borderRadius
:
HEIGHTXD
(
35
),
marginHorizontal
:
WIDTHXD
(
20
),
},
textNormal
:
{
fontSize
:
getFontXD
(
39
),
color
:
R
.
colors
.
black
,
textAlign
:
'center'
,
},
textNumber
:
{
fontSize
:
getFontXD
(
90
),
color
:
R
.
colors
.
black
,
textAlign
:
'center'
,
},
txtSend
:
{
fontSize
:
getFontXD
(
42
),
color
:
R
.
colors
.
main
,
},
});
src/Screens/SmartOTP/ConfirmOTPSmart.js
View file @
e1170e14
import
React
,
{
useState
}
from
'react'
;
import
{
View
,
Text
,
StyleSheet
,
TouchableOpacity
,
Platform
,
}
from
'react-native'
;
import
{
View
,
Text
,
StyleSheet
,
TouchableOpacity
,
Platform
}
from
'react-native'
;
import
HeaderBack
from
'../../components/Header/HeaderBack'
;
import
{
...
...
@@ -29,7 +23,7 @@ import {
verifyStoreOTPApiSmart
,
getOTPApiSmartOTP
,
}
from
'../../apis/Functions/users'
;
import
{
encryptRSAString
}
from
'../../Config/Functions'
;
const
CELL_COUNT
=
4
;
...
...
@@ -70,8 +64,10 @@ const ConfirmOTPSmart = (propsa) => {
propsa
.
showLoading
();
const
res
=
await
verifyStoreOTPApiSmart
({
platform
:
Platform
.
OS
,
password
:
propsa
.
route
.
params
.
password
,
password_confirmation
:
propsa
.
route
.
params
.
password_confirmation
,
password
:
encryptRSAString
(
propsa
.
route
.
params
.
password
),
password_confirmation
:
encryptRSAString
(
propsa
.
route
.
params
.
password_confirmation
,
),
otp
:
value
,
type
:
'CREATE_OTP_PASSWORD'
,
});
...
...
src/Screens/SmartOTP/EnterPasswordSmartOTP.js
View file @
e1170e14
...
...
@@ -8,109 +8,116 @@ import {hideLoading, showLoading} from '../../actions/loadingAction';
import
{
OTP_TYPE
}
from
'../../Config/constants'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
import
{
RESET_SMART_OTP
,
CHANGESMARTOTP
}
from
'../../routers/ScreenNames'
;
import
{
decryptRSAString
,
encryptRSAString
}
from
'../../Config/Functions'
;
const
EnterPasswordSmartOTP
=
(
props
)
=>
{
const
navigation
=
useNavigation
();
const
[
firstNumber
,
setFirstNumber
]
=
useState
(
null
);
const
[
secondsNumber
,
setSecondsNumber
]
=
useState
(
null
);
const
[
thirdNumber
,
setThirdNumber
]
=
useState
(
null
);
const
[
fourNumber
,
setFourNumber
]
=
useState
(
null
);
useEffect
(()
=>
{
if
(
fourNumber
)
{
onCheckPINSmartOTPPin
();
}
},
[
fourNumber
]);
const
onNumberPress
=
(
number
)
=>
{
if
(
!
firstNumber
)
{
setFirstNumber
(
number
.
toString
());
}
else
if
(
!
secondsNumber
)
{
setSecondsNumber
(
number
.
toString
());
}
else
if
(
!
thirdNumber
)
{
setThirdNumber
(
number
.
toString
());
}
else
if
(
!
fourNumber
)
{
setFourNumber
(
number
.
toString
());
}
};
const
navigation
=
useNavigation
();
const
[
firstNumber
,
setFirstNumber
]
=
useState
(
null
);
const
[
secondsNumber
,
setSecondsNumber
]
=
useState
(
null
);
const
[
thirdNumber
,
setThirdNumber
]
=
useState
(
null
);
const
[
fourNumber
,
setFourNumber
]
=
useState
(
null
);
useEffect
(()
=>
{
if
(
fourNumber
)
{
onCheckPINSmartOTPPin
();
}
},
[
fourNumber
]);
const
onNumberPress
=
(
number
)
=>
{
if
(
!
firstNumber
)
{
setFirstNumber
(
number
.
toString
());
}
else
if
(
!
secondsNumber
)
{
setSecondsNumber
(
number
.
toString
());
}
else
if
(
!
thirdNumber
)
{
setThirdNumber
(
number
.
toString
());
}
else
if
(
!
fourNumber
)
{
setFourNumber
(
number
.
toString
());
}
};
const
onCheckPINSmartOTPPin
=
async
()
=>
{
let
pinCode
=
`
${
firstNumber
}${
secondsNumber
}${
thirdNumber
}${
fourNumber
}
`
;
props
.
showLoading
();
if
(
props
.
route
.
params
.
type
==
'CHANGE_SMART_OTP'
)
{
const
res
=
await
verifyOTPApiSmart
({
platform
:
Platform
.
OS
,
otp_password
:
pinCode
,
type
:
'VERIFY_OTP_PASSWORD'
,
});
if
(
res
.
data
.
code
==
200
)
{
navigation
.
navigate
(
CHANGESMARTOTP
,
{
old_password
:
pinCode
});
clearPIN
()
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
clearPIN
()
}
}
else
{
const
res
=
await
getOTPApiSmartOTP
({
platform
:
Platform
.
OS
,
otp_by
:
props
.
user
.
email
,
otp_password
:
pinCode
,
type
:
props
.
route
.
params
.
type
==
'DEPOSIT'
?
OTP_TYPE
.
CUSTOMER_REQUEST_DEPOSIT
:
OTP_TYPE
.
REQUEST_WITHDRAW
,
});
const
onCheckPINSmartOTPPin
=
async
()
=>
{
let
pinCode
=
`
${
firstNumber
}${
secondsNumber
}${
thirdNumber
}${
fourNumber
}
`
;
props
.
showLoading
();
if
(
props
.
route
.
params
.
type
==
'CHANGE_SMART_OTP'
)
{
const
res
=
await
verifyOTPApiSmart
({
platform
:
Platform
.
OS
,
otp_password
:
encryptRSAString
(
pinCode
),
type
:
'VERIFY_OTP_PASSWORD'
,
});
if
(
res
.
data
.
code
==
200
)
{
navigation
.
navigate
(
CHANGESMARTOTP
,
{
old_password
:
encryptRSAString
(
pinCode
),
TYPE
:
'CHANGE_SMART_OTP'
,
});
clearPIN
();
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
clearPIN
();
}
}
else
{
const
res
=
await
getOTPApiSmartOTP
({
platform
:
Platform
.
OS
,
otp_by
:
props
.
user
.
email
,
otp_password
:
encryptRSAString
(
pinCode
),
type
:
props
.
route
.
params
.
type
==
'DEPOSIT'
?
OTP_TYPE
.
CUSTOMER_REQUEST_DEPOSIT
:
OTP_TYPE
.
REQUEST_WITHDRAW
,
});
if
(
res
.
data
.
code
==
200
)
{
props
.
route
.
params
.
onGoToSmartOTP
(
pinCode
,
res
.
data
.
data
.
otp
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
clearPIN
()
}
}
props
.
hideLoading
();
};
const
clearPIN
=
()
=>
{
setFirstNumber
(
null
);
setSecondsNumber
(
null
);
setThirdNumber
(
null
);
setFourNumber
(
null
);
if
(
res
.
data
.
code
==
200
)
{
props
.
route
.
params
.
onGoToSmartOTP
(
pinCode
,
decryptRSAString
(
res
.
data
.
data
.
otp
),
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
clearPIN
();
}
}
props
.
hideLoading
();
};
const
clearPIN
=
()
=>
{
setFirstNumber
(
null
);
setSecondsNumber
(
null
);
setThirdNumber
(
null
);
setFourNumber
(
null
);
};
const
onDeletePress
=
()
=>
{
if
(
fourNumber
)
{
setFourNumber
(
null
);
}
else
if
(
thirdNumber
)
{
setThirdNumber
(
null
);
}
else
if
(
secondsNumber
)
{
setSecondsNumber
(
null
);
}
else
if
(
firstNumber
)
{
setFirstNumber
(
null
);
}
const
onDeletePress
=
()
=>
{
if
(
fourNumber
)
{
setFourNumber
(
null
);
}
else
if
(
thirdNumber
)
{
setThirdNumber
(
null
);
}
else
if
(
secondsNumber
)
{
setSecondsNumber
(
null
);
}
else
if
(
firstNumber
)
{
setFirstNumber
(
null
);
}
};
const
onReactivationSmartOTP
=
()
=>
{
navigation
.
navigate
(
RESET_SMART_OTP
,
{
title
:
'ReactivationSmartOTP'
});
};
};
const
onReactivationSmartOTP
=
()
=>
{
navigation
.
navigate
(
RESET_SMART_OTP
,
{
title
:
'ReactivationSmartOTP'
});
};
const
onForgotPINCode
=
()
=>
{
navigation
.
navigate
(
RESET_SMART_OTP
,
{
title
:
'ForgotSmartOTP'
});
};
return
(
<
EnterPasswordSmartOTPView
firstNumber
=
{
firstNumber
}
secondsNumber
=
{
secondsNumber
}
thirdNumber
=
{
thirdNumber
}
fourNumber
=
{
fourNumber
}
onNumberPress
=
{
onNumberPress
}
onDeletePress
=
{
onDeletePress
}
onForgotPINCode
=
{
onForgotPINCode
}
onReactivationSmartOTP
=
{
onReactivationSmartOTP
}
/
>
);
const
onForgotPINCode
=
()
=>
{
navigation
.
navigate
(
RESET_SMART_OTP
,
{
title
:
'ForgotSmartOTP'
});
};
return
(
<
EnterPasswordSmartOTPView
firstNumber
=
{
firstNumber
}
secondsNumber
=
{
secondsNumber
}
thirdNumber
=
{
thirdNumber
}
fourNumber
=
{
fourNumber
}
onNumberPress
=
{
onNumberPress
}
onDeletePress
=
{
onDeletePress
}
onForgotPINCode
=
{
onForgotPINCode
}
onReactivationSmartOTP
=
{
onReactivationSmartOTP
}
/
>
);
};
const
mapStateToProps
=
(
state
)
=>
{
return
{
user
:
state
.
userReducer
,
};
return
{
user
:
state
.
userReducer
,
};
};
export
default
connect
(
mapStateToProps
,
{
showLoading
,
hideLoading
})(
EnterPasswordSmartOTP
,
EnterPasswordSmartOTP
,
);
src/Screens/SmartOTP/SmartOTP.js
View file @
e1170e14
...
...
@@ -11,104 +11,113 @@ import {connect} from 'react-redux';
import
{
hideLoading
,
showLoading
}
from
'../../actions/loadingAction'
;
import
{
OTP_TYPE
}
from
'../../Config/constants'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
import
{
encryptRSAString
,
decryptRSAString
}
from
'../../Config/Functions'
;
const
SmartOTP
=
(
props
)
=>
{
const
[
value
,
setValue
]
=
useState
(
props
.
route
.
params
.
otp
);
const
[
progress
,
setProgress
]
=
useState
(
1
);
const
[
isReset
,
setReset
]
=
useState
(
false
);
const
navigate
=
useNavigation
();
useEffect
(()
=>
{
setValue
(
props
.
route
.
params
.
otp
);
},
[
props
.
route
.
params
.
otp
]);
const
confirm
=
async
()
=>
{
if
(
!
value
)
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'EnterOTPRequest'
));
}
else
if
(
value
.
length
!=
4
)
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'OTPInvalid'
));
}
else
{
props
.
showLoading
();
let
res1
=
await
verifyOTPApi
({
platform
:
Platform
.
OS
,
receiver_name
:
props
.
user
.
email
,
otp
:
value
,
type
:
props
.
route
.
params
.
type
==
'DEPOSIT'
?
OTP_TYPE
.
CUSTOMER_REQUEST_DEPOSIT
:
OTP_TYPE
.
REQUEST_WITHDRAW
,
});
if
(
res1
.
data
.
code
==
200
)
{
let
res
;
if
(
props
.
route
.
params
.
type
==
'DEPOSIT'
)
{
const
{
amount
,
notes
}
=
props
.
route
.
params
;
res
=
await
walletDeposit
({
amount
,
platform
:
Platform
.
OS
,
notes
,
fee
:
0
,
});
}
else
{
const
{
src
,
receiving_account
,
amount
,
notes
}
=
props
.
route
.
params
;
res
=
await
widthDraw
({
src
,
receiving_account
,
amount
,
platform
:
Platform
.
OS
,
notes
,
fee
:
0
,
});
}
const
[
value
,
setValue
]
=
useState
(
props
.
route
.
params
.
otp
);
const
[
progress
,
setProgress
]
=
useState
(
1
);
const
[
isReset
,
setReset
]
=
useState
(
false
);
const
navigate
=
useNavigation
();
useEffect
(()
=>
{
setValue
(
props
.
route
.
params
.
otp
);
},
[
props
.
route
.
params
.
otp
]);
const
confirm
=
async
()
=>
{
if
(
!
value
)
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'EnterOTPRequest'
));
}
else
if
(
value
.
length
!=
4
)
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'OTPInvalid'
));
}
else
{
props
.
showLoading
();
let
res1
=
await
verifyOTPApi
({
platform
:
Platform
.
OS
,
receiver_name
:
props
.
user
.
email
,
otp
:
encryptRSAString
(
value
),
type
:
props
.
route
.
params
.
type
==
'DEPOSIT'
?
OTP_TYPE
.
CUSTOMER_REQUEST_DEPOSIT
:
OTP_TYPE
.
REQUEST_WITHDRAW
,
});
props
.
hideLoading
();
if
(
res
.
data
.
code
==
200
)
{
setTimeout
(()
=>
{
showAlert
(
TYPE
.
SUCCESS
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
)
;
if
(
res1
.
data
.
code
==
200
)
{
let
res
;
if
(
props
.
route
.
params
.
type
==
'DEPOSIT'
)
{
const
{
amount
,
notes
}
=
props
.
route
.
params
;
navigate
.
navigate
(
TABNAVIGATOR
);
},
500
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res1
.
data
.
message
);
}
props
.
hideLoading
();
}
};
const
getNewOTP
=
async
()
=>
{
props
.
showLoading
();
const
res
=
await
getOTPApiSmartOTP
({
res
=
await
walletDeposit
({
amount
,
platform
:
Platform
.
OS
,
otp_by
:
props
.
user
.
email
,
otp_password
:
props
.
route
.
params
.
pinCode
,
type
:
props
.
route
.
params
.
type
==
'DEPOSIT'
?
OTP_TYPE
.
CUSTOMER_REQUEST_DEPOSIT
:
OTP_TYPE
.
REQUEST_WITHDRAW
,
});
if
(
res
.
data
.
code
==
200
)
{
setValue
(
res
.
data
.
data
.
otp
);
setReset
(
!
isReset
);
notes
,
fee
:
0
,
});
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
const
{
src
,
receiving_account
,
amount
,
notes
}
=
props
.
route
.
params
;
res
=
await
widthDraw
({
src
,
receiving_account
,
amount
,
platform
:
Platform
.
OS
,
notes
,
fee
:
0
,
});
}
props
.
hideLoading
();
};
if
(
res
.
data
.
code
==
200
)
{
setTimeout
(()
=>
{
showAlert
(
TYPE
.
SUCCESS
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
navigate
.
navigate
(
TABNAVIGATOR
);
},
500
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res1
.
data
.
message
);
}
props
.
hideLoading
();
}
};
const
getNewOTP
=
async
()
=>
{
props
.
showLoading
();
const
res
=
await
getOTPApiSmartOTP
({
platform
:
Platform
.
OS
,
otp_by
:
props
.
user
.
email
,
otp_password
:
encryptRSAString
(
props
.
route
.
params
.
pinCode
),
type
:
props
.
route
.
params
.
type
==
'DEPOSIT'
?
OTP_TYPE
.
CUSTOMER_REQUEST_DEPOSIT
:
OTP_TYPE
.
REQUEST_WITHDRAW
,
});
if
(
res
.
data
.
code
==
200
)
{
setValue
(
decryptRSAString
(
res
.
data
.
data
.
otp
));
setReset
(
!
isReset
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
props
.
hideLoading
();
};
const
updateProgress
=
(
count
)
=>
{
setProgress
(
count
>
0
?
count
/
300
:
0
);
};
const
updateProgress
=
(
count
)
=>
{
setProgress
(
count
>
0
?
count
/
300
:
0
);
};
return
<
SmartOTPView
value
=
{
value
}
progress
=
{
progress
}
confirm
=
{
confirm
}
isReset
=
{
isReset
}
getNewOTP
=
{
getNewOTP
}
updateProgress
=
{
updateProgress
}
setValue
=
{
setValue
}
/>
;
return
(
<
SmartOTPView
value
=
{
value
}
progress
=
{
progress
}
confirm
=
{
confirm
}
isReset
=
{
isReset
}
getNewOTP
=
{
getNewOTP
}
updateProgress
=
{
updateProgress
}
setValue
=
{
setValue
}
/
>
);
};
const
mapStateToProps
=
(
state
)
=>
{
return
{
user
:
state
.
userReducer
,
};
return
{
user
:
state
.
userReducer
,
};
};
export
default
connect
(
mapStateToProps
,
{
showLoading
,
hideLoading
})(
SmartOTP
);
src/Screens/VersionChecker/index.js
View file @
e1170e14
...
...
@@ -38,10 +38,9 @@ const VersionChecker = (props) => {
platform
:
Platform
.
OS
,
});
if
((
res
.
data
.
code
=
200
&&
res
.
data
.
data
))
{
console
.
log
(
res
);
if
(
res
.
data
.
data
[
0
].
version_name
!==
verCurrent
||
res
.
data
.
data
[
0
].
build
.
toString
()
!==
DeviceInfo
.
getBuildNumber
res
.
data
.
data
[
0
].
build
.
toString
()
!==
DeviceInfo
.
getBuildNumber
()
)
{
setVersion
(
res
.
data
.
data
[
0
].
version_name
);
setVisible
(
true
);
...
...
src/apis/Functions/ConfirmOTPSmart.js
View file @
e1170e14
...
...
@@ -16,7 +16,12 @@ import {
useBlurOnFulfill
,
useClearByFocusCell
,
}
from
'react-native-confirmation-code-field'
;
import
{
getFontXD
,
HEIGHTXD
,
WIDTHXD
}
from
'../../Config/Functions'
;
import
{
getFontXD
,
HEIGHTXD
,
WIDTHXD
,
encryptRSAString
,
}
from
'../../Config/Functions'
;
import
R
from
'../../assets/R'
;
import
{
TABNAVIGATOR
}
from
'../../routers/ScreenNames'
;
import
{
verifyOTPApi
}
from
'../../apis/Functions/users'
;
...
...
@@ -68,8 +73,10 @@ const ConfirmOTPSmart = (propsa) => {
propsa
.
showLoading
();
const
res
=
await
verifyStoreOTPApiSmart
({
platform
:
Platform
.
OS
,
password
:
propsa
.
route
.
params
.
password
,
password_confirmation
:
propsa
.
route
.
params
.
password_confirmation
,
password
:
encryptRSAString
(
propsa
.
route
.
params
.
password
),
password_confirmation
:
encryptRSAString
(
propsa
.
route
.
params
.
password_confirmation
,
),
otp
:
value
,
type
:
'FORGOT_PASSWORD'
,
});
...
...
src/apis/helpers.js
View file @
e1170e14
...
...
@@ -8,179 +8,169 @@ import {DeviceEventEmitter} from 'react-native';
axios
.
defaults
.
timeout
=
10000
;
export
async
function
GetData
(
url
,
data
)
{
const
token
=
await
AsyncStorage
.
getItem
(
KEY
.
TOKEN
);
let
myRequest
=
{
method
:
'get'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'application/json'
,
Authorization
:
'Bearer '
+
token
,
},
params
:
{
...
data
,
},
timeout
:
30
*
1000
,
// withCredentials: true,
};
console
.
log
(
'My request'
,
myRequest
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
console
.
log
(
error
.
request
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
const
token
=
await
AsyncStorage
.
getItem
(
KEY
.
TOKEN
);
let
myRequest
=
{
method
:
'get'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'application/json'
,
Authorization
:
'Bearer '
+
token
,
},
params
:
{
...
data
,
},
timeout
:
30
*
1000
,
// withCredentials: true,
};
console
.
log
(
'My request'
,
myRequest
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
console
.
log
(
error
.
request
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
}
export
async
function
PostLogin
(
url
,
json
)
{
let
myRequest
=
{
method
:
'post'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'application/json'
,
},
timeout
:
30
*
1000
,
data
:
JSON
.
stringify
(
json
),
};
console
.
log
(
'post data mobile'
,
myRequest
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
console
.
log
(
error
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
let
myRequest
=
{
method
:
'post'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'application/json'
,
},
timeout
:
30
*
1000
,
data
:
JSON
.
stringify
(
json
),
};
console
.
log
(
'post data mobile'
,
myRequest
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
return
response
;
})
.
then
((
response
)
=>
{
return
response
;
})
.
catch
((
error
)
=>
{
console
.
log
(
error
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
}
export
async
function
PostData
(
url
,
json
,
isAuth
=
true
)
{
const
token
=
await
AsyncStorage
.
getItem
(
KEY
.
TOKEN
);
console
.
log
(
token
);
let
myRequest
=
{
method
:
'post'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'application/json'
,
Authorization
:
'Bearer '
+
token
,
},
timeout
:
30
*
1000
,
data
:
JSON
.
stringify
(
json
),
};
console
.
log
(
'post data mobile'
,
myRequest
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
console
.
log
(
error
.
request
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
const
token
=
await
AsyncStorage
.
getItem
(
KEY
.
TOKEN
);
console
.
log
(
token
);
let
myRequest
=
{
method
:
'post'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'application/json'
,
Authorization
:
'Bearer '
+
token
,
},
timeout
:
30
*
1000
,
data
:
JSON
.
stringify
(
json
),
};
console
.
log
(
'post data mobile'
,
myRequest
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
console
.
log
(
error
.
request
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
}
export
async
function
PostFormData
(
url
,
data
)
{
const
token
=
await
AsyncStorage
.
getItem
(
KEY
.
TOKEN
);
const
source
=
axios
.
CancelToken
.
source
();
const
timeout
=
setTimeout
(()
=>
{
source
.
cancel
();
// Timeout Logic
},
60000
);
console
.
log
(
token
);
let
myRequest
=
{
method
:
'post'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'multipart/form-data'
,
Authorization
:
'Bearer '
+
token
,
},
timeout
:
60000
,
data
:
data
,
cancelToken
:
source
.
token
,
};
console
.
log
(
'post data mobile'
,
myRequest
.
data
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
clearTimeout
(
timeout
);
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
clearTimeout
(
timeout
);
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
clearTimeout
(
timeout
);
console
.
log
(
'errorTimeout'
,
error
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
const
token
=
await
AsyncStorage
.
getItem
(
KEY
.
TOKEN
);
const
source
=
axios
.
CancelToken
.
source
();
const
timeout
=
setTimeout
(()
=>
{
source
.
cancel
();
// Timeout Logic
},
60000
);
console
.
log
(
token
);
let
myRequest
=
{
method
:
'post'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'multipart/form-data'
,
Authorization
:
'Bearer '
+
token
,
},
timeout
:
60000
,
data
:
data
,
cancelToken
:
source
.
token
,
};
console
.
log
(
'post data mobile'
,
myRequest
.
data
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
clearTimeout
(
timeout
);
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
clearTimeout
(
timeout
);
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
clearTimeout
(
timeout
);
console
.
log
(
'errorTimeout'
,
error
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
}
/**
...
...
@@ -190,46 +180,46 @@ export async function PostFormData(url, data) {
* @param {*} isAuth is state auth
*/
export
async
function
PutData
(
url
,
json
,
isAuth
=
true
)
{
const
token
=
await
AsyncStorage
.
getItem
(
KEY
.
TOKEN
);
let
myRequest
=
{
method
:
'put'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'application/json'
,
Authorization
:
'Bearer '
+
token
,
},
data
:
JSON
.
stringify
(
json
),
};
console
.
log
(
'PutData'
,
myRequest
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
console
.
log
(
error
.
request
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
const
token
=
await
AsyncStorage
.
getItem
(
KEY
.
TOKEN
);
let
myRequest
=
{
method
:
'put'
,
url
,
headers
:
{
Accept
:
'application/json'
,
'Content-Type'
:
'application/json'
,
Authorization
:
'Bearer '
+
token
,
},
data
:
JSON
.
stringify
(
json
),
};
console
.
log
(
'PutData'
,
myRequest
);
return
await
axios
(
myRequest
)
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
then
((
response
)
=>
{
if
(
response
.
data
?.
code
===
401
)
{
logout
();
return
;
}
else
{
return
response
;
}
})
.
catch
((
error
)
=>
{
console
.
log
(
error
.
request
);
const
err
=
{
message
:
'error'
,
status
:
error
.
request
.
status
,
};
return
err
;
});
}
export
function
logout
()
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'LoginSessionEnd'
));
DeviceEventEmitter
.
emit
(
'logout'
);
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'LoginSessionEnd'
));
DeviceEventEmitter
.
emit
(
'logout'
);
}
src/apis/url.js
View file @
e1170e14
export
const
root
=
'http://services.dcvinvest.com/'
;
export
default
{
urllogin
:
root
+
'api/auth/customer-login'
,
urllogin
:
root
+
'api/
v2/
auth/customer-login'
,
urlRegistor
:
root
+
'api/auth/customer-register'
,
urlGetListMethod
:
root
+
'api/v1/payments/get-list-deposit-method'
,
urlGetOTP
:
root
+
'api/auth/customer-get-otp'
,
...
...
src/helper/i18/locales/en.js
View file @
e1170e14
...
...
@@ -308,7 +308,7 @@ export default {
SettingOTP
:
'Setting Smart OTP'
,
SettingGeneral
:
'Setting general'
,
ChangeSmartOTP
:
'
Change s
mart OTP'
,
ChangeSmartOTP
:
'
S
mart OTP'
,
Rules
:
'Rules'
,
FAQs
:
'FAQs'
,
...
...
@@ -327,4 +327,5 @@ export default {
ForgotSmartOTP
:
'Forgot Smart OTP'
,
WarnMaxReqestWithdraw
:
'Invalid withdrawal amount'
,
YouHaveNotSettingSmartOTP
:
'You have not installed Smart OTP'
,
OTP
:
'Enter OTP'
,
};
src/helper/i18/locales/vn.js
View file @
e1170e14
...
...
@@ -311,7 +311,7 @@ export default {
EnterSmartOTPPINNEW
:
'Vui lòng nhập mã PIN Smart OTP mới'
,
AddSmartOTP
:
'Thêm Smart OTP'
,
ChangeSmartOTP
:
'
Đổi m
ã PIN Smart OTP'
,
ChangeSmartOTP
:
'
M
ã PIN Smart OTP'
,
Rules
:
'Điều khoản và điều kiện'
,
FAQs
:
'FAQs'
,
...
...
@@ -324,4 +324,5 @@ export default {
ResetSmartOTP2
:
' bấm phím 3 để gặp nhân viên hỗ trợ kỹ thuật.'
,
ForgotSmartOTP
:
'Quên Smart OTP'
,
YouHaveNotSettingSmartOTP
:
'Bạn chưa cài đặt Smart OTP'
,
OTP
:
'Nhập OTP'
,
};
src/routers/ScreenNames.js
View file @
e1170e14
...
...
@@ -93,3 +93,5 @@ export const CONFIRMCHANGESMARTOTP = 'CONFIRMCHANGESMARTOTP';
export
const
RULESSMARTOTP
=
'RULESSMARTOTP'
;
export
const
FAQSSMARTOTP
=
'FAQSSMARTOTP'
;
export
const
CONFIRMCREATEOTP
=
'CONFIRMCREATEOTP'
;
src/routers/StackNavigation.js
View file @
e1170e14
...
...
@@ -67,6 +67,7 @@ import ConfirmChangeSmartOTP from '../Screens/SmartOTP/ChangeSmartOTP/ConfirmCha
import
FAQs
from
'../Screens/SmartOTP/WebView/FAQs'
;
import
RulesSmartOTP
from
'../Screens/SmartOTP/WebView/RulesSmartOTP'
;
import
ConfirmCreate
from
'../Screens/SmartOTP/ConfirmCreate/ConfirmCreate'
;
import
*
as
ScreenName
from
'./ScreenNames'
;
...
...
@@ -86,9 +87,14 @@ function MyStack(props) {
headerMode
=
{
'none'
}
initialRouteName
=
{
ScreenName
.
AUTHEN
}
>
<
Stack
.
Screen
name
=
{
ScreenName
.
CONFIRMCREATEOTP
}
component
=
{
ConfirmCreate
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
CACULATEDDEPOSIT
}
component
=
{
CaculatedDeposit
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
CONFIRMOTPSMART
}
component
=
{
ConfirmOTPSmart
}
...
...
@@ -172,8 +178,14 @@ function MyStack(props) {
<
Stack
.
Screen
name
=
{
ScreenName
.
NEWPASSWORD
}
component
=
{
NewPassWord
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
PRODUCTDETAIL
}
component
=
{
ProductDetail
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
SMARTOTP
}
component
=
{
SmartOTP
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
ENTER_PASSWORD_SMART_OTP
}
component
=
{
EnterPasswordSmartOTP
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
RESET_SMART_OTP
}
component
=
{
ResetSmartOTP
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
ENTER_PASSWORD_SMART_OTP
}
component
=
{
EnterPasswordSmartOTP
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
RESET_SMART_OTP
}
component
=
{
ResetSmartOTP
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
FAQSSMARTOTP
}
component
=
{
FAQs
}
/
>
<
Stack
.
Screen
name
=
{
ScreenName
.
RULESSMARTOTP
}
component
=
{
RulesSmartOTP
}
/
>
...
...
src/routers/TabNavigation.js
View file @
e1170e14
...
...
@@ -21,6 +21,7 @@ import {
AccountVerification
,
PACKETCQG
,
SETTINGOTP
,
CHANGESMARTOTP
,
}
from
'../routers/ScreenNames'
;
import
I18n
,
{
setLocation
}
from
'../helper/i18/i18n'
;
import
{
changeLanguage
}
from
'../actions/language'
;
...
...
@@ -110,7 +111,10 @@ const TabNavigator = (props) => {
?
'Bạn có muốn cài đặt Smart OTP?'
:
'Do you want setting Smart OTP?'
,
()
=>
{
navigate
.
navigate
(
SETTINGOTP
);
navigate
.
navigate
(
CHANGESMARTOTP
,
{
TYPE
:
'CREATE_SMART_OTP'
,
old_password
:
null
,
});
},
);
}
else
if
(
props
.
user
.
status
==
3
&&
!
props
.
user
.
contract_code
)
{
...
...
yarn.lock
View file @
e1170e14
...
...
@@ -5205,6 +5205,11 @@ jsdom@^16.4.0:
ws "^7.2.3"
xml-name-validator "^3.0.0"
jsencrypt@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/jsencrypt/-/jsencrypt-3.2.0.tgz#09242aabf1984165dcd7698fe6ed163be77c05f8"
integrity sha512-Y/WBrCYRP1A2I1OEXxqurO+W3AC5uXhiArprpYQ0Y8/1Dc3NaiINAyCLx7HzXGwN7xvW3s5xpeOTdwD7lD1SQQ==
jsesc@^2.5.1:
version "2.5.2"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment