Skip to content

Commit 9d04fbb

Browse files
marstammnikku
authored andcommitted
fix(bpmn): correct IdProps validation
Ensure validation is a callback (and properly reacts to dependency updates). closes #1021
1 parent 9061478 commit 9d04fbb

File tree

4 files changed

+51
-7
lines changed

4 files changed

+51
-7
lines changed

src/provider/bpmn/properties/IdProps.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55

66
import { TextFieldEntry, isTextFieldEntryEdited } from '@bpmn-io/properties-panel';
77

8+
import { useCallback } from '@bpmn-io/properties-panel/preact/hooks';
9+
810
import {
911
useService
1012
} from '../../../hooks';
@@ -50,15 +52,15 @@ function Id(props) {
5052
});
5153
};
5254

53-
const getValue = (element) => {
54-
return element.businessObject.id;
55-
};
55+
const getValue = useCallback((element) => {
56+
return getBusinessObject(element).id;
57+
}, [ element ]);
5658

57-
const validate = (value) => {
59+
const validate = useCallback((value) => {
5860
const businessObject = getBusinessObject(element);
5961

6062
return isIdValid(businessObject, value, translate);
61-
};
63+
}, [ element, translate ]);
6264

6365
return TextFieldEntry({
6466
element,

src/provider/bpmn/properties/ProcessProps.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { is } from 'bpmn-js/lib/util/ModelUtil';
22

33
import { TextFieldEntry, isTextFieldEntryEdited } from '@bpmn-io/properties-panel';
44

5+
import { useCallback } from '@bpmn-io/properties-panel/preact/hooks';
6+
57
import {
68
useService
79
} from '../../../hooks';
@@ -104,9 +106,9 @@ function ProcessId(props) {
104106
);
105107
};
106108

107-
const validate = (value) => {
109+
const validate = useCallback((value) => {
108110
return isIdValid(process, value, translate);
109-
};
111+
}, [ process, translate ]);
110112

111113
return TextFieldEntry({
112114
element,

test/spec/provider/bpmn/IdProps.spec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,26 @@ describe('provider/bpmn - IdProps', function() {
113113

114114
describe('validation', function() {
115115

116+
it('should set invalid', inject(async function(elementRegistry, selection) {
117+
118+
// given
119+
const task = elementRegistry.get('Task_1');
120+
121+
await act(() => {
122+
selection.select(task);
123+
});
124+
125+
// when
126+
const idInput = domQuery('input[name=id]', container);
127+
changeInput(idInput, '');
128+
await act(() => {});
129+
130+
// then
131+
const error = domQuery('.bio-properties-panel-error', container);
132+
expect(error).to.exist;
133+
}));
134+
135+
116136
it('should NOT remove id', inject(async function(elementRegistry, selection) {
117137

118138
// given

test/spec/provider/bpmn/ProcessProps.spec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,26 @@ describe('provider/bpmn - ProcessProps', function() {
209209

210210
describe('validation', function() {
211211

212+
it('should set invalid', inject(async function(elementRegistry, selection) {
213+
214+
// given
215+
const participant = elementRegistry.get('Participant_1');
216+
217+
await act(() => {
218+
selection.select(participant);
219+
});
220+
221+
// when
222+
const processIdInput = domQuery('input[name=processId]', container);
223+
changeInput(processIdInput, '');
224+
await act(() => {});
225+
226+
// then
227+
const error = domQuery('.bio-properties-panel-error', container);
228+
expect(error).to.exist;
229+
}));
230+
231+
212232
it('should NOT remove id', inject(async function(elementRegistry, selection) {
213233

214234
// given

0 commit comments

Comments
 (0)