-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathCustomNodeContainer.tsx
More file actions
83 lines (79 loc) · 2.54 KB
/
CustomNodeContainer.tsx
File metadata and controls
83 lines (79 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import { Layers } from '@carbon/icons-react';
import { Icon } from '@patternfly/react-core';
import { BanIcon } from '@patternfly/react-icons';
import clsx from 'clsx';
import { ElementType, FunctionComponent, Ref } from 'react';
import { IVisualizationNode } from '../../../../models';
import { FloatingCircle } from '../FloatingCircle/FloatingCircle';
export interface CustomNodeContainerProps {
width: number;
height: number;
dataNodelabel?: string;
foreignObjectRef?: Ref<SVGForeignObjectElement>;
transform?: string;
dataTestId: string;
containerClassNames?: Record<string, boolean>;
vizNode: IVisualizationNode;
isCollapsed: boolean;
childCount: number;
hasGroupChildren?: boolean;
ProcessorIcon: ElementType | null;
processorDescription: string;
isDisabled: boolean;
}
export const CustomNodeContainer: FunctionComponent<CustomNodeContainerProps> = ({
width,
height,
dataNodelabel,
foreignObjectRef,
transform,
dataTestId,
containerClassNames = {},
vizNode,
isCollapsed,
childCount,
hasGroupChildren,
ProcessorIcon,
processorDescription,
isDisabled,
}) => (
<foreignObject
data-nodelabel={dataNodelabel}
width={width}
height={height}
ref={foreignObjectRef}
{...(transform !== undefined && { transform })}
>
<div data-testid={dataTestId} className={clsx('custom-node__container', containerClassNames)}>
<div title={vizNode.data.description} className="custom-node__container__image">
<img src={vizNode.data.iconUrl} alt={vizNode.data.description?.trim() || (vizNode.data.iconAlt as string)} />
{isCollapsed && childCount > 0 && (
<FloatingCircle
className={clsx('step-icon step-icon__processor', { 'step-icon-collection': hasGroupChildren })}
>
{hasGroupChildren && (
<Icon size="sm" aria-label="contains nested collections">
<Layers />
</Icon>
)}
<span title={`${childCount}`}>{childCount}</span>
</FloatingCircle>
)}
{ProcessorIcon && (
<FloatingCircle className="step-icon step-icon__processor">
<Icon status="info" size="lg">
<ProcessorIcon title={processorDescription} />
</Icon>
</FloatingCircle>
)}
{isDisabled && (
<FloatingCircle className="step-icon step-icon__disabled">
<Icon status="danger" size="lg">
<BanIcon />
</Icon>
</FloatingCircle>
)}
</div>
</div>
</foreignObject>
);