0.19.3 • Published 2 months ago

sequential-workflow-designer-angular v0.19.3

Weekly downloads
-
License
MIT
Repository
github
Last release
2 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.19.3

2 months ago

0.19.2

2 months ago

0.19.1

2 months ago

0.19.0

2 months ago

0.18.5

3 months ago

0.18.4

3 months ago

0.18.3

3 months ago

0.18.2

3 months ago

0.18.1

4 months ago

0.18.0

5 months ago

0.16.10

6 months ago

0.17.0

6 months ago

0.16.3

7 months ago

0.16.4

7 months ago

0.16.5

7 months ago

0.16.6

7 months ago

0.16.7

7 months ago

0.16.8

7 months ago

0.16.9

7 months ago

0.16.1

7 months ago

0.16.2

7 months ago

0.16.0

7 months ago

0.15.4

8 months ago

0.13.6

9 months ago

0.13.7

9 months ago

0.13.8

8 months ago

0.10.3

8 months ago

0.13.0

11 months ago

0.14.0

9 months ago

0.13.1

11 months ago

0.15.0

8 months ago

0.14.1

9 months ago

0.13.2

11 months ago

0.14.2

8 months ago

0.13.3

10 months ago

0.15.2

8 months ago

0.13.4

10 months ago

0.15.3

8 months ago

0.13.5

10 months ago

0.12.0

12 months ago

0.11.0

12 months ago

0.10.2

1 year ago

0.10.1

1 year ago

0.10.0

1 year ago

0.9.2

1 year ago

0.9.1

1 year ago

0.9.0

1 year ago

0.8.1

1 year ago

0.8.0

1 year ago

0.7.0

1 year ago

0.6.0

1 year ago

0.5.4

1 year ago