Add geolocation and country fetching features; update API endpoints
This commit is contained in:
parent
1fdda31b81
commit
71f6af4766
|
@ -102,8 +102,11 @@ export default class CreateUserStep2 extends Component {
|
|||
|
||||
retreiveCodeInformation() {
|
||||
const membre = this.state.user.member;
|
||||
console.log("membre===>> ", membre);
|
||||
console.log("1===>>");
|
||||
return new Promise(async (resolve, reject) => {
|
||||
let datas = await getCodeInformation(membre)
|
||||
console.log("datas===>> ", datas);
|
||||
resolve(datas)
|
||||
})
|
||||
|
||||
|
@ -145,9 +148,10 @@ export default class CreateUserStep2 extends Component {
|
|||
if (indicatif) {
|
||||
let result = {}
|
||||
try {
|
||||
console.log("RESULTAT1===>> ", indicatif);
|
||||
result = await this.retreiveCodeInformation()
|
||||
const {category} = result
|
||||
console.log("RESULTAT ", result);
|
||||
console.log("RESULTAT===>> ", result);
|
||||
this.setState({result});
|
||||
} catch (e) {
|
||||
result = false
|
||||
|
@ -178,7 +182,7 @@ export default class CreateUserStep2 extends Component {
|
|||
console.log("need enable")
|
||||
getCountryNetwork(indicatif).then((result) => {
|
||||
this.reseaux = [];
|
||||
let networks = result;
|
||||
let networks = result;;
|
||||
|
||||
for (let prop in networks) {
|
||||
if (networks[prop] !== "") {
|
||||
|
@ -246,7 +250,7 @@ export default class CreateUserStep2 extends Component {
|
|||
}
|
||||
|
||||
componentDidMount() {
|
||||
|
||||
this.fetchCountries();
|
||||
this.mounted = true;
|
||||
const {type} = this.props;
|
||||
|
||||
|
@ -260,6 +264,93 @@ export default class CreateUserStep2 extends Component {
|
|||
}
|
||||
|
||||
}
|
||||
getCountryByLocation = async (countriesArray) => {
|
||||
try {
|
||||
// Vérification des permissions Android
|
||||
if (Platform.OS === 'android') {
|
||||
const granted = await PermissionsAndroid.request(
|
||||
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION
|
||||
);
|
||||
|
||||
if (granted !== PermissionsAndroid.RESULTS.GRANTED) {
|
||||
return this.findDefaultCountry(countriesArray);
|
||||
}
|
||||
}
|
||||
|
||||
// Récupération de la position
|
||||
const position = await new Promise((resolve, reject) => {
|
||||
Geolocation.getCurrentPosition(resolve, reject, GEOLOCATION_OPTIONS);
|
||||
});
|
||||
// Reverse geocoding
|
||||
const geocodeResponse = await getPositionInformation(position.coords);
|
||||
const countryComponent = geocodeResponse.results[0]?.address_components?.find(
|
||||
c => c.types.includes("country")
|
||||
);
|
||||
|
||||
if (!countryComponent) return this.findDefaultCountry(countriesArray);
|
||||
|
||||
// Recherche dans le tableau
|
||||
const foundCountry = countriesArray.find(
|
||||
country => country.code_country === countryComponent.short_name
|
||||
);
|
||||
return foundCountry || this.findDefaultCountry(countriesArray);
|
||||
|
||||
} catch (error) {
|
||||
console.error('Erreur de géolocalisation:', error);
|
||||
return this.findDefaultCountry(countriesArray);
|
||||
}
|
||||
};
|
||||
|
||||
// Fonction helper pour trouver le Cameroun
|
||||
findDefaultCountry = (countriesArray) => {
|
||||
return countriesArray.find(c => c.code_country === "CM") || countriesArray[0];
|
||||
};
|
||||
fetchCountries = async () => {
|
||||
try {
|
||||
const response = await getListCountriesActive();
|
||||
|
||||
let countriesData = [];
|
||||
if (response.error === "error" && response.error_msg) {
|
||||
const jsonMatch = response.error_msg.match(/\[.*\]/);
|
||||
if (jsonMatch) {
|
||||
countriesData = JSON.parse(jsonMatch[0]);
|
||||
}
|
||||
}else{
|
||||
countriesData = response;
|
||||
}
|
||||
|
||||
|
||||
const formattedCountries = countriesData.map(country => ({
|
||||
label: country.name,
|
||||
value: country.name,
|
||||
code_dial: country.code_dial,
|
||||
code_country: country.code_country
|
||||
}));
|
||||
const detectedCountry = await this.getCountryByLocation(formattedCountries);
|
||||
this.setState({
|
||||
country: formattedCountries,
|
||||
countries: formattedCountries[0],
|
||||
isLoading: false,
|
||||
selectedCountry: detectedCountry, // Sélectionne le premier pays par défaut
|
||||
indicatif: detectedCountry?.code_dial
|
||||
});
|
||||
this.getNetworks(detectedCountry.code_dial);
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération des pays:', error);
|
||||
this.setState({ isLoading: false });
|
||||
}
|
||||
};
|
||||
|
||||
handleCountryChange = (value, index, data) => {
|
||||
const selectedCountry = this.state.countries[index];
|
||||
this.setState({
|
||||
selectedCountry: selectedCountry,
|
||||
indicatif: selectedCountry.code_dial,
|
||||
network: null
|
||||
});
|
||||
this.getNetworks(selectedCountry.code_dial);
|
||||
|
||||
};
|
||||
|
||||
async requestGeolocationPermission() {
|
||||
try {
|
||||
|
@ -393,7 +484,7 @@ export default class CreateUserStep2 extends Component {
|
|||
latitude: position.coords.latitude,
|
||||
longitude: position.coords.longitude
|
||||
}, () => {
|
||||
console.log("latitude", this.state.latitude);
|
||||
|
||||
});
|
||||
if (this.result.child) {
|
||||
this.setState({disableNetwork: true});
|
||||
|
@ -437,92 +528,147 @@ export default class CreateUserStep2 extends Component {
|
|||
|
||||
}
|
||||
|
||||
treatPosition(position) {
|
||||
const myLastPosition = this.state.myPosition;
|
||||
// treatPosition(position) {
|
||||
// console.log("debugTreatPosition1===>>")
|
||||
// const myLastPosition = this.state.myPosition;
|
||||
// const myPosition = position.coords;
|
||||
|
||||
// if (!isEqual(myPosition, myLastPosition)) {
|
||||
// console.log("debugTreatPosition2===>>")
|
||||
// getPositionInformation(myPosition).then((response) => {
|
||||
// console.log("debugTreatPosition3===>>", response)
|
||||
// if (response.results !== undefined) {
|
||||
// console.log("debugTreatPosition4===>>")
|
||||
// if (response.results.length > 0) {
|
||||
// console.log("debugTreatPosition5===>>")
|
||||
// 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++) {
|
||||
// console.log("debugTreatPositionX===>>",JSON.stringify(results))
|
||||
// if (results[0].address_components[i].types[j] === "country") {
|
||||
// console.log("debugTreatPosition6===>>")
|
||||
// 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") {
|
||||
// console.log("debugTreatPosition7===>>")
|
||||
// const name = results[0].address_components[i].short_name;
|
||||
// this.setState({townName: name});
|
||||
// getTownInformationName(name).then((result) => {
|
||||
// console.log("debugTreatPosition8===>>",result)
|
||||
// let town = null;
|
||||
// if (result instanceof Array) {
|
||||
// town = result[0];
|
||||
// } else
|
||||
// town = result;
|
||||
// console.log("Mise a jour getTownInformationNametown===>>", town);
|
||||
// this.setState({town: town});
|
||||
// })
|
||||
// } else {
|
||||
// console.log("debugTreatPosition10===>>")
|
||||
// getDefaultTown().then(result => {
|
||||
// getTownInformationName(result.default_locality).then((resultTowwn) => {
|
||||
// let town = null;
|
||||
// if (resultTowwn instanceof Array) {
|
||||
// town = resultTowwn[0];
|
||||
// } else
|
||||
// town = resultTowwn;
|
||||
// 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.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)
|
||||
// }
|
||||
// }
|
||||
|
||||
// }
|
||||
treatPosition = async (position) => {
|
||||
const myPosition = position.coords;
|
||||
if (isEqual(myPosition, this.state.myPosition)) return;
|
||||
|
||||
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})
|
||||
try {
|
||||
const { results = [] } = await getPositionInformation(myPosition);
|
||||
if (!results.length) return;
|
||||
|
||||
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});
|
||||
})
|
||||
const comps = results[0].address_components;
|
||||
const country = comps.find(c => c.types.includes("country"));
|
||||
const locality = comps.find(c => c.types.includes("locality"));
|
||||
|
||||
if (country) {
|
||||
this.setState({ shortCountry: country.short_name,
|
||||
longCountry : country.long_name });
|
||||
}
|
||||
|
||||
let townName, townInfo;
|
||||
|
||||
if (locality) {
|
||||
townName = locality.short_name;
|
||||
townInfo = await getTownInformationName(townName);
|
||||
} else {
|
||||
getDefaultTown().then(result => {
|
||||
getTownInformationName(result.default_locality).then((resultTowwn) => {
|
||||
let town = null;
|
||||
if (resultTowwn instanceof Array) {
|
||||
town = resultTowwn[0];
|
||||
} else
|
||||
town = resultTowwn;
|
||||
this.setState({town: town});
|
||||
const def = await getDefaultTown();
|
||||
townName = def.default_locality;
|
||||
townInfo = await getTownInformationName(townName);
|
||||
}
|
||||
|
||||
this.setState({
|
||||
townName,
|
||||
town: Array.isArray(townInfo) ? townInfo[0] : townInfo
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
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"}]);
|
||||
|
||||
}
|
||||
})
|
||||
// autres mises à jour (carte, myPosition, réseaux, …)
|
||||
this.setState({ myPosition });
|
||||
this.mapRef?.animateToCoordinate(myPosition, 1000);
|
||||
this.mapRef?.animateToRegion({ ...myPosition,
|
||||
latitudeDelta: 0.03, longitudeDelta: 0.01 }, 1000);
|
||||
|
||||
} catch (e) {
|
||||
// gestion d'erreur
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}).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;
|
||||
|
@ -531,10 +677,10 @@ export default class CreateUserStep2 extends Component {
|
|||
}
|
||||
|
||||
renderUserGeoAccount() {
|
||||
|
||||
const { selectedCountry } = this.state;
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
{this.prepareModal()}
|
||||
{/* {this.prepareModal()} */}
|
||||
<View style={{flexDirection: 'row'}}>
|
||||
<Icon.Button name={"keyboard-backspace"}
|
||||
color={"white"}
|
||||
|
@ -556,7 +702,27 @@ export default class CreateUserStep2 extends Component {
|
|||
paddingRight: 20,
|
||||
backgroundColor: 'white'
|
||||
}}>
|
||||
<Dropdown
|
||||
<Fumi
|
||||
iconClass={FontAwesomeIcon}
|
||||
label={I18n.t('COUNTRY_CHOICE')}
|
||||
// value={this.state.countries}
|
||||
value={selectedCountry ? `${selectedCountry.label}` : ''}
|
||||
enabled={false}
|
||||
editable={false}
|
||||
onChangeText={(value, index, data) => {
|
||||
const selectedCountry = this.state.countries[index];
|
||||
this.setState({
|
||||
countries: selectedCountry.countries,
|
||||
indicatif: selectedCountry.code_dial,
|
||||
network: null
|
||||
});
|
||||
this.getNetworks(selectedCountry.code_dial);
|
||||
}}
|
||||
|
||||
/>
|
||||
|
||||
{console.log("town===>>",this.state.town)}
|
||||
{/* <Dropdown
|
||||
label={I18n.t('COUNTRY_CHOICE')}
|
||||
data={this.state.countries}
|
||||
useNativeDriver={true}
|
||||
|
@ -574,7 +740,7 @@ export default class CreateUserStep2 extends Component {
|
|||
labelExtractor={(value) => {
|
||||
return value.name
|
||||
}}
|
||||
/>
|
||||
/> */}
|
||||
</View>
|
||||
<Animatable.View ref={(comp) => {
|
||||
this.numanim = comp
|
||||
|
@ -767,7 +933,7 @@ export default class CreateUserStep2 extends Component {
|
|||
|
||||
</ScrollView>
|
||||
<MaterialDialog
|
||||
title={'Selecionner un reseau'}
|
||||
title={'Selectionner un reseau'}
|
||||
items={LONG_LIST.map((row, index) => ({value: row, label: row}))}
|
||||
visible={this.state.networksinglePickerVisible}
|
||||
selectedItem={this.state.singlePickerSelectedItem}
|
||||
|
@ -1018,8 +1184,9 @@ export default class CreateUserStep2 extends Component {
|
|||
data['category'] = user.category;
|
||||
|
||||
data['active'] = '0';
|
||||
console.log("data===>>",data);
|
||||
createGeolocatedAccount(data).then((result) => {
|
||||
console.log(result);
|
||||
console.log("result===>>",result);
|
||||
if (result.success !== undefined && result.success === 1) {
|
||||
const message = result.category === 'super' ? I18n.t("HYPERVISOR_MUST_VALIDATE_SUPERVISOR")
|
||||
: I18n.t("ACCOUNT_SUCCESSFULL_CREATED")
|
||||
|
|
|
@ -22,9 +22,10 @@ var serializeJSON = function (data) {
|
|||
|
||||
export const getCodeInformation = (code) => {
|
||||
var data = {
|
||||
"tag": 'member', "type": "agen_info_code", "code": code,
|
||||
"tag": 'member', "type": "agen_info_code", "code": "+237",
|
||||
"lang": I18n.currentLocale()
|
||||
};
|
||||
console.log("2===>>");
|
||||
|
||||
return queryData(data, memberActionUrl)
|
||||
}
|
||||
|
@ -41,8 +42,7 @@ function queryAuth(data) {
|
|||
}
|
||||
|
||||
async function queryData(data, url) {
|
||||
console.warn("REQUEST URL", url);
|
||||
console.warn("REQUEST BODY", JSON.stringify(data));
|
||||
console.log("3===>>",url);
|
||||
data["lang"] = I18n.currentLocale();
|
||||
data["isTest"] = isDebugMode
|
||||
/* await axios({
|
||||
|
@ -60,7 +60,7 @@ async function queryData(data, url) {
|
|||
console.warn("SERVER RESPONSE ERROR", error);
|
||||
return {"error": "error", "error_msg": error}
|
||||
});*/
|
||||
|
||||
console.log("Ici data===>>", data)
|
||||
let response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
|
@ -78,6 +78,7 @@ async function queryData(data, url) {
|
|||
console.warn("SERVER RESPONSE ERROR", responseText);
|
||||
return {"error": "error", "error_msg": responseText}
|
||||
}
|
||||
console.log("responseJson===>> ", responseJson);
|
||||
return responseJson;
|
||||
|
||||
|
||||
|
|
|
@ -1,24 +1,11 @@
|
|||
export const isDebugMode = false
|
||||
//base url test
|
||||
//export const baseUrl = "https://ilink-app.com/mobilebackendbeta"
|
||||
//base url production
|
||||
//export const baseUrl = "https://ilink-app.com/mobilebackend";
|
||||
//export const baseUrl = "https://test.ilink-app.com/mobilebackendtest";
|
||||
//export const baseUrl = "http://test.ilink-app.com:8080/mobilebackendtest";
|
||||
//const baseUrl = "https://ilink-app.com/mobilebackendtest2"
|
||||
|
||||
export const baseUrl = "https://test.ilink-app.com:8080/mobilebackend";
|
||||
export const testBaseUrl = "https://test.ilink-app.com";
|
||||
export const testBaseUrlWithPort = "https://test.ilink-app.com:8086";
|
||||
|
||||
/*export const baseUrl = "https://ilink-app.com/mobilebackend";
|
||||
export const testBaseUrl = "https://ilink-app.com:8080";*/
|
||||
|
||||
/* export const baseUrl = "https://preprod.ilink-app.com:8080/mobilebackend";
|
||||
export const testBaseUrl = "https://preprod.ilink-app.com"; */
|
||||
|
||||
//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';
|
||||
|
|
|
@ -5,7 +5,7 @@ import I18n from 'react-native-i18n'
|
|||
import {readUser} from './AuthApi'
|
||||
import {isDebugMode, MARKER_URL} from "./IlinkConstants";
|
||||
|
||||
let GEOCODDING_URL = "https://ilink-app.com:8080/geocode";
|
||||
let GEOCODDING_URL = "https://test.ilink-app.com/geocode";
|
||||
let API_KEY = "AIzaSyCQY0rwMM9Pn9XWt5F6YLhGoez_bU1IGtc"
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue