UNPKG

dmn-js-decision-table

Version:

A decision table view for dmn-js

110 lines (108 loc) 4.59 kB
import { createVNode, createComponentVNode } from "inferno"; import InputSelect from 'dmn-js-shared/lib/components/InputSelect'; import { getBusinessObject, isInput } from 'dmn-js-shared/lib/util/ModelUtil'; export default class ExpressionLanguage { constructor(components, elementRegistry, modeling, expressionLanguages, translate, contextMenu) { this._modeling = modeling; this._translate = translate; this._expressionLanguages = expressionLanguages; components.onGetComponent('context-menu-cell-additional', (context = {}) => { if (context.contextMenuType && context.contextMenuType === 'context-menu') { const { event, id } = context; if (!id) { return; } const element = elementRegistry.get(id); // element might not be in element registry (e.g. cut) if (!element) { return; } if (!this._shouldDisplayContextMenuEntry(element)) { return; } const openMenu = clickEvent => { contextMenu.open({ x: (event || clickEvent).pageX, y: (event || clickEvent).pageY }, { contextMenuType: 'expression-language', id }); }; return createVNode(1, "div", "context-menu-group-entry", this._translate('Change cell expression language'), 0, { "onClick": openMenu }); } }); components.onGetComponent('context-menu', (context = {}) => { if (context.contextMenuType && context.contextMenuType === 'expression-language') { const { id } = context; if (!id) { return; } const element = elementRegistry.get(id); // element might not be in element registry (e.g. cut) if (!element) { return; } const expressionLanguage = this._getElementExpressionLanguage(element); const options = expressionLanguages.getAll(); const className = 'context-menu-group-entry ' + 'context-menu-entry-set-expression-language'; const label = this._translate('Expression language'); return () => createVNode(1, "div", "context-menu-flex", createVNode(1, "div", "context-menu-group", createVNode(1, "div", className, [createVNode(1, "div", null, label, 0), createComponentVNode(2, InputSelect, { "label": label, "className": "expression-language", "onChange": value => this.onChange(element, value), "options": options, "value": expressionLanguage })], 4), 2), 2); } }); components.onGetComponent('context-menu', (context = {}) => { if (context.contextMenuType === 'input-edit') { return () => { const { inputExpression } = context.input; if (!this._shouldDisplayContextMenuEntry(inputExpression)) { return; } const expressionLanguage = this._getElementExpressionLanguage(inputExpression); const options = expressionLanguages.getAll(); const label = this._translate('Expression language'); return createVNode(1, "div", "context-menu-container ref-language", createVNode(1, "div", "dms-form-control", [createVNode(1, "label", "dms-label", label, 0), createComponentVNode(2, InputSelect, { "label": label, "className": "ref-language", "value": expressionLanguage || '', "onChange": value => this.onChange(inputExpression, value), "options": options })], 4), 2); }; } }); } onChange(element, expressionLanguage) { this._modeling.editExpressionLanguage(element, expressionLanguage); } _shouldDisplayContextMenuEntry(element) { const expressionLanguages = this._expressionLanguages.getAll(); if (expressionLanguages.length > 1) { return true; } const expressionLanguage = this._getElementExpressionLanguage(element); return expressionLanguage !== this._getDefaultElementExpressionLanguage(element); } _getElementExpressionLanguage(element) { return getBusinessObject(element).expressionLanguage || this._getDefaultElementExpressionLanguage(element); } _getDefaultElementExpressionLanguage(element) { return this._expressionLanguages.getDefault(isInput(element.col) ? 'inputCell' : 'outputCell').value; } } ExpressionLanguage.$inject = ['components', 'elementRegistry', 'modeling', 'expressionLanguages', 'translate', 'contextMenu']; //# sourceMappingURL=ExpressionLanguage.js.map