static setUpDataViewBuilderColumnOptions()

in src/dataViewBuilder/testDataViewBuilder.ts [166:198]


    static setUpDataViewBuilderColumnOptions(
        options: DataViewBuilderAllColumnOptions,
        aggregateFunction: (array: number[]) => number): DataViewBuilderAllColumnOptions {

        let resultOptions = clone(options);

        resultOptions.categories = resultOptions.categories && resultOptions.categories.map(x => clone(x));
        resultOptions.values = resultOptions.values && resultOptions.values.map(x => clone(x));
        resultOptions.grouped = resultOptions.grouped && resultOptions.grouped.map(x => clone(x));

        if (!isEmpty(options.categories)) {
            resultOptions.categories.forEach(x => x.source = TestDataViewBuilder.setDefaultQueryName(x.source));
            let allRows: any[][] = TestDataViewBuilder.getValuesTable(options.categories, options.values);
            let categoriesLength = options.categories.length;
            let grouped = toArray(groupBy(allRows, x => take(x, categoriesLength)));
            resultOptions.categories.forEach((c, i) => c.values = grouped.map(x => x[0][i] === undefined ? null : x[0][i]));

            if (!isEmpty(options.values) && isEmpty(options.grouped)) { // Not completed for group categories
                resultOptions.values.forEach((c, i) =>
                    c.values = grouped.map(v => aggregateFunction(v.map(x => x[categoriesLength + i] || 0))));
            }
        }

        if (!isEmpty(options.values)) {
            resultOptions.values.forEach(x => x.source = TestDataViewBuilder.setDefaultQueryName(x.source));
        }

        if (!isEmpty(options.grouped)) {
            resultOptions.grouped.forEach(x => x.source = TestDataViewBuilder.setDefaultQueryName(x.source));
        }

        return resultOptions;
    }