Skip to content

Commit f215166

Browse files
authored
0.28.0. (#183)
1 parent dccfe9e commit f215166

20 files changed

+92
-68
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 0.28.0
2+
3+
This update modifies the custom context menu in the pro version. The context menu items provider now retrieves the parent sequence of the selected workspace root sequence. If the root sequence is a folder sequence, the parent sequence is the folder sequence.
4+
15
# 0.27.4
26

37
Support for React 19 has been added.

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,10 @@ Add the below code to your head section in HTML document.
104104
```html
105105
<head>
106106
...
107-
<link href="https://cdn.jsdelivr.net/npm/sequential-workflow-designer@0.27.4/css/designer.css" rel="stylesheet">
108-
<link href="https://cdn.jsdelivr.net/npm/sequential-workflow-designer@0.27.4/css/designer-light.css" rel="stylesheet">
109-
<link href="https://cdn.jsdelivr.net/npm/sequential-workflow-designer@0.27.4/css/designer-dark.css" rel="stylesheet">
110-
<script src="https://cdn.jsdelivr.net/npm/sequential-workflow-designer@0.27.4/dist/index.umd.js"></script>
107+
<link href="https://cdn.jsdelivr.net/npm/sequential-workflow-designer@0.28.0/css/designer.css" rel="stylesheet">
108+
<link href="https://cdn.jsdelivr.net/npm/sequential-workflow-designer@0.28.0/css/designer-light.css" rel="stylesheet">
109+
<link href="https://cdn.jsdelivr.net/npm/sequential-workflow-designer@0.28.0/css/designer-dark.css" rel="stylesheet">
110+
<script src="https://cdn.jsdelivr.net/npm/sequential-workflow-designer@0.28.0/dist/index.umd.js"></script>
111111
```
112112

113113
Call the designer by:

angular/designer/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "sequential-workflow-designer-angular",
33
"description": "Angular wrapper for Sequential Workflow Designer component.",
4-
"version": "0.27.4",
4+
"version": "0.28.0",
55
"author": {
66
"name": "NoCode JS",
77
"url": "https://nocode-js.com/"
@@ -15,7 +15,7 @@
1515
"peerDependencies": {
1616
"@angular/common": "12 - 19",
1717
"@angular/core": "12 - 19",
18-
"sequential-workflow-designer": "^0.27.4"
18+
"sequential-workflow-designer": "^0.28.0"
1919
},
2020
"dependencies": {
2121
"tslib": "^2.3.0"

demos/angular-app/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
"@angular/platform-browser-dynamic": "^17.3.9",
2727
"@angular/router": "^17.3.9",
2828
"rxjs": "~7.8.0",
29-
"sequential-workflow-designer": "^0.27.4",
30-
"sequential-workflow-designer-angular": "^0.27.4",
29+
"sequential-workflow-designer": "^0.28.0",
30+
"sequential-workflow-designer-angular": "^0.28.0",
3131
"tslib": "^2.3.0",
3232
"zone.js": "~0.14.6"
3333
},

demos/angular-app/yarn.lock

+8-8
Original file line numberDiff line numberDiff line change
@@ -6744,17 +6744,17 @@ send@0.18.0:
67446744
range-parser "~1.2.1"
67456745
statuses "2.0.1"
67466746

6747-
sequential-workflow-designer-angular@^0.27.4:
6748-
version "0.27.4"
6749-
resolved "https://registry.yarnpkg.com/sequential-workflow-designer-angular/-/sequential-workflow-designer-angular-0.27.4.tgz#ef03a499b4db91429bf602d405bc137ee9f6d335"
6750-
integrity sha512-HUTb8dLTxcFyXcFAqAt++TjI2iwS0xPsVSF0t1Wi5z77e+yP2tlzpcq/NqPTvs1/C2udoMcq/pk9Tezln2GCfA==
6747+
sequential-workflow-designer-angular@^0.28.0:
6748+
version "0.28.0"
6749+
resolved "https://registry.yarnpkg.com/sequential-workflow-designer-angular/-/sequential-workflow-designer-angular-0.28.0.tgz#6748b69c5b626424e9d2f1a47686daa825ce7981"
6750+
integrity sha512-bSTGD3kh+7BCIPAMvDWipuUaoUv3G0RmdZiaQM7cE1f9P27HNQQueOr1nVRJmUbClE/2gW9+96n8VEpTtZ59xQ==
67516751
dependencies:
67526752
tslib "^2.3.0"
67536753

6754-
sequential-workflow-designer@^0.27.4:
6755-
version "0.27.4"
6756-
resolved "https://registry.yarnpkg.com/sequential-workflow-designer/-/sequential-workflow-designer-0.27.4.tgz#84e3d075229d1a3fe93f1913ab44212e66a8f0fb"
6757-
integrity sha512-OZr0IjbfTDfXidfe5hTPAGtisc4Q0idDoanAoBf+lKU2Dc7mzclp1EUrE5KP2IBbi8BofwGJIJdVwWQVOVwgkA==
6754+
sequential-workflow-designer@^0.28.0:
6755+
version "0.28.0"
6756+
resolved "https://registry.yarnpkg.com/sequential-workflow-designer/-/sequential-workflow-designer-0.28.0.tgz#b6fd72abf9ec00eab2b8633fe34f7f456b32dbf4"
6757+
integrity sha512-GEUERe8giyx/D9hsA+YG+LjescdLPBLs+yydHQ5UnGtXzl8784eUmPqqdGg/AnzsoEB5G+LIcgShoFMLVBYq+A==
67586758
dependencies:
67596759
sequential-workflow-model "^0.2.0"
67606760

demos/react-app/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"dependencies": {
77
"react": "^18.2.0",
88
"react-dom": "^18.2.0",
9-
"sequential-workflow-designer": "^0.27.4",
10-
"sequential-workflow-designer-react": "^0.27.4"
9+
"sequential-workflow-designer": "^0.28.0",
10+
"sequential-workflow-designer-react": "^0.28.0"
1111
},
1212
"devDependencies": {
1313
"@types/jest": "^29.2.5",

demos/svelte-app/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
"eslint": "eslint ./src --ext .ts"
1717
},
1818
"dependencies": {
19-
"sequential-workflow-designer": "^0.27.4",
20-
"sequential-workflow-designer-svelte": "^0.27.4"
19+
"sequential-workflow-designer": "^0.28.0",
20+
"sequential-workflow-designer-svelte": "^0.28.0"
2121
},
2222
"devDependencies": {
2323
"@sveltejs/adapter-static": "^2.0.3",

designer/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "sequential-workflow-designer",
33
"description": "Customizable no-code component for building flow-based programming applications.",
4-
"version": "0.27.4",
4+
"version": "0.28.0",
55
"type": "module",
66
"main": "./lib/esm/index.js",
77
"types": "./lib/index.d.ts",

designer/src/api/designer-api.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { I18n } from '../designer-configuration';
1111

1212
export class DesignerApi {
1313
public static create(context: DesignerContext): DesignerApi {
14-
const workspace = new WorkspaceApi(context.state, context.workspaceController);
14+
const workspace = new WorkspaceApi(context.state, context.definitionWalker, context.workspaceController);
1515
const viewportController = context.services.viewportController.create(workspace);
1616
const toolboxDataProvider = new ToolboxDataProvider(
1717
context.componentContext.iconProvider,

designer/src/api/workspace-api.ts

+26
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { DefinitionWalker, Sequence, StepChildrenType, StepWithParentSequence } from 'sequential-workflow-model';
12
import { Vector } from '../core';
23
import { Viewport } from '../designer-extension';
34
import { DesignerState } from '../designer-state';
@@ -6,6 +7,7 @@ import { WorkspaceControllerWrapper } from '../workspace/workspace-controller';
67
export class WorkspaceApi {
78
public constructor(
89
private readonly state: DesignerState,
10+
private readonly definitionWalker: DefinitionWalker,
911
private readonly workspaceController: WorkspaceControllerWrapper
1012
) {}
1113

@@ -40,4 +42,28 @@ export class WorkspaceApi {
4042
public updateCanvasSize() {
4143
this.workspaceController.updateCanvasSize();
4244
}
45+
46+
public getRootSequence(): WorkspaceRootSequence {
47+
const stepId = this.state.tryGetLastStepIdFromFolderPath();
48+
if (stepId) {
49+
const parentStep = this.definitionWalker.getParentSequence(this.state.definition, stepId);
50+
const children = this.definitionWalker.getChildren(parentStep.step);
51+
if (!children || children.type !== StepChildrenType.sequence) {
52+
throw new Error('Cannot find single sequence in folder step');
53+
}
54+
return {
55+
sequence: children.items as Sequence,
56+
parentStep
57+
};
58+
}
59+
return {
60+
sequence: this.state.definition.sequence,
61+
parentStep: null
62+
};
63+
}
64+
}
65+
66+
export interface WorkspaceRootSequence {
67+
sequence: Sequence;
68+
parentStep: StepWithParentSequence | null;
4369
}

designer/src/behaviors/click-behavior-resolver.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class ClickBehaviorResolver {
2121
return SelectStepBehavior.create(commandOrNull.component, forceMove, this.context);
2222

2323
case ClickCommandType.rerenderStep:
24-
return PressingBehavior.create(element, new RerenderStepPressingBehaviorHandler(this.context));
24+
return PressingBehavior.create(element, new RerenderStepPressingBehaviorHandler(commandOrNull, this.context));
2525

2626
case ClickCommandType.openFolder:
2727
return PressingBehavior.create(element, new OpenFolderPressingBehaviorHandler(commandOrNull, this.context));
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
import { DesignerContext } from '../../designer-context';
2+
import { RerenderStepClickCommand } from '../../workspace';
23
import { PressingBehaviorHandler } from './pressing-behavior';
34

45
export class RerenderStepPressingBehaviorHandler implements PressingBehaviorHandler {
5-
public constructor(private readonly designerContext: DesignerContext) {}
6+
public constructor(
7+
private readonly command: RerenderStepClickCommand,
8+
private readonly designerContext: DesignerContext
9+
) {}
610

711
public handle() {
12+
if (this.command.beforeCallback) {
13+
this.command.beforeCallback();
14+
}
815
this.designerContext.workspaceController.updateRootComponent();
916
}
1017
}

designer/src/designer-extension.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Behavior } from './behaviors';
55
import { ComponentContext } from './component-context';
66
import { Vector } from './core';
77
import { CustomActionController } from './custom-action-controller';
8-
import { ComponentType, Sequence, Step } from './definition';
8+
import { ComponentType, Definition, Sequence, Step } from './definition';
99
import { I18n } from './designer-configuration';
1010
import {
1111
Badge,
@@ -195,7 +195,7 @@ export interface ContextMenuExtension {
195195
}
196196

197197
export interface ContextMenuItemsProvider {
198-
getItems(step: Step | null, sequence: Sequence): ContextMenuItem[];
198+
getItems(step: Step | null, parentSequence: Sequence, definition: Definition): ContextMenuItem[];
199199
}
200200

201201
export interface ContextMenuItem {

designer/src/workspace/component.ts

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export interface SelectStepClickCommand extends BaseClickCommand {
6868
export interface RerenderStepClickCommand extends BaseClickCommand {
6969
type: ClickCommandType.rerenderStep;
7070
step: Step;
71+
beforeCallback?: () => void;
7172
}
7273

7374
export interface OpenFolderClickCommand extends BaseClickCommand {

designer/src/workspace/context-menu/context-menu-items-builder.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Sequence, Step } from '../../definition';
22
import { ViewportApi } from '../../api/viewport-api';
3+
import { WorkspaceApi } from '../../api/workspace-api';
34
import { StateModifier } from '../../modifier/state-modifier';
45
import { ContextMenuItem, ContextMenuItemsProvider } from '../../designer-extension';
56
import { DesignerState } from '../../designer-state';
@@ -9,6 +10,7 @@ import { I18n } from '../../designer-configuration';
910
export class ContextMenuItemsBuilder {
1011
public constructor(
1112
private readonly viewportApi: ViewportApi,
13+
private readonly workspaceApi: WorkspaceApi,
1214
private readonly i18n: I18n,
1315
private readonly stateModifier: StateModifier,
1416
private readonly state: DesignerState,
@@ -70,8 +72,9 @@ export class ContextMenuItemsBuilder {
7072
});
7173
}
7274
}
73-
} else {
74-
this.tryAppendCustomItems(items, null, this.state.definition.sequence);
75+
} else if (!commandOrNull) {
76+
const rootSequence = this.workspaceApi.getRootSequence();
77+
this.tryAppendCustomItems(items, null, rootSequence.sequence);
7578
}
7679

7780
items.push({
@@ -88,7 +91,7 @@ export class ContextMenuItemsBuilder {
8891

8992
private tryAppendCustomItems(items: ContextMenuItem[], step: Step | null, parentSequence: Sequence) {
9093
if (this.customMenuItemsProvider) {
91-
const customItems = this.customMenuItemsProvider.getItems(step, parentSequence);
94+
const customItems = this.customMenuItemsProvider.getItems(step, parentSequence, this.state.definition);
9295
for (const customItem of customItems) {
9396
items.push(customItem);
9497
}

designer/src/workspace/workspace-view.ts

+2-7
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,11 @@ export class WorkspaceView {
7373
private readonly context: ComponentContext
7474
) {}
7575

76-
public render(sequence: Sequence, parentSequencePlaceIndicator: SequencePlaceIndicator | null) {
76+
public render(sequence: Sequence, parentPlaceIndicator: SequencePlaceIndicator | null) {
7777
if (this.rootComponent) {
7878
this.foreground.removeChild(this.rootComponent.view.g);
7979
}
80-
this.rootComponent = this.context.services.rootComponent.create(
81-
this.foreground,
82-
sequence,
83-
parentSequencePlaceIndicator,
84-
this.context
85-
);
80+
this.rootComponent = this.context.services.rootComponent.create(this.foreground, sequence, parentPlaceIndicator, this.context);
8681
this.refreshSize();
8782
}
8883

designer/src/workspace/workspace.ts

+13-25
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { race } from '../core/simple-event-race';
22
import { Vector } from '../core/vector';
3-
import { DefinitionWalker, Sequence, StepChildrenType } from '../definition';
43
import { DesignerContext } from '../designer-context';
54
import { ClickCommand, ClickDetails, Component, FoundPlaceholders } from './component';
65
import { WorkspaceView } from './workspace-view';
@@ -10,13 +9,14 @@ import { ClickBehaviorResolver } from '../behaviors/click-behavior-resolver';
109
import { BehaviorController } from '../behaviors/behavior-controller';
1110
import { SimpleEvent } from '../core/simple-event';
1211
import { ClickBehaviorWrapper, SequencePlaceIndicator, Viewport, WheelController } from '../designer-extension';
13-
import { DesignerApi } from '../api/designer-api';
1412
import { StepComponent } from './step-component';
1513
import { BadgesResultFactory } from './badges/badges-result-factory';
1614
import { Services } from '../services';
1715
import { findValidationBadgeIndex } from './badges/find-validation-badge-index';
1816
import { ContextMenuController } from './context-menu/context-menu-controller';
1917
import { ViewportApi } from '../api/viewport-api';
18+
import { DesignerApi } from '../api/designer-api';
19+
import { WorkspaceApi } from '../api/workspace-api';
2020
import { DefinitionChangeType } from '../designer-configuration';
2121
import { ContextMenuItemsBuilder } from './context-menu/context-menu-items-builder';
2222
import { PinchToZoomController } from './viewport/pinch-to-zoom-controller';
@@ -33,6 +33,7 @@ export class Workspace implements WorkspaceController {
3333

3434
const contextMenuItemsBuilder = new ContextMenuItemsBuilder(
3535
api.viewport,
36+
api.workspace,
3637
api.i18n,
3738
designerContext.stateModifier,
3839
designerContext.state,
@@ -48,7 +49,6 @@ export class Workspace implements WorkspaceController {
4849

4950
const workspace = new Workspace(
5051
view,
51-
designerContext.definitionWalker,
5252
designerContext.state,
5353
designerContext.behaviorController,
5454
wheelController,
@@ -57,6 +57,7 @@ export class Workspace implements WorkspaceController {
5757
clickBehaviorResolver,
5858
clickBehaviorWrapper,
5959
api.viewport,
60+
api.workspace,
6061
designerContext.services
6162
);
6263
setTimeout(() => {
@@ -91,7 +92,6 @@ export class Workspace implements WorkspaceController {
9192

9293
private constructor(
9394
private readonly view: WorkspaceView,
94-
private readonly definitionWalker: DefinitionWalker,
9595
private readonly state: DesignerState,
9696
private readonly behaviorController: BehaviorController,
9797
private readonly wheelController: WheelController,
@@ -100,34 +100,22 @@ export class Workspace implements WorkspaceController {
100100
private readonly clickBehaviorResolver: ClickBehaviorResolver,
101101
private readonly clickBehaviorWrapper: ClickBehaviorWrapper,
102102
private readonly viewportApi: ViewportApi,
103+
private readonly workspaceApi: WorkspaceApi,
103104
private readonly services: Services
104105
) {}
105106

106107
public updateRootComponent() {
107108
this.selectedStepComponent = null;
108109

109-
let parentSequencePlaceIndicator: SequencePlaceIndicator | null;
110-
let sequence: Sequence;
111-
112-
const stepId = this.state.tryGetLastStepIdFromFolderPath();
113-
if (stepId) {
114-
const parentSequence = this.definitionWalker.getParentSequence(this.state.definition, stepId);
115-
const children = this.definitionWalker.getChildren(parentSequence.step);
116-
if (!children || children.type !== StepChildrenType.sequence) {
117-
throw new Error('Cannot find single sequence in folder step');
118-
}
119-
sequence = children.items as Sequence;
120-
121-
parentSequencePlaceIndicator = {
122-
sequence: parentSequence.parentSequence,
123-
index: parentSequence.index
124-
};
125-
} else {
126-
sequence = this.state.definition.sequence;
127-
parentSequencePlaceIndicator = null;
128-
}
110+
const rootSequence = this.workspaceApi.getRootSequence();
111+
const parentPlaceIndicator: SequencePlaceIndicator | null = rootSequence.parentStep
112+
? {
113+
sequence: rootSequence.parentStep.parentSequence,
114+
index: rootSequence.parentStep.index
115+
}
116+
: null;
129117

130-
this.view.render(sequence, parentSequencePlaceIndicator);
118+
this.view.render(rootSequence.sequence, parentPlaceIndicator);
131119
this.trySelectStepComponent(this.state.selectedStepId);
132120
this.updateBadges();
133121

examples/assets/lib.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ function embedStylesheet(url) {
1313
document.write(`<link href="${url}" rel="stylesheet">`);
1414
}
1515

16-
const baseUrl = isTestEnv() ? '../designer' : '//cdn.jsdelivr.net/npm/sequential-workflow-designer@0.27.4';
16+
const baseUrl = isTestEnv() ? '../designer' : '//cdn.jsdelivr.net/npm/sequential-workflow-designer@0.28.0';
1717

1818
embedScript(`${baseUrl}/dist/index.umd.js`);
1919
embedStylesheet(`${baseUrl}/css/designer.css`);

0 commit comments

Comments
 (0)