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
d29f7c31
Commit
d29f7c31
authored
3 years ago
by
Nguyễn Thị Thúy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
integrate OTP
parent
da896881
switch_rsa
…
build_01_July
build_02_July
build_06_07
build_11_June
build_14_June
build_15_july
build_30_June
build_release_1806
dev_01_July
dev_05_July
dev_10_June
dev_11_June
dev_14_July
dev_18_June
dev_phase2
ekyc
enter_smart_otp
forgot_smart_otp_pin
func_fingerprint_login
func_smart_otp
new_10_June
search_period
2 merge requests
!17
integrate OTP
,
!21
Func smart otp
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
214 additions
and
150 deletions
+214
-150
constants.js
src/Config/constants.js
+4
-0
WalletDeposit.js
src/Screens/Action/Wallet/WalletDeposit.js
+14
-18
WalletWithdraw.js
src/Screens/Action/Wallet/WalletWithdraw.js
+4
-15
EnterPasswordSmartOTP.js
src/Screens/SmartOTP/EnterPasswordSmartOTP.js
+61
-36
SmartOTP.js
src/Screens/SmartOTP/SmartOTP.js
+42
-24
SmartOTPView.js
src/Screens/SmartOTP/SmartOTPView.js
+36
-23
CountDown.js
src/components/CountDown.js
+51
-32
en.js
src/helper/i18/locales/en.js
+1
-1
vn.js
src/helper/i18/locales/vn.js
+1
-1
No files found.
src/Config/constants.js
View file @
d29f7c31
...
@@ -7,3 +7,7 @@ export const RadioBuySaleEN = [
...
@@ -7,3 +7,7 @@ export const RadioBuySaleEN = [
{
label
:
'Buy'
,
value
:
'BUY_IN'
},
{
label
:
'Buy'
,
value
:
'BUY_IN'
},
{
label
:
'Sell'
,
value
:
'SELL_OUT'
},
{
label
:
'Sell'
,
value
:
'SELL_OUT'
},
];
];
export
const
OTP_TYPE
=
{
CUSTOMER_REQUEST_DEPOSIT
:
'CUSTOMER_REQUEST_DEPOSIT'
,
REQUEST_WITHDRAW
:
'REQUEST_WITHDRAW'
,
}
This diff is collapsed.
Click to expand it.
src/Screens/Action/Wallet/WalletDeposit.js
View file @
d29f7c31
...
@@ -30,10 +30,11 @@ import {showLoading, hideLoading} from '../../../actions/loadingAction';
...
@@ -30,10 +30,11 @@ import {showLoading, hideLoading} from '../../../actions/loadingAction';
import
{
walletDeposit
}
from
'../../../apis/Functions/Deposit'
;
import
{
walletDeposit
}
from
'../../../apis/Functions/Deposit'
;
import
TextMoney
from
'../../../components/Input/InputMoney'
;
import
TextMoney
from
'../../../components/Input/InputMoney'
;
import
I18n
from
'../../../helper/i18/i18n'
;
import
I18n
from
'../../../helper/i18/i18n'
;
import
{
OTPWALLET
}
from
'../../../routers/ScreenNames'
;
import
{
ENTER_PASSWORD_SMART_OTP
,
OTPWALLET
,
SMARTOTP
}
from
'../../../routers/ScreenNames'
;
import
{
getOTPApi
}
from
'../../../apis/Functions/users'
;
import
{
getOTPApi
}
from
'../../../apis/Functions/users'
;
import
{
showAlert
,
TYPE
}
from
'../../../components/DropdownAlert'
;
import
{
showAlert
,
TYPE
}
from
'../../../components/DropdownAlert'
;
import
EnterPasswordSmartOTP
from
'../../SmartOTP/EnterPasswordSmartOTP'
;
const
{
width
}
=
Dimensions
.
get
(
'window'
);
const
{
width
}
=
Dimensions
.
get
(
'window'
);
...
@@ -50,26 +51,21 @@ const WalletDeposit = (props) => {
...
@@ -50,26 +51,21 @@ const WalletDeposit = (props) => {
const
index
=
checkFormatArray
([
amount
,
notes
]);
const
index
=
checkFormatArray
([
amount
,
notes
]);
if
(
index
===
true
)
{
if
(
index
===
true
)
{
props
.
showLoading
();
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
const
res
=
await
getOTPApi
({
onGoToSmartOTP
:
(
pinCode
,
otp
)
=>
onGoToSmartOTP
(
pinCode
,
otp
)
platform
:
Platform
.
OS
,
otp_by
:
props
.
user
.
email
,
type
:
'CUSTOMER_REQUEST_DEPOSIT'
,
});
});
props
.
hideLoading
();
if
(
res
.
data
.
code
==
200
)
{
navigate
.
navigate
(
OTPWALLET
,
{
type
:
'DEPOSIT'
,
amount
,
notes
});
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
}
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
(
return
(
<
KeyboardAvoidingView
<
KeyboardAvoidingView
behavior
=
{
Platform
.
Os
===
'ios'
?
'padding'
:
'height'
}
behavior
=
{
Platform
.
Os
===
'ios'
?
'padding'
:
'height'
}
...
...
This diff is collapsed.
Click to expand it.
src/Screens/Action/Wallet/WalletWithdraw.js
View file @
d29f7c31
...
@@ -97,22 +97,9 @@ const WalletWithdraw = (props) => {
...
@@ -97,22 +97,9 @@ const WalletWithdraw = (props) => {
if
(
index
===
true
)
{
if
(
index
===
true
)
{
if
(
amount
>=
props
.
user
.
configs
.
request_withdraw_amount_min
)
{
if
(
amount
>=
props
.
user
.
configs
.
request_withdraw_amount_min
)
{
// props.showLoading();
// const res = await getOTPApi({
// platform: Platform.OS,
// otp_by: props.user.email,
// type: 'REQUEST_WITHDRAW',
// });
// props.hideLoading();
// if (res.data.code == 200) {
// console.log('get OTP', res.data)
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
navigate
.
navigate
(
ENTER_PASSWORD_SMART_OTP
,
{
onGoToSmartOTP
:
(
)
=>
onGoToSmartOTP
(
)
onGoToSmartOTP
:
(
pinCode
,
otp
)
=>
onGoToSmartOTP
(
pinCode
,
otp
)
});
});
// } else {
// showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message);
// }
// props.hideLoading();
}
else
{
}
else
{
showAlert
(
showAlert
(
TYPE
.
WARN
,
TYPE
.
WARN
,
...
@@ -129,7 +116,7 @@ const WalletWithdraw = (props) => {
...
@@ -129,7 +116,7 @@ const WalletWithdraw = (props) => {
}
}
};
};
const
onGoToSmartOTP
=
()
=>
{
const
onGoToSmartOTP
=
(
pinCode
,
otp
)
=>
{
navigate
.
goBack
()
navigate
.
goBack
()
navigate
.
navigate
(
SMARTOTP
,
{
navigate
.
navigate
(
SMARTOTP
,
{
type
:
'WITHDRAW'
,
type
:
'WITHDRAW'
,
...
@@ -137,6 +124,8 @@ const WalletWithdraw = (props) => {
...
@@ -137,6 +124,8 @@ const WalletWithdraw = (props) => {
receiving_account
:
type
.
id
,
receiving_account
:
type
.
id
,
amount
,
amount
,
notes
,
notes
,
pinCode
,
otp
,
});
});
}
}
...
...
This diff is collapsed.
Click to expand it.
src/Screens/SmartOTP/EnterPasswordSmartOTP.js
View file @
d29f7c31
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
EnterPasswordSmartOTPView
from
'./EnterPasswordSmartOTPView'
;
import
EnterPasswordSmartOTPView
from
'./EnterPasswordSmartOTPView'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
import
{
getOTPApiSmartOTP
}
from
'../../apis/Functions/users'
;
import
{
showAlert
,
TYPE
}
from
'../../components/DropdownAlert'
;
import
I18n
from
'../../helper/i18/i18n'
;
import
{
connect
}
from
'react-redux'
;
import
{
hideLoading
,
showLoading
}
from
'../../actions/loadingAction'
;
import
{
OTP_TYPE
}
from
'../../Config/constants'
;
const
EnterPasswordSmartOTP
=
(
props
)
=>
{
const
EnterPasswordSmartOTP
=
(
props
)
=>
{
const
[
firstNumber
,
setFirstNumber
]
=
useState
(
null
)
const
[
firstNumber
,
setFirstNumber
]
=
useState
(
null
);
const
[
secondsNumber
,
setSecondsNumber
]
=
useState
(
null
)
const
[
secondsNumber
,
setSecondsNumber
]
=
useState
(
null
);
const
[
thirdNumber
,
setThirdNumber
]
=
useState
(
null
)
const
[
thirdNumber
,
setThirdNumber
]
=
useState
(
null
);
const
[
fourNumber
,
setFourNumber
]
=
useState
(
null
)
const
[
fourNumber
,
setFourNumber
]
=
useState
(
null
);
const
navigate
=
useNavigation
();
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
fourNumber
)
{
if
(
fourNumber
)
{
onCheckPINSmartOTPPin
()
onCheckPINSmartOTPPin
()
;
}
}
},
[
fourNumber
])
},
[
fourNumber
])
;
const
onNumberPress
=
(
number
)
=>
{
const
onNumberPress
=
(
number
)
=>
{
console
.
log
(
number
.
toString
())
if
(
!
firstNumber
)
{
if
(
!
firstNumber
)
{
setFirstNumber
(
number
.
toString
());
setFirstNumber
(
number
.
toString
())
}
else
if
(
!
secondsNumber
)
{
}
else
if
(
!
secondsNumber
)
{
setSecondsNumber
(
number
.
toString
());
setSecondsNumber
(
number
.
toString
())
}
else
if
(
!
thirdNumber
)
{
}
else
if
(
!
thirdNumber
)
{
setThirdNumber
(
number
.
toString
());
setThirdNumber
(
number
.
toString
())
}
else
if
(
!
fourNumber
)
{
}
else
if
(
!
fourNumber
)
{
setFourNumber
(
number
.
toString
());
setFourNumber
(
number
.
toString
())
}
}
}
}
;
const
onCheckPINSmartOTPPin
=
()
=>
{
const
onCheckPINSmartOTPPin
=
async
()
=>
{
let
pinCode
=
`
${
firstNumber
}${
secondsNumber
}${
thirdNumber
}${
fourNumber
}
`
let
pinCode
=
`
${
firstNumber
}${
secondsNumber
}${
thirdNumber
}${
fourNumber
}
`
;
console
.
log
(
pinCode
)
props
.
showLoading
();
props
.
route
.
params
.
onGoToSmartOTP
()
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
,
});
props
.
hideLoading
();
if
(
res
.
data
.
code
==
200
)
{
props
.
route
.
params
.
onGoToSmartOTP
(
pinCode
,
res
.
data
.
data
.
otp
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
setFirstNumber
(
null
);
setSecondsNumber
(
null
);
setThirdNumber
(
null
);
setFourNumber
(
null
);
}
};
const
onDeletePress
=
()
=>
{
const
onDeletePress
=
()
=>
{
if
(
fourNumber
)
{
if
(
fourNumber
)
{
setFourNumber
(
null
)
setFourNumber
(
null
)
;
}
else
if
(
thirdNumber
)
{
}
else
if
(
thirdNumber
)
{
setThirdNumber
(
null
)
setThirdNumber
(
null
)
;
}
else
if
(
secondsNumber
)
{
}
else
if
(
secondsNumber
)
{
setSecondsNumber
(
null
)
setSecondsNumber
(
null
)
;
}
else
if
(
firstNumber
)
{
}
else
if
(
firstNumber
)
{
setFirstNumber
(
null
)
setFirstNumber
(
null
)
;
}
}
}
}
;
const
onReactivationSmartOTP
=
()
=>
{
const
onReactivationSmartOTP
=
()
=>
{
}
}
;
const
onForgotPINCode
=
()
=>
{
const
onForgotPINCode
=
()
=>
{
}
}
;
return
<
EnterPasswordSmartOTPView
return
<
EnterPasswordSmartOTPView
firstNumber
=
{
firstNumber
}
firstNumber
=
{
firstNumber
}
secondsNumber
=
{
secondsNumber
}
secondsNumber
=
{
secondsNumber
}
...
@@ -60,4 +78,11 @@ const EnterPasswordSmartOTP = (props) => {
...
@@ -60,4 +78,11 @@ const EnterPasswordSmartOTP = (props) => {
onReactivationSmartOTP
=
{
onReactivationSmartOTP
}
onReactivationSmartOTP
=
{
onReactivationSmartOTP
}
/>
;
/>
;
};
};
export
default
EnterPasswordSmartOTP
;
const
mapStateToProps
=
(
state
)
=>
{
return
{
user
:
state
.
userReducer
,
};
};
export
default
connect
(
mapStateToProps
,
{
showLoading
,
hideLoading
})(
EnterPasswordSmartOTP
);
This diff is collapsed.
Click to expand it.
src/Screens/SmartOTP/SmartOTP.js
View file @
d29f7c31
import
React
,
{
useState
}
from
'react'
;
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
SmartOTPView
from
'./SmartOTPView'
;
import
SmartOTPView
from
'./SmartOTPView'
;
import
{
showAlert
,
TYPE
}
from
'../../components/DropdownAlert'
;
import
{
showAlert
,
TYPE
}
from
'../../components/DropdownAlert'
;
import
I18n
from
'../../helper/i18/i18n'
;
import
I18n
from
'../../helper/i18/i18n'
;
import
{
verifyOTPApi
}
from
'../../apis/Functions/users'
;
import
{
getOTPApiSmartOTP
,
verifyOTPApi
}
from
'../../apis/Functions/users'
;
import
{
Platform
}
from
'react-native'
;
import
{
Platform
}
from
'react-native'
;
import
{
walletDeposit
}
from
'../../apis/Functions/Deposit'
;
import
{
walletDeposit
}
from
'../../apis/Functions/Deposit'
;
import
{
widthDraw
}
from
'../../apis/Functions/Widthdraw'
;
import
{
widthDraw
}
from
'../../apis/Functions/Widthdraw'
;
import
{
TABNAVIGATOR
}
from
'../../routers/ScreenNames'
;
import
{
TABNAVIGATOR
}
from
'../../routers/ScreenNames'
;
import
moment
from
'moment'
;
import
{
connect
}
from
'react-redux'
;
import
{
connect
}
from
'react-redux'
;
import
{
hideLoading
,
showLoading
}
from
'../../actions/loadingAction'
;
import
{
hideLoading
,
showLoading
}
from
'../../actions/loadingAction'
;
import
{
OTP_TYPE
}
from
'../../Config/constants'
;
import
{
useNavigation
}
from
'@react-navigation/native'
;
const
SmartOTP
=
(
props
)
=>
{
const
SmartOTP
=
(
props
)
=>
{
const
[
value
,
setValue
]
=
useState
(
'132 563'
);
const
[
value
,
setValue
]
=
useState
(
props
.
route
.
params
.
otp
);
const
[
time
,
setTime
]
=
useState
(
moment
().
format
(
'DD-MM-YYYY hh:mm'
));
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
()
=>
{
const
confirm
=
async
()
=>
{
if
(
!
value
)
{
if
(
!
value
)
{
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'EnterOTPRequest'
));
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'EnterOTPRequest'
));
...
@@ -23,25 +28,15 @@ const SmartOTP = (props) => {
...
@@ -23,25 +28,15 @@ const SmartOTP = (props) => {
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'OTPInvalid'
));
showAlert
(
TYPE
.
WARN
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'OTPInvalid'
));
}
else
{
}
else
{
props
.
showLoading
();
props
.
showLoading
();
let
res1
;
let
res1
=
await
verifyOTPApi
({
if
(
props
.
route
.
params
.
type
==
'DEPOSIT'
)
{
platform
:
Platform
.
OS
,
res1
=
await
verifyOTPApi
({
receiver_name
:
props
.
user
.
email
,
platform
:
Platform
.
OS
,
otp
:
value
,
receiver_name
:
props
.
user
.
email
,
type
:
props
.
route
.
params
.
type
==
'DEPOSIT'
?
OTP_TYPE
.
CUSTOMER_REQUEST_DEPOSIT
:
OTP_TYPE
.
REQUEST_WITHDRAW
,
otp
:
value
,
});
type
:
'CUSTOMER_REQUEST_DEPOSIT'
,
});
}
else
{
res1
=
await
verifyOTPApi
({
platform
:
Platform
.
OS
,
receiver_name
:
props
.
user
.
email
,
otp
:
value
,
type
:
'REQUEST_WITHDRAW'
,
});
}
if
(
res1
.
data
.
code
==
200
)
{
if
(
res1
.
data
.
code
==
200
)
{
let
res
;
let
res
;
if
(
props
.
route
.
params
.
type
==
'DEPOSIT'
)
{
if
(
props
.
route
.
params
.
type
==
'DEPOSIT'
)
{
const
{
amount
,
notes
}
=
props
.
route
.
params
;
const
{
amount
,
notes
}
=
props
.
route
.
params
;
...
@@ -80,11 +75,34 @@ const SmartOTP = (props) => {
...
@@ -80,11 +75,34 @@ const SmartOTP = (props) => {
props
.
hideLoading
();
props
.
hideLoading
();
}
}
};
};
const
getNewOTP
=
async
()
=>
{
props
.
showLoading
();
const
res
=
await
getOTPApiSmartOTP
({
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
);
}
else
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
res
.
data
.
message
);
}
props
.
hideLoading
();
};
const
updateProgress
=
(
count
)
=>
{
setProgress
(
count
>
0
?
count
/
300
:
0
);
};
return
<
SmartOTPView
return
<
SmartOTPView
value
=
{
value
}
value
=
{
value
}
time
=
{
time
}
progress
=
{
progress
}
confirm
=
{
confirm
}
confirm
=
{
confirm
}
isReset
=
{
isReset
}
getNewOTP
=
{
getNewOTP
}
updateProgress
=
{
updateProgress
}
setValue
=
{
setValue
}
/>
;
setValue
=
{
setValue
}
/>
;
};
};
const
mapStateToProps
=
(
state
)
=>
{
const
mapStateToProps
=
(
state
)
=>
{
...
...
This diff is collapsed.
Click to expand it.
src/Screens/SmartOTP/SmartOTPView.js
View file @
d29f7c31
...
@@ -5,13 +5,14 @@ import I18n from '../../helper/i18/i18n';
...
@@ -5,13 +5,14 @@ import I18n from '../../helper/i18/i18n';
import
{
getFontXD
,
getWidth
,
HEIGHTXD
,
WIDTHXD
}
from
'../../Config/Functions'
;
import
{
getFontXD
,
getWidth
,
HEIGHTXD
,
WIDTHXD
}
from
'../../Config/Functions'
;
import
R
from
'../../assets/R'
;
import
R
from
'../../assets/R'
;
import
*
as
Progress
from
'react-native-progress'
;
import
*
as
Progress
from
'react-native-progress'
;
import
CountDown
from
'../../components/CountDown'
;
const
SmartOTPView
=
(
props
)
=>
{
const
SmartOTPView
=
(
props
)
=>
{
return
<
View
style
=
{{
flex
:
1
}}
>
return
<
View
style
=
{{
flex
:
1
}}
>
<
HeaderBack
title
=
{
'SmartOTP'
}
/
>
<
HeaderBack
title
=
{
'SmartOTP'
}
/
>
<
View
style
=
{
styles
.
viewOTP
}
>
<
View
style
=
{
styles
.
viewOTP
}
>
<
Progress
.
Bar
progress
=
{
1
}
<
Progress
.
Bar
progress
=
{
props
.
progress
}
width
=
{
getWidth
()
-
HEIGHTXD
(
160
)}
width
=
{
getWidth
()
-
HEIGHTXD
(
160
)}
height
=
{
HEIGHTXD
(
15
)}
height
=
{
HEIGHTXD
(
15
)}
color
=
{
R
.
colors
.
main
}
color
=
{
R
.
colors
.
main
}
...
@@ -19,8 +20,11 @@ const SmartOTPView = (props) => {
...
@@ -19,8 +20,11 @@ const SmartOTPView = (props) => {
borderWidth
=
{
0
}
borderWidth
=
{
0
}
borderRadius
=
{
10
}
borderRadius
=
{
10
}
/
>
/
>
<
Text
style
=
{[
styles
.
textNormal
,
{
marginTop
:
HEIGHTXD
(
40
)}]}
>
<
Text
style
=
{{
marginTop
:
HEIGHTXD
(
40
)}}
>
{
I18n
.
t
(
'OTPWillAutoUpdate'
)}
<
Text
style
=
{[
styles
.
textNormal
]}
>
{
I18n
.
t
(
'OTPWillAutoUpdate'
)}
<
/Text
>
<
CountDown
isReset
=
{
props
.
isReset
}
isFromSmartOTP
=
{
true
}
autoRefress
=
{()
=>
props
.
getNewOTP
()
}
updateProgress
=
{(
count
)
=>
{
props
.
updateProgress
(
count
)}}
/
>
<
/Text
>
<
/Text
>
<
Text
style
=
{
styles
.
textOTP
}
>
<
Text
style
=
{
styles
.
textOTP
}
>
{
props
.
value
}
{
props
.
value
}
...
@@ -35,32 +39,41 @@ const SmartOTPView = (props) => {
...
@@ -35,32 +39,41 @@ const SmartOTPView = (props) => {
<
/Text
>
<
/Text
>
<
/View
>
<
/View
>
<
View
style
=
{{
{
/*<View style={{*/
}
flexDirection
:
'row'
,
{
/* flexDirection: 'row',*/
}
marginHorizontal
:
HEIGHTXD
(
40
),
{
/* marginHorizontal: HEIGHTXD(40),*/
}
}}
>
{
/*}}>*/
}
<
Text
style
=
{[
styles
.
textNormal
,
{
{
/* <Text style={[styles.textNormal, {*/
}
color
:
R
.
colors
.
main
,
{
/* color: R.colors.main,*/
}
}]}
>
{
/* }]}>*/
}
Serial
:
5324535436456576
{
/* Serial: 5324535436456576*/
}
<
/Text
>
{
/* </Text>*/
}
<
Text
style
=
{[
styles
.
textNormal
,
{
{
/* <Text style={[styles.textNormal, {*/
}
color
:
R
.
colors
.
main
,
position
:
'absolute'
,
{
/* color: R.colors.main, position: 'absolute',*/
}
right
:
HEIGHTXD
(
0
),
{
/* right: HEIGHTXD(0),*/
}
}]}
>
{
/* }]}>*/
}
{
props
.
time
}
{
/* {props.time}*/
}
<
/Text
>
{
/* </Text>*/
}
<
/View
>
{
/*</View>*/
}
<
View
style
=
{{
<
View
style
=
{{
marginHorizontal
:
HEIGHTXD
(
40
),
marginHorizontal
:
HEIGHTXD
(
40
),
marginVertical
:
HEIGHTXD
(
40
),
marginVertical
:
HEIGHTXD
(
40
),
}}
>
}}
>
<
Text
style
=
{[
styles
.
textNormal
,
{
textAlign
:
'left'
}]}
>
{
I18n
.
t
(
'SmartOTPUsingFor'
)}
<
/Text
>
<
Text
style
=
{[
styles
.
textNormal
,
{
textAlign
:
'left'
}]}
>
{
I18n
.
t
(
'SmartOTPUsingFor'
)}
<
/Text
>
<
Text
style
=
{[
styles
.
textNormal
,
{
textAlign
:
'left'
,
marginTop
:
HEIGHTXD
(
20
)}]}
>
{
I18n
.
t
(
'SmartOTPUsingForFirst'
)}
<
/Text
>
<
Text
style
=
{[
styles
.
textNormal
,
{
<
Text
style
=
{[
styles
.
textNormal
,
{
textAlign
:
'left'
,
marginTop
:
HEIGHTXD
(
20
)}]}
>
{
I18n
.
t
(
'SmartOTPUsingForSecond'
)}
<
/Text
>
textAlign
:
'left'
,
<
Text
style
=
{[
styles
.
textNormal
,
{
textAlign
:
'left'
,
marginTop
:
HEIGHTXD
(
20
)}]}
>
{
I18n
.
t
(
'SmartOTPUsingForThird'
)}
<
/Text
>
marginTop
:
HEIGHTXD
(
20
),
}]}
>
{
I18n
.
t
(
'SmartOTPUsingForFirst'
)}
<
/Text
>
<
Text
style
=
{[
styles
.
textNormal
,
{
textAlign
:
'left'
,
marginTop
:
HEIGHTXD
(
20
),
}]}
>
{
I18n
.
t
(
'SmartOTPUsingForSecond'
)}
<
/Text
>
<
Text
style
=
{[
styles
.
textNormal
,
{
textAlign
:
'left'
,
marginTop
:
HEIGHTXD
(
20
),
}]}
>
{
I18n
.
t
(
'SmartOTPUsingForThird'
)}
<
/Text
>
<
/View
>
<
/View
>
<
View
style
=
{{
<
View
style
=
{{
width
:
'100%'
,
width
:
'100%'
,
...
@@ -82,7 +95,7 @@ const SmartOTPView = (props) => {
...
@@ -82,7 +95,7 @@ const SmartOTPView = (props) => {
alignItems
:
'center'
,
alignItems
:
'center'
,
}}
>
}}
>
<
TouchableOpacity
onPress
=
{()
=>
{
<
TouchableOpacity
onPress
=
{()
=>
{
props
.
confirm
()
props
.
confirm
()
;
}}
style
=
{
styles
.
btnSend
}
>
}}
style
=
{
styles
.
btnSend
}
>
<
Text
style
=
{
styles
.
txtSend
}
>
{
I18n
.
t
(
'ConfirmTransaction'
)}
<
/Text
>
<
Text
style
=
{
styles
.
txtSend
}
>
{
I18n
.
t
(
'ConfirmTransaction'
)}
<
/Text
>
<
/TouchableOpacity
>
<
/TouchableOpacity
>
...
...
This diff is collapsed.
Click to expand it.
src/components/CountDown.js
View file @
d29f7c31
...
@@ -3,45 +3,64 @@ import {View, Text} from 'react-native';
...
@@ -3,45 +3,64 @@ import {View, Text} from 'react-native';
import
{
showAlert
,
TYPE
}
from
'./DropdownAlert'
;
import
{
showAlert
,
TYPE
}
from
'./DropdownAlert'
;
import
I18n
from
'../helper/i18/i18n'
;
import
I18n
from
'../helper/i18/i18n'
;
import
{
getFontXD
}
from
'../Config/Functions'
;
import
{
getFontXD
}
from
'../Config/Functions'
;
import
R
from
'../assets/R'
;
const
CountDown
=
(
props
)
=>
{
const
CountDown
=
(
props
)
=>
{
const
[
count
,
setCount
]
=
useState
(
300
);
const
[
count
,
setCount
]
=
useState
(
300
);
useEffect
(()
=>
{
useEffect
(()
=>
{
setCount
(
300
);
setCount
(
300
);
},
[
props
.
isReset
]);
},
[
props
.
isReset
]);
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
count
==
0
)
if
(
count
==
0
)
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'Overtime'
));
if
(
props
.
autoRefress
)
{
},
[
count
]);
props
.
autoRefress
()
}
if
(
!
props
.
isFromSmartOTP
)
{
showAlert
(
TYPE
.
ERROR
,
I18n
.
t
(
'Notification'
),
I18n
.
t
(
'Overtime'
));
}
}
},
[
count
]);
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
count
>
0
)
{
if
(
count
>
0
)
{
const
timer
=
setTimeout
(()
=>
{
const
timer
=
setTimeout
(()
=>
{
setCount
(
count
-
1
);
setCount
(
count
-
1
);
},
1000
);
if
(
props
.
updateProgress
)
{
return
()
=>
clearTimeout
(
timer
);
props
.
updateProgress
(
count
)
}
}
});
},
1000
);
return
()
=>
clearTimeout
(
timer
);
}
});
const
secondToString
=
(
count
)
=>
{
const
secondToString
=
(
count
)
=>
{
const
temp
=
count
%
60
;
const
temp
=
count
%
60
;
return
temp
<
10
?
`0
${
temp
}
`
:
temp
;
return
temp
<
10
?
`0
${
temp
}
`
:
temp
;
};
};
return
(
return
(
<
View
>
props
.
isFromSmartOTP
?
<
Text
<
Text
style
=
{{
style
=
{{
color
:
'#A2A2A2'
,
color
:
R
.
colors
.
red2
,
fontStyle
:
'italic'
,
fontSize
:
getFontXD
(
39
),
fontSize
:
getFontXD
(
42
),
}}
>
}}
>
0
{
parseInt
(
count
/
60
)}:{
secondToString
(
count
)}
0
{
parseInt
(
count
/
60
)}:{
secondToString
(
count
)}
<
/Text
>
<
/Text
>
:
<
/View
>
<
View
>
);
<
Text
style
=
{{
color
:
'#A2A2A2'
,
fontStyle
:
'italic'
,
fontSize
:
getFontXD
(
42
),
}}
>
0
{
parseInt
(
count
/
60
)}:{
secondToString
(
count
)}
<
/Text
>
<
/View
>
);
};
};
export
default
CountDown
;
export
default
CountDown
;
This diff is collapsed.
Click to expand it.
src/helper/i18/locales/en.js
View file @
d29f7c31
...
@@ -293,7 +293,7 @@ export default {
...
@@ -293,7 +293,7 @@ export default {
SmartOTP
:
'Smart OTP'
,
SmartOTP
:
'Smart OTP'
,
SmartOTPWarning
:
'Please do not give the OTP to anyone under any circumstances.'
,
SmartOTPWarning
:
'Please do not give the OTP to anyone under any circumstances.'
,
ConfirmTransaction
:
'Confirm transaction'
,
ConfirmTransaction
:
'Confirm transaction'
,
OTPWillAutoUpdate
:
'OTP code will be automatically update after
60 seconds
'
,
OTPWillAutoUpdate
:
'OTP code will be automatically update after '
,
OTPWillAutoFill
:
'Select "Confirm transaction" code OTP will be filled automatically'
,
OTPWillAutoFill
:
'Select "Confirm transaction" code OTP will be filled automatically'
,
SmartOTPUsingFor
:
'OTP code using for:'
,
SmartOTPUsingFor
:
'OTP code using for:'
,
SmartOTPUsingForFirst
:
'• Withdrawal request'
,
SmartOTPUsingForFirst
:
'• Withdrawal request'
,
...
...
This diff is collapsed.
Click to expand it.
src/helper/i18/locales/vn.js
View file @
d29f7c31
...
@@ -294,7 +294,7 @@ export default {
...
@@ -294,7 +294,7 @@ export default {
SmartOTP
:
'Smart OTP'
,
SmartOTP
:
'Smart OTP'
,
SmartOTPWarning
:
'Vui lòng không cung cấp mã OTP cho bất cứ ai trong bất cứ trường hợp nào.'
,
SmartOTPWarning
:
'Vui lòng không cung cấp mã OTP cho bất cứ ai trong bất cứ trường hợp nào.'
,
ConfirmTransaction
:
'Xác nhận giao dịch'
,
ConfirmTransaction
:
'Xác nhận giao dịch'
,
OTPWillAutoUpdate
:
'Mã OTP sẽ tự động cập nhật sau
60 giây
'
,
OTPWillAutoUpdate
:
'Mã OTP sẽ tự động cập nhật sau '
,
OTPWillAutoFill
:
'Chọn xác nhận giao dịch mã OTP sẽ được điền tự động'
,
OTPWillAutoFill
:
'Chọn xác nhận giao dịch mã OTP sẽ được điền tự động'
,
SmartOTPUsingFor
:
'Mã xác thực OTP cơ bản dùng cho:'
,
SmartOTPUsingFor
:
'Mã xác thực OTP cơ bản dùng cho:'
,
SmartOTPUsingForFirst
:
'• Yêu cầu rút tiền'
,
SmartOTPUsingForFirst
:
'• Yêu cầu rút tiền'
,
...
...
This diff is collapsed.
Click to expand it.
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