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[]> = new Observable[]>(); constructor(private database: AngularFireDatabase) { } ngOnInit(): void { const factionRef = this.database.list('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('factions'); factionRef.push({ name: name, size: +size }) } public deleteFaction(key: string|null): void { const factionRef = this.database.list('factions'); if (key != null) { factionRef.remove(key); } } private static sortDescending(factionA: SnapshotAction, factionB: SnapshotAction): 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; } }