commit 2612abe75e075df7baf3a2539d01dc55f3e1c287 Author: masterfreud Date: Sun Jun 16 14:09:54 2019 +0100 stabilisation ios diff --git a/.buckconfig b/.buckconfig new file mode 100644 index 00000000..934256cb --- /dev/null +++ b/.buckconfig @@ -0,0 +1,6 @@ + +[android] + target = Google Inc.:Google APIs:23 + +[maven_repositories] + central = https://repo1.maven.org/maven2 diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..40c6dcd0 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native-community', +}; diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 00000000..47d80d95 --- /dev/null +++ b/.flowconfig @@ -0,0 +1,69 @@ +[ignore] +; We fork some components by platform +.*/*[.]android.js + +; Ignore "BUCK" generated dirs +/\.buckd/ + +; Ignore unexpected extra "@providesModule" +.*/node_modules/.*/node_modules/fbjs/.* + +; Ignore duplicate module providers +; For RN Apps installed via npm, "Libraries" folder is inside +; "node_modules/react-native" but in the source repo it is in the root +.*/Libraries/react-native/React.js + +; Ignore polyfills +.*/Libraries/polyfills/.* + +; Ignore metro +.*/node_modules/metro/.* + +[include] + +[libs] +node_modules/react-native/Libraries/react-native/react-native-interface.js +node_modules/react-native/flow/ + +[options] +emoji=true + +esproposal.optional_chaining=enable +esproposal.nullish_coalescing=enable + +module.system=haste +module.system.haste.use_name_reducers=true +# get basename +module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1' +# strip .js or .js.flow suffix +module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1' +# strip .ios suffix +module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1' +module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1' +module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1' +module.system.haste.paths.blacklist=.*/__tests__/.* +module.system.haste.paths.blacklist=.*/__mocks__/.* +module.system.haste.paths.blacklist=/node_modules/react-native/Libraries/Animated/src/polyfills/.* +module.system.haste.paths.whitelist=/node_modules/react-native/Libraries/.* + +munge_underscores=true + +module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' + +module.file_ext=.js +module.file_ext=.jsx +module.file_ext=.json +module.file_ext=.native.js + +suppress_type=$FlowIssue +suppress_type=$FlowFixMe +suppress_type=$FlowFixMeProps +suppress_type=$FlowFixMeState + +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError + +[version] +^0.92.0 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..d42ff183 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.pbxproj -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..5d647565 --- /dev/null +++ b/.gitignore @@ -0,0 +1,56 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +*.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots + +# Bundle artifact +*.jsbundle diff --git a/.watchmanconfig b/.watchmanconfig new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/.watchmanconfig @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/App.ios.js b/App.ios.js new file mode 100755 index 00000000..55c28691 --- /dev/null +++ b/App.ios.js @@ -0,0 +1,248 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + * @flow + */ + +import React, {Component} from 'react'; +import {Platform, StyleSheet, Text, View} from 'react-native'; +import { createSwitchNavigator, createStackNavigator,createDrawerNavigator, createAppContainer,createBottomTabNavigator } from 'react-navigation'; +import Connect from "./screens/login/Connect"; +import SplashScreen from "./screens/splashscreen/SplashScreen"; +import HelpMenu from "./screens/help/HelpMenu"; +import Help from "./screens/help/Help"; +import ForgottenPassword from "./screens/login/ForgottenPassword"; +import TypeChoiser from "./screens/login/TypeChoiser"; +import CreateUserStep2 from "./screens/login/createUserStep2"; +import createAccount from "./screens/login/createAccount"; +import UpdateInformations from "./screens/account/UpdateInformations"; +import UserAccount from "./screens/account/UserAccount"; +import ActivateAccount from "./screens/login/ActivateAccount"; +import Notifications from "./screens/notifications/Notifications"; +import About from "./screens/configurations/About"; +import Configurations from "./screens/configurations/Configurations"; + +import History from './screens/history-request/History' +import OptionsMenu from "./screens/optionMenu/OptionsMenu"; +import Home from "./screens/home/Home"; +import HistoryItemDetails from "./screens/history-request/HistoryItemDetails"; +import SuperViseurGroupeHome from "./screens/groupes/SuperViseurGroupeHome"; +import HistoryRequester from "./screens/history-request/HistoryRequester"; +import AddNetwork from "./screens/account/AddNetwork"; +import MyHistory from "./screens/history-request/MyHistory"; +import Icon from "react-native-vector-icons/FontAwesome5"; +import { Appbar } from 'react-native-paper'; + +import IconWithBadge from "./screens/IconWithBadge" +import I18n from "react-native-i18n"; +import Filter from './screens/home/Filter'; +import { createMaterialBottomTabNavigator } from 'react-navigation-material-bottom-tabs'; +import Networks from './screens/home/Networks'; +const instructions = Platform.select({ + ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu', + android: + 'Double tap R on your keyboard to reload,\n' + + 'Shake or press menu button for dev menu', +}); + +type Props = {}; +const theme=require("./utils/theme") +class HomeScreen extends Component { + render() { + return ( + + Welcome to iLink World! + To get started, edit App.js + {instructions} + + ); + } +} +const AuthStack=createStackNavigator({ + login:Connect, + helpMenu:HelpMenu, + help:Help, + forgottenpass:ForgottenPassword, + typeaccountcreate:TypeChoiser, + simpleusercreate:createAccount, + step2:CreateUserStep2, + activateaccout:ActivateAccount + +},{ + headerMode: 'none' +}) +const AppStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + /* filtre:Filter, + network:Networks,*/ + useraccount:{ + screen:UserAccount, + navigationOptions: { + }, + }, + notificationview:Notifications, + configuration:Configurations, + about:About + +})},{contentComponent:OptionsMenu,headerMode: 'none',contentOptions:{activeTintColor: theme.accent}}) +const AppAgentStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique: + { + screen: createBottomTabNavigator({myDemand: MyHistory}, { + headerMode: "none", + header:null, + headerTitle:null, + headerTitle: I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + fontWeight: "bold" + }, + } + }), + navigationOptions: ({ navigation }) => ({ + header:null, + headerMode:'none', + headerTitle:null, + activeColor: '#f0edf6', + inactiveColor: '#3e2465', + barStyle: { backgroundColor: '#694fad' }, + + drawerLabel: I18n.t('CREDIT_MANAGE'), + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + + historyItemDetails:HistoryItemDetails, + creditrequest:HistoryRequester, + addNetwork:AddNetwork, + updateinformation:UpdateInformations, + notificationview:Notifications, + configuration:Configurations, + about:About +})},{contentComponent:OptionsMenu, + backBehavior:"none", + lazy:false, + headerMode: 'none',contentOptions:{activeTintColor:theme.accent}}) +const AppAdministratorStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique:{ + screen:createBottomTabNavigator({ + myDemand:MyHistory,OthersDemand:MyHistory}, { + headerMode:"none", + header:null, + headerTitle:null, + title:I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + }, + }}), + navigationOptions: ({ navigation }) => ({ + header:null, + headerMode:'none', + headerTitle:null, + activeColor: '#f0edf6', + inactiveColor: '#3e2465', + barStyle: { backgroundColor: '#694fad' }, + + drawerLabel: I18n.t('CREDIT_MANAGE'), + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + creditrequest:HistoryRequester, + historyItemDetails:HistoryItemDetails, + + superviseurgroup:SuperViseurGroupeHome, + notificationview:Notifications, + configuration:Configurations, + about:About + +})}, + {contentComponent:OptionsMenu, + backBehavior:"none", + headerMode: 'none'}) +const AppSuperAdministrator=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique:{ + screen:createBottomTabNavigator({OthersDemand:MyHistory}, { + headerMode:"none", + header:null, + headerTitle:null, + title:I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + fontWeight:"bold" + }, + }}), + navigationOptions: ({ navigation }) => ({ + title: I18n.t('CREDIT_MANAGE'), + headerMode:"none", + header:null, + headerTitle:null, + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + creditrequest:HistoryRequester, + historyItemDetails:HistoryItemDetails, + superviseurgroup:SuperViseurGroupeHome, + notificationview:Notifications, + configuration:Configurations, + about:About + +})},{contentComponent:OptionsMenu, + backBehavior:"none", + headerMode: 'none'}) +export const AppNavigator =createSwitchNavigator({ + first: { + screen: SplashScreen + }, + App:AppStack, + AgentApp:AppAgentStack, + adminApp:AppAdministratorStack, + supAdminApp:AppSuperAdministrator, + Auth:AuthStack +},{ + initialRouteName: 'first' +}); +const AppContainer = createAppContainer(AppNavigator); + +export default AppContainer; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: '#F5FCFF', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); diff --git a/App.js b/App.js new file mode 100644 index 00000000..55c28691 --- /dev/null +++ b/App.js @@ -0,0 +1,248 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + * @flow + */ + +import React, {Component} from 'react'; +import {Platform, StyleSheet, Text, View} from 'react-native'; +import { createSwitchNavigator, createStackNavigator,createDrawerNavigator, createAppContainer,createBottomTabNavigator } from 'react-navigation'; +import Connect from "./screens/login/Connect"; +import SplashScreen from "./screens/splashscreen/SplashScreen"; +import HelpMenu from "./screens/help/HelpMenu"; +import Help from "./screens/help/Help"; +import ForgottenPassword from "./screens/login/ForgottenPassword"; +import TypeChoiser from "./screens/login/TypeChoiser"; +import CreateUserStep2 from "./screens/login/createUserStep2"; +import createAccount from "./screens/login/createAccount"; +import UpdateInformations from "./screens/account/UpdateInformations"; +import UserAccount from "./screens/account/UserAccount"; +import ActivateAccount from "./screens/login/ActivateAccount"; +import Notifications from "./screens/notifications/Notifications"; +import About from "./screens/configurations/About"; +import Configurations from "./screens/configurations/Configurations"; + +import History from './screens/history-request/History' +import OptionsMenu from "./screens/optionMenu/OptionsMenu"; +import Home from "./screens/home/Home"; +import HistoryItemDetails from "./screens/history-request/HistoryItemDetails"; +import SuperViseurGroupeHome from "./screens/groupes/SuperViseurGroupeHome"; +import HistoryRequester from "./screens/history-request/HistoryRequester"; +import AddNetwork from "./screens/account/AddNetwork"; +import MyHistory from "./screens/history-request/MyHistory"; +import Icon from "react-native-vector-icons/FontAwesome5"; +import { Appbar } from 'react-native-paper'; + +import IconWithBadge from "./screens/IconWithBadge" +import I18n from "react-native-i18n"; +import Filter from './screens/home/Filter'; +import { createMaterialBottomTabNavigator } from 'react-navigation-material-bottom-tabs'; +import Networks from './screens/home/Networks'; +const instructions = Platform.select({ + ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu', + android: + 'Double tap R on your keyboard to reload,\n' + + 'Shake or press menu button for dev menu', +}); + +type Props = {}; +const theme=require("./utils/theme") +class HomeScreen extends Component { + render() { + return ( + + Welcome to iLink World! + To get started, edit App.js + {instructions} + + ); + } +} +const AuthStack=createStackNavigator({ + login:Connect, + helpMenu:HelpMenu, + help:Help, + forgottenpass:ForgottenPassword, + typeaccountcreate:TypeChoiser, + simpleusercreate:createAccount, + step2:CreateUserStep2, + activateaccout:ActivateAccount + +},{ + headerMode: 'none' +}) +const AppStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + /* filtre:Filter, + network:Networks,*/ + useraccount:{ + screen:UserAccount, + navigationOptions: { + }, + }, + notificationview:Notifications, + configuration:Configurations, + about:About + +})},{contentComponent:OptionsMenu,headerMode: 'none',contentOptions:{activeTintColor: theme.accent}}) +const AppAgentStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique: + { + screen: createBottomTabNavigator({myDemand: MyHistory}, { + headerMode: "none", + header:null, + headerTitle:null, + headerTitle: I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + fontWeight: "bold" + }, + } + }), + navigationOptions: ({ navigation }) => ({ + header:null, + headerMode:'none', + headerTitle:null, + activeColor: '#f0edf6', + inactiveColor: '#3e2465', + barStyle: { backgroundColor: '#694fad' }, + + drawerLabel: I18n.t('CREDIT_MANAGE'), + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + + historyItemDetails:HistoryItemDetails, + creditrequest:HistoryRequester, + addNetwork:AddNetwork, + updateinformation:UpdateInformations, + notificationview:Notifications, + configuration:Configurations, + about:About +})},{contentComponent:OptionsMenu, + backBehavior:"none", + lazy:false, + headerMode: 'none',contentOptions:{activeTintColor:theme.accent}}) +const AppAdministratorStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique:{ + screen:createBottomTabNavigator({ + myDemand:MyHistory,OthersDemand:MyHistory}, { + headerMode:"none", + header:null, + headerTitle:null, + title:I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + }, + }}), + navigationOptions: ({ navigation }) => ({ + header:null, + headerMode:'none', + headerTitle:null, + activeColor: '#f0edf6', + inactiveColor: '#3e2465', + barStyle: { backgroundColor: '#694fad' }, + + drawerLabel: I18n.t('CREDIT_MANAGE'), + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + creditrequest:HistoryRequester, + historyItemDetails:HistoryItemDetails, + + superviseurgroup:SuperViseurGroupeHome, + notificationview:Notifications, + configuration:Configurations, + about:About + +})}, + {contentComponent:OptionsMenu, + backBehavior:"none", + headerMode: 'none'}) +const AppSuperAdministrator=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique:{ + screen:createBottomTabNavigator({OthersDemand:MyHistory}, { + headerMode:"none", + header:null, + headerTitle:null, + title:I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + fontWeight:"bold" + }, + }}), + navigationOptions: ({ navigation }) => ({ + title: I18n.t('CREDIT_MANAGE'), + headerMode:"none", + header:null, + headerTitle:null, + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + creditrequest:HistoryRequester, + historyItemDetails:HistoryItemDetails, + superviseurgroup:SuperViseurGroupeHome, + notificationview:Notifications, + configuration:Configurations, + about:About + +})},{contentComponent:OptionsMenu, + backBehavior:"none", + headerMode: 'none'}) +export const AppNavigator =createSwitchNavigator({ + first: { + screen: SplashScreen + }, + App:AppStack, + AgentApp:AppAgentStack, + adminApp:AppAdministratorStack, + supAdminApp:AppSuperAdministrator, + Auth:AuthStack +},{ + initialRouteName: 'first' +}); +const AppContainer = createAppContainer(AppNavigator); + +export default AppContainer; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: '#F5FCFF', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); diff --git a/app.json b/app.json new file mode 100644 index 00000000..7e1c8b7f --- /dev/null +++ b/app.json @@ -0,0 +1,4 @@ +{ + "name": "iLinkWorld", + "displayName": "iLinkWorld" +} \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..f842b77f --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:metro-react-native-babel-preset'], +}; diff --git a/datas/img/.directory b/datas/img/.directory new file mode 100755 index 00000000..9044f365 --- /dev/null +++ b/datas/img/.directory @@ -0,0 +1,4 @@ +[Dolphin] +PreviewsShown=true +Timestamp=2018,11,21,12,34,53 +Version=3 diff --git a/datas/img/Plan de travail 1.png b/datas/img/Plan de travail 1.png new file mode 100644 index 00000000..edb878d3 Binary files /dev/null and b/datas/img/Plan de travail 1.png differ diff --git a/datas/img/Plan de travail 2.png b/datas/img/Plan de travail 2.png new file mode 100644 index 00000000..482c30e6 Binary files /dev/null and b/datas/img/Plan de travail 2.png differ diff --git a/datas/img/Plan de travail 3.png b/datas/img/Plan de travail 3.png new file mode 100644 index 00000000..4f194f6c Binary files /dev/null and b/datas/img/Plan de travail 3.png differ diff --git a/datas/img/icon-left.png b/datas/img/icon-left.png new file mode 100644 index 00000000..97596e69 Binary files /dev/null and b/datas/img/icon-left.png differ diff --git a/datas/img/icon-middle.png b/datas/img/icon-middle.png new file mode 100644 index 00000000..d7a63eb7 Binary files /dev/null and b/datas/img/icon-middle.png differ diff --git a/datas/img/icon-right.png b/datas/img/icon-right.png new file mode 100644 index 00000000..ee07c21f Binary files /dev/null and b/datas/img/icon-right.png differ diff --git a/datas/img/icon2.png b/datas/img/icon2.png new file mode 100644 index 00000000..14d412a3 Binary files /dev/null and b/datas/img/icon2.png differ diff --git a/datas/img/icon3.png b/datas/img/icon3.png new file mode 100644 index 00000000..f82873d0 Binary files /dev/null and b/datas/img/icon3.png differ diff --git a/datas/img/icon3up.png b/datas/img/icon3up.png new file mode 100644 index 00000000..cbcc957d Binary files /dev/null and b/datas/img/icon3up.png differ diff --git a/datas/img/iconsub3.png b/datas/img/iconsub3.png new file mode 100644 index 00000000..b73c5313 Binary files /dev/null and b/datas/img/iconsub3.png differ diff --git a/datas/img/ilinklogo.png b/datas/img/ilinklogo.png new file mode 100644 index 00000000..edb878d3 Binary files /dev/null and b/datas/img/ilinklogo.png differ diff --git a/datas/img/ios/icon/.directory b/datas/img/ios/icon/.directory new file mode 100755 index 00000000..1190c108 --- /dev/null +++ b/datas/img/ios/icon/.directory @@ -0,0 +1,4 @@ +[Dolphin] +PreviewsShown=true +Timestamp=2018,8,3,15,24,26 +Version=3 diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-AppStore.png b/datas/img/ios/icon/AppIcon.appiconset/icon-AppStore.png new file mode 100644 index 00000000..4143881d Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-AppStore.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad20.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad20.png new file mode 100644 index 00000000..ea1c9758 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad20.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad20@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad20@2x.png new file mode 100644 index 00000000..a66c3d4e Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad20@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad29.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad29.png new file mode 100644 index 00000000..73d90643 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad29.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad29@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad29@2x.png new file mode 100644 index 00000000..c0f6d9e3 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad29@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad40.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad40.png new file mode 100644 index 00000000..a66c3d4e Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad40.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad40@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad40@2x.png new file mode 100644 index 00000000..e3fc703e Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad40@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad76.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad76.png new file mode 100644 index 00000000..492316a6 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad76.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad76@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad76@2x.png new file mode 100644 index 00000000..fe0ee691 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad76@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPad83@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad83@2x.png new file mode 100644 index 00000000..af7f2e08 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPad83@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone20@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone20@2x.png new file mode 100644 index 00000000..a66c3d4e Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone20@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone20@3x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone20@3x.png new file mode 100644 index 00000000..c64d60d9 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone20@3x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone29@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone29@2x.png new file mode 100644 index 00000000..c0f6d9e3 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone29@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone29@3x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone29@3x.png new file mode 100644 index 00000000..f45d5538 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone29@3x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone40@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone40@2x.png new file mode 100644 index 00000000..e3fc703e Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone40@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone40@3x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone40@3x.png new file mode 100644 index 00000000..d926775e Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone40@3x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone60@2x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone60@2x.png new file mode 100644 index 00000000..d926775e Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone60@2x.png differ diff --git a/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone60@3x.png b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone60@3x.png new file mode 100644 index 00000000..47034450 Binary files /dev/null and b/datas/img/ios/icon/AppIcon.appiconset/icon-iPhone60@3x.png differ diff --git a/datas/img/ios/icon/icon-1024.png b/datas/img/ios/icon/icon-1024.png new file mode 100755 index 00000000..d9f885f4 Binary files /dev/null and b/datas/img/ios/icon/icon-1024.png differ diff --git a/datas/img/ios/icon/icon-40.png b/datas/img/ios/icon/icon-40.png new file mode 100755 index 00000000..32f272be Binary files /dev/null and b/datas/img/ios/icon/icon-40.png differ diff --git a/datas/img/ios/icon/icon-40@2x.png b/datas/img/ios/icon/icon-40@2x.png new file mode 100755 index 00000000..acbc898b Binary files /dev/null and b/datas/img/ios/icon/icon-40@2x.png differ diff --git a/datas/img/ios/icon/icon-40@3x.png b/datas/img/ios/icon/icon-40@3x.png new file mode 100755 index 00000000..2243c3f4 Binary files /dev/null and b/datas/img/ios/icon/icon-40@3x.png differ diff --git a/datas/img/ios/icon/icon-50.png b/datas/img/ios/icon/icon-50.png new file mode 100755 index 00000000..5a5eebf0 Binary files /dev/null and b/datas/img/ios/icon/icon-50.png differ diff --git a/datas/img/ios/icon/icon-50@2x.png b/datas/img/ios/icon/icon-50@2x.png new file mode 100755 index 00000000..b455b1ec Binary files /dev/null and b/datas/img/ios/icon/icon-50@2x.png differ diff --git a/datas/img/ios/icon/icon-60.png b/datas/img/ios/icon/icon-60.png new file mode 100755 index 00000000..906b2e26 Binary files /dev/null and b/datas/img/ios/icon/icon-60.png differ diff --git a/datas/img/ios/icon/icon-60@2x.png b/datas/img/ios/icon/icon-60@2x.png new file mode 100755 index 00000000..2243c3f4 Binary files /dev/null and b/datas/img/ios/icon/icon-60@2x.png differ diff --git a/datas/img/ios/icon/icon-60@3x.png b/datas/img/ios/icon/icon-60@3x.png new file mode 100755 index 00000000..af5160fc Binary files /dev/null and b/datas/img/ios/icon/icon-60@3x.png differ diff --git a/datas/img/ios/icon/icon-72.png b/datas/img/ios/icon/icon-72.png new file mode 100755 index 00000000..0d777116 Binary files /dev/null and b/datas/img/ios/icon/icon-72.png differ diff --git a/datas/img/ios/icon/icon-72@2x.png b/datas/img/ios/icon/icon-72@2x.png new file mode 100755 index 00000000..54968a8b Binary files /dev/null and b/datas/img/ios/icon/icon-72@2x.png differ diff --git a/datas/img/ios/icon/icon-76.png b/datas/img/ios/icon/icon-76.png new file mode 100755 index 00000000..c489ee79 Binary files /dev/null and b/datas/img/ios/icon/icon-76.png differ diff --git a/datas/img/ios/icon/icon-76@2x.png b/datas/img/ios/icon/icon-76@2x.png new file mode 100755 index 00000000..c4331b9f Binary files /dev/null and b/datas/img/ios/icon/icon-76@2x.png differ diff --git a/datas/img/ios/icon/icon-83.5@2x.png b/datas/img/ios/icon/icon-83.5@2x.png new file mode 100755 index 00000000..6522b2f8 Binary files /dev/null and b/datas/img/ios/icon/icon-83.5@2x.png differ diff --git a/datas/img/ios/icon/icon-small.png b/datas/img/ios/icon/icon-small.png new file mode 100755 index 00000000..9c62dd39 Binary files /dev/null and b/datas/img/ios/icon/icon-small.png differ diff --git a/datas/img/ios/icon/icon-small@2x.png b/datas/img/ios/icon/icon-small@2x.png new file mode 100755 index 00000000..a05ba106 Binary files /dev/null and b/datas/img/ios/icon/icon-small@2x.png differ diff --git a/datas/img/ios/icon/icon-small@3x.png b/datas/img/ios/icon/icon-small@3x.png new file mode 100755 index 00000000..f8dcdfc1 Binary files /dev/null and b/datas/img/ios/icon/icon-small@3x.png differ diff --git a/datas/img/ios/icon/icon.png b/datas/img/ios/icon/icon.png new file mode 100755 index 00000000..a96d102e Binary files /dev/null and b/datas/img/ios/icon/icon.png differ diff --git a/datas/img/ios/icon/icon@2x.png b/datas/img/ios/icon/icon@2x.png new file mode 100755 index 00000000..7e00b1e6 Binary files /dev/null and b/datas/img/ios/icon/icon@2x.png differ diff --git a/datas/img/ios/splash/Default-568h@2x~iphone.png b/datas/img/ios/splash/Default-568h@2x~iphone.png new file mode 100755 index 00000000..890d2f15 Binary files /dev/null and b/datas/img/ios/splash/Default-568h@2x~iphone.png differ diff --git a/datas/img/ios/splash/Default-667h.png b/datas/img/ios/splash/Default-667h.png new file mode 100755 index 00000000..65e4d868 Binary files /dev/null and b/datas/img/ios/splash/Default-667h.png differ diff --git a/datas/img/ios/splash/Default-736h.png b/datas/img/ios/splash/Default-736h.png new file mode 100755 index 00000000..8f1022c2 Binary files /dev/null and b/datas/img/ios/splash/Default-736h.png differ diff --git a/datas/img/ios/splash/Default-Landscape-736h.png b/datas/img/ios/splash/Default-Landscape-736h.png new file mode 100755 index 00000000..29e4168b Binary files /dev/null and b/datas/img/ios/splash/Default-Landscape-736h.png differ diff --git a/datas/img/ios/splash/Default-Landscape@2x~ipad.png b/datas/img/ios/splash/Default-Landscape@2x~ipad.png new file mode 100755 index 00000000..86f48b76 Binary files /dev/null and b/datas/img/ios/splash/Default-Landscape@2x~ipad.png differ diff --git a/datas/img/ios/splash/Default-Landscape@~ipadpro.png b/datas/img/ios/splash/Default-Landscape@~ipadpro.png new file mode 100755 index 00000000..8614921e Binary files /dev/null and b/datas/img/ios/splash/Default-Landscape@~ipadpro.png differ diff --git a/datas/img/ios/splash/Default-Landscape~ipad.png b/datas/img/ios/splash/Default-Landscape~ipad.png new file mode 100755 index 00000000..53555d11 Binary files /dev/null and b/datas/img/ios/splash/Default-Landscape~ipad.png differ diff --git a/datas/img/ios/splash/Default-Portrait@2x~ipad.png b/datas/img/ios/splash/Default-Portrait@2x~ipad.png new file mode 100755 index 00000000..1d341f1d Binary files /dev/null and b/datas/img/ios/splash/Default-Portrait@2x~ipad.png differ diff --git a/datas/img/ios/splash/Default-Portrait@~ipadpro.png b/datas/img/ios/splash/Default-Portrait@~ipadpro.png new file mode 100755 index 00000000..aa264c18 Binary files /dev/null and b/datas/img/ios/splash/Default-Portrait@~ipadpro.png differ diff --git a/datas/img/ios/splash/Default-Portrait~ipad.png b/datas/img/ios/splash/Default-Portrait~ipad.png new file mode 100755 index 00000000..e152fd47 Binary files /dev/null and b/datas/img/ios/splash/Default-Portrait~ipad.png differ diff --git a/datas/img/ios/splash/Default@2x~iphone.png b/datas/img/ios/splash/Default@2x~iphone.png new file mode 100755 index 00000000..1afdcd3b Binary files /dev/null and b/datas/img/ios/splash/Default@2x~iphone.png differ diff --git a/datas/img/ios/splash/Default@2x~universal~anyany.png b/datas/img/ios/splash/Default@2x~universal~anyany.png new file mode 100755 index 00000000..2e175fe1 Binary files /dev/null and b/datas/img/ios/splash/Default@2x~universal~anyany.png differ diff --git a/datas/img/ios/splash/Default~iphone.png b/datas/img/ios/splash/Default~iphone.png new file mode 100755 index 00000000..f8f80b43 Binary files /dev/null and b/datas/img/ios/splash/Default~iphone.png differ diff --git a/datas/img/map.png b/datas/img/map.png new file mode 100755 index 00000000..efe38401 Binary files /dev/null and b/datas/img/map.png differ diff --git a/datas/img/png/019-placeholder-4.png b/datas/img/png/019-placeholder-4.png new file mode 100755 index 00000000..da3211fc Binary files /dev/null and b/datas/img/png/019-placeholder-4.png differ diff --git a/datas/img/png/032-home.png b/datas/img/png/032-home.png new file mode 100755 index 00000000..6c5d1ae0 Binary files /dev/null and b/datas/img/png/032-home.png differ diff --git a/datas/img/png/home_network.png b/datas/img/png/home_network.png new file mode 100755 index 00000000..9e0abfc7 Binary files /dev/null and b/datas/img/png/home_network.png differ diff --git a/datas/img/png/other_net.png b/datas/img/png/other_net.png new file mode 100755 index 00000000..ce871c0f Binary files /dev/null and b/datas/img/png/other_net.png differ diff --git a/datas/img/png/user_place.png b/datas/img/png/user_place.png new file mode 100755 index 00000000..1e5d0d20 Binary files /dev/null and b/datas/img/png/user_place.png differ diff --git a/datas/img/png/userplace.png b/datas/img/png/userplace.png new file mode 100755 index 00000000..49061ac9 Binary files /dev/null and b/datas/img/png/userplace.png differ diff --git a/datas/img/userplace.png b/datas/img/userplace.png new file mode 100755 index 00000000..49061ac9 Binary files /dev/null and b/datas/img/userplace.png differ diff --git a/datas/img/users/man-1.png b/datas/img/users/man-1.png new file mode 100755 index 00000000..f2f65cc6 Binary files /dev/null and b/datas/img/users/man-1.png differ diff --git a/datas/img/users/man.png b/datas/img/users/man.png new file mode 100755 index 00000000..14409fc9 Binary files /dev/null and b/datas/img/users/man.png differ diff --git a/datas/img/vectors/user_place.svg b/datas/img/vectors/user_place.svg new file mode 100755 index 00000000..57df9050 --- /dev/null +++ b/datas/img/vectors/user_place.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/datas/json/3895-loader.json b/datas/json/3895-loader.json new file mode 100644 index 00000000..03dd600b --- /dev/null +++ b/datas/json/3895-loader.json @@ -0,0 +1 @@ +{"v":"5.4.1","fr":30,"ip":0,"op":180,"w":1000,"h":1000,"nm":"Untitled-3","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Untitled-3 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2},"a":{"a":0,"k":[500,500,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"CC Force Motion Blur","np":6,"mn":"CC Force Motion Blur","ix":1,"en":1,"ef":[{"ty":0,"nm":"Motion Blur Samples","mn":"CC Force Motion Blur-0001","ix":1,"v":{"a":0,"k":8,"ix":1}},{"ty":7,"nm":"Override Shutter Angle","mn":"CC Force Motion Blur-0002","ix":2,"v":{"a":0,"k":1,"ix":2}},{"ty":0,"nm":"Shutter Angle","mn":"CC Force Motion Blur-0003","ix":3,"v":{"a":0,"k":300,"ix":3}},{"ty":7,"nm":"Native Motion Blur","mn":"CC Force Motion Blur-0004","ix":4,"v":{"a":0,"k":1,"ix":4}}]}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-33.965],[33.966,0],[0,33.966],[-33.966,0]],"o":[[0,33.966],[-33.966,0],[0,-33.965],[33.966,0]],"v":[[61.5,0],[0,61.5],[-61.5,0],[0,-61.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.717999985639,0.885999971278,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":30,"s":[853,503],"e":[853,302.135],"to":[0,-33.4775085449219],"ti":[0,-25.2684993743896]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":50,"s":[853,302.135],"e":[853,654.611],"to":[0,25.2684993743896],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":70,"s":[853,654.611],"e":[853,395.112],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":90,"s":[853,395.112],"e":[853,546.066],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":110,"s":[853,546.066],"e":[853,466.393],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":130,"s":[853,466.393],"e":[853,498.693],"to":[0,0],"ti":[0,0]},{"t":150}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-33.965],[33.966,0],[0,33.966],[-33.966,0]],"o":[[0,33.966],[-33.966,0],[0,-33.965],[33.966,0]],"v":[[61.5,0],[0,61.5],[-61.5,0],[0,-61.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.859000052658,0.141000007181,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":20,"s":[620,503],"e":[620,302.135],"to":[0,-33.4775085449219],"ti":[0,-25.2684993743896]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":40,"s":[620,302.135],"e":[620,654.611],"to":[0,25.2684993743896],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":60,"s":[620,654.611],"e":[620,395.112],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":80,"s":[620,395.112],"e":[620,546.066],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":100,"s":[620,546.066],"e":[620,466.393],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":120,"s":[620,466.393],"e":[620,498.693],"to":[0,0],"ti":[0,0]},{"t":140}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-33.965],[33.965,0],[0,33.966],[-33.965,0]],"o":[[0,33.966],[-33.965,0],[0,-33.965],[33.965,0]],"v":[[61.5,0],[0,61.5],[-61.5,0],[0,-61.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.957000014361,0.773000021542,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":10,"s":[387,503],"e":[387,302.135],"to":[0,-33.4775085449219],"ti":[0,-25.2684993743896]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":30,"s":[387,302.135],"e":[387,654.611],"to":[0,25.2684993743896],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":50,"s":[387,654.611],"e":[387,395.112],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":70,"s":[387,395.112],"e":[387,546.066],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":90,"s":[387,546.066],"e":[387,466.393],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":110,"s":[387,466.393],"e":[387,498.693],"to":[0,0],"ti":[0,0]},{"t":130}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-33.965],[33.965,0],[0,33.966],[-33.965,0]],"o":[[0,33.966],[-33.965,0],[0,-33.965],[33.965,0]],"v":[[61.5,0],[0,61.5],[-61.5,0],[0,-61.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.224000010771,0.757000014361,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[154,503],"e":[158,302.135],"to":[0.66666668653488,-33.4775085449219],"ti":[0,-25.2684993743896]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":20,"s":[158,302.135],"e":[154,654.611],"to":[0,25.2684993743896],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":40,"s":[154,654.611],"e":[154,395.112],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":60,"s":[154,395.112],"e":[154,546.066],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":80,"s":[154,546.066],"e":[154,466.393],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":100,"s":[154,466.393],"e":[154,498.693],"to":[0,0],"ti":[0,0]},{"t":120}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/datas/json/4021-no-notification-state.json b/datas/json/4021-no-notification-state.json new file mode 100644 index 00000000..806de76e --- /dev/null +++ b/datas/json/4021-no-notification-state.json @@ -0,0 +1 @@ +{"v":"5.4.2","fr":25,"ip":0,"op":50,"w":216,"h":216,"nm":"No-Notification","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"star-2 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[0],"e":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":11,"s":[90],"e":[0]},{"t":24}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[111,161,0],"ix":2},"a":{"a":0,"k":[28.5,28.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.598,0],[0,11.598],[11.598,0],[0,-11.598]],"o":[[-11.598,0],[0,11.598],[11.598,0],[0,-11.598]],"v":[[21,0],[0,-21],[-21,0],[0,21]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28.5,28.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"star-1 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":14,"s":[0],"e":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":25,"s":[90],"e":[0]},{"t":38}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[408,305,0],"ix":2},"a":{"a":0,"k":[22.5,22.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-8.284,0],[0,8.284],[8.284,0],[0,-8.284]],"o":[[-8.284,0],[0,8.284],[8.284,0],[0,-8.284]],"v":[[15,0],[0,-15],[-15,0],[0,15]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[22.5,22.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"buble-2 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":19,"s":[0],"e":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":30,"s":[90],"e":[0]},{"t":43}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[151.5,151,0],"ix":2},"a":{"a":0,"k":[25.5,70,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.59],[3.59,0],[0,3.59],[-3.59,0]],"o":[[0,3.59],[-3.59,0],[0,-3.59],[3.59,0]],"v":[[6.5,0],[0,6.5],[-6.5,0],[0,-6.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[14,126],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.485],[2.485,0],[0,2.485],[-2.485,0]],"o":[[0,2.485],[-2.485,0],[0,-2.485],[2.485,0]],"v":[[4.5,0],[0,4.5],[-4.5,0],[0,-4.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[39,12],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"buble1 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":9,"s":[0],"e":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":20,"s":[90],"e":[0]},{"t":33}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":10,"s":[0],"e":[-10]},{"t":43}],"ix":10},"p":{"a":0,"k":[236.5,286.5,0],"ix":2},"a":{"a":0,"k":[172.5,78.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.59],[3.59,0],[0,3.59],[-3.59,0]],"o":[[0,3.59],[-3.59,0],[0,-3.59],[3.59,0]],"v":[[6.5,0],[0,6.5],[-6.5,0],[0,-6.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[331,14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.247],[5.247,0],[0,5.247],[-5.247,0]],"o":[[0,5.247],[-5.247,0],[0,-5.247],[5.247,0]],"v":[[9.5,0],[0,9.5],[-9.5,0],[0,-9.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[17,23],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.59],[3.59,0],[0,3.59],[-3.59,0]],"o":[[0,3.59],[-3.59,0],[0,-3.59],[3.59,0]],"v":[[6.5,0],[0,6.5],[-6.5,0],[0,-6.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[33,143],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"bell-sleep3 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":25,"s":[0],"e":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":36,"s":[90],"e":[0]},{"t":49}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[366.718,146.156,0],"ix":2},"a":{"a":0,"k":[7.796,9.499,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-7.268,5.147],[1.544,-5.042],[-6.01,-5.822],[-5.657,-9.249],[7.546,-7.887],[7.268,-5.19],[-1.509,4.97],[6.425,5.789],[6.069,9.249],[-7.546,7.844]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.902000038297,0.889999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[7.796,9.499],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"bell-sleep2 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":11,"s":[0],"e":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":22,"s":[90],"e":[0]},{"t":35}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[350.624,155.339,0],"ix":2},"a":{"a":0,"k":[6.382,7.665,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-4.988,5.257],[0.205,-4.187],[-5.836,-3.535],[-6.132,-6.277],[4.427,-7.415],[4.66,-5.259],[-0.512,4.158],[5.832,3.473],[6.132,6.24],[-4.757,7.415]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.902000038297,0.889999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.382,7.666],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"bell-sleep Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":1,"s":[0],"e":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":12,"s":[90],"e":[0]},{"t":25}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[337.52,164.172,0],"ix":2},"a":{"a":0,"k":[4.079,5.062,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-3.829,3.293],[0.49,-2.883],[-3.759,-2.883],[-3.759,-4.811],[3.668,-4.811],[3.668,-3.293],[-0.635,2.866],[3.829,2.866],[3.829,4.811],[-3.829,4.811]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.902000038297,0.889999988032,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[4.079,5.062],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"bell-dialog Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[349.434,160.643,0],"e":[349.434,150.643,0],"to":[0,-1.66666662693024,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[349.434,150.643,0],"e":[349.434,160.643,0],"to":[0,0,0],"ti":[0,-1.66666662693024,0]},{"t":49}],"ix":2},"a":{"a":0,"k":[63.387,66.228,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[26.723,0],[0,-26.723],[-11.796,-8.824],[0,0],[-5.529,-2.765],[-7.054,3.867],[-5.03,0],[0,26.723]],"o":[[-26.724,0],[0,15.864],[0,0],[0,0],[3.072,1.536],[4.56,1.424],[26.723,0],[0,-26.723]],"v":[[0.001,-51.228],[-48.387,-2.842],[-28.956,35.928],[-34.562,42.78],[-33.18,49.692],[-14.44,43.352],[0.001,45.544],[48.387,-2.842]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[63.386,66.228],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"bell-eyes Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[251.972,224.539,0],"e":[251.972,234.539,0],"to":[0,1.66666662693024,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[251.972,234.539,0],"e":[251.972,224.539,0],"to":[0,0,0],"ti":[0,1.66666662693024,0]},{"t":49}],"ix":2},"a":{"a":0,"k":[64.047,16.461,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-6.435,0],[0,0]],"o":[[0,0],[6.434,0],[0,0]],"v":[[-12.547,-1.461],[-0.322,1.461],[12.547,-1.461]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.847000002394,0.902000038297,0.889999988032,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[100.547,16.461],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-6.434,0],[0,0]],"o":[[0,0],[6.435,0],[0,0]],"v":[[-12.547,-1.461],[-0.322,1.461],[12.547,-1.461]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.847000002394,0.902000038297,0.889999988032,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[27.547,16.461],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"bell-mouth Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[255.883,264.107,0],"e":[255.883,262.107,0],"to":[0,-0.33333334326744,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[255.883,262.107,0],"e":[255.883,264.107,0],"to":[0,0,0],"ti":[0,-0.33333334326744,0]},{"t":49}],"ix":2},"a":{"a":0,"k":[41.958,17.374,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-13.825,0],[0,0]],"o":[[0,0],[13.824,0],[0,0]],"v":[[-26.958,-2.374],[-0.691,2.374],[26.958,-2.374]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.847000002394,0.902000038297,0.889999988032,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[41.958,17.374],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"bell-home Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0_1_0p333_0"],"t":0,"s":[0],"e":[3]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":25,"s":[3],"e":[0]},{"t":49}],"ix":10},"p":{"a":0,"k":[255.135,135.059,0],"ix":2},"a":{"a":0,"k":[129.689,37.644,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.437,26.631],[0,0],[0,0],[0,0],[0,0],[0.435,0.342]],"o":[[0,0],[-10.099,41.78],[0,0],[0,0],[0,0],[-3.743,-2.944]],"v":[[86.96,-22.811],[-86.96,-22.811],[-116.128,22.811],[0,22.811],[116.127,22.811],[115.454,22.297]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[131.128,224.443],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.783,32.946],[0,2.475],[0,0],[40.768,0.39],[0,0.002],[0.023,0],[0.023,0],[0,-0.001],[3.897,-39.877],[0,-1.615],[5.84,-28.364],[0,0],[0,0],[0,0],[0.616,0.429]],"o":[[-5.84,-28.364],[0,-1.615],[-3.898,-39.877],[0,-0.001],[-0.023,0],[-0.024,0],[0,0.002],[-40.768,0.39],[0,0],[0,2.475],[-9.677,47.004],[0,0],[0,0],[0,0],[-4.393,-3.069]],"v":[[85.714,51.144],[78.8,-22.818],[78.416,-30.553],[0.07,-102.291],[0.07,-102.295],[0.001,-102.293],[-0.07,-102.295],[-0.07,-102.291],[-78.415,-30.553],[-78.8,-22.818],[-85.713,51.144],[-116.127,102.295],[0.001,102.295],[116.127,102.295],[115.169,101.661]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[131.128,144.959],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-15.652],[15.652,0],[0,15.652],[-15.652,0]],"o":[[0,15.652],[-15.652,0],[0,-15.652],[15.652,0]],"v":[[28.34,-0.001],[0,28.34],[-28.34,-0.001],[0,-28.34]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":1,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[130.436,43.341],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"bell Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"n":"0_1_0p333_0","t":0,"s":[257.265,343.978,0],"e":[221,343.978,0],"to":[-6.04419946670532,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[221,343.978,0],"e":[257.265,343.978,0],"to":[0,0,0],"ti":[-6.04419946670532,0,0]},{"t":49}],"ix":2},"a":{"a":0,"k":[48.87,48.87,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-18.707],[18.706,0],[0,18.706],[-18.706,0]],"o":[[0,18.706],[-18.706,0],[0,-18.707],[18.706,0]],"v":[[33.87,0],[-0.001,33.87],[-33.87,0],[-0.001,-33.87]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827000038297,0.866999966491,0.855000035903,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[48.871,48.871],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"bcg Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[254.5,255.5,0],"ix":2},"a":{"a":0,"k":[173.75,173.75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-95.821],[95.821,0],[0,95.821],[-95.821,0]],"o":[[0,95.821],[-95.821,0],[0,-95.821],[95.821,0]],"v":[[173.5,0],[0,173.5],[-173.5,0],[0,-173.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941000007181,0.976000019148,0.972999961703,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[173.75,173.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":52,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"No-Notification 2","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[108,108,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[44,44,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":50,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/datas/json/629-empty-box.json b/datas/json/629-empty-box.json new file mode 100644 index 00000000..f79bf38a --- /dev/null +++ b/datas/json/629-empty-box.json @@ -0,0 +1 @@ +{"v":"4.7.0","fr":25,"ip":0,"op":50,"w":120,"h":120,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"ruoi","ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.967]},"o":{"x":[0.167],"y":[0.033]},"n":["0p833_0p967_0p167_0p033"],"t":35,"s":[100],"e":[0]},{"t":49}]},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0,"y":0},"n":"0p833_0p833_0_0","t":0,"s":[57.361,61.016,0],"e":[57.699,41.796,0],"to":[-4.67500305175781,-4.12800598144531,0],"ti":[-13.9099960327148,5.27300262451172,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":10.219,"s":[57.699,41.796,0],"e":[79.084,33.982,0],"to":[12.8159942626953,-4.85800170898438,0],"ti":[-4.54498291015625,3.73400115966797,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":19.445,"s":[79.084,33.982,0],"e":[59.691,9.121,0],"to":[6.61601257324219,-5.43799591064453,0],"ti":[20.0290069580078,1.20700073242188,0]},{"t":35}]},"a":{"a":0,"k":[60.531,10.945,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.994,0],[0,-0.994],[0.995,0],[0,0.994]],"o":[[0.995,0],[0,0.994],[-0.994,0],[0,-0.994]],"v":[[-0.001,-1.801],[1.801,-0.001],[-0.001,1.801],[-1.801,-0.001]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.529,0.529,0.529,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[62.4,13.144],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.422,0],[0,-1.422],[1.421,0],[0,1.422]],"o":[[1.421,0],[0,1.422],[-1.422,0],[0,-1.422]],"v":[[0.001,-2.574],[2.574,0],[0.001,2.574],[-2.574,0]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"st","c":{"a":0,"k":[0.529,0.529,0.529,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0.7},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[64.145,9.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.996,0],[0,-1.996],[1.996,0],[0,1.996]],"o":[[1.996,0],[0,1.996],[-1.996,0],[0,-1.996]],"v":[[0,-3.614],[3.614,0],[0,3.614],[-3.614,0]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"st","c":{"a":0,"k":[0.529,0.529,0.529,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0.7},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[57.957,10.552],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"ix":3,"mn":"ADBE Vector Group"},{"ty":"tr","p":{"a":0,"k":[60.531,10.941],"ix":2},"a":{"a":0,"k":[60.531,10.941],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ruoi","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":50,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 2","ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.967]},"o":{"x":[0.167],"y":[0.033]},"n":["0p833_0p967_0p167_0p033"],"t":35,"s":[100],"e":[0]},{"t":49}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[-0.75,-0.75,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-13.91,5.273],[-4.545,3.734],[20.029,1.207]],"o":[[-4.675,-4.128],[12.816,-4.858],[6.616,-5.438],[0,0]],"v":[[-7.383,24.76],[-7.046,5.54],[14.34,-2.273],[-3.178,-24.76]],"c":false}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"st","c":{"a":0,"k":[0.627,0.627,0.627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":2.028}},{"n":"g","nm":"gap","v":{"a":0,"k":2.028}},{"n":"o","nm":"offset","v":{"a":0,"k":0}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[67.87,37.631],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.953]},"o":{"x":[0.167],"y":[0.033]},"n":["0p833_0p953_0p167_0p033"],"t":0,"s":[0],"e":[100]},{"t":35}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim"}],"ip":0,"op":50,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"im_emptyBox Outlines","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[60,60,0]},"a":{"a":0,"k":[60,60,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.001,-16.607],[-32.143,-0.002],[-0.001,16.607],[32.144,-0.002]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.8,0.82,0.851,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[60,55.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.856,-23.249],[0,-16.605],[-12.857,-23.249],[-45,-6.641],[-32.144,0.001],[-45,6.645],[-12.857,23.249],[0,16.609],[12.856,23.249],[45,6.645],[32.143,0.001],[45,-6.641]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.957,0.957,0.957,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[60,55.748],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-16.072,24.171],[16.072,11.312],[16.072,-24.171],[-16.072,-24.171]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.902,0.914,0.929,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[76.072,83.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-32.143,-24.171],[-32.143,11.311],[-0.001,24.171],[32.144,11.311],[32.144,-24.171]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.8,0.82,0.851,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[60,83.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group"},{"ty":"tr","p":{"a":0,"k":[60,60.186],"ix":2},"a":{"a":0,"k":[60,60.186],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"box","np":4,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":50,"st":0,"bm":0,"sr":1}]} \ No newline at end of file diff --git a/datas/json/781-no-notifications.json b/datas/json/781-no-notifications.json new file mode 100644 index 00000000..f83228a1 --- /dev/null +++ b/datas/json/781-no-notifications.json @@ -0,0 +1 @@ +{"v":"4.10.0","fr":30,"ip":0,"op":454,"w":500,"h":296,"nm":"9-notification","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"bell-outline Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[250.777,147.796,0],"e":[250.777,133,0],"to":[-0.00000775921853,-2.46598386764526,0],"ti":[0.00000775921853,-2.53401613235474,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":120,"s":[250.777,133,0],"e":[250.777,163,0],"to":[-0.00000775921853,2.53401613235474,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":300,"s":[250.777,163,0],"e":[250.777,133,0],"to":[0,0,0],"ti":[0,2.53401660919189,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":390,"s":[250.777,133,0],"e":[250.777,147.796,0],"to":[0,-2.53401660919189,0],"ti":[0,-2.46598339080811,0]},{"t":450}],"ix":2},"a":{"a":0,"k":[30.5,32.5,0],"ix":1},"s":{"a":0,"k":[172.566,172.566,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.498],[0.497,0],[0,0],[0,0.497],[-0.497,0]],"o":[[0.497,0],[0,0.497],[0,0],[-0.498,0],[0,-0.498],[0,0]],"v":[[10.788,0.9],[11.686,1.799],[10.788,2.699],[7.191,2.699],[6.292,1.799],[7.191,0.9]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.498],[0.496,0],[0,0],[0,0.497],[-0.497,0]],"o":[[0.496,0],[0,0.497],[0,0],[-0.498,0],[0,-0.498],[0,0]],"v":[[-7.191,0.9],[-6.292,1.799],[-7.191,2.699],[-10.788,2.699],[-11.688,1.799],[-10.788,0.9]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.497,0],[0.003,-0.497],[3.47,0],[0,3.469],[-0.497,0],[0,-0.497],[-2.48,0],[0,2.479]],"o":[[0.497,0],[0,3.469],[-3.469,0],[0,-0.498],[0.498,0],[0,2.479],[2.48,0],[0,-0.498]],"v":[[5.393,6.294],[6.29,7.192],[-0.003,13.484],[-6.296,7.192],[-5.396,6.294],[-4.497,7.192],[-0.001,11.688],[4.494,7.192]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0.496,0],[0,0],[0,0.495],[-0.495,0],[0,0],[0,-0.496]],"o":[[0,0],[-0.495,0],[0,-0.496],[0,0],[0.496,0],[0,0.495]],"v":[[26.969,22.475],[-26.969,22.475],[-27.868,21.576],[-26.969,20.676],[26.969,20.676],[27.868,21.576]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[3.163,0],[0.44,3.04],[0,0]],"o":[[-3.162,0],[0,0],[-0.44,3.04]],"v":[[-0.001,29.667],[-6.202,24.273],[6.201,24.273]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,2.613],[0,0],[-12.393,0],[0,-11.378],[0,0],[-1.004,-1.458],[0,0]],"o":[[0,0],[0,-11.377],[12.393,0],[0,0],[0,2.613],[0,0],[1.004,-1.458]],"v":[[-22.475,12.587],[-22.475,-5.394],[-0.001,-26.028],[22.475,-5.394],[22.475,12.587],[24.113,18.878],[-24.113,18.878]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-1.234,0],[-0.318,-1.134],[0.875,0],[0.85,-0.084]],"o":[[1.234,0],[-0.85,-0.084],[-0.874,0],[0.317,-1.134]],"v":[[-0.001,-29.666],[2.585,-27.695],[-0.001,-27.827],[-2.585,-27.695]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[1.487,0],[0,3.6],[0,0],[0,0],[11.183,1.922],[2.322,0],[0.233,-2.258],[0.125,-10.855],[0,0],[0,0],[1.273,0],[0,-1.487],[-1.486,0],[0,0],[-4.153,0],[-0.453,4.035],[0,0],[0,1.486]],"o":[[-1.274,0],[0,0],[0,0],[-0.125,-10.855],[-0.234,-2.258],[-2.321,0],[-11.183,1.923],[0,0],[0,0],[0,3.6],[-1.487,0],[0,1.486],[0,0],[0.453,4.035],[4.154,0],[0,0],[1.487,0],[0,-1.487]],"v":[[26.969,18.88],[24.272,12.587],[24.272,-5.635],[24.258,-5.635],[4.447,-27.431],[-0.001,-31.462],[-4.447,-27.431],[-24.258,-5.635],[-24.273,-5.635],[-24.273,12.587],[-26.969,18.878],[-29.665,21.576],[-26.969,24.271],[-7.999,24.271],[-0.001,31.462],[7.999,24.271],[26.969,24.271],[29.665,21.576]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0.455000005984,0.475,0.556999954523,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.455000005984,0.475,0.556999954523,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.726,32.232],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":11,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"bell-bg Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[243,157,0],"e":[243,126.5,0],"to":[0,-5.08333349227905,0],"ti":[0,-0.16666667163372,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":90,"s":[243,126.5,0],"e":[243,158,0],"to":[0,0.16666667163372,0],"ti":[-0.83333331346512,-1.91666662693024,0]},{"i":{"x":0.667,"y":0.977},"o":{"x":0.333,"y":0},"n":"0p667_0p977_0p333_0","t":270,"s":[243,158,0],"e":[243,138.002,0],"to":[0.83105611801147,1.91142904758453,0],"ti":[-0.84464484453201,0.28351178765297,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.024},"n":"0p667_1_0p333_0p024","t":360,"s":[243,138.002,0],"e":[243,157,0],"to":[0.00231445301324,-0.00077686458826,0],"ti":[0,-3.16635847091675,0]},{"t":450}],"ix":2},"a":{"a":0,"k":[30,32,0],"ix":1},"s":{"a":0,"k":[172.566,172.566,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.487,0],[0,3.601],[0,0],[0,0],[11.182,1.922],[2.322,0],[0.233,-2.259],[0.125,-10.856],[0,0],[0,0],[1.272,0],[0,-1.486],[-1.487,0],[0,0],[-4.154,0],[-0.453,4.035],[0,0],[0,1.487]],"o":[[-1.273,0],[0,0],[0,0],[-0.125,-10.856],[-0.235,-2.259],[-2.322,0],[-11.183,1.923],[0,0],[0,0],[0,3.601],[-1.488,0],[0,1.487],[0,0],[0.452,4.035],[4.154,0],[0,0],[1.487,0],[0,-1.486]],"v":[[26.969,18.879],[24.273,12.587],[24.273,-5.634],[24.258,-5.634],[4.449,-27.43],[0.001,-31.463],[-4.447,-27.43],[-24.258,-5.634],[-24.273,-5.634],[-24.273,12.586],[-26.969,18.878],[-29.665,21.575],[-26.969,24.272],[-7.999,24.272],[0.001,31.463],[7.999,24.272],[26.969,24.272],[29.665,21.575]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936999990426,0.944999964097,0.961000031116,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.726,32.232],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"z Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[323,109,0],"e":[323,81,0],"to":[0,-4.66666650772095,0],"ti":[0,-5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":120,"s":[323,81,0],"e":[323,139,0],"to":[0,5,0],"ti":[0,-1.83333337306976,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":300,"s":[323,139,0],"e":[323,92,0],"to":[0,1.83333337306976,0],"ti":[0,5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":390,"s":[323,92,0],"e":[323,109,0],"to":[0,-5,0],"ti":[0,-2.83333325386047,0]},{"t":450}],"ix":2},"a":{"a":0,"k":[13,7.5,0],"ix":1},"s":{"a":0,"k":[172.566,172.566,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.025,-5.572],[10.249,-5.564],[8.014,-3.663],[8.01,-2.316],[12.57,-2.299],[12.574,-3.602],[10.294,-3.611],[12.579,-5.557],[12.583,-6.855],[8.029,-6.874]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.122,-2.632],[2.217,-2.62],[-1.133,0.23],[-1.141,2.249],[5.697,2.277],[5.704,0.322],[2.286,0.309],[5.712,-2.607],[5.723,-4.559],[-1.118,-4.587]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-12.559,0.307],[-8.092,0.322],[-12.577,4.135],[-12.583,6.839],[-3.434,6.874],[-3.426,4.258],[-7.999,4.24],[-3.411,0.339],[-3.402,-2.275],[-12.553,-2.309]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.455000005984,0.475,0.556999954523,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.694,7.389],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"heart Outlines 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[30],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":90,"s":[100],"e":[30]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":240,"s":[30],"e":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":330,"s":[100],"e":[30]},{"t":450}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":256,"s":[0],"e":[45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p833_1_0p167_0"],"t":259,"s":[45],"e":[-45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p833_1_0p167_0"],"t":264,"s":[-45],"e":[0]},{"t":268}],"ix":10},"p":{"a":0,"k":[87.5,196,0],"ix":2},"a":{"a":0,"k":[5.5,4.5,0],"ix":1},"s":{"a":0,"k":[108.081,108.081,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.378,-0.061],[-0.339,0.237],[0,0],[0.876,1.25],[1.25,-0.875],[0,0],[0,0],[1.251,-0.875],[-0.877,-1.25]],"o":[[0.237,0.339],[0.377,0.072],[0,0],[1.251,-0.875],[-0.876,-1.25],[0,0],[0,0],[-0.877,-1.25],[-1.252,0.875],[0,0]],"v":[[-1.947,3.812],[-0.977,4.418],[0.142,4.18],[3.787,1.645],[4.466,-2.204],[0.615,-2.883],[0.29,-2.66],[0.066,-2.98],[-3.786,-3.659],[-4.465,0.189]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.451000019148,0.517999985639,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[5.635,4.49],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"heart Outlines 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[30],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":90,"s":[100],"e":[30]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":240,"s":[30],"e":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":330,"s":[100],"e":[30]},{"t":450}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":127,"s":[0],"e":[45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p833_1_0p167_0"],"t":130,"s":[45],"e":[-45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p833_1_0p167_0"],"t":135,"s":[-45],"e":[0]},{"t":139}],"ix":10},"p":{"a":0,"k":[259.5,257,0],"ix":2},"a":{"a":0,"k":[5.5,4.5,0],"ix":1},"s":{"a":0,"k":[141.414,141.414,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.378,-0.061],[-0.339,0.237],[0,0],[0.876,1.25],[1.25,-0.875],[0,0],[0,0],[1.251,-0.875],[-0.877,-1.25]],"o":[[0.237,0.339],[0.377,0.072],[0,0],[1.251,-0.875],[-0.876,-1.25],[0,0],[0,0],[-0.877,-1.25],[-1.252,0.875],[0,0]],"v":[[-1.947,3.812],[-0.977,4.418],[0.142,4.18],[3.787,1.645],[4.466,-2.204],[0.615,-2.883],[0.29,-2.66],[0.066,-2.98],[-3.786,-3.659],[-4.465,0.189]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.451000019148,0.517999985639,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[5.635,4.49],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"heart Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[30],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":90,"s":[100],"e":[30]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":240,"s":[30],"e":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":330,"s":[100],"e":[30]},{"t":450}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":386,"s":[0],"e":[45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p833_1_0p167_0"],"t":389,"s":[45],"e":[-45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p833_1_0p167_0"],"t":394,"s":[-45],"e":[0]},{"t":398}],"ix":10},"p":{"a":0,"k":[380.5,51.5,0],"ix":2},"a":{"a":0,"k":[5.5,4.5,0],"ix":1},"s":{"a":0,"k":[214.141,214.141,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.378,-0.061],[-0.339,0.237],[0,0],[0.876,1.25],[1.25,-0.875],[0,0],[0,0],[1.251,-0.875],[-0.877,-1.25]],"o":[[0.237,0.339],[0.377,0.072],[0,0],[1.251,-0.875],[-0.876,-1.25],[0,0],[0,0],[-0.877,-1.25],[-1.252,0.875],[0,0]],"v":[[-1.947,3.812],[-0.977,4.418],[0.142,4.18],[3.787,1.645],[4.466,-2.204],[0.615,-2.883],[0.29,-2.66],[0.066,-2.98],[-3.786,-3.659],[-4.465,0.189]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.451000019148,0.517999985639,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[5.635,4.49],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"plus Outlines 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[30],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":90,"s":[100],"e":[30]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":240,"s":[30],"e":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":330,"s":[100],"e":[30]},{"t":450}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":151,"s":[0],"e":[360]},{"t":165}],"ix":10},"p":{"a":0,"k":[170.5,59.25,0],"ix":2},"a":{"a":0,"k":[7.5,7.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[1.463,-0.608],[0,0],[0,0],[0,0],[-0.547,-1.374],[0,0],[0,0],[0,0],[-1.468,0.586],[0,0],[0,0],[0,0],[0.571,1.368]],"o":[[0,0],[0,0],[0,0],[-1.463,0.607],[0,0],[0,0],[0,0],[0.547,1.374],[0,0],[0,0],[0,0],[1.468,-0.585],[0,0],[0,0],[0,0],[-0.571,-1.368]],"v":[[4.735,-3.592],[0.746,-1.98],[-0.763,-5.713],[-2.751,-6.512],[-3.747,-4.507],[-2.24,-0.775],[-6.228,0.837],[-7.144,2.81],[-5.1,3.63],[-1.111,2.019],[0.397,5.752],[2.426,6.534],[3.382,4.546],[1.874,0.813],[5.863,-0.799],[6.794,-2.734]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984000052658,0.842999985639,0.616000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[7.365,7.493],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"plus Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[30],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":90,"s":[100],"e":[30]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":240,"s":[30],"e":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":330,"s":[100],"e":[30]},{"t":450}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":318,"s":[0],"e":[360]},{"t":334}],"ix":10},"p":{"a":0,"k":[409.5,173,0],"ix":2},"a":{"a":0,"k":[7.5,7.5,0],"ix":1},"s":{"a":0,"k":[173.333,173.333,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[1.463,-0.608],[0,0],[0,0],[0,0],[-0.547,-1.374],[0,0],[0,0],[0,0],[-1.468,0.586],[0,0],[0,0],[0,0],[0.571,1.368]],"o":[[0,0],[0,0],[0,0],[-1.463,0.607],[0,0],[0,0],[0,0],[0.547,1.374],[0,0],[0,0],[0,0],[1.468,-0.585],[0,0],[0,0],[0,0],[-0.571,-1.368]],"v":[[4.735,-3.592],[0.746,-1.98],[-0.763,-5.713],[-2.751,-6.512],[-3.747,-4.507],[-2.24,-0.775],[-6.228,0.837],[-7.144,2.81],[-5.1,3.63],[-1.111,2.019],[0.397,5.752],[2.426,6.534],[3.382,4.546],[1.874,0.813],[5.863,-0.799],[6.794,-2.734]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.984000052658,0.842999985639,0.616000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[7.365,7.493],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0}]} \ No newline at end of file diff --git a/datas/json/loader.json b/datas/json/loader.json new file mode 100644 index 00000000..752ebef4 --- /dev/null +++ b/datas/json/loader.json @@ -0,0 +1 @@ +{"v":"5.1.7","fr":30,"ip":0,"op":50,"w":80,"h":80,"nm":"loader","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"color01b","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[40,40,0],"ix":2},"a":{"a":0,"k":[-19,-8.286,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":30,"s":[0,0,100],"e":[100,100,100]},{"t":50}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[80,80],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666995778,0.266666995778,0.266666995778,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.294117647059,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-19,-8.286],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":30,"op":50,"st":30,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"color01a","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":25,"s":[100],"e":[0]},{"t":45}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[40,40,0],"ix":2},"a":{"a":0,"k":[-19,-8.286,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":25,"s":[0,0,100],"e":[100,100,100]},{"t":45}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[80,80],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666995778,0.266666995778,0.266666995778,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.294117647059,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-19,-8.286],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":25,"op":50,"st":25,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"color01","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[40,40,0],"ix":2},"a":{"a":0,"k":[-19,-8.286,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":0,"s":[100,100,100],"e":[0,0,100]},{"t":20}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[80,80],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666995778,0.266666995778,0.266666995778,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.294117647059,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-19,-8.286],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"color02","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[40,40,0],"ix":2},"a":{"a":0,"k":[-19,-8.286,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":5,"s":[100,100,100],"e":[0,0,100]},{"t":25}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[80,80],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666995778,0.266666995778,0.266666995778,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.380392156863,0.298039215686,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-19,-8.286],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"color03","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[40,40,0],"ix":2},"a":{"a":0,"k":[-19,-8.286,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":10,"s":[100,100,100],"e":[10,10,100]},{"t":30}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[80,80],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666995778,0.266666995778,0.266666995778,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.513725490196,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-19,-8.286],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 00000000..a850d031 --- /dev/null +++ b/index.js @@ -0,0 +1,9 @@ +/** + * @format + */ + +import {AppRegistry} from 'react-native'; +import App from './App'; +import {name as appName} from './app.json'; + +AppRegistry.registerComponent(appName, () => App); diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 00000000..295a1965 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,69 @@ +# Uncomment the next line to define a global platform for your project + platform :ios, '9.0' + +target 'iLinkWorld' do + # Uncomment the next line if you're using Swift or would like to use dynamic frameworks + use_frameworks! + + pod 'React', :path => '../node_modules/react-native', :subspecs => [ + 'Core', + 'CxxBridge', # Include this for RN >= 0.47 + 'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43 + 'RCTText', + 'RCTNetwork', + 'RCTImage', + 'RCTGeolocation', + 'RCTWebSocket', # needed for debugging + # Add any other subspecs you want to use in your project + ] + # Explicitly include Yoga if you are using RN >= 0.42.0 + pod "yoga", :path => "../node_modules/react-native/ReactCommon/yoga" + + # Third party deps podspec link + pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' + pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' + pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' + # pod 'react-native-fbsdk', :path => '../node_modules/react-native-fbsdk' + + pod 'lottie-react-native', :path => '../node_modules/lottie-react-native' + + + pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler' + + pod 'react-native-maps', :path => '../node_modules/react-native-maps' + pod 'RNReanimated', :path => '../node_modules/react-native-reanimated' + + pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + + + + + + pod 'RNReanimated', :path => '../node_modules/react-native-reanimated' + + pod 'RNSVG', :path => '../node_modules/react-native-svg' + + + # pod 'ReactNativeFabric', :path => '../node_modules/react-native-fabric' + + pod 'RNI18n', :path => '../node_modules/react-native-i18n' + + pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info' + target 'iLinkWorld-tvOSTests' do + inherit! :search_paths + # Pods for testing + pod 'react-native-geolocation', :path => '../node_modules/@react-native-community/geolocation' + + pod 'lottie-ios', :path => '../node_modules/lottie-ios' + + end + + target 'iLinkWorldTests' do + inherit! :search_paths + # Pods for testing + end + +end + + + diff --git a/ios/iLinkWorld-tvOS/Info.plist b/ios/iLinkWorld-tvOS/Info.plist new file mode 100644 index 00000000..2fb6a11c --- /dev/null +++ b/ios/iLinkWorld-tvOS/Info.plist @@ -0,0 +1,54 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSLocationWhenInUseUsageDescription + + NSAppTransportSecurity + + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + + diff --git a/ios/iLinkWorld-tvOSTests/Info.plist b/ios/iLinkWorld-tvOSTests/Info.plist new file mode 100644 index 00000000..886825cc --- /dev/null +++ b/ios/iLinkWorld-tvOSTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/ios/iLinkWorld.xcodeproj/project.pbxproj b/ios/iLinkWorld.xcodeproj/project.pbxproj new file mode 100644 index 00000000..a6da6d2c --- /dev/null +++ b/ios/iLinkWorld.xcodeproj/project.pbxproj @@ -0,0 +1,1964 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; + 00E356F31AD99517003FC87E /* iLinkWorldTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* iLinkWorldTests.m */; }; + 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 18BEAB40DEE047FBA3E46796 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0AB744C213E2441CA01E814D /* libz.tbd */; }; + 1E676819C88645F29A1E47CB /* libSajjadBlurOverlay.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B4F1D961EA18474E8A2A3951 /* libSajjadBlurOverlay.a */; }; + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; }; + 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; }; + 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; }; + 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; }; + 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; }; + 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; }; + 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; }; + 2DCD954D1E0B4F2C00145EB5 /* iLinkWorldTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* iLinkWorldTests.m */; }; + 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; }; + 3F74C0B917894CF5A730DB04 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8D0EA45871B447CE8066AE84 /* Octicons.ttf */; }; + 6759D348266144DE97A51445 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D29D9ECA3EDC41D8B741C6C3 /* Foundation.ttf */; }; + 6C8BBF5CA05A4C5D975EC3D4 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 68533BD6B3D644CA9C923B80 /* SimpleLineIcons.ttf */; }; + 75D76F19B9F54C64A68BD630 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3FABAA0A56C04F83A860CDEC /* MaterialCommunityIcons.ttf */; }; + 7D95C81FA04B449E9C6310A3 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A97B70A722FB425BB2C1C6A4 /* MaterialIcons.ttf */; }; + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; + 90265ACA8C9946648DAFCD1A /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9C61B5C1E3024A8193F22DF0 /* FontAwesome5_Brands.ttf */; }; + 9A1CCD2882D14E1D88172B23 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = C02AE738B577406FAFDA8AA2 /* libc++.tbd */; }; + A88E0095434A4F95A63D4ED0 /* libRealmReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CA935677099410987B687D8 /* libRealmReact.a */; }; + A8C34E4924294DB9AF5DB330 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 068D19FD29A24E1ABB4B0037 /* Ionicons.ttf */; }; + AA91149AD0224CA89243A5B2 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 58D52640D23F45AB9EE96405 /* FontAwesome5_Solid.ttf */; }; + ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; + AE742544681046EDB96772C3 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C08B547845274085A4ED3F69 /* FontAwesome5_Regular.ttf */; }; + B8800AC12D0E4A679B8DD09B /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D39EA0B65E594CF8B3ED4FA4 /* Zocial.ttf */; }; + E456AEDB1E4A486BA9DAA17D /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F6E68E506BB74F97A48B11D0 /* Entypo.ttf */; }; + EB64F5F1BC544131945AFC51 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0216BC1CD63948C491C4517B /* EvilIcons.ttf */; }; + EC42DB3222B10DD30004BAE0 /* libRNI18n.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42DB2F22B10DB50004BAE0 /* libRNI18n.a */; }; + EC42DB3C22B115670004BAE0 /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42DB3922B114E10004BAE0 /* libRNDeviceInfo.a */; }; + EC42DB3E22B116B30004BAE0 /* icons in Resources */ = {isa = PBXBuildFile; fileRef = EC42DB3D22B116B30004BAE0 /* icons */; }; + EC42DB9822B12F750004BAE0 /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42DB9522B12F670004BAE0 /* libRNGestureHandler.a */; }; + EC42DB9F22B1381B0004BAE0 /* libRNReanimated.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42DB9E22B138020004BAE0 /* libRNReanimated.a */; }; + EC42DBA922B13AD50004BAE0 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42DBA622B13ACB0004BAE0 /* libRNVectorIcons.a */; }; + EC42DBB022B13CA70004BAE0 /* libAirMaps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC42DBAF22B13CA20004BAE0 /* libAirMaps.a */; }; + ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; }; + ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED2971642150620600B7C4FE /* JavaScriptCore.framework */; }; + EEA1E37BBAB74381BFDC923C /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BF4F8329F9C2476D9F91682E /* AntDesign.ttf */; }; + FC994D903E034FA2B1ABF136 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CE5530DDA2284C6E805A3899 /* FontAwesome.ttf */; }; + FF9294B5CF0B4267886C0D22 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CDCBA1025DD64F9FB1556C60 /* Feather.ttf */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTActionSheet; + }; + 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTGeolocation; + }; + 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5115D1A9E6B3D00147676; + remoteInfo = RCTImage; + }; + 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B511DB1A9E6C8500147676; + remoteInfo = RCTNetwork; + }; + 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; + remoteInfo = RCTVibration; + }; + 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; + remoteInfo = iLinkWorld; + }; + 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTSettings; + }; + 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3C86DF461ADF2C930047B81A; + remoteInfo = RCTWebSocket; + }; + 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; + remoteInfo = React; + }; + 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; + remoteInfo = "iLinkWorld-tvOS"; + }; + 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ADD01A681E09402E00F6D226; + remoteInfo = "RCTBlob-tvOS"; + }; + 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3DBE0D001F3B181A0099AA32; + remoteInfo = fishhook; + }; + 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32; + remoteInfo = "fishhook-tvOS"; + }; + 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BDC1FC498900052F4D5; + remoteInfo = jsinspector; + }; + 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5; + remoteInfo = "jsinspector-tvOS"; + }; + 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7; + remoteInfo = "third-party"; + }; + 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D383D3C1EBD27B6005632C8; + remoteInfo = "third-party-tvOS"; + }; + 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 139D7E881E25C6D100323FB7; + remoteInfo = "double-conversion"; + }; + 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D383D621EBD27B9005632C8; + remoteInfo = "double-conversion-tvOS"; + }; + 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; + remoteInfo = "RCTImage-tvOS"; + }; + 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28471D9B043800D4039D; + remoteInfo = "RCTLinking-tvOS"; + }; + 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28541D9B044C00D4039D; + remoteInfo = "RCTNetwork-tvOS"; + }; + 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28611D9B046600D4039D; + remoteInfo = "RCTSettings-tvOS"; + }; + 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A287B1D9B048500D4039D; + remoteInfo = "RCTText-tvOS"; + }; + 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28881D9B049200D4039D; + remoteInfo = "RCTWebSocket-tvOS"; + }; + 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28131D9B038B00D4039D; + remoteInfo = "React-tvOS"; + }; + 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C059A1DE3340900C268FA; + remoteInfo = yoga; + }; + 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C06751DE3340C00C268FA; + remoteInfo = "yoga-tvOS"; + }; + 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTAnimation; + }; + 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28201D9B03D100D4039D; + remoteInfo = "RCTAnimation-tvOS"; + }; + 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTLinking; + }; + 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5119B1A9E6C1200147676; + remoteInfo = RCTText; + }; + ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 358F4ED71D1E81A9004DF814; + remoteInfo = RCTBlob; + }; + EC42DB1C22B00B540004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EDEBC6D6214B3E7000DD5AC8; + remoteInfo = jsi; + }; + EC42DB1E22B00B540004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EDEBC73B214B45A300DD5AC8; + remoteInfo = jsiexecutor; + }; + EC42DB2022B00B540004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ED296FB6214C9A0900B7C4FE; + remoteInfo = "jsi-tvOS"; + }; + EC42DB2222B00B540004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ED296FEE214C9CF800B7C4FE; + remoteInfo = "jsiexecutor-tvOS"; + }; + EC42DB2722B00B550004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5F8E00B3EF074FA9988A5F5D /* SajjadBlurOverlay.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = SajjadBlurOverlay; + }; + EC42DB2E22B10DB50004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DB2922B10DB40004BAE0 /* RNI18n.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNI18n; + }; + EC42DB3022B10DB50004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DB2922B10DB40004BAE0 /* RNI18n.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 6476C4051EEAA69700B10F51; + remoteInfo = "RNI18n-tvOS"; + }; + EC42DB3822B114E10004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DB3322B114DF0004BAE0 /* RNDeviceInfo.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = DA5891D81BA9A9FC002B4DB2; + remoteInfo = RNDeviceInfo; + }; + EC42DB3A22B114E10004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DB3322B114DF0004BAE0 /* RNDeviceInfo.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E72EC1401F7ABB5A0001BC90; + remoteInfo = "RNDeviceInfo-tvOS"; + }; + EC42DB9422B12F670004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DB8F22B12F660004BAE0 /* RNGestureHandler.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNGestureHandler; + }; + EC42DB9622B12F670004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DB8F22B12F660004BAE0 /* RNGestureHandler.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B5C32A36220C603B000FFB8D; + remoteInfo = "RNGestureHandler-tvOS"; + }; + EC42DB9D22B138020004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DB9922B138010004BAE0 /* RNReanimated.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNReanimated; + }; + EC42DBA522B13ACB0004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DBA022B13ACA0004BAE0 /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5DBEB1501B18CEA900B34395; + remoteInfo = RNVectorIcons; + }; + EC42DBA722B13ACB0004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DBA022B13ACA0004BAE0 /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A39873CE1EA65EE60051E01A; + remoteInfo = "RNVectorIcons-tvOS"; + }; + EC42DBAE22B13CA20004BAE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC42DBAA22B13CA00004BAE0 /* AirMaps.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 11FA5C511C4A1296003AC2EE; + remoteInfo = AirMaps; + }; + ECE4CFD822B1A7BF0012A031 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = DECA06EFFA75482B89665867 /* RealmReact.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F60690131CA2766F0003FB26; + remoteInfo = RealmReact; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; + 00E356EE1AD99517003FC87E /* iLinkWorldTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iLinkWorldTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 00E356F21AD99517003FC87E /* iLinkWorldTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iLinkWorldTests.m; sourceTree = ""; }; + 0216BC1CD63948C491C4517B /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; + 068D19FD29A24E1ABB4B0037 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; + 0AB744C213E2441CA01E814D /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* iLinkWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iLinkWorld.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = iLinkWorld/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = iLinkWorld/AppDelegate.m; sourceTree = ""; }; + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iLinkWorld/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = iLinkWorld/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iLinkWorld/main.m; sourceTree = ""; }; + 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; + 2D02E47B1E0B4A5D006451C7 /* iLinkWorld-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iLinkWorld-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D02E4901E0B4A5D006451C7 /* iLinkWorld-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "iLinkWorld-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 3FABAA0A56C04F83A860CDEC /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; + 58D52640D23F45AB9EE96405 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 5F8E00B3EF074FA9988A5F5D /* SajjadBlurOverlay.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = SajjadBlurOverlay.xcodeproj; path = "../node_modules/react-native-blur-overlay/ios/SajjadBlurOverlay.xcodeproj"; sourceTree = ""; }; + 68533BD6B3D644CA9C923B80 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; + 6CA935677099410987B687D8 /* libRealmReact.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRealmReact.a; sourceTree = ""; }; + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; + 8D0EA45871B447CE8066AE84 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; + 9C61B5C1E3024A8193F22DF0 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; + A97B70A722FB425BB2C1C6A4 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; + ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; + B4F1D961EA18474E8A2A3951 /* libSajjadBlurOverlay.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libSajjadBlurOverlay.a; sourceTree = ""; }; + BF4F8329F9C2476D9F91682E /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; }; + C02AE738B577406FAFDA8AA2 /* libc++.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + C08B547845274085A4ED3F69 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; + CDCBA1025DD64F9FB1556C60 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; + CE5530DDA2284C6E805A3899 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; + D29D9ECA3EDC41D8B741C6C3 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; + D39EA0B65E594CF8B3ED4FA4 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; + DECA06EFFA75482B89665867 /* RealmReact.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RealmReact.xcodeproj; path = "../node_modules/realm/react-native/ios/RealmReact.xcodeproj"; sourceTree = ""; }; + EC42DB2922B10DB40004BAE0 /* RNI18n.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNI18n.xcodeproj; path = "../node_modules/react-native-i18n/ios/RNI18n.xcodeproj"; sourceTree = ""; }; + EC42DB3322B114DF0004BAE0 /* RNDeviceInfo.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNDeviceInfo.xcodeproj; path = "../node_modules/react-native-device-info/ios/RNDeviceInfo.xcodeproj"; sourceTree = ""; }; + EC42DB3D22B116B30004BAE0 /* icons */ = {isa = PBXFileReference; lastKnownFileType = folder; path = icons; sourceTree = ""; }; + EC42DB8F22B12F660004BAE0 /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = ""; }; + EC42DB9922B138010004BAE0 /* RNReanimated.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNReanimated.xcodeproj; path = "../node_modules/react-native-reanimated/ios/RNReanimated.xcodeproj"; sourceTree = ""; }; + EC42DBA022B13ACA0004BAE0 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; + EC42DBAA22B13CA00004BAE0 /* AirMaps.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = AirMaps.xcodeproj; path = "../node_modules/react-native-maps/lib/ios/AirMaps.xcodeproj"; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; + F6E68E506BB74F97A48B11D0 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 00E356EB1AD99517003FC87E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EC42DBB022B13CA70004BAE0 /* libAirMaps.a in Frameworks */, + EC42DBA922B13AD50004BAE0 /* libRNVectorIcons.a in Frameworks */, + EC42DB9F22B1381B0004BAE0 /* libRNReanimated.a in Frameworks */, + EC42DB9822B12F750004BAE0 /* libRNGestureHandler.a in Frameworks */, + EC42DB3C22B115670004BAE0 /* libRNDeviceInfo.a in Frameworks */, + EC42DB3222B10DD30004BAE0 /* libRNI18n.a in Frameworks */, + ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */, + ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, + 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */, + 146834051AC3E58100842450 /* libReact.a in Frameworks */, + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, + 1E676819C88645F29A1E47CB /* libSajjadBlurOverlay.a in Frameworks */, + A88E0095434A4F95A63D4ED0 /* libRealmReact.a in Frameworks */, + 9A1CCD2882D14E1D88172B23 /* libc++.tbd in Frameworks */, + 18BEAB40DEE047FBA3E46796 /* libz.tbd in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */, + 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */, + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */, + 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, + 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, + 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, + 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, + 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, + 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 00C302A81ABCB8CE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302B61ABCB90400DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302BC1ABCB91800DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302D41ABCB9D200DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302E01ABCB9EE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, + ); + name = Products; + sourceTree = ""; + }; + 00E356EF1AD99517003FC87E /* iLinkWorldTests */ = { + isa = PBXGroup; + children = ( + 00E356F21AD99517003FC87E /* iLinkWorldTests.m */, + 00E356F01AD99517003FC87E /* Supporting Files */, + ); + path = iLinkWorldTests; + sourceTree = ""; + }; + 00E356F01AD99517003FC87E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 00E356F11AD99517003FC87E /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 139105B71AF99BAD00B5F7CC /* Products */ = { + isa = PBXGroup; + children = ( + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 139FDEE71B06529A00C62182 /* Products */ = { + isa = PBXGroup; + children = ( + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, + 2D16E6841FA4F8DC00B85C8A /* libfishhook.a */, + 2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* iLinkWorld */ = { + isa = PBXGroup; + children = ( + EC42DB3D22B116B30004BAE0 /* icons */, + 008F07F21AC5B25A0029DE68 /* main.jsbundle */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, + 13B07FB71A68108700A75B9A /* main.m */, + ); + name = iLinkWorld; + sourceTree = ""; + }; + 146834001AC3E56700842450 /* Products */ = { + isa = PBXGroup; + children = ( + 146834041AC3E56700842450 /* libReact.a */, + 3DAD3EA31DF850E9000B6D8A /* libReact.a */, + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, + 2DF0FFDF2056DD460020B375 /* libjsinspector.a */, + 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */, + 2DF0FFE32056DD460020B375 /* libthird-party.a */, + 2DF0FFE52056DD460020B375 /* libthird-party.a */, + 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */, + 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */, + EC42DB1D22B00B540004BAE0 /* libjsi.a */, + EC42DB1F22B00B540004BAE0 /* libjsiexecutor.a */, + EC42DB2122B00B540004BAE0 /* libjsi-tvOS.a */, + EC42DB2322B00B540004BAE0 /* libjsiexecutor-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + ED2971642150620600B7C4FE /* JavaScriptCore.framework */, + 2D16E6891FA4F8E400B85C8A /* libReact.a */, + C02AE738B577406FAFDA8AA2 /* libc++.tbd */, + 0AB744C213E2441CA01E814D /* libz.tbd */, + ); + name = Frameworks; + sourceTree = ""; + }; + 37CB54B0E20E4D2C9016EA78 /* Resources */ = { + isa = PBXGroup; + children = ( + BF4F8329F9C2476D9F91682E /* AntDesign.ttf */, + F6E68E506BB74F97A48B11D0 /* Entypo.ttf */, + 0216BC1CD63948C491C4517B /* EvilIcons.ttf */, + CDCBA1025DD64F9FB1556C60 /* Feather.ttf */, + CE5530DDA2284C6E805A3899 /* FontAwesome.ttf */, + 9C61B5C1E3024A8193F22DF0 /* FontAwesome5_Brands.ttf */, + C08B547845274085A4ED3F69 /* FontAwesome5_Regular.ttf */, + 58D52640D23F45AB9EE96405 /* FontAwesome5_Solid.ttf */, + D29D9ECA3EDC41D8B741C6C3 /* Foundation.ttf */, + 068D19FD29A24E1ABB4B0037 /* Ionicons.ttf */, + 3FABAA0A56C04F83A860CDEC /* MaterialCommunityIcons.ttf */, + A97B70A722FB425BB2C1C6A4 /* MaterialIcons.ttf */, + 8D0EA45871B447CE8066AE84 /* Octicons.ttf */, + 68533BD6B3D644CA9C923B80 /* SimpleLineIcons.ttf */, + D39EA0B65E594CF8B3ED4FA4 /* Zocial.ttf */, + ); + name = Resources; + sourceTree = ""; + }; + 5E91572E1DD0AC6500FF2AA8 /* Products */ = { + isa = PBXGroup; + children = ( + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */, + ); + name = Products; + sourceTree = ""; + }; + 78C398B11ACF4ADC00677621 /* Products */ = { + isa = PBXGroup; + children = ( + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + EC42DBAA22B13CA00004BAE0 /* AirMaps.xcodeproj */, + EC42DBA022B13ACA0004BAE0 /* RNVectorIcons.xcodeproj */, + EC42DB9922B138010004BAE0 /* RNReanimated.xcodeproj */, + EC42DB8F22B12F660004BAE0 /* RNGestureHandler.xcodeproj */, + EC42DB3322B114DF0004BAE0 /* RNDeviceInfo.xcodeproj */, + EC42DB2922B10DB40004BAE0 /* RNI18n.xcodeproj */, + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, + 146833FF1AC3E56700842450 /* React.xcodeproj */, + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, + ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */, + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, + 5F8E00B3EF074FA9988A5F5D /* SajjadBlurOverlay.xcodeproj */, + DECA06EFFA75482B89665867 /* RealmReact.xcodeproj */, + ); + name = Libraries; + sourceTree = ""; + }; + 832341B11AAA6A8300B99B32 /* Products */ = { + isa = PBXGroup; + children = ( + 832341B51AAA6A8300B99B32 /* libRCTText.a */, + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* iLinkWorld */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 00E356EF1AD99517003FC87E /* iLinkWorldTests */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + 37CB54B0E20E4D2C9016EA78 /* Resources */, + EC42DAF622B00B3A0004BAE0 /* Recovered References */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* iLinkWorld.app */, + 00E356EE1AD99517003FC87E /* iLinkWorldTests.xctest */, + 2D02E47B1E0B4A5D006451C7 /* iLinkWorld-tvOS.app */, + 2D02E4901E0B4A5D006451C7 /* iLinkWorld-tvOSTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + ADBDB9201DFEBF0600ED6528 /* Products */ = { + isa = PBXGroup; + children = ( + ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */, + 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + EC42DAF622B00B3A0004BAE0 /* Recovered References */ = { + isa = PBXGroup; + children = ( + B4F1D961EA18474E8A2A3951 /* libSajjadBlurOverlay.a */, + 6CA935677099410987B687D8 /* libRealmReact.a */, + ); + name = "Recovered References"; + sourceTree = ""; + }; + EC42DB2422B00B550004BAE0 /* Products */ = { + isa = PBXGroup; + children = ( + EC42DB2822B00B550004BAE0 /* libSajjadBlurOverlay.a */, + ); + name = Products; + sourceTree = ""; + }; + EC42DB2A22B10DB40004BAE0 /* Products */ = { + isa = PBXGroup; + children = ( + EC42DB2F22B10DB50004BAE0 /* libRNI18n.a */, + EC42DB3122B10DB50004BAE0 /* libRNI18n-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + EC42DB3422B114DF0004BAE0 /* Products */ = { + isa = PBXGroup; + children = ( + EC42DB3922B114E10004BAE0 /* libRNDeviceInfo.a */, + EC42DB3B22B114E10004BAE0 /* libRNDeviceInfo-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + EC42DB9022B12F660004BAE0 /* Products */ = { + isa = PBXGroup; + children = ( + EC42DB9522B12F670004BAE0 /* libRNGestureHandler.a */, + EC42DB9722B12F670004BAE0 /* libRNGestureHandler-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + EC42DB9A22B138010004BAE0 /* Products */ = { + isa = PBXGroup; + children = ( + EC42DB9E22B138020004BAE0 /* libRNReanimated.a */, + ); + name = Products; + sourceTree = ""; + }; + EC42DBA122B13ACA0004BAE0 /* Products */ = { + isa = PBXGroup; + children = ( + EC42DBA622B13ACB0004BAE0 /* libRNVectorIcons.a */, + EC42DBA822B13ACB0004BAE0 /* libRNVectorIcons-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + EC42DBAB22B13CA00004BAE0 /* Products */ = { + isa = PBXGroup; + children = ( + EC42DBAF22B13CA20004BAE0 /* libAirMaps.a */, + ); + name = Products; + sourceTree = ""; + }; + ECE4CFAF22B1A7BE0012A031 /* Products */ = { + isa = PBXGroup; + children = ( + ECE4CFD922B1A7BF0012A031 /* libRealmReact.a */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 00E356ED1AD99517003FC87E /* iLinkWorldTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "iLinkWorldTests" */; + buildPhases = ( + 00E356EA1AD99517003FC87E /* Sources */, + 00E356EB1AD99517003FC87E /* Frameworks */, + 00E356EC1AD99517003FC87E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 00E356F51AD99517003FC87E /* PBXTargetDependency */, + ); + name = iLinkWorldTests; + productName = iLinkWorldTests; + productReference = 00E356EE1AD99517003FC87E /* iLinkWorldTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 13B07F861A680F5B00A75B9A /* iLinkWorld */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "iLinkWorld" */; + buildPhases = ( + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iLinkWorld; + productName = "Hello World"; + productReference = 13B07F961A680F5B00A75B9A /* iLinkWorld.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E47A1E0B4A5D006451C7 /* iLinkWorld-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "iLinkWorld-tvOS" */; + buildPhases = ( + 2D02E4771E0B4A5D006451C7 /* Sources */, + 2D02E4781E0B4A5D006451C7 /* Frameworks */, + 2D02E4791E0B4A5D006451C7 /* Resources */, + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "iLinkWorld-tvOS"; + productName = "iLinkWorld-tvOS"; + productReference = 2D02E47B1E0B4A5D006451C7 /* iLinkWorld-tvOS.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E48F1E0B4A5D006451C7 /* iLinkWorld-tvOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "iLinkWorld-tvOSTests" */; + buildPhases = ( + 2D02E48C1E0B4A5D006451C7 /* Sources */, + 2D02E48D1E0B4A5D006451C7 /* Frameworks */, + 2D02E48E1E0B4A5D006451C7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, + ); + name = "iLinkWorld-tvOSTests"; + productName = "iLinkWorld-tvOSTests"; + productReference = 2D02E4901E0B4A5D006451C7 /* iLinkWorld-tvOSTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 940; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 00E356ED1AD99517003FC87E = { + CreatedOnToolsVersion = 6.2; + TestTargetID = 13B07F861A680F5B00A75B9A; + }; + 13B07F861A680F5B00A75B9A = { + DevelopmentTeam = 59P2CR52KS; + }; + 2D02E47A1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Automatic; + }; + 2D02E48F1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Automatic; + TestTargetID = 2D02E47A1E0B4A5D006451C7; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "iLinkWorld" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = EC42DBAB22B13CA00004BAE0 /* Products */; + ProjectRef = EC42DBAA22B13CA00004BAE0 /* AirMaps.xcodeproj */; + }, + { + ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; + ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + }, + { + ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; + ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + }, + { + ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */; + ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + }, + { + ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; + ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + }, + { + ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; + ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + }, + { + ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; + ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + }, + { + ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; + ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + }, + { + ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; + ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + }, + { + ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; + ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + }, + { + ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; + ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + }, + { + ProductGroup = 139FDEE71B06529A00C62182 /* Products */; + ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + }, + { + ProductGroup = 146834001AC3E56700842450 /* Products */; + ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; + }, + { + ProductGroup = ECE4CFAF22B1A7BE0012A031 /* Products */; + ProjectRef = DECA06EFFA75482B89665867 /* RealmReact.xcodeproj */; + }, + { + ProductGroup = EC42DB3422B114DF0004BAE0 /* Products */; + ProjectRef = EC42DB3322B114DF0004BAE0 /* RNDeviceInfo.xcodeproj */; + }, + { + ProductGroup = EC42DB9022B12F660004BAE0 /* Products */; + ProjectRef = EC42DB8F22B12F660004BAE0 /* RNGestureHandler.xcodeproj */; + }, + { + ProductGroup = EC42DB2A22B10DB40004BAE0 /* Products */; + ProjectRef = EC42DB2922B10DB40004BAE0 /* RNI18n.xcodeproj */; + }, + { + ProductGroup = EC42DB9A22B138010004BAE0 /* Products */; + ProjectRef = EC42DB9922B138010004BAE0 /* RNReanimated.xcodeproj */; + }, + { + ProductGroup = EC42DBA122B13ACA0004BAE0 /* Products */; + ProjectRef = EC42DBA022B13ACA0004BAE0 /* RNVectorIcons.xcodeproj */; + }, + { + ProductGroup = EC42DB2422B00B550004BAE0 /* Products */; + ProjectRef = 5F8E00B3EF074FA9988A5F5D /* SajjadBlurOverlay.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* iLinkWorld */, + 00E356ED1AD99517003FC87E /* iLinkWorldTests */, + 2D02E47A1E0B4A5D006451C7 /* iLinkWorld-tvOS */, + 2D02E48F1E0B4A5D006451C7 /* iLinkWorld-tvOSTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTActionSheet.a; + remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTGeolocation.a; + remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTImage.a; + remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTNetwork.a; + remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTVibration.a; + remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTSettings.a; + remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTWebSocket.a; + remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 146834041AC3E56700842450 /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTBlob-tvOS.a"; + remoteRef = 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2D16E6841FA4F8DC00B85C8A /* libfishhook.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libfishhook.a; + remoteRef = 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libfishhook-tvOS.a"; + remoteRef = 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFDF2056DD460020B375 /* libjsinspector.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsinspector.a; + remoteRef = 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsinspector-tvOS.a"; + remoteRef = 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE32056DD460020B375 /* libthird-party.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libthird-party.a"; + remoteRef = 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE52056DD460020B375 /* libthird-party.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libthird-party.a"; + remoteRef = 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libdouble-conversion.a"; + remoteRef = 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libdouble-conversion.a"; + remoteRef = 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTImage-tvOS.a"; + remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTLinking-tvOS.a"; + remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTNetwork-tvOS.a"; + remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTSettings-tvOS.a"; + remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTText-tvOS.a"; + remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTWebSocket-tvOS.a"; + remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTLinking.a; + remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTText.a; + remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTBlob.a; + remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB1D22B00B540004BAE0 /* libjsi.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsi.a; + remoteRef = EC42DB1C22B00B540004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB1F22B00B540004BAE0 /* libjsiexecutor.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsiexecutor.a; + remoteRef = EC42DB1E22B00B540004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB2122B00B540004BAE0 /* libjsi-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsi-tvOS.a"; + remoteRef = EC42DB2022B00B540004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB2322B00B540004BAE0 /* libjsiexecutor-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsiexecutor-tvOS.a"; + remoteRef = EC42DB2222B00B540004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB2822B00B550004BAE0 /* libSajjadBlurOverlay.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libSajjadBlurOverlay.a; + remoteRef = EC42DB2722B00B550004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB2F22B10DB50004BAE0 /* libRNI18n.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNI18n.a; + remoteRef = EC42DB2E22B10DB50004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB3122B10DB50004BAE0 /* libRNI18n-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNI18n-tvOS.a"; + remoteRef = EC42DB3022B10DB50004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB3922B114E10004BAE0 /* libRNDeviceInfo.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNDeviceInfo.a; + remoteRef = EC42DB3822B114E10004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB3B22B114E10004BAE0 /* libRNDeviceInfo-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNDeviceInfo-tvOS.a"; + remoteRef = EC42DB3A22B114E10004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB9522B12F670004BAE0 /* libRNGestureHandler.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNGestureHandler.a; + remoteRef = EC42DB9422B12F670004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB9722B12F670004BAE0 /* libRNGestureHandler-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNGestureHandler-tvOS.a"; + remoteRef = EC42DB9622B12F670004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DB9E22B138020004BAE0 /* libRNReanimated.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNReanimated.a; + remoteRef = EC42DB9D22B138020004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DBA622B13ACB0004BAE0 /* libRNVectorIcons.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNVectorIcons.a; + remoteRef = EC42DBA522B13ACB0004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DBA822B13ACB0004BAE0 /* libRNVectorIcons-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNVectorIcons-tvOS.a"; + remoteRef = EC42DBA722B13ACB0004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EC42DBAF22B13CA20004BAE0 /* libAirMaps.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libAirMaps.a; + remoteRef = EC42DBAE22B13CA20004BAE0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + ECE4CFD922B1A7BF0012A031 /* libRealmReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRealmReact.a; + remoteRef = ECE4CFD822B1A7BF0012A031 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 00E356EC1AD99517003FC87E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + EEA1E37BBAB74381BFDC923C /* AntDesign.ttf in Resources */, + EC42DB3E22B116B30004BAE0 /* icons in Resources */, + E456AEDB1E4A486BA9DAA17D /* Entypo.ttf in Resources */, + EB64F5F1BC544131945AFC51 /* EvilIcons.ttf in Resources */, + FF9294B5CF0B4267886C0D22 /* Feather.ttf in Resources */, + FC994D903E034FA2B1ABF136 /* FontAwesome.ttf in Resources */, + 90265ACA8C9946648DAFCD1A /* FontAwesome5_Brands.ttf in Resources */, + AE742544681046EDB96772C3 /* FontAwesome5_Regular.ttf in Resources */, + AA91149AD0224CA89243A5B2 /* FontAwesome5_Solid.ttf in Resources */, + 6759D348266144DE97A51445 /* Foundation.ttf in Resources */, + A8C34E4924294DB9AF5DB330 /* Ionicons.ttf in Resources */, + 75D76F19B9F54C64A68BD630 /* MaterialCommunityIcons.ttf in Resources */, + 7D95C81FA04B449E9C6310A3 /* MaterialIcons.ttf in Resources */, + 3F74C0B917894CF5A730DB04 /* Octicons.ttf in Resources */, + 6C8BBF5CA05A4C5D975EC3D4 /* SimpleLineIcons.ttf in Resources */, + B8800AC12D0E4A679B8DD09B /* Zocial.ttf in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4791E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48E1E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native Code And Images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 00E356EA1AD99517003FC87E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 00E356F31AD99517003FC87E /* iLinkWorldTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4771E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48C1E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2DCD954D1E0B4F2C00145EB5 /* iLinkWorldTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 13B07F861A680F5B00A75B9A /* iLinkWorld */; + targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; + }; + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2D02E47A1E0B4A5D006451C7 /* iLinkWorld-tvOS */; + targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 13B07FB21A68108700A75B9A /* Base */, + ); + name = LaunchScreen.xib; + path = iLinkWorld; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 00E356F61AD99517003FC87E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-blur-overlay/ios", + "$(SRCROOT)/../node_modules/realm/src/**", + ); + INFOPLIST_FILE = iLinkWorldTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iLinkWorld.app/iLinkWorld"; + }; + name = Debug; + }; + 00E356F71AD99517003FC87E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-blur-overlay/ios", + "$(SRCROOT)/../node_modules/realm/src/**", + ); + INFOPLIST_FILE = iLinkWorldTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iLinkWorld.app/iLinkWorld"; + }; + name = Release; + }; + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = 59P2CR52KS; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-blur-overlay/ios", + "$(SRCROOT)/../node_modules/realm/src/**", + ); + INFOPLIST_FILE = iLinkWorld/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = iLinkWorld; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 59P2CR52KS; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-blur-overlay/ios", + "$(SRCROOT)/../node_modules/realm/src/**", + ); + INFOPLIST_FILE = iLinkWorld/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = iLinkWorld; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 2D02E4971E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-blur-overlay/ios", + "$(SRCROOT)/../node_modules/realm/src/**", + ); + INFOPLIST_FILE = "iLinkWorld-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.iLinkWorld-tvOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + }; + name = Debug; + }; + 2D02E4981E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-blur-overlay/ios", + "$(SRCROOT)/../node_modules/realm/src/**", + ); + INFOPLIST_FILE = "iLinkWorld-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.iLinkWorld-tvOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + }; + name = Release; + }; + 2D02E4991E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-blur-overlay/ios", + "$(SRCROOT)/../node_modules/realm/src/**", + ); + INFOPLIST_FILE = "iLinkWorld-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.iLinkWorld-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iLinkWorld-tvOS.app/iLinkWorld-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + }; + name = Debug; + }; + 2D02E49A1E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-blur-overlay/ios", + "$(SRCROOT)/../node_modules/realm/src/**", + ); + INFOPLIST_FILE = "iLinkWorld-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.iLinkWorld-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iLinkWorld-tvOS.app/iLinkWorld-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "iLinkWorldTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00E356F61AD99517003FC87E /* Debug */, + 00E356F71AD99517003FC87E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "iLinkWorld" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "iLinkWorld-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4971E0B4A5E006451C7 /* Debug */, + 2D02E4981E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "iLinkWorld-tvOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4991E0B4A5E006451C7 /* Debug */, + 2D02E49A1E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "iLinkWorld" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/ios/iLinkWorld.xcodeproj/xcshareddata/xcschemes/iLinkWorld-tvOS.xcscheme b/ios/iLinkWorld.xcodeproj/xcshareddata/xcschemes/iLinkWorld-tvOS.xcscheme new file mode 100644 index 00000000..d8ed4214 --- /dev/null +++ b/ios/iLinkWorld.xcodeproj/xcshareddata/xcschemes/iLinkWorld-tvOS.xcscheme @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/iLinkWorld.xcodeproj/xcshareddata/xcschemes/iLinkWorld.xcscheme b/ios/iLinkWorld.xcodeproj/xcshareddata/xcschemes/iLinkWorld.xcscheme new file mode 100644 index 00000000..bd9bcfed --- /dev/null +++ b/ios/iLinkWorld.xcodeproj/xcshareddata/xcschemes/iLinkWorld.xcscheme @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/iLinkWorld/AppDelegate.h b/ios/iLinkWorld/AppDelegate.h new file mode 100644 index 00000000..2726d5e1 --- /dev/null +++ b/ios/iLinkWorld/AppDelegate.h @@ -0,0 +1,15 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import + +@interface AppDelegate : UIResponder + +@property (nonatomic, strong) UIWindow *window; + +@end diff --git a/ios/iLinkWorld/AppDelegate.m b/ios/iLinkWorld/AppDelegate.m new file mode 100644 index 00000000..0df3a249 --- /dev/null +++ b/ios/iLinkWorld/AppDelegate.m @@ -0,0 +1,42 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "AppDelegate.h" + +#import +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; + RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge + moduleName:@"iLinkWorld" + initialProperties:nil]; + + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + +@end diff --git a/ios/iLinkWorld/Base.lproj/LaunchScreen.xib b/ios/iLinkWorld/Base.lproj/LaunchScreen.xib new file mode 100644 index 00000000..25abc7ce --- /dev/null +++ b/ios/iLinkWorld/Base.lproj/LaunchScreen.xib @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..94f664d6 --- /dev/null +++ b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,62 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-iPhone20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-iPhone20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-iPhone29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-iPhone29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-iPhone40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-iPhone40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-iPhone60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-iPhone60@3x.png", + "scale" : "3x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-AppStore.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-AppStore.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-AppStore.png new file mode 100644 index 00000000..4143881d Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-AppStore.png differ diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone20@2x.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone20@2x.png new file mode 100644 index 00000000..a66c3d4e Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone20@2x.png differ diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone20@3x.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone20@3x.png new file mode 100644 index 00000000..c64d60d9 Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone20@3x.png differ diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone29@2x.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone29@2x.png new file mode 100644 index 00000000..c0f6d9e3 Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone29@2x.png differ diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone29@3x.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone29@3x.png new file mode 100644 index 00000000..f45d5538 Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone29@3x.png differ diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone40@2x.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone40@2x.png new file mode 100644 index 00000000..e3fc703e Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone40@2x.png differ diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone40@3x.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone40@3x.png new file mode 100644 index 00000000..d926775e Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone40@3x.png differ diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone60@2x.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone60@2x.png new file mode 100644 index 00000000..d926775e Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone60@2x.png differ diff --git a/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone60@3x.png b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone60@3x.png new file mode 100644 index 00000000..47034450 Binary files /dev/null and b/ios/iLinkWorld/Images.xcassets/AppIcon.appiconset/icon-iPhone60@3x.png differ diff --git a/ios/iLinkWorld/Images.xcassets/Contents.json b/ios/iLinkWorld/Images.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/ios/iLinkWorld/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/iLinkWorld/Info.plist b/ios/iLinkWorld/Info.plist new file mode 100644 index 00000000..184f2b9a --- /dev/null +++ b/ios/iLinkWorld/Info.plist @@ -0,0 +1,69 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + iLinkWorld + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSLocationWhenInUseUsageDescription + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + + UIAppFonts + + AntDesign.ttf + Entypo.ttf + EvilIcons.ttf + Feather.ttf + FontAwesome.ttf + FontAwesome5_Brands.ttf + FontAwesome5_Regular.ttf + FontAwesome5_Solid.ttf + Foundation.ttf + Ionicons.ttf + MaterialCommunityIcons.ttf + MaterialIcons.ttf + Octicons.ttf + SimpleLineIcons.ttf + Zocial.ttf + + + diff --git a/ios/iLinkWorld/main.m b/ios/iLinkWorld/main.m new file mode 100644 index 00000000..c316cf81 --- /dev/null +++ b/ios/iLinkWorld/main.m @@ -0,0 +1,16 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/ios/iLinkWorldTests/Info.plist b/ios/iLinkWorldTests/Info.plist new file mode 100644 index 00000000..ba72822e --- /dev/null +++ b/ios/iLinkWorldTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/ios/iLinkWorldTests/iLinkWorldTests.m b/ios/iLinkWorldTests/iLinkWorldTests.m new file mode 100644 index 00000000..11109e29 --- /dev/null +++ b/ios/iLinkWorldTests/iLinkWorldTests.m @@ -0,0 +1,68 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import + +#import +#import + +#define TIMEOUT_SECONDS 600 +#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" + +@interface iLinkWorldTests : XCTestCase + +@end + +@implementation iLinkWorldTests + +- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test +{ + if (test(view)) { + return YES; + } + for (UIView *subview in [view subviews]) { + if ([self findSubviewInView:subview matching:test]) { + return YES; + } + } + return NO; +} + +- (void)testRendersWelcomeScreen +{ + UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; + NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; + BOOL foundElement = NO; + + __block NSString *redboxError = nil; + RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { + if (level >= RCTLogLevelError) { + redboxError = message; + } + }); + + while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { + [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + + foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { + if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { + return YES; + } + return NO; + }]; + } + + RCTSetLogFunction(RCTDefaultLogFunction); + + XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); + XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); +} + + +@end diff --git a/ios/icons/icon-AppStore.png b/ios/icons/icon-AppStore.png new file mode 100644 index 00000000..4143881d Binary files /dev/null and b/ios/icons/icon-AppStore.png differ diff --git a/ios/icons/icon-iPad20.png b/ios/icons/icon-iPad20.png new file mode 100644 index 00000000..ea1c9758 Binary files /dev/null and b/ios/icons/icon-iPad20.png differ diff --git a/ios/icons/icon-iPad20@2x.png b/ios/icons/icon-iPad20@2x.png new file mode 100644 index 00000000..a66c3d4e Binary files /dev/null and b/ios/icons/icon-iPad20@2x.png differ diff --git a/ios/icons/icon-iPad29.png b/ios/icons/icon-iPad29.png new file mode 100644 index 00000000..73d90643 Binary files /dev/null and b/ios/icons/icon-iPad29.png differ diff --git a/ios/icons/icon-iPad29@2x.png b/ios/icons/icon-iPad29@2x.png new file mode 100644 index 00000000..c0f6d9e3 Binary files /dev/null and b/ios/icons/icon-iPad29@2x.png differ diff --git a/ios/icons/icon-iPad40.png b/ios/icons/icon-iPad40.png new file mode 100644 index 00000000..a66c3d4e Binary files /dev/null and b/ios/icons/icon-iPad40.png differ diff --git a/ios/icons/icon-iPad40@2x.png b/ios/icons/icon-iPad40@2x.png new file mode 100644 index 00000000..e3fc703e Binary files /dev/null and b/ios/icons/icon-iPad40@2x.png differ diff --git a/ios/icons/icon-iPad76.png b/ios/icons/icon-iPad76.png new file mode 100644 index 00000000..492316a6 Binary files /dev/null and b/ios/icons/icon-iPad76.png differ diff --git a/ios/icons/icon-iPad76@2x.png b/ios/icons/icon-iPad76@2x.png new file mode 100644 index 00000000..fe0ee691 Binary files /dev/null and b/ios/icons/icon-iPad76@2x.png differ diff --git a/ios/icons/icon-iPad83@2x.png b/ios/icons/icon-iPad83@2x.png new file mode 100644 index 00000000..af7f2e08 Binary files /dev/null and b/ios/icons/icon-iPad83@2x.png differ diff --git a/ios/icons/icon-iPhone20@2x.png b/ios/icons/icon-iPhone20@2x.png new file mode 100644 index 00000000..a66c3d4e Binary files /dev/null and b/ios/icons/icon-iPhone20@2x.png differ diff --git a/ios/icons/icon-iPhone20@3x.png b/ios/icons/icon-iPhone20@3x.png new file mode 100644 index 00000000..c64d60d9 Binary files /dev/null and b/ios/icons/icon-iPhone20@3x.png differ diff --git a/ios/icons/icon-iPhone29@2x.png b/ios/icons/icon-iPhone29@2x.png new file mode 100644 index 00000000..c0f6d9e3 Binary files /dev/null and b/ios/icons/icon-iPhone29@2x.png differ diff --git a/ios/icons/icon-iPhone29@3x.png b/ios/icons/icon-iPhone29@3x.png new file mode 100644 index 00000000..f45d5538 Binary files /dev/null and b/ios/icons/icon-iPhone29@3x.png differ diff --git a/ios/icons/icon-iPhone40@2x.png b/ios/icons/icon-iPhone40@2x.png new file mode 100644 index 00000000..e3fc703e Binary files /dev/null and b/ios/icons/icon-iPhone40@2x.png differ diff --git a/ios/icons/icon-iPhone40@3x.png b/ios/icons/icon-iPhone40@3x.png new file mode 100644 index 00000000..d926775e Binary files /dev/null and b/ios/icons/icon-iPhone40@3x.png differ diff --git a/ios/icons/icon-iPhone60@2x.png b/ios/icons/icon-iPhone60@2x.png new file mode 100644 index 00000000..d926775e Binary files /dev/null and b/ios/icons/icon-iPhone60@2x.png differ diff --git a/ios/icons/icon-iPhone60@3x.png b/ios/icons/icon-iPhone60@3x.png new file mode 100644 index 00000000..47034450 Binary files /dev/null and b/ios/icons/icon-iPhone60@3x.png differ diff --git a/metro.config.js b/metro.config.js new file mode 100644 index 00000000..13a96421 --- /dev/null +++ b/metro.config.js @@ -0,0 +1,17 @@ +/** + * Metro configuration for React Native + * https://github.com/facebook/react-native + * + * @format + */ + +module.exports = { + transformer: { + getTransformOptions: async () => ({ + transform: { + experimentalImportSupport: false, + inlineRequires: false, + }, + }), + }, +}; diff --git a/model/GeolocatedPoint.js b/model/GeolocatedPoint.js new file mode 100644 index 00000000..06415be8 --- /dev/null +++ b/model/GeolocatedPoint.js @@ -0,0 +1,48 @@ +import Network from "./Network"; + +export default class GeolocatedPoint{ + firstname:string=null + lastname:string + adresse:string + phone:string + email:string + etat:boolean + id:number + longitude:number + latitude:number + solde:number + network:string + country:string + category:string + network_id:number + transactionNumber:string + code_membre:string + code_parrain:string + code_dial:string + + +} +GeolocatedPoint.schema={ + name:"GeolocatedPoint", + primaryKey: 'id', + properties:{ + id:'int', + firstname:'string?', + lastname:'string', + adresse:'string', + longitude:'float', + latitude:'float', + phone:'string?', + solde:'int', + country:'string', + category:'string', + email:'string', + etat:'int' , + code_parrain:'string', + code_dial:'string', + network_id:'int', + transactionNumber:'string?', + code_membre:'string', + network:'string' + } +} diff --git a/model/Network.js b/model/Network.js new file mode 100644 index 00000000..2aa8169b --- /dev/null +++ b/model/Network.js @@ -0,0 +1,19 @@ + + +export default class Network{ + id:number + name:string + country_id:number + + } + +Network.schema={ + name:'Network', + primaryKey: 'id', + properties:{ + id:'int', + name:'string', + country_id:'int', + + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 00000000..21de21ae --- /dev/null +++ b/package.json @@ -0,0 +1,74 @@ +{ + "name": "iLinkWorld", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start", + "test": "jest" + }, + "dependencies": { + "apsl-react-native-button": "^3.1.1", + "events": "^3.0.0", + "geolib": "^3.0.3", + "lottie-ios": "^3.0.3", + "lottie-react-native": "^2.6.1", + "moment-timezone": "^0.5.25", + "react": "16.8.3", + "react-native": "0.59.9", + "react-native-action-button": "^2.8.5", + "react-native-animatable": "^1.3.2", + "react-native-animated-loader": "^0.0.7", + "react-native-blur-overlay": "^1.0.6", + "react-native-bottom-sheet-behavior": "^2.0.0", + "react-native-calendario": "^0.2.10", + "react-native-cardview": "^2.0.2", + "react-native-copilot": "^2.4.3", + "react-native-db-models": "^0.1.3", + "react-native-device-info": "^2.1.1", + "react-native-elements": "^1.1.0", + "react-native-geolocation": "^1.0.0", + "react-native-geolocation-service": "^2.0.1", + "react-native-gesture-handler": "^1.3.0", + "react-native-i18n": "^2.0.15", + "react-native-loader": "^1.2.1", + "react-native-loading-spinner-overlay": "^1.0.1", + "react-native-local-mongodb": "^2.2.9", + "react-native-maps": "^0.24.2", + "react-native-maps-directions": "^1.7.0", + "react-native-material-bottom-navigation": "^1.0.3", + "react-native-material-bottom-navigation-performance": "^0.7.8", + "react-native-material-cards": "^1.0.9", + "react-native-material-dialog": "^0.7.6", + "react-native-material-dropdown": "^0.11.1", + "react-native-paper": "^2.16.0", + "react-native-phone-call": "^1.0.9", + "react-native-progress": "^3.6.0", + "react-native-range-datepicker": "^1.8.2", + "react-native-reanimated": "^1.0.1", + "react-native-responsive-dimensions": "^2.0.1", + "react-native-simple-dialogs": "^1.1.0", + "react-native-snackbar-component": "^1.1.0", + "react-native-snap-slider": "^0.3.0", + "react-native-svg": "^9.5.0", + "react-native-swipeout": "^2.3.6", + "react-native-switch-selector": "^1.1.14", + "react-native-textinput-effects": "^0.5.1", + "react-native-vector-icons": "^6.5.0", + "react-navigation": "^3.11.0", + "react-navigation-material-bottom-tabs": "^1.0.0", + "realm": "^2.28.1", + "reanimated-bottom-sheet": "^1.0.0-alpha.10", + "rn-viewpager": "^1.2.9" + }, + "devDependencies": { + "@babel/core": "^7.4.5", + "@babel/runtime": "^7.4.5", + "babel-jest": "^24.8.0", + "jest": "^24.8.0", + "metro-react-native-babel-preset": "^0.54.1", + "react-test-renderer": "16.8.3" + }, + "jest": { + "preset": "react-native" + } +} diff --git a/qApp.android.js b/qApp.android.js new file mode 100755 index 00000000..918bb3f5 --- /dev/null +++ b/qApp.android.js @@ -0,0 +1,249 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + * @flow + */ + +import React, {Component} from 'react'; +import {Platform, StyleSheet, Text, View} from 'react-native'; +import { createSwitchNavigator, createStackNavigator,createDrawerNavigator, createAppContainer,createBottomTabNavigator } from 'react-navigation'; +import Connect from "./screens/login/Connect"; +import SplashScreen from "./screens/splashscreen/SplashScreen"; +import HelpMenu from "./screens/help/HelpMenu"; +import Help from "./screens/help/Help"; +import ForgottenPassword from "./screens/login/ForgottenPassword"; +import TypeChoiser from "./screens/login/TypeChoiser"; +import CreateUserStep2 from "./screens/login/createUserStep2"; +import createAccount from "./screens/login/createAccount"; +import UpdateInformations from "./screens/account/UpdateInformations"; +import UserAccount from "./screens/account/UserAccount"; +import ActivateAccount from "./screens/login/ActivateAccount"; +import Notifications from "./screens/notifications/Notifications"; +import About from "./screens/configurations/About"; +import Configurations from "./screens/configurations/Configurations"; + +import History from './screens/history-request/History' +import OptionsMenu from "./screens/optionMenu/OptionsMenu"; +import Home from "./screens/home/Home"; +import HistoryItemDetails from "./screens/history-request/HistoryItemDetails"; +import SuperViseurGroupeHome from "./screens/groupes/SuperViseurGroupeHome"; +import HistoryRequester from "./screens/history-request/HistoryRequester"; +import AddNetwork from "./screens/account/AddNetwork"; +import MyHistory from "./screens/history-request/MyHistory"; +import Icon from "react-native-vector-icons/FontAwesome5"; +import { GoogleAnalyticsTracker } from 'react-native-google-analytics-bridge'; +import { Appbar } from 'react-native-paper'; + +import IconWithBadge from "./screens/IconWithBadge" +import I18n from "react-native-i18n"; +import Filter from './screens/home/Filter'; +import { createMaterialBottomTabNavigator } from 'react-navigation-material-bottom-tabs'; +import Networks from './screens/home/Networks'; +const instructions = Platform.select({ + ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu', + android: + 'Double tap R on your keyboard to reload,\n' + + 'Shake or press menu button for dev menu', +}); + +type Props = {}; +const theme=require("./utils/theme") +class HomeScreen extends Component { + render() { + return ( + + Welcome to iLink World! + To get started, edit App.js + {instructions} + + ); + } +} +const AuthStack=createStackNavigator({ + login:Connect, + helpMenu:HelpMenu, + help:Help, + forgottenpass:ForgottenPassword, + typeaccountcreate:TypeChoiser, + simpleusercreate:createAccount, + step2:CreateUserStep2, + activateaccout:ActivateAccount + +},{ + headerMode: 'none' +}) +const AppStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + /* filtre:Filter, + network:Networks,*/ + useraccount:{ + screen:UserAccount, + navigationOptions: { + }, + }, + notificationview:Notifications, + configuration:Configurations, + about:About + +})},{contentComponent:OptionsMenu,headerMode: 'none',contentOptions:{activeTintColor: theme.accent}}) +const AppAgentStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique: + { + screen: createBottomTabNavigator({myDemand: MyHistory}, { + headerMode: "none", + header:null, + headerTitle:null, + headerTitle: I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + fontWeight: "bold" + }, + } + }), + navigationOptions: ({ navigation }) => ({ + header:null, + headerMode:'none', + headerTitle:null, + activeColor: '#f0edf6', + inactiveColor: '#3e2465', + barStyle: { backgroundColor: '#694fad' }, + + drawerLabel: I18n.t('CREDIT_MANAGE'), + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + + historyItemDetails:HistoryItemDetails, + creditrequest:HistoryRequester, + addNetwork:AddNetwork, + updateinformation:UpdateInformations, + notificationview:Notifications, + configuration:Configurations, + about:About +})},{contentComponent:OptionsMenu, + backBehavior:"none", + lazy:false, + headerMode: 'none',contentOptions:{activeTintColor:theme.accent}}) +const AppAdministratorStack=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique:{ + screen:createBottomTabNavigator({ + myDemand:MyHistory,OthersDemand:MyHistory}, { + headerMode:"none", + header:null, + headerTitle:null, + title:I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + }, + }}), + navigationOptions: ({ navigation }) => ({ + header:null, + headerMode:'none', + headerTitle:null, + activeColor: '#f0edf6', + inactiveColor: '#3e2465', + barStyle: { backgroundColor: '#694fad' }, + + drawerLabel: I18n.t('CREDIT_MANAGE'), + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + creditrequest:HistoryRequester, + historyItemDetails:HistoryItemDetails, + + superviseurgroup:SuperViseurGroupeHome, + notificationview:Notifications, + configuration:Configurations, + about:About + +})}, + {contentComponent:OptionsMenu, + backBehavior:"none", + headerMode: 'none'}) +const AppSuperAdministrator=createDrawerNavigator({sta:createStackNavigator({ + home:Home, + useraccount:UserAccount, + Historique:{ + screen:createBottomTabNavigator({OthersDemand:MyHistory}, { + headerMode:"none", + header:null, + headerTitle:null, + title:I18n.t('CREDIT_MANAGE'), + tabBarOptions: { + labelStyle: { + fontSize: 13, + fontWeight:"bold" + }, + }}), + navigationOptions: ({ navigation }) => ({ + title: I18n.t('CREDIT_MANAGE'), + headerMode:"none", + header:null, + headerTitle:null, + drawerIcon: ({ tintColor }) => ( + ) + }), + }, + creditrequest:HistoryRequester, + historyItemDetails:HistoryItemDetails, + superviseurgroup:SuperViseurGroupeHome, + notificationview:Notifications, + configuration:Configurations, + about:About + +})},{contentComponent:OptionsMenu, + backBehavior:"none", + headerMode: 'none'}) +export const AppNavigator =createSwitchNavigator({ + first: { + screen: SplashScreen + }, + App:AppStack, + AgentApp:AppAgentStack, + adminApp:AppAdministratorStack, + supAdminApp:AppSuperAdministrator, + Auth:AuthStack +},{ + initialRouteName: 'first' +}); +const AppContainer = createAppContainer(AppNavigator); + +export default AppContainer; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: '#F5FCFF', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); diff --git a/route.json b/route.json new file mode 100755 index 00000000..0d0421ea --- /dev/null +++ b/route.json @@ -0,0 +1,31 @@ +{ + "discover":"ILink", + "stackRoot":"stackcenter", + "historiques":"Historique", + "options":"menu", + "drawer":"drawer", + "credrequester":"creditrequest", + "login":"Login", + "first":"Home", + "typeaccountcreate":"typeaccountcreate", + "simpleusercreate":"simpleusercreate", + "splashscreen":"spashscreen", + "useraccount":"useraccount", + "configurations":"configuration", + "notification":"notification", + "modalhistoryfilter":"filterhistory", + "superviseurgroup":"superviseurgroup", + "historyItemDetails":"historyItemDetails", + "forgotpass":"forgottenpass", + "confirmcode":"confirmcode", + "creationstep2":"step2", + "help":"help", + "modaloading":"modaloading", + "activateaccount":"activateaccout", + "addNetwork":"addNetwork", + "notificationView":"notificationview", + "generateNetwork":"generateNetwork", + "helpmenu":"helpMenu", + "updateinfo":"updateinformation", + "intersticielAds":"intersticielAds" +} \ No newline at end of file diff --git a/routine/backgroundDemandeSupervisor.js b/routine/backgroundDemandeSupervisor.js new file mode 100755 index 00000000..e69de29b diff --git a/screens/BaseScreen.js b/screens/BaseScreen.js new file mode 100755 index 00000000..4cfa05c0 --- /dev/null +++ b/screens/BaseScreen.js @@ -0,0 +1,19 @@ +import React,{Component} from 'react' +import {StyleSheet,Text,View} from 'react-native' +export const theme=require('./../utils/theme.json') + +export default class BaseScreen extends Component{ + + constructor(props,needToCloseDrawer:Boolean=false){ + super(props) + if(needToCloseDrawer){ + /* this.props.navigator.toggleDrawer({ + side: 'left', // the side of the drawer since you can have two, 'left' / 'right' + to: 'close' // optional, 'open' = open the drawer, 'closed' = close it, missing = the opposite of current state + });*/ + } + + + } + +} diff --git a/screens/IconWithBadge.js b/screens/IconWithBadge.js new file mode 100755 index 00000000..f414d094 --- /dev/null +++ b/screens/IconWithBadge.js @@ -0,0 +1,30 @@ +import React,{Component} from "react" +import {Text,View} from "react-native" +import Icon from "react-native-vector-icons/MaterialIcons"; + + +export default class IconWithBadge extends React.Component { + render() { + const { name, badgeCount, color, size } = this.props; + return ( + + + { badgeCount > 0 && ( + + {badgeCount} + + )} + + ); + } +} \ No newline at end of file diff --git a/screens/account/AddNetwork.js b/screens/account/AddNetwork.js new file mode 100755 index 00000000..7289715c --- /dev/null +++ b/screens/account/AddNetwork.js @@ -0,0 +1,234 @@ +import React,{Component} from 'react'; +import {StyleSheet,View,Text,Image,StatusBar,ScrollView,Alert} from 'react-native'; +import { Fumi } from 'react-native-textinput-effects'; +import * as Animatable from 'react-native-animatable' +let theme=require('./../../utils/theme.json'); +import I18n from 'react-native-i18n' +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5' +import {readUser,AssignAgentGeo} from './../../webservice/AuthApi'; +import {responsiveHeight, responsiveWidth} from 'react-native-responsive-dimensions'; +import MapView,{Marker} from 'react-native-maps'; +import Icon from 'react-native-vector-icons/FontAwesome5' +import Button from 'apsl-react-native-button' +import {IlinkEmitter} from "../../utils/events"; +require('./../../utils/Translations') +const route=require('./../../route.json') +/*var Fabric = require('react-native-fabric'); + +var { Crashlytics } = Fabric; +var { Answers } = Fabric;*/ +export default class AddNetwork extends Component { + static navigatorStyle = { + navBarBackgroundColor: theme.primaryDark, + navBarTextColor: 'white', + navBarButtonColor: 'white', + drawUnderStatusBar: false, + statusBarColor: theme.primaryDarkAdvanced, + statusBarTextColorScheme: 'light', + }; + static navigationOptions = ({navigation})=>{ + return { + drawerLabel:navigation.getParam("name",I18n.t('ADD_NETWORK')), + drawerIcon: ({ tintColor }) => ( + + ), + }}; + + updateLangue(){ + + this.props.navigation.setParams({name:I18n.t('CHANGE_INFORMATION')}) + this.forceUpdate() + } + static options(passProps){ + return { + topBar:{ + title:{ + text:"", + }, + backButton: { + visible: true, + color:"white" + }, + buttonsRight:[], + buttonColor:"white", + background:{ + color:theme.primaryDark + } + } + } + } + constructor(props) { + super(props) + this.state=this.generateState() + IlinkEmitter.on("langueChange", this.updateLangue.bind(this)) + } + + + generateState() { + return { + isLoading:false, + notifi:false + } + } + + render(){ + return ( + + + + + + + {I18n.t('ADD_NETWORK')} + this.setState({validateCode:text})} + style={style.input}/> + + {this.numberRef=com}} + onChangeText={(text)=>this.setState({enterPhone:text})} + labelStyle={style.labelInput} + /> + + + + ) + } + + async validateNetwork() { + const {validateCode,isLoading,enterPhone}=this.state + if(validateCode!==undefined && validateCode!==null && enterPhone!==null){ + this.setState({isLoading:true}) + let res=await AssignAgentGeo(validateCode,enterPhone) + this.setState({isLoading:false}) + if(res){ + if(res['success']!==undefined){ + Alert.alert( + I18n.t('ADD_SUCCES'), + I18n.t('ADD_SUCCESS_TEXT') + , [ + {text: 'OK', onPress: () =>{ + this.setState({validateCode:"",enterPhone:""}) + }} + ]) + }else{ + + if(res['error']) { + let error = res["error"]; + Alert.alert("Une erreur est survenu", + res["error_msg"] + , [{ + text: "Ok", onPress: () => { + } + }]); + }else{ + if(res['error']) { + let error = res["error"]; + Alert.alert("Une erreur est survenu", + "Verifier que les champs sont bien rempli" + , [{ + text: "Ok", onPress: () => { + } + }]); + } + } + /* Crashlytics.recordError({"type":"erreur lors de la creation","data":res}) + Answers.logCustom("error",res)*/ + } + } + } + } +} +const style=StyleSheet.create({ + btnHelpText:{ + color:'white', + fontWeight:'bold' + }, + btnHelp:{ + width:responsiveWidth(10), + marginTop:responsiveHeight(10), + alignSelf:'flex-end', + marginRight:20, + borderColor:'transparent', + backgroundColor:theme.primaryDark + }, + btnTextStyle:{ + color:"white", + fontWeight:'bold', + }, + btnStyle:{ + alignSelf:'center', + width:responsiveWidth(95), + marginTop:20, + borderColor:'transparent', + backgroundColor:theme.primaryDarkAdvanced, + height:responsiveHeight(8) + + }, + appContainer:{ + flexDirection:'row', + justifyContent:'center', + alignItems:'center' + }, + container:{ + alignItems:'center', + justifyContent:'center', + alignSelf:'center', + flex:1, + width:responsiveWidth(100), + height:responsiveHeight(100), + backgroundColor:theme.primary}, + input:{ + height:responsiveHeight(10), + width:responsiveWidth(90), + borderRadius:10, + marginTop:20, + color:"black" + }, + logo:{ + width:128, + height:128 + }, + nameApp:{ + fontSize:27, + fontWeight:'bold', + color:'white' + }, + title:{ + fontSize:22, + fontWeight:'bold', + margin:10, + + color:'white' + }, + subtitle:{ + fontSize:20, + margin:10, + color:'white' + } +}) \ No newline at end of file diff --git a/screens/account/GenerateNetworkForGeo.js b/screens/account/GenerateNetworkForGeo.js new file mode 100755 index 00000000..0af25faa --- /dev/null +++ b/screens/account/GenerateNetworkForGeo.js @@ -0,0 +1,176 @@ +import React,{Component} from 'react'; +import {StyleSheet,View,Text,Image,StatusBar,ScrollView} from 'react-native'; +import { Fumi } from 'react-native-textinput-effects'; +import * as Animatable from 'react-native-animatable' +let theme=require('./../../utils/theme.json'); +import I18n from 'react-native-i18n' +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5' +import {readUser,generateAgentGeo} from './../../webservice/AuthApi'; +import {responsiveHeight, responsiveWidth} from 'react-native-responsive-dimensions'; +import MapView,{Marker} from 'react-native-maps'; +import Icon from 'react-native-vector-icons/FontAwesome5' +import Button from 'apsl-react-native-button' +import Notification from "react-native-in-app-notification"; +require('./../../utils/Translations') +const height=responsiveHeight(100)-250; +import {Navigation} from "react-native-navigation" +export default class GenerateNetworkForGeo extends Component { + static navigatorStyle = { + navBarHidden: true, + navBarBackgroundColor: theme.primaryDark, + navBarTextColor: 'white', + navBarButtonColor: 'white', + drawUnderStatusBar: true, + statusBarColor: theme.primaryDarkAdvanced, + statusBarTextColorScheme: 'light', + }; + static options(passProps){ + return { + statusBar:{ + drawBehind:false + }, + topBar:{ + + title:{ + text:"", + }, + buttonColor:"white", + background:{ + color:theme.primaryDark + } + } + } + } + constructor(props) { + super(props) + this.state=this.generateState(); + } + + render(){ + return ( + + + + + + iLink World + + Créer un agent Géolocalisé + Définir son nouveau numéro + {this.numberRef=com}} + onChangeText={(text)=>this.setState({enterPhone:text})} + labelStyle={style.labelInput} + /> + + + + { this.notification = ref; }} /> + + ) + } + + async onGenerateGeo() { + const {enterPhone}=this.state; + this.setState({isLoading:true}) + if(enterPhone!==null && enterPhone!==undefined){ + let result= await generateAgentGeo(enterPhone); + console.log(result); + + this.setState({isLoading:false}) + if(result['success']!==undefined){ + this.setState({enterPhone:""}) + this.notification.show({ + message:"Le nouveau point geolocalisé a été crée avec succès" + }) + }else{ + this.setState({isLoading:false}) + this.notification.show({ + title:'Impossible de créer le compte', + message:result.error_msg + }) + } + } + } + + generateState() { + return { + isLoading:false + } + } +} + +const style=StyleSheet.create({ + btnHelpText:{ + color:'white', + fontWeight:'bold' + }, + btnHelp:{ + width:responsiveWidth(10), + marginTop:responsiveHeight(10), + alignSelf:'flex-end', + marginRight:20, + borderColor:'transparent', + backgroundColor:theme.primaryDark + }, + btnTextStyle:{ + color:"white", + fontWeight:'bold', + }, + btnStyle:{ + alignSelf:'center', + width:responsiveWidth(95), + marginTop:20, + borderColor:'transparent', + backgroundColor:theme.primaryDarkAdvanced, + height:responsiveHeight(8) + + }, + appContainer:{ + flexDirection:'row', + justifyContent:'center', + alignItems:'center' + }, + container:{ + alignItems:'center', + justifyContent:'center', + alignSelf:'center', + backgroundColor:theme.primary}, + input:{ + height:responsiveHeight(8), + width:responsiveWidth(90), + borderRadius:10, + color:"black" + }, + logo:{ + width:128, + height:128 + }, + nameApp:{ + fontSize:27, + fontWeight:'bold', + color:'white' + }, + title:{ + fontSize:22, + fontWeight:'bold', + margin:10, + color:'white' + }, + subtitle:{ + fontSize:20, + margin:10, + color:'white' + } +}) \ No newline at end of file diff --git a/screens/account/UpdateInformations.js b/screens/account/UpdateInformations.js new file mode 100755 index 00000000..6f28c085 --- /dev/null +++ b/screens/account/UpdateInformations.js @@ -0,0 +1,127 @@ +import React,{Component} from 'react'; +import {StyleSheet,View,Text,Image,StatusBar,ScrollView,Alert} from 'react-native'; +let theme=require('./../../utils/theme.json'); +import {readUser,updatePosition,updateUserData} from './../../webservice/AuthApi'; +import {getAgentNetworksList} from './../../webservice/NetworkApi' +import {responsiveHeight, responsiveWidth} from 'react-native-responsive-dimensions'; +import MapView,{Marker} from 'react-native-maps'; +import Icon from 'react-native-vector-icons/FontAwesome5' +import Button from 'apsl-react-native-button' +import CardView from "react-native-cardview"; +const route=require('./../../route.json') +import I18n from 'react-native-i18n' +import {Header} from "react-native-elements"; +import {IlinkEmitter} from "../../utils/events"; +require('./../../utils/Translations') + +const height=responsiveHeight(100)-250; +export default class UpdateInformations extends Component { + static navigatorStyle = { + navBarHidden: false, + navBarBackgroundColor: theme.primaryDark, + navBarTextColor: 'white', + navBarButtonColor: 'white', + drawUnderStatusBar: false, + statusBarColor: theme.primaryDarkAdvanced, + statusBarTextColorScheme: 'light', + }; + static options(passProps){ + return { + statusBar:{ + drawBehind:false + }, + topBar:{ + title:{ + text:"Mise à jour des informations", + color:"white" + }, + + background:{ + color:theme.primaryDark + + } + } + } + } + static navigationOptions = ({navigation})=>{ + return { + headerTitle: I18n.t('CHANGE_INFORMATION'), + drawerIcon: ({ tintColor }) => ( + + ), + }}; + constructor(props){ + super(props) + + this.state=this.initiateItems() + IlinkEmitter.on("langueChange", this.updateLangue.bind(this)) + this.showUserState() + } + async showUserState(){ + const user=await readUser() + this.setState({user:user}) + if(user.longitude<=0 && user.latitude<=0){ + Alert.alert(I18n.t('TITLE_NEED_POSITION'),I18n.t('TEXT_NEED_POSITION'),[{text:'Ok'}]) + } + } + + updateLangue(){ + this.props.navigation.setParams({name:I18n.t('CHANGE_INFORMATION')}) + this.forceUpdate() + } + render(){ + return ( + + + ); + } + + initiateItems() { + return{ + positionEnabled:false, + } + } + + onClickUpdatePosition() { + this.setState({positionEnabled:true}) + navigator.geolocation.getCurrentPosition((position) => { + const myPosition = position.coords; + updatePosition(myPosition.longitude,myPosition.latitude).then((response)=> { + var title=''; + var message=''; + this.setState({positionEnabled:false}) + console.log(response.error) + if(response.error===undefined){ + updateUserData({longitude:myPosition.longitude,latitude:myPosition.latitude}) + message=I18n.t('POSITION_UPDATE_SUCCESS_TEXT') + title=I18n.t('UPDATE_SUCCESS'); + }else{ + title=I18n.t("TITLE_UPDATE_POSITION_FAILED") + switch (response.error){ + case -3:message=I18n.t('TEXT_UDATE_POSITION_FAILED_1');break + case -2:message=I18n.t('TEXT_UDATE_POSITION_FAILED_2'); + break; + } + + } + Alert.alert(title,message,[{text:"Ok",onPress:()=>{ + this.props.navigation.popToTop() + }}]) + }).catch((e)=>{ + this.setState({positionEnabled:false}) + }) + }, null, this.props.geolocationOptions); + + } +} \ No newline at end of file diff --git a/screens/account/UpdatePassword.js b/screens/account/UpdatePassword.js new file mode 100644 index 00000000..e69de29b diff --git a/screens/account/UserAccount.js b/screens/account/UserAccount.js new file mode 100755 index 00000000..402bf3a0 --- /dev/null +++ b/screens/account/UserAccount.js @@ -0,0 +1,389 @@ +import React,{Component} from 'react'; +import {StyleSheet,View,Text,Image,StatusBar,ScrollView,ProgressBarAndroid,Alert} from 'react-native'; +let theme=require('./../../utils/theme.json'); +import {readUser,deleteUser} from './../../webservice/AuthApi'; +import {getAgentNetworksList} from './../../webservice/NetworkApi' +import {responsiveHeight, responsiveWidth} from 'react-native-responsive-dimensions'; +import MapView,{Marker} from 'react-native-maps'; +import Icon from 'react-native-vector-icons/MaterialIcons' +import Button from 'apsl-react-native-button' +import CardView from "react-native-cardview"; +import I18n from 'react-native-i18n' +import {Header} from 'react-native-elements' +import {IlinkEmitter} from "../../utils/events"; +import { Card, CardTitle, CardContent, CardAction, CardButton, CardImage } from 'react-native-material-cards' + +require('./../../utils/Translations') +const height=responsiveHeight(100)-250; +/* +var Fabric = require('react-native-fabric'); +var { Crashlytics } = Fabric;*/ +export default class UserAccount extends Component{ + static navigatorStyle = { + navBarHidden:false, + navBarBackgroundColor:theme.primaryDark, + navBarTextColor:'white', + navBarButtonColor:'white', + drawUnderStatusBar: false, + statusBarColor:theme.primaryDarkAdvanced, + statusBarTextColorScheme: 'light', + }; + static navigationOptions = ({navigation})=>{ + return {headerTitle:I18n.t('USER_ACCOUNT') , + headerStyle:{ + backgroundColor:theme.primary, + paddingTop:10 + }, + headerTitleStyle:{ + color:"white" + }, + drawerIcon: ({ tintColor }) => ( + + ), + }}; + static options(passProps) { + return { + topBar: { + drawBehind: false, + visible: true, + animate: true, + buttonColor: 'white', + background: { + color:theme.primaryDark , + }, + rightButtons:[] + }, + backButton: { + visible: true, + color:"white" + }, + buttonColor:"white", + background:{ + color:theme.primaryDark + }, + statusBar:{ + drawBehind: false, + visible:true, + } + }; + } + constructor(props){ + super(props) + this.state=this.initState(); + IlinkEmitter.on("langueChange", this.updateLangue.bind(this)) + readUser().then((user)=>{ + if(user!==null){this.setState({user:user}) + + this.updateContent(user)}}) + + + } + updateLangue(){ + + this.props.navigation.setParams({name:I18n.t('USER_ACCOUNT')}) + this.forceUpdate() + } + updateContent(user){ + getAgentNetworksList(user.agentId).then((networks)=>{ + if(networks['success']!==undefined){ + this.setState({mynetworks:networks.networks}) + } + + }); + this.setState({user:user}); + } + + + initState(){ + return { + user: {}, + mynetworks:[] + } + + + } + + render() { + + let cat=""; + + const {user}=this.state + + if(user.category!==undefined || user.category!==null) + cat=user.category==='super'?I18n.t("ADMIN"):user.category==='hyper'? + I18n.t("SUPER_ADMIN"):user.category==='geolocated'? + I18n.t("GEOLOCATED"):I18n.t("SIMPLE_USER") + return ( + + + + + + + + + + {user.category===undefined || user.category===null? + this.getHeaderLeftProfil(user):this.getHeaderLeftAgentProfil(user) + } + + {this.state.user.firstname} + {this.state.user.lastname} + {{cat} + } + + + {user.category===undefined || user.category===null? + this.getHeaderRight(user) + :this.getHeaderRightAgent(user)} + + + + + + + + {I18n.t("ACCOUNT_INFO")} + + + {user.category!==undefined && user.category!==null?this + .addAgentInformation(user):null} + + {" "+this.state.user.country} + + {user.balance!==undefined && user.balance!==null ?this.showBalance(user):null } + + {" "+this.state.user.email} + + + + + + {" "+this.state.user.phone} + {this.showPhoneSup()} + + + + {" "+this.state.user.network} + + + + {user.category==='geolocated'? + ({I18n.t("MY_NETWORK")}) + + :null} + {user.category==='geolocated'?(this.state.mynetworks.length>0?this.state.mynetworks.map(item=>this.generateItemNetwork(item)):this.showLoader()):null} + + + + + ) + } + showPhoneSup() { + if(this.state.user.phoneTransaction!=undefined && this.state.user.phoneTransaction!=null) { + + return( + + + {" " + this.state.user.phoneTransaction} + ) + } + } + + getHeaderLeftProfil(user) { + return ( + {I18n.t("NETWORK")} + {user.network} + ) + } + + getHeaderRight(user) { + return ( + ) + } + + getHeaderRightAgent(user) { + + return ( + {I18n.t("MEMBER_CODE")} + {user.code_membre} + ) + + } + + getHeaderLeftAgentProfil(user) { + return ( + {I18n.t("NETWORK")} + {user.network} + ) + } + + addAgentInformation(user) { + console.log(user) + if(user.category==="geolocated") { + ( + + + {" "+user.code_parrain} + ) + + }else + return ( + + + + {" "+user.code_parrain} + + + + {" "+((user.nbre_reseau===null || user.nbre_reseau===undefined)?0:user.nbre_reseau)+" "+I18n.t("FREE")} + + {" "+((user.nbre_reseau===null || user.nbre_membre===undefined)?0:user.nbre_membre)+" "+I18n.t("SAVED")} + + ) + } + + mapUser(user) { + const myPosition={latitude:parseFloat(user.latitude),longitude:parseFloat(user.longitude)} + + return ( { this.mapRef = ref }} + style={styles.map} + > + {this.state.myPosition!==undefined? + : + null} + + ) + } + + showBalance(user) { + return + {" "+this.state.user.balance+" "} + + } + + makeGeolocatedNetworkList() { + + return ( + Mes reseaux + + ) + } + + generateItemNetwork(item) { + return ( + + + + + + + +{" "+item.code_membre+" "} + +{" "+item.code_parrain+" "} + + + + + { + Alert.alert( + I18n.t("TITLE_SUPPRESS_CONFIRM"), + I18n.t("TEXT_SUPPRESS_CONFIRM"), + [ + {text: I18n.t('NO'), onPress: () =>{}}, + {text: I18n.t("YES"), onPress: () => { + deleteUser(item).then(()=>{ + this.setState({isLoading:true}) + this.updateContent(this.state.user) + }) + }, + style: 'cancel'}, + ], + ) + }} + title={I18n.t('DELETE_GEOLOCATED_USER')} + color="crimson" + /> + + ) + } + + showLoader() { + return () + } +} + +const styles=StyleSheet.create({ + userInformation:{ + backgroundColor:theme.primary, + flex:1, + justifyContent:'center', + paddingTop:responsiveHeight(2), + paddingBottom:responsiveHeight(5) + }, + map: { + height: 200, + marginRight:responsiveWidth(5), + marginLeft:responsiveWidth(5), + marginVertical: 10, + }, + networkInformation:{ + width:responsiveWidth(100), + backgroundColor:'#EEEEEE', + flex:1 + }, + container:{ + flex:1, + backgroundColor:'#EEEEEE', + + }, + textInformation:{ + fontSize:16, + color:'white', + textAlign:'center' + }, + textInformation2:{ + fontSize:15, + marginTop:7, + color:theme.primaryDark, + marginLeft:10, + }, + textTitle:{ + fontSize:25, + color:'white', + fontWeight:'bold' + }, + + textTitle2:{ + fontSize:25, + color:theme.primaryDark, + fontWeight:'bold' + } +}); diff --git a/screens/ads/BannerAds.js b/screens/ads/BannerAds.js new file mode 100755 index 00000000..e48608ab --- /dev/null +++ b/screens/ads/BannerAds.js @@ -0,0 +1,78 @@ +import React,{Component} from 'react'; +import PropTypes from 'prop-types'; + +import { + Platform, StyleSheet, Text, + TouchableWithoutFeedback, View, TextInput, + WebView, + Animated, Dimensions, Image, PermissionsAndroid, + StatusBar, TouchableNativeFeedback, TouchableOpacity,BackHandler,Alert,ProgressBarAndroid + , NativeModules, Picker, FlatList +} from 'react-native'; +import CardView from "react-native-cardview" +import {responsiveHeight,responsiveWidth} from "react-native-responsive-dimensions" +import BaseScreen from "../BaseScreen"; +import Icon from "react-native-vector-icons/MaterialIcons"; +import Button from "apsl-react-native-button" +type Props = {}; +const route=require("./../../route.json") +const BannerAds = (props) => { + const { children, hide, style } = props; + if (hide) { + return null; + } + return ( + + + + { + this.hide=true + }} + style={{borderRadius:0}} + >Fermer + + + + ); + + +} + +BannerAds.propTypes = { + children: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.element, + PropTypes.number, + PropTypes.arrayOf(PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + PropTypes.element, + ])), + ]).isRequired, + hide: PropTypes.bool, +}; +const styles=StyleSheet.create({ + container:{ + flex:1, + + width:responsiveWidth(100), + height:responsiveHeight(15), + + justifyContent:'center', + backgroundColor:"white" + }, + parent:{ + width:responsiveWidth(100), + height:responsiveHeight(15), + justifyContent:'center', + alignItems:'center', + backgroundColor:"#000000AE" + } +}) +export default BannerAds \ No newline at end of file diff --git a/screens/ads/IntersticielAds.js b/screens/ads/IntersticielAds.js new file mode 100755 index 00000000..421da5fb --- /dev/null +++ b/screens/ads/IntersticielAds.js @@ -0,0 +1,201 @@ +import React,{Component} from 'react'; +import {StyleSheet,View,Text,Image,StatusBar,ScrollView,Alert} from 'react-native'; +import { Fumi } from 'react-native-textinput-effects'; +import * as Animatable from 'react-native-animatable' +let theme=require('./../../utils/theme.json'); +import I18n from 'react-native-i18n' +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5' +import {readUser,AssignAgentGeo} from './../../webservice/AuthApi'; +import {responsiveHeight, responsiveWidth} from 'react-native-responsive-dimensions'; +import MapView,{Marker} from 'react-native-maps'; +import Icon from 'react-native-vector-icons/FontAwesome5' +import Button from 'apsl-react-native-button' +import Notification from "react-native-in-app-notification"; +import {Navigation} from "react-native-navigation" +require('./../../utils/Translations') +const route=require('./../../route.json') +export default class IntersticielAds extends Component { + static navigatorStyle = { + navBarBackgroundColor: theme.primaryDark, + navBarTextColor: 'white', + navBarButtonColor: 'white', + drawUnderStatusBar: false, + statusBarColor: theme.primaryDarkAdvanced, + statusBarTextColorScheme: 'light', + }; + + static options(passProps){ + return { + + topBar:{ + title:{ + text:"", + }, + backButton: { + visible: true, + color:"white" + }, + buttonsRight:[], + buttonColor:"white", + background:{ + color:theme.primaryDark + } + } + } + } + constructor(props) { + super(props) + this.state=this.generateState() + } + + + generateState() { + return { + isLoading:false, + notifi:false + } + } + + render(){ + return ( + + + + + + iLink World + + {I18n.t('ADD_NETWORK')} + this.setState({validateCode:text})} + style={style.input}/> + + {this.numberRef=com}} + onChangeText={(text)=>this.setState({enterPhone:text})} + labelStyle={style.labelInput} + /> + + + + ) + } + + async validateNetwork() { + const {validateCode,isLoading,enterPhone}=this.state + if(validateCode!==undefined && validateCode!==null && enterPhone!==null){ + this.setState({isLoading:true}) + let res=await AssignAgentGeo(validateCode,enterPhone) + this.setState({isLoading:false}) + if(res){ + if(res['success']!==undefined){ + Alert.alert( + I18n.t('ADD_SUCCES'), + I18n.t('ADD_SUCCESS_TEXT') + , [ + {text: 'OK', onPress: () =>{ + this.setState({validateCode:"",enterPhone:""}) + }} + ]) + }else{ + Alert.alert("Une erreur est survenu", + "Verifiez que les champs sont correctement remplis" + ,[{text:"Ok",onPress:()=>{}}]); + + + } + console.log(res) + } + } + } +} +const style=StyleSheet.create({ + btnHelpText:{ + color:'white', + fontWeight:'bold' + }, + btnHelp:{ + width:responsiveWidth(10), + marginTop:responsiveHeight(10), + alignSelf:'flex-end', + marginRight:20, + borderColor:'transparent', + backgroundColor:theme.primaryDark + }, + btnTextStyle:{ + color:"white", + fontWeight:'bold', + }, + btnStyle:{ + alignSelf:'center', + width:responsiveWidth(95), + marginTop:20, + borderColor:'transparent', + backgroundColor:theme.primaryDarkAdvanced, + height:responsiveHeight(8) + + }, + appContainer:{ + flexDirection:'row', + justifyContent:'center', + alignItems:'center' + }, + container:{ + alignItems:'center', + justifyContent:'center', + alignSelf:'center', + flex:1, + width:responsiveWidth(100), + height:responsiveHeight(100), + backgroundColor:theme.primary}, + input:{ + height:responsiveHeight(10), + width:responsiveWidth(90), + borderRadius:10, + marginTop:20, + color:"black" + }, + logo:{ + width:128, + height:128 + }, + nameApp:{ + fontSize:27, + fontWeight:'bold', + color:'white' + }, + title:{ + fontSize:22, + fontWeight:'bold', + margin:10, + + color:'white' + }, + subtitle:{ + fontSize:20, + margin:10, + color:'white' + } +}) \ No newline at end of file diff --git a/screens/ads/InterticielAds.js b/screens/ads/InterticielAds.js new file mode 100755 index 00000000..e57c6fb4 --- /dev/null +++ b/screens/ads/InterticielAds.js @@ -0,0 +1,111 @@ +import React,{Component} from 'react'; +import PropTypes from 'prop-types'; + +import { + Platform, StyleSheet, Text, + TouchableWithoutFeedback, View, TextInput, + WebView, + Button, + Animated, Dimensions, Image, PermissionsAndroid, + StatusBar, TouchableNativeFeedback, TouchableOpacity,BackHandler,Alert,ProgressBarAndroid + , NativeModules, Picker, FlatList +} from 'react-native'; +import {responsiveHeight,responsiveWidth} from "react-native-responsive-dimensions" +import BaseScreen from "../BaseScreen"; +import Icon from "react-native-vector-icons/MaterialIcons"; +import BlurOverlay,{openOverlay,closeOverlay} from 'react-native-blur-overlay' +import I18n from 'i18n-js' +type Props = {}; +const route=require("./../../route.json") +const theme=require('./../../utils/theme.json') +export default class InterticielAds + extends BaseScreen { + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + static options(passProps) { + return { + statusBar: { + visible: false, + drawBehind: true, + }, + topBar: { + drawBehind: true, + visible: false, + animate: false + } + }; + } + + + constructor(props){ + super(props); + }; + + + render(){ + return ( { + this.setState({isPubShow:false}) + }} + brightness={-200} + + > + {this.renderChild()} + ) + } + renderChild(){ + return ( + + + + + + + + + ) + + } + componentDidMount(){ + openOverlay() + + } + async tryGetHtml(){ + response=await fetch('https://ad-server.ilink-app.com/ad_display/zone1/zone4.html') + } + popOverLay() { + if(this.props.closeIntersticiel) + this.props.closeIntersticiel() + closeOverlay() + + } +} + +const styles=StyleSheet.create({ + container:{ + flex:1, + marginTop:30 + }, + parent:{ + flex:1, + justifyContent:'center', + alignItems:'center', + backgroundColor:"#000000AE" + } +}) \ No newline at end of file diff --git a/screens/configurations/About.js b/screens/configurations/About.js new file mode 100644 index 00000000..09a52129 --- /dev/null +++ b/screens/configurations/About.js @@ -0,0 +1,70 @@ + +import React, {Component} from 'react'; +import { + Platform, + StyleSheet, + AppState, + FlatList, + ProgressBarAndroid, + TouchableOpacity, + Text, + Image, + View, + Animated, + Linking, + StatusBar +} from 'react-native'; +import ActionButton from 'react-native-action-button'; +import Icon from 'react-native-vector-icons/MaterialIcons'; +import {responsiveFontSize,responsiveHeight,responsiveWidth} from 'react-native-responsive-dimensions'; +import {credrequester} from './../../route.json'; +import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; +import BaseScreen from './../../screens/BaseScreen' +import Button from 'apsl-react-native-button' +import {readUser} from "../../webservice/AuthApi"; +import Calendar from 'react-native-calendario'; +let route=require('./../../route.json') +let moment=require('moment-timezone') +let theme=require('./../../utils/theme.json') +import {primary,primaryDark,accent,purpleLight,primaryLight} from './../../utils/theme.json'; +import IndicatorViewPager from "rn-viewpager/viewpager/IndicatorViewPager"; +import {PagerTabIndicator,PagerTitleIndicator,PagerDotIndicator} from 'rn-viewpager' +import I18n from 'react-native-i18n' +require('./../../utils/Translations') + +import { SinglePickerMaterialDialog } from 'react-native-material-dialog'; +import {Header} from "react-native-elements"; +import {withNavigationFocus} from "react-navigation"; +import { Appbar, Paragraph, Menu, Divider, Provider } from 'react-native-paper'; +import {videoUrl} from '../../webservice/IlinkConstants.js' +export default class About extends React.Component{ + static navigationOptions =({navigation})=> { + const {routeName}=navigation.state + return { + header:null + }}; + render(){ + return ( + + {this.props.navigation.pop()}} + /> + + + + + + {I18n.t("ABOUT_TEXT")} + + + + + + + + Version 1.0.0 + Copyright iLinkWorld all reserved + + ) + } + } \ No newline at end of file diff --git a/screens/configurations/Configurations.js b/screens/configurations/Configurations.js new file mode 100755 index 00000000..a7829bfa --- /dev/null +++ b/screens/configurations/Configurations.js @@ -0,0 +1,85 @@ +import React,{Component} from 'react' +import {StyleSheet,Text,View,Alert} from 'react-native' +import BaseScreen from "../BaseScreen"; +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' +import {Dropdown} from 'react-native-material-dropdown' +import {disconnect} from './../../webservice/AuthApi' +const theme=require('./../../utils/theme.json'); +const route=require('./../../route.json') +import I18n,{getLanguages} from 'react-native-i18n' +import Configuration from "../../webservice/persistences/Configuration"; +import Button from "apsl-react-native-button" +require("./../../utils/Translations") +import {IlinkEmitter} from "./../../utils/events" +import {Header} from "react-native-elements"; +import Icon from 'react-native-vector-icons/MaterialIcons'; +import { TouchableOpacity } from 'react-native-gesture-handler'; + +export default class Configurations extends BaseScreen{ + + static navigationOptions = { + headerTitle: I18n.t('CONFIGURATIONS'), + drawerIcon: ({ tintColor }) => ( + + ), + }; + constructor(props){ + super(props,true) + this.state=this.initState() + this.configuration=new Configuration(); + } + + initState(){ + let language=[]; + language.push({name:I18n.t('langue.english'),value:'en'}); + language.push({name:I18n.t('langue.french'),value:'fr'}); + + return{ + languages:language + } + + } + render() { + console.log(this.state) + return ( + + + + {I18n.t("CHOOSE_LANGUAGE")} + { + I18n.locale = value + this.setState({language:value}) + this.configuration.setCurrentLangue(data[index]) + IlinkEmitter.emit('langueChange') + }} + valueExtractor={(value)=>value.value} + labelExtractor={(value)=>value.name} + /> + + + + ); + } +} +const styles=StyleSheet.create({ + container:{ + flex:1, + backgroundColor:'white' + }, + +}) \ No newline at end of file diff --git a/screens/drawer/DrawerListOption.js b/screens/drawer/DrawerListOption.js new file mode 100755 index 00000000..6eadc236 --- /dev/null +++ b/screens/drawer/DrawerListOption.js @@ -0,0 +1,104 @@ +import React, { Component,PureComponent } from 'react'; +import PropTypes from 'prop-types'; +import {StyleSheet,Text,View,FlatList} from 'react-native'; +import {responsiveFontSize,responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions'; + +export class DrawerItem extends React.PureComponent{ + + render(){ + return ( + + {this.props.title} + {this.props.description} + + {this.props.time} + + + + ) + + } + +} +export class DrawerListItem extends PureComponent{ + state = {selected: (new Map(): Map)}; + + _keyExtractor = (item, index) => item.id; + + _onPressItem = (id: string) => { + this.setState((state) => { + const selected = new Map(state.selected); + selected.set(id, !selected.get(id)); // toggle + return {selected}; + }); + }; + _renderItem = ({item}) => ( + + ); + + render() { + return ( + + ); + } +} + +const style=StyleSheet.create({ + content:{ + width:responsiveWidth(100), + height:responsiveHeight(12), + borderBottomColor: '#FFFFFF', + flex:1, + flexDirection: 'column', + paddingLeft: 10, + paddingTop: 10, + + }, + bottomSeparator:{ + width:responsiveWidth(80), + height:1, + justifyContent:'center', + alignSelf: 'center', + + backgroundColor:'#4f5b62', + }, + title:{ + color:'#000', + fontSize:responsiveFontSize(2.2) + }, + description:{ + fontSize:responsiveFontSize(1.8), + color:'#4f5b62', + + }, + timeContent:{ + justifyContent:'flex-end', + flex:1, + alignItems: 'flex-end', + }, + time:{ + fontWeight: 'bold', + marginRight: 20, + marginBottom: 10, + color:'#263238', + }, + }); \ No newline at end of file diff --git a/screens/drawer/HeaderDrawer.js b/screens/drawer/HeaderDrawer.js new file mode 100755 index 00000000..80f3bff1 --- /dev/null +++ b/screens/drawer/HeaderDrawer.js @@ -0,0 +1,17 @@ +import React, { Component } from 'react' +import {View,Text,StyleSheet} from 'react-native'; +export default class HeaderDrawer extends Component { + render() { + return ( + + + + ) + } +} + +const style=StyleSheet.create({ + content:{ + backgroundColor:'#1023fe' + } +}) \ No newline at end of file diff --git a/screens/drawer/ListOptions.js b/screens/drawer/ListOptions.js new file mode 100755 index 00000000..b59d3196 --- /dev/null +++ b/screens/drawer/ListOptions.js @@ -0,0 +1,58 @@ +import React, { Component,PureComponent } from 'react'; + +import {Platform, StyleSheet,FlatList, Text, View} 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 {HistoryListItem} from '../history-request/HistoryItem'; + + +export class ListOptions extends Component{ + + render () { + return ( + + + + console.log("notes tapped!")}> + + + {}}> + + + + + + ) + } + } + + const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + 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, + }, + }); + \ No newline at end of file diff --git a/screens/groupes/SuperViseurGroupeHome.js b/screens/groupes/SuperViseurGroupeHome.js new file mode 100755 index 00000000..3c4a9202 --- /dev/null +++ b/screens/groupes/SuperViseurGroupeHome.js @@ -0,0 +1,564 @@ +import React,{Component} from 'react' +import {StyleSheet,View,PixelRatio,Text,RefreshControl, + FlatList,ProgressBarAndroid,ProgressViewIOS,Alert,StatusBar} from 'react-native' +import BaseScreen from './../BaseScreen' +import {responsiveHeight,responsiveWidth} from 'react-native-responsive-dimensions' +import {PagerTabIndicator, IndicatorViewPager, PagerTitleIndicator, PagerDotIndicator} from 'rn-viewpager'; +import {listAllMembers} from './../../webservice/MemberGeolocatedApi' +import {listFreeCodesSuperViseur} from './../../webservice/NetworkApi' +import {readUser, listDemandAdhesion, acceptDemandAdhesion, deleteUser} from "../../webservice/AuthApi"; +import Icon from 'react-native-vector-icons/MaterialIcons' +import Swipeout from 'react-native-swipeout' +import {theme} from "../BaseScreen"; +require("./../../utils/Translations"); +import I18n from 'react-native-i18n' +const route=require('./../../route.json') +import LottieView from 'lottie-react-native'; // if you have "esModuleInterop": true + +import { Card, CardTitle, CardContent, CardAction, CardButton, CardImage } from 'react-native-material-cards' +let moment=require('moment-timezone'); +import 'moment/locale/fr' +import 'moment/locale/fr' +import 'moment/locale/es-us' +import 'moment/locale/en-au' +import 'moment/locale/en-ca' +import 'moment/locale/en-ie' +import 'moment/locale/en-il' +import 'moment/locale/en-nz' +import {Header} from "react-native-elements"; +import {IlinkEmitter} from "../../utils/events"; + + +var users=null; +var chart=null; + +export default class SuperViseurGroupeHome extends BaseScreen{ + static tabsStyle: { + tabBarButtonColor: '#ff0000' + } + static navigatorStyle = { + tabBarHidden: false, + topTabTextColor: '#ffffff', + topTabsHeight: 70, + topTabTextFontFamily: 'BioRhyme-Bold', + selectedTopTabTextColor: '#ff505c', + + statusBarColor:theme.primaryDark, + navBarBackgroundColor:theme.primary, + navBarTextColor:'white', + navBarButtonColor:'white', + // Icons + topTabIconColor: '#ffffff', + selectedTopTabIconColor: '#ff505c', + + // Tab indicator + selectedTopTabIndicatorHeight: PixelRatio.get() * 2, + selectedTopTabIndicatorColor: '#ff505c', + }; + static options(passProps){ + return { + topBar:{ + rightButtons:[] + } + } + + } + static navigationOptions =({navigation})=> { + return { + title:I18n.t("GROUP_MANAGE"), + drawerLabel: navigation.getParam("name", I18n.t('GROUP_MANAGE')), + drawerIcon: ({tintColor}) => ( + + ), + }}; + constructor(props){ + super(props,true); + this.state=SuperViseurGroupeHome.initState(); + + readUser().then((user)=>{ + this.setState({user:user}) + listFreeCodesSuperViseur(user.code_membre).then((codes)=>{ + console.log("codes",codes) + if(codes.success!=undefined){ + this.setState({freeCodes:codes.networks}) + } + }) + }); + listAllMembers().then((data)=>{ + console.log(data); + if(data!==null){ + this.setState({listmembers:data,isLoading:false,isRefreshing:false}) + } + }); + this._populateIcons().then((values)=>{ + this.setState({usersicon:values[0],charticon:values[1]}) + }); + listDemandAdhesion().then((items)=>{ + console.log(items) + let filtereds=[]; + items.forEach((item)=>{ + let b=false; + filtereds.forEach((f)=>{ + if(f.code_membre===item.code_membre){ + b=true; + } + }) + if(!b)filtereds.push(item) + + }) + console.log('filtered',filtereds) + if(items!==undefined){ + this.setState({demands:filtereds,isLoadingDemand:false}) + } + }) + IlinkEmitter.on("langueChange", this.updateLangue.bind(this)) + + } + updateLangue(){ + this.props.navigation.setParams({name:I18n.t('GROUP_MANAGE')}) + this.forceUpdate() + } + static initState(){ + return ({ + enabledListMembers:true, + listmembers:[], + usersicon:null, + isLoadingDemand:true, + charticon:null, + isRefreshing:false, + user:{}, + freeCodes:[], + isLoading:true, + }) + } + render() { + return ( + + + + {this.state.isLoading?this._renderLoadingItems():this._renderListMembers()} + {this.state.isLoadingDemand?this._renderLoadingItems():this.state.user.category==='hyper'? + this._renderListDemandAdhesion():this._renderListCodeUnused()} + + + ); + + } + + _populateIcons = function () { + return new Promise(function (resolve, reject) { + Promise.all( + [ + Icon.getImageSource('users', 30), + Icon.getImageSource('chart-pie', 30), + ] + ).then((values) => { + users = values[0]; + chart=values[0]; + resolve(values); + }).catch((error) => { + console.log(error); + reject(error); + }).done(); + }); + }; + + _renderTabIndicatorAdmin() { + + let tabs = [{ + text: I18n.t('MEMBER_LIST'), + iconSource:this.state.usersicon + },{ + text:I18n.t('MEMBERSHIP_REQUEST'), + iconSource:this.state.charticon + }] + return ; + } + + _renderTabIndicator() { + + let tabs = [{ + text: I18n.t('MEMBER_LIST'), + iconSource:this.state.usersicon + } + ] + return ; + } + + _renderListMembers() { + return ( + + {return ( + + + + {I18n.t('NO_MEMBERS')} + + )} + + } + refreshControl={ + { + this.setState({isRefreshing:true}) + listAllMembers().then((data)=>{ + console.log("from refresh",data) + if(data!==null && data.datas){ + this.setState({listmembers:data,isLoading:false,isRefreshing:false}) + } + }); + }} + /> + } + renderItem={({item}) => + this.renderMembers(item) + } + + /> + ) + + } + +_renderLoadingItems() { + return ( + + ) + + +} + + +renderMembers(item) { + var re= moment.tz(item.created_at,'Etc/GMT+0').format(); + re=moment(re).fromNow(); + if(true){ + return ( + + + + + + + +{item.phone} + + + + + + { + Alert.alert( + I18n.t("TITLE_SUPPRESS_CONFIRM"), + I18n.t("TEXT_SUPPRESS_CONFIRM"), + [ + {text: I18n.t('NO'), onPress: () =>{}}, + {text:I18n.t('YES'), onPress: () => { + deleteUser(item).then(()=>{ + this.setState({isLoading:true}) + listAllMembers().then((data)=>{ + console.log(data) + if(data!==null){ + this.setState({listmembers:data,isLoading:false,isRefreshing:false}) + } + }); + }) + }, + style: 'cancel'}, + ], + ) + }} + title={I18n.t('DELETE_GEOLOCATED_USER')} + color="crimson" +/> + +) + }else + return( + {}}, + {text: 'Oui', onPress: () => { + deleteUser(item).then(()=>{ + this.setState({isLoading:true}) + listAllMembers().then((data)=>{ + if(data!==null){ + this.setState({listmembers:data,isLoading:false}) + } + }); + }) + }, + style: 'cancel'}, + ], + ) + } + } + + ]} + buttonWidth={responsiveWidth(40)} + > + + {item.firstname} + + {item.lastname} + + {item.phone} + + + + {item.balance} + + + + + ) +} + /* + + {re} + */ + + + _renderListDemandAdhesion() { + if(this.state.user.category==='hyper'){ + if(this.state.demands.length>0) { + return ( + this._renderAddhesionItem(item)} + refreshControl={ + { + this.setState({isRefreshing:true}) + listAllMembers().then((data)=>{ + console.log("from refresh",data) + if(data!==null && data.datas){ + this.setState({listmembers:data,isLoading:false,isRefreshing:false}) + } + }); + }} + /> + } + ListEmptyComponent={()=>{return ( + + + + {I18n.t('NO_MEMBERS')} + + )}} + /> + ) + }else{ + return ( + {I18n.t('NO_DEMAND_ADHESION')} + ) + + } + } + } + + _renderLoadingDemandItems() { + if(this.state.freeCodes.length>0) { + return ( + this._renderAddhesionItem(item)} + /> + ) + }else{ + return ( + {I18n.t('NO_GEO_POINT_CODE')} + ) + + } + } + + _renderAddhesionItem(item) { + return ( + + + {I18n.t('NAME')} : {item.lastname} + {I18n.t('PHONE_NUMBER')} : {item.phone} + {I18n.t('EMAIL')} : {item.email} + {I18n.t('NETWORK')} : {item.network} + + + + { + acceptDemandAdhesion(item).then((data)=>{ + Alert.alert(I18n.t('ACTIVATE_ACCOUNT'),I18n.t('THE_ACCOUNT')+' '+item.lastname+" "+I18n.t('ACTIVATED'),[{ + text:"Ok" + }]) + let datas=this.state.demands + datas.splice( datas.indexOf(item), 1 ); + this.setState({demands:datas}) + }) + + }} + color={"green"} + /> + {}} + /> + + + ) + } + + _renderListCodeUnused() { + if(this.state.freeCodes.length>0) { + return ( + this._renderFreeCodeItem(item)} + /> + ) + }else{ + return ( + {I18n.t('NO_GEO_POINT_CODE')} + ) + + } + } + + _renderFreeCodeItem(item) { + console.log(item) + return ( + + Contact : {item.phone} + code Membre : {item.code_membre} + code Validation : {item.validation_code} + + ) + + } +} +const styles=StyleSheet.create({ + container:{ + flex:1, + backgroundColor:'white' + }, + fromNow:{ + color:theme.accentLight + }, + callIcon:{ + marginRight:5, + }, + phone:{ + textAlign:'center', + color:"white" + }, + balanceMember:{ + marginLeft:7, + fontSize:18, + fontWeight:"bold", + color:theme.primary, + }, + balanceIcon:{ + }, + name:{ + color:'black', + fontSize:20, + margin:20, + fontWeight:'bold' + }, + surname:{ + fontSize:17, + marginLeft:20, + }, + text:{ + fontSize:17, + fontWeight:'bold', + }, + lottie: { + width: 248, + height: 248 + }, +}) \ No newline at end of file diff --git a/screens/groupes/superviseurCodeDispoList.js b/screens/groupes/superviseurCodeDispoList.js new file mode 100755 index 00000000..e69de29b diff --git a/screens/help/Help.js b/screens/help/Help.js new file mode 100755 index 00000000..12369501 --- /dev/null +++ b/screens/help/Help.js @@ -0,0 +1,135 @@ +import React,{ Component} from 'react'; +import {StyleSheet,View,Text,Image} from 'react-native'; +import {PagerDotIndicator,IndicatorViewPager} from 'rn-viewpager'; +import BaseScreen from './../BaseScreen' +import I18n from 'react-native-i18n' +require('./../../utils/Translations') +const theme=require('./../../utils/theme.json') +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' +//let rootHelp='./../../datas/img/slider/slide'; +const guideUser=[ + /* { + title:I18n.t('TEXT_GUIDE_USER_1'), + path:require("./../../datas/img/slider/guide_user_1.jpg")}, + + { title:I18n.t('TEXT_GUIDE_USER_2'), + path:require("./../../datas/img/slider/guide_user_3.jpg"), + }, + { + title:I18n.t('TEXT_GUIDE_USER_4'), + path:require("./../../datas/img/slider/guide_user_4.jpg"), + + }, + { + title:I18n.t('TEXT_GUIDE_USER_7'), + path:require("./../../datas/img/slider/guide_user_7.jpg"), + }, + { + title:I18n.t("TEXT_GUIDE_USER_3"), + path:require("./../../datas/img/slider/guide_user_2.jpg"), + }, + { + title:I18n.t('TEXT_GUIDE_USER_5'), + path: require("./../../datas/img/slider/guide_user_5.jpg"), + }, + + { + title:I18n.t('TEXT_GUIDE_USER_6'), + path:require("./../../datas/img/slider/guide_user_6.jpg"), + }, + { + title:I18n.t('TEXT_GUIDE_USER_6'), + path:require("./../../datas/img/slider/guide_user_8.jpg"), + },*/ +] +const guideAgent=[ + /* { + title:I18n.t('TEXT_GUIDE_USER_10'), + path:require("./../../datas/img/slider/guide_user_10.jpg")}, + { + title:I18n.t('TEXT_GUIDE_USER_11'), + path:require("./../../datas/img/slider/guide_user_11.jpg")},*/ +] +export default class Help extends BaseScreen{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + + + constructor(props){ + super(props,true) + this.state={ + items:[] + } + const { navigation } = this.props; + this.type = navigation.getParam('type',0); + + } + componentDidMount(){ + this.renderItems() + } + + render(){ + const listhelp=this.type===1?guideAgent:guideUser; + return ( + + + + + + {listhelp.map((item,index)=>{ + return ( + + {item.title} + + ) + } + )} + + + ) + } + renderItems(){ + let items=[]; + for(let i=1;i<=this.type===1?guideAgent.length:guideUser.length;i++){ + items.push(i); + } + this.setState({items:items}) + } + _renderDotIndicator() { + return ; + } + +} +class HelpPage extends React.PureComponent{ + constructor(props){ + super(props) + console.log('in contructeur') + console.log(props.path) + } + render(){ + return ( + + + + + ) + } +} diff --git a/screens/help/HelpMenu.js b/screens/help/HelpMenu.js new file mode 100755 index 00000000..bc9ac21b --- /dev/null +++ b/screens/help/HelpMenu.js @@ -0,0 +1,105 @@ +import React,{ Component} from 'react'; +import Button from 'apsl-react-native-button'; +import {StyleSheet, View, Text, Image, BackHandler, Alert} from 'react-native'; +import {PagerDotIndicator,IndicatorViewPager} from 'rn-viewpager'; +import BaseScreen from './../BaseScreen' +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' +import {theme} from "../BaseScreen"; +import I18n from 'react-native-i18n' +const route=require('./../../route.json'); +let rootHelp='./../../datas/img/slider/slide'; + + +export default class HelpMenu extends BaseScreen { + sizeHelp = 10; + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden: true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + + constructor(props) { + super(props, true); + this.state = { + items: [] + } + + } + render(){ + return( + + + + + + + {I18n.t('GUIDE_TITLE')} + + + + + + ) + } +} +const styles=StyleSheet.create({ + container:{ + flex:1, + justifyContent:'center', + backgroundColor:theme.primary + }, + title:{ + fontSize:20, + alignSelf:"center", + fontWeight:'bold', + color:'white' + }, + btnStyle:{ + borderColor:'transparent', + backgroundColor:theme.primaryDark, + height:48, + marginRight:responsiveWidth(5), + marginLeft:responsiveWidth(5) + + }, + btnTextStyle:{ + fontSize:18, + color:'white', + fontWeight:'bold' + }, + viewlogo:{ + width:responsiveWidth(100), + flexDirection:'row', + marginBottom:20, + justifyContent:'center', + alignItems:'center' + }, + img_style:{ + resizeMode:'contain', + width:responsiveWidth(90) + } +}); diff --git a/screens/history-request/History.js b/screens/history-request/History.js new file mode 100755 index 00000000..ab39d227 --- /dev/null +++ b/screens/history-request/History.js @@ -0,0 +1,741 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + * @flow + */ + +import React, {Component} from 'react'; +import {Platform, StyleSheet,AppState,FlatList,ProgressBarAndroid,TouchableOpacity, Text, View} from 'react-native'; +import ActionButton from 'react-native-action-button'; +import Icon from 'react-native-vector-icons/FontAwesome5'; +import {responsiveFontSize,responsiveHeight,responsiveWidth} from 'react-native-responsive-dimensions'; +import {HistoryListItem,HistoryItemSectionned} from './HistoryItem'; +import {credrequester} from './../../route.json'; +import {loadDemandeCredit,loadMyDemandeCredit} from './../../webservice/HistoryRequestApi'; +import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; +import BaseScreen from './../../screens/BaseScreen' +import Button from 'apsl-react-native-button' +import {readUser} from "../../webservice/AuthApi"; + +let route=require('./../../route.json') +let moment=require('moment-timezone') +let theme=require('./../../utils/theme.json') +import {primary,primaryDark,accent,purpleLight,primaryLight} from './../../utils/theme.json'; +import IndicatorViewPager from "rn-viewpager/viewpager/IndicatorViewPager"; +import {PagerTabIndicator,PagerTitleIndicator,PagerDotIndicator} from 'rn-viewpager' +type Props = {}; +var sortIcons; +var sectionIcons; +import I18n from 'react-native-i18n' +import {IlinkEmitter} from "../../utils/events"; +require('./../../utils/Translations') +import { SinglePickerMaterialDialog } from 'react-native-material-dialog'; +import {Header} from "react-native-elements"; +import {withNavigationFocus} from "react-navigation"; +class History extends BaseScreen { + static navigatorStyle = { + navBarBackgroundColor: primary, + statusBarColor: primaryDark, + navBarTextColor: '#FFFFFF', + navBarButtonColor: '#FFFFFF', + contextualMenuStatusBarColor:theme.accent, + contextualMenuBackgroundColor: theme.accentLight, + contextualMenuButtonsColor: '#ffffff' + + }; + static navigationOptions =({navigation})=> { + return { + title:I18n.t('CREDIT_MANAGE'), + drawerLabel: navigation.getParam('name',I18n.t('CREDIT_MANAGE')), + drawerIcon: ({ tintColor }) => ( + + ), + }}; + + static options(passProps){ + return { + topBar:{ + visible:true, + drawBehind:false, + background:{ + color:theme.primaryDark + } + } + } + } + + constructor(props) { + super(props, true); + this.state = this.initState(); + readUser().then((user)=>{this.setState({user:user})}) + this._populateIcons().then(() => { + }); + IlinkEmitter.on("langueChange", this.updateLangue.bind(this)) + this.refreshData(); + }; + + navigationButtonPressed({ buttonId }) { + if (buttonId === 'id') { + this.showFilter(); + }else if(buttonId==='sectionned'){ + this.setState({isSectionned:!this.state.isSectionned}) + } + } + updateLangue(){ + this.props.navigation.setParams({name:I18n.t('CREDIT_MANAGE')}) + this.forceUpdate() + } + onNavigatorEvent(event) { + if (event.type === 'NavBarButtonPress') { + if (event.id === 'id') { + this.showFilter(); + }else if(event.id==='sectionned'){ + this.setState({isSectionned:!this.state.isSectionned}) + } + }else{ + switch(event.id) { + case 'willAppear': + this.refreshData() + break; + break; + case 'didAppear': + break; + case 'willDisappear': + break; + case 'didDisappear': + break; + case 'willCommitPreview': + break; + } + } + } + + showFilter() { + + /*if (this.state.filter) { + Navigation.mergeOptions(route.stackRoot, + { + topBar: { + rightButtons: [ + { + title: 'Non Traité', + }, + { + title: 'Traité', + }, + { + title: 'Période', + }, + { + title: 'Tout', + }, + { + title: 'Trier par', + }, + { + title: '', + }, + ], + onButtonPressed: (index) => { + let data = this.state.conserve + console.log(index) + console.log(data); + + if (data !== null) { + let filtre = ""; + if (index < 2) { + switch (index) { + case 0: + filtre = I18n.t('NO_TREAT') + break; + case 1: + filtre = I18n.t('TREAT'); + break; + + } + let fi = data.filter(item => item.statut === filtre) + this.setState({listdata: fi, filter: true}) + } else if (index === 2) { + this.setState({panelVisible: true}) + } else { + this.setState({listdata: data, filter: false}) + } + } + } + }} + ); + + } else { + Navigation.mergeOptions(route.stackRoot, + { + topBar: { + rightButtons: [ + { + title: I18n.t('NO_TREAT'), + }, + { + title: I18n.t('TREAT'), + } + , { + title: I18n.t('PERIOD'), + }, + { + title: '', + }, + { + title: 'Trier par', + }, { + title: '', + }, + ], + onButtonPressed: (index) => { + let data = this.state.conserve + if (data != null && data.length > 0) { + var filtre = ""; + if (index < 2) { + switch (index) { + case 0: + filtre = I18n.t('NO_TREATED'); + break; + case 1: + filtre = I18n.t('TREATED'); + break; + + } + let fi = data.filter(item => item.statut === filtre) + this.setState({listdata: fi, filter: true}) + } else if (index === 2) { + this.setState({panelVisible: true}) + this.props.navigator.showContextualMenu( + { + rightButtons: [ + { + title: I18n.t('CANCEL'), + }, + { + title: I18n.t('FILTER'), + }, + + ], + onButtonPressed: (index) => { + console.log(index) + + switch (index) { + case 1: + let {dateend, datestart} = this.state; + this.onfilterPress(); + } + this.setState({panelVisible: false}); + } + } + ); + } else { + this.setState({listdata: data, filter: false}) + } + } + } + } + } + ); + + }*/ + } + + _populateIcons = function () { + return new Promise(function (resolve, reject) { + Promise.all( + [ + Icon.getImageSource('sort', 30), + Icon.getImageSource('layer-group', 30), + ] + ).then((values) => { + sortIcons = values[0]; + sectionIcons=values[1]; + resolve(true); + }).catch((error) => { + console.log(error); + reject(error); + }).done(); + }); + }; + + initState() { + return { + user:{}, + listdata: [], + listdataSend:[], + conserve: [], + appState: AppState.currentState, + filter: false, + sortIcons: null, + panelVisible: false, + filder_disable: true, + datestartformated: 'La date de debut', + dateendformated: 'La date de fin', + datestart: null, + dateend: null, + isLoaded:false, + isSectionned:false, + isDateTimePickerVisible: false, + isDateEndTimePickerVisible: false + } + } + + updateList(data: Array) { + if (!this.state.filter) { + let rev = data.reverse() + this.setState({listdata: rev, conserve: rev, isLoaded: true}); + } + } + updateMyList(data) { + if (!this.state.filter) { + let rev = data.reverse() + this.setState({listdataSend: rev, conserve: rev, isLoaded: true}); + } + + } + componentDidMount() { + AppState.addEventListener('change', this._handleAppStateChange); + } + + componentWillUnmount() { + AppState.removeEventListener('change', this._handleAppStateChange); + + } + _handleAppStateChange = (nextAppState) => { + if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') { + } + this.setState({appState: nextAppState}); + } + renderList(list:Array) { + if(this.state.isLoaded){ + let data = list; + if(data!==null) { + if (data.length > 0) { + return ({this.refreshData()}} + isRefreshing={this.state.isRefreshing} + navigator={this.props.navigation} + style={styles.listbackground}/>) + } else if (this.state.filter) { + + return ( + + {I18n.t('NO_ITEM_REQUEST')} + + ) + }else if(data.length===0){ + return ( + + {I18n.t('NO_ITEM_REQUEST')} + + ) + } else { + return ( + + + {I18n.t('LOADING_DOTS')} + + ) + } + }else { + return ( + + {I18n.t('EMPTY_LIST_REQUEST')} + + ) + + } + + }else if(list.length===0){ + return ( + + Aucuns éléments ne corresponds + + ) + } + + } + componentDidUpdate(prevProps) { + if (prevProps.isFocused !== this.props.isFocused && this.props.isFocused) { + this.refreshData() + } + } + + render() { + + return ( + + + + {this.state.user.category!=="hyper"?this._renderListDemandsSend():null} + {this.state.user.category!=="geolocated"?this._renderListDemandReceive():null} + + + ); + + } + renderSectionnedList(list) { + + if (this.state.isLoaded) { + let data =list; + if (data !== null) { + if (data.length > 0) { + return ( ) + } else if (this.state.filter) { + + return ( + + {I18n.t('NO_ITEMS_REQUEST')} + + ) + } else { + return ( + + + {I18n.t('LOADING_DOTS')} + + ) + } + } else { + return ( + + {I18n.t('EMPTY_LIST_REQUEST')} + + ) + + } + } + } + renderLoading(){ + return ({I18n.t('LOADING_DOTS')}) + } + showSlidingUpPanel() { + /* return ( this.panel = c} + draggableRange={{top: responsiveHeight(100), bottom: 0}} + onRequestClose={() => this.setState({panelVisible: false})}> + + {this.showSlidingUpView()} + + ) + } + + showSlidingUpView() { + /* return ( + + + this._handleDatePicked(fromdate,untildate)} + dayHeadings={['D', 'L', 'M', 'M', 'J', 'V', 'S']} + maxMonth={12} + startdate={moment('20180101').format('YYYYMMDD')} + untilDate='20181231' + minDate='20180101' + maxDate='20181231' + buttonColor='green' + showReset={false} + showClose={false} + placeHolderStart= 'Date de debut' + placeHolderUntil= 'Date fin' + selectedBackgroundColor= 'green' + selectedTextColor='white' + /> + + + + )*/ + } + + onfilterPress() { + let {datestart, dateend} = this.state; + let data = this.state.conserve; + + if (data !== null) { + data = data.filter(item => { + let mda = moment(item.dateAjout) + return moment(item.dateAjout).isAfter(moment(datestart).toDate()) && (mda.isBefore(moment(dateend).toDate())) + }) + + this.setState({listdata: data, panelVisible: false, filter: true}) + } + + } + + _showDateTimePicker = (type) => { + if (type === 1) + this.setState({ + isDateTimePickerVisible: true + }); + else this.setState({ + isDateEndTimePickerVisible: true + }); + } + _showDateEndPicker = () => this.setState({isDateEndTimePickerVisible: true}); + + _hideDateTimePicker = () => this.setState({isDateTimePickerVisible: false, isDateEndTimePickerVisible: false}); + _handleDatePicked = (fromdate, enddate) => { + console.log([fromdate,enddate]); + + this.setState({ + datestart: fromdate, + datestartformated: moment(fromdate).format('dddd Do ,MMMM YYYY'), + dateend: enddate, + dateendformated: moment(enddate).format('dddd Do ,MMMM YYYY') + }); + let startdate = this.state.datestart; + let enddatemo = moment(enddate); + let dif = moment(enddatemo).diff(startdate); + if (dif < 0) { + this.setState({filder_disable: true}); + this.props.navigator.showSnackbar({ + text: I18n.t('DATE_WRONG'), + duration: 'long', + backgroundColor: 'red', + textColor: 'white' + }) + } else { + this.setState({filder_disable: false}); + } + + this._hideDateTimePicker(); + }; + + printOptions() { + if(this.state.user.category==="hyper"){ + return ( + { + + }}> + + + ); + }else{ + return ( + { + this.props.navigation.navigate(route.credrequester) + }} + > + + + { + + }}> + + + ) + } + } + + _renderListDemandsSend() { + return ( + { + this.state.isLoaded? + this.state.isSectionned? + this.renderSectionnedList(this.state.listdataSend): + this.renderList(this.state.listdataSend):this.renderLoading() + } + {this.printOptions()} + {this.showSlidingUpPanel()} + + ) + } + + _renderListDemandReceive() { + return ( + { + this.state.isLoaded? + this.state.isSectionned? + this.renderSectionnedList(this.state.listdata): + this.renderList(this.state.listdata):this.renderLoading() + } + {this.printOptions()} + {this.showSlidingUpPanel()} + + ) + } + + _renderTabGeolocated() { + let tabs = [{ + text: I18n.t('DEMANDE_SEND'), + }] + return ; + } + + _renderTabHyper() { + let tabs = [{ + text:I18n.t('DEMANDE_RECEIVE'), + }] + return ; + } + + _renderTabs() { + let tabs = [{ + text: I18n.t('MY_DEMANDE'), + iconSource:this.state.usersicon + },{ + text: I18n.t('DEMANDE_RECEIVE'), + iconSource:this.state.charticon + }] + return ; + } + + + refreshData() { + this.setState({isRefreshing:true}) + loadDemandeCredit().then((data) => { + if(data.success!==undefined) { + this.updateList(data.demands); + this.setState({isRefreshing:false}) + } + }); + loadMyDemandeCredit().then((data)=>{ + if(data.success!==undefined) { + this.setState({isRefreshing:false}) + this.updateMyList(data.demands) + } + }) + } +} +export default withNavigationFocus(History); +const datefilter=StyleSheet.create({ + titleHeader:{ + fontSize:20, + fontWeight:'bold', + color:'black', + flex:1, + }, + datetitle:{ + fontSize:17, + color:'black', + marginLeft:responsiveWidth(2), + }, + datetext:{ + fontSize:16, + marginLeft:responsiveWidth(5) + }, + content:{ + flex:2, + + }, + btnContainer:{ + flexDirection:'row', + width:responsiveWidth(100), + alignSelf:'flex-end', + flex:2, + }, + btn:{ + flex:1, + borderColor:'transparent', + borderRadius:0, + }, + btntext:{ + fontWeight:'bold', + color:accent + }, + container:{ + flex:1, + justifyContent:'space-evenly' + } +}) +const styles = StyleSheet.create({ + slidingup:{ + width:responsiveHeight(100), + }, + root:{ + flex:1, + }, + container: { + flex: 1, + backgroundColor:'white', + justifyContent: 'center', + alignItems: 'center', + }, + emptylist:{ + flex:1, + justifyContent:'center', + alignItems:'center' + }, + 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, + }, + dateText:{ + marginTop:20, + marginLeft:responsiveWidth(13), + marginBottom:20, + fontSize:17, + }, + titlecontent:{ + fontSize:17, + marginLeft:responsiveWidth(10), + + color:'black' + }, + content:{ + flex:8 + }, + + title:{ + fontSize:20, + marginLeft:20, + marginTop:20, + color:'black', + fontWeight:'bold' + }, +}); diff --git a/screens/history-request/HistoryItem.js b/screens/history-request/HistoryItem.js new file mode 100755 index 00000000..55857337 --- /dev/null +++ b/screens/history-request/HistoryItem.js @@ -0,0 +1,245 @@ +import React, { Component,PureComponent } from 'react'; +import PropTypes from 'prop-types'; +import {StyleSheet,Text,View,FlatList,TouchableOpacity,SectionList,RefreshControl} from 'react-native'; +import {responsiveFontSize,responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions'; +import {convertDateToHumanText} from './../../utils/DateUtils'; +import Icon from 'react-native-vector-icons/FontAwesome5'; +var moment=require('moment-timezone') +const momentJS=require('moment') +import I18n from "react-native-i18n" + +import 'moment/locale/fr' +import 'moment/locale/es-us' +import 'moment/locale/en-au' +import 'moment/locale/en-ca' +import 'moment/locale/en-ie' +import 'moment/locale/en-il' +import 'moment/locale/en-nz' + +let route=require('./../../route.json'); +var theme=require('./../../utils/theme.json'); + +export class HistoryItem extends React.Component{ + + constructor(props){ + super(props); + this.state=this.initState(); + } + initState(){ + var textTitle=' Transaction '+this.props.selfData.id; + var textDescription=I18n.t('PHONE')+' '+this.props.selfData.phone+" "+I18n.t('DEMAND_TEXT_FIRST_PART')+' '+(this.props.selfData.montant)+' '+I18n.t('TO_')+' '; + textDescription+=this.props.selfData.reseau; + var today=new Date(); + var l=this.props.selfData.date_creation; + let t=this.props.selfData.status; + moment.locale(I18n.locale) + var re= moment.tz(this.props.selfData.date_creation,'Etc/GMT+0').format(); + re=moment(re) + return { + title:textTitle, + description:textDescription, + status:this.props.selfData.status==='1'?I18n.t('TREAT'):I18n.t('NO_TREAT'), + time:re.fromNow(), + navigator:this.props.navigator, + type:t, + colorstate:t==='1'?'green':'red' + } + }; + + render(){ + return ( + + this.props.navigator.navigate(route.historyItemDetails, + {item:this.props.selfData} + + )}> + + {this.state.title} + {this.state.description} + + {this.state.status} + {this.state.time} + + + + + + ) + + } + +} +export class HistoryItemSectionned extends PureComponent{ + _keyExtractor = (item, index) => item.id; + _renderItem = ({item}) => ( + + ); + constructor(props){ + super(props); + this.state=this.initState(); + } + render() { + return ( + + ( + this.onPressedHeader(type)} style={{ + backgroundColor:theme.accent, + justifyContent:'center', + alignItems:'center', + flexDirection:'row',flex:1,height:70,width:responsiveWidth(100)}}> + + {title} + {size} demande(s) + + + + )} + style={style.listStyle} + extraData={this.state} + keyExtractor={this._keyExtractor} + renderItem={this._renderItem} + /> + ); + } + onPressedHeader(type){ + if(type===0){ + this.setState({istreatexpand:!this.state.istreatexpand,treat:this.state.istreatexpand?[]:this.state.conservetreat}) + }else{ + this.setState({isuntreatexpand:!this.state.isuntreatexpand,untreat:this.state.isuntreatexpand?[]:this.state.conserveuntreat}) + + } + } + initState(){ + let data=this.props.list + + return { + conservetreat: data.filter(item=>item.statut===I18n.t('TREAT')), + treat: data.filter(item=>item.statut===I18n.t('TREAT')), + istreatexpand:true, + conserveuntreat: data.filter(item=>item.statut!==I18n.t('TREAT')), + untreat: data.filter(item=>item.statut!==I18n.t('TREAT')), + isuntreatexpand:true + } + } +} +export class HistoryListItem extends React.Component{ + _keyExtractor = (item, index) => item.id; + + _onPressItem = (id: string) => { + + }; + _renderItem = ({item}) => ( + + ); + constructor(props){ + super(props); + this.state=this.initState(); + } + initState(){ + return { + refreshing:false, + } + } + render() { + return ( + + } + /> + ); + } + + _onRefresh(){ + this.setState({refreshing:true}) + setTimeout(()=>{this.setState({refreshing:false})},5000); + } +} + +const style=StyleSheet.create({ + content:{ + width:responsiveWidth(100), + borderBottomColor: '#FFFFFF', + flex:1, + flexDirection: 'column', + paddingTop: 10, + + }, + listStyle:{ + backgroundColor:'white' + }, + bottomSeparator:{ + width:responsiveWidth(100), + height:5, + justifyContent:'center', + alignSelf: 'center', + backgroundColor:'#EEE', + }, + title:{ + color:'#000', + paddingLeft: 10, + fontSize:responsiveFontSize(2.2) + }, + description:{ + fontSize:responsiveFontSize(1.8), + color:'#4f5b62', + paddingLeft: 10, + + }, + timeContent:{ + justifyContent:'space-between', + flex:1, + marginTop: 10, + marginBottom: 5, + flexDirection:'row', + }, + time:{ + fontWeight: 'bold', + marginRight: 20, + marginBottom: 10, + color:theme.accent, + }, + treat:{ + }, + + }); \ No newline at end of file diff --git a/screens/history-request/HistoryItemDetails.js b/screens/history-request/HistoryItemDetails.js new file mode 100755 index 00000000..1cbfeabd --- /dev/null +++ b/screens/history-request/HistoryItemDetails.js @@ -0,0 +1,255 @@ +import React,{ Component} from 'react' +import {StyleSheet,View,Text} from 'react-native' +import CardView from 'react-native-cardview' +import Button from 'apsl-react-native-button' +import {responsiveHeight,responsiveWidth} from 'react-native-responsive-dimensions' +import Icons from 'react-native-vector-icons/Ionicons' +import {updateCreditDemand} from "../../webservice/HistoryRequestApi"; +import {readUser} from "../../webservice/AuthApi"; +let typesta=0 +let moment=require('moment-timezone') +var colorback='white' +import I18n from "react-native-i18n" +import {getAgentNetworksList} from "../../webservice/NetworkApi"; +import Icon from "./History"; +import {Header} from "react-native-elements"; +let theme=require('./../../utils/theme.json') +const route=require("./../../route.json") +export default class HistoryItemDetails extends Component{ + + static navigatorStyle = { + navBarBackgroundColor:theme.accentLight, + statusBarColor:theme.accent, + navBarTextColor: '#FFFFFF', + navBarButtonColor: '#FFFFFF', + }; + static navigationOptions = ({navigation})=>{ + return{ drawerLabel: () => null, + title:"Transaction N°"+navigation.getParam("item",{id:"-"}).id + }}; + + constructor(props) { + super(props); + this.item=this.props.navigation.getParam("item",null); + let sta='' + if(this.item.status==='1'){ + typesta=1 + colorback='#AEAEAE' + sta=I18n.t('TREAT_DEMAND') + }else { + colorback='green' + typesta=2 + sta=I18n.t('ACTION_TREAT_DEMAND')} + this.state={ + statut:sta, + user:null, + networks:[], + loadingTreat:false, + color:colorback, + } + readUser().then(async (user)=>{ + let networks=[] + networks = await getAgentNetworksList(user.agentId); + this.setState({user: user, networks: networks.networks}) + + }) + } + + render() { + + let ago=moment.tz(this.item.date_creation,'Etc/GMT+0').format(); + ago=moment(ago) + return ( + + {I18n.t('MEMBER_INFO')} + + + {this.item.phone} + + + + {this.item.code_membre} + + + + {I18n.t('DEMAND_INFO')} + + + {this.item.code_parrain} + + + + {this.item.reseau} + + + + {this.item.montant} + + + + {ago.format(" Do MMMM YYYY à HH:mm")} + + + + {ago.fromNow()} + + + {this.state.user?this.renderBtn():null} + ) + } + styles=StyleSheet.create({ + container:{ + flex:1, + }, + btnstyle:{ + + }, + simpleuser: { + marginLeft:responsiveWidth(2), + fontSize:16, + color:'#3E3E3E' + }, + textbtnstyle:{ + color:"white", + fontWeight:"bold", + fontSize:18 + }, + cardcontainer1:{ + justifyContent:'space-evenly', + flex:2, + marginRight:3, + marginLeft:3, + + }, + cardcontainer:{ + justifyContent:'space-evenly', + + flex:3, + margin:3, + } + }) + + onTreatDemand() { + if(this.item!=="1"){ + this.setState({loadingTreat:true}) + console.warn(this.item); + updateCreditDemand(this.item.phone,this.item.id).then((data)=>{ + this.setState({loadingTreat:false}) + console.log(data); + + if(data.success===1){ + this.setState({statut:I18n.t('TREAT_DEMAND'),color:"#AEAEAE"}) + }else{ + console.log(data); + } + }) + } + } + + renderBtn() { + const {user}=this.state + console.warn(this.item) + if(user) { + if (this.item.code_parrain===user.code_membre) { + return ( + ) + } + } + } +} diff --git a/screens/history-request/HistoryRequester.ios.js b/screens/history-request/HistoryRequester.ios.js new file mode 100755 index 00000000..faa25030 --- /dev/null +++ b/screens/history-request/HistoryRequester.ios.js @@ -0,0 +1,605 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + * @flow + */ + +import React, {Component} from 'react'; +import {Platform, StyleSheet, Text, View,ScrollView, + Alert, + FlatList,ProgressViewIOS,ProgressBarAndroid,PickerIOS,StatusBar} from 'react-native'; +import ActionButton from 'react-native-action-button'; +import MapView from 'react-native-maps'; +import {responsiveHeight,responsiveWidth, responsiveFontSize} from 'react-native-responsive-dimensions'; +import CardView from 'react-native-cardview'; +import {Sae} from 'react-native-textinput-effects'; +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; +import Button from 'apsl-react-native-button'; +import {primary,primaryDark,accent} from '../../utils/theme.json'; +import * as Animatable from 'react-native-animatable'; +import { isNumber } from 'util'; +import {readUser} from './../../webservice/AuthApi' +import {sendDemande} from './../../webservice/HistoryRequestApi' +import {sendDemandeSpecificque} from "../../webservice/HistoryRequestApi"; +import {getAgentNetworksList} from "../../webservice/NetworkApi"; +import {HelperText,TextInput} from 'react-native-paper' +import I18n from "react-native-i18n" +import { Dropdown } from "react-native-material-dropdown" +type Props = {} +const route=require('../../route.json') +import { Card, CardTitle, CardContent, CardAction, CardButton, CardImage,Title } from 'react-native-material-cards' +export default class HistoryRequester extends Component { + static navigatorStyle = { + navBarHidden:true, + }; + static navigationOptions = { + drawerLabel: () => null, + headerTitle:I18n.t('ASK_CREDIT'), + title:I18n.t('ASK_CREDIT') + }; + constructor(props){ + super(props); + this.state=this.initState(); + this.updateState() + } + handleViewRef=ref=>this.numberView=ref; + handleMontantRef=ref=>this.montantView=ref; + initState(){ + return { + phone:null, + montant:undefined, + isSending:false, + isDisabled:true, + networks:[], + user:null, + visibleError:false, + currentNetwork:{nt:1}, + errorAnimation:"", + } + } + + onUserCancel(){ + this.props.navigation.goBack() + } + onUserSend(){ + var validMontant=true + if( !isNumber(this.state.montant)||this.state.montant>1000000){ + validMontant=false + } + this.setState({visibleError:!validMontant}) + if(!validMontant){ + this.montantView.shake(800) + setTimeout(()=>{ + this.setState({visibleError:false}) + },3000) + } + else { + this.setState({isSending:true}) + let title="" + let message="" + sendDemandeSpecificque(this.state.montant,this.state.user.phoneTransaction,this.state.user.code_membre).then((data)=> { + if (data.success !== undefined) { + if (data.success === 1) { + title= I18n.t('DEMAND_SEND'), + message=I18n.t('DEMAND_SEND_SUCCESFUL') + } else { + title= "Erreur survenu lors de l'envoie ", + message="Une erreur est survenu lors de l'envoie de la demande" + } + + }else { + title= "Erreur survenu lors de l'envoie ", + message="Une erreur est survenu lors de l'envoie de la demande" + + } + Alert.alert(title,message,[{text:'Ok',onPress:()=>{ + this.setState({montant: ""}) + }}]) + setTimeout(() => { + this.setState({isSending: false}) + }, 800) + + }).catch((error)=>{ + title= "Erreur survenu lors de l'envoie ", + message="Une erreur est survenu lors de l'envoie de la demande" + Alert.alert(title,message,[{text:'Ok'}]) + + }) + } + } + render () { + const {user}=this.state + return ( + + + {user?((user.category === "geolocated")? + this.multiNetwork(): this.simpleAgent()): + + } + + ) + } + simpleAgent(){ + let montant=0 + if(true){ + return ( + + + + + { + this.refInp = ref + }} + + mode={"outlined"} + inputStyle={input.style} + onChangeText={(text) => { + try{ + let neb=parseInt(text) + this.setState({montant:neb,isDisabled:isNaN(neb)}) + }catch (e) { + + } + }} + value={this.state.montant} + /> + + {I18n.t('INVALID_MONTANT')} + + + + + + + {this.onUserCancel()}} + title={I18n.t('CANCEL')} + color="crimson" + /> + {this.onUserSend()}} + title={I18n.t('SEND')} + color="steelblue" + + /> + + + ) + }else + return ( + + + Demande de credit + + { + this.refInp = ref + }} + onChangeText={(text) => { + if(text.length>0) { + try { + montant = parseFloat(text); + this.setState({isDisabled:montant>0,montant:montant}) + + } catch (e) { + + } + } + }} + style={input.selfitem} + labelStyle={input.label} + autoCapitalize={'none'} + autoCorrect={false} + /> + + + + + + + + + + + + ) + } + + multiNetwork() { + if(true){ + return ( + + + + + { + return (item)?I18n.t("FOR_NUMB")+item.phone +" ("+item.name+")":I18n.t("SELECT_NETWORK") + }} + valueExtractor={(item,index)=>{ + return item.phone +" ("+item.name+")" + + }} + onChangeText={(value,index,data)=>{ + this.setState({currentNetwork: data[index]}) + + }} + data={this.state.networks } + /> + + + { + this.refInp = ref + }} + + mode={"outlined"} + inputStyle={input.style} + onChangeText={(text) => { + try{ + let neb=parseInt(text) + this.setState({montant:neb,isDisabled:isNaN(neb)}) + }catch (e) { + + } + }} + value={this.state.montant} + /> + + {I18n.t('INVALID_MONTANT')} + + + + + + {this.onUserCancel()}} + title={I18n.t('CANCEL')} + color="crimson" + /> + { const {currentNetwork,montant}=this.state + if(currentNetwork!==undefined && currentNetwork.nt===undefined) { + this.onNetworkSend(currentNetwork.phone, currentNetwork.code_membre, montant) + }}} + title={I18n.t('SEND')} + color="steelblue" + /> + + + ) + } + else + return ( + + + + {I18n.t('ASK_CREDIT')} + + this.setState({currentNetwork: itemValue}) + }> + {this.state.networks.map((item,index)=>{ + return() + })} + + + + { + this.refInp = ref + }} + inputStyle={input.style} + keyboardType={"numeric"} + onChangeText={(text) => { + try{ + let neb=parseInt(text) + this.setState({montant:neb,isDisabled:isNaN(neb)}) + }catch (e) { + + } + }} + style={input.selfitem} + labelStyle={input.label} + autoCapitalize={'none'} + autoCorrect={false} + /> + + + + + + + + + + ) + } + + renderSingleNetwork(item) { + const itm=item.item + console.log(item) + let refInp=null,refBtn=null + let montant=0 + return ( + + + {I18n.t('ASK_CREDIT')} + {I18n.t("FOR_NUMB")} {itm.phone} ({itm.name}) + + { + refInp = ref + this.setState({refIn:refInp}) + }} + inputStyle={input.style} + + value={this.state.montant} + keyboardType={"numeric"} + onChangeText={(text) => { + if(text.length>0) { + try { + montant = parseFloat(text); + this.setStat({montant:montant}) + if(refBtn){ + refBtn.setState({isDisabled:montant>0}) + refBtn.isDisabled=montant>0 + + }} catch (e) { + + } + } + }} + style={input.selfitem} + labelStyle={input.label} + autoCapitalize={'none'} + autoCorrect={false} + /> + + + + + + + + + + + ) + + } + onNetworkSend(phone, code_membre,text) { + var validMontant=true + let montant=parseFloat(text) + if(montant===null || !isNumber(montant) || montant>1000000){ + validMontant=false + } + this.setState({visibleError:!validMontant}) + if(!validMontant){ + this.montantView.shake(800) + setTimeout(()=>{ + this.setState({visibleError:false}) + },3000) + } + else { + sendDemandeSpecificque(montant,phone,code_membre).then((data)=>{ + var title="" + var message="" + if(data.success!==undefined) { + if (data.success === 1) { + title = I18n.t("DEMAND_SEND") + message = I18n.t('DEMAND_SEND_SUCCESFUL') + } else { + title = "Erreur survenu lors de l'envoie " + message = "Une erreur est survenu lors de l'envoie de la demande" + } + }else{ + title = "Erreur survenu lors de l'envoie " + message = "Une erreur est survenu lors de l'envoie de la demande" + } + + Alert.alert(title,message,[{text:"Ok",onPress:()=>{this.setState({montant:""})}}]) + + }) + } + } + + async updateState() { + + let user=await readUser(); + if(user.category==="geolocated"){ + let networks=await getAgentNetworksList(user.agentId); + console.log(networks) + if(networks.success===1) { + let net=[this.state.currentNetwork] + networks.networks.forEach((item)=>{ + net.push(item) + + }) + this.setState({networks: net}) + } + } + this.setState({user:user}) + + } +} + + const input=StyleSheet.create({ + selfitem:{ + + width:responsiveWidth(70), + alignSelf: 'center', + marginBottom:20, + }, + label:{ + color:primary + }, + style:{ + color:'black' + } + }) + const styles = StyleSheet.create({ + title:{ + backgroundColor: primary, + color:'white', + paddingLeft: 20, + paddingTop: 10, + fontWeight: 'bold', + fontSize:responsiveFontSize(3), + height:responsiveHeight(10), + }, + subtitle:{ + color:'black', + paddingLeft: 20, + paddingTop: 10, + marginBottom: responsiveHeight(3), + fontWeight: 'bold', + fontSize:responsiveFontSize(2), + }, + container: { + flex: 1, + backgroundColor: '#EEE', + justifyContent: 'space-between', + }, + + container2: { + flex: 1, + height:responsiveHeight(20), + backgroundColor: '#EEE', + }, + btnContainer:{ + flexDirection: 'row', + paddingRight: 5, + paddingLeft: 5, + paddingTop: 5, + marginBottom: -2.5, + }, + button_1:{ + flex:1, + borderColor: 'transparent', + +}, +button_2:{ + flex:1, + borderColor: 'transparent', + backgroundColor: primary, + borderRadius: 0, +}, + +button_1_text:{ + color:primary, + fontWeight: 'bold', +}, + +button_2_text:{ + color:'white', + fontWeight: 'bold', +}, + cardInput:{ + + marginLeft: 10, + marginRight: 10, + marginTop: responsiveHeight(5), + width:responsiveWidth(98), + alignSelf: 'center', + justifyContent:'space-between', + height:responsiveHeight(40) + }, + cardInput2:{ + + marginLeft: 10, + marginRight: 10, + marginTop: responsiveHeight(1), + width:responsiveWidth(98), + height:responsiveHeight(50), + alignSelf: 'center', + justifyContent:'space-between', + } +}); diff --git a/screens/history-request/HistoryRequester.js b/screens/history-request/HistoryRequester.js new file mode 100755 index 00000000..296eb01f --- /dev/null +++ b/screens/history-request/HistoryRequester.js @@ -0,0 +1,604 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + * @flow + */ + +import React, {Component} from 'react'; +import {Platform, StyleSheet, Text, View,ScrollView, + Alert, + FlatList,ProgressViewIOS,ProgressBarAndroid,Picker,StatusBar} from 'react-native'; +import ActionButton from 'react-native-action-button'; +import MapView from 'react-native-maps'; +import {responsiveHeight,responsiveWidth, responsiveFontSize} from 'react-native-responsive-dimensions'; +import CardView from 'react-native-cardview'; +import {Sae} from 'react-native-textinput-effects'; +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; +import Button from 'apsl-react-native-button'; +import {primary,primaryDark,accent} from '../../utils/theme.json'; +import * as Animatable from 'react-native-animatable'; +import { isNumber } from 'util'; +import {readUser} from './../../webservice/AuthApi' +import {sendDemande} from './../../webservice/HistoryRequestApi' +import {sendDemandeSpecificque} from "../../webservice/HistoryRequestApi"; +import {getAgentNetworksList} from "../../webservice/NetworkApi"; +import {HelperText,TextInput,TextInputMask} from 'react-native-paper' +import I18n from "react-native-i18n" +type Props = {} +const route=require('../../route.json') +import { Card, CardTitle, CardContent, CardAction, CardButton, CardImage,Title } from 'react-native-material-cards' +export default class HistoryRequester extends Component { + static navigatorStyle = { + navBarHidden:true, + }; + static navigationOptions = { + drawerLabel: () => null, + headerTitle:I18n.t('ASK_CREDIT'), + title:I18n.t('ASK_CREDIT') + }; + constructor(props){ + super(props); + this.state=this.initState(); + this.updateState() + } + handleViewRef=ref=>this.numberView=ref; + handleMontantRef=ref=>this.montantView=ref; + initState(){ + return { + phone:null, + montant:undefined, + isSending:false, + isDisabled:true, + networks:[], + user:null, + visibleError:false, + currentNetwork:{nt:1}, + errorAnimation:"", + } + } + + onUserCancel(){ + this.props.navigation.goBack() + } + onUserSend(){ + var validMontant=true + if( !isNumber(this.state.montant)||this.state.montant>1000000){ + validMontant=false + } + this.setState({visibleError:!validMontant}) + if(!validMontant){ + this.montantView.shake(800) + setTimeout(()=>{ + this.setState({visibleError:false}) + },3000) + } + else { + this.setState({isSending:true}) + let title="" + let message="" + sendDemandeSpecificque(this.state.montant,this.state.user.phoneTransaction,this.state.user.code_membre).then((data)=> { + if (data.success !== undefined) { + if (data.success === 1) { + title= I18n.t('DEMAND_SEND'), + message=I18n.t('DEMAND_SEND_SUCCESFUL') + } else { + title= "Erreur survenu lors de l'envoie ", + message="Une erreur est survenu lors de l'envoie de la demande" + } + + }else { + title= "Erreur survenu lors de l'envoie ", + message="Une erreur est survenu lors de l'envoie de la demande" + + } + Alert.alert(title,message,[{text:'Ok',onPress:()=>{ + this.setState({montant: ""}) + }}]) + setTimeout(() => { + this.setState({isSending: false}) + }, 800) + + }).catch((error)=>{ + title= "Erreur survenu lors de l'envoie ", + message="Une erreur est survenu lors de l'envoie de la demande" + Alert.alert(title,message,[{text:'Ok'}]) + + }) + } + } + render () { + const {user}=this.state + return ( + + + {user?((user.category === "geolocated")? + this.multiNetwork(): this.simpleAgent()): + + } + + ) + } + simpleAgent(){ + let montant=0 + if(true){ + return ( + + + + + { + this.refInp = ref + }} + + mode={"outlined"} + inputStyle={input.style} + onChangeText={(text) => { + try{ + let neb=parseInt(text) + this.setState({montant:neb,isDisabled:isNaN(neb)}) + }catch (e) { + + } + }} + value={this.state.montant} + /> + + {I18n.t('INVALID_MONTANT')} + + + + + + + {this.onUserCancel()}} + title={I18n.t('CANCEL')} + color="crimson" + /> + {this.onUserSend()}} + title={I18n.t('SEND')} + color="steelblue" + + /> + + + ) + }else + return ( + + + Demande de credit + + { + this.refInp = ref + }} + onChangeText={(text) => { + if(text.length>0) { + try { + montant = parseFloat(text); + this.setState({isDisabled:montant>0,montant:montant}) + + } catch (e) { + + } + } + }} + style={input.selfitem} + labelStyle={input.label} + autoCapitalize={'none'} + autoCorrect={false} + /> + + + + + + + + + + + + ) + } + + multiNetwork() { + if(true){ + return ( + + + + + + + this.setState({currentNetwork: itemValue}) + }> + {this.state.networks.map((item,index)=>{ + return() + })} + + + + + + { + this.refInp = ref + }} + + mode={"outlined"} + inputStyle={input.style} + onChangeText={(text) => { + try{ + let neb=parseInt(text) + this.setState({montant:neb,isDisabled:isNaN(neb)}) + }catch (e) { + + } + }} + value={this.state.montant} + /> + + {I18n.t('INVALID_MONTANT')} + + + + + + {this.onUserCancel()}} + title={I18n.t('CANCEL')} + color="crimson" + /> + { const {currentNetwork,montant}=this.state + if(currentNetwork!==undefined && currentNetwork.nt===undefined) { + this.onNetworkSend(currentNetwork.phone, currentNetwork.code_membre, montant) + }}} + title={I18n.t('SEND')} + color="steelblue" + /> + + + ) + } + else + return ( + + + + {I18n.t('ASK_CREDIT')} + + this.setState({currentNetwork: itemValue}) + }> + {this.state.networks.map((item,index)=>{ + return() + })} + + + + { + this.refInp = ref + }} + inputStyle={input.style} + keyboardType={"numeric"} + onChangeText={(text) => { + try{ + let neb=parseInt(text) + this.setState({montant:neb,isDisabled:isNaN(neb)}) + }catch (e) { + + } + }} + style={input.selfitem} + labelStyle={input.label} + autoCapitalize={'none'} + autoCorrect={false} + /> + + + + + + + + + + ) + } + + renderSingleNetwork(item) { + const itm=item.item + console.log(item) + let refInp=null,refBtn=null + let montant=0 + return ( + + + {I18n.t('ASK_CREDIT')} + {I18n.t("FOR_NUMB")} {itm.phone} ({itm.name}) + + { + refInp = ref + this.setState({refIn:refInp}) + }} + inputStyle={input.style} + + value={this.state.montant} + keyboardType={"numeric"} + onChangeText={(text) => { + if(text.length>0) { + try { + montant = parseFloat(text); + this.setStat({montant:montant}) + if(refBtn){ + refBtn.setState({isDisabled:montant>0}) + refBtn.isDisabled=montant>0 + + }} catch (e) { + + } + } + }} + style={input.selfitem} + labelStyle={input.label} + autoCapitalize={'none'} + autoCorrect={false} + /> + + + + + + + + + + + ) + + } + onNetworkSend(phone, code_membre,text) { + var validMontant=true + let montant=parseFloat(text) + if(montant===null || !isNumber(montant) || montant>1000000){ + validMontant=false + } + this.setState({visibleError:!validMontant}) + if(!validMontant){ + this.montantView.shake(800) + setTimeout(()=>{ + this.setState({visibleError:false}) + },3000) + } + else { + sendDemandeSpecificque(montant,phone,code_membre).then((data)=>{ + var title="" + var message="" + if(data.success!==undefined) { + if (data.success === 1) { + title = I18n.t("DEMAND_SEND") + message = I18n.t('DEMAND_SEND_SUCCESFUL') + } else { + title = "Erreur survenu lors de l'envoie " + message = "Une erreur est survenu lors de l'envoie de la demande" + } + }else{ + title = "Erreur survenu lors de l'envoie " + message = "Une erreur est survenu lors de l'envoie de la demande" + } + + Alert.alert(title,message,[{text:"Ok",onPress:()=>{this.setState({montant:""})}}]) + + }) + } + } + + async updateState() { + + let user=await readUser(); + if(user.category==="geolocated"){ + let networks=await getAgentNetworksList(user.agentId); + console.log(networks) + if(networks.success===1) { + let net=[this.state.currentNetwork] + networks.networks.forEach((item)=>{ + net.push(item) + + }) + this.setState({networks: net}) + } + } + this.setState({user:user}) + + } +} + + const input=StyleSheet.create({ + selfitem:{ + + width:responsiveWidth(70), + alignSelf: 'center', + marginBottom:20, + }, + label:{ + color:primary + }, + style:{ + color:'black' + } + }) + const styles = StyleSheet.create({ + title:{ + backgroundColor: primary, + color:'white', + paddingLeft: 20, + paddingTop: 10, + fontWeight: 'bold', + fontSize:responsiveFontSize(3), + height:responsiveHeight(10), + }, + subtitle:{ + color:'black', + paddingLeft: 20, + paddingTop: 10, + marginBottom: responsiveHeight(3), + fontWeight: 'bold', + fontSize:responsiveFontSize(2), + }, + container: { + flex: 1, + backgroundColor: '#EEE', + justifyContent: 'space-between', + }, + + container2: { + flex: 1, + height:responsiveHeight(20), + backgroundColor: '#EEE', + }, + btnContainer:{ + flexDirection: 'row', + paddingRight: 5, + paddingLeft: 5, + paddingTop: 5, + marginBottom: -2.5, + }, + button_1:{ + flex:1, + borderColor: 'transparent', + +}, +button_2:{ + flex:1, + borderColor: 'transparent', + backgroundColor: primary, + borderRadius: 0, +}, + +button_1_text:{ + color:primary, + fontWeight: 'bold', +}, + +button_2_text:{ + color:'white', + fontWeight: 'bold', +}, + cardInput:{ + + marginLeft: 10, + marginRight: 10, + marginTop: responsiveHeight(5), + width:responsiveWidth(98), + alignSelf: 'center', + justifyContent:'space-between', + height:responsiveHeight(40) + }, + cardInput2:{ + + marginLeft: 10, + marginRight: 10, + marginTop: responsiveHeight(1), + width:responsiveWidth(98), + height:responsiveHeight(50), + alignSelf: 'center', + justifyContent:'space-between', + } +}); diff --git a/screens/history-request/MyHistory.js b/screens/history-request/MyHistory.js new file mode 100755 index 00000000..0cc770e2 --- /dev/null +++ b/screens/history-request/MyHistory.js @@ -0,0 +1,868 @@ + +import React, {Component} from 'react'; +import { + Platform, + StyleSheet, + AppState, + FlatList, + ProgressBarAndroid, + TouchableOpacity, + Text, + View, + Animated, + StatusBar +} from 'react-native'; +import ActionButton from 'react-native-action-button'; +import Icon from 'react-native-vector-icons/MaterialIcons'; +import {responsiveFontSize,responsiveHeight,responsiveWidth} from 'react-native-responsive-dimensions'; +import {HistoryListItem,HistoryItemSectionned} from './HistoryItem'; +import {credrequester} from './../../route.json'; +import {loadDemandeCredit,loadMyDemandeCredit} from './../../webservice/HistoryRequestApi'; +import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; +import BaseScreen from './../../screens/BaseScreen' +import Button from 'apsl-react-native-button' +import {readUser} from "../../webservice/AuthApi"; +import Calendar from 'react-native-calendario'; +let route=require('./../../route.json') +let moment=require('moment-timezone') +let theme=require('./../../utils/theme.json') +import {primary,primaryDark,accent,purpleLight,primaryLight} from './../../utils/theme.json'; +import IndicatorViewPager from "rn-viewpager/viewpager/IndicatorViewPager"; +import {PagerTabIndicator,PagerTitleIndicator,PagerDotIndicator} from 'rn-viewpager' +type Props = {}; +var sortIcons; +var sectionIcons; +import I18n from 'react-native-i18n' +require('./../../utils/Translations') +import { SinglePickerMaterialDialog } from 'react-native-material-dialog'; +import {Header} from "react-native-elements"; +import {withNavigationFocus} from "react-navigation"; +import IconWithBadge from "../IconWithBadge"; +import { Appbar, Paragraph, Menu, Divider, Provider } from 'react-native-paper'; + class MyHistory extends React.Component{ + static navigatorStyle = { + navBarBackgroundColor: primary, + statusBarColor: primaryDark, + navBarTextColor: '#FFFFFF', + navBarButtonColor: '#FFFFFF', + contextualMenuStatusBarColor:theme.accent, + contextualMenuBackgroundColor: theme.accentLight, + contextualMenuButtonsColor: '#ffffff' + + }; + static navigationOptions =({navigation})=> { + const {routeName}=navigation.state + return { + + tabBarLabel:routeName==="myDemand"?I18n.t('MY_DEMAND'): I18n.t('DEMAND_RECEIVE'), + tabBarIcon:({focused,horizontal,tintColor})=>{ + return () + }, + + drawerLabel: I18n.t('CREDIT_MANAGE'), + drawerIcon: ({ tintColor }) => ( + + ), + }}; + + constructor(props) { + super(props, true); + this.state = this.initState(); + readUser().then((user)=>{this.setState({user:user})}) + this._populateIcons().then(() => { + }); + + this.navigation=this.props.navigation + + + }; + + navigationButtonPressed({ buttonId }) { + if (buttonId === 'id') { + this.showFilter(); + }else if(buttonId==='sectionned'){ + this.setState({isSectionned:!this.state.isSectionned}) + } + } + + + showFilter() { + + /*if (this.state.filter) { + Navigation.mergeOptions(route.stackRoot, + { + topBar: { + rightButtons: [ + { + title: 'Non Traité', + }, + { + title: 'Traité', + }, + { + title: 'Période', + }, + { + title: 'Tout', + }, + { + title: 'Trier par', + }, + { + title: '', + }, + ], + onButtonPressed: (index) => { + let data = this.state.conserve + console.log(index) + console.log(data); + + if (data !== null) { + let filtre = ""; + if (index < 2) { + switch (index) { + case 0: + filtre = I18n.t('NO_TREAT') + break; + case 1: + filtre = I18n.t('TREAT'); + break; + + } + let fi = data.filter(item => item.statut === filtre) + this.setState({listdata: fi, filter: true}) + } else if (index === 2) { + this.setState({panelVisible: true}) + } else { + this.setState({listdata: data, filter: false}) + } + } + } + }} + ); + + } else { + Navigation.mergeOptions(route.stackRoot, + { + topBar: { + rightButtons: [ + { + title: I18n.t('NO_TREAT'), + }, + { + title: I18n.t('TREAT'), + } + , { + title: I18n.t('PERIOD'), + }, + { + title: '', + }, + { + title: 'Trier par', + }, { + title: '', + }, + ], + onButtonPressed: (index) => { + let data = this.state.conserve + if (data != null && data.length > 0) { + var filtre = ""; + if (index < 2) { + switch (index) { + case 0: + filtre = I18n.t('NO_TREATED'); + break; + case 1: + filtre = I18n.t('TREATED'); + break; + + } + let fi = data.filter(item => item.statut === filtre) + this.setState({listdata: fi, filter: true}) + } else if (index === 2) { + this.setState({panelVisible: true}) + this.props.navigator.showContextualMenu( + { + rightButtons: [ + { + title: I18n.t('CANCEL'), + }, + { + title: I18n.t('FILTER'), + }, + + ], + onButtonPressed: (index) => { + console.log(index) + + switch (index) { + case 1: + let {dateend, datestart} = this.state; + this.onfilterPress(); + } + this.setState({panelVisible: false}); + } + } + ); + } else { + this.setState({listdata: data, filter: false}) + } + } + } + } + } + ); + + }*/ + } + + _populateIcons = function () { + return new Promise(function (resolve, reject) { + Promise.all( + [ + Icon.getImageSource('sort', 30), + Icon.getImageSource('layer-group', 30), + ] + ).then((values) => { + sortIcons = values[0]; + sectionIcons=values[1]; + resolve(true); + }).catch((error) => { + console.log(error); + reject(error); + }).done(); + }); + }; + + initState() { + return { + user:{}, + listdata: [], + listdataSend:[], + conserve: [], + count:0, + translateAnim:new Animated.Value(0), + visibleMenu:false, + appState: AppState.currentState, + filter: false, + sortIcons: null, + panelVisible: false, + filder_disable: true, + datestartformated: 'La date de debut', + dateendformated: 'La date de fin', + datestart: null, + dateend: null, + isLoaded:false, + isSectionned:false, + isDateTimePickerVisible: false, + isDateEndTimePickerVisible: false + } + } + + updateList(data) { + if (!this.state.filter) { + let rev = data.reverse() + this.setState({listdata: rev, conserve: rev, isLoaded: true}); + } + } + updateMyList(data) { + if (!this.state.filter) { + let rev = data.reverse() + this.setState({listdataSend: rev, conserve: rev, isLoaded: true}); + } + + } + + componentDidMount() { + const {routeName}=this.navigation.state + this.setState({position:routeName==="myDemand"?0:1}) + this.refreshData() + this.intervaller=setInterval(()=>{ + this.refreshData(false) + }, 2000) + this.animateSlidingUp(false) + this.props.navigation.addListener("didFocus", () => { + this.refreshData(false) + console.warn("loading") + + }) + + } + + componentWillUnmount() { + clearInterval(this.intervaller) + } + + renderList(list) { + if(this.state.isLoaded && list instanceof Array){ + let data = list; + if(data!==null) { + if (data.length > 0) { + return ({this.refreshData()}} + isRefreshing={this.state.isRefreshing} + navigator={this.props.navigation} + style={styles.listbackground}/>) + } else if (this.state.filter) { + + return ( + + {I18n.t('NO_ITEM_REQUEST')} + + ) + }else if(data.length===0){ + return ( + + {I18n.t('NO_ITEM_REQUEST')} + + ) + } else { + return ( + + + {I18n.t('LOADING_DOTS')} + + ) + } + }else { + return ( + + {I18n.t('EMPTY_LIST_REQUEST')} + + ) + + } + + }else if(list.length===0){ + return ( + + {I18n.t('NO_ITEM_REQUEST')} + + + ) + + } + + } + renderOptionsMenu(){ + return ( + + Show menu + } + > + { + this.setState({isSectionned:!this.state.isSectionned}) + this._closeMenu() + }} + title="Section" /> + + { + + this.animateSlidingUp(!this.state.isSliding) + this._closeMenu() + }} title={I18n.t("FILTER_DATE")} /> + + + ) + } + animateSlidingUp(state=false){ + const height = responsiveHeight(100) + let initialValue = !state ? 0:height , + finalValue = !state ? height:0; + + this.setState({isSliding:state}) + + + this.state.translateAnim.setValue(initialValue); //Step 3 + Animated.timing( //Step 4 + this.state.translateAnim, + { + toValue: finalValue, + duration:500, + useNativeDriver: true, + } + ).start() + } + _openMenu = () => this.setState({ visibleMenu: true }); + + _closeMenu = () => this.setState({ visibleMenu: false }); + + render() { + return ( + + + + + + {this.props.navigation.pop()}} + /> + + {this.refreshData()}} /> + this._openMenu()} /> + + {this.renderOptionsMenu()} + + {this.state.position===0?this._renderListDemandsSend():this._renderListDemandReceive()} + + + ); + + } + renderSliding(){ + return ( + console.log(range)} + minDate="2018-04-20" + startDate="2018-04-30" + endDate="2018-05-05" + theme={{ + activeDayColor: {}, + monthTitleTextStyle: { + color: '#6d95da', + fontWeight: '300', + fontSize: 16, + }, + emptyMonthContainerStyle: {}, + emptyMonthTextStyle: { + fontWeight: '200', + }, + weekColumnsContainerStyle: {}, + weekColumnStyle: { + paddingVertical: 10, + }, + weekColumnTextStyle: { + color: '#b6c1cd', + fontSize: 13, + }, + nonTouchableDayContainerStyle: {}, + nonTouchableDayTextStyle: {}, + startDateContainerStyle: {}, + endDateContainerStyle: {}, + dayContainerStyle: {}, + dayTextStyle: { + color: '#2d4150', + fontWeight: '200', + fontSize: 15, + }, + dayOutOfRangeContainerStyle: {}, + dayOutOfRangeTextStyle: {}, + todayContainerStyle: {}, + todayTextStyle: { + color: '#6d95da', + }, + activeDayContainerStyle: { + backgroundColor: '#6d95da', + }, + activeDayTextStyle: { + color: 'white', + }, + nonTouchableLastMonthDayTextStyle: {} + }} + style={{height:responsiveHeight(60)}} +/> + + + + +) + } + renderSectionnedList(list) { + + if (this.state.isLoaded) { + let data =list; + if (data !== null) { + if (data.length > 0) { + return ( ) + } else if (this.state.filter) { + + return ( + + {I18n.t('NO_ITEMS_REQUEST')} + + ) + } else { + return ( + + + {I18n.t('LOADING_DOTS')} + + ) + } + } else { + return ( + + {I18n.t('EMPTY_LIST_REQUEST')} + + ) + + } + } + } + renderLoading(){ + return ({I18n.t('LOADING_DOTS')}) + } + showSlidingUpPanel() { + /* return ( this.panel = c} + draggableRange={{top: responsiveHeight(100), bottom: 0}} + onRequestClose={() => this.setState({panelVisible: false})}> + + {this.showSlidingUpView()} + + ) + } + + showSlidingUpView() { + /* return ( + + + this._handleDatePicked(fromdate,untildate)} + dayHeadings={['D', 'L', 'M', 'M', 'J', 'V', 'S']} + maxMonth={12} + startdate={moment('20180101').format('YYYYMMDD')} + untilDate='20181231' + minDate='20180101' + maxDate='20181231' + buttonColor='green' + showReset={false} + showClose={false} + placeHolderStart= 'Date de debut' + placeHolderUntil= 'Date fin' + selectedBackgroundColor= 'green' + selectedTextColor='white' + /> + + + + )*/ + } + + onfilterPress() { + let {datestart, dateend} = this.state; + let data = this.state.conserve; + + if (data !== null) { + data = data.filter(item => { + let mda = moment(item.dateAjout) + return moment(item.dateAjout).isAfter(moment(datestart).toDate()) && (mda.isBefore(moment(dateend).toDate())) + }) + + this.setState({listdata: data, panelVisible: false, filter: true}) + } + + } + + _showDateTimePicker = (type) => { + if (type === 1) + this.setState({ + isDateTimePickerVisible: true + }); + else this.setState({ + isDateEndTimePickerVisible: true + }); + } + _showDateEndPicker = () => this.setState({isDateEndTimePickerVisible: true}); + + _hideDateTimePicker = () => this.setState({isDateTimePickerVisible: false, isDateEndTimePickerVisible: false}); + _handleDatePicked = (fromdate, enddate) => { + console.log([fromdate,enddate]); + + this.setState({ + datestart: fromdate, + datestartformated: moment(fromdate).format('dddd Do ,MMMM YYYY'), + dateend: enddate, + dateendformated: moment(enddate).format('dddd Do ,MMMM YYYY') + }); + let startdate = this.state.datestart; + let enddatemo = moment(enddate); + let dif = moment(enddatemo).diff(startdate); + if (dif < 0) { + this.setState({filder_disable: true}); + this.props.navigator.showSnackbar({ + text: I18n.t('DATE_WRONG'), + duration: 'long', + backgroundColor: 'red', + textColor: 'white' + }) + } else { + this.setState({filder_disable: false}); + } + + this._hideDateTimePicker(); + }; + + printOptions() { + if(this.state.user.category==="hyper"){ + return ( + { + + }}> + + + ); + }else{ + return ( + { + this.props.navigation.navigate(route.credrequester) + }} + > + + + { + + }}> + + + ) + } + } + + _renderListDemandsSend() { + + return ( + { + this.state.isLoaded? + this.state.isSectionned? + this.renderSectionnedList(this.state.listdataSend): + this.renderList(this.state.listdataSend):this.renderLoading() + } + {this.printOptions()} + {this.showSlidingUpPanel()} + + ) + } + + _renderListDemandReceive() { + + return ( + { + this.state.isLoaded? + this.state.isSectionned? + this.renderSectionnedList(this.state.listdata): + this.renderList(this.state.listdata):this.renderLoading() + } + {this.printOptions()} + {this.showSlidingUpPanel()} + + ) + } + + _renderTabGeolocated() { + let tabs = [{ + text: I18n.t('DEMAND_SEND'), + }] + return ; + } + + _renderTabHyper() { + let tabs = [{ + text:I18n.t('DEMAND_RECEIVE'), + }] + return ; + } + + _renderTabs() { + let tabs = [{ + text: I18n.t('MY_DEMAND'), + iconSource:this.state.usersicon + },{ + text: I18n.t('DEMAND_RECEIVE'), + iconSource:this.state.charticon + }] + return ; + } + + + refreshData(autoref=true) { + if(autoref) + this.setState({isRefreshing:true}) + loadDemandeCredit().then((data) => { + if(data.success!==undefined) { + this.setState({listdata:[]}) + this.updateList(data.demands); + if(this.state.position!==0)this.props.navigation.setParams({count:data.demands.length}) + this.setState({isRefreshing:false}) + } + }).catch((e)=>{ + console.warn(e) + }); + loadMyDemandeCredit().then((data)=>{ + if(data.success!==undefined) { + this.setState({listdataSend:[]}) + this.setState({isRefreshing:false}) + if(this.state.position===0)this.props.navigation.setParams({count:data.demands.length}) + + this.updateMyList(data.demands) + } + }).catch((e)=>{ + console.warn(e) + }); + } +} +export default MyHistory; +const datefilter=StyleSheet.create({ + titleHeader:{ + fontSize:20, + fontWeight:'bold', + color:'black', + flex:1, + }, + datetitle:{ + fontSize:17, + color:'black', + marginLeft:responsiveWidth(2), + }, + datetext:{ + fontSize:16, + marginLeft:responsiveWidth(5) + }, + content:{ + flex:2, + + }, + btnContainer:{ + flexDirection:'row', + width:responsiveWidth(100), + alignSelf:'flex-end', + flex:2, + }, + btn:{ + flex:1, + borderColor:'transparent', + borderRadius:0, + }, + btntext:{ + fontWeight:'bold', + color:accent + }, + container:{ + flex:1, + justifyContent:'space-evenly' + } +}) +const styles = StyleSheet.create({ + slidingup:{ + position:"absolute", + height:responsiveHeight(84), + bottom:0, + backgroundColor:'white', + width:responsiveWidth(100), + zIndex: 1000 + }, + root:{ + flex:1, + }, + container: { + flex: 1, + backgroundColor:'white', + justifyContent: 'center', + alignItems: 'center', + }, + emptylist:{ + flex:1, + justifyContent:'center', + alignItems:'center' + }, + 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, + }, + dateText:{ + marginTop:20, + marginLeft:responsiveWidth(13), + marginBottom:20, + fontSize:17, + }, + titlecontent:{ + fontSize:17, + marginLeft:responsiveWidth(10), + + color:'black' + }, + content:{ + flex:8 + }, + + title:{ + fontSize:20, + marginLeft:20, + marginTop:20, + color:'black', + fontWeight:'bold' + }, +}); diff --git a/screens/history-request/Requester.js b/screens/history-request/Requester.js new file mode 100755 index 00000000..afc1f3b5 --- /dev/null +++ b/screens/history-request/Requester.js @@ -0,0 +1,29 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + * @flow + */ + +import React, {Component} from 'react'; +import {Platform, StyleSheet,FlatList, Text, View,ScrollView} 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'; + +type Props = {}; +export class Requester extends Component { + + render () { + return ( + + + + + + + ) + } + } + diff --git a/screens/home/Filter.js b/screens/home/Filter.js new file mode 100644 index 00000000..77869110 --- /dev/null +++ b/screens/home/Filter.js @@ -0,0 +1,68 @@ +import React, {Component} from 'react'; +import { + Platform, StyleSheet, Text, + TouchableWithoutFeedback, View, TextInput, + Animated, Dimensions, Image, PermissionsAndroid, + AsyncStorage, + StatusBar, TouchableNativeFeedback, TouchableOpacity,BackHandler,Alert,ProgressBarAndroid + , FlatList +} from 'react-native'; +import Icon from 'react-native-vector-icons/MaterialIcons'; +const theme=require('./../../utils/theme.json'); +import I18n from 'react-native-i18n' + +import {Title,Subheading,Button} from 'react-native-paper' +var SnapSlider = require('react-native-snap-slider'); +export default class Filter extends Component{ + static navigationOptions = ({navigation})=>{ + return{ drawerLabel: () => null, + title:"Filtre", + tabBarIcon:({focused,horizontal,tintColor})=>{ + return () + }, + }}; + + constructor(props) { + super(props); + this.state = { + valuePosition:0 + } + this.mounted = false; + this.filterOptions = [ + {value: 5, label: "5 km"}, + {value: 15, label: "15 km"}, + {value: 20, label: "20 km"}, + {value: 25, label: "25 km"} + ]; + } + geInitialState(){ + return { + valuePosition:0 + } + } + render(){ + return ( + this.slidingComplete(item)} + /> + + + {(this.state.value === undefined ? 0 : this.state.value)} km {I18n.t("DISTANCE_ARROUND")} + ) + } + + slidingComplete(itemSelected) { + this.setState({value: this.filterOptions[itemSelected].value, valuePosition: itemSelected}); + + } + + +} \ No newline at end of file diff --git a/screens/home/Home.js b/screens/home/Home.js new file mode 100755 index 00000000..638750e8 --- /dev/null +++ b/screens/home/Home.js @@ -0,0 +1,2337 @@ +/** + * @format + * @flow + */ +import React, {Component} from 'react'; +import { + Platform, StyleSheet, Text, + TouchableWithoutFeedback, View, TextInput, + Animated, Dimensions, Image, PermissionsAndroid, + AsyncStorage, + StatusBar, TouchableNativeFeedback, TouchableOpacity,BackHandler,Alert,ProgressBarAndroid + , FlatList +} from 'react-native'; +import IMap from './IMap' +import ActionButton from 'react-native-action-button'; +import {CardView} from "react-native-cardview" +import {responsiveHeight,responsiveWidth,} from 'react-native-responsive-dimensions'; +import { material } from 'react-native-typography'; +import {getMakersFrom,loadGroupeAgent,getPositionInformation} from './../../webservice/MapService'; +import {readUser,getCountryNetwork,getPasObject} from './../../webservice/AuthApi' +import BaseScreen from './../BaseScreen' +import isEqual from 'lodash/isEqual'; +import Button from 'apsl-react-native-button' +import I18n from 'react-native-i18n' + +import Configuration from "../../webservice/persistences/Configuration"; +import {MaterialDialog} from "react-native-material-dialog"; +import { ProgressDialog,Dialog } from 'react-native-simple-dialogs'; +const countries=require("./../../utils/country_code.json") +import SnapSlider from 'react-native-snap-slider' +import call from "react-native-phone-call"; +import Icon from 'react-native-vector-icons/MaterialIcons'; +import Geolocation from 'react-native-geolocation-service'; +let geolib=require("geolib") +require('./../../utils/Translations') +import InterticielAds from './../ads/InterticielAds' +import SnackBar from 'react-native-snackbar-component' +const GEOLOCATION_OPTIONS = { enableHighAccuracy: true, timeout: 20000, maximumAge: 500,useSignificantChanges:false,distanceFilter:0 }; +const radioOptions=[{label:"mon Reseau",value:0},{label:"Tout",value:1}] +const theme=require('./../../utils/theme.json'); +const route=require('./../../route.json'); +import {FAB,Card,Surface} from 'react-native-paper' +import BottomSheet from 'reanimated-bottom-sheet' +const { width: viewportWidth, height: viewportHeight } = Dimensions.get('window'); +import MarkerManager from './../../webservice/persistences/MarkerManager' +const slideHeight=responsiveHeight(30)>270?270:responsiveHeight(30) +//var Fabric = require('react-native-fabric'); +//var { Crashlytics } = Fabric + + +const defaultProps = { + enableHack: false, + geolocationOptions: GEOLOCATION_OPTIONS, +}; + + class Home extends BaseScreen { + + static navigationOptions =({navigation}) =>{ + return { + headerMode:"none", + headerStyle:{ + display:'none' + }, + header:null, + drawerLabel: navigation.getParam("name",I18n.t('MAP')), + drawerIcon: ({ tintColor }) => ( + + ), + }}; + static defaultProps = { + draggableRange: { + top: responsiveHeight(30), + bottom: 0 + }, + panel: null + }; + + _draggedValue = new Animated.Value(0) + + renderIcon = icon => ({ isActive }) => ( + + ) + + onLoadMore() { + const {user, prevRegion,boundarie} = this.state + if (user.category === undefined || user.category === null) { + if (this.promiseRegion) this.promiseRegion.done() + this.promiseRegion = new Promise(async (resolve, reject) => { + this.setState({isNeedLoadMore: false, isLoadingMap: true}) + const camera = await this.mapRef.getCamera() + const zoom = camera.zoom - 10 + let res = [] + this.setState({isLoadingMap: true}) + if (this.state.filternetworkTemp !== undefined) { + let net = this.state.filternetworkTemp.id + res = this.state.networks.filter(function (item) { + return item.id === net + }) + } + if (res.length > 0) { + let reseau = res[0]; + const pos = {longitude: user.longitude, latitude: user.latitude} + try { + //let data = await loadMarkers(pos, reseau, 5000, this.state.page) + let data=await this.loadingMarkers(this.state.myPosition,this.state.filternetwork,this.state.value) + this.treatNewData(pos,data,false) + } catch (e) { + console.debug(e.message) + this.setState({isNeedLoadMore: false, isLoadingMap: false}) + } + } + + else { + this.setState({isNeedLoadMore: true, isLoadingMap: false}) + } + if(this.map)this.map.focusToUser() + resolve() + + }) + } + } + + openDrawer = () => { + this.props.navigation.openDrawer() + } + + onslidingEvent(event) { + this.setState({ + maxHeightSliding: event.nativeEvent.layout.height + }); + } + + navigationEventListener + _retrieveData = async () => { + try { + const value = await AsyncStorage.getItem('position'); + if (value !== null) { + let re=JSON.parse(value) + re.longitudeDelta=0.04 + re.latitudeDelta=0.01 + const pos=JSON.parse(value) + this.setState({region:re,oldPosition:pos}) + } + } catch (error) { + console.warn(error) + } + }; + + componentDidMount() { + this.mounted = true; + this.configuration=new Configuration() + const { navigation } = this.props; + this.markerManager=new MarkerManager() + this.configuration.getCurrentPubValue().then((value)=>{ + try{ + const val=parseInt(value) + this.setState({isPubShow:val}); + }catch(e){ + + } + }) + this.focusListener = navigation.addListener("didFocus", () => { + this.configuration.getCurrentPasValue().then((value)=>{ + try{ + this.setState({pas:parseInt(value)}); + }catch(e){ + + } + }) + + this.componentDidAppear() + }); + this.blurListener=navigation.addListener("didBlur",(payload)=>{ + this.componentDidDisappear() + }) + this._retrieveData() + //this.toggleSlidingUp(false) + if (this.props.coordinate) return; + + } + + async requestCameraPermission() { + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + { + 'title': 'Cool Photo App Camera Permission', + 'message': 'Cool Photo App needs access to your camera ' + + 'so you can take awesome pictures.' + } + ) + if (granted === PermissionsAndroid.RESULTS.GRANTED) { + readUser().then((user) => { + if (user) { + if (user.category !== undefined && user.category !== null) { + const myPosition = { + latitude: parseFloat(user.latitude), + longitude: parseFloat(user.longitude) + } + + const reg = { + latitude: myPosition.latitude, + longitude: myPosition.longitude, + latitudeDelta: 0.03, + longitudeDelta: 0.01, + } + this.setState({myPosition: myPosition}); + this.mapRef.animateToCoordinate({ + latitude: myPosition.latitude, + longitude: myPosition.longitude + }, 1000) + this.mapRef.animateToRegion(reg, 1000) + this.setState({isLoading:false,isLoadingMap:false,loadingDialog:false}) + + if (user.category !== "geolocated") { + + this.showMyMembers(); + } else { + if (myPosition.latitude <= 0 && myPosition.longitude <= 0) { + this.props.navigation.push(route.updateinfo); + } + } + + } else { + this.getPosition() + this.watchLocation(); + } + } + }) + console.log("Camera permission granted") + + } else { + console.log("Camera permission denied") + } + } catch (err) { + console.log(err) + } + } + _storeData = async (position) => { + try { + await AsyncStorage.setItem('position', JSON.stringify(position)); + } catch (error) { + console.warn(error) + } + }; + watchLocation() { + this.watchID = Geolocation.watchPosition((position) => { + const myLastPosition = this.state.myPosition; + let myPosition = position.coords; + const oldPosition=this.state.oldPosition + if (!myLastPosition || (myPosition.longitude!==myLastPosition.longitude || myPosition.latitude!==myLastPosition.latitude)) { + if(myPosition.longitude!==0 && myPosition.latitude!==0) + this._storeData(myPosition) + + if(isEqual(this.state.region,{}) || isEqual(this.state.region,undefined) || isEqual(this.state.region,null)) + if(!this.state.myPosition.longitude && !this.state.myPosition.latitude){ + if (this.mapRef !== null && this.mapRef !== undefined) { + this.mapRef.animateToRegion({ + latitude: myPosition.latitude, + longitude: myPosition.longitude, + latitudeDelta: 0.03, + longitudeDelta: 0.01, + }, 1000) + this.mapRef.animateCamera({ + center: this.myPosition, + pitch: 0, + heading: 0, + altitude: 0, + + zoom: 12 + }, 1000) + } + + + } + this.setState({region: {latitude:myPosition.latitude,longitude:myPosition.longitude,latitudeDelta:0.003,longitudeDelta:0.004}}); + this.setState({myPosition: myPosition}); + if(this.map)this.map.focusToUser() + + } + }, (error=>console.log("wat s",error)),GEOLOCATION_OPTIONS); + } + + getNetworks(pays) { + if (pays) { + getCountryNetwork(pays).then((result) => { + this.reseaux = []; + let networks = result; + + for (let prop in networks) { + this.reseaux.push(networks[prop]); + } + + this.setState({networks: this.reseaux}); + let c = this.reseaux.filter((item) => { + return item.name.includes(this.state.network); + }) + if(this.state.user.category===undefined || this.state.user.category===null){ + console.log(this.state.user) + if (c.length > 0 && pays ) { + + this.setState({filternetwork: c[0], myNetwork: c[0],filternetworkTemp:c[0]}) + this.retrieveAllPoint(pays) + + }else{ + console.log("on getnetworks",result) + if(this.state.user){ + if(!this.state.user.category) + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + if(pays!==null && pays!==undefined) + this.getNetworks(pays) + else + this.requestCameraPermission() + }} + + ], + {cancelable:false} + ) + } + } + } + }, (err) => { + console.log("error getnetwork"+e.message) + // Crashlytics.log("get networks"+e.message) + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + if(pays!==null && pays!==undefined) + this.getNetworks(pays) + else + this.requestCameraPermission() + + }} + + ], + {cancelable:false} + ) }) + + + } else { + console.log("get network missing pays") + var msg = "impossible de récupérer le nom du pays"; + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + + this.requestCameraPermission() + }} + ], + {cancelable:false} + ) + } + + } + + getPosition(options=null) { + console.log("on get position") + Geolocation.getCurrentPosition( + (position) => { + const myLastPosition = this.state.myPosition; + const myPosition = position.coords; + const oldPosition=this.state.oldPosition + + if (!isEqual(myPosition, myLastPosition) && myPosition.longitude!==0 && myPosition.latitude!==0||myLastPosition ) { + if(this.map)this.map.focusToUser() + getPositionInformation(myPosition).then((response) => { + if(response){ + if (response.results !== undefined) { + if (response.results.length > 0) { + + let most = response.results[0] + let {address_components, formatted_address, place_id} = most + this.setState({address: address_components, textadress: formatted_address, place: place_id}) + + let results = response.results; + let shortcountry; + let mcountry; + for (let i = 0; i < results[0].address_components.length; i++) { + for (let j = 0; j < results[0].address_components[i].types.length; j++) { + if (results[0].address_components[i].types[j] === "country") { + mcountry = results[0].address_components[i]; + shortcountry = mcountry.short_name; + this.setState({ + shortCountry: mcountry.short_name, + longCountry: mcountry.long_name + }) + } + } + } + for (let i of countries) { + if (i.code === shortcountry) { + this.setState({indicatif: i.dial_code}) + this.getNetworks(i.dial_code) + + + } + } + + } + + }else{ + console.log("on else result null ") + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + this.getPosition(options) + }} + + ], + {cancelable:false} + ) + } + }else{ + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + this.getPosition(options) + }} + + ], + {cancelable:false} + ) + } + }); + const reg = { + latitude: myPosition.latitude, + longitude: myPosition.longitude, + latitudeDelta: 0.03, + longitudeDelta: 0.01, + } + this.setState({myPosition: myPosition, region: reg}); + if(this.mapRef && !this.state.myPositionIsAnimated) { + this.mapRef.animateCamera({ + center: myPosition, + pitch: 0, + heading: 0, + altitude: 5, + zoom: 13 + }, 1000) + this.setState({myPositionIsAnimated:true}) + + } + + }else console.warn("errror") + }, + (error) => { + console.warn(error.message) + switch(error.code){ + case 3: + if(this.state.oldPosition){ + this.treatPosition(this.state.oldPosition) + } + break; + default: + //Crashlytics.log(error.message) + console.log("onjjj",error.message) + + /* Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + this.getPosition(options) }} + + ], + {cancelable:false} + )*/ + } + }, + GEOLOCATION_OPTIONS + ); + + } + + componentDidDisappear() { + BackHandler.removeEventListener('hardwareBackPress', this.backPressed); + + } + + componentDidAppear() { + BackHandler.addEventListener('hardwareBackPress', this.backPressed); + // this.props.start(); + + readUser().then((user) => { + if (user) { + if(user.category){ + this.setState({user: user}) + this.setState({network: user.network}); + + const myPosition = { + latitude: parseFloat(user.latitude), + longitude: parseFloat(user.longitude) + } + + const reg = { + latitude: myPosition.latitude, + longitude: myPosition.longitude, + latitudeDelta: 0.03, + longitudeDelta: 0.01, + } + + this.setState({myPosition: myPosition}); + } + if(this.state.myPosition) + this.refocusMap() + /*if (Platform.OS === 'android') { + // this.requestCameraPermission(); + } else { + this.getPosition(); + this.watchLocation(); + }*/ + + } + }) + } + + componentWillUnmount() { + this.mounted = false; + + this.blurListener.remove(); + this.focusListener.remove() + if (this.watchID) Geolocation.clearWatch(this.watchID); + } + + + backPressed = () => { + Alert.alert( + I18n.t('EXIT_TITLE'), + I18n.t('EXIT_DESC'), + [ + {text: I18n.t('NO'), onPress: () => console.log('Cancel Pressed'), style: 'cancel'}, + {text: I18n.t("YES"), onPress: () => BackHandler.exitApp()}, + ], + {cancelable: false}); + return true; + } + + constructor(props) { + super(props, true); + this.state = this.geInitialState(); + this.mounted = false; + this.filterOptions = [ + {value: 5, label: "5 km"}, + {value: 15, label: "15 km"}, + {value: 20, label: "20 km"}, + {value: 25, label: "25 km"} + ]; + Icon.getImageSource('md-car', 24, 'white').then((resutl) => { + this.setState({caricon: resutl}) + }); + this._renderFavoriteIcon = this._renderFavoriteIcon.bind(this); + this.makeMarkerInformation = this.makeMarkerInformation.bind(this); + + // IlinkEmitter.on("langueChange", this.updateLangue.bind(this)) + + }; + updateLangue(){ + this.props.navigation.setParams({name:I18n.t('MAP')}) + let rand=Math.random() + this.setState({lang:rand}) + + } + + makeCardSearch() { + if(!this.state.isPubShow){ + return ( + + + + this.openDrawer()} + > + + + Menu + + + + + + {this.state.filternetwork.name?this.state.filternetwork.name:this.state.network} + {this.renderSupplementInformation()} + + {this.showLoadingMapView()} + + + + + + ) + } + + } + renderSupplementInformation(){ + if(this.state.user && this.state.user.category==="geolocated"){ + return () + }else + return ( + + {this.state.markers.length+" "+(this.state.currentNetworkSize===0?"":"/"+this.state.currentNetworkSize)} + + + { + this.setState({page:this.state.page + 1}) + this.onLoadMore() + }} + style={{ + borderRadius: 12, + height: 32, + width: 32, + backgroundColor: "white", + borderColor: "transparent", + }}> + =this.state.currentNetworkSize?"close":"refresh"} + size={32} + color={this.state.markers.length >=this.state.currentNetworkSize?"red":"grey"} + /> + + + ) + } + _renderMarker2(){ + let {currentMarker, myPosition} = this.state; + let marker=currentMarker + const ma = {latitude: parseFloat(currentMarker.latitude), longitude: parseFloat(currentMarker.longitude)} + const meter_distance = geolib.getDistance(myPosition, ma); + + const distanceTxt = (meter_distance > 900 ? + (meter_distance / 1000) + " Km" : meter_distance + "m") + I18n.t('TO_YOU') + + var name = marker.lastname === null ? marker.adresse : marker.lastname + + return ( + + {name} + { + this.toggleSlidingUp(false) + + } + }> + + {marker.adresse} + + {marker.network} + {I18n.t('SOLDE_UNVAIBLE')} + + {distanceTxt} + + {!this.state.needRoad ? this.showBtnItineraire() : this.showBtnClose()} + + + + ) + } + + _renderItemMarkerdetails(markers) { + let marker = markers + if (marker !== undefined && marker !== null) { + let {currentMarker, myPosition} = this.state; + const ma = {latitude: parseFloat(currentMarker.latitude), longitude: parseFloat(currentMarker.longitude)} + const meter_distance = geolib.getDistance(myPosition, ma); + + const distanceTxt = (meter_distance > 900 ? + (meter_distance / 1000) + " Km" : meter_distance + "m") + I18n.t('TO_YOU') + + var name = marker.lastname === null ? marker.adresse : marker.lastname + return ( + + {name} + { + this.toggleSlidingUp(false) + } + }> + + {marker.adresse} + + {marker.network} + {I18n.t('SOLDE_UNVAIBLE')} + + {distanceTxt} + + + {!this.state.needRoad ? this.showBtnItineraire() : this.showBtnClose()} + + + ); + } + } + renderCurrentMarker(marker){ + if(marker){ +return( + + {name} + { + this.toggleSlidingUp(false) + } + }> + +{marker.adresse} + +{marker.network} + {I18n.t('SOLDE_UNVAIBLE')} + +{distanceTxt} + + + {!this.state.needRoad ? this.showBtnItineraire() : this.showBtnClose()} + +) + } + } + + callItem(marker) { + const args = { + number: marker.phone, // String value with the number to call + prompt: false // Optional boolean property. Determines if the user should be prompt prior to the call + } + call(args).catch((e)=>console.log(e)) + } + + makeMarkerInformation() { + let {currentMarker, myPosition} = this.state; + // console.log(geolib.getDistance(myPosition,currentMarker)) + if (currentMarker !== undefined && currentMarker !== null) { + // this.setState({stateSheet:BottomSheetBehavior.STATE_EXPANDED}) + return this._renderItemMarkerdetails(currentMarker); + }else{ + return (Impossible de'afficher l'element) + } + } + + makeActionButon() { + let cu = this.state.user; + if (cu) { + switch (cu.category) { + case "super": + return this.getSuperActionButton(); + break; + case "geolocated": + return this.geoLocatedAction(); + break; + case "hyper": + return this.getHypervisorActionButton(); + break; + default: + return this.getSimpleActionButton(); + break; + } + } + } + + getSuperActionButton() { + return ( + this.showMyMembers()} + size={48} + > + + + this.refocusMap(false)} + size={48} + > + + + + { + this.onMapTypeChange(); + }} + size={48} + > + + + + ) + + } + + getSimpleActionButton() { + return ( + this.actionButton = r} + > + this.showFilterDialog()} + size={48} + > + + + this.refocusMap(false)} + size={48} + > + + + { + this.onMapTypeChange(); + } + } + size={48} + > + + + { + this.showMynetworkMap(); + }}> + + + { + this.showNewDialogNetwork(); + }}> + + + + + + ) + + } + toggleSlidingUp(state) { + if(state && this.bottomSheetRef){ + this.bottomSheetRef.snapTo(1) + this.setState({showcurentMarker:state}) + }else if(!state) this.bottomSheetRef.snapTo(0) + + const height = slideHeight + let initialValue = !state ? 0:height , + finalValue = !state ? height:0; + + + this.setState({ + panelVisible: state + }); + if (!state && this.state.needRoad) { + this.setState({needRoad: false}); + } + + + this.state.animation.setValue(initialValue); //Step 3 + Animated.timing( //Step 4 + this.state.animation, + { + toValue: finalValue, + duration:200, + } + ).start((animation)=>{ + if(!state && this.map) { + this.map.focusToUser() + } + }); + } + makeSlidingUp() { + /*return ( + this.onslidingEvent(event)} + ref={(c) => this.panel = c} + onRequestClose={() => this.setState({panelVisible: false, needRoad: false})}> + + {this.makeMarkerInformation()} + + )*/ + return ( {this.bottomSheetRef=r}} + snapPoints = {[0,"30%"]} + renderHeader = {()=>this.markerView()} +/>) + } + _renderFavoriteIcon() { + const {top, bottom} = this.props.draggableRange + const draggedValue = this._draggedValue.interpolate({ + inputRange: [bottom, top], + outputRange: [1, 0], + extrapolate: 'clamp' + }) + const transform = [{scale: draggedValue}] + return ( + { + this.setState({needRoad: true}) + }}> + + + + + ) + } + geInitialState() { + return { + region: { + latitude: 0, + longitude: 0, + latitudeDelta: 0.015, + longitudeDelta: 0.0121, + }, + pas:100, + prevRegion: { + latitude: 0, + longitude: 0, + }, + isPubShow:true, + loadingDialog:true, + textreach: "", + currentNetworkSize:0, + markersearchfilter: [], + animation: new Animated.Value(0), + myPosition: null, + currentMarker: null, + filterNetworkOption: radioOptions[1], + needRoad: false, + initialAnim: false, + filternetwork: {}, + destinationPosition: {}, + panelVisible: false, + markers: [], + isNeedLoadMore: false, + isLoadingMap: false, + value: 5, + page: 0, + valuePosition: 0, + markerfilter: null, + allpoint: [], + typeMap: 'standard', + indexTypeMap: 0, + user: null, + snack_visible: false, + snack_text_message: "", + networks: [], + dialogSliderVisible: false, + showProgress: false, + myNetwork: {}, + dialogNetworkVisible: false, + }; + }; + onMarkerPress(marker) { + console.warn(marker) + this.setState({currentMarker: marker}); + this.toggleSlidingUp(true) + } + onMapTypeChange() { + var newState = {index: this.state.indexTypeMap, text: this.state.typeMap}; + newState.index = newState.index + 1; + newState.index = newState.index % 3; + + switch (newState.index) { + default: + newState.text = 'standard'; + break; + case 1: + newState.text = 'hybrid'; + break; + case 2: + newState.text="terrain"; + break; + } + this.setState({indexTypeMap: newState.index, typeMap: newState.text}); + } +/* + { + this.map=re + if(re!=null) { + this.mapRef = re.getMapRef(); + } + }} + typeMap={this.state.typeMap} + onMarkerClick={(e)=>this.onMarkerPress(e)} + network={this.state.filternetwork} + initialRegion={this.state.region} + markers={this.state.markers} + selectedMarker={this.state.currentMarker} + myNetwork={this.state.myNetwork} + lang={this.state.lang} + myPosition={this.state.myPosition} + onMapReady={()=>{ + readUser().then((user) => { + if (user) { + this.setState({user: user}) + this.setState({network: user.network}); + if (Platform.OS === 'android') { + this.requestCameraPermission(); + } else { + this.getPosition(); + this.watchLocation(); + } + + } + }) + + }} + needRoad={this.state.needRoad} + onNeedRoadReady={(data)=>{ + this.setState({showProgress: false}) + }} + onNeedRoadError={(message)=>{ + this.setState({showProgress: false}) + Alert.alert(I18n.t("PROBLEM_OCCUR"),I18n.t("PROBLEM_OCCUR_DIRECTION"),[{text:"Ok",onPress:()=>{}}]) + }} + />*/ + showInterticiel(){ + if(this.state.isPubShow){ + return ( this.setState({isPubShow:false})} + navigation={this.props.navigation} + />) + } + } + renderBottomHome(){ + return ( + + { + this.map=re + if(re!=null) { + this.mapRef = re.getMapRef(); + } + }} + typeMap={this.state.typeMap} + onMarkerClick={(e)=>this.onMarkerPress(e)} + network={this.state.filternetwork} + initialRegion={this.state.region} + markers={this.state.markers} + selectedMarker={this.state.currentMarker} + myNetwork={this.state.myNetwork} + lang={this.state.lang} + myPosition={this.state.myPosition} + onMapReady={()=>{ + readUser().then((user) => { + if (user) { + this.setState({user: user}) + this.setState({network: user.network}); + if(user.category){ + this.setState({loadingDialog:false}) + if (user.category !== "geolocated") { + this.showMyMembers(); + } else { + if (myPosition.latitude <= 0 && myPosition.longitude <= 0) { + this.props.navigation.push(route.updateinfo); + } + } + }else{ + if (Platform.OS === 'android') { + this.requestCameraPermission(); + } else { + this.getPosition(); + this.watchLocation(); + } + } + + } + }) + + }} + needRoad={this.state.needRoad} + onNeedRoadReady={(data)=>{ + this.setState({showProgress: false}) + }} + onNeedRoadError={(message)=>{ + this.setState({showProgress: false}) + Alert.alert(I18n.t("PROBLEM_OCCUR"),I18n.t("PROBLEM_OCCUR_DIRECTION"),[{text:"Ok",onPress:()=>{}}]) + }} + /> + {this.makeCardSearch()} + {this.bottomSheetRef=r}} + snapPoints = {[60,"30%","100%"]} + renderHeader = {()=>this.renderHeader()} + /> + + ) + } + renderInner(){ + return ( + Freud junior + ) } + markerView(){ + if(this.state.currentMarker)return this._renderMarker2() + } + renderHeader(){ + return ( + + + { + return ( + ) + }} + style={{marginTop:40,marginRight:20}} buttonColor={theme.primary}/> + + + + {this.markerView()} + {this.renderFilterMarker()} + + + + + { + if(!this.state.showFilterDistance){ + this.bottomSheetRef.snapTo(2) + this.setState({showFilterDistance:true}) + }else{ + this.bottomSheetRef.snapTo(0) + this.setState({showFilterDistance:false}) + + } + } + }/> + { + this.bottomSheetRef.snapTo(2) + this.setState({showdialogNetworkVisible:true}) + }} + /> + + + {this.makeMarkerButton()} + + + ) + } + renderFilterMarker(){ + if(this.state.showFilterDistance) + return ( + + {I18n.t('TEXT_FILTER_DISTANCE')} + this.slidingComplete(item)} + /> + + + {(this.state.value === undefined ? 0 : this.state.value)} km {I18n.t("DISTANCE_ARROUND")} + + + + + + + )} + else return ( + ) + + } + renderOldHome(){ + return ( + + + {this.state.loadingDialog? + + {I18n.t("LOADING_DOTS")} + :null + } + + { + this.map=re + if(re!=null) { + this.mapRef = re.getMapRef(); + } + }} + typeMap={this.state.typeMap} + onMarkerClick={(e)=>this.onMarkerPress(e)} + network={this.state.filternetwork} + initialRegion={this.state.region} + markers={this.state.markers} + selectedMarker={this.state.currentMarker} + myNetwork={this.state.myNetwork} + lang={this.state.lang} + myPosition={this.state.myPosition} + onMapReady={()=>{ + readUser().then((user) => { + if (user) { + this.setState({user: user}) + this.setState({network: user.network}); + if(user.category){ + this.setState({loadingDialog:false}) + if (user.category !== "geolocated") { + this.showMyMembers(); + } else { + if (myPosition.latitude <= 0 && myPosition.longitude <= 0) { + this.props.navigation.push(route.updateinfo); + } + } + }else{ + if (Platform.OS === 'android') { + this.requestCameraPermission(); + } else { + this.getPosition(); + this.watchLocation(); + }} + + } + }) + + }} + needRoad={this.state.needRoad} + onNeedRoadReady={(data)=>{ + this.setState({showProgress: false}) + }} + onNeedRoadError={(message)=>{ + this.setState({showProgress: false}) + Alert.alert(I18n.t("PROBLEM_OCCUR"),I18n.t("PROBLEM_OCCUR_DIRECTION"),[{text:"Ok",onPress:()=>{}}]) + }} + /> + {this.makeCardSearch()} + {this.makeSlidingUp()} + {this.makeDialogLoader()} + {this.makeDistanceDialog()} + {this.makeNetworkChangeDialog()} + + {this.makeActionButon()} + + + ) + } + renderTutoOldHome(){ + return ( + + + {this.makeCardSearch()} + + ) + } + render() { + + if(false){ + return this.renderBottomHome() + }else + return this.renderOldHome() + } + renderCurrentMarker(){ + if(this.state.currentMarker){ + return ( + {this.makeMarkerInformation()} + ) + } + } + makeDialogLoader() { + + return ( ) + } + + showMynetworkMap(usr = null) { + const user = usr === null ? this.state.user : usr + let {myNetwork} =this.state; + + this.setState({filternetwork:myNetwork,page:0,filternetworkTemp:myNetwork,loadingDialog:true}) + return new Promise(()=>{ + if (myNetwork !== undefined) { + this.loadingMarkers(this.state.myPosition,myNetwork,this.state.value).then((data) => { + + let items = data ? data : [] + this.setState({loadingDialog:false}) + if (user.category !== undefined && user.category !== null) { + const filter = items.filter(item => item.code_parrain === user.code_membre) + this.treatNewData(this.state.myPosition,filter,true) + } else + this.treatNewData(this.state.myPosition,items,true) + + }).catch((e) => { + this.setState({loadingDialog:false}) + + console.log("error j") + console.log(e) + }) + } else{ + this.setState({loadingDialog:false}) + console.log("error no net") + } + }) + + + } + + showMyMembers() { + let {code_membre} = this.state.user; + if (code_membre !== undefined) { + loadGroupeAgent(code_membre).then((data) => { + if (data.success === 1) + return this.setState({markers: data.datas}) + }) + } else console.log("error") + + } + + slidingComplete(itemSelected) { + this.setState({value: this.filterOptions[itemSelected].value, valuePosition: itemSelected}); + + } + + makeDistanceDialog() { + return ( { + this.setState({dialogSliderVisible: false, showProgress: true}) + setTimeout(() => this.filterPoint(), 300) + } + } + cancelLabel={I18n.t("QUIT_")} + okLabel={I18n.t('FILTER')} + onCancel={()=> { + this.setState({dialogSliderVisible: false}) + }} + onTouchOutside={() => this.setState({dialogSliderVisible: false})}> + {I18n.t('TEXT_FILTER_DISTANCE')} + + this.slidingComplete(item)} + /> + + + {(this.state.value === undefined ? 0 : this.state.value)} km {I18n.t("DISTANCE_ARROUND")} + + + ) + } + + showFilterDialog() { + this.setState({dialogSliderVisible: true}) + } + + async filterPoint(){ + const {value, myPosition, user, filternetwork} = this.state + if (value !== undefined) { + this.setState({page:0}) + const metervalue = value * 1000 + let res = this.state.networks.filter(function (item) { + return item.id === filternetwork.id + }) + let reseau = res[0]; + this.loadingMarkers(myPosition,filternetwork,value).then((datas)=>{ + this.treatNewData(this.state.prevRegion,datas,true) + }).catch((e)=>{ + this.setState({showProgress: false}) + Alert.alert(I18n.t("ERROR_FILTER"),I18n.t("ERROR_FILTER_TEXT"),[{text:I18n.t("CANCEL")},{text:I18n.t("RESTART"),onPress:()=>{this.filterPoint()}}]) + }) + } else { + this.setState({showProgress: false}) + this.setState({ + snack_visible: true, snack_text_message: "impossible de filtrer les élements" + }) + setTimeout(() => { + this.setState({snack_visible: false}) + }, 5000) + } + } + + userChangeMarker(item) { + const marker = this.state.markers[item]; + if (this.mapRef !== null && this.mapRef !== undefined) { + const reg = { + latitude: parseFloat(marker.latitude), + longitude: parseFloat(marker.longitude), + latitudeDelta: 0.03, + longitudeDelta: 0.01, + } + this.mapRef.animateToCoordinate({ + latitude: parseFloat(marker.latitude), + longitude: parseFloat(marker.longitude) + }, 1000) + this.mapRef.animateToRegion(reg, 1000) + console.log(marker); + } + } + + geoLocatedAction() { + return ( + this.refocusMap()} + size={48} + > + + + + { + this.onMapTypeChange(); + } + } + size={48} + > + + + ) + } + + makeNetworkChangeDialog() { + return ( + this.setState({dialogNetworkVisible: false})} + onOk={result => { + + this.setState({dialogNetworkVisible: false,page:0}); + this.setState({showProgress: true,filternetwork:this.state.filternetworkTemp}) + setTimeout(()=>this.showFilterNetwork() + ,500) + }} + > + this.renderRow(item)}/> + ) + + } + + renderRow = (row) => ( + this.onRowPress(row)}> + + + + + {row.name} + + + ); + + onRowPress(rowID) { + this.setState({filternetworkTemp: rowID}) + } + + showNewDialogNetwork() { + this.setState({dialogNetworkVisible: true}) + } + + async showFilterNetwork() { + const {myPosition, user, filternetwork} = this.state + if (filternetwork !== undefined) { + this.setState({showProgress: true}) + this.loadingMarkers(this.state.myPosition,filternetwork,this.state.value,0).then((data) => { + this.setState({showProgress: false}) + this.treatNewData(myPosition,data,true) + }).catch((e) => { + this.setState({ + snack_visible: true, snack_text_message: "Probleme de connexion" + + }) + console.log(e) + }) + } else console.log("error no net") + + + } + + showBtnItineraire() { + return ( + ) + } + + showBtnClose() { + return ( + ) + } + markerManager:MarkerManager + getHypervisorActionButton() { + return ( + this.refocusMap(false)} + size={48} + > + + + + { + this.onMapTypeChange(); + } + } + size={48} + > + + + + + ) + } + + moveToMarker(item) { + this.mapRef.animateToCoordinate({ + latitude: parseFloat(item.latitude), + longitude: parseFloat(item.longitude) + }, 1000) + this.setState({textreach: item.lastname, texta: true}) + this.setState({markersearchfilter: []}); + + this.onMarkerPress(item) + + } + + refocusMap(zoom=true) { + if(zoom){ + if (this.mapRef && this.state.myPosition!==undefined) { + this.mapRef.animateCamera({ + center: { + latitude: this.state.myPosition.latitude, + longitude: this.state.myPosition.longitude + }, + pitch: 0, + heading: 0, + }, 1000) + } + }else{ + if (this.mapRef && this.state.myPosition!==undefined) { + this.mapRef.animateCamera({ + center: { + latitude: this.state.myPosition.latitude, + longitude: this.state.myPosition.longitude + }, + pitch: 0, + heading: 0, + altitude: 5, + + zoom: 12 + }, 1000) + } + } + if(this.map) + this.map.focusToUser() + + } + + renderCardSeashItem(item) { + return ( + { + this.moveToMarker(item) + }}> + + {item.firstname === null ? item.adresse : item.firstname} + {item.lastname} + {item.network} + ) + } + + retrieveAllPoint(dial_code) { + /* let markers= this.markerManager.getLocalMarkers() + console.log( markers.length) + if(markers.length>0){ + console.debug("load from local") + for (let p of markers) { + console.log(` ${p.lastname}`); + } + this.markerManager.close(); + + this.setState({allpoint: [], loadingDialog: false}) + }else*/ + getMakersFrom(dial_code).then((data) => { + new Promise((resolve, reject) => { + try { + const ds =data.datas + this.setState({allpoint: ds, loadingDialog: false}) + + resolve(ds) + }catch (e) { + //Crashlytics.log(e.message) + console.warn(e.message) + reject(new Error(e.message)) + } + }).then((ds)=>{ + // this.markerManager.insertMarkers(ds).then((res)=>{console.warn(res)}) + this.onLoadMore() + }).catch((e)=>{ + this.setState({loadingDialog:false}) + //Crashlytics.log(e.message) + console.log("on get marker") + + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + this.setState({loadingDialog:true}) + if(dial_code!==null && dial_code!==undefined) + this.retrieveAllPoint(dial_code) + else + this.requestCameraPermission() + }} + + ], + {cancelable:false} + ) + }) + + }).catch((e) => { + console.log("on retreive>getmarkers",e.message) + + this.setState({loadingDialog:false}) + if(this.state.allpoint.length<=0){ + console.log("no point") + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + if(this.state.allpoint.length<=0){ + this.setState({loadingDialog:true}) + if(dial_code!==null && dial_code!==undefined) + this.retrieveAllPoint(dial_code) + else + this.requestCameraPermission() + }} + } + + ], + {cancelable:false} + ) + } + }) + + } + + showLoadMoreView() { + if(this.state.isNeedLoadMore) + return ( + + + {(this.state.markers.length===0?this.state.markers.length:(this.state.markers.length))} / {this.state.currentNetworkSize} + + ) + } + + showLoadingMapView() { + if(this.state.isLoadingMap) + return ( + {I18n.t("LOADING_TEXT_MARKERS")+" "+this.state.value+" km "+I18n.t("DISTANCE_ARROUND")} + + ) + } + + loadingMarkers(myPosition, filternetwork, value,p=undefined) { + return new Promise((resolve,reject)=>{ + const {allpoint}=this.state + let page=p!==undefined?p:this.state.page + let data=allpoint + .filter((mark, index)=>{ + const location={longitude:parseFloat(mark.longitude),latitude:parseFloat(mark.latitude)} + return geolib.getDistance(myPosition,location)<=(value*1000) + && mark.network===filternetwork.name}) + .slice(0,(page+1)*this.state.pas) + try{ + const currentNetwork=allpoint + .filter((mark, index)=>{ + const location={longitude:parseFloat(mark.longitude),latitude:parseFloat(mark.latitude)} + return geolib.getDistance(myPosition,location)<=(value*1000) + && mark.network===filternetwork.name}) + this.setState({currentNetworkSize:currentNetwork.length,currentNetworkMarkers:currentNetwork}) + }catch(e){ + console.debug("after "+e.message) + } + console.debug("data:",data,"value"+value*1000) + resolve(data) + }) + } + + treatNewData(pos,data, isFilter = false) { + this.setState({isLoadingMap: false}) + let items = data; + if (data.length > 0) { + let corrent = items; + if(isFilter) + this.setState({showProgress: false}) + + if (corrent.length > 0) { + this.setState({markers: corrent, prevRegion: pos}); + } + if (items.length { + this.setState({snack_visible: false}) + }, 5000) + } + this.setState({isNeedLoadMore: false}) + + } + }else if(isFilter){ + this.setState({markers:data} ); + this.setState({ + snack_visible: true, snack_text_message: I18n.t('NO_NETWORK_CORRESPONDING') + + }) + setTimeout(() => { + this.setState({snack_visible: false}) + }, 5000) + + + }else{ + this.setState({markers: data}); + } + } + + async treatPosition(myPosition) { + const myLastPosition = this.state.myPosition; + console.log("on treatposition") + if (myPosition.longitude!== myLastPosition.longitude||myPosition.latitude!== myLastPosition.latitude) { + this.setState({myPosition:myPosition}) + if(this.map)this.map.focusToUser() + getPositionInformation(myPosition).then((response) => { + if(response){ + if (response.results !== undefined) { + if (response.results.length > 0) { + + let most = response.results[0] + let {address_components, formatted_address, place_id} = most + this.setState({address: address_components, textadress: formatted_address, place: place_id}) + + let results = response.results; + let shortcountry; + let mcountry; + for (let i = 0; i < results[0].address_components.length; i++) { + for (let j = 0; j < results[0].address_components[i].types.length; j++) { + if (results[0].address_components[i].types[j] === "country") { + mcountry = results[0].address_components[i]; + shortcountry = mcountry.short_name; + this.setState({ + shortCountry: mcountry.short_name, + longCountry: mcountry.long_name + }) + } + } + } + console.warn("there ") + for (let i of countries) { + if (i.code === shortcountry) { + this.setState({indicatif: i.dial_code}) + this.getNetworks(i.dial_code) + + + } + } + + } + + }else{ + console.log("on treat 1") + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + this.treatPosition(myPosition) }} + + ], + {cancelable:false} + ) + } + }else { + console.log("on treat 2") + + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + this.treatPosition(myPosition) }} + + ], + {cancelable:false} + ) + } + }).catch((error)=>{ + //Crashlytics.log(error.message) + console.log("on treat 3") + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{ + this.treatPosition(myPosition) }} + + ], + {cancelable:false} + ) + }); + const reg = { + latitude: myPosition.latitude, + longitude: myPosition.longitude, + latitudeDelta: 0.03, + longitudeDelta: 0.01, + } + this.setState({myPosition: myPosition, region: reg}); + if(this.mapRef && !this.state.myPositionIsAnimated) { + this.mapRef.animateCamera({ + center: myPosition, + pitch: 0, + heading: 0, + altitude: 5, + zoom: 13 + }, 1000) + this.setState({myPositionIsAnimated:true}) + + } + + } + + } +} +export default Home; +const markerDetails=StyleSheet.create({ + solde:{ + backgroundColor:theme.accent, + color:"white", + marginLeft:10, + padding:5, + fontSize:9, + borderRadius:100, + }, + title:{ + color:'black', + marginLeft: 10, + flex:1, + fontSize:11, + fontWeight: 'bold', + }, + subtitle2:{ + color:'black', + marginLeft: 10, + flex:1, + fontSize:10, + fontWeight: 'bold', + }, + subtitle:{ + color:'black', + marginLeft: 9, + fontSize:9 + }, + otherInformation:{ + marginLeft:13, + fontSize:9 + }, + reseau:{ + marginLeft:10, + fontWeight: 'bold', + color:theme.accent, + fontSize:10 + }, + container:{ + flex:1, + width:responsiveWidth(95), + alignSelf:"center", + paddingTop:responsiveHeight(1), + marginBottom:responsiveHeight(1), + backgroundColor:"white", + justifyContent:'flex-start' + } +}) + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#FFF', + }, + + panelContainer: { + position: 'absolute', + top: 0, + bottom: 0, + left: 0, + right: 0, + }, + panel: { + height: 600, + padding: 20, + backgroundColor: '#f7f5eee8', + }, + header: { + backgroundColor: '#f7f5eee8', + shadowColor: '#000000', + paddingTop: 20, + borderTopLeftRadius: 20, + borderTopRightRadius: 20, + }, + panelHandle: { + width: 40, + height: 8, + borderRadius: 4, + backgroundColor: '#00000040', + marginBottom: 10, + }, + panelTitle: { + fontSize: 27, + height: 35, + }, + panelSubtitle: { + fontSize: 14, + color: 'gray', + height: 30, + marginBottom: 10, + }, + panelButton: { + padding: 20, + borderRadius: 10, + backgroundColor: '#318bfb', + alignItems: 'center', + marginVertical: 10, + }, + panelButtonTitle: { + fontSize: 17, + fontWeight: 'bold', + color: 'white', +}, + fab: { + position: 'absolute', + margin: 16, + right: 0, + bottom: 0, + }, + networkname:{ + backgroundColor:theme.primary, + padding:5, + color:"white", + marginRight:10, + fontSize:10, + borderRadius:12, + }, + myClusterTextStyle:{ + color:"white" + }, + myClusterStyle: { + backgroundColor:theme.accent, + height:32, + justifyContent:'center', + alignItems:'center', + width:32, + borderRadius:16 + }, +rowContainer: { + height: 52, + flex: 1, + flexDirection: 'row', + justifyContent: 'flex-start', + alignItems: 'center', + }, + iconContainer: { + marginRight: 16, + }, + mapmarker:{ + width:52, + height:52, + }, + slidingup:{ + backgroundColor:"transparent", + position:"absolute", + height:slideHeight, + bottom:0, + left:responsiveWidth(2.5), + width:responsiveWidth(95), + zIndex: 1 + }, + panelHeader: { + height: 120, + backgroundColor: '#b197fc', + alignItems: 'center', + justifyContent: 'center' + }, + favoriteIcon: { + left: responsiveWidth(75), + backgroundColor: theme.primary, + width: 64, + justifyContent:'center', + alignContent: 'center', + bottom:-64, + position:'absolute', + height: 64, + padding: 8, + zIndex:1, + borderRadius: 32, + }, + hambuger:{ + color:theme.primary, + borderColor:theme.primary, + borderWidth:1, + alignSelf:'center', + padding:5, + }, + topBar:{ + position:'absolute', + alignSelf: 'center', + justifyContent:'center', + borderRadius:10, + alignItems: 'center', + marginTop:responsiveHeight(4), + width:responsiveWidth(90), + + }, + searchInput:{ + flex:1, + fontSize:14 + }, + search: { + width:responsiveWidth(70), + height:responsiveHeight(10), + backgroundColor:'#00000000', + + + }, + + map:{ + width:responsiveWidth(100), + height:responsiveHeight(100), + }, + backgroundd_drawer:{ + backgroundColor:'#000', + }, + cardsearch:{ + width:responsiveWidth(90), + height:responsiveHeight(10), + position:'absolute', + alignSelf: 'center', + marginTop: 5, + + }, + actionButtonIcon: { + fontSize: 20, + height: 22, + + color: 'white', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); diff --git a/screens/home/IMap.js b/screens/home/IMap.js new file mode 100755 index 00000000..0479c53e --- /dev/null +++ b/screens/home/IMap.js @@ -0,0 +1,281 @@ +import React,{PureComponent} from 'react'; +import MapView,{Marker,MarkerAnimated} from "react-native-maps" +import PropTypes from 'prop-types'; +import { + StyleSheet, + View, + Image, + Text, +} from 'react-native'; +const theme=require("../../utils/theme"); +import {responsiveHeight, responsiveWidth} from "react-native-responsive-dimensions"; +import IMarker from "./IMarker"; +import I18n from "react-native-i18n"; +import MapViewDirections from 'react-native-maps-directions'; +const API_KEY="AIzaSyAYOEp-Pckvc3TwOIulCICokKgmp14rGHI"; +const mnetwork=require('./../../datas/img/png/home_network.png'); +const othernetwork=require('./../../datas/img/png/other_net.png'); +import { copilot, CopilotStep } from 'react-native-copilot'; + +class IMap extends PureComponent { + static propTypes = { + markers: PropTypes.array, + map:PropTypes.object, + network:PropTypes.object, + myNetwork:PropTypes.object, + selectedMarker:PropTypes.object, + myPosition:PropTypes.object, + onMarkerClick:PropTypes.func, + initialRegion:PropTypes.object, + typeMap:PropTypes.string, + needRoad:PropTypes.bool, + isNeedUserFocus:PropTypes.bool, + onNeedRoadReady:PropTypes.func, + onNeedRoadError:PropTypes.func, + onMapReady:PropTypes.func + }; + + static defaultProps = { + isNeedUserFocus:false + }; + constructor(props){ + super(props) + this.state={ + markers:[], + roadReady:false, + isNeedUserFocus:false, + } + } + mapRef = (ref) => { + this.mapview = ref + } + + getMapRef = () => this.mapview +componentWillReceiveProps(nextProps: Readonly

, nextContext: any): void { + const markers=this.state.markers + const newmarkers=nextProps.markers + if(markers.length<=0) + this.setState({markers:newmarkers}) + else if(markers.length!==newmarkers){ + this.setState({markers:newmarkers}) + } + this.setState({isNeedUserFocus:nextProps.isNeedUserFocus}) +} + + render(){ + const {markers,initialRegion,myPosition,myNetwork,typeMap,selectedMarker}=this.props + if(initialRegion!==null && myNetwork!==null) + return ( + + this.mapview = re} + onMapReady={this.props.onMapReady} + onRegionChangeComplete={(re)=>{this.onRegionChangeOver(re)}}> + {this.state.markers.map((item,index)=>{ + return ( + this.props.onMarkerClick(e,marker)} + network={myNetwork} + />) + })} + {this.renderMyPosition()} + {this.makeDirection()} + + + ) + else return() + } + focusToUser(){ + this.setState({isNeedUserFocus:true}) + } + closeUserFocus(){ + this.setState({isNeedUserFocus:false}) + } + onRegionChangeOver(region){ + + } + makeDirection() { + let {myPosition, selectedMarker,needRoad} = this.props + if (myPosition !== null && selectedMarker !== null && selectedMarker !== undefined && myPosition !== undefined && needRoad) { + setTimeout(()=>{ + if(!this.state.roadReady){ + this.setState({roadReady:true}) + this.props.onNeedRoadError()} + },10000) + + return ({ + this.setState({roadReady:true}) + this.props.onNeedRoadReady(data)} + } + onError={()=>{ + this.setState({roadReady:true}) + this.props.onNeedRoadError()} + } + strokeColor={theme.primary} + />) + } + } + + renderMyPosition() { + const {myPosition,myNetwork}=this.props + if(myPosition!=null){ + if(false){ + return ( + + + + ) + }else + return () + } + } + } + + +export default IMap; +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#FFF', + }, + myClusterTextStyle:{ + color:"white" + }, + myClusterStyle: { + backgroundColor:theme.accent, + height:32, + justifyContent:'center', + alignItems:'center', + width:32, + borderRadius:16 + }, + rowContainer: { + height: 52, + flex: 1, + flexDirection: 'row', + justifyContent: 'flex-start', + alignItems: 'center', + }, + iconContainer: { + marginRight: 16, + }, + mapmarker:{ + width:52, + height:52, + }, + slidingup:{ + backgroundColor:"transparent", + position:"absolute", + height:300, + bottom:0, + right:35, + zIndex: 1 + }, + panel: { + flex: 1, + backgroundColor: 'white', + position: 'relative' + }, + panelHeader: { + height: 120, + backgroundColor: '#b197fc', + alignItems: 'center', + justifyContent: 'center' + }, + favoriteIcon: { + left: responsiveWidth(75), + backgroundColor: theme.primary, + width: 64, + justifyContent:'center', + alignContent: 'center', + bottom:-64, + position:'absolute', + height: 64, + padding: 8, + zIndex:1, + borderRadius: 32, + }, + hambuger:{ + }, + topBar:{ + position:'absolute', + alignSelf: 'center', + justifyContent:'center', + alignItems: 'center', + marginTop:responsiveHeight(4), + width:responsiveWidth(95), + + }, + searchInput:{ + width:responsiveWidth(70), + fontSize:14 + }, + search: { + width:responsiveWidth(70), + height:responsiveHeight(10), + backgroundColor:'#00000000', + + + }, + + map:{ + width:responsiveWidth(100), + height:responsiveHeight(100), + }, + backgroundd_drawer:{ + backgroundColor:'#000', + }, + cardsearch:{ + width:responsiveWidth(90), + height:responsiveHeight(10), + position:'absolute', + alignSelf: 'center', + marginTop: 5, + + }, + actionButtonIcon: { + fontSize: 20, + height: 22, + + color: 'white', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); diff --git a/screens/home/IMarker.js b/screens/home/IMarker.js new file mode 100755 index 00000000..98552e51 --- /dev/null +++ b/screens/home/IMarker.js @@ -0,0 +1,185 @@ +import React,{Component,PureComponent} from 'react'; +import MapView,{Marker,MarkerAnimated,Callout,AnimatedRegion} from "react-native-maps" +import PropTypes from 'prop-types'; +import { + StyleSheet, + View, + Image, + Animated, + Easing, + Platform, + Text, +} from 'react-native'; +const userposi=require('./../../datas/img/png/user_place.png'); +const mnetwork=require('./../../datas/img/png/home_network.png'); +const othernetwork=require('./../../datas/img/png/other_net.png'); +class IMarker extends PureComponent +{ + constructor(props){ + super(props) + const data=this.props.data + this.state={ + animation:new Animated.Value(0), + subanimation:new Animated.Value(0), + coordinate:{ + longitude: parseFloat(data.longitude), + latitude: parseFloat(data.latitude), + } + } +} + componentWillReceiveProps(nextProps) { + const duration = 500 + const oldCoord={ + longitude: parseFloat(this.props.data.longitude), + latitude: parseFloat(this.props.data.latitude), + } + const coord={ + longitude: parseFloat(nextProps.data.longitude), + latitude: parseFloat(nextProps.data.latitude), + } + if (oldCoord.longitude!==coord.longitude || oldCoord.latitude!==coord.latitude) { + if (Platform.OS === 'android') { + if (this.markerRef) { + this.markerRef._component.animateMarkerToCoordinate( + coord, + duration + ); + } + } else { + /*this.state.coordinate.timing({ + cord, + duration + }).start(); + */} + } + } + startAnimation(){ + const initialValue=0 + const finalValue=1 + this.state.animation.setValue(initialValue); //Step 3 + Animated.timing( //Step 4 + this.state.animation, + { + toValue: finalValue, + duration:500, + easing: Easing.linear(), + useNativeDriver:true + } + ).start(); + } + handleViewRef = ref => this.view = ref; + render() { + const {data,network,isSelected}=this.props; + const color=isSelected?"#F48FB1A0":"transparent" + const colorSup=isSelected?"#F06292A0":"transparent" + const display=isSelected?"block":"none"; + if(data.longitude && data.latitude){ + + return ( + { + this.markerRef = re + }} + + onPress={e => { + if (!this.props.isUser) + this.props.onPress(data) + }} + image={this.getImage(data)} + /> + + ); + } + return () + + } + error(erro){ + console.log("on error render image"); + console.log(erro); + } + + componentDidMount() { + + + } + + componentDidUpdate(prevProps: Readonly

, prevState: Readonly, snapshot: SS): void { + if(this.props.isUser) + if(this.markerRef && this.props.isNeedFocus){ + this.markerRef._component.showCallout() + } + } + + getImage(data) { + const {isUser,network}=this.props; + if(isUser){ + return userposi + }else if(network && data.network===network.name){ + return mnetwork + } + return othernetwork + } + + getIcon(data) { + const {isSelected}=this.props + return isSelected ? ( + + + + ) : (); + + } + + startLoopSelectedAnimation() { + const initialValue=0 + const finalValue=1 + this.state.animation.setValue(initialValue); //Step 3 + Animated.loop(Animated.timing( //Step 4 + this.state.subanimation, + { + toValue: finalValue, + duration:1000, + easing: Easing.linear(), + useNativeDriver:true + } + ),{iteration:-1}).start(); + } +} + +const styles = StyleSheet.create({ + container: { + flex:1, + width:52, + height:52 + }, + ring:{ + + } +}); + +export default IMarker; \ No newline at end of file diff --git a/screens/home/Networks.js b/screens/home/Networks.js new file mode 100644 index 00000000..d011962b --- /dev/null +++ b/screens/home/Networks.js @@ -0,0 +1,68 @@ +import React, {Component} from 'react'; +import { + Platform, StyleSheet, Text, + TouchableWithoutFeedback, View, TextInput, + Animated, Dimensions, Image, PermissionsAndroid, + AsyncStorage, + StatusBar, TouchableNativeFeedback, TouchableOpacity,BackHandler,Alert,ProgressBarAndroid + , FlatList +} from 'react-native'; +import Icon from 'react-native-vector-icons/MaterialIcons'; +const theme=require('./../../utils/theme.json'); +import I18n from 'react-native-i18n' + +import {Title,Subheading,Button} from 'react-native-paper' +var SnapSlider = require('react-native-snap-slider'); +export default class Networks extends Component{ + static navigationOptions = ({navigation})=>{ + return{ drawerLabel: () => null, + title:"Filtre", + tabBarIcon:({focused,horizontal,tintColor})=>{ + return () + }, + }}; + + constructor(props) { + super(props); + this.state = { + valuePosition:0 + } + this.mounted = false; + this.filterOptions = [ + {value: 5, label: "5 km"}, + {value: 15, label: "15 km"}, + {value: 20, label: "20 km"}, + {value: 25, label: "25 km"} + ]; + } + geInitialState(){ + return { + valuePosition:0 + } + } + render(){ + return ( + this.slidingComplete(item)} + /> + + + {(this.state.value === undefined ? 0 : this.state.value)} km {I18n.t("DISTANCE_ARROUND")} + ) + } + + slidingComplete(itemSelected) { + this.setState({value: this.filterOptions[itemSelected].value, valuePosition: itemSelected}); + + } + + +} \ No newline at end of file diff --git a/screens/index.js b/screens/index.js new file mode 100755 index 00000000..e5d2271c --- /dev/null +++ b/screens/index.js @@ -0,0 +1,73 @@ + +import { Navigation,ScreenVisibilityListener} from 'react-native-navigation'; +import History from './history-request/History'; +import ListOptions from './drawer/ListOptions'; +import OptionsMenu from './optionMenu/OptionsMenu'; +import Requester from './history-request/Requester'; +import HistoryRequester from './history-request/HistoryRequester'; +import UserAccount from './account/UserAccount' +import SplashScreen from './splashscreen/SplashScreen'; +import Main from './login/LoginMain'; +import Connect from './login/Connect'; +import App from './home/Home'; +import Notifications from './notifications/Notifications' +import Configurations from './configurations/Configurations' +import TypeChoiser from './login/TypeChoiser' +import CreateAccount from './login/createAccount' +import HistoryItemDetails from './history-request/HistoryItemDetails' +import DateFilterHistoryDemand from './modals/DateFilterHistoryDemand' +import SuperViseurGroupeHome from './groupes/SuperViseurGroupeHome' +import ConfirmCode from './login/confirmCode' +import ForgottenPassword from './login/ForgottenPassword' +import Help from './help/Help' +import CreateUserStep2 from './login/createUserStep2' +import LoadinModal from './modals/LoadinModal' +import ActivateAccount from "./login/ActivateAccount"; +import NotificationBuilder from "./notifications/NotificationBuilder"; +import AddNetwork from "./account/AddNetwork"; +import GenerateNetworkForGeo from "./account/GenerateNetworkForGeo"; +import HelpMenu from "./help/HelpMenu"; +import UpdateInformations from "./account/UpdateInformations"; +import InterticielAds from "./ads/InterticielAds"; +import IntersticielAds from "./ads/IntersticielAds"; +let route=require('./../route.json') +export function registerScreens() { + + Navigation.registerComponent(route.discover, () => Connect); + Navigation.registerComponent(route.first,()=>App); + Navigation.registerComponent(route.splashscreen,()=>SplashScreen); + Navigation.registerComponent(route.drawer,() => ListOptions); + Navigation.registerComponent(route.historiques, () => History); + Navigation.registerComponent(route.options,()=>OptionsMenu); + Navigation.registerComponent(route.login,()=>Connect); + Navigation.registerComponent(route.credrequester,()=>HistoryRequester); + Navigation.registerComponent(route.useraccount,()=>UserAccount); + Navigation.registerComponent(route.notification,()=>Notifications); + Navigation.registerComponent(route.configurations,()=>Configurations); + Navigation.registerComponent(route.typeaccountcreate,()=>TypeChoiser); + Navigation.registerComponent(route.simpleusercreate,()=>CreateAccount); + Navigation.registerComponent(route.historyItemDetails,()=>HistoryItemDetails); + Navigation.registerComponent(route.modalhistoryfilter,()=>DateFilterHistoryDemand); + Navigation.registerComponent(route.superviseurgroup,()=>SuperViseurGroupeHome); + Navigation.registerComponent(route.forgotpass,()=>ForgottenPassword); + Navigation.registerComponent(route.confirmcode,()=>ConfirmCode); + Navigation.registerComponent(route.help,()=>Help); + Navigation.registerComponent(route.modaloading,()=>LoadinModal) + Navigation.registerComponent(route.activateaccount,()=>ActivateAccount) + Navigation.registerComponent(route.notificationView,()=>NotificationBuilder) + Navigation.registerComponent(route.creationstep2,()=>CreateUserStep2) + Navigation.registerComponent(route.addNetwork,()=>AddNetwork); + Navigation.registerComponent(route.generateNetwork,()=>GenerateNetworkForGeo); + Navigation.registerComponent(route.helpmenu,()=>HelpMenu) + Navigation.registerComponent(route.updateinfo,()=>UpdateInformations) + Navigation.registerComponent(route.intersticielAds,()=>InterticielAds) +} + +export function registerScreenVisibilityListener() { + new ScreenVisibilityListener({ + willAppear: ({screen}) => console.log(`Displaying screen ${screen}`), + didAppear: ({screen, startTime, endTime, commandType}) => console.log('screenVisibility', `Screen ${screen} displayed in ${endTime - startTime} millis [${commandType}]`), + willDisappear: ({screen}) => console.log(`Screen will disappear ${screen}`), + didDisappear: ({screen}) => console.log(`Screen disappeared ${screen}`) + }).register(); + } \ No newline at end of file diff --git a/screens/login/ActivateAccount.js b/screens/login/ActivateAccount.js new file mode 100755 index 00000000..de8adf41 --- /dev/null +++ b/screens/login/ActivateAccount.js @@ -0,0 +1,347 @@ +import React,{Component} from 'react' +import {View,StyleSheet,Text,Image,Alert} from 'react-native' +import Button from 'apsl-react-native-button' +import {Fumi} from 'react-native-textinput-effects'; +let theme=require('./../../utils/theme.json'); +let route=require('./../../route.json'); +import I18n from 'react-native-i18n' +import * as Animatable from 'react-native-animatable'; +import {validateUser, valifateAgent, saveNewuser, readUser} from "./../../webservice/AuthApi" +import Icon from 'react-native-vector-icons/MaterialIcons' +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' +import {IlinkEmitter} from "./../../utils/events" +export default class ActivateAccount extends Component{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + statusBarTextColorScheme: 'light', + }; + static options(passProps){ + return { + topBar:{ + visible:false, + drawBehind:true + }, + statusBar:{ + drawBehind:true + } + + } + } + constructor(props){ + super(props) + const {navigation}=this.props + this.type=navigation.getParam('type',0) + this.user=navigation.getParam('user',null) + this.state=this.initState() + } + initState(){ + return { + user:this.user, + userSimpleLoading:false + } + } + render(){ + return this.type===0? + this.renderUserSimpleActivation() + :this.renderAgentActivation(); + } + async gotoHome(){ + let readU=await readUser() + let road=""; + if(!readU.category) + road="App" + else { + switch (readU.category) { + case 'geolocated': + road="AgentApp" + break; + case 'super': + road="adminApp" + break + default: + road="supAdminApp" + } + } + + this.props.navigation.navigate(road) + + + } + tryToActive() { + let {activateSimple,user}=this.state; + const validation_code=user.validation_code + this.setState({userSimpleLoading:true}); + const isSame=validation_code===activateSimple + if(isSame){ + + validateUser(user).then(async (result)=>{ + console.log(result); + if(result.success!==undefined){ + Alert.alert("",I18n.t('ACCOUNT_ACTIVATE_TEXT'),[{text:"Ok",onPress:()=>{ + var us=result.user + saveNewuser(us) + this.gotoHome() + }}]) + }else{ + Alert.alert("",result.message,[{text:"Ok",onPress:()=>{}}]) + } + this.setState({userSimpleLoading:false}); + }).catch((e)=>{ + console.warn(e) + + this.setState({userSimpleLoading:false}); + this.userValidate.shake(800) + }) + + }else{ + setTimeout(()=>{ + this.setState({userSimpleLoading:false}); + this.userValidate.shake(800) + },2000) + } + } + + renderUserSimpleActivation() { + const text=I18n.t('ACTIVATE_ACCOUNT') + + return ( + + + + + + {I18n.t('LAST_STEP')} + {I18n.t('LAST_STEP_TEXT')} + {this.userValidate=comp}}> + + { + console.warn(text) + this.setState({activateSimple:text}) + }} + + /> + + + + ) + } + + renderAgentActivation() { + console.warn(this.state.user) + + switch(this.state.user.category){ + default: + return this.renderGeoLocatedActivation(); + break; + case "hyper": + return this.renderHypervisorActivation(); + break + } + + } + + renderGeoLocatedActivation() { + const text=I18n.t('ACTIVATE_ACCOUNT') + return ( + + + + + + {I18n.t('LAST_STEP')} + {I18n.t('LAST_STEP_TEXT')} + {this.userValidate=comp}}> + + this.setState({activateSimple:text})} + /> + + + + ) + } +tryToActiveGeolocated() +{ + const {activateSimple,user}=this.state; + this.setState({userSimpleLoading:true}); + if(user.validation_code===String(activateSimple)){ + valifateAgent(user,null).then((result)=>{ + console.log(result) + if(result.success===1){ + let us={} + + for(let key in user){ + const val=user[key]; + if(key!=='active')us['active']='oui'; + us[key]=val; + } + saveNewuser(us); + setTimeout(() => { + this.gotoHome() + }, 1000) + }else{ + console.log(result.message) + this.userValidate.shake(800) + } + this.setState({userSimpleLoading:false}); + }).catch((e)=>{ + console.log(e) + this.setState({userSimpleLoading:false}); + this.userValidate.shake(800) + }) + + }else{ + setTimeout(()=>{ + this.setState({userSimpleLoading:false}); + this.userValidate.shake(800) + },2000) + } +} + + tryToActivateHypervisor() { + const {activateSimple,user,nbre_code,nbre_code_superviseur}=this.state; + this.setState({userSimpleLoading:true}); + if(user.validation_code===activateSimple){ + valifateAgent(user,{nbre_code:nbre_code,nbre_code_superviseur:nbre_code_superviseur}) + .then((result)=>{ + if(result.success===1){ + let usr={} + usr['etat']=1 + for(key in user){ + console.log(usr) + if(key!=='etat')usr[key]=user[key] + + } + saveNewuser(usr); + setTimeout(() => { + this.gotoHome() + }, 1000) + }else{ + console.log(result.message) + this.userValidate.shake(800) + } + this.setState({userSimpleLoading:false}); + }).catch((e)=>{ + this.setState({userSimpleLoading:false}); + this.userValidate.shake(800) + }) + + }else{ + setTimeout(()=>{ + this.setState({userSimpleLoading:false}); + this.userValidate.shake(800) + },2000) + } + } + + renderHypervisorActivation() { + const text=I18n.t('ACTIVATE_ACCOUNT') + + return ( + + + + + Derniere étape + {I18n.t('SUBTITLE_ACTIVE_ACCOUNT')} + + {this.userValidate=comp}}> + this.setState({activateSimple:text})} + iconSize={24} style={styles.inputkey}/> + + + + {I18n.t('SUPERVISOR_NUMBER')} + {this.setState({nbre_code_superviseur:text})}} + /> + + + {I18n.t('GEOLOCATED_NUMBER')} + this.setState({nbre_code:text})} + /> + + + + ) + } + +} +const styles=StyleSheet.create({ + container:{ + + }, + titleText:{ + color:'white', + fontSize:20, + fontWeight:'bold', + marginBottom:20 + }, + titleText2:{ + color:'white', + fontSize:20, + alignSelf:'center', + fontWeight:'bold', + marginBottom:20 + }, + descriptionText:{ + color:'white', + fontSize:16, + marginLeft:responsiveWidth(7), + marginRight:responsiveWidth(7), + textAlign:'center', + marginBottom:20 + }, + btnTextActive:{ + fontSize:17, + fontWeight:'bold', + color:'white' + }, + inputkey2:{ + width:responsiveWidth(40), + height:70,alignSelf:'center',borderRadius:6,marginBottom:responsiveHeight(5) + }, + inputkey:{ + height:70,width:responsiveWidth(90),alignSelf:'center',borderRadius:6,marginBottom:responsiveHeight(5)}, + btnActive:{ + borderColor:'transparent', + width:responsiveWidth(90), + alignSelf:'center', + backgroundColor:theme.accent, + } +}) \ No newline at end of file diff --git a/screens/login/Connect.js b/screens/login/Connect.js new file mode 100755 index 00000000..1dcac2e7 --- /dev/null +++ b/screens/login/Connect.js @@ -0,0 +1,118 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + * @flow + */ + +import React, {Component} from 'react'; +import {Platform, StyleSheet, Text, View,TextInput} from 'react-native'; +import ActionButton from 'react-native-action-button'; +import {responsiveHeight,responsiveWidth} from 'react-native-responsive-dimensions'; +import CardView from 'react-native-cardview'; +import { LoginUi } from './ui/Login.ui'; +import BaseScreen from "../BaseScreen"; + +type Props = {}; +export default class Connect extends BaseScreen { + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + static options(passProps) { + return { + statusBar: { + visible: false, + drawBehind: true, + }, + topBar: { + drawBehind: true, + visible: false, + animate: false + } + }; + } + + + constructor(props){ + super(props); + }; + + render () { + return ( + + + ) + } + } + +const styles = StyleSheet.create({ + container: { + width:responsiveWidth(100), + height:responsiveHeight(100) +}, + hambuger:{ + width:responsiveWidth(5), + marginLeft: 10, + }, + topBar:{ + flexDirection: 'row', + position:'absolute', + alignSelf: 'center', + borderWidth: 0, + alignItems: 'center', + marginTop: 5, + width:responsiveWidth(95), + height:responsiveHeight(10), + + }, + searchInput:{ + width:responsiveWidth(70) + + }, + search: { + width:responsiveWidth(70), + height:responsiveHeight(10), + backgroundColor:'#00000000', + + + }, + + map:{ + width:responsiveWidth(100), + height:responsiveHeight(100), + }, + backgroundd_drawer:{ + backgroundColor:'#000', + }, + cardsearch:{ + width:responsiveWidth(90), + height:responsiveHeight(10), + position:'absolute', + alignSelf: 'center', + marginTop: 5, + + }, + actionButtonIcon: { + fontSize: 20, + height: 22, + + color: 'white', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); diff --git a/screens/login/ForgottenPassword.js b/screens/login/ForgottenPassword.js new file mode 100755 index 00000000..e4486b4c --- /dev/null +++ b/screens/login/ForgottenPassword.js @@ -0,0 +1,323 @@ +import React,{Component} from 'react' +import {StyleSheet, Text, View, Alert, AsyncStorage, BackHandler, PermissionsAndroid} from 'react-native' +import {Fumi} from 'react-native-textinput-effects' +import {responsiveHeight,responsiveWidth} from 'react-native-responsive-dimensions' +import FontAwesome from 'react-native-vector-icons/FontAwesome' +import Button from 'apsl-react-native-button' +let theme=require('./../../utils/theme.json') +import {getCountryNetwork, reinitpassword} from './../../webservice/AuthApi' +import * as Animatable from 'react-native-animatable'; +import I18n from "react-native-i18n" +import Geolocation from "react-native-geolocation-service"; +import {getPositionInformation} from "../../webservice/MapService"; +import isEqual from 'lodash/isEqual' +let country=require('./../../utils/country_code.json'); +import Icon from 'react-native-vector-icons/MaterialIcons'; + +const GEOLOCATION_OPTIONS= { enableHighAccuracy: true, timeout: 20000 } + +const route=require("./../../route.json") +export default class ForgottenPassword extends Component{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + + handlePasswordRef=ref=>this.state.passRef=ref; + + constructor(props){ + super(props); + console.log(this.props); + this.state=this.initState(); + }; + + initState(){ + return { + phone:'', + passRef:null, + isSending:false, + } + } + _retrieveData = async () => { + try { + const value = await AsyncStorage.getItem('position'); + console.warn(value) + if (value !== null) { + let re=JSON.parse(value) + re.longitudeDelta=0.04 + re.latitudeDelta=0.01 + const pos=JSON.parse(value) + this.setState({region:re,oldPosition:pos}) + } + } catch (error) { + console.warn(error) + } + }; + watchLocation(geo=null) { + const options= geo==null?GEOLOCATION_OPTIONS:geo + this.watchID = Geolocation.getCurrentPosition((position) => { + const myLastPosition = this.state.myPosition; + const myPosition = position.coords; + if (!isEqual(myPosition, myLastPosition)) { + console.warn(myPosition) + if(myPosition.longitude!==0 && myPosition.latitude!==0) { + this.retreiveinformationFromPosition(myPosition) + }else{ + if(!this.state.alreadyRetry) { + this.setState({alreadyRetry: true}) + let geo = {enableHighAccuracy: false, timeout: 20000, maximumAge: 1000} + this.watchLocation(geo) + }else{ + if(this.state.oldPosition){ + this.retreiveinformationFromPosition(this.state.oldPosition) + }else{ + Geolocation.watchPosition((position)=>{ + if(position.longitude!==0 && position.latitude!==0) { + this.retreiveinformationFromPosition(position) + }else{ + Alert.alert(I18n.t("UNABLE_GET_INFORMATION") + ,I18n.t('UNABLE_GET_INFORMATION_TEXT'), + [{text:I18n.t("EXIT"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("RESTART"),onPress:()=>{this.watchLocation()}}], + {cancelable:false} + )}},(error)=>{ + this.setState({loadingDialog:false}) + Alert.alert(I18n.t("TITLE_ERROR_SURVENU"), + I18n.t("TEXT_ERROR_START_APPLICATION"), + [{text:"Ok",onPress:()=>{ + BackHandler.exitApp() + }}], + {cancelable:false}) + },GEOLOCATION_OPTIONS) + } + } + } + } + + },(positionError) => { + console.warn(positionError) + Alert.alert(I18n.t("UNABLE_GET_INFORMATION") + ,I18n.t('UNABLE_GET_INFORMATION_TEXT'), + [{text:I18n.t("EXIT"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("RESTART"),onPress:()=>{this.watchLocation()}}], + {cancelable:false} + ) + } + ,options) + } + + + retreiveinformationFromPosition(myPosition){ + getPositionInformation(myPosition).then((response)=>{ + console.log(response,myPosition) + if(response.results!==undefined){ + if(response.results.length>0) { + let most = response.results[0] + let {address_components, formatted_address, place_id} = most + this.setState({address: address_components, textadress: formatted_address, place: place_id}) + let results=response.results; + let shortcountry; + let mcountry; + for (let i=0; i < results[0].address_components.length; i++) { + for (let j=0; j < results[0].address_components[i].types.length; j++) { + if (results[0].address_components[i].types[j] === "country") { + mcountry = results[0].address_components[i]; + shortcountry=mcountry.short_name; + this.setState({shortCountry:mcountry.short_name,longCountry: mcountry.long_name}) + } + } + } + for (let i of country) { + if(i.code=== shortcountry){ + this.setState({indicatif:i.dial_code,enterPhone:i.dial_code})}} + }else{ + + } + this.setState({phoneEnabled:true,loadingDialog:false}); + + }else{ + console.log(myPosition,response) + this.showConnexionAlertError() + } + }).catch((e)=>{ + console.log(e) + + this.setState({phoneEnabled:true,loadingDialog:false}); + Alert.alert(I18n.t("TITLE_PROBLE_COME"), + I18n.t("TEXT_UNABLE_TO_GET_COUNTRY_INFO"),[{text:"Ok",onPress:()=>{ + this.watchLocation() + }}],{cancelable:false}) + }); + } + + componentDidMount(){ + this.props.navigation.addListener("didFocus",payload=>{ + this._retrieveData() + this.requestCameraPermission() + }) + } + async requestCameraPermission() { + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + { + 'title': 'Cool Photo App Camera Permission', + 'message': 'Cool Photo App needs access to your camera ' + + 'so you can take awesome pictures.' + } + ) + if (granted === PermissionsAndroid.RESULTS.GRANTED) { + this.watchLocation() + } else { + this.setState({loadingDialog:false}) + Alert.alert(I18n.t("TITLE_UNABLE_TO_AUTORISE"), + I18n.t("MISSING_AUTORISATION_LOCATION"), + [{text:"Ok",onPress:()=>{ + BackHandler.exitApp() + }}], {cancelable:false} + ) + } + } catch (err) { + console.warn("ee",err) + this.setState({loadingDialog:false}) + Alert.alert(I18n.t("TITLE_ERROR_SURVENU"), + I18n.t("TEXT_ERROR_START_APPLICATION"), + [{text:"Ok",onPress:()=>{ + BackHandler.exitApp() + }}], {cancelable:false} + ) + + } + } + + + render(){ + return + + this.props.navigation.pop()} + /> + + + + + + {I18n.t("FORGOTTEN_PASSWORD")} + + + {I18n.t("TEXT_FORGOTTEN_PASSWORD")} + + {this.handlePasswordRef(ref)}}> + + + { this.setState({phone: text})}} + iconColor={theme.accent} + /> + + + + + + } + + onRenitPassword() { + if(this.state.phone.length>0){ + if(this.props.type!==null){ + let type=this.props.type===0?'user':'agent'; + this.setState({isSending:true}) + reinitpassword(this.state.indicatif+this.state.phone,type).then((data)=>{ + + this.setState({isSending:false}) + + if(data.error){ + this.state.passRef.shake(1200); + + Alert.alert("",data.message,[{text:"Ok"}]) + + }else if(data.success===1) { + Alert.alert("", data.message, [{text: "Ok"}]) + + setTimeout(() => { + this.props.navigation.popToTop() + },1000) + } + }) + } + + } + } +} + +const styles=StyleSheet.create({ + TitlePassword:{ + marginLeft:20, + marginRight:20, + color:'white', + fontWeight:'bold', + fontSize:20, + textAlign:'center' + }, + + subtitlePassword:{ + margin:20, + color:'white', + fontSize:20, + textAlign:'center' + }, + btntext:{ + color:'white', + fontWeight:'bold', + fontSize:17 + }, + btnsend:{ + backgroundColor:theme.accent, + borderColor:'transparent', + marginRight:20, + marginTop:20, + height:responsiveHeight(8), + marginLeft:20 + }, + input:{ + height:54, + marginLeft:3, + width:responsiveWidth(60), + marginRight:20, + borderRadius:10, + justifyContent:'center', + textAlign:'center' + }, + inputCode:{ + height:54, + width:responsiveWidth(30), + marginRight:10, + borderRadius:10, + justifyContent:'center', + textAlign:'center' + } +}) \ No newline at end of file diff --git a/screens/login/LoginMain.js b/screens/login/LoginMain.js new file mode 100755 index 00000000..8ef4dd07 --- /dev/null +++ b/screens/login/LoginMain.js @@ -0,0 +1,10 @@ +import React, { Component } from 'react'; +import {StyleSheet,View} from 'react-native'; +import PropTypes from 'prop-types'; +import LoginUi from './ui/Login.ui'; + +export default class Main extends Component{ + render(){ + return () + } +} diff --git a/screens/login/TypeChoiser.js b/screens/login/TypeChoiser.js new file mode 100755 index 00000000..cc40b4c1 --- /dev/null +++ b/screens/login/TypeChoiser.js @@ -0,0 +1,137 @@ +import React, { Component} from 'react' +import {StyleSheet, Text,View,Image,TouchableOpacity} from 'react-native' +import Button from 'apsl-react-native-button' +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' +import Icon from 'react-native-vector-icons/MaterialIcons'; + +import I18n from 'react-native-i18n' +let theme=require('./../../utils/theme.json') +let route=require('./../../route.json'); +require('./../../utils/Translations'); +export default class TypeChoiser extends Component{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + + static options(passProps){ + return { + topBar:{ + visible:false, + enabled:false, + drawBehind: true, + + }, + statusBar:{ + drawBehind: true, + enabled:false, + } + } + } + _SimpleUserCreator(){ + this.props.navigation.push(route.simpleusercreate,{ + type:0 + }) + } + _geolocatedUser(){ + this.props.navigation.push(route.simpleusercreate,{ + type:1 + }) + } + constructor(props){ + super(props) + } + render(){ + return ( + + + this.props.navigation.pop()} + /> + + + + + + + + {I18n.t('TITLE_CHOICE_TYPE_ACCOUNT')} + + + {this.props.navigation.pop()}}> + {I18n.t('ALREADY_HAVE_AN_ACCOUNT')} + + + + ) + } + +} +const log=StyleSheet.create({ + container:{ + flexDirection:'row', + alignItems:'center', + justifyContent:'center' + }, + img:{ + width:responsiveWidth(90), + resizeMode:'contain', + alignSelf:'center' + }, + title:{ + color:"white", + fontSize:22, + fontWeight:'bold', + alignSelf:'center' + } +}) +const styles=StyleSheet.create({ + container:{ + flex:1, + backgroundColor:theme.primary, + }, + textTitle:{ + color:'white', + fontSize:16, + marginLeft:20, + marginRight:20, + marginBottom:20, + marginTop:10, + textAlign:'center', + fontWeight:'bold' + }, + logintext:{ + color:'white', + alignSelf:'flex-end', + marginRight:10 + }, + btnText1:{ + color:"white", + fontSize:17, + fontWeight:'bold' + }, + btnStyle1:{ + marginLeft:responsiveWidth(5), + marginRight:responsiveWidth(5), + borderColor:'transparent', + backgroundColor:theme.accentLight, + height:responsiveHeight(8) + }, + btnStyle2:{ + marginLeft:responsiveWidth(5), + marginRight:responsiveWidth(5), + backgroundColor:'white', + borderColor:'transparent', + height:responsiveHeight(8) + + } +}) \ No newline at end of file diff --git a/screens/login/confirmCode.js b/screens/login/confirmCode.js new file mode 100755 index 00000000..14f90ae1 --- /dev/null +++ b/screens/login/confirmCode.js @@ -0,0 +1,57 @@ +import React,{Component} from 'react' +import {StyleSheet,View,Text} from 'react-native' +import {Fumi} from 'react-native-textinput-effects' +import Button from 'apsl-react-native-button' +import {responsiveHeight,responsiveWidth,responsiveFontSize} from 'react-native-responsive-dimensions' +import FontAwesome from 'react-native-vector-icons/FontAwesome' + +let route=require('./../../route.json') +let theme=require('./../../utils/theme.json') + +export default class ConfirmCode extends Component{ + + render(){ + return + + Confirmation de création de compte + + + Entrez le code de confirmation de compte que vous aviez recu par email + + + + + } +} +const styles=StyleSheet.create({ + container:{ + backgroundColor:theme.primary, + flex:1, + }, + btntext:{ + color:'white', + fontWeight:'bold', + fontSize:17 + }, + btnsend:{ + backgroundColor:theme.accent, + borderColor:'transparent', + marginRight:20, + marginTop:20, + height:responsiveHeight(8), + marginLeft:20 + }, + input:{ + height:54, + marginLeft:20, + marginRight:20, + borderRadius:10, + justifyContent:'center', + textAlign:'center' + } +}) \ No newline at end of file diff --git a/screens/login/createAccount.js b/screens/login/createAccount.js new file mode 100755 index 00000000..e26e6d51 --- /dev/null +++ b/screens/login/createAccount.js @@ -0,0 +1,412 @@ +import React, { Component } from 'react'; +import {StyleSheet,Text,View,Image,ScrollView} from 'react-native'; +import PropTypes from 'prop-types'; +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; +import Icon from 'react-native-vector-icons/MaterialIcons'; +import { responsiveHeight,responsiveWidth,responsiveFontSize } from 'react-native-responsive-dimensions'; +import {Fumi,Kaede} from 'react-native-textinput-effects' +import * as Animatable from 'react-native-animatable' +import Button from 'apsl-react-native-button' +import {categoryChild} from './../../webservice/AuthApi' +let theme=require('./../../utils/theme.json') +let route=require('./../../route.json') +import I18n from 'react-native-i18n'; + +export default class CreateAccount extends Component{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + + static options(passProps){ + return { + topBar:{ + visible:false, + enabled:false, + drawBehind: true, + + }, + statusBar:{ + drawBehind: true, + enabled:false, + } + } + } + + constructor(props){ + super(props); + this.state=this.initState(); + const { navigation } = this.props; + this.type = navigation.getParam('type', 0); + + } + + + + initState() { + return { + password: null, + enterPhone: null, + nameanim: null, + surnameanim: null, + passwordanim: null, + confirmpassanim: null, + isLoging: false, + snackVisible: false, + snackText: '', + user: {category:this.type===0?'user':'geolocated'} + + } + } + + render(){ + return this.type===1?this.renderUserGeoAccount():this.renderUserAccount() + + } + + renderUserGeoAccount() { + return ( + + this.props.navigation.pop()} + /> + {I18n.t('TEXT_BIG_CREATE_AGENT_1')} + + {I18n.t('TEXT_SUBTITLE_CREATE_1')} + {this.nameanim=comp}}> + { + let use=this.state.user; + use.lastname=text; + this.setState({user:use})}} + style={styles.input} + > + + + {this.surnameanim=comp}}> + { + let use=this.state.user; + use.address=text; + this.setState({user:use})}} + + > + + + {this.mailanim=comp}}> + { + let use=this.state.user; + use.email=text; + this.setState({user:use})}} + + style={styles.input} + > + + + {this.memberanim=comp}}> + { + let use=this.state.user; + use.member=text; + this.setState({user:use})}} + + iconSize={20} + style={styles.input} + > + + + {this.passanim=comp}}> + { + let use=this.state.user; + use.password=text; + this.setState({user:use})}} + iconSize={20} + style={styles.input} + > + + + {this.confirmanim=comp}}> + { + let use=this.state.user; + use.confirmpass=text; + this.setState({user:use})}} + + iconSize={20} + style={styles.input} + > + + + + + ) + + } + + renderUserAccount() { + return ( + + this.props.navigation.pop()} + /> + {I18n.t('TEXT_BIG_CREATE_1')} + + {I18n.t('TEXT_SUBTITLE_CREATE_1')} + {this.nameanim=comp}}> + { + let use=this.state.user; + use.lastname=text; + this.setState({user:use})}} + iconColor={'#f95a25'} + iconSize={20} + style={styles.input} + > + + + {this.surnameanim=comp}}> + { + let use=this.state.user; + use.address=text; + this.setState({user:use})}} + + style={styles.input} + > + + + {this.mailanim=comp}}> + { + let use=this.state.user; + use.email=text; + this.setState({user:use})}} + style={styles.input} + > + + + {this.passanim=comp}}> + { + let use=this.state.user; + use.password=text; + this.setState({user:use})}} + style={styles.input} + > + + + {this.confirmanim=comp}}> + { + let use=this.state.user; + use.confirmpass=text; + this.setState({user:use})}} + style={styles.input} + > + + + + + + ) + } + + _onUserCreateAccount() { + let { user }=this.state; + console.log(user) + if(user!==undefined) { + if (this.checkOrShake(user.lastname, this.nameanim)) { + if (this.checkOrShake(user.address, this.surnameanim)) { + if (this.checkOrShake(user.email, this.mailanim)) { + if (this.checkOrShake(user.password, this.passanim)) { + if (this.checkOrShake(user.confirmpass, this.confirmanim)) { + if (user.confirmpass === user.password) { + this.props.navigation.push(route.creationstep2,{ + type: this.type, + user: user + + }) + }else{ + this.passanim.shake(800) + this.confirmanim.shake(800) + } + } + + + } + } + }} + }else{ + /*this.props.navigator.showSnackbar({ + text:"impossible de trouvé l'utilisateur" + }) + console.log(user) + */} + + } + + checkUserGeolocated() { + let { user }=this.state; + this.setState({isLoging:true}) + if(user!==undefined) { + if (this.checkOrShake(user.lastname, this.nameanim)) { + if (this.checkOrShake(user.address, this.surnameanim)) { + if (this.checkOrShake(user.email, this.mailanim)) { + if (this.checkOrShake(user.member, this.memberanim)) { + categoryChild(user.member).then((codes)=>{ + if (codes!==undefined && codes!==null&& codes.child !== undefined) { + let user = this.state.user; + user.category = codes.child; + this.setState({user: user}) + } this.setState({isLoging:false}) + if (this.checkOrShake(user.password, this.passanim)) { + if (this.checkOrShake(user.confirmpass, this.confirmanim)) { + if (user.password === user.confirmpass) { + this.props.navigation.push(route.creationstep2, { + type: this.type, + user: user + }) + }else{ + this.passanim.shake(800) + this.confirmanim.shake(800) + this.setState({isLoging:false}) + } + }else { + this.setState({isLoging:false}) + } + }else this.setState({isLoging:false}) + + }).catch((e)=>{ this.setState({isLoging:false}) + }) + + }else this.setState({isLoging:false}) + + }else this.setState({isLoging:false}) + + }else this.setState({isLoging:false}) + + }else this.setState({isLoging:false}) + + }else{ + this.setState({isLoging:false}) + /*this.props.navigator.showSnackbar({ + text:"impossible de trouvé la variable user" + })*/ + console.log(user) + } + + } + + checkOrShake(champ,view) { + let res=false; + if(champ!==undefined && champ.length>0) { + res = true; + }else{ + view.shake(800) + } + return res; + } +} + +const styles=StyleSheet.create({ + container:{ + flex:1, + backgroundColor:theme.primaryDark, + }, + textbtnvalide:{ + color:'white', + fontWeight:'bold' + }, + bigtitle:{ + color:'white', + fontSize:20, + flex:1, + fontWeight:'bold', + textAlign:'center', + margin:20, + }, + subbigtitle:{ + color:'white', + fontSize:17, + textAlign:'center', + margin:5, + }, + btnvalide:{ + marginTop:20, + marginLeft:20, + marginRight:20, + borderColor:'transparent', + backgroundColor:theme.accentLight, + height:52 + }, + input:{ + height:60, + marginTop:responsiveHeight(2), + marginLeft:responsiveWidth(5), + marginRight:responsiveWidth(5), + borderRadius:5, + } +}) + diff --git a/screens/login/createUserStep2.js b/screens/login/createUserStep2.js new file mode 100755 index 00000000..15038c7b --- /dev/null +++ b/screens/login/createUserStep2.js @@ -0,0 +1,879 @@ +import React, { Component } from 'react'; +import { + Modal, + StyleSheet, + Text, + View, + Image, + ProgressBarAndroid, + ScrollView, + TouchableOpacity, + Platform, + PermissionsAndroid, + Alert, + FlatList, + BackHandler +} from 'react-native'; +import PropTypes from 'prop-types'; +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; +import { responsiveHeight,responsiveWidth,responsiveFontSize } from 'react-native-responsive-dimensions'; +import {Fumi,Kaede} from 'react-native-textinput-effects' +import * as Animatable from 'react-native-animatable'; +import Button from 'apsl-react-native-button'; +import MapView,{Marker} from 'react-native-maps'; +import { Dropdown } from 'react-native-material-dropdown'; +import isEqual from 'lodash/isEqual'; +import {getPositionInformation} from './../../webservice/MapService'; +import I18n from 'react-native-i18n' +import { material } from 'react-native-typography'; +import Icon from 'react-native-vector-icons/MaterialIcons'; +import {getCountryNetwork,createGeolocatedAccount,createUserAccount,getTownInformationName,getListCountriesActive,getCodeInformation} from './../../webservice/AuthApi'; +import {SinglePickerMaterialDialog,MultiPickerMaterialDialog,MaterialDialog} from "react-native-material-dialog"; +import Geolocation from 'react-native-geolocation-service'; +const GEOLOCATION_OPTIONS = { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000,useSignificantChanges:true }; + +let theme=require('./../../utils/theme.json'); +let route=require('./../../route.json'); +let country=require('./../../utils/country_code.json'); +/*var Fabric = require('react-native-fabric'); + +var { Crashlytics } = Fabric; +var { Answers } = Fabric;*/ +declare var google; +import Spinner from "react-native-loading-spinner-overlay" +const propTypes = { + ...Marker.propTypes, + coordinate: PropTypes.shape({ + latitude: PropTypes.number.isRequired, + longitude: PropTypes.number.isRequired, + }), + children: PropTypes.node, + geolocationOptions: PropTypes.shape({ + enableHighAccuracy: PropTypes.bool, + timeout: PropTypes.number, + maximumAge: PropTypes.number, + }), + heading: PropTypes.number, + enableHack: PropTypes.bool, +}; + +const defaultProps = { + enableHack: false, + geolocationOptions: GEOLOCATION_OPTIONS, +}; + +export default class CreateUserStep2 extends Component{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + + static options(passProps){ + return { + topBar:{ + visible:false, + enabled:false, + drawBehind: true, + + }, + statusBar:{ + drawBehind: true, + enabled:false, + } + } + } + + constructor(props) { + super(props); + const {navigation} = this.props; + this.type = navigation.getParam("type", 0); + this.user = navigation.getParam('user', null); + this.state = this.initState(); + } + retreiveCodeInformation(){ + const membre=this.state.user.member; + return new Promise(async (resolve,reject)=>{ + let datas=await getCodeInformation(membre) + resolve(datas) + }) + + } + initState() { + return { + password: null, + enterPhone: null, + nameanim: null, + networksinglePickerVisible:false, + surnameanim: null, + passwordanim: null, + confirmpassanim: null, + isLoging: false, + countries:[], + snackVisible: false, + snackText: '', + disableNetwork:false, + networks:[], + modalVisible:true, + select_network:I18n.t("SELECT_NETWORK"), + user: this.user + + } + } + + render(){ + + return this.type===1?this.renderUserGeoAccount():this.renderUserAccount() + + } + + async getNetworks(indicatif) { + + if (indicatif){ + let result={} + try{ + result=await this.retreiveCodeInformation() + const {category}=result + }catch(e){ + result=false + } + console.log(result) + if(result){ + if(result.child){ + this.setState({disableNetwork:true}) + if(result.network) + this.setState({modalVisible:false,networks:[result.network], + network:result.network,select_network:I18n.t("YOUR_NETWORK")}) + + else { + Alert.alert(I18n.t('TITLE_PROBLE_COME'),"Impossible de recuperer les informations du code parrain",[{text:"Revenir",onPress:()=>this.props.navigation.pop()}]) + } + }else{ + console.log("need enable") + getCountryNetwork(indicatif).then((result) => { + this.reseaux = []; + let networks = result; + + for(let prop in networks){ + if(networks[prop]!==""){ + this.reseaux.push(networks[prop]); + } + + } + this.setState({networks:this.reseaux}); + this.setState({modalVisible:false}) + + }, (err) => { + this.setState({modalVisible:false}) + this.showErrorDialog() + }); + } + }else{ + getCountryNetwork(indicatif).then((result) => { + this.reseaux = []; + let networks = result; + for(let prop in networks){ + if(networks[prop]!==""){ + this.reseaux.push(networks[prop]); + } + } + this.setState({networks:this.reseaux}); + this.setState({modalVisible:false}) + + }, (err) => { + this.setState({modalVisible:false}) + this.showErrorDialog() + }); + } + + + } else { + this.setState({modalDialog:false}) + Alert.alert("Une erreur est survenue","Impossible de récuperer des informations du pays verifier que votre gps est activé," + + "et que vous êtes connecté à internet puis ressayer",[{text:"Recommencer",onPress:()=>{ + this.setState({modalDialog:true}) + this.watchLocation() + }},{text:"Annuler",onPress:()=>{this.props.navigation.popToTop()}}]) + + } + + } + showErrorDialog(){ + this.setState({modalDialog:false}) + Alert.alert("Une erreur est survenue","Impossible de récuperer des informations du pays verifier que votre gps est activé," + + "et que vous êtes connecté à internet puis ressayer",[{text:"Recommencer",onPress:()=>{ + this.watchLocation() + }},{text:"Annuler",onPress:()=>{this.props.navigation.popToTop()}}]) + } + + componentDidMount() { + + this.mounted = true; + const {type}=this.props; + + + if (this.props.coordinate) return; + + if (Platform.OS === 'android') { + this.requestCameraPermission(); + } else { + this.watchLocation(); + } + + } + + async requestCameraPermission() { + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + { + 'title': 'Cool Photo App Camera Permission', + 'message': 'Cool Photo App needs access to your camera ' + + 'so you can take awesome pictures.' + } + ) + if (granted === PermissionsAndroid.RESULTS.GRANTED) { + this.watchLocation(); + } else { + this.setState({modalDialog:false}) + Alert.alert("Echec à l'autorisation", + "L'application n'est pas autorisé à acceder à votre position veuillez verifier que votre GPS est activé et configurer en mode Haute Precision", + [{text:"Ok",onPress:()=>{ + this.props.navigation.popToTop() }}]) + } + } catch (err) { + this.setState({modalDialog:false}) + Alert.alert("Une erreur est Survenue", + "Une erreur est survenu lors du demarrage de l'application veuillez relancer l'application", + [{text:"Ok",onPress:()=>{ + BackHandler.exitApp() + }}]) } + } + + async watchLocation() { + Geolocation.getCurrentPosition((position) => { + this.treatPosition(position)}, (e)=>{ + this.showErrorDialog() + }, this.props.geolocationOptions); + if(!this.watchID){ + Geolocation.watchPosition((position) => {this.treatPosition(position)},(e)=>{this.showErrorDialog()},this.props.geolocationOptions) + } + } + treatPosition(position){ + const myLastPosition = this.state.myPosition; + const myPosition = position.coords; + + if (!isEqual(myPosition, myLastPosition)) { + getPositionInformation(myPosition).then((response)=>{ + if(response.results!==undefined){ + if(response.results.length>0) { + let most = response.results[0] + let {address_components, formatted_address, place_id} = most + this.setState({address: address_components, textadress: formatted_address, place: place_id}) + + let results=response.results; + let shortcountry; + let mcountry; + for (let i=0; i < results[0].address_components.length; i++) { + for (let j=0; j < results[0].address_components[i].types.length; j++) { + if (results[0].address_components[i].types[j] === "country") { + mcountry = results[0].address_components[i]; + shortcountry=mcountry.short_name; + this.setState({shortCountry:mcountry.short_name,longCountry: mcountry.long_name}) + }else if(results[0].address_components[i].types[j]==="locality"){ + const name=results[0].address_components[i].short_name; + this.setState({townName:name}); + getTownInformationName(name).then((result)=>{ + let town=null; + if(result instanceof Array){ + town=result[0]; + }else + town=result; + this.setState({town:town}); + }) + } + } + } + getListCountriesActive().then((cnt)=>{ + this.setState({countries:cnt}) + console.debug(cnt,shortcountry); + var found=false + for (let i of cnt) { + if (i.code_country === shortcountry) { + found=true + this.setState({indicatif: i.code_dial,country:i.name}) + this.getNetworks(i.code_dial); + } + } + if(!found){ + Alert.alert("Impossible de recupérer vos informations","Nous n'avons pas pu recuperer les informations de votre pays veuillez contacter les administrateurs",[{text:"OK"}]); + + } + }) + + + } + + } + }).catch((e)=>{ + this.showErrorDialog() + }); + this.setState({ myPosition:myPosition }); + if(this.mapRef!==undefined && this.mapRef!==null) { + this.mapRef.animateToCoordinate({ + latitude: myPosition.latitude, + longitude: myPosition.longitude + }, 1000); + this.mapRef.animateToRegion({ + latitude: myPosition.latitude, + longitude: myPosition.longitude, + latitudeDelta: 0.03, + longitudeDelta: 0.01, + }, 1000) + } + } + + } + componentWillUnmount() { + this.mounted = false; + // eslint-disable-next-line no-undef + if (this.watchID) Geolocation.clearWatch(this.watchID); + } + renderUserGeoAccount() { + + return ( + + {this.prepareModal()} + + this.props.navigation.pop()} + /> + {I18n.t('LAST_STEP')} + + + + + { + this.setState({country:value,indicatif:value.code_dial,network:null}) + this.getNetworks(value.code_dial) + }} + valueExtractor={(value)=>{return value.name}} + labelExtractor={(value)=>{return value.name}} + /> + + {this.numanim=comp}}> + + { + let phonenum=text+this.state.contact!==undefined?this.state.contact:""; + this.setState({indicatif:text,phone:phonenum})}} + style={{ + width:responsiveWidth(30), + height:responsiveHeight(10), + alignSelf:'center', + marginTop:responsiveHeight(2), + marginLeft:responsiveWidth(5), + marginRight:responsiveWidth(5), + borderRadius:5, + }} + /> + + {this.num_input=comp}} + iconSize={20} + onChangeText={(text)=>{ + let phonenumber=text + this.setState({phone:phonenumber,contact:text})}} + style={{ + + marginTop:responsiveHeight(2), + marginRight:responsiveWidth(5), + + width:responsiveWidth(55), + borderRadius:5, + }} + > + + {this.num_input=comp}} + iconSize={20} + onChangeText={(text)=>{ + let phonenumber=text + this.setState({phoneTransaction:phonenumber,contactTransaction:text})}} + style={{ + + marginTop:responsiveHeight(2), + marginRight:responsiveWidth(5), + + width:responsiveWidth(55), + borderRadius:5, + }} + > + + + + + + {this.networkanim=comp}}> + + + + + + {I18n.t('WAIT_LOADING_POSITION')} + {this.mapanim=comp}} + > + { this.mapRef = ref }} + style={styles.map} + > + {this.state.myPosition!==undefined? + : + null} + + + + + {this.state.textadress!==undefined?this.state.textadress:I18n.t('TAKE_MY_POSITION')} + + + + + + ({ value: row, label:row }))} + visible={this.state.networksinglePickerVisible} + selectedItem={this.state.singlePickerSelectedItem} + onCancel={() => this.setState({ networksinglePickerVisible: false })} + onOk={result => { + this.setState({ networksinglePickerVisible: false }); + this.setState({ singlePickerSelectedItem: result.selectedItem }); + }} + > + this.renderRow(item)} /> + + + ) + + } + + onRowPress(rowID) { + this.setState({network:rowID}) + } + renderRow = (row) => ( + this.onRowPress(row)}> + + + + + {row.name} + + + ); + renderUserAccount() { + return ( + {this.prepareModal()} + + this.props.navigation.pop()} + /> + {I18n.t('LAST_STEP')} + + + + { + this.setState({country:value,indicatif:value.code_dial,network:null}) + + this.getNetworks(value.code_dial) + }} + valueExtractor={(value)=>{return value}} + labelExtractor={(value)=>{return value.name}} + /> + + {this.numanim=comp}}> + + { + + this.setState({indicatif:text})}} + style={{ + width:responsiveWidth(30), + marginTop:responsiveHeight(2), + marginLeft:responsiveWidth(5), + marginRight:responsiveWidth(5), + borderRadius:5, + }} + /> + {this.num_input=comp}} + iconSize={20} + onChangeText={(text)=>{ + let phonenumber=text + this.setState({phone:phonenumber})}} + style={{ + + marginTop:responsiveHeight(2), + marginRight:responsiveWidth(5), + + width:responsiveWidth(55), + borderRadius:5, + }} + > + + + + + {this.networkanim=comp}}> + + { + this.setState({network:value})}} + valueExtractor={(value)=>{return value}} + labelExtractor={(value)=>{return value.name}} + /> + + + + + ) + + } + + _onUserCreateAccount() { + let { myPosition,textaddress,place,user,network,phone,indicatif }=this.state; + this.setState({isLoading:true}) + if(user!==undefined) { + if (this.checkOrShake(myPosition, this.mapanim)) { + if (this.checkOrShake(phone, this.numanim)) { + if (this.checkOrShake(network, this.networkanim)) { + var data={}; + data.tag="member" + data['type']="create_user" + data['phone']=indicatif+phone; + data['network']=network; + data['town']=this.state.town; + data['latitude']=myPosition.latitude; + data['longitude']=myPosition.longitude; + for(let i in user){ + data[i]=user[i]; + } + console.log(data); + createUserAccount(data).then((result)=>{ + console.log(data) + if(result.success!==undefined && result.success===1){ + Alert.alert(I18n.t("CONNEXION_SUCCESSFUL"), + I18n.t('ACCOUNT_CREATED_SUCCESS') + ,[ {text: 'OK', onPress: () => { this.props.navigation.popToTop() + this.setState({isLoading:false})}}],{ cancelable: false }) + }else{ + if(result.error!==undefined){ + switch(result.error){ + case -3: + Alert.alert(I18n.t("CONNEXION_SUCCESSFUL"),I18n.t('FAILED_TEXT_CONTACT_ADMIN') + ,[ {text: 'OK', onPress: () =>""}],{ cancelable: false }) + break; + default: + Alert.alert(I18n.t("CONNEXION_SUCCESSFUL"),result.error_msg + ,[ {text: 'OK', onPress: () =>""}],{ cancelable: false }) + } + this.setState({isLoading:false}) + } + } + }).catch((error)=>{ + this.setState({isLoading:false}) + }) + + }else this.setState({isLoading:false}) + }else this.setState({isLoading:false}) + }else this.setState({isLoading:false}) + }else{ + this.setState({isLoading:false}) + + } + } + + checkUserGeolocated() { + let { myPosition,textaddress,place,indicatif,user,network,phone,phoneTransaction }=this.state; + this.setState({isLoading:true}) + if(user!==undefined) { + if (this.checkOrShake(myPosition, this.mapanim)) { + if (this.checkOrShake(phone, this.numanim)) { + if (this.checkOrShake(network, this.networkanim)) { + var data={}; + data.tag="member"; + data.type="create_geolocated_user"; + data['phone']=indicatif+phone; + data['phone_transaction']=indicatif+phoneTransaction; + data['network']=network; + data['town']=this.state.town; + data['latitude']=myPosition.latitude; + data['longitude']=myPosition.longitude; + for(let i in user){ + data[i]=user[i]; + } + data['category']=user.category; + + data['active']='0'; + createGeolocatedAccount(data).then((result)=>{ + console.log(result); + if(result.success!==undefined && result.success===1){ + const message=result.category==='super'?I18n.t("HYPERVISOR_MUST_VALIDATE_SUPERVISOR") + :I18n.t("ACCOUNT_SUCCESSFULL_CREATED") + Alert.alert("",message,[{ + text:"Ok", + onPress:()=>{ this.props.navigation.popToTop() + } + }]) + setTimeout(()=>{ + this.setState({isLoading:false}) + + },1000) + this.props.navigator.push({ + screen:route.login + }) + this.setState({isLoading:false}) + }else{ + + /* Crashlytics.log(JSON.stringify({"type":"erreur lors de la creation","data":result})) + Answers.logCustom("error",JSON.stringify(result))*/ + console.warn(result) + if(result.error!==undefined){ + switch(result.error){ + case -3: + Alert.alert("",I18n.t('UNABLE_TO_CREATE_ACCOUNT'),[{ + text:"Ok", + onPress:()=>{ } + }]) + break; + default: + if(result.error_msg) + Alert.alert("",result.error_msg,[{ + text:"Ok", + onPress:()=>{ } + }]) + else if(result.sql_error) + Alert.alert(I18n.t('UNABLE_TO_CREATE_ACCOUNT'),result.sql_error,[{ + text:"Ok", + onPress:()=>{ } + }]) + } + this.setState({isLoading:false}) + } + } + }).catch((error)=>{ + this.setState({isLoading:false}) + }) + + }else this.setState({isLoading:false}) + }else this.setState({isLoading:false}) + }else this.setState({isLoading:false}) + }else{ + this.setState({isLoading:false}) + + } + } + + checkOrShake(champ,view) { + let res=false; + if(champ!==undefined && champ.length>0) { + res=true; + }else if(champ!==Array && champ!==undefined){ + res=true + } + else{ + view.shake(800) + } + return res; +} + prepareModal() { + return ( + + {I18n.t("LOADING_DESCRIPTION_COUNTRY")} + + + ) + } +} +const SHORT_LIST = ['List element 1', 'List element 2', 'List element 3']; + +const LONG_LIST = [ + 'List element 1', + 'List element 2', + + 'List element 5', + 'List element 6', + 'List element 7', + 'List element 8', + , +]; + +const styles=StyleSheet.create({ + rowContainer: { + height: 52, + flex: 1, + flexDirection: 'row', + justifyContent: 'flex-start', + alignItems: 'center', + }, + iconContainer: { + marginRight: 16, + }, + container:{ + flex:1, + backgroundColor:theme.primary, + }, + textbtnvalide:{ + color:'white', + fontWeight:'bold' + }, + bigtitle:{ + color:'white', + fontSize:20, + flex:1, + fontWeight:'bold', + textAlign:'center', + margin:20, + }, + subbigtitle:{ + color:'white', + fontSize:17, + textAlign:'center', + margin:5, + }, + map: { + height: 200, + marginRight:responsiveWidth(5), + marginLeft:responsiveWidth(5), + marginVertical: 10, + }, + btnvalide:{ + marginTop:20, + marginLeft:20, + marginRight:20, + borderColor:'transparent', + backgroundColor:theme.accentLight, + height:52 + }, + input:{ + height:60, + marginTop:responsiveHeight(2), + marginLeft:responsiveWidth(5), + marginRight:responsiveWidth(5), + borderRadius:5, + } +}) diff --git a/screens/login/ui/Login.ui.js b/screens/login/ui/Login.ui.js new file mode 100755 index 00000000..f898afcb --- /dev/null +++ b/screens/login/ui/Login.ui.js @@ -0,0 +1,759 @@ +import React, { Component } from 'react'; +import { + + StyleSheet, + Text, + View, + Image, + Animated, + BackHandler, + TouchableOpacity, + PermissionsAndroid, + Platform, + ProgressBarAndroid, + ScrollView, + Alert, + StatusBar, + AsyncStorage +} from 'react-native'; +import PropTypes from 'prop-types'; +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; +import { responsiveHeight,responsiveWidth,responsiveFontSize } from 'react-native-responsive-dimensions'; +import { Sae } from 'react-native-textinput-effects'; +import Button from 'apsl-react-native-button'; +let theme=require('./../../../utils/theme.json'); +import {login,saveNewuser,getCountryNetwork} from './../../../webservice/AuthApi'; +import * as Animatable from 'react-native-animatable'; +import isEqual from 'lodash/isEqual' +import {getPositionInformation} from './../../../webservice/MapService' +import SwitchSelector from 'react-native-switch-selector' +import I18n from 'react-native-i18n' +let route=require('./../../../route.json'); +require('./../../../utils/Translations') +let country=require('./../../../utils/country_code.json'); +import {IlinkEmitter} from './../../../utils/events' +import {readUser} from "../../../webservice/AuthApi"; +import {MaterialDialog} from "react-native-material-dialog" +import Spinner from "react-native-loading-spinner-overlay" +import Geolocation from "react-native-geolocation-service" +const GEOLOCATION_OPTIONS= { enableHighAccuracy: true, timeout: 20000 } +const propTypes = { + coordinate: PropTypes.shape({ + latitude: PropTypes.number.isRequired, + longitude: PropTypes.number.isRequired, + }), + children: PropTypes.node, + geolocationOptions: PropTypes.shape({ + enableHighAccuracy: PropTypes.bool, + timeout: PropTypes.number, + maximumAge: PropTypes.number, + }), + heading: PropTypes.number, + enableHack: PropTypes.bool, +}; +const widthButton=responsiveWidth(80)>350?350:responsiveWidth(80) +export class LoginUi extends Component{ + + handlePhoneRef=ref=>this.phoneRef=ref; + handlePasswordRef=ref=>this.passRef=ref; + static defaultProps = { + enableHack: false, + geolocationOptions: null, + }; + async requestCameraPermission() { + if(Platform.OS === "android"){ + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + { + 'title': 'Cool Photo App Camera Permission', + 'message': 'Cool Photo App needs access to your camera ' + + 'so you can take awesome pictures.' + } + ) + if (granted === PermissionsAndroid.RESULTS.GRANTED) { + this.watchLocation() + } else { + this.setState({loadingDialog:false}) + Alert.alert(I18n.t("TITLE_UNABLE_TO_AUTORISE"), + I18n.t("MISSING_AUTORISATION_LOCATION"), + [{text:I18n.t("RESTART"),onPress:()=>{ + this.requestCameraPermission() + }},{text:I18n.t("QUIT_"),onPress:()=>{ + BackHandler.exitApp() + }}], + {cancelable:false} + ) + } + } catch (err) { + console.warn(err) + this.setState({loadingDialog:false}) + Alert.alert(I18n.t("TITLE_ERROR_SURVENU"), + I18n.t("TEXT_ERROR_START_APPLICATION"), + [{text:I18n.t("RESTART"),onPress:()=>{ + this.requestCameraPermission() + }},{text:I18n.t("QUIT_"),onPress:()=>{ + // BackHandler.exitApp() + }}], + {cancelable:false} + ) + + } + }else{ + this.watchLocation() + + } + } + + showConnexionAlertError(){ + this.setState({loadingDialog:false}) + + Alert.alert(I18n.t("TITLE_PROBLE_COME"), + I18n.t("TEXT_UNABLE_TO_GET_YOUR_POSITION"), + [{text:I18n.t("QUIT_"),onPress:()=>{ + BackHandler.exitApp()}},{text:I18n.t("RESTART"), + onPress:()=>{ + this.setState({loadingDialog:true}) + this.watchLocation()}}], + {cancelable:false} + ) + } + _storeData = async (position) => { + try { + console.warn("save result",await AsyncStorage.setItem('position', JSON.stringify(position))); + } catch (error) { + console.warn("store error",error) + } + }; + _retrieveData = async () => { + try { + const value = await AsyncStorage.getItem('position'); + if (value !== null) { + let re=JSON.parse(value) + re.longitudeDelta=0.04 + re.latitudeDelta=0.01 + const pos=JSON.parse(value) + this.setState({region:re,oldPosition:pos}) + } + } catch (error) { + console.warn(error) + } + }; + watchLocation(geo=null) { + const options= geo==null?GEOLOCATION_OPTIONS:geo + this.watchID = Geolocation.getCurrentPosition((position) => { + const myLastPosition = this.state.myPosition; + const myPosition = position.coords; + if (!isEqual(myPosition, myLastPosition)) { + console.warn(myPosition) + if(myPosition.longitude!==0 && myPosition.latitude!==0) { + this._storeData(myPosition) + this.retreiveinformationFromPosition(myPosition) + }else{ + if(!this.state.alreadyRetry) { + this.setState({alreadyRetry: true}) + let geo = {enableHighAccuracy: false, timeout: 20000, maximumAge: 1000} + this.watchLocation(geo) + }else{ + if(this.state.oldPosition){ + this.retreiveinformationFromPosition(this.state.oldPosition) + }else{ + Geolocation.watchPosition((position)=>{ + if(position.longitude!==0 && position.latitude!==0) { + this._storeData(position) + this.retreiveinformationFromPosition(position) + }else{ + Alert.alert(I18n.t("UNABLE_GET_INFORMATION") + ,I18n.t('UNABLE_GET_INFORMATION_TEXT'), + [{text:I18n.t("EXIT"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("RESTART"),onPress:()=>{this.watchLocation()}}], + {cancelable:false} + )}},(error)=>{ + this.setState({loadingDialog:false}) + Alert.alert(I18n.t("TITLE_ERROR_SURVENU"), + I18n.t("TEXT_ERROR_START_APPLICATION"), + [{text:"Ok",onPress:()=>{ + BackHandler.exitApp() + }}], + {cancelable:false}) + },GEOLOCATION_OPTIONS) + } + } + } + } + + },(positionError) => { + console.warn(positionError) + Alert.alert(I18n.t("UNABLE_GET_INFORMATION") + ,I18n.t('UNABLE_GET_INFORMATION_TEXT'), + [{text:I18n.t("EXIT"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("RESTART"),onPress:()=>{this.watchLocation()}}], + {cancelable:false} + ) + } + ,options) + } + + + retreiveinformationFromPosition(myPosition){ + getPositionInformation(myPosition).then((response)=>{ + console.log(response,myPosition) + if(response.results!==undefined){ + if(response.results.length>0) { + let most = response.results[0] + let {address_components, formatted_address, place_id} = most + this.setState({address: address_components, textadress: formatted_address, place: place_id}) + let results=response.results; + let shortcountry; + let mcountry; + for (let i=0; i < results[0].address_components.length; i++) { + for (let j=0; j < results[0].address_components[i].types.length; j++) { + if (results[0].address_components[i].types[j] === "country") { + mcountry = results[0].address_components[i]; + shortcountry=mcountry.short_name; + this.setState({shortCountry:mcountry.short_name,longCountry: mcountry.long_name}) + this.getNetworks(mcountry.long_name) + } + } + } + for (let i of country) { + if(i.code=== shortcountry){ + this.setState({indicatif:i.dial_code,enterPhone:i.dial_code})}} + }else{ + + } + this.setState({phoneEnabled:true,loadingDialog:false}); + + }else{ + console.log(myPosition,response) + this.showConnexionAlertError() + } + }).catch((e)=>{ + + this.setState({phoneEnabled:true,loadingDialog:false}); + Alert.alert(I18n.t("TITLE_PROBLE_COME"), + I18n.t("TEXT_UNABLE_TO_GET_COUNTRY_INFO"),[{text:I18n.t("NO"),onPress:()=>{ + BackHandler.exitApp() + }},{text:I18n.t("YES"),onPress:()=>{ + this.watchLocation() + }}],{cancelable:false}) + }); + } + + componentDidMount(){ + this._retrieveData() + this.requestCameraPermission() + + } + componentWillUnmount(){ + if(this.focusListener) + this.focusListener.remove() + } + + getNetworks(pays) { + + if (pays){ + getCountryNetwork(pays).then((result) => { + this.reseaux = []; + let networks = result[0]; + for(let prop in networks){ + if(networks[prop]!=="" && networks[prop].toLowerCase()!==pays.toLowerCase()){ + this.reseaux.push(networks[prop]); + } + } + this.setState({networks:this.reseaux}); + + }, (err) => { + console.log(err); + }); + } else { + let msg = "impossible de récupérer le nom du pays"; + } + } + + constructor(props){ + super(props); + this.state=this.initState(); + this.Animation=new Animated.Value(0); + this.BackgroundColorConfig=this.Animation.interpolate( + { + inputRange: [ 0,0.5, 1 ], + outputRange: this.state.colorsscheme + }); + this.BackgroundColorConfigAdmin=this.Animation.interpolate( + { + inputRange: [0, 0.5, 1], + outputRange: this.state.colorsscheme.reverse() + }) + + } + + StartBackgroundColorAnimation = (value) => + { + this.Animation.setValue(value===0?0:1); + this.setState({stateLogin:value,typeaccount:value}) + Animated.timing( + this.Animation, + { + toValueF: value===1?0:1, + duration: 500 + } + ).start(); + } + + async gotoHome(){ + + IlinkEmitter.emit("userconnect") + let readU=await readUser() + let road=""; + if(!readU.category) + road="App" + else { + switch (readU.category) { + case 'geolocated': + road="AgentApp" + break; + case 'super': + road="adminApp" + break + default: + road="supAdminApp" + } + } + + this.props.navigation.navigate(road) + + + } + + gotoTypeCreated(){ + this.props.navigation.push(route.typeaccountcreate, { + type: this.state.typeaccount, + }); + } + initState(){ + return { + password:"", + typeaccount:0, + enterPhone:"", + isLoging:false, + phoneEnabled:false, + snackVisible:false, + snackText:'', + loadingDialog:true, + stateLogin:-1, + colorsscheme: [ theme.primary,theme.primaryDark,theme.primaryDarkAdvanced ] + } + } + options=[ + { label: I18n.t('USER'), value: 0}, + { label: I18n.t('AGENT'), value: 1}, + ] + + BackgroundColorConfig:null + BackgroundColorConfigAdmin:null + render(){ + + return ( + + + + + { + + this.props.navigation.push(route.helpmenu) + + }} > + + {I18n.t('HELP_')} + + + + + + + {this.numberRef=com}} + onChangeText={(text)=>this.setState({enterPhone:text})} + labelStyle={style.labelInput} + /> + + + {this._pass=component}} + iconClass={FontAwesomeIcon} + iconName={'lock'} + style={style.input} + iconColor={'white'} + labelStyle={style.labelInput} + autoCapitalize={'none'} + secureTextEntry={true} + onChangeText={(text)=>this.setState({password:text})} + autoCorrect={false} + /> + + + + + { + this.gotoForgottenPass() + }}> + + {I18n.t("FORGOTTEN_PASSWORD")} + + + + { + this.StartBackgroundColorAnimation(value) + }} /> + + + + + {I18n.t("OR_BIG")} + + + + + + + + + + )} + + gotoForgottenPass() { + this.props.navigation.push(route.forgotpass,{ + type: this.state.typeaccount, + }) + } + + connectClicked() { + + if(this.state.password===null || this.state.password===undefined ||this.state.password.length<3 || this.state.password.lenght<3){ + this.passRef.shake(800) + } + else { + this.setState(previousState => { + return {isLoging: !previousState.isLoging}; + }) + login(this.state.enterPhone, this.state.password, this.state.typeaccount).then((responseJson) => { + console.warn(responseJson) + + if (responseJson.success === 1) { + this.setState(previousState => { + return {isLoging: !previousState.isLoging}; + }) + const user = responseJson; + if(!user.error){ + if (user.etat === "1" || user.etat === 1) { + saveNewuser(user); + this.setState({user:user}) + + Alert.alert( + I18n.t("CONNEXION_SUCCESSFUL"), + I18n.t("CONNEXION_SUCCESSFULL_TEXT"), + [ + {text:'Ok',onPress:()=>{ + this.setState(previousState => { + return {isLoging: !previousState.isLoging}; + }) + this.gotoHome() + }} + ], + {cancelable:false} + ) + } else { + if (user.category !== 'super') { + this.props.navigation.push(route.activateaccount,{type: this.state.typeaccount, + user: user}) + + } else { + if (user.etat_demande === 0 || user.etat_demande==='0') { + Alert.alert( + I18n.t('DONT_VALIDATE_ACCOUNT'), + I18n.t('UNVALIDATE_ACCOUNT_TEXT'), + [ + {text:'Ok',onPress:()=>{}} + ], + {cancelable:false} + ) + } else { + this.props.navigation.push(route.activateaccount,{type: this.state.typeaccount, + user: user}) + } + } + } + }else{ + this.setState(previousState => { + return {isLoging: !previousState.isLoging}; + }) + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{this.connectClicked()}} + + ], + {cancelable:false} + ) + } + + } else if (responseJson === null) { + this.setState(previousState => { + return {isLoging: !previousState.isLoging}; + }) + + } else { + console.log(responseJson) + let message = ''; + switch (responseJson.error) { + case 1: + this.phoneRef.shake(1200); + this.passRef.shake(1200); + message = I18n.t("UNABLE_TO_CONNECT") + break; + case -1: + this.phoneRef.shake(1200); + message =I18n.t('WRONG_PHONE_NUMBER') + break; + case -2: + message=I18n.t('WRONG_PHONE_NUMBER'); + this.phoneRef.shake(1200); + break; + case -3: + message=I18n.t("WRONG_PASSWORD") + this.passRef.shake(1200); + break; + default: + this.passRef.shake(1200); + message = null + break; + } + + if(message===null) { + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + { + text: I18n.t("NO"), onPress: () => { + BackHandler.exitApp() + } + }, + { + text: I18n.t("YES"), onPress: () => { + this.connectClicked() + } + } + + ], + {cancelable: false} + ) + }else { + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + message + , + [ + + { + text:"OK", onPress: () => { + } + } + + ], + {cancelable: false} + ) + this.setState(previousState => { + return { + isLoging: !previousState.isLoging, + snackVisible: true, snackText: message + }; + }) + setTimeout(() => { + this.setState({snackVisible: false}) + }, 2000) + } + + } + }) + .catch((e)=>{ + this.setState(previousState => { + return {isLoging: !previousState.isLoging}; + }) + Alert.alert( + I18n.t("UNABLE_TO_CONNECT_TITLE"), + I18n.t('TEXT_NETWORK_UNABLE') + , + [ + {text:I18n.t("NO"),onPress:()=>{BackHandler.exitApp()}}, + {text:I18n.t("YES"),onPress:()=>{this.connectClicked()}} + + ], + {cancelable:false} + ) + + }) + } + } +} +const separator=StyleSheet.create({ + line:{ + height:1.5, + flex:1, + backgroundColor:'white', + marginLeft:30, + marginRight:30 + }, + + text:{ + color:'white', + fontWeight:'bold', + + }, + container:{ + flexDirection:'row', + alignItems:'center' + }, + btnContainer:{ + flexDirection:'column', + justifyContent:'center', + + }, +}) +const style=StyleSheet.create({ + container:{ + flex:1, + justifyContent:"center" + }, + switch:{ + margin:15, + }, + contentSwitch:{ + width:responsiveWidth(70), + alignItems:'center', + alignSelf:"center", + marginTop:10, + marginLeft:10 + }, + lostpassword:{ + color:'white', + alignSelf:'flex-end', + + marginTop:60, + fontWeight:'bold', + marginRight:20 + }, + logoContaner:{ + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + }, + logo:{ + width:responsiveWidth(90), + resizeMode:"contain" + }, + title:{ + fontSize:responsiveFontSize(4), + alignSelf: 'center', + fontWeight:'bold', + color:'white', + }, + loginBtnText:{ + color:theme.primary, + fontWeight:'bold', + fontSize:15 + + }, + + loginBtnText2:{ + color:"white", + fontWeight:'bold', + fontSize:15 + + }, + + loginBtn:{ + width:widthButton, + height:48, + alignSelf: 'center', + marginTop:20, + borderRadius:responsiveHeight(4), + backgroundColor:'white', + borderColor:'transparent', + }, + + loginBtn1:{ + width:widthButton, + marginTop: responsiveHeight(2), + height:48, + alignSelf: 'center', + borderRadius:responsiveHeight(4), + backgroundColor:theme.accentLight, + borderColor:'transparent', + }, + + input:{ + width:responsiveWidth(70), + alignSelf: 'center', + marginTop: 5, + + }, + labelInput:{ + color:"white", + fontWeight: 'normal', + } +}) diff --git a/screens/modals/DateFilterHistoryDemand.js b/screens/modals/DateFilterHistoryDemand.js new file mode 100755 index 00000000..b8599286 --- /dev/null +++ b/screens/modals/DateFilterHistoryDemand.js @@ -0,0 +1,145 @@ +import React,{ Component } from 'react' +import {StyleSheet,Text,View,TouchableOpacity,TextInput} from 'react-native' +import CardView from 'react-native-cardview' +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' +import Button from 'apsl-react-native-button' +import {} from 'react-native' +import DateTimePicker from 'react-native-modal-datetime-picker'; +let moment=require('moment'); +let theme=require('./../../utils/theme.json'); + + +export default class DateFilterHistoryDemand extends Component{ + static navigatorStyle={ + navBarHidden:true, + }; + state = { + isDateTimePickerVisible: false, + + isDateEndTimePickerVisible: false, + datestart:null, + datestartformated:'La date de debut', + dateend:null, + dateendformated:'La date de fin' + }; + constructor(props){ + super(props); + } + _showDateTimePicker = (type) => { + if(type===1) + this.setState({isDateTimePickerVisible: true + } ); + else this.setState({isDateEndTimePickerVisible: true + } ); +} + _showDateEndPicker= ()=>this.setState({isDateEndTimePickerVisible:true}); + _hideDateTimePicker = () => this.setState({ isDateTimePickerVisible: false,isDateEndTimePickerVisible:false }); + _handleDatePicked = (date) => { + if(this.state.isDateTimePickerVisible){ + this.setState({datestart:date,datestartformated:moment(date).format('dddd Do ,MMMM YYYY')}); + }else if(this.state.isDateEndTimePickerVisible){ + let startdate=this.state.datestart; + let enddate=moment(date); + this.setState({dateend:date,dateendformated:moment(date).format('dddd Do ,MMMM YYYY')}); + + let dif=moment(enddate).diff(startdate); + if(dif<0){ + this.props.navigator.showSnackbar({ + text:'la date de fin ne peut être plus petite que la date de début', + duration:'long', + backgroundColor:'red', + textColor:'white' + }) + } + } + this._hideDateTimePicker(); + }; + + + render(){ + return( + + Trié selon la durée + + Définir la date de début + + this._showDateTimePicker(1)}> + + {this.state.datestartformated} + + + + Définir la date de fin + this._showDateEndPicker(2)}> + + {this.state.dateendformated} + + + + + + + + + + + ) + } +} +const styles=StyleSheet.create({ + container:{ + height:responsiveHeight(60), + width:responsiveWidth(90), + backgroundColor:'white' + + }, + dateText:{ + marginTop:20, + marginLeft:responsiveWidth(13), + marginBottom:20, + fontSize:17, + }, + titlecontent:{ + fontSize:17, + marginLeft:responsiveWidth(10), + + color:'black' + }, + content:{ + flex:8 + }, + btnvalid:{ + flex:1, + + borderColor:'transparent' + }, + + btnfilter:{ + flex:1, + color:theme.accent, + fontWeight:'bold', + borderColor:'transparent' + }, + btnStyleContainer:{ + width:responsiveWidth(50), + alignSelf:'flex-end', + flexDirection:'row' + }, + title:{ + fontSize:20, + marginLeft:20, + marginTop:20, + color:'black', + fontWeight:'bold' + }, + root:{ + flex:1, + backgroundColor:'rgba(0,0,0,0.3)', + justifyContent:'center', + alignItems:'center' + } +}) \ No newline at end of file diff --git a/screens/modals/DateRangePicker.js b/screens/modals/DateRangePicker.js new file mode 100755 index 00000000..a4805edf --- /dev/null +++ b/screens/modals/DateRangePicker.js @@ -0,0 +1,79 @@ +import React, { Component } from 'react' +import { StyleSheet, View ,Text} from 'react-native' +import { Calendar, defaultStyle } from 'react-native-calendars' + +const XDate = require('xdate'); + +type Props = { + initialRange: React.PropTypes.array.isRequired, + onSuccess: React.PropTypes.func.isRequired, +}; +export default class DateRangePicker extends Component { + + state = {isFromDatePicked: false, isToDatePicked: false, markedDates: {}} + + componentDidMount() { this.setupInitialRange() } + + onDayPress = (day) => { + if (!this.state.isFromDatePicked || (this.state.isFromDatePicked && this.state.isToDatePicked)) { + this.setupStartMarker(day) + } else if (!this.state.isToDatePicked) { + let markedDates = {...this.state.markedDates} + let [mMarkedDates, range] = this.setupMarkedDates(this.state.fromDate, day.dateString, markedDates) + if (range >= 0) { + this.setState({isFromDatePicked: true, isToDatePicked: true, markedDates: mMarkedDates}) + this.props.onSuccess(this.state.fromDate, day.dateString) + } else { + this.setupStartMarker(day) + } + } + } + + setupStartMarker = (day) => { + let markedDates = {[day.dateString]: {startingDay: true, color: this.props.theme.markColor, textColor: this.props.theme.markTextColor}} + this.setState({isFromDatePicked: true, isToDatePicked: false, fromDate: day.dateString, markedDates: markedDates}) + } + + setupMarkedDates = (fromDate, toDate, markedDates) => { + let mFromDate = new XDate(fromDate) + let mToDate = new XDate(toDate) + let range = mFromDate.diffDays(mToDate) + if (range >= 0) { + if (range == 0) { + markedDates = {[toDate]: {color: this.props.theme.markColor, textColor: this.props.theme.markTextColor}} + } else { + for (var i = 1; i <= range; i++) { + let tempDate = mFromDate.addDays(1).toString('yyyy-MM-dd') + if (i < range) { + markedDates[tempDate] = {color: this.props.theme.markColor, textColor: this.props.theme.markTextColor} + } else { + markedDates[tempDate] = {endingDay: true, color: this.props.theme.markColor, textColor: this.props.theme.markTextColor} + } + } + } + } + return [markedDates, range] + } + + setupInitialRange = () => { + if (!this.props.initialRange) return + let [fromDate, toDate] = this.props.initialRange + let markedDates = {[fromDate]: {startingDay: true, color: this.props.theme.markColor, textColor: this.props.theme.markTextColor}} + let [mMarkedDates, range] = this.setupMarkedDates(fromDate, toDate, markedDates) + this.setState({markedDates: mMarkedDates, fromDate: fromDate}) + } + + render() { + return ( + {this.onDayPress(day)}}/> + ) + } +} + +DateRangePicker.defaultProps = { + theme: { markColor: '#00adf5', markTextColor: '#ffffff' } +}; \ No newline at end of file diff --git a/screens/modals/LoadinModal.js b/screens/modals/LoadinModal.js new file mode 100755 index 00000000..5db22a6e --- /dev/null +++ b/screens/modals/LoadinModal.js @@ -0,0 +1,22 @@ +import React,{Component} from 'react' +import {StyleSheet,Text,View,ProgressBarAndroid} from 'react-native' +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' + +export default class LoadinModal extends Component{ + + constructor(props){ + super(props) + } + + render() { + return ( + + {this.props.title} + {this.props.text} + + + ) + } +} \ No newline at end of file diff --git a/screens/notifications/NotificationBuilder.js b/screens/notifications/NotificationBuilder.js new file mode 100755 index 00000000..8c3651fb --- /dev/null +++ b/screens/notifications/NotificationBuilder.js @@ -0,0 +1,28 @@ +import React,{Component} from 'react' +import {StyleSheet,Text,View,ProgressBarAndroid} from 'react-native' +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' +import NotificationTextSimple from "./NotificationTextSimple"; + +export default class NotificationBuilder extends Component{ + + constructor(props){ + super(props) + } + + render() { + if(this.props.type===0){ + return () + } + return ( + + {this.props.title} + {this.props.text} + + + ) + } +} \ No newline at end of file diff --git a/screens/notifications/NotificationTextSimple.js b/screens/notifications/NotificationTextSimple.js new file mode 100755 index 00000000..101cbf21 --- /dev/null +++ b/screens/notifications/NotificationTextSimple.js @@ -0,0 +1,21 @@ +import React,{Component} from 'react' +import {StyleSheet,Text,View,ProgressBarAndroid} from 'react-native' +import {responsiveWidth,responsiveHeight} from 'react-native-responsive-dimensions' + +export default class NotificationTextSimple extends Component{ + + constructor(props){ + super(props) + } + + render() { + return ( + + {this.props.title} + {this.props.text} + + ) + } +} \ No newline at end of file diff --git a/screens/notifications/Notifications.js b/screens/notifications/Notifications.js new file mode 100755 index 00000000..3aac58ff --- /dev/null +++ b/screens/notifications/Notifications.js @@ -0,0 +1,65 @@ +import React,{Component} from 'react' +import {StyleSheet,Text,View,StatusBar} from 'react-native' +import BaseScreen from './../BaseScreen' +import I18n from "react-native-i18n"; +import Icon from 'react-native-vector-icons/MaterialIcons' +import LottieView from 'lottie-react-native'; // if you have "esModuleInterop": true +import {Header} from "react-native-elements"; +const theme=require('./../../utils/theme.json') +export default class Notifications extends BaseScreen{ + static navigatorStyle = { + navBarBackgroundColor:theme.primaryDark, + navBarTextColor:'white', + statusBarBackgroundColor:theme.primaryDarkAdvanced, + navBarButtonColor:'white', + statusBarTextColorScheme: 'light', + }; + static navigationOptions = { + headerTitle: I18n.t('NOTIFICATIONS'), + drawerIcon: ({ tintColor }) => ( + + ), + }; + constructor(props){ + super(props,true) + + } + render() { + return ( + + + + + + {I18n.t('NO_NOTIFICATION')} + + ) + } +} + +const styles=StyleSheet.create({ + container:{ + flex:1, + backgroundColor:'white' + }, + text:{ + fontSize:17, + fontWeight:'bold', + }, + lottie: { + width: 248, + height: 248 + }, +}) \ No newline at end of file diff --git a/screens/optionMenu/HeaderMenu.js b/screens/optionMenu/HeaderMenu.js new file mode 100755 index 00000000..2f6da724 --- /dev/null +++ b/screens/optionMenu/HeaderMenu.js @@ -0,0 +1,10 @@ +import React, { PureComponent } from 'react'; +import {View,Text,StyleSheet} from 'react-native'; +import PropTypes from 'prop-types'; + +export class HeaderMenu extends PureComponent{ + + render(){ + return (Freud) + } +} \ No newline at end of file diff --git a/screens/optionMenu/OptionsMenu.js b/screens/optionMenu/OptionsMenu.js new file mode 100755 index 00000000..ae664d6c --- /dev/null +++ b/screens/optionMenu/OptionsMenu.js @@ -0,0 +1,579 @@ +/** + * 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} 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 +type Props = {}; +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(); + } + + 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; + // items.filter((item)=>item.) + 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('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('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('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) { + /* 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('NOTIFICATIONS'),id:3,key:3,icon:'md-notifications',active:false} + ,{title:I18n.t('CONFIGURATIONS'),id:4,icon:'md-settings',active:false}] +} + _renderItem = (item) =>{ + if(item==="creditrequest" || item==='historyItemDetails' || item==='filter' || item==='networks'){ + return null + }else{ + const color= this.state.currentId===item.id?theme.accent:"grey" + return ( + { + this.props.navigation.toggleDrawer(); + this.setState({currentId:item.id}) + this.props.navigation.navigate(item)}} + > + + + {this.getNameItems(item)} + + )}}; + _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 '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 '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 ( + + + {name} + {surname} + {this.state.user?""+this.state.user.phone:""} + + + + { + this.state.items && Object.keys(this.state.items).map((item,key)=>{ + return this._renderItem(item) + }) + } + + + + + ) + else { + setTimeout(() => this.setState({lang: ""}), 500) + return () + } + } + 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"); + this.props.navigation.navigate("Auth") + }) + }}, + ], + { cancelable: false } + ) + } + watchUser() { + readUser().then((user)=> { + if(user.id!==this.state.user.id) { + if (user !== null && user !== undefined) { + 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, + }, +}); diff --git a/screens/optionMenu/qOptionsMenu.js b/screens/optionMenu/qOptionsMenu.js new file mode 100755 index 00000000..4b8e4e6c --- /dev/null +++ b/screens/optionMenu/qOptionsMenu.js @@ -0,0 +1,577 @@ +/** + * 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} 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 +type Props = {}; +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 RNDeviceInformation from "fm-react-native-device-info" +import AppContainer, {AppNavigator} from "../../App"; +import Configuration from "../../webservice/persistences/Configuration"; + +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(); + } + + retrieveAndroidInformation() { + this.configuration._getData().then((lang)=>{ + if(lang){ + I18n.locale=lang + readUser().then((result) => { + setTimeout(() => { + this.updateUser(result); + }, 3000)}) + }else{ + RNDeviceInformation.getDeviceCountryCode().then((code)=> { + I18n.locale=code.toLowerCase() + readUser().then((result) => { + setTimeout(() => { + this.updateUser(result); + }, 3000) + }).catch((e) => { + this.props.navigation.navigate("Auth") + }); + }) + } + }).catch((e)=>{ + RNDeviceInformation.getDeviceCountryCode().then((code)=> { + 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; + // items.filter((item)=>item.) + 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('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('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('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) { + /* 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('NOTIFICATIONS'),id:3,key:3,icon:'md-notifications',active:false} + ,{title:I18n.t('CONFIGURATIONS'),id:4,icon:'md-settings',active:false}] +} + _renderItem = (item) =>{ + if(item==="creditrequest" || item==='historyItemDetails' || item==='filter' || item==='networks'){ + return null + }else{ + const color= this.state.currentId===item.id?theme.accent:"grey" + return ( + { + this.props.navigation.toggleDrawer(); + this.setState({currentId:item.id}) + this.props.navigation.navigate(item)}} + > + + + {this.getNameItems(item)} + + )}}; + _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 '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 '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 ( + + + {name} + {surname} + {this.state.user?""+this.state.user.phone:""} + + + { + this.state.items && Object.keys(this.state.items).map((item,key)=>{ + return this._renderItem(item) + }) + } + + + + ) + else { + setTimeout(() => this.setState({lang: ""}), 500) + return () + } + } + 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"); + this.props.navigation.navigate("Auth") + }) + }}, + ], + { cancelable: false } + ) + } + watchUser() { + readUser().then((user)=> { + if(user.id!==this.state.user.id) { + if (user !== null && user !== undefined) { + 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, + }, +}); diff --git a/screens/splashscreen/SplashScreen.js b/screens/splashscreen/SplashScreen.js new file mode 100755 index 00000000..0fe85686 --- /dev/null +++ b/screens/splashscreen/SplashScreen.js @@ -0,0 +1,257 @@ +import React, { Component } from 'react'; +import { + StyleSheet, View, Text, Image, ProgressBarAndroid, + TouchableNativeFeedback,TouchableOpacity, + PermissionsAndroid, NativeModules, StatusBar, Platform,Animated +} from 'react-native'; +import {responsiveHeight,responsiveWidth,responsiveFontSize} from 'react-native-responsive-dimensions'; +import I18n from 'react-native-i18n' +const theme=require('./../../utils/theme.json'); +const route=require('./../../route.json'); +import {readUser,getPasObject,getPubActiveObject} from '../../webservice/AuthApi'; +import { Bubbles, DoubleBounce, Bars, Pulse } from 'react-native-loader'; +import Configuration from "../../webservice/persistences/Configuration"; +import '../ads/InterticielAds' +import * as Animatable from 'react-native-animatable'; +import LottieView from 'lottie-react-native'; // if you have "esModuleInterop": true +import InterticielAds from '../ads/InterticielAds'; +import Overlay from 'react-native-elements' +import DeviceInfo from 'react-native-device-info'; +export default class SplashScreen extends Component{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + static options(passProps) { + return { + statusBar: { + visible: false, + style: 'light' | 'dark', + drawBehind:true + }, + topBar: { + title: { + text: 'My Screen' + }, + drawBehind: true, + visible: false, + animate: false + } + }; + } + + + // + constructor(props){ + super(props); + this.state={ + + } + }; + workUserResult(result){ + var way=""; + var way2=""; + if(result===null || result===undefined ){ + way="Auth" + way2=route.first + }else{ + if(!result.category) + way="App" + else { + switch (result.category) { + case 'geolocated':way="AgentApp" + break; + case 'super':way="adminApp" + break + default: + way="supAdminApp" + } + } + way2=route.login + } + this.props.navigation.navigate(way) + + /* Navigation.setStackRoot(route.stackRoot, + { component: { + name: way, + } + + + } + ); + Navigation.showOverlay({ + component: { + name: route.intersticielAds, + id:"interticiel", + options: { + overlay: { + interceptTouchOutside: false + } + } + } + });*/ + + } + componentDidMount(){ + try { + this.requestCameraPermission() + }catch (e){ + console.log(e) + } + this.config=new Configuration(); + this.retrieveAndroidInformation() + setTimeout(()=>this.bounce(),500) + this.bounce() + + } + async requestCameraPermission() { + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + { + 'title': 'Cool Photo App Camera Permission', + 'message': 'Cool Photo App needs access to your camera ' + + 'so you can take awesome pictures.' + } + ) + if (granted === PermissionsAndroid.RESULTS.GRANTED) { + + } else { + console.log("try get information else") + + } + } catch (err) { + console.log("try get information error") + console.log(err) + } + } + handleViewRef = ref => this.view = ref; + + bounce = () => this.view.transition({ translateX: 0},{ translateX: 700},5000); + + render(){ + + return ( + + + + + + + + + + + + + ) + } + + retreiveIosInformation() { + readUser().then((result) => { + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.props.navigation.navigate("Auth") + }); + return ""; + } + + retrieveAndroidInformation() { + getPasObject().then((data)=>{ + console.warn(data); + this.config.setCurrentPas(data) + }) + + this.config._getData().then((lang)=>{ + if(lang){ + I18n.locale=lang + readUser().then((result) => { + console.warn(result) + if(result){ + getPubActiveObject(result['country_id']).then((data)=>{ + console.warn(data) + this.config.setPubActive(data); + }) + } + setTimeout(() => { + this.workUserResult(result) + }, 3000)}) + }else{ + const code = DeviceInfo.getDeviceLocale(); + console.warn(code) + I18n.locale=code.toLowerCase() + readUser().then((result) => { + console.warn(result) + if(result){ + getPubActiveObject(result['country_id']).then((data)=>{ + console.warn(data) + this.config.setPubActive(data); + }) + } + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.setPubActive(data) + }); + + } + }).catch((e)=>{ + console.warn(e.message) + DeviceInfo.getDeviceLocale().then((code)=> { + console.warn(code) + + I18n.locale=code.toLowerCase() + readUser().then((result) => { + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.props.navigation.navigate("Auth") + }); + }) + + }) + + return "" + } +} +const styles=StyleSheet.create({ + container:{ + flex:1, + backgroundColor: theme.primary, + justifyContent:'center', + alignItems: 'center', + }, + logoContaner:{ + + flexDirection: 'row', + marginTop: responsiveHeight(20), + justifyContent: 'center', + alignItems: 'center', + }, + logo:{ + width:responsiveWidth(90), + resizeMode:'contain' + }, + lottie: { + width: 48 + , + height: 64 + }, + title:{ + fontSize:responsiveFontSize(4), + alignSelf: 'center', + fontWeight:'bold', + color:'white', + }, +}) \ No newline at end of file diff --git a/screens/splashscreen/qSplashScreen.android.js b/screens/splashscreen/qSplashScreen.android.js new file mode 100755 index 00000000..4b99b156 --- /dev/null +++ b/screens/splashscreen/qSplashScreen.android.js @@ -0,0 +1,256 @@ +import React, { Component } from 'react'; +import { + StyleSheet, View, Text, Image, ProgressBarAndroid, + TouchableNativeFeedback,TouchableOpacity, + PermissionsAndroid, NativeModules, StatusBar, Platform,Animated +} from 'react-native'; +import {responsiveHeight,responsiveWidth,responsiveFontSize} from 'react-native-responsive-dimensions'; +import I18n from 'react-native-i18n' +const theme=require('./../../utils/theme.json'); +const route=require('./../../route.json'); +import {readUser,getPasObject,getPubActiveObject} from './../../webservice/AuthApi'; +import RNDeviceInformation from "fm-react-native-device-info" +import { Bubbles, DoubleBounce, Bars, Pulse } from 'react-native-loader'; +import Configuration from "../../webservice/persistences/Configuration"; +import './../ads/InterticielAds' +import * as Animatable from 'react-native-animatable'; +import LottieView from 'lottie-react-native'; // if you have "esModuleInterop": true +import InterticielAds from './../ads/InterticielAds'; +import Overlay from 'react-native-elements' +export default class SplashScreen extends Component{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + static options(passProps) { + return { + statusBar: { + visible: false, + style: 'light' | 'dark', + drawBehind:true + }, + topBar: { + title: { + text: 'My Screen' + }, + drawBehind: true, + visible: false, + animate: false + } + }; + } + + + // + constructor(props){ + super(props); + this.state={ + + } + }; + workUserResult(result){ + var way=""; + var way2=""; + if(result===null || result===undefined ){ + way="Auth" + way2=route.first + }else{ + if(!result.category) + way="App" + else { + switch (result.category) { + case 'geolocated':way="AgentApp" + break; + case 'super':way="adminApp" + break + default: + way="supAdminApp" + } + } + way2=route.login + } + this.props.navigation.navigate(way) + + /* Navigation.setStackRoot(route.stackRoot, + { component: { + name: way, + } + + + } + ); + Navigation.showOverlay({ + component: { + name: route.intersticielAds, + id:"interticiel", + options: { + overlay: { + interceptTouchOutside: false + } + } + } + });*/ + + } + componentDidMount(){ + try { + this.requestCameraPermission() + }catch (e){ + console.log(e) + } + this.config=new Configuration(); + this.retrieveAndroidInformation() + setTimeout(()=>this.bounce(),500) + this.bounce() + + } + async requestCameraPermission() { + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + { + 'title': 'Cool Photo App Camera Permission', + 'message': 'Cool Photo App needs access to your camera ' + + 'so you can take awesome pictures.' + } + ) + if (granted === PermissionsAndroid.RESULTS.GRANTED) { + + } else { + console.log("try get information else") + + } + } catch (err) { + console.log("try get information error") + console.log(err) + } + } + handleViewRef = ref => this.view = ref; + + bounce = () => this.view.transition({ translateX: 0},{ translateX: 700},5000); + + render(){ + + return ( + + + + + + + + + + + + + ) + } + + retreiveIosInformation() { + readUser().then((result) => { + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.props.navigation.navigate("Auth") + }); + return ""; + } + + retrieveAndroidInformation() { + getPasObject().then((data)=>{ + console.warn(data); + this.config.setCurrentPas(data) + }) + + this.config._getData().then((lang)=>{ + if(lang){ + I18n.locale=lang + readUser().then((result) => { + console.warn(result) + if(result){ + getPubActiveObject(result['country_id']).then((data)=>{ + console.warn(data) + this.config.setPubActive(data); + }) + } + setTimeout(() => { + this.workUserResult(result) + }, 3000)}) + }else{ + RNDeviceInformation.getDeviceLanguageCode().then((code)=> { + I18n.locale=code.toLowerCase() + readUser().then((result) => { + console.warn(result) + if(result){ + getPubActiveObject(result['country_id']).then((data)=>{ + console.warn(data) + this.config.setPubActive(data); + }) + } + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.setPubActive(data) + }); + }) + } + }).catch((e)=>{ + console.warn("error") + RNDeviceInformation.getDeviceLanguageCode().then((code)=> { + console.warn(code) + + I18n.locale=code.toLowerCase() + readUser().then((result) => { + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.props.navigation.navigate("Auth") + }); + }) + + }) + + return "" + } +} +const styles=StyleSheet.create({ + container:{ + flex:1, + backgroundColor: theme.primary, + justifyContent:'center', + alignItems: 'center', + }, + logoContaner:{ + + flexDirection: 'row', + marginTop: responsiveHeight(20), + justifyContent: 'center', + alignItems: 'center', + }, + logo:{ + width:responsiveWidth(90), + resizeMode:'contain' + }, + lottie: { + width: 48 + , + height: 64 + }, + title:{ + fontSize:responsiveFontSize(4), + alignSelf: 'center', + fontWeight:'bold', + color:'white', + }, +}) \ No newline at end of file diff --git a/screens/splashscreen/qSplashScreen.js b/screens/splashscreen/qSplashScreen.js new file mode 100755 index 00000000..4b99b156 --- /dev/null +++ b/screens/splashscreen/qSplashScreen.js @@ -0,0 +1,256 @@ +import React, { Component } from 'react'; +import { + StyleSheet, View, Text, Image, ProgressBarAndroid, + TouchableNativeFeedback,TouchableOpacity, + PermissionsAndroid, NativeModules, StatusBar, Platform,Animated +} from 'react-native'; +import {responsiveHeight,responsiveWidth,responsiveFontSize} from 'react-native-responsive-dimensions'; +import I18n from 'react-native-i18n' +const theme=require('./../../utils/theme.json'); +const route=require('./../../route.json'); +import {readUser,getPasObject,getPubActiveObject} from './../../webservice/AuthApi'; +import RNDeviceInformation from "fm-react-native-device-info" +import { Bubbles, DoubleBounce, Bars, Pulse } from 'react-native-loader'; +import Configuration from "../../webservice/persistences/Configuration"; +import './../ads/InterticielAds' +import * as Animatable from 'react-native-animatable'; +import LottieView from 'lottie-react-native'; // if you have "esModuleInterop": true +import InterticielAds from './../ads/InterticielAds'; +import Overlay from 'react-native-elements' +export default class SplashScreen extends Component{ + static navigatorStyle = { + drawUnderNavBar: true, + navBarHidden:true, + drawUnderStatusBar: false, + statusBarHidden: true, + statusBarTextColorScheme: 'light', + }; + static options(passProps) { + return { + statusBar: { + visible: false, + style: 'light' | 'dark', + drawBehind:true + }, + topBar: { + title: { + text: 'My Screen' + }, + drawBehind: true, + visible: false, + animate: false + } + }; + } + + + // + constructor(props){ + super(props); + this.state={ + + } + }; + workUserResult(result){ + var way=""; + var way2=""; + if(result===null || result===undefined ){ + way="Auth" + way2=route.first + }else{ + if(!result.category) + way="App" + else { + switch (result.category) { + case 'geolocated':way="AgentApp" + break; + case 'super':way="adminApp" + break + default: + way="supAdminApp" + } + } + way2=route.login + } + this.props.navigation.navigate(way) + + /* Navigation.setStackRoot(route.stackRoot, + { component: { + name: way, + } + + + } + ); + Navigation.showOverlay({ + component: { + name: route.intersticielAds, + id:"interticiel", + options: { + overlay: { + interceptTouchOutside: false + } + } + } + });*/ + + } + componentDidMount(){ + try { + this.requestCameraPermission() + }catch (e){ + console.log(e) + } + this.config=new Configuration(); + this.retrieveAndroidInformation() + setTimeout(()=>this.bounce(),500) + this.bounce() + + } + async requestCameraPermission() { + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + { + 'title': 'Cool Photo App Camera Permission', + 'message': 'Cool Photo App needs access to your camera ' + + 'so you can take awesome pictures.' + } + ) + if (granted === PermissionsAndroid.RESULTS.GRANTED) { + + } else { + console.log("try get information else") + + } + } catch (err) { + console.log("try get information error") + console.log(err) + } + } + handleViewRef = ref => this.view = ref; + + bounce = () => this.view.transition({ translateX: 0},{ translateX: 700},5000); + + render(){ + + return ( + + + + + + + + + + + + + ) + } + + retreiveIosInformation() { + readUser().then((result) => { + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.props.navigation.navigate("Auth") + }); + return ""; + } + + retrieveAndroidInformation() { + getPasObject().then((data)=>{ + console.warn(data); + this.config.setCurrentPas(data) + }) + + this.config._getData().then((lang)=>{ + if(lang){ + I18n.locale=lang + readUser().then((result) => { + console.warn(result) + if(result){ + getPubActiveObject(result['country_id']).then((data)=>{ + console.warn(data) + this.config.setPubActive(data); + }) + } + setTimeout(() => { + this.workUserResult(result) + }, 3000)}) + }else{ + RNDeviceInformation.getDeviceLanguageCode().then((code)=> { + I18n.locale=code.toLowerCase() + readUser().then((result) => { + console.warn(result) + if(result){ + getPubActiveObject(result['country_id']).then((data)=>{ + console.warn(data) + this.config.setPubActive(data); + }) + } + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.setPubActive(data) + }); + }) + } + }).catch((e)=>{ + console.warn("error") + RNDeviceInformation.getDeviceLanguageCode().then((code)=> { + console.warn(code) + + I18n.locale=code.toLowerCase() + readUser().then((result) => { + setTimeout(() => { + this.workUserResult(result) + }, 3000) + }).catch((e) => { + this.props.navigation.navigate("Auth") + }); + }) + + }) + + return "" + } +} +const styles=StyleSheet.create({ + container:{ + flex:1, + backgroundColor: theme.primary, + justifyContent:'center', + alignItems: 'center', + }, + logoContaner:{ + + flexDirection: 'row', + marginTop: responsiveHeight(20), + justifyContent: 'center', + alignItems: 'center', + }, + logo:{ + width:responsiveWidth(90), + resizeMode:'contain' + }, + lottie: { + width: 48 + , + height: 64 + }, + title:{ + fontSize:responsiveFontSize(4), + alignSelf: 'center', + fontWeight:'bold', + color:'white', + }, +}) \ No newline at end of file diff --git a/utils/DateUtils.js b/utils/DateUtils.js new file mode 100755 index 00000000..c3eade70 --- /dev/null +++ b/utils/DateUtils.js @@ -0,0 +1,35 @@ + +export const isSameYear=(targetDay:Date,day:Date)=>{ + return targetDay.getFullYear()==day.getFullYear(); +} +export const isSameDay=(targetDay:Date,day:Date)=>{ + return targetDay.getDate()==day.getDate(); +} +export const isSameMonth=(targetDay:Date,day:Date)=>{ + return targetDay.getMonth()==day.getMonth(); +} +export const isSameDate=(targetDay:Date,day:Date)=>{ + return isSameDay(targetDay,day) && isSameMonth(targetDay,day) && isSameYear(targetDay,day) +} + +export const convertDateToHumanText=(targetDay:Date,day:Date)=>{ + var secondtime=Math.abs(targetDay.getTime()-day.getTime()/1000); + if(isSameDate(targetDay,day)){ + var baseTime=' Il y a '; + if(secondtime<60)baseTime+secondtime+' Secondes'; + else if(secondtime<3600){ + secondtime=parseInt(secondtime/60) + baseTime+(secondtime+' minutes'); + + }else { + secondtime=parseInt(secondtime/3600); + baseTime+(secondtime+' heures') + } + + }else if(isSameYear(targetDay,day) && isSameMonth(targetDay,day)){ + var da=Math.round(Math.abs(targetDay.getMonth()-day.getMonth())) + return 'Il y a '+da+' mois'; + }else if(isSameYear(targetDay,day)){ + return day.toDateString(); + } +}; \ No newline at end of file diff --git a/utils/Translations.js b/utils/Translations.js new file mode 100755 index 00000000..9d6d967c --- /dev/null +++ b/utils/Translations.js @@ -0,0 +1,16 @@ +import I18n from 'react-native-i18n'; +let en=require('./i18n/en.json'); +let ar=require('./i18n/ar.json'); +let fr=require('./i18n/fr.json'); +let zh=require('./i18n/zh.json'); + +I18n.fallbacks=true; +I18n.translations={ + // Modification des langues + + // Nouvelle implémentation + en, + fr, + ar, + zh +} \ No newline at end of file diff --git a/utils/country_code.json b/utils/country_code.json new file mode 100755 index 00000000..f0984134 --- /dev/null +++ b/utils/country_code.json @@ -0,0 +1,248 @@ +[ + { "name": "Afghanistan", "dial_code": "+93", "code": "AF" }, + { "name": "Åland Islands", "dial_code": "+358", "code": "AX" }, + { "name": "Albania", "dial_code": "+355", "code": "AL" }, + { "name": "Algeria", "dial_code": "+213", "code": "DZ" }, + { "name": "American Samoa", "dial_code": "+1684", "code": "AS" }, + { "name": "Andorra", "dial_code": "+376", "code": "AD" }, + { "name": "Angola", "dial_code": "+244", "code": "AO" }, + { "name": "Anguilla", "dial_code": "+1264", "code": "AI" }, + { "name": "Antarctica", "dial_code": "+672", "code": "AQ" }, + { "name": "Antigua and Barbuda", "dial_code": "+1268", "code": "AG" }, + { "name": "Argentina", "dial_code": "+54", "code": "AR" }, + { "name": "Armenia", "dial_code": "+374", "code": "AM" }, + { "name": "Aruba", "dial_code": "+297", "code": "AW" }, + { "name": "Australia", "dial_code": "+61", "code": "AU" }, + { "name": "Austria", "dial_code": "+43", "code": "AT" }, + { "name": "Azerbaijan", "dial_code": "+994", "code": "AZ" }, + { "name": "Bahamas", "dial_code": "+1242", "code": "BS" }, + { "name": "Bahrain", "dial_code": "+973", "code": "BH" }, + { "name": "Bangladesh", "dial_code": "+880", "code": "BD" }, + { "name": "Barbados", "dial_code": "+1246", "code": "BB" }, + { "name": "Belarus", "dial_code": "+375", "code": "BY" }, + { "name": "Belgium", "dial_code": "+32", "code": "BE" }, + { "name": "Belize", "dial_code": "+501", "code": "BZ" }, + { "name": "Benin", "dial_code": "+229", "code": "BJ" }, + { "name": "Bermuda", "dial_code": "+1441", "code": "BM" }, + { "name": "Bhutan", "dial_code": "+975", "code": "BT" }, + { "name": "Bolivia, Plurinational State of bolivia", "dial_code": "+591", "code": "BO" }, + { "name": "Bosnia and Herzegovina", "dial_code": "+387", "code": "BA" }, + { "name": "Botswana", "dial_code": "+267", "code": "BW" }, + { "name": "Bouvet Island", "dial_code": "+47", "code": "BV" }, + { "name": "Brazil", "dial_code": "+55", "code": "BR" }, + { "name": "British Indian Ocean Territory", "dial_code": "+246", "code": "IO" }, + { "name": "Brunei Darussalam", "dial_code": "+673", "code": "BN" }, + { "name": "Bulgaria", "dial_code": "+359", "code": "BG" }, + { "name": "Burkina Faso", "dial_code": "+226", "code": "BF" }, + { "name": "Burundi", "dial_code": "+257", "code": "BI" }, + { "name": "Cambodia", "dial_code": "+855", "code": "KH" }, + { "name": "Cameroon", "dial_code": "+237", "code": "CM" }, + { "name": "Canada", "dial_code": "+1", "code": "CA" }, + { "name": "Cape Verde", "dial_code": "+238", "code": "CV" }, + { "name": "Cayman Islands", "dial_code": "+ 345", "code": "KY" }, + { "name": "Central African Republic", "dial_code": "+236", "code": "CF" }, + { "name": "Chad", "dial_code": "+235", "code": "TD" }, + { "name": "Chile", "dial_code": "+56", "code": "CL" }, + { "name": "China", "dial_code": "+86", "code": "CN" }, + { "name": "Christmas Island", "dial_code": "+61", "code": "CX" }, + { "name": "Cocos (Keeling) Islands", "dial_code": "+61", "code": "CC" }, + { "name": "Colombia", "dial_code": "+57", "code": "CO" }, + { "name": "Comoros", "dial_code": "+269", "code": "KM" }, + { "name": "Congo", "dial_code": "+242", "code": "CG" }, + { "name": "Congo, The Democratic Republic of the Congo", "dial_code": "+243", "code": "CD" }, + { "name": "Cook Islands", "dial_code": "+682", "code": "CK" }, + { "name": "Costa Rica", "dial_code": "+506", "code": "CR" }, + { "name": "Cote d'Ivoire", "dial_code": "+225", "code": "CI" }, + { "name": "Croatia", "dial_code": "+385", "code": "HR" }, + { "name": "Cuba", "dial_code": "+53", "code": "CU" }, + { "name": "Cyprus", "dial_code": "+357", "code": "CY" }, + { "name": "Czech Republic", "dial_code": "+420", "code": "CZ" }, + { "name": "Denmark", "dial_code": "+45", "code": "DK" }, + { "name": "Djibouti", "dial_code": "+253", "code": "DJ" }, + { "name": "Dominica", "dial_code": "+1767", "code": "DM" }, + { "name": "Dominican Republic", "dial_code": "+1849", "code": "DO" }, + { "name": "Ecuador", "dial_code": "+593", "code": "EC" }, + { "name": "Egypt", "dial_code": "+20", "code": "EG" }, + { "name": "El Salvador", "dial_code": "+503", "code": "SV" }, + { "name": "Equatorial Guinea", "dial_code": "+240", "code": "GQ" }, + { "name": "Eritrea", "dial_code": "+291", "code": "ER" }, + { "name": "Estonia", "dial_code": "+372", "code": "EE" }, + { "name": "Ethiopia", "dial_code": "+251", "code": "ET" }, + { "name": "Falkland Islands (Malvinas)", "dial_code": "+500", "code": "FK" }, + { "name": "Faroe Islands", "dial_code": "+298", "code": "FO" }, + { "name": "Fiji", "dial_code": "+679", "code": "FJ" }, + { "name": "Finland", "dial_code": "+358", "code": "FI" }, + { "name": "France", "dial_code": "+33", "code": "FR" }, + { "name": "French Guiana", "dial_code": "+594", "code": "GF" }, + { "name": "French Polynesia", "dial_code": "+689", "code": "PF" }, + { "name": "French Southern Territories", "dial_code": "+262", "code": "TF" }, + { "name": "Gabon", "dial_code": "+241", "code": "GA" }, + { "name": "Gambia", "dial_code": "+220", "code": "GM" }, + { "name": "Georgia", "dial_code": "+995", "code": "GE" }, + { "name": "Germany", "dial_code": "+49", "code": "DE" }, + { "name": "Ghana", "dial_code": "+233", "code": "GH" }, + { "name": "Gibraltar", "dial_code": "+350", "code": "GI" }, + { "name": "Greece", "dial_code": "+30", "code": "GR" }, + { "name": "Greenland", "dial_code": "+299", "code": "GL" }, + { "name": "Grenada", "dial_code": "+1473", "code": "GD" }, + { "name": "Guadeloupe", "dial_code": "+590", "code": "GP" }, + { "name": "Guam", "dial_code": "+1671", "code": "GU" }, + { "name": "Guatemala", "dial_code": "+502", "code": "GT" }, + { "name": "Guernsey", "dial_code": "+44", "code": "GG" }, + { "name": "Guinea", "dial_code": "+224", "code": "GN" }, + { "name": "Guinea-Bissau", "dial_code": "+245", "code": "GW" }, + { "name": "Guyana", "dial_code": "+592", "code": "GY" }, + { "name": "Haiti", "dial_code": "+509", "code": "HT" }, + { "name": "Heard Island and Mcdonald Islands", "dial_code": "+0", "code": "HM" }, + { "name": "Holy See (Vatican City State)", "dial_code": "+379", "code": "VA" }, + { "name": "Honduras", "dial_code": "+504", "code": "HN" }, + { "name": "Hong Kong", "dial_code": "+852", "code": "HK" }, + { "name": "Hungary", "dial_code": "+36", "code": "HU" }, + { "name": "Iceland", "dial_code": "+354", "code": "IS" }, + { "name": "India", "dial_code": "+91", "code": "IN" }, + { "name": "Indonesia", "dial_code": "+62", "code": "ID" }, + { "name": "Iran, Islamic Republic of Persian Gulf", "dial_code": "+98", "code": "IR" }, + { "name": "Iraq", "dial_code": "+964", "code": "IQ" }, + { "name": "Ireland", "dial_code": "+353", "code": "IE" }, + { "name": "Isle of Man", "dial_code": "+44", "code": "IM" }, + { "name": "Israel", "dial_code": "+972", "code": "IL" }, + { "name": "Italy", "dial_code": "+39", "code": "IT" }, + { "name": "Jamaica", "dial_code": "+1876", "code": "JM" }, + { "name": "Japan", "dial_code": "+81", "code": "JP" }, + { "name": "Jersey", "dial_code": "+44", "code": "JE" }, + { "name": "Jordan", "dial_code": "+962", "code": "JO" }, + { "name": "Kazakhstan", "dial_code": "+7", "code": "KZ" }, + { "name": "Kenya", "dial_code": "+254", "code": "KE" }, + { "name": "Kiribati", "dial_code": "+686", "code": "KI" }, + { "name": "Korea, Democratic People's Republic of Korea", "dial_code": "+850", "code": "KP" }, + { "name": "Korea, Republic of South Korea", "dial_code": "+82", "code": "KR" }, + { "name": "Kosovo", "dial_code": "+383", "code": "XK" }, + { "name": "Kuwait", "dial_code": "+965", "code": "KW" }, + { "name": "Kyrgyzstan", "dial_code": "+996", "code": "KG" }, + { "name": "Laos", "dial_code": "+856", "code": "LA" }, + { "name": "Latvia", "dial_code": "+371", "code": "LV" }, + { "name": "Lebanon", "dial_code": "+961", "code": "LB" }, + { "name": "Lesotho", "dial_code": "+266", "code": "LS" }, + { "name": "Liberia", "dial_code": "+231", "code": "LR" }, + { "name": "Libyan Arab Jamahiriya", "dial_code": "+218", "code": "LY" }, + { "name": "Liechtenstein", "dial_code": "+423", "code": "LI" }, + { "name": "Lithuania", "dial_code": "+370", "code": "LT" }, + { "name": "Luxembourg", "dial_code": "+352", "code": "LU" }, + { "name": "Macao", "dial_code": "+853", "code": "MO" }, + { "name": "Macedonia", "dial_code": "+389", "code": "MK" }, + { "name": "Madagascar", "dial_code": "+261", "code": "MG" }, + { "name": "Malawi", "dial_code": "+265", "code": "MW" }, + { "name": "Malaysia", "dial_code": "+60", "code": "MY" }, + { "name": "Maldives", "dial_code": "+960", "code": "MV" }, + { "name": "Mali", "dial_code": "+223", "code": "ML" }, + { "name": "Malta", "dial_code": "+356", "code": "MT" }, + { "name": "Marshall Islands", "dial_code": "+692", "code": "MH" }, + { "name": "Martinique", "dial_code": "+596", "code": "MQ" }, + { "name": "Mauritania", "dial_code": "+222", "code": "MR" }, + { "name": "Mauritius", "dial_code": "+230", "code": "MU" }, + { "name": "Mayotte", "dial_code": "+262", "code": "YT" }, + { "name": "Mexico", "dial_code": "+52", "code": "MX" }, + { "name": "Micronesia, Federated States of Micronesia", "dial_code": "+691", "code": "FM" }, + { "name": "Moldova", "dial_code": "+373", "code": "MD" }, + { "name": "Monaco", "dial_code": "+377", "code": "MC" }, + { "name": "Mongolia", "dial_code": "+976", "code": "MN" }, + { "name": "Montenegro", "dial_code": "+382", "code": "ME" }, + { "name": "Montserrat", "dial_code": "+1664", "code": "MS" }, + { "name": "Morocco", "dial_code": "+212", "code": "MA" }, + { "name": "Mozambique", "dial_code": "+258", "code": "MZ" }, + { "name": "Myanmar", "dial_code": "+95", "code": "MM" }, + { "name": "Namibia", "dial_code": "+264", "code": "NA" }, + { "name": "Nauru", "dial_code": "+674", "code": "NR" }, + { "name": "Nepal", "dial_code": "+977", "code": "NP" }, + { "name": "Netherlands", "dial_code": "+31", "code": "NL" }, + { "name": "Netherlands Antilles", "dial_code": "+599", "code": "AN" }, + { "name": "New Caledonia", "dial_code": "+687", "code": "NC" }, + { "name": "New Zealand", "dial_code": "+64", "code": "NZ" }, + { "name": "Nicaragua", "dial_code": "+505", "code": "NI" }, + { "name": "Niger", "dial_code": "+227", "code": "NE" }, + { "name": "Nigeria", "dial_code": "+234", "code": "NG" }, + { "name": "Niue", "dial_code": "+683", "code": "NU" }, + { "name": "Norfolk Island", "dial_code": "+672", "code": "NF" }, + { "name": "Northern Mariana Islands", "dial_code": "+1670", "code": "MP" }, + { "name": "Norway", "dial_code": "+47", "code": "NO" }, + { "name": "Oman", "dial_code": "+968", "code": "OM" }, + { "name": "Pakistan", "dial_code": "+92", "code": "PK" }, + { "name": "Palau", "dial_code": "+680", "code": "PW" }, + { "name": "Palestinian Territory, Occupied", "dial_code": "+970", "code": "PS" }, + { "name": "Panama", "dial_code": "+507", "code": "PA" }, + { "name": "Papua New Guinea", "dial_code": "+675", "code": "PG" }, + { "name": "Paraguay", "dial_code": "+595", "code": "PY" }, + { "name": "Peru", "dial_code": "+51", "code": "PE" }, + { "name": "Philippines", "dial_code": "+63", "code": "PH" }, + { "name": "Pitcairn", "dial_code": "+64", "code": "PN" }, + { "name": "Poland", "dial_code": "+48", "code": "PL" }, + { "name": "Portugal", "dial_code": "+351", "code": "PT" }, + { "name": "Puerto Rico", "dial_code": "+1939", "code": "PR" }, + { "name": "Qatar", "dial_code": "+974", "code": "QA" }, + { "name": "Romania", "dial_code": "+40", "code": "RO" }, + { "name": "Russia", "dial_code": "+7", "code": "RU" }, + { "name": "Rwanda", "dial_code": "+250", "code": "RW" }, + { "name": "Reunion", "dial_code": "+262", "code": "RE" }, + { "name": "Saint Barthelemy", "dial_code": "+590", "code": "BL" }, + { "name": "Saint Helena, Ascension and Tristan Da Cunha", "dial_code": "+290", "code": "SH" }, + { "name": "Saint Kitts and Nevis", "dial_code": "+1869", "code": "KN" }, + { "name": "Saint Lucia", "dial_code": "+1758", "code": "LC" }, + { "name": "Saint Martin", "dial_code": "+590", "code": "MF" }, + { "name": "Saint Pierre and Miquelon", "dial_code": "+508", "code": "PM" }, + { "name": "Saint Vincent and the Grenadines", "dial_code": "+1784", "code": "VC" }, + { "name": "Samoa", "dial_code": "+685", "code": "WS" }, + { "name": "San Marino", "dial_code": "+378", "code": "SM" }, + { "name": "Sao Tome and Principe", "dial_code": "+239", "code": "ST" }, + { "name": "Saudi Arabia", "dial_code": "+966", "code": "SA" }, + { "name": "Senegal", "dial_code": "+221", "code": "SN" }, + { "name": "Serbia", "dial_code": "+381", "code": "RS" }, + { "name": "Seychelles", "dial_code": "+248", "code": "SC" }, + { "name": "Sierra Leone", "dial_code": "+232", "code": "SL" }, + { "name": "Singapore", "dial_code": "+65", "code": "SG" }, + { "name": "Slovakia", "dial_code": "+421", "code": "SK" }, + { "name": "Slovenia", "dial_code": "+386", "code": "SI" }, + { "name": "Solomon Islands", "dial_code": "+677", "code": "SB" }, + { "name": "Somalia", "dial_code": "+252", "code": "SO" }, + { "name": "South Africa", "dial_code": "+27", "code": "ZA" }, + { "name": "South Sudan", "dial_code": "+211", "code": "SS" }, + { "name": "South Georgia and the South Sandwich Islands", "dial_code": "+500", "code": "GS" }, + { "name": "Spain", "dial_code": "+34", "code": "ES" }, + { "name": "Sri Lanka", "dial_code": "+94", "code": "LK" }, + { "name": "Sudan", "dial_code": "+249", "code": "SD" }, + { "name": "Suriname", "dial_code": "+597", "code": "SR" }, + { "name": "Svalbard and Jan Mayen", "dial_code": "+47", "code": "SJ" }, + { "name": "Swaziland", "dial_code": "+268", "code": "SZ" }, + { "name": "Sweden", "dial_code": "+46", "code": "SE" }, + { "name": "Switzerland", "dial_code": "+41", "code": "CH" }, + { "name": "Syrian Arab Republic", "dial_code": "+963", "code": "SY" }, + { "name": "Taiwan", "dial_code": "+886", "code": "TW" }, + { "name": "Tajikistan", "dial_code": "+992", "code": "TJ" }, + { "name": "Tanzania, United Republic of Tanzania", "dial_code": "+255", "code": "TZ" }, + { "name": "Thailand", "dial_code": "+66", "code": "TH" }, + { "name": "Timor-Leste", "dial_code": "+670", "code": "TL" }, + { "name": "Togo", "dial_code": "+228", "code": "TG" }, + { "name": "Tokelau", "dial_code": "+690", "code": "TK" }, + { "name": "Tonga", "dial_code": "+676", "code": "TO" }, + { "name": "Trinidad and Tobago", "dial_code": "+1868", "code": "TT" }, + { "name": "Tunisia", "dial_code": "+216", "code": "TN" }, + { "name": "Turkey", "dial_code": "+90", "code": "TR" }, + { "name": "Turkmenistan", "dial_code": "+993", "code": "TM" }, + { "name": "Turks and Caicos Islands", "dial_code": "+1649", "code": "TC" }, + { "name": "Tuvalu", "dial_code": "+688", "code": "TV" }, + { "name": "Uganda", "dial_code": "+256", "code": "UG" }, + { "name": "Ukraine", "dial_code": "+380", "code": "UA" }, + { "name": "United Arab Emirates", "dial_code": "+971", "code": "AE" }, + { "name": "United Kingdom", "dial_code": "+44", "code": "GB" }, + { "name": "United States", "dial_code": "+1", "code": "US" }, + { "name": "Uruguay", "dial_code": "+598", "code": "UY" }, + { "name": "Uzbekistan", "dial_code": "+998", "code": "UZ" }, + { "name": "Vanuatu", "dial_code": "+678", "code": "VU" }, + { "name": "Venezuela, Bolivarian Republic of Venezuela", "dial_code": "+58", "code": "VE" }, + { "name": "Vietnam", "dial_code": "+84", "code": "VN" }, + { "name": "Virgin Islands, British", "dial_code": "+1284", "code": "VG" }, + { "name": "Virgin Islands, U.S.", "dial_code": "+1340", "code": "VI" }, + { "name": "Wallis and Futuna", "dial_code": "+681", "code": "WF" }, + { "name": "Yemen", "dial_code": "+967", "code": "YE" }, + { "name": "Zambia", "dial_code": "+260", "code": "ZM" }, + { "name": "Zimbabwe", "dial_code": "+263", "code": "ZW" } +] \ No newline at end of file diff --git a/utils/events.js b/utils/events.js new file mode 100755 index 00000000..768675c0 --- /dev/null +++ b/utils/events.js @@ -0,0 +1,3 @@ +const EventEmitter = require('events'); +export default class Emitter extends EventEmitter {} +export const IlinkEmitter = new Emitter(); \ No newline at end of file diff --git a/utils/i18n/ar.json b/utils/i18n/ar.json new file mode 100755 index 00000000..41fbf0cc --- /dev/null +++ b/utils/i18n/ar.json @@ -0,0 +1,250 @@ +{ + "WELCOME" : "مرحبًا بكم في iLink World!", + "HELP" : "مساعدة", + "SIMPLE_USER" : "مستخدم بسيط", + "GEOLOCATED_USER" : "الموقع الجغرافي المستخدم", + "SUPERVISOR" : "مشرف", + "AGENT":"وكيل", + "USER":"User", + "HYPERVISOR" : "هبرفيسر", + "OPEN": "افتح", + "POSITION": "موقعي", + "TAKE_MY_PLACE":"خذ موقفي", + "MAP": "الخريطة", + "BSR":"مساء الخير", + "OR_BIG": "أو", + "FOR_NUMB": "ل" , + "SUBTITLE_ACTIVE_ACCOUNT": "قم بتنشيط حسابك باستخدام الرمز الذي تم إرساله إلى بريدك الإلكتروني أو رقم هاتفك" , + "ASK_FOR_CREDIT": "التقدم بطلب للحصول على ائتمان" , + "ASK_CREDIT": "طلبات الائتمان" , + "ASK_SUPERIOR_CREDIT": "طلب رصيد من مديرك" , + "ASK_FOR_SUPERVISOR": "طلبات المشرفين" , + "ASK_HYPERVISOR": "كن مشرفًا كبيرًا" , + "ASK_FOR_HYPERVISOR": "اطلب أن تصبح مشرفًا كبيرًا" , + "ASK_SUPERVISOR": "كن مشرفًا" , + "ASK_FOR_SUPERVISOR1": "اسأل لتصبح مشرفًا" , + "CREDIT_ASK_FROM_MEMBERS": "طلبات ائتمان من الأعضاء" , + "ASK_MEMBERS": "طلبات العضوية" , + "MY_ACCOUNT": "حسابي" , + "THE_ACCOUNT": "الحساب" , + "NO_GEO_POINT_CODE": "ليس لديك نقطة تحديد جغرافي مجانية" , + "NO_DEMAND_ADHESION": "ليس لديك طلب عضوية" , + "ACTIVATED": "تم تفعيله" , + "CREDIT_MANAGE": "إدارة الائتمان" , + "GROUP_MANAGE": "إدارة المجموعة" , + "NOTIFICATIONS" :"الإخطار", + "CONFIGURATIONS": "تكوين", + "LOGOUT": "تسجيل الخروج" , + "HINT_HOME_SEARCH": "ابحث عن مكان أو حي أو مدينة" , + "MY_NETWORK": "شبكتي" , + "MY_GROUP": "مجموعتي" , + "CHANGE_MAP": "تغيير الخريطة" , + "CHANGE_NETWORK": "تغيير الشبكة" , + "PRINT_ALL": "إظهار الكل" , + "PRINT_MY_NETWORK": "عرض شبكتي" , + "MY_GROUP_MAP": "خريطة مجموعتي" , + "GROUP_MEMBERS": "أعضاء المجموعة" , + "NAME": "اسم العائلة (الأسماء)" , + "FIRSTNAME": "الاسم الأول (الأسماء)" , + "ADMIN": "المسؤول", + "SUPER_ADMIN": "مشرف سوبر" , + "GEOLOCATED": "الوكيل الجغرافي المحدد" , + "DELETE_GEOLOCATED_USER": "حذف", + "ADDRESS": "العنوان" , + "CREDIT": "الائتمان" , + "NEXT" : "التالي", + "SPONSOR_CODE": "رمز الراعي" , + "TEXT_BIG_CREATE_AGENT_1": "سجل كعامل" , + "EMAIL": "البريد الإلكتروني" , + "COUNTRY": "البلد" , + "LOADING_INFO": "جارٍ تحميل المعلومات ..." , + "LOADING_DESCRIPTION_COUNTRY": "انتظر لحظة! نحن نجمع معلومات عن بلدك ..." , + "NETWORK": "الشبكة" , + "PHONE": "الهاتف" , + "PHONE_NUMBER" : "الهاتف", + "CHOICE_NETWORK": "اختر شبكة" , + "COUNTRY_CHOICE": "اختيار بلد" , + "LAST_STEP": "الخطوة الأخيرة" , + "ACTIVE_ACCOUNT": "تنشيط الحساب!" , + "LAST_STEP_TEXT": "قم بتنشيط حسابك باستخدام رمز التحقق وعنوان بريدك الإلكتروني ورقم هاتفك", + "NETWORK_CHOICE": "اختيار الشبكة" , + "CHOICE_NETWORK_TEXT": "تحديد شبكة لعرضها" , + "NO_NETWORK_CORRESPONDING": "هذه الشبكة لا تحتوي على نقاط" , + "MENU_FILTER": "قائمة مرشح المسافة" , + "TEXT_FILTER_DISTANCE": "اضبط المسافة للبحث (بالكيلومترات)" , + "WAIT_LOADING_POSITION": "نحن بحاجة إلى موضع مكان عملك" , + "CONNECTION_SUCCESSFUL": "اتصال ناجح!" , + "UNABLE_TO_CONNECT": "رقم الهاتف وكلمة المرور غير صحيحين" , + "TITLE_CHOICE_TYPE_ACCOUNT": "اختر نوع الحساب الذي تريد إنشاءه" , + "ALREADY_HAVE_AN_ACCOUNT": "هل لديك حساب بالفعل؟" , + "AGENT_ACCOUNT": "حساب الوكيل" , + "UNABLE_TO_CONNECT_TITLE": "غير قادر على الاتصال" , + "DISTANCE_ARROUND": "من حولك" , + "UNABLE_TO_CREATE_ACCOUNT": "لا يمكن إنشاء حساب" , + "TO_YOU": "منكم" , + "PHONE_NUMBER_ADMIN": "رقم المعاملة" , + "FAILED_TEXT_CONTACT_ADMIN": "غير قادر على إنشاء حساب ، يرجى الاتصال بالمسؤولين" , + "HYPERVISOR_MUST_VALIDATE_SUPERVISOR": "سيكون رمزك الصحيح هو أن مشرفك يقوم بالتحقق من صحته" , + "ACCOUNT_SUCCESSFULL_CREATED":"تم إنشاء الحساب بنجاح. ستتلقى بضع دقائق إلى البريد الإلكتروني والرسائل النصية القصيرة مع معلوماتك.", + "langue": { + "french": "الفرنسية" , + "english": "الإنجليزية" + }, + "ERROR_FILTER": "حدث خطأ أثناء التصفية" , + "ERROR_FILTER_TEXT": "حدثت مشكلة أثناء التصفية.", + "YOUR_THERE": "أنت هنا" , + "مرشح": "تصفية" , + "APP_FULLNAME": "Ilink World" , + "GUIDE_TITLE": "مرحبًا بك في دليل" , + "GUIDE_USER_SIMPLE": "دليل مستخدم" , + "GUIDE_AGENT": "دليل وكيل" , + "إعادة تحديد موضع": "إعادة تحديد موضع" , + "WRONG_PHONE_NUMBER": "الرقم غير صحيح!" , + "WRONG_PASSWORD": "كلمة مرور غير صحيحة!" , + "NETWORK_LOST": "فقد الاتصال!" , + "SHOW": "عرض" , + "CALL": "Call" , + "FORGOTTEN_PASSWORD": "هل نسيت كلمة المرور؟" , + "CONNECT_USER": "الاتصال" , + "PASSWORD": "كلمة المرور" , + "CONFIRM_PASSWORD": "تأكيد كلمة المرور" , + "PASSWORD_MODIFY": "تغيير كلمة المرور" , + "OLD_PASSWORD": "كلمة المرور القديمة" , + "NEW_PASSWORD": "كلمة مرور جديدة" , + "CONFIRM_NEW_PASSWORD": "تأكيد كلمة المرور الجديدة" , + "AMOUNT": "المبلغ" , + "STATUS": "الحالة" , + "CANCEL": "خروج" , + "TEXT_GUIDE_USER_1":"لقد قمت للتو بالاتصال. \n تم وضع علامة على موقعك في وسط الخريطة مع الإشارة \" أنت هنا \"", + "TEXT_GUIDE_USER_3": "سيؤدي النقر فوق زر علامة زائد إلى فتح قائمة الخيارات", + "TEXT_GUIDE_USER_4": "انقر على علامة للحصول على المعلومات حول نقطة" , + "TEXT_GUIDE_USER_2": "انقر على زر القائمة في الجزء العلوي الأيمن لاكتشاف القائمة وخيار قطع الاتصال" , + "TEXT_GUIDE_USER_5": "انقر على خيار التصفية لتصفية النقاط وفقًا لمسافة المسافة منك" , + "TEXT_GUIDE_USER_6": "انقر فوق خيار تغيير الشبكة لعرض نقاط الشبكات الأخرى", + "TEXT_GUIDE_USER_7": "انقر على خيار خط سير الرحلة لعرض المسار إلى هذه النقطة" , + "TEXT_GUIDE_USER_10": "راجع قائمة أعضاء مجموعتك" , + "TEXT_GUIDE_USER_11": "انقر فوق خيار ملف التعريف للحصول على رابط معلومات إلى حسابك", + "CATEGORY": "الفئة", + "WAY": "السفر", + "ADD_NETWORK": "إضافة شبكة" , + "POINT_NUMBER": "عدد النقاط" , + "SUPERIOR_CODE": "رمز الراعي" , + "ADD_SUCCES": "إضافة ناجح" , + "ADD_SUCCESS_TEXT": "تمت إضافة الرقم إلى الشبكة بنجاح" , + "MEMBER_CODE": "رمز العضو" , + "MEMBER_INFO": "معلومات الأعضاء" , + "DEMAND_INFO": "معلومات بناء على الطلب" , + "ACCOUNT_NOT_ACTIVE": "حسابك غير نشط" , + "ENTER_VALIDATION_CODE": "أدخل رمز التحقق من الصحة الذي تم إرساله إليك." , + "ENTER_VALIDATION_CODE1": "أدخل رمز التحقق من الصحة." , + "SUPERVISOR_NUMBER": "عدد المشرفين" , + "GEOLOCATED_NUMBER": "عدد النقاط لكل مشرف" , + "ACTIVATE_ACCOUNT": "تنشيط الحساب" , + "SEND": "إرسال !", + "CHANGE_INFORMATION": "تغيير المعلومات الخاصة بي", + "VALIDATE": "التحقق من صحة", + "CONNECT": "صلة", + "TEXT_BIG_CREATE_1": "سجل كمستخدم", + "TEXT_SUBTITLE_CREATE_1": "املأ معلوماتك الشخصية" , + "USER_ACCOUNT": "حساب المستخدم" , + "USER_CONNECT": "تسجيل دخول المستخدم" , + "GIVE_CONNECT_INFO": "أدخل معلومات تسجيل الدخول الخاصة بك" , + "CREATE_ACCOUNT": "إنشاء حساب" , + "CHOOSE_LANGUAGE": "اختر اللغة" , + "MODIFY_PASSWORD": "نسيت كلمة المرور" , + "CONTACT": "اتصال", + "UPDATE": "... تحديث", + "FAQ": "التعليمات", + "UPDATE_POSITION_TEXT": "تحديث موقعي" , + "YOU_ARE":"أنت أنت؟", + "GIVE_ID_FOR_RECOVERY": "أدخل اسم المستخدم الخاص بك , وسوف نرسل لك كلمة مرور جديدة." , + "SELECT_ACCOUNT_TYPE": "حدد نوع الحساب!" , + "BRAVO": "أحسنت !", + "HELP_CONGRAT_MESSAGE": "أنت تعرف الآن كيفية استخدام iLink" , + "REPLAY_HELP": "مراجعة البرنامج التعليمي" , + "BACK_TO_HELP_HOME": "الرجوع إلى المساعدة" , + "USE_APP": "استخدم التطبيق" , + "HIDE_AT_STARTUP": "إخفاء في البداية القادمة؟" , + "PATH_YOU_ARE": "أنت في" , + "PATH_TO_POINT": "من النقطة التي قمت بالنقر فوقها." , + "PATH_YOU_WILL": "أنت ستكون هناك" , + "PRECISE_SEARCH": "تحسين بحثك" , + "SEARCH_DISTANCE": "المسافة" , + "SEARCH_5": "5 كم" , + "SEARCH_15": "15 كم" , + "SEARCH_20": "20 كم" , + "SEARCH_25": "25 كم" , + "SEARCH": "بحث", + "DELETE": "حذف", + "FREE": "متاح", + "SAVED": "مسجل", + "ACCOUNT_INFO": "معلومات حسابي" , + "REGISTER_YOURSELF": "Register" , + "التسجيل": "التسجيل" , + "CHANGE_LANG_LABEL": "تغيير اللغة" , + "GIVE_PERSONNAL_INFO": "املأ معلوماتك الشخصية" , + "YOUR_GEOLOCATION": "موقعك" , + "HISTORY_REQUEST": "سجل الطلبات" , + "ASK_REQUEST_HISTORY": "طلب سجل" , + "GIVE_HISTORY_INFO": "معلومات حول تاريخك" , + "HISTORY_TYPE": "النوع" , + "HISTORY_TYPE_ASK": "الطلبات" , + "REQUEST_RECEIVE": "الطلبات المستلمة" , + "MY_DEMANDE": "طلباتي" , + "PHONE_TRANSACTION": "رقم المعاملة" , + "DEMAND_TEXT_FIRST_PART": "قدم طلبًا" , + "REQUEST_SEND": "تم إرسال الطلب" , + "TO_": "ائتمان على" , + "DEMAND_SEND_SUCCESFUL": "تم إرسال طلبك بنجاح!" , + "SAVE_HISTORY": "حفظ السجل" , + "MAKE_REQUEST": "تقديم طلب" , + "DATE_WRONG": "لا يمكن أن يكون تاريخ الانتهاء أقدم من تاريخ البدء" , + "LOADING_DOTS": "التحميلات ..." , + "EMPTY_LIST_REQUEST": "لا يوجد طلب" , + "MEMBER_LIST": "قائمة الأعضاء" , + "FREE_CODE_LIST": "قائمة الرموز المتاحة" , + "NO_ITEM_REQUEST": "لا توجد عناصر مطابقة ," , + "MEMBERSHIP_REQUEST": "طلبات العضوية" , + "HISTORY_TYPE_REQUEST": "استعلامات" , + "TREAT" : "معاهدة", + "EXIT_TITLE": "أغلق iLink World!" , + "EXIT_DESC": "هل تريد حقًا إغلاق iLink World؟" , + "NO_TREAT": "غير معالج" , + "EXIT": "أغلق", + "PERIOD": "فترة", + "Disconnection": "الخروج", + "DISCONNEXION_TEXT": "هل تريد بالتأكيد قطع الاتصال؟ سيؤدي هذا الإجراء إلى مسح جميع بياناتك المؤقتة." , + "HISTORY_START": "ابدأ" , + "YES": "نعم فعلا", + "NO": "لا", + "CONNECTION_LOST_CHECK": "فقدت الاتصال ، يرجى التحقق من اتصالك!" , + "ACCOUNT_ACTIVATE_TEXT": "تم تنشيط حسابك بنجاح!" , + "HISTORY_END": "النهاية" , + "DONT_VALIDATE_ACCOUNT": "الحساب لم يتم التحقق منه" , + "CONNECTION_SUCCESSFULL_TEXT": "تسجيل دخول ناجح مرحبًا بك في iLink World!" , + "UNVALIDATE_ACCOUNT_TEXT": "لم يدقق برنامج Hypervisor في حسابك بعد" , + "TEXT_NEED_POSITION": "الرجاء تحديث موقعك!" , + "TITLE_NEED_POSITION": "يلزم تحديث موقعك" , + "POSITION_UPDATE_SUCCESS_TEXT": "تم تحديث موقعك بنجاح!" , + "UPDATE_SUCCESS": "تحديث ناجح!" , + "TITLE_UPDATE_POSITION_FAILED": "غير قادر على تحديث موقعك" , + "TEXT_UPDATE_POSITION_FAILED_1": "غير قادر على استرداد رمز العضو الخاص بك" , + "TEXT_UPDATE_POSITION_FAILED_2": "غير قادر على استعادة موقعك" , + "TITLE_ERROR_SURVENU": "لقد حدث خطأ!" , + "TITLE_PROBLE_COME": "حدثت مشكلة" , + "TEXT_ERROR_START_APPLICATION": "حدث خطأ أثناء بدء iLink World ، يرجى إعادة تشغيل iLink World" , + "TEXT_UNABLE_TO_GET_YOUR_POSITION": "غير قادر على استعادة موقعك ، يرجى التأكد من تمكين GPS الخاص بك وإعادة تشغيل iLink World" , + "RESTART": "كرر", + "TEXT_UNABLE_TO_GET_COUNTRY_INFO": "غير قادر على استرداد المعلومات من بلدك. تحقق من اتصالك بالإنترنت. انقر فوق موافق للمحاولة مرة أخرى.", + "TITLE_UNABLE_TO_AUTORISE": "فشل التفويض" , + "MISSING_AUTORISATION_LOCATION": "iLink World غير مخول للوصول إلى موقعك ، يرجى السماح لـ iLink World بالوصول إلى موقعك وإعادة تشغيل iLink World" , + "TEXT_FORGOTTEN_PASSWORD": "أدخل اسم المستخدم الخاص بك ، وسنرسل لك كلمة مرور جديدة", + "TEXT_NETWORK_UNABLE": "الشبكة غير متوفرة ، هل تريد المحاولة مرة أخرى؟", + "LOADING_TEXT_MARKERS": "المزيد من النقاط", + "LOADING_TEXT_MARKERS_2": "around،", + "UNABLE_GET_INFORMATION": "مشكلة استرجاع المعلومات", + "UNABLE_GET_INFORMATION_TEXT": "تأكد من تشغيل GPS ووضعه في وضع الدقة العالية وإعادة تشغيل iLink World", + "ACCOUNT_CREATED_SUCCESS":"تم إنشاء الحساب بنجاح. سوف تتلقى في بضع دقائق رسالة بريد إلكتروني ورسالة نصية تحتوي على معلوماتك. سنقوم بإعادة توجيهك إلى صفحة تسجيل الدخول", + "TITLE_HELP_SOON": "مساعدة غير متوفرة!", + "HELP_SOON": "سيكون هناك برنامج تعليمي يساعدك في فهم ميزات التطبيق قريبًا." +} \ No newline at end of file diff --git a/utils/i18n/en.json b/utils/i18n/en.json new file mode 100755 index 00000000..4bfb92f4 --- /dev/null +++ b/utils/i18n/en.json @@ -0,0 +1,276 @@ +{ + "WELCOME" : "Welcome to iLink World !", + "HELP" : "Help", + "SIMPLE_USER" : "Simple User", + "GEOLOCATED_USER" : "Geo located user", + "SUPERVISOR" : "Supervisor", + "AGENT":"Agent", + "USER":"User", + "HYPERVISOR" : "Hypervisor", + "OPEN": "Open", + "POSITION": "My position", + "TAKE_MY_PLACE":"Take my position", + "MAP": "The map", + "BSR":"Good evening", + "ACCOUNT_CREATED_SUCCESS":"Account created successfully.\nYou will receive in a few minutes an email with your informations.\nWe will redirect you to the login page", + "OR_BIG":"OR", + "FOR_NUMB":"For the ", + "SELECT_NETWORK":"Select your network", + "YOUR_NETWORK":"Your network", + "SUBTITLE_ACTIVE_ACCOUNT":"Activate your account using the code that was sent on your email", + "ASK_FOR_CREDIT": "Apply for credit", + "ASK_CREDIT": "Credit applications", + "DEMAND_RECEIVE":"Request receive", + "ASK_SUPERIOR_CREDIT": "Request credit from your manager", + "ASK_FOR_SUPERVISOR": "Requests from supervisors", + "ASK_HYPERVISOR" : "Become a hypervisor", + "ASK_FOR_HYPERVISOR" : "Ask to become a hypervisor", + "ASK_SUPERVISOR" : "Become a Supervisor", + "ASK_FOR_SUPERVISOR1" : "Ask to become a supervisor", + "CREDIT_ASK_FROM_MEMBERS" : "Credit requests from your members", + "ASK_MEMBERS" : "Membership applications", + "MY_ACCOUNT" : "My Account", + "THE_ACCOUNT":"The Account ", + "NO_GEO_POINT_CODE":"You have no free geolocated point", + "NO_DEMAND_ADHESION":"You have no membership request", + "ACTIVATED":"has been activated", + "CREDIT_MANAGE":"Credit Management", + "GROUP_MANAGE":"Group Management", + "NOTIFICATIONS":"Notification", + "CONFIGURATIONS":"Configuration", + "LOGOUT" : "Sign Out", + "HINT_HOME_SEARCH":" Find a place, neighborhood or city ", + "MY_NETWORK":"My network", + "MY_GROUP":"My group", + "CHANGE_MAP":"Change map", + "CHANGE_NETWORK":"Change network", + "PRINT_ALL":"Show all", + "PRINT_MY_NETWORK":"View my network", + "MY_GROUP_MAP" : "Map of my group", + "GROUP_MEMBERS" : "The group members", + "NAME" : "Last name(s)", + "FIRSTNAME" : "First name(s) ", + "ADMIN":"Administrator", + "SUPER_ADMIN":"Super administrator", + "GEOLOCATED":"Geo located agent", + "DELETE_GEOLOCATED_USER":"Delete", + "ADDRESS" : "Address", + "CREDIT" : "Credit", + "NEXT":"Next", + "SPONSOR_CODE":"Sponsor Code", + "TEXT_BIG_CREATE_AGENT_1":"Register as Agent", + "EMAIL" : "Email", + "COUNTRY" : "Country", + "LOADING_INFO":"Loading information...", + "WAITING_LONG":"Waiting for a moment ...", + "LOADING_DESCRIPTION_COUNTRY":"Wait a moment ! we collect information about your country...", + "NETWORK" : "Network", + "PHONE" : "Phone", + "FILTER_DATE":"Filter Date", + "PHONE_NUMBER":"Phone", + "CHOICE_NETWORK":"Choose a network", + "COUNTRY_CHOICE":"Choose a country", + "LAST_STEP":"Last step", + "ACTIVE_ACCOUNT": "Activate the account !", + "LAST_STEP_TEXT": "Activate your account using the verification code that was sent to you on your e-mail address and on your phone number", + "NETWORK_CHOICE":"Choix du réseau", + "CHOICE_NETWORK_TEXT": "Define a network to display", + "NO_NETWORK_CORRESPONDING": "This network has no points", + "MENU_FILTER": "Distance Filter Menu", + "TEXT_FILTER_DISTANCE": "Set the distance to search (in km)", + "WAIT_LOADING_POSITION": "We need the position of your workplace", + "CONNEXION_SUCCESSFUL": "Connection successful!", + "UNABLE_TO_CONNECT": "The phone number and password are incorrect", + "TITLE_CHOICE_TYPE_ACCOUNT": "Choose the type of account you want to create", + "ALREADY_HAVE_AN_ACCOUNT": "Do you already have an account?", + "AGENT_ACCOUNT": "Agent Account", + "UNABLE_TO_CONNECT_TITLE": "Unable to connect", + "DISTANCE_ARROUND": " around you", + "UNABLE_TO_CREATE_ACCOUNT": "Can not create an account", + "TO_YOU": " around you", + "PROBLEM_OCCUR":"Problem ...", + "PROBLEM_OCCUR_DIRECTION":"Unable to get map road,please restart.", + "PHONE_NUMBER_ADMIN": "Transaction number", + "FAILED_TEXT_CONTACT_ADMIN": "Unable to create an account please contact administrators", + "HYPERVISOR_MUST_VALIDATE_SUPERVISOR": "Your validation code will be sent to you once your Hypervisor validates it", + "ACCOUNT_SUCCESSFULL_CREATED":"The account was successfully created.\nYou will receive in a few minutes an email with your information.\nWe will redirect you to the login page", + "langue":{ + "french": "French", + "english": "English" + }, + "ERROR_FILTER": "Error occurred during the filter", + "ERROR_FILTER_TEXT": "Problem encountered while filtering.", + "YOUR_THERE": "You are here", + "FILTER": "Filter", + "SOLDE_UNVAIBLE":"Solde Unvailable", + "APP_FULLNAME": "Ilink World", + "ACTIVE_USER":"Activate", + "TREAT_DEMAND":"Already Treated", + "ACTION_TREAT_DEMAND":"Treat demand", + "INVALID_MONTANT":"Invalid Request Credit, max = 1.000.000", + "TITLE_SUPPRESS_CONFIRM":"Confirm Suppression", + "TEXT_SUPPRESS_CONFIRM":"Would you delete this user account ?", + "GUIDE_TITLE": "Welcome to iLink World\n Guide", + "GUIDE_USER_SIMPLE": "Guide for a user", + "GUIDE_AGENT": "Guide for an agent", + "REPOSITIONNING": "Repositioning", + "WRONG_PHONE_NUMBER": "Incorrect number!", + "WRONG_PASSWORD": "Incorrect password!", + "NETWORK_LOST": "Connection lost!", + "SHOW": "Show", + "CALL": "Call", + "FORGOTTEN_PASSWORD": "Forgot your password?", + "CONNECT_USER": "Connect", + "PASSWORD": "Password", + "CONFIRM_PASSWORD": "Confirm the password", + "PASSWORD_MODIFY": "Change your password", + "OLD_PASSWORD": "Old password", + "NEW_PASSWORD": "New password", + "CONFIRM_NEW_PASSWORD": "Confirm new password", + "AMOUNT": "Amount", + "STATUS": "Status", + "CANCEL": "Exit", + "TEXT_GUIDE_USER_1":"You have just connected.\n Your location is marked in the center of the map with the indication \"You are here\" ", + "TEXT_GUIDE_USER_3": "Clicking the '+' button will open the options menu", + "TEXT_GUIDE_USER_4": "Click on a marker to get the information on a point", + "TEXT_GUIDE_USER_2": "Click on the menu button at the top right to discover the menu and the disconnection option", + "TEXT_GUIDE_USER_5": "Click on the 'Filter' option to filter your points according to their distance from you", + "TEXT_GUIDE_USER_6": "Click on the 'Change network' option to display the points of other networks", + "TEXT_GUIDE_USER_7": "Click on the option 'Itinerary' to display the path to this point", + "TEXT_GUIDE_USER_10": "Consult the list of members of your group", + "TEXT_GUIDE_USER_11": "Click on the profile option to have information link to your account", + "CATEGORY": "Category", + "WAY": "Travel", + "ADD_NETWORK": "Add a network", + "POINT_NUMBER": "Number of points", + "SUPERIOR_CODE": "Sponsor code", + "ADD_SUCCES": "Add Successful", + "ADD_SUCCESS_TEXT": "The number has been added to the network successfully", + "MEMBER_CODE": "Member Code", + "MEMBER_INFO": "Member Information", + "DEMAND_INFO": "Information on the request", + "ACCOUNT_NOT_ACTIVE": "Your account is not activated", + "ENTER_VALIDATION_CODE": "Enter the validation code that was sent to you.", + "ENTER_VALIDATION_CODE1": "Enter the validation code.", + "SUPERVISOR_NUMBER": "Number of supervisors", + "GEOLOCATED_NUMBER": "Number of points per supervisor", + "ACTIVATE_ACCOUNT": "Activate account", + "SEND": "Send!", + "CHANGE_INFORMATION": "Change my information", + "VALIDATE": "Validate", + "CONNECT": "Connection", + "TEXT_BIG_CREATE_1": "Register as a User", + "TEXT_SUBTITLE_CREATE_1": "Fill in your personal information", + "USER_ACCOUNT": "User Account", + "USER_CONNECT": "User Login", + "GIVE_CONNECT_INFO": "Enter your login information", + "CREATE_ACCOUNT": "create an account", + "CHOOSE_LANGUAGE": "Choose the language", + "MODIFY_PASSWORD": "Forgotten password", + "CONTACT": "Contact", + "UPDATE": "... update", + "FAQ": "FAQ", + "UPDATE_POSITION_TEXT": "Update my position", + "YOU_ARE": "Are you?", + "GIVE_ID_FOR_RECOVERY": "Enter your username, we will send you a new password.", + "SELECT_ACCOUNT_TYPE": "Select an account type!", + "BRAVO": "Bravo!", + "HELP_CONGRAT_MESSAGE": "You now know how to use iLink", + "REPLAY_HELP": "Review the tutorial", + "BACK_TO_HELP_HOME": "Return to Help", + "USE_APP": "Use the application", + "HIDE_AT_STARTUP": "Hide at next start?", + "PATH_YOU_ARE": "You are in", + "PATH_TO_POINT": "From the point you clicked.", + "PATH_YOU_WILL": "You will be there", + "PRECISE_SEARCH": "Refine your search", + "SEARCH_DISTANCE": "Distance", + "SEARCH_5": "5 km", + "SEARCH_15": "15 km", + "SEARCH_20": "20 km", + "SEARCH_25": "25 km", + "SEARCH": "Search", + "DELETE": "Delete", + "FREE": "Available", + "SAVED": "Registered", + "ACCOUNT_INFO": "My Account Information", + "REGISTER_YOURSELF": "Register", + "REGISTRATION": "Registration", + "CHANGE_LANG_LABEL": "Change language", + "GIVE_PERSONNAL_INFO": "Fill in your personal information", + "YOUR_GEOLOCATION": "Your location", + "HISTORY_REQUEST": "Request History", + "ASK_REQUEST_HISTORY": "Request a history", + "GIVE_HISTORY_INFO": "Information about your history", + "HISTORY_TYPE": "Type", + "HISTORY_TYPE_ASK": "Requests", + "REQUEST_RECEIVE": "Requests received", + "MY_DEMAND": "My requests", + "PHONE_TRANSACTION": "Transaction number", + "DEMAND_TEXT_FIRST_PART": "made a request for", + "REQUEST_SEND": "Request Sent", + "TO_": "credit to", + "DEMAND_SEND":"Request Sent", + "NO_NOTIFICATION":"You haven't any notification", + "DEMAND_SEND_SUCCESFUL": "Your request has been sent successfully!", + "SAVE_HISTORY": "Save history", + "MAKE_REQUEST": "Make a request", + "DATE_WRONG": "The end date can not be earlier than the start date", + "LOADING_DOTS": "Loading ...", + "LOADING_PROGRESS":"Loading in progress...", + "EMPTY_LIST_REQUEST": "No request", + "HELP_":"Help", + "TEXT_MENU_ILINK":"Menu ", + "MEMBER_LIST": "List of members", + "FREE_CODE_LIST": "List of available codes", + "NO_ITEM_REQUEST": "No item matches,", + "MEMBERSHIP_REQUEST": "Membership applications", + "HISTORY_TYPE_REQUEST": "Queries", + "TREAT" : "Processed", + "EXIT_TITLE": "Close iLink World!", + "EXIT_DESC": "Do you really want to close iLink World?", + "NO_TREAT": "Unprocessed", + "EXIT": "Close", + "NO_MEMBERS":"You haven't any member.", + "PERIOD": "Period", + "ABOUT_":"About us", + "ABOUT_TEXT":"iLinkWorld is an application that will facilitate your financial transactions close to your location, and gives you the multiservice points ready for you.", + "DISCONNEXION": "Logout", + "SEE_VIDEO":"See the movie", + "SEE_TUTO":"See the tutoriel", + "DISCONNEXION_TEXT": "Are you sure you want to disconnect? This action will erase all your temporary data.", + "HISTORY_START": "Start", + "YES": "Yes", + "NO": "No", + "UNAVAILABLE":"UNAVAILABLE", + "CONNEXION_LOST_CHECK": "Lost connection, please check your connection!", + "ACCOUNT_ACTIVATE_TEXT": "Your account has been activated successfully!", + "HISTORY_END": "End", + "DONT_VALIDATE_ACCOUNT": "Account not validated", + "CONNEXION_SUCCESSFULL_TEXT": "Successful login Welcome to iLink World!", + "UNVALIDATE_ACCOUNT_TEXT": "Your hypervisor has not yet verified your account", + "TEXT_NEED_POSITION": "Please update your location!", + "TITLE_NEED_POSITION": "Your location needs to be updated", + "POSITION_UPDATE_SUCCESS_TEXT": "Your location has been updated successfully!", + "UPDATE_SUCCESS": "Successful update!", + "TITLE_UPDATE_POSITION_FAILED": "Unable to update your location", + "TEXT_UPDATE_POSITION_FAILED_1": "Unable to retrieve your member code", + "TEXT_UPDATE_POSITION_FAILED_2": "Unable to retrieve your location", + "TITLE_ERROR_SURVENU": "An error has occurred!", + "TITLE_PROBLE_COME": "A problem has been encountered", + "TEXT_ERROR_START_APPLICATION": "An error occurred while starting iLink World, please restart iLink World", + "TEXT_UNABLE_TO_GET_YOUR_POSITION": "Unable to retrieve your location, please make sure your GPS is enabled and restart iLink World", + "RESTART": "REPEAT", + "TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Unable to retrieve information from your country, check your internet connection, Would you again ?", + "TITLE_UNABLE_TO_AUTORISE": "Failed to Authorize", + "MISSING_AUTORISATION_LOCATION": "iLink World is not authorized to access your location, please allow iLink World to access your location and restart iLink World", + "TEXT_FORGOTTEN_PASSWORD": "Enter your username, we will send you a new password", + "TEXT_NETWORK_UNABLE": "Network not available, want to try again?", + "LOADING_TEXT_MARKERS": "More points", + "LOADING_TEXT_MARKERS_2": "around,", + "QUIT_":"Quit", + "UNABLE_GET_INFORMATION": "Problem of retrieval of information", + "UNABLE_GET_INFORMATION_TEXT": "Make sure your GPS is turned on and put in high precision mode and restart iLink World", + "TITLE_HELP_SOON": "Help not available!", + "HELP_SOON": "A tutorial helping you in understanding the features of the application will soon be available." +} \ No newline at end of file diff --git a/utils/i18n/fr.json b/utils/i18n/fr.json new file mode 100755 index 00000000..be6c5ebf --- /dev/null +++ b/utils/i18n/fr.json @@ -0,0 +1,277 @@ +{ + "WELCOME" : "Bienvenue sur iLink World !", + "HELP" : "Aide à l'utilisation", + "SIMPLE_USER" : "Utilisateur simple", + "GEOLOCATED_USER" : "Utilisateur géo-localisé", + "SUPERVISOR" : "Superviseur", + "AGENT":"Agent", + "USER":"Utilisateur", + "HYPERVISOR" : "Hyperviseur", + "OPEN": "Ouvert", + "POSITION": "Ma position", + "TAKE_MY_PLACE":"Prendre ma position", + "MAP": "La carte", + "BSR":"Bonsoir", + "ACCOUNT_CREATED_SUCCESS":"Le compte a été crée avec succès.\nVous recevrez dans quelques minutes un email avec vos informations.\nNous allons vous rediriger vers la page de connexion", + "OR_BIG":"OU", + "FOR_NUMB":"Pour le ", + "SUBTITLE_ACTIVE_ACCOUNT":"Activez votre compte à l'aide du code qui a été envoyé sur votre mail", + "ASK_FOR_CREDIT": "Demander du crédit", + "ASK_CREDIT": "Demandes de crédit", + "SOLDE_UNVAIBLE":"Solde indisponible", + "UNAVAILABLE":"Indisponible", + "NO_NOTIFICATION":"Vous n'avez pas de notification", + "SELECT_NETWORK":"Selectionner votre reseau", + "YOUR_NETWORK":"Votre reseau", + "ASK_SUPERIOR_CREDIT": "Demander du crédit à votre supérieur", + "ASK_FOR_SUPERVISOR": "Demandes de superviseurs", + "ASK_HYPERVISOR" : "Devenir Hyperviseur", + "ASK_FOR_HYPERVISOR" : "Demander à devenir hyperviseur", + "ASK_SUPERVISOR" : "Devenir Superviseur", + "ACTIVE_USER":"Activer", + "ASK_FOR_SUPERVISOR1" : "Demander à devenir superviseur", + "CREDIT_ASK_FROM_MEMBERS" : "Demandes de crédit de vos membres", + "ASK_MEMBERS" : "Demandes d'adhésion", + "MY_ACCOUNT" : "Mon compte", + "THE_ACCOUNT":"Le compte ", + "NO_GEO_POINT_CODE":"Vous n'avez aucun point geolocalisé libre", + "NO_DEMAND_ADHESION":"Vous n'avez aucune demande d'adhesion", + "ACTIVATED":"a été activé", + "CREDIT_MANAGE":"Gestion de credit", + "GROUP_MANAGE":"Gestion du groupe", + "NOTIFICATIONS":"Notification", + "CONFIGURATIONS":"Configuration", + "LOGOUT" : "Déconnexion", + "HINT_HOME_SEARCH":" Chercher un lieu, quartier ou ville ", + "MY_NETWORK":"Mon Réseau", + "MY_GROUP":"Mon groupe", + "CHANGE_MAP":"Changer de carte", + "CHANGE_NETWORK":"Changer de reseau", + "PRINT_ALL":"Tout Afficher", + "PRINT_MY_NETWORK":"Afficher mon reseau", + "MY_GROUP_MAP" : "Carte de mon groupe", + "GROUP_MEMBERS" : "Les membres du groupe", + "NAME" : "Nom (s)", + "FIRSTNAME" : "Prénom (s) ", + "ADMIN":"Administrateur", + "SUPER_ADMIN":"Super administrateur", + "GEOLOCATED":"Agent géo-localisé", + "DELETE_GEOLOCATED_USER":"Supprimer", + "ADDRESS" : "Adresse", + "CREDIT" : "Crédit", + "NEXT":"Suivant", + "SPONSOR_CODE":"Code parrain", + "TEXT_BIG_CREATE_AGENT_1":"Inscrivez-vous en comme Agent", + "EMAIL" : "Email", + "COUNTRY" : "Pays", + "LOADING_INFO":"Chargement des informations...", + "LOADING_DESCRIPTION_COUNTRY":"Patientez un instant ! nous récuperons les informations sur votre pays...", + "NETWORK" : "Réseau", + "PHONE" : "Télephone", + "PHONE_NUMBER":"Numéro de téléphone", + "CHOICE_NETWORK":"Choisissez un réseau", + "COUNTRY_CHOICE":"Choisissez un pays", + "LAST_STEP":"Derniere étape", + "ACTIVE_ACCOUNT":"Activez le compte !", + "LAST_STEP_TEXT":"Activez votre compte à l'aide du code de validation qui vous a été envoyé sur votre adresse e-mail et sur votre numero de téléphone", + "NETWORK_CHOICE":"Choix du réseau", + "CHOICE_NETWORK_TEXT":"Definir un réseau à afficher", + "NO_NETWORK_CORRESPONDING":"Ce réseau n'a aucun point", + "MENU_FILTER":" Menu Filtre de distance", + "TEXT_FILTER_DISTANCE":"Definir la distance à chercher (en km ) ", + "WAIT_LOADING_POSITION":"Nous avons besoin de la position de votre lieu de travail", + "CONNEXION_SUCCESSFUL":"Connexion réussie !", + "UNABLE_TO_CONNECT":"Le numéro de téléphone et le mot de passe sont incorrects", + "TITLE_CHOICE_TYPE_ACCOUNT":"Choisissez le type de compte que vous souhaitez créer", + "ALREADY_HAVE_AN_ACCOUNT":"Avez-vous déjà un compte ?", + "AGENT_ACCOUNT":"Compte Agent", + "UNABLE_TO_CONNECT_TITLE":"Impossible de se connecter", + "DISTANCE_ARROUND":"autour de vous", + "UNABLE_TO_CREATE_ACCOUNT":"Impossible de créer un compte ", + "TO_YOU":" de vous", + "HELP_":"Aide", + "TEXT_MENU_ILINK":"Menu", + "PHONE_NUMBER_ADMIN":"Numéro de transaction", + "FAILED_TEXT_CONTACT_ADMIN":"Impossible de créer un compte veuillez contacter les administrateurs", + "HYPERVISOR_MUST_VALIDATE_SUPERVISOR":"Votre code de validation vous sera envoyé une fois que votre Hyperviseur l'aura validé", + "ACCOUNT_SUCCESSFULL_CREATED":"Le compte a été crée avec succès.\nVous recevrez dans quelques minutes un email avec vos informations.\nNous allons vous rediriger vers la page de connexion", + "langue":{ + "french":"Français", + "english":"Anglais" + }, + "ERROR_FILTER": "Erreur survenue lors du filtre", + "ERROR_FILTER_TEXT": "Probleme rencontré lors du filtrage.", + "YOUR_THERE":"Vous êtes ici", + "FILTER":"Filtrer", + "APP_FULLNAME":"Ilink World", + "GUIDE_TITLE":"Bienvenue dans le Guide de", + "GUIDE_USER_SIMPLE":"Guide pour un utilisateur", + "GUIDE_AGENT":"Guide pour un agent", + "REPOSITIONNING":"Repositionner", + "WRONG_PHONE_NUMBER":"Numéro incorrect !", + "WRONG_PASSWORD":"Mot de passe incorrect !", + "NETWORK_LOST":"Connexion perdue !", + "SHOW":"Afficher", + "CALL":"Appeler", + "FORGOTTEN_PASSWORD":"Mots de passe oublié ?", + "CONNECT_USER":"Se connecter", + "PASSWORD" : "Mot de passe", + "CONFIRM_PASSWORD" : "Confirmez le mot de passe", + "PASSWORD_MODIFY" : "Modifiez votre mot de passe", + "OLD_PASSWORD" : "Ancien mot de passe", + "NEW_PASSWORD" : "Nouveau mot de passe", + "CONFIRM_NEW_PASSWORD" : "Confirmerzle nouveau mot de passe", + "AMOUNT" : "Montant", + "STATUS" : "Statut", + "CANCEL":"Quitter", + "QUIT_":"Quitter", + "PROBLEM_OCCUR":"Erreur...", + "LOADING_PROGRESS":"Chargement en cours...", + "WAITING_LONG":"Patientez un moment...", + "PROBLEM_OCCUR_DIRECTION":"Impossible d'obtenir la route, reessayez", + "TEXT_GUIDE_USER_1":"Vous venez de vous Connecter.\n Votre localisation est marquée au centre de la carte avec l'indication \"Vous êtes ici\" ", + "TEXT_GUIDE_USER_3":"En cliquant sur le bouton '+' vous ouvrirez le menu d'options", + "TEXT_GUIDE_USER_4":"Cliquez sur un marqueur pour avoir les informations sur un point", + "TEXT_GUIDE_USER_2":"Cliquez sur le bouton de menu en haut à droite pour decouvrir le menu et l'option de déconnexion", + "TEXT_GUIDE_USER_5":"Cliquez sur l'option 'Filtrer' pour filtrer vos points en fonction de leur distance par rapport à vous", + "TEXT_GUIDE_USER_6":"Cliquez sur l'option 'Changer de reseau ' pour afficher les points d'autres reseaux", + "TEXT_GUIDE_USER_7":"Cliquez sur l'option ' Itineraire' pour afficher le chemin à suivre pour ce rendre vers le point", + "TEXT_GUIDE_USER_10":"Consultez la liste des membre de votre groupe", + "TEXT_GUIDE_USER_11":"Cliquez sur l'option de profil pour avoir des informations lier à votre compte", + "CATEGORY" : "Catégorie", + "WAY":"Itinéraire", + "ADD_NETWORK":"Ajouter un réseau", + "POINT_NUMBER" : "Nombres de points", + "SUPERIOR_CODE" : "Code parrain", + "ADD_SUCCES":"Ajout reussi", + "ADD_SUCCESS_TEXT":"Le numéro a été ajouté au reseau avec succès ", + "MEMBER_CODE" : "Code membre", + "MEMBER_INFO":"Information du membre", + "DEMAND_INFO":"Information sur la demande", + "ACCOUNT_NOT_ACTIVE" : "Votre compte n'est pas activé", + "ENTER_VALIDATION_CODE" : "Saisissez le code de validation qui vous a été envoyé.", + "ENTER_VALIDATION_CODE1" : "Saisissez le code de validation.", + "SUPERVISOR_NUMBER" : "Nombre de superviseurs", + "GEOLOCATED_NUMBER": "Nombre de points par superviseur", + "ACTIVATE_ACCOUNT": "Activer le compte", + "SEND" : "Envoyer !", + "CHANGE_INFORMATION":"Modifier mes infos.", + "VALIDATE" : "Valider", + "TREAT_DEMAND":"Déjà traité", + "ACTION_TREAT_DEMAND":"Traiter la demande", + "CONNECT" : "Connexion", + "INVALID_MONTANT":"Montant Invalide, max = 1.000.000", + "TITLE_SUPPRESS_CONFIRM":"Confirmation de suppression", + "TEXT_SUPPRESS_CONFIRM":"Voulez vous vraiment supprimer cette utilisateur ?", + "TEXT_BIG_CREATE_1":"Inscrivez vous en tant qu'Utilisateur", + "TEXT_SUBTITLE_CREATE_1":"Renseignez vos informations personnelles", + "USER_ACCOUNT":"Compte Utilisateur", + "USER_CONNECT" : "Connexion utilisateur", + "GIVE_CONNECT_INFO" : "Entrez vos informations de connexion", + "CREATE_ACCOUNT" : "créer un compte", + "CHOOSE_LANGUAGE":"Choisir la langue", + "MODIFY_PASSWORD" : "Mot de passe oublié", + "CONTACT" : "Contact", + "UPDATE" : "... mise à jour", + "FAQ" : "FAQ", + + "ABOUT_":"A propos", + "NO_MEMBERS":"Vous n'avez aucun membre", + "FILTER_DATE":"Filtre Date", + "UPDATE_POSITION_TEXT":"Mettre à jour ma position", + "YOU_ARE" : "Vous êtes ?", +"ABOUT_TEXT":"iLinkWorld est une application qui facilitera vos transactions financieres près de votre position,et vous donne les points multiservices pret de chez vous.", + "GIVE_ID_FOR_RECOVERY" : "Saisissez votre identifiant, nous vous enverrons un nouveau mot de passe.", + "SELECT_ACCOUNT_TYPE" : "Sélectionnez un type de compte !", + "BRAVO" : "Bravo !", + + "SEE_VIDEO":"Voir la vidéo", + "SEE_TUTO":"Voir le tutoriel", + "HELP_CONGRAT_MESSAGE" : "Vous savez maintenant comment utiliser iLink", + "REPLAY_HELP" : "Revoir le didacticiel", + "BACK_TO_HELP_HOME" : "Revenir à l'aide", + "USE_APP" : "Utiliser l'application", + "HIDE_AT_STARTUP" : "Masquer au prochain démarrage ?", + "PATH_YOU_ARE" : "Vous êtes à ", + "PATH_TO_POINT" : " du point que vous avez cliqué.", + "PATH_YOU_WILL" : "Vous y serez en ", + "PRECISE_SEARCH" : "Affinez votre recherche", + "SEARCH_DISTANCE" : "Distance", + "SEARCH_5" : "5 km", + "SEARCH_15" : "15 km", + "SEARCH_20" : "20 km", + "SEARCH_25" : "25 km", + "SEARCH" : "Rechercher", + "DELETE" : "Supprimer", + "FREE":"disponibles", + "SAVED":"enregistrés", + "ACCOUNT_INFO":" Information sur mon compte", + "REGISTER_YOURSELF" : "Enregistrez-vous", + "REGISTRATION" : "Inscription", + "CHANGE_LANG_LABEL":"Changer la langue", + "GIVE_PERSONNAL_INFO" : "Renseignez vos information personnelles", + "YOUR_GEOLOCATION" : "Votre localisation", + "HISTORY_REQUEST": "Historique des demandes", + "ASK_REQUEST_HISTORY": "Demander un historique", + "GIVE_HISTORY_INFO": "Informations sur votre historique", + "HISTORY_TYPE": "Type", + "HISTORY_TYPE_ASK": "Demandes", + "DEMAND_RECEIVE":"Demandes reçues", + "MY_DEMAND":"Mes demandes", + "PHONE_TRANSACTION":"Numéro de transaction", + "DEMAND_TEXT_FIRST_PART":"a effectué une demande de ", + "DEMAND_SEND":" Demande Envoyée", + "TO_":" crédit auprès de ", + + "DEMAND_SEND_SUCCESFUL":"Votre demande a été envoyée avec succès !", + "SAVE_HISTORY":"Enregistrer l'historique", + "MAKE_REQUEST":"Faire une demande", + "DATE_WRONG":"La date de fin ne peut être antérieure à la date de début", + "LOADING_DOTS":"Chargement...", + "EMPTY_LIST_REQUEST":"Aucune demande", + "MEMBER_LIST":"Liste des membres", + "FREE_CODE_LIST":"Liste des codes disponibles", + "NO_ITEM_REQUEST":"Aucun élément ne correspond", + "MEMBERSHIP_REQUEST":"Demandes d'adhésion", + "HISTORY_TYPE_REQUEST": "Requêtes", + "TREAT":"Traité", + "EXIT_TITLE":"Fermer iLink World !", + "EXIT_DESC":"Voulez-vous vraiment fermer iLink World ?", + "NO_TREAT":"Non traité", + "EXIT": "Fermer", + "PERIOD":"Période", + "DISCONNEXION":"Déconnexion", + "DISCONNEXION_TEXT":"Voulez-vous vraiment vous deconnecter ? Cette action effacera toutes vos données temporaires.", + "HISTORY_START": "Début", + "YES":"Oui", + "NO":"Non", + "CONNEXION_LOST_CHECK":"Connexion perdue. Veuillez vérifier votre connexion !", + "ACCOUNT_ACTIVATE_TEXT":"Votre compte a été activé avec succès !", + "HISTORY_END": "Fin", + "DONT_VALIDATE_ACCOUNT":"Compte non validé", + "CONNEXION_SUCCESSFULL_TEXT": "Connexion réussie. Bienvenue dans iLink World ! ", + "UNVALIDATE_ACCOUNT_TEXT": "Votre hyperviseur n'a pas encore validé votre compte", + "TEXT_NEED_POSITION":"Veuillez mettre à jour votre position !", + "TITLE_NEED_POSITION":"Votre position doit être mise à jour", + "POSITION_UPDATE_SUCCESS_TEXT":"Votre position a été mise à jour avec succès !", + "UPDATE_SUCCESS":"Mise à jour reussie !", + "TITLE_UPDATE_POSITION_FAILED":"Impossible de mettre à jour votre position", + "TEXT_UPDATE_POSITION_FAILED_1":"Impossible de recuperer votre code membre", + "TEXT_UPDATE_POSITION_FAILED_2":"Impossible de recuperer votre position", + "TITLE_ERROR_SURVENU": "Une erreur est survenue !", + "TITLE_PROBLE_COME": "Un problème a été rencontré", + "TEXT_ERROR_START_APPLICATION": "Une erreur est survenue au démarrage de iLink World. Veuillez relancer iLink World", + "TEXT_UNABLE_TO_GET_YOUR_POSITION": "Impossible de recupérez votre position. Veuillez verifier que votre GPS est activé et relancez iLink World", + "RESTART": "RECOMMENCER", + "TEXT_UNABLE_TO_GET_COUNTRY_INFO": "Impossible de recupérer les informations de votre pays. Verifiez votre connexion internet ! voulez vous reessayer ? ", + "TITLE_UNABLE_TO_AUTORISE": "Echec de l'autorisation", + "MISSING_AUTORISATION_LOCATION": "iLink World n'est pas autorisé à acceder à votre position. Veuillez autoriser iLink World à accéder à votre localisation et relancez iLink World", + "TEXT_FORGOTTEN_PASSWORD": "Saisissez votre identifiant,nous vous enverrons un nouveau mot de passe\n", + "TEXT_NETWORK_UNABLE": "Réseau non disponible, voulez vous réessayer ?", + "LOADING_TEXT_MARKERS": "Suite des points ", + "LOADING_TEXT_MARKERS_2": "autour", + "UNABLE_GET_INFORMATION": "Problème de récuperation des Informations", + "UNABLE_GET_INFORMATION_TEXT": "Vérifiez que votre GPS est activé et mis en mode haute precision et relancez iLink World", + "TITLE_HELP_SOON": "Aide non disponible !", + "HELP_SOON": "Un tutoriel vous aidant dans la compréhension des fonctionnalités de l'application vous sera bientôt mis à disposition." +} \ No newline at end of file diff --git a/utils/i18n/zh.json b/utils/i18n/zh.json new file mode 100755 index 00000000..20b3b0bd --- /dev/null +++ b/utils/i18n/zh.json @@ -0,0 +1,94 @@ +{ + + "WELCOME" : "欢迎来到iLink", + "HELP" : "帮助使用", + "SIMPLE_USER" : "简单的用户", + "GEOLOCATED_USER" : "地理位置定位的用户", + "SUPERVISOR" : "监", + "HYPERVISOR" : "管理程序", + "OPEN": "开放", + "POSITION": "我的位置", + "ASK_FOR_CREDIT": "要求信用", + "ASK_CREDIT": "信贷申请", + "ASK_SUPERIOR_CREDIT": "请求您的经理信用", + "ASK_FOR_SUPERVISOR": "主管的要求", + "ASK_HYPERVISOR" : "成为管理程序", + "ASK_FOR_HYPERVISOR" : "要求成为管理程序", + "ASK_SUPERVISOR" : "成为主管", + "ASK_FOR_SUPERVISOR1" : "要求成为一名主管", + "CREDIT_ASK_FROM_MEMBERS" : "来自您的会员的信用申请", + "ASK_MEMBERS" : "会员申请", + "MY_ACCOUNT" : "我的帐户", + "LOGOUT" : "注销", + "MY_GROUP_MAP" : "我的小组地图", + "GROUP_MEMBERS" : "小组成员", + "NAME" : "名", + "FIRSTNAME" : "名字", + "ADDRESS" : "地址", + "CREDIT" : "信用", + "EMAIL" : "电子邮件", + "COUNTRY" : "国家", + "NETWORK" : "网络", + "PHONE" : "电话", + "PASSWORD" : "密码", + "CONFIRM_PASSWORD" : "确认密码", + "PASSWORD_MODIFY" : "更改您的密码", + "OLD_PASSWORD" : "旧密码", + "NEW_PASSWORD" : "新密码", + "CONFIRM_NEW_PASSWORD" : "确认新密码", + "AMOUNT" : "量", + "STATUS" : "状态", + "CATEGORY" : "类别", + "POINT_NUMBER" : "点数", + "SUPERIOR_CODE" : "赞助商代码", + "MEMBER_CODE" : "会员代码", + "ACCOUNT_NOT_ACTIVE" : "您的帐户未被激活", + "ENTER_VALIDATION_CODE" : "输入发送给您的验证码。", + "ENTER_VALIDATION_CODE1" : "输入验证码。", + "SUPERVISOR_NUMBER" : "主管人数", + "GEOLOCATED_NUMBER": "每个主管的点数", + "ACTIVATE_ACCOUNT": "激活帐户", + "SEND" : "送!", + "VALIDATE" : "验证", + "CONNECT" : "登录", + "USER_CONNECT" : "用户登录", + "GIVE_CONNECT_INFO" : "输入您的登录信息", + "CREATE_ACCOUNT" : "或者创建一个帐户", + "MODIFY_PASSWORD" : "忘记密码", + "CONTACT" : "接触", + "UPDATE" : "... 更新", + "FAQ" : "常问问题", + "YOU_ARE" : "你是?", + "GIVE_ID_FOR_RECOVERY" : "输入您的用户名,我们会向您发送一个新密码。", + "SELECT_ACCOUNT_TYPE" : "选择一个帐户类型!", + "BRAVO" : "恭喜!", + "HELP_CONGRAT_MESSAGE" : "您现在知道如何使用iLink", + "REPLAY_HELP" : "查看教程", + "BACK_TO_HELP_HOME" : "返回帮助", + "USE_APP" : "使用该应用程序", + "HIDE_AT_STARTUP" : "在下次开始时隐藏?", + "PATH_YOU_ARE" : "你在 ", + "PATH_TO_POINT" : " 从你点击的点。", + "PATH_YOU_WILL" : "你会在那里 ", + "PRECISE_SEARCH" : "优化您的搜索", + "SEARCH_DISTANCE" : "距离", + "SEARCH_5" : "5公里", + "SEARCH_15" : "15公里", + "SEARCH_20" : "20公里", + "SEARCH_25" : "25公里", + "SEARCH" : "搜索", + "DELETE" : "清除", + "REGISTER_YOURSELF" : "注册", + "REGISTRATION" : "注册", + "GIVE_PERSONNAL_INFO" : "填写您的个​​人信息", + "YOUR_GEOLOCATION" : "你的位置", + "REQUEST_HISTORY": "請求歷史記錄", + "ASK_REQUEST_HISTORY": "索取歷史記錄", + "GIVE_HISTORY_INFO": "有關您的歷史的信息", + "HISTORY_TYPE": "類型", + "HISTORY_TYPE_ASK": "請求", + "HISTORY_TYPE_REQUEST": "查詢", + "HISTORY_START": "開始", + "HISTORY_END": "結束" + +} \ No newline at end of file diff --git a/utils/theme.json b/utils/theme.json new file mode 100755 index 00000000..2e9287c7 --- /dev/null +++ b/utils/theme.json @@ -0,0 +1,11 @@ +{ + "primary":"#6784B1", + "primaryDark":"#637EA5", + "primaryDarkAdvanced":"#637B9E", + "accent":"#D86F22", + "accentLight":"#e27833", + "purpleLight":"#9b59b6", + "primaryLight":"#3498db", + "reddeconnect":"#ba000d" + +} \ No newline at end of file diff --git a/webservice/AuthApi.js b/webservice/AuthApi.js new file mode 100755 index 00000000..1c08b616 --- /dev/null +++ b/webservice/AuthApi.js @@ -0,0 +1,236 @@ +import React, { Component } from 'react'; +var DBEvents=require('react-native-db-models').DBEvents; +import I18n from 'react-native-i18n' +import {db} from './persistences/db'; +import {configActionUrl,isDebugMode,adhesionUrl,locationActionUrl,memberActionUrl,networkActionUrl,demandeActionUrl} from "./IlinkConstants" + +import Configuration from './persistences/Configuration'; +var serializeJSON = function(data) { + + return Object.keys(data).map(function (keyName) { + return encodeURIComponent(keyName) + '=' + encodeURIComponent(data[keyName]) + }).join('&'); + +}; +export const getCodeInformation=(code)=>{ + var data={"tag":'member',"type":"agen_info_code","code":code, + "lang":I18n.currentLocale()}; + + return queryData(data,memberActionUrl) +} +export const getPubActiveObject=(idcpuntry)=>{ + return queryData({"tag":"get_pub","id_country":idcpuntry},configActionUrl); + +} +export const getPasObject=()=>{ + return queryData({"tag":"get_pas"},configActionUrl); +} +function queryAuth(data) { + return timeout(50000,queryData(data,adhesionUrl)) +} +async function queryData(data,url){ + + data["lang"]=I18n.currentLocale() + data["isTest"]=isDebugMode + let response= await fetch(url,{ + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }); + let responseJson=null; + let responseText=await response.text() + try { + responseJson =JSON.parse(responseText) + }catch(e){ + console.log(responseText) + return {"error":"error","error_msg":responseText} + } + return responseJson; + +} +function timeout(ms, promise) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + reject(new Error(I18n.t("TEXT_NETWORK_UNABLE"))) + }, ms) + promise.then(resolve, reject) + }) +} +export const validateUser=(user)=>{ + var data={"tag":'member',"type":"valider_simple","phone":user.phone, + "lang":I18n.currentLocale()}; + return queryData(data,memberActionUrl) +}; +export const updatePosition=async (longitude,latitude)=>{ + const user=await readUser() + const data={'tag':'member','type':'update_position',"agentId":user['agentId'],"longitude":longitude,latitude:latitude} + return queryData(data,memberActionUrl) +} +export const valifateAgent=(user,info)=>{ + var data=info; + if(data===null)data={} + data["tag"]="member"; + data['type']="validate_agent"; + data["phone"]=user.phone; + data['code_validation']=user.validation_code; + if(user.category==="super" && (info===null || (info!==null && (info.nbre_code===undefined || info.nbr_code===null)))){ + data["nbre_code"]=10; + data["nbre_code_superviseur"]=0 + }else if(info===null || (info!==null && (info.nbre_code===undefined || info.nbre_code===null))){ + data["nbre_code"]=0; + data["nbre_code_superviseur"]=0 + } + console.log(data); + + return queryData(data,memberActionUrl) +} + +export const disconnect=()=>{ + return new Promise((resolve,reject)=>{ + readBrutUser().then((user)=>{ + + db.remove({"_id": user._id},{multi:true},(error,numRemoved)=>{ + if(error!==null){ + reject(error) + }else { + console.log(numRemoved) + if (numRemoved > 0) { + resolve() + } + } + }) + }) + }) +} + +export const login=(phone:String,password:String,type:Number)=>{ + const configuration=new Configuration() + var data={"tag":type===0?"login_user":"login_agent","phone":phone,"password":password,"lang":configuration.getCurrentLangue()}; + + return queryAuth(data) +} + +export const reinitpassword=($phone,$type)=>{ + var data={"tag":"forgot_pass","number":$phone,"typeaccount":$type,"lang":I18n.currentLocale()}; + return queryAuth(data) +} +export const updateUserData=async (data)=>{ + const user=await readUser() + user.longitude=data.longitude + user.latitude=data.latitude + db.update({"user":{$exists:true}},{user:user},{}, function (err, numReplaced) { + console.warn(err,numReplaced) + }) + /* new Promise((resolve,reject)=>{ + readBrutUser().then((user)=>{ + db.remove({"_id": user._id},{multi:true},(error,numRemoved)=>{ + if(error!==null){ + reject(error) + }else { + let muser=user + + db.insert(muser, function(err){ + if(err!==null) { + console.log("error when save user") + console.log(err) + } + + }) + console.log(numRemoved) + if (numRemoved > 0) { + resolve() + } + } + }) + }) + })*/ + +} +export const saveNewuser=(muser)=>{ + let user={ + user:muser + } + db.insert(user, function(err){ + if(err!==null) { + console.log("error when save user") + console.log(err) + } + + }) +} + +const readBrutUser=()=>{ + return new Promise((resolve, reject)=> { + db.findOne({"user":{$exists:true}},(err,result)=>{ + if(err!==null || result===null || result.user===undefined) { + resolve(null) + }else{ + if(result.user===null){resolve(null)} + else + resolve(result)};})}); +} + +export const readUser=()=>{ + return new Promise((resolve, reject)=> { + db.findOne({"user":{$exists:true}},async (err,result)=>{ + if(err!==null || result===null || result.user===undefined) { + resolve(null) + }else { + if (result.user === null) { + resolve(null) + } + else { + + resolve(result.user) + } + }})}); +} +export const createGeolocatedAccount=(user)=>{ + + return queryData(user,memberActionUrl) +} +export const createUserAccount=(user)=>{ + return queryData(user,memberActionUrl) +} + +export const acceptDemandAdhesion=(data)=>{ + return queryData({"tag":"member","type":"activeSupervisor","code":data.code_membre,"phone":data.phone},memberActionUrl) +} +export const deleteUser=async (data)=>{ + return queryData({"tag":"member","type":"deleteAgent","code":data.code_membre,"phone":data.phone},memberActionUrl) +} +export const listDemandAdhesion=async ()=>{ + const user=await readUser(); + const items=await queryData({"type":"list_demande_adhesion","tag":"member","codeparrain":user.code_membre},memberActionUrl) + return items; +} +export const categoryChild=async (code)=>{ + const codes=await queryData({"type":"get_category_child","tag":"member","codeparrain":code},memberActionUrl) + + return codes; +} +export const getListCountriesActive=async ()=>{ + const countries=await queryData({"tag":"avail_countries"},networkActionUrl); + return countries; + +} +export const getCountryNetwork=(country)=>{ + console.warn(country) + return queryData({"tag":'listnetworkscountryindicatif', 'indicatif':country},networkActionUrl) +} +export const getTownInformationName=(town)=>{ + return queryData({"tag":"town_information_name","name":town},locationActionUrl); +} +export const generateAgentGeo=async (newPhone)=>{ + const user=await readUser(); + const items=await queryData({"type":"generateNetworkAgentForGeo","tag":"member","code_parrain":user.code_membre,'phone':newPhone},memberActionUrl) + return items; +} +export const AssignAgentGeo=async (codeValidation,phone)=>{ + const user=await readUser(); + const items=await queryData({"type":"assignNetworkAgentToGeo","tag":"member","agentId":user.agentId,'code_parrain':codeValidation,"phone":phone},memberActionUrl) + return items; +} \ No newline at end of file diff --git a/webservice/HistoryRequestApi.js b/webservice/HistoryRequestApi.js new file mode 100755 index 00000000..2f87cd53 --- /dev/null +++ b/webservice/HistoryRequestApi.js @@ -0,0 +1,142 @@ + +import React, { Component } from 'react'; +var DBEvents=require('react-native-db-models').DBEvents; +var db=require('./persistences/db.js'); + +import I18n from 'react-native-i18n' +import {isDebugMode,adhesionUrl,locationActionUrl,memberActionUrl,networkActionUrl,demandeActionUrl} from "./IlinkConstants" + +import {readUser} from './AuthApi' +export const loadDemandeCredit= async ()=>{ + const user=await readUser(); + const data={"tag":"credit_demands",'id':user.code_membre,"lang":I18n.currentLocale(),test:isDebugMode}; + + const response=await fetch(demandeActionUrl ,{ + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }); + try{ + console.log(response) + let responseJson=await response.json() + console.log(responseJson) + return responseJson; + }catch(e){ + console.log(response.text()) + return []; + } + +} +export const loadMyDemandeCredit= async ()=>{ + const user=await readUser(); + const data={"tag":"credit_demands_of_agent",id:user.agentId + ,"lang":I18n.currentLocale(), + test:isDebugMode + + }; + console.log(data) + const response=await fetch(demandeActionUrl ,{ + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }); + try{ + console.log(response,"my demande") + let responseJson=await response.json() + console.log(responseJson) + return responseJson; + }catch(e){ + return []; + } + +} +export const updateCreditDemand=(phone,id)=>{ + const data={"tag":"update_ask_credit","phone":phone,"id":id, + "lang":I18n.currentLocale(), + test:isDebugMode + } + return fetch(demandeActionUrl,{ + "method":"POST", + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }).then((response)=>{ + return response.json() + }) + .then( (responseJson)=>{ + return responseJson + }) + .catch((error)=>{console.warn(error)}) + +} + +export const sendDemande= async (credit)=>{ + const muser=await readUser() + if(muser!==undefined && muser.code_parrain!==undefined + && muser.code_membre!==undefined && + muser.code_membre!==muser.code_parrain){ + let data={ + "tag":"ask_credit", + "phone":muser.phone, + "code":muser.code, + "lang":I18n.currentLocale(), + test:isDebugMode, + "montant":credit + }; + + let response=await fetch(demandeActionUrl,{ + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }) + let responseTxt=""; + try{ + responseTxt=await response.text() + let responseJson=JSON.parse(responseTxt) + return responseJson + }catch(e){ + console.log(response) + console.log("error",responseTxt) + return [] + } + + }else + return -1; +} +export const sendDemandeSpecificque= async (credit,phone,code_membre)=>{ + let data={"tag":"ask_credit", + "phone":phone, + test:isDebugMode, + code:code_membre, + "montant":credit,"lang":I18n.currentLocale()}; + + let response=await fetch(demandeActionUrl,{ + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }) + try{ + let responseJson=await response.json() + console.log(responseJson) + return responseJson + }catch(e){ + console.log(response) + console.warn(e) + return [] + } + +} \ No newline at end of file diff --git a/webservice/IlinkConstants.js b/webservice/IlinkConstants.js new file mode 100755 index 00000000..c14e3be4 --- /dev/null +++ b/webservice/IlinkConstants.js @@ -0,0 +1,20 @@ +export const isDebugMode=false +//base url test +const baseUrl="https://ilink-app.com/mobilebackendbeta" +//base url production +//const baseUrl="https://ilink-app.com/mobilebackend" + +//base url agent +//const baseUrl="https://ilink-app.com/mobilebackendtest2" + +//base url agent test +//const baseUrl="https://ilink-app.com/mobilebackendtest" + +export const adhesionUrl = baseUrl+'/interacted/LoginAction.php'; +export const memberActionUrl= baseUrl+'/interacted/MembersAction.php'; +export const networkActionUrl= baseUrl+'/interacted/NetworkAction.php'; +export const locationActionUrl= baseUrl+'/interacted/LocationAction.php'; +export const demandeActionUrl= baseUrl+'/interacted/DemandeAction.php'; +export const configActionUrl= baseUrl+'/interacted/ConfigAction.php' +export const videoUrl="https://www.youtube.com/watch?v=wwGPDPsSLWY" +export const MARKER_URL=baseUrl+"/interacted/LocationAction.php" diff --git a/webservice/MapService.js b/webservice/MapService.js new file mode 100755 index 00000000..9cdd8bd9 --- /dev/null +++ b/webservice/MapService.js @@ -0,0 +1,88 @@ + +import React, { Component } from 'react'; +var db=require('./persistences/db.js'); +import I18n from 'react-native-i18n' +import {readUser} from './AuthApi' +import {isDebugMode,MARKER_URL} from "./IlinkConstants"; + +let GEOCODDING_URL="https://maps.googleapis.com/maps/api/geocode/json" +let API_KEY="AIzaSyAYOEp-Pckvc3TwOIulCICokKgmp14rGHI" +export const getLocalMarkers=()=> { + return db.markers.get_all() + } + export const getMakersFrom=function(country){ + let tag={tag:'location',type:'all',country:country} + return timeout(15000,queryMap(tag)) +} +function timeout(ms, promise) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + reject(new Error(I18n.t("TEXT_NETWORK_UNABLE"))) + }, ms) + promise.then(resolve, reject) + }) +} +export const loadMarkers=(position,reseau,distance,page)=>{ + return readUser().then((users)=>{ + let user=users; + if(user!==undefined){ + let tag={tag:'location',type:'around', + page:page, + id:user.id,position:position,network:reseau,distance:distance} + return queryMap(tag) + } + }) + +} + +export const loadGroupeAgent=(member_code)=>{ + let data={tag:'location',type:'all_network',codeparrain:member_code} + return queryMap(data) +} +export const loadNetwork=(network,userid)=>{ + let data={tag:'location' ,type:"all_network_point",id:userid,network:network} + return queryMap(data) +} +export const getPositionInformation= async (position)=>{ + let url=GEOCODDING_URL.concat('?latlng='+position.latitude+","+position.longitude+'&key='+API_KEY); + const data=fetch(url,{ method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + },}) + .then((response)=>response.json()) + .then((responseJson)=> + responseJson + ).catch((error)=>{ + console.log("error get position") + console.log(error) + }); + + console.warn("freud",data); + return data; +} +const queryMap= async (data)=>{ + data['lang']=I18n.currentLocale() + data["test"]=isDebugMode + let response=await fetch(MARKER_URL,{ + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + + }); + let responseText=await response.text() + console.log("response= "+responseText) + try{ + let responseJson=JSON.parse(responseText) + return responseJson; + }catch(e){ + console.log("erreur="+responseText) + console.log(response) + throw new Error("Erreur lors de la conversion en json") + } + throw new Error("Erreur lors de la conversion en json") + +} diff --git a/webservice/MemberGeolocatedApi.js b/webservice/MemberGeolocatedApi.js new file mode 100755 index 00000000..9ae109b1 --- /dev/null +++ b/webservice/MemberGeolocatedApi.js @@ -0,0 +1,54 @@ +import React, { Component } from 'react'; +import {readUser} from './AuthApi' + +var DBEvents=require('react-native-db-models').DBEvents; +var db=require('./persistences/db.js'); +import I18n from 'react-native-i18n' +import {isDebugMode,adhesionUrl,locationActionUrl,memberActionUrl,networkActionUrl,demandeActionUrl} from "./IlinkConstants" + +var serializeJSON = function(data) { + return Object.keys(data).map(function (keyName) { + return encodeURIComponent(keyName) + '=' + encodeURIComponent(data[keyName]) + }).join('&'); +} + +export const listAllMembers=async ()=> { + const user=await readUser() + if(user!==null){ + let la= I18n.currentLocale() + let data={"tag":"member", + "id":user['member_code'], + la, + "test":isDebugMode, + "codeparrain":user.code_membre + ,"type":'all_geolocated'}; + + + + const response=await fetch(memberActionUrl,{ + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }) + let responseText="" + try{ + responseText=await response.text() + return JSON.parse(responseText) + }catch(e){ + console.log(e) + console.log("error when liste member",responseText) + let er={ + error:-3, + content:e, + text:responseText + } + return er; + } + +} +return null +} + \ No newline at end of file diff --git a/webservice/NetworkApi.js b/webservice/NetworkApi.js new file mode 100755 index 00000000..385e0307 --- /dev/null +++ b/webservice/NetworkApi.js @@ -0,0 +1,37 @@ +import React, { Component } from 'react'; +var DBEvents=require('react-native-db-models').DBEvents; +import {db} from './persistences/db'; +import I18n from 'react-native-i18n' +import {isDebugMode,adhesionUrl,locationActionUrl,memberActionUrl,networkActionUrl,demandeActionUrl} from "./IlinkConstants" + + +async function queryData(data,url){ + data['lang']=I18n.currentLocale() + data["test"]=isDebugMode + let response= await fetch(url,{ + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }).then((response)=>response); + let responseJson=null; + try { + + responseJson = await response.json(); + console.debug(responseJson) + }catch(e){ + console.log(response) + console.log(e) + return {"error":"error"} + } + return responseJson; + +} +export const listFreeCodesSuperViseur=(codeparrain)=>{ + return queryData({"tag":"supervisor","type":"listFreeNetwork","code_parrain":codeparrain},networkActionUrl) +} +export const getAgentNetworksList=(id)=>{ + return queryData({"tag":"geolocated","type":"listNetwork","id":id},networkActionUrl) +} \ No newline at end of file diff --git a/webservice/RequestCreditApi.js b/webservice/RequestCreditApi.js new file mode 100755 index 00000000..e69de29b diff --git a/webservice/js.json b/webservice/js.json new file mode 100755 index 00000000..90a0f16c --- /dev/null +++ b/webservice/js.json @@ -0,0 +1 @@ +{"success":1,"datas":[{"uid":"207","unique_id":"5810e143b76846.74885947","firstname":"pompidou","lastname":"jeff","phone":"+24102594801","country_code":"Gabon","network":"Libertis","member_code":"gAUFWJrgcC","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4175265","longitude":"9.4370355","encrypted_password":"vudH9dbXwRPqymYjLSBYl7bLhZIzNTRjYjk2ZGY4","salt":"354cb96df8","validation_code":"zq4dmnfu","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 10:00:51"},{"uid":"206","unique_id":"5810df43be7b36.77214828","firstname":"pompidou","lastname":"jeff","phone":"+24104967185","country_code":"Gabon","network":"Airtel Gabon","member_code":"WXbdngTW8E","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4175238","longitude":"9.4370347","encrypted_password":"gplfx2ZCp7LjHZTx\/YenDy34+TIzZWViOTY5MWFk","salt":"3eeb9691ad","validation_code":"hx8oqjjg","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 09:52:19"},{"uid":"219","unique_id":"5811e9477a7263.12149705","firstname":"pk6","lastname":"paul","phone":"+241000301","country_code":"Gabon","network":"Airtel Gabon","member_code":"ZW3gpoNN6v","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0","longitude":"0","encrypted_password":"l9BAGjm54alJhs3VE3+rApIy6fA0ZDVjNjhiNzM2","salt":"4d5c68b736","validation_code":"ac6rpcam","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 04:47:19"},{"uid":"218","unique_id":"5811e1d574cc17.92404569","firstname":"charbonage","lastname":"SIMA EWORE sedani abel","phone":"+24104565604","country_code":"Gabon","network":"Airtel Gabon","member_code":"zh5FPcYrJu","code_parrain":"IYScE6mCAn","email":"yvan.gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4391633","longitude":"9.4411017","encrypted_password":"BohUeUpkkfhXeIa7xflj+YbpzKViMmYwODc0NzI1","salt":"b2f0874725","validation_code":"vbdpl5zs","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 04:15:33"},{"uid":"201","unique_id":"5810d2a41fc1a7.69494087","firstname":"louis","lastname":"samson","phone":"+24104947213","country_code":"Gabon","network":"Airtel Gabon","member_code":"RqmplowoJW","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4143807","longitude":"9.4336337","encrypted_password":"GTB8OumhmqG7QDoS3Xm8om2ChiJmNjMxNjA1OTc2","salt":"f631605976","validation_code":"7qndfuke","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 08:58:28"},{"uid":"199","unique_id":"5810c13800dc82.10932397","firstname":"carrefour gaboprix","lastname":"seattle","phone":"+24104051916","country_code":"Gabon","network":"Airtel Gabon","member_code":"qQkpvi3gIf","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail","category":"geolocated","balance":"0","latitude":"0.4323642","longitude":"9.4770588","encrypted_password":"w9rSWfXqILaMrA2jnJDB\/lX8jyk0ZjhhYTJlNWU2","salt":"4f8aa2e5e6","validation_code":"iy1icdbu","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 07:44:08"},{"uid":"198","unique_id":"5810bd48406cd9.51923172","firstname":"boulevard","lastname":"frederique","phone":"+24107257099","country_code":"Gabon","network":"Airtel Gabon","member_code":"RqjYnEYf2d","code_parrain":"IYScE6mCAn","email":"ngomaprune@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4924328","longitude":"9.4067459","encrypted_password":"gdDPCCqzkBo3EKK08AFfkhMZiBQ1MTAzZGRjNDQ0","salt":"5103ddc444","validation_code":"5hjfvlre","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 07:27:20"},{"uid":"195","unique_id":"581096ce356b07.67117309","firstname":"derriere la prison","lastname":"zac","phone":"+24106461647","country_code":"Gabon","network":"Libertis","member_code":"P22nIeh4xo","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4222172","longitude":"9.4383522","encrypted_password":"6lIVNUWu\/5YFOo5sM4nK3XunGJVlN2EyZTY1Mzg5","salt":"e7a2e65389","validation_code":"mw6yttgb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 04:43:10"},{"uid":"446","unique_id":"5a2447d07e3d16.30460678","firstname":"Liv sabli\u00e8re ","lastname":"Manga 3 sab","phone":"+24105609191","country_code":"Gabon","network":"Libertis","member_code":"gUaaLfOPf6","code_parrain":"gUaaLfOPf6","email":"jmangansongo.cfao@yahoo.fr","category":"hyper","balance":"0","latitude":"0.4922142","longitude":"9.3877735","encrypted_password":"iU18e9TqxpRJSL8JMGYCQgtq77Q4ZTBmYTZhN2Q5","salt":"8e0fa6a7d9","validation_code":"l3jpdojf","active":"oui","mbre_reseau":"5","mbre_ss_reseau":"100","ouvert":"","created_at":"2017-12-03 11:52:00"},{"uid":"204","unique_id":"5810d5d04df254.72415586","firstname":"louis","lastname":"Motari","phone":"+24104947861","country_code":"Gabon","network":"Airtel Gabon","member_code":"KqlnAsu1Vo","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4145547","longitude":"9.4335638","encrypted_password":"ZDhrpto24MH+xLXuQCl7TQgOPzA2Y2Q0MmNkZDAw","salt":"6cd42cdd00","validation_code":"ihutbgl4","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 09:12:00"},{"uid":"203","unique_id":"5810d516cfe759.49706511","firstname":"pk7","lastname":"aress","phone":"+24107670367","country_code":"Gabon","network":"Airtel Gabon","member_code":"00I9xTcCJX","code_parrain":"IYScE6mCAn","email":"ngomaprune@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4922483","longitude":"9.4066396","encrypted_password":"KistZdNCDHo1zA+HwK1Pf1GBXzdhZDI4MjhlMDJl","salt":"ad2828e02e","validation_code":"qgnnqco3","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 09:08:54"},{"uid":"202","unique_id":"5810d32cf338b5.89055892","firstname":"louis","lastname":"samson","phone":"+24106146050","country_code":"Gabon","network":"Libertis","member_code":"BjKwd73s43","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4144499","longitude":"9.4336468","encrypted_password":"S94SivoC1IXqAjOEKL0Y7C5XVpkxNWQzM2JkYTIz","salt":"15d33bda23","validation_code":"d4ytyrat","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 09:00:44"},{"uid":"470","unique_id":"5a8c4407676083.50621477","firstname":"belle vue1","lastname":"inter technologies et services ","phone":"+24107965338","country_code":"Gabon","network":"SEEG","member_code":"uK4feOojsi","code_parrain":"0","email":"its.gabon@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.3971318","longitude":"9.4480375","encrypted_password":"3rJwLODS9Zh8N6aKligDauqgKNkzYzlhYjNhZWQ0","salt":"3c9ab3aed4","validation_code":"vzaql8ke","active":"oui","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"1","created_at":"2018-02-20 08:51:35"},{"uid":"208","unique_id":"5811bfb38cba94.83827649","firstname":"charbonage","lastname":"Amadou","phone":"+24104783464","country_code":"Gabon","network":"Airtel Gabon","member_code":"XXjY6WfopT","code_parrain":"IYScE6mCAn","email":"yvan.gildas03@gmail.com","category":"geolocated","balance":"0","latitude":"0.4399195","longitude":"9.4427871","encrypted_password":"pu9NC4JRIUdbogUDCKQ\/qEpUm4YxMTU5ZjFmNTQ3","salt":"1159f1f547","validation_code":"j8oeizve","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 01:49:55"},{"uid":"444","unique_id":"59f9a83ddb20f7.91514193","firstname":"Lbv sabliere","lastname":"Clara manga","phone":"+24105600000","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"k7E3sAYiw2","code_parrain":"0","email":"jmangansongo.cfao@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4231234","longitude":"9.4254221","encrypted_password":"oJKY\/MxGq1iwfggl31Kw7kRyYMg4ODUzNmQ3OTRi","salt":"88536d794b","validation_code":"guqsha6v","active":"oui","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-11-01 03:55:57"},{"uid":"167","unique_id":"580443948c5886.78648320","firstname":"gaga","lastname":"andy","phone":"+24102874963","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"6x8kkI8uw5","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"0.4419658","longitude":"9.4746836","encrypted_password":"mmoNuWoUhyGEFhQN3JO8XQVbwg04MzllNmIxN2Qx","salt":"839e6b17d1","validation_code":"5onjczba","active":"oui","mbre_reseau":"20","mbre_ss_reseau":"0","ouvert":"1","created_at":"2016-10-16 20:20:52"},{"uid":"168","unique_id":"580445854300e3.93575342","firstname":"gaga","lastname":"capp","phone":"+24105249386","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"X6fyXl494J","code_parrain":"IYScE6mCAn","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.4419648","longitude":"9.4746848","encrypted_password":"DHXLUk\/e4eMLnS0W9OvVG0VM6WY5MTA4OWQxN2Jm","salt":"91089d17bf","validation_code":"f0ebrfyy","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-16 20:29:09"},{"uid":"196","unique_id":"5810b5bd3170c6.18949894","firstname":"gaga","lastname":"Amie","phone":"+24104723078","country_code":"Gabon","network":"Airtel Gabon","member_code":"A4uIPmqZA0","code_parrain":"IYScE6mCAn","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.4924334","longitude":"9.4067451","encrypted_password":"0XkjtQKbbYk+CGwwTkY6uoabr7kyMDk3ZTAzMjU1","salt":"2097e03255","validation_code":"vjjjwn4w","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 06:55:09"},{"uid":"197","unique_id":"5810b7b347d4d7.64512934","firstname":"ancienne sobraga","lastname":"andy","phone":"+24107679870","country_code":"Gabon","network":"Airtel Gabon","member_code":"Ant49FTMJL","code_parrain":"IYScE6mCAn","email":"ngomaamie@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4924353","longitude":"9.4067457","encrypted_password":"KDuCvroLu9F9fMNC4272zOoh2hBiMDIwN2IzZmQz","salt":"b0207b3fd3","validation_code":"wilmnlo3","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"0000-00-00 00:00:00"},{"uid":"194","unique_id":"581095665900a4.77162356","firstname":"derriere la prison","lastname":"zac","phone":"+24107099539","country_code":"Gabon","network":"Airtel Gabon","member_code":"mjICTGV5se","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4222024","longitude":"9.4383819","encrypted_password":"KNcD9jqo4TdgHMyxuK9rnz+DlRZmNDUwYjNiN2Nm","salt":"f450b3b7cf","validation_code":"ustmb5gc","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 04:37:10"},{"uid":"474","unique_id":"5a8dc214240962.63259331","firstname":"komo","lastname":"Capp","phone":"+24103422424","country_code":"Gabon","network":"Azur","member_code":"su3umGSUUE","code_parrain":"su3umGSUUE","email":"andymigoumbi@gmail.com","category":"hyper","balance":"0","latitude":"0.4161976","longitude":"9.4672676","encrypted_password":"I5oMPZrq\/Nxtyc\/CZzGaZ7sOkowwOGYyMGI3OGU3","salt":"08f20b78e7","validation_code":"xbtlv8rn","active":"oui","mbre_reseau":"1","mbre_ss_reseau":"1","ouvert":"","created_at":"2018-02-21 12:01:40"},{"uid":"209","unique_id":"5811c2a28471d1.45852008","firstname":"charbonage","lastname":"superette mayo","phone":"+24107161882","country_code":"Gabon","network":"Airtel Gabon","member_code":"ItsUOomjWi","code_parrain":"IYScE6mCAn","email":"yvan.gildas03@gmail.com","category":"geolocated","balance":"0","latitude":"0.4361478","longitude":"9.4361908","encrypted_password":"VhWOAO+gj8a2qJBQBgjXzYM\/1l5lYmZiM2Y1MjI1","salt":"ebfb3f5225","validation_code":"7gtlhyco","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 02:02:26"},{"uid":"210","unique_id":"5811c57c7055f3.08799136","firstname":"charbonage","lastname":"superette mayi","phone":"+24104749401","country_code":"Gabon","network":"Airtel Gabon","member_code":"gHVqTHiRUj","code_parrain":"IYScE6mCAn","email":"yvan.gildas03@gmail","category":"geolocated","balance":"0","latitude":"0.4381983","longitude":"9.4448233","encrypted_password":"DlNKfnvNSejXnvTe551mQC5VYKIzNDNmNjNmYmQ2","salt":"343f63fbd6","validation_code":"coc8xzqf","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 02:14:36"},{"uid":"211","unique_id":"5811c65f73b5f0.42717139","firstname":"nkembo","lastname":"Bentel","phone":"+24107545066","country_code":"Gabon","network":"Airtel Gabon","member_code":"PFVl6gIVOI","code_parrain":"IYScE6mCAn","email":"ngomaprunella@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4093892","longitude":"9.4504256","encrypted_password":"oO36KhbhukApZtnSytUDiELeDMs3MDQ0OTljMjQ3","salt":"704499c247","validation_code":"a7pkstme","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 02:18:23"},{"uid":"190","unique_id":"58107d90a632f2.19365655","firstname":"nzeng ayong","lastname":"konate bs4","phone":"+24104014323","country_code":"Gabon","network":"Airtel Gabon","member_code":"q6eevzOwvt","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4237904","longitude":"9.4684532","encrypted_password":"WR1w1zctN\/VsCDF32nUfnUpfDX80NDcyMTFmZDFk","salt":"447211fd1d","validation_code":"tflguny3","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 02:55:28"},{"uid":"191","unique_id":"5810855e9b1e47.91947386","firstname":"nzeng ayong","lastname":"nkeumeni telecom","phone":"+24107858751","country_code":"Gabon","network":"Airtel Gabon","member_code":"wHJqs5jOQ7","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4282546","longitude":"9.4709142","encrypted_password":"WUA7mglIerOABv6VG1OIWTfrjwA2OTY0NTkwNGQx","salt":"69645904d1","validation_code":"prcirfi3","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 03:28:46"},{"uid":"192","unique_id":"581085d97e6ce4.75913695","firstname":"trois quartiers","lastname":"total saint andre","phone":"+24107767328","country_code":"Gabon","network":"Airtel Gabon","member_code":"18faLs4l5G","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4218236","longitude":"9.4292499","encrypted_password":"H7aiG\/L2Rbchs8utkXz0KGGwC4Y0MDU1YjAyOWY3","salt":"4055b029f7","validation_code":"vufswnl3","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 03:30:49"},{"uid":"193","unique_id":"5810880dd3b5d2.98811892","firstname":"gp","lastname":"Agbitor Akouvi Selom","phone":"+24107969194","country_code":"Gabon","network":"Airtel Gabon","member_code":"SwrZNcIKd3","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4183607","longitude":"9.4676637","encrypted_password":"E0hRzoCDxWGJTnYixsJIJwH8gGM3MDQzNmU1NDI3","salt":"70436e5427","validation_code":"zogbxjt7","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-26 03:40:13"},{"uid":"212","unique_id":"5811cb47622112.09454558","firstname":"dibadiba","lastname":"samandoulgou seydou","phone":"+24104947272","country_code":"Gabon","network":"Airtel Gabon","member_code":"J0W9G0Qcga","code_parrain":"IYScE6mCAn","email":"yvan.gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4419489","longitude":"9.4476479","encrypted_password":"nyP+JPVxWe5PL1ViNa65I2XBLg02ZmY0NGE3NzFk","salt":"6ff44a771d","validation_code":"ghjqzr3s","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 02:39:19"},{"uid":"213","unique_id":"5811cc33636747.82305862","firstname":"dibadiba","lastname":"samandoulgou","phone":"+24102951375","country_code":"Gabon","network":"Libertis","member_code":"nT7eCY70eZ","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4434283","longitude":"9.4501583","encrypted_password":"Fmt4x54EaoD7CIAJ5mpkHeJBSkxjNDJmZmRhZjFi","salt":"c42ffdaf1b","validation_code":"ghgckw1z","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 02:43:15"},{"uid":"214","unique_id":"5811ce58028e60.20687049","firstname":"petit paris","lastname":"Danny 1","phone":"+24104676739","country_code":"Gabon","network":"Airtel Gabon","member_code":"uEZYf1aU8w","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3957352","longitude":"9.4525168","encrypted_password":"8sNfftdmVdfv3aiBI5gpe\/N+1oMzYjVkYjhmNzQx","salt":"3b5db8f741","validation_code":"guyyc6ul","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 02:52:24"},{"uid":"215","unique_id":"5811ced2cdc441.58873852","firstname":"nkembo","lastname":"nicodemus chidi","phone":"+24107320985","country_code":"Gabon","network":"Airtel Gabon","member_code":"MJg2KoLWon","code_parrain":"IYScE6mCAn","email":"ngomaprune@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4108034","longitude":"9.4552518","encrypted_password":"UDf0vEkIOeE8iw97x9KUx5XMmR01ZjJjNzEzOWYz","salt":"5f2c7139f3","validation_code":"xleey1to","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 02:54:26"},{"uid":"216","unique_id":"5811d0deb4fb69.95501431","firstname":"petit paris","lastname":"airtel 1","phone":"+24104979023","country_code":"Gabon","network":"Airtel Gabon","member_code":"Qo5VlqSXlA","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3949506","longitude":"9.4522474","encrypted_password":"Fl\/ivOJlayHU1ZBcMCXAgR3Tv+BhMThlZDFkZmEz","salt":"a18ed1dfa3","validation_code":"v1nmpfly","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 03:03:10"},{"uid":"217","unique_id":"5811d37c3f79a5.13075350","firstname":"diba diba","lastname":"iL telecom","phone":"+24107976354","country_code":"Gabon","network":"Airtel Gabon","member_code":"UCYkcgR7YX","code_parrain":"IYScE6mCAn","email":"yvan.gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4413673","longitude":"9.4476479","encrypted_password":"31HWV\/E28MLcyZlP6KMuK2IyozIwZTE4M2VjYzE5","salt":"0e183ecc19","validation_code":"uo7lwyvj","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 03:14:20"},{"uid":"220","unique_id":"5811ea07dbfd58.80077743","firstname":"charbonage","lastname":"charbonage","phone":"+241000200","country_code":"Gabon","network":"Airtel Gabon","member_code":"iOvPhG0DdI","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4383367","longitude":"9.440595","encrypted_password":"kxHuuEoRRypGoPFi64BrQavkRLtiOTBiZjE2NGE1","salt":"b90bf164a5","validation_code":"azfmuvl8","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 04:50:31"},{"uid":"221","unique_id":"5811ead9886238.16551074","firstname":"charbonage","lastname":"charbonage 2","phone":"+241000201","country_code":"Gabon","network":"Airtel Gabon","member_code":"w3YNuEnZed","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4378417","longitude":"9.4409367","encrypted_password":"PPb4AUtiCQoI5yN0OmnVHx01uCJjNjhjNDRjOWM0","salt":"c68c44c9c4","validation_code":"rqjjhm9r","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 04:54:01"},{"uid":"222","unique_id":"5811eb5a85b865.45978188","firstname":"charbonage","lastname":"charbonage 3","phone":"+241000202","country_code":"Gabon","network":"Libertis","member_code":"HwuryFVL9L","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4381","longitude":"9.4409583","encrypted_password":"bQ\/GU9yuxO8hSytLeE7H+mcDJ3hkYTA0NmEzNjc0","salt":"da046a3674","validation_code":"sv9yynzh","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 04:56:10"},{"uid":"223","unique_id":"5811ebcd1f0409.80577187","firstname":"pk6","lastname":"Niakate","phone":"+241000302","country_code":"Gabon","network":"Airtel Gabon","member_code":"wjAWAVE0yi","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0","longitude":"0","encrypted_password":"\/MabnFhqRZuNXOf5r8+RzbxrfIQ4ODUyZjM2ODUw","salt":"8852f36850","validation_code":"hzmxzw6n","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 04:58:05"},{"uid":"224","unique_id":"5811f03c124e56.16572044","firstname":"pk7","lastname":"pointnet","phone":"+24107906590","country_code":"Gabon","network":"Airtel Gabon","member_code":"8DU3SSDM9Q","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail","category":"geolocated","balance":"0","latitude":"0","longitude":"0","encrypted_password":"lWrZECB9BRnMl73MWrqo7U\/OiGdmNWZhYWUwNmYw","salt":"f5faae06f0","validation_code":"iytyo1qm","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 05:17:00"},{"uid":"225","unique_id":"5811f36d0a7d08.95008439","firstname":"pk7","lastname":"sow","phone":"+24104974035","country_code":"Gabon","network":"Airtel Gabon","member_code":"e5pvxiXJlj","code_parrain":"IYScE6mCAn","email":"francetteblaire@gmail.com","category":"geolocated","balance":"0","latitude":"0","longitude":"0","encrypted_password":"2RtcgcqeZnqkbJ8RO1kqR0A2bzIzNjM0YWUyN2Rj","salt":"3634ae27dc","validation_code":"tj1quzys","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 05:30:37"},{"uid":"226","unique_id":"5811fa04a06422.49882843","firstname":"pk7","lastname":"cybercafe","phone":"+2410003037","country_code":"Gabon","network":"Airtel Gabon","member_code":"YvfPhiX82s","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail","category":"geolocated","balance":"0","latitude":"0","longitude":"0","encrypted_password":"CTpNxmFPx6OMnwjdta+\/aQwriuY0MWRkODkxNDIw","salt":"41dd891420","validation_code":"srqbple0","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 05:58:44"},{"uid":"227","unique_id":"58120b419affd0.56167873","firstname":"marche banane","lastname":"mohamed kadafi","phone":"+24104333602","country_code":"Gabon","network":"Airtel Gabon","member_code":"9feMVWvWCi","code_parrain":"IYScE6mCAn","email":"francetteblaire4@Gmail.com","category":"geolocated","balance":"0","latitude":"0.4082399","longitude":"9.4881107","encrypted_password":"oSPH+gBjSAcFuuSjzGY8XfWBfZYxMDAzMjUzMDI1","salt":"1003253025","validation_code":"zhcgen6z","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 07:12:17"},{"uid":"228","unique_id":"5812102d3821b0.17817334","firstname":"pk7","lastname":"alexko-pk7","phone":"+241000304","country_code":"Gabon","network":"Airtel Gabon","member_code":"FL71jwVzQY","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4088662","longitude":"9.4884883","encrypted_password":"JFaJSQOtT1M1hfOV95kpU2Qgm0UzNjVkNGFhMWQ0","salt":"365d4aa1d4","validation_code":"wqhr0xkr","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 07:33:17"},{"uid":"229","unique_id":"581210abd2fac2.47658418","firstname":"marche banane","lastname":"agence","phone":"+241000305","country_code":"Gabon","network":"Airtel Gabon","member_code":"vSsk8qYAse","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4088662","longitude":"9.4884883","encrypted_password":"NoZpyra9qUUxXXKwLQZlR6Qv6+lhMDdhOGU1YjBh","salt":"a07a8e5b0a","validation_code":"6fvogvll","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 07:35:23"},{"uid":"230","unique_id":"581210c89f5fe5.03320381","firstname":"marche banane","lastname":"agence","phone":"+241000306","country_code":"Gabon","network":"Airtel Gabon","member_code":"BMJdBzgIRz","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4088665","longitude":"9.4884916","encrypted_password":"S8s0H9egf4sGHXKj4G5nZq4JJbUyYmNkZTlkNmNm","salt":"2bcde9d6cf","validation_code":"ws1lujhe","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 07:35:52"},{"uid":"231","unique_id":"581213fea73f02.56861479","firstname":"charbonage","lastname":"charbonage 4","phone":"+241000203","country_code":"Gabon","network":"Airtel Gabon","member_code":"CRREjJ6TZR","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4386067","longitude":"9.4402567","encrypted_password":"P46UCYxAAYKiBNfJEzcLKRjyXGFkZDU2M2Y3OWVh","salt":"dd563f79ea","validation_code":"x2udccjs","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 07:49:34"},{"uid":"232","unique_id":"5812161db4f594.26263773","firstname":"charbonage","lastname":"charbonage","phone":"+24107526199","country_code":"Gabon","network":"Airtel Gabon","member_code":"bVK04mDZxz","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4387233","longitude":"9.4396483","encrypted_password":"itybfh581px+9makE\/x0eopjNCpiOTMxZWY4YmQy","salt":"b931ef8bd2","validation_code":"mf2tnvdm","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 07:58:37"},{"uid":"233","unique_id":"58121d7eaa9b27.33417694","firstname":"camp de gaule","lastname":"camp de gaule","phone":"+241000205","country_code":"Gabon","network":"Airtel Gabon","member_code":"YvbaqlGRR1","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4451617","longitude":"9.42762","encrypted_password":"pWVHjYFj\/HZUExR0tjzKVSvWBUMxOGRkMzI4YzU0","salt":"18dd328c54","validation_code":"kgny0dxd","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 08:30:06"},{"uid":"234","unique_id":"58121faad7cb40.02096681","firstname":"camp de gaulle","lastname":"camp de gaille 2","phone":"+241000204","country_code":"Gabon","network":"Airtel Gabon","member_code":"nVZUw4MZqh","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4450333","longitude":"9.425285","encrypted_password":"fTAUMyqwupVIGg0Dwph4ei0UU1VjNjY1ZjVhMTZi","salt":"c665f5a16b","validation_code":"fxkxrho9","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 08:39:22"},{"uid":"235","unique_id":"581221725bcf39.12687254","firstname":"camp de gaulle","lastname":"camp de gaille 3","phone":"+241000206","country_code":"Gabon","network":"Airtel Gabon","member_code":"xButLeJyh4","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4449283","longitude":"9.4254267","encrypted_password":"3reTzLeabRGUDySDfCnQ4Z2v49M5MDQxYTUwMTY3","salt":"9041a50167","validation_code":"oz8ljhwj","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 08:46:58"},{"uid":"236","unique_id":"5812223278f505.37118634","firstname":"camp de gaulle","lastname":"camp de gaulle 4","phone":"+241000207","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"ksVEzlOPCh","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4450783","longitude":"9.4256317","encrypted_password":"+ebXp3APilTDWtNI0SKxHxA18bc1N2U5NDk5Yzhm","salt":"57e9499c8f","validation_code":"zlkakgn1","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 08:50:10"},{"uid":"237","unique_id":"5812238aa9ce92.29872867","firstname":"nyali","lastname":"abdoul","phone":"+24104385350","country_code":"Gabon","network":"Airtel Gabon","member_code":"hjlYyqrQ6D","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.3948153","longitude":"9.4927974","encrypted_password":"Mkyhu4CrYJBWQihSXyzKTk7hmjY1MzQwMzg2ODIy","salt":"5340386822","validation_code":"mlimbhy3","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 08:55:54"},{"uid":"238","unique_id":"581223b6943151.91303006","firstname":"camp de gaulle","lastname":"camp de gaulle 5","phone":"+241000208","country_code":"Gabon","network":"Airtel Gabon","member_code":"xcSBWOEKpL","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4462133","longitude":"9.4251467","encrypted_password":"GfJxRoxlGSLFKuUumiqQjN144+VhZGQ4NTJjYjgy","salt":"add852cb82","validation_code":"ixeq2lrt","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 08:56:38"},{"uid":"239","unique_id":"58122548982176.77791790","firstname":"camp de gaulle","lastname":"mouhamed","phone":"+241000209","country_code":"Gabon","network":"Airtel Gabon","member_code":"DxAnYf4xSM","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4474033","longitude":"9.4246833","encrypted_password":"7e+9YUfWLcaFZPYs8hLjQcgcBw42Zjg2OGExNWQ4","salt":"6f868a15d8","validation_code":"ca4xwgwb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 09:03:20"},{"uid":"240","unique_id":"5812263970da20.99449249","firstname":"evasion","lastname":"lanigan","phone":"+24107958832","country_code":"Gabon","network":"Airtel Gabon","member_code":"O9VdMFsxuL","code_parrain":"IYScE6mCAn","email":"francetteblaire4gmail.com","category":"geolocated","balance":"0","latitude":"0.4055477","longitude":"9.5049572","encrypted_password":"uxG6s2uoCjyjIeWq9zy8icaPkjU4MGU1MTE3OTEx","salt":"80e5117911","validation_code":"3erzcmkt","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 09:07:21"},{"uid":"241","unique_id":"58122702064c75.32890105","firstname":"camp de gaulle","lastname":"camp de gaulle 6","phone":"+241000211","country_code":"Gabon","network":"Libertis","member_code":"SH7vGrkd3F","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4491983","longitude":"9.4248833","encrypted_password":"eOaYhcHxem5EuzGW931YKUSuoO03ZjNkN2RhYWE0","salt":"7f3d7daaa4","validation_code":"hf9pyjsb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 09:10:42"},{"uid":"242","unique_id":"58122d2b4eb4d4.79605782","firstname":"plein ciel","lastname":"talon de plein ciel","phone":"+241000100","country_code":"Gabon","network":"Airtel Gabon","member_code":"AGZVvnaw7f","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3952469","longitude":"9.4761577","encrypted_password":"VVallctCfsf9KoV6er27VpVcfiZmNjFiNGVjZjkz","salt":"f61b4ecf93","validation_code":"sw6aijhv","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 09:36:59"},{"uid":"243","unique_id":"58122d3c1c9488.46910949","firstname":"plein ciel","lastname":"talon de plein ciel","phone":"+241000101","country_code":"Gabon","network":"Airtel Gabon","member_code":"EwOGqtFeZU","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3952469","longitude":"9.4761577","encrypted_password":"4dWqvy5vnDs1eaz8on44yVZF9bkzM2Q5ODljOTY0","salt":"33d989c964","validation_code":"mabdno9i","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 09:37:16"},{"uid":"244","unique_id":"58122d51dcb518.46829724","firstname":"plein ciel","lastname":"talon de plein ciel","phone":"+241000102","country_code":"Gabon","network":"Airtel Gabon","member_code":"phbcnUqwWk","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3952469","longitude":"9.4761577","encrypted_password":"FjpnhBCNAIcsJF1Vbq6kfUZ3AUIxMWE2M2NkYTMy","salt":"11a63cda32","validation_code":"fmnk9nls","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 09:37:37"},{"uid":"245","unique_id":"58122d648f90d7.62324953","firstname":"plein ciel","lastname":"talon de plein ciel","phone":"+241000130","country_code":"Gabon","network":"Airtel Gabon","member_code":"56sbYn03TP","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3952469","longitude":"9.4761577","encrypted_password":"y9swhk3f2KonoN9BSVWcoEh\/sSJiMTFmNTA2YTJk","salt":"b11f506a2d","validation_code":"y0njcuko","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 09:37:56"},{"uid":"246","unique_id":"58122d883f57f1.75948336","firstname":"plein ciel","lastname":"talon de plein ciel","phone":"+241000300","country_code":"Gabon","network":"Airtel Gabon","member_code":"qNrp6NNynW","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3952469","longitude":"9.4761577","encrypted_password":"9fuvOLgxHM28jlxosI+wbhaA\/nIwNWM0MTc2OGZi","salt":"05c41768fb","validation_code":"nr1admdg","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-27 09:38:32"},{"uid":"247","unique_id":"581306a4041c24.13441212","firstname":"bethsaida","lastname":"bethsaida","phone":"+241000310","country_code":"Gabon","network":"Airtel Gabon","member_code":"aN8sEyzfMN","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4253565","longitude":"9.4815777","encrypted_password":"3d1kkd4DS4fQYz3oyZk7B5ttySQ1YzBhMTQzNGU4","salt":"5c0a1434e8","validation_code":"miflycf8","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 01:04:52"},{"uid":"248","unique_id":"5813082adf2345.86021699","firstname":"bambochine","lastname":"kiosque","phone":"+241000311","country_code":"Gabon","network":"Airtel Gabon","member_code":"kiR7uuNRbk","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4174658","longitude":"9.501651","encrypted_password":"QnU5XNVVAS0DpFVfGR53Pk3pjEJjNDA0MmZmMjJm","salt":"c4042ff22f","validation_code":"qnzt5ajw","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 01:11:22"},{"uid":"249","unique_id":"58130bb4651689.38767002","firstname":"bambochine","lastname":"kiosque","phone":"+241000312","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"0zDPJpzo1x","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4123537","longitude":"9.5038359","encrypted_password":"Z4buffKQc6nVarPVobUv2bkPkcAxNTYwOTRmZjYx","salt":"156094ff61","validation_code":"qtraae1x","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 01:26:28"},{"uid":"250","unique_id":"58130c413bdf76.21714027","firstname":"pk9","lastname":"sibang lycee","phone":"+241000313","country_code":"Gabon","network":"Airtel Gabon","member_code":"hRxek0kA9H","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4150156","longitude":"9.5002476","encrypted_password":"\/rdxfYMKgHNrFCS9RYIGjyJwzBAwMTJjNzIwOGIx","salt":"012c7208b1","validation_code":"fa1qujtf","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 01:28:49"},{"uid":"251","unique_id":"5813143cab2de7.57898022","firstname":"pk9","lastname":"lycee classique","phone":"+241000315","country_code":"Gabon","network":"Airtel Gabon","member_code":"3Ulb1OdmqY","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4952181","longitude":"9.4023279","encrypted_password":"5B9Icc98Vi6E6tMniXgGR\/oQP\/owNDQ1NTY4NWVj","salt":"04455685ec","validation_code":"vzkh9uuk","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:02:52"},{"uid":"252","unique_id":"5813152ea77393.99229991","firstname":"alibendeng","lastname":"alibendeng","phone":"+241000212","country_code":"Gabon","network":"Airtel Gabon","member_code":"2WN022y4jL","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.45352","longitude":"9.425625","encrypted_password":"JdKTeQwhOpI5gp\/0ROeyHpObU2o3MjliMjI2YTll","salt":"729b226a9e","validation_code":"zipc1psx","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:06:54"},{"uid":"253","unique_id":"581315765c0438.49259243","firstname":"pk9","lastname":"lycee classique","phone":"+241000316","country_code":"Gabon","network":"Airtel Gabon","member_code":"AXSsnlmzK0","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4952176","longitude":"9.4023267","encrypted_password":"Gaemvi7mnaDMTLGL0xNGyaQQozs5NzJhN2ZhNjM5","salt":"972a7fa639","validation_code":"6ahilcha","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:08:06"},{"uid":"254","unique_id":"58131735b74a82.02301189","firstname":"pk9","lastname":"hopital militaire","phone":"+241000317","country_code":"Gabon","network":"Airtel Gabon","member_code":"EC1acrRYq5","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4063943","longitude":"9.5030254","encrypted_password":"RK0yFpMG5DUN6wnMTysMrCmyZ5A0YmVkZmM4ZDFl","salt":"4bedfc8d1e","validation_code":"iykabmg3","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:15:33"},{"uid":"255","unique_id":"581317968adc51.87597935","firstname":"pk9","lastname":"hopital militaire","phone":"+241000319","country_code":"Gabon","network":"Libertis","member_code":"GIjIOwUUch","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.406378","longitude":"9.5030381","encrypted_password":"FFGcCsipTkLXm2T0Uu26vAR++bQ1NmI1Zjc3M2Uw","salt":"56b5f773e0","validation_code":"kjedrno0","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:17:10"},{"uid":"256","unique_id":"5813179f8d3dc7.98437300","firstname":"pk9","lastname":"hopital militaire","phone":"+241000318","country_code":"Gabon","network":"Airtel Gabon","member_code":"w2KW8rC0g0","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4064866","longitude":"9.5030201","encrypted_password":"S+JMygkSpACkgpHNkRxmuT3dFakxMzkxNjNhZjk2","salt":"139163af96","validation_code":"dq8vpkip","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:17:19"},{"uid":"257","unique_id":"58131b5d0295f6.83098615","firstname":"pk10","lastname":"cnc technologie","phone":"+241000320","country_code":"Gabon","network":"Airtel Gabon","member_code":"blVCZIxd5D","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4028768","longitude":"9.5062866","encrypted_password":"FwAmJTHVbpmvZqAEcFHGb2nO5ZxlMWQzZTIwNDk1","salt":"e1d3e20495","validation_code":"izrr6ubv","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:33:17"},{"uid":"258","unique_id":"58131d0d0ffe89.57172512","firstname":"pk10","lastname":"cnc technologie","phone":"+241000321","country_code":"Gabon","network":"Airtel Gabon","member_code":"3j2OujXGrl","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4027049","longitude":"9.5063127","encrypted_password":"HcR1GBHuD0aBuyrr26RT9+jbZDtlNjMwYjllZGVi","salt":"e630b9edeb","validation_code":"afwwwsk4","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:40:29"},{"uid":"259","unique_id":"58131da65e8a45.38922443","firstname":"pk10","lastname":"braman","phone":"+241000322","country_code":"Gabon","network":"Airtel Gabon","member_code":"FzsVN15ArH","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4055477","longitude":"9.5049572","encrypted_password":"mOFl6ZxXnRZkDIrdGvxI9r5zxlFhNDZjNDYyNTA0","salt":"a46c462504","validation_code":"cjwyes8b","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:43:02"},{"uid":"260","unique_id":"58131daa5a0c24.63514454","firstname":"alibendeng","lastname":"alibendeng","phone":"+241000213","country_code":"Gabon","network":"BICIG Mobile","member_code":"K8qw7SR3wB","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0","longitude":"0","encrypted_password":"2DTV3wG\/n72ZzgqsyZd+nXiafyhhNDY3ODI3OTg5","salt":"a467827989","validation_code":"soczkgp5","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:43:06"},{"uid":"261","unique_id":"58131e4e207a21.01633891","firstname":"alibendeng","lastname":"alibendeng","phone":"+241000214","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"lj7LUTxR3X","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4526167","longitude":"9.4253733","encrypted_password":"zkrn3FJB56YF3VHV20gAih2QOoQ2NWYxYTU2OTQw","salt":"65f1a56940","validation_code":"q1hyadlp","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:45:50"},{"uid":"262","unique_id":"58131e6e8679c1.00845361","firstname":"pk10","lastname":"pk10 depot","phone":"+241000323","country_code":"Gabon","network":"Airtel Gabon","member_code":"2yn7PSEtJ6","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4018201","longitude":"9.5082867","encrypted_password":"XhiQZiTE+sDjDs5JhKpMYqIB5KVlNzBhMGJiMWRl","salt":"e70a0bb1de","validation_code":"xynvb4mn","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:46:22"},{"uid":"263","unique_id":"5813211b4d6204.87181067","firstname":"pk11","lastname":"melen","phone":"+241000324","country_code":"Gabon","network":"Airtel Gabon","member_code":"Kq900NraKl","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4017638","longitude":"9.511559","encrypted_password":"3xFkKaIKrxOubAUdhMSPu\/whpAUxMjQ5N2FhNmJm","salt":"12497aa6bf","validation_code":"7rjusnzg","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:57:47"},{"uid":"264","unique_id":"581321939d95c9.71795031","firstname":"alibendeng","lastname":"alibendeng","phone":"+241000217","country_code":"Gabon","network":"Airtel Gabon","member_code":"NqWsYdR0eO","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4481383","longitude":"9.42446","encrypted_password":"4Pkyc64dtOkr7j4NFhz8apD3vlJiNjc3MzMxZjc3","salt":"b677331f77","validation_code":"cfgn6gcz","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 02:59:47"},{"uid":"265","unique_id":"581324545325c1.01271055","firstname":"pk11","lastname":"haute dimensiion","phone":"+241000325","country_code":"Gabon","network":"Airtel Gabon","member_code":"iNmCUM79OB","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.3970015","longitude":"9.5172492","encrypted_password":"cEl5mM4KXlpeuwbMiaQYZce8PV9kZjRiMjA5MWYx","salt":"df4b2091f1","validation_code":"hjumt9rv","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 03:11:32"},{"uid":"266","unique_id":"581329176ef3a5.73033767","firstname":"pk11","lastname":"cash multi-service","phone":"+241000326","country_code":"Gabon","network":"Airtel Gabon","member_code":"1fIH6zYTak","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4019316","longitude":"9.5148442","encrypted_password":"7rHu4Pr49F5AIBsjPxCBj50srexlYjIyMGJmYzIw","salt":"eb220bfc20","validation_code":"vzkrr0lu","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 03:31:51"},{"uid":"267","unique_id":"5813292638f6d1.85670327","firstname":"pk11","lastname":"cash multi-service","phone":"+241000327","country_code":"Gabon","network":"Libertis","member_code":"V4Gms0kC7S","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4019318","longitude":"9.5148434","encrypted_password":"sPOSB4QUgR2oIzgzQxmOArjwkRozOTgwZTcxZTI2","salt":"3980e71e26","validation_code":"syyhu8jx","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 03:32:06"},{"uid":"268","unique_id":"5813299ad18a05.85073421","firstname":"mbolo","lastname":"diallo","phone":"+24105105776","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"1xYeQUt01j","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4069167","longitude":"9.4384387","encrypted_password":"oZm6TSfacGXmj+LdT2oL7QoqZJ9mZTllYTkzNzky","salt":"fe9ea93792","validation_code":"eal5ejkh","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 03:34:02"},{"uid":"269","unique_id":"58132e2ae6f260.43581679","firstname":"pk12","lastname":"rond point du pk12","phone":"+241000334","country_code":"Gabon","network":"BGFI Mobile","member_code":"uLZYZDDR11","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4019407","longitude":"9.5218346","encrypted_password":"YzhHBTDuV2IuQuacfg0o3diCGj0zYzg5ZWMyYzE2","salt":"3c89ec2c16","validation_code":"yianx7tp","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 03:53:30"},{"uid":"270","unique_id":"58132f205b82d2.70960833","firstname":"pk12","lastname":"point du pk12","phone":"+241000335","country_code":"Gabon","network":"BGFI Mobile","member_code":"tc7Hgxjrsx","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4032046","longitude":"9.5212889","encrypted_password":"aaFs3maA\/ytrwwIII2g0hcZiyKVmZTNlNzg2ODJh","salt":"fe3e78682a","validation_code":"yeh0agok","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 03:57:36"},{"uid":"271","unique_id":"58132fc76c31b3.23091992","firstname":"pk12","lastname":"point du pk12","phone":"+241000336","country_code":"Gabon","network":"Libertis","member_code":"ZXcYIG9Nmb","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4045347","longitude":"9.5250962","encrypted_password":"6fY7YapLx3gCw\/JTfNi2gCn46W5jMjcwMTJiZjlh","salt":"c27012bf9a","validation_code":"i0xanqao","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 04:00:23"},{"uid":"272","unique_id":"58132fe3404c49.74505711","firstname":"pk12","lastname":"point du pk12","phone":"+241000337","country_code":"Gabon","network":"Airtel Gabon","member_code":"HT8UPfCXrl","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4045334","longitude":"9.5250941","encrypted_password":"5lQyx+8PL04ugYRnp4HkcNEXo6ZlOWI2NTc0Mzhj","salt":"e9b657438c","validation_code":"afmzwj9e","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 04:00:51"},{"uid":"273","unique_id":"58133809a94054.85703616","firstname":"boulevard","lastname":"Bassirou","phone":"+24104953678","country_code":"Gabon","network":"Airtel Gabon","member_code":"k1Pf5aP4TH","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4166903","longitude":"9.4491261","encrypted_password":"nmGS9ZSFrB\/spY38oMax1BH3zXNlZWQ1MmFmOGU2","salt":"eed52af8e6","validation_code":"qozs7hmc","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 04:35:37"},{"uid":"274","unique_id":"58134042c6a959.90636107","firstname":"ancienne sobraga","lastname":"T.G.I services","phone":"+24100000411","country_code":"Gabon","network":"Libertis","member_code":"At79TctKWu","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4215646","longitude":"9.4509937","encrypted_password":"fg7FJXZBpcApZlSWOiBaHSA8VNU5M2MwNDhjNDFh","salt":"93c048c41a","validation_code":"mgcr3oqa","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:10:42"},{"uid":"275","unique_id":"581341241ea471.04003145","firstname":"ancienne sobraga","lastname":"T.G.I services","phone":"+24102000411","country_code":"Gabon","network":"Libertis","member_code":"qthVwl7ou2","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4215625","longitude":"9.4509877","encrypted_password":"RHJAZ2JvErDlyPdB8Jj3JJq\/jNRiNDU5ODYxNTlh","salt":"b45986159a","validation_code":"iabxp3dk","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:14:28"},{"uid":"276","unique_id":"581341a01d5d15.70803237","firstname":"ancienne sobraga","lastname":"T.G.I services","phone":"+24107000412","country_code":"Gabon","network":"Airtel Gabon","member_code":"wF0p9pOmSw","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4215601","longitude":"9.4509575","encrypted_password":"O3yr3+Hy3GMJmnnAm9MWtETGAloyMDUzYmRiNjcw","salt":"2053bdb670","validation_code":"i8hoijva","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:16:32"},{"uid":"277","unique_id":"5813426fea7400.10834127","firstname":"gare routi\u00c3\u00a8re","lastname":"airtel 2","phone":"+241000103","country_code":"Gabon","network":"Airtel Gabon","member_code":"lO1BQddJvt","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4029754","longitude":"9.4468681","encrypted_password":"fy5Vd4xAeUJZG2AAxFxP\/QzUjBRkMjRhYjExN2Ix","salt":"d24ab117b1","validation_code":"fcum3moe","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:19:59"},{"uid":"278","unique_id":"581342fecef5f3.28796281","firstname":"ancienne sobraga","lastname":"couronne services","phone":"+24107000413","country_code":"Gabon","network":"Airtel Gabon","member_code":"ov7izeuMdC","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4214371","longitude":"9.4511048","encrypted_password":"xI8hnPRSQiafibkznr2X1BQSaloyMzA2MDBhMTJh","salt":"230600a12a","validation_code":"0rjojpra","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:22:22"},{"uid":"279","unique_id":"5813434f9926a1.74027650","firstname":"gare routi\u00c3\u00a8re","lastname":"airtel 287","phone":"+24100013","country_code":"Gabon","network":"Airtel Gabon","member_code":"qmiqtE6IrR","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4023344","longitude":"9.4481583","encrypted_password":"9V6QN097t2Md4UwygVBwP07scmUxNTJjMTAxOTAw","salt":"152c101900","validation_code":"asbch8bt","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:23:43"},{"uid":"280","unique_id":"58134366173e00.72045253","firstname":"gare routi\u00c3\u00a8re","lastname":"airtel 287","phone":"+241000104","country_code":"Gabon","network":"Airtel Gabon","member_code":"ehNLZDnODN","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4023344","longitude":"9.4481583","encrypted_password":"1ZhAtBcK0ZiGAlc4ReAHbD4yWow3NzI0OTViMGVm","salt":"772495b0ef","validation_code":"ieed1vqe","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:24:06"},{"uid":"281","unique_id":"581343b0ca5480.05337616","firstname":"ancienne sobraga","lastname":"couronne services","phone":"+24102000414","country_code":"Gabon","network":"Libertis","member_code":"PvaS61uDF0","code_parrain":"IYScE6mCAn","email":"stella.ninio@gmail.com","category":"geolocated","balance":"0","latitude":"0.4214152","longitude":"9.451075","encrypted_password":"MIcpZK0K5pLw1ZyZocN4\/m2lb6NiZGM2MjBhYTNl","salt":"bdc620aa3e","validation_code":"mmz3ekjs","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:25:20"},{"uid":"282","unique_id":"581344ea2b8304.59980343","firstname":"mont bou\u00c3\u00abt","lastname":"solutions informatiques","phone":"+241000105","country_code":"Gabon","network":"Airtel Gabon","member_code":"skPfqn71UO","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4022422","longitude":"9.4504931","encrypted_password":"MKkhx3SrvvQf\/rtpfzphB3XK+HRjZDE3MzI4MDY3","salt":"cd17328067","validation_code":"qp5vsmsb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:30:34"},{"uid":"283","unique_id":"58134651d1c357.46836034","firstname":"carrefour L\u00c3\u00a9on MBA","lastname":"wari","phone":"+241000106","country_code":"Gabon","network":"Airtel Gabon","member_code":"AYkQGutyZW","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4001116","longitude":"9.4502261","encrypted_password":"90oIYc0AbWMIRCT0eXpgAJuVh34xMjJhMjY0MmU3","salt":"122a2642e7","validation_code":"lnq8nyjp","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:36:33"},{"uid":"284","unique_id":"5813471a3e4ef9.56800928","firstname":"carrefour L\u00c3\u00a9on MBA","lastname":"presse","phone":"+241000107","country_code":"Gabon","network":"Libertis","member_code":"0riMY4OGv5","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4005889","longitude":"9.4506602","encrypted_password":"Ii1\/f0Mu0KwXGKXn5\/NZpYsKaRg3NDE0N2I0YWE1","salt":"74147b4aa5","validation_code":"iyja0ntb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:39:54"},{"uid":"285","unique_id":"5813474a5ca584.22837843","firstname":"carrefour L\u00c3\u00a9on MBA","lastname":"presse 2","phone":"+241000108","country_code":"Gabon","network":"Airtel Gabon","member_code":"49d1UONRjn","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4005889","longitude":"9.4506602","encrypted_password":"xdvG6MT0h1dx4MG32y+gXgxkuZMyNjVhM2E0ODY1","salt":"265a3a4865","validation_code":"tboge3rg","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:40:42"},{"uid":"286","unique_id":"581349d900f213.70453400","firstname":"mont bou\u00c3\u00abt","lastname":"fleur de femmes","phone":"+241000109","country_code":"Gabon","network":"Airtel Gabon","member_code":"Tu4rzVSdqO","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3979721","longitude":"9.4532164","encrypted_password":"gJKEMR1\/HYmyZhxsqxopNNCAu5s0YzE4ZGIyN2Nh","salt":"4c18db27ca","validation_code":"3raqgrhy","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:51:37"},{"uid":"287","unique_id":"58134a6ba1a439.83684279","firstname":"complexe omnisports stadiums","lastname":"airtel 4","phone":"+241000110","country_code":"Gabon","network":"Airtel Gabon","member_code":"E6QMw0quaK","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3979066","longitude":"9.4533612","encrypted_password":"DIQ\/2HklqWbwdlN2KavqcHyDzjw2MmIzMTEzZmRm","salt":"62b3113fdf","validation_code":"syxszr1r","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:54:03"},{"uid":"288","unique_id":"58134ace960787.21634627","firstname":"complexe omnisports stadiums","lastname":"airtel 5","phone":"+241000111","country_code":"Gabon","network":"Airtel Gabon","member_code":"xpcP18OR0e","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3979037","longitude":"9.4532251","encrypted_password":"D4Q7AUM1yr49T3802lcITE3PrAFlMWRjZWQwNWEx","salt":"e1dced05a1","validation_code":"nfdn4akm","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:55:42"},{"uid":"289","unique_id":"58134b02d6cd19.40648161","firstname":"complexe omnisports stadiums","lastname":"libertis 1","phone":"+241000112","country_code":"Gabon","network":"Libertis","member_code":"cRaMZ5GlWu","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3979037","longitude":"9.4532251","encrypted_password":"+Muy9cJnyONmdtr53fu+YSrROB82MThjYjBkOTFi","salt":"618cb0d91b","validation_code":"ivzid9ok","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:56:34"},{"uid":"290","unique_id":"58134bc75554c2.98701742","firstname":"rue ndona","lastname":"airtel 6","phone":"+241000113","country_code":"Gabon","network":"Airtel Gabon","member_code":"pVq3tAxL8P","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3972242","longitude":"9.4541545","encrypted_password":"PnvIQdUDSxflUPV\/cA2S6vIpxa43ZTgxOWJkMTM4","salt":"7e819bd138","validation_code":"cj2dcxku","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 05:59:51"},{"uid":"291","unique_id":"58134c01be9459.67892167","firstname":"rue ndona","lastname":"libertis 2","phone":"+241000114","country_code":"Gabon","network":"Libertis","member_code":"7j0PfVj3K5","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3972242","longitude":"9.4541545","encrypted_password":"TbLx7rqije3sbMJAn5\/HG7hezOZiMjQ1ZDQ2YTIx","salt":"b245d46a21","validation_code":"wlfh0mqo","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:00:49"},{"uid":"292","unique_id":"58134c41a7d8f0.22355084","firstname":"rue ndona","lastname":"moov 1","phone":"+241000115","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"3JkYZDSv5T","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3972242","longitude":"9.4541545","encrypted_password":"zKDKqdEsr838IlFLP9jHoXCmPoNhODE2NmY5YTY4","salt":"a8166f9a68","validation_code":"itex5smh","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:01:53"},{"uid":"293","unique_id":"58134ce62aeaf9.98028191","firstname":"rue ndona","lastname":"airtel 7","phone":"+241000116","country_code":"Gabon","network":"Airtel Gabon","member_code":"tFO9WMmqOM","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3971153","longitude":"9.4547681","encrypted_password":"DAkHwuU9kfXMZtKPD9AE3dvZevdlY2Y5ODZjYWQ5","salt":"ecf986cad9","validation_code":"lr7ipmoy","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:04:38"},{"uid":"294","unique_id":"58134d2cd31339.70811610","firstname":"rue ndona","lastname":"libertis 3","phone":"+241000117","country_code":"Gabon","network":"Libertis","member_code":"ghLqkIfmeE","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3972957","longitude":"9.4547002","encrypted_password":"VvJexvroG5l4mBu13HQHXd2j4T4zZGRkMjdjZTAx","salt":"3ddd27ce01","validation_code":"ehpbyno7","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:05:48"},{"uid":"295","unique_id":"58135001e33ec7.42654173","firstname":"petit paris","lastname":"airtel 8","phone":"+241000118","country_code":"Gabon","network":"Airtel Gabon","member_code":"uVwmIAQMx0","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3963161","longitude":"9.4527902","encrypted_password":"gWIHU920EsscWHC6llUSa8ZE6qIzNDBjYTVjOGVi","salt":"340ca5c8eb","validation_code":"njfgjp8u","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:17:53"},{"uid":"296","unique_id":"58135036be9b47.42872501","firstname":"petit paris","lastname":"libertis 3","phone":"+241000119","country_code":"Gabon","network":"Libertis","member_code":"TOMK39lSVp","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3963161","longitude":"9.4527902","encrypted_password":"YhSZtaL3tD8UKZ8yddc7Q17pVUlkYmE5MzU0ZDFl","salt":"dba9354d1e","validation_code":"qzt4hfac","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:18:46"},{"uid":"297","unique_id":"5813512804dcf0.11681317","firstname":"petit paris","lastname":"airtel 9","phone":"+241000120","country_code":"Gabon","network":"Airtel Gabon","member_code":"dajARha44F","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3970683","longitude":"9.4530064","encrypted_password":"dL1ZfrOQPL1BXiiU6zZAr8MPTftiMTQ4NDk1MjE0","salt":"b148495214","validation_code":"xjssw1lc","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:22:48"},{"uid":"298","unique_id":"5813515f629729.76587237","firstname":"petit paris","lastname":"libertis 4","phone":"+241000121","country_code":"Gabon","network":"Libertis","member_code":"0rE77a4ugy","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3970683","longitude":"9.4530064","encrypted_password":"ZR8gLGPMowjF\/qsV9E4E1GePvoYwOTU4YTI2M2Vh","salt":"0958a263ea","validation_code":"2zmgckud","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:23:43"},{"uid":"299","unique_id":"5813518a64d5c4.87064595","firstname":"petit","lastname":"moov 3","phone":"+241000122","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"vDwbFIWSFP","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.3970683","longitude":"9.4530064","encrypted_password":"q0Egi9oK31DAy6skfuJ2sZQnqcFjNWZlMTY1OWNj","salt":"c5fe1659cc","validation_code":"u5ilbhix","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:24:26"},{"uid":"300","unique_id":"5813563aa83bf0.37105481","firstname":"ancien sobraga","lastname":"T.T.A.G","phone":"+24107000415","country_code":"Gabon","network":"Airtel Gabon","member_code":"PBkY4zHRL4","code_parrain":"IYScE6mCAn","email":"stella.ninio","category":"geolocated","balance":"0","latitude":"0.4218207","longitude":"9.4485774","encrypted_password":"e8DelZX12QzZaXRviqWLpEpV0a1hYmYzMDRjYzE0","salt":"abf304cc14","validation_code":"fmoeb6bn","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 06:44:26"},{"uid":"301","unique_id":"581366144ad320.14772701","firstname":"marche banane","lastname":"kiosque avnt centre","phone":"+241000355","country_code":"Gabon","network":"Airtel Gabon","member_code":"9sTN9nWMnP","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4084729","longitude":"9.4879339","encrypted_password":"dUKmogVsB2ktz7jFiEq0luqkaT5kMDJhMzBhN2U1","salt":"d02a30a7e5","validation_code":"naa7vwtl","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 07:52:04"},{"uid":"302","unique_id":"58136659c4d092.68146996","firstname":"marche banane","lastname":"abacar","phone":"+24107193914","country_code":"Gabon","network":"Airtel Gabon","member_code":"iI0Z3fQAxT","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4087364","longitude":"9.4886396","encrypted_password":"6Ss5fDmxoPNjtlYbcHvQE9eIDYI2NzkyNWY1Mjkw","salt":"67925f5290","validation_code":"4qvqtvrx","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 07:53:13"},{"uid":"303","unique_id":"581366d9367717.24433684","firstname":"marche banane","lastname":"kiosque a journaux","phone":"+241000356","country_code":"Gabon","network":"Airtel Gabon","member_code":"1peQT2fWeU","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4087989","longitude":"9.4886722","encrypted_password":"CFhhkgIGauGhQamMQPv5q0EUKDIxYTZkNGNlOTdl","salt":"1a6d4ce97e","validation_code":"mxfyz2rl","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 07:55:21"},{"uid":"304","unique_id":"58136715e9a917.39477408","firstname":"marche banane","lastname":"kiosque a journaux","phone":"+241000357","country_code":"Gabon","network":"Airtel Gabon","member_code":"mTaKuyxQjd","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4087961","longitude":"9.4886314","encrypted_password":"nVtZ6QnGLLyZLtcJ\/hxyL6HO0Zo5ODQ3MTlmNmNj","salt":"984719f6cc","validation_code":"niu6wmhd","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 07:56:21"},{"uid":"305","unique_id":"581367d996fa85.89002111","firstname":"marche banane","lastname":"ibrahim cote de la poste","phone":"+24104975350","country_code":"Gabon","network":"Airtel Gabon","member_code":"fLZ7fNkX2G","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4082619","longitude":"9.4882185","encrypted_password":"Qcqqlx5QTZ8UuBjzHySf8USaxG83NWE0MmVjNDE4","salt":"75a42ec418","validation_code":"ghmglhy5","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 07:59:37"},{"uid":"306","unique_id":"581368cb7b51d8.17942033","firstname":"pk8","lastname":"ibrahim sis la poste pk8","phone":"+24102433183","country_code":"Gabon","network":"Libertis","member_code":"uIHc8WNTox","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4081951","longitude":"9.4881916","encrypted_password":"dLOB5A7ow\/mrkh9iEkIrpIThVfowMTExODA2NWI0","salt":"01118065b4","validation_code":"gostwa5a","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:03:39"},{"uid":"307","unique_id":"58136ed6ac6804.59321577","firstname":"pk5","lastname":"sekou fofana","phone":"+24104918381","country_code":"Gabon","network":"Airtel Gabon","member_code":"XPdzsXgzeB","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4068269","longitude":"9.4673544","encrypted_password":"yz2ce3+kFwfIrcesEoNFQFS3GfRjYmY1MzdhYjRi","salt":"cbf537ab4b","validation_code":"ptfiy4hm","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:29:26"},{"uid":"308","unique_id":"58136fe5bf57c7.49006594","firstname":"bel air","lastname":"bel air","phone":"+241000218","country_code":"Gabon","network":"Libertis","member_code":"2a06MRhHPr","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4451817","longitude":"9.4462233","encrypted_password":"ovayYFm+S5oG4tkrlL6ahEOanAY3ZjliMDk4OGE3","salt":"7f9b0988a7","validation_code":"j4rqljfl","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:33:57"},{"uid":"309","unique_id":"58137029458618.77928578","firstname":"bel air","lastname":"bel air","phone":"+241000219","country_code":"Gabon","network":"Airtel Gabon","member_code":"Nsq5Fj3OuS","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4450883","longitude":"9.4461017","encrypted_password":"icjBFIFQEbQmdrIgxzhIEdJfvjxiNTdhNWE4MWM4","salt":"b57a5a81c8","validation_code":"bsjhxu1a","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:35:05"},{"uid":"310","unique_id":"581371364e1585.74175443","firstname":"bel air","lastname":"bel air","phone":"+241000220","country_code":"Gabon","network":"Airtel Gabon","member_code":"PVt58bhfIL","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4460517","longitude":"9.4465367","encrypted_password":"1sYiaJW\/uGFsnbXFH0ONgkrnmOMxZDE0MWI2ODNk","salt":"1d141b683d","validation_code":"nsx9pdbt","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:39:34"},{"uid":"311","unique_id":"581371a67178b8.38964589","firstname":"pk5","lastname":"cyber zoom pk5","phone":"+241000358","country_code":"Gabon","network":"Airtel Gabon","member_code":"NuBOcoFapg","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4067165","longitude":"9.4673237","encrypted_password":"4Ka7UAHr7r+y59n3\/xA3py04XDZlZWM5MTQ3NDZj","salt":"eec914746c","validation_code":"stmm3qtj","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:41:26"},{"uid":"312","unique_id":"58137423dd97e6.25445545","firstname":"bel air","lastname":"bel air","phone":"+241000221","country_code":"Gabon","network":"Airtel Gabon","member_code":"akuTJY3rIv","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4504733","longitude":"9.4477","encrypted_password":"+2FZBzCVEdFZMFhlygqFQpb7YEo2YzhjZDFkOGFh","salt":"6c8cd1d8aa","validation_code":"pntogd6y","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:52:03"},{"uid":"313","unique_id":"58137476979392.43308970","firstname":"bel air","lastname":"bel air","phone":"+241000222","country_code":"Gabon","network":"Airtel Gabon","member_code":"fr1yUFF4Af","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4506217","longitude":"9.44789","encrypted_password":"n60KYftXxMVIkT+7ISBOD6XtgOllOTMzOTIxY2Nh","salt":"e933921cca","validation_code":"rujxve3y","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:53:26"},{"uid":"314","unique_id":"5813748b81e070.95896607","firstname":"pont nzeng","lastname":"kiosque nzeng","phone":"+241000359","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"ytPU1OY0Rk","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4198333","longitude":"9.4646629","encrypted_password":"pXM0E\/fHtD9zOmPokOSSEUFzTaM5ZTYxY2UwYTM0","salt":"9e61ce0a34","validation_code":"0rdqschj","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:53:47"},{"uid":"315","unique_id":"581374d6ab79a2.92295404","firstname":"bel air","lastname":"bel air","phone":"+241000223","country_code":"Gabon","network":"Airtel Gabon","member_code":"stvHSBHWxt","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.45076","longitude":"9.447965","encrypted_password":"sHpo3cFUIGQTZGlGl9jNAgBb9iVmMjFlNmRhNDY1","salt":"f21e6da465","validation_code":"me7icmdd","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:55:02"},{"uid":"316","unique_id":"581374eba313e7.34262385","firstname":"pont nzeng","lastname":"kiosque nzeng","phone":"+241000360","country_code":"Gabon","network":"Airtel Gabon","member_code":"UIgJ5tGgnd","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4183619","longitude":"9.4676641","encrypted_password":"BwQ+hNpFv+ALq3rIN7Af+eV9EL8wN2E3N2JlMmE2","salt":"07a77be2a6","validation_code":"utkrv8cd","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:55:23"},{"uid":"317","unique_id":"58137514813642.96237479","firstname":"st george","lastname":"kiosque nzeng neo store","phone":"+241000361","country_code":"Gabon","network":"Airtel Gabon","member_code":"zCaMIgYJMs","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4187757","longitude":"9.4680924","encrypted_password":"qnxlULbfY4hqUxbcva3wciMxcpRmMWFlZjMxNjE1","salt":"f1aef31615","validation_code":"8wzjgkdc","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:56:04"},{"uid":"318","unique_id":"5813752860fbd7.59588844","firstname":"st george","lastname":"kiosque nzeng neo store","phone":"+241000362","country_code":"Gabon","network":"Libertis","member_code":"IuDw3kkWss","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4187757","longitude":"9.4680924","encrypted_password":"Fa1NkpASGMSa\/IQ9AHoVlsDhkxk0NDc2NmM3OWM4","salt":"44766c79c8","validation_code":"h4hulyhq","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:56:24"},{"uid":"319","unique_id":"581375f4c49c75.64451743","firstname":"bel air","lastname":"bel air","phone":"+241000224","country_code":"Gabon","network":"Airtel Gabon","member_code":"zIWaJp5tOT","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4508067","longitude":"9.4479283","encrypted_password":"7\/ERa1onxLnUPDgXteiMgLPWQTEwZDk2M2ZhYTIz","salt":"0d963faa23","validation_code":"ynvejb5e","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 08:59:48"},{"uid":"320","unique_id":"58137660801239.43977626","firstname":"st george","lastname":"kiosque nzeng","phone":"+241000363","country_code":"Gabon","network":"Libertis","member_code":"F8kk1IJMmo","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4205385","longitude":"9.4675228","encrypted_password":"Cco\/86fvxDvNS9kE5qME7ENCMUFmY2I2OTY3YzZj","salt":"fcb6967c6c","validation_code":"6csccurw","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:01:36"},{"uid":"321","unique_id":"581376b81d4ae7.19767836","firstname":"feux rouge","lastname":"kiosque nzeng","phone":"+241000364","country_code":"Gabon","network":"BGFI Mobile","member_code":"s2c63xgMEk","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4221222","longitude":"9.4665212","encrypted_password":"VnWNoeWmu9Q6NKNb23vur7p+8+xiMmJkMmQ4MWI1","salt":"b2bd2d81b5","validation_code":"jtc0ereo","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:03:04"},{"uid":"322","unique_id":"581377bc1d54d3.04105018","firstname":"feux rouge","lastname":"kiosque nzeng","phone":"+241000365","country_code":"Gabon","network":"Airtel Gabon","member_code":"UL1HCckx5c","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4198333","longitude":"9.4646629","encrypted_password":"o0vnUOWeHWGW7iGzYgZROJLUEVMyZTY3YjA3ZjRh","salt":"2e67b07f4a","validation_code":"ibucx9uv","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:07:24"},{"uid":"323","unique_id":"581377d04e79e2.92868267","firstname":"feux rouge","lastname":"kiosque nzeng","phone":"+241000366","country_code":"Gabon","network":"Libertis","member_code":"aQ2uurtJVr","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4208381","longitude":"9.4653516","encrypted_password":"0i+KDRdaBwjh2tJbzVZxCV1FpLMzZjcwOTcyY2Iw","salt":"3f70972cb0","validation_code":"oq6zprdb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:07:44"},{"uid":"324","unique_id":"581379b6c2f4b2.83479770","firstname":"feux rouge","lastname":"kiosque nzeng mbele","phone":"+241000367","country_code":"Gabon","network":"Libertis","member_code":"CtWOEF1ruX","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4239089","longitude":"9.4701641","encrypted_password":"xcatxPmyRhS04uPt+3TCJqlK74kxZjFhMTlhOGEw","salt":"1f1a19a8a0","validation_code":"kv0wgtok","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:15:50"},{"uid":"325","unique_id":"581379d50fdee0.21312790","firstname":"feux rouge","lastname":"kiosque nzeng mbele journaux","phone":"+241000368","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"DDGQlgkAlf","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.424638","longitude":"9.4692009","encrypted_password":"\/iSWwTKNGhMrsw73dkQ9wV8mSNMyYjNkNDQzOWZm","salt":"2b3d4439ff","validation_code":"qpprzgd2","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:16:21"},{"uid":"326","unique_id":"581379eec631f4.84959614","firstname":"feux rouge","lastname":"kiosque nzeng mbele journaux","phone":"+241000369","country_code":"Gabon","network":"Airtel Gabon","member_code":"ViYLPshuKi","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.424024","longitude":"9.4687691","encrypted_password":"xzDGb0LnVl5sEgxJBAJ52xtuZXQ5YTE5YTA4YTlh","salt":"9a19a08a9a","validation_code":"yrxwiqq5","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:16:46"},{"uid":"327","unique_id":"58137a4eb22b06.35997843","firstname":"station nzeng","lastname":"cyber nzeng station","phone":"+241000370","country_code":"Gabon","network":"Airtel Gabon","member_code":"xiqSeiJf1C","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4018397","longitude":"9.5088662","encrypted_password":"zD9di2IcY4O4mC3ZDPtiW1HZ5WplYjY0ZjE0YTJm","salt":"eb64f14a2f","validation_code":"m2qhbftw","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:18:22"},{"uid":"328","unique_id":"58137be58bd581.16491580","firstname":"mairie nzeng","lastname":"cyber nzeng poste bank","phone":"+241000371","country_code":"Gabon","network":"Airtel Gabon","member_code":"2x1f9mJvYy","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4232024","longitude":"9.4725205","encrypted_password":"SN4Int4pOETgkVUEEtstA4pvfFk4MDU0ZDBiZDM3","salt":"8054d0bd37","validation_code":"p2upbrvp","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:25:09"},{"uid":"329","unique_id":"58137bf782cd83.50228003","firstname":"mairie nzeng","lastname":"cyber nzeng poste bank","phone":"+241000372","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"68tQERnDnz","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4231222","longitude":"9.4726099","encrypted_password":"\/gCxCuaijDzoo3WhS4aS0gR5TlgzNzBlMmY1ZDhi","salt":"370e2f5d8b","validation_code":"e1wcifye","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:25:27"},{"uid":"330","unique_id":"58137c25d7e1c3.45345660","firstname":"mairie nzeng","lastname":"cyber nzeng poste bank","phone":"+241000373","country_code":"Gabon","network":"Libertis","member_code":"nO4VGM4JGY","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4231295","longitude":"9.4725858","encrypted_password":"2GrxcHBGF6ZYiLCA\/wMf\/3DXOMdkYjAwYTEyMjgx","salt":"db00a12281","validation_code":"ki2ozudx","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:26:13"},{"uid":"331","unique_id":"58137c458ae435.37882642","firstname":"mairie nzeng","lastname":"cyber nzeng poste bank","phone":"+241000374","country_code":"Gabon","network":"Libertis","member_code":"5HkPDteDyi","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4231297","longitude":"9.4725205","encrypted_password":"V5XHpelz81tI0ymQCDcpdL8InzNmMDcwZDRlODYy","salt":"f070d4e862","validation_code":"olptc8tx","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:26:45"},{"uid":"332","unique_id":"58137d8e3ba0b6.14354755","firstname":"epi nzeng","lastname":"cyber cafe epi nzeng","phone":"+241000375","country_code":"Gabon","network":"Libertis","member_code":"UAjIz87fCf","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4198777","longitude":"9.4794059","encrypted_password":"tCd109cZ2wPAULKwfxUJ84JCUgBkM2IwOTE2OTc3","salt":"d3b0916977","validation_code":"dhaesb2g","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:32:14"},{"uid":"333","unique_id":"58137e79964889.56221507","firstname":"charbonage","lastname":"charbonage","phone":"+241000225","country_code":"Gabon","network":"Airtel Gabon","member_code":"Y9MGK2oUDu","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0","longitude":"0","encrypted_password":"m5h3JS9YGdlsDVhTDccom5PtN08xODE2NzM1MjRi","salt":"181673524b","validation_code":"zzrhar5i","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:36:09"},{"uid":"334","unique_id":"58137fefba1607.92185936","firstname":"rond point nzeng","lastname":"mira center","phone":"+241000377","country_code":"Gabon","network":"Airtel Gabon","member_code":"mZKk5eeBBa","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4214765","longitude":"9.4781485","encrypted_password":"uI1OEEkjz1+5y+x+A+tqeOZ77gU4YmJkNjUxMTIw","salt":"8bbd651120","validation_code":"gxqke7uw","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:42:23"},{"uid":"335","unique_id":"5813804339f659.55763182","firstname":"rond point nzeng","lastname":"kiosque","phone":"+241000379","country_code":"Gabon","network":"Airtel Gabon","member_code":"BtVCEEgoHl","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4215445","longitude":"9.4782457","encrypted_password":"NB9cgrbfyRrk5fjZ\/TtGWkjfDXNkNDAwNWEwYmVl","salt":"d4005a0bee","validation_code":"1iudzufg","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:43:47"},{"uid":"336","unique_id":"5813804906c145.85775640","firstname":"rond point nzeng","lastname":"mira center","phone":"+241000378","country_code":"Gabon","network":"Libertis","member_code":"ldhNZwK9Sd","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4215443","longitude":"9.4782439","encrypted_password":"4ThY8aB+UgfzoUaUBhVAfdXBQ4NhM2NkZTMyOTEy","salt":"a3cde32912","validation_code":"rgjnp6nk","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:43:53"},{"uid":"337","unique_id":"5813805b3f7d64.10517776","firstname":"rond point nzeng","lastname":"kiosque","phone":"+241000380","country_code":"Gabon","network":"Libertis","member_code":"dGMnrJhunV","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4215556","longitude":"9.47838","encrypted_password":"ZumwbBoCOovMfUaxJbvK53jjDfw3YzVhNjc1MjMz","salt":"7c5a675233","validation_code":"mouo1jmj","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:44:11"},{"uid":"338","unique_id":"58138081d9fe09.22499000","firstname":"rond point nzeng","lastname":"kiosque a journaux","phone":"+241000381","country_code":"Gabon","network":"Libertis","member_code":"DdfGt2opQI","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4215693","longitude":"9.4785551","encrypted_password":"vGpkEUsrg\/IuZJqStbZU\/x+xOeU4ODkxOGUzOGZj","salt":"88918e38fc","validation_code":"0hrlsqgz","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:44:49"},{"uid":"339","unique_id":"581380a21a0f29.53777793","firstname":"rond point nzeng","lastname":"kiosque a journaux","phone":"+241000382","country_code":"Gabon","network":"Airtel Gabon","member_code":"NTC8YyzNTQ","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4208691","longitude":"9.4792066","encrypted_password":"FaSY6UFbidB8rAYNa7cuPjiotEBlYzI5MGNhM2Ri","salt":"ec290ca3db","validation_code":"0aegdhbe","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:45:22"},{"uid":"340","unique_id":"581381178ded77.46891150","firstname":"rond point nzeng","lastname":"cyber cafe linkana","phone":"+241000383","country_code":"Gabon","network":"Airtel Gabon","member_code":"LZCNB1qDyL","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4207236","longitude":"9.4793802","encrypted_password":"UptlkvbgzANk4yizUKuU0RqHLV44MTgxOTMxM2Nj","salt":"81819313cc","validation_code":"5uvxhwbz","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:47:19"},{"uid":"341","unique_id":"58138161c31f04.40104767","firstname":"rond point nzeng","lastname":"kiosque epicerie kankeu","phone":"+241000384","country_code":"Gabon","network":"Airtel Gabon","member_code":"ypdFWIfrYp","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4200873","longitude":"9.4794523","encrypted_password":"ypp2XOL\/cJLmcn3VmenUYE74K1UzNTViMTk3ZTUw","salt":"355b197e50","validation_code":"yfrxv1uj","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:48:33"},{"uid":"342","unique_id":"581381daeb4640.46030539","firstname":"rond point nzeng","lastname":"cyber cafe","phone":"+241000385","country_code":"Gabon","network":"Airtel Gabon","member_code":"LQ3zIOg7U3","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.420033","longitude":"9.4796842","encrypted_password":"ZqBlbtm6z0a0sd2fxbPrgtm\/F+g2YWZmMGE4M2I1","salt":"6aff0a83b5","validation_code":"blxib5xw","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:50:34"},{"uid":"343","unique_id":"5813821bc88273.62477196","firstname":"rond point nzeng","lastname":"god finger center","phone":"+241000386","country_code":"Gabon","network":"Airtel Gabon","member_code":"Ifd3oA7V7n","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4199565","longitude":"9.479711","encrypted_password":"cEo+X6cLfX2HXfwuLYCLEU2mMQQ3NzdlMzI4OGEx","salt":"777e3288a1","validation_code":"d9bhuktk","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:51:39"},{"uid":"344","unique_id":"5813826479a858.76601500","firstname":"ondogo","lastname":"ondogo","phone":"+241000226","country_code":"Gabon","network":"Airtel Gabon","member_code":"o2uFBsrZyl","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.443","longitude":"9.46554","encrypted_password":"sQBSoz5yIz7zeoqOKE7ZwRprAZhkNjViNzliOGIy","salt":"d65b79b8b2","validation_code":"nbq4jnyk","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:52:52"},{"uid":"345","unique_id":"581382ed6859b6.55473576","firstname":"rond point nzeng","lastname":"kiosque","phone":"+241000387","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"UWpSe2m0vf","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4198777","longitude":"9.4794059","encrypted_password":"1O0fEPmtp7eOiiAvV1E\/M755vEQzMjRkZWZjN2Ji","salt":"324defc7bb","validation_code":"az3mzggx","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:55:09"},{"uid":"346","unique_id":"581382fe2759c2.80707590","firstname":"rond point nzeng","lastname":"kiosque","phone":"+241000388","country_code":"Gabon","network":"Airtel Gabon","member_code":"x3WepZHZB3","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.423261","longitude":"9.4838958","encrypted_password":"RRytqPbZfbpFbnQb6edc8NEI3zg4MGU4OGM4ODY3","salt":"80e88c8867","validation_code":"izr4lidp","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:55:26"},{"uid":"347","unique_id":"581383e3655522.70782947","firstname":"rond point nzeng","lastname":"kiosque","phone":"+241000391","country_code":"Gabon","network":"Libertis","member_code":"SeegwzvJuY","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4213058","longitude":"9.4785987","encrypted_password":"0TwkBiRSIj52ZW8LHcED+K2mOHhkZWY2MmVhMDgy","salt":"def62ea082","validation_code":"varpk4hl","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 09:59:15"},{"uid":"348","unique_id":"5813845859ad90.92147508","firstname":"ondogo","lastname":"ondogo","phone":"+241000227","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"E4sG07Yiha","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.44261","longitude":"9.46603","encrypted_password":"t3Me+g4xN1VSlk7xRc\/vQ9yaXas3ZTM1NDEyNmM3","salt":"7e354126c7","validation_code":"rzrbr9pb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:01:12"},{"uid":"349","unique_id":"581384888cb713.35765102","firstname":"ondogo","lastname":"ondogo","phone":"+241000228","country_code":"Gabon","network":"Airtel Gabon","member_code":"Psc65haL6h","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4424967","longitude":"9.46594","encrypted_password":"BXSrYxwDEJxuUiEVvSQfl5jKxLA0MDIxM2JhZDEw","salt":"40213bad10","validation_code":"v6qcpcxb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:02:00"},{"uid":"350","unique_id":"581384b0928974.31437354","firstname":"ondogo","lastname":"ondogo","phone":"+241000229","country_code":"Gabon","network":"Libertis","member_code":"jDuHOeXiQS","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4424667","longitude":"9.465905","encrypted_password":"z5MtjXwGcsFTxIfp+wEuKpuhnw4xM2U2YWZiODQw","salt":"13e6afb840","validation_code":"laaxoaj5","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:02:40"},{"uid":"351","unique_id":"5813861376f419.88364685","firstname":"fin goudron","lastname":"kiosque fin goudron","phone":"+241000392","country_code":"Gabon","network":"Airtel Gabon","member_code":"74RXoHIwXV","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4213057","longitude":"9.4786856","encrypted_password":"Ya5ck0yR4+F\/VkGHf+uvPXkGQ6c2M2RmMTMyZGE1","salt":"63df132da5","validation_code":"wkdaom8g","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:08:35"},{"uid":"352","unique_id":"581386b3cc4917.67517691","firstname":"fin goudron","lastname":"kiosque fin goudron","phone":"+241000393","country_code":"Gabon","network":"Libertis","member_code":"JTUJmmI9kz","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4253576","longitude":"9.4815775","encrypted_password":"9kRvbLKsYbLvMbfN0oGxFltOwY0xMThhMTE4NmQy","salt":"118a1186d2","validation_code":"u8ovgokp","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:11:15"},{"uid":"353","unique_id":"581386d4dc0388.99088463","firstname":"fin goudron","lastname":"kiosque fin goudron","phone":"+241000394","country_code":"Gabon","network":"BGFI Mobile","member_code":"K81JoecaYV","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4253565","longitude":"9.4815777","encrypted_password":"7sQrosUmIqsvYqdLA5KDBT4aXLsyMGJkMGYyZDI2","salt":"20bd0f2d26","validation_code":"zdc5rwaz","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:11:48"},{"uid":"354","unique_id":"581386ec404691.31945250","firstname":"fin goudron","lastname":"kiosque fin goudron","phone":"+241000395","country_code":"Gabon","network":"Airtel Gabon","member_code":"8e5vH5YGZn","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4253565","longitude":"9.4815777","encrypted_password":"lhAc6Pd2WIP3yViHB7S+LnxKFm1lZDRhNDkyMzNk","salt":"ed4a49233d","validation_code":"1xcrdapr","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:12:12"},{"uid":"355","unique_id":"5813870bd51f91.24506300","firstname":"fin goudron","lastname":"kiosque fin goudron","phone":"+241000396","country_code":"Gabon","network":"Libertis","member_code":"QZqpkvXKNh","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4253565","longitude":"9.4815777","encrypted_password":"z3AnmW8KYzoKh9nw2G8dc04W6aA5Y2UxMGI5NzI0","salt":"9ce10b9724","validation_code":"bj6uxqus","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:12:43"},{"uid":"356","unique_id":"5813882638a0f7.04685484","firstname":"fin goudron","lastname":"kiosque fin goudron","phone":"+241000397","country_code":"Gabon","network":"Libertis","member_code":"8zugBhh85m","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4346192","longitude":"9.4801132","encrypted_password":"3KlUXQg2nhviDtUi5k88GyoxSyk5NzE2YmM5YTBl","salt":"9716bc9a0e","validation_code":"hkgnslo5","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:17:26"},{"uid":"357","unique_id":"581389712d2bd1.45547416","firstname":"dragage","lastname":"mr roger","phone":"+24107267906","country_code":"Gabon","network":"Airtel Gabon","member_code":"JP4l3qoYNY","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4379371","longitude":"9.4799801","encrypted_password":"ayfsIYwkUkxtv+wonRtE+s3QHHo0MWJiZDMzYmNi","salt":"41bbd33bcb","validation_code":"tmsfqn4a","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:22:57"},{"uid":"358","unique_id":"58138aaa24f144.92068135","firstname":"ondogo","lastname":"ondogo","phone":"+241000230","country_code":"Gabon","network":"Libertis","member_code":"Iy9j04t2dT","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4436217","longitude":"9.45904","encrypted_password":"+VQrtH8XsU2YXEhLLgpmNjb43bsxY2IxZGE0MDVm","salt":"1cb1da405f","validation_code":"ca5qlpqy","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:28:10"},{"uid":"359","unique_id":"58138c0cc6d3c4.16556585","firstname":"dragage","lastname":"kiosque airtel","phone":"+241000398","country_code":"Gabon","network":"Airtel Gabon","member_code":"xCN1OB7pTY","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4358226","longitude":"9.4797813","encrypted_password":"uKAh9SD32t2QXndE6isXMzM0puhjZTE3NThlY2E4","salt":"ce1758eca8","validation_code":"cgqgr6yw","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:34:04"},{"uid":"360","unique_id":"58138c1c0e97b8.73783662","firstname":"dragage","lastname":"kiosque","phone":"+241000399","country_code":"Gabon","network":"Libertis","member_code":"ley4UMefrs","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.435852","longitude":"9.4797079","encrypted_password":"tqUIh\/swLvdYB1p9W8I4HcSMmI00YzhhMDMyYzUy","salt":"4c8a032c52","validation_code":"nka0bhqk","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:34:20"},{"uid":"361","unique_id":"58138e769920c7.99971582","firstname":"marche nzeng","lastname":"kiosque","phone":"+241000400","country_code":"Gabon","network":"Airtel Gabon","member_code":"rS6Xachv07","code_parrain":"IYScE6mCAn","email":"francetteblaire4@gmail.com","category":"geolocated","balance":"0","latitude":"0.4237529","longitude":"9.4794456","encrypted_password":"ut2I0jf3XuMvHYuS0bgQpytOvw8yYWM4NzZjMTkx","salt":"2ac876c191","validation_code":"jfgevo0b","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:44:22"},{"uid":"362","unique_id":"58138f4ed35ee3.60430427","firstname":"kingu\u00c3\u00a9l\u00c3\u00a9","lastname":"airtel 10","phone":"+241000123","country_code":"Gabon","network":"Airtel Gabon","member_code":"JPOtEcAQoS","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4013775","longitude":"9.4691123","encrypted_password":"A51lYJLFeWUMLorSg6FVJxLYg+ZhMzRiMjljOGNl","salt":"a34b29c8ce","validation_code":"zsbmtv9s","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:47:58"},{"uid":"363","unique_id":"58138f7eaf1c89.96872263","firstname":"kingu\u00c3\u00a9l\u00c3\u00a9","lastname":"libertis 6","phone":"+241000124","country_code":"Gabon","network":"Libertis","member_code":"dxp0sI0eZh","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4013775","longitude":"9.4691123","encrypted_password":"cmE3abwDXm\/daVzoeRjSUkvbCc8xM2UzMjJhOWFk","salt":"13e322a9ad","validation_code":"khdt4drf","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:48:46"},{"uid":"364","unique_id":"58139006cf5aa9.41280180","firstname":"kingu\u00c3\u00a9l\u00c3\u00a9","lastname":"airtel 11","phone":"+241000125","country_code":"Gabon","network":"Airtel Gabon","member_code":"csnw9Pzcqb","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4015427","longitude":"9.4685137","encrypted_password":"f2S79aPfL+qar3PrqSfOvBWerJgwYWM0NGQwMDUy","salt":"0ac44d0052","validation_code":"ez1cfybl","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:51:02"},{"uid":"365","unique_id":"581390a2b9a755.92767843","firstname":"ondogo","lastname":"ondogo","phone":"+241000231","country_code":"Gabon","network":"Airtel Gabon","member_code":"d9mzJMdZa1","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.4384083","longitude":"9.4444367","encrypted_password":"c9hN7aqRQO1CoU3CzGN+NXz1qWllZmFhZTEzZjlh","salt":"efaae13f9a","validation_code":"1iecrirx","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:53:38"},{"uid":"366","unique_id":"581390b6c2cc08.45023738","firstname":"kingu\u00c3\u00a9l\u00c3\u00a9","lastname":"airtel 12","phone":"+241000126","country_code":"Gabon","network":"Airtel Gabon","member_code":"fdG2w7yoTJ","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4016866","longitude":"9.4672536","encrypted_password":"IULK2yxwKHcNYfzguJQpJWkFQcYyMGFmYzA5ZTgw","salt":"20afc09e80","validation_code":"mhsd8ift","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:53:58"},{"uid":"367","unique_id":"5813918ae81035.75951004","firstname":"charbonage","lastname":"charbonage","phone":"+24100023","country_code":"Gabon","network":"Airtel Gabon","member_code":"O9uLjXOoxh","code_parrain":"IYScE6mCAn","email":"yvan. gildas03@gmail. com","category":"geolocated","balance":"0","latitude":"0.437165","longitude":"9.4432583","encrypted_password":"LwAwSMknwDLwpXnbIF27MMykvUUzNDhjZjQ2ZTEw","salt":"348cf46e10","validation_code":"jzxino8g","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 10:57:30"},{"uid":"368","unique_id":"5813926ec5f804.09108464","firstname":"rue ndona","lastname":"airtel 13","phone":"+241000127","country_code":"Gabon","network":"Airtel Gabon","member_code":"VpU05jEulj","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4011708","longitude":"9.4653629","encrypted_password":"zElNNOzLHbaja8FONdYLoqQEjcphZjMyNzlhZTNh","salt":"af3279ae3a","validation_code":"ltktew6b","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:01:18"},{"uid":"369","unique_id":"5813929fc706c2.22815830","firstname":"rue ndona","lastname":"libertis 7","phone":"+241000128","country_code":"Gabon","network":"Libertis","member_code":"PInBTlC2JY","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4011708","longitude":"9.4653629","encrypted_password":"dp8NCTUD73D7TchxFN36llg\/udwyNWE3ODI2YjQy","salt":"25a7826b42","validation_code":"6kvgpoki","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:02:07"},{"uid":"370","unique_id":"581392f7395ee5.62561061","firstname":"rue ndona","lastname":"airtel 14","phone":"+241000129","country_code":"Gabon","network":"Airtel Gabon","member_code":"uc51RTDZFr","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.401293","longitude":"9.4655546","encrypted_password":"h83Q0v69TBxeOuLGTaVeiQGno6MwYzA4MGViZjNj","salt":"0c080ebf3c","validation_code":"5mayqszw","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:03:35"},{"uid":"371","unique_id":"58139335444a63.47981633","firstname":"rue ndona","lastname":"libertis 8","phone":"+241000131","country_code":"Gabon","network":"Libertis","member_code":"uh79egUGJe","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.401293","longitude":"9.4655546","encrypted_password":"yXRBQT\/U3zQOV0k6Vb2srQeMeb9kNjk5MjE5Zjgz","salt":"d699219f83","validation_code":"qbqivof8","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:04:37"},{"uid":"372","unique_id":"5813936007cac0.98057101","firstname":"rue ndona","lastname":"moov 5","phone":"+241000132","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"czdu7Lar1J","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.401293","longitude":"9.4655546","encrypted_password":"KoWG3jPlU4ydmfoTFy5k+VakiAQ3OTBhNGY4NGUx","salt":"790a4f84e1","validation_code":"ifrc5ppq","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:05:20"},{"uid":"373","unique_id":"581394231c94f3.75285794","firstname":"cosmopark","lastname":"libertis 8","phone":"+241000133","country_code":"Gabon","network":"Libertis","member_code":"nMst6qFnve","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4024334","longitude":"9.4657423","encrypted_password":"9+r9kqFjlSbcwu+XYUY6dviL\/8w0Y2FkMGMxZDYw","salt":"4cad0c1d60","validation_code":"hi1ysvge","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:08:35"},{"uid":"374","unique_id":"581394575a1e22.48506540","firstname":"cosmopark","lastname":"airtel 15","phone":"+241000134","country_code":"Gabon","network":"Airtel Gabon","member_code":"pXrwA8DEMP","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4024334","longitude":"9.4657423","encrypted_password":"KkXhIyI2odwKSrj6uf44q8Oe4Fo2OGNmOGRjYTk3","salt":"68cf8dca97","validation_code":"woc2fxic","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:09:27"},{"uid":"375","unique_id":"581394b08c61a8.59611476","firstname":"cosmopark","lastname":"airtel 16","phone":"+241000135","country_code":"Gabon","network":"Airtel Gabon","member_code":"wKTlMSu6rP","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4026642","longitude":"9.4657834","encrypted_password":"EcQvm+D0uIRegFOFZPjuK\/daD59iZTZkYjY2M2Ji","salt":"be6db663bb","validation_code":"uwslh1fb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:10:56"},{"uid":"376","unique_id":"58139560d122d4.07073232","firstname":"kingu\u00c3\u00a9l\u00c3\u00a9","lastname":"airtel 17","phone":"+241000136","country_code":"Gabon","network":"Airtel Gabon","member_code":"40A5elNgCA","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4039549","longitude":"9.4656159","encrypted_password":"hrCyO1aEhZTWHlT113eGzMU1wUVhZDU3ZWJiYzZj","salt":"ad57ebbc6c","validation_code":"hjnv8ozu","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:13:52"},{"uid":"377","unique_id":"58139632edd562.06057497","firstname":"carrefour Rio","lastname":"airtel 18","phone":"+241000137","country_code":"Gabon","network":"Airtel Gabon","member_code":"GwfoLRgXV1","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4052728","longitude":"9.464964","encrypted_password":"zTotVYdy78ilPDsSsb50MIndO2JhNTViMDE5ZGI1","salt":"a55b019db5","validation_code":"3ccrwpdg","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:17:22"},{"uid":"378","unique_id":"581396a3469e68.33251920","firstname":"carrefour Rio","lastname":"airtel 19","phone":"+241000138","country_code":"Gabon","network":"Airtel Gabon","member_code":"vFgcFk0B3j","code_parrain":"IYScE6mCAn","email":"dannyskyler2@gmail.com","category":"geolocated","balance":"0","latitude":"0.4054244","longitude":"9.464566","encrypted_password":"kdJ5IEmyj7lqfTvhQVOK7+QOPdw0Yjc0YTYwODZh","salt":"4b74a6086a","validation_code":"w3heuupb","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2016-10-28 11:19:15"},{"uid":"441","unique_id":"59f9a6f6a34332.77898267","firstname":"Lbv sabliere","lastname":"Clara manga","phone":"+24104844346","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"k7E3sAYiw2","code_parrain":"0","email":"jmangansongo.cfao@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4231234","longitude":"9.4254221","encrypted_password":"ydqxKJRywPnb5T1zdjatNS2jSU5lODViNDI4NTEy","salt":"e85b428512","validation_code":"ueh5elkn","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-11-01 03:50:30"},{"uid":"443","unique_id":"59f9a80cdfaea9.16946668","firstname":"Lbv sabliere","lastname":"Clara manga","phone":"+24177610359","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"k7E3sAYiw2","code_parrain":"0","email":"jmangansongo.cfao@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4231234","longitude":"9.4254221","encrypted_password":"9z7NEO855OzP6O1tunotxQb6JAswOWI1NDFjNGNm","salt":"09b541c4cf","validation_code":"7lqroria","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-11-01 03:55:08"},{"uid":"381","unique_id":"59b295fc66c440.82887875","firstname":"Alenakiri","lastname":"Epicier ","phone":"+700","country_code":"Gabon","network":"Airtel Gabon","member_code":"l2vxElBfaY","code_parrain":"IYScE6mCAn","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3075960231947783","longitude":"9.507246175789746","encrypted_password":"QG6mMjVd6LE6D+zec\/2gf2P7oMNjMjkxOWM1ZTUx","salt":"c2919c5e51","validation_code":"nqhcft0g","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:07:08"},{"uid":"382","unique_id":"59b29613d993a1.45619510","firstname":"Alenakiri","lastname":"Epicier ","phone":"+7000","country_code":"Gabon","network":"Airtel Gabon","member_code":"ukyCZzPapy","code_parrain":"IYScE6mCAn","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3075960231947783","longitude":"9.507246175789746","encrypted_password":"OYY5jMQ6Vgy2lsKskBKf77gVk3wwMTgwYWY0MWMy","salt":"0180af41c2","validation_code":"z3bxfwsc","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:07:31"},{"uid":"383","unique_id":"59b2962a790377.14778759","firstname":"Alenakiri","lastname":"Epicier ","phone":"+70000","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3075960231947783","longitude":"9.507246175789746","encrypted_password":"EV9vgS8gARrJT78jB3F0mmS8Jwg3MjM0MTJkZTE0","salt":"723412de14","validation_code":"cbzld5jz","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:07:54"},{"uid":"384","unique_id":"59b29806903594.29570682","firstname":"Alenakiri","lastname":"Epicier","phone":"+701","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3060732828456034","longitude":"9.50382610783866","encrypted_password":"QV7Ur0kCwSH3mozdUWetLhegB7VjMDFhYzgzNDkx","salt":"c01ac83491","validation_code":"t9grjmnl","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:15:50"},{"uid":"385","unique_id":"59b299f3af2394.30011690","firstname":"Alenakiri","lastname":"Point service","phone":"+702","country_code":"Gabon","network":"BICIG Mobile","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3047303209690956","longitude":"9.502728915730387","encrypted_password":"c5QTg+J7i+ZMhMcE6NYVQ0FHcjtjNWJlNDk0MTk5","salt":"c5be494199","validation_code":"z5zkzsac","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:24:03"},{"uid":"386","unique_id":"59b29b81745185.27588526","firstname":"Alenakiri","lastname":"Mayombe cyber","phone":"+703","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3019374046045431","longitude":"9.511884038134736","encrypted_password":"dxYdODjuBK4biymo86CHZBh3zXlkYzQ2OWFkOTU0","salt":"dc469ad954","validation_code":"ejzhcbi0","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:30:41"},{"uid":"387","unique_id":"59b29b9084aa20.80932439","firstname":"Alenakiri","lastname":"Mayombe cyber","phone":"+704","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3019374046045431","longitude":"9.511884038134736","encrypted_password":"dYWTg7as1Qtm1VfrkwxDHie564g4NWFhYWFmN2Rk","salt":"85aaaaf7dd","validation_code":"jhqoed7p","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:30:56"},{"uid":"388","unique_id":"59b29c6522c623.71988269","firstname":"Alenakiri","lastname":"Point service ","phone":"+705","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3038212331014721","longitude":"9.508429532879505","encrypted_password":"zU0bPrd8KE6RlCaRvHFG8Olj9P83MTU1Y2ZhM2Uz","salt":"7155cfa3e3","validation_code":"itmjt7bz","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:34:29"},{"uid":"389","unique_id":"59b29d17284db2.17409273","firstname":"Alenakiri","lastname":"Point service","phone":"+706","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3028902166378962","longitude":"9.50993075299725","encrypted_password":"rpzRVZtTg0Kp6sCLRPKQr68WfTwyZTgzOTBlYzRm","salt":"2e8390ec4f","validation_code":"ebyjiy1b","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:37:27"},{"uid":"390","unique_id":"59b29d93781f61.26375328","firstname":"Alenakiri","lastname":"Boutique","phone":"+707","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3042756579819175","longitude":"9.50765035116068","encrypted_password":"WqziceydBYdgTBlWOkeFVh28MThiNzdmOTlmZjhm","salt":"b77f99ff8f","validation_code":"9pbpeuum","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:39:31"},{"uid":"391","unique_id":"59b29e053c2077.46574782","firstname":"Alenakiri","lastname":"Point service","phone":"+708","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3043555375191423","longitude":"9.507815474653158","encrypted_password":"rPG72Q0xu\/yFJada9w6fdfG+A19jNDc5ZDJjZmI5","salt":"c479d2cfb9","validation_code":"p2mtgsns","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:41:25"},{"uid":"392","unique_id":"59b29fc5db0644.95358069","firstname":"Alenakiri","lastname":"Point service","phone":"+709","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3020184859077578","longitude":"9.51173462245704","encrypted_password":"peNpXkgHKkVyJ31AN9Ulc+LDu55lMjQ2YjM2ODk0","salt":"e246b36894","validation_code":"f4hrfnel","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:48:53"},{"uid":"393","unique_id":"59b29fd152db03.46928351","firstname":"Alenakiri","lastname":"Point service","phone":"+710","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3020184859077578","longitude":"9.51173462245704","encrypted_password":"Mv1He5n+w1P2BImU0oY+di203ohmMjlhODcwMjBm","salt":"f29a87020f","validation_code":"oo2nbhsy","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:49:05"},{"uid":"394","unique_id":"59b29fe66767e0.30057259","firstname":"Alenakiri","lastname":"Point service","phone":"+711","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3020184859077578","longitude":"9.51173462245704","encrypted_password":"b4CZd\/J8NwksqQP4MklyG9Y9jAoyOWQzZTYxMjIx","salt":"29d3e61221","validation_code":"ssrs1umf","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:49:26"},{"uid":"395","unique_id":"59b2a0f7144664.87304001","firstname":"Alenakiri","lastname":"Ets Gerchris","phone":"+712","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3051965776833754","longitude":"9.513009907686628","encrypted_password":"u8d7m3e143f5M137gKCzA\/FQG4o1NjlkYjAyZWRj","salt":"569db02edc","validation_code":"txksu2sb","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 06:53:59"},{"uid":"396","unique_id":"59b2a61a436ef6.60127430","firstname":"Carrefour SNI","lastname":"Point service ","phone":"+713","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.332309477962863","longitude":"9.487213175752654","encrypted_password":"sbJmnk\/mqmjqwYglkJC3HiMwyGUzZDQ0YzNiY2Zi","salt":"3d44c3bcfb","validation_code":"afv0yggv","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:15:54"},{"uid":"397","unique_id":"59b2a623b03129.72169616","firstname":"Carrefour SNI","lastname":"Point service ","phone":"+714","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.332309477962863","longitude":"9.487213175752654","encrypted_password":"UhDKRgfkeh05uGpyFFPkFzEOf0VlY2FhN2Q0MDI4","salt":"ecaa7d4028","validation_code":"iqr6huwo","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:16:03"},{"uid":"398","unique_id":"59b2a62c9402d1.54283181","firstname":"Carrefour SNI","lastname":"Point service ","phone":"+715","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.332309477962863","longitude":"9.487213175752654","encrypted_password":"uNywhIbWW2aybd83\/0y0K82eOdRlMDhkNTZjYTZm","salt":"e08d56ca6f","validation_code":"l9dmrkrz","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:16:12"},{"uid":"399","unique_id":"59b2a63869df17.09479064","firstname":"Carrefour SNI","lastname":"Point service ","phone":"+716","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.332309477962863","longitude":"9.487213175752654","encrypted_password":"ICHh560PNOdjhd6LH5Sjl+gwiHVhYjFmNDA3ZGRk","salt":"ab1f407ddd","validation_code":"ogku0khe","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:16:24"},{"uid":"400","unique_id":"59b2a64292c2e6.38349605","firstname":"Carrefour SNI","lastname":"Point service ","phone":"+717","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.332309477962863","longitude":"9.487213175752654","encrypted_password":"jIZgFR9TPMjA+ujcPsQhBpbYZo4yZDQxOGI0YzEw","salt":"2d418b4c10","validation_code":"ag7qhgsm","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:16:34"},{"uid":"401","unique_id":"59b2a86150ecb3.86503685","firstname":"Alenakiri","lastname":"Ecole pascal andre","phone":"+718","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3379627363759447","longitude":"9.480516621851809","encrypted_password":"r6BxMkvT5hVpkIyXwb00eSxlxRE5MjU1ZDFiNDA4","salt":"9255d1b408","validation_code":"egzygb0y","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:25:37"},{"uid":"402","unique_id":"59b2a8c62d4a79.70330604","firstname":"Pediatrie","lastname":"Kiosque a journaux","phone":"+719","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3378540230918097","longitude":"9.480703538292534","encrypted_password":"2R91ETtnKaZTInY+jCnI5TJVknwyYzU0ODY4NmFj","salt":"2c548686ac","validation_code":"hyyjr5mk","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:27:18"},{"uid":"403","unique_id":"59b2a95239f6e5.19394672","firstname":"Pediatrie","lastname":"Point service","phone":"+720","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3378930827605891","longitude":"9.480773611003048","encrypted_password":"udAjQq3v1+k1xIJGObCURIRXwskwYzIzNTMyM2Fj","salt":"0c235323ac","validation_code":"udndvxq8","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:29:38"},{"uid":"404","unique_id":"59b2a964c3e7a9.03385536","firstname":"Pediatrie","lastname":"Point service","phone":"+721","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3378930827605891","longitude":"9.480773611003048","encrypted_password":"R+ImOj5YxZrKsZUS5cuUsxex26hmNmU5MDg1NTg3","salt":"f6e9085587","validation_code":"rz2gqyqq","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:29:56"},{"uid":"405","unique_id":"59b2aa119e0096.41355094","firstname":"Pediatrie","lastname":"Video club","phone":"+722","country_code":"Gabon","network":"BICIG Mobile","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3384143019429737","longitude":"9.481399334105951","encrypted_password":"K0zMlrXwHtsHVHLpxCaS3wcMSJg4YjU4ODgxYjlm","salt":"8b58881b9f","validation_code":"ayjoxcf8","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:32:49"},{"uid":"406","unique_id":"59b2aa2013fc08.10215257","firstname":"Pediatrie","lastname":"Video club","phone":"+723","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3384143019429737","longitude":"9.481399334105951","encrypted_password":"ngLMtP\/hcWUJMq5WWgElmanVbe80NzIwZDNiMjEw","salt":"4720d3b210","validation_code":"7trobasi","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:33:04"},{"uid":"407","unique_id":"59b2aab3b51fa4.77061920","firstname":"Pediatrie","lastname":"Point service","phone":"+724","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3382590815989333","longitude":"9.481236848018277","encrypted_password":"0wRxH5l6BTyXrAzfYO2chgfF6bgxMTMwYmM5ODgw","salt":"1130bc9880","validation_code":"nwlwkm9c","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:35:31"},{"uid":"408","unique_id":"59b2ab21373bf3.04960197","firstname":"Pediatrie","lastname":"Point service","phone":"+725","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3379820438233898","longitude":"9.481151528304569","encrypted_password":"iwura6\/SyPgQaUHch5o\/nk+JbFdhZjQ5ZTkxZmRm","salt":"af49e91fdf","validation_code":"iaxhmfc6","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:37:21"},{"uid":"409","unique_id":"59b2ab3051deb8.64402076","firstname":"Pediatrie","lastname":"Point service","phone":"+726","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3379820438233898","longitude":"9.481151528304569","encrypted_password":"rbXuhFc2rVAgAMAefK5R6lI93C00MjU5YjI0YTM0","salt":"4259b24a34","validation_code":"uzawlf3a","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:37:36"},{"uid":"410","unique_id":"59b2accc94c7b9.24983996","firstname":"Cuss","lastname":"Poitn service","phone":"+727","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3386476839634218","longitude":"9.485233206844491","encrypted_password":"BzkAeVsM1uf+GnF987XPXq\/ZxWZlN2IwYzBkOWYw","salt":"e7b0c0d9f0","validation_code":"r2qaktfd","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:44:28"},{"uid":"411","unique_id":"59b2ad2402fa05.31548974","firstname":"Cuss","lastname":"Point service","phone":"+728","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3400547599281424","longitude":"9.486026947603333","encrypted_password":"R+W7PFZ5uTLZjCfMMkgsLdJ34K8zOWMzMDlmZWZm","salt":"39c309feff","validation_code":"yhxd8dtu","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:45:56"},{"uid":"412","unique_id":"59b2b00c6c5870.61532757","firstname":"Pediatrie ","lastname":"Point service","phone":"+729","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3400472535314337","longitude":"9.486022723775726","encrypted_password":"KIQnD+uqVhulOOyIP1xA\/BoHG3AwNDQ1YjRiMjkx","salt":"0445b4b291","validation_code":"zpkfua7e","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:58:20"},{"uid":"413","unique_id":"59b2b01abd0f35.17844849","firstname":"Pediatrie ","lastname":"Point service","phone":"+730","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3400472535314337","longitude":"9.486022723775726","encrypted_password":"BS6Ma5o9Nrt0ALu8+kJRjXqpRK1jOGVhYmZjZDdk","salt":"c8eabfcd7d","validation_code":"nu0pmtkr","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:58:34"},{"uid":"414","unique_id":"59b2b02bd25ba3.15371904","firstname":"Pediatrie ","lastname":"Point service","phone":"+731","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3400472535314337","longitude":"9.486022723775726","encrypted_password":"YcyY1g+oUReOJvdLZ7p0S2iN7FJhMjMwYTFjNDIw","salt":"a230a1c420","validation_code":"dznib1dx","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 07:58:51"},{"uid":"415","unique_id":"59b2b2f7dc3471.50067681","firstname":"Pediatrie","lastname":"Epicerie","phone":"+732","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3422940606417967","longitude":"9.488715806810765","encrypted_password":"41fz7ttbpdkY99SCIYElyIcm8BswZTU4MjBjMzBk","salt":"0e5820c30d","validation_code":"xtnsj4nh","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 08:10:47"},{"uid":"416","unique_id":"59b2b3da006501.48267673","firstname":"Pediatrie","lastname":"Epicerie","phone":"+733","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3416573347821285","longitude":"9.489689544175432","encrypted_password":"n2au5CszkoJbLy\/gUjr+a5UaELhlOWI0ZjA4OWFk","salt":"e9b4f089ad","validation_code":"kjayqrb3","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 08:14:34"},{"uid":"417","unique_id":"59b2b64150bf78.26875093","firstname":"Pediatrie","lastname":"Epicerie","phone":"+734","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3460160415410292","longitude":"9.490939814685067","encrypted_password":"yS6ATKxcL3YHCCm2xe\/cxjiT9tMwYTZhMzEwNmJk","salt":"0a6a3106bd","validation_code":"br0zmdtt","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 08:24:49"},{"uid":"418","unique_id":"59b2b9abc3fd11.43636281","firstname":"Pediatrie","lastname":"Epicerie","phone":"+735","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3486453881490497","longitude":"9.495362900206349","encrypted_password":"roFiqjLLMyVjNQ2ps1w+w5TTLidjYWJmMDU2NjI5","salt":"cabf056629","validation_code":"quolm9nt","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 08:39:23"},{"uid":"419","unique_id":"59b2b9b9aa0ff4.74806105","firstname":"Pediatrie","lastname":"Epicerie","phone":"+736","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3486453881490497","longitude":"9.495362900206349","encrypted_password":"QiHVnlAGlx1S7zFdGXzz\/cUxpKRiZDE0YjFkY2Nk","salt":"bd14b1dccd","validation_code":"deg6klmy","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 08:39:37"},{"uid":"420","unique_id":"59b2ba16599978.64796416","firstname":"Pediatrie","lastname":"Point service","phone":"+737","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3487438336017996","longitude":"9.495261646816036","encrypted_password":"RwquksfvghipV6yhDP9eQm\/T3QQwODg1MjUyN2Ux","salt":"08852527e1","validation_code":"8yvcleqb","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 08:41:10"},{"uid":"421","unique_id":"59b2be5c77c9e6.35325109","firstname":"Pediatrie","lastname":"Point service","phone":"+738","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3446939075368873","longitude":"9.489939305940167","encrypted_password":"AIgV3Bkk7tMZRZlUBcQCSeufWOU5NDFmOWNlMmJh","salt":"941f9ce2ba","validation_code":"nehiu4rh","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 08:59:24"},{"uid":"422","unique_id":"59b2be688d3d21.41831408","firstname":"Pediatrie","lastname":"Point service","phone":"+739","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3446939075368873","longitude":"9.489939305940167","encrypted_password":"QXyqSEzoJI15zczJ9tzwbkLejeE1ZjhmNjNhZDcy","salt":"5f8f63ad72","validation_code":"wqeowe0r","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 08:59:36"},{"uid":"423","unique_id":"59b2c4f884f489.99894942","firstname":"Awoungou","lastname":"La poste","phone":"+740","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3140236899660763","longitude":"9.50053431896602","encrypted_password":"oqvsX4jMGPiq9q0+c8V\/axwMcwk0YjI1OThkYzBh","salt":"4b2598dc0a","validation_code":"j8bemjig","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 09:27:36"},{"uid":"424","unique_id":"59b2c5fa11e420.58688792","firstname":"Awoungou","lastname":"Point service","phone":"+741","country_code":"Gabon","network":"Libertis","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3140058740976397","longitude":"9.50161127374461","encrypted_password":"Le3AURrTcMwDjTTFvTkriwJLyHZhMTk0MDBkYTg3","salt":"a19400da87","validation_code":"gtr8ishm","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 09:31:54"},{"uid":"425","unique_id":"59b2c672019d42.80986746","firstname":"Awoungou","lastname":"Point service","phone":"+742","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3142932527046339","longitude":"9.50086786328105","encrypted_password":"pg682HOxBiN18fXV3NaUMteVIec3OGIzOTllOTcz","salt":"78b399e973","validation_code":"qtsavfv3","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 09:33:54"},{"uid":"426","unique_id":"59b2c76050b365.13359640","firstname":"Awoungou","lastname":"Point service ","phone":"+743","country_code":"Gabon","network":"Airtel Gabon","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.3168323203166317","longitude":"9.501217647823681","encrypted_password":"bn7da4mQjK+A6yYoB+bcJVoNU4k5MjQ5NDk3ODZh","salt":"924949786a","validation_code":"wzgal7do","active":"","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-09-08 09:37:52"},{"uid":"464","unique_id":"5a6ed98e0c0cf5.87887991","firstname":"Libreville","lastname":"Quentin","phone":"+24106220313","country_code":"Gabon","network":"JUBA","member_code":"oc1e6LxeoO","code_parrain":"NQfiEwzZUN","email":"mbaquent1@gmail.com","category":"super","balance":"0","latitude":"0.4168129","longitude":"9.4255902","encrypted_password":"\/uGv8\/zOHJ11PguGAgu0aF10kU1jYTAzYTQyODBk","salt":"ca03a4280d","validation_code":"xa5gcxqh","active":"oui","mbre_reseau":"300","mbre_ss_reseau":"0","ouvert":"1","created_at":"2018-01-29 01:21:34"},{"uid":"442","unique_id":"59f9a71a897f48.14712149","firstname":"Lbv sabliere","lastname":"Clara manga","phone":"+24104844345","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"k7E3sAYiw2","code_parrain":"0","email":"jmangansongo.cfao@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4231234","longitude":"9.4254221","encrypted_password":"kjAT3Yb\/xsYvTKiiXndAcxhUU7Q1YzYyMmVkODg5","salt":"5c622ed889","validation_code":"uo8oqixy","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-11-01 03:51:06"},{"uid":"429","unique_id":"59d37c4478d159.43002107","firstname":"BATTERIE","lastname":"CAPP","phone":"03244242","country_code":"Gabon","network":"Azur","member_code":"IYScE6mCAn","code_parrain":"","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.41672719999999996","longitude":"9.425578999999999","encrypted_password":"6jk8hMBV56IbMm+aUAIqG4ranqRjMzMxN2FhYTE4","salt":"c3317aaa18","validation_code":"gees0upo","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-10-03 05:02:12"},{"uid":"465","unique_id":"5a6edbb8649b91.79839080","firstname":"Loin","lastname":"Capp","phone":"+24103244242","country_code":"Gabon","network":"JUBA","member_code":"NQfiEwzZUN","code_parrain":"0","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"0.4168457","longitude":"9.4257203","encrypted_password":"X8N7HTQubB5IThI9Fx7qXQXopYs0M2Y5NzYyMDY3","salt":"43f9762067","validation_code":"bupgnq4a","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-01-29 01:30:48"},{"uid":"440","unique_id":"59f9a6a2564fc6.74863821","firstname":"Lbv sabliere","lastname":"Clara manga","phone":"+24104844347","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"k7E3sAYiw2","code_parrain":"0","email":"jmangansongo.cfao@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4231234","longitude":"9.4254221","encrypted_password":"KeO9Vz7xRAtm3gJcNwjLc8Nuw3EwNTExZDYzYjJm","salt":"0511d63b2f","validation_code":"jhn3rzih","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-11-01 03:49:06"},{"uid":"445","unique_id":"59f9a86e368b63.87821269","firstname":"Lbv sabliere","lastname":"Clara manga","phone":"+24105600010","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"k7E3sAYiw2","code_parrain":"0","email":"jmangansongo.cfao@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4231234","longitude":"9.4254221","encrypted_password":"A+cDMccWht4hBEF1fBWDCcfwd1A0NDU2MDE5MmRh","salt":"44560192da","validation_code":"ffr1wiuj","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2017-11-01 03:56:46"},{"uid":"469","unique_id":"5a7af536837cb5.40157904","firstname":"Akebe","lastname":"Cyber agnam","phone":"+24107453113","country_code":"Gabon","network":"SEEG","member_code":"uK4feOojsi","code_parrain":"0","email":"cyberagnam@gmail.com","category":"geolocated","balance":"0","latitude":"0.3903143","longitude":"9.4607995","encrypted_password":"anxvOwJiYKYn3pL7E7ewFvK9gzo5ZDRhYjUwMjE4","salt":"9d4ab50218","validation_code":"4udkebrx","active":"oui","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-02-07 05:46:46"},{"uid":"454","unique_id":"5a5de068b13eb4.57443881","firstname":"Avenue de Cointet","lastname":"Daniel seth Ndjia","phone":"+24107940106","country_code":"Gabon","network":"SEEG","member_code":"QEbRT2E91H","code_parrain":"QEbRT2E91H","email":"sethndjia87@gmail.com","category":"hyper","balance":"0","latitude":"0.3898435","longitude":"9.4480391","encrypted_password":"J4wBr9dLZ1JHmxeOTo93DiJ6Qu9mZTUyYjcwMTIy","salt":"fe52b70122","validation_code":"ohcz6lnt","active":"oui","mbre_reseau":"2","mbre_ss_reseau":"200","ouvert":"","created_at":"2018-01-16 04:22:16"},{"uid":"466","unique_id":"5a7aec677ebeb8.55674100","firstname":"Akebe","lastname":"Daniel seth Ndjia","phone":"+24106979492","country_code":"Gabon","network":"SEEG","member_code":"uK4feOojsi ","code_parrain":"QEBRT2E91H ","email":"sethndjia87@gmail.com","category":"super","balance":"0","latitude":"0.3916577","longitude":"9.4604956","encrypted_password":"ypcd8WOmFA5fDTNwu6cOsnoHwFA5YWMyZjc5NDUx","salt":"9ac2f79451","validation_code":"wjje5kpy","active":"oui","mbre_reseau":"200","mbre_ss_reseau":"0","ouvert":"oui","created_at":"2018-02-07 05:09:11"},{"uid":"480","unique_id":"5ae44a355e2038.23610377","firstname":"Komo","lastname":"Capp","phone":"+24104633025","country_code":"Gabon","network":"Airtel Gabon","member_code":"TwN1gQCTEn","code_parrain":"cUqGNExv9k","email":"andyakendegue@gmail.com","category":"geolocated","balance":"0","latitude":"0.3885418","longitude":"9.448005","encrypted_password":"9CKrP9Ni58bqhPc2QAJdmfkRIphhYWI4YzhmOWEy","salt":"aab8c8f9a2","validation_code":"mus7hvpx","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-04-28 03:17:25"},{"uid":"471","unique_id":"5a8d436a295a72.85726464","firstname":"22429","lastname":"Hounnou ngouanga","phone":"+24106481133","country_code":"Gabon","network":"SEEG","member_code":"uK4feOojsi","code_parrain":"0","email":"fainfoetservices@gmail.com","category":"geolocated","balance":"0","latitude":"0.3902302","longitude":"9.45386","encrypted_password":"twvEU+pCLDoQ70YR5o7XRAK4b6I2ZWFmZGUzMTkw","salt":"6eafde3190","validation_code":"ioh4ggii","active":"oui","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-02-21 03:01:14"},{"uid":"479","unique_id":"5ae448c355dae7.68391314","firstname":"Komo","lastname":"Capp","phone":"+24104645969","country_code":"Gabon","network":"Airtel Gabon","member_code":"","code_parrain":"","email":"andyakendegue@gmail.com","category":"super","balance":"0","latitude":"0.3885418","longitude":"9.448005","encrypted_password":"Tvvmv6T7fDCeIyusCBGcnVjyaZFhNGFmZmVmYjgx","salt":"a4affefb81","validation_code":"cnlm7ibc","active":"oui","mbre_reseau":"","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-04-28 03:11:15"},{"uid":"478","unique_id":"5ae446e7bd6f55.83150465","firstname":"Komo","lastname":"Capp","phone":"+24105609201","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"hXId3wMwQ3","code_parrain":"hXId3wMwQ3","email":"andyakendegue@gmail.com","category":"hyper","balance":"0","latitude":"0.3885418","longitude":"9.448005","encrypted_password":"8oVDJClJD84Xo7B2eHoB93fB5hUyYzYyMjFhNTg3","salt":"2c6221a587","validation_code":"7jtwewln","active":"oui","mbre_reseau":"4","mbre_ss_reseau":"50","ouvert":"","created_at":"2018-04-28 03:03:19"},{"uid":"485","unique_id":"5b433e804944f6.47615378","firstname":"Espace pme","lastname":"Ilink world gabon","phone":"+24104840000","country_code":"Gabon","network":"SEEG","member_code":"SsEkSBsTGf","code_parrain":"SsEkSBsTGf","email":"jmangansongo.cfao@yahoo.fr","category":"hyper","balance":"0","latitude":"0.3871092","longitude":"9.4695813","encrypted_password":"IQOAy9A3DRV3QAdNf65v4M1ETzs1NjQzODRmZTQ5","salt":"564384fe49","validation_code":"6ceooxzq","active":"oui","mbre_reseau":"10","mbre_ss_reseau":"10","ouvert":"","created_at":"2018-07-09 10:52:48"},{"uid":"484","unique_id":"5b0d76f57aba46.66427027","firstname":"cap lopez","lastname":"capp","phone":"+24104633000","country_code":"Gabon","network":"Airtel Gabon","member_code":"capp","code_parrain":"0","email":"andymigoumbi@gmail.com","category":"hyper","balance":"0","latitude":"0.34599769999999996","longitude":"9.475185699999999","encrypted_password":"MMzceEJ3xu7Z6cd4wlquV2XmsM9lY2UwMmU1Nzg3","salt":"ece02e5787","validation_code":"enxuo6rg","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-05-29 15:51:17"},{"uid":"486","unique_id":"5b48979487add5.84543765","firstname":"Awenje","lastname":"Test pme","phone":"+24105050505","country_code":"Gabon","network":"Azur","member_code":"n0LmPR6eSI","code_parrain":"n0LmPR6eSI","email":"jmangansongo.cfao@yahoo.fr","category":"hyper","balance":"0","latitude":"0.387073","longitude":"9.4695361","encrypted_password":"uo\/RFvHOFfTbBg9viRp3SmSVDRo3M2RlYzllNmVj","salt":"73dec9e6ec","validation_code":"kcremdt8","active":"oui","mbre_reseau":"10","mbre_ss_reseau":"10","ouvert":"","created_at":"2018-07-13 12:14:12"},{"uid":"487","unique_id":"5b489d2f866197.33356679","firstname":"Awendje","lastname":"Pv test pme","phone":"+24104040404","country_code":"Gabon","network":"Azur","member_code":"qFn6Yv4QK0","code_parrain":"n0LmPR6eSI","email":"jmangansongo.cfao@yahoo.fr","category":"super","balance":"0","latitude":"0.3870732","longitude":"9.4695369","encrypted_password":"VoT6AL5Jiy0CgAGwPpH6wsy70otiZGI3MzM1ZDdh","salt":"bdb7335d7a","validation_code":"p5synini","active":"","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-13 12:38:07"},{"uid":"488","unique_id":"5b4fd5a0674ed4.76979509","firstname":"aca\u00e9","lastname":"capp","phone":"+24105000000","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"L6NW7tIx6T","code_parrain":"L6NW7tIx6T","email":"andymigoumbi@gmail.com","category":"hyper","balance":"0","latitude":"0.3456758","longitude":"9.475263199999999","encrypted_password":"8o+mqQBJoxGZwD8hi7\/4ajuc6is5ODczYTViYjdk","salt":"9873a5bb7d","validation_code":"ntsjdn0d","active":"oui","mbre_reseau":"2","mbre_ss_reseau":"100","ouvert":"","created_at":"2018-07-19 00:04:48"},{"uid":"489","unique_id":"5b4fd667e5b5d0.76056719","firstname":"aca\u00e9","lastname":"capp","phone":"+24105000001","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"DEkZc11TIA","code_parrain":"L6NW7tIx6T","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"0.3456817","longitude":"9.475263","encrypted_password":"BveqfmxxWmJRCHdDRV1xKL8Qilk4MTJlOGRiYzFi","salt":"812e8dbc1b","validation_code":"fuhdhb3o","active":"oui","mbre_reseau":"100","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-19 00:08:07"},{"uid":"491","unique_id":"5b4fdf09bc8a54.79355117","firstname":"Aca\u00e9","lastname":"Capp bandit","phone":"+24105000002","country_code":"Gabon","network":"Atlantique Telecom-Moov","member_code":"KpGnK9Out1","code_parrain":"DEkZc11TIA","email":"andymigoumbi@gmail.com","category":"geolocated","balance":"0","latitude":"0.34578120000000007","longitude":"9.4752383","encrypted_password":"pvsQks3UczviWjDIft5I4MRAN3A5YTJmMjU3NDE1","salt":"9a2f257415","validation_code":"smvxbhp6","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-19 00:44:57"},{"uid":"492","unique_id":"5b5364f42e3705.06499698","firstname":"Sabli\u00e8re ","lastname":"Test sab manga","phone":"+24106060606","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"SaZU3XdZF2","email":"jmangansongo.cfao@yahoo.fr","category":"hyper","balance":"0","latitude":"0.4922505","longitude":"9.3878277","encrypted_password":"9zfmyBoUJDzfl\/uMq78jQsNUObphODA5NmM5MzRi","salt":"a8096c934b","validation_code":"vwplvk5v","active":"oui","mbre_reseau":"10","mbre_ss_reseau":"10","ouvert":"","created_at":"2018-07-21 16:53:08"},{"uid":"495","unique_id":"5b537943a9a338.39947413","firstname":"andy","lastname":"Capp","phone":"+24101010101","country_code":"Gabon","network":"Libertis","member_code":"fddLRmBJSA","code_parrain":"SaZU3XdZF2","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"0.3457498","longitude":"9.475239799999999","encrypted_password":"Qtgm1R71YUmexvF0sj8Q+4UK31k3MjQxNTdlOWI3","salt":"724157e9b7","validation_code":"bhuf4ben","active":"","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 18:19:47"},{"uid":"494","unique_id":"5b536a1fcb6cd8.37165741","firstname":"Agondje","lastname":"Test sup","phone":"+24107070707","country_code":"Gabon","network":"Libertis","member_code":"g2DV9UDQQ0","code_parrain":"SaZU3XdZF2 ","email":"jmangansongo.cfao@yahoo.fr","category":"super","balance":"0","latitude":"0.4922505","longitude":"9.3878277","encrypted_password":"8vFPTjLeWQEjBfuX9TRnqpNGQUo2YTY1YWJhM2Zh","salt":"6a65aba3fa","validation_code":"lel6uaab","active":"","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 17:15:11"},{"uid":"496","unique_id":"5b537ac462dcd9.33247444","firstname":"andy","lastname":"Capp","phone":"+24101010102","country_code":"Gabon","network":"Libertis","member_code":"f1YUcsLLAT","code_parrain":"SaZU3XdZF2","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"0.3457498","longitude":"9.475239799999999","encrypted_password":"i053yn0+DLEmncod5VEqNQmohzA3NzI3Y2U2OWU4","salt":"7727ce69e8","validation_code":"ikickyg0","active":"","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 18:26:12"},{"uid":"497","unique_id":"5b537f18486d25.28571235","firstname":"capp","lastname":"capp","phone":"+24101010104","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"0.3456853","longitude":"9.475263499999999","encrypted_password":"WYUHlDEO2rK9JyTyYniv2bA8WYk5OGQyYzk2YzYw","salt":"98d2c96c60","validation_code":"pfahzuo3","active":"","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 18:44:40"},{"uid":"498","unique_id":"5b538121c8ddf7.71478987","firstname":"capp","lastname":"capp","phone":"+24101010103","country_code":"gabon","network":"Libertis","member_code":"Ghg4HQhnbc","code_parrain":"SaZU3XdZF2","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"1","longitude":"1","encrypted_password":"ZSTZezvMqawr6qDodYwr0\/ARD1lhYjMwZGNkMmEx","salt":"ab30dcd2a1","validation_code":"lepjbc4o","active":"non","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 18:53:21"},{"uid":"499","unique_id":"5b5382ea08c336.35099561","firstname":"capp","lastname":"capp","phone":"+24101010105","country_code":"gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"1","longitude":"1","encrypted_password":"arksNjrtoo5uVq1+ph6l0gBn01s5ZDA3ODA5Zjc5","salt":"9d07809f79","validation_code":"jkdloc0l","active":"non","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 19:00:58"},{"uid":"500","unique_id":"5b538309035710.09789164","firstname":"capp","lastname":"capp","phone":"+24107010105","country_code":"gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"1","longitude":"1","encrypted_password":"gTB67MaKF\/wI8gSLYz5GRgPwQg5kYjA3NmJhYzBj","salt":"db076bac0c","validation_code":"yfnhgq3p","active":"non","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 19:01:29"},{"uid":"501","unique_id":"5b53838c7ca3e9.70559369","firstname":"capp","lastname":"capp","phone":"+24107010108","country_code":"Gabon","network":"Libertis","member_code":"oT1s1rmV1g","code_parrain":"SaZU3XdZF2","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"0.3456853","longitude":"9.475263499999999","encrypted_password":"7FOhfXYdlyXOx1QRrAHCFQzMOWphOGUwYWFkOTcx","salt":"a8e0aad971","validation_code":"7budvdmu","active":"","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 19:03:40"},{"uid":"502","unique_id":"5b538964597e05.47305237","firstname":"Centre ville","lastname":"Test cafe sw","phone":"+24104050505","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"SaZU3XdZF2","email":"jmangansongo.cfao@yahoo.fr","category":"super","balance":"0","latitude":"0.3865131","longitude":"9.4446682","encrypted_password":"YRG0qyXmX2YCT4yjBdi74Fy5+QNmNzk3YWZhOGEy","salt":"f797afa8a2","validation_code":"fyxfw0vq","active":"oui","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-21 19:28:36"},{"uid":"504","unique_id":"5b54593715e429.29875327","firstname":"Sabliere","lastname":"Test mbre 1","phone":"+24104050506","country_code":"Gabon","network":"Libertis","member_code":"kU3OliCLZw","code_parrain":"FyukLhKMHZ","email":"jmangansongo.cfao@yahoo.fr","category":"geolocated","balance":"0","latitude":"0.4921505","longitude":"9.3877844","encrypted_password":"dA1L0rjz8S\/yWxPdVEZp4Fy2wQdkMmQzOTVlM2Yz","salt":"d2d395e3f3","validation_code":"4gmsneyz","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-07-22 10:15:19"},{"uid":"509","unique_id":"5b72c9d2e3f828.79979206","firstname":"IAI ","lastname":"Hanry ","phone":"+24106380748","country_code":"Gabon","network":"Libertis","member_code":"O0hJ8mw5BN","code_parrain":"1wFarYwO61","email":"nzaleh@gmail.com","category":"super","balance":"0","latitude":"0.3871776","longitude":"9.469158","encrypted_password":"seIYeENWrLlMQyzdOyevAhGEX7lkNDFlMTA1ODcz","salt":"d41e105873","validation_code":"forda1to","active":"oui","mbre_reseau":"300","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-08-14 12:23:46"},{"uid":"531","unique_id":"5b8cf6be98c480.12565560","firstname":"Andy","lastname":"Capp","phone":"+24107419793","country_code":"Gabon","network":"Airtel Gabon","member_code":"SaZU3XdZF2","code_parrain":"","email":"andymigoumbi@gmail.com","category":"super","balance":"0","latitude":"0.3458457","longitude":"9.4749545","encrypted_password":"p1N02aN3JpQLcHVuYOrPMs0Ayo9mNjBmYjVlZTQ3","salt":"f60fb5ee47","validation_code":"halq6igf","active":"0","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-03 08:54:22"},{"uid":"539","unique_id":"5baa59cd04c853.37441678","firstname":"freud","lastname":"freud","phone":"+24107175378","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"0","email":"fmaguendji@gmail.com","category":"super","balance":"0","latitude":"0.40552511","longitude":"9.47211229","encrypted_password":"yunN7PZkIKRKZzTFJmuHuE\/txGw1YTc0ZmU1YmE2","salt":"5a74fe5ba6","validation_code":"xeconl4t","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-25 15:52:45"},{"uid":"535","unique_id":"5ba904164fb451.22045180","firstname":"Pme spe","lastname":"Num test hanry","phone":"+24107916421","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"","email":"hanry.dev@gmail.com","category":"super","balance":"0","latitude":"0.3871824","longitude":"9.469383","encrypted_password":"49kVzvn82Oox5JRj0\/41+zKH3G5hZThhNTcxN2Fi","salt":"ae8a5717ab","validation_code":"zx8ndsqc","active":"","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-24 15:34:46"},{"uid":"540","unique_id":"5baa5a9f2067d9.79613619","firstname":"iuiuuiiu","lastname":"uiuiui","phone":"+24102284087","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"0","email":"fmaguendji@gmail.com","category":"super","balance":"0","latitude":"0.40552511","longitude":"9.47211229","encrypted_password":"y0DkpWG1TxzbcJ4n87H\/G2+jWpJhNTA2NGM4NGI3","salt":"a5064c84b7","validation_code":"3fgmiihd","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-25 15:56:15"},{"uid":"537","unique_id":"5ba92a7d2319f1.10031068","firstname":"Sabliere","lastname":"Test super geoloc jmn","phone":"+24105666666","country_code":"Gabon","network":"Libertis","member_code":"KMg1qPDCUz","code_parrain":"gUaaLfOPf6","email":"jmangansongo.cfao@yahoo.fr","category":"super","balance":"0","latitude":"0.49218","longitude":"9.3878417","encrypted_password":"RQRmSCVVmLhxOc50RsPIu40sUwNhNmJmMDE1NjBl","salt":"a6bf01560e","validation_code":"s6cigwax","active":"","mbre_reseau":"100","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-24 18:18:37"},{"uid":"543","unique_id":"5baa634eb13ff5.51903250","firstname":"frmfmlr","lastname":"freud","phone":"+24107300823","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"0","email":"fmaguendji@gmail.com","category":"super","balance":"0","latitude":"0.40552511","longitude":"9.47211229","encrypted_password":"yFvohWGzlr250zIBbUxEc3uKlvBmYjI3OWIzOWRm","salt":"fb279b39df","validation_code":"ywmxux6h","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-25 16:33:18"},{"uid":"544","unique_id":"5baa63f3869c88.59186204","firstname":"hjhjhj","lastname":"hjjhjj","phone":"+24102030104","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"","email":"fmaguendji@gmail.com","category":"super","balance":"0","latitude":"0.40552511","longitude":"9.47211229","encrypted_password":"a9S0mILdkw56ukOg1\/9dHTrN5HNkYThlZmQ3MmQw","salt":"da8efd72d0","validation_code":"b0nmjvon","active":"non","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-25 16:36:03"},{"uid":"545","unique_id":"5baba32d265294.74270935","firstname":"junior","lastname":"freud","phone":"+24102112233","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"","email":"fmaguendji@gmail.com","category":"super","balance":"0","latitude":"0.4071443","longitude":"9.46816059","encrypted_password":"WEtu9FaksQma9t1B9cTQbsyqvbFlOTNkODcxZTUw","salt":"e93d871e50","validation_code":"rzac6xsd","active":"oui","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-26 15:18:05"},{"uid":"546","unique_id":"5baba4c52bc023.31193216","firstname":"mmlml","lastname":"mlml","phone":"+24102000001","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"","email":"fmaguendji@gmail.com","category":"super","balance":"0","latitude":"0.4071443","longitude":"9.46816059","encrypted_password":"QzoFvri1\/wUKVD22G7uRwO+3\/0ljN2QzMTQ2M2M0","salt":"c7d31463c4","validation_code":"lp5gziyl","active":"oui","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-26 15:24:53"},{"uid":"547","unique_id":"5baba79956ee02.47503808","firstname":"ll","lastname":"ll","phone":"+24102000002","country_code":"Gabon","network":"Libertis","member_code":"SaZU3XdZF2","code_parrain":"","email":"fmaguendji@gmail.com","category":"super","balance":"0","latitude":"0.4071443","longitude":"9.46816059","encrypted_password":"udUn8\/IvCb36AAnQyELOd95xiaIxYmYzYzJiNmNh","salt":"1bf3c2b6ca","validation_code":"tbxloo5g","active":"oui","mbre_reseau":"10","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-26 15:36:57"},{"uid":"548","unique_id":"5babb2795bc0d8.57102702","firstname":"junior","lastname":"freud","phone":"+24105777777","country_code":"Gabon","network":"Libertis","member_code":"jTJaDEnfvJ","code_parrain":"gUaaLfOPf6","email":"fmaguendji@gmail.com","category":"super","balance":"0","latitude":"0.4071443","longitude":"9.46816059","encrypted_password":"uIvjyxExgNcoCYQ7fCnKDVT8QlkzZjE3NjI4MzA2","salt":"3f17628306","validation_code":"hzf3krtp","active":"oui","mbre_reseau":"100","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-26 16:23:21"},{"uid":"549","unique_id":"5babb3cf038271.02034755","firstname":"geo","lastname":"geolocated","phone":"+24105888888","country_code":"Gabon","network":"Libertis","member_code":"jTJaDEnfvJ","code_parrain":"0","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.4071443","longitude":"9.46816059","encrypted_password":"BuHBRSdnf8nuelnxJXG3Auea\/mg4MzY1N2M3Mzg3","salt":"83657c7387","validation_code":"c0nvzctx","active":"oui","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-26 16:29:03"},{"uid":"550","unique_id":"5bacfecadb56f7.87782223","firstname":"Freid","lastname":"Freud","phone":"+24102232323","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3696872","longitude":"9.4809146","encrypted_password":"xkRrwveLSZrU1Qfzmz2tnmHH\/S1jZmExNmI3ODRh","salt":"cfa16b784a","validation_code":"xq0vlsff","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-27 16:01:14"},{"uid":"551","unique_id":"5bad02cf3ee174.63991333","firstname":"com","lastname":"hh","phone":"+24102000005","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"fm.freudmaster@gmail.com","category":"geolocated","balance":"0","latitude":"0.41241879","longitude":"9.46768005","encrypted_password":"ZwyzDTu951g6jrR7VWiwQMpz+Ys0NzgxMTUxMmNi","salt":"47811512cb","validation_code":"yecxp0fy","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-27 16:18:23"},{"uid":"552","unique_id":"5bad0bcfac9785.72163654","firstname":"freud","lastname":"freud","phone":"+24102000008","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.4124188","longitude":"9.4676801","encrypted_password":"kCO2rk1YNYVi5AIA83wNRQxBnGBlMDE0NGU0MGMy","salt":"e0144e40c2","validation_code":"rutojp7u","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-27 16:56:47"},{"uid":"553","unique_id":"5bad0bf4c455c2.86470260","firstname":"freud","lastname":"freud","phone":"+24102999999","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.4124188","longitude":"9.4676801","encrypted_password":"xocPgA6d84sz7BJoG2bhOki+kAdhY2Y0MTA5ZmFi","salt":"acf4109fab","validation_code":"eii9poto","active":"","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-27 16:57:24"},{"uid":"554","unique_id":"5bae5e0d1fc180.17970476","firstname":"Wbfbx","lastname":"Fjdjx","phone":"+24102143556","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"p3GBr\/75si0sd9CUlLfeAFMn5xs5NzA1NzhiN2I2","salt":"970578b7b6","validation_code":"c1vvlood","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 16:59:57"},{"uid":"555","unique_id":"5bae605e9b5369.78877575","firstname":"Wbfbx","lastname":"Fjdjx","phone":"+24102143557","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"MkRENsZbbY\/giYDAgejAFTRPDeE4OTg0ZjYzOGE1","salt":"8984f638a5","validation_code":"h4cjbphf","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:09:50"},{"uid":"556","unique_id":"5bae612cbd2fe0.61441345","firstname":"Wbfbx","lastname":"Fjdjx","phone":"+24102143558","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"gQcRLDxeK5BerPBcX8Y7ZfGmqD4yOWUwMGU0MDNm","salt":"29e00e403f","validation_code":"kp0rvurt","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:13:16"},{"uid":"557","unique_id":"5bae6184401b34.80089615","firstname":"Wbfbx","lastname":"Fjdjx","phone":"+24102143559","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"XZgIXr4jDSWaSbqLiFR\/FTMYialjM2EzMTAxNDQ0","salt":"c3a3101444","validation_code":"1umhxzke","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:14:44"},{"uid":"558","unique_id":"5bae61c39fea34.76119467","firstname":"Wbfbx","lastname":"Fjdjx","phone":"+24102143560","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"so58edz8bgcCQXBdrlhvAsc+w8UzYjRlN2ZiZjZk","salt":"3b4e7fbf6d","validation_code":"av2vdkfl","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:15:47"},{"uid":"559","unique_id":"5bae623766a704.19715509","firstname":"Wbfbx","lastname":"Fjdjx","phone":"+24102143561","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"RLrej16im3kLtIuMH1EJUh5QmCY3YTI4OGU3Y2I4","salt":"7a288e7cb8","validation_code":"ti2wrjos","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:17:43"},{"uid":"560","unique_id":"5bae62b223a731.25848427","firstname":"Djffj","lastname":"Fjfj","phone":"+24102112200","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"A010+67I48\/Ktijdy1YHqo61GMo4OWNiZDJlYWNj","salt":"89cbd2eacc","validation_code":"tqrnb6is","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:19:46"},{"uid":"561","unique_id":"5bae6485971ce0.03179936","firstname":"Djffj","lastname":"Rjfjf","phone":"+24102112201","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"XHgS4GR+NJJuivOjTcT8HuxqVUVlOGJkOTMyNmQw","salt":"e8bd9326d0","validation_code":"mxdikf7x","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:27:33"},{"uid":"562","unique_id":"5bae64df8250c5.80938031","firstname":"Djffj","lastname":"Rjfjf","phone":"+24102112202","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"OpRIGAmQVTjfZldoKvhH5eUtuHpmMjU1YmM2Mjll","salt":"f255bc629e","validation_code":"pzul6for","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:29:03"},{"uid":"563","unique_id":"5bae65995f5dd8.85544354","firstname":"Djffj","lastname":"Rjfjf","phone":"+24102112203","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"MNwuM6BZ95x76FUcc4oL+EfSrA03YTFjZGFjYjc3","salt":"7a1cdacb77","validation_code":"zx7yuctn","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:32:09"},{"uid":"564","unique_id":"5bae667fad8dc3.24931429","firstname":"Djffj","lastname":"Rjfjf","phone":"+24102112204","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"pBHddIlKMxjW+\/orXZhhn2MNotUyN2IwZmJlMmY0","salt":"27b0fbe2f4","validation_code":"q2aezxks","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:35:59"},{"uid":"565","unique_id":"5bae66cfac9bf5.91643473","firstname":"Djffj","lastname":"Rjfjf","phone":"+24102112205","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"OBr2pK2Ydg9F1BlUWghpc+dLcrYzMjhhNzc5ODIy","salt":"328a779822","validation_code":"k8rrotvg","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:37:19"},{"uid":"566","unique_id":"5bae670b359d66.11188748","firstname":"Djffj","lastname":"Rjfjf","phone":"+24102112206","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"accvvf\/4PTu8XMEjAS58W9prrypmNWNjMmQ2NTRj","salt":"f5cc2d654c","validation_code":"jafvuq0g","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:38:19"},{"uid":"567","unique_id":"5bae696befb497.55309813","firstname":"Djffj","lastname":"Rjfjf","phone":"+24102112207","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"4soZyDzzDlhcgpJiEkKE6qI7NzgzOGU5NjlmNGNm","salt":"38e969f4cf","validation_code":"zadtk4ik","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:48:27"},{"uid":"568","unique_id":"5bae6a47dc8fe6.25358822","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112210","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"7kwXOAC0M9r1fqOD3C+BJPEi1LZhNWI4NTA0NDI2","salt":"a5b8504426","validation_code":"5nfblhgm","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:52:07"},{"uid":"569","unique_id":"5bae6ad930b8d7.58312185","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112211","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"N7kJHiJIk00mZJxAK9HZiPQgRDM5ZjJmNmZlMjE0","salt":"9f2f6fe214","validation_code":"oq4acjnz","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:54:33"},{"uid":"570","unique_id":"5bae6b24260638.69445468","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112212","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"bqLP3\/w+rYVmaB4GmuME4ntLth40ZWViY2JjNzVj","salt":"4eebcbc75c","validation_code":"vb2mnjhj","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:55:48"},{"uid":"571","unique_id":"5bae6bd534eaa1.86279994","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112213","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"HT9gi9hgjcCbo8M25KfxVS1b5rhjMDUwYmJkY2Mz","salt":"c050bbdcc3","validation_code":"aconm1ql","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 17:58:45"},{"uid":"572","unique_id":"5bae6c27b73940.78179299","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112214","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"cxQhfcZABUPjH0A\/BuDL1sTgCaZkNTI1Yjg3OGU2","salt":"d525b878e6","validation_code":"vami7kxy","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 18:00:07"},{"uid":"573","unique_id":"5bae6c73c94c46.89902110","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112215","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"8gp1T6gRAmc3Ml6JLdS7zra0sIFlMWFiNTY0Njdk","salt":"e1ab56467d","validation_code":"z2rflyzc","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 18:01:23"},{"uid":"574","unique_id":"5bae6cf0402df0.15818705","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112216","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"iB36UFS0526VyNrmeDs\/MhB2l6pkYmJiNGY2Mjk2","salt":"dbbb4f6296","validation_code":"kqfuii5x","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 18:03:28"},{"uid":"575","unique_id":"5bae6d614d4a91.19155075","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112217","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"MlCcFcTH8fWVcB+e5uG67oP80vQxMGQxZWI4NmVh","salt":"10d1eb86ea","validation_code":"olqitlg5","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 18:05:21"},{"uid":"576","unique_id":"5bae6eac9f7cb8.75773968","firstname":"Djxxj","lastname":"Djfjf","phone":"+24102112218","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"Fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.3699428","longitude":"9.4807305","encrypted_password":"1EmUo\/OUgVvz\/flVwECsTwCyAOJhMzJlM2UzMjc4","salt":"a32e3e3278","validation_code":"d8jktsbe","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-09-28 18:10:52"},{"uid":"579","unique_id":"5bb1f26e3aef45.26895657","firstname":"freud","lastname":"junior","phone":"24102112221","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"rJlOhElDJLod22Opti7XOEqIr3I2ZmZiYjc0YjFl","salt":"6ffbb74b1e","validation_code":"a0ajjnqv","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 10:09:50"},{"uid":"580","unique_id":"5bb1f2e744b7b8.89357463","firstname":"freud","lastname":"junior","phone":"24102112222","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"4H+qE68rlk6QjNklPK4GmTCO3Ik5OTVlMjMwMzgw","salt":"995e230380","validation_code":"j2latdlt","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 10:11:51"},{"uid":"581","unique_id":"5bb1f32cd2c948.70983733","firstname":"freud","lastname":"junior","phone":"24102112223","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"4iWu\/Q0hnaqLqn\/RhP5rG+siVnJiYTE0NTJkOGYz","salt":"ba1452d8f3","validation_code":"0zpxpdas","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 10:13:00"},{"uid":"582","unique_id":"5bb20e08e3eb78.01762373","firstname":"freud","lastname":"junior","phone":"24102112225","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"wW\/lJYX83phtQMW4CyChnJT2VeJlMzM1NmU2MDUx","salt":"e3356e6051","validation_code":"nepdmux0","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 12:07:36"},{"uid":"583","unique_id":"5bb20f08b7b833.49159057","firstname":"freud","lastname":"junior","phone":"24102112226","country_code":"Gabon","network":"Libertis","member_code":"hPYYmCdXip","code_parrain":"0","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"lk3vZuFeWbQRKTVttlryReGYQ4k2NDFjZTI3NWMx","salt":"641ce275c1","validation_code":"arecj1jd","active":"0","mbre_reseau":"2","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 12:11:52"},{"uid":"584","unique_id":"5bb2100d178aa7.23373692","firstname":"freud","lastname":"junior","phone":"24102112227","country_code":"Gabon","network":"Libertis","member_code":"eocd4psf","code_parrain":"hPYYmCdXip","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"LBhZjGGVUA2n6cJbCpoXEqauK2EzNjcyZjUxMTk1","salt":"3672f51195","validation_code":"eoavzjj7","active":"0","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 12:16:13"},{"uid":"585","unique_id":"5bb211dd3b8d06.51986333","firstname":"freud","lastname":"junior","phone":"24102112228","country_code":"Gabon","network":"Libertis","member_code":"vv1btdar","code_parrain":"hPYYmCdXip","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"By0BjUz5C+kVDsdav41s+OPvnfQwOTFhNzkzY2Y1","salt":"091a793cf5","validation_code":"mvvmii8j","active":"0","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 12:23:57"},{"uid":"586","unique_id":"5bb2130c6895d8.40457586","firstname":"freud","lastname":"junior","phone":"24102112229","country_code":"Gabon","network":"Libertis","member_code":"FXVje4UC6J","code_parrain":"hPYYmCdXip","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"FYHUbR6q63\/R3iY0fV4na5LJm00wZWQ0MGIyNjYx","salt":"0ed40b2661","validation_code":"mxcoaj0e","active":"0","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 12:29:00"},{"uid":"587","unique_id":"5bb22bda2aad28.79146398","firstname":"junior","lastname":"freud","phone":"+24102112227","country_code":"Gabon","network":"Libertis","member_code":"pm8ZFcw4Cy","code_parrain":"hPYYmCdXip","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0.43368316","longitude":"9.45986627","encrypted_password":"PXkvn05HrOijjrV2l\/oiVYpbPF8yNjYxMzhlNGE3","salt":"266138e4a7","validation_code":"cohuui7v","active":"oui","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 14:14:50"},{"uid":"588","unique_id":"5bb23fcb002da5.59565268","firstname":"freud","lastname":"junior","phone":"24102112230","country_code":"Gabon","network":"Libertis","member_code":"1nT530dxoO","code_parrain":"hPYYmCdXip","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"JeWQOVUlnhStxUGHCXqDbhMgDI5jMjg4NTdlODMw","salt":"c28857e830","validation_code":"pfd2ovxh","active":"0","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 15:39:55"},{"uid":"589","unique_id":"5bb240080d0560.90681724","firstname":"freud","lastname":"junior","phone":"+24102112231","country_code":"Gabon","network":"Libertis","member_code":"5DNF00wClQ","code_parrain":"hPYYmCdXip","email":"fmaguendji@gmail.com","category":"geolocated","balance":"0","latitude":"0,43368316","longitude":"9.45986627","encrypted_password":"NAZ7iNCDnFKLtCG43VBpvhvXLuI4MjEyODg0MWJj","salt":"82128841bc","validation_code":"qch1pygo","active":"0","mbre_reseau":"0","mbre_ss_reseau":"0","ouvert":"","created_at":"2018-10-01 15:40:56"}]} \ No newline at end of file diff --git a/webservice/persistences/Configuration.js b/webservice/persistences/Configuration.js new file mode 100755 index 00000000..929a594b --- /dev/null +++ b/webservice/persistences/Configuration.js @@ -0,0 +1,106 @@ +import {db} from './db'; +import {AsyncStorage} from 'react-native'; + +export default class Configuration{ + + constructor(){ + + } + async getCurrentLangue(){ + const da=await _getData() + if(da)resolve(da) + else reject(da) + + + } + + async getCurrentPasValue(){ + const pasObject=await this._getPasData() + if(pasObject){ + return pasObject.valeur_int; + }else return pasObject; + } + + async getCurrentPubValue(){ + const pasObject=await this._getPubData() + console.warn(pasObject) + if(pasObject){ + return pasObject.valeur_bool; + }else return pasObject; + } + async setPubActive(data){ + try { + if(data.pub){ + await AsyncStorage.setItem('pubObject', JSON.stringify(data.pub)); + db.update({"configuration.pub":{$exists:true}},{configuration:{pub:data.pub}},{upsert:true},(err,num,upsert)=>{ + console.log([err,num,upsert]) + }) + } + } catch (error) { + console.warn(error) + } + + } + _getPubData(){ + return new Promise(async (resolve,reject)=>{ + + try{ + const ty=await AsyncStorage.getItem('pubObject') + resolve(JSON.parse(ty)) + } catch(err){ + reject(err) + + } + + }) + } + setCurrentLangue(lang){ + this._storeData(lang) + db.update({"configuration.lang":{$exists:true}},{configuration:{lang:lang}},{upsert:true},(err,num,upsert)=>{ + console.log([err,num,upsert]) + }) + } + setCurrentPas=async (pas)=>{ + try { + await AsyncStorage.setItem('@config:pasObject', JSON.stringify(pas.pas)); + } catch (error) { + console.warn(error) + } + db.update({"configuration.pas":{$exists:true}},{configuration:{pas:pas.pas}},{upsert:true},(err,num,upsert)=>{ + console.log([err,num,upsert]) + }) + } + _getPasData= ()=>{ + return new Promise(async (resolve,reject)=>{ + + try{ + const ty=await AsyncStorage.getItem('@config:pasObject') + resolve(JSON.parse(ty)) + } catch(err){ + reject(err) + + } + + }) +} + _storeData = async (lang) => { + try { + await AsyncStorage.setItem('@config:lang', lang.value); + } catch (error) { + console.warn(error) + } + }; + _getData= ()=>{ + return new Promise(async (resolve,reject)=>{ + + try{ + const ty=await AsyncStorage.getItem('@config:lang') + resolve(ty) + } catch(err){ + reject(err) + + } + + }) +} +} \ No newline at end of file diff --git a/webservice/persistences/MarkerManager.js b/webservice/persistences/MarkerManager.js new file mode 100644 index 00000000..eb5fc8dd --- /dev/null +++ b/webservice/persistences/MarkerManager.js @@ -0,0 +1,74 @@ +const Realm = require('realm'); +let geolib=require("geolib") + +import GeolocatedPoint from './../../model/GeolocatedPoint' +import Network from './../../model/Network' +import { getLocalMarkers } from '../MapService'; +GeolocatedPointSchema={ + name:"GeolocatedPoint", + properties:{ + id:'int', + firstname:'string?', + lastname:'string', + adresse:'string', + longitude:'float', + latitude:'float', + phone:'string?', + solde:'int', + country:'string', + category:'string', + email:'string', + etat:'int' , + code_parrain:'string', + code_dial:'string', + network_id:'int', + transactionNumber:'string?', + code_membre:'string', + network:'string' + } +} +export default class MarkerManager { + realm + constructor(){ + this.realm=new Realm({schema: [GeolocatedPointSchema]}) + } + getLocalMarkers(){ + return this.realm.objects('GeolocatedPoint').slice(0,3); +} +async getLocalMarkersFromDistance(distance:5,location){ + return new Promise((resolve,reject)=>{ + let points=getLocalMarkers(); + return points.filter((mark,index)=>{ + const position={longitude:parseFloat(mark.longitude),latitude:parseFloat(mark.latitude)} + return geolib.getDistance(position,location)<=(distance*1000) + }) + }); +} +close(){ + this.realm.close(); +} + async insertMarkers(markers:Array){ + return new Promise((resolve,reject)=>{ + var count=0 + let rejet=[] + markers.forEach((value,index)=>{ + try { + + this.realm.write(() => { + this.realm.create('GeolocatedPoint',value); + }); + count++ + } catch (e) { + console.log("Error on creation"); + reject(e) + rejet.push(value) + } + }) + + resolve({row:count,total:markers.length,rejet:rejet}) + + }) + + + } +} \ No newline at end of file diff --git a/webservice/persistences/db.js b/webservice/persistences/db.js new file mode 100755 index 00000000..3f5f7bd1 --- /dev/null +++ b/webservice/persistences/db.js @@ -0,0 +1,7 @@ +const dbname="ILinklocal" +const dbmarker="ilinksmarkers" +var datastore =require('react-native-local-mongodb'); +const items = {}; + +export const db = new datastore({ filename: dbname, autoload: true }); +export const dbmarkers = new datastore({ filename: dbmarkers, autoload: true });