diff --git a/app/app.js b/app/app.js index f9fbe6a..a96012e 100644 --- a/app/app.js +++ b/app/app.js @@ -20,6 +20,7 @@ let bpmnModeler; try { bpmnModeler = new BpmnModeler({ container: modelerEl, + keyboard: { bindTo: document }, propertiesPanel: { parent: panelEl, }, diff --git a/app/spiffworkflow/DataObject/DataObjectHelpers.js b/app/spiffworkflow/DataObject/DataObjectHelpers.js index 1c62efc..a1278e1 100644 --- a/app/spiffworkflow/DataObject/DataObjectHelpers.js +++ b/app/spiffworkflow/DataObject/DataObjectHelpers.js @@ -58,7 +58,7 @@ export function findDataObjectReferenceShapes(children, dataObjectId) { } export function idToHumanReadableName(id) { - const words = id.match(/[A-Za-z][a-z]*/g) || [id]; + const words = id.match(/[A-Za-z][a-z]*|[0-9]+/g) || [id]; return words.map(capitalize).join(' '); function capitalize(word) { diff --git a/app/spiffworkflow/DataObject/propertiesPanel/DataObjectSelect.js b/app/spiffworkflow/DataObject/propertiesPanel/DataObjectSelect.js index e079e0a..2804355 100644 --- a/app/spiffworkflow/DataObject/propertiesPanel/DataObjectSelect.js +++ b/app/spiffworkflow/DataObject/propertiesPanel/DataObjectSelect.js @@ -31,7 +31,8 @@ export function DataObjectSelect(props) { const setValue = value => { const businessObject = element.businessObject; - for (const flowElem of businessObject.$parent.flowElements) { + const dataObjects = findDataObjects(businessObject.$parent) + for (const flowElem of dataObjects) { if (flowElem.$type === 'bpmn:DataObject' && flowElem.id === value) { commandStack.execute('element.updateModdleProperties', { element, diff --git a/test/spec/DataObjectInPoolsSpec.js b/test/spec/DataObjectInPoolsSpec.js new file mode 100644 index 0000000..e3a9f8c --- /dev/null +++ b/test/spec/DataObjectInPoolsSpec.js @@ -0,0 +1,66 @@ +import { + BpmnPropertiesPanelModule, + BpmnPropertiesProviderModule, +} from 'bpmn-js-properties-panel'; +import TestContainer from 'mocha-test-container-support'; +import { + bootstrapPropertiesPanel, + changeInput, + expectSelected, + findEntry, + findSelect, +} from './helpers'; +import spiffModdleExtension from '../../app/spiffworkflow/moddle/spiffworkflow.json'; +import DataObject from '../../app/spiffworkflow/DataObject'; + +describe('Properties Panel for Data Objects', function () { + const xml = require('./bpmn/data_objects_in_pools.bpmn').default; + let container; + + beforeEach(function () { + container = TestContainer.get(this); + }); + + beforeEach( + bootstrapPropertiesPanel(xml, { + container, + debounceInput: false, + additionalModules: [ + DataObject, + BpmnPropertiesPanelModule, + BpmnPropertiesProviderModule, + ], + moddleExtensions: { + spiffworkflow: spiffModdleExtension, + }, + }) + ); + + it('should allow you to select other data objects within the same participant', async function () { + // IF - a data object reference is selected + const doREF = await expectSelected('pool1Do1_REF'); + expect(doREF).to.exist; + + // THEN - a select Data Object section should appear in the properties panel + const entry = findEntry('selectDataObject', container); + const selector = findSelect(entry); + changeInput(selector, 'pool1Do2'); + // then this data reference object now references that data object. + const { businessObject } = doREF; + expect(businessObject.get('dataObjectRef').id).to.equal('pool1Do2'); + }); + + it('should NOT allow you to select data objects within other participants', async function () { + // IF - a data object reference is selected + const doREF = await expectSelected('pool1Do1_REF'); + expect(doREF).to.exist; + + // THEN - a select Data Object section should appear in the properties panel but pool2Do1 should not be an option + const entry = findEntry('selectDataObject', container); + const selector = findSelect(entry); + expect(selector.length).to.equal(2); + expect(selector[0].value === 'pool1Do2'); + expect(selector[1].value === 'pool1Do1'); + }); + +}); diff --git a/test/spec/DataObjectPropsSpec.js b/test/spec/DataObjectPropsSpec.js index 49b1abb..aa97a50 100644 --- a/test/spec/DataObjectPropsSpec.js +++ b/test/spec/DataObjectPropsSpec.js @@ -6,9 +6,6 @@ import { import { BpmnPropertiesPanelModule, BpmnPropertiesProviderModule } from 'bpmn-js-properties-panel'; import spiffModdleExtension from '../../app/spiffworkflow/moddle/spiffworkflow.json'; import TestContainer from 'mocha-test-container-support'; -import DataObjectPropertiesProvider - from '../../app/spiffworkflow/DataObject/propertiesPanel/DataObjectPropertiesProvider'; -import spiffworkflow from '../../app/spiffworkflow'; import DataObject from '../../app/spiffworkflow/DataObject'; describe('Properties Panel for Data Objects', function() { @@ -78,4 +75,17 @@ describe('Properties Panel for Data Objects', function() { expect(my_data_ref_1.businessObject.name).to.equal('My Nifty New Name'); }); + it('renaming a data object creates a lable without losing the numbers', async function() { + + // IF - a process is selected, and the name of a data object is changed. + let entry = findEntry('ProcessTest-dataObj-2-id', container); + let textInput = findInput('text', entry); + changeInput(textInput, 'MyObject1'); + let my_data_ref_1 = await expectSelected('my_data_ref_1'); + + // THEN - both the data object itself, and the label of any references are updated. + expect(my_data_ref_1.businessObject.dataObjectRef.id).to.equal('MyObject1'); + expect(my_data_ref_1.businessObject.name).to.equal('My Object 1'); + }); + }); diff --git a/test/spec/bpmn/data_objects_in_pools.bpmn b/test/spec/bpmn/data_objects_in_pools.bpmn new file mode 100644 index 0000000..420d116 --- /dev/null +++ b/test/spec/bpmn/data_objects_in_pools.bpmn @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +