aboutsummaryrefslogtreecommitdiffstats
path: root/workflow-designer-ui/src/main/frontend/src/features/version/composition/custom-properties-provider/provider/camunda/parts/implementation/InputOutputUpdater.js
blob: 056a2dba913b65556b40f6d9da66f74a61fc9977 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
* Copyright © 2018 European Support Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*http://www.apache.org/licenses/LICENSE-2.0
*
 * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import cmdHelper from 'bpmn-js-properties-panel/lib/helper/CmdHelper';
import { createInputOutput, createElement } from './InputOutput';
import InputOutputHelper from './InputOutputHelper';
import { INPUT, OUTPUT } from './implementationConstants';

export default ({ element, bo, bpmnFactory, activityInputsOutputs }) => {
    const commands = [];
    const existedInputOutput = InputOutputHelper.getInputOutput(element);

    let newInputOutput = createInputOutput(element, bpmnFactory, {
        inputParameters: [],
        outputParameters: []
    });

    const inputs = activityInputsOutputs.inputs.map(({ name, value }) =>
        createElement(INPUT, newInputOutput, bpmnFactory, {
            name,
            type: 'Text',
            value
        })
    );

    const outputs = activityInputsOutputs.outputs.map(({ name, value }) =>
        createElement(OUTPUT, newInputOutput, bpmnFactory, {
            name,
            type: 'Text',
            value
        })
    );

    newInputOutput.inputParameters = inputs;
    newInputOutput.outputParameters = outputs;

    const objectToRemove = existedInputOutput ? [existedInputOutput] : [];
    const extensionElements =
        bo.extensionElements ||
        createElement('bpmn:ExtensionElements', bo, bpmnFactory, []);

    if (!bo.extensionElements) {
        commands.push(
            cmdHelper.updateBusinessObject(element, bo, {
                extensionElements
            })
        );
    }

    commands.push(
        cmdHelper.addAndRemoveElementsFromList(
            element,
            extensionElements,
            'values',
            'extensionElements',
            [newInputOutput],
            objectToRemove
        )
    );
    return commands;
};