Update DataStoreRefLabel on selecting data store (#67)
This commit is contained in:
parent
5e79c02976
commit
160f6dfecd
|
@ -182,8 +182,8 @@ bpmnModeler.on('spiff.dmn_files.requested', (event) => {
|
||||||
bpmnModeler.on('spiff.data_stores.requested', (event) => {
|
bpmnModeler.on('spiff.data_stores.requested', (event) => {
|
||||||
event.eventBus.fire('spiff.data_stores.returned', {
|
event.eventBus.fire('spiff.data_stores.returned', {
|
||||||
options: [
|
options: [
|
||||||
{ id: 'countriesID', type: 'json', name: 'countries', clz: 'JSONDataStore' },
|
{ id: 'countriesID', type: 'json', name: 'Countries', clz: 'JSONDataStore' },
|
||||||
{ id: 'foodsID', type: 'kkv', name: 'foods', clz: 'JSONDataStore' }
|
{ id: 'foodsID', type: 'kkv', name: 'Foods', clz: 'JSONDataStore' }
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -48,12 +48,22 @@ function createCustomDataStoreGroup(
|
||||||
commandStack,
|
commandStack,
|
||||||
bpmnFactory
|
bpmnFactory
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
const { businessObject } = element;
|
||||||
|
|
||||||
const group = {
|
const group = {
|
||||||
label: translate('Custom Data Store Properties'),
|
label: translate('Custom Data Store Properties'),
|
||||||
id: 'custom-datastore-properties',
|
id: 'custom-datastore-properties',
|
||||||
entries: [],
|
entries: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let description = translate('Select a datasource from the list');
|
||||||
|
if(businessObject.dataStoreRef){
|
||||||
|
const dataStoreId = businessObject.dataStoreRef.id;
|
||||||
|
const type = businessObject.get('type');
|
||||||
|
description = `The selected data store is of type: ${type}`;
|
||||||
|
}
|
||||||
|
|
||||||
// other custom properties as needed
|
// other custom properties as needed
|
||||||
group.entries.push({
|
group.entries.push({
|
||||||
id: 'selectDataStore',
|
id: 'selectDataStore',
|
||||||
|
@ -65,7 +75,7 @@ function createCustomDataStoreGroup(
|
||||||
translate,
|
translate,
|
||||||
name: 'dataStoreRef',
|
name: 'dataStoreRef',
|
||||||
label: translate('Select DataSource'),
|
label: translate('Select DataSource'),
|
||||||
description: translate('Select a datasource from the list'),
|
description,
|
||||||
modeling,
|
modeling,
|
||||||
bpmnFactory,
|
bpmnFactory,
|
||||||
});
|
});
|
||||||
|
|
|
@ -23,29 +23,45 @@ export function DataStoreSelect(props) {
|
||||||
const getValue = () => {
|
const getValue = () => {
|
||||||
const dtRef = element.businessObject.dataStoreRef;
|
const dtRef = element.businessObject.dataStoreRef;
|
||||||
return dtRef
|
return dtRef
|
||||||
? `${dtRef.id}___${dtRef.name}`
|
? dtRef.id
|
||||||
: '';
|
: '';
|
||||||
};
|
};
|
||||||
|
|
||||||
const setValue = (value) => {
|
const setValue = (value) => {
|
||||||
|
|
||||||
const splitValue = value.split('___');
|
const { businessObject } = element;
|
||||||
const valId = splitValue[0]
|
|
||||||
const valClz = splitValue[1]
|
|
||||||
|
|
||||||
if (!valId || valId == '') {
|
const process = businessObject.$parent;
|
||||||
modeling.updateProperties(element, {
|
|
||||||
dataStoreRef: null,
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add DataStore to the BPMN model
|
|
||||||
const process = element.businessObject.$parent;
|
|
||||||
const definitions = process.$parent;
|
const definitions = process.$parent;
|
||||||
if (!definitions.get('rootElements')) {
|
if (!definitions.get('rootElements')) {
|
||||||
definitions.set('rootElements', []);
|
definitions.set('rootElements', []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const valId = value
|
||||||
|
|
||||||
|
if (!valId || valId == '') {
|
||||||
|
const oldDataStoreId = businessObject.dataStoreRef.id;
|
||||||
|
modeling.updateProperties(element, {
|
||||||
|
name: '',
|
||||||
|
dataStoreRef: null,
|
||||||
|
type: ''
|
||||||
|
});
|
||||||
|
// If previous datastore is not used, delete it
|
||||||
|
if (!isDataStoreReferenced(process, oldDataStoreId)) {
|
||||||
|
const rootElements = definitions.get('rootElements');
|
||||||
|
const oldMessageIndex = rootElements.findIndex(element => element.$type === 'bpmn:DataStore' && element.id === oldDataStoreId);
|
||||||
|
if (oldMessageIndex !== -1) {
|
||||||
|
rootElements.splice(oldMessageIndex, 1);
|
||||||
|
definitions.rootElements = rootElements;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const valClz = GetDataStoreAttrById('clz', value);
|
||||||
|
const valName = GetDataStoreAttrById('name', value);
|
||||||
|
const valType = GetDataStoreAttrById('type', value);
|
||||||
|
|
||||||
// Persist Current DataStore Ref
|
// Persist Current DataStore Ref
|
||||||
const currentDataStoreRef = element.businessObject.dataStoreRef;
|
const currentDataStoreRef = element.businessObject.dataStoreRef;
|
||||||
|
@ -65,8 +81,9 @@ export function DataStoreSelect(props) {
|
||||||
}
|
}
|
||||||
|
|
||||||
modeling.updateProperties(element, {
|
modeling.updateProperties(element, {
|
||||||
name: `Data Store (${valId})`,
|
name: valName,
|
||||||
dataStoreRef: dataStore,
|
dataStoreRef: dataStore,
|
||||||
|
type: valType
|
||||||
});
|
});
|
||||||
|
|
||||||
// Remove the old DataStore if it's no longer referenced
|
// Remove the old DataStore if it's no longer referenced
|
||||||
|
@ -96,7 +113,7 @@ export function DataStoreSelect(props) {
|
||||||
spiffExtensionOptions[optionType].forEach((opt) => {
|
spiffExtensionOptions[optionType].forEach((opt) => {
|
||||||
optionList.push({
|
optionList.push({
|
||||||
label: opt.name,
|
label: opt.name,
|
||||||
value: `${opt.id}___${opt.clz}`,
|
value: opt.id,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -120,4 +137,11 @@ function requestOptions(eventBus, element, commandStack, optionType) {
|
||||||
spiffExtensionOptions[optionType] = event.options;
|
spiffExtensionOptions[optionType] = event.options;
|
||||||
});
|
});
|
||||||
eventBus.fire(`spiff.${optionType}.requested`, { eventBus });
|
eventBus.fire(`spiff.${optionType}.requested`, { eventBus });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function GetDataStoreAttrById(prop, id) {
|
||||||
|
const arr = spiffExtensionOptions['data_stores'];
|
||||||
|
const item = arr.find(obj => obj.id === id);
|
||||||
|
return item ? item[prop] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,8 +83,8 @@ describe('Data Source Reference Test cases', function () {
|
||||||
// Verification if the dataStoreRef attribute is updated
|
// Verification if the dataStoreRef attribute is updated
|
||||||
let selector = findSelect(entry);
|
let selector = findSelect(entry);
|
||||||
expect(selector.length).to.equal(3);
|
expect(selector.length).to.equal(3);
|
||||||
expect(selector[1].value === 'foodsID___JSONDataStore');
|
expect(selector[1].value === 'foodsID');
|
||||||
expect(selector[2].value === 'countriesID___JSONDataStore');
|
expect(selector[2].value === 'countriesID');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should update dataStoreRef after a select event && should add new DataStore in the level of process definition - DataStoreReference element', async function () {
|
it('should update dataStoreRef after a select event && should add new DataStore in the level of process definition - DataStoreReference element', async function () {
|
||||||
|
@ -104,7 +104,7 @@ describe('Data Source Reference Test cases', function () {
|
||||||
|
|
||||||
// Verification if the dataStoreRef attribute is updated
|
// Verification if the dataStoreRef attribute is updated
|
||||||
let selector = findSelect(entry);
|
let selector = findSelect(entry);
|
||||||
changeInput(selector, 'foodsID___JSONDataStore');
|
changeInput(selector, 'foodsID');
|
||||||
const nwbusinessObject = getBusinessObject(shapeElement);
|
const nwbusinessObject = getBusinessObject(shapeElement);
|
||||||
expect(nwbusinessObject.get('dataStoreRef').id).to.equal('foodsID');
|
expect(nwbusinessObject.get('dataStoreRef').id).to.equal('foodsID');
|
||||||
|
|
||||||
|
@ -133,11 +133,11 @@ describe('Data Source Reference Test cases', function () {
|
||||||
|
|
||||||
// Verification if the dataStoreRef attribute is updated
|
// Verification if the dataStoreRef attribute is updated
|
||||||
let selector = findSelect(entry);
|
let selector = findSelect(entry);
|
||||||
changeInput(selector, 'foodsID___JSONDataStore');
|
changeInput(selector, 'foodsID');
|
||||||
let nwbusinessObject = getBusinessObject(shapeElement);
|
let nwbusinessObject = getBusinessObject(shapeElement);
|
||||||
expect(nwbusinessObject.get('dataStoreRef').id).to.equal('foodsID');
|
expect(nwbusinessObject.get('dataStoreRef').id).to.equal('foodsID');
|
||||||
// Then choose new dataStore
|
// Then choose new dataStore
|
||||||
changeInput(selector, 'countriesID___JSONDataStore');
|
changeInput(selector, 'countriesID');
|
||||||
nwbusinessObject = getBusinessObject(shapeElement);
|
nwbusinessObject = getBusinessObject(shapeElement);
|
||||||
expect(nwbusinessObject.get('dataStoreRef').id).to.equal('countriesID');
|
expect(nwbusinessObject.get('dataStoreRef').id).to.equal('countriesID');
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue