fa00719a3e
Replace all TypeScript JSON imports with an HWDataService that loads 6 data files from /assets/files-data/ via HttpClient with shareReplay(1). Update all 9 consumer components to subscribe asynchronously. Remove unused qcm-bpa.json import and dead methods from QcmComponent. Add ADR 0013 documenting the decision.
136 lines
5.0 KiB
TypeScript
136 lines
5.0 KiB
TypeScript
import { DatePipe, DecimalPipe } from '@angular/common';
|
|
import { Title } from '@angular/platform-browser';
|
|
import { trigger, state, style, animate, transition } from '@angular/animations';
|
|
import { Component, DestroyRef, inject, OnInit } from '@angular/core';
|
|
import { FormsModule } from '@angular/forms';
|
|
import { MatCardModule } from '@angular/material/card';
|
|
import { MatButtonModule } from '@angular/material/button';
|
|
import { MatDividerModule } from '@angular/material/divider';
|
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
import { MatIconModule } from '@angular/material/icon';
|
|
import { MatInputModule } from '@angular/material/input';
|
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
|
|
import { CardContainerComponent, ListErrorsComponent } from '@components/shared';
|
|
import { CardColors, Errors, HWActivityStat, HWGuildClan, HWMember } from '@models';
|
|
import { ClanViewModel, MembersViewModel } from '@viewmodels/herowars';
|
|
import { HWClanService, HWMemberService, UtilitiesService } from '@services';
|
|
import { MAX_CLAN_MEMBERS } from '@constants';
|
|
|
|
@Component({
|
|
selector: 'app-herowars-guildwar',
|
|
imports: [
|
|
DatePipe,
|
|
DecimalPipe,
|
|
FormsModule,
|
|
CardContainerComponent,
|
|
ListErrorsComponent,
|
|
MatButtonModule,
|
|
MatCardModule,
|
|
MatDividerModule,
|
|
MatFormFieldModule,
|
|
MatIconModule,
|
|
MatInputModule,
|
|
MatTabsModule,
|
|
],
|
|
templateUrl: './herowars-guildwar.component.html',
|
|
styleUrl: './herowars-guildwar.component.scss',
|
|
animations: [
|
|
trigger('flyInOut', [
|
|
state('in', style({ transform: 'translateY(0)' })),
|
|
transition('void => *', [style({ transform: 'translateY(-100%)' }), animate(200)]),
|
|
transition('* => void', [style({ transform: 'translateY(100%)' }), animate(200)]),
|
|
]),
|
|
],
|
|
})
|
|
export class HerowarsGuildwarComponent implements OnInit {
|
|
private _titleService = inject(Title);
|
|
private _utilitiesService = inject(UtilitiesService);
|
|
private _clanService = inject(HWClanService);
|
|
private _memberService = inject(HWMemberService);
|
|
|
|
public destroyRef = inject(DestroyRef);
|
|
public title = 'Guild War';
|
|
public subtitle = 'Log';
|
|
public description = 'Tools in working progress.';
|
|
public colors: CardColors = { background: 'bg-raspberry', text: 'text-bg-primary' };
|
|
public errors: Errors = { errors: {} };
|
|
public now = new Date();
|
|
public daysToWarn = 1;
|
|
public maxClanMembers = MAX_CLAN_MEMBERS;
|
|
public clanLoaded = false;
|
|
public membersLoaded = false;
|
|
public clanViewModel: ClanViewModel = {} as ClanViewModel;
|
|
public membersViewModel: MembersViewModel = {} as MembersViewModel;
|
|
private _guildClan: HWGuildClan = {} as HWGuildClan;
|
|
private _guildMembers: HWMember[] = [];
|
|
private _guildInfo: HWActivityStat = {} as HWActivityStat;
|
|
|
|
ngOnInit() {
|
|
this._titleService.setTitle(this.title);
|
|
}
|
|
|
|
getClanViewModel(): ClanViewModel {
|
|
return this.clanViewModel;
|
|
}
|
|
|
|
getMembersViewModel(): MembersViewModel {
|
|
return this.membersViewModel;
|
|
}
|
|
|
|
getColors(color = 'megna'): CardColors {
|
|
if (color === 'accent') {
|
|
this.colors = { background: 'bg-accent', text: 'text-navy' };
|
|
} else if (color === 'raspberry') {
|
|
this.colors = { background: 'bg-raspberry', text: 'text-bg-primary' };
|
|
} else {
|
|
this.colors = { background: 'bg-megna', text: 'text-bg-primary' };
|
|
}
|
|
return this.colors;
|
|
}
|
|
|
|
loadClan(): void {
|
|
this._clanService.loadClan().subscribe((clan) => {
|
|
this._guildClan = clan;
|
|
this.clanViewModel = new ClanViewModel(this._guildClan);
|
|
this.clanLoaded = true;
|
|
});
|
|
}
|
|
|
|
loadData(): void {
|
|
this._clanService.loadClan().subscribe((clan) => {
|
|
this._guildClan = clan;
|
|
this._memberService.loadMembers(this._guildClan).subscribe((members) => {
|
|
this._guildMembers = members;
|
|
this._guildClan = this._clanService.loadClanStats(this._guildClan, this._guildMembers);
|
|
this.daysToWarn = parseInt(this._guildClan.daysToKick) / 2;
|
|
this.clanViewModel = new ClanViewModel(this._guildClan);
|
|
this.clanLoaded = true;
|
|
this.membersViewModel = new MembersViewModel(this._guildMembers);
|
|
this.membersLoaded = true;
|
|
});
|
|
});
|
|
}
|
|
|
|
loadMembers(): void {
|
|
this._memberService.loadMembers(this._guildClan).subscribe((members) => {
|
|
this._guildMembers = members;
|
|
this.membersViewModel = new MembersViewModel(this._guildMembers);
|
|
this._guildClan = this._clanService.loadClanStats(this._guildClan, this._guildMembers);
|
|
this.membersLoaded = true;
|
|
});
|
|
}
|
|
|
|
getMembers(): HWMember[] {
|
|
return this._guildMembers;
|
|
}
|
|
|
|
syncClan(): void {
|
|
console.log(this._guildClan);
|
|
}
|
|
|
|
syncMembers(): void {
|
|
console.log(this._guildMembers);
|
|
}
|
|
}
|