static createDataViewBuilderColumnOptions()

in src/dataViewBuilder/testDataViewBuilder.ts [128:164]


    static createDataViewBuilderColumnOptions(
        categoriesColumns: (TestDataViewBuilderCategoryColumnOptions | TestDataViewBuilderCategoryColumnOptions[])[],
        valuesColumns: (DataViewBuilderValuesColumnOptions | DataViewBuilderValuesColumnOptions[])[],
        filter?: (options: TestDataViewBuilderColumnOptions) => boolean,
        customizeColumns?: CustomizeColumnFn): DataViewBuilderAllColumnOptions {

        let filterColumns = filter
            ? (options) => Array.isArray(options.values) && filter(options)
            : (options) => Array.isArray(options.values);

        let resultCategoriesColumns = isEmpty(categoriesColumns) ? [] : (<TestDataViewBuilderCategoryColumnOptions[]>flatten(categoriesColumns)).filter(filterColumns);

        let resultValuesColumns = isEmpty(valuesColumns) ? [] : (<DataViewBuilderValuesColumnOptions[]>flatten(valuesColumns)).filter(filterColumns);

        let allColumns = (resultCategoriesColumns || []).concat(resultValuesColumns || []);

        allColumns.forEach((x: DataViewCategoricalColumn, i) => x.source.index = i);

        if (customizeColumns) {
            allColumns.forEach((column: TestDataViewBuilderColumnOptions) => customizeColumns(column.source));
        }

        allColumns.forEach((column: TestDataViewBuilderColumnOptions) => {
            if (column.source.format) {
                let objects = column.source.objects = (<any>column.source.objects || {});

                objects.general = objects.general || {};
                objects.general.formatString = objects.general.formatString || column.source.format;
            }
        });

        return {
            categories: resultCategoriesColumns.filter(x => !x.isGroup),
            grouped: resultCategoriesColumns.filter(x => x.isGroup),
            values: resultValuesColumns
        };
    }