1 import inherits from 'inherits';
2 import CamundaPropertiesProvider from 'bpmn-js-properties-panel/lib/provider/camunda/CamundaPropertiesProvider';
4 import { is, getBusinessObject } from 'bpmn-js/lib/util/ModelUtil';
6 import asyncCapableHelper from 'bpmn-js-properties-panel/lib/helper/AsyncCapableHelper';
7 import eventDefinitionHelper from 'bpmn-js-properties-panel/lib/helper/EventDefinitionHelper';
8 import implementationTypeHelper from 'bpmn-js-properties-panel/lib/helper/ImplementationTypeHelper';
10 import idProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/IdProps';
11 import nameProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/NameProps';
12 import processProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/ProcessProps';
13 import executableProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/ExecutableProps';
14 import linkProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/LinkProps';
15 import eventProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/EventProps';
16 import documentationProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/DocumentationProps';
18 import elementTemplateChooserProps from 'bpmn-js-properties-panel/lib/provider/camunda/element-templates/parts/ChooserProps';
19 import elementTemplateCustomProps from 'bpmn-js-properties-panel/lib/provider/camunda/element-templates/parts/CustomProps';
21 import versionTag from 'bpmn-js-properties-panel/lib/provider/camunda/parts/VersionTagProps';
22 import userTaskProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/UserTaskProps';
23 import scriptProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/ScriptTaskProps';
24 import callActivityProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/CallActivityProps';
25 import conditionalProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/ConditionalProps';
26 import startEventInitiator from 'bpmn-js-properties-panel/lib/provider/camunda/parts/StartEventInitiator';
27 import multiInstanceProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/MultiInstanceLoopProps';
28 import asynchronousContinuationProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/AsynchronousContinuationProps';
29 import jobConfiguration from 'bpmn-js-properties-panel/lib/provider/camunda/parts/JobConfigurationProps';
30 import externalTaskConfiguration from 'bpmn-js-properties-panel/lib/provider/camunda/parts/ExternalTaskConfigurationProps';
31 import candidateStarter from 'bpmn-js-properties-panel/lib/provider/camunda/parts/CandidateStarterProps';
32 import historyTimeToLive from 'bpmn-js-properties-panel/lib/provider/camunda/parts/HistoryTimeToLiveProps';
34 import createInputOutputTabGroups from './parts/createInputOutputTabGroups';
35 import workflowServiceTaskDelegateProps from './parts/WorkflowServiceTaskDelegateProps';
37 const PROCESS_KEY_HINT = 'This maps to the process definition key.';
39 const isExternalTaskPriorityEnabled = function(element) {
40 const businessObject = getBusinessObject(element);
42 // show only if element is a process, a participant ...
44 is(element, 'bpmn:Process') ||
45 (is(element, 'bpmn:Participant') && businessObject.get('processRef'))
50 const externalBo = implementationTypeHelper.getServiceTaskLikeBusinessObject(
54 implementationTypeHelper.getImplementationType(externalBo) ===
57 // ... or an external task with selected external implementation type
59 !!implementationTypeHelper.isExternalCapable(externalBo) &&
64 const isJobConfigEnabled = element => {
65 const businessObject = getBusinessObject(element);
68 is(element, 'bpmn:Process') ||
69 (is(element, 'bpmn:Participant') && businessObject.get('processRef'))
75 const bo = getBusinessObject(element);
77 asyncCapableHelper.isAsyncBefore(bo) ||
78 asyncCapableHelper.isAsyncAfter(bo)
84 if (is(element, 'bpmn:Event')) {
85 return !!eventDefinitionHelper.getTimerEventDefinition(element);
91 function createGeneralTabGroups(
99 // refer to target element for external labels
100 element = element.labelTarget || element;
102 const generalGroup = {
104 label: translate('General'),
111 if (is(element, 'bpmn:Process')) {
112 idOptions = { description: PROCESS_KEY_HINT };
115 if (is(element, 'bpmn:Participant')) {
116 processOptions = { processIdDescription: PROCESS_KEY_HINT };
119 idProps(generalGroup, element, translate, idOptions);
120 nameProps(generalGroup, element, translate);
121 processProps(generalGroup, element, translate, processOptions);
122 versionTag(generalGroup, element, translate);
123 executableProps(generalGroup, element, translate);
124 elementTemplateChooserProps(
131 const customFieldsGroups = elementTemplateCustomProps(
138 const detailsGroup = {
140 label: translate('Details'),
143 workflowServiceTaskDelegateProps(
150 userTaskProps(detailsGroup, element, translate);
151 scriptProps(detailsGroup, element, bpmnFactory, translate);
152 linkProps(detailsGroup, element, translate);
153 callActivityProps(detailsGroup, element, bpmnFactory, translate);
154 eventProps(detailsGroup, element, bpmnFactory, elementRegistry, translate);
155 conditionalProps(detailsGroup, element, bpmnFactory, translate);
156 startEventInitiator(detailsGroup, element, translate); // this must be the last element of the details group!
158 const multiInstanceGroup = {
160 label: translate('Multi Instance'),
163 multiInstanceProps(multiInstanceGroup, element, bpmnFactory, translate);
167 label: translate('Asynchronous Continuations'),
170 asynchronousContinuationProps(asyncGroup, element, bpmnFactory, translate);
172 const jobConfigurationGroup = {
173 id: 'jobConfiguration',
174 label: translate('Job Configuration'),
176 enabled: isJobConfigEnabled
178 jobConfiguration(jobConfigurationGroup, element, bpmnFactory, translate);
180 const externalTaskGroup = {
181 id: 'externalTaskConfiguration',
182 label: translate('External Task Configuration'),
184 enabled: isExternalTaskPriorityEnabled
186 externalTaskConfiguration(
193 const candidateStarterGroup = {
194 id: 'candidateStarterConfiguration',
195 label: translate('Candidate Starter Configuration'),
198 candidateStarter(candidateStarterGroup, element, bpmnFactory, translate);
200 const historyTimeToLiveGroup = {
201 id: 'historyConfiguration',
202 label: translate('History Configuration'),
205 historyTimeToLive(historyTimeToLiveGroup, element, bpmnFactory, translate);
207 const documentationGroup = {
209 label: translate('Documentation'),
212 documentationProps(documentationGroup, element, bpmnFactory, translate);
215 groups.push(generalGroup);
216 customFieldsGroups.forEach(function(group) {
219 groups.push(detailsGroup);
220 groups.push(externalTaskGroup);
221 groups.push(multiInstanceGroup);
222 groups.push(asyncGroup);
223 groups.push(jobConfigurationGroup);
224 groups.push(candidateStarterGroup);
225 groups.push(historyTimeToLiveGroup);
226 groups.push(documentationGroup);
231 function WorkflowPropertiesProvider(
239 CamundaPropertiesProvider.call(
248 this.getTabs = function(element) {
249 const camundaPropertiesProvider = new CamundaPropertiesProvider(
257 const tabs = camundaPropertiesProvider
259 .filter(tab => tab.id !== 'general' && tab.id !== 'input-output');
263 label: translate('General'),
264 groups: createGeneralTabGroups(
274 const inputOutputTab = {
276 label: translate('Input/Output'),
277 groups: createInputOutputTabGroups(
284 tabs.unshift(inputOutputTab);
285 tabs.unshift(generalTab);
290 WorkflowPropertiesProvider.$inject = [
299 inherits(WorkflowPropertiesProvider, CamundaPropertiesProvider);
301 export default WorkflowPropertiesProvider;