in packages/graph-explorer/src/core/StateProvider/neighbors.ts [163:209]
export function calculateNeighbors(
total: number,
totalByType: Map<string, number>,
fetchedNeighbors: NeighborStub[]
): NeighborCounts {
const fetchNeighborsMap = new Map(fetchedNeighbors.map(n => [n.id, n]));
const fetchedTotal = fetchNeighborsMap.size;
const totals = {
all: total,
fetched: fetchedTotal,
unfetched: total - fetchedTotal,
};
const fetchedNeighborsByType = fetchNeighborsMap
.values()
.reduce((map, neighbor) => {
// Uses the primary type until we can support neighbor counts in a multi-label world
const type = neighbor.types[0] ?? "";
const fetched = map.get(type) ?? 0;
return map.set(type, fetched + 1);
}, new Map<string, number>());
const byType = new Map(
totalByType.entries().map(([type, count]) => {
// Count of unique neighbors that have been fetched
const fetched = fetchedNeighborsByType.get(type) ?? 0;
// Total neighbors minus the fetched neighbors
const unfetched = count - fetched;
return [
type,
{
all: count,
fetched,
unfetched,
},
];
})
);
return {
...totals,
byType,
};
}