0.27.4 • Published 4 months ago

sequential-workflow-designer-angular v0.27.4

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Sequential Workflow Designer for Angular

Sequential Workflow Designer for Angular

Build Status License: MIT View this project on NPM

Angular wrapper for the Sequential Workflow Designer component.

🚀 Installation

Install the following packages by NPM command:

npm i sequential-workflow-designer sequential-workflow-designer-angular

Add CSS files to your angular.json file.

{
  "projects": {
    "YOUR_APP": {
      "architect": {
        "build": {
          "styles": [
            "./node_modules/sequential-workflow-designer/css/designer.css",
            "./node_modules/sequential-workflow-designer/css/designer-light.css",
            "./node_modules/sequential-workflow-designer/css/designer-dark.css"
          ]
        }
      }
    }
  }
}

🎬 Usage

Import the module:

import { SequentialWorkflowDesignerModule } from 'sequential-workflow-designer-angular';

@NgModule({
  imports: [
    SequentialWorkflowDesignerModule,
    // ...
  ],
  // ...
})
export class AppModule {}

Define a definition and a configuration.

export class AppComponent {
  private designer?: Designer;
  public definition: Definition = { /* ... */ };
  public toolboxConfiguration: ToolboxConfiguration = { /* ... */ };
  public stepsConfiguration: StepsConfiguration = { /* ... */ };
  public validatorConfiguration: ValidatorConfiguration = { /* ... */ };
  // ...
}

Define the following methods to handle the designer's events.

export class AppComponent {
  //...
  public onDesignerReady(designer: Designer) {
    this.designer = designer;
  }

  public onDefinitionChanged(definition: Definition) {
    this.definition = definition;
  }

  public onSelectedStepIdChanged(stepId: string | null) {
    // ...
  }
}

Additionally we need to define a few utils methods to handle the editor's logic.

export class AppComponent {
  // ...
  public updateName(step: Step, event: Event, context: StepEditorContext) {
    step.name = (event.target as HTMLInputElement).value;
    context.notifyNameChanged();
  }

  public updateProperty(properties: Properties, name: string, event: Event, context: RootEditorContext | StepEditorContext) {
    properties[name] = (event.target as HTMLInputElement).value;
    context.notifyPropertiesChanged();
  }
}

Create a template for the root editor. The value of the editor variable implements the RootEditorWrapper interface.

<ng-template #rootEditor let-editor>
  <h2>Root Editor</h2>

  <h3>Velocity</h3>
  <input type="number"
    [value]="editor.definition.properties.velocity"
    (input)="updateProperty(editor.definition.properties, 'velocity', $event, editor.context)" />
</ng-template>
interface RootEditorWrapper {
  definition: Definition;
  context: RootEditorContext;
  isReadonly: boolean;
}

Create a template for the step editor. The value of the editor variable implements the StepEditorWrapper interface.

<ng-template #stepEditor let-editor>
  <h2>Step Editor</h2>

  <h3>Name</h3>
  <input type="text"
    [value]="editor.step.name"
    (input)="updateName(editor.step, $event, editor.context)" />

  <h3>Velocity</h3>
  <input type="number"
    [value]="editor.step.properties.velocity"
    (input)="updateProperty(editor.step.properties, 'velocity', $event, editor.context)" />
</ng-template>
interface StepEditorWrapper {
  step: Step;
  definition: Definition;
  context: StepEditorContext;
  isReadonly: boolean;
}

At the end attach the designer:

<sqd-designer
  theme="light"
  [undoStackSize]="10"
  [definition]="startDefinition"
  [toolboxConfiguration]="toolboxConfiguration"
  [stepsConfiguration]="stepsConfiguration"
  [validatorConfiguration]="validatorConfiguration"
  [controlBar]="true"
  [contextMenu]="true"
  [areEditorsHidden]="false"
  [rootEditor]="rootEditor"
  [stepEditor]="stepEditor"
  (onReady)="onDesignerReady($event)"
  (onDefinitionChanged)="onDefinitionChanged($event)"
  (onSelectedStepIdChanged)="onSelectedStepIdChanged($event)">
</sqd-designer>

Check the demo project.

💡 License

This project is released under the MIT license.

0.27.2

6 months ago

0.27.1

7 months ago

0.27.0

8 months ago

0.25.0

8 months ago

0.27.4

4 months ago

0.27.3

5 months ago

0.26.1

8 months ago

0.26.0

8 months ago

0.24.8

9 months ago

0.24.7

9 months ago

0.23.0

10 months ago

0.24.5

10 months ago

0.24.4

10 months ago

0.24.3

10 months ago

0.24.2

10 months ago

0.24.1

10 months ago

0.24.0

10 months ago

0.24.6

10 months ago

0.21.4

1 year ago

0.21.3

1 year ago

0.21.2

1 year ago

0.22.1

11 months ago

0.22.0

12 months ago

0.21.1

1 year ago

0.21.0

1 year ago

0.20.0

1 year ago

0.19.4

1 year ago

0.19.3

1 year ago

0.19.2

1 year ago

0.19.1

1 year ago

0.19.0

1 year ago

0.18.5

1 year ago

0.18.4

1 year ago

0.18.3

1 year ago

0.18.2

1 year ago

0.18.1

2 years ago

0.18.0

2 years ago

0.16.10

2 years ago

0.17.0

2 years ago

0.16.3

2 years ago

0.16.4

2 years ago

0.16.5

2 years ago

0.16.6

2 years ago

0.16.7

2 years ago

0.16.8

2 years ago

0.16.9

2 years ago

0.16.1

2 years ago

0.16.2

2 years ago

0.16.0

2 years ago

0.15.4

2 years ago

0.13.6

2 years ago

0.13.7

2 years ago

0.13.8

2 years ago

0.10.3

2 years ago

0.13.0

2 years ago

0.14.0

2 years ago

0.13.1

2 years ago

0.15.0

2 years ago

0.14.1

2 years ago

0.13.2

2 years ago

0.14.2

2 years ago

0.13.3

2 years ago

0.15.2

2 years ago

0.13.4

2 years ago

0.15.3

2 years ago

0.13.5

2 years ago

0.12.0

2 years ago

0.11.0

2 years ago

0.10.2

2 years ago

0.10.1

2 years ago

0.10.0

2 years ago

0.9.2

2 years ago

0.9.1

2 years ago

0.9.0

2 years ago

0.8.1

2 years ago

0.8.0

2 years ago

0.7.0

2 years ago

0.6.0

2 years ago

0.5.4

2 years ago