Feat(home): over time tag spending comparison
This commit is contained in:
@@ -29,8 +29,48 @@ export function formatDate (row, field = 'Date') {
|
||||
row[field] = moment(row[field], 'DD/MM/YYYY', true)
|
||||
}
|
||||
|
||||
export function total (row, field = 'Montant') {
|
||||
var sum = row.map(x => parseFloat(x[field]))
|
||||
export function total (rows, field = 'Montant') {
|
||||
var sum = rows.map(x => parseFloat(x[field]))
|
||||
.reduce((sum, x) => sum + x, 0)
|
||||
return Math.round(sum)
|
||||
}
|
||||
|
||||
export function tag_filter (rows, tags, invert=false) {
|
||||
// filter rows by tags
|
||||
// invert inverts the selection
|
||||
return rows.filter(row => {
|
||||
if (invert) {
|
||||
return tags.some(t => {
|
||||
return row.tags.map(t => t.name.toLowerCase())
|
||||
.indexOf(t.toLowerCase()) < 0
|
||||
})
|
||||
} else {
|
||||
return tags.every(t => {
|
||||
return row.tags.map(t => t.name.toLowerCase())
|
||||
.indexOf(t.toLowerCase()) > -1
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function objectMap (object, mapFn) {
|
||||
// map a function on object value
|
||||
return Object.keys(object).reduce(function(result, key) {
|
||||
result[key] = mapFn(object[key])
|
||||
return result
|
||||
}, {})
|
||||
}
|
||||
|
||||
export function groupBy (rows, grouping, agg) {
|
||||
// Group rows by field then apply agg
|
||||
var groups = rows.reduce((stock, row) => {
|
||||
var group = grouping(row)
|
||||
if (stock[group]) {
|
||||
stock[group].push(row)
|
||||
} else {
|
||||
stock[group] = [row]
|
||||
}
|
||||
return stock
|
||||
}, {})
|
||||
return objectMap(groups, group => agg(group))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user