Skip to content

Commit 97e26d7

Browse files
fix(consumption): Adding 'Invalid Parameter' message to Subgraph nodes (#4314)
* adding parameter error message to subgraph nodes * adjusting spacing to match current error messages * making small nodes bold
1 parent 6d49e0f commit 97e26d7

File tree

3 files changed

+54
-5
lines changed

3 files changed

+54
-5
lines changed

libs/designer-ui/src/lib/card/subgraphCard/index.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { ActionButtonV2 } from '../../actionbuttonv2';
22
import NodeCollapseToggle from '../../nodeCollapseToggle';
33
import { CardContextMenu } from '../cardcontextmenu';
4+
import { ErrorBanner } from '../errorbanner';
45
import { useCardContextMenu, useCardKeyboardInteraction } from '../hooks';
6+
import type { MessageBarType } from '@fluentui/react';
57
import { css } from '@fluentui/react';
68
import type { SubgraphType } from '@microsoft/logic-apps-shared';
79
import { SUBGRAPH_TYPES } from '@microsoft/logic-apps-shared';
@@ -20,6 +22,8 @@ interface SubgraphCardProps {
2022
onDeleteClick?(): void;
2123
showAddButton?: boolean;
2224
contextMenuItems?: JSX.Element[];
25+
errorLevel?: MessageBarType;
26+
errorMessage?: string;
2327
}
2428

2529
export const SubgraphCard: React.FC<SubgraphCardProps> = ({
@@ -34,6 +38,8 @@ export const SubgraphCard: React.FC<SubgraphCardProps> = ({
3438
onClick,
3539
onDeleteClick,
3640
contextMenuItems = [],
41+
errorLevel,
42+
errorMessage,
3743
}) => {
3844
const intl = useIntl();
3945

@@ -120,7 +126,8 @@ export const SubgraphCard: React.FC<SubgraphCardProps> = ({
120126
onKeyDown={keyboardInteraction.keyUp}
121127
onKeyUp={keyboardInteraction.keyDown}
122128
>
123-
{data.title}
129+
<div className="msla-subgraph-title-text">{data.title}</div>
130+
{errorMessage ? <ErrorBanner errorLevel={errorLevel} errorMessage={errorMessage} /> : null}
124131
</button>
125132
<NodeCollapseToggle collapsed={collapsed} handleCollapse={handleCollapse} />
126133
{contextMenuItems?.length > 0 ? (
@@ -148,7 +155,7 @@ export const SubgraphCard: React.FC<SubgraphCardProps> = ({
148155
onKeyUp={keyboardInteraction.keyDown}
149156
>
150157
<div className={css('msla-selection-box', 'white-outline', selected && 'selected')} tabIndex={-1} />
151-
<div className="msla-subgraph-title">{data.title}</div>
158+
<div className="msla-subgraph-title msla-subgraph-title-text">{data.title}</div>
152159
<NodeCollapseToggle disabled collapsed={collapsed} onSmallCard />
153160
</div>
154161
</div>

libs/designer-ui/src/lib/card/subgraphCard/subgraphCard.less

+29-2
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,38 @@
3232
color: white;
3333
flex-grow: 1;
3434
align-self: center;
35-
display: inline-block;
36-
font: 14px/20px normal @semibold-font-family;
35+
display: flex;
36+
flex-direction: column;
37+
align-items: flex-start;
3738
text-align: left;
3839
word-break: break-word;
3940
padding: 4px 8px;
4041
background-color: var(--brand-color, black);
4142
}
43+
44+
.msla-subgraph-title-text {
45+
font: 14px/20px normal @semibold-font-family;
46+
}
47+
.msla-panel-card-error-wrapper {
48+
width: 100%;
49+
margin-left: 0%;
50+
}
51+
.msla-panel-card-error {
52+
margin: 8px 0px 0px;
53+
text-align: left;
54+
display: flex;
55+
align-items: center;
56+
gap: 4px;
57+
58+
.msla-panel-card-error-text {
59+
margin: 0px;
60+
white-space: nowrap;
61+
overflow: hidden;
62+
text-overflow: ellipsis;
63+
}
64+
65+
&.severeWarning {
66+
color: #ffffff;
67+
}
68+
}
4269
}

libs/designer/src/lib/ui/CustomNodes/SubgraphCardNode.tsx

+16-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { initializeSwitchCaseFromManifest } from '../../core/actions/bjsworkflow
55
import { getOperationManifest } from '../../core/queries/operation';
66
import { useMonitoringView, useReadOnly } from '../../core/state/designerOptions/designerOptionsSelectors';
77
import { setShowDeleteModal } from '../../core/state/designerView/designerViewSlice';
8-
import { useIconUri } from '../../core/state/operation/operationSelector';
8+
import { useIconUri, useParameterValidationErrors } from '../../core/state/operation/operationSelector';
99
import { useIsNodeSelected } from '../../core/state/panel/panelSelectors';
1010
import { changePanelNode, setSelectedNodeId } from '../../core/state/panel/panelSlice';
1111
import {
@@ -21,6 +21,7 @@ import { addSwitchCase, setFocusNode, toggleCollapsedGraphId } from '../../core/
2121
import { LoopsPager } from '../common/LoopsPager/LoopsPager';
2222
import { DropZone } from '../connections/dropzone';
2323
import { DeleteMenuItem } from '../menuItems/deleteMenuItem';
24+
import { MessageBarType } from '@fluentui/react';
2425
import { SubgraphCard } from '@microsoft/designer-ui';
2526
import { SUBGRAPH_TYPES, removeIdTag } from '@microsoft/logic-apps-shared';
2627
import { memo, useCallback, useMemo } from 'react';
@@ -104,6 +105,18 @@ const SubgraphCardNode = ({ data, targetPosition = Position.Top, sourcePosition
104105
[deleteClick, metadata?.subgraphType]
105106
);
106107

108+
const parameterValidationErrors = useParameterValidationErrors(subgraphId);
109+
const parameterValidationErrorText = intl.formatMessage({
110+
defaultMessage: 'Invalid parameters',
111+
description: 'Text to explain that there are invalid parameters for this node',
112+
});
113+
114+
const { errorMessage, errorLevel } = useMemo(() => {
115+
if (parameterValidationErrors?.length > 0)
116+
return { errorMessage: parameterValidationErrorText, errorLevel: MessageBarType.severeWarning };
117+
return { errorMessage: undefined, errorLevel: undefined };
118+
}, [parameterValidationErrors?.length, parameterValidationErrorText]);
119+
107120
return (
108121
<div>
109122
<div style={{ display: 'flex', alignItems: 'center' }}>
@@ -122,6 +135,8 @@ const SubgraphCardNode = ({ data, targetPosition = Position.Top, sourcePosition
122135
collapsed={graphCollapsed}
123136
handleCollapse={handleGraphCollapse}
124137
contextMenuItems={contextMenuItems}
138+
errorLevel={errorLevel}
139+
errorMessage={errorMessage}
125140
/>
126141
{isMonitoringView && normalizedType === constants.NODE.TYPE.UNTIL ? (
127142
<LoopsPager metadata={metadata} scopeId={subgraphId} collapsed={graphCollapsed} />

0 commit comments

Comments
 (0)