2021-06-04 13:31:41 +02:00
|
|
|
import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'
|
2021-04-08 12:09:54 +02:00
|
|
|
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'
|
2021-04-07 17:01:29 +02:00
|
|
|
import { Notifier, ServerService } from '@app/core'
|
|
|
|
import { VideoChannel } from '@app/shared/shared-main'
|
|
|
|
import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'
|
|
|
|
import { getBytes } from '@root-helpers/bytes'
|
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: 'my-actor-banner-edit',
|
|
|
|
templateUrl: './actor-banner-edit.component.html',
|
|
|
|
styleUrls: [
|
|
|
|
'./actor-image-edit.scss',
|
|
|
|
'./actor-banner-edit.component.scss'
|
|
|
|
]
|
|
|
|
})
|
|
|
|
export class ActorBannerEditComponent implements OnInit {
|
|
|
|
@ViewChild('bannerfileInput') bannerfileInput: ElementRef<HTMLInputElement>
|
|
|
|
@ViewChild('bannerPopover') bannerPopover: NgbPopover
|
|
|
|
|
|
|
|
@Input() actor: VideoChannel
|
2021-04-08 12:09:54 +02:00
|
|
|
@Input() previewImage = false
|
2021-04-07 17:01:29 +02:00
|
|
|
|
|
|
|
@Output() bannerChange = new EventEmitter<FormData>()
|
|
|
|
@Output() bannerDelete = new EventEmitter<void>()
|
|
|
|
|
|
|
|
bannerFormat = ''
|
|
|
|
maxBannerSize = 0
|
|
|
|
bannerExtensions = ''
|
|
|
|
|
2021-04-08 12:09:54 +02:00
|
|
|
preview: SafeResourceUrl
|
|
|
|
|
2021-04-07 17:01:29 +02:00
|
|
|
constructor (
|
2021-04-08 12:09:54 +02:00
|
|
|
private sanitizer: DomSanitizer,
|
2021-04-07 17:01:29 +02:00
|
|
|
private serverService: ServerService,
|
|
|
|
private notifier: Notifier
|
|
|
|
) { }
|
|
|
|
|
|
|
|
ngOnInit (): void {
|
2021-06-04 13:31:41 +02:00
|
|
|
const config = this.serverService.getHTMLConfig()
|
|
|
|
this.maxBannerSize = config.banner.file.size.max
|
|
|
|
this.bannerExtensions = config.banner.file.extensions.join(', ')
|
2021-04-07 17:01:29 +02:00
|
|
|
|
2021-06-04 13:31:41 +02:00
|
|
|
// tslint:disable:max-line-length
|
|
|
|
this.bannerFormat = $localize`ratio 6/1, recommended size: 1920x317, max size: ${getBytes(this.maxBannerSize)}, extensions: ${this.bannerExtensions}`
|
2021-04-07 17:01:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
onBannerChange (input: HTMLInputElement) {
|
|
|
|
this.bannerfileInput = new ElementRef(input)
|
|
|
|
|
|
|
|
const bannerfile = this.bannerfileInput.nativeElement.files[ 0 ]
|
|
|
|
if (bannerfile.size > this.maxBannerSize) {
|
|
|
|
this.notifier.error('Error', $localize`This image is too large.`)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
const formData = new FormData()
|
|
|
|
formData.append('bannerfile', bannerfile)
|
|
|
|
this.bannerPopover?.close()
|
|
|
|
this.bannerChange.emit(formData)
|
2021-04-08 12:09:54 +02:00
|
|
|
|
|
|
|
if (this.previewImage) {
|
|
|
|
this.preview = this.sanitizer.bypassSecurityTrustResourceUrl(URL.createObjectURL(bannerfile))
|
|
|
|
}
|
2021-04-07 17:01:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
deleteBanner () {
|
2021-04-08 12:09:54 +02:00
|
|
|
this.preview = undefined
|
2021-04-07 17:01:29 +02:00
|
|
|
this.bannerDelete.emit()
|
|
|
|
}
|
|
|
|
|
|
|
|
hasBanner () {
|
2021-04-08 12:09:54 +02:00
|
|
|
return !!this.preview || !!this.actor.bannerUrl
|
2021-04-07 17:01:29 +02:00
|
|
|
}
|
|
|
|
}
|