in src/UXClient/Models/ChartComponentData.ts [379:454]
public convertAggregateToArray (agg: any, aggKey: string, aggName: string, splitBy: string,
from: Date = null, to: Date = null, bucketSize: number = null,
shiftValue: number): Array<any> {
let aggArray: Array<any> = [];
let isoStringAgg = {};
Object.keys(agg).forEach((dateString: string) => {
let shiftedDate = new Date((new Date(dateString)).valueOf() - shiftValue);
let jsISOString = shiftedDate.toISOString();
isoStringAgg[jsISOString] = agg[dateString];
});
agg = isoStringAgg;
var createTimeValueObject = () => {
var timeValueObject: any = {};
timeValueObject["aggregateKey"] = aggKey;
timeValueObject["aggregateName"] = aggName;
timeValueObject["splitBy"] = splitBy;
timeValueObject["measures"] = {};
timeValueObject["bucketSize"] = bucketSize;
return timeValueObject;
}
if (from)
this.fromMillis = Math.min(from.valueOf(), this.fromMillis);
if (to)
this.toMillis = Math.max(to.valueOf(), this.toMillis);
if (from && to && bucketSize) {
let firstBucket = this.findFirstBucket(agg, from.valueOf(), bucketSize);
if (firstBucket !== null) {
let firstBucketMillis = firstBucket.valueOf();
let isExcessiveBucketCount = (this.getNumberOfPaddedBuckets(firstBucketMillis, to.valueOf(), bucketSize) > 10000);
// pad if not an excessive number of buckets
if (!isExcessiveBucketCount) {
for (var currTime = new Date(firstBucketMillis); (currTime.valueOf() < to.valueOf()); currTime = new Date(currTime.valueOf() + bucketSize)) {
var timeValueObject: any = createTimeValueObject();
timeValueObject["dateTime"] = currTime;
var currTimeString = currTime.toISOString();
if (agg[currTimeString]) {
var currMeasures = agg[currTimeString];
Object.keys(currMeasures).forEach((measure: string) => {
timeValueObject["measures"][measure] = currMeasures[measure];
});
} else {
timeValueObject["measures"] = null;
}
aggArray.push(timeValueObject);
this.fromMillis = Math.min(from.valueOf(), currTime.valueOf());
this.toMillis = Math.max(to.valueOf(), currTime.valueOf() + bucketSize);
}
} else {
Object.keys(agg).forEach((currTimeString) => {
var timeValueObject: any = createTimeValueObject();
timeValueObject["dateTime"] = new Date(currTimeString);
var currMeasures = agg[currTimeString];
Object.keys(currMeasures).forEach((measure: string) => {
timeValueObject["measures"][measure] = currMeasures[measure];
});
aggArray.push(timeValueObject);
});
}
}
} else {
Object.keys(agg).sort().forEach((dateTime: string) => {
var timeValueObject: any = createTimeValueObject();
timeValueObject["dateTime"] = new Date(dateTime);
if (agg[dateTime]) {
Object.keys(agg[dateTime]).forEach((measure: string) => {
timeValueObject["measures"][measure] = agg[dateTime][measure];
});
}
aggArray.push(timeValueObject);
});
}
return aggArray;
}