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