angular-instantsearch
Version:
Lightning-fast search for Angular apps, by Algolia.
103 lines (100 loc) • 10.8 kB
JavaScript
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