RSS Git Download  Clone
Raw Blame History 1kB 52 lines
import { SettingsService } from '../../../services/settings.service';

/**
 * Shared pagination logic for key type renderers.
 * Replaces AngularJS p3xrKeyPaging factory.
 */

export class KeyPaging {
    page = 1;
    pages = 1;
    private zsetMode: boolean;
    private settingsService?: SettingsService;

    constructor(options?: { zsetMode?: boolean; settingsService?: SettingsService }) {
        this.zsetMode = options?.zsetMode ?? false;
        this.settingsService = options?.settingsService;
    }

    figurePaging(valueLength: number): void {
        const pageCount = this.settingsService?.keyPageCount() ?? 50;
        const itemCount = this.zsetMode ? Math.ceil(valueLength / 2) : valueLength;
        this.pages = Math.max(Math.ceil(itemCount / pageCount), 1);
        this.page = 1;
    }

    get pageCount(): number {
        return this.settingsService?.keyPageCount() ?? 50;
    }

    get startIndex(): number {
        return this.pageCount * (this.page - 1);
    }

    get endIndex(): number {
        return this.startIndex + this.pageCount;
    }

    pager(action: string): void {
        switch (action) {
            case 'first': this.page = 1; break;
            case 'prev': if (this.page > 1) this.page--; break;
            case 'next': if (this.page < this.pages) this.page++; break;
            case 'last': this.page = this.pages; break;
        }
    }

    pageChange(): void {
        if (this.page < 1) this.page = 1;
        if (this.page > this.pages) this.page = this.pages;
    }
}