Skip to content

Commit b574306

Browse files
docs: Added custom connection type example
1 parent 8731cdd commit b574306

6 files changed

Lines changed: 42 additions & 12 deletions

File tree

projects/f-examples/custom-connection-type/custom-connection-type.component.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,9 @@
33
<f-connection fText="offset_straight" [fReassignDisabled]="true" fType="offset_straight" fOutputId="output1" fInputId="input1"></f-connection>
44
<div fNode fDragHandle [fNodePosition]="{ x: 24, y: 24 }" fNodeOutput fOutputId="output1" fOutputConnectableSide="right">drag me</div>
55
<div fNode fDragHandle [fNodePosition]="{ x: 144, y: 140 }" fNodeInput fInputId="input1" fInputConnectableSide="left">drag me</div>
6+
7+
<f-connection fText="circle" [fReassignDisabled]="true" fType="circle" fOutputId="output2" fInputId="input2"></f-connection>
8+
<div fNode fDragHandle [fNodePosition]="{ x: 244, y: 24 }" fNodeOutput fOutputId="output2" fOutputConnectableSide="bottom">drag me</div>
9+
<div fNode fDragHandle [fNodePosition]="{ x: 468, y: 24 }" fNodeInput fInputId="input2" fInputConnectableSide="bottom">drag me</div>
610
</f-canvas>
711
</f-flow>

projects/f-examples/custom-connection-type/custom-connection-type.component.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
IFConnectionBuilderRequest,
77
IFConnectionBuilderResponse
88
} from '@foblex/flow';
9+
import { IPoint } from '@foblex/core';
910

1011

1112
class OffsetStraightBuilder implements IFConnectionBuilder {
@@ -18,8 +19,29 @@ class OffsetStraightBuilder implements IFConnectionBuilder {
1819
}
1920
}
2021

22+
class CircleConnectionBuilder implements IFConnectionBuilder {
23+
24+
public handle(request: IFConnectionBuilderRequest): IFConnectionBuilderResponse {
25+
const { source, target } = request;
26+
const d = this.getD(request);
27+
const path = `M ${ source.x } ${ source.y } S${ d.x } ${ d.y } ${ target.x } ${ target.y }`;
28+
return { path, connectionCenter: { x: 0, y: 0 } };
29+
}
30+
31+
private getD(request: IFConnectionBuilderRequest): IPoint {
32+
const offset: number = request.offset;
33+
const cx: number = (request.source.x + request.radius + request.target.x) / 2;
34+
const cy: number = (request.source.y + request.radius + request.target.y) / 2;
35+
const dx: number = cx + (offset * (request.source.y - request.target.y)) / Math.sqrt(Math.pow(request.source.x - request.target.x, 2) + Math.pow(request.source.y - request.target.y, 2)) || cx;
36+
const dy: number = cy - (offset * (request.source.x - request.target.x)) / Math.sqrt(Math.pow(request.source.x - request.target.x, 2) + Math.pow(request.source.y - request.target.y, 2)) || cy;
37+
38+
return { x: dx, y: dy };
39+
}
40+
}
41+
2142
const connectionBuilders = {
22-
[ 'offset_straight' ]: new OffsetStraightBuilder()
43+
[ 'offset_straight' ]: new OffsetStraightBuilder(),
44+
[ 'circle' ]: new CircleConnectionBuilder()
2345
};
2446

2547

projects/f-flow/src/domain/clear-selection/clear-selection.execution.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ export class ClearSelectionExecution implements IExecution<ClearSelectionRequest
1313
}
1414

1515
public handle(request: ClearSelectionRequest): void {
16-
this.fDraggableDataContext.selectedItems.forEach((x) => {
17-
x.deselect();
18-
});
16+
this.fDraggableDataContext.selectedItems.forEach((x) => x.deselect());
1917
this.fDraggableDataContext.selectedItems = [];
2018
this.fDraggableDataContext.isSelectedChanged = true;
2119
}

projects/f-flow/src/domain/select-all/select-all.execution.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { IHandler } from '@foblex/core';
21
import { SelectAllRequest } from './select-all.request';
32
import { Injectable } from '@angular/core';
43
import { FDraggableDataContext } from '../../f-draggable';

projects/f-flow/src/domain/update-item-layer/update-item-layer.execution.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,23 @@ import { FExecutionRegister, IExecution } from '../../infrastructure';
77
export class UpdateItemLayerExecution implements IExecution<UpdateItemLayerRequest, void> {
88

99
public handle(request: UpdateItemLayerRequest): void {
10+
1011
const elements = Array.from(request.itemContainer.children);
11-
const targetIndex: number = elements.findIndex((x) => x === request.item.hostElement);
12-
if (targetIndex !== -1 && targetIndex !== elements.length - 1) {
13-
const afterElements = elements.splice(targetIndex + 1);
14-
afterElements.forEach((x) => {
12+
const index = this.getTargetIndex(elements, request.item.hostElement);
13+
14+
if (this.isNotLastElement(elements, index)) {
15+
elements.splice(index + 1).forEach((x) => {
1516
request.itemContainer.removeChild(x);
1617
request.itemContainer.insertBefore(x, request.item.hostElement);
1718
});
1819
}
1920
}
21+
22+
private getTargetIndex(elements: Element[], item: Element): number {
23+
return elements.findIndex((x) => x === item);
24+
}
25+
26+
private isNotLastElement(elements: Element[], index: number): boolean {
27+
return index !== -1 && index !== elements.length - 1;
28+
}
2029
}

projects/f-flow/src/f-draggable/canvas/canvas-move-finalize/canvas-move-finalize.execution.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ export class CanvasMoveFinalizeExecution implements IExecution<CanvasMoveFinaliz
1313
}
1414

1515
public handle(request: CanvasMoveFinalizeRequest): void {
16-
this.fDraggableDataContext.draggableItems.forEach((x) => {
17-
x.complete?.();
18-
});
16+
this.fDraggableDataContext.draggableItems.forEach((x) => x.complete?.());
1917
}
2018
}

0 commit comments

Comments
 (0)