ability-table.component.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import { Component } from '@angular/core';
  2. import {
  3. CdkDragDrop,
  4. CdkDropList,
  5. CdkDrag,
  6. moveItemInArray,
  7. } from '@angular/cdk/drag-drop';
  8. import { DataService } from 'src/services/data/data.service';
  9. import { Ability } from 'src/interfaces/ability';
  10. import { NgxSmartModalService } from 'ngx-smart-modal';
  11. import { AbilityDetailsComponent } from './ability-details/ability-details.component';
  12. import { DetailsService } from 'src/services/details/details.service';
  13. @Component({
  14. selector: 'ability-table',
  15. templateUrl: './ability-table.component.html',
  16. styleUrls: ['./ability-table.component.scss'],
  17. })
  18. export class AbilityTableComponent {
  19. public abilities!: Ability[];
  20. public costTranslator: any = {
  21. action: 'Aktion',
  22. bonus: 'Bonusaktion',
  23. reaction: 'Reaktion',
  24. };
  25. public isToUpdate: boolean = false;
  26. public abilityToUpdate: Ability | undefined;
  27. public updateAbilityIndex: number | undefined;
  28. ///////////
  29. public constructor(
  30. public dataAccessor: DataService,
  31. public ngxSmartModalService: NgxSmartModalService,
  32. private detailsAccessor: DetailsService
  33. ) {}
  34. public ngOnInit(): void {
  35. this.abilities = this.dataAccessor.getAbilities();
  36. }
  37. public ngAfterViewInit(): void {
  38. this.abilities.forEach((ability, abilityIndex) => {
  39. this.correctChargesView(abilityIndex);
  40. });
  41. }
  42. ///////////
  43. public getArray(length: number): any[] {
  44. return Array.from({ length: length });
  45. }
  46. public drop(event: CdkDragDrop<string[]>): void {
  47. moveItemInArray(this.abilities, event.previousIndex, event.currentIndex);
  48. this.updateDatabase();
  49. }
  50. public openAbilityModal(abilityIndex?: number): void {
  51. if (abilityIndex !== undefined) {
  52. this.isToUpdate = true;
  53. this.abilityToUpdate = this.abilities[abilityIndex];
  54. this.updateAbilityIndex = abilityIndex;
  55. }
  56. this.ngxSmartModalService.getModal('abilityModal').open();
  57. }
  58. public handleChangedCharges(abilityindex: number, CheckBoxRef: any): void {
  59. const newValue = CheckBoxRef.checked;
  60. // checked now, so a charge was used -> decrease
  61. if (newValue) {
  62. this.abilities[abilityindex].currentlyUsedCharges++;
  63. // else increase
  64. } else {
  65. this.abilities[abilityindex].currentlyUsedCharges--;
  66. }
  67. this.correctChargesView(abilityindex);
  68. this.updateDatabase();
  69. }
  70. public correctChargesView(abilityIndex: number): void {
  71. const charges = this.abilities[abilityIndex].charges;
  72. const currentlyUsedCharges =
  73. this.abilities[abilityIndex].currentlyUsedCharges;
  74. for (
  75. let chargeIndex = 0;
  76. chargeIndex < currentlyUsedCharges;
  77. chargeIndex++
  78. ) {
  79. setTimeout(() => {
  80. (
  81. document.getElementById(
  82. 'checkbox' + abilityIndex + '-' + chargeIndex
  83. ) as HTMLInputElement
  84. ).checked = true;
  85. });
  86. }
  87. for (
  88. let chargeIndex = currentlyUsedCharges;
  89. chargeIndex < charges;
  90. chargeIndex++
  91. ) {
  92. setTimeout(() => {
  93. (
  94. document.getElementById(
  95. 'checkbox' + abilityIndex + '-' + chargeIndex
  96. ) as HTMLInputElement
  97. ).checked = false;
  98. });
  99. }
  100. }
  101. public updateDatabase(): void {
  102. this.dataAccessor.setSAbilities(this.abilities);
  103. }
  104. // add
  105. public addNewlyCreatedAbility(ability: Ability): void {
  106. this.abilities.push(ability);
  107. this.updateDatabase();
  108. }
  109. // update
  110. public updateAbility(ability: Ability): void {
  111. this.abilities[this.updateAbilityIndex!] = ability;
  112. this.updateDatabase();
  113. this.correctChargesView(this.updateAbilityIndex!);
  114. this.resetUpdateData();
  115. }
  116. private resetUpdateData(): void {
  117. this.isToUpdate = false;
  118. this.abilityToUpdate = undefined;
  119. this.updateAbilityIndex = undefined;
  120. }
  121. private deleteAbility(index: number): void {
  122. this.abilities.splice(index, 1);
  123. this.updateDatabase();
  124. }
  125. // details panel
  126. public openDetailsPanel(index: number): void {
  127. this.detailsAccessor.openPanel(AbilityDetailsComponent, {
  128. abilities: this.abilities[index],
  129. });
  130. const resultSubscription = this.detailsAccessor.result$.subscribe(
  131. (result) => {
  132. console.log(result);
  133. if (result.state === 'delete') {
  134. this.deleteAbility(index);
  135. } else if (result.state === 'update') {
  136. this.openAbilityModal(index);
  137. }
  138. resultSubscription.unsubscribe();
  139. }
  140. );
  141. }
  142. }