6616f6a498fc5e99fd5dae92c46d1c193276bc31
[sdc/sdc-workflow-designer.git] /
1 import entryFactory from 'bpmn-js-properties-panel/lib/factory/EntryFactory';
2 import cmdHelper from 'bpmn-js-properties-panel/lib/helper/CmdHelper';
3 import {
4     implementationType,
5     IMPLEMENTATION_TYPE_VALUE,
6     SERVICE_TASK_NAME
7 } from './implementationConstants';
8
9 import InputOutputUpdater from './InputOutputUpdater';
10
11 const workflowActivity = (element, config, bpmnFactory, options, translate) => {
12     const { getImplementationType, getBusinessObject } = options;
13
14     const isWorkflowActivity = element =>
15         getImplementationType(element) === 'workflowActivity';
16
17     const workflowActivityEntry = entryFactory.selectBox({
18         id: 'activitySelect',
19         label: translate('Activity Spec'),
20         selectOptions: config.activities,
21         emptyParameter: true,
22         modelProperty: 'workflowActivity',
23
24         get: function(element) {
25             var bo = getBusinessObject(element);
26             const value = bo.get(implementationType.ACTIVITY);
27             const activityValue =
28                 value && value.indexOf(IMPLEMENTATION_TYPE_VALUE) > -1
29                     ? value.substr(IMPLEMENTATION_TYPE_VALUE.length)
30                     : '';
31
32             return {
33                 workflowActivity: activityValue
34             };
35         },
36
37         set: function(element, values) {
38             var bo = getBusinessObject(element);
39
40             const commands = [];
41             const dataForUpdate = {};
42
43             const activityInputsOutputs = config.getActivityInputsOutputs(
44                 values.workflowActivity
45             );
46
47             dataForUpdate[
48                 implementationType.ACTIVITY
49             ] = `${IMPLEMENTATION_TYPE_VALUE}${values.workflowActivity}`;
50
51             dataForUpdate[implementationType.EXPRESSION] =
52                 implementationType.EXPRESSION_VALUE;
53
54             dataForUpdate[SERVICE_TASK_NAME] = values.workflowActivity;
55
56             commands.push(
57                 cmdHelper.updateBusinessObject(element, bo, dataForUpdate)
58             );
59             return [
60                 ...commands,
61                 ...InputOutputUpdater({
62                     element,
63                     bo,
64                     bpmnFactory,
65                     activityInputsOutputs,
66                     commands
67                 })
68             ];
69         },
70
71         validate: function(element, values) {
72             const hasErrors =
73                 isWorkflowActivity(element) && !values.workflowActivity;
74             config.validationUpdate(element, !hasErrors);
75
76             return hasErrors
77                 ? { workflowActivity: 'Must provide a value' }
78                 : {};
79         },
80
81         hidden: function(element) {
82             return !isWorkflowActivity(element);
83         }
84     });
85
86     return [workflowActivityEntry];
87 };
88
89 export default workflowActivity;