1 import * as debug from 'debug'
2 import { Subscription } from 'rxjs'
3 import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'
4 import { FormBuilder, FormGroup } from '@angular/forms'
5 import { AuthService } from '@app/core'
6 import { ServerService } from '@app/core/server/server.service'
7 import { UserRight } from '@shared/models'
8 import { NSFWPolicyType } from '@shared/models/videos'
9 import { PeertubeModalService } from '../shared-main'
10 import { VideoFilters } from './video-filters.model'
12 const logger = debug('peertube:videos:VideoFiltersHeaderComponent')
15 selector: 'my-video-filters-header',
16 styleUrls: [ './video-filters-header.component.scss' ],
17 templateUrl: './video-filters-header.component.html'
19 export class VideoFiltersHeaderComponent implements OnInit, OnDestroy {
20 @Input() filters: VideoFilters
22 @Input() displayModerationBlock = false
24 @Input() defaultSort = '-publishedAt'
25 @Input() nsfwPolicy: NSFWPolicyType
27 @Output() filtersChanged = new EventEmitter()
29 areFiltersCollapsed = true
33 private routeSub: Subscription
36 private auth: AuthService,
37 private serverService: ServerService,
38 private fb: FormBuilder,
39 private modalService: PeertubeModalService
44 this.form = this.fb.group({
47 languageOneOf: [ '' ],
48 categoryOneOf: [ '' ],
56 this.filters.onChange(() => {
60 this.form.valueChanges.subscribe(values => {
61 logger('Loading values from form: %O', values)
63 this.filters.load(values)
64 this.filtersChanged.emit()
69 if (this.routeSub) this.routeSub.unsubscribe()
73 if (!this.auth.isLoggedIn()) return false
74 if (!this.displayModerationBlock) return false
76 return this.auth.getUser().hasRight(UserRight.SEE_ALL_VIDEOS)
79 isTrendingSortEnabled (sort: 'most-viewed' | 'hot' | 'best' | 'most-liked') {
80 const serverConfig = this.serverService.getHTMLConfig()
82 const enabled = serverConfig.trending.videos.algorithms.enabled.includes(sort)
84 // Best is adapted from the user
85 if (sort === 'best') return enabled && this.auth.isLoggedIn()
90 resetFilter (key: string, canRemove: boolean) {
91 if (!canRemove) return
93 this.filters.reset(key)
95 this.filtersChanged.emit()
98 getFilterTitle (canRemove: boolean) {
99 if (canRemove) return $localize`Remove this filter`
104 onAccountSettingsClick (event: Event) {
105 if (this.auth.isLoggedIn()) return
107 event.preventDefault()
108 event.stopPropagation()
110 this.modalService.openQuickSettingsSubject.next()
113 private patchForm (emitEvent: boolean) {
114 const defaultValues = this.filters.toFormObject()
115 this.form.patchValue(defaultValues, { emitEvent })
117 logger('Patched form: %O', defaultValues)