diff --git a/projects/workflows-creator/src/lib/builder/group/group.component.ts b/projects/workflows-creator/src/lib/builder/group/group.component.ts index 776c70b..104c5be 100644 --- a/projects/workflows-creator/src/lib/builder/group/group.component.ts +++ b/projects/workflows-creator/src/lib/builder/group/group.component.ts @@ -212,6 +212,8 @@ export class GroupComponent implements OnInit, AfterViewInit { this.templateMap?.[InputTypes.Interval] || this.listTemplate, [InputTypes.Email]: this.templateMap?.[InputTypes.Email] || this.emailTemplate, + [InputTypes.OptionList]: + this.templateMap?.[InputTypes.OptionList] || this.listTemplate, }; } @@ -398,7 +400,7 @@ export class GroupComponent implements OnInit, AfterViewInit { element, input, input.setValue(element.node.state, value), - input.typeFunction(element.node.state) === InputTypes.List, + input.typeFunction(element.node.state) === InputTypes.List || input.typeFunction(element.node.state) === InputTypes.OptionList, ); this.clearValues(); } diff --git a/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts b/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts index a4c73e0..ad135b9 100644 --- a/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts +++ b/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts @@ -54,6 +54,7 @@ export abstract class WorkflowPrompt { value: AllowedValues | AllowedValuesMap, ) { switch (this.typeFunction(state)) { + case InputTypes.OptionList: case InputTypes.List: return value; case InputTypes.People: { @@ -146,6 +147,7 @@ export abstract class WorkflowPrompt { */ getValueName(state: State) { switch (this.typeFunction(state)) { + case InputTypes.OptionList: case InputTypes.List: if (typeof state.get(`${this.inputKey}Name`) === 'object') { return state.get(`${this.inputKey}Name`)?.displayValue; @@ -184,6 +186,7 @@ export abstract class WorkflowPrompt { */ setValueName(state: State) { switch (this.typeFunction(state)) { + case InputTypes.OptionList: case InputTypes.List: if ( typeof state.get(this.inputKey) === 'object' && diff --git a/projects/workflows-creator/src/lib/enum.ts b/projects/workflows-creator/src/lib/enum.ts index 189ef9a..b44c535 100644 --- a/projects/workflows-creator/src/lib/enum.ts +++ b/projects/workflows-creator/src/lib/enum.ts @@ -20,6 +20,8 @@ export enum InputTypes { People = 'people', Percentage = 'percentage', Text = 'text', + OptionList = "optionList", + Item = 'Item' } /* Defining the types of conditions that can be used in the application. */ diff --git a/projects/workflows-creator/src/lib/services/bpmn/elements/tasks/change-column-value.task.ts b/projects/workflows-creator/src/lib/services/bpmn/elements/tasks/change-column-value.task.ts index 9d077fd..26d9262 100644 --- a/projects/workflows-creator/src/lib/services/bpmn/elements/tasks/change-column-value.task.ts +++ b/projects/workflows-creator/src/lib/services/bpmn/elements/tasks/change-column-value.task.ts @@ -45,6 +45,7 @@ export class ChangeColumnValue extends ServiceTaskElement { switch (state.get('valueInputType')) { case InputTypes.People: return `'${JSON.stringify(state.get('value'))}'`; + case InputTypes.OptionList: case InputTypes.List: if (!state.get('value')) return ''; return `'${JSON.stringify({ diff --git a/projects/workflows-creator/src/lib/services/bpmn/elements/tasks/read-column.task.ts b/projects/workflows-creator/src/lib/services/bpmn/elements/tasks/read-column.task.ts index 5d7d7fd..64c116c 100644 --- a/projects/workflows-creator/src/lib/services/bpmn/elements/tasks/read-column.task.ts +++ b/projects/workflows-creator/src/lib/services/bpmn/elements/tasks/read-column.task.ts @@ -32,6 +32,9 @@ export class ReadColumnValue extends ServiceTaskElement { taskIds: { from: 'taskIds', }, + metaData: { + state: 'metaData', + }, groupColumnId: { state: 'column', }, diff --git a/projects/workflows-creator/src/lib/services/bpmn/strategies/link/gateway-link.strategy.ts b/projects/workflows-creator/src/lib/services/bpmn/strategies/link/gateway-link.strategy.ts index 32342b8..d734dee 100644 --- a/projects/workflows-creator/src/lib/services/bpmn/strategies/link/gateway-link.strategy.ts +++ b/projects/workflows-creator/src/lib/services/bpmn/strategies/link/gateway-link.strategy.ts @@ -337,6 +337,28 @@ export class GatewayLinkStrategy implements LinkStrategy { } }`; } + if (column === InputTypes.Item) { + return `var selectedVals = ${condition}; + var selCol = selectedVals.split(','); + for(var key in readObj){ + var taskValuePair = readObj[key]; + if(taskValuePair && taskValuePair.value && taskValuePair.value.length){ + var hasItem = false; + var usCol = taskValuePair.value; + + for(var selKey in selCol){ + for(var myKey in usCol){ + if(usCol[myKey].value == selCol[selKey] && !hasItem){ + hasItem = true; + } + } + } + if(${conditionExpression}(hasItem)){ + ids.push(taskValuePair.id); + } + } + }`; + } switch (conditionType) { case ConditionTypes.PastToday: return ` @@ -413,6 +435,7 @@ export class GatewayLinkStrategy implements LinkStrategy { case InputTypes.Text: value = `'${value}'`; break; + case InputTypes.OptionList: case InputTypes.List: value = `'${value.value}'`; break; diff --git a/projects/workflows-creator/src/lib/services/statement/events/onvalue.event.ts b/projects/workflows-creator/src/lib/services/statement/events/onvalue.event.ts index a8c4c41..a8458dd 100644 --- a/projects/workflows-creator/src/lib/services/statement/events/onvalue.event.ts +++ b/projects/workflows-creator/src/lib/services/statement/events/onvalue.event.ts @@ -3,8 +3,8 @@ import {RecordOfAnyType} from '../../../types'; import {BpmnEvent} from '../../../types/bpmn.types'; import {GatewayElement} from '../../bpmn/elements/gateways/gateway.element'; import {ReadColumnValue} from '../../bpmn/elements/tasks/read-column.task'; -import {ColumnInput} from '../inputs/column.input'; import {ConditionInput} from '../inputs/condition.input'; +import { CriteriaInput } from '../inputs/criteria.input'; import {ValueInput} from '../inputs/value.input'; export class OnValueEvent extends BpmnEvent { @@ -16,7 +16,7 @@ export class OnValueEvent extends BpmnEvent { statement = 'check if '; properties = {}; prompts = [ - ColumnInput.identifier, + CriteriaInput.identifier, ConditionInput.identifier, ValueInput.identifier, ]; diff --git a/projects/workflows-creator/src/lib/services/statement/inputs/criteria.input.ts b/projects/workflows-creator/src/lib/services/statement/inputs/criteria.input.ts new file mode 100644 index 0000000..8817e01 --- /dev/null +++ b/projects/workflows-creator/src/lib/services/statement/inputs/criteria.input.ts @@ -0,0 +1,20 @@ +import {State, WorkflowPrompt} from '../../../classes'; +import {InputTypes} from '../../../enum'; +import {RecordOfAnyType} from '../../../types'; + +export class CriteriaInput extends WorkflowPrompt { + prefix = ''; + suffix = ''; + typeFunction = () => InputTypes.OptionList; + inputKey = 'column'; + listNameField = 'text'; + listValueField = 'value'; + placeholder = 'Criteria'; + options = (state: State) => + state.get('columns'); + static identifier = 'CriteriaInput'; + + getIdentifier(): string { + return CriteriaInput.identifier; + } +} diff --git a/projects/workflows-creator/src/lib/services/statement/inputs/index.ts b/projects/workflows-creator/src/lib/services/statement/inputs/index.ts index ea94d81..3fdeb2c 100644 --- a/projects/workflows-creator/src/lib/services/statement/inputs/index.ts +++ b/projects/workflows-creator/src/lib/services/statement/inputs/index.ts @@ -7,3 +7,4 @@ export * from './value.input'; export * from './interval.input'; export * from './triggercolumn.input'; export * from './valuetype.input'; +export * from './criteria.input'; \ No newline at end of file diff --git a/projects/workflows-creator/src/lib/services/statement/inputs/value.input.ts b/projects/workflows-creator/src/lib/services/statement/inputs/value.input.ts index 83af419..b1cb912 100644 --- a/projects/workflows-creator/src/lib/services/statement/inputs/value.input.ts +++ b/projects/workflows-creator/src/lib/services/statement/inputs/value.input.ts @@ -9,7 +9,7 @@ import { import {BpmnNode, RecordOfAnyType} from '../../../types'; export class ValueInput extends WorkflowListPrompt { - prefix: string | {state: string} = ''; + prefix: string | {state: string} = {state: 'valuePrefix'}; suffix: string | {state: string} = {state: 'valueSuffix'}; inputKey = 'value'; listNameField = 'text'; diff --git a/projects/workflows-creator/src/lib/workflow-builder.module.ts b/projects/workflows-creator/src/lib/workflow-builder.module.ts index 2501d7d..fe0b382 100644 --- a/projects/workflows-creator/src/lib/workflow-builder.module.ts +++ b/projects/workflows-creator/src/lib/workflow-builder.module.ts @@ -89,6 +89,7 @@ import {TriggerColumnInput} from './services/statement/inputs/triggercolumn.inpu import {ValueTypeInput} from './services/statement/inputs/valuetype.input'; import {TooltipRenderComponent} from './builder/tooltip-render/tooltip-render.component'; import {LocalizationPipe} from './pipes/localization.pipe'; +import { CriteriaInput } from './services'; @NgModule({ declarations: [ BuilderComponent, @@ -143,6 +144,7 @@ import {LocalizationPipe} from './pipes/localization.pipe'; {provide: BPMN_ELEMENTS, useClass: ChangeColumnValue, multi: true}, {provide: BPMN_ELEMENTS, useClass: ProcessPropertiesElement, multi: true}, {provide: BPMN_INPUTS, useClass: ColumnInput, multi: true}, + {provide: BPMN_INPUTS, useClass: CriteriaInput, multi: true}, {provide: BPMN_INPUTS, useClass: TriggerColumnInput, multi: true}, {provide: BPMN_INPUTS, useClass: IntervalInput, multi: true}, {provide: BPMN_INPUTS, useClass: ConditionInput, multi: true},