From e94af7db79882dbbabfbc9cd96bbfd0890634dc5 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Sun, 2 Feb 2020 23:10:00 +0000 Subject: [PATCH] Added the ability to approve from the requests list page --- .../movies-grid/movies-grid.component.ts | 12 ++++++--- .../options/request-options.component.html | 3 +++ .../options/request-options.component.ts | 27 ++++++++++++++----- .../components/requests-list.component.ts | 23 +++++++++++----- .../app/requests-list/models/UpdateType.ts | 4 +++ 5 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 src/Ombi/ClientApp/src/app/requests-list/models/UpdateType.ts diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts b/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts index e8e4cbbf8..db59fdc39 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts +++ b/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts @@ -1,4 +1,4 @@ -import { Component, AfterViewInit, ViewChild, EventEmitter, Output } from "@angular/core"; +import { Component, AfterViewInit, ViewChild, EventEmitter, Output, ChangeDetectorRef } from "@angular/core"; import { IMovieRequests, IRequestsViewModel } from "../../../interfaces"; import { MatPaginator, MatSort } from "@angular/material"; import { merge, Observable, of as observableOf } from 'rxjs'; @@ -19,12 +19,12 @@ export class MoviesGridComponent implements AfterViewInit { public gridCount: string = "15"; public showUnavailableRequests: boolean; - @Output() public onOpenOptions = new EventEmitter<{request: any, filter: any}>(); + @Output() public onOpenOptions = new EventEmitter<{request: any, filter: any, onChange: any}>(); @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator; @ViewChild(MatSort, { static: false }) sort: MatSort; - constructor(private requestService: RequestServiceV2) { + constructor(private requestService: RequestServiceV2, private ref: ChangeDetectorRef) { } @@ -73,6 +73,10 @@ export class MoviesGridComponent implements AfterViewInit { return req.id !== request.id; })}; - this.onOpenOptions.emit({request: request, filter: filter}); + const onChange = () => { + this.ref.detectChanges(); + }; + + this.onOpenOptions.emit({request: request, filter: filter, onChange: onChange}); } } diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.html b/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.html index 9c98e376f..a22c5a2ef 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.html +++ b/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.html @@ -2,4 +2,7 @@ Delete Request + + Approve Request + \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.ts b/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.ts index 565b8678b..153942810 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.ts +++ b/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.ts @@ -1,7 +1,8 @@ -import {Component, Inject} from '@angular/core'; -import {MAT_BOTTOM_SHEET_DATA, MatBottomSheetRef} from '@angular/material/bottom-sheet'; +import { Component, Inject } from '@angular/core'; +import { MAT_BOTTOM_SHEET_DATA, MatBottomSheetRef } from '@angular/material/bottom-sheet'; import { RequestService } from '../../../services'; import { RequestType } from '../../../interfaces'; +import { UpdateType } from '../../models/UpdateType'; @Component({ selector: 'request-options', @@ -9,17 +10,29 @@ import { RequestType } from '../../../interfaces'; }) export class RequestOptionsComponent { constructor(@Inject(MAT_BOTTOM_SHEET_DATA) public data: any, - private requestService: RequestService, private bottomSheetRef: MatBottomSheetRef) { } + private requestService: RequestService, private bottomSheetRef: MatBottomSheetRef) { } public async delete() { if (this.data.type === RequestType.movie) { - await this.requestService.removeMovieRequestAsync(this.data.id); + await this.requestService.removeMovieRequestAsync(this.data.id); } - if(this.data.type === RequestType.tvShow) { - await this.requestService.deleteChild(this.data.id).toPromise(); + if (this.data.type === RequestType.tvShow) { + await this.requestService.deleteChild(this.data.id).toPromise(); } - this.bottomSheetRef.dismiss(true); + this.bottomSheetRef.dismiss({type: UpdateType.Delete}); + return; + } + + public async approve() { + if (this.data.type === RequestType.movie) { + await this.requestService.approveMovie({id: this.data.id}).toPromise(); + } + if (this.data.type === RequestType.tvShow) { + await this.requestService.approveChild({id: this.data.id}).toPromise(); + } + + this.bottomSheetRef.dismiss({type: UpdateType.Approve}); return; } } \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts b/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts index 7c7c4e30d..8b3b35f90 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts +++ b/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts @@ -1,6 +1,8 @@ -import { Component } from "@angular/core"; +import { Component, ViewChild } from "@angular/core"; import { MatBottomSheet } from "@angular/material"; import { RequestOptionsComponent } from "./options/request-options.component"; +import { UpdateType } from "../models/UpdateType"; +import { MoviesGridComponent } from "./movies-grid/movies-grid.component"; @Component({ templateUrl: "./requests-list.component.html", @@ -9,15 +11,24 @@ import { RequestOptionsComponent } from "./options/request-options.component"; export class RequestsListComponent { constructor(private bottomSheet: MatBottomSheet) { } - - public onOpenOptions(event: {request: any, filter: any}) { - const ref = this.bottomSheet.open(RequestOptionsComponent, { data: { id: event.request.id, type: event.request.requestType } }); + + public onOpenOptions(event: { request: any, filter: any, onChange: any }) { + const ref = this.bottomSheet.open(RequestOptionsComponent, { data: { id: event.request.id, type: event.request.requestType, canApprove: event.request.canApprove } }); ref.afterDismissed().subscribe((result) => { - if (!result) { + if(!result) { + return; + } + if (result.type == UpdateType.Delete) { + event.filter(); + return; + } + if (result.type == UpdateType.Approve) { + // Need to do this here, as the status is calculated on the server + event.request.requestStatus = 'Common.ProcessingRequest'; + event.onChange(); return; } - event.filter(); }); } } diff --git a/src/Ombi/ClientApp/src/app/requests-list/models/UpdateType.ts b/src/Ombi/ClientApp/src/app/requests-list/models/UpdateType.ts new file mode 100644 index 000000000..647c4601d --- /dev/null +++ b/src/Ombi/ClientApp/src/app/requests-list/models/UpdateType.ts @@ -0,0 +1,4 @@ +export enum UpdateType { + Delete, + Approve +} \ No newline at end of file