Неверная логика нумерации страниц - PullRequest
0 голосов
/ 11 июля 2019

Я делаю компонент для нумерации страниц, но в двух случаях логика работы неверна, но я не вижу, где.

Пример необходимой нумерации страниц по React: https://tech.skbkontur.ru/react-ui/#!/Paging

Моя проблема в том, что после 8 страниц после переключения на 4 и 5, 6 и 7 должны появиться соответственно, и "1 2 3 4 5 6 7 8" должно остаться, но после перехода на 6 я буду есть это "1 ... 3 4 5 6 7 8"

Вот функция, отвечающая за формирование списка страниц:

 private getPages(currentPage: number, totalPages: number): Page[] {
        const pages: Page[] = [];

        let startPage = 1;
        let endPage = totalPages;

        const isMaxSized = this.maxSize < totalPages;

        if (isMaxSized) {
            startPage = Math.max(currentPage - Math.floor(this.maxSize / 2), 1);
            endPage = startPage + this.maxSize - 2;

            if (this.page >= 1 && this.page <= 5) {
                endPage = startPage + this.maxSize - 3;
            }

            if (this.page >= this.totalPages - 4) {
                endPage = startPage + this.maxSize - 1;
            }

            if (this.page === 4 || this.page === 5) {
                endPage++;
            }

            if (endPage > totalPages) {
                endPage = totalPages;
                // startPage = endPage - this.maxSize + 4;
            }
        }

        for (let num = startPage; num <= endPage; num++) {
            const page = PaginationComponent.makePage(num, num.toString(), num === currentPage);
            pages.push(page);
        }

        if (totalPages > 7) {
            if (startPage > 1) {
                const previousPageSet = PaginationComponent.makePage(startPage - 1, '...', false);
                pages.unshift(previousPageSet);
            }

            if (endPage < totalPages) {
                const nextPageSet = PaginationComponent.makePage(endPage + 1, '...', false);
                pages.push(nextPageSet);
            }
        }

        return pages;
    }
...