added 260907 version of worker toolkit
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
import Ember from 'ember';
|
||||
import moment from 'moment';
|
||||
import * as d3 from "d3";
|
||||
import Colorable from 'flaredown/mixins/colorable';
|
||||
import Graphable from 'flaredown/components/chart/graphable';
|
||||
|
||||
const { $, Component, computed, get } = Ember;
|
||||
|
||||
export default Component.extend(Colorable, Graphable, {
|
||||
colorId: '35',
|
||||
rangeDevider: 4,
|
||||
offset: -10,
|
||||
|
||||
dataValuesYMin: computed.min('dataValuesY'),
|
||||
dataValuesYMax: computed.max('dataValuesY'),
|
||||
|
||||
roundValuesYMin: computed('dataValuesYMin', function() {
|
||||
return Math.floor(get(this, 'dataValuesYMin'));
|
||||
}),
|
||||
|
||||
roundValuesYMax: computed('dataValuesYMax', function() {
|
||||
return Math.ceil(get(this, 'dataValuesYMax'));
|
||||
}),
|
||||
|
||||
isDecimalStep: computed('roundValuesYMin', 'roundValuesYMax', function() {
|
||||
return get(this, 'roundValuesYMax') - get(this, 'roundValuesYMin') < get(this, 'rangeDevider');
|
||||
}),
|
||||
|
||||
chosenYMin: computed('isDecimalStep', function() {
|
||||
return get(this, get(this, 'isDecimalStep') ? 'dataValuesYMin' : 'roundValuesYMin');
|
||||
}),
|
||||
|
||||
chosenYMax: computed('isDecimalStep', function() {
|
||||
return get(this, get(this, 'isDecimalStep') ? 'dataValuesYMax' : 'roundValuesYMax');
|
||||
}),
|
||||
|
||||
rulerStep: computed('roundValuesYMin', 'roundValuesYMax', function() {
|
||||
return (get(this, 'chosenYMax') - get(this, 'chosenYMin')) / get(this, 'rangeDevider');
|
||||
}),
|
||||
|
||||
points: computed('data', function() {
|
||||
return(
|
||||
get(this, 'data')
|
||||
.filter(item => $.isNumeric(item.y))
|
||||
.map(item => {
|
||||
const x = get(this, 'xScale')(item.x);
|
||||
const y = get(this, 'yScale')(item.y) - 4; // minus radius
|
||||
|
||||
return {
|
||||
x,
|
||||
y,
|
||||
tip: {
|
||||
label: `${item.y}${get(this, 'unit')}`,
|
||||
x: x - 15,
|
||||
y: y - 10
|
||||
}
|
||||
};
|
||||
})
|
||||
);
|
||||
}),
|
||||
|
||||
yRulers: computed('data', function() {
|
||||
let result = [];
|
||||
|
||||
const finalizeNumber = get(this, 'isDecimalStep') ?
|
||||
number => Math.round(number * 100) / 100
|
||||
:
|
||||
number => Math.floor(number);
|
||||
|
||||
for (let i = get(this, 'chosenYMin'); i < get(this, 'chosenYMax'); i += get(this, 'rulerStep')) {
|
||||
result.pushObject(finalizeNumber(i));
|
||||
}
|
||||
|
||||
result.pushObject(get(this, 'chosenYMax'));
|
||||
|
||||
return result.uniq();
|
||||
}),
|
||||
|
||||
dataValuesY: computed('data', function() {
|
||||
const values = get(this, 'data')
|
||||
.filter(item => item.y || item.y === 0)
|
||||
.map(item => item.y)
|
||||
.compact();
|
||||
|
||||
return values.length ? values : [0, 100];
|
||||
}),
|
||||
|
||||
yScale: computed('data', function() {
|
||||
return(
|
||||
d3
|
||||
.scale
|
||||
.linear()
|
||||
.range([get(this, 'height') + get(this, 'offset'), 0])
|
||||
.domain([
|
||||
get(this, 'chosenYMin') - get(this, 'rulerStep'),
|
||||
get(this, 'chosenYMax') + get(this, 'rulerStep')
|
||||
])
|
||||
);
|
||||
}),
|
||||
|
||||
data: computed('checkins', function() {
|
||||
return (get(this, 'timeline') || []).map(day => {
|
||||
let filteredCheckins = get(this, 'checkins').filter((checkin) => (
|
||||
get(checkin, 'formattedDate') === moment(day).format("YYYY-MM-DD")
|
||||
))
|
||||
let coordinate = { x: day, y: null };
|
||||
|
||||
if (filteredCheckins.length) {
|
||||
let itemWeathers = filteredCheckins.map(checkin => get(checkin, 'weather')).filter(Boolean)
|
||||
|
||||
if (itemWeathers.length) {
|
||||
let itemsValues = itemWeathers.map(checkin => get(checkin, get(this, 'field')))
|
||||
let weatherValue = itemsValues.reduce((acc, val) => (acc + val), 1) / itemsValues.length
|
||||
coordinate.y = weatherValue
|
||||
}
|
||||
}
|
||||
|
||||
return coordinate;
|
||||
});
|
||||
}),
|
||||
});
|
||||
Reference in New Issue
Block a user