59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import {Component, OnInit} from '@angular/core';
|
|
import {Faction} from './faction';
|
|
import {AngularFireDatabase, SnapshotAction} from '@angular/fire/compat/database';
|
|
import {Observable} from 'rxjs';
|
|
import {map} from 'rxjs/operators';
|
|
|
|
@Component({
|
|
selector: 'app-factions',
|
|
templateUrl: './factions.component.html',
|
|
styleUrls: ['./factions.component.scss']
|
|
})
|
|
export class FactionsComponent implements OnInit {
|
|
public factions: Observable<SnapshotAction<Faction>[]> = new Observable<SnapshotAction<Faction>[]>();
|
|
|
|
constructor(private database: AngularFireDatabase) { }
|
|
|
|
ngOnInit(): void {
|
|
const factionRef = this.database.list<Faction>('factions');
|
|
this.factions = factionRef.snapshotChanges().pipe(
|
|
map(results => {
|
|
return results.sort(FactionsComponent.sortDescending)
|
|
})
|
|
);
|
|
}
|
|
|
|
public addFaction(name: string, size: string): void {
|
|
const factionRef = this.database.list<Faction>('factions');
|
|
factionRef.push({
|
|
name: name,
|
|
size: +size
|
|
})
|
|
}
|
|
|
|
public deleteFaction(key: string|null): void {
|
|
const factionRef = this.database.list<Faction>('factions');
|
|
if (key != null) {
|
|
factionRef.remove(key);
|
|
}
|
|
}
|
|
|
|
private static sortDescending(factionA: SnapshotAction<Faction>, factionB: SnapshotAction<Faction>): number {
|
|
const factionAValue = factionA.payload.val();
|
|
const factionBValue = factionB.payload.val();
|
|
|
|
if (factionAValue == null || factionBValue == null) {
|
|
return 0;
|
|
}
|
|
|
|
if (factionAValue.size < factionBValue.size) {
|
|
return 1;
|
|
}
|
|
if (factionAValue.size > factionBValue.size) {
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|