@memberjunction/ng-graph-view
An interactive, high-performance network and relationship graph visualization component for MemberJunction and Angular applications.
β¨ Features
Section titled ββ¨ Featuresβ- π Force-Directed Physics Simulation: Smooth Spring-Charge layout with repulsion, link elasticity, and velocity damping.
- π Multiple Layout Modes: Switch between
force(organic cluster network) andcirculartopology. - π·οΈ 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.
π¦ Installation & Setup
Section titled βπ¦ Installation & Setupβ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); }}ποΈ Component Inputs (Props)
Section titled βποΈ Component Inputs (Props)β| Property | Type | Default | Description |
|---|---|---|---|
Nodes | GraphNode[] | [] | Array of graph node entities to render. |
Edges | GraphEdge[] | [] | Array of relationship edges connecting nodes. |
LayoutMode | 'force' | 'circular' | 'force' | Active layout algorithm. |
MaxHopDistance | number | 2 | Max hop depth for neighborhood traversals. |
SelectedNodeId | string | undefined | ID of the node to initially select/highlight. |
ShowToolbar | boolean | true | Show floating controls toolbar. |
ShowLegend | boolean | true | Show category color legend. |
ShowInspector | boolean | true | Show slide-in selected node inspector drawer. |
Searchable | boolean | true | Enable keyword search input in toolbar. |
Physics | GraphPhysicsConfig | DEFAULT | Physics parameters (repulsion, linkDistance, damping). |
β‘ Cancelable Before/After Event System
Section titled ββ‘ Cancelable Before/After Event Systemβ| Event | Payload Type | Cancelable | Description |
|---|---|---|---|
BeforeNodeSelect | BeforeNodeSelectEventArgs | β Yes | Fired before a node is selected. Set event.Cancel = true to abort. |
NodeSelected | NodeSelectedEventArgs | β No | Fired after node selection completes. |
BeforeEdgeSelect | BeforeEdgeSelectEventArgs | β Yes | Fired before an edge relationship is selected. |
EdgeSelected | EdgeSelectedEventArgs | β No | Fired after edge selection completes. |
BeforeHopExpand | BeforeHopExpandEventArgs | β Yes | Fired before expanding neighbors for incremental data loading. |
HopExpanded | HopExpandedEventArgs | β No | Fired after hop expansion executes. |
BeforeLayoutChange | BeforeLayoutChangeEventArgs | β Yes | Fired before layout mode changes. |
LayoutChanged | LayoutChangedEventArgs | β No | Fired after layout algorithm recalculates. |
BeforeNodeNavigate | BeforeNodeNavigateEventArgs | β Yes | Fired before opening full entity record form. |
NodeNavigated | NodeNavigatedEventArgs | β No | Fired after the user asks to open a record. The host owns navigation. |
π οΈ Programmatic Methods
Section titled βπ οΈ Programmatic Methodsβ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.