1
+ import { getBusinessObject } from 'bpmn-js/lib/util/ModelUtil' ;
2
+
3
+ import { TextFieldEntry } from '@bpmn-io/properties-panel' ;
4
+
5
+ import { createElement } from '../../../../utils/ElementUtil' ;
6
+
7
+ import { useService } from '../../../../hooks' ;
8
+
9
+ import { getExtensionElementsList } from '../../../../utils/ExtensionElementsUtil' ;
10
+
11
+ export default function VersionTag ( props ) {
12
+ const {
13
+ element,
14
+ type
15
+ } = props ;
16
+
17
+ const bpmnFactory = useService ( 'bpmnFactory' ) ,
18
+ commandStack = useService ( 'commandStack' ) ,
19
+ debounce = useService ( 'debounceInput' ) ,
20
+ translate = useService ( 'translate' ) ;
21
+
22
+ const getValue = ( ) => getVersionTag ( element , type ) ;
23
+
24
+ const setValue = value => {
25
+ const commands = [ ] ;
26
+
27
+ const businessObject = getBusinessObject ( element ) ;
28
+
29
+ // (1) ensure extension elements
30
+ let extensionElements = businessObject . get ( 'extensionElements' ) ;
31
+
32
+ if ( ! extensionElements ) {
33
+ extensionElements = createElement (
34
+ 'bpmn:ExtensionElements' ,
35
+ { values : [ ] } ,
36
+ businessObject ,
37
+ bpmnFactory
38
+ ) ;
39
+
40
+ commands . push ( {
41
+ cmd : 'element.updateModdleProperties' ,
42
+ context : {
43
+ element,
44
+ moddleElement : businessObject ,
45
+ properties : { extensionElements }
46
+ }
47
+ } ) ;
48
+ }
49
+
50
+ // (2) ensure extension element
51
+ let extensionElement = getExtensionElementsList ( businessObject , type ) [ 0 ] ;
52
+
53
+ if ( ! extensionElement ) {
54
+ extensionElement = createElement (
55
+ type ,
56
+ { } ,
57
+ extensionElements ,
58
+ bpmnFactory
59
+ ) ;
60
+
61
+ commands . push ( {
62
+ cmd : 'element.updateModdleProperties' ,
63
+ context : {
64
+ element,
65
+ moddleElement : extensionElements ,
66
+ properties : {
67
+ values : [ ...extensionElements . get ( 'values' ) , extensionElement ]
68
+ }
69
+ }
70
+ } ) ;
71
+
72
+ }
73
+
74
+ // (3) Update versionTag attribute
75
+ commands . push ( {
76
+ cmd : 'element.updateModdleProperties' ,
77
+ context : {
78
+ element,
79
+ moddleElement : extensionElement ,
80
+ properties : {
81
+ versionTag : value
82
+ }
83
+ }
84
+ } ) ;
85
+
86
+ // (4) Execute the commands
87
+ commandStack . execute ( 'properties-panel.multi-command-executor' , commands ) ;
88
+ } ;
89
+
90
+ return TextFieldEntry ( {
91
+ element,
92
+ id : 'versionTag' ,
93
+ label : translate ( 'Version tag' ) ,
94
+ getValue,
95
+ setValue,
96
+ debounce
97
+ } ) ;
98
+ }
99
+
100
+ export function getVersionTag ( element , type ) {
101
+ const businessObject = getBusinessObject ( element ) ;
102
+
103
+ const extensionElement = getExtensionElementsList ( businessObject , type ) [ 0 ] ;
104
+
105
+ if ( ! extensionElement ) {
106
+ return '' ;
107
+ }
108
+
109
+ return extensionElement . get ( 'versionTag' ) || '' ;
110
+ }
0 commit comments