UNPKG

angular-instantsearch

Version:

Lightning-fast search for Angular apps, by Algolia.

103 lines (100 loc) 10.8 kB
import { Component, ContentChild, Input, TemplateRef, Inject, forwardRef, Optional, } from '@angular/core'; import { connectInfiniteHitsWithInsights } 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 NgAisInfiniteHits extends TypedBaseWidget { constructor(parentIndex, instantSearchInstance) { super('InfiniteHits'); this.parentIndex = parentIndex; this.instantSearchInstance = instantSearchInstance; this.showPrevious = false; this.showPreviousLabel = 'Show previous results'; this.showMoreLabel = 'Show more results'; this.state = { hits: [], results: undefined, currentPageHits: [], isFirstPage: false, isLastPage: false, showMore: noop, showPrevious: noop, sendEvent: noop, bindEvent: () => '', }; this.updateState = (state, isFirstRendering) => { if (isFirstRendering) return; this.state = state; }; } ngOnInit() { this.createWidget(connectInfiniteHitsWithInsights, { escapeHTML: this.escapeHTML, transformItems: this.transformItems, }, { $$widgetType: 'ais.infiniteHits', }); super.ngOnInit(); } showMoreHandler(event) { event.preventDefault(); this.state.showMore(); } showPreviousHandler(event) { event.preventDefault(); this.state.showPrevious(); } } NgAisInfiniteHits.decorators = [ { type: Component, args: [{ selector: 'ais-infinite-hits', template: ` <div [class]="cx()"> <ng-container *ngTemplateOutlet="template; context: state"></ng-container> <!-- default rendering if no template specified --> <button [ngClass]="[cx('loadPrevious'), this.state.isFirstPage ? cx('loadPrevious', 'disabled') : '']" (click)="showPreviousHandler($event)" [disabled]="state.isFirstPage" *ngIf="showPrevious && !template" > {{showPreviousLabel}} </button> <div *ngIf="!template"> <ul [class]="cx('list')"> <li [class]="cx('item')" *ngFor="let hit of state.hits" > <ais-highlight attribute="name" [hit]="hit"> </ais-highlight> </li> </ul> </div> <button [ngClass]="[cx('loadMore'), this.state.isLastPage ? cx('loadMore', 'disabled') : '']" (click)="showMoreHandler($event)" [disabled]="state.isLastPage" *ngIf="!template" > {{showMoreLabel}} </button> </div> ` },] } ]; NgAisInfiniteHits.ctorParameters = () => [ { type: NgAisIndex, decorators: [{ type: Inject, args: [forwardRef(() => NgAisIndex),] }, { type: Optional }] }, { type: NgAisInstantSearch, decorators: [{ type: Inject, args: [forwardRef(() => NgAisInstantSearch),] }] } ]; NgAisInfiniteHits.propDecorators = { template: [{ type: ContentChild, args: [TemplateRef, { static: false },] }], escapeHTML: [{ type: Input }], showPrevious: [{ type: Input }], showPreviousLabel: [{ type: Input }], showMoreLabel: [{ type: Input }], transformItems: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtaGl0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmZpbml0ZS1oaXRzL2luZmluaXRlLWhpdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLFdBQVcsRUFDWCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU1qRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUF5Q2hDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxlQUd0QztJQXlCQyxZQUdTLFdBQXVCLEVBRXZCLHFCQUF5QztRQUVoRCxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFKZixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUV2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQW9CO1FBdkIzQyxpQkFBWSxHQUFnRCxLQUFLLENBQUM7UUFDekQsc0JBQWlCLEdBQVcsdUJBQXVCLENBQUM7UUFDcEQsa0JBQWEsR0FBVyxtQkFBbUIsQ0FBQztRQUlyRCxVQUFLLEdBQTRCO1lBQ3RDLElBQUksRUFBRSxFQUFFO1lBQ1IsT0FBTyxFQUFFLFNBQVM7WUFDbEIsZUFBZSxFQUFFLEVBQUU7WUFDbkIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsUUFBUSxFQUFFLElBQUk7WUFDZCxZQUFZLEVBQUUsSUFBSTtZQUNsQixTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1NBQ3BCLENBQUM7UUFvQ0YsZ0JBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxnQkFBeUIsRUFBRSxFQUFFO1lBQ2pELElBQUksZ0JBQWdCO2dCQUFFLE9BQU87WUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQyxDQUFDO0lBN0JGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksQ0FDZiwrQkFBK0IsRUFDL0I7WUFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLEVBQ0Q7WUFDRSxZQUFZLEVBQUUsa0JBQWtCO1NBQ2pDLENBQ0YsQ0FBQztRQUNGLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQWlCO1FBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUFpQjtRQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs7WUFuR0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ1Q7YUFDRjs7O1lBekNRLFVBQVUsdUJBdUVkLE1BQU0sU0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQ25DLFFBQVE7WUF6RUosa0JBQWtCLHVCQTJFdEIsTUFBTSxTQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzs7O3VCQTVCN0MsWUFBWSxTQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7eUJBSTNDLEtBQUs7MkJBQ0wsS0FBSztnQ0FFTCxLQUFLOzRCQUNMLEtBQUs7NkJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIEluamVjdCxcbiAgZm9yd2FyZFJlZixcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29ubmVjdEluZmluaXRlSGl0c1dpdGhJbnNpZ2h0cyB9IGZyb20gJ2luc3RhbnRzZWFyY2guanMvZXMvY29ubmVjdG9ycyc7XG5pbXBvcnQge1xuICBJbmZpbml0ZUhpdHNDb25uZWN0b3JQYXJhbXMsXG4gIEluZmluaXRlSGl0c1dpZGdldERlc2NyaXB0aW9uLFxuICBJbmZpbml0ZUhpdHNSZW5kZXJTdGF0ZSxcbn0gZnJvbSAnaW5zdGFudHNlYXJjaC5qcy9lcy9jb25uZWN0b3JzL2luZmluaXRlLWhpdHMvY29ubmVjdEluZmluaXRlSGl0cyc7XG5pbXBvcnQgeyBUeXBlZEJhc2VXaWRnZXQgfSBmcm9tICcuLi90eXBlZC1iYXNlLXdpZGdldCc7XG5pbXBvcnQgeyBOZ0Fpc0luc3RhbnRTZWFyY2ggfSBmcm9tICcuLi9pbnN0YW50c2VhcmNoL2luc3RhbnRzZWFyY2gnO1xuaW1wb3J0IHsgTmdBaXNJbmRleCB9IGZyb20gJy4uL2luZGV4LXdpZGdldC9pbmRleC13aWRnZXQnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWlzLWluZmluaXRlLWhpdHMnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImN4KClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogc3RhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBkZWZhdWx0IHJlbmRlcmluZyBpZiBubyB0ZW1wbGF0ZSBzcGVjaWZpZWQgLS0+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cIltjeCgnbG9hZFByZXZpb3VzJyksIHRoaXMuc3RhdGUuaXNGaXJzdFBhZ2UgPyBjeCgnbG9hZFByZXZpb3VzJywgJ2Rpc2FibGVkJykgOiAnJ11cIlxuICAgICAgICAoY2xpY2spPVwic2hvd1ByZXZpb3VzSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInN0YXRlLmlzRmlyc3RQYWdlXCJcbiAgICAgICAgKm5nSWY9XCJzaG93UHJldmlvdXMgJiYgIXRlbXBsYXRlXCJcbiAgICAgID5cbiAgICAgICAge3tzaG93UHJldmlvdXNMYWJlbH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdiAqbmdJZj1cIiF0ZW1wbGF0ZVwiPlxuICAgICAgICA8dWwgW2NsYXNzXT1cImN4KCdsaXN0JylcIj5cbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgIFtjbGFzc109XCJjeCgnaXRlbScpXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoaXQgb2Ygc3RhdGUuaGl0c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGFpcy1oaWdobGlnaHQgYXR0cmlidXRlPVwibmFtZVwiIFtoaXRdPVwiaGl0XCI+XG4gICAgICAgICAgICA8L2Fpcy1oaWdobGlnaHQ+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cIltjeCgnbG9hZE1vcmUnKSwgdGhpcy5zdGF0ZS5pc0xhc3RQYWdlID8gY3goJ2xvYWRNb3JlJywgJ2Rpc2FibGVkJykgOiAnJ11cIlxuICAgICAgICAoY2xpY2spPVwic2hvd01vcmVIYW5kbGVyKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwic3RhdGUuaXNMYXN0UGFnZVwiXG4gICAgICAgICpuZ0lmPVwiIXRlbXBsYXRlXCJcbiAgICAgID5cbiAgICAgICAge3tzaG93TW9yZUxhYmVsfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0Fpc0luZmluaXRlSGl0cyBleHRlbmRzIFR5cGVkQmFzZVdpZGdldDxcbiAgSW5maW5pdGVIaXRzV2lkZ2V0RGVzY3JpcHRpb24sXG4gIEluZmluaXRlSGl0c0Nvbm5lY3RvclBhcmFtc1xuPiB7XG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgdGVtcGxhdGU/OiBhbnk7XG5cbiAgLy8gcmVuZGVyaW5nIG9wdGlvbnNcbiAgQElucHV0KCkgcHVibGljIGVzY2FwZUhUTUw6IEluZmluaXRlSGl0c0Nvbm5lY3RvclBhcmFtc1snZXNjYXBlSFRNTCddO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1ByZXZpb3VzOiBJbmZpbml0ZUhpdHNDb25uZWN0b3JQYXJhbXNbJ3Nob3dQcmV2aW91cyddID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93UHJldmlvdXNMYWJlbDogc3RyaW5nID0gJ1Nob3cgcHJldmlvdXMgcmVzdWx0cyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93TW9yZUxhYmVsOiBzdHJpbmcgPSAnU2hvdyBtb3JlIHJlc3VsdHMnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgdHJhbnNmb3JtSXRlbXM/OiBJbmZpbml0ZUhpdHNDb25uZWN0b3JQYXJhbXNbJ3RyYW5zZm9ybUl0ZW1zJ107XG5cbiAgcHVibGljIHN0YXRlOiBJbmZpbml0ZUhpdHNSZW5kZXJTdGF0ZSA9IHtcbiAgICBoaXRzOiBbXSxcbiAgICByZXN1bHRzOiB1bmRlZmluZWQsXG4gICAgY3VycmVudFBhZ2VIaXRzOiBbXSxcbiAgICBpc0ZpcnN0UGFnZTogZmFsc2UsXG4gICAgaXNMYXN0UGFnZTogZmFsc2UsXG4gICAgc2hvd01vcmU6IG5vb3AsXG4gICAgc2hvd1ByZXZpb3VzOiBub29wLFxuICAgIHNlbmRFdmVudDogbm9vcCxcbiAgICBiaW5kRXZlbnQ6ICgpID0+ICcnLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBOZ0Fpc0luZGV4KSlcbiAgICBAT3B0aW9uYWwoKVxuICAgIHB1YmxpYyBwYXJlbnRJbmRleDogTmdBaXNJbmRleCxcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gTmdBaXNJbnN0YW50U2VhcmNoKSlcbiAgICBwdWJsaWMgaW5zdGFudFNlYXJjaEluc3RhbmNlOiBOZ0Fpc0luc3RhbnRTZWFyY2hcbiAgKSB7XG4gICAgc3VwZXIoJ0luZmluaXRlSGl0cycpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jcmVhdGVXaWRnZXQoXG4gICAgICBjb25uZWN0SW5maW5pdGVIaXRzV2l0aEluc2lnaHRzLFxuICAgICAge1xuICAgICAgICBlc2NhcGVIVE1MOiB0aGlzLmVzY2FwZUhUTUwsXG4gICAgICAgIHRyYW5zZm9ybUl0ZW1zOiB0aGlzLnRyYW5zZm9ybUl0ZW1zLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJCR3aWRnZXRUeXBlOiAnYWlzLmluZmluaXRlSGl0cycsXG4gICAgICB9XG4gICAgKTtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHVibGljIHNob3dNb3JlSGFuZGxlcihldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zdGF0ZS5zaG93TW9yZSgpO1xuICB9XG5cbiAgcHVibGljIHNob3dQcmV2aW91c0hhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc3RhdGUuc2hvd1ByZXZpb3VzKCk7XG4gIH1cblxuICB1cGRhdGVTdGF0ZSA9IChzdGF0ZSwgaXNGaXJzdFJlbmRlcmluZzogYm9vbGVhbikgPT4ge1xuICAgIGlmIChpc0ZpcnN0UmVuZGVyaW5nKSByZXR1cm47XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9O1xufVxuIl19