angular-instantsearch
Version:
Lightning-fast search for Angular apps, by Algolia.
120 lines • 15.5 kB
JavaScript
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=