@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
92 lines • 10.8 kB
JavaScript
import { coerceNumberProperty } from '@angular/cdk/coercion';
import { VIRTUAL_SCROLL_STRATEGY } from '@angular/cdk/scrolling';
import { Directive, forwardRef, Input } from '@angular/core';
import { VirtualScrollWindowStrategy } from './virtual-scroll-window-strategy';
import * as i0 from "@angular/core";
/**
* Provider factory for `VirtualScrollWindowStrategy` that simply extracts the already created
* `VirtualScrollWindowStrategy` from the given directive.
* @param windowDir The instance of `VirtualScrollWindowDirective` to extract the
* `VirtualScrollWindowStrategy` from.
*/
export function _virtualScrollWindowStrategyFactory(windowDir) {
return windowDir._scrollStrategy;
}
// This is an adapted version of the original CdkFixedSizeVirtualScroll
// https://github.com/angular/components/blob/master/src/cdk/scrolling/fixed-size-virtual-scroll.ts
export class VirtualScrollWindowDirective {
constructor() {
this._itemSizePx = 20;
this._minBufferPx = 100;
this._maxBufferPx = 200;
this._offsetSizePx = 0;
/** The scroll strategy used by this directive. */
this._scrollStrategy = new VirtualScrollWindowStrategy(this.itemSizePx, this.offsetSizePx, this.minBufferPx, this.maxBufferPx);
}
/** The size of the items in the list (in pixels). */
get itemSizePx() {
return this._itemSizePx;
}
set itemSizePx(value) {
this._itemSizePx = coerceNumberProperty(value);
}
/**
* The minimum amount of buffer rendered beyond the viewport (in pixels).
* If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.
*/
get minBufferPx() {
return this._minBufferPx;
}
set minBufferPx(value) {
this._minBufferPx = coerceNumberProperty(value);
}
/**
* The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px.
*/
get maxBufferPx() {
return this._maxBufferPx;
}
set maxBufferPx(value) {
this._maxBufferPx = coerceNumberProperty(value);
}
/** The size of the offset (in pixels). */
get offsetSizePx() {
return this._offsetSizePx;
}
set offsetSizePx(value) {
this._offsetSizePx = coerceNumberProperty(value);
}
ngOnChanges() {
this._scrollStrategy.updateItemAndBufferSize(this.itemSizePx, this.offsetSizePx, this.minBufferPx, this.maxBufferPx);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VirtualScrollWindowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: VirtualScrollWindowDirective, selector: "cdk-virtual-scroll-viewport[windowVirtualScrollStrategy]", inputs: { itemSizePx: "itemSizePx", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", offsetSizePx: "offsetSizePx" }, providers: [
{
provide: VIRTUAL_SCROLL_STRATEGY,
useFactory: _virtualScrollWindowStrategyFactory,
deps: [forwardRef(() => VirtualScrollWindowDirective)]
}
], usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VirtualScrollWindowDirective, decorators: [{
type: Directive,
args: [{
selector: 'cdk-virtual-scroll-viewport[windowVirtualScrollStrategy]',
providers: [
{
provide: VIRTUAL_SCROLL_STRATEGY,
useFactory: _virtualScrollWindowStrategyFactory,
deps: [forwardRef(() => VirtualScrollWindowDirective)]
}
]
}]
}], propDecorators: { itemSizePx: [{
type: Input
}], minBufferPx: [{
type: Input
}], maxBufferPx: [{
type: Input
}], offsetSizePx: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1zY3JvbGwtd2luZG93LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsLXdpbmRvdy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUUvRTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQ0FBbUMsQ0FBQyxTQUF1QztJQUN6RixPQUFPLFNBQVMsQ0FBQyxlQUFlLENBQUM7QUFDbkMsQ0FBQztBQUVELHVFQUF1RTtBQUN2RSxtR0FBbUc7QUFXbkcsTUFBTSxPQUFPLDRCQUE0QjtJQVZ6QztRQW1CRSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQWFqQixpQkFBWSxHQUFHLEdBQUcsQ0FBQztRQVluQixpQkFBWSxHQUFHLEdBQUcsQ0FBQztRQVVuQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUVsQixrREFBa0Q7UUFDbEQsb0JBQWUsR0FBZ0MsSUFBSSwyQkFBMkIsQ0FDNUUsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO0tBVUg7SUE3REMscURBQXFEO0lBQ3JELElBQ0ksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFHRDs7O09BR0c7SUFDSCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBR0Q7O09BRUc7SUFDSCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBR0QsMENBQTBDO0lBQzFDLElBQ0ksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFXRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FDMUMsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO0lBQ0osQ0FBQzsrR0E3RFUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsK01BUjVCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHVCQUF1QjtnQkFDaEMsVUFBVSxFQUFFLG1DQUFtQztnQkFDL0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDLENBQUM7YUFDdkQ7U0FDRjs7NEZBRVUsNEJBQTRCO2tCQVZ4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwREFBMEQ7b0JBQ3BFLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsdUJBQXVCOzRCQUNoQyxVQUFVLEVBQUUsbUNBQW1DOzRCQUMvQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDLENBQUM7eUJBQ3ZEO3FCQUNGO2lCQUNGOzhCQUlLLFVBQVU7c0JBRGIsS0FBSztnQkFjRixXQUFXO3NCQURkLEtBQUs7Z0JBYUYsV0FBVztzQkFEZCxLQUFLO2dCQVdGLFlBQVk7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IFZJUlRVQUxfU0NST0xMX1NUUkFURUdZIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxXaW5kb3dTdHJhdGVneSB9IGZyb20gJy4vdmlydHVhbC1zY3JvbGwtd2luZG93LXN0cmF0ZWd5JztcblxuLyoqXG4gKiBQcm92aWRlciBmYWN0b3J5IGZvciBgVmlydHVhbFNjcm9sbFdpbmRvd1N0cmF0ZWd5YCB0aGF0IHNpbXBseSBleHRyYWN0cyB0aGUgYWxyZWFkeSBjcmVhdGVkXG4gKiBgVmlydHVhbFNjcm9sbFdpbmRvd1N0cmF0ZWd5YCBmcm9tIHRoZSBnaXZlbiBkaXJlY3RpdmUuXG4gKiBAcGFyYW0gd2luZG93RGlyIFRoZSBpbnN0YW5jZSBvZiBgVmlydHVhbFNjcm9sbFdpbmRvd0RpcmVjdGl2ZWAgdG8gZXh0cmFjdCB0aGVcbiAqICAgICBgVmlydHVhbFNjcm9sbFdpbmRvd1N0cmF0ZWd5YCBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX3ZpcnR1YWxTY3JvbGxXaW5kb3dTdHJhdGVneUZhY3Rvcnkod2luZG93RGlyOiBWaXJ0dWFsU2Nyb2xsV2luZG93RGlyZWN0aXZlKSB7XG4gIHJldHVybiB3aW5kb3dEaXIuX3Njcm9sbFN0cmF0ZWd5O1xufVxuXG4vLyBUaGlzIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21hc3Rlci9zcmMvY2RrL3Njcm9sbGluZy9maXhlZC1zaXplLXZpcnR1YWwtc2Nyb2xsLnRzXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRbd2luZG93VmlydHVhbFNjcm9sbFN0cmF0ZWd5XScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFZJUlRVQUxfU0NST0xMX1NUUkFURUdZLFxuICAgICAgdXNlRmFjdG9yeTogX3ZpcnR1YWxTY3JvbGxXaW5kb3dTdHJhdGVneUZhY3RvcnksXG4gICAgICBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBWaXJ0dWFsU2Nyb2xsV2luZG93RGlyZWN0aXZlKV1cbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVmlydHVhbFNjcm9sbFdpbmRvd0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKiBUaGUgc2l6ZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgKGluIHBpeGVscykuICovXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtU2l6ZVB4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1TaXplUHg7XG4gIH1cbiAgc2V0IGl0ZW1TaXplUHgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2l0ZW1TaXplUHggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgX2l0ZW1TaXplUHggPSAyMDtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIGJ1ZmZlciByZW5kZXJlZCBiZXlvbmQgdGhlIHZpZXdwb3J0IChpbiBwaXhlbHMpLlxuICAgKiBJZiB0aGUgYW1vdW50IG9mIGJ1ZmZlciBkaXBzIGJlbG93IHRoaXMgbnVtYmVyLCBtb3JlIGl0ZW1zIHdpbGwgYmUgcmVuZGVyZWQuIERlZmF1bHRzIHRvIDEwMHB4LlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG1pbkJ1ZmZlclB4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbkJ1ZmZlclB4O1xuICB9XG4gIHNldCBtaW5CdWZmZXJQeCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWluQnVmZmVyUHggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgX21pbkJ1ZmZlclB4ID0gMTAwO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBpeGVscyB3b3J0aCBvZiBidWZmZXIgdG8gcmVuZGVyIGZvciB3aGVuIHJlbmRlcmluZyBuZXcgaXRlbXMuIERlZmF1bHRzIHRvIDIwMHB4LlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG1heEJ1ZmZlclB4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heEJ1ZmZlclB4O1xuICB9XG4gIHNldCBtYXhCdWZmZXJQeCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4QnVmZmVyUHggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgX21heEJ1ZmZlclB4ID0gMjAwO1xuXG4gIC8qKiBUaGUgc2l6ZSBvZiB0aGUgb2Zmc2V0IChpbiBwaXhlbHMpLiAqL1xuICBASW5wdXQoKVxuICBnZXQgb2Zmc2V0U2l6ZVB4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX29mZnNldFNpemVQeDtcbiAgfVxuICBzZXQgb2Zmc2V0U2l6ZVB4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9vZmZzZXRTaXplUHggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgX29mZnNldFNpemVQeCA9IDA7XG5cbiAgLyoqIFRoZSBzY3JvbGwgc3RyYXRlZ3kgdXNlZCBieSB0aGlzIGRpcmVjdGl2ZS4gKi9cbiAgX3Njcm9sbFN0cmF0ZWd5OiBWaXJ0dWFsU2Nyb2xsV2luZG93U3RyYXRlZ3kgPSBuZXcgVmlydHVhbFNjcm9sbFdpbmRvd1N0cmF0ZWd5KFxuICAgIHRoaXMuaXRlbVNpemVQeCxcbiAgICB0aGlzLm9mZnNldFNpemVQeCxcbiAgICB0aGlzLm1pbkJ1ZmZlclB4LFxuICAgIHRoaXMubWF4QnVmZmVyUHhcbiAgKTtcblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZShcbiAgICAgIHRoaXMuaXRlbVNpemVQeCxcbiAgICAgIHRoaXMub2Zmc2V0U2l6ZVB4LFxuICAgICAgdGhpcy5taW5CdWZmZXJQeCxcbiAgICAgIHRoaXMubWF4QnVmZmVyUHhcbiAgICApO1xuICB9XG59XG4iXX0=