angular-instantsearch
Version:
Lightning-fast search for Angular apps, by Algolia.
93 lines (92 loc) • 9.89 kB
JavaScript
import { Component, Input, Inject, forwardRef, Optional } from '@angular/core';
import { connectBreadcrumb } from 'instantsearch.js/es/connectors';
import { TypedBaseWidget } from '../typed-base-widget';
import { NgAisInstantSearch } from '../instantsearch/instantsearch';
import { NgAisIndex } from '../index-widget/index-widget';
import { noop } from '../utils';
export class NgAisBreadcrumb extends TypedBaseWidget {
constructor(parentIndex, instantSearchInstance) {
super('Breadcrumb');
this.parentIndex = parentIndex;
this.instantSearchInstance = instantSearchInstance;
this.state = {
createURL: () => '#',
items: [],
refine: noop,
canRefine: false,
};
}
get isHidden() {
return this.state.items.length === 0 && this.autoHideContainer;
}
get items() {
return this.state.items.map((item, idx) => (Object.assign(Object.assign({}, item), { separator: idx !== 0, isLast: idx === this.state.items.length - 1 })));
}
ngOnInit() {
this.createWidget(connectBreadcrumb, {
attributes: this.attributes,
rootPath: this.rootPath,
separator: this.separator,
transformItems: this.transformItems,
}, {
$$widgetType: 'ais.breadcrumb',
});
super.ngOnInit();
}
handleClick(event, item) {
event.preventDefault();
event.stopPropagation();
if (item.value) {
this.state.refine(item.value);
}
}
}
NgAisBreadcrumb.decorators = [
{ type: Component, args: [{
selector: 'ais-breadcrumb',
template: `
<div
[class]="cx()"
*ngIf="!isHidden"
>
<ul [class]="cx('list')">
<li
*ngFor="let item of items"
[ngClass]="[cx('item'), item.isLast ? cx('item', 'selected') : '']"
(click)="handleClick($event, item)"
>
<span
*ngIf="item.separator"
[class]="cx('separator')"
aria-hidden="true"
>
>
</span>
<a
[class]="cx('link')"
href="{{state.createURL(item.value)}}"
*ngIf="!item.isLast"
(click)="handleClick($event, item)"
>
{{item.label}}
</a>
<span *ngIf="item.isLast">
{{item.label}}
</span>
</li>
</ul>
</div>
`
},] }
];
NgAisBreadcrumb.ctorParameters = () => [
{ type: NgAisIndex, decorators: [{ type: Inject, args: [forwardRef(() => NgAisIndex),] }, { type: Optional }] },
{ type: NgAisInstantSearch, decorators: [{ type: Inject, args: [forwardRef(() => NgAisInstantSearch),] }] }
];
NgAisBreadcrumb.propDecorators = {
attributes: [{ type: Input }],
rootPath: [{ type: Input }],
separator: [{ type: Input }],
transformItems: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9icmVhZGNydW1iL2JyZWFkY3J1bWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBdUNoQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxlQUdwQztJQTRCQyxZQUdTLFdBQXVCLEVBRXZCLHFCQUF5QztRQUVoRCxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFKYixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUV2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQW9CO1FBWjNDLFVBQUssR0FBMEI7WUFDcEMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUc7WUFDcEIsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsSUFBSTtZQUNaLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7SUFVRixDQUFDO0lBN0JELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDakUsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsaUNBQ3RDLElBQUksS0FDUCxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFDcEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUczQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBbUJNLFFBQVE7UUFDYixJQUFJLENBQUMsWUFBWSxDQUNmLGlCQUFpQixFQUNqQjtZQUNFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztTQUNwQyxFQUNEO1lBQ0UsWUFBWSxFQUFFLGdCQUFnQjtTQUMvQixDQUNGLENBQUM7UUFFRixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLFdBQVcsQ0FDaEIsS0FBaUIsRUFDakIsSUFBbUM7UUFFbkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDOzs7WUF6R0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNUO2FBQ0Y7OztZQXZDUSxVQUFVLHVCQXdFZCxNQUFNLFNBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUNuQyxRQUFRO1lBMUVKLGtCQUFrQix1QkE0RXRCLE1BQU0sU0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7Ozt5QkE5QjdDLEtBQUs7dUJBQ0wsS0FBSzt3QkFDTCxLQUFLOzZCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBJbmplY3QsIGZvcndhcmRSZWYsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb25uZWN0QnJlYWRjcnVtYiB9IGZyb20gJ2luc3RhbnRzZWFyY2guanMvZXMvY29ubmVjdG9ycyc7XG5pbXBvcnQge1xuICBCcmVhZGNydW1iQ29ubmVjdG9yUGFyYW1zLFxuICBCcmVhZGNydW1iV2lkZ2V0RGVzY3JpcHRpb24sXG4gIEJyZWFkY3J1bWJSZW5kZXJTdGF0ZSxcbiAgQnJlYWRjcnVtYkNvbm5lY3RvclBhcmFtc0l0ZW0sXG59IGZyb20gJ2luc3RhbnRzZWFyY2guanMvZXMvY29ubmVjdG9ycy9icmVhZGNydW1iL2Nvbm5lY3RCcmVhZGNydW1iJztcbmltcG9ydCB7IFR5cGVkQmFzZVdpZGdldCB9IGZyb20gJy4uL3R5cGVkLWJhc2Utd2lkZ2V0JztcbmltcG9ydCB7IE5nQWlzSW5zdGFudFNlYXJjaCB9IGZyb20gJy4uL2luc3RhbnRzZWFyY2gvaW5zdGFudHNlYXJjaCc7XG5pbXBvcnQgeyBOZ0Fpc0luZGV4IH0gZnJvbSAnLi4vaW5kZXgtd2lkZ2V0L2luZGV4LXdpZGdldCc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhaXMtYnJlYWRjcnVtYicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgW2NsYXNzXT1cImN4KClcIlxuICAgICAgKm5nSWY9XCIhaXNIaWRkZW5cIlxuICAgID5cbiAgICAgIDx1bCBbY2xhc3NdPVwiY3goJ2xpc3QnKVwiPlxuICAgICAgICA8bGlcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiW2N4KCdpdGVtJyksIGl0ZW0uaXNMYXN0ID8gY3goJ2l0ZW0nLCAnc2VsZWN0ZWQnKSA6ICcnXVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5zZXBhcmF0b3JcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImN4KCdzZXBhcmF0b3InKVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIFtjbGFzc109XCJjeCgnbGluaycpXCJcbiAgICAgICAgICAgIGhyZWY9XCJ7e3N0YXRlLmNyZWF0ZVVSTChpdGVtLnZhbHVlKX19XCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0uaXNMYXN0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7e2l0ZW0ubGFiZWx9fVxuICAgICAgICAgIDwvYT5cblxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5pc0xhc3RcIj5cbiAgICAgICAgICAgIHt7aXRlbS5sYWJlbH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTmdBaXNCcmVhZGNydW1iIGV4dGVuZHMgVHlwZWRCYXNlV2lkZ2V0PFxuICBCcmVhZGNydW1iV2lkZ2V0RGVzY3JpcHRpb24sXG4gIEJyZWFkY3J1bWJDb25uZWN0b3JQYXJhbXNcbj4ge1xuICAvLyBpbnN0YW5jZSBvcHRpb25zXG4gIEBJbnB1dCgpIHB1YmxpYyBhdHRyaWJ1dGVzOiBCcmVhZGNydW1iQ29ubmVjdG9yUGFyYW1zWydhdHRyaWJ1dGVzJ107XG4gIEBJbnB1dCgpIHB1YmxpYyByb290UGF0aD86IEJyZWFkY3J1bWJDb25uZWN0b3JQYXJhbXNbJ3Jvb3RQYXRoJ107XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXBhcmF0b3I/OiBCcmVhZGNydW1iQ29ubmVjdG9yUGFyYW1zWydzZXBhcmF0b3InXTtcbiAgQElucHV0KCkgcHVibGljIHRyYW5zZm9ybUl0ZW1zPzogQnJlYWRjcnVtYkNvbm5lY3RvclBhcmFtc1sndHJhbnNmb3JtSXRlbXMnXTtcblxuICBnZXQgaXNIaWRkZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXRlbXMubGVuZ3RoID09PSAwICYmIHRoaXMuYXV0b0hpZGVDb250YWluZXI7XG4gIH1cblxuICBnZXQgaXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXRlbXMubWFwKChpdGVtLCBpZHgpID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgc2VwYXJhdG9yOiBpZHggIT09IDAsXG4gICAgICBpc0xhc3Q6IGlkeCA9PT0gdGhpcy5zdGF0ZS5pdGVtcy5sZW5ndGggLSAxLFxuICAgICAgLy8gRklYTUU6IGdldCByaWQgb2YgdGhpcy4gV2UgY2FuIHVzZSBgbGFzdGAgbG9jYWwgdmFyaWFibGVcbiAgICAgIC8vIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29tbW9uL05nRm9yT2YjbG9jYWwtdmFyaWFibGVzXG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRlOiBCcmVhZGNydW1iUmVuZGVyU3RhdGUgPSB7XG4gICAgY3JlYXRlVVJMOiAoKSA9PiAnIycsXG4gICAgaXRlbXM6IFtdLFxuICAgIHJlZmluZTogbm9vcCxcbiAgICBjYW5SZWZpbmU6IGZhbHNlLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBOZ0Fpc0luZGV4KSlcbiAgICBAT3B0aW9uYWwoKVxuICAgIHB1YmxpYyBwYXJlbnRJbmRleDogTmdBaXNJbmRleCxcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gTmdBaXNJbnN0YW50U2VhcmNoKSlcbiAgICBwdWJsaWMgaW5zdGFudFNlYXJjaEluc3RhbmNlOiBOZ0Fpc0luc3RhbnRTZWFyY2hcbiAgKSB7XG4gICAgc3VwZXIoJ0JyZWFkY3J1bWInKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNyZWF0ZVdpZGdldChcbiAgICAgIGNvbm5lY3RCcmVhZGNydW1iLFxuICAgICAge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgIHJvb3RQYXRoOiB0aGlzLnJvb3RQYXRoLFxuICAgICAgICBzZXBhcmF0b3I6IHRoaXMuc2VwYXJhdG9yLFxuICAgICAgICB0cmFuc2Zvcm1JdGVtczogdGhpcy50cmFuc2Zvcm1JdGVtcyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICQkd2lkZ2V0VHlwZTogJ2Fpcy5icmVhZGNydW1iJyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDbGljayhcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBpdGVtOiBCcmVhZGNydW1iQ29ubmVjdG9yUGFyYW1zSXRlbVxuICApOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKGl0ZW0udmFsdWUpIHtcbiAgICAgIHRoaXMuc3RhdGUucmVmaW5lKGl0ZW0udmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIl19