Skip to content

Commit 500cbe8

Browse files
authored
fix(igxSplitter): Assign pane props after zone is stable. (#15888)
1 parent a8968c0 commit 500cbe8

File tree

3 files changed

+42
-9
lines changed

3 files changed

+42
-9
lines changed

projects/igniteui-angular/src/lib/splitter/splitter-pane/splitter-pane.component.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, HostBinding, Input, ElementRef, Output, EventEmitter, booleanAttribute } from '@angular/core';
1+
import { Component, HostBinding, Input, ElementRef, Output, EventEmitter, booleanAttribute, signal } from '@angular/core';
22

33
/**
44
* Represents individual resizable/collapsible panes.
@@ -22,6 +22,7 @@ import { Component, HostBinding, Input, ElementRef, Output, EventEmitter, boolea
2222
export class IgxSplitterPaneComponent {
2323
private _minSize: string;
2424
private _maxSize: string;
25+
private _order = signal<number | null>(null);
2526

2627
/**
2728
* @hidden @internal
@@ -102,7 +103,12 @@ export class IgxSplitterPaneComponent {
102103

103104
/** @hidden @internal */
104105
@HostBinding('style.order')
105-
public order!: number;
106+
public get order() {
107+
return this._order();
108+
}
109+
public set order(val) {
110+
this._order.set(val)
111+
}
106112

107113
/**
108114
* @hidden @internal

projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe('IgxSplitter', () => {
3333
const secondPane = splitter.panes.toArray()[1].element;
3434
expect(firstPane.textContent.trim()).toBe('Pane 1');
3535
expect(secondPane.textContent.trim()).toBe('Pane 2');
36-
36+
fixture.detectChanges();
3737
const splitterBar = fixture.debugElement.query(By.css(SPLITTERBAR_CLASS)).nativeElement;
3838
expect(firstPane.style.order).toBe('0');
3939
expect(splitterBar.style.order).toBe('1');
@@ -322,6 +322,13 @@ describe('IgxSplitter', () => {
322322

323323
expect(splitterBarComponent.style.transform).not.toBe('translate3d(0px, 0px, 0px)');
324324
});
325+
326+
it('should render correctly panes created dynamically using @for', () => {
327+
fixture = TestBed.createComponent(SplitterForOfPanesComponent);
328+
fixture.detectChanges();
329+
splitter = fixture.componentInstance.splitter;
330+
expect(splitter.panes.length).toBe(3);
331+
});
325332
});
326333

327334
describe('IgxSplitter pane toggle', () => {
@@ -336,6 +343,7 @@ describe('IgxSplitter pane toggle', () => {
336343
fixture = TestBed.createComponent(SplitterTogglePaneComponent);
337344
fixture.detectChanges();
338345
splitter = fixture.componentInstance.splitter;
346+
fixture.detectChanges();
339347
}));
340348

341349
it('should collapse/expand panes', () => {
@@ -601,3 +609,19 @@ export class SplitterTogglePaneComponent extends SplitterTestComponent {
601609
})
602610
export class SplitterCollapsedPaneComponent extends SplitterTestComponent {
603611
}
612+
613+
@Component({
614+
template: `
615+
<igx-splitter>
616+
@for (number of numbers; track number) {
617+
<igx-splitter-pane>
618+
<p>{{ number }}</p>
619+
</igx-splitter-pane>
620+
}
621+
</igx-splitter>
622+
`,
623+
imports: [IgxSplitterComponent, IgxSplitterPaneComponent]
624+
})
625+
export class SplitterForOfPanesComponent extends SplitterTestComponent {
626+
public numbers = [1, 2, 3];
627+
}

projects/igniteui-angular/src/lib/splitter/splitter.component.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, Output, QueryList, booleanAttribute, forwardRef, DOCUMENT } from '@angular/core';
1+
import { AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, NgZone, Output, QueryList, booleanAttribute, forwardRef, DOCUMENT } from '@angular/core';
22
import { DragDirection, IDragMoveEventArgs, IDragStartEventArgs, IgxDragDirective, IgxDragIgnoreDirective } from '../directives/drag-drop/drag-drop.directive';
33
import { IgxSplitterPaneComponent } from './splitter-pane/splitter-pane.component';
4+
import { take } from 'rxjs';
45

56
/**
67
* An enumeration that defines the `SplitterComponent` panes orientation.
@@ -154,7 +155,7 @@ export class IgxSplitterComponent implements AfterContentInit {
154155
*/
155156
private sibling!: IgxSplitterPaneComponent;
156157

157-
constructor(@Inject(DOCUMENT) public document, private elementRef: ElementRef) { }
158+
constructor(@Inject(DOCUMENT) public document, private elementRef: ElementRef, private zone: NgZone) { }
158159
/**
159160
* Gets/Sets the splitter orientation.
160161
*
@@ -197,7 +198,9 @@ export class IgxSplitterComponent implements AfterContentInit {
197198

198199
/** @hidden @internal */
199200
public ngAfterContentInit(): void {
200-
this.initPanes();
201+
this.zone.onStable.pipe(take(1)).subscribe(() => {
202+
this.initPanes();
203+
});
201204
this.panes.changes.subscribe(() => {
202205
this.initPanes();
203206
});
@@ -472,7 +475,7 @@ export class IgxSplitBarComponent {
472475
* @hidden @internal
473476
*/
474477
public get prevButtonHidden() {
475-
return this.siblings[0].collapsed && !this.siblings[1].collapsed;
478+
return this.siblings[0]?.collapsed && !this.siblings[1]?.collapsed;
476479
}
477480

478481
/**
@@ -559,7 +562,7 @@ export class IgxSplitBarComponent {
559562
* @hidden @internal
560563
*/
561564
public get nextButtonHidden() {
562-
return this.siblings[1].collapsed && !this.siblings[0].collapsed;
565+
return this.siblings[1]?.collapsed && !this.siblings[0]?.collapsed;
563566
}
564567

565568
/**
@@ -599,7 +602,7 @@ export class IgxSplitBarComponent {
599602

600603
protected get resizeDisallowed() {
601604
const relatedTabs = this.siblings;
602-
return !!relatedTabs.find(x => x.resizable === false || x.collapsed === true);
605+
return !!relatedTabs.find(x => x?.resizable === false || x?.collapsed === true);
603606
}
604607

605608
/**

0 commit comments

Comments
 (0)