import { Injectable } from '@angular/core'; import { Observable, ReplaySubject } from 'rxjs'; import { NodeData, REMOTE_DATA, SelectableNodeData } from '../local-data'; @Injectable() export class Data { private nodeData: SelectableNodeData[] = []; private selectedNode: Set = new Set(); private deselectedNode: Set = new Set(); private data$: ReplaySubject = new ReplaySubject(); public get data(): Observable { return this.data$; } public getData(): void { setTimeout(() => { this.nodeData = REMOTE_DATA; const passed = this.nodeData.map(e => { const selectionState: Partial = {}; if (this.selectedNode.has(e.Name)) { selectionState.Selected = true; } if (this.deselectedNode.has(e.Name)) { selectionState.Selected = false; } return Object.assign({}, e, selectionState); }); this.data$.next(passed); }, 2000); } public clearData(): void { this.nodeData = []; this.data$.next(this.nodeData); } public clearSelect(): void { this.selectedNode = new Set(); this.deselectedNode = new Set(); } public toggleSelected(node: NodeData, state: boolean): void { if (state) { this.selectedNode.add(node.Name); this.deselectedNode.delete(node.Name); } else { this.deselectedNode.add(node.Name); this.selectedNode.delete(node.Name); } } }