Skip to content

Commit decf41d

Browse files
authored
fix(grid-pinning): remove hide call in scrollToRow - 20.1.x (#16780)
1 parent 325b5a3 commit decf41d

5 files changed

Lines changed: 60 additions & 7 deletions

File tree

projects/igniteui-angular-elements/src/analyzer/elements.config.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ import { IgxColumnLayoutComponent } from "../../../igniteui-angular/src/lib/grid
1818
import { IgxGridToolbarExporterComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-exporter.component";
1919
import { IgxGridToolbarHidingComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-hiding.component";
2020
import { IgxGridToolbarPinningComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-pinning.component";
21-
import { IgxRowIslandComponent } from "../../../igniteui-angular/src/lib/grids/hierarchical-grid/row-island.component";
2221
import { IgxActionStripComponent } from "../../../igniteui-angular/src/lib/action-strip/action-strip.component";
2322
import { IgxActionStripToken } from "../../../igniteui-angular/src/lib/action-strip/token";
24-
import { IgxGridEditingActionsComponent } from "../../../igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component";
25-
import { IgxGridActionsBaseDirective } from "../../../igniteui-angular/src/lib/action-strip/grid-actions/grid-actions-base.directive";
2623
import { IgxGridPinningActionsComponent } from "../../../igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component";
24+
import { IgxGridActionsBaseDirective } from "../../../igniteui-angular/src/lib/action-strip/grid-actions/grid-actions-base.directive";
25+
import { IgxRowIslandComponent } from "../../../igniteui-angular/src/lib/grids/hierarchical-grid/row-island.component";
26+
import { IgxGridEditingActionsComponent } from "../../../igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component";
2727
import { IgxGridStateComponent } from "../lib/state.component";
2828

2929
export const registerComponents = [

projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,26 @@ describe('igxGridPinningActions #grid ', () => {
7171
const secondToLastVisible = grid.rowList.toArray()[grid.rowList.length - 2];
7272
expect(secondToLastVisible.key).toEqual('FAMIA');
7373
});
74+
75+
it('should not hide action strip in base mode when scrollToRow is invoked', () => {
76+
grid.pinRow('FAMIA');
77+
fixture.detectChanges();
78+
79+
const pinnedRow = grid.pinnedRows[0];
80+
actionStrip.show(pinnedRow);
81+
fixture.detectChanges();
82+
83+
const pinningActions = fixture.debugElement.query(By.directive(IgxGridPinningActionsComponent))
84+
.componentInstance as IgxGridPinningActionsComponent;
85+
spyOn<any>(grid, 'scrollTo');
86+
87+
pinningActions.scrollToRow(null);
88+
fixture.detectChanges();
89+
90+
expect((grid as any).scrollTo).toHaveBeenCalledWith(pinnedRow.data, 0);
91+
expect(actionStrip.hidden).toBeFalse();
92+
expect(actionStrip.context).toBe(pinnedRow);
93+
});
7494
});
7595

7696
describe('Menu ', () => {

projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,10 @@ export class IgxGridPinningActionsComponent extends IgxGridActionsBaseDirective
125125
const context = this.strip.context;
126126
const grid = context.grid;
127127
grid.scrollTo(context.data, 0);
128-
this.strip.hide();
128+
129+
if (this.asMenuItems) {
130+
this.strip.hide();
131+
}
129132
}
130133

131134
private registerSVGIcons(): void {

projects/igniteui-angular/src/lib/action-strip/token.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import { QueryList } from '@angular/core';
12
import { OverlaySettings } from '../services/public_api';
3+
import { IgxGridActionsBaseDirective } from './grid-actions/grid-actions-base.directive';
24

35
/* csSuppress */
46
/** @hidden @internal */
57
export abstract class IgxActionStripToken {
68
public abstract context: any;
79
public abstract menuOverlaySettings: OverlaySettings;
10+
public abstract actionButtons: QueryList<IgxGridActionsBaseDirective>;
811
public abstract get hideOnRowLeave(): boolean;
912

1013
public abstract show(context?: any): void;

projects/igniteui-angular/src/lib/grids/grid-base.directive.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ import { getCurrentResourceStrings } from '../core/i18n/resources';
186186
import { isTree, recreateTree, recreateTreeFromFields } from '../data-operations/expressions-tree-util';
187187
import { getUUID } from './common/random';
188188
import { DefaultMergeStrategy, IGridMergeStrategy } from '../data-operations/merge-strategy';
189+
import { IgxGridPinningActionsComponent } from '../action-strip/grid-actions/grid-pinning-actions.component';
189190

190191
interface IMatchInfoCache {
191192
row: any;
@@ -7838,9 +7839,18 @@ export abstract class IgxGridBaseDirective implements GridType,
78387839
this.disableTransitions = false;
78397840

78407841
this.hideOverlays();
7841-
this.actionStrip?.hide();
7842-
if (this.actionStrip) {
7843-
this.actionStrip.context = null;
7842+
const context = this.actionStrip?.context;
7843+
const contextEl = context?.element?.nativeElement as HTMLElement;
7844+
const keepActionStrip =
7845+
!!context?.pinned &&
7846+
!!contextEl?.isConnected &&
7847+
!this.hasMenuPinningActions();
7848+
7849+
if (!keepActionStrip) {
7850+
if (this.actionStrip) {
7851+
this.actionStrip.hide();
7852+
this.actionStrip.context = null;
7853+
}
78447854
}
78457855
const args: IGridScrollEventArgs = {
78467856
direction: 'vertical',
@@ -7850,6 +7860,23 @@ export abstract class IgxGridBaseDirective implements GridType,
78507860
this.gridScroll.emit(args);
78517861
}
78527862

7863+
protected hasMenuPinningActions(): boolean {
7864+
const strip = this.actionStrip;
7865+
const actionButtons = strip?.actionButtons;
7866+
7867+
if (!actionButtons?.length) {
7868+
return false;
7869+
}
7870+
7871+
return actionButtons
7872+
.toArray()
7873+
.some(
7874+
(button) =>
7875+
button instanceof IgxGridPinningActionsComponent &&
7876+
button.asMenuItems
7877+
);
7878+
}
7879+
78537880
protected horizontalScrollHandler(event) {
78547881
const scrollLeft = event.target.scrollLeft;
78557882
this.headerContainer.onHScroll(scrollLeft);

0 commit comments

Comments
 (0)