98 lines
2.6 KiB
JavaScript
98 lines
2.6 KiB
JavaScript
import { create } from 'apisauce'
|
|
import Config from 'src/utils/Config'
|
|
import DeviceInfo from 'react-native-device-info'
|
|
import { Alert, Platform } from 'react-native'
|
|
|
|
// import { strings as t } from '../i18n'
|
|
// import { userLogout } from 'src/redux/app/action'
|
|
// import I18n from 'i18n-js'
|
|
|
|
let store
|
|
|
|
const Api = create({
|
|
baseURL: Config.API_BASE_URL_PROD,
|
|
headers: {
|
|
'X-Frame-Options': 'sameorigin',
|
|
'X-App-Version': DeviceInfo.getVersion(),
|
|
'X-Device-OS': Platform.OS,
|
|
'X-Device-Version': Platform.Version,
|
|
}
|
|
})
|
|
|
|
export function setBaseUrl (baseUrl) {
|
|
Api.setBaseURL(baseUrl)
|
|
}
|
|
|
|
export function setBaseUrlByServerMode (mode) {
|
|
Api.setBaseURL(mode === 'production' ? Config.API_BASE_URL_PROD : Config.API_BASE_URL_DEV)
|
|
}
|
|
|
|
DeviceInfo.getDeviceName().then(name => {
|
|
Api.setHeader('X-Device-Name', name)
|
|
})
|
|
|
|
Api.addRequestTransform(request => {
|
|
// request.headers['X-App-Locale'] = I18n.locale
|
|
})
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
Api.addRequestTransform(request => {
|
|
console.info('--> [' + request.method + '] ' + Api.getBaseURL() + request.url, request.params, request.data)
|
|
console.info('header --' + request.url + ' -- ', request.headers)
|
|
})
|
|
Api.addMonitor(response => {
|
|
console.info('<-- ' + response.status + ' --- ' + response.config.url, response)
|
|
})
|
|
}
|
|
|
|
// error alert monitor
|
|
Api.addMonitor(response => {
|
|
if (!response.ok) {
|
|
switch (response.problem) {
|
|
case 'CONNECTION_ERROR':
|
|
case 'NETWORK_ERROR':
|
|
case 'TIMEOUT_ERROR':
|
|
// Alert.alert('error_internet_title', 'error_internet_message', [{text: 'ok'}])
|
|
break
|
|
case 'SERVER_ERROR':
|
|
case 'CANCEL_ERROR':
|
|
case 'CLIENT_ERROR': // 4XX
|
|
/*if (response.status === 401) {
|
|
Alert.alert('Session timeout', 'Please login again to continue using application', [
|
|
{
|
|
text: 'ok',
|
|
onPress: () => {
|
|
// NavigationService.navigate('AppLoading')
|
|
}
|
|
}
|
|
], { cancelable: false })
|
|
return
|
|
}*/
|
|
// Alert.alert(null, 'error_getting_data', [{text: 'ok'}])
|
|
break
|
|
}
|
|
}
|
|
})
|
|
|
|
export function setStore (reduxStore) {
|
|
store = reduxStore
|
|
}
|
|
|
|
export function setToken (token) {
|
|
Api.setHeader('Authorization', 'Bearer ' + token)
|
|
}
|
|
|
|
export function setLanguage (languageCode) {
|
|
Api.setHeader('language', languageCode)
|
|
}
|
|
|
|
export function clearToken () {
|
|
Api.deleteHeader('Authorization')
|
|
}
|
|
|
|
export function setLocation (lat, lng) {
|
|
Api.setHeader('X-Current-Latitude', lat.toString() || '0.0')
|
|
Api.setHeader('X-Current-Longitude', lng.toString() || '0.0')
|
|
}
|
|
|
|
export default Api
|