X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fsearch%2Fsearch.component.ts;h=911d5684371208d994cc42274901cae724fe2df1;hb=478796690075a8868bf39a33f3ead80cf0040f42;hp=ed84e24d9fbb8cf3d512d636552066b0304b7eee;hpb=aa55a4da422330fe2816f1764b64f6607a0ca4aa;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/search/search.component.ts b/client/src/app/search/search.component.ts index ed84e24d9..911d56843 100644 --- a/client/src/app/search/search.component.ts +++ b/client/src/app/search/search.component.ts @@ -1,16 +1,16 @@ import { Component, OnDestroy, OnInit } from '@angular/core' import { ActivatedRoute, Router } from '@angular/router' -import { RedirectService } from '@app/core' +import { AuthService, RedirectService } from '@app/core' import { NotificationsService } from 'angular2-notifications' import { forkJoin, Subscription } from 'rxjs' import { SearchService } from '@app/search/search.service' import { ComponentPagination } from '@app/shared/rest/component-pagination.model' import { I18n } from '@ngx-translate/i18n-polyfill' -import { Video } from '../../../../shared' import { MetaService } from '@ngx-meta/core' import { AdvancedSearch } from '@app/search/advanced-search.model' import { VideoChannel } from '@app/shared/video-channel/video-channel.model' import { immutableAssign } from '@app/shared/misc/utils' +import { Video } from '@app/shared/video/video.model' @Component({ selector: 'my-search', @@ -18,8 +18,7 @@ import { immutableAssign } from '@app/shared/misc/utils' templateUrl: './search.component.html' }) export class SearchComponent implements OnInit, OnDestroy { - videos: Video[] = [] - videoChannels: VideoChannel[] = [] + results: (Video | VideoChannel)[] = [] pagination: ComponentPagination = { currentPage: 1, @@ -31,7 +30,8 @@ export class SearchComponent implements OnInit, OnDestroy { currentSearch: string private subActivatedRoute: Subscription - private isInitialLoad = true + private isInitialLoad = false // set to false to show the search filters on first arrival + private firstSearch = true private channelsPerPage = 2 @@ -42,7 +42,8 @@ export class SearchComponent implements OnInit, OnDestroy { private metaService: MetaService, private redirectService: RedirectService, private notificationsService: NotificationsService, - private searchService: SearchService + private searchService: SearchService, + private authService: AuthService ) { } ngOnInit () { @@ -50,15 +51,12 @@ export class SearchComponent implements OnInit, OnDestroy { queryParams => { const querySearch = queryParams['search'] - // New empty search - if (this.currentSearch && !querySearch) return this.redirectService.redirectToHomepage() - // Search updated, reset filters if (this.currentSearch !== querySearch) { this.resetPagination() this.advancedSearch.reset() - this.currentSearch = querySearch + this.currentSearch = querySearch || undefined this.updateTitle() } @@ -79,6 +77,18 @@ export class SearchComponent implements OnInit, OnDestroy { if (this.subActivatedRoute) this.subActivatedRoute.unsubscribe() } + isVideoChannel (d: VideoChannel | Video): d is VideoChannel { + return d instanceof VideoChannel + } + + isVideo (v: VideoChannel | Video): v is Video { + return v instanceof Video + } + + isUserLoggedIn () { + return this.authService.isLoggedIn() + } + search () { forkJoin([ this.searchService.searchVideos(this.currentSearch, this.pagination, this.advancedSearch), @@ -86,18 +96,21 @@ export class SearchComponent implements OnInit, OnDestroy { ]) .subscribe( ([ videosResult, videoChannelsResult ]) => { - this.videos = this.videos.concat(videosResult.videos) + this.results = this.results + .concat(videoChannelsResult.data) + .concat(videosResult.videos) this.pagination.totalItems = videosResult.totalVideos + videoChannelsResult.total - this.videoChannels = this.videoChannels.concat(videoChannelsResult.data) - - // Focus on channels - if (this.channelsPerPage !== 10 && this.videos.length < this.pagination.itemsPerPage) { + // Focus on channels if there are no enough videos + if (this.firstSearch === true && videosResult.videos.length < this.pagination.itemsPerPage) { this.resetPagination() + this.firstSearch = false this.channelsPerPage = 10 this.search() } + + this.firstSearch = false }, error => { @@ -121,13 +134,16 @@ export class SearchComponent implements OnInit, OnDestroy { this.updateUrlFromAdvancedSearch() } + numberOfFilters () { + return this.advancedSearch.size() + } + private resetPagination () { this.pagination.currentPage = 1 this.pagination.totalItems = null this.channelsPerPage = 2 - this.videos = [] - this.videoChannels = [] + this.results = [] } private updateTitle () { @@ -135,9 +151,11 @@ export class SearchComponent implements OnInit, OnDestroy { } private updateUrlFromAdvancedSearch () { + const search = this.currentSearch || undefined + this.router.navigate([], { relativeTo: this.route, - queryParams: Object.assign({}, this.advancedSearch.toUrlObject(), { search: this.currentSearch }) + queryParams: Object.assign({}, this.advancedSearch.toUrlObject(), { search }) }) } }