public convertAggregateToArray()

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;
    }