From 70d35d0cca1e814efa97795a994c990a79db5fef Mon Sep 17 00:00:00 2001 From: "russi.sinha" Date: Mon, 9 Sep 2024 10:20:48 -0400 Subject: [PATCH 1/3] fix(Tooltip): Add closeOnClick input to pass to Tooltip --- .../src/elements/tooltip/Tooltip.directive.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/projects/novo-elements/src/elements/tooltip/Tooltip.directive.ts b/projects/novo-elements/src/elements/tooltip/Tooltip.directive.ts index 5248c00d9..ba58c0ae9 100644 --- a/projects/novo-elements/src/elements/tooltip/Tooltip.directive.ts +++ b/projects/novo-elements/src/elements/tooltip/Tooltip.directive.ts @@ -38,6 +38,8 @@ export class TooltipDirective implements OnDestroy, OnInit { autoPosition: boolean = true; @Input('tooltipIsHTML') isHTML: boolean; + @Input('tooltipCloseOnClick') + closeOnClick: boolean; private tooltipInstance: NovoTooltip | null; private portal: ComponentPortal; @@ -71,6 +73,14 @@ export class TooltipDirective implements OnDestroy, OnInit { } } + @HostListener('click') + onclick(): void { + if (this.overlayRef && !this.always && this.closeOnClick) { + this.hide(); + this.overlayRef.dispose(); + } + } + ngOnInit(): void { if (this.tooltip && this.always && this.active) { this.show(); From 815fa181ca55c1a2e7fba4b17b96293277ee1e67 Mon Sep 17 00:00:00 2001 From: "russi.sinha" Date: Mon, 9 Sep 2024 11:43:59 -0400 Subject: [PATCH 2/3] fix(Tooltip): Add default value for closeOnClick --- .../novo-elements/src/elements/tooltip/Tooltip.directive.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/novo-elements/src/elements/tooltip/Tooltip.directive.ts b/projects/novo-elements/src/elements/tooltip/Tooltip.directive.ts index ba58c0ae9..b106f147e 100644 --- a/projects/novo-elements/src/elements/tooltip/Tooltip.directive.ts +++ b/projects/novo-elements/src/elements/tooltip/Tooltip.directive.ts @@ -39,7 +39,7 @@ export class TooltipDirective implements OnDestroy, OnInit { @Input('tooltipIsHTML') isHTML: boolean; @Input('tooltipCloseOnClick') - closeOnClick: boolean; + closeOnClick: boolean = false; private tooltipInstance: NovoTooltip | null; private portal: ComponentPortal; From f8a20b5ec8126c804f271266a1cdbb8ac05dae29 Mon Sep 17 00:00:00 2001 From: "russi.sinha" Date: Tue, 10 Sep 2024 12:14:06 -0400 Subject: [PATCH 3/3] fix(Tooltip): add unit tests for tooltip onClick --- .../src/elements/tooltip/Tooltip.spec.ts | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/projects/novo-elements/src/elements/tooltip/Tooltip.spec.ts b/projects/novo-elements/src/elements/tooltip/Tooltip.spec.ts index d735565de..0981abb0e 100644 --- a/projects/novo-elements/src/elements/tooltip/Tooltip.spec.ts +++ b/projects/novo-elements/src/elements/tooltip/Tooltip.spec.ts @@ -4,16 +4,19 @@ import { Component } from '@angular/core'; import { async, TestBed } from '@angular/core/testing'; // App import { TooltipDirective } from './Tooltip.directive'; +import { By } from '@angular/platform-browser'; @Component({ selector: 'test-component', - template: `
`, + template: `
+
`, }) class TestComponent {} describe('Elements: TooltipDirective', () => { let fixture; let component; + let tooltipHost; beforeEach(async(() => { TestBed.configureTestingModule({ @@ -22,9 +25,31 @@ describe('Elements: TooltipDirective', () => { }).compileComponents(); fixture = TestBed.createComponent(TestComponent); component = fixture.debugElement.componentInstance; + tooltipHost = fixture.debugElement.queryAll(By.directive(TooltipDirective)) })); it('should initialize with defaults', () => { expect(component).toBeDefined(); }); + + describe('function: onclick', () => { + it('should not close tooltip on click', async() => { + tooltipHost[0].triggerEventHandler('mouseenter'); + fixture.detectChanges(); + expect(fixture.debugElement.query(By.css('novo-tooltip'))).toBeTruthy(); + tooltipHost[0].triggerEventHandler('click'); + fixture.detectChanges(); + expect(fixture.debugElement.query(By.css('novo-tooltip'))).toBeTruthy(); + }); + + it('should close tooltip on click', async() => { + tooltipHost[1].triggerEventHandler('mouseenter'); + fixture.detectChanges(); + expect(fixture.debugElement.query(By.css('novo-tooltip'))).toBeTruthy(); + tooltipHost[1].triggerEventHandler('click') + fixture.detectChanges(); + expect(fixture.debugElement.query(By.css('novo-tooltip'))).toBeFalsy(); + }); + }); + });