ngx-infinite-scroller
Version:
Infinite bidirectional scroll directive for Angular 11
42 lines • 7.08 kB
JavaScript
import { tap, filter } from 'rxjs/operators';
import { StrategyBase } from './strategy-base';
import { InitialScrollPosition } from '../enum/initial-scroll-position-type.enum';
export class ScrollingToBoth extends StrategyBase {
constructor(directive, state) {
super(directive, state);
}
scrollDirectionChanged(scrollPairChanged) {
return scrollPairChanged;
}
scrollRequestZoneChanged(scrollDirectionChanged) {
return scrollDirectionChanged.pipe(filter((scrollPositions) => {
return (super.isScrollUpEnough(scrollPositions[1], this.directive.scrollUpPercentilePositionTrigger) || super.isScrollDownEnough(scrollPositions[1], this.directive.scrollDownPercentilePositionTrigger));
}), tap((scrollPositions) => {
this.scrolledUp = super.wasScrolledUp(scrollPositions[0], scrollPositions[1]);
}));
}
askForUpdate() {
if (this.scrolledUp) {
this.directive.onScrollUp.next();
}
else {
this.directive.onScrollDown.next();
}
}
setInitialScrollPosition() {
const initialScrollPositionValue = super.getInitialScrollPositionValue(InitialScrollPosition.MIDDLE);
this.directive.scrollTo(initialScrollPositionValue);
}
setPreviousScrollPosition() {
let prevScrollPosition;
if (this.scrolledUp) {
prevScrollPosition = this.state.previousScrollTop +
(this.state.scrollHeight - this.state.previousScrollHeight);
}
else {
prevScrollPosition = this.state.previousScrollTop;
}
this.directive.scrollTo(prevScrollPosition);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsaW5nLXRvLWJvdGguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vIiwic291cmNlcyI6WyJzcmMvYXBwL3Njcm9sbGluZy1zdHJhdGVneS9zY3JvbGxpbmctdG8tYm90aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU8vQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVsRixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxZQUFZO0lBSS9DLFlBQ0UsU0FBdUMsRUFDdkMsS0FBNEI7UUFFNUIsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU0sc0JBQXNCLENBQUMsaUJBQStDO1FBRTNFLE9BQU8saUJBQWlCLENBQUM7SUFDM0IsQ0FBQztJQUVNLHdCQUF3QixDQUFDLHNCQUFvRDtRQUVsRixPQUFPLHNCQUFzQixDQUFDLElBQUksQ0FDaEMsTUFBTSxDQUFDLENBQUMsZUFBaUMsRUFBRSxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQzVCLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FDakQsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQzNCLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FDbkQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsZUFBaUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FDbkMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUNsQixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2xDO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFTSx3QkFBd0I7UUFDN0IsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUMsNkJBQTZCLENBQ3BFLHFCQUFxQixDQUFDLE1BQU0sQ0FDN0IsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixJQUFJLGtCQUFrQixDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQjtnQkFDL0MsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDL0Q7YUFBTTtZQUNMLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7U0FDbkQ7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTdHJhdGVneUJhc2UgfSBmcm9tICcuL3N0cmF0ZWd5LWJhc2UnO1xuXG5pbXBvcnQgeyBOZ3hJbmZpbml0ZVNjcm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vbmd4LWluZmluaXRlLXNjcm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEaXJlY3RpdmVTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9kaXJlY3RpdmUtc3RhdGUuc2VydmljZSc7XG5cbmltcG9ydCB7IFNjcm9sbGluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vbW9kZWwvc2Nyb2xsaW5nLXN0cmF0ZWd5Lm1vZGVsJztcbmltcG9ydCB7IFNjcm9sbFBvc2l0aW9uIH0gZnJvbSAnLi4vbW9kZWwvc2Nyb2xsLXBvc2l0aW9uLm1vZGVsJztcbmltcG9ydCB7IEluaXRpYWxTY3JvbGxQb3NpdGlvbiB9IGZyb20gJy4uL2VudW0vaW5pdGlhbC1zY3JvbGwtcG9zaXRpb24tdHlwZS5lbnVtJztcblxuZXhwb3J0IGNsYXNzIFNjcm9sbGluZ1RvQm90aCBleHRlbmRzIFN0cmF0ZWd5QmFzZSBpbXBsZW1lbnRzIFNjcm9sbGluZ1N0cmF0ZWd5IHtcblxuICBwcml2YXRlIHNjcm9sbGVkVXA6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGlyZWN0aXZlOiBOZ3hJbmZpbml0ZVNjcm9sbGVyRGlyZWN0aXZlLFxuICAgIHN0YXRlOiBEaXJlY3RpdmVTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZGlyZWN0aXZlLCBzdGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsRGlyZWN0aW9uQ2hhbmdlZChzY3JvbGxQYWlyQ2hhbmdlZDogT2JzZXJ2YWJsZTxTY3JvbGxQb3NpdGlvbltdPik6XG4gICAgT2JzZXJ2YWJsZTxTY3JvbGxQb3NpdGlvbltdPiB7XG4gICAgcmV0dXJuIHNjcm9sbFBhaXJDaGFuZ2VkO1xuICB9XG5cbiAgcHVibGljIHNjcm9sbFJlcXVlc3Rab25lQ2hhbmdlZChzY3JvbGxEaXJlY3Rpb25DaGFuZ2VkOiBPYnNlcnZhYmxlPFNjcm9sbFBvc2l0aW9uW10+KTpcbiAgICBPYnNlcnZhYmxlPFNjcm9sbFBvc2l0aW9uW10+IHtcbiAgICByZXR1cm4gc2Nyb2xsRGlyZWN0aW9uQ2hhbmdlZC5waXBlKFxuICAgICAgZmlsdGVyKChzY3JvbGxQb3NpdGlvbnM6IFNjcm9sbFBvc2l0aW9uW10pID0+IHtcbiAgICAgICAgcmV0dXJuIChzdXBlci5pc1Njcm9sbFVwRW5vdWdoKFxuICAgICAgICAgIHNjcm9sbFBvc2l0aW9uc1sxXSxcbiAgICAgICAgICB0aGlzLmRpcmVjdGl2ZS5zY3JvbGxVcFBlcmNlbnRpbGVQb3NpdGlvblRyaWdnZXJcbiAgICAgICAgKSB8fCBzdXBlci5pc1Njcm9sbERvd25Fbm91Z2goXG4gICAgICAgICAgc2Nyb2xsUG9zaXRpb25zWzFdLFxuICAgICAgICAgIHRoaXMuZGlyZWN0aXZlLnNjcm9sbERvd25QZXJjZW50aWxlUG9zaXRpb25UcmlnZ2VyXG4gICAgICAgICkpO1xuICAgICAgfSksXG4gICAgICB0YXAoKHNjcm9sbFBvc2l0aW9uczogU2Nyb2xsUG9zaXRpb25bXSkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbGVkVXAgPSBzdXBlci53YXNTY3JvbGxlZFVwKFxuICAgICAgICAgIHNjcm9sbFBvc2l0aW9uc1swXSxcbiAgICAgICAgICBzY3JvbGxQb3NpdGlvbnNbMV0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFza0ZvclVwZGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY3JvbGxlZFVwKSB7XG4gICAgICB0aGlzLmRpcmVjdGl2ZS5vblNjcm9sbFVwLm5leHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXJlY3RpdmUub25TY3JvbGxEb3duLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0SW5pdGlhbFNjcm9sbFBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWxTY3JvbGxQb3NpdGlvblZhbHVlID0gc3VwZXIuZ2V0SW5pdGlhbFNjcm9sbFBvc2l0aW9uVmFsdWUoXG4gICAgICBJbml0aWFsU2Nyb2xsUG9zaXRpb24uTUlERExFLFxuICAgICk7XG5cbiAgICB0aGlzLmRpcmVjdGl2ZS5zY3JvbGxUbyhpbml0aWFsU2Nyb2xsUG9zaXRpb25WYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0UHJldmlvdXNTY3JvbGxQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgcHJldlNjcm9sbFBvc2l0aW9uO1xuXG4gICAgaWYgKHRoaXMuc2Nyb2xsZWRVcCkge1xuICAgICAgcHJldlNjcm9sbFBvc2l0aW9uID0gdGhpcy5zdGF0ZS5wcmV2aW91c1Njcm9sbFRvcCArXG4gICAgICAgICh0aGlzLnN0YXRlLnNjcm9sbEhlaWdodCAtIHRoaXMuc3RhdGUucHJldmlvdXNTY3JvbGxIZWlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmV2U2Nyb2xsUG9zaXRpb24gPSB0aGlzLnN0YXRlLnByZXZpb3VzU2Nyb2xsVG9wO1xuICAgIH1cblxuICAgIHRoaXMuZGlyZWN0aXZlLnNjcm9sbFRvKHByZXZTY3JvbGxQb3NpdGlvbik7XG4gIH1cbn1cbiJdfQ==