diff --git a/app/spiffworkflow/extensions/propertiesPanel/ExtensionsPropertiesProvider.js b/app/spiffworkflow/extensions/propertiesPanel/ExtensionsPropertiesProvider.js index 7737bbe..c58f201 100644 --- a/app/spiffworkflow/extensions/propertiesPanel/ExtensionsPropertiesProvider.js +++ b/app/spiffworkflow/extensions/propertiesPanel/ExtensionsPropertiesProvider.js @@ -21,7 +21,9 @@ export default function ExtensionsPropertiesProvider( this.getGroups = function (element) { return function (groups) { if (is(element, 'bpmn:ScriptTask')) { - groups.push(createScriptGroup(element, translate, moddle)); + groups.push( + createScriptGroup(element, translate, moddle, commandStack) + ); } else if ( isAny(element, ['bpmn:Task', 'bpmn:CallActivity', 'bpmn:SubProcess']) ) { @@ -81,7 +83,8 @@ function createScriptGroup(element, translate, moddle, commandStack) { SCRIPT_TYPE.bpmn, 'Script', 'Code to execute.', - translate + translate, + commandStack ), }; } diff --git a/app/spiffworkflow/extensions/propertiesPanel/ScriptUnitTestArray.js b/app/spiffworkflow/extensions/propertiesPanel/ScriptUnitTestArray.js index 9b97e40..381f0e9 100644 --- a/app/spiffworkflow/extensions/propertiesPanel/ScriptUnitTestArray.js +++ b/app/spiffworkflow/extensions/propertiesPanel/ScriptUnitTestArray.js @@ -1,22 +1,29 @@ import { useService } from 'bpmn-js-properties-panel'; -import { TextAreaEntry } from '@bpmn-io/properties-panel'; -// import { findCorrelationKeys, getRoot } from '../MessageHelpers'; -// import { removeFirstInstanceOfItemFromArrayInPlace } from '../../helpers'; +import { TextFieldEntry, TextAreaEntry } from '@bpmn-io/properties-panel'; +import { removeFirstInstanceOfItemFromArrayInPlace } from '../../helpers'; -const getScriptUnitTestModdleElements = (shapeElement) => { +const getScriptUnitTestsModdleElement = (shapeElement) => { const bizObj = shapeElement.businessObject; if (!bizObj.extensionElements) { return null; } if (!bizObj.extensionElements.values) { - return []; + return null; } - const unitTestsModdleElement = bizObj.extensionElements + return bizObj.extensionElements .get('values') .filter(function getInstanceOfType(e) { return e.$instanceOf('spiffworkflow:unitTests'); })[0]; - return unitTestsModdleElement.unitTests; +}; + +const getScriptUnitTestModdleElements = (shapeElement) => { + const scriptUnitTestsModdleElement = + getScriptUnitTestsModdleElement(shapeElement); + if (scriptUnitTestsModdleElement) { + return scriptUnitTestsModdleElement.unitTests; + } + return []; }; /** @@ -25,10 +32,8 @@ const getScriptUnitTestModdleElements = (shapeElement) => { * @constructor */ export function ScriptUnitTestArray(props) { - const { element, moddle, commandStack } = props; - + const { element, moddle, commandStack, translate } = props; const scriptUnitTestModdleElements = getScriptUnitTestModdleElements(element); - console.log('scriptUnitTestModdleElements', scriptUnitTestModdleElements); const items = scriptUnitTestModdleElements.map( (scriptUnitTestModdleElement, index) => { const id = `scriptUnitTest-${index}`; @@ -40,115 +45,130 @@ export function ScriptUnitTestArray(props) { element, scriptUnitTestModdleElement, commandStack, + translate, + }), + remove: removeFactory({ + element, + scriptUnitTestModdleElement, + commandStack, + moddle, }), - // remove: removeFactory({ - // element, - // correlationKeyElement, - // commandStack, - // moddle, - // }), autoFocusEntry: id, }; } ); - // function add(event) { - // event.stopPropagation(); - // if (element.type === 'bpmn:Collaboration') { - // const newCorrelationKeyElement = moddle.create('bpmn:CorrelationKey'); - // newCorrelationKeyElement.name = - // moddle.ids.nextPrefixed('CorrelationKey_'); - // const currentCorrelationKeyElements = - // element.businessObject.get('correlationKeys'); - // currentCorrelationKeyElements.push(newCorrelationKeyElement); - // commandStack.execute('element.updateProperties', { - // element, - // properties: {}, - // }); - // } - // } + function add(event) { + event.stopPropagation(); + const scriptTaskModdleElement = element.businessObject; + if (!scriptTaskModdleElement.extensionElements) { + scriptTaskModdleElement.extensionElements = + scriptTaskModdleElement.$model.create('bpmn:ExtensionElements'); + } - console.log('items', items); - // return { items, add }; - return { items }; + let scriptUnitTestsModdleElement = getScriptUnitTestsModdleElement(element); + + if (!scriptUnitTestsModdleElement) { + scriptUnitTestsModdleElement = scriptTaskModdleElement.$model.create( + 'spiffworkflow:unitTests' + ); + scriptTaskModdleElement.extensionElements + .get('values') + .push(scriptUnitTestsModdleElement); + } + const scriptUnitTestModdleElement = scriptTaskModdleElement.$model.create( + 'spiffworkflow:unitTest' + ); + const scriptUnitTestInputModdleElement = + scriptTaskModdleElement.$model.create('spiffworkflow:inputJson'); + const scriptUnitTestOutputModdleElement = + scriptTaskModdleElement.$model.create('spiffworkflow:expectedOutputJson'); + scriptUnitTestModdleElement.id = moddle.ids.nextPrefixed('ScriptUnitTest_'); + scriptUnitTestInputModdleElement.value = '{}'; + scriptUnitTestOutputModdleElement.value = '{}'; + scriptUnitTestModdleElement.inputJson = scriptUnitTestInputModdleElement; + scriptUnitTestModdleElement.expectedOutputJson = + scriptUnitTestOutputModdleElement; + scriptUnitTestsModdleElement.unitTests.push(scriptUnitTestModdleElement); + commandStack.execute('element.updateProperties', { + element, + properties: {}, + }); + } + + return { items, add }; } -// function removeFactory(props) { -// const { element, correlationKeyElement, moddle, commandStack } = props; -// -// return function (event) { -// event.stopPropagation(); -// const currentCorrelationKeyElements = -// element.businessObject.get('correlationKeys'); -// removeFirstInstanceOfItemFromArrayInPlace( -// currentCorrelationKeyElements, -// correlationKeyElement -// ); -// commandStack.execute('element.updateProperties', { -// element, -// properties: { -// correlationKey: currentCorrelationKeyElements, -// }, -// }); -// }; -// } -// -// <--- The correlationGroup -// lover_name -// lover_instrument -// -// +function removeFactory(props) { + const { element, scriptUnitTestModdleElement, moddle, commandStack } = props; + + return function (event) { + event.stopPropagation(); + const scriptUnitTestsModdleElement = + getScriptUnitTestsModdleElement(element); + removeFirstInstanceOfItemFromArrayInPlace( + scriptUnitTestsModdleElement.unitTests, + scriptUnitTestModdleElement + ); + commandStack.execute('element.updateProperties', { + element, + properties: {}, + }); + }; +} + +// +// +// {} +// {} +// +// function scriptUnitTestGroup(props) { - const { idPrefix, element, scriptUnitTestModdleElement, commandStack } = - props; - // const entries = [ - // { - // id: `${idPrefix}-key`, - // component: CorrelationKeyTextField, - // scriptUnitTestModdleElement, - // commandStack, - // }, - // ]; - // (scriptUnitTestModdleElement.correlationPropertyRef || []).forEach( - // (correlationProperty, index) => { - // entries.push({ - // id: `${idPrefix}-${index}-text`, - // component: CorrelationPropertyText, - // correlationProperty, - // }); - // } - // ); - // return entries; + const { + idPrefix, + element, + scriptUnitTestModdleElement, + commandStack, + translate, + } = props; return [ + { + id: `${idPrefix}-id`, + label: translate('ID:'), + element, + component: ScriptUnitTestIdTextField, + scriptUnitTestModdleElement, + commandStack, + }, { id: `${idPrefix}-input`, + label: translate('Input Json:'), element, component: ScriptUnitTestJsonTextArea, scriptUnitTestJsonModdleElement: scriptUnitTestModdleElement.inputJson, commandStack, }, + { + id: `${idPrefix}-expected-output`, + label: translate('Expected Output Json:'), + element, + component: ScriptUnitTestJsonTextArea, + scriptUnitTestJsonModdleElement: + scriptUnitTestModdleElement.expectedOutputJson, + commandStack, + }, ]; } function ScriptUnitTestJsonTextArea(props) { - const { id, element, scriptUnitTestJsonModdleElement, commandStack } = props; + const { id, element, scriptUnitTestJsonModdleElement, label } = props; const debounce = useService('debounceInput'); const setValue = (value) => { - commandStack.execute('element.updateModdleProperties', { - element, - moddleElement: scriptUnitTestJsonModdleElement, - properties: { - name: value, - }, - }); + scriptUnitTestJsonModdleElement.value = value; }; const getValue = () => { - console.log( - 'scriptUnitTestJsonModdleElement', - scriptUnitTestJsonModdleElement - ); return scriptUnitTestJsonModdleElement.value; }; @@ -158,23 +178,35 @@ function ScriptUnitTestJsonTextArea(props) { getValue, setValue, debounce, + label, }); } -// function CorrelationPropertyText(props) { -// const { id, parameter, correlationProperty } = props; -// const debounce = useService('debounceInput'); -// -// const getValue = () => { -// return correlationProperty.id; -// }; -// -// return SimpleEntry({ -// element: parameter, -// id: `${id}-textField`, -// label: correlationProperty.id, -// getValue, -// disabled: true, -// debounce, -// }); -// } +function ScriptUnitTestIdTextField(props) { + const { id, element, scriptUnitTestModdleElement, label } = props; + + const debounce = useService('debounceInput'); + const commandStack = useService('commandStack'); + + const setValue = (value) => { + scriptUnitTestModdleElement.id = value; + commandStack.execute('element.updateModdleProperties', { + element, + moddleElement: scriptUnitTestModdleElement, + properties: {}, + }); + }; + + const getValue = () => { + return scriptUnitTestModdleElement.id; + }; + + return TextFieldEntry({ + element, + id: `${id}-textArea`, + getValue, + setValue, + debounce, + label, + }); +} diff --git a/app/spiffworkflow/extensions/propertiesPanel/SpiffScriptGroup.js b/app/spiffworkflow/extensions/propertiesPanel/SpiffScriptGroup.js index 8cd78e6..80f2a90 100644 --- a/app/spiffworkflow/extensions/propertiesPanel/SpiffScriptGroup.js +++ b/app/spiffworkflow/extensions/propertiesPanel/SpiffScriptGroup.js @@ -123,7 +123,8 @@ export default function getEntries( scriptType, label, description, - translate + translate, + commandStack ) { return [ { @@ -152,6 +153,7 @@ export default function getEntries( element, moddle, translate, + commandStack, }), }, ];