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 linkProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/LinkProps';
14 import eventProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/EventProps';
15 import documentationProps from 'bpmn-js-properties-panel/lib/provider/bpmn/parts/DocumentationProps';
17 import elementTemplateChooserProps from 'bpmn-js-properties-panel/lib/provider/camunda/element-templates/parts/ChooserProps';
18 import elementTemplateCustomProps from 'bpmn-js-properties-panel/lib/provider/camunda/element-templates/parts/CustomProps';
20 import versionTag from 'bpmn-js-properties-panel/lib/provider/camunda/parts/VersionTagProps';
21 import userTaskProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/UserTaskProps';
22 import scriptProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/ScriptTaskProps';
23 import callActivityProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/CallActivityProps';
24 import conditionalProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/ConditionalProps';
25 import startEventInitiator from 'bpmn-js-properties-panel/lib/provider/camunda/parts/StartEventInitiator';
26 import multiInstanceProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/MultiInstanceLoopProps';
27 import asynchronousContinuationProps from 'bpmn-js-properties-panel/lib/provider/camunda/parts/AsynchronousContinuationProps';
28 import jobConfiguration from 'bpmn-js-properties-panel/lib/provider/camunda/parts/JobConfigurationProps';
29 import externalTaskConfiguration from 'bpmn-js-properties-panel/lib/provider/camunda/parts/ExternalTaskConfigurationProps';
30 import candidateStarter from 'bpmn-js-properties-panel/lib/provider/camunda/parts/CandidateStarterProps';
31 import historyTimeToLive from 'bpmn-js-properties-panel/lib/provider/camunda/parts/HistoryTimeToLiveProps';
33 import createInputOutputTabGroups from './parts/createInputOutputTabGroups';
34 import workflowServiceTaskDelegateProps from './parts/WorkflowServiceTaskDelegateProps';
36 const PROCESS_KEY_HINT = 'This maps to the process definition key.';
38 const isExternalTaskPriorityEnabled = function(element) {
39 const businessObject = getBusinessObject(element);
41 // show only if element is a process, a participant ...
43 is(element, 'bpmn:Process') ||
44 (is(element, 'bpmn:Participant') && businessObject.get('processRef'))
49 const externalBo = implementationTypeHelper.getServiceTaskLikeBusinessObject(
53 implementationTypeHelper.getImplementationType(externalBo) ===
56 // ... or an external task with selected external implementation type
58 !!implementationTypeHelper.isExternalCapable(externalBo) &&
63 const isJobConfigEnabled = element => {
64 const businessObject = getBusinessObject(element);
67 is(element, 'bpmn:Process') ||
68 (is(element, 'bpmn:Participant') && businessObject.get('processRef'))
74 const bo = getBusinessObject(element);
76 asyncCapableHelper.isAsyncBefore(bo) ||
77 asyncCapableHelper.isAsyncAfter(bo)
83 if (is(element, 'bpmn:Event')) {
84 return !!eventDefinitionHelper.getTimerEventDefinition(element);
90 function createGeneralTabGroups(
98 // refer to target element for external labels
99 element = element.labelTarget || element;
101 const generalGroup = {
103 label: translate('General'),
110 if (is(element, 'bpmn:Process')) {
111 idOptions = { description: PROCESS_KEY_HINT };
114 if (is(element, 'bpmn:Participant')) {
115 processOptions = { processIdDescription: PROCESS_KEY_HINT };
118 idProps(generalGroup, element, translate, idOptions);
119 nameProps(generalGroup, element, translate);
120 processProps(generalGroup, element, translate, processOptions);
121 versionTag(generalGroup, element, translate);
122 elementTemplateChooserProps(
129 const customFieldsGroups = elementTemplateCustomProps(
136 const detailsGroup = {
138 label: translate('Details'),
141 workflowServiceTaskDelegateProps(
148 userTaskProps(detailsGroup, element, translate);
149 scriptProps(detailsGroup, element, bpmnFactory, translate);
150 linkProps(detailsGroup, element, translate);
151 callActivityProps(detailsGroup, element, bpmnFactory, translate);
152 eventProps(detailsGroup, element, bpmnFactory, elementRegistry, translate);
153 conditionalProps(detailsGroup, element, bpmnFactory, translate);
154 startEventInitiator(detailsGroup, element, translate); // this must be the last element of the details group!
156 const multiInstanceGroup = {
158 label: translate('Multi Instance'),
161 multiInstanceProps(multiInstanceGroup, element, bpmnFactory, translate);
165 label: translate('Asynchronous Continuations'),
168 asynchronousContinuationProps(asyncGroup, element, bpmnFactory, translate);
170 const jobConfigurationGroup = {
171 id: 'jobConfiguration',
172 label: translate('Job Configuration'),
174 enabled: isJobConfigEnabled
176 jobConfiguration(jobConfigurationGroup, element, bpmnFactory, translate);
178 const externalTaskGroup = {
179 id: 'externalTaskConfiguration',
180 label: translate('External Task Configuration'),
182 enabled: isExternalTaskPriorityEnabled
184 externalTaskConfiguration(
191 const candidateStarterGroup = {
192 id: 'candidateStarterConfiguration',
193 label: translate('Candidate Starter Configuration'),
196 candidateStarter(candidateStarterGroup, element, bpmnFactory, translate);
198 const historyTimeToLiveGroup = {
199 id: 'historyConfiguration',
200 label: translate('History Configuration'),
203 historyTimeToLive(historyTimeToLiveGroup, element, bpmnFactory, translate);
205 const documentationGroup = {
207 label: translate('Documentation'),
210 documentationProps(documentationGroup, element, bpmnFactory, translate);
213 groups.push(generalGroup);
214 customFieldsGroups.forEach(function(group) {
217 groups.push(detailsGroup);
218 groups.push(externalTaskGroup);
219 groups.push(multiInstanceGroup);
220 groups.push(asyncGroup);
221 groups.push(jobConfigurationGroup);
222 groups.push(candidateStarterGroup);
223 groups.push(historyTimeToLiveGroup);
224 groups.push(documentationGroup);
229 function WorkflowPropertiesProvider(
237 CamundaPropertiesProvider.call(
246 this.getTabs = function(element) {
247 const camundaPropertiesProvider = new CamundaPropertiesProvider(
255 const tabs = camundaPropertiesProvider
257 .filter(tab => tab.id !== 'general' && tab.id !== 'input-output');
261 label: translate('General'),
262 groups: createGeneralTabGroups(
272 const inputOutputTab = {
274 label: translate('Input/Output'),
275 groups: createInputOutputTabGroups(
283 tabs.unshift(inputOutputTab);
284 tabs.unshift(generalTab);
289 WorkflowPropertiesProvider.$inject = [
298 inherits(WorkflowPropertiesProvider, CamundaPropertiesProvider);
300 export default WorkflowPropertiesProvider;