-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreport.jsx
94 lines (81 loc) · 2.18 KB
/
report.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
var React = require('react')
var ReactPivot = require('react-pivot')
var createReactClass = require('create-react-class')
var Emitter = require('wildemitter')
var rows = require('./data.json')
var dimensions = [
{value: 'date', title: 'Date'},
{value: 'host', title: 'Host'}
]
var reduce = function (row, memo) {
memo.impressions = (memo.impressions || 0) + (row.type === 'impression' ? 1 : 0)
memo.loads = (memo.loads || 0) + (row.type === 'load' ? 1 : 0)
memo.displays = (memo.displays || 0) + (row.type === 'display' ? 1 : 0)
memo.loadRate = (memo.loads / memo.impressions) * 100
memo.displayRate = (memo.displays / memo.loads) * 100
return memo
}
var calculations = [
{
title: 'Impressions', value: 'impressions'
},
{
title: 'Loads', value: 'loads'
},
{
title: 'Displays', value: 'displays'
},
{
title: 'Load Rate',
value: 'loadRate',
template: presentRate
},
{
title: 'Display Rate',
value: 'displayRate',
template: presentRate
}
]
var persisted = JSON.parse(window.localStorage.rpSelections || '{}')
var bus = new Emitter()
module.exports = createReactClass({
render () {
return (
<div className='report'>
<ReactPivot rows={rows}
dimensions={dimensions}
reduce={reduce}
calculations={calculations}
activeDimensions={persisted.activeDimensions || ['Date', 'Host']}
sortBy={persisted.sortBy}
sortDir={persisted.sortDir}
solo={persisted.solo}
hiddenColumns={persisted.hiddenColumns}
eventBus={bus}
/>
</div>
)
}
})
function presentRate (value) {
return parseFloat(value).toFixed(1) + '%'
}
bus.on('activeDimensions', function (activeDimensions) {
persist('activeDimensions', activeDimensions)
})
bus.on('sortBy', function (sortBy) {
persist('sortBy', sortBy)
})
bus.on('sortDir', function (sortDir) {
persist('sortDir', sortDir)
})
bus.on('hiddenColumns', function (hiddenColumns) {
persist('hiddenColumns', hiddenColumns)
})
bus.on('solo', function (solo) {
persist('solo', solo)
})
function persist (prop, val) {
persisted[prop] = val
window.localStorage.rpSelections = JSON.stringify(persisted)
}