UNPKG

angular-instantsearch

Version:

Lightning-fast search for Angular apps, by Algolia.

120 lines 15.5 kB
import { Component, Input, ViewChild, Inject, forwardRef, Optional, } from '@angular/core'; import { connectRange } from 'instantsearch.js/es/connectors'; import * as noUiSlider from 'nouislider'; import { TypedBaseWidget } from '../typed-base-widget'; import { NgAisInstantSearch } from '../instantsearch/instantsearch'; import { NgAisIndex } from '../index-widget/index-widget'; import { parseNumberInput, noop } from '../utils'; export class NgAisRangeSlider extends TypedBaseWidget { constructor(parentIndex, instantSearchInstance) { super('RangeSlider'); this.parentIndex = parentIndex; this.instantSearchInstance = instantSearchInstance; // rendering options this.pips = true; this.tooltips = true; this.state = { canRefine: false, format: { from: () => '', to: () => '', }, range: { min: 0, max: 1 }, refine: noop, start: [0, 1], sendEvent: noop, }; this.updateState = (state, isFirstRendering) => { if (isFirstRendering) { // create slider const config = { animate: false, behaviour: 'snap', connect: true, range: { min: 0, max: 1 }, start: [0, 1], step: this.step, tooltips: this.tooltips && [ { to: this.formatTooltip }, { to: this.formatTooltip }, ], }; // tslint:disable-next-line: no-boolean-literal-compare (pips is @Input, so could be not a boolean) if (this.pips === true || typeof this.pips === 'undefined') { Object.assign(config, { pips: { density: 3, mode: 'positions', stepped: true, values: [0, 50, 100], }, }); } else if (this.pips !== undefined) { Object.assign(config, { pips: this.pips }); } this.slider = noUiSlider.create(this.sliderContainer.nativeElement, config); // register listen events this.sliderContainer.nativeElement.noUiSlider.on('change', this.handleChange); } // update component inner state this.state = state; // update the slider state const { range: { min, max }, start, } = state; const disabled = min === max; const range = disabled ? { min, max: max + 0.0001 } : { min, max }; // TODO: test this as we're nolonger passing disable // it seems the API has changed: slider.setAttribute('disabled', true) / slider.removeAttribute('disabled'); // see: https://refreshless.com/nouislider/more/#section-disable this.slider.updateOptions({ range, start }); }; this.handleChange = (values) => { this.state.refine(values); }; this.formatTooltip = (value) => { return value.toFixed(parseNumberInput(this.precision)); }; } get step() { // compute step from the precision value const precision = parseNumberInput(this.precision) || 2; return 1 / Math.pow(10, precision); } ngOnInit() { this.createWidget(connectRange, { attribute: this.attribute, max: parseNumberInput(this.max), min: parseNumberInput(this.min), precision: parseNumberInput(this.precision), }, { $$widgetType: 'ais.rangeSlider', }); super.ngOnInit(); } } NgAisRangeSlider.decorators = [ { type: Component, args: [{ selector: 'ais-range-slider', template: ` <div [class]="cx()"> <div [class]="cx('body')"> <div #sliderContainer></div> </div> </div> ` },] } ]; NgAisRangeSlider.ctorParameters = () => [ { type: NgAisIndex, decorators: [{ type: Inject, args: [forwardRef(() => NgAisIndex),] }, { type: Optional }] }, { type: NgAisInstantSearch, decorators: [{ type: Inject, args: [forwardRef(() => NgAisInstantSearch),] }] } ]; NgAisRangeSlider.propDecorators = { sliderContainer: [{ type: ViewChild, args: ['sliderContainer', { static: false },] }], pips: [{ type: Input }], tooltips: [{ type: Input }], attribute: [{ type: Input }], min: [{ type: Input }], max: [{ type: Input }], precision: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2xpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JhbmdlLXNsaWRlci9yYW5nZS1zbGlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQztBQUV6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFrQmxELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUdyQztJQWtDQyxZQUdTLFdBQXVCLEVBRXZCLHFCQUF5QztRQUVoRCxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFKZCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUV2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQW9CO1FBbkNsRCxvQkFBb0I7UUFDSixTQUFJLEdBQVksSUFBSSxDQUFDO1FBQ3JCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFRbEMsVUFBSyxHQUFxQjtZQUMvQixTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Z0JBQ2QsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7YUFDYjtZQUNELEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUN6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XG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIEluamVjdCxcbiAgZm9yd2FyZFJlZixcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjb25uZWN0UmFuZ2UgfSBmcm9tICdpbnN0YW50c2VhcmNoLmpzL2VzL2Nvbm5lY3RvcnMnO1xuaW1wb3J0ICogYXMgbm9VaVNsaWRlciBmcm9tICdub3Vpc2xpZGVyJztcblxuaW1wb3J0IHsgVHlwZWRCYXNlV2lkZ2V0IH0gZnJvbSAnLi4vdHlwZWQtYmFzZS13aWRnZXQnO1xuaW1wb3J0IHsgTmdBaXNJbnN0YW50U2VhcmNoIH0gZnJvbSAnLi4vaW5zdGFudHNlYXJjaC9pbnN0YW50c2VhcmNoJztcbmltcG9ydCB7IE5nQWlzSW5kZXggfSBmcm9tICcuLi9pbmRleC13aWRnZXQvaW5kZXgtd2lkZ2V0JztcbmltcG9ydCB7IHBhcnNlTnVtYmVySW5wdXQsIG5vb3AgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBSYW5nZUJvdW5kYXJpZXMsXG4gIFJhbmdlQ29ubmVjdG9yUGFyYW1zLFxuICBSYW5nZVdpZGdldERlc2NyaXB0aW9uLFxuICBSYW5nZVJlbmRlclN0YXRlLFxufSBmcm9tICdpbnN0YW50c2VhcmNoLmpzL2VzL2Nvbm5lY3RvcnMvcmFuZ2UvY29ubmVjdFJhbmdlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWlzLXJhbmdlLXNsaWRlcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY3goKVwiPlxuICAgICAgPGRpdiBbY2xhc3NdPVwiY3goJ2JvZHknKVwiPlxuICAgICAgICA8ZGl2ICNzbGlkZXJDb250YWluZXI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTmdBaXNSYW5nZVNsaWRlciBleHRlbmRzIFR5cGVkQmFzZVdpZGdldDxcbiAgUmFuZ2VXaWRnZXREZXNjcmlwdGlvbixcbiAgUmFuZ2VDb25uZWN0b3JQYXJhbXNcbj4ge1xuICBAVmlld0NoaWxkKCdzbGlkZXJDb250YWluZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIHNsaWRlckNvbnRhaW5lcjogYW55O1xuXG4gIC8vIHJlbmRlcmluZyBvcHRpb25zXG4gIEBJbnB1dCgpIHB1YmxpYyBwaXBzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHRvb2x0aXBzOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBpbnN0YW5jZSBvcHRpb25zXG4gIEBJbnB1dCgpIHB1YmxpYyBhdHRyaWJ1dGU6IFJhbmdlQ29ubmVjdG9yUGFyYW1zWydhdHRyaWJ1dGUnXTtcbiAgQElucHV0KCkgcHVibGljIG1pbj86IFJhbmdlQ29ubmVjdG9yUGFyYW1zWydtaW4nXTtcbiAgQElucHV0KCkgcHVibGljIG1heD86IFJhbmdlQ29ubmVjdG9yUGFyYW1zWydtYXgnXTtcbiAgQElucHV0KCkgcHVibGljIHByZWNpc2lvbj86IFJhbmdlQ29ubmVjdG9yUGFyYW1zWydwcmVjaXNpb24nXTtcblxuICBwdWJsaWMgc3RhdGU6IFJhbmdlUmVuZGVyU3RhdGUgPSB7XG4gICAgY2FuUmVmaW5lOiBmYWxzZSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGZyb206ICgpID0+ICcnLFxuICAgICAgdG86ICgpID0+ICcnLFxuICAgIH0sXG4gICAgcmFuZ2U6IHsgbWluOiAwLCBtYXg6IDEgfSxcbiAgICByZWZpbmU6IG5vb3AsXG4gICAgc3RhcnQ6IFswLCAxXSxcbiAgICBzZW5kRXZlbnQ6IG5vb3AsXG4gIH07XG5cbiAgcHJpdmF0ZSBzbGlkZXI6IGFueTtcblxuICBnZXQgc3RlcCgpIHtcbiAgICAvLyBjb21wdXRlIHN0ZXAgZnJvbSB0aGUgcHJlY2lzaW9uIHZhbHVlXG4gICAgY29uc3QgcHJlY2lzaW9uID0gcGFyc2VOdW1iZXJJbnB1dCh0aGlzLnByZWNpc2lvbikgfHwgMjtcbiAgICByZXR1cm4gMSAvIE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE5nQWlzSW5kZXgpKVxuICAgIEBPcHRpb25hbCgpXG4gICAgcHVibGljIHBhcmVudEluZGV4OiBOZ0Fpc0luZGV4LFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBOZ0Fpc0luc3RhbnRTZWFyY2gpKVxuICAgIHB1YmxpYyBpbnN0YW50U2VhcmNoSW5zdGFuY2U6IE5nQWlzSW5zdGFudFNlYXJjaFxuICApIHtcbiAgICBzdXBlcignUmFuZ2VTbGlkZXInKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNyZWF0ZVdpZGdldChcbiAgICAgIGNvbm5lY3RSYW5nZSxcbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlOiB0aGlzLmF0dHJpYnV0ZSxcbiAgICAgICAgbWF4OiBwYXJzZU51bWJlcklucHV0KHRoaXMubWF4KSxcbiAgICAgICAgbWluOiBwYXJzZU51bWJlcklucHV0KHRoaXMubWluKSxcbiAgICAgICAgcHJlY2lzaW9uOiBwYXJzZU51bWJlcklucHV0KHRoaXMucHJlY2lzaW9uKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICQkd2lkZ2V0VHlwZTogJ2Fpcy5yYW5nZVNsaWRlcicsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3RhdGUgPSAoc3RhdGU6IFJhbmdlUmVuZGVyU3RhdGUsIGlzRmlyc3RSZW5kZXJpbmc6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoaXNGaXJzdFJlbmRlcmluZykge1xuICAgICAgLy8gY3JlYXRlIHNsaWRlclxuICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICBhbmltYXRlOiBmYWxzZSxcbiAgICAgICAgYmVoYXZpb3VyOiAnc25hcCcsXG4gICAgICAgIGNvbm5lY3Q6IHRydWUsXG4gICAgICAgIHJhbmdlOiB7IG1pbjogMCwgbWF4OiAxIH0sXG4gICAgICAgIHN0YXJ0OiBbMCwgMV0sXG4gICAgICAgIHN0ZXA6IHRoaXMuc3RlcCxcbiAgICAgICAgdG9vbHRpcHM6IHRoaXMudG9vbHRpcHMgJiYgW1xuICAgICAgICAgIHsgdG86IHRoaXMuZm9ybWF0VG9vbHRpcCB9LFxuICAgICAgICAgIHsgdG86IHRoaXMuZm9ybWF0VG9vbHRpcCB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1ib29sZWFuLWxpdGVyYWwtY29tcGFyZSAocGlwcyBpcyBASW5wdXQsIHNvIGNvdWxkIGJlIG5vdCBhIGJvb2xlYW4pXG4gICAgICBpZiAodGhpcy5waXBzID09PSB0cnVlIHx8IHR5cGVvZiB0aGlzLnBpcHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB7XG4gICAgICAgICAgcGlwczoge1xuICAgICAgICAgICAgZGVuc2l0eTogMyxcbiAgICAgICAgICAgIG1vZGU6ICdwb3NpdGlvbnMnLFxuICAgICAgICAgICAgc3RlcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlczogWzAsIDUwLCAxMDBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBpcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKGNvbmZpZywgeyBwaXBzOiB0aGlzLnBpcHMgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2xpZGVyID0gbm9VaVNsaWRlci5jcmVhdGUoXG4gICAgICAgIHRoaXMuc2xpZGVyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGNvbmZpZ1xuICAgICAgKTtcblxuICAgICAgLy8gcmVnaXN0ZXIgbGlzdGVuIGV2ZW50c1xuICAgICAgdGhpcy5zbGlkZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5ub1VpU2xpZGVyLm9uKFxuICAgICAgICAnY2hhbmdlJyxcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGNvbXBvbmVudCBpbm5lciBzdGF0ZVxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcblxuICAgIC8vIHVwZGF0ZSB0aGUgc2xpZGVyIHN0YXRlXG4gICAgY29uc3Qge1xuICAgICAgcmFuZ2U6IHsgbWluLCBtYXggfSxcbiAgICAgIHN0YXJ0LFxuICAgIH0gPSBzdGF0ZTtcblxuICAgIGNvbnN0IGRpc2FibGVkID0gbWluID09PSBtYXg7XG4gICAgY29uc3QgcmFuZ2UgPSBkaXNhYmxlZCA/IHsgbWluLCBtYXg6IG1heCArIDAuMDAwMSB9IDogeyBtaW4sIG1heCB9O1xuXG4gICAgLy8gVE9ETzogdGVzdCB0aGlzIGFzIHdlJ3JlIG5vbG9uZ2VyIHBhc3NpbmcgZGlzYWJsZVxuICAgIC8vIGl0IHNlZW1zIHRoZSBBUEkgaGFzIGNoYW5nZWQ6IHNsaWRlci5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSkgLyBzbGlkZXIucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgIC8vIHNlZTogaHR0cHM6Ly9yZWZyZXNobGVzcy5jb20vbm91aXNsaWRlci9tb3JlLyNzZWN0aW9uLWRpc2FibGVcbiAgICB0aGlzLnNsaWRlci51cGRhdGVPcHRpb25zKHsgcmFuZ2UsIHN0YXJ0IH0pO1xuICB9O1xuXG4gIHB1YmxpYyBoYW5kbGVDaGFuZ2UgPSAodmFsdWVzOiBSYW5nZUJvdW5kYXJpZXMpID0+IHtcbiAgICB0aGlzLnN0YXRlLnJlZmluZSh2YWx1ZXMpO1xuICB9O1xuXG4gIHB1YmxpYyBmb3JtYXRUb29sdGlwID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gdmFsdWUudG9GaXhlZChwYXJzZU51bWJlcklucHV0KHRoaXMucHJlY2lzaW9uKSk7XG4gIH07XG59XG4iXX0=