1
+ import {
2
+ getBusinessObject ,
3
+ is
4
+ } from 'bpmn-js/lib/util/ModelUtil' ;
5
+
6
+ import { TextFieldEntry , isTextFieldEntryEdited } from '@bpmn-io/properties-panel' ;
7
+
8
+ import {
9
+ useService
10
+ } from '../../../hooks' ;
11
+
12
+ import { createElement } from '../../../utils/ElementUtil' ;
13
+
14
+ import { getExtensionElementsList } from '../../../utils/ExtensionElementsUtil' ;
15
+
16
+
17
+ export function VersionTagProps ( props ) {
18
+ const {
19
+ element
20
+ } = props ;
21
+
22
+ const businessObject = getBusinessObject ( element ) ;
23
+
24
+ if ( ! is ( element , 'bpmn:Process' ) &&
25
+ ! ( is ( element , 'bpmn:Participant' ) && businessObject . get ( 'processRef' ) ) ) {
26
+ return [ ] ;
27
+ }
28
+
29
+ return [
30
+ {
31
+ id : 'versionTag' ,
32
+ component : VersionTag ,
33
+ isEdited : isTextFieldEntryEdited
34
+ } ,
35
+ ] ;
36
+ }
37
+
38
+ function VersionTag ( props ) {
39
+ const { element } = props ;
40
+
41
+ const bpmnFactory = useService ( 'bpmnFactory' ) ;
42
+ const commandStack = useService ( 'commandStack' ) ;
43
+ const debounce = useService ( 'debounceInput' ) ;
44
+ const translate = useService ( 'translate' ) ;
45
+
46
+ const getValue = ( ) => {
47
+ const versionTag = getVersionTag ( element ) ;
48
+
49
+ if ( versionTag ) {
50
+ return versionTag . get ( 'value' ) ;
51
+ }
52
+ } ;
53
+
54
+ const setValue = ( value ) => {
55
+ let commands = [ ] ;
56
+
57
+ const businessObject = getProcess ( element ) ;
58
+
59
+ let extensionElements = businessObject . get ( 'extensionElements' ) ;
60
+
61
+ // (1) ensure extension elements
62
+ if ( ! extensionElements ) {
63
+ extensionElements = createElement (
64
+ 'bpmn:ExtensionElements' ,
65
+ { values : [ ] } ,
66
+ businessObject ,
67
+ bpmnFactory
68
+ ) ;
69
+
70
+ commands . push ( {
71
+ cmd : 'element.updateModdleProperties' ,
72
+ context : {
73
+ element,
74
+ moddleElement : businessObject ,
75
+ properties : { extensionElements }
76
+ }
77
+ } ) ;
78
+ }
79
+
80
+ // (2) ensure version tag
81
+ let versionTag = getVersionTag ( element ) ;
82
+
83
+ if ( ! versionTag ) {
84
+ versionTag = createElement (
85
+ 'zeebe:VersionTag' ,
86
+ { } ,
87
+ extensionElements ,
88
+ bpmnFactory
89
+ ) ;
90
+
91
+ commands . push ( {
92
+ cmd : 'element.updateModdleProperties' ,
93
+ context : {
94
+ element,
95
+ moddleElement : extensionElements ,
96
+ properties : {
97
+ values : [ ...extensionElements . get ( 'values' ) , versionTag ]
98
+ }
99
+ }
100
+ } ) ;
101
+ }
102
+
103
+ // (3) update version tag value
104
+ commands . push ( {
105
+ cmd : 'element.updateModdleProperties' ,
106
+ context : {
107
+ element,
108
+ moddleElement : versionTag ,
109
+ properties : { value }
110
+ }
111
+ } ) ;
112
+
113
+ commandStack . execute ( 'properties-panel.multi-command-executor' , commands ) ;
114
+ } ;
115
+
116
+ return TextFieldEntry ( {
117
+ element,
118
+ id : 'versionTag' ,
119
+ label : translate ( 'Version tag' ) ,
120
+ getValue,
121
+ setValue,
122
+ debounce
123
+ } ) ;
124
+ }
125
+
126
+
127
+ // helper //////////////////
128
+
129
+ function getProcess ( element ) {
130
+ return is ( element , 'bpmn:Process' ) ?
131
+ getBusinessObject ( element ) :
132
+ getBusinessObject ( element ) . get ( 'processRef' ) ;
133
+ }
134
+
135
+ function getVersionTag ( element ) {
136
+ const businessObject = getProcess ( element ) ;
137
+
138
+ return getExtensionElementsList ( businessObject , 'zeebe:VersionTag' ) [ 0 ] ;
139
+ }
0 commit comments