From 6194c1b41902e1d4907d192df80d454ae580884b Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 19 Mar 2018 16:18:41 +0100 Subject: [PATCH] Handle resizes on videos list --- .../app/shared/video/abstract-video-list.ts | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/client/src/app/shared/video/abstract-video-list.ts b/client/src/app/shared/video/abstract-video-list.ts index abc9feb06..7235b3425 100644 --- a/client/src/app/shared/video/abstract-video-list.ts +++ b/client/src/app/shared/video/abstract-video-list.ts @@ -4,6 +4,7 @@ import { isInMobileView } from '@app/shared/misc/utils' import { InfiniteScrollerDirective } from '@app/shared/video/infinite-scroller.directive' import { NotificationsService } from 'angular2-notifications' import { Observable } from 'rxjs/Observable' +import { fromEvent } from 'rxjs/observable/fromEvent' import { AuthService } from '../../core/auth' import { ComponentPagination } from '../rest/component-pagination.model' import { SortField } from './sort-field.type' @@ -49,23 +50,11 @@ export abstract class AbstractVideoList implements OnInit { const routeParams = this.route.snapshot.params this.loadRouteParams(routeParams) - if (isInMobileView()) { - this.pagination.itemsPerPage = 5 - this.videoWidth = -1 - } - - if (this.videoWidth !== -1) { - const videosWidth = this.videosElement.nativeElement.offsetWidth - this.pagination.itemsPerPage = Math.floor(videosWidth / this.videoWidth) * AbstractVideoList.LINES_PER_PAGE - } - - // Video takes all the width - if (this.videoWidth === -1) { - this.pageHeight = this.pagination.itemsPerPage * this.videoHeight - } else { - this.pageHeight = this.videoHeight * AbstractVideoList.LINES_PER_PAGE - } + fromEvent(window, 'resize') + .debounceTime(500) + .subscribe(() => this.calcPageSizes()) + this.calcPageSizes() if (this.loadOnInit === true) this.loadMoreVideos(this.pagination.currentPage) } @@ -176,4 +165,32 @@ export abstract class AbstractVideoList implements OnInit { private maxPageLoaded () { return Math.max(...Object.keys(this.loadedPages).map(e => parseInt(e, 10))) } + + private calcPageSizes () { + if (isInMobileView()) { + this.pagination.itemsPerPage = 5 + + // Video takes all the width + this.videoWidth = -1 + this.pageHeight = this.pagination.itemsPerPage * this.videoHeight + } else { + const videosWidth = this.videosElement.nativeElement.offsetWidth + this.pagination.itemsPerPage = Math.floor(videosWidth / this.videoWidth) * AbstractVideoList.LINES_PER_PAGE + this.pageHeight = this.videoHeight * AbstractVideoList.LINES_PER_PAGE + } + + // Rebuild pages because maybe we modified the number of items per page + let videos: Video[] = [] + Object.values(this.loadedPages) + .forEach(videosPage => videos = videos.concat(videosPage)) + this.loadedPages = {} + + for (let i = 1; (i * this.pagination.itemsPerPage) <= videos.length; i++) { + this.loadedPages[i] = videos.slice((i - 1) * this.pagination.itemsPerPage, this.pagination.itemsPerPage * i) + } + + this.buildVideoPages() + + console.log('Re calculated pages after a resize!') + } } -- 2.41.0