diff options
Diffstat (limited to 'client/src/app/videos/recommendations')
3 files changed, 18 insertions, 25 deletions
diff --git a/client/src/app/videos/recommendations/recent-videos-recommendation.service.ts b/client/src/app/videos/recommendations/recent-videos-recommendation.service.ts index 59acf17bc..6d7b159da 100644 --- a/client/src/app/videos/recommendations/recent-videos-recommendation.service.ts +++ b/client/src/app/videos/recommendations/recent-videos-recommendation.service.ts | |||
@@ -3,8 +3,8 @@ import { RecommendationService } from '@app/videos/recommendations/recommendatio | |||
3 | import { Video } from '@app/shared/video/video.model' | 3 | import { Video } from '@app/shared/video/video.model' |
4 | import { RecommendationInfo } from '@app/shared/video/recommendation-info.model' | 4 | import { RecommendationInfo } from '@app/shared/video/recommendation-info.model' |
5 | import { VideoService } from '@app/shared/video/video.service' | 5 | import { VideoService } from '@app/shared/video/video.service' |
6 | import { map } from 'rxjs/operators' | 6 | import { map, switchMap } from 'rxjs/operators' |
7 | import { Observable } from 'rxjs' | 7 | import { Observable, of } from 'rxjs' |
8 | import { SearchService } from '@app/search/search.service' | 8 | import { SearchService } from '@app/search/search.service' |
9 | import { AdvancedSearch } from '@app/search/advanced-search.model' | 9 | import { AdvancedSearch } from '@app/search/advanced-search.model' |
10 | 10 | ||
@@ -13,7 +13,6 @@ import { AdvancedSearch } from '@app/search/advanced-search.model' | |||
13 | */ | 13 | */ |
14 | @Injectable() | 14 | @Injectable() |
15 | export class RecentVideosRecommendationService implements RecommendationService { | 15 | export class RecentVideosRecommendationService implements RecommendationService { |
16 | |||
17 | readonly pageSize = 5 | 16 | readonly pageSize = 5 |
18 | 17 | ||
19 | constructor ( | 18 | constructor ( |
@@ -32,24 +31,22 @@ export class RecentVideosRecommendationService implements RecommendationService | |||
32 | } | 31 | } |
33 | 32 | ||
34 | private fetchPage (page: number, recommendation: RecommendationInfo): Observable<Video[]> { | 33 | private fetchPage (page: number, recommendation: RecommendationInfo): Observable<Video[]> { |
35 | let pagination = { currentPage: page, itemsPerPage: this.pageSize + 1 } | 34 | const pagination = { currentPage: page, itemsPerPage: this.pageSize + 1 } |
36 | if (!recommendation.tags) { | 35 | const defaultSubscription = this.videos.getVideos(pagination, '-createdAt') |
37 | return this.videos.getVideos(pagination, '-createdAt') | 36 | .pipe(map(v => v.videos)) |
38 | .pipe( | 37 | |
39 | map(v => v.videos) | 38 | if (!recommendation.tags || recommendation.tags.length === 0) return defaultSubscription |
40 | ) | 39 | |
41 | } | ||
42 | if (recommendation.tags.length === 0) { | ||
43 | return this.videos.getVideos(pagination, '-createdAt') | ||
44 | .pipe( | ||
45 | map(v => v.videos) | ||
46 | ) | ||
47 | } | ||
48 | return this.searchService.searchVideos('', | 40 | return this.searchService.searchVideos('', |
49 | pagination, | 41 | pagination, |
50 | new AdvancedSearch({ tagsOneOf: recommendation.tags.join(','), sort: '-createdAt' }) | 42 | new AdvancedSearch({ tagsOneOf: recommendation.tags.join(','), sort: '-createdAt' }) |
51 | ).pipe( | 43 | ).pipe( |
52 | map(v => v.videos) | 44 | map(v => v.videos), |
45 | switchMap(videos => { | ||
46 | if (videos.length <= 1) return defaultSubscription | ||
47 | |||
48 | return of(videos) | ||
49 | }) | ||
53 | ) | 50 | ) |
54 | } | 51 | } |
55 | } | 52 | } |
diff --git a/client/src/app/videos/recommendations/recommendations.service.ts b/client/src/app/videos/recommendations/recommendations.service.ts index 114a808b5..a547e289d 100644 --- a/client/src/app/videos/recommendations/recommendations.service.ts +++ b/client/src/app/videos/recommendations/recommendations.service.ts | |||
@@ -2,8 +2,6 @@ import { Video } from '@app/shared/video/video.model' | |||
2 | import { RecommendationInfo } from '@app/shared/video/recommendation-info.model' | 2 | import { RecommendationInfo } from '@app/shared/video/recommendation-info.model' |
3 | import { Observable } from 'rxjs' | 3 | import { Observable } from 'rxjs' |
4 | 4 | ||
5 | export type UUID = string | ||
6 | |||
7 | export interface RecommendationService { | 5 | export interface RecommendationService { |
8 | getRecommendations (recommendation: RecommendationInfo): Observable<Video[]> | 6 | getRecommendations (recommendation: RecommendationInfo): Observable<Video[]> |
9 | } | 7 | } |
diff --git a/client/src/app/videos/recommendations/recommended-videos.component.html b/client/src/app/videos/recommendations/recommended-videos.component.html index 7cfaffec2..73f9f0fe1 100644 --- a/client/src/app/videos/recommendations/recommended-videos.component.html +++ b/client/src/app/videos/recommendations/recommended-videos.component.html | |||
@@ -1,11 +1,9 @@ | |||
1 | <div class="other-videos"> | 1 | <div *ngIf="hasVideos$ | async" class="other-videos"> |
2 | <div i18n class="title-page title-page-single"> | 2 | <div i18n class="title-page title-page-single"> |
3 | Other videos | 3 | Other videos |
4 | </div> | 4 | </div> |
5 | 5 | ||
6 | <ng-container *ngIf="hasVideos$ | async"> | 6 | <div *ngFor="let video of (videos$ | async)"> |
7 | <div *ngFor="let video of (videos$ | async)"> | 7 | <my-video-miniature [video]="video" [user]="user"></my-video-miniature> |
8 | <my-video-miniature [video]="video" [user]="user"></my-video-miniature> | 8 | </div> |
9 | </div> | ||
10 | </ng-container> | ||
11 | </div> | 9 | </div> |