calculateMonthDiffs = (dataset, selectedDataSet) => {
let timeseries = []
dataset.forEach((series)=>{
const data = series.data
const yearlyValues = data.reduce((acc, dataObj, index)=>{
const month = monthArray[dataObj.date.getMonth()]
acc[`${dataObj.date.getFullYear()}`].push({value: dataObj.value, month})
return acc
},{'2018': [], '2019': [], '2020': [], '2021': []})
let prev
let prevKey
const monthlyDiffObject = Object.keys(yearlyValues).reduce((row, yrKey)=>{
const valArray = yearlyValues[yrKey]
const monthObj = monthArray.reduce((obj, key)=>{
obj[key] = undefined
return obj
},{})
if(prev && prev.length > 0) {
const monthlyDiffs = valArray.reduce((acc, valObj, i)=>{
const val = valObj.value
const prevValue = prev.find((d)=> valObj.month === d.month)
if(prevValue) {
const diff = +(val - prevValue.value).toFixed(3)
acc[valObj.month] = `${selectedDataSet.yLabel.replace("~d", diff )}`
}
return acc
},monthObj)
row.push( Object.assign({}, {"ethnicity": series.ethnicity, "race": series.race, age: series.age, "sex": series.sex, year_range:`${prevKey}-${yrKey}`, ...monthlyDiffs}) )
}
prev = valArray
prevKey = yrKey
return row
}, [])
timeseries = [...timeseries, ...monthlyDiffObject]
})
if(timeseries.length > 0) {
return timeseries
}
return [{error: "no previous monthly data"}]
}