Skip to content

Commit a4762fa

Browse files
feat: add task listeners for Zeebe
related to camunda/camunda-modeler#4590
1 parent 2d68ce4 commit a4762fa

File tree

9 files changed

+885
-65
lines changed

9 files changed

+885
-65
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ All notable changes to [bpmn-js-properties-panel](https://github.com/bpmn-io/bpm
66

77
___Note:__ Yet to be released changes appear here._
88

9+
* `FEAT`: support Zeebe task listeners ([#1088](https://github.com/bpmn-io/bpmn-js-properties-panel/pull/1088))
10+
911
## 5.26.0
1012

1113
* `FEAT`: make FEEL popup links configurable ([#1083](https://github.com/bpmn-io/bpmn-js-properties-panel/pull/1083))

src/provider/zeebe/ZeebePropertiesProvider.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
SignalProps,
2525
TargetProps,
2626
TaskDefinitionProps,
27+
TaskListenersProps,
2728
TaskScheduleProps,
2829
TimerProps,
2930
UserTaskImplementationProps,
@@ -56,6 +57,7 @@ const ZEEBE_GROUPS = [
5657
OutputPropagationGroup,
5758
OutputGroup,
5859
HeaderGroup,
60+
TaskListenersGroup,
5961
ExecutionListenersGroup,
6062
ExtensionPropertiesGroup
6163
];
@@ -323,6 +325,22 @@ function ExecutionListenersGroup(element, injector) {
323325
return null;
324326
}
325327

328+
function TaskListenersGroup(element, injector) {
329+
const translate = injector.get('translate');
330+
const group = {
331+
label: translate('Task listeners'),
332+
id: 'Zeebe__TaskListeners',
333+
component: ListGroup,
334+
...TaskListenersProps({ element, injector })
335+
};
336+
337+
if (group.items) {
338+
return group;
339+
}
340+
341+
return null;
342+
}
343+
326344
function ExtensionPropertiesGroup(element, injector) {
327345
const translate = injector.get('translate');
328346
const group = {

src/provider/zeebe/properties/ExecutionListener.js

Lines changed: 1 addition & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
getErrorEventDefinition
1414
} from '../../../utils/EventDefinitionUtil';
1515

16-
import { FeelEntryWithVariableContext } from '../../../entries/FeelEntryWithContext';
16+
import { ListenerType, Retries } from './shared/Listener';
1717

1818

1919
export const EVENT_TO_LABEL = {
@@ -95,70 +95,6 @@ function EventType(props) {
9595
});
9696
}
9797

98-
function ListenerType(props) {
99-
const {
100-
idPrefix,
101-
element,
102-
listener
103-
} = props;
104-
105-
const modeling = useService('modeling');
106-
const translate = useService('translate');
107-
const debounce = useService('debounceInput');
108-
109-
const setValue = (value) => {
110-
modeling.updateModdleProperties(element, listener, {
111-
type: value
112-
});
113-
};
114-
115-
const getValue = () => {
116-
return listener.get('type');
117-
};
118-
119-
return FeelEntryWithVariableContext({
120-
element,
121-
id: idPrefix + '-listenerType',
122-
label: translate('Listener type'),
123-
getValue,
124-
setValue,
125-
debounce,
126-
feel: 'optional'
127-
});
128-
}
129-
130-
function Retries(props) {
131-
const {
132-
idPrefix,
133-
element,
134-
listener
135-
} = props;
136-
137-
const modeling = useService('modeling');
138-
const translate = useService('translate');
139-
const debounce = useService('debounceInput');
140-
141-
const setValue = (value) => {
142-
modeling.updateModdleProperties(element, listener, {
143-
retries: value
144-
});
145-
};
146-
147-
const getValue = () => {
148-
return listener.get('retries');
149-
};
150-
151-
return FeelEntryWithVariableContext({
152-
element,
153-
id: idPrefix + '-retries',
154-
label: translate('Retries'),
155-
getValue,
156-
setValue,
157-
debounce,
158-
feel: 'optional'
159-
});
160-
}
161-
16298
export function getEventTypes(element) {
16399
if (isAny(element, [ 'bpmn:BoundaryEvent', 'bpmn:StartEvent' ])) {
164100
return [ 'end' ];
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import { SelectEntry } from '@bpmn-io/properties-panel';
2+
3+
import {
4+
useService
5+
} from '../../../hooks';
6+
7+
import { ListenerType, Retries } from './shared/Listener';
8+
9+
export const EVENT_TYPE = [ 'complete', 'assignment' ];
10+
11+
export const EVENT_TO_LABEL = {
12+
complete: 'Complete',
13+
assignment: 'Assignment'
14+
};
15+
16+
export function TaskListenerEntries(props) {
17+
18+
const {
19+
idPrefix,
20+
listener
21+
} = props;
22+
23+
return [
24+
{
25+
id: idPrefix + '-eventType',
26+
component: EventType,
27+
idPrefix,
28+
listener,
29+
eventTypes: EVENT_TYPE
30+
},
31+
{
32+
id: idPrefix + '-listenerType',
33+
component: ListenerType,
34+
idPrefix,
35+
listener
36+
},
37+
{
38+
id: idPrefix + '-retries',
39+
component: Retries,
40+
idPrefix,
41+
listener
42+
}
43+
];
44+
}
45+
46+
function EventType(props) {
47+
const {
48+
idPrefix,
49+
element,
50+
listener,
51+
eventTypes
52+
} = props;
53+
54+
const modeling = useService('modeling');
55+
const translate = useService('translate');
56+
57+
const getOptions = () => {
58+
return eventTypes.map(eventType => ({
59+
value: eventType,
60+
label: translate(EVENT_TO_LABEL[eventType])
61+
}));
62+
};
63+
64+
const setValue = (value) => {
65+
modeling.updateModdleProperties(element, listener, {
66+
eventType: value
67+
});
68+
};
69+
70+
const getValue = () => {
71+
return listener.get('eventType');
72+
};
73+
74+
return SelectEntry({
75+
element,
76+
id: idPrefix + '-eventType',
77+
label: translate('Event type'),
78+
getValue,
79+
setValue,
80+
getOptions
81+
});
82+
}
83+
84+

0 commit comments

Comments
 (0)