You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kie.apache.org by ti...@apache.org on 2024/05/15 23:10:02 UTC
(incubator-kie-tools) branch main updated: kie-issue#1149: DMN Editor produces invalid typeRef attributes (#2316)
This is an automated email from the ASF dual-hosted git repository.
tiagobento pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git
The following commit(s) were added to refs/heads/main by this push:
new 1e82db81204 kie-issue#1149: DMN Editor produces invalid typeRef attributes (#2316)
1e82db81204 is described below
commit 1e82db81204dd09fc71ca4ea78a1db61d51f0a37
Author: Daniel José dos Santos <da...@users.noreply.github.com>
AuthorDate: Wed May 15 20:09:58 2024 -0300
kie-issue#1149: DMN Editor produces invalid typeRef attributes (#2316)
---
.../src/BoxedExpressionEditor.tsx | 4 +-
.../src/api/BeeGwtService.ts | 2 +-
.../src/expressionVariable/DataTypeSelector.tsx | 14 +++---
.../expressionVariable/ExpressionVariableCell.tsx | 4 +-
.../expressionVariable/ExpressionVariableMenu.tsx | 9 ++--
.../ContextExpression/ContextExpression.tsx | 12 ++---
.../DecisionTableExpression.tsx | 5 +-
.../ExpressionContainer.tsx | 8 +---
.../ExpressionDefinitionLogicTypeSelector.tsx | 8 ++--
.../ExpressionDefinitionRoot.tsx | 2 +-
.../FunctionExpression/FeelFunctionExpression.tsx | 2 +-
.../FunctionExpression/FunctionExpression.tsx | 20 ++++----
.../FunctionExpression/JavaFunctionExpression.tsx | 4 +-
.../FunctionExpression/ParametersPopover.tsx | 12 ++---
.../FunctionExpression/PmmlFunctionExpression.tsx | 3 +-
.../InvocationExpression/InvocationExpression.tsx | 15 +++---
.../IteratorExpressionComponent.tsx | 3 +-
.../expressions/ListExpression/ListExpression.tsx | 5 +-
.../LiteralExpression/LiteralExpression.tsx | 14 +++---
.../RelationExpression/RelationExpression.tsx | 7 ++-
.../src/table/BeeTable/BeeTableHeader.tsx | 9 ++--
.../stories/boxedExpressionStoriesWrapper.tsx | 6 +--
.../boxedExpressions/Context/Context.stories.tsx | 4 +-
.../DecisionTable/DecisionTable.stories.tsx | 4 +-
.../dev/getDefaultBoxedExpressionForDevWebapp.ts | 9 ++--
.../stories/features/Resizing/Resizing.stories.tsx | 4 +-
.../stories/getDefaultBoxedExpressionForStories.ts | 20 +++-----
.../src/boxedExpressions/BoxedExpressionScreen.tsx | 10 ++--
.../boxedExpressions/getDefaultBoxedExpression.tsx | 56 ++++++++++------------
packages/dmn-editor/src/dataTypes/Constraints.tsx | 13 ++---
packages/dmn-editor/src/dataTypes/DataTypeName.tsx | 3 +-
.../dmn-editor/src/dataTypes/DataTypePanel.tsx | 2 +-
packages/dmn-editor/src/dataTypes/DataTypes.tsx | 6 +--
.../src/dataTypes/ItemComponentsTable.tsx | 15 +++---
packages/dmn-editor/src/dataTypes/TypeRefLabel.tsx | 2 +-
.../dmn-editor/src/dataTypes/TypeRefSelector.tsx | 10 ++--
.../dmn-editor/src/dataTypes/useResolvedTypeRef.ts | 2 +-
packages/dmn-editor/src/diagram/Diagram.tsx | 2 +-
.../src/diagram/nodes/DataTypeNodePanel.tsx | 5 +-
packages/dmn-editor/src/diagram/nodes/Nodes.tsx | 2 +-
.../dmn-editor/src/mutations/addConnectedNode.ts | 2 +-
.../dmn-editor/src/mutations/addStandaloneNode.ts | 2 +-
.../dmn-editor/src/mutations/updateExpression.ts | 2 +-
.../DecisionTableInputHeaderCell.tsx | 2 +-
.../DecisionTableOutputHeaderCell.tsx | 4 +-
.../Fields.tsx | 2 +-
.../FunctionDefinitionParametersCell.tsx | 2 +-
.../InformationItemCell.tsx | 2 +-
.../tests/e2e/drgElements/addBkm.spec.ts | 1 -
.../tests/e2e/drgElements/addDecision.spec.ts | 3 --
.../e2e/drgElements/addDecisionService.spec.ts | 1 -
.../tests/e2e/drgElements/addInputData.spec.ts | 1 -
packages/stunner-editors-dmn-loader/src/types.ts | 2 +-
53 files changed, 158 insertions(+), 205 deletions(-)
diff --git a/packages/boxed-expression-component/src/BoxedExpressionEditor.tsx b/packages/boxed-expression-component/src/BoxedExpressionEditor.tsx
index 30e4a095b4a..29c524e421c 100644
--- a/packages/boxed-expression-component/src/BoxedExpressionEditor.tsx
+++ b/packages/boxed-expression-component/src/BoxedExpressionEditor.tsx
@@ -20,7 +20,7 @@
import "@patternfly/react-styles/css/components/Drawer/drawer.css";
import { I18nDictionariesProvider } from "@kie-tools-core/i18n/dist/react-components";
import * as React from "react";
-import { BeeGwtService, DmnDataType, BoxedExpression, PmmlDocument } from "./api";
+import { BeeGwtService, BoxedExpression, DmnDataType, PmmlDocument } from "./api";
import {
boxedExpressionEditorDictionaries,
BoxedExpressionEditorI18nContext,
@@ -42,7 +42,7 @@ export interface BoxedExpressionEditorProps {
/** Name of the Decision or BKM containing `expression` */
expressionHolderName: string;
/** TypeRef of the Decision or BKM containing `expression` */
- expressionHolderTypeRef: string;
+ expressionHolderTypeRef: string | undefined;
/** The boxed expression itself */
expression: BoxedExpression | undefined;
/** Called every time something changes on the expression */
diff --git a/packages/boxed-expression-component/src/api/BeeGwtService.ts b/packages/boxed-expression-component/src/api/BeeGwtService.ts
index 4e85810e2c1..8a6b6b18762 100644
--- a/packages/boxed-expression-component/src/api/BeeGwtService.ts
+++ b/packages/boxed-expression-component/src/api/BeeGwtService.ts
@@ -25,7 +25,7 @@ import { BoxedExpression } from "./BoxedExpression";
export interface BeeGwtService {
getDefaultExpressionDefinition(
logicType: BoxedExpression["__$$element"] | undefined,
- typeRef: string,
+ typeRef: string | undefined,
isRoot?: boolean
): { expression: BoxedExpression; widthsById: Map<string, number[]> };
diff --git a/packages/boxed-expression-component/src/expressionVariable/DataTypeSelector.tsx b/packages/boxed-expression-component/src/expressionVariable/DataTypeSelector.tsx
index 95679d7e630..5f32425b3a2 100644
--- a/packages/boxed-expression-component/src/expressionVariable/DataTypeSelector.tsx
+++ b/packages/boxed-expression-component/src/expressionVariable/DataTypeSelector.tsx
@@ -19,18 +19,18 @@
import { Select, SelectGroup, SelectOption, SelectVariant } from "@patternfly/react-core/dist/js/components/Select";
import * as React from "react";
-import { useCallback, useState, useRef, useMemo } from "react";
+import { useCallback, useMemo, useRef, useState } from "react";
import { useBoxedExpressionEditorI18n } from "../i18n";
import * as _ from "lodash";
-import { DmnDataType } from "../api";
+import { DmnBuiltInDataType, DmnDataType } from "../api";
import { useBoxedExpressionEditor } from "../BoxedExpressionEditorContext";
import { Divider } from "@patternfly/react-core/dist/js/components/Divider";
export interface DataTypeSelectorProps {
/** The pre-selected data type */
- value: string;
+ value: string | undefined;
/** On DataType selection callback */
- onChange: (dataType: string) => void;
+ onChange: (dataType: string | undefined) => void;
/** By default the menu will be appended inline, but it is possible to append on the parent or on other elements */
/** Callback for toggle select behavior */
onToggle?: (isOpen: boolean) => void;
@@ -64,7 +64,7 @@ export const DataTypeSelector: React.FunctionComponent<DataTypeSelectorProps> =
/* this setTimeout keeps the context menu open after type selection changes. Without this Popover component thinks there has been a click outside the context menu, after DataTypeSelector has changed. This because the Select component has been removed from the html*/
setTimeout(() => setOpen(false), 0);
- onChange(selection);
+ onChange(selection === DmnBuiltInDataType.Undefined ? undefined : selection);
// Because Select leave the focus to the detached btn, give back the focus to the selectWrapperRef
(selectContainerRef.current?.querySelector("button") as HTMLInputElement)?.focus();
@@ -108,7 +108,7 @@ export const DataTypeSelector: React.FunctionComponent<DataTypeSelectorProps> =
return buildSelectGroups().reduce((acc, group) => {
const filteredGroup = React.cloneElement(group, {
children: group.props?.children?.filter((item: React.ReactElement) =>
- item.props.value.toLowerCase().includes(textInput.toLowerCase())
+ (item.props.value ?? DmnBuiltInDataType.Undefined).toLowerCase().includes(textInput.toLowerCase())
),
});
@@ -157,7 +157,7 @@ export const DataTypeSelector: React.FunctionComponent<DataTypeSelectorProps> =
onSelect={onSelect}
onFilter={onFilter}
isOpen={isOpen}
- selections={value}
+ selections={value ?? DmnBuiltInDataType.Undefined}
isGrouped={true}
hasInlineFilter={true}
inlineFilterPlaceholderText={i18n.choose}
diff --git a/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableCell.tsx b/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableCell.tsx
index 735c0c32c02..aeaab2fe45c 100644
--- a/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableCell.tsx
+++ b/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableCell.tsx
@@ -49,7 +49,7 @@ export const ExpressionVariableCell: React.FunctionComponent<
const { expression, variable, index } = data[rowIndex];
const onVariableUpdated = useCallback<OnExpressionVariableUpdated>(
- ({ name = DEFAULT_EXPRESSION_VARIABLE_NAME, typeRef = DmnBuiltInDataType.Undefined }) => {
+ ({ name = DEFAULT_EXPRESSION_VARIABLE_NAME, typeRef = undefined }) => {
onExpressionWithVariableUpdated(index, {
// `expression` and `variable` must always have the same `typeRef` and `name/label`, as those are dictated by `variable`.
expression: expression
@@ -99,7 +99,7 @@ export const ExpressionVariableCell: React.FunctionComponent<
rowIndex,
columnIndex,
undefined,
- useCallback(() => `${variable["@_name"]} (${variable["@_typeRef"] ?? DmnBuiltInDataType.Undefined}})`, [variable])
+ useCallback(() => `${variable["@_name"]} (${variable["@_typeRef"]}})`, [variable])
);
const { beeGwtService } = useBoxedExpressionEditor();
diff --git a/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableMenu.tsx b/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableMenu.tsx
index c257fdea2c5..03e50bfe219 100644
--- a/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableMenu.tsx
+++ b/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableMenu.tsx
@@ -18,10 +18,9 @@
*/
import * as React from "react";
-import { useCallback, useEffect, useState, useRef } from "react";
+import { useCallback, useEffect, useRef, useState } from "react";
import { PopoverMenu, PopoverMenuRef } from "../contextMenu/PopoverMenu";
import { useBoxedExpressionEditorI18n } from "../i18n";
-import { DmnBuiltInDataType, BoxedExpression } from "../api";
import { useBoxedExpressionEditor } from "../BoxedExpressionEditorContext";
import { DataTypeSelector } from "./DataTypeSelector";
import { CogIcon } from "@patternfly/react-icons/dist/js/icons/cog-icon";
@@ -30,7 +29,7 @@ import { NavigationKeysUtils } from "../keysUtils/keyUtils";
import { PopoverPosition } from "@patternfly/react-core/dist/js/components/Popover";
import "./ExpressionVariableMenu.css";
-export type OnExpressionVariableUpdated = (args: { name: string; typeRef: string }) => void;
+export type OnExpressionVariableUpdated = (args: { name: string; typeRef: string | undefined }) => void;
export interface ExpressionVariableMenuProps {
/** Optional children element to be considered for triggering the edit expression menu */
@@ -62,7 +61,7 @@ export function ExpressionVariableMenu({
arrowPlacement,
nameField,
dataTypeField,
- selectedDataType = DmnBuiltInDataType.Undefined,
+ selectedDataType = undefined,
selectedExpressionName,
onVariableUpdated,
position,
@@ -92,7 +91,7 @@ export function ExpressionVariableMenu({
setExpressionName(event.target.value);
}, []);
- const onDataTypeChange = useCallback((dataType: DmnBuiltInDataType) => {
+ const onDataTypeChange = useCallback((dataType: string | undefined) => {
setDataType(dataType);
}, []);
diff --git a/packages/boxed-expression-component/src/expressions/ContextExpression/ContextExpression.tsx b/packages/boxed-expression-component/src/expressions/ContextExpression/ContextExpression.tsx
index 1bb8078b966..c3b1dee1373 100644
--- a/packages/boxed-expression-component/src/expressions/ContextExpression/ContextExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/ContextExpression/ContextExpression.tsx
@@ -35,11 +35,11 @@ import {
import { useBoxedExpressionEditorI18n } from "../../i18n";
import { useNestedExpressionContainerWithNestedExpressions } from "../../resizing/Hooks";
import { NestedExpressionContainerContext } from "../../resizing/NestedExpressionContainerContext";
-import { ResizerStopBehavior, ResizingWidth, useResizingWidths } from "../../resizing/ResizingWidthsContext";
+import { ResizerStopBehavior, ResizingWidth } from "../../resizing/ResizingWidthsContext";
import {
CONTEXT_ENTRY_EXPRESSION_MIN_WIDTH,
- CONTEXT_ENTRY_VARIABLE_MIN_WIDTH,
CONTEXT_ENTRY_VARIABLE_COLUMN_WIDTH_INDEX,
+ CONTEXT_ENTRY_VARIABLE_MIN_WIDTH,
CONTEXT_EXPRESSION_EXTRA_WIDTH,
} from "../../resizing/WidthConstants";
import { useBeeTableCoordinates, useBeeTableSelectableCellRef } from "../../selection/BeeTableSelectionContext";
@@ -49,13 +49,11 @@ import { DEFAULT_EXPRESSION_VARIABLE_NAME } from "../../expressionVariable/Expre
import { ContextEntryExpressionCell } from "./ContextEntryExpressionCell";
import { ExpressionVariableCell, ExpressionWithVariable } from "../../expressionVariable/ExpressionVariableCell";
import { ContextResultExpressionCell } from "./ContextResultExpressionCell";
-import { getExpressionMinWidth, getExpressionTotalMinWidth } from "../../resizing/WidthMaths";
+import { getExpressionTotalMinWidth } from "../../resizing/WidthMaths";
import { DMN15__tContextEntry } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types";
import { findAllIdsDeep } from "../../ids/ids";
import "./ContextExpression.css";
-const CONTEXT_ENTRY_DEFAULT_DATA_TYPE = DmnBuiltInDataType.Undefined;
-
export type ROWTYPE = ExpressionWithVariable & { index: number };
export function ContextExpression({
@@ -156,7 +154,7 @@ export function ContextExpression({
accessor: expressionHolderId as any, // FIXME: https://github.com/apache/incubator-kie-issues/issues/169
label: contextExpression["@_label"] ?? DEFAULT_EXPRESSION_VARIABLE_NAME,
isRowIndexColumn: false,
- dataType: contextExpression["@_typeRef"] ?? CONTEXT_ENTRY_DEFAULT_DATA_TYPE,
+ dataType: contextExpression["@_typeRef"] ?? DmnBuiltInDataType.Undefined,
width: undefined,
columns: [
{
@@ -286,7 +284,7 @@ export function ContextExpression({
variable: {
"@_id": generateUuid(),
"@_name": variableName,
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
description: { __$$text: "" },
},
};
diff --git a/packages/boxed-expression-component/src/expressions/DecisionTableExpression/DecisionTableExpression.tsx b/packages/boxed-expression-component/src/expressions/DecisionTableExpression/DecisionTableExpression.tsx
index c9af257bcc4..27332a19b8d 100644
--- a/packages/boxed-expression-component/src/expressions/DecisionTableExpression/DecisionTableExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/DecisionTableExpression/DecisionTableExpression.tsx
@@ -62,7 +62,6 @@ import {
DMN15__tInputClause,
DMN15__tLiteralExpression,
DMN15__tOutputClause,
- DMN15__tRuleAnnotation,
DMN15__tRuleAnnotationClause,
DMN15__tUnaryTests,
} from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types";
@@ -728,7 +727,7 @@ export function DecisionTableExpression({
"@_id": generateUuid(),
inputExpression: {
"@_id": generateUuid(),
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
text: { __$$text: newName },
},
});
@@ -768,7 +767,7 @@ export function DecisionTableExpression({
outputColumnsToAdd.push({
"@_id": generateUuid(),
"@_name": name,
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
});
}
diff --git a/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionContainer.tsx b/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionContainer.tsx
index e5108118450..bc1f446fd2e 100644
--- a/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionContainer.tsx
+++ b/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionContainer.tsx
@@ -20,7 +20,7 @@
import * as React from "react";
import { useCallback, useEffect, useRef } from "react";
import { useBoxedExpressionEditor, useBoxedExpressionEditorDispatch } from "../../BoxedExpressionEditorContext";
-import { BoxedExpression, DmnBuiltInDataType, generateUuid } from "../../api";
+import { BoxedExpression, generateUuid } from "../../api";
import { findAllIdsDeep } from "../../ids/ids";
import { DEFAULT_EXPRESSION_VARIABLE_NAME } from "../../expressionVariable/ExpressionVariableMenu";
import { useBeeTableSelectableCellRef } from "../../selection/BeeTableSelectionContext";
@@ -65,11 +65,7 @@ export const ExpressionContainer: React.FunctionComponent<ExpressionContainerPro
const onLogicTypeSelected = useCallback(
(logicType: BoxedExpression["__$$element"] | undefined) => {
const { expression: defaultExpression, widthsById: defaultWidthsById } =
- beeGwtService!.getDefaultExpressionDefinition(
- logicType,
- parentElementTypeRef ?? expressionTypeRef ?? DmnBuiltInDataType.Undefined,
- !isNested
- );
+ beeGwtService!.getDefaultExpressionDefinition(logicType, parentElementTypeRef ?? expressionTypeRef, !isNested);
setExpression((prev: BoxedExpression) => {
// Do not inline this variable for type safety. See https://github.com/microsoft/TypeScript/issues/241
diff --git a/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionDefinitionLogicTypeSelector.tsx b/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionDefinitionLogicTypeSelector.tsx
index cd097f15429..c9a926ba1bd 100644
--- a/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionDefinitionLogicTypeSelector.tsx
+++ b/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionDefinitionLogicTypeSelector.tsx
@@ -101,10 +101,10 @@ export function ExpressionDefinitionLogicTypeSelector({
"invocation",
...(isNested ? (["functionDefinition"] as const) : []),
...(!hideDmn14BoxedExpressions ? (["conditional"] as const) : []),
- "for",
- "every",
- "some",
- "filter",
+ ...(!hideDmn14BoxedExpressions ? (["for"] as const) : []),
+ ...(!hideDmn14BoxedExpressions ? (["every"] as const) : []),
+ ...(!hideDmn14BoxedExpressions ? (["some"] as const) : []),
+ ...(!hideDmn14BoxedExpressions ? (["filter"] as const) : []),
],
[hideDmn14BoxedExpressions, isNested]
);
diff --git a/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionDefinitionRoot.tsx b/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionDefinitionRoot.tsx
index 0ad8abb2907..3139416ed87 100644
--- a/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionDefinitionRoot.tsx
+++ b/packages/boxed-expression-component/src/expressions/ExpressionDefinitionRoot/ExpressionDefinitionRoot.tsx
@@ -25,7 +25,7 @@ import "./ExpressionDefinitionRoot.css";
export interface ExpressionDefinitionRootProps {
expressionHolderId: string;
- expressionHolderTypeRef: string;
+ expressionHolderTypeRef: string | undefined;
expression?: BoxedExpression;
isResetSupported: boolean | undefined;
expressionHolderName?: string;
diff --git a/packages/boxed-expression-component/src/expressions/FunctionExpression/FeelFunctionExpression.tsx b/packages/boxed-expression-component/src/expressions/FunctionExpression/FeelFunctionExpression.tsx
index 91be6514c94..2bc3aa89ffb 100644
--- a/packages/boxed-expression-component/src/expressions/FunctionExpression/FeelFunctionExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/FunctionExpression/FeelFunctionExpression.tsx
@@ -27,10 +27,10 @@ import {
BeeTableOperation,
BeeTableOperationConfig,
BeeTableProps,
- DmnBuiltInDataType,
BoxedExpression,
BoxedFunction,
BoxedFunctionKind,
+ DmnBuiltInDataType,
} from "../../api";
import { useBoxedExpressionEditorI18n } from "../../i18n";
import { useNestedExpressionContainerWithNestedExpressions } from "../../resizing/Hooks";
diff --git a/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionExpression.tsx b/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionExpression.tsx
index 5875422b6c4..48a36374342 100644
--- a/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/FunctionExpression/FunctionExpression.tsx
@@ -20,15 +20,15 @@
import _ from "lodash";
import * as React from "react";
import { useCallback, useMemo } from "react";
-import { DmnBuiltInDataType, BoxedFunction, BoxedFunctionKind, generateUuid } from "../../api";
+import { BoxedFunction, BoxedFunctionKind, DmnBuiltInDataType, generateUuid } from "../../api";
import { PopoverMenu } from "../../contextMenu/PopoverMenu";
import { useBoxedExpressionEditorI18n } from "../../i18n";
import { useBoxedExpressionEditor, useBoxedExpressionEditorDispatch } from "../../BoxedExpressionEditorContext";
-import { FeelFunctionExpression, BoxedFunctionFeel } from "./FeelFunctionExpression";
+import { BoxedFunctionFeel, FeelFunctionExpression } from "./FeelFunctionExpression";
import { FunctionKindSelector } from "./FunctionKindSelector";
-import { JavaFunctionExpression, BoxedFunctionJava } from "./JavaFunctionExpression";
+import { BoxedFunctionJava, JavaFunctionExpression } from "./JavaFunctionExpression";
import { ParametersPopover } from "./ParametersPopover";
-import { PmmlFunctionExpression, BoxedFunctionPmml } from "./PmmlFunctionExpression";
+import { BoxedFunctionPmml, PmmlFunctionExpression } from "./PmmlFunctionExpression";
import {
DMN15__tFunctionDefinition,
DMN15__tFunctionKind,
@@ -86,11 +86,11 @@ export function useFunctionExpressionControllerCell(functionKind: DMN15__tFuncti
"@_label": prev["@_label"],
"@_id": generateUuid(),
"@_kind": BoxedFunctionKind.Feel,
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
expression: {
__$$element: "literalExpression",
"@_id": generateUuid(),
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
},
formalParameter: [],
};
@@ -108,7 +108,7 @@ export function useFunctionExpressionControllerCell(functionKind: DMN15__tFuncti
"@_id": generateUuid(),
},
"@_kind": BoxedFunctionKind.Java,
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
formalParameter: [],
};
return retJava;
@@ -123,7 +123,7 @@ export function useFunctionExpressionControllerCell(functionKind: DMN15__tFuncti
"@_id": generateUuid(),
},
"@_kind": BoxedFunctionKind.Pmml,
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
formalParameter: [],
};
return retPmml;
@@ -167,7 +167,9 @@ export function useFunctionExpressionParametersColumnHeader(
<React.Fragment key={i}>
<span>{parameter["@_name"]}</span>
<span>{": "}</span>
- <span className={"expression-info-data-type"}>({parameter["@_typeRef"]})</span>
+ <span className={"expression-info-data-type"}>
+ ({parameter["@_typeRef"] ?? DmnBuiltInDataType.Undefined})
+ </span>
{i < (formalParameters ?? []).length - 1 && <span>{", "}</span>}
</React.Fragment>
))}
diff --git a/packages/boxed-expression-component/src/expressions/FunctionExpression/JavaFunctionExpression.tsx b/packages/boxed-expression-component/src/expressions/FunctionExpression/JavaFunctionExpression.tsx
index ddf0285725d..430ca10c3f1 100644
--- a/packages/boxed-expression-component/src/expressions/FunctionExpression/JavaFunctionExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/FunctionExpression/JavaFunctionExpression.tsx
@@ -29,10 +29,10 @@ import {
BeeTableOperation,
BeeTableOperationConfig,
BeeTableProps,
- DmnBuiltInDataType,
+ BoxedFunction,
BoxedFunctionKind,
+ DmnBuiltInDataType,
generateUuid,
- BoxedFunction,
} from "../../api";
import { useBoxedExpressionEditorI18n } from "../../i18n";
import { usePublishedBeeTableResizableColumns } from "../../resizing/BeeTableResizableColumnsContext";
diff --git a/packages/boxed-expression-component/src/expressions/FunctionExpression/ParametersPopover.tsx b/packages/boxed-expression-component/src/expressions/FunctionExpression/ParametersPopover.tsx
index 12bd285985c..db5aed31578 100644
--- a/packages/boxed-expression-component/src/expressions/FunctionExpression/ParametersPopover.tsx
+++ b/packages/boxed-expression-component/src/expressions/FunctionExpression/ParametersPopover.tsx
@@ -24,7 +24,7 @@ import { CubesIcon } from "@patternfly/react-icons/dist/js/icons/cubes-icon";
import { OutlinedTrashAltIcon } from "@patternfly/react-icons/dist/js/icons/outlined-trash-alt-icon";
import * as React from "react";
import { ChangeEvent, useCallback } from "react";
-import { DmnBuiltInDataType, BoxedFunction, generateUuid, getNextAvailablePrefixedName } from "../../api";
+import { BoxedFunction, DmnBuiltInDataType, generateUuid, getNextAvailablePrefixedName } from "../../api";
import { useBoxedExpressionEditorI18n } from "../../i18n";
import { useBoxedExpressionEditorDispatch } from "../../BoxedExpressionEditorContext";
import { DMN15__tInformationItem } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types";
@@ -51,7 +51,7 @@ export const ParametersPopover: React.FunctionComponent<ParametersPopoverProps>
(prev.formalParameter ?? []).map((p) => p["@_name"]),
"p"
),
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
},
];
@@ -120,7 +120,7 @@ function ParameterEntry({ parameter, index }: { parameter: DMN15__tInformationIt
);
const onDataTypeChange = useCallback(
- (typeRef: string) => {
+ (typeRef: string | undefined) => {
setExpression((prev: BoxedFunction) => {
const newParameters = [...(prev.formalParameter ?? [])];
newParameters[index] = {
@@ -166,11 +166,7 @@ function ParameterEntry({ parameter, index }: { parameter: DMN15__tInformationIt
placeholder={"Parameter Name"}
defaultValue={parameter["@_name"]}
/>
- <DataTypeSelector
- value={parameter["@_typeRef"] ?? DmnBuiltInDataType.Undefined}
- onChange={onDataTypeChange}
- menuAppendTo="parent"
- />
+ <DataTypeSelector value={parameter["@_typeRef"]} onChange={onDataTypeChange} menuAppendTo="parent" />
<Button
variant="danger"
className="delete-parameter"
diff --git a/packages/boxed-expression-component/src/expressions/FunctionExpression/PmmlFunctionExpression.tsx b/packages/boxed-expression-component/src/expressions/FunctionExpression/PmmlFunctionExpression.tsx
index ab5414b500b..39437c55012 100644
--- a/packages/boxed-expression-component/src/expressions/FunctionExpression/PmmlFunctionExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/FunctionExpression/PmmlFunctionExpression.tsx
@@ -30,6 +30,7 @@ import {
BeeTableProps,
BoxedFunction,
BoxedFunctionKind,
+ DmnBuiltInDataType,
generateUuid,
} from "../../api";
import { useBoxedExpressionEditorI18n } from "../../i18n";
@@ -89,7 +90,7 @@ export function PmmlFunctionExpression({
{
accessor: expressionHolderId as any, // FIXME: https://github.com/apache/incubator-kie-issues/issues/169
label: functionExpression["@_label"] ?? DEFAULT_EXPRESSION_VARIABLE_NAME,
- dataType: functionExpression["@_typeRef"] ?? "",
+ dataType: functionExpression["@_typeRef"] ?? DmnBuiltInDataType.Undefined,
isRowIndexColumn: false,
width: undefined,
columns: [
diff --git a/packages/boxed-expression-component/src/expressions/InvocationExpression/InvocationExpression.tsx b/packages/boxed-expression-component/src/expressions/InvocationExpression/InvocationExpression.tsx
index bb8d4274f92..61fc09da3db 100644
--- a/packages/boxed-expression-component/src/expressions/InvocationExpression/InvocationExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/InvocationExpression/InvocationExpression.tsx
@@ -18,7 +18,7 @@
*/
import * as React from "react";
-import { useCallback, useMemo, useEffect } from "react";
+import { useCallback, useEffect, useMemo } from "react";
import * as ReactTable from "react-table";
import {
BeeTableContextMenuAllowedOperationsConditions,
@@ -26,21 +26,21 @@ import {
BeeTableOperation,
BeeTableOperationConfig,
BeeTableProps,
+ BoxedExpression,
+ BoxedInvocation,
DmnBuiltInDataType,
generateUuid,
getNextAvailablePrefixedName,
- BoxedInvocation,
- BoxedExpression,
} from "../../api";
import { useBoxedExpressionEditorI18n } from "../../i18n";
import { NestedExpressionContainerContext } from "../../resizing/NestedExpressionContainerContext";
import { ResizerStopBehavior, ResizingWidth } from "../../resizing/ResizingWidthsContext";
import {
CONTEXT_ENTRY_VARIABLE_MIN_WIDTH,
- INVOCATION_PARAMETER_MIN_WIDTH,
INVOCATION_ARGUMENT_EXPRESSION_MIN_WIDTH,
INVOCATION_EXTRA_WIDTH,
INVOCATION_PARAMETER_INFO_COLUMN_WIDTH_INDEX,
+ INVOCATION_PARAMETER_MIN_WIDTH,
} from "../../resizing/WidthConstants";
import { BeeTable, BeeTableColumnUpdate } from "../../table/BeeTable";
import { useBoxedExpressionEditor, useBoxedExpressionEditorDispatch } from "../../BoxedExpressionEditorContext";
@@ -57,7 +57,6 @@ import "./InvocationExpression.css";
export type ROWTYPE = ExpressionWithVariable & { index: number };
export const INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME = "p-1";
-export const INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE = DmnBuiltInDataType.Undefined;
export function InvocationExpression({
isNested,
@@ -203,7 +202,7 @@ export function InvocationExpression({
accessor: "parameter" as any,
label: "parameter",
isRowIndexColumn: false,
- dataType: INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE,
+ dataType: DmnBuiltInDataType.Undefined,
isWidthPinned: true,
minWidth: CONTEXT_ENTRY_VARIABLE_MIN_WIDTH,
width: parametersWidth,
@@ -213,7 +212,7 @@ export function InvocationExpression({
accessor: "expression" as any,
label: "expression",
isRowIndexColumn: false,
- dataType: INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE,
+ dataType: DmnBuiltInDataType.Undefined,
minWidth: INVOCATION_ARGUMENT_EXPRESSION_MIN_WIDTH,
width: undefined,
},
@@ -333,7 +332,7 @@ export function InvocationExpression({
return {
parameter: {
"@_id": generateUuid(),
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
"@_name":
name ||
getNextAvailablePrefixedName(
diff --git a/packages/boxed-expression-component/src/expressions/IteratorExpression/IteratorExpressionComponent.tsx b/packages/boxed-expression-component/src/expressions/IteratorExpression/IteratorExpressionComponent.tsx
index de817288fbd..9a0718228c8 100644
--- a/packages/boxed-expression-component/src/expressions/IteratorExpression/IteratorExpressionComponent.tsx
+++ b/packages/boxed-expression-component/src/expressions/IteratorExpression/IteratorExpressionComponent.tsx
@@ -28,7 +28,7 @@ import {
} from "../../api";
import { BeeTable, BeeTableColumnUpdate, BeeTableRef } from "../../table/BeeTable";
import { ResizerStopBehavior } from "../../resizing/ResizingWidthsContext";
-import React, { useCallback, useEffect, useMemo, useRef } from "react";
+import React, { useCallback, useMemo, useRef } from "react";
import {
DMN15__tChildExpression,
DMN15__tTypedChildExpression,
@@ -47,7 +47,6 @@ import {
ITERATOR_EXPRESSION_LABEL_COLUMN_WIDTH,
} from "../../resizing/WidthConstants";
import { DEFAULT_EXPRESSION_VARIABLE_NAME } from "../../expressionVariable/ExpressionVariableMenu";
-import { useBeeTableCoordinates, useBeeTableSelectableCellRef } from "../../selection/BeeTableSelectionContext";
import { IteratorExpressionVariableCell } from "./IteratorExpressionVariableCell";
type ROWTYPE = IteratorClause;
diff --git a/packages/boxed-expression-component/src/expressions/ListExpression/ListExpression.tsx b/packages/boxed-expression-component/src/expressions/ListExpression/ListExpression.tsx
index 569629d9783..00f9570cad6 100644
--- a/packages/boxed-expression-component/src/expressions/ListExpression/ListExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/ListExpression/ListExpression.tsx
@@ -27,10 +27,9 @@ import {
BeeTableOperation,
BeeTableOperationConfig,
BeeTableProps,
- DmnBuiltInDataType,
- InsertRowColumnsDirection,
- BoxedList,
BoxedExpression,
+ BoxedList,
+ DmnBuiltInDataType,
} from "../../api";
import { useBoxedExpressionEditorI18n } from "../../i18n";
import { useNestedExpressionContainerWithNestedExpressions } from "../../resizing/Hooks";
diff --git a/packages/boxed-expression-component/src/expressions/LiteralExpression/LiteralExpression.tsx b/packages/boxed-expression-component/src/expressions/LiteralExpression/LiteralExpression.tsx
index b27e7454143..d4e45e9b51a 100644
--- a/packages/boxed-expression-component/src/expressions/LiteralExpression/LiteralExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/LiteralExpression/LiteralExpression.tsx
@@ -24,8 +24,8 @@ import {
BeeTableContextMenuAllowedOperationsConditions,
BeeTableHeaderVisibility,
BeeTableOperation,
- DmnBuiltInDataType,
BoxedLiteral,
+ DmnBuiltInDataType,
} from "../../api";
import { useNestedExpressionContainer } from "../../resizing/NestedExpressionContainerContext";
import {
@@ -85,11 +85,13 @@ export function LiteralExpression({
const onColumnUpdates = useCallback(
([{ name, typeRef }]: BeeTableColumnUpdate<ROWTYPE>[]) => {
- setExpression(() => ({
- ...literalExpression,
- "@_label": name,
- "@_typeRef": typeRef,
- }));
+ setExpression(
+ (): BoxedLiteral => ({
+ ...literalExpression,
+ "@_label": name,
+ "@_typeRef": typeRef,
+ })
+ );
},
[literalExpression, setExpression]
);
diff --git a/packages/boxed-expression-component/src/expressions/RelationExpression/RelationExpression.tsx b/packages/boxed-expression-component/src/expressions/RelationExpression/RelationExpression.tsx
index 4300dffb587..68cb937bcd8 100644
--- a/packages/boxed-expression-component/src/expressions/RelationExpression/RelationExpression.tsx
+++ b/packages/boxed-expression-component/src/expressions/RelationExpression/RelationExpression.tsx
@@ -26,11 +26,10 @@ import {
BeeTableHeaderVisibility,
BeeTableOperation,
BeeTableOperationConfig,
+ BoxedRelation,
DmnBuiltInDataType,
generateUuid,
getNextAvailablePrefixedName,
- InsertRowColumnsDirection,
- BoxedRelation,
} from "../../api";
import { useBoxedExpressionEditorI18n } from "../../i18n";
import { usePublishedBeeTableResizableColumns } from "../../resizing/BeeTableResizableColumnsContext";
@@ -44,7 +43,7 @@ import {
import { BeeTable, BeeTableCellUpdate, BeeTableColumnUpdate, BeeTableRef } from "../../table/BeeTable";
import { useBoxedExpressionEditor, useBoxedExpressionEditorDispatch } from "../../BoxedExpressionEditorContext";
import { DEFAULT_EXPRESSION_VARIABLE_NAME } from "../../expressionVariable/ExpressionVariableMenu";
-import { DMN15__tList, DMN15__tLiteralExpression } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types";
+import { DMN15__tList } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types";
import "./RelationExpression.css";
type ROWTYPE = any; // FIXME: https://github.com/kiegroup/kie-issues/issues/169
@@ -326,7 +325,7 @@ export function RelationExpression({
newItems.push({
"@_id": generateUuid(),
"@_name": name,
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
});
}
diff --git a/packages/boxed-expression-component/src/table/BeeTable/BeeTableHeader.tsx b/packages/boxed-expression-component/src/table/BeeTable/BeeTableHeader.tsx
index 4c0057aaa7f..2f69a260634 100644
--- a/packages/boxed-expression-component/src/table/BeeTable/BeeTableHeader.tsx
+++ b/packages/boxed-expression-component/src/table/BeeTable/BeeTableHeader.tsx
@@ -21,7 +21,7 @@ import _ from "lodash";
import * as React from "react";
import { useCallback } from "react";
import * as ReactTable from "react-table";
-import { BeeTableHeaderVisibility, DmnBuiltInDataType, BoxedExpression, InsertRowColumnsDirection } from "../../api";
+import { BeeTableHeaderVisibility, BoxedExpression, InsertRowColumnsDirection } from "../../api";
import { BeeTableTh } from "./BeeTableTh";
import { BeeTableThResizable } from "./BeeTableThResizable";
import { ResizerStopBehavior } from "../../resizing/ResizingWidthsContext";
@@ -32,7 +32,7 @@ import { InlineEditableTextInput } from "./InlineEditableTextInput";
import { DEFAULT_EXPRESSION_VARIABLE_NAME } from "../../expressionVariable/ExpressionVariableMenu";
export interface BeeTableColumnUpdate<R extends object> {
- typeRef: string;
+ typeRef: string | undefined;
name: string;
column: ReactTable.ColumnInstance<R>;
columnIndex: number;
@@ -120,10 +120,7 @@ export function BeeTableHeader<R extends object>({
) => (args: Pick<BoxedExpression, "@_label" | "@_typeRef">) => void
>(
(column, columnIndex) => {
- return ({
- "@_label": name = DEFAULT_EXPRESSION_VARIABLE_NAME,
- "@_typeRef": typeRef = DmnBuiltInDataType.Undefined,
- }) => {
+ return ({ "@_label": name = DEFAULT_EXPRESSION_VARIABLE_NAME, "@_typeRef": typeRef = undefined }) => {
onColumnUpdates?.([
{
// Subtract one because of the rowIndex column.
diff --git a/packages/boxed-expression-component/stories/boxedExpressionStoriesWrapper.tsx b/packages/boxed-expression-component/stories/boxedExpressionStoriesWrapper.tsx
index 080a7bea231..830eb030789 100644
--- a/packages/boxed-expression-component/stories/boxedExpressionStoriesWrapper.tsx
+++ b/packages/boxed-expression-component/stories/boxedExpressionStoriesWrapper.tsx
@@ -71,7 +71,7 @@ export const dataTypes = [
];
export const beeGwtService: BeeGwtService = {
- getDefaultExpressionDefinition(logicType: BoxedExpression["__$$element"] | undefined, dataType: string) {
+ getDefaultExpressionDefinition(logicType: BoxedExpression["__$$element"] | undefined, dataType: string | undefined) {
const widthsById = new Map();
const expression = getDefaultBoxedExpressionForStories({ logicType, typeRef: dataType, widthsById });
return {
@@ -167,9 +167,7 @@ export function BoxedExpressionEditorStory(props?: Partial<BoxedExpressionEditor
expressionHolderName={
props?.expressionHolderName ?? args?.expressionHolderName ?? DEFAULT_EXPRESSION_VARIABLE_NAME
}
- expressionHolderTypeRef={
- props?.expressionHolderTypeRef ?? args?.expressionHolderTypeRef ?? DmnBuiltInDataType.Undefined
- }
+ expressionHolderTypeRef={props?.expressionHolderTypeRef ?? args?.expressionHolderTypeRef}
expression={expressionState}
onExpressionChange={setExpressionState}
onWidthsChange={onWidthsChange}
diff --git a/packages/boxed-expression-component/stories/boxedExpressions/Context/Context.stories.tsx b/packages/boxed-expression-component/stories/boxedExpressions/Context/Context.stories.tsx
index 0fc490bbe87..ce281ca575b 100644
--- a/packages/boxed-expression-component/stories/boxedExpressions/Context/Context.stories.tsx
+++ b/packages/boxed-expression-component/stories/boxedExpressions/Context/Context.stories.tsx
@@ -43,13 +43,13 @@ export const Base: Story = {
__$$element: "context",
"@_id": "_35255561-88FA-4A78-9C3F-61855213EE0F",
"@_label": "Expression Name",
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
contextEntry: [
{
variable: {
"@_id": generateUuid(),
"@_name": "ContextEntry-1",
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
},
expression: undefined!,
},
diff --git a/packages/boxed-expression-component/stories/boxedExpressions/DecisionTable/DecisionTable.stories.tsx b/packages/boxed-expression-component/stories/boxedExpressions/DecisionTable/DecisionTable.stories.tsx
index b25060fad9d..53dcfbe93b3 100644
--- a/packages/boxed-expression-component/stories/boxedExpressions/DecisionTable/DecisionTable.stories.tsx
+++ b/packages/boxed-expression-component/stories/boxedExpressions/DecisionTable/DecisionTable.stories.tsx
@@ -60,7 +60,7 @@ export const Base: Story = {
inputExpression: {
"@_id": generateUuid(),
text: { __$$text: "input-1" },
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
},
},
],
@@ -68,7 +68,7 @@ export const Base: Story = {
{
"@_id": generateUuid(),
"@_label": "output-1",
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
},
],
annotation: [
diff --git a/packages/boxed-expression-component/stories/dev/getDefaultBoxedExpressionForDevWebapp.ts b/packages/boxed-expression-component/stories/dev/getDefaultBoxedExpressionForDevWebapp.ts
index 887a4781837..5ac339112c7 100644
--- a/packages/boxed-expression-component/stories/dev/getDefaultBoxedExpressionForDevWebapp.ts
+++ b/packages/boxed-expression-component/stories/dev/getDefaultBoxedExpressionForDevWebapp.ts
@@ -34,10 +34,7 @@ import {
BoxedEvery,
BoxedFilter,
} from "../../src/api";
-import {
- INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE,
- INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME,
-} from "../../src/expressions/InvocationExpression/InvocationExpression";
+import { INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME } from "../../src/expressions/InvocationExpression/InvocationExpression";
import {
DECISION_TABLE_INPUT_DEFAULT_VALUE,
DECISION_TABLE_OUTPUT_DEFAULT_VALUE,
@@ -45,7 +42,7 @@ import {
export function getDefaultBoxedExpressionForDevWebapp(
logicType: BoxedExpression["__$$element"] | undefined,
- typeRef: string
+ typeRef: string | undefined
): BoxedExpression {
if (logicType === "literalExpression") {
const literalExpression: BoxedLiteral = {
@@ -110,7 +107,7 @@ export function getDefaultBoxedExpressionForDevWebapp(
parameter: {
"@_id": generateUuid(),
"@_name": INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME,
- "@_typeRef": INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE,
+ "@_typeRef": undefined,
},
},
],
diff --git a/packages/boxed-expression-component/stories/features/Resizing/Resizing.stories.tsx b/packages/boxed-expression-component/stories/features/Resizing/Resizing.stories.tsx
index c48701ff686..fcc89fd0975 100644
--- a/packages/boxed-expression-component/stories/features/Resizing/Resizing.stories.tsx
+++ b/packages/boxed-expression-component/stories/features/Resizing/Resizing.stories.tsx
@@ -89,7 +89,7 @@ const expression: BoxedExpression = {
"@_kind": BoxedFunctionKind.Feel,
expression: {
"@_id": "_C1F325BF-D812-4192-AA90-B820C892EA9A",
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
__$$element: "context",
contextEntry: [
{
@@ -149,7 +149,7 @@ const expression: BoxedExpression = {
{
"@_id": "_64AA2820-EC4F-4A5B-9045-A474983CC86E",
"@_name": "Result Expression",
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
},
],
annotation: [
diff --git a/packages/boxed-expression-component/stories/getDefaultBoxedExpressionForStories.ts b/packages/boxed-expression-component/stories/getDefaultBoxedExpressionForStories.ts
index cb96694bcbd..66b17dce839 100644
--- a/packages/boxed-expression-component/stories/getDefaultBoxedExpressionForStories.ts
+++ b/packages/boxed-expression-component/stories/getDefaultBoxedExpressionForStories.ts
@@ -18,7 +18,6 @@
*/
import {
- DMN15__tContextEntry,
DMN15__tItemDefinition,
DMN15__tOutputClause,
} from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types";
@@ -27,22 +26,17 @@ import {
BoxedDecisionTable,
BoxedExpression,
BoxedFunction,
- BoxedFunctionKind,
BoxedInvocation,
BoxedList,
BoxedLiteral,
BoxedRelation,
- DmnBuiltInDataType,
generateUuid,
} from "../src/api";
import {
DECISION_TABLE_INPUT_DEFAULT_VALUE,
DECISION_TABLE_OUTPUT_DEFAULT_VALUE,
} from "../src/expressions/DecisionTableExpression/DecisionTableExpression";
-import {
- INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE,
- INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME,
-} from "../src/expressions/InvocationExpression/InvocationExpression";
+import { INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME } from "../src/expressions/InvocationExpression/InvocationExpression";
import {
BEE_TABLE_ROW_INDEX_COLUMN_WIDTH,
CONTEXT_ENTRY_VARIABLE_MIN_WIDTH,
@@ -64,7 +58,7 @@ export function getDefaultBoxedExpressionForStories({
widthsById,
}: {
logicType: BoxedExpression["__$$element"] | undefined;
- typeRef: string;
+ typeRef: string | undefined;
widthsById: Map<string, number[]>;
}): BoxedExpression {
if (logicType === "literalExpression") {
@@ -132,7 +126,7 @@ export function getDefaultBoxedExpressionForStories({
parameter: {
"@_id": generateUuid(),
"@_name": INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME,
- "@_typeRef": INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE,
+ "@_typeRef": undefined,
},
expression: undefined!, // SPEC DISCREPANCY: Starting without an expression gives users the ability to select the expression type.
},
@@ -166,7 +160,7 @@ export function getDefaultBoxedExpressionForStories({
{
"@_id": generateUuid(),
"@_name": "column-1",
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
},
],
};
@@ -179,11 +173,11 @@ export function getDefaultBoxedExpressionForStories({
} else if (logicType === "decisionTable") {
const singleOutputColumn = {
name: "output-1",
- typeRef: DmnBuiltInDataType.Undefined,
+ typeRef: undefined,
};
const singleInputColumn = {
name: "input-1",
- typeRef: DmnBuiltInDataType.Undefined,
+ typeRef: undefined,
};
const input = [
@@ -192,7 +186,7 @@ export function getDefaultBoxedExpressionForStories({
inputExpression: {
"@_id": generateUuid(),
text: { __$$text: singleInputColumn.name },
- "@_typeRef": singleInputColumn.typeRef ?? DmnBuiltInDataType.Undefined,
+ "@_typeRef": singleInputColumn.typeRef,
},
},
];
diff --git a/packages/dmn-editor/src/boxedExpressions/BoxedExpressionScreen.tsx b/packages/dmn-editor/src/boxedExpressions/BoxedExpressionScreen.tsx
index 791ac403c1e..c3efe27611c 100644
--- a/packages/dmn-editor/src/boxedExpressions/BoxedExpressionScreen.tsx
+++ b/packages/dmn-editor/src/boxedExpressions/BoxedExpressionScreen.tsx
@@ -385,11 +385,7 @@ export function BoxedExpressionScreen({ container }: { container: React.RefObjec
isResetSupportedOnRootExpression={isResetSupportedOnRootExpression}
expressionHolderId={activeDrgElementId!}
expressionHolderName={drgElement?.variable?.["@_name"] ?? drgElement?.["@_name"] ?? ""}
- expressionHolderTypeRef={
- drgElement?.variable?.["@_typeRef"] ??
- expression?.boxedExpression?.["@_typeRef"] ??
- DmnBuiltInDataType.Undefined
- }
+ expressionHolderTypeRef={drgElement?.variable?.["@_typeRef"] ?? expression?.boxedExpression?.["@_typeRef"]}
expression={expression?.boxedExpression}
onExpressionChange={onExpressionChange}
dataTypes={dataTypes}
@@ -432,7 +428,9 @@ export function drgElementToBoxedExpression(
expressionHolder?.variable?.["@_name"] ??
expressionHolder.expression["@_label"] ??
expressionHolder?.["@_name"],
- "@_typeRef": expressionHolder?.variable?.["@_typeRef"] ?? expressionHolder.expression["@_typeRef"],
+ "@_typeRef": expressionHolder?.variable
+ ? expressionHolder?.variable["@_typeRef"]
+ : expressionHolder.expression["@_typeRef"],
}
: undefined;
} else {
diff --git a/packages/dmn-editor/src/boxedExpressions/getDefaultBoxedExpression.tsx b/packages/dmn-editor/src/boxedExpressions/getDefaultBoxedExpression.tsx
index 3410cf7d2e7..29e73932130 100644
--- a/packages/dmn-editor/src/boxedExpressions/getDefaultBoxedExpression.tsx
+++ b/packages/dmn-editor/src/boxedExpressions/getDefaultBoxedExpression.tsx
@@ -18,39 +18,36 @@
*/
import {
- DmnBuiltInDataType,
+ BoxedConditional,
+ BoxedContext,
+ BoxedDecisionTable,
+ BoxedEvery,
BoxedExpression,
- generateUuid,
- BoxedLiteral,
+ BoxedFilter,
+ BoxedFor,
BoxedFunction,
- BoxedContext,
- BoxedList,
BoxedInvocation,
+ BoxedList,
+ BoxedLiteral,
BoxedRelation,
- BoxedDecisionTable,
- BoxedConditional,
- BoxedFor,
BoxedSome,
- BoxedEvery,
- BoxedFilter,
+ DmnBuiltInDataType,
+ generateUuid,
} from "@kie-tools/boxed-expression-component/dist/api";
import {
- LITERAL_EXPRESSION_MIN_WIDTH,
+ BEE_TABLE_ROW_INDEX_COLUMN_WIDTH,
CONTEXT_ENTRY_VARIABLE_MIN_WIDTH,
+ DECISION_TABLE_ANNOTATION_DEFAULT_WIDTH,
DECISION_TABLE_INPUT_DEFAULT_WIDTH,
DECISION_TABLE_OUTPUT_DEFAULT_WIDTH,
- DECISION_TABLE_ANNOTATION_DEFAULT_WIDTH,
+ LITERAL_EXPRESSION_MIN_WIDTH,
RELATION_EXPRESSION_COLUMN_DEFAULT_WIDTH,
- BEE_TABLE_ROW_INDEX_COLUMN_WIDTH,
} from "@kie-tools/boxed-expression-component/dist/resizing/WidthConstants";
import {
DECISION_TABLE_INPUT_DEFAULT_VALUE,
DECISION_TABLE_OUTPUT_DEFAULT_VALUE,
} from "@kie-tools/boxed-expression-component/dist/expressions/DecisionTableExpression/DecisionTableExpression";
-import {
- INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME,
- INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE,
-} from "@kie-tools/boxed-expression-component/dist/expressions/InvocationExpression/InvocationExpression";
+import { INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME } from "@kie-tools/boxed-expression-component/dist/expressions/InvocationExpression/InvocationExpression";
import { RELATION_EXPRESSION_DEFAULT_VALUE } from "@kie-tools/boxed-expression-component/dist/expressions/RelationExpression/RelationExpression";
import { DataTypeIndex } from "../dataTypes/DataTypes";
import { isStruct } from "../dataTypes/DataTypeSpec";
@@ -68,13 +65,13 @@ export function getDefaultBoxedExpression({
getDefaultColumnWidth,
}: {
logicType: BoxedExpression["__$$element"] | undefined;
- typeRef: string;
+ typeRef: string | undefined;
allTopLevelDataTypesByFeelName: DataTypeIndex;
getInputs?: () => { name: string; typeRef: string | undefined }[] | undefined;
getDefaultColumnWidth?: (args: { name: string; typeRef: string | undefined }) => number | undefined;
widthsById: Map<string, number[]>;
}): BoxedExpression {
- const dataType = allTopLevelDataTypesByFeelName.get(typeRef);
+ const dataType = allTopLevelDataTypesByFeelName.get(typeRef ?? DmnBuiltInDataType.Undefined);
if (logicType === "literalExpression") {
const literalExpression: BoxedLiteral = {
@@ -109,7 +106,6 @@ export function getDefaultBoxedExpression({
variable: {
"@_id": generateUuid(),
"@_name": "ContextEntry-1",
- "@_typeRef": DmnBuiltInDataType.Undefined,
},
expression: undefined!, // SPEC DISCREPANCY: Starting without an expression gives users the ability to select the expression type.
},
@@ -117,7 +113,7 @@ export function getDefaultBoxedExpression({
} else {
contextEntries = (dataType.itemDefinition.itemComponent ?? []).map((ic) => {
const name = ic["@_name"];
- const typeRef = isStruct(ic) ? DmnBuiltInDataType.Any : ic.typeRef?.__$$text ?? DmnBuiltInDataType.Undefined;
+ const typeRef = isStruct(ic) ? DmnBuiltInDataType.Any : ic.typeRef?.__$$text;
maxWidthBasedOnEntryNames = Math.max(
maxWidthBasedOnEntryNames,
getDefaultColumnWidth?.({ name, typeRef }) ?? CONTEXT_ENTRY_VARIABLE_MIN_WIDTH
@@ -169,7 +165,7 @@ export function getDefaultBoxedExpression({
parameter: {
"@_id": generateUuid(),
"@_name": INVOCATION_EXPRESSION_DEFAULT_PARAMETER_NAME,
- "@_typeRef": INVOCATION_EXPRESSION_DEFAULT_PARAMETER_DATA_TYPE,
+ "@_typeRef": undefined,
},
expression: undefined!, // SPEC DISCREPANCY: Starting without an expression gives users the ability to select the expression type.
},
@@ -206,14 +202,12 @@ export function getDefaultBoxedExpression({
{
"@_id": generateUuid(),
"@_name": dataType?.itemDefinition["@_name"] ?? "column-1",
- "@_typeRef": dataType?.feelName ?? DmnBuiltInDataType.Undefined,
+ "@_typeRef": dataType?.feelName,
},
]
: (dataType.itemDefinition.itemComponent ?? []).map((ic) => {
const name = ic["@_name"];
- const typeRef = isStruct(ic)
- ? DmnBuiltInDataType.Any
- : ic.typeRef?.__$$text ?? DmnBuiltInDataType.Undefined;
+ const typeRef = isStruct(ic) ? DmnBuiltInDataType.Any : ic.typeRef?.__$$text;
return {
"@_id": generateUuid(),
"@_name": name,
@@ -236,11 +230,11 @@ export function getDefaultBoxedExpression({
} else if (logicType === "decisionTable") {
const singleOutputColumn = {
name: "Output-1",
- typeRef: dataType?.feelName ?? DmnBuiltInDataType.Undefined,
+ typeRef: dataType?.feelName,
};
const singleInputColumn = {
name: "Input-1",
- typeRef: DmnBuiltInDataType.Undefined,
+ typeRef: undefined,
};
const input = getInputs?.()?.map((input) => ({
@@ -248,7 +242,7 @@ export function getDefaultBoxedExpression({
inputExpression: {
"@_id": generateUuid(),
text: { __$$text: input.name },
- "@_typeRef": input.typeRef ?? DmnBuiltInDataType.Undefined,
+ "@_typeRef": input.typeRef,
},
})) ?? [
{
@@ -256,7 +250,7 @@ export function getDefaultBoxedExpression({
inputExpression: {
"@_id": generateUuid(),
text: { __$$text: singleInputColumn.name },
- "@_typeRef": singleInputColumn.typeRef ?? DmnBuiltInDataType.Undefined,
+ "@_typeRef": singleInputColumn.typeRef,
},
},
];
@@ -273,7 +267,7 @@ export function getDefaultBoxedExpression({
: (dataType.itemDefinition.itemComponent ?? []).map((ic) => ({
"@_id": generateUuid(),
"@_name": ic["@_name"],
- "@_typeRef": isStruct(ic) ? DmnBuiltInDataType.Any : ic.typeRef?.__$$text ?? DmnBuiltInDataType.Undefined,
+ "@_typeRef": isStruct(ic) ? DmnBuiltInDataType.Any : ic.typeRef?.__$$text,
}));
const decisionTableExpression: BoxedDecisionTable = {
diff --git a/packages/dmn-editor/src/dataTypes/Constraints.tsx b/packages/dmn-editor/src/dataTypes/Constraints.tsx
index 9a2b93230af..fbacc659122 100644
--- a/packages/dmn-editor/src/dataTypes/Constraints.tsx
+++ b/packages/dmn-editor/src/dataTypes/Constraints.tsx
@@ -18,7 +18,7 @@
*/
import * as React from "react";
-import { useMemo, useCallback, useState, useEffect } from "react";
+import { useCallback, useEffect, useMemo, useState } from "react";
import { ConstraintsExpression } from "./ConstraintsExpression";
import {
DMN15__tItemDefinition,
@@ -86,8 +86,7 @@ export function recursivelyGetRootItemDefinition(
allDataTypesById: DataTypeIndex,
allTopLevelItemDefinitionUniqueNames: UniqueNameIndex
): DMN15__tItemDefinition {
- const typeRef: DmnBuiltInDataType =
- (itemDefinition.typeRef?.__$$text as DmnBuiltInDataType) ?? DmnBuiltInDataType.Undefined;
+ const typeRef: DmnBuiltInDataType = itemDefinition.typeRef?.__$$text as DmnBuiltInDataType;
if (builtInFeelTypeNames.has(typeRef) === false) {
const parentDataType = allDataTypesById.get(allTopLevelItemDefinitionUniqueNames.get(typeRef) ?? "");
@@ -422,7 +421,7 @@ export function ConstraintsFromAllowedValuesAttribute({
const allowedValues = useMemo(() => itemDefinition?.allowedValues, [itemDefinition?.allowedValues]);
const itemDefinitionId = itemDefinition["@_id"]!;
- const typeRef = (itemDefinition?.typeRef?.__$$text as DmnBuiltInDataType) ?? DmnBuiltInDataType.Undefined;
+ const typeRef = itemDefinition?.typeRef?.__$$text as DmnBuiltInDataType;
const typeRefConstraintTypeHelper = useMemo(
() => constraintTypeHelper(itemDefinition, allDataTypesById, allTopLevelItemDefinitionUniqueNames),
[allDataTypesById, allTopLevelItemDefinitionUniqueNames, itemDefinition]
@@ -569,7 +568,7 @@ export function ConstraintsFromTypeConstraintAttribute({
[defaultsToAllowedValues, itemDefinition?.allowedValues, itemDefinition?.typeConstraint]
);
- const typeRef = (itemDefinition?.typeRef?.__$$text as DmnBuiltInDataType) ?? DmnBuiltInDataType.Undefined;
+ const typeRef = itemDefinition?.typeRef?.__$$text as DmnBuiltInDataType;
const typeRefConstraintTypeHelper = useMemo(
() => constraintTypeHelper(itemDefinition, allDataTypesById, allTopLevelItemDefinitionUniqueNames),
[allDataTypesById, allTopLevelItemDefinitionUniqueNames, itemDefinition]
@@ -587,9 +586,7 @@ export function ConstraintsFromTypeConstraintAttribute({
if (isCollection(rootItemDefinition)) {
return ["expression"] as KIE__tConstraintType[];
}
- return constrainableBuiltInFeelTypes.get(
- (rootItemDefinition.typeRef?.__$$text as DmnBuiltInDataType) ?? DmnBuiltInDataType.Undefined
- );
+ return constrainableBuiltInFeelTypes.get(rootItemDefinition.typeRef?.__$$text as DmnBuiltInDataType);
}, [rootItemDefinition]);
const {
diff --git a/packages/dmn-editor/src/dataTypes/DataTypeName.tsx b/packages/dmn-editor/src/dataTypes/DataTypeName.tsx
index 14e5e9aeb34..e93e1944c91 100644
--- a/packages/dmn-editor/src/dataTypes/DataTypeName.tsx
+++ b/packages/dmn-editor/src/dataTypes/DataTypeName.tsx
@@ -30,6 +30,7 @@ import { buildFeelQNameFromNamespace } from "../feel/buildFeelQName";
import { InlineFeelNameInput, OnInlineFeelNameRenamed } from "../feel/InlineFeelNameInput";
import { useExternalModels } from "../includedModels/DmnEditorDependenciesContext";
import { State } from "../store/Store";
+import { DmnBuiltInDataType } from "@kie-tools/boxed-expression-component/dist/api";
export function DataTypeName({
isReadonly,
@@ -135,7 +136,7 @@ export function DataTypeName({
/>
{!isEditingLabel && (
<TypeRefLabel
- typeRef={itemDefinition.typeRef?.__$$text}
+ typeRef={itemDefinition.typeRef?.__$$text ?? DmnBuiltInDataType.Undefined}
isCollection={itemDefinition["@_isCollection"]}
relativeToNamespace={relativeToNamespace}
/>
diff --git a/packages/dmn-editor/src/dataTypes/DataTypePanel.tsx b/packages/dmn-editor/src/dataTypes/DataTypePanel.tsx
index 080955d5791..713807038b2 100644
--- a/packages/dmn-editor/src/dataTypes/DataTypePanel.tsx
+++ b/packages/dmn-editor/src/dataTypes/DataTypePanel.tsx
@@ -123,7 +123,7 @@ export function DataTypePanel({
}
editItemDefinition(dataType.itemDefinition["@_id"]!, (itemDefinition) => {
- itemDefinition.typeRef = { __$$text: typeRef };
+ itemDefinition.typeRef = typeRef ? { __$$text: typeRef } : undefined;
const originalItemDefinition = original(itemDefinition);
if (originalItemDefinition?.typeRef?.__$$text !== typeRef) {
itemDefinition.typeConstraint = undefined;
diff --git a/packages/dmn-editor/src/dataTypes/DataTypes.tsx b/packages/dmn-editor/src/dataTypes/DataTypes.tsx
index 7d950a6ee67..6400c86e4cf 100644
--- a/packages/dmn-editor/src/dataTypes/DataTypes.tsx
+++ b/packages/dmn-editor/src/dataTypes/DataTypes.tsx
@@ -171,7 +171,7 @@ export function DataTypes() {
<>
{(dataTypesTree.length <= 0 && (
<DataTypesEmptyState
- onAdd={() => addTopLevelItemDefinition({ typeRef: { __$$text: DmnBuiltInDataType.Undefined } })}
+ onAdd={() => addTopLevelItemDefinition({ typeRef: undefined })}
onPaste={pasteTopLevelItemDefinition}
/>
)) || (
@@ -203,9 +203,7 @@ export function DataTypes() {
{...extraPropsForDropdownToggleAction}
key="add-data-type-action"
aria-label="Add Data Type"
- onClick={() =>
- addTopLevelItemDefinition({ typeRef: { __$$text: DmnBuiltInDataType.Undefined } })
- }
+ onClick={() => addTopLevelItemDefinition({ typeRef: undefined })}
>
<PlusCircleIcon />
</DropdownToggleAction>,
diff --git a/packages/dmn-editor/src/dataTypes/ItemComponentsTable.tsx b/packages/dmn-editor/src/dataTypes/ItemComponentsTable.tsx
index 7769fd8c709..41d43e94881 100644
--- a/packages/dmn-editor/src/dataTypes/ItemComponentsTable.tsx
+++ b/packages/dmn-editor/src/dataTypes/ItemComponentsTable.tsx
@@ -39,16 +39,16 @@ import { AngleDownIcon } from "@patternfly/react-icons/dist/js/icons/angle-down-
import { AngleRightIcon } from "@patternfly/react-icons/dist/js/icons/angle-right-icon";
import { EyeIcon } from "@patternfly/react-icons/dist/js/icons/eye-icon";
import { TrashIcon } from "@patternfly/react-icons/dist/js/icons/trash-icon";
-import { DataType, EditItemDefinition, AddItemComponent, DataTypeIndex } from "./DataTypes";
+import { AddItemComponent, DataType, DataTypeIndex, EditItemDefinition } from "./DataTypes";
import { DataTypeName } from "./DataTypeName";
-import { isStruct, canHaveConstraints, getNewItemDefinition } from "./DataTypeSpec";
+import { canHaveConstraints, getNewItemDefinition, isStruct } from "./DataTypeSpec";
import { Flex, FlexItem } from "@patternfly/react-core/dist/js/layouts/Flex";
import { Title } from "@patternfly/react-core/dist/js/components/Title";
import { UniqueNameIndex } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/Dmn15Spec";
import {
+ buildClipboardFromDataType,
DMN_EDITOR_DATA_TYPES_CLIPBOARD_MIME_TYPE,
DmnEditorDataTypesClipboard,
- buildClipboardFromDataType,
getClipboard,
} from "../clipboard/Clipboard";
import { getNewDmnIdRandomizer } from "../idRandomizer/dmnIdRandomizer";
@@ -110,6 +110,7 @@ export function ItemComponentsTable({
const flatTree = useMemo(() => {
const ret: { dataType: DataType; allUniqueNamesAtLevel: UniqueNameIndex }[] = [];
+
function traverse(dataType: DataType[], allUniqueNamesAtLevel: UniqueNameIndex) {
for (let i = 0; i < (dataType?.length ?? 0); i++) {
ret.push({ dataType: dataType[i], allUniqueNamesAtLevel });
@@ -162,7 +163,7 @@ export function ItemComponentsTable({
onClick={() =>
addItemComponent(parent.itemDefinition["@_id"]!, "unshift", {
"@_name": "New property",
- typeRef: { __$$text: DmnBuiltInDataType.Undefined },
+ typeRef: undefined,
})
}
>
@@ -376,7 +377,7 @@ export function ItemComponentsTable({
onClick={() => {
addItemComponent(dt.itemDefinition["@_id"]!, "unshift", {
"@_name": "New property",
- typeRef: { __$$text: DmnBuiltInDataType.Undefined },
+ typeRef: undefined,
});
dmnEditorStoreApi.setState((state) => {
state.dataTypesEditor.expandedItemComponentIds.push(dt.itemDefinition["@_id"]!);
@@ -434,11 +435,11 @@ export function ItemComponentsTable({
})}
onChange={(newDataType) => {
editItemDefinition(dt.itemDefinition["@_id"]!, (itemDefinition, items) => {
- itemDefinition.typeRef = { __$$text: newDataType };
if (itemDefinition.typeRef?.__$$text !== newDataType) {
itemDefinition.typeConstraint = undefined;
itemDefinition.allowedValues = undefined;
}
+ itemDefinition.typeRef = newDataType ? { __$$text: newDataType } : undefined;
});
}}
/>
@@ -640,7 +641,7 @@ export function ItemComponentsTable({
onClick={() =>
addItemComponent(parent.itemDefinition["@_id"]!, "push", {
"@_name": "New property",
- typeRef: { __$$text: DmnBuiltInDataType.Undefined },
+ typeRef: undefined,
})
}
style={{ paddingLeft: 0 }}
diff --git a/packages/dmn-editor/src/dataTypes/TypeRefLabel.tsx b/packages/dmn-editor/src/dataTypes/TypeRefLabel.tsx
index 124788860bb..7699bd3a0da 100644
--- a/packages/dmn-editor/src/dataTypes/TypeRefLabel.tsx
+++ b/packages/dmn-editor/src/dataTypes/TypeRefLabel.tsx
@@ -18,9 +18,9 @@
*/
import * as React from "react";
+import { useMemo } from "react";
import { DmnBuiltInDataType } from "@kie-tools/boxed-expression-component/dist/api";
import { buildFeelQNameFromXmlQName } from "../feel/buildFeelQName";
-import { useMemo } from "react";
import { buildXmlQName, parseXmlQName } from "@kie-tools/xml-parser-ts/dist/qNames";
import { useDmnEditorStore } from "../store/StoreContext";
import { getXmlNamespaceDeclarationName } from "../xml/xmlNamespaceDeclarations";
diff --git a/packages/dmn-editor/src/dataTypes/TypeRefSelector.tsx b/packages/dmn-editor/src/dataTypes/TypeRefSelector.tsx
index 42456e8b817..a0be25f0a88 100644
--- a/packages/dmn-editor/src/dataTypes/TypeRefSelector.tsx
+++ b/packages/dmn-editor/src/dataTypes/TypeRefSelector.tsx
@@ -32,12 +32,10 @@ import { Flex } from "@patternfly/react-core/dist/js/layouts/Flex";
import { useInViewSelect } from "../responsiveness/useInViewSelect";
import { useExternalModels } from "../includedModels/DmnEditorDependenciesContext";
-export type OnTypeRefChange = (newDataType: DmnBuiltInDataType) => void;
+export type OnTypeRefChange = (newDataType: string | undefined) => void;
export type OnCreateDataType = (newDataTypeName: string) => void;
export type OnToggle = (isExpanded: boolean) => void;
-export const typeRefSelectorLimitedSpaceStyle = { maxHeight: "600px", boxShadow: "none", overflowY: "scroll" };
-
export function TypeRefSelector({
zoom,
heightRef,
@@ -132,16 +130,16 @@ export function TypeRefSelector({
)}
<Select
toggleRef={toggleRef}
- className={!exists ? "kie-dmn-editor--type-ref-selector-invalid-value" : undefined}
+ className={!exists && typeRef ? "kie-dmn-editor--type-ref-selector-invalid-value" : undefined}
isDisabled={isDisabled}
variant={SelectVariant.typeahead}
typeAheadAriaLabel={DmnBuiltInDataType.Undefined}
onToggle={_onToggle}
onSelect={(e, v) => {
_onToggle(false);
- onChange(v as DmnBuiltInDataType);
+ onChange(v === DmnBuiltInDataType.Undefined ? undefined : (v as string));
}}
- selections={typeRef}
+ selections={typeRef ?? DmnBuiltInDataType.Undefined}
isOpen={isOpen}
aria-labelledby={"Data types selector"}
placeholderText={"Select a data type..."}
diff --git a/packages/dmn-editor/src/dataTypes/useResolvedTypeRef.ts b/packages/dmn-editor/src/dataTypes/useResolvedTypeRef.ts
index 58e4b2508ae..568c704eec8 100644
--- a/packages/dmn-editor/src/dataTypes/useResolvedTypeRef.ts
+++ b/packages/dmn-editor/src/dataTypes/useResolvedTypeRef.ts
@@ -28,7 +28,7 @@ export function useResolvedTypeRef(typeRef: string | undefined, relativeToNamesp
return useDmnEditorStore((s) => {
const thisDmnsNamespace = s.dmn.model.definitions["@_namespace"];
return resolveTypeRef({
- typeRef: typeRef || DmnBuiltInDataType.Undefined,
+ typeRef: typeRef,
namespace: relativeToNamespace || thisDmnsNamespace,
allTopLevelDataTypesByFeelName: s.computed(s).getDataTypes(externalModelsByNamespace)
.allTopLevelDataTypesByFeelName,
diff --git a/packages/dmn-editor/src/diagram/Diagram.tsx b/packages/dmn-editor/src/diagram/Diagram.tsx
index 504586968f4..6f91f452982 100644
--- a/packages/dmn-editor/src/diagram/Diagram.tsx
+++ b/packages/dmn-editor/src/diagram/Diagram.tsx
@@ -1251,7 +1251,7 @@ function DmnDiagramEmptyState({
const defaultExpression = getDefaultBoxedExpression({
logicType: "decisionTable",
allTopLevelDataTypesByFeelName: new Map(),
- typeRef: DmnBuiltInDataType.Undefined,
+ typeRef: undefined,
getDefaultColumnWidth,
widthsById: defaultWidthsById,
});
diff --git a/packages/dmn-editor/src/diagram/nodes/DataTypeNodePanel.tsx b/packages/dmn-editor/src/diagram/nodes/DataTypeNodePanel.tsx
index 599cc325ae7..1974ff2327d 100644
--- a/packages/dmn-editor/src/diagram/nodes/DataTypeNodePanel.tsx
+++ b/packages/dmn-editor/src/diagram/nodes/DataTypeNodePanel.tsx
@@ -45,10 +45,7 @@ export function DataTypeNodePanel(props: {
const { dmnEditorRootElementRef } = useDmnEditor();
- const resolvedTypeRef = useResolvedTypeRef(
- props.variable?.["@_typeRef"] ?? DmnBuiltInDataType.Undefined,
- props.dmnObjectNamespace
- );
+ const resolvedTypeRef = useResolvedTypeRef(props.variable?.["@_typeRef"], props.dmnObjectNamespace);
const isExternalNode = !!props.dmnObjectNamespace;
diff --git a/packages/dmn-editor/src/diagram/nodes/Nodes.tsx b/packages/dmn-editor/src/diagram/nodes/Nodes.tsx
index cf7a7240e6b..a5555e55e51 100644
--- a/packages/dmn-editor/src/diagram/nodes/Nodes.tsx
+++ b/packages/dmn-editor/src/diagram/nodes/Nodes.tsx
@@ -1475,7 +1475,7 @@ export function useDataTypeCreationCallbackForNodes(index: number, drgElementNam
drgElement.variable["@_typeRef"] = newDataTypeName;
const newItemDefinition = addTopLevelItemDefinition({
definitions: state.dmn.model.definitions,
- partial: { "@_name": newDataTypeName, typeRef: { __$$text: DmnBuiltInDataType.Undefined } },
+ partial: { "@_name": newDataTypeName, typeRef: undefined },
});
state.dataTypesEditor.activeItemDefinitionId = newItemDefinition["@_id"];
state.navigation.tab = DmnEditorTab.DATA_TYPES;
diff --git a/packages/dmn-editor/src/mutations/addConnectedNode.ts b/packages/dmn-editor/src/mutations/addConnectedNode.ts
index a001d008f15..4eab42d9e6e 100644
--- a/packages/dmn-editor/src/mutations/addConnectedNode.ts
+++ b/packages/dmn-editor/src/mutations/addConnectedNode.ts
@@ -62,7 +62,7 @@ export function addConnectedNode({
definitions.drgElement ??= [];
const variableBase = {
"@_id": generateUuid(),
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
};
definitions.drgElement?.push(
switchExpression(newNode.type as Exclude<NodeType, "node_group" | "node_textAnnotation" | "node_unknown">, {
diff --git a/packages/dmn-editor/src/mutations/addStandaloneNode.ts b/packages/dmn-editor/src/mutations/addStandaloneNode.ts
index 607ab2d1950..140d2203658 100644
--- a/packages/dmn-editor/src/mutations/addStandaloneNode.ts
+++ b/packages/dmn-editor/src/mutations/addStandaloneNode.ts
@@ -44,7 +44,7 @@ export function addStandaloneNode({
definitions.drgElement ??= [];
const variableBase = {
"@_id": generateUuid(),
- "@_typeRef": DmnBuiltInDataType.Undefined,
+ "@_typeRef": undefined,
};
definitions.drgElement?.push(
switchExpression(newNode.type as Exclude<NodeType, "node_group" | "node_textAnnotation" | "node_unknown">, {
diff --git a/packages/dmn-editor/src/mutations/updateExpression.ts b/packages/dmn-editor/src/mutations/updateExpression.ts
index 42e57febe92..b865919e921 100644
--- a/packages/dmn-editor/src/mutations/updateExpression.ts
+++ b/packages/dmn-editor/src/mutations/updateExpression.ts
@@ -46,7 +46,7 @@ export function updateExpression({
if (drgElement?.__$$element === "decision") {
drgElement.expression = expression;
- drgElement.variable!["@_typeRef"] = expression?.["@_typeRef"] ?? drgElement.variable!["@_typeRef"];
+ drgElement.variable!["@_typeRef"] = expression ? expression["@_typeRef"] : drgElement.variable!["@_typeRef"];
} else if (drgElement?.__$$element === "businessKnowledgeModel") {
if (expression.__$$element !== "functionDefinition") {
throw new Error("DMN MUTATION: Can't have an expression on a BKM that is not a Function.");
diff --git a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/DecisionTableInputHeaderCell.tsx b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/DecisionTableInputHeaderCell.tsx
index 1256d589102..45c5264818d 100644
--- a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/DecisionTableInputHeaderCell.tsx
+++ b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/DecisionTableInputHeaderCell.tsx
@@ -110,7 +110,7 @@ export function DecisionTableInputHeaderCell(props: {
<TypeRefField
isReadonly={props.isReadonly}
dmnEditorRootElementRef={dmnEditorRootElementRef}
- typeRef={inputExpression?.["@_typeRef"] ?? DmnBuiltInDataType.Undefined}
+ typeRef={inputExpression?.["@_typeRef"]}
onChange={(newTypeRef) =>
updater((dmnObject) => {
dmnObject.inputExpression ??= {};
diff --git a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/DecisionTableOutputHeaderCell.tsx b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/DecisionTableOutputHeaderCell.tsx
index 68a51490169..e9f95848732 100644
--- a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/DecisionTableOutputHeaderCell.tsx
+++ b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/DecisionTableOutputHeaderCell.tsx
@@ -119,7 +119,7 @@ export function DecisionTableOutputHeaderCell(props: {
alternativeFieldName={`${alternativeFieldName} Type`}
isReadonly={true}
dmnEditorRootElementRef={dmnEditorRootElementRef}
- typeRef={root?.["@_typeRef"] ?? DmnBuiltInDataType.Undefined}
+ typeRef={root?.["@_typeRef"]}
/>
</>
)}
@@ -139,7 +139,7 @@ export function DecisionTableOutputHeaderCell(props: {
alternativeFieldName={root?.output.length === 1 ? "Column Type" : undefined}
isReadonly={props.isReadonly}
dmnEditorRootElementRef={dmnEditorRootElementRef}
- typeRef={cell?.["@_typeRef"] ?? DmnBuiltInDataType.Undefined}
+ typeRef={cell?.["@_typeRef"]}
onChange={(newTypeRef) =>
updater((dmnObject) => {
dmnObject["@_typeRef"] = newTypeRef;
diff --git a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/Fields.tsx b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/Fields.tsx
index f38004f7f21..46dc505c15a 100644
--- a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/Fields.tsx
+++ b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/Fields.tsx
@@ -91,7 +91,7 @@ export function NameField(props: {
export function TypeRefField(props: {
alternativeFieldName?: string;
- typeRef: string;
+ typeRef?: string;
isReadonly: boolean;
dmnEditorRootElementRef: React.RefObject<HTMLElement>;
onChange?: (newTypeRef: string) => void;
diff --git a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/FunctionDefinitionParametersCell.tsx b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/FunctionDefinitionParametersCell.tsx
index f1c66238126..c2cd079791c 100644
--- a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/FunctionDefinitionParametersCell.tsx
+++ b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/FunctionDefinitionParametersCell.tsx
@@ -156,7 +156,7 @@ function FunctionDefinitionParameterTypeRef(props: {
<TypeRefField
isReadonly={props.isReadonly}
dmnEditorRootElementRef={dmnEditorRootElementRef}
- typeRef={props.parameter["@_typeRef"] ?? DmnBuiltInDataType.Undefined}
+ typeRef={props.parameter["@_typeRef"]}
onChange={props.onTypeRefChange}
/>
{itemDefinition && (
diff --git a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/InformationItemCell.tsx b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/InformationItemCell.tsx
index 8cc221a2232..82093453694 100644
--- a/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/InformationItemCell.tsx
+++ b/packages/dmn-editor/src/propertiesPanel/BoxedExpressionPropertiesPanelComponents/InformationItemCell.tsx
@@ -76,7 +76,7 @@ export function InformationItemCell(props: {
/>
<TypeRefField
isReadonly={props.isReadonly}
- typeRef={cell["@_typeRef"] ?? DmnBuiltInDataType.Undefined}
+ typeRef={cell["@_typeRef"]}
dmnEditorRootElementRef={dmnEditorRootElementRef}
onChange={props.onTypeRefChange}
/>
diff --git a/packages/dmn-editor/tests/e2e/drgElements/addBkm.spec.ts b/packages/dmn-editor/tests/e2e/drgElements/addBkm.spec.ts
index 03a858f2dcc..4b2eab15766 100644
--- a/packages/dmn-editor/tests/e2e/drgElements/addBkm.spec.ts
+++ b/packages/dmn-editor/tests/e2e/drgElements/addBkm.spec.ts
@@ -44,7 +44,6 @@ test.describe("Add node - BKM", () => {
variable: {
"@_id": bkm.variable?.["@_id"],
"@_name": DefaultNodeName.BKM,
- "@_typeRef": DataType.Undefined,
},
});
expect(await jsonModel.drd.getDrgElementBoundsOnDrd({ drgElementIndex: 0, drdIndex: 0 })).toEqual({
diff --git a/packages/dmn-editor/tests/e2e/drgElements/addDecision.spec.ts b/packages/dmn-editor/tests/e2e/drgElements/addDecision.spec.ts
index e4dd1156876..c9f835fc8d9 100644
--- a/packages/dmn-editor/tests/e2e/drgElements/addDecision.spec.ts
+++ b/packages/dmn-editor/tests/e2e/drgElements/addDecision.spec.ts
@@ -44,7 +44,6 @@ test.describe("Add node - Decision", () => {
variable: {
"@_id": decision.variable?.["@_id"],
"@_name": DefaultNodeName.DECISION,
- "@_typeRef": DataType.Undefined,
},
});
expect(await jsonModel.drd.getDrgElementBoundsOnDrd({ drgElementIndex: 0, drdIndex: 0 })).toEqual({
@@ -89,7 +88,6 @@ test.describe("Add node - Decision", () => {
variable: {
"@_id": inputData.variable?.["@_id"],
"@_name": DefaultNodeName.INPUT_DATA,
- "@_typeRef": DataType.Undefined,
},
});
const decision = await jsonModel.drgElements.getDecision({ drgElementIndex: 1, drdIndex: 0 });
@@ -108,7 +106,6 @@ test.describe("Add node - Decision", () => {
variable: {
"@_id": decision.variable?.["@_id"],
"@_name": DefaultNodeName.DECISION,
- "@_typeRef": DataType.Undefined,
},
});
});
diff --git a/packages/dmn-editor/tests/e2e/drgElements/addDecisionService.spec.ts b/packages/dmn-editor/tests/e2e/drgElements/addDecisionService.spec.ts
index 59b6437ec2b..58d8621ccb5 100644
--- a/packages/dmn-editor/tests/e2e/drgElements/addDecisionService.spec.ts
+++ b/packages/dmn-editor/tests/e2e/drgElements/addDecisionService.spec.ts
@@ -46,7 +46,6 @@ test.describe("Add node - Decision Service", () => {
variable: {
"@_id": decisionService.variable?.["@_id"],
"@_name": DefaultNodeName.DECISION_SERVICE,
- "@_typeRef": DataType.Undefined,
},
});
expect(await jsonModel.drd.getDrgElementBoundsOnDrd({ drgElementIndex: 0, drdIndex: 0 })).toEqual({
diff --git a/packages/dmn-editor/tests/e2e/drgElements/addInputData.spec.ts b/packages/dmn-editor/tests/e2e/drgElements/addInputData.spec.ts
index 1ceb8771677..8d53eb2d2ac 100644
--- a/packages/dmn-editor/tests/e2e/drgElements/addInputData.spec.ts
+++ b/packages/dmn-editor/tests/e2e/drgElements/addInputData.spec.ts
@@ -43,7 +43,6 @@ test.describe("Add node - Input Data", () => {
variable: {
"@_id": inputData.variable?.["@_id"],
"@_name": DefaultNodeName.INPUT_DATA,
- "@_typeRef": DataType.Undefined,
},
});
expect(await jsonModel.drd.getDrgElementBoundsOnDrd({ drgElementIndex: 0, drdIndex: 0 })).toEqual({
diff --git a/packages/stunner-editors-dmn-loader/src/types.ts b/packages/stunner-editors-dmn-loader/src/types.ts
index fb7413919de..8396f00cbf1 100644
--- a/packages/stunner-editors-dmn-loader/src/types.ts
+++ b/packages/stunner-editors-dmn-loader/src/types.ts
@@ -25,7 +25,7 @@ declare global {
// It requests to the GWT layer the default GwtExpressionDefinition given a selected logic type and a data type.
getDefaultExpressionDefinition: (
logicType: GwtExpressionDefinitionLogicType,
- dataType: string
+ dataType: string | undefined
) => GwtExpressionDefinition;
// It Navigates to "Data Type" tab page
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@kie.apache.org
For additional commands, e-mail: commits-help@kie.apache.org