Commit e86c175a by Nguyễn Thị Thúy

update check setting smart otp

parent af55d763
...@@ -132,8 +132,8 @@ android { ...@@ -132,8 +132,8 @@ android {
applicationId "com.dcv.invest" applicationId "com.dcv.invest"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 15 versionCode 16
versionName "1.9" versionName "2.0"
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
} }
splits { splits {
......
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"properties": [], "properties": [],
"versionCode": 15, "versionCode": 16,
"versionName": "1.9", "versionName": "2.0",
"enabled": true, "enabled": true,
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
......
...@@ -903,7 +903,7 @@ ...@@ -903,7 +903,7 @@
CODE_SIGN_ENTITLEMENTS = Invest/Invest.entitlements; CODE_SIGN_ENTITLEMENTS = Invest/Invest.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5; CURRENT_PROJECT_VERSION = 7;
DEVELOPMENT_TEAM = MXZ24GRH48; DEVELOPMENT_TEAM = MXZ24GRH48;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = ( GCC_PREPROCESSOR_DEFINITIONS = (
...@@ -912,7 +912,7 @@ ...@@ -912,7 +912,7 @@
); );
INFOPLIST_FILE = Invest/Info.plist; INFOPLIST_FILE = Invest/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 2.0; MARKETING_VERSION = 2.2;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
...@@ -937,11 +937,11 @@ ...@@ -937,11 +937,11 @@
CODE_SIGN_ENTITLEMENTS = Invest/Invest.entitlements; CODE_SIGN_ENTITLEMENTS = Invest/Invest.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5; CURRENT_PROJECT_VERSION = 7;
DEVELOPMENT_TEAM = MXZ24GRH48; DEVELOPMENT_TEAM = MXZ24GRH48;
INFOPLIST_FILE = Invest/Info.plist; INFOPLIST_FILE = Invest/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 2.0; MARKETING_VERSION = 2.2;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
......
import React, {useState} from 'react'; import React, {useState} from 'react';
import { import {
Dimensions, DeviceEventEmitter,
Keyboard, Dimensions,
KeyboardAvoidingView, Keyboard,
Platform, KeyboardAvoidingView,
ScrollView, Platform,
StyleSheet, ScrollView,
Text, StyleSheet,
TouchableOpacity, Text,
TouchableWithoutFeedback, TouchableOpacity,
View, TouchableWithoutFeedback,
View,
} from 'react-native'; } from 'react-native';
import R from '../../../assets/R'; import R from '../../../assets/R';
import HeaderBack from '../../../components/Header/HeaderBack'; import HeaderBack from '../../../components/Header/HeaderBack';
...@@ -20,164 +21,183 @@ import {connect} from 'react-redux'; ...@@ -20,164 +21,183 @@ import {connect} from 'react-redux';
import {hideLoading, showLoading} from '../../../actions/loadingAction'; import {hideLoading, showLoading} from '../../../actions/loadingAction';
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 {ENTER_PASSWORD_SMART_OTP, SMARTOTP} from '../../../routers/ScreenNames'; import {ENTER_PASSWORD_SMART_OTP, SETTINGOTP, SMARTOTP} from '../../../routers/ScreenNames';
import {showAlert, TYPE} from '../../../components/DropdownAlert'; import {showAlert, TYPE} from '../../../components/DropdownAlert';
import {confirmAlert} from '../../../components/Aleart';
const {width} = Dimensions.get('window');
const WalletDeposit = (props) => { const WalletDeposit = (props) => {
const [amount, setAmount] = useState(); const [amount, setAmount] = useState();
const [notes, setNotes] = useState(); const [notes, setNotes] = useState();
const navigate = useNavigation(); const navigate = useNavigation();
const onClick = async () => { const onClick = async () => {
const titles = [ const titles = [
I18n.t('AmountOfMoney').toLowerCase(), I18n.t('AmountOfMoney').toLowerCase(),
I18n.t('Note').toLowerCase(), I18n.t('Note').toLowerCase(),
]; ];
const index = checkFormatArray([amount]); const index = checkFormatArray([amount]);
if (index === true) { if (index === true) {
navigate.navigate(ENTER_PASSWORD_SMART_OTP, { if (!props.user.smart_otp_status) {
onGoToSmartOTP: (pinCode, otp) => onGoToSmartOTP(pinCode, otp) confirmAlert(
}); `${I18n.t('YouHaveNotSettingSmartOTP')}`,
} else { () => {
showAlert( navigate.navigate(SETTINGOTP, {
TYPE.WARN, isFromTransaction: true,
I18n.t('Notification'), setupSmartOTPSuccess: () => {
I18n.t('Please_fill_in') + titles[index], navigate.goBack()
); navigate.goBack()
} navigate.navigate(ENTER_PASSWORD_SMART_OTP, {
}; onGoToSmartOTP: (pinCode, otp) => onGoToSmartOTP(pinCode, otp),
const onGoToSmartOTP = (pinCode, otp) => { });
navigate.goBack() DeviceEventEmitter.emit('reloadUserInfo');
navigate.navigate(SMARTOTP, { },
type: 'DEPOSIT', });
amount, },
notes, `${I18n.t('setting')}`,
pinCode, );
otp, } else {
}); navigate.navigate(ENTER_PASSWORD_SMART_OTP, {
} onGoToSmartOTP: (pinCode, otp) => onGoToSmartOTP(pinCode, otp),
return ( });
<KeyboardAvoidingView }
behavior={Platform.Os === 'ios' ? 'padding' : 'height'} } else {
style={{flex: 1, backgroundColor: 'white'}} showAlert(
keyboardVerticalOffset={-50}> TYPE.WARN,
<TouchableWithoutFeedback onPress={Keyboard.dismiss}> I18n.t('Notification'),
<View style={{flex: 1}}> I18n.t('Please_fill_in') + titles[index],
<HeaderBack title={'InvestmentDeposit'} /> );
<ScrollView showsVerticalScrollIndicator={false}> }
<View style={styles.container}> };
<View style={styles.wrapTop}> const onGoToSmartOTP = (pinCode, otp) => {
<View style={styles.itemTop}> navigate.goBack();
<Text style={styles.txtTitle}>{I18n.t('Wallet')}</Text> navigate.navigate(SMARTOTP, {
<Text style={styles.txtMoney}> type: 'DEPOSIT',
{' '} amount,
{props.user.current_money != 0 notes,
? toPriceVnd(props.user.current_money) pinCode,
: 0}{' '} otp,
</Text> });
</View> };
<View style={{width: 1, backgroundColor: '#DBDBDB'}} /> return (
<View style={styles.itemTop}> <KeyboardAvoidingView
<Text style={styles.txtTitle}>CQG</Text> behavior={Platform.Os === 'ios' ? 'padding' : 'height'}
<Text style={styles.txtMoney}> style={{flex: 1, backgroundColor: 'white'}}
{' '} keyboardVerticalOffset={-50}>
{props.user.current_cqg_money != 0 <TouchableWithoutFeedback onPress={Keyboard.dismiss}>
? toPriceVnd(props.user.current_cqg_money) <View style={{flex: 1}}>
: 0}{' '} <HeaderBack title={'InvestmentDeposit'}/>
đ <ScrollView showsVerticalScrollIndicator={false}>
</Text> <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>
</View> </View>
</View> </TouchableWithoutFeedback>
<View style={styles.wrapBody}> </KeyboardAvoidingView>
{/* <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({ const styles = StyleSheet.create({
container: { container: {
backgroundColor: R.colors.white, backgroundColor: R.colors.white,
marginVertical: 10, marginVertical: 10,
shadowColor: '#AFA9A9', shadowColor: '#AFA9A9',
shadowOffset: { shadowOffset: {
width: 0, width: 0,
height: 1, 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',
}, },
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) => { const mapStateToProps = (state) => {
return { return {
user: state.userReducer, user: state.userReducer,
}; };
}; };
export default connect(mapStateToProps, {showLoading, hideLoading})( export default connect(mapStateToProps, {showLoading, hideLoading})(
WalletDeposit, WalletDeposit,
); );
...@@ -10,7 +10,7 @@ import { ...@@ -10,7 +10,7 @@ import {
TouchableWithoutFeedback, TouchableWithoutFeedback,
Keyboard, Keyboard,
KeyboardAvoidingView, KeyboardAvoidingView,
ScrollView, ScrollView, DeviceEventEmitter,
} from 'react-native'; } from 'react-native';
import R from '../../../assets/R'; import R from '../../../assets/R';
import HeaderBack from '../../../components/Header/HeaderBack'; import HeaderBack from '../../../components/Header/HeaderBack';
...@@ -30,14 +30,15 @@ import RadioForm from 'react-native-simple-radio-button'; ...@@ -30,14 +30,15 @@ import RadioForm from 'react-native-simple-radio-button';
import {widthDraw, getListWidthDraw} from '../../../apis/Functions/Widthdraw'; import {widthDraw, getListWidthDraw} from '../../../apis/Functions/Widthdraw';
import {useNavigation} from '@react-navigation/native'; import {useNavigation} from '@react-navigation/native';
import {showLoading, hideLoading} from '../../../actions/loadingAction'; import {showLoading, hideLoading} from '../../../actions/loadingAction';
import {saveUserToRedux} from '../../../actions/users';
import {confirmAlert} from '../../../components/Aleart'; import {confirmAlert} from '../../../components/Aleart';
import { import {
ADDMETHODPAY, ADDMETHODPAY,
ENTER_PASSWORD_SMART_OTP, ENTER_PASSWORD_SMART_OTP, SETTINGOTP,
} from '../../../routers/ScreenNames'; } from '../../../routers/ScreenNames';
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 {getOTPApi} from '../../../apis/Functions/users'; import {getDetailUser, getOTPApi} from '../../../apis/Functions/users';
import {SMARTOTP} from '../../../routers/ScreenNames'; import {SMARTOTP} from '../../../routers/ScreenNames';
import {showAlert, TYPE} from '../../../components/DropdownAlert'; import {showAlert, TYPE} from '../../../components/DropdownAlert';
var radio_props = [ var radio_props = [
...@@ -117,9 +118,29 @@ const WalletWithdraw = (props) => { ...@@ -117,9 +118,29 @@ const WalletWithdraw = (props) => {
I18n.t('WarnMaxReqestWithdraw'), I18n.t('WarnMaxReqestWithdraw'),
); );
} else { } else {
navigate.navigate(ENTER_PASSWORD_SMART_OTP, { if (!props.user.smart_otp_status) {
onGoToSmartOTP: (pinCode, otp) => onGoToSmartOTP(pinCode, otp), 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 {
navigate.navigate(ENTER_PASSWORD_SMART_OTP, {
onGoToSmartOTP: (pinCode, otp) => onGoToSmartOTP(pinCode, otp),
});
}
} }
} else { } else {
showAlert( showAlert(
...@@ -317,4 +338,5 @@ const mapStateToProps = (state) => { ...@@ -317,4 +338,5 @@ const mapStateToProps = (state) => {
export default connect(mapStateToProps, { export default connect(mapStateToProps, {
showLoading, showLoading,
hideLoading, hideLoading,
saveUserToRedux
})(WalletWithdraw); })(WalletWithdraw);
import React, {useEffect, useState} from 'react'; import React, {useEffect, useState} from 'react';
import {Alert, Platform, View} from 'react-native'; import {Alert, DeviceEventEmitter, Platform, View} from 'react-native';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import {getTransaction} from '../../apis/Functions/users'; import {getTransaction} from '../../apis/Functions/users';
import {getImagesHome} from '../../apis/Functions/General'; import {getImagesHome} from '../../apis/Functions/General';
...@@ -14,6 +14,7 @@ import {showAlert, TYPE} from '../../components/DropdownAlert/index'; ...@@ -14,6 +14,7 @@ import {showAlert, TYPE} from '../../components/DropdownAlert/index';
import VersionChecker from '../VersionChecker'; import VersionChecker from '../VersionChecker';
import {saveUserToRedux} from '../../actions/users'; import {saveUserToRedux} from '../../actions/users';
import {getDetailUser} from '../../apis/Functions/users'; import {getDetailUser} from '../../apis/Functions/users';
import {logout} from '../../Config/Functions';
const Home = (props) => { const Home = (props) => {
const [data, setData] = useState({total_deposit: 0, total_withdraw: 0}); const [data, setData] = useState({total_deposit: 0, total_withdraw: 0});
...@@ -52,6 +53,13 @@ const Home = (props) => { ...@@ -52,6 +53,13 @@ const Home = (props) => {
useEffect(() => { useEffect(() => {
getData(); getData();
initSocket(); initSocket();
let reloadUserInfoListener = DeviceEventEmitter.addListener('reloadUserInfo', (e) => {
console.log('run in to reloadUserInfo');
onRefresh();
});
return () => {
reloadUserInfoListener.remove();
};
}, []); }, []);
useEffect(() => { useEffect(() => {
......
import React, {Component, useEffect, useState} from 'react'; import React, {useState} from 'react';
import { import {
View, View,
Text, Text,
TextInput,
StyleSheet, StyleSheet,
TouchableOpacity, TouchableOpacity,
Platform, Platform,
Alert,
} from 'react-native'; } from 'react-native';
import HeaderBack from '../../components/Header/HeaderBack'; import HeaderBack from '../../components/Header/HeaderBack';
...@@ -19,7 +17,6 @@ import { ...@@ -19,7 +17,6 @@ import {
import {getFontXD, HEIGHTXD, WIDTHXD} from '../../Config/Functions'; import {getFontXD, HEIGHTXD, WIDTHXD} from '../../Config/Functions';
import R from '../../assets/R'; import R from '../../assets/R';
import {TABNAVIGATOR} from '../../routers/ScreenNames'; import {TABNAVIGATOR} from '../../routers/ScreenNames';
import {verifyOTPApi} from '../../apis/Functions/users';
import {useNavigation} from '@react-navigation/native'; import {useNavigation} from '@react-navigation/native';
import I18n from '../../helper/i18/i18n'; import I18n from '../../helper/i18/i18n';
import AppText from '../../components/AppText'; import AppText from '../../components/AppText';
...@@ -29,12 +26,11 @@ import {connect} from 'react-redux'; ...@@ -29,12 +26,11 @@ import {connect} from 'react-redux';
import {showAlert, TYPE} from '../../components/DropdownAlert'; import {showAlert, TYPE} from '../../components/DropdownAlert';
import CountDown from '../../components/CountDown'; import CountDown from '../../components/CountDown';
import { import {
verifyOTPApiSmart,
getOTPApi,
verifyStoreOTPApiSmart, verifyStoreOTPApiSmart,
getOTPApiSmartOTP, getOTPApiSmartOTP,
} from '../../apis/Functions/users'; } from '../../apis/Functions/users';
const CELL_COUNT = 4; const CELL_COUNT = 4;
const ConfirmOTPSmart = (propsa) => { const ConfirmOTPSmart = (propsa) => {
...@@ -82,7 +78,11 @@ const ConfirmOTPSmart = (propsa) => { ...@@ -82,7 +78,11 @@ const ConfirmOTPSmart = (propsa) => {
showAlert(TYPE.SUCCESS, I18n.t('Notification'), res.data.message); showAlert(TYPE.SUCCESS, I18n.t('Notification'), res.data.message);
propsa.hideLoading(); propsa.hideLoading();
if (res.data.code == 200) { if (res.data.code == 200) {
navigate.navigate(TABNAVIGATOR); if (propsa.route.params.isFromTransaction) {
propsa.route.params.setupSmartOTPSuccess();
} else {
navigate.navigate(TABNAVIGATOR);
}
} else { } else {
showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message); showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message);
} }
......
...@@ -47,6 +47,8 @@ const SettingOTP = (props) => { ...@@ -47,6 +47,8 @@ const SettingOTP = (props) => {
navigatiton.navigate(CONFIRMOTPSMART, { navigatiton.navigate(CONFIRMOTPSMART, {
password, password,
password_confirmation, password_confirmation,
isFromTransaction: props.route.params.isFromTransaction,
setupSmartOTPSuccess: props.route.params.setupSmartOTPSuccess
}); });
} else { } else {
showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message); showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message);
......
...@@ -2,25 +2,25 @@ import {Alert} from 'react-native'; ...@@ -2,25 +2,25 @@ import {Alert} from 'react-native';
import I18n from '../helper/i18/i18n'; import I18n from '../helper/i18/i18n';
export const NotificationAlert = (string) => { export const NotificationAlert = (string) => {
Alert.alert(I18n.t('Notification'), string); Alert.alert(I18n.t('Notification'), string);
}; };
export const confirmAlert = (content, callback) => { export const confirmAlert = (content, callback, positiveTitle) => {
Alert.alert( Alert.alert(
I18n.t('Notification'), I18n.t('Notification'),
content, content,
[ [
{ {
text: I18n.t('Cancel'), text: I18n.t('Cancel'),
style: 'cancel', style: 'cancel',
}, },
{ {
text: I18n.t('Ok'), text: positiveTitle ? positiveTitle : I18n.t('Ok'),
onPress: () => { onPress: () => {
callback(); callback();
}, },
}, },
], ],
{cancelable: false}, {cancelable: false},
); );
}; };
...@@ -326,4 +326,5 @@ export default { ...@@ -326,4 +326,5 @@ export default {
ResetSmartOTP2: ' press 3 to meet technical support staff.', ResetSmartOTP2: ' press 3 to meet technical support staff.',
ForgotSmartOTP: 'Forgot Smart OTP', ForgotSmartOTP: 'Forgot Smart OTP',
WarnMaxReqestWithdraw: 'Invalid withdrawal amount', WarnMaxReqestWithdraw: 'Invalid withdrawal amount',
YouHaveNotSettingSmartOTP: 'You have not installed Smart OTP',
}; };
...@@ -323,4 +323,5 @@ export default { ...@@ -323,4 +323,5 @@ export default {
'Để đảm bảo an toàn trong quá trình sử dụng ứng dụng, bạn vui lòng liên hệ đến tổng đài: ', 'Để đảm bảo an toàn trong quá trình sử dụng ứng dụng, bạn vui lòng liên hệ đến tổng đài: ',
ResetSmartOTP2: ' bấm phím 3 để gặp nhân viên hỗ trợ kỹ thuật.', ResetSmartOTP2: ' bấm phím 3 để gặp nhân viên hỗ trợ kỹ thuật.',
ForgotSmartOTP: 'Quên Smart OTP', ForgotSmartOTP: 'Quên Smart OTP',
YouHaveNotSettingSmartOTP: 'Bạn chưa cài đặt Smart OTP',
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment