Hi! I am trying to extend the properties panel following your properties-panel-extension guide. I’m able to create a new group in the panel except when I try to add an entry I get:
Unhandled Promise Rejection: TypeError: Attempted to assign to readonly property.
I do not get this error when I comment out the component in my entry so I belive it might be an issue with creating the Entry from ‘@bpmn-io/properties-panel’.
Here my CustomPropertiesProvider:
import metadataProps from './props/MetadataProps';
import { is } from 'bpmn-js/lib/util/ModelUtil';
const LOW_PRIORITY = 500;
/**
* A provider with a `#getGroups(element)` method
* that exposes groups for a diagram element.
*
* @param {PropertiesPanel} propertiesPanel
* @param {Function} translate
*/
export default function CustomPropertiesProvider(propertiesPanel, translate) {
/**
* Return the groups provided for the given element.
*
* @param {DiagramElement} element
*
* @return {(Object[]) => (Object[])} groups middleware
*/
this.getGroups = function(element) {
/**
* We return a middleware that modifies
* the existing groups.
*
* @param {Object[]} groups
*
* @return {Object[]} modified groups
*/
return function(groups) {
// Add the "Metadata" group
if(is(element, 'bpmn:Task')) {
groups.push(createMetadataGroup(element, translate));
}
return groups;
}
};
// Register custom properties provider.
// Use a lower priority to ensure it is loaded after
// the basic BPMN properties.
propertiesPanel.registerProvider(LOW_PRIORITY, this);
}
CustomPropertiesProvider.$inject = [ 'propertiesPanel', 'translate' ];
// Create the custom Metadata group
function createMetadataGroup(element, translate) {
// create a group called "Metadata".
const metadataGroup = {
id: 'metadata',
label: translate('Metadata'),
entries: metadataProps(element)
};
return metadataGroup
}
And here the MetadataProps I use:
import { ToggleSwitchEntry, isToggleSwitchEntryEdited } from '@bpmn-io/properties-panel';
import { useService } from 'bpmn-js-properties-panel'
export default function(element) {
return [
{
id: 'optionalMetadata',
component: <OptionalMetadata id='optionalMetadata' element={ element } />,
isEdited: isToggleSwitchEntryEdited
}
];
}
function OptionalMetadata(props) {
const { element, id } = props;
const modeling = useService('modeling');
const translate = useService('translate');
const getValue = () => {
return element.businessObject.optional || '';
}
const setValue = value => {
return modeling.updateProperties(element, {
optional: value
});
}
return <ToggleSwitchEntry
id={ id }
element={ element }
description={ translate('Mark task as optional') }
label={ translate('Optional') }
getValue={ getValue }
setValue={ setValue }
/>
}
Any ideas what might be happening here? Let me know if you need any info
Best regards, Valentin