UNPKG

angular-instantsearch

Version:

Lightning-fast search for Angular apps, by Algolia.

106 lines (105 loc) 10.8 kB
import { Component, Input, Inject, forwardRef, Optional } from '@angular/core'; import { connectMenu } 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 NgAisMenu extends TypedBaseWidget { constructor(parentIndex, instantSearchInstance) { super('Menu'); this.parentIndex = parentIndex; this.instantSearchInstance = instantSearchInstance; // rendering options this.showMoreLabel = 'Show more'; this.showLessLabel = 'Show less'; this.state = { items: [], refine: noop, createURL: () => '#', canRefine: false, isShowingMore: false, canToggleShowMore: false, toggleShowMore: noop, sendEvent: noop, }; } get isHidden() { return this.state.items.length === 0 && this.autoHideContainer; } get showMoreClass() { let className = this.cx('showMore'); if (!this.state.canToggleShowMore) { className = `${className} ${this.cx('showMore', 'disabled')}`; } return className; } ngOnInit() { this.createWidget(connectMenu, { attribute: this.attribute, showMore: this.showMore, limit: this.limit, showMoreLimit: this.showMoreLimit, sortBy: this.sortBy, transformItems: this.transformItems, }, { $$widgetType: 'ais.menu', }); super.ngOnInit(); } handleClick(event, value) { event.preventDefault(); event.stopPropagation(); this.state.refine(value); } } NgAisMenu.decorators = [ { type: Component, args: [{ selector: 'ais-menu', template: ` <div [class]="cx()" *ngIf="!isHidden" > <ul [class]="cx('list')"> <li [class]="getItemClass(item)" *ngFor="let item of state.items" (click)="handleClick($event, item.value)" > <a href="{{state.createURL(item.value)}}" [class]="cx('link')" (click)="handleClick($event, item.value)" > <span [class]="cx('label')">{{item.label}}</span> <span [class]="cx('count')">{{item.count}}</span> </a> </li> </ul> <button *ngIf="showMore" (click)="state.toggleShowMore()" [class]="showMoreClass" [disabled]="!state.canToggleShowMore" > {{state.isShowingMore ? showLessLabel : showMoreLabel}} </button> </div> ` },] } ]; NgAisMenu.ctorParameters = () => [ { type: NgAisIndex, decorators: [{ type: Inject, args: [forwardRef(() => NgAisIndex),] }, { type: Optional }] }, { type: NgAisInstantSearch, decorators: [{ type: Inject, args: [forwardRef(() => NgAisInstantSearch),] }] } ]; NgAisMenu.propDecorators = { showMoreLabel: [{ type: Input }], showLessLabel: [{ type: Input }], attribute: [{ type: Input }], showMore: [{ type: Input }], limit: [{ type: Input }], showMoreLimit: [{ type: Input }], sortBy: [{ type: Input }], transformItems: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW51L21lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQTJDaEMsTUFBTSxPQUFPLFNBQVUsU0FBUSxlQUc5QjtJQXNDQyxZQUdTLFdBQXVCLEVBRXZCLHFCQUF5QztRQUVoRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFKUCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUV2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQW9CO1FBMUNsRCxvQkFBb0I7UUFDSixrQkFBYSxHQUFXLFdBQVcsQ0FBQztRQUNwQyxrQkFBYSxHQUFXLFdBQVcsQ0FBQztRQVU3QyxVQUFLLEdBQW9CO1lBQzlCLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLElBQUk7WUFDWixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRztZQUNwQixTQUFTLEVBQUUsS0FBSztZQUNoQixhQUFhLEVBQUUsS0FBSztZQUNwQixpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUF3QkYsQ0FBQztJQXRCRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO1lBQ2pDLFNBQVMsR0FBRyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1NBQy9EO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQVlNLFFBQVE7UUFDYixJQUFJLENBQUMsWUFBWSxDQUNmLFdBQVcsRUFDWDtZQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLEVBQ0Q7WUFDRSxZQUFZLEVBQUUsVUFBVTtTQUN6QixDQUNGLENBQUM7UUFFRixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQixFQUFFLEtBQXdCO1FBQ3JELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7O1lBOUdGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JUO2FBQ0Y7OztZQTNDUSxVQUFVLHVCQXNGZCxNQUFNLFNBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUNuQyxRQUFRO1lBeEZKLGtCQUFrQix1QkEwRnRCLE1BQU0sU0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7Ozs0QkF4QzdDLEtBQUs7NEJBQ0wsS0FBSzt3QkFHTCxLQUFLO3VCQUNMLEtBQUs7b0JBQ0wsS0FBSzs0QkFDTCxLQUFLO3FCQUNMLEtBQUs7NkJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEluamVjdCwgZm9yd2FyZFJlZiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgY29ubmVjdE1lbnUgfSBmcm9tICdpbnN0YW50c2VhcmNoLmpzL2VzL2Nvbm5lY3RvcnMnO1xuaW1wb3J0IHsgVHlwZWRCYXNlV2lkZ2V0IH0gZnJvbSAnLi4vdHlwZWQtYmFzZS13aWRnZXQnO1xuaW1wb3J0IHsgTmdBaXNJbnN0YW50U2VhcmNoIH0gZnJvbSAnLi4vaW5zdGFudHNlYXJjaC9pbnN0YW50c2VhcmNoJztcbmltcG9ydCB7IE5nQWlzSW5kZXggfSBmcm9tICcuLi9pbmRleC13aWRnZXQvaW5kZXgtd2lkZ2V0JztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBNZW51Q29ubmVjdG9yUGFyYW1zLFxuICBNZW51V2lkZ2V0RGVzY3JpcHRpb24sXG4gIE1lbnVSZW5kZXJTdGF0ZSxcbiAgTWVudUl0ZW0sXG59IGZyb20gJ2luc3RhbnRzZWFyY2guanMvZXMvY29ubmVjdG9ycy9tZW51L2Nvbm5lY3RNZW51JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWlzLW1lbnUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJjeCgpXCJcbiAgICAgICpuZ0lmPVwiIWlzSGlkZGVuXCJcbiAgICA+XG4gICAgICA8dWwgW2NsYXNzXT1cImN4KCdsaXN0JylcIj5cbiAgICAgICAgPGxpXG4gICAgICAgICAgW2NsYXNzXT1cImdldEl0ZW1DbGFzcyhpdGVtKVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3RhdGUuaXRlbXNcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQsIGl0ZW0udmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPVwie3tzdGF0ZS5jcmVhdGVVUkwoaXRlbS52YWx1ZSl9fVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiY3goJ2xpbmsnKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50LCBpdGVtLnZhbHVlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImN4KCdsYWJlbCcpXCI+e3tpdGVtLmxhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY3goJ2NvdW50JylcIj57e2l0ZW0uY291bnR9fTwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd01vcmVcIlxuICAgICAgICAoY2xpY2spPVwic3RhdGUudG9nZ2xlU2hvd01vcmUoKVwiXG4gICAgICAgIFtjbGFzc109XCJzaG93TW9yZUNsYXNzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFzdGF0ZS5jYW5Ub2dnbGVTaG93TW9yZVwiXG4gICAgICA+XG4gICAgICAgIHt7c3RhdGUuaXNTaG93aW5nTW9yZSA/IHNob3dMZXNzTGFiZWwgOiBzaG93TW9yZUxhYmVsfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0Fpc01lbnUgZXh0ZW5kcyBUeXBlZEJhc2VXaWRnZXQ8XG4gIE1lbnVXaWRnZXREZXNjcmlwdGlvbixcbiAgTWVudUNvbm5lY3RvclBhcmFtc1xuPiB7XG4gIC8vIHJlbmRlcmluZyBvcHRpb25zXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93TW9yZUxhYmVsOiBzdHJpbmcgPSAnU2hvdyBtb3JlJztcbiAgQElucHV0KCkgcHVibGljIHNob3dMZXNzTGFiZWw6IHN0cmluZyA9ICdTaG93IGxlc3MnO1xuXG4gIC8vIGluc3RhbmNlIG9wdGlvbnNcbiAgQElucHV0KCkgcHVibGljIGF0dHJpYnV0ZTogTWVudUNvbm5lY3RvclBhcmFtc1snYXR0cmlidXRlJ107XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93TW9yZT86IE1lbnVDb25uZWN0b3JQYXJhbXNbJ3Nob3dNb3JlJ107XG4gIEBJbnB1dCgpIHB1YmxpYyBsaW1pdD86IE1lbnVDb25uZWN0b3JQYXJhbXNbJ2xpbWl0J107XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93TW9yZUxpbWl0PzogTWVudUNvbm5lY3RvclBhcmFtc1snc2hvd01vcmVMaW1pdCddO1xuICBASW5wdXQoKSBwdWJsaWMgc29ydEJ5PzogTWVudUNvbm5lY3RvclBhcmFtc1snc29ydEJ5J107XG4gIEBJbnB1dCgpIHB1YmxpYyB0cmFuc2Zvcm1JdGVtcz86IE1lbnVDb25uZWN0b3JQYXJhbXNbJ3RyYW5zZm9ybUl0ZW1zJ107XG5cbiAgcHVibGljIHN0YXRlOiBNZW51UmVuZGVyU3RhdGUgPSB7XG4gICAgaXRlbXM6IFtdLFxuICAgIHJlZmluZTogbm9vcCxcbiAgICBjcmVhdGVVUkw6ICgpID0+ICcjJyxcbiAgICBjYW5SZWZpbmU6IGZhbHNlLFxuICAgIGlzU2hvd2luZ01vcmU6IGZhbHNlLFxuICAgIGNhblRvZ2dsZVNob3dNb3JlOiBmYWxzZSxcbiAgICB0b2dnbGVTaG93TW9yZTogbm9vcCxcbiAgICBzZW5kRXZlbnQ6IG5vb3AsXG4gIH07XG5cbiAgZ2V0IGlzSGlkZGVuKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLml0ZW1zLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmF1dG9IaWRlQ29udGFpbmVyO1xuICB9XG5cbiAgZ2V0IHNob3dNb3JlQ2xhc3MoKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMuY3goJ3Nob3dNb3JlJyk7XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuY2FuVG9nZ2xlU2hvd01vcmUpIHtcbiAgICAgIGNsYXNzTmFtZSA9IGAke2NsYXNzTmFtZX0gJHt0aGlzLmN4KCdzaG93TW9yZScsICdkaXNhYmxlZCcpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBOZ0Fpc0luZGV4KSlcbiAgICBAT3B0aW9uYWwoKVxuICAgIHB1YmxpYyBwYXJlbnRJbmRleDogTmdBaXNJbmRleCxcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gTmdBaXNJbnN0YW50U2VhcmNoKSlcbiAgICBwdWJsaWMgaW5zdGFudFNlYXJjaEluc3RhbmNlOiBOZ0Fpc0luc3RhbnRTZWFyY2hcbiAgKSB7XG4gICAgc3VwZXIoJ01lbnUnKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNyZWF0ZVdpZGdldChcbiAgICAgIGNvbm5lY3RNZW51LFxuICAgICAge1xuICAgICAgICBhdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLFxuICAgICAgICBzaG93TW9yZTogdGhpcy5zaG93TW9yZSxcbiAgICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICAgIHNob3dNb3JlTGltaXQ6IHRoaXMuc2hvd01vcmVMaW1pdCxcbiAgICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICAgICAgdHJhbnNmb3JtSXRlbXM6IHRoaXMudHJhbnNmb3JtSXRlbXMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAkJHdpZGdldFR5cGU6ICdhaXMubWVudScsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCwgdmFsdWU6IE1lbnVJdGVtWyd2YWx1ZSddKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc3RhdGUucmVmaW5lKHZhbHVlKTtcbiAgfVxufVxuIl19