You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-csc-ui/src/api/conversations.js

159 lines
4.3 KiB

import { saveAs } from 'file-saver'
import _ from 'lodash'
import {
getIncomingCallBlocking,
getOutgoingCallBlocking
} from 'src/api/call-blocking'
import {
LIST_DEFAULT_ROWS,
apiDownloadFile,
getList,
httpApi
} from 'src/api/common'
export function getConversations (options) {
return new Promise((resolve, reject) => {
const type = _.get(options, 'type', null)
const from = _.get(options, 'from', '')
const to = _.get(options, 'to', '')
const direction = _.get(options, 'direction', '')
const subscriberId = _.get(options, 'subscriberId')
const noCount = _.get(options, 'no_count')
const params = {
order_by: _.get(options, 'order_by', 'timestamp'),
order_by_direction: 'desc',
tz: 'UTC',
page: _.get(options, 'page', 1),
rows: _.get(options, 'rows', LIST_DEFAULT_ROWS)
}
if (noCount !== null) {
params.no_count = noCount
}
if (subscriberId !== null) {
params.subscriber_id = subscriberId
}
if (type !== null) {
params.type = type
}
if (from !== '') {
params.from = from
}
if (to !== '') {
params.to = to
}
if (direction !== '') {
params.direction = direction
}
getList({
path: 'api/conversations/',
root: '_embedded.ngcp:conversations',
params,
all: false
}).then((list) => {
resolve(list)
}).catch((err) => {
reject(err)
})
})
}
export function downloadCsv (options) {
const apiGetOptions = {
resource: 'conversations',
config: {
headers: {
Accept: 'text/csv',
'Cache-Control': 'no-cache, no-store, must-revalidate'
},
params: {
...options
}
}
}
const defaultFileName = apiGetOptions.config.params.type ? `conversations-${apiGetOptions.config.params.type}.csv` : 'conversations.csv'
return apiDownloadFile({
apiGetOptions,
defaultFileName,
defaultContentType: 'text/csv'
})
}
export function downloadVoiceMail (id) {
return new Promise((resolve, reject) => {
httpApi.get(`api/voicemailrecordings/${id}`, { responseType: 'blob' })
.then((res) => {
return res.data
}).then((voicemail) => {
saveAs((voicemail), `voicemail-${id}.wav`)
resolve()
}).catch((err) => {
reject(err)
})
})
}
export function downloadFax (id) {
return new Promise((resolve, reject) => {
httpApi.get(`api/faxrecordings/${id}`, { responseType: 'blob' })
.then((res) => {
return res.data
}).then((fax) => {
saveAs((fax), `fax-${id}.tif`)
resolve()
}).catch((err) => {
reject(err)
})
})
}
export function playVoiceMail (options) {
return new Promise((resolve, reject) => {
const params = { format: options.format }
httpApi.get(`api/voicemailrecordings/${options.id}`, { params, responseType: 'blob' })
.then((res) => {
resolve(URL.createObjectURL(res.data))
}).catch((err) => {
reject(err)
})
})
}
export function getIncomingBlocked (id) {
return new Promise((resolve, reject) => {
getIncomingCallBlocking(id).then((list) => {
resolve(list)
}).catch((err) => {
reject(err)
})
})
}
export function getOutgoingBlocked (id) {
return new Promise((resolve, reject) => {
getOutgoingCallBlocking(id).then((list) => {
resolve(list)
}).catch((err) => {
reject(err)
})
})
}
export async function deleteVoicemail (id) {
const res = await httpApi.delete(`api/voicemails/${id}`)
return res.status >= 200
}
export async function getAllCallsOrVoicemails (options) {
return await getList({
resource: 'conversations',
params: options
})
}
export async function deleteFax (id) {
const res = await httpApi.delete(`api/faxes/${id}`)
return res.status >= 200
}