coveo-search-ui
Version:
Coveo JavaScript Search Framework
55 lines (48 loc) • 1.64 kB
text/typescript
import { Dom } from '../../utils/Dom';
import { CategoryFacetTemplates } from './CategoryFacetTemplates';
import { CategoryValue, CategoryValueParent } from './CategoryValue';
import { CategoryFacet } from './CategoryFacet';
import { ICategoryFacetValue } from '../../rest/CategoryFacetValue';
import { each } from 'underscore';
export class CategoryChildrenValueRenderer {
public children: CategoryValue[] = [];
constructor(
private element: Dom,
private categoryFacetTemplates: CategoryFacetTemplates,
private categoryValue: CategoryValueParent,
private categoryFacet: CategoryFacet
) {}
public clearChildren() {
this.element.removeClass('coveo-active-category-facet-parent');
this.children.forEach(child => {
child.clear();
});
this.children = [];
}
public renderChildren(values: ICategoryFacetValue[]) {
each(values, value => {
this.renderValue(value, true).makeSelectable();
});
}
public renderAsParent(value: ICategoryFacetValue) {
const categoryValue = this.renderValue(value, false);
return categoryValue;
}
private renderValue(value: ICategoryFacetValue, isChild: boolean) {
const path = this.categoryValue.path.concat([value.value]);
const categoryValueDescriptor = {
value: value.value,
count: value.numberOfResults,
path
};
const categoryValue = new CategoryValue(
this.categoryValue.listRoot,
categoryValueDescriptor,
this.categoryFacetTemplates,
this.categoryFacet
);
categoryValue.render(isChild);
this.children.push(categoryValue);
return categoryValue;
}
}