Skip to content

Commit ca31274

Browse files
committed
Chore: Move some simulator settings to layout
1 parent 50cfc5e commit ca31274

4 files changed

Lines changed: 52 additions & 21 deletions

File tree

src/models/graph.ts

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,7 @@ export class Graph<N extends INodeBase, E extends IEdgeBase> extends Subject imp
9797

9898
setLayout(layout: ILayout<N, E>): void {
9999
this._layout = layout;
100-
this.resetLayout();
101-
}
102-
103-
resetLayout(): void {
104-
if (!this._layout) {
105-
return;
106-
}
107-
108-
const positions = this._layout.getPositions(this.getNodes());
109-
this.setNodePositions(positions);
110-
this.notifyListeners();
100+
this._resetLayout();
111101
}
112102

113103
/**
@@ -292,10 +282,7 @@ export class Graph<N extends INodeBase, E extends IEdgeBase> extends Subject imp
292282

293283
this._applyEdgeOffsets();
294284
this._applyStyle();
295-
296-
if (this._layout) {
297-
this.setNodePositions(this._layout.getPositions(this.getNodes()));
298-
}
285+
this._resetLayout();
299286

300287
this._settings?.onMergeData?.(data);
301288
}
@@ -309,10 +296,7 @@ export class Graph<N extends INodeBase, E extends IEdgeBase> extends Subject imp
309296

310297
this._applyEdgeOffsets();
311298
this._applyStyle();
312-
313-
if (this._layout) {
314-
this.setNodePositions(this._layout.getPositions(this.getNodes()));
315-
}
299+
this._resetLayout();
316300

317301
if (this._settings && this._settings.onRemoveData) {
318302
const removedData: IGraphObjectsIds = {
@@ -629,6 +613,16 @@ export class Graph<N extends INodeBase, E extends IEdgeBase> extends Subject imp
629613
return { nodeIds: [], edgeIds: removedEdgeIds };
630614
}
631615

616+
private _resetLayout(): void {
617+
if (!this._layout) {
618+
return;
619+
}
620+
621+
const positions = this._layout.getPositions(this.getNodes());
622+
this.setNodePositions(positions);
623+
this.notifyListeners();
624+
}
625+
632626
private _applyEdgeOffsets() {
633627
const graphEdges = this.getEdges();
634628
const edgeOffsets = getEdgeOffsets<N, E>(graphEdges);

src/simulator/layout/layout.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import { IEdgeBase } from '../../models/edge';
22
import { INode, INodeBase, INodePosition } from '../../models/node';
33
import { CircularLayout, ICircularLayoutOptions } from './layouts/circular';
4+
import { IForceLayoutOptions } from './layouts/force';
45
import { GridLayout, IGridLayoutOptions } from './layouts/grid';
56
import { HierarchicalLayout, IHierarchicalLayoutOptions } from './layouts/hierarchical';
67

78
export type LayoutType = 'circular' | 'force' | 'grid' | 'hierarchical';
89

910
export type LayoutSettingsMap = {
1011
circular: ICircularLayoutOptions;
11-
force: Record<string, never>;
12+
force: IForceLayoutOptions;
1213
grid: IGridLayoutOptions;
1314
hierarchical: IHierarchicalLayoutOptions;
1415
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export interface IForceLayoutOptions {
2+
centerX?: number;
3+
centerY?: number;
4+
nodeDistance?: number;
5+
}
6+
7+
export const DEFAULT_FORCE_LAYOUT_OPTIONS: IForceLayoutOptions = {
8+
centerX: 0,
9+
centerY: 0,
10+
nodeDistance: 50,
11+
};

src/views/orb-view.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ import { INode, INodeBase, isNode } from '../models/node';
1313
import { IEdge, IEdgeBase, isEdge } from '../models/edge';
1414
import { IOrbView } from './shared';
1515
import { DefaultEventStrategy, IEventStrategy, IEventStrategySettings } from '../models/strategy';
16-
import { ID3SimulatorEngineSettings } from '../simulator/engine/d3-simulator-engine';
16+
import {
17+
DEFAULT_SETTINGS,
18+
ID3SimulatorEngineSettings,
19+
ID3SimulatorEngineSettingsCentering,
20+
ID3SimulatorEngineSettingsLinks,
21+
} from '../simulator/engine/d3-simulator-engine';
1722
import { copyObject } from '../utils/object.utils';
1823
import { OrbEmitter, OrbEventType } from '../events';
1924
import { IRenderer, RenderEventType, IRendererSettingsInit, IRendererSettings } from '../renderer/shared';
@@ -23,6 +28,7 @@ import { getDefaultGraphStyle } from '../models/style';
2328
import { isBoolean } from '../utils/type.utils';
2429
import { IObserver, IObserverDataPayload } from '../utils/observer.utils';
2530
import { ILayoutSettings, LayoutFactory } from '../simulator/layout/layout';
31+
import { DEFAULT_FORCE_LAYOUT_OPTIONS, IForceLayoutOptions } from '../simulator/layout/layouts/force';
2632

2733
export interface IGraphInteractionSettings {
2834
isDragEnabled: boolean;
@@ -187,6 +193,25 @@ export class OrbView<N extends INodeBase, E extends IEdgeBase> implements IOrbVi
187193
this._settings.simulation = data.settings;
188194
});
189195

196+
if (this._settings.layout.options) {
197+
const _options = {
198+
...DEFAULT_FORCE_LAYOUT_OPTIONS,
199+
...this._settings.layout.options,
200+
} as Required<IForceLayoutOptions>;
201+
202+
this._settings.simulation.centering = {
203+
...(DEFAULT_SETTINGS.centering as Required<ID3SimulatorEngineSettingsCentering>),
204+
...this._settings.simulation.centering,
205+
x: _options.centerX,
206+
y: _options.centerY,
207+
};
208+
209+
this._settings.simulation.links = {
210+
...(DEFAULT_SETTINGS.links as Required<ID3SimulatorEngineSettingsLinks>),
211+
...this._settings.simulation.links,
212+
distance: _options.nodeDistance,
213+
};
214+
}
190215
this._simulator.setSettings(this._settings.simulation);
191216
}
192217

0 commit comments

Comments
 (0)