From aef8dd875c4f17c988f6fd82864ae820d00ee1ac Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Wed, 21 Jan 2026 15:43:08 +0200 Subject: [PATCH 1/5] fix(grid-pinning): remove hide call in scrollToRow --- .../action-strip/grid-actions/grid-pinning-actions.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts index 86c19ba569d..afbb9f3a2db 100644 --- a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts +++ b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts @@ -125,7 +125,6 @@ export class IgxGridPinningActionsComponent extends IgxGridActionsBaseDirective const context = this.strip.context; const grid = context.grid; grid.scrollTo(context.data, 0); - this.strip.hide(); } private registerSVGIcons(): void { From 7a40bcfbd72b11985cc2bebb8923de7d692d0c02 Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Mon, 2 Feb 2026 15:00:36 +0200 Subject: [PATCH 2/5] fix(grid-pinning): hide action strip menu after scrolling to row --- .../grid-actions/grid-pinning-actions.component.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts index afbb9f3a2db..861c81aa8a6 100644 --- a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts +++ b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts @@ -125,6 +125,10 @@ export class IgxGridPinningActionsComponent extends IgxGridActionsBaseDirective const context = this.strip.context; const grid = context.grid; grid.scrollTo(context.data, 0); + + if (this.asMenuItems) { + this.strip.hide(); + } } private registerSVGIcons(): void { From d9c7b5c0e46c204ee26b5e8dd63430c69fa67f6c Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Mon, 16 Feb 2026 13:15:06 +0200 Subject: [PATCH 3/5] fix(grid): improve action strip visibility logic during scrolling --- .../src/lib/grids/grid-base.directive.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts index deed620217e..527e4189156 100644 --- a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts +++ b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts @@ -7820,9 +7820,18 @@ export abstract class IgxGridBaseDirective implements GridType, this.disableTransitions = false; this.hideOverlays(); - this.actionStrip?.hide(); - if (this.actionStrip) { - this.actionStrip.context = null; + const context = this.actionStrip?.context; + const contextEl = context?.element?.nativeElement as HTMLElement; + const keepActionStrip = + !!context?.pinned && + !!contextEl?.isConnected && + !!contextEl?.matches?.(':hover'); + + if (!keepActionStrip) { + this.actionStrip?.hide(); + if (this.actionStrip) { + this.actionStrip.context = null; + } } const args: IGridScrollEventArgs = { direction: 'vertical', From ad4ee5afe56dde1ce0c7b30ef2bace8eddfa6e68 Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Tue, 10 Mar 2026 14:38:57 +0200 Subject: [PATCH 4/5] test(grid): enhance action strip visibility tests for pinned rows --- .../grid-pinning-actions.component.spec.ts | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts index 3bf7db5b94d..c270ac90aff 100644 --- a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts +++ b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts @@ -71,6 +71,52 @@ describe('igxGridPinningActions #grid ', () => { const secondToLastVisible = grid.rowList.toArray()[grid.rowList.length - 2]; expect(secondToLastVisible.key).toEqual('FAMIA'); }); + + it('should keep action strip visible and preserve context when jumping from hovered pinned row', async () => { + grid.pinRow('FAMIA'); + fixture.detectChanges(); + + const pinnedRow = grid.pinnedRows[0]; + actionStrip.show(pinnedRow); + fixture.detectChanges(); + + const initialContext = actionStrip.context; + const contextElement = initialContext.element.nativeElement as HTMLElement; + spyOn(contextElement, 'matches').and.callFake((selector: string) => + selector === ':hover' ? true : HTMLElement.prototype.matches.call(contextElement, selector) + ); + + const pinningButtons = fixture.debugElement.queryAll(By.css(`igx-grid-pinning-actions button`)); + const jumpButton = pinningButtons[0]; + jumpButton.triggerEventHandler('click', new Event('click')); + await wait(); + fixture.detectChanges(); + await wait(DEBOUNCETIME); + fixture.detectChanges(); + + expect(actionStrip.hidden).toBeFalse(); + expect(actionStrip.context).toBe(initialContext); + }); + + it('should not hide action strip in base mode when scrollToRow is invoked', () => { + grid.pinRow('FAMIA'); + fixture.detectChanges(); + + const pinnedRow = grid.pinnedRows[0]; + actionStrip.show(pinnedRow); + fixture.detectChanges(); + + const pinningActions = fixture.debugElement.query(By.directive(IgxGridPinningActionsComponent)) + .componentInstance as IgxGridPinningActionsComponent; + spyOn(grid, 'scrollTo'); + + pinningActions.scrollToRow(null); + fixture.detectChanges(); + + expect((grid as any).scrollTo).toHaveBeenCalledWith(pinnedRow.data, 0); + expect(actionStrip.hidden).toBeFalse(); + expect(actionStrip.context).toBe(pinnedRow); + }); }); describe('Menu ', () => { @@ -94,6 +140,25 @@ describe('igxGridPinningActions #grid ', () => { fixture.detectChanges(); expect(grid.pinnedRows.length).toBe(1); }); + + it('should hide action strip in menu mode when scrollToRow is invoked', () => { + grid.pinRow('FAMIA'); + fixture.detectChanges(); + + const pinnedRow = grid.pinnedRows[0]; + actionStrip.show(pinnedRow); + fixture.detectChanges(); + + const pinningActions = fixture.debugElement.query(By.directive(IgxGridPinningActionsComponent)) + .componentInstance as IgxGridPinningActionsComponent; + spyOn(grid, 'scrollTo'); + + pinningActions.scrollToRow(null); + fixture.detectChanges(); + + expect((grid as any).scrollTo).toHaveBeenCalledWith(pinnedRow.data, 0); + expect(actionStrip.hidden).toBeTrue(); + }); }); }); From b57fcd04e8361784b6e8c0f8b085705a87b8ee03 Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Tue, 10 Mar 2026 17:13:33 +0200 Subject: [PATCH 5/5] fix(grid): adjust debounce time in pinning actions test --- .../grid-actions/grid-pinning-actions.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts index c270ac90aff..d5dce6c01cc 100644 --- a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts +++ b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts @@ -91,7 +91,7 @@ describe('igxGridPinningActions #grid ', () => { jumpButton.triggerEventHandler('click', new Event('click')); await wait(); fixture.detectChanges(); - await wait(DEBOUNCETIME); + await wait(60); fixture.detectChanges(); expect(actionStrip.hidden).toBeFalse();