import {
PROCESS_DEFAULT_ID,
COMPOSITION_ERROR_COLOR,
- COMPOSITION_VALID_COLOR
+ COMPOSITION_VALID_COLOR,
+ CAMUNDA_PANEL_INPUTS_NAMES
} from './compositionConstants';
+import readOnly from './readOnly';
+function setStatusToElement(type, status, parent) {
+ let elements = parent.getElementsByTagName(type);
+ for (let item of elements) {
+ if (item.name !== 'selectedExtensionElement') {
+ item.readOnly = status;
+ item.disabled = status;
+ }
+ }
+}
+
+function disablePanelInputs(status) {
+ let panel = document.getElementById('js-properties-panel');
+
+ if (panel) {
+ setStatusToElement('input', status, panel);
+ setStatusToElement('button', status, panel);
+ setStatusToElement('select', status, panel);
+
+ CAMUNDA_PANEL_INPUTS_NAMES.map(name => {
+ const div = document.getElementById(name);
+ if (div) {
+ div.setAttribute('contenteditable', !status);
+ }
+ });
+ }
+}
class CompositionView extends Component {
static propTypes = {
compositionUpdate: PropTypes.func,
inputOutput: PropTypes.object,
activities: PropTypes.array,
validationUpdate: PropTypes.func,
- errors: PropTypes.array
+ errors: PropTypes.array,
+ isReadOnly: PropTypes.bool
};
constructor() {
this.state = {
diagram: false
};
+ this.versionChanged = false;
}
componentDidUpdate(prevProps) {
- const { errors } = this.props;
+ const { errors, isReadOnly, versionName, composition } = this.props;
if (!isEqual(prevProps.errors, errors)) {
errors.map(item => {
this.modeling.setColor([item.element], {
});
});
}
+ if (prevProps.isReadOnly !== isReadOnly) {
+ this.modeler.get('readOnly').readOnly(isReadOnly);
+ disablePanelInputs(isReadOnly);
+ }
+
+ if (prevProps.versionName !== versionName) {
+ this.versionChanged = true;
+ }
+ if (
+ !isEqual(prevProps.composition, composition) &&
+ this.versionChanged
+ ) {
+ this.setDiagramToBPMN(composition);
+ this.versionChanged = false;
+ }
}
componentDidMount() {
const {
composition,
activities,
inputOutput,
- validationUpdate
+ validationUpdate,
+ isReadOnly
} = this.props;
+ const readOnlyModule = {
+ __init__: ['readOnly'],
+ readOnly: ['type', readOnly]
+ };
this.modeler = new CustomModeler({
propertiesPanel: {
parent: '#js-properties-panel'
},
additionalModules: [
propertiesPanelModule,
- propertiesProviderModule
+ propertiesProviderModule,
+ readOnlyModule
],
moddleExtensions: {
camunda: camundaModuleDescriptor
this.modeler.attachTo('#' + this.generatedId);
this.setDiagramToBPMN(composition ? composition : newDiagramXML);
this.modeler.on('element.out', () => this.exportDiagramToStore());
+ this.modeler.on('element.click', this.handleCompositionStatus);
this.bpmnContainer.current.click();
this.modeling = this.modeler.get('modeling');
+ this.modeler.get('readOnly').readOnly(isReadOnly);
}
-
+ handleCompositionStatus = () => {
+ disablePanelInputs(this.props.isReadOnly);
+ };
getActivityInputsOutputs = selectedValue => {
const selectedActivity = this.props.activities.find(
el => el.name === selectedValue
this.props.inputOutput,
this.modeler.get('moddle')
);
+ disablePanelInputs(this.props.isReadOnly);
});
};
setDefaultIdAndName = businessObject => {
id="js-properties-panel"
/>
<CompositionButtons
+ isReadOnly={this.props.isReadOnly}
onClean={this.loadNewDiagram}
onDownload={this.exportDiagram}
onUpload={this.uploadDiagram}