import { Component } from "@angular/core"; import { ToasterService } from "angular2-toaster"; import { DialogRef, ModalComponent } from "ngx-modialog"; import { BSModalContext } from "ngx-modialog/plugins/bootstrap"; import { FE_IrcBridge } from "../../../../shared/models/irc"; import { AdminIrcApiService } from "../../../../shared/services/admin/admin-irc-api.service"; export class IrcNetworksDialogContext extends BSModalContext { public bridge: FE_IrcBridge; } interface LocalNetwork { id: string; name: string; domain: string; bridgeUserId: string; isEnabled: boolean; } @Component({ templateUrl: "./networks.component.html", styleUrls: ["./networks.component.scss"], }) export class AdminIrcBridgeNetworksComponent implements ModalComponent { public isUpdating = false; public bridge: FE_IrcBridge; public networks: LocalNetwork[]; constructor(public dialog: DialogRef, private ircApi: AdminIrcApiService, private toaster: ToasterService) { this.bridge = dialog.context.bridge; const networkIds = Object.keys(this.bridge.availableNetworks); this.networks = networkIds.map(i => { return { id: i, name: this.bridge.availableNetworks[i].name, domain: this.bridge.availableNetworks[i].domain, bridgeUserId: this.bridge.availableNetworks[i].bridgeUserId, isEnabled: this.bridge.availableNetworks[i].isEnabled, }; }); } public toggleNetwork(network: LocalNetwork) { network.isEnabled = !network.isEnabled; this.bridge.availableNetworks[network.id].isEnabled = network.isEnabled; this.isUpdating = true; this.ircApi.setNetworkEnabled(this.bridge.id, network.id, network.isEnabled).then(() => { this.isUpdating = false; this.toaster.pop("success", "Network " + (network.isEnabled ? "enabled" : "disabled")); }).catch(err => { console.error(err); this.isUpdating = false; network.isEnabled = !network.isEnabled; this.bridge.availableNetworks[network.id].isEnabled = network.isEnabled; this.toaster.pop("error", "Failed to update network"); }); } }