coveo-search-ui
Version:
Coveo JavaScript Search Framework
51 lines (43 loc) • 1.82 kB
text/typescript
import 'styling/_SimpleFilter';
import { IDoneBuildingQueryEventArgs, IQuerySuccessEventArgs } from '../../events/QueryEvents';
import * as _ from 'underscore';
import { QueryBuilder } from '../Base/QueryBuilder';
import { SimpleFilter, ISimpleFilterOptions } from './SimpleFilter';
import { IGroupByRequest } from '../../rest/GroupByRequest';
export class SimpleFilterValues {
private groupByRequestValues: string[] = [];
private position: number;
constructor(public simpleFilter: SimpleFilter, public options: ISimpleFilterOptions) {}
public getValuesFromGroupBy(): string[] {
return this.groupByRequestValues;
}
public groupBy(data: IQuerySuccessEventArgs) {
this.groupByRequestValues = [];
const groupByResult = data.results.groupByResults;
if (groupByResult.length > 0 && this.position != undefined) {
_.each(groupByResult[this.position].values, value => {
if (this.groupByRequestValues.indexOf(value.lookupValue) < 0) {
this.groupByRequestValues.push(value.lookupValue);
}
});
}
}
public handleDoneBuildingQuery(data: IDoneBuildingQueryEventArgs) {
const queryBuilder = data.queryBuilder;
this.putGroupByIntoQueryBuilder(queryBuilder);
}
private putGroupByIntoQueryBuilder(queryBuilder: QueryBuilder) {
const groupByRequest = this.createBasicGroupByRequest();
queryBuilder.groupByRequests.push(groupByRequest);
this.position = queryBuilder.groupByRequests.length - 1;
}
private createBasicGroupByRequest(): IGroupByRequest {
let groupByRequest: IGroupByRequest = {
field: <string>this.options.field,
maximumNumberOfValues: this.options.maximumNumberOfValues,
injectionDepth: 1000,
sortCriteria: this.simpleFilter.options.sortCriteria
};
return groupByRequest;
}
}