From 9d6420de1f6844428fd73a6205c5eaf5d486a82b Mon Sep 17 00:00:00 2001 From: Niklas Kiefer Date: Fri, 2 Sep 2022 14:49:47 +0200 Subject: [PATCH] feat: support overrides provider Related to https://github.com/bpmn-io/bpmn-js-properties-panel/issues/737 --- src/render/BpmnPropertiesPanel.js | 5 +- src/render/BpmnPropertiesPanelRenderer.js | 5 +- test/fixtures/service-task.bpmn | 22 ++-- test/spec/BpmnPropertiesPanelRenderer.spec.js | 107 ++++++++++++++---- 4 files changed, 102 insertions(+), 37 deletions(-) diff --git a/src/render/BpmnPropertiesPanel.js b/src/render/BpmnPropertiesPanel.js index e2f99d489..c6fb0e3e5 100644 --- a/src/render/BpmnPropertiesPanel.js +++ b/src/render/BpmnPropertiesPanel.js @@ -25,6 +25,7 @@ import { PanelPlaceholderProvider } from './PanelPlaceholderProvider'; * @param {Injector} props.injector * @param { (djs.model.Base) => Array } props.getProviders * @param {Object} props.layoutConfig + * @param {Object} props.overridesConfig * @param {Object} props.descriptionConfig */ export default function BpmnPropertiesPanel(props) { @@ -33,7 +34,8 @@ export default function BpmnPropertiesPanel(props) { injector, getProviders, layoutConfig, - descriptionConfig + descriptionConfig, + overridesConfig } = props; const canvas = injector.get('canvas'); @@ -210,6 +212,7 @@ export default function BpmnPropertiesPanel(props) { layoutChanged={ onLayoutChanged } descriptionConfig={ descriptionConfig } descriptionLoaded={ onDescriptionLoaded } + overridesConfig={ overridesConfig } eventBus={ eventBus } /> ; } diff --git a/src/render/BpmnPropertiesPanelRenderer.js b/src/render/BpmnPropertiesPanelRenderer.js index 16fb50976..2a9cfe428 100644 --- a/src/render/BpmnPropertiesPanelRenderer.js +++ b/src/render/BpmnPropertiesPanelRenderer.js @@ -29,13 +29,15 @@ export default class BpmnPropertiesPanelRenderer { const { parent, layout: layoutConfig, - description: descriptionConfig + description: descriptionConfig, + overrides: overridesConfig } = config || {}; this._eventBus = eventBus; this._injector = injector; this._layoutConfig = layoutConfig; this._descriptionConfig = descriptionConfig; + this._overridesConfig = overridesConfig; this._container = domify( '
' @@ -162,6 +164,7 @@ export default class BpmnPropertiesPanelRenderer { getProviders={ this._getProviders.bind(this) } layoutConfig={ this._layoutConfig } descriptionConfig={ this._descriptionConfig } + overridesConfig={ this._overridesConfig } />, this._container ); diff --git a/test/fixtures/service-task.bpmn b/test/fixtures/service-task.bpmn index cac25b403..1c6943d19 100644 --- a/test/fixtures/service-task.bpmn +++ b/test/fixtures/service-task.bpmn @@ -1,9 +1,6 @@ - + - - Flow_10peumi - @@ -20,7 +17,12 @@ Flow_0pxbkit + + Flow_10peumi + + + @@ -31,12 +33,6 @@ - - - - - - @@ -46,6 +42,12 @@ + + + + + + diff --git a/test/spec/BpmnPropertiesPanelRenderer.spec.js b/test/spec/BpmnPropertiesPanelRenderer.spec.js index 12bb329da..402f1d1f5 100644 --- a/test/spec/BpmnPropertiesPanelRenderer.spec.js +++ b/test/spec/BpmnPropertiesPanelRenderer.spec.js @@ -88,7 +88,8 @@ describe('', function() { zeebe: ZeebeModdle }, description = {}, - layout = {} + layout = {}, + overrides = {}, } = options; clearBpmnJS(); @@ -103,7 +104,8 @@ describe('', function() { propertiesPanel: { parent: propertiesContainer, description, - layout + layout, + overrides }, ...options }); @@ -399,29 +401,6 @@ describe('', function() { }); - it('should allow providing custom entries', async function() { - - // given - const diagramXml = require('test/fixtures/service-task.bpmn').default; - - const modules = [ - ZeebeBehaviorsModule, - BpmnPropertiesPanel, - BpmnPropertiesProvider, - ZeebePropertiesProvider, - ExamplePropertiesProvider - ]; - - // when - await createModeler(diagramXml, { - additionalModules: modules - }); - - // then - expect(getGroup(propertiesContainer, 'foo-group')).to.exist; - }); - - it('should ignore implicit root', async function() { // given @@ -910,6 +889,84 @@ describe('', function() { }); + + describe('extensions', function() { + + it('should allow providing custom entries', async function() { + + // given + const diagramXml = require('test/fixtures/service-task.bpmn').default; + + const modules = [ + ZeebeModdleExtension, + BpmnPropertiesPanel, + BpmnPropertiesProvider, + ZeebePropertiesProvider, + ExamplePropertiesProvider + ]; + + // when + await createModeler(diagramXml, { + additionalModules: modules + }); + + // then + expect(getGroup(propertiesContainer, 'foo-group')).to.exist; + }); + + + it('should configure via overrides provider', async function() { + + // given + const diagramXml = require('test/fixtures/service-task.bpmn').default; + + const overrides = { + 'id': { + validate: () => 'Are you sure?' + }, + 'versionTag': { + getValue: () => { + return 'foo'; + } + }, + 'name': { + validate: (value) => { + if (value === 'bar') { + return 'No please!'; + } + } + }, + 'formType': { + getValue: () => 'formRef', + getOptions: () => { + return [ + { value: '', label: '' }, + { value: 'formRef', label: 'Camunda Forms rocks! 🎸' } + ]; + } + } + }; + + const modules = [ + CamundaModdleExtension, + BpmnPropertiesPanel, + BpmnPropertiesProvider, + CamundaPropertiesProvider + ]; + + // when + await createModeler(diagramXml, { + additionalModules: modules, + moddleExtensions: { camunda: CamundaModdle }, + overrides + }); + + // then + expect(domQuery('input[name="versionTag"]', propertiesContainer).value).to.eql('foo'); + }); + + }); + });