district-politics/projects/speech-statistics/src/app/auth/administration/factions/factions.component.ts

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;
}
}