diff --git a/src/Ombi/ClientApp/src/app/media-details/components/index.ts b/src/Ombi/ClientApp/src/app/media-details/components/index.ts index 1d382dda1..54fcfd554 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/index.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/index.ts @@ -13,6 +13,7 @@ import { MovieAdminPanelComponent } from "./movie/panels/movie-admin-panel/movie import { MovieAdvancedOptionsComponent } from "./movie/panels/movie-advanced-options/movie-advanced-options.component"; import { SearchService, RequestService, RadarrService } from "../../services"; import { RequestServiceV2 } from "../../services/requestV2.service"; +import { NewIssueComponent } from "./shared/new-issue/new-issue.component"; export const components: any[] = [ MovieDetailsComponent, @@ -27,13 +28,15 @@ export const components: any[] = [ DenyDialogComponent, TvRequestsPanelComponent, MovieAdminPanelComponent, - MovieAdvancedOptionsComponent + MovieAdvancedOptionsComponent, + NewIssueComponent, ]; export const entryComponents: any[] = [ YoutubeTrailerComponent, DenyDialogComponent, MovieAdvancedOptionsComponent, + NewIssueComponent, ]; export const providers: any[] = [ diff --git a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.html b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.html index 254dfb49b..6882790f8 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.html +++ b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.html @@ -33,8 +33,8 @@ - + {{ 'Common.Requested' | translate }} @@ -54,19 +54,21 @@ {{ 'Requests.MarkAvailable' | translate }} - {{ 'Requests.Deny' | translate }} - - - + + {{ + 'MediaDetails.Denied' | translate }} + + + {{ + 'Requests.ReportIssue' | translate }} - - {{ - 'MediaDetails.Denied' | translate }} @@ -82,7 +84,8 @@ - + + diff --git a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts index 739d40fd1..ae649fc3d 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts @@ -8,6 +8,7 @@ import { YoutubeTrailerComponent } from "../shared/youtube-trailer.component"; import { AuthService } from "../../../auth/auth.service"; import { IMovieRequests, RequestType, IAdvancedData } from "../../../interfaces"; import { DenyDialogComponent } from "../shared/deny-dialog/deny-dialog.component"; +import { NewIssueComponent } from "../shared/new-issue/new-issue.component"; @Component({ templateUrl: "./movie-details.component.html", @@ -82,6 +83,13 @@ export class MovieDetailsComponent { }); } + public async issue() { + const dialogRef = this.dialog.open(NewIssueComponent, { + width: '500px', + data: {requestId: this.movieRequest ? this.movieRequest.id : null, requestType: RequestType.movie, imdbid: this.movie.imdbId} + }); + } + public async approve() { const result = await this.requestService.approveMovie({ id: this.movieRequest.id }).toPromise(); if (result.result) { diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/interfaces/interfaces.ts b/src/Ombi/ClientApp/src/app/media-details/components/shared/interfaces/interfaces.ts index 205a146c4..2f2b54cbc 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/shared/interfaces/interfaces.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/interfaces/interfaces.ts @@ -4,4 +4,10 @@ export interface IDenyDialogData { requestType: RequestType; requestId: number; denied: boolean; +} + +export interface IIssueDialogData { + requestType: RequestType; + requestId: number; + imdbId: string; } \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.html b/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.html new file mode 100644 index 000000000..0bbcbe8c0 --- /dev/null +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.html @@ -0,0 +1,29 @@ +{{ 'Issues.IssueDialog.Title' | translate}} + + + + + {{'Issues.IssueDialog.SelectCategory' | translate}} + + + {{cat.value}} + + + + + + + + + + + + + + + + {{ 'Common.Cancel' | translate}} + {{ 'Common.Submit' | translate}} + \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.ts new file mode 100644 index 000000000..636a4a1cf --- /dev/null +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.ts @@ -0,0 +1,56 @@ +import { Component, Inject, OnInit } from "@angular/core"; +import { IDenyDialogData, IIssueDialogData } from "../interfaces/interfaces"; +import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; +import { MessageService, IssuesService } from "../../../../services"; +import { IIssues, IIssueCategory, IssueStatus, RequestType } from "../../../../interfaces"; +import { TranslateService } from "@ngx-translate/core"; + +@Component({ + selector: "new-issue", + templateUrl: "./new-issue.component.html", +}) +export class NewIssueComponent implements OnInit { + + public issue: IIssues; + public issueCategories: IIssueCategory[]; + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: IIssueDialogData, + private issueService: IssuesService, + public messageService: MessageService, + private translate: TranslateService) { + this.issue = { + subject: "", + description: "", + issueCategory: { value: "", id: 0 }, + status: IssueStatus.Pending, + resolvedDate: undefined, + id: undefined, + issueCategoryId: 0, + comments: [], + requestId: data.requestId, + requestType: data.requestType, + title: "", + providerId: data.imdbId, + userReported: undefined, + }; + } + + public async ngOnInit(): Promise { + this.issueCategories = await this.issueService.getCategories().toPromise(); + } + + + public async createIssue() { + const result = await this.issueService.createIssue(this.issue).toPromise(); + if(result) { + this.messageService.send(this.translate.instant("Issues.IssueDialog.IssueCreated")); + } + } + + public onNoClick(): void { + this.dialogRef.close(); + delete this.issue; + } +} diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/social-icons/social-icons.component.html b/src/Ombi/ClientApp/src/app/media-details/components/shared/social-icons/social-icons.component.html index 4dbbf416e..b267507a5 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/shared/social-icons/social-icons.component.html +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/social-icons/social-icons.component.html @@ -30,12 +30,12 @@ - + - + diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/social-icons/social-icons.component.scss b/src/Ombi/ClientApp/src/app/media-details/components/shared/social-icons/social-icons.component.scss index 1925e4e98..57c6d10ed 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/shared/social-icons/social-icons.component.scss +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/social-icons/social-icons.component.scss @@ -6,3 +6,11 @@ transform: scale(1.1); color: black; } + +.media-icons.plex { + color: #feb801 !important; +} + +.media-icons.emby { + color: #52b54a !important; +} \ No newline at end of file diff --git a/src/Ombi/wwwroot/translations/en.json b/src/Ombi/wwwroot/translations/en.json index e764dde36..95546dfc6 100644 --- a/src/Ombi/wwwroot/translations/en.json +++ b/src/Ombi/wwwroot/translations/en.json @@ -27,7 +27,9 @@ "ViewDetails": "View Details", "Errors": { "Validation": "Please check your entered values" - } + }, + "Cancel":"Cancel", + "Submit":"Submit" }, "PasswordReset": { "EmailAddressPlaceholder": "Email Address", @@ -168,7 +170,14 @@ "Subject": "Subject", "Comments": "Comments", "WriteMessagePlaceholder": "Write your message here...", - "ReportedBy": "Reported By" + "ReportedBy": "Reported By", + "IssueDialog": { + "Title":"Report an issue", + "DescriptionPlaceholder":"Please describe the issue", + "TitlePlaceholder":"Short title of your issue", + "SelectCategory": "Select Category", + "IssueCreated":"Issue has been created" + } }, "Filter": { "ClearFilter": "Clear Filter",