mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2024-05-17 04:12:40 +00:00
338633ce72
They can prevent tree shaking
156 lines
5.5 KiB
TypeScript
156 lines
5.5 KiB
TypeScript
import { forkJoin, Subscription } from 'rxjs'
|
|
import { map, switchMap } from 'rxjs/operators'
|
|
import { Component, OnDestroy, OnInit } from '@angular/core'
|
|
import { ActivatedRoute, Router, RouterLink } from '@angular/router'
|
|
import { AuthService, Notifier, ServerService } from '@app/core'
|
|
import { listUserChannelsForSelect } from '@app/helpers'
|
|
import {
|
|
setPlaylistChannelValidator,
|
|
VIDEO_PLAYLIST_CHANNEL_ID_VALIDATOR,
|
|
VIDEO_PLAYLIST_DESCRIPTION_VALIDATOR,
|
|
VIDEO_PLAYLIST_DISPLAY_NAME_VALIDATOR,
|
|
VIDEO_PLAYLIST_PRIVACY_VALIDATOR
|
|
} from '@app/shared/form-validators/video-playlist-validators'
|
|
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
|
|
import { VideoPlaylistUpdate } from '@peertube/peertube-models'
|
|
import { MyVideoPlaylistEdit } from './my-video-playlist-edit'
|
|
import { SelectChannelComponent } from '../../shared/shared-forms/select/select-channel.component'
|
|
import { SelectOptionsComponent } from '../../shared/shared-forms/select/select-options.component'
|
|
import { MarkdownTextareaComponent } from '../../shared/shared-forms/markdown-textarea.component'
|
|
import { HelpComponent } from '../../shared/shared-main/misc/help.component'
|
|
import { PreviewUploadComponent } from '../../shared/shared-forms/preview-upload.component'
|
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
|
|
import { NgIf, NgClass } from '@angular/common'
|
|
import { VideoPlaylist } from '@app/shared/shared-video-playlist/video-playlist.model'
|
|
import { VideoPlaylistService } from '@app/shared/shared-video-playlist/video-playlist.service'
|
|
|
|
@Component({
|
|
templateUrl: './my-video-playlist-edit.component.html',
|
|
styleUrls: [ './my-video-playlist-edit.component.scss' ],
|
|
standalone: true,
|
|
imports: [
|
|
NgIf,
|
|
RouterLink,
|
|
FormsModule,
|
|
ReactiveFormsModule,
|
|
PreviewUploadComponent,
|
|
NgClass,
|
|
HelpComponent,
|
|
MarkdownTextareaComponent,
|
|
SelectOptionsComponent,
|
|
SelectChannelComponent
|
|
]
|
|
})
|
|
export class MyVideoPlaylistUpdateComponent extends MyVideoPlaylistEdit implements OnInit, OnDestroy {
|
|
error: string
|
|
videoPlaylistToUpdate: VideoPlaylist
|
|
|
|
private paramsSub: Subscription
|
|
|
|
constructor (
|
|
protected formReactiveService: FormReactiveService,
|
|
private authService: AuthService,
|
|
private notifier: Notifier,
|
|
private router: Router,
|
|
private route: ActivatedRoute,
|
|
private videoPlaylistService: VideoPlaylistService,
|
|
private serverService: ServerService
|
|
) {
|
|
super()
|
|
}
|
|
|
|
ngOnInit () {
|
|
this.buildForm({
|
|
displayName: VIDEO_PLAYLIST_DISPLAY_NAME_VALIDATOR,
|
|
privacy: VIDEO_PLAYLIST_PRIVACY_VALIDATOR,
|
|
description: VIDEO_PLAYLIST_DESCRIPTION_VALIDATOR,
|
|
videoChannelId: VIDEO_PLAYLIST_CHANNEL_ID_VALIDATOR,
|
|
thumbnailfile: null
|
|
})
|
|
|
|
this.form.get('privacy').valueChanges.subscribe(privacy => {
|
|
setPlaylistChannelValidator(this.form.get('videoChannelId'), privacy)
|
|
})
|
|
|
|
listUserChannelsForSelect(this.authService)
|
|
.subscribe(channels => this.userVideoChannels = channels)
|
|
|
|
this.paramsSub = this.route.params
|
|
.pipe(
|
|
map(routeParams => routeParams['videoPlaylistId']),
|
|
switchMap(videoPlaylistId => {
|
|
return forkJoin([
|
|
this.videoPlaylistService.getVideoPlaylist(videoPlaylistId),
|
|
this.serverService.getVideoPlaylistPrivacies()
|
|
])
|
|
})
|
|
)
|
|
.subscribe({
|
|
next: ([ videoPlaylistToUpdate, videoPlaylistPrivacies ]) => {
|
|
this.videoPlaylistToUpdate = videoPlaylistToUpdate
|
|
this.videoPlaylistPrivacies = videoPlaylistPrivacies
|
|
|
|
this.hydrateFormFromPlaylist()
|
|
},
|
|
|
|
error: err => {
|
|
this.error = err.message
|
|
}
|
|
})
|
|
}
|
|
|
|
ngOnDestroy () {
|
|
if (this.paramsSub) this.paramsSub.unsubscribe()
|
|
}
|
|
|
|
formValidated () {
|
|
this.error = undefined
|
|
|
|
const body = this.form.value
|
|
const videoPlaylistUpdate: VideoPlaylistUpdate = {
|
|
displayName: body.displayName,
|
|
privacy: body.privacy,
|
|
description: body.description || null,
|
|
videoChannelId: body.videoChannelId || null,
|
|
thumbnailfile: body.thumbnailfile || undefined
|
|
}
|
|
|
|
this.videoPlaylistService.updateVideoPlaylist(this.videoPlaylistToUpdate, videoPlaylistUpdate)
|
|
.subscribe({
|
|
next: () => {
|
|
this.notifier.success($localize`Playlist ${videoPlaylistUpdate.displayName} updated.`)
|
|
this.router.navigate([ '/my-library', 'video-playlists' ])
|
|
},
|
|
|
|
error: err => {
|
|
this.error = err.message
|
|
}
|
|
})
|
|
}
|
|
|
|
isCreation () {
|
|
return false
|
|
}
|
|
|
|
getFormButtonTitle () {
|
|
return $localize`Update`
|
|
}
|
|
|
|
private hydrateFormFromPlaylist () {
|
|
this.form.patchValue({
|
|
displayName: this.videoPlaylistToUpdate.displayName,
|
|
privacy: this.videoPlaylistToUpdate.privacy.id,
|
|
description: this.videoPlaylistToUpdate.description,
|
|
videoChannelId: this.videoPlaylistToUpdate.videoChannel ? this.videoPlaylistToUpdate.videoChannel.id : null
|
|
})
|
|
|
|
fetch(this.videoPlaylistToUpdate.thumbnailUrl)
|
|
.then(response => response.blob())
|
|
.then(data => {
|
|
this.form.patchValue({
|
|
thumbnailfile: data
|
|
})
|
|
})
|
|
}
|
|
}
|