coveo-search-ui
Version:
Coveo JavaScript Search Framework
63 lines (51 loc) • 2.17 kB
text/typescript
import 'styling/DynamicFacet/_DynamicFacetBreadcrumbs';
import { $$ } from '../../utils/Dom';
import { SVGIcons } from '../../utils/SVGIcons';
import { IDynamicHierarchicalFacet } from './IDynamicHierarchicalFacet';
import { l } from '../../strings/Strings';
import { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';
import { getHeadingTag } from '../../utils/AccessibilityUtils';
import { escape } from 'underscore';
export interface IDynamicHierarchicalFacetBreadcrumbsOptions {
headingLevel?: number;
}
export class DynamicHierarchicalFacetBreadcrumb {
public element: HTMLElement;
constructor(private facet: IDynamicHierarchicalFacet, private readonly options?: IDynamicHierarchicalFacetBreadcrumbsOptions) {
this.create();
}
private create() {
this.element = $$('div', { className: 'coveo-dynamic-facet-breadcrumb coveo-breadcrumb-item' }).el;
const pathToRender = this.facet.values.selectedPath;
const captionLabel = pathToRender.map(pathPart => escape(this.facet.getCaption(pathPart))).join(' / ');
this.createAndAppendTitle();
this.createAndAppendCaption(captionLabel);
}
private createAndAppendTitle() {
const titleElement = $$(
getHeadingTag(this.options && this.options.headingLevel, 'h3'),
{ className: 'coveo-dynamic-facet-breadcrumb-title' },
`${this.facet.options.title}:`
).el;
this.element.appendChild(titleElement);
}
private createAndAppendCaption(caption: string) {
const valueElement = $$(
'button',
{
type: 'button',
className: 'coveo-dynamic-facet-breadcrumb-value',
ariaLabel: l('RemoveFilterOn', caption)
},
caption
).el;
const clearElement = $$('span', { className: 'coveo-dynamic-facet-breadcrumb-value-clear' }, SVGIcons.icons.mainClear).el;
valueElement.appendChild(clearElement);
$$(valueElement).on('click', () => this.valueSelectAction());
this.element.appendChild(valueElement);
}
private valueSelectAction() {
this.facet.reset();
this.facet.triggerNewQuery(() => this.facet.logAnalyticsEvent(analyticsActionCauseList.breadcrumbFacet));
}
}