From 934398e2c74d11be8c8905b2cf42de3caeb97b5a Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Wed, 21 Jan 2026 15:43:08 +0200 Subject: [PATCH 1/4] fix(grid-pinning): remove hide call in scrollToRow --- .../core/src/grid-actions/grid-pinning-actions.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts b/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts index 5ea7dfe006b..61f76a18649 100644 --- a/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts +++ b/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts @@ -126,7 +126,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 063099469a586bd3b6d7b36f1632f55499821709 Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Mon, 2 Feb 2026 15:00:36 +0200 Subject: [PATCH 2/4] fix(grid-pinning): hide action strip menu after scrolling to row --- .../core/src/grid-actions/grid-pinning-actions.component.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts b/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts index 61f76a18649..9ade780ecb0 100644 --- a/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts +++ b/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts @@ -126,6 +126,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 950f339fa6940c48e5f4ce5914aa9e094a5a78a4 Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Mon, 16 Feb 2026 13:15:06 +0200 Subject: [PATCH 3/4] fix(grid): improve action strip visibility logic during scrolling --- .../grids/grid/src/grid-base.directive.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/projects/igniteui-angular/grids/grid/src/grid-base.directive.ts b/projects/igniteui-angular/grids/grid/src/grid-base.directive.ts index e0eaf8817cb..4c028f901b0 100644 --- a/projects/igniteui-angular/grids/grid/src/grid-base.directive.ts +++ b/projects/igniteui-angular/grids/grid/src/grid-base.directive.ts @@ -7792,9 +7792,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 aadf155159fa1a810334a84696e95d5957ba49aa Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Tue, 10 Mar 2026 14:38:57 +0200 Subject: [PATCH 4/4] 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/grids/core/src/grid-actions/grid-pinning-actions.component.spec.ts b/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.spec.ts index a29a9c8121d..a9f8f23a856 100644 --- a/projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.spec.ts +++ b/projects/igniteui-angular/grids/core/src/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(); + }); }); });