Commit 1d45f96b by Giang Tran

update search partner

parent ddef6b0a
...@@ -64,9 +64,10 @@ const Login = (props) => { ...@@ -64,9 +64,10 @@ const Login = (props) => {
const getLoginByBiometry = async () => { const getLoginByBiometry = async () => {
let loginByBiometry = await AsyncStorage.getItem(KEY.IS_LOGIN_BY_BIOMETRY); let loginByBiometry = await AsyncStorage.getItem(KEY.IS_LOGIN_BY_BIOMETRY);
if (loginByBiometry) { if (loginByBiometry) {
loginByBiometry = JSON.parse(loginByBiometry) loginByBiometry = JSON.parse(loginByBiometry);
setIsShowBiometryLogin(loginByBiometry.isLoginByBiometry); setIsShowBiometryLogin(loginByBiometry.isLoginByBiometry);
loginByBiometry.isLoginByBiometry && Keychain.getSupportedBiometryType({}).then((biometryType) => { loginByBiometry.isLoginByBiometry &&
Keychain.getSupportedBiometryType({}).then((biometryType) => {
setBiometryType(biometryType); setBiometryType(biometryType);
}); });
} }
...@@ -100,21 +101,23 @@ const Login = (props) => { ...@@ -100,21 +101,23 @@ const Login = (props) => {
}; };
const credentials = await Keychain.getGenericPassword(options); const credentials = await Keychain.getGenericPassword(options);
if (credentials) { if (credentials) {
console.log( console.log('Credentials successfully loaded for user ', credentials);
'Credentials successfully loaded for user ', credentials,
);
onSubmitLogin(credentials.username, credentials.password); onSubmitLogin(credentials.username, credentials.password);
} else { } else {
showAlert( showAlert(
TYPE.ERROR, TYPE.ERROR,
I18n.t('Notification'), I18n.t('Notification'),
I18n.t('HaveNotCredential', {type: biometryType == 'FaceID' ? I18n.t('FaceId') : I18n.t('Fingerprint')}), I18n.t('HaveNotCredential', {
type:
biometryType == 'FaceID'
? I18n.t('FaceId')
: I18n.t('Fingerprint'),
}),
); );
console.log('No credentials stored'); console.log('No credentials stored');
} }
} catch (error) { } catch (error) {
console.log('Keychain couldn\'t be accessed!', error); console.log("Keychain couldn't be accessed!", error);
} }
}; };
const onSubmitLogin = async (email, pass) => { const onSubmitLogin = async (email, pass) => {
...@@ -134,6 +137,7 @@ const Login = (props) => { ...@@ -134,6 +137,7 @@ const Login = (props) => {
device_token: firebase, device_token: firebase,
account_type: 'CUSTOMER', account_type: 'CUSTOMER',
}); });
console.log(res);
props.hideLoading(); props.hideLoading();
if (res.data) { if (res.data) {
if (res.data.code == 200 && res.data.data) { if (res.data.code == 200 && res.data.data) {
...@@ -146,6 +150,7 @@ const Login = (props) => { ...@@ -146,6 +150,7 @@ const Login = (props) => {
routes: [{name: TABNAVIGATOR}], routes: [{name: TABNAVIGATOR}],
}); });
} else { } else {
console.log('Chay vao day');
showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message); showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message);
} }
} else { } else {
...@@ -188,7 +193,7 @@ const Login = (props) => { ...@@ -188,7 +193,7 @@ const Login = (props) => {
<TouchableOpacity <TouchableOpacity
onPress={() => navigate.navigate(CONFIRMEMAIL)} onPress={() => navigate.navigate(CONFIRMEMAIL)}
style={styles.forgotView}> style={styles.forgotView}>
<AppText i18nKey={'ForgotPassword'} style={styles.txtTitle}/> <AppText i18nKey={'ForgotPassword'} style={styles.txtTitle} />
</TouchableOpacity> </TouchableOpacity>
<View <View
...@@ -199,41 +204,46 @@ const Login = (props) => { ...@@ -199,41 +204,46 @@ const Login = (props) => {
<TouchableOpacity <TouchableOpacity
onPress={() => onSubmitLogin(email, pass)} onPress={() => onSubmitLogin(email, pass)}
style={styles.wrapLogin}> style={styles.wrapLogin}>
<AppText i18nKey={'Login'} style={styles.txtLogin}/> <AppText i18nKey={'Login'} style={styles.txtLogin} />
<Image source={R.images.iconRight1} style={styles.imgIcon}/> <Image source={R.images.iconRight1} style={styles.imgIcon} />
</TouchableOpacity> </TouchableOpacity>
{isShowBiometryLogin ? {isShowBiometryLogin ? (
<View style={{flexDirection: 'row', marginTop: WIDTHXD(70)}}> <View style={{flexDirection: 'row', marginTop: WIDTHXD(70)}}>
{biometryType == 'FaceID' ? {biometryType == 'FaceID' ? (
<TouchableOpacity <TouchableOpacity
onPress={() => { onPress={() => {
getCredentialInfo(); getCredentialInfo();
}}> }}>
<Image source={R.images.iconFaceId} style={[styles.imgIconBiometry, {tintColor: R.colors.main}]}/> <Image
source={R.images.iconFaceId}
style={[styles.imgIconBiometry, {tintColor: R.colors.main}]}
/>
</TouchableOpacity> </TouchableOpacity>
: ) : (
<TouchableOpacity <TouchableOpacity
onPress={() => { onPress={() => {
getCredentialInfo(); getCredentialInfo();
}}> }}>
<Image source={R.images.fingerprint} style={styles.imgIconBiometry}/> <Image
source={R.images.fingerprint}
style={styles.imgIconBiometry}
/>
</TouchableOpacity> </TouchableOpacity>
)}
}
</View> </View>
: null} ) : null}
<View style={styles.row}> <View style={styles.row}>
<AppText i18nKey={'Have_account'} style={styles.txtTitle}/> <AppText i18nKey={'Have_account'} style={styles.txtTitle} />
<TouchableOpacity <TouchableOpacity
onPress={() => { onPress={() => {
navigation.navigate('REGISTOR'); navigation.navigate('REGISTOR');
}}> }}>
<AppText i18nKey={'Register'} style={styles.txtRegistor}/> <AppText i18nKey={'Register'} style={styles.txtRegistor} />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
<View style={{height: 100}}/> <View style={{height: 100}} />
</View> </View>
); );
}; };
......
...@@ -27,22 +27,22 @@ const Item = (props) => { ...@@ -27,22 +27,22 @@ const Item = (props) => {
<Text style={styles.txtName}>{fullname}</Text> <Text style={styles.txtName}>{fullname}</Text>
<View style={styles.row}> <View style={styles.row}>
<AppText style={styles.txtTitle} i18nKey={'Status'} /> <AppText style={styles.txtTitle} i18nKey={'Status'} />
<Text style={{fontSize: getFontXD(42)}}>{status_name}</Text> <Text style={{fontSize: getFontXD(36)}}>{status_name}</Text>
</View> </View>
<View style={styles.row}> <View style={styles.row}>
<AppText style={styles.txtTitle} i18nKey={'DateJoin'} /> <AppText style={styles.txtTitle} i18nKey={'DateJoin'} />
<Text style={{fontSize: getFontXD(42)}}>{created}</Text> <Text style={{fontSize: getFontXD(36)}}>{created}</Text>
</View> </View>
<View style={styles.row}> <View style={styles.row}>
<AppText style={styles.txtTitle} i18nKey={'OpenAccountExchange'} /> <AppText style={styles.txtTitle} i18nKey={'OpenAccountExchange'} />
<Text style={{fontSize: getFontXD(42)}}>{cqg_status_name}</Text> <Text style={{fontSize: getFontXD(36)}}>{cqg_status_name}</Text>
</View> </View>
{props.level == 1 ? null : ( {props.level == 1 ? null : (
<View style={styles.row}> <View style={styles.row}>
<AppText style={styles.txtTitle} i18nKey={'Sponsor'} /> <AppText style={styles.txtTitle} i18nKey={'Sponsor'} />
<Text style={{fontSize: getFontXD(42)}}>{sponsor_name}</Text> <Text style={{fontSize: getFontXD(36)}}>{sponsor_name}</Text>
</View> </View>
)} )}
</View> </View>
...@@ -82,12 +82,12 @@ const styles = StyleSheet.create({ ...@@ -82,12 +82,12 @@ const styles = StyleSheet.create({
flex: 1, flex: 1,
}, },
txtTitle: { txtTitle: {
fontSize: getFontXD(42), fontSize: getFontXD(36),
color: R.colors.color777, color: R.colors.color777,
marginRight: 5, marginRight: 5,
}, },
txtName: { txtName: {
fontSize: getFontXD(46), fontSize: getFontXD(42),
color: R.colors.black, color: R.colors.black,
textTransform: 'uppercase', textTransform: 'uppercase',
}, },
......
import React, {useEffect, useState} from 'react';
import {
View,
Text,
Image,
StyleSheet,
TouchableOpacity,
TouchableWithoutFeedback,
Platform,
DeviceEventEmitter,
Dimensions,
} from 'react-native';
import R from '../../../assets/R';
import {
HEIGHTXD,
WIDTHXD,
getFontXD,
getWidth,
} from '../../../Config/Functions';
import Modal from 'react-native-modal';
import I18n from '../.././../helper/i18/i18n';
import AppText from '../../../components/AppText';
import PickerItem from '../../../components/Picker/PickerItem';
import PickerMonth from '../../../components/Picker/PickerMonth';
import {SEARCHPARTNER} from '../../../routers/ScreenNames';
import {showAlert, TYPE} from '../../../components/DropdownAlert';
import {useNavigation} from '@react-navigation/native';
import TextField from '../../../components/Input/TextField';
import {connect} from 'react-redux';
import IconClose from 'react-native-vector-icons/AntDesign';
const {width} = Dimensions.get('window');
const SearchProductCodeModal = (props) => {
const ListLevels = [
{
value: '-1',
name: I18n.t('All'),
},
{
value: '1',
name: I18n.t('level1'),
},
{
value: '2',
name: I18n.t('level2'),
},
{
value: '3',
name: I18n.t('level3'),
},
];
const ListStatus = [
{
value: '-1',
name: I18n.t('All'),
},
{
value: '1',
name: I18n.t('Opened'),
},
{
value: '0',
name: I18n.t('Unopen'),
},
];
const navigate = useNavigation();
const [textSearch, setTextSearch] = useState(props.keyword);
const [level, setLevel] = useState(ListLevels[0]);
const [open, setOpen] = useState(ListStatus[0]);
return (
<Modal
isVisible={props.isModalVisible}
style={{margin: 0, justifyContent: 'flex-end'}}>
<View style={{flex: 1, justifyContent: 'flex-end'}}>
<TouchableOpacity
style={styles.opacity}
activeOpacity={1}
onPressOut={() => {
props.toggleModal();
}}>
<TouchableWithoutFeedback>
<View style={styles.container}>
<View style={styles.viewTitle}>
<Text
style={[
styles.txt,
{
color: R.colors.black,
textAlign: 'center',
flex: 10,
},
]}>
{I18n.t('SearchProductCode')}
</Text>
<TouchableOpacity
onPress={() => {
props.toggleModal();
}}
style={styles.btClose}>
<IconClose
name="close"
size={WIDTHXD(48)}
color={R.colors.black}
/>
</TouchableOpacity>
</View>
<TextField
onChangeText={(val) => setTextSearch(val)}
title={I18n.t('NamePartner')}
value={textSearch}
/>
<AppText
style={[styles.txtTitle, {marginTop: HEIGHTXD(40)}]}
i18nKey={'level'}
/>
<PickerItem
defaultValue={level.name}
width={width - 40}
data={ListLevels}
onValueChange={(value, items) => {
setLevel(items);
}}
/>
<AppText
style={[styles.txtTitle, {marginTop: HEIGHTXD(40)}]}
i18nKey={'OpenAccountCQG'}
/>
<PickerItem
defaultValue={open.name}
width={width - 40}
data={ListStatus}
onValueChange={(value, items) => {
setOpen(items);
}}
/>
<View
style={{
marginTop: HEIGHTXD(80),
justifyContent: 'center',
alignItems: 'center',
}}>
<TouchableOpacity
onPress={() => {
props.toggleModal();
props.setKeyword(textSearch);
props.setLevel(level.value);
props.setTrader_account_status(open.value);
}}
style={styles.btnSend}>
<Text style={styles.txtSend}>{I18n.t('Search')}</Text>
</TouchableOpacity>
</View>
</View>
</TouchableWithoutFeedback>
</TouchableOpacity>
</View>
</Modal>
);
};
const styles = StyleSheet.create({
container: {
backgroundColor: R.colors.white,
borderRadius: 10,
borderWidth: 2,
borderColor: '#DBDBDB',
paddingTop: HEIGHTXD(50),
paddingBottom: HEIGHTXD(300),
paddingHorizontal: WIDTHXD(40),
},
viewTitle: {
flexDirection: 'row',
width: getWidth() - WIDTHXD(40),
marginLeft: WIDTHXD(40),
},
btClose: {
flex: 1,
justifyContent: 'center',
alignItems: 'flex-start',
marginRight: WIDTHXD(40),
},
txt: {
fontSize: getFontXD(42),
color: R.colors.color777,
marginBottom: 5,
paddingLeft: 10,
},
txtTitle: {
fontSize: getFontXD(42),
color: R.colors.color777,
},
selectionImg: {
padding: 10,
justifyContent: 'center',
alignItems: 'center',
},
containerSelect: {
height: HEIGHTXD(520),
backgroundColor: 'white',
paddingTop: 10,
borderTopLeftRadius: 20,
borderTopRightRadius: 20,
},
line: {
height: 1,
backgroundColor: '#929292',
width: '100%',
marginTop: 5,
},
imgIcon: {
width: 40,
height: 40,
},
txtTitleBtn: {
fontSize: getFontXD(42),
color: '#1473E6',
},
btnSend: {
width: WIDTHXD(500),
height: HEIGHTXD(120),
backgroundColor: R.colors.main,
borderRadius: 8,
justifyContent: 'center',
alignItems: 'center',
},
txtSend: {
fontSize: getFontXD(42),
color: R.colors.white,
paddingHorizontal: WIDTHXD(60),
fontWeight: 'bold',
},
});
const mapStateToProps = (state) => {
return {
language: state.languageReducer,
};
};
export default connect(mapStateToProps, {})(SearchProductCodeModal);
...@@ -2,21 +2,32 @@ import React, {Component, useState, useEffect} from 'react'; ...@@ -2,21 +2,32 @@ import React, {Component, useState, useEffect} from 'react';
import {View, Text, FlatList} from 'react-native'; import {View, Text, FlatList} from 'react-native';
import Item from './Item'; import Item from './Item';
import {getListPartner} from '../../../apis/Functions/users'; import {getListPartner} from '../../../apis/Functions/users';
import HeaderBack from '../../../components/Header/HeaderBack'; import HeaderPartner from '../../../components/Header/HeaderPartner';
import {showAlert, TYPE} from '../../../components/DropdownAlert'; import {showAlert, TYPE} from '../../../components/DropdownAlert';
import AppText from '../../../components/AppText'; import AppText from '../../../components/AppText';
import I18n from '../../../helper/i18/i18n'; import I18n from '../../../helper/i18/i18n';
import SearchModal from './SearchModal2';
const Level1 = (props) => { const Level1 = (props) => {
const [page, setPage] = useState(1); const [page, setPage] = useState(1);
const [data, setData] = useState([]); const [data, setData] = useState([]);
const [tottalPage, setTotalPage] = useState(1); const [tottalPage, setTotalPage] = useState(1);
const [isRefresh, setisRefresh] = useState(false); const [isRefresh, setisRefresh] = useState(false);
const [isModalVisible, setModalVisible] = useState(false);
const [trader_account_status, setTrader_account_status] = useState(
props.route.params.trader_account_status,
);
const [level, setLevel] = useState(props.route.params.level);
const [keyword, setKeyword] = useState(props.route.params.keyword);
const {trader_account_status, level, keyword} = props.route.params; const toggleModal = () => {
setModalVisible(!isModalVisible);
};
useEffect(() => { useEffect(() => {
getData(); getData();
}, []); }, [level, trader_account_status, keyword]);
const getData = async () => { const getData = async () => {
setisRefresh(true); setisRefresh(true);
...@@ -34,7 +45,7 @@ const Level1 = (props) => { ...@@ -34,7 +45,7 @@ const Level1 = (props) => {
setData(res.data.data); setData(res.data.data);
setTotalPage(res.data.meta.pages); setTotalPage(res.data.meta.pages);
} else { } else {
showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message); setData([]);
} }
setisRefresh(false); setisRefresh(false);
}; };
...@@ -66,7 +77,11 @@ const Level1 = (props) => { ...@@ -66,7 +77,11 @@ const Level1 = (props) => {
return ( return (
<View style={{flex: 1}}> <View style={{flex: 1}}>
<HeaderBack title="SearchPartner" /> <HeaderPartner
onOpenSearch={toggleModal}
title={'MyPartner'}
isWhite={true}
/>
{data.length > 0 ? ( {data.length > 0 ? (
<FlatList <FlatList
...@@ -93,6 +108,15 @@ const Level1 = (props) => { ...@@ -93,6 +108,15 @@ const Level1 = (props) => {
}}></AppText> }}></AppText>
</View> </View>
)} )}
<SearchModal
setKeyword={setKeyword}
keyword={keyword}
setLevel={setLevel}
setTrader_account_status={setTrader_account_status}
toggleModal={toggleModal}
isModalVisible={isModalVisible}
/>
</View> </View>
); );
}; };
......
...@@ -3,6 +3,8 @@ import {View, Text, FlatList} from 'react-native'; ...@@ -3,6 +3,8 @@ import {View, Text, FlatList} from 'react-native';
import Item from '../Item'; import Item from '../Item';
import {getListPartner} from '../../../../apis/Functions/users'; import {getListPartner} from '../../../../apis/Functions/users';
import {showAlert, TYPE} from '../../../../components/DropdownAlert'; import {showAlert, TYPE} from '../../../../components/DropdownAlert';
import AppText from '../../../../components/AppText';
import I18n from '../../../../helper/i18/i18n';
const Level1 = (props) => { const Level1 = (props) => {
const [page, setPage] = useState(1); const [page, setPage] = useState(1);
...@@ -26,11 +28,11 @@ const Level1 = (props) => { ...@@ -26,11 +28,11 @@ const Level1 = (props) => {
trader_account_status: -1, trader_account_status: -1,
}); });
if ((res.data.code = 200 && res.data.data)) { if ((res.data.code = 200 && res.data.data && res.data.data.length > 0)) {
setData(res.data.data); setData(res.data.data);
setTotalPage(res.data.meta.pages); setTotalPage(res.data.meta.pages);
} else { } else {
showAlert(TYPE.ERROR, I18n.t('Notification'), res.data.message); setData([]);
} }
setisRefresh(false); setisRefresh(false);
}; };
...@@ -45,7 +47,7 @@ const Level1 = (props) => { ...@@ -45,7 +47,7 @@ const Level1 = (props) => {
const getDataLoadMore = async () => { const getDataLoadMore = async () => {
setisRefresh(true); setisRefresh(true);
console.log('Chay vao day');
const res = await getListPartner({ const res = await getListPartner({
keyword: '', keyword: '',
level: props.type, level: props.type,
...@@ -57,7 +59,7 @@ const Level1 = (props) => { ...@@ -57,7 +59,7 @@ const Level1 = (props) => {
setPage(page + 1); setPage(page + 1);
console.log('rress', res); console.log('rress', res);
if (res.data.code == 200) { if (res.data.code == 200 && res.data.data && res.data.data.length > 0) {
setData(data.concat(res.data.data)); setData(data.concat(res.data.data));
} }
setisRefresh(false); setisRefresh(false);
......
...@@ -64,7 +64,7 @@ export default { ...@@ -64,7 +64,7 @@ export default {
Male: 'Giới tính', Male: 'Giới tính',
Status: 'Trạng thái:', Status: 'Trạng thái:',
Phone: 'Điện thoại', Phone: 'Điện thoại',
Address: 'Địa chỉ:', Address: 'Địa chỉ',
Update: 'Cập nhật', Update: 'Cập nhật',
ContactCode: 'Mã hợp đồng', ContactCode: 'Mã hợp đồng',
TraddingAccountName: 'Tên tài khoản giao dịch', TraddingAccountName: 'Tên tài khoản giao dịch',
......
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