Fixed the report issue button appearing when issues were not enabled

pull/4069/head v4.0.1119
tidusjar 4 years ago
parent c0149a6149
commit 094e1ce69f

@ -10,7 +10,6 @@ import { SettingsService } from "./services";
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import { ICustomizationSettings, ICustomPage } from "./interfaces"; import { ICustomizationSettings, ICustomPage } from "./interfaces";
import { StorageService } from './shared/storage/storage-service';
import { SignalRNotificationService } from './services/signlarnotification.service'; import { SignalRNotificationService } from './services/signlarnotification.service';
import { DOCUMENT } from '@angular/common'; import { DOCUMENT } from '@angular/common';
@ -46,7 +45,6 @@ export class AppComponent implements OnInit {
public readonly translate: TranslateService, public readonly translate: TranslateService,
private readonly customPageService: CustomPageService, private readonly customPageService: CustomPageService,
public overlayContainer: OverlayContainer, public overlayContainer: OverlayContainer,
private storage: StorageService,
private signalrNotification: SignalRNotificationService, private signalrNotification: SignalRNotificationService,
private readonly snackBar: MatSnackBar, private readonly snackBar: MatSnackBar,
private readonly identity: IdentityService, private readonly identity: IdentityService,

@ -91,7 +91,7 @@
</button> </button>
</span> </span>
<button mat-raised-button class="btn-spacing" color="danger" (click)="issue()"> <button mat-raised-button class="btn-spacing" color="danger" (click)="issue()" *ngIf="issuesEnabled">
<i class="fas fa-exclamation"></i> {{'Requests.ReportIssue' | translate }} <i class="fas fa-exclamation"></i> {{'Requests.ReportIssue' | translate }}
</button> </button>
<button *ngIf="movie.belongsToCollection" [routerLink]="'/discover/collection/' + movie.belongsToCollection.id" mat-raised-button class="btn-spacing"> <button *ngIf="movie.belongsToCollection" [routerLink]="'/discover/collection/' + movie.belongsToCollection.id" mat-raised-button class="btn-spacing">

@ -1,5 +1,5 @@
import { AfterViewInit, Component, ViewChild, ViewEncapsulation } from "@angular/core"; import { AfterViewInit, Component, ViewChild, ViewEncapsulation } from "@angular/core";
import { ImageService, SearchV2Service, RequestService, MessageService, RadarrService } from "../../../services"; import { ImageService, SearchV2Service, RequestService, MessageService, RadarrService, SettingsStateService } from "../../../services";
import { ActivatedRoute } from "@angular/router"; import { ActivatedRoute } from "@angular/router";
import { DomSanitizer } from "@angular/platform-browser"; import { DomSanitizer } from "@angular/platform-browser";
import { ISearchMovieResultV2 } from "../../../interfaces/ISearchMovieResultV2"; import { ISearchMovieResultV2 } from "../../../interfaces/ISearchMovieResultV2";
@ -26,6 +26,7 @@ export class MovieDetailsComponent {
public isAdmin: boolean; public isAdmin: boolean;
public advancedOptions: IAdvancedData; public advancedOptions: IAdvancedData;
public showAdvanced: boolean; // Set on the UI public showAdvanced: boolean; // Set on the UI
public issuesEnabled: boolean;
public requestType = RequestType.movie; public requestType = RequestType.movie;
@ -37,7 +38,7 @@ export class MovieDetailsComponent {
private sanitizer: DomSanitizer, private imageService: ImageService, private sanitizer: DomSanitizer, private imageService: ImageService,
public dialog: MatDialog, private requestService: RequestService, public dialog: MatDialog, private requestService: RequestService,
private requestService2: RequestServiceV2, private radarrService: RadarrService, private requestService2: RequestServiceV2, private radarrService: RadarrService,
public messageService: MessageService, private auth: AuthService) { public messageService: MessageService, private auth: AuthService, private settingsState: SettingsStateService) {
this.route.params.subscribe(async (params: any) => { this.route.params.subscribe(async (params: any) => {
if (typeof params.movieDbId === 'string' || params.movieDbId instanceof String) { if (typeof params.movieDbId === 'string' || params.movieDbId instanceof String) {
if (params.movieDbId.startsWith("tt")) { if (params.movieDbId.startsWith("tt")) {
@ -51,6 +52,7 @@ export class MovieDetailsComponent {
public async load() { public async load() {
this.issuesEnabled = this.settingsState.getIssue();
this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser");
if (this.isAdmin) { if (this.isAdmin) {

@ -57,7 +57,7 @@
class="btn-spacing" color="accent" [disabled]> class="btn-spacing" color="accent" [disabled]>
<i class="fas fa-check"></i> {{'Common.PartiallyAvailable' | translate }}</button> <i class="fas fa-check"></i> {{'Common.PartiallyAvailable' | translate }}</button>
<button mat-raised-button class="btn-spacing" color="danger" (click)="issue()"> <button mat-raised-button class="btn-spacing" color="danger" *ngIf="issuesEnabled" (click)="issue()">
<i class="fas fa-exclamation"></i> {{ <i class="fas fa-exclamation"></i> {{
'Requests.ReportIssue' | translate }}</button> 'Requests.ReportIssue' | translate }}</button>

@ -1,5 +1,5 @@
import { Component, ViewEncapsulation, OnInit } from "@angular/core"; import { Component, ViewEncapsulation, OnInit } from "@angular/core";
import { ImageService, SearchV2Service, MessageService, RequestService, SonarrService } from "../../../services"; import { ImageService, SearchV2Service, MessageService, RequestService, SonarrService, SettingsStateService } from "../../../services";
import { ActivatedRoute } from "@angular/router"; import { ActivatedRoute } from "@angular/router";
import { DomSanitizer } from "@angular/platform-browser"; import { DomSanitizer } from "@angular/platform-browser";
import { ISearchTvResultV2 } from "../../../interfaces/ISearchTvResultV2"; import { ISearchTvResultV2 } from "../../../interfaces/ISearchTvResultV2";
@ -29,6 +29,7 @@ export class TvDetailsComponent implements OnInit {
public advancedOptions: IAdvancedData; public advancedOptions: IAdvancedData;
public showAdvanced: boolean; // Set on the UI public showAdvanced: boolean; // Set on the UI
public requestType = RequestType.tvShow; public requestType = RequestType.tvShow;
public issuesEnabled: boolean;
private tvdbId: number; private tvdbId: number;
@ -36,7 +37,7 @@ export class TvDetailsComponent implements OnInit {
private sanitizer: DomSanitizer, private imageService: ImageService, private sanitizer: DomSanitizer, private imageService: ImageService,
public dialog: MatDialog, public messageService: MessageService, private requestService: RequestService, public dialog: MatDialog, public messageService: MessageService, private requestService: RequestService,
private requestService2: RequestServiceV2, private requestService2: RequestServiceV2,
private auth: AuthService, private sonarrService: SonarrService) { private auth: AuthService, private sonarrService: SonarrService, private settingsState: SettingsStateService) {
this.route.params.subscribe((params: any) => { this.route.params.subscribe((params: any) => {
this.tvdbId = params.tvdbId; this.tvdbId = params.tvdbId;
this.fromSearch = params.search; this.fromSearch = params.search;
@ -49,6 +50,7 @@ export class TvDetailsComponent implements OnInit {
public async load() { public async load() {
this.issuesEnabled = this.settingsState.getIssue();
this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser");
if (this.isAdmin) { if (this.isAdmin) {

@ -4,7 +4,7 @@ import { Observable } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { INavBar } from '../interfaces/ICommon'; import { INavBar } from '../interfaces/ICommon';
import { StorageService } from '../shared/storage/storage-service'; import { StorageService } from '../shared/storage/storage-service';
import { SettingsService } from '../services'; import { SettingsService, SettingsStateService } from '../services';
import { MatSlideToggleChange } from '@angular/material/slide-toggle'; import { MatSlideToggleChange } from '@angular/material/slide-toggle';
import { SearchFilter } from './SearchFilter'; import { SearchFilter } from './SearchFilter';
import { Md5 } from 'ts-md5/dist/md5'; import { Md5 } from 'ts-md5/dist/md5';
@ -49,7 +49,8 @@ export class MyNavComponent implements OnInit {
constructor(private breakpointObserver: BreakpointObserver, constructor(private breakpointObserver: BreakpointObserver,
private settingsService: SettingsService, private settingsService: SettingsService,
private store: StorageService, private store: StorageService,
private filterService: FilterService) { private filterService: FilterService,
private readonly settingState: SettingsStateService) {
} }
public async ngOnInit() { public async ngOnInit() {
@ -68,6 +69,8 @@ export class MyNavComponent implements OnInit {
} }
this.issuesEnabled = await this.settingsService.issueEnabled().toPromise(); this.issuesEnabled = await this.settingsService.issueEnabled().toPromise();
this.settingState.setIssue(this.issuesEnabled);
const customizationSettings = await this.settingsService.getCustomization().toPromise(); const customizationSettings = await this.settingsService.getCustomization().toPromise();
console.log("issues enabled: " + this.issuesEnabled); console.log("issues enabled: " + this.issuesEnabled);
this.theme = this.store.get("theme"); this.theme = this.store.get("theme");

@ -14,18 +14,18 @@ export class FileDownloadService extends ServiceHelpers {
downloadFile(url: string, contentType: string): void { downloadFile(url: string, contentType: string): void {
this.http.get(url).subscribe((response: any) => { this.http.get(url).subscribe((response: any) => {
// It is necessary to create a new blob object with mime-type explicitly set // It is necessary to create a new blob object with mime-type explicitly set
// otherwise only Chrome works like it should // otherwise only Chrome works like it should
const newBlob = new Blob([(response)], { type: contentType }); const newBlob = new Blob([(response)], { type: contentType });
// IE doesn't allow using a blob object directly as link href // IE doesn't allow using a blob object directly as link href
// instead it is necessary to use msSaveOrOpenBlob // instead it is necessary to use msSaveOrOpenBlob
if (window.navigator && window.navigator.msSaveOrOpenBlob) { if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(newBlob); window.navigator.msSaveOrOpenBlob(newBlob);
return; return;
} }
// For other browsers: // For other browsers:
// Create a link pointing to the ObjectURL containing the blob. // Create a link pointing to the ObjectURL containing the blob.
const downloadURL = URL.createObjectURL(response); const downloadURL = URL.createObjectURL(response);

@ -22,3 +22,4 @@ export * from "./message.service";
export * from "./hub.service"; export * from "./hub.service";
export * from "./system.service"; export * from "./system.service";
export * from "./filedownload.service"; export * from "./filedownload.service";
export * from "./settingsState.service";

@ -0,0 +1,17 @@
import { Injectable } from "@angular/core";
@Injectable({
providedIn: 'root',
})
export class SettingsStateService {
private issuesEnabled: boolean;
public getIssue(): boolean {
return this.issuesEnabled;
}
public setIssue(settings: boolean): void {
this.issuesEnabled = settings;
}
}
Loading…
Cancel
Save