642 lines
24 KiB
JavaScript
642 lines
24 KiB
JavaScript
/**
|
|
* Sample React Native App
|
|
* https://github.com/facebook/react-native
|
|
*
|
|
* @format
|
|
* @flow
|
|
*/
|
|
|
|
|
|
import React, { Component } from 'react';
|
|
import { Platform, StyleSheet, Alert, FlatList, Text, View, TouchableOpacity, Linking, AsyncStorage } from 'react-native';
|
|
import ActionButton from 'react-native-action-button';
|
|
import Icon from 'react-native-vector-icons/Ionicons';
|
|
import { responsiveFontSize, responsiveHeight, responsiveWidth } from 'react-native-responsive-dimensions';
|
|
import HeaderMenu from './HeaderMenu';
|
|
import { historiques as histo, first, useraccount, notification, configurations } from './../../route.json';
|
|
import { primary, primaryDarkAdvanced } from './../../utils/theme.json';
|
|
import { readUser, disconnect } from './../../webservice/AuthApi';
|
|
import I18n from 'react-native-i18n'
|
|
const route = require("./../../route.json")
|
|
require('./../../utils/Translations')
|
|
var DBEvents = require('react-native-db-models').DBEvents
|
|
let theme = require('./../../utils/theme.json')
|
|
import Button from 'apsl-react-native-button'
|
|
import { IlinkEmitter } from "./../../utils/events"
|
|
import { DrawerItems, SafeAreaView } from 'react-navigation';
|
|
import DeviceInfo from "react-native-device-info"
|
|
import AppContainer, { AppNavigator } from "../../App";
|
|
import Configuration from "../../webservice/persistences/Configuration";
|
|
import { ScrollView } from 'react-native-gesture-handler';
|
|
|
|
export default class OptionsMenu extends Component {
|
|
|
|
static navigatorStyle = {
|
|
statusBarColor: primaryDarkAdvanced,
|
|
};
|
|
commandeListe
|
|
constructor(props) {
|
|
super(props);
|
|
this.state = this.initState();
|
|
IlinkEmitter.on("menuLink", this.onMenuNavigationEvent.bind(this))
|
|
IlinkEmitter.on("userconnect", this.onUserConnect.bind(this))
|
|
IlinkEmitter.on("userdisconnect", this.hideSideMenu.bind(this))
|
|
IlinkEmitter.on("langueChange", this.updateLangue.bind(this))
|
|
this.configuration = new Configuration();
|
|
readUser().then((user) => {
|
|
if (user !== null && user !== undefined) {
|
|
this.setState({ user });
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
retrieveAndroidInformation() {
|
|
this.configuration._getData().then((lang) => {
|
|
if (lang) {
|
|
I18n.locale = lang
|
|
readUser().then((result) => {
|
|
setTimeout(() => {
|
|
this.updateUser(result);
|
|
}, 3000)
|
|
})
|
|
} else {
|
|
let code = DeviceInfo.getDeviceLocale();
|
|
I18n.locale = code.toLowerCase()
|
|
readUser().then((result) => {
|
|
setTimeout(() => {
|
|
this.updateUser(result);
|
|
}, 3000)
|
|
}).catch((e) => {
|
|
this.props.navigation.navigate("Auth")
|
|
});
|
|
}
|
|
}).catch((e) => {
|
|
let code = DeviceInfo.getDeviceLocale()
|
|
I18n.locale = code.toLowerCase()
|
|
readUser().then((result) => {
|
|
setTimeout(() => {
|
|
this.updateUser(result);
|
|
}, 3000)
|
|
}).catch((e) => {
|
|
this.props.navigation.navigate("Auth")
|
|
});
|
|
|
|
|
|
})
|
|
|
|
return ""
|
|
}
|
|
|
|
componentDidMount() {
|
|
const items = this.props.navigation.router.childRouters.sta.childRouters;
|
|
this.setState({ items: items })
|
|
this.retrieveAndroidInformation()
|
|
|
|
|
|
}
|
|
updateLangue() {
|
|
this.setState({ lang: "change" })
|
|
this.forceUpdate()
|
|
}
|
|
componentWillUnmount() {
|
|
|
|
}
|
|
onMenuNavigationEvent(menuOption) {
|
|
/* Navigation.mergeOptions(this.props.componentId,{
|
|
sideMenu: {
|
|
left: {
|
|
visible: false,
|
|
}
|
|
}
|
|
})
|
|
switch (menuOption){
|
|
case "home":{
|
|
this.setState({currentId:0})
|
|
}
|
|
break;
|
|
case "userInfo":{
|
|
this.setState({currentId:1})
|
|
}
|
|
}*/
|
|
}
|
|
onUserConnect() {
|
|
readUser().then((user) => {
|
|
if (user !== null && user !== undefined) {
|
|
this.updateUser(user);
|
|
}
|
|
});
|
|
}
|
|
onNavigatorEvent(event) {
|
|
|
|
}
|
|
hideSideMenu() {
|
|
/* Navigation.mergeOptions("drawer", {
|
|
sideMenu: {
|
|
left: {
|
|
visible: false,
|
|
enabled:false
|
|
}
|
|
}
|
|
});*/
|
|
}
|
|
initState() {
|
|
return {
|
|
user: null,
|
|
menu: [],
|
|
currentId: 0,
|
|
}
|
|
}
|
|
getGeolocatedUserMenu() {
|
|
return [
|
|
{ title: I18n.t('MAP'), id: 0, key: 0, icon: 'md-map', active: true }
|
|
, { title: I18n.t('MY_ACCOUNT'), id: 1, key: 1, icon: 'md-person', active: false }
|
|
, { title: I18n.t('WALLET'), id: 6, key: 6, icon: 'md-wallet-outline', active: false }
|
|
, { title: I18n.t('CREDIT_MANAGE'), id: 2, key: 2, icon: 'md-card', active: false }
|
|
, { title: I18n.t('ADD_NETWORK'), id: 11, key: 11, icon: 'md-people', active: false }
|
|
, { title: I18n.t('CHANGE_INFORMATION'), id: 13, key: 13, icon: 'md-person', active: false }
|
|
, { title: I18n.t('NOTIFICATIONS'), id: 3, key: 3, icon: 'md-notifications', active: false }
|
|
, { title: I18n.t('CONFIGURATIONS'), id: 4, icon: 'md-settings', active: false }]
|
|
}
|
|
getSuperUserMenu() {
|
|
return [
|
|
{ title: I18n.t('MAP'), id: 0, key: 0, icon: 'md-map', active: true }
|
|
, { title: I18n.t('MY_ACCOUNT'), id: 1, key: 1, icon: 'md-person', active: false }
|
|
, { title: I18n.t('WALLET'), id: 6, key: 6, icon: 'md-wallet-outline', active: false }
|
|
, { title: I18n.t('CREDIT_MANAGE'), id: 2, key: 2, icon: 'md-card', active: false }
|
|
, { title: I18n.t('GROUP_MANAGE'), id: 5, key: 5, icon: 'md-people', active: false }
|
|
, { title: I18n.t('NOTIFICATIONS'), id: 3, key: 3, icon: 'md-notifications', active: false }
|
|
, { title: I18n.t('CONFIGURATIONS'), id: 4, icon: 'md-settings', active: false }]
|
|
}
|
|
getHyperUsermenu() {
|
|
return [
|
|
{ title: I18n.t('MAP'), id: 0, key: 0, icon: 'md-map', active: true }
|
|
, { title: I18n.t('MY_ACCOUNT'), id: 1, key: 1, icon: 'md-person', active: false }
|
|
, { title: I18n.t('WALLET'), id: 6, key: 6, icon: 'md-wallet-outline', active: false }
|
|
, { title: I18n.t('CREDIT_MANAGE'), id: 2, key: 2, icon: 'md-card', active: false }
|
|
, { title: I18n.t('GROUP_MANAGE'), id: 5, key: 5, icon: 'md-people', active: false }
|
|
, { title: I18n.t('NOTIFICATIONS'), id: 3, key: 3, icon: 'md-notifications', active: false }
|
|
, { title: I18n.t('CONFIGURATIONS'), id: 4, icon: 'md-settings', active: false }]
|
|
}
|
|
updateUser(user) {
|
|
let menu = [];
|
|
if (user !== undefined) {
|
|
console.log("USER", user.category);
|
|
/* Navigation.mergeOptions("drawer", {
|
|
sideMenu: {
|
|
left: {
|
|
visible: false,
|
|
enabled:true
|
|
}
|
|
}
|
|
});*/
|
|
if (user.category !== undefined) {
|
|
switch (user.category) {
|
|
case "geolocated":
|
|
menu = this.getGeolocatedUserMenu();
|
|
break;
|
|
case "super":
|
|
menu = this.getSuperUserMenu();
|
|
break;
|
|
case "hyper":
|
|
menu = this.getHyperUsermenu();
|
|
break;
|
|
}
|
|
} else {
|
|
menu = this.getUserMenu();
|
|
}
|
|
}
|
|
|
|
|
|
this.setState({ user: user, menu: menu });
|
|
}
|
|
getUserMenu() {
|
|
return [
|
|
{ title: I18n.t('MAP'), id: 0, key: 0, icon: 'md-map', active: true }
|
|
, { title: I18n.t('MY_ACCOUNT'), id: 1, key: 1, icon: 'md-person', active: false }
|
|
, { title: I18n.t('WALLET'), id: 6, key: 6, icon: 'md-wallet-outline', active: false }
|
|
, { title: I18n.t('NOTIFICATIONS'), id: 3, key: 3, icon: 'md-notifications', active: false }
|
|
, { title: I18n.t('CONFIGURATIONS'), id: 4, icon: 'md-settings', active: false }]
|
|
}
|
|
redirectToScreen = (item) => {
|
|
console.log("Item Menu Click", item);
|
|
|
|
if (this.state.user === null)
|
|
return;
|
|
else {
|
|
switch (this.state.user.category) {
|
|
case "super":
|
|
if (item === "walletSelect")
|
|
item = "walletDetail";
|
|
this.props.navigation.navigate(item, { agentId: this.state.user.agentId });
|
|
|
|
break;
|
|
case "hyper":
|
|
if (item === "walletSelect")
|
|
item = "walletDetail";
|
|
this.props.navigation.navigate(item, { agentId: this.state.user.agentId });
|
|
|
|
break;
|
|
case "geolocated":
|
|
this.props.navigation.navigate(item);
|
|
break;
|
|
|
|
default:
|
|
if (item === "walletSelect")
|
|
item = "walletDetailUser";
|
|
this.props.navigation.navigate(item, { userId: this.state.user.id });
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
_renderItem = (item) => {
|
|
if (item === "creditrequest" || item === 'historyItemDetails' || item === 'filter' || item === 'networks' || item === 'walletDetail' || item === 'walletDetailUser'
|
|
|| item === 'walletDepot' || item === 'walletRetrait' || item === 'createIdentification' || item === 'walletOptionSelect' || item === 'validateIdentification'
|
|
|| item === 'createIdentificationUser' || item === 'operateurOptionSelect' || item === 'paiementFacture' || item === 'envoieWalletToWalletUser'
|
|
|| item === 'envoieWalletToCashUser' || item === 'linkCard' || item === 'envoieWalletToCardUser' || item === 'envoieWalletToBankUser' || item === 'retraitWalletVersCashUser'
|
|
|| item === 'retraitCarteVersWalletUser' || item === 'retraitEnCashAgent' || item === 'retraitCarteVersCashAgent' || item === 'envoieCashVersWalletAgent'
|
|
|| item === 'envoieCashVersAutreWalletAgent' || item === 'retraitCarteVersCashUser' || item === 'envoiCashVersCashAgent' || item === 'envoieCashVersCashAgent'
|
|
|| item === 'envoieCashVersCarteAgent' || item === 'modifyIdentificationUser' || item === 'createGroupNanoCredit' || item === 'groupNanoCredit' || item === 'demandeValidationGroupe'
|
|
|| item === 'adhererGroupNanoCredit' || item === 'myNanoCreditGroup' || item === 'askNanoCredit' || item === 'refundNanoCreditUser' || item === 'cautionNanoCreditAgent'
|
|
|| item === 'epargnerArgentUser' || item === 'askNanoCredit' || item === 'casserEpargneUser') {
|
|
return null
|
|
} else {
|
|
const color = this.state.currentId === item.id ? theme.accent : "grey"
|
|
//console.log("ITEM OPTION MENU", item);
|
|
return (
|
|
<TouchableOpacity onPress={() => {
|
|
this.props.navigation.toggleDrawer();
|
|
this.setState({ currentId: item.id });
|
|
this.redirectToScreen(item);
|
|
}}
|
|
>
|
|
<View
|
|
style={items.content}
|
|
>
|
|
<Icon
|
|
name={this.getIcon(item)}
|
|
size={32}
|
|
/>
|
|
<Text style={{
|
|
marginLeft: 20,
|
|
fontSize: 16,
|
|
}}>{this.getNameItems(item)}
|
|
</Text>
|
|
</View></TouchableOpacity>)
|
|
}
|
|
};
|
|
_onPress = ((item) => {
|
|
|
|
this.setState({ currentId: item.id })
|
|
let current = this.state.menu.filter((item) => { return item.active })[0]
|
|
current.active = false;
|
|
item.active = true;
|
|
let newMenu = [];
|
|
this.state.menu.forEach(function (it) {
|
|
if (it.id === current.id) newMenu.push(current)
|
|
else if (it.id === item.id) newMenu.push(item)
|
|
else newMenu.push(it)
|
|
}
|
|
)
|
|
this.setState({ menu: newMenu })
|
|
/* switch(item.id){
|
|
case 2:
|
|
Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name: histo,
|
|
},
|
|
options: {
|
|
topBar: {
|
|
title: {
|
|
text: I18n.t('CREDIT_MANAGE')
|
|
}
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
case 0:
|
|
Navigation.popToRoot(route.stackRoot)
|
|
IlinkEmitter.emit("menuLink","home");
|
|
break;
|
|
case 1:
|
|
Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name:useraccount,
|
|
},
|
|
options: {
|
|
sideMenu:{
|
|
visibility:false
|
|
},
|
|
topBar: {
|
|
title: {
|
|
text:I18n.t('MY_ACCOUNT')
|
|
},
|
|
hideOnScroll: true,
|
|
|
|
}
|
|
}
|
|
});
|
|
IlinkEmitter.emit("menuLink","userInfo");
|
|
break;
|
|
case 3:
|
|
Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name:notification,
|
|
},
|
|
options: {
|
|
topBar: {
|
|
title: {
|
|
text:I18n.t('NOTIFICATION')
|
|
|
|
}
|
|
}
|
|
}
|
|
});
|
|
IlinkEmitter.emit("menuLink","notification");
|
|
|
|
break;
|
|
case 4:
|
|
Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name:configurations,
|
|
},
|
|
options: {
|
|
topBar: {
|
|
title: {
|
|
text:I18n.t('CONFIGURATIONS')
|
|
|
|
}
|
|
}
|
|
}
|
|
});
|
|
IlinkEmitter.emit("menuLink","config");
|
|
break;
|
|
case 5:
|
|
Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name:route.superviseurgroup,
|
|
},
|
|
options: {
|
|
topBar: {
|
|
title: {
|
|
text:I18n.t('GROUP_MANAGE')
|
|
|
|
}
|
|
}
|
|
}
|
|
});
|
|
IlinkEmitter.emit("menuLink","manage_group");
|
|
|
|
break;
|
|
case 7: Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name:route.credrequester,
|
|
},
|
|
options: {
|
|
topBar: {
|
|
visible:false
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
case 11:
|
|
Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name:route.addNetwork,
|
|
},
|
|
options: {
|
|
topBar: {
|
|
visible:false
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
case 12:
|
|
Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name:route.generateNetwork,
|
|
},
|
|
options: {
|
|
topBar: {
|
|
visible:false
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
case 13:
|
|
Navigation.push(route.stackRoot,{
|
|
component: {
|
|
name:route.updateinfo,
|
|
},
|
|
options: {
|
|
topBar: {
|
|
visible:false
|
|
}
|
|
}
|
|
});
|
|
};
|
|
Navigation.mergeOptions(this.props.componentId,{
|
|
sideMenu: {
|
|
left: {
|
|
visible: false,
|
|
}
|
|
}
|
|
})
|
|
*/ });
|
|
getNameItems(item) {
|
|
|
|
let icon = item
|
|
switch (item) {
|
|
case "home": icon = I18n.t('MAP')
|
|
break
|
|
case 'useraccount': icon = I18n.t('MY_ACCOUNT')
|
|
break
|
|
case 'walletSelect': icon = I18n.t('WALLET')
|
|
break
|
|
case 'Historique': icon = I18n.t('CREDIT_MANAGE')
|
|
break
|
|
case "superviseurgroup": icon = I18n.t('GROUP_MANAGE')
|
|
break
|
|
case "updateinformation": icon = I18n.t("CHANGE_INFORMATION")
|
|
break
|
|
case 'notificationview': icon = I18n.t('NOTIFICATIONS')
|
|
break
|
|
case 'configuration': icon = I18n.t('CONFIGURATIONS')
|
|
break;
|
|
case 'addNetwork': icon = I18n.t('ADD_NETWORK')
|
|
break
|
|
case 'about': icon = I18n.t('ABOUT')
|
|
}
|
|
return icon;
|
|
}
|
|
getIcon(item) {
|
|
let icon = "md-map"
|
|
switch (item) {
|
|
case "home": icon = "md-map"
|
|
break
|
|
case 'useraccount': icon = "md-person"
|
|
break
|
|
case 'walletSelect': icon = "md-wallet"
|
|
break
|
|
case 'Historique': icon = "md-card"
|
|
break
|
|
case "superviseurgroup": icon = "md-people"
|
|
break
|
|
case 'notificationview': icon = "md-notifications";
|
|
break
|
|
case "updateinformation": icon = "md-people"
|
|
break
|
|
case 'configuration': icon = 'md-settings'
|
|
break;
|
|
case 'addNetwork': icon = "md-people"
|
|
break
|
|
case 'about': icon = 'md-contacts';
|
|
break;
|
|
}
|
|
return icon;
|
|
}
|
|
render() {
|
|
var name = this.state.user ? this.state.user.firstname : "";
|
|
const surname = this.state.user ? this.state.user.lastname : "";
|
|
if (!this.state.lang && this.state.lang !== "change")
|
|
return (
|
|
<View style={styles.container}>
|
|
<View
|
|
style={styles.headercontent}
|
|
>
|
|
<Text style={styles.headerTitle}>{name}</Text>
|
|
<Text style={styles.headerTitle}>{surname}</Text>
|
|
<Text style={styles.headerPhone}>{this.state.user ? "" + this.state.user.phone : ""}</Text>
|
|
</View>
|
|
<ScrollView style={{
|
|
flex: 1, height: responsiveHeight(40)
|
|
}} >
|
|
<SafeAreaView forceInset={{ top: 'always', horizontal: 'never' }}>
|
|
{
|
|
this.state.items && Object.keys(this.state.items).map((item, key) => {
|
|
return this._renderItem(item)
|
|
})
|
|
}
|
|
</SafeAreaView>
|
|
</ScrollView>
|
|
<Button
|
|
textStyle={styles.btntext}
|
|
style={styles.btnDeconnect}
|
|
onPress={() => this.userDeconnect()}
|
|
>{I18n.t('DISCONNEXION')}</Button>
|
|
</View>
|
|
)
|
|
else {
|
|
setTimeout(() => this.setState({ lang: "" }), 500)
|
|
return (<View />)
|
|
}
|
|
}
|
|
userDeconnect() {
|
|
Alert.alert(
|
|
I18n.t('DISCONNEXION'),
|
|
I18n.t('DISCONNEXION_TEXT'),
|
|
[
|
|
{},
|
|
{ text: I18n.t('NO'), onPress: () => console.log('Cancel Pressed'), style: 'cancel' },
|
|
{
|
|
text: I18n.t('YES'), onPress: () => {
|
|
disconnect().then(() => {
|
|
IlinkEmitter.emit("userdisconnect");
|
|
AsyncStorage.clear();
|
|
this.props.navigation.navigate("Auth")
|
|
})
|
|
}
|
|
},
|
|
],
|
|
{ cancelable: false }
|
|
)
|
|
}
|
|
watchUser() {
|
|
readUser().then((user) => {
|
|
if (user !== null && user !== undefined) {
|
|
if (user.id !== this.state.user.id) {
|
|
this.updateUser(user);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
const items = StyleSheet.create({
|
|
content: {
|
|
width: responsiveWidth(100),
|
|
height: 50,
|
|
paddingLeft: 20,
|
|
flexDirection: 'row',
|
|
alignItems: 'center'
|
|
},
|
|
itemText: {
|
|
color: '#000000',
|
|
marginLeft: 20,
|
|
fontSize: responsiveFontSize(2),
|
|
}
|
|
});
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
flex: 1,
|
|
backgroundColor: "white",
|
|
},
|
|
btnDeconnect: {
|
|
borderColor: "transparent",
|
|
marginLeft: 20,
|
|
marginRight: 20,
|
|
backgroundColor: theme.accent
|
|
},
|
|
btntext: {
|
|
color: "white",
|
|
fontSize: 17,
|
|
fontWeight: "bold"
|
|
},
|
|
headerTitle: {
|
|
fontSize: 14,
|
|
marginBottom: 5,
|
|
color: "white",
|
|
fontWeight: 'bold',
|
|
},
|
|
headerPhone: {
|
|
fontSize: 12,
|
|
marginBottom: 20,
|
|
color: "white",
|
|
justifyContent: 'flex-end'
|
|
|
|
},
|
|
listMenu: {
|
|
paddingTop: 15,
|
|
},
|
|
headercontent: {
|
|
height: responsiveHeight(30),
|
|
backgroundColor: primary,
|
|
justifyContent: 'flex-end',
|
|
alignItems: 'flex-start',
|
|
paddingLeft: 20
|
|
|
|
},
|
|
backgroundd_drawer: {
|
|
backgroundColor: '#000',
|
|
},
|
|
listbackground: {
|
|
},
|
|
actionButtonIcon: {
|
|
fontSize: 20,
|
|
height: 22,
|
|
color: 'white',
|
|
},
|
|
welcome: {
|
|
fontSize: 20,
|
|
textAlign: 'center',
|
|
margin: 10,
|
|
},
|
|
instructions: {
|
|
textAlign: 'center',
|
|
color: '#333333',
|
|
marginBottom: 5,
|
|
},
|
|
});
|