+import { Subject } from 'rxjs'
+import { debounceTime, flatMap } from 'rxjs/operators'
import { Component, OnInit } from '@angular/core'
-import { Notifier } from '@app/core'
-import { AuthService } from '../../core/auth'
-import { ConfirmService } from '../../core/confirm'
-import { User } from '@app/shared'
-import { flatMap } from 'rxjs/operators'
+import { AuthService, ComponentPagination, ConfirmService, Notifier, User } from '@app/core'
+import { VideoPlaylist, VideoPlaylistService } from '@app/shared/shared-video-playlist'
import { I18n } from '@ngx-translate/i18n-polyfill'
-import { VideoPlaylist } from '@app/shared/video-playlist/video-playlist.model'
-import { ComponentPagination } from '@app/shared/rest/component-pagination.model'
-import { VideoPlaylistService } from '@app/shared/video-playlist/video-playlist.service'
import { VideoPlaylistType } from '@shared/models'
@Component({
styleUrls: [ './my-account-video-playlists.component.scss' ]
})
export class MyAccountVideoPlaylistsComponent implements OnInit {
+ videoPlaylistsSearch: string
videoPlaylists: VideoPlaylist[] = []
+ videoPlaylistSearchChanged = new Subject<string>()
pagination: ComponentPagination = {
currentPage: 1,
- itemsPerPage: 10,
+ itemsPerPage: 5,
totalItems: null
}
+ onDataSubject = new Subject<any[]>()
+
private user: User
constructor (
this.user = this.authService.getUser()
this.loadVideoPlaylists()
+
+ this.videoPlaylistSearchChanged
+ .pipe(
+ debounceTime(500))
+ .subscribe(() => {
+ this.loadVideoPlaylists(true)
+ })
}
async deleteVideoPlaylist (videoPlaylist: VideoPlaylist) {
return playlist.type.id === VideoPlaylistType.REGULAR
}
- private loadVideoPlaylists () {
- this.authService.userInformationLoaded
- .pipe(flatMap(() => this.videoPlaylistService.listAccountPlaylists(this.user.account)))
- .subscribe(res => this.videoPlaylists = res.data)
- }
-
- private ofNearOfBottom () {
+ onNearOfBottom () {
// Last page
if (this.pagination.totalItems <= (this.pagination.currentPage * this.pagination.itemsPerPage)) return
this.pagination.currentPage += 1
this.loadVideoPlaylists()
}
+
+ onVideoPlaylistSearchChanged () {
+ this.videoPlaylistSearchChanged.next()
+ }
+
+ private loadVideoPlaylists (reset = false) {
+ this.authService.userInformationLoaded
+ .pipe(flatMap(() => {
+ return this.videoPlaylistService.listAccountPlaylists(this.user.account, this.pagination, '-updatedAt', this.videoPlaylistsSearch)
+ }))
+ .subscribe(res => {
+ if (reset) this.videoPlaylists = []
+ this.videoPlaylists = this.videoPlaylists.concat(res.data)
+ this.pagination.totalItems = res.total
+
+ this.onDataSubject.next(res.data)
+ })
+ }
}