import moment from 'moment'
/**
* Legacy helper by akka
* @namespace Services
* @category Services
* @module helpers
* @todo This is not a service. Refactor/Remove or move into utils
* */
export default () => {
return {
/**
* Used by Ecoconduite
* @todo Move into utils/dates.js
* @param {*} date
* @returns
*/
reformatDateString: function (date) {
if (!date) return ''
var d = date.replace(/\s/g, '')
return d.split('/').reverse().join('-')
},
/**
* Used by Ecoconduite
* @todo Move into utils/dates.js
* @param {*} date
* @returns
*/
getDatesBetweenDates: function (startDate, endDate) {
let dates = []
const theDate = new Date(startDate)
const end = new Date(endDate)
end.setDate(end.getDate() + 1)
while (theDate < end) {
let current_datetime = new Date(theDate)
let formatted_date = moment(String(current_datetime)).format(
'YYYY-MM-DD'
)
dates = [...dates, formatted_date]
theDate.setDate(theDate.getDate() + 1)
}
return dates
},
/**
* Used by Ecoconduite
* @todo Move into utils/dates.js
* @param {*} date
* @returns
*/
isTodayOrYesterday: function (range) {
let todayIndex = range.indexOf(moment().format('YYYY-MM-DD'))
let yesterdayIndex = range.indexOf(
moment().subtract(1, 'days').format('YYYY-MM-DD')
)
let rangeNow = []
if (todayIndex != -1) {
range.splice(todayIndex, 1)
rangeNow.push(moment().format('YYYY-MM-DD'))
}
if (yesterdayIndex != -1) {
range.splice(yesterdayIndex, 1)
rangeNow.push(moment().subtract(1, 'days').format('YYYY-MM-DD'))
}
return {
isTodayOrYesterday: rangeNow.length > 0,
range: range,
rangeNow: rangeNow,
}
},
/**
* @todo Move into ecoconduite store (do not extract custom logic) (single reference)
* @param {*} dataResponseA
* @param {*} dataResponseB
* @returns
*/
combineDataResponses: function (dataResponseA, dataResponseB) {
let res = {}
let sumRegEx = new RegExp('^distance|^duration|^phase|^consumption|co2')
let avgRegEx = new RegExp('verage$|^ratio|^ratin')
for (let property in dataResponseA) {
res[property] = dataResponseA[property]
if (
Object.getOwnPropertyDescriptor(dataResponseB, property) !=
'undefined ' &&
dataResponseB[property] != null
) {
if (sumRegEx.test(property)) {
res[property] =
parseInt(dataResponseA[property]) +
parseInt(dataResponseB[property])
res[property] = res[property].toString()
}
// Oui j'assume, je veux qu'on évalue avg après sum.
if (
avgRegEx.test(property) &&
(Number(dataResponseA.distanceTotal) !== 0 ||
parseInt(dataResponseB.distanceTotal) !== 0)
) {
// moyennes pondérées par le nombre de km parcouru
res[property] =
(Number(dataResponseA[property]) *
parseInt(dataResponseA.distanceTotal) +
Number(dataResponseB[property]) *
parseInt(dataResponseB.distanceTotal)) /
(Number(dataResponseA.distanceTotal) +
parseInt(dataResponseB.distanceTotal))
res[property] = res[property].toString()
}
}
}
return res
},
/**
* @todo Do not extract if single reference
* @param {*} data
* @returns
*/
eachPropertyToString: function (data) {
for (let property in data) {
if (data[property] != null && typeof data[property] == 'number') {
data[property] = data[property].toString()
}
}
return data
},
exportXlsdata: function (columns, data, name) {
var tableToExcel = (function () {
const uri = 'data:application/vnd.ms-excel;base64,',
base64 = function (s) {
return window.btoa(unescape(encodeURIComponent(s)))
}
return function (tableHTML, name = 'Worksheet') {
let template = `<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><?xml version="1.0" encoding="UTF-8" standalone="yes"?><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>${name}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body>${tableHTML}</body></html>`
var link = document.createElement('a')
link.download = name
link.href = uri + base64(template)
link.click()
}
})()
let html = '<tr>' + columns.map((c) => `<th>${c}</th>`).join('') + '</tr>'
data.forEach((row) => {
html += `<tr>${row.map((v) => `<td>${v}</td>`).join('')}</tr>`
})
html = `<table>${html}</table>`
html = html.split('null').join('')
tableToExcel(html, name)
},
}
}
Source