Add loading bar when updating a video
This commit is contained in:
parent
6de3676898
commit
68e24d7279
9 changed files with 35 additions and 14 deletions
|
@ -38,6 +38,7 @@
|
||||||
"@angular/router": "~5.2.2",
|
"@angular/router": "~5.2.2",
|
||||||
"@angular/service-worker": "^5.2.4",
|
"@angular/service-worker": "^5.2.4",
|
||||||
"@angularclass/hmr": "^2.1.3",
|
"@angularclass/hmr": "^2.1.3",
|
||||||
|
"@ngx-loading-bar/core": "^1.1.1",
|
||||||
"@ngx-loading-bar/http-client": "^1.0.0-rc.1",
|
"@ngx-loading-bar/http-client": "^1.0.0-rc.1",
|
||||||
"@ngx-meta/core": "^5.0.0",
|
"@ngx-meta/core": "^5.0.0",
|
||||||
"@types/core-js": "^0.9.28",
|
"@types/core-js": "^0.9.28",
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import { NgModule, Optional, SkipSelf } from '@angular/core'
|
import { NgModule, Optional, SkipSelf } from '@angular/core'
|
||||||
import { CommonModule } from '@angular/common'
|
import { CommonModule } from '@angular/common'
|
||||||
import { HttpModule } from '@angular/http'
|
|
||||||
import { RouterModule } from '@angular/router'
|
import { RouterModule } from '@angular/router'
|
||||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
|
||||||
|
import { LoadingBarModule } from '@ngx-loading-bar/core'
|
||||||
|
import { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client'
|
||||||
|
|
||||||
import { SimpleNotificationsModule } from 'angular2-notifications'
|
import { SimpleNotificationsModule } from 'angular2-notifications'
|
||||||
import { ModalModule } from 'ngx-bootstrap/modal'
|
import { ModalModule } from 'ngx-bootstrap/modal'
|
||||||
|
@ -16,12 +17,14 @@ import { throwIfAlreadyLoaded } from './module-import-guard'
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
HttpModule,
|
|
||||||
RouterModule,
|
RouterModule,
|
||||||
BrowserAnimationsModule,
|
BrowserAnimationsModule,
|
||||||
|
|
||||||
ModalModule,
|
ModalModule,
|
||||||
SimpleNotificationsModule.forRoot()
|
SimpleNotificationsModule.forRoot(),
|
||||||
|
|
||||||
|
LoadingBarHttpClientModule,
|
||||||
|
LoadingBarModule.forRoot()
|
||||||
],
|
],
|
||||||
|
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -30,6 +33,8 @@ import { throwIfAlreadyLoaded } from './module-import-guard'
|
||||||
|
|
||||||
exports: [
|
exports: [
|
||||||
SimpleNotificationsModule,
|
SimpleNotificationsModule,
|
||||||
|
LoadingBarHttpClientModule,
|
||||||
|
LoadingBarModule,
|
||||||
|
|
||||||
ConfirmComponent
|
ConfirmComponent
|
||||||
],
|
],
|
||||||
|
|
|
@ -6,7 +6,6 @@ import { RouterModule } from '@angular/router'
|
||||||
import { MarkdownTextareaComponent } from '@app/shared/forms/markdown-textarea.component'
|
import { MarkdownTextareaComponent } from '@app/shared/forms/markdown-textarea.component'
|
||||||
import { InfiniteScrollerDirective } from '@app/shared/video/infinite-scroller.directive'
|
import { InfiniteScrollerDirective } from '@app/shared/video/infinite-scroller.directive'
|
||||||
import { MarkdownService } from '@app/videos/shared'
|
import { MarkdownService } from '@app/videos/shared'
|
||||||
import { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client'
|
|
||||||
|
|
||||||
import { BsDropdownModule } from 'ngx-bootstrap/dropdown'
|
import { BsDropdownModule } from 'ngx-bootstrap/dropdown'
|
||||||
import { ModalModule } from 'ngx-bootstrap/modal'
|
import { ModalModule } from 'ngx-bootstrap/modal'
|
||||||
|
@ -36,8 +35,6 @@ import { VideoService } from './video/video.service'
|
||||||
RouterModule,
|
RouterModule,
|
||||||
HttpClientModule,
|
HttpClientModule,
|
||||||
|
|
||||||
LoadingBarHttpClientModule,
|
|
||||||
|
|
||||||
BsDropdownModule.forRoot(),
|
BsDropdownModule.forRoot(),
|
||||||
ModalModule.forRoot(),
|
ModalModule.forRoot(),
|
||||||
TabsModule.forRoot(),
|
TabsModule.forRoot(),
|
||||||
|
@ -65,8 +62,6 @@ import { VideoService } from './video/video.service'
|
||||||
RouterModule,
|
RouterModule,
|
||||||
HttpClientModule,
|
HttpClientModule,
|
||||||
|
|
||||||
LoadingBarHttpClientModule,
|
|
||||||
|
|
||||||
BsDropdownModule,
|
BsDropdownModule,
|
||||||
ModalModule,
|
ModalModule,
|
||||||
TabsModule,
|
TabsModule,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { NgModule } from '@angular/core'
|
import { NgModule } from '@angular/core'
|
||||||
import { VideoImageComponent } from '@app/videos/+video-edit/shared/video-image.component'
|
import { VideoImageComponent } from './video-image.component'
|
||||||
import { TabsModule } from 'ngx-bootstrap/tabs'
|
import { TabsModule } from 'ngx-bootstrap/tabs'
|
||||||
import { TagInputModule } from 'ngx-chips'
|
import { TagInputModule } from 'ngx-chips'
|
||||||
import { SharedModule } from '../../../shared'
|
import { SharedModule } from '../../../shared'
|
||||||
|
|
|
@ -50,7 +50,10 @@
|
||||||
<div class="submit-container">
|
<div class="submit-container">
|
||||||
<div *ngIf="videoUploaded === false" class="message-submit">Publish will be available when upload is finished</div>
|
<div *ngIf="videoUploaded === false" class="message-submit">Publish will be available when upload is finished</div>
|
||||||
|
|
||||||
<div class="submit-button" (click)="updateSecondStep()" [ngClass]="{ disabled: !form.valid || videoUploaded !== true }">
|
<div class="submit-button"
|
||||||
|
(click)="updateSecondStep()"
|
||||||
|
[ngClass]="{ disabled: !form.valid || isUpdatingVideo === true || videoUploaded !== true }"
|
||||||
|
>
|
||||||
<span class="icon icon-validate"></span>
|
<span class="icon icon-validate"></span>
|
||||||
<input type="button" value="Publish" />
|
<input type="button" value="Publish" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -4,6 +4,7 @@ import { FormBuilder, FormGroup } from '@angular/forms'
|
||||||
import { Router } from '@angular/router'
|
import { Router } from '@angular/router'
|
||||||
import { UserService } from '@app/shared'
|
import { UserService } from '@app/shared'
|
||||||
import { CanComponentDeactivate } from '@app/shared/guards/can-deactivate-guard.service'
|
import { CanComponentDeactivate } from '@app/shared/guards/can-deactivate-guard.service'
|
||||||
|
import { LoadingBarService } from '@ngx-loading-bar/core'
|
||||||
import { NotificationsService } from 'angular2-notifications'
|
import { NotificationsService } from 'angular2-notifications'
|
||||||
import { BytesPipe } from 'ngx-pipes'
|
import { BytesPipe } from 'ngx-pipes'
|
||||||
import { Subscription } from 'rxjs/Subscription'
|
import { Subscription } from 'rxjs/Subscription'
|
||||||
|
@ -28,6 +29,7 @@ export class VideoAddComponent extends FormReactive implements OnInit, OnDestroy
|
||||||
@ViewChild('videofileInput') videofileInput
|
@ViewChild('videofileInput') videofileInput
|
||||||
|
|
||||||
isUploadingVideo = false
|
isUploadingVideo = false
|
||||||
|
isUpdatingVideo = false
|
||||||
videoUploaded = false
|
videoUploaded = false
|
||||||
videoUploadObservable: Subscription = null
|
videoUploadObservable: Subscription = null
|
||||||
videoUploadPercents = 0
|
videoUploadPercents = 0
|
||||||
|
@ -53,7 +55,8 @@ export class VideoAddComponent extends FormReactive implements OnInit, OnDestroy
|
||||||
private authService: AuthService,
|
private authService: AuthService,
|
||||||
private userService: UserService,
|
private userService: UserService,
|
||||||
private serverService: ServerService,
|
private serverService: ServerService,
|
||||||
private videoService: VideoService
|
private videoService: VideoService,
|
||||||
|
private loadingBar: LoadingBarService
|
||||||
) {
|
) {
|
||||||
super()
|
super()
|
||||||
}
|
}
|
||||||
|
@ -203,15 +206,21 @@ export class VideoAddComponent extends FormReactive implements OnInit, OnDestroy
|
||||||
video.id = this.videoUploadedIds.id
|
video.id = this.videoUploadedIds.id
|
||||||
video.uuid = this.videoUploadedIds.uuid
|
video.uuid = this.videoUploadedIds.uuid
|
||||||
|
|
||||||
|
this.isUpdatingVideo = true
|
||||||
|
this.loadingBar.start()
|
||||||
this.videoService.updateVideo(video)
|
this.videoService.updateVideo(video)
|
||||||
.subscribe(
|
.subscribe(
|
||||||
() => {
|
() => {
|
||||||
|
this.isUpdatingVideo = false
|
||||||
this.isUploadingVideo = false
|
this.isUploadingVideo = false
|
||||||
|
this.loadingBar.complete()
|
||||||
|
|
||||||
this.notificationsService.success('Success', 'Video published.')
|
this.notificationsService.success('Success', 'Video published.')
|
||||||
this.router.navigate([ '/videos/watch', video.uuid ])
|
this.router.navigate([ '/videos/watch', video.uuid ])
|
||||||
},
|
},
|
||||||
|
|
||||||
err => {
|
err => {
|
||||||
|
this.isUpdatingVideo = false
|
||||||
this.notificationsService.error('Error', err.message)
|
this.notificationsService.error('Error', err.message)
|
||||||
console.error(err)
|
console.error(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
></my-video-edit>
|
></my-video-edit>
|
||||||
|
|
||||||
<div class="submit-container">
|
<div class="submit-container">
|
||||||
<div class="submit-button" (click)="update()" [ngClass]="{ disabled: !form.valid }">
|
<div class="submit-button" (click)="update()" [ngClass]="{ disabled: !form.valid || isUpdatingVideo === true }">
|
||||||
<span class="icon icon-validate"></span>
|
<span class="icon icon-validate"></span>
|
||||||
<input type="button" value="Update" />
|
<input type="button" value="Update" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component, OnInit } from '@angular/core'
|
import { Component, OnInit } from '@angular/core'
|
||||||
import { FormBuilder, FormGroup } from '@angular/forms'
|
import { FormBuilder, FormGroup } from '@angular/forms'
|
||||||
import { ActivatedRoute, Router } from '@angular/router'
|
import { ActivatedRoute, Router } from '@angular/router'
|
||||||
|
import { LoadingBarService } from '@ngx-loading-bar/core'
|
||||||
import { NotificationsService } from 'angular2-notifications'
|
import { NotificationsService } from 'angular2-notifications'
|
||||||
import 'rxjs/add/observable/forkJoin'
|
import 'rxjs/add/observable/forkJoin'
|
||||||
import { VideoPrivacy } from '../../../../../shared/models/videos'
|
import { VideoPrivacy } from '../../../../../shared/models/videos'
|
||||||
|
@ -21,6 +22,7 @@ import { VideoService } from '../../shared/video/video.service'
|
||||||
export class VideoUpdateComponent extends FormReactive implements OnInit {
|
export class VideoUpdateComponent extends FormReactive implements OnInit {
|
||||||
video: VideoEdit
|
video: VideoEdit
|
||||||
|
|
||||||
|
isUpdatingVideo = false
|
||||||
form: FormGroup
|
form: FormGroup
|
||||||
formErrors: { [ id: string ]: string } = {}
|
formErrors: { [ id: string ]: string } = {}
|
||||||
validationMessages: ValidatorMessage = {}
|
validationMessages: ValidatorMessage = {}
|
||||||
|
@ -34,7 +36,8 @@ export class VideoUpdateComponent extends FormReactive implements OnInit {
|
||||||
private notificationsService: NotificationsService,
|
private notificationsService: NotificationsService,
|
||||||
private serverService: ServerService,
|
private serverService: ServerService,
|
||||||
private videoService: VideoService,
|
private videoService: VideoService,
|
||||||
private authService: AuthService
|
private authService: AuthService,
|
||||||
|
private loadingBar: LoadingBarService
|
||||||
) {
|
) {
|
||||||
super()
|
super()
|
||||||
}
|
}
|
||||||
|
@ -98,14 +101,19 @@ export class VideoUpdateComponent extends FormReactive implements OnInit {
|
||||||
|
|
||||||
this.video.patch(this.form.value)
|
this.video.patch(this.form.value)
|
||||||
|
|
||||||
|
this.loadingBar.start()
|
||||||
|
this.isUpdatingVideo = true
|
||||||
this.videoService.updateVideo(this.video)
|
this.videoService.updateVideo(this.video)
|
||||||
.subscribe(
|
.subscribe(
|
||||||
() => {
|
() => {
|
||||||
|
this.isUpdatingVideo = false
|
||||||
|
this.loadingBar.complete()
|
||||||
this.notificationsService.success('Success', 'Video updated.')
|
this.notificationsService.success('Success', 'Video updated.')
|
||||||
this.router.navigate([ '/videos/watch', this.video.uuid ])
|
this.router.navigate([ '/videos/watch', this.video.uuid ])
|
||||||
},
|
},
|
||||||
|
|
||||||
err => {
|
err => {
|
||||||
|
this.isUpdatingVideo = false
|
||||||
this.notificationsService.error('Error', err.message)
|
this.notificationsService.error('Error', err.message)
|
||||||
console.error(err)
|
console.error(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,7 +184,7 @@
|
||||||
tree-kill "^1.0.0"
|
tree-kill "^1.0.0"
|
||||||
webpack-sources "^1.1.0"
|
webpack-sources "^1.1.0"
|
||||||
|
|
||||||
"@ngx-loading-bar/core@1.1.1":
|
"@ngx-loading-bar/core@1.1.1", "@ngx-loading-bar/core@^1.1.1":
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@ngx-loading-bar/core/-/core-1.1.1.tgz#bcfc8e968f121ca431b4926dfd3465739f7076cd"
|
resolved "https://registry.yarnpkg.com/@ngx-loading-bar/core/-/core-1.1.1.tgz#bcfc8e968f121ca431b4926dfd3465739f7076cd"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
Loading…
Reference in a new issue