Skip to content

@memberjunction/ng-graph-view

An interactive, high-performance network and relationship graph visualization component for MemberJunction and Angular applications.

  • 🌐 Force-Directed Physics Simulation: Smooth Spring-Charge layout with repulsion, link elasticity, and velocity damping.
  • πŸ“ Multiple Layout Modes: Switch between force (organic cluster network) and circular topology.
  • 🏷️ Categorized Entity Node Badges: Native palette support for People, Organizations, Committees, Accounts, and Custom entities.
  • πŸ” Interactive Search & Degree Filter: Node keyword filtering and hop-distance neighborhood expansion.
  • 🎯 Cancelable Before/After Event System: Full control over user interactions (BeforeNodeSelect, BeforeEdgeSelect, BeforeHopExpand, BeforeLayoutChange).
  • 🎨 MemberJunction Design Tokens: Seamless integration with MJ dark/light themes and typography.
  • πŸ”Ž Selected Node Inspector Pane: Built-in side drawer. Navigation is an intent event (NodeNavigated) so the host opens the record.

import { GraphViewComponent } from '@memberjunction/ng-graph-view';
@Component({
standalone: true,
imports: [GraphViewComponent],
template: `
<mj-graph-view
[Nodes]="graphNodes"
[Edges]="graphEdges"
[LayoutMode]="'force'"
(NodeSelected)="onNodeSelected($event)">
</mj-graph-view>
`
})
export class MyFeatureComponent {
public graphNodes: GraphNode[] = [...];
public graphEdges: GraphEdge[] = [...];
public onNodeSelected(event: NodeSelectedEventArgs): void {
console.log('Selected node:', event.Node.Label);
}
}

PropertyTypeDefaultDescription
NodesGraphNode[][]Array of graph node entities to render.
EdgesGraphEdge[][]Array of relationship edges connecting nodes.
LayoutMode'force' | 'circular''force'Active layout algorithm.
MaxHopDistancenumber2Max hop depth for neighborhood traversals.
SelectedNodeIdstringundefinedID of the node to initially select/highlight.
ShowToolbarbooleantrueShow floating controls toolbar.
ShowLegendbooleantrueShow category color legend.
ShowInspectorbooleantrueShow slide-in selected node inspector drawer.
SearchablebooleantrueEnable keyword search input in toolbar.
PhysicsGraphPhysicsConfigDEFAULTPhysics parameters (repulsion, linkDistance, damping).

EventPayload TypeCancelableDescription
BeforeNodeSelectBeforeNodeSelectEventArgsβœ… YesFired before a node is selected. Set event.Cancel = true to abort.
NodeSelectedNodeSelectedEventArgs❌ NoFired after node selection completes.
BeforeEdgeSelectBeforeEdgeSelectEventArgsβœ… YesFired before an edge relationship is selected.
EdgeSelectedEdgeSelectedEventArgs❌ NoFired after edge selection completes.
BeforeHopExpandBeforeHopExpandEventArgsβœ… YesFired before expanding neighbors for incremental data loading.
HopExpandedHopExpandedEventArgs❌ NoFired after hop expansion executes.
BeforeLayoutChangeBeforeLayoutChangeEventArgsβœ… YesFired before layout mode changes.
LayoutChangedLayoutChangedEventArgs❌ NoFired after layout algorithm recalculates.
BeforeNodeNavigateBeforeNodeNavigateEventArgsβœ… YesFired before opening full entity record form.
NodeNavigatedNodeNavigatedEventArgs❌ NoFired after the user asks to open a record. The host owns navigation.

Call these directly via @ViewChild(GraphViewComponent):

  • ZoomIn() / ZoomOut(): Step viewport scale in or out.
  • FitToView(): Reset zoom and center the network graph.
  • Rearrange(): Re-seed positions and re-run physics relaxation.
  • SetLayoutMode(mode): Change between 'force' and 'circular'.
  • SelectNode(id): Select a node programmatically.
  • ClearSelection(): Deselect currently active node or edge.
  • ExpandHops(nodeId, depth): Request incremental neighbor loading.