Skip to content

Commit 3249de7

Browse files
author
Patricio Albizu
committed
fix: modify bounding element
1 parent 0866634 commit 3249de7

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

projects/observability/src/shared/components/topology/renderers/tooltip/topology-tooltip-popover.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ export class TopologyTooltipPopover implements TopologyTooltip {
2020
private readonly injector: Injector,
2121
private readonly popoverService: PopoverService
2222
) {
23-
this.popoverSubject = new BehaviorSubject(this.buildPopover(false));
23+
this.popoverSubject = new BehaviorSubject(this.buildPopover(null, false));
2424
this.hidden$ = this.popoverSubject.pipe(switchMap(popover => merge(popover.hidden$, popover.closed$)));
2525
}
2626

2727
public showWithNodeData(node: TopologyNode, options: TopologyTooltipOptions = {}): void {
28-
this.rebuildPopoverIfNeeded(options);
28+
this.rebuildPopoverIfNeeded(node, options);
2929
this.dataSubject.next({
3030
type: 'node',
3131
node: node,
@@ -35,7 +35,7 @@ export class TopologyTooltipPopover implements TopologyTooltip {
3535
}
3636

3737
public showWithEdgeData(edge: TopologyEdge, options: TopologyTooltipOptions = {}): void {
38-
this.rebuildPopoverIfNeeded(options);
38+
this.rebuildPopoverIfNeeded(edge, options);
3939
this.dataSubject.next({
4040
type: 'edge',
4141
edge: edge,
@@ -54,17 +54,17 @@ export class TopologyTooltipPopover implements TopologyTooltip {
5454
this.popoverSubject.complete();
5555
}
5656

57-
private rebuildPopoverIfNeeded(options: TopologyTooltipOptions): void {
57+
private rebuildPopoverIfNeeded(node: TopologyNode | TopologyEdge, options: TopologyTooltipOptions): void {
5858
const modal = !!options.modal;
5959
if (modal === this.popover.hasBackdrop()) {
6060
return;
6161
}
6262

6363
this.popover.close(); // Close existing popover
64-
this.popoverSubject.next(this.buildPopover(modal));
64+
this.popoverSubject.next(this.buildPopover(node, modal));
6565
}
6666

67-
private buildPopover(modal: boolean): PopoverRef {
67+
private buildPopover(node: any, modal: boolean): PopoverRef {
6868
const popover = this.popoverService.drawPopover({
6969
componentOrTemplate: this.tooltipDefinition.class,
7070
position: {
@@ -81,11 +81,27 @@ export class TopologyTooltipPopover implements TopologyTooltip {
8181

8282
popover.updatePositionStrategy({
8383
type: PopoverPositionType.FollowMouse,
84-
boundingElement: this.container.nativeElement,
84+
boundingElement: this.getElementContainer(node?.data?.name, modal),
8585
offsetX: 50,
8686
offsetY: 30
8787
});
8888

8989
return popover;
9090
}
91+
92+
private getElementContainer(textContent: string = '', modal: boolean): HTMLElement {
93+
if (!modal) {
94+
return this.container.nativeElement;
95+
}
96+
97+
if (textContent) {
98+
return (
99+
Array.from(this.container.nativeElement.querySelector('.topology-data').children as HTMLCollection).find(
100+
el => el.querySelector('text')?.textContent === textContent
101+
) ?? this.container.nativeElement
102+
);
103+
} else {
104+
return this.container.nativeElement.querySelector('.topology-data .emphasized');
105+
}
106+
}
91107
}

0 commit comments

Comments
 (0)