import { Node } from '../network-graph/node.model'; import { Link } from '../network-graph/link.model'; export interface CodecSet { Number: string; Members: string; } export interface RegionData { Name: string; Number: string; ToRegion: any; } export class RegionResults { regions: RegionData[]; codecSets: CodecSet[]; constructor(regions: RegionData[], codecSets: CodecSet[]) { this.regions = regions; this.codecSets = codecSets; } static findCodecSet(number: string, codecSets: CodecSet[]): string { const codecSet = codecSets.find((x) => x.Number === number); return codecSet ? codecSet.Members : 'Unknown Member'; } static fromRaw(regionResults: RegionResults) { const nodes: Node[] = []; const links: Link[] = []; for (const region of regionResults.regions) { if (!region.Number) { continue; } nodes.push( new Node( region.Number, region.Name, this.findCodecSet(region.Number, regionResults.codecSets), ), ); } for (const region of regionResults.regions) { if (region.ToRegion) { const toRegion = region.ToRegion; if (!nodes.filter((n) => n.id === toRegion.Number)) { console.warn('MISSING:', toRegion); const linkedNode = new Node( toRegion.Number, 'Unknown Name', this.findCodecSet(toRegion.Number, regionResults.codecSets), ); nodes.push(linkedNode); } links.push(new Link(region.Number, toRegion.Number)); const modifiedNodes = nodes.filter( (n) => n.id === region.Number || n.id === toRegion.Number, ); modifiedNodes.forEach((node) => node.linkCount++); } } return { nodes, links }; } }