Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 

106 linhas
3.3 KiB

  1. import {ChangeDetectorRef, Component, Inject, OnInit, Renderer2} from '@angular/core';
  2. import {AccountService} from './_services';
  3. import {User} from './_models';
  4. import {TranslateService} from "@ngx-translate/core";
  5. import {environment} from "@environments/environment";
  6. import {Subscription} from "rxjs";
  7. import {LoadingService} from "@app/_services/loading.service";
  8. import {DOCUMENT} from "@angular/common";
  9. @Component({
  10. selector: 'app-root',
  11. templateUrl: 'app.component.html',
  12. styleUrl: 'app.component.scss'
  13. })
  14. export class AppComponent implements OnInit {
  15. protected readonly environment = environment;
  16. protected user?: User | null;
  17. protected loadingSub: Subscription;
  18. protected loading: boolean = false;
  19. protected isLeftHanded = false;
  20. protected isDarkMode = false;
  21. constructor(
  22. private accountService: AccountService,
  23. private translate: TranslateService,
  24. private loadingService: LoadingService,
  25. private cdr: ChangeDetectorRef,
  26. private renderer: Renderer2,
  27. @Inject(DOCUMENT) private document: Document
  28. ) {
  29. translate.setDefaultLang('en');
  30. translate.use('en');
  31. this.accountService.user.subscribe(x => this.user = x);
  32. this.loadingSub = new Subscription();
  33. this.isLeftHanded = localStorage.getItem('isLeftHanded') === 'true';
  34. this.isDarkMode = localStorage.getItem('isDarkMode') === 'true';
  35. this.updateLeftHandedState();
  36. this.updateDarkModeState();
  37. }
  38. ngOnInit(): void {
  39. this.loadingSub = this.loadingService.getLoading().subscribe(
  40. loading => {
  41. this.loading = loading;
  42. // To avoid Error: NG0100
  43. this.cdr.detectChanges();
  44. }
  45. );
  46. }
  47. logout() {
  48. this.accountService.logout();
  49. }
  50. // TODO: Hilfsfunktion - entfernen
  51. copyTokenToClipboard() {
  52. const el = document.createElement('textarea');
  53. el.value = this.user?.token !== undefined ? this.user.token : "";
  54. document.body.appendChild(el);
  55. el.select();
  56. document.execCommand('copy');
  57. document.body.removeChild(el);
  58. }
  59. // For our left handed friends
  60. leftHanded() {
  61. this.isLeftHanded = !this.isLeftHanded;
  62. this.updateLeftHandedState();
  63. }
  64. private updateLeftHandedState() {
  65. if (this.isLeftHanded) {
  66. this.renderer.addClass(this.document.body, 'left-handed');
  67. } else {
  68. this.renderer.removeClass(this.document.body, 'left-handed');
  69. }
  70. // Save the state to localStorage
  71. localStorage.setItem('isLeftHanded', this.isLeftHanded.toString());
  72. }
  73. darkMode() {
  74. this.isDarkMode = !this.isDarkMode;
  75. this.updateDarkModeState();
  76. }
  77. private updateDarkModeState() {
  78. if (this.isDarkMode) {
  79. this.renderer.addClass(this.document.body, 'dark-mode');
  80. } else {
  81. this.renderer.removeClass(this.document.body, 'dark-mode');
  82. }
  83. // Save the state to localStorage
  84. localStorage.setItem('isDarkMode', this.isDarkMode.toString());
  85. }
  86. get buttonClassLefties(): string {
  87. return this.isLeftHanded ? 'btn-primary' : 'btn-secondary';
  88. }
  89. get buttonClassDarkMode(): string {
  90. return this.isDarkMode ? 'btn-primary' : 'btn-secondary';
  91. }
  92. }