angular-instantsearch
Version:
Lightning-fast search for Angular apps, by Algolia.
70 lines (69 loc) • 6.8 kB
JavaScript
import { Component, Input } from '@angular/core';
import { bem } from '../utils';
export class NgAisHierarchicalMenuItem {
constructor() {
this.lvl = 1;
this.cx = bem('HierarchicalMenu');
}
getItemClass(item) {
let className = this.cx('item');
if (item.isRefined) {
className = `${className} ${this.cx('item', 'selected')}`;
}
if (this.isArray(item.data) && item.data.length > 0) {
className = `${className} ${this.cx('item', 'parent')}`;
}
return className;
}
getListClass() {
return `${this.cx('list')} ${this.cx('list', 'child')} ${this.cx('list', `lvl${this.lvl}`)}`;
}
isArray(potentialArray) {
return Array.isArray(potentialArray);
}
handleClick(event, item) {
event.preventDefault();
event.stopPropagation();
this.refine(item.value);
}
}
NgAisHierarchicalMenuItem.decorators = [
{ type: Component, args: [{
selector: 'ais-hierarchical-menu-item',
template: `
<li
[class]="getItemClass(item)"
(click)="handleClick($event, item)"
>
<a
[class]="cx('link')"
href="{{createURL(item.value)}}"
(click)="handleClick($event, item)"
>
<span [class]="cx('label')">{{item.label}}</span>
<span [class]="cx('count')">{{item.count}}</span>
</a>
<ul
[class]="getListClass()"
*ngIf="item.isRefined && isArray(item.data) && item.data.length > 0"
>
<ais-hierarchical-menu-item
*ngFor="let child of item.data"
[item]="child"
[createURL]="createURL"
[refine]="refine"
[lvl]="lvl + 1"
>
</ais-hierarchical-menu-item>
</ul>
</li>
`
},] }
];
NgAisHierarchicalMenuItem.propDecorators = {
lvl: [{ type: Input }],
refine: [{ type: Input }],
createURL: [{ type: Input }],
item: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLW1lbnUtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oaWVyYXJjaGljYWwtbWVudS9oaWVyYXJjaGljYWwtbWVudS1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFzQy9CLE1BQU0sT0FBTyx5QkFBeUI7SUFoQ3RDO1FBaUNrQixRQUFHLEdBQVcsQ0FBQyxDQUFDO1FBS3pCLE9BQUUsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQWlDdEMsQ0FBQztJQS9CUSxZQUFZLENBQUMsSUFBSTtRQUN0QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixTQUFTLEdBQUcsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztTQUMzRDtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELFNBQVMsR0FBRyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1NBQ3pEO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FDOUQsTUFBTSxFQUNOLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNqQixFQUFFLENBQUM7SUFDTixDQUFDO0lBRU0sT0FBTyxDQUFDLGNBQW1CO1FBQ2hDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQWlCLEVBQUUsSUFBMEI7UUFDOUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDOzs7WUF0RUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCVDthQUNGOzs7a0JBRUUsS0FBSztxQkFDTCxLQUFLO3dCQUNMLEtBQUs7bUJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGJlbSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIEhpZXJhcmNoaWNhbE1lbnVSZW5kZXJTdGF0ZSxcbiAgSGllcmFyY2hpY2FsTWVudUl0ZW0sXG59IGZyb20gJ2luc3RhbnRzZWFyY2guanMvZXMvY29ubmVjdG9ycy9oaWVyYXJjaGljYWwtbWVudS9jb25uZWN0SGllcmFyY2hpY2FsTWVudSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Fpcy1oaWVyYXJjaGljYWwtbWVudS1pdGVtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bGlcbiAgICAgIFtjbGFzc109XCJnZXRJdGVtQ2xhc3MoaXRlbSlcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgID5cbiAgICAgIDxhXG4gICAgICAgIFtjbGFzc109XCJjeCgnbGluaycpXCJcbiAgICAgICAgaHJlZj1cInt7Y3JlYXRlVVJMKGl0ZW0udmFsdWUpfX1cIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIFtjbGFzc109XCJjeCgnbGFiZWwnKVwiPnt7aXRlbS5sYWJlbH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY3goJ2NvdW50JylcIj57e2l0ZW0uY291bnR9fTwvc3Bhbj5cbiAgICAgIDwvYT5cblxuICAgICAgPHVsXG4gICAgICAgIFtjbGFzc109XCJnZXRMaXN0Q2xhc3MoKVwiXG4gICAgICAgICpuZ0lmPVwiaXRlbS5pc1JlZmluZWQgJiYgaXNBcnJheShpdGVtLmRhdGEpICYmIGl0ZW0uZGF0YS5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPGFpcy1oaWVyYXJjaGljYWwtbWVudS1pdGVtXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uZGF0YVwiXG4gICAgICAgICAgW2l0ZW1dPVwiY2hpbGRcIlxuICAgICAgICAgIFtjcmVhdGVVUkxdPVwiY3JlYXRlVVJMXCJcbiAgICAgICAgICBbcmVmaW5lXT1cInJlZmluZVwiXG4gICAgICAgICAgW2x2bF09XCJsdmwgKyAxXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Fpcy1oaWVyYXJjaGljYWwtbWVudS1pdGVtPlxuICAgICAgPC91bD5cbiAgICA8L2xpPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0Fpc0hpZXJhcmNoaWNhbE1lbnVJdGVtIHtcbiAgQElucHV0KCkgcHVibGljIGx2bDogbnVtYmVyID0gMTtcbiAgQElucHV0KCkgcHVibGljIHJlZmluZTogSGllcmFyY2hpY2FsTWVudVJlbmRlclN0YXRlWydyZWZpbmUnXTtcbiAgQElucHV0KCkgcHVibGljIGNyZWF0ZVVSTDogSGllcmFyY2hpY2FsTWVudVJlbmRlclN0YXRlWydjcmVhdGVVUkwnXTtcbiAgQElucHV0KCkgcHVibGljIGl0ZW06IEhpZXJhcmNoaWNhbE1lbnVJdGVtO1xuXG4gIHB1YmxpYyBjeCA9IGJlbSgnSGllcmFyY2hpY2FsTWVudScpO1xuXG4gIHB1YmxpYyBnZXRJdGVtQ2xhc3MoaXRlbSk6IHN0cmluZyB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMuY3goJ2l0ZW0nKTtcblxuICAgIGlmIChpdGVtLmlzUmVmaW5lZCkge1xuICAgICAgY2xhc3NOYW1lID0gYCR7Y2xhc3NOYW1lfSAke3RoaXMuY3goJ2l0ZW0nLCAnc2VsZWN0ZWQnKX1gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQXJyYXkoaXRlbS5kYXRhKSAmJiBpdGVtLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY2xhc3NOYW1lID0gYCR7Y2xhc3NOYW1lfSAke3RoaXMuY3goJ2l0ZW0nLCAncGFyZW50Jyl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcHVibGljIGdldExpc3RDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmN4KCdsaXN0Jyl9ICR7dGhpcy5jeCgnbGlzdCcsICdjaGlsZCcpfSAke3RoaXMuY3goXG4gICAgICAnbGlzdCcsXG4gICAgICBgbHZsJHt0aGlzLmx2bH1gXG4gICAgKX1gO1xuICB9XG5cbiAgcHVibGljIGlzQXJyYXkocG90ZW50aWFsQXJyYXk6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBvdGVudGlhbEFycmF5KTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCwgaXRlbTogSGllcmFyY2hpY2FsTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5yZWZpbmUoaXRlbS52YWx1ZSk7XG4gIH1cbn1cbiJdfQ==