UNPKG

coveo-search-ui

Version:

Coveo JavaScript Search Framework

52 lines (41 loc) 1.79 kB
import { l } from '../../../strings/Strings'; import { SVGIcons } from '../../../utils/SVGIcons'; import { $$ } from '../../../utils/Dom'; import { DynamicFacetHeaderButton } from './DynamicFacetHeaderButton'; import { IDynamicFacetHeaderOptions } from './DynamicFacetHeader'; import { SVGDom } from '../../../utils/SVGDom'; export interface IDynamicFacetCollapseToggleOptions { collapsed: boolean; } export class DynamicFacetHeaderCollapseToggle { public element: HTMLElement; private button: DynamicFacetHeaderButton; constructor(private options: IDynamicFacetHeaderOptions) { this.create(); } private create() { const parent = $$('div'); this.button = new DynamicFacetHeaderButton({ label: l('CollapseFacet', this.options.title), iconSVG: SVGIcons.icons.arrowUp, iconClassName: 'coveo-dynamic-facet-collapse-toggle-svg', className: 'coveo-dynamic-facet-header-collapse', shouldDisplay: true, action: () => this.options.toggleCollapse() }); parent.append(this.button.element); this.element = parent.el; } public toggleButton(isCollapsed: boolean) { const node = $$(this.button.element); const label = isCollapsed ? l('ExpandFacet', this.options.title) : l('CollapseFacet', this.options.title); const icon = isCollapsed ? SVGIcons.icons.arrowDown : SVGIcons.icons.arrowUp; node.setAttribute('aria-label', label); node.setAttribute('title', label); node.setAttribute('aria-expanded', (!isCollapsed).toString()); node.toggleClass('coveo-dynamic-facet-header-expand', isCollapsed); node.toggleClass('coveo-dynamic-facet-header-collapse', !isCollapsed); node.setHtml(icon); SVGDom.addClassToSVGInContainer(node.el, 'coveo-dynamic-facet-collapse-toggle-svg'); } }