1 import {Component, OnInit} from '@angular/core';
2 import {InputActionAttribute, OutputActionAttribute} from './models/InputActionAttribute';
3 import {DesignerStore} from '../designer.store';
4 import {DesignerDashboardState} from '../model/designer.dashboard.state';
5 import {Action} from './models/Action';
8 selector: 'app-action-attributes',
9 templateUrl: './action-attributes.component.html',
10 styleUrls: ['./action-attributes.component.css']
12 export class ActionAttributesComponent implements OnInit {
16 actionAttributesSideBar: boolean;
17 inputActionAttribute = new InputActionAttribute();
18 outputActionAttribute = new OutputActionAttribute();
19 isInputOtherType: boolean;
20 isOutputOtherType: boolean;
24 designerState: DesignerDashboardState;
26 constructor(private designerStore: DesignerStore) {
31 this.designerStore.state$.subscribe(designerState => {
32 this.designerState = designerState;
33 if (this.designerState && this.designerState.actionName) {
34 this.actionName = this.designerState.actionName;
35 const action = this.designerState.template.workflows[this.actionName] as Action;
38 const namesOfInput = Object.keys(action.inputs);
39 this.inputs = this.extractFields(namesOfInput, action.inputs);
43 const namesOfOutput = Object.keys(action.outputs);
44 this.outputs = this.extractFields(namesOfOutput, action.outputs);
51 private extractFields(namesOfOutput: string[], container: {}) {
53 for (const nameOutput of namesOfOutput) {
54 const fieldAttribute = new OutputActionAttribute();
55 fieldAttribute.name = nameOutput;
56 fieldAttribute.description = container[nameOutput].description;
57 fieldAttribute.required = container[nameOutput].required;
58 fieldAttribute.type = container[nameOutput].type;
59 const insertedOutputActionAttribute = Object.assign({}, fieldAttribute);
60 fields.push(insertedOutputActionAttribute);
65 addInput(input: InputActionAttribute) {
66 if (input && input.type && input.name) {
67 const insertedInputActionAttribute = Object.assign({}, input);
68 this.inputs.push(insertedInputActionAttribute);
72 addOutput(output: OutputActionAttribute) {
73 if (output && output.type && output.name) {
74 const insertedOutputActionAttribute = Object.assign({}, output);
75 this.outputs.push(insertedOutputActionAttribute);
79 setInputType(type: string) {
80 this.inputActionAttribute.type = type;
81 this.isInputOtherType = this.checkIfTypeIsOther(type);
84 setInputRequired(isRequired) {
85 this.inputActionAttribute.required = isRequired;
88 setOutputRequired(isRequired) {
89 this.outputActionAttribute.required = isRequired;
92 setOutputType(type: string) {
93 this.outputActionAttribute.type = type;
94 this.isOutputOtherType = this.checkIfTypeIsOther(type);
97 checkIfTypeIsOther(type) {
98 return type.includes('Other');
102 this.addInput(this.inputActionAttribute);
103 this.addOutput(this.outputActionAttribute);
104 this.clearFormInputs();
105 this.designerStore.setInputsAndOutputsToSpecificWorkflow(this.storeInputs(this.inputs)
106 , this.storeOutputs(this.outputs), this.actionName);
109 private clearFormInputs() {
110 this.inputActionAttribute = new InputActionAttribute();
111 this.outputActionAttribute = new OutputActionAttribute();
112 this.outputOtherType = '';
113 this.inputOtherType = '';
116 private storeInputs(InputActionAttributes: InputActionAttribute[]) {
119 InputActionAttributes.forEach(input => {
120 inputs += this.appendAttributes(input);
123 if (inputs.endsWith(',')) {
124 inputs = inputs.substr(0, inputs.length - 1);
126 return JSON.parse('{' + inputs + '}');
129 private storeOutputs(OutputActionAttributes: OutputActionAttribute[]) {
131 OutputActionAttributes.forEach(output => {
132 outputs += this.appendAttributes(output);
134 if (outputs.endsWith(',')) {
135 outputs = outputs.substr(0, outputs.length - 1);
137 return JSON.parse('{' + outputs + '}');
140 private appendAttributes(output: OutputActionAttribute) {
141 return '"' + output.name + '" : {\n' +
142 ' "required" : ' + output.required + ',\n' +
143 ' "type" : "' + output.type + '",\n' +
144 ' "description" : "' + output.description + '"\n' +