Skip to content

Commit aa11d9f

Browse files
committed
2003 - add Portal around HoverCardContent to ensure it is always on top of the layer stack
1 parent 7d44d1e commit aa11d9f

File tree

1 file changed

+22
-14
lines changed

1 file changed

+22
-14
lines changed

client/src/pages/platform/workflow-editor/nodes/WorkflowNode.tsx

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import WorkflowNodesPopoverMenu from '@/pages/platform/workflow-editor/component
44
import {useWorkflowMutation} from '@/pages/platform/workflow-editor/providers/workflowMutationProvider';
55
import {useGetWorkflowNodeDescriptionQuery} from '@/shared/queries/platform/workflowNodeDescriptions.queries';
66
import {NodeDataType} from '@/shared/types';
7-
import {HoverCard} from '@radix-ui/react-hover-card';
7+
import {HoverCard, HoverCardPortal} from '@radix-ui/react-hover-card';
88
import {useQueryClient} from '@tanstack/react-query';
99
import {Handle, Position} from '@xyflow/react';
1010
import {PencilIcon, TrashIcon} from 'lucide-react';
@@ -87,6 +87,7 @@ const WorkflowNode = ({data, id}: {data: NodeDataType; id: string}) => {
8787
)}
8888

8989
<HoverCard
90+
key={id}
9091
onOpenChange={(open) => {
9192
if (open) {
9293
setHoveredNodeName(data.name);
@@ -98,7 +99,7 @@ const WorkflowNode = ({data, id}: {data: NodeDataType; id: string}) => {
9899
<HoverCardTrigger>
99100
<Button
100101
className={twMerge(
101-
'h-18 w-18 rounded-md border-2 border-gray-300 bg-white p-4 shadow hover:border-blue-200 hover:bg-blue-200 hover:shadow-none [&_svg]:size-9',
102+
'size-18 rounded-md border-2 border-gray-300 bg-white p-4 shadow hover:border-blue-200 hover:bg-blue-200 hover:shadow-none [&_svg]:size-9',
102103
isSelected && workflowNodeDetailsPanelOpen && 'border-blue-300 bg-blue-100 shadow-none'
103104
)}
104105
onClick={handleNodeClick}
@@ -107,18 +108,25 @@ const WorkflowNode = ({data, id}: {data: NodeDataType; id: string}) => {
107108
</Button>
108109
</HoverCardTrigger>
109110

110-
<HoverCardContent className="w-fit min-w-72 max-w-[601px] text-sm" side="right">
111-
{workflowNodeDescription?.description && (
112-
<div
113-
className="flex"
114-
dangerouslySetInnerHTML={{
115-
__html: sanitize(workflowNodeDescription.description, {
116-
allowedAttributes: {div: ['class'], table: ['class'], td: ['class'], tr: ['class']},
117-
}),
118-
}}
119-
/>
120-
)}
121-
</HoverCardContent>
111+
<HoverCardPortal>
112+
<HoverCardContent className="w-fit min-w-72 max-w-xl text-sm" side="right">
113+
{workflowNodeDescription?.description && (
114+
<div
115+
className="flex"
116+
dangerouslySetInnerHTML={{
117+
__html: sanitize(workflowNodeDescription.description, {
118+
allowedAttributes: {
119+
div: ['class'],
120+
table: ['class'],
121+
td: ['class'],
122+
tr: ['class'],
123+
},
124+
}),
125+
}}
126+
/>
127+
)}
128+
</HoverCardContent>
129+
</HoverCardPortal>
122130
</HoverCard>
123131

124132
<div className="ml-2 flex w-full min-w-max flex-col items-start">

0 commit comments

Comments
 (0)