/home/ivoiecob/email.hirewise-va.com/modules/AdminPanelWebclient/vue/src/utils/web-api.js
import _ from 'lodash'
import axios from 'axios'
import { saveAs } from 'file-saver'
import VueCookies from 'vue-cookies'
import { generateUUID } from 'src/utils/common'
import errors from 'src/utils/errors'
import urlUtils from 'src/utils/url'
import notification from 'src/utils/notification'
import { i18n } from 'boot/i18n'
import core from 'src/core'
import eventBus from 'src/event-bus'
import store from 'src/store'
export default {
sendRequest: function ({ moduleName, methodName, parameters, signal }) {
return new Promise((resolve, reject) => {
const unknownError = {
ErrorCode: 0,
Module: moduleName,
}
const silentError = {
ErrorCode: errors.getSilentErrorCode(),
Module: moduleName,
}
eventBus.$emit('webApi::Request', { moduleName, methodName, parameters })
const postData = {
Module: moduleName,
Method: methodName,
}
if (!_.isEmpty(parameters)) {
postData.Parameters = JSON.stringify(parameters)
}
// If a user is also logged in the browser, then his AppData will be received and the login screen will be displayed,
// because the user is not a superadmin.
const headers = { 'X-Client': 'WebClient' }
let deviceId = VueCookies.get('DeviceId')
if (!deviceId) {
deviceId = generateUUID()
VueCookies.set('DeviceId', deviceId, { expires: 365 })
}
headers['X-DeviceId'] = deviceId
axios({
method: 'post',
url: urlUtils.getApiHost() + '?/Api/',
data: new URLSearchParams(postData),
headers,
signal,
withCredentials: true,
}).then(
(response) => {
const isOkResponse = response?.status === 200 && !!response?.data
if (isOkResponse) {
eventBus.$emit('webApi::Response', {
moduleName,
methodName,
parameters,
response: response.data,
})
const result = response.data.Result
if (result === undefined) {
if (response.data.ErrorCode || response.data.ErrorMessage || response.data.SubscriptionsResult) {
if (
store.getters['user/isUserSuperAdminOrTenantAdmin'] &&
errors.isAuthError(response.data.ErrorCode) &&
methodName !== 'Logout'
) {
core.logout()
}
if (errors.isSystemError(response.data.ErrorCode)) {
notification.showError(i18n.global.tc('COREWEBCLIENT.ERROR_UNKNOWN'))
} else {
reject(response.data)
}
} else {
reject(unknownError)
}
} else {
resolve(result)
}
} else {
eventBus.$emit('webApi::Response', {
moduleName,
methodName,
parameters,
response: unknownError,
})
reject(unknownError)
}
},
(error) => {
eventBus.$emit('webApi::Response', {
moduleName,
methodName,
parameters,
response: error.code === 'ERR_CANCELED' ? silentError : unknownError,
})
reject(error.code === 'ERR_CANCELED' ? silentError : unknownError)
}
)
})
},
downloadExportFile: function ({ moduleName, methodName, parameters, fileName, format }) {
return new Promise((resolve, reject) => {
const headers = {
'Content-Type': 'multipart/form-data',
}
const data = new FormData()
data.set('Module', moduleName)
data.set('Method', methodName)
data.set('Parameters', JSON.stringify(parameters))
if (format) {
data.set('Format', format)
}
axios({
method: 'post',
url: urlUtils.getApiHost() + '?/Api/',
data: data,
headers: headers,
withCredentials: true,
}).then((oResponse) => {
if (oResponse) {
let resData = oResponse.data.split('\n')
resData.pop()
resData = resData.join('\n')
const oBlob = new Blob([resData])
saveAs(oBlob, fileName)
resolve()
} else {
reject()
}
})
})
},
}