Files
socialhose-php/frontend/app/api/analytics/createAnalytics.js
T
2022-12-09 08:36:26 -06:00

166 lines
4.3 KiB
JavaScript

import { sum } from 'lodash'
import { convertlocaltoUTC } from '../../common/helper'
import { get, post, put } from '../httpInterceptor/httpInterceptor'
const formatValues = (data) => {
let newObj = {}
for (const [key, value] of Object.entries(data)) {
for (let v in value) {
newObj[v] = newObj[v]
? { ...newObj[v], [key]: value[v] }
: { [key]: value[v] }
}
}
Object.keys(data).map((dt) => {
for (let item in newObj) {
newObj[item][dt] = newObj[item][dt] || 0
}
})
const obj = Object.keys(newObj).map((v) => ({
name: v,
data: newObj[v]
}))
return obj
}
export const addEditAnalyticsAPI = async (data, id) => {
let url = `/analysis${id ? `/${id}` : ''}`
const bodyObj = {}
// bodyObj.filters = [] // need changes
bodyObj.filters = {
date: {
type: 'between',
start: convertlocaltoUTC(data.startDate, 'YYYY-MM-DD'),
end: convertlocaltoUTC(data.endDate, 'YYYY-MM-DD')
}
}
bodyObj.feeds = data.feeds.map((val) => val.id)
const func = id ? put : post
const res = await func(url, bodyObj)
console.log('API Response :: addEditAnalytics ::: ', res)
return res
}
export const getAnalyticDetailsAPI = async (id) => {
let url = `/analysis/${id}`
const res = await get(url)
console.log('API Response :: getAnalyticDetails ::: ', res)
return res
}
export const createAlertAPI = async (data) => {
let url = '/notifications'
const res = await post(url, data)
console.log('API Response :: creteAnalytics ::: ', res)
return res
}
/* Chart APIs */
export const getOverviewBarAPI = async (type = 'none', id) => {
let isOther = type !== 'none'
let url = isOther
? `/mention-over-time-bar-graph/${id}`
: `/mention-bar-graph/${id}`
const res = await post(url, isOther ? { type } : undefined)
if (isOther && res.data && res.data.data) {
res.data.data = res.data.data.map((feed) => ({
name: feed.name,
data: formatValues(feed.data)
}))
}
console.log('API Response :: getOverviewBarAPI ::: ', res)
return res
}
/* Used for Overview, Performance, Sentiment, Demographics */
export const getOverviewPieAPI = async (type = 'none', id) => {
let isOther = type !== 'none'
let url = isOther
? `/mention-over-time-pie-graph/${id}`
: `/mention-pie-graph/${id}`
const res = await post(url, isOther ? { type } : undefined)
console.log('API Response :: getOverviewPieAPI ::: ', res)
return res
}
export const getInfluencersAPI = async (id, filter, data = undefined) => {
let url = `/influencer/${id}`
if (filter === 1) {
data = { isAuthorType: true }
}
const res = await post(url, data)
console.log('API Response :: getInfluencersAPI ::: ', res)
return res
}
export const getEngagementsTimeAPI = async (id) => {
let url = `/engagement-over-time-bar-graph/${id}`
const res = await post(url)
console.log('API Response :: getEngagementsTimeAPI ::: ', res)
return res
}
export const getEngagementsAPI = async (id) => {
let url = `/engagement-over-time-pie-graph/${id}`
const res = await post(url)
console.log('API Response :: getEngagementsAPI ::: ', res)
return res
}
/* Themes */
export const getThemesTimeAPI = async (id) => {
let url = `/theme-over-time-bar-graph/${id}`
const res = await post(url)
const { data } = res.data
let newData = data
if (data) {
newData = data.map((feedData) => {
const { name, data } = feedData
let dataTotal = data.map((theme) => {
const { name, data } = theme
const total = sum(Object.values(data))
return { name, data, total }
})
dataTotal = topN(dataTotal, 5)
return { name, data: dataTotal }
})
}
res.data.data = newData
console.log('API Response :: getThemesTimeAPI ::: ', res)
return res
}
function topN(arr, n) {
if (n > arr.length) {
return arr
}
return arr
.slice()
.sort((a, b) => {
return b.total - a.total
})
.slice(0, n)
}
export const getThemesCloudAPI = async (id) => {
let url = `/theme-over-time-pie-graph/${id}`
const res = await post(url)
console.log('API Response :: getThemesCloudAPI ::: ', res)
return res
}
/* World Map */
export const getWorldMapAPI = async (id) => {
let url = `/world-map/${id}`
const res = await post(url)
console.log('API Response :: getWorldMapAPI ::: ', res)
return res
}