Skip to content

Commit 1b47d14

Browse files
authored
fix(igxSplitter): Assign pane props after zone is stable. (#15800)
1 parent b58f52a commit 1b47d14

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,7 +1,8 @@
11
import { DOCUMENT } from '@angular/common';
2-
import { AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, Output, QueryList, booleanAttribute, forwardRef } from '@angular/core';
2+
import { AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, NgZone, Output, QueryList, booleanAttribute, forwardRef } from '@angular/core';
33
import { DragDirection, IDragMoveEventArgs, IDragStartEventArgs, IgxDragDirective, IgxDragIgnoreDirective } from '../directives/drag-drop/drag-drop.directive';
44
import { IgxSplitterPaneComponent } from './splitter-pane/splitter-pane.component';
5+
import { take } from 'rxjs';
56

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

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

199200
/** @hidden @internal */
200201
public ngAfterContentInit(): void {
201-
this.initPanes();
202+
this.zone.onStable.pipe(take(1)).subscribe(() => {
203+
this.initPanes();
204+
});
202205
this.panes.changes.subscribe(() => {
203206
this.initPanes();
204207
});
@@ -473,7 +476,7 @@ export class IgxSplitBarComponent {
473476
* @hidden @internal
474477
*/
475478
public get prevButtonHidden() {
476-
return this.siblings[0].collapsed && !this.siblings[1].collapsed;
479+
return this.siblings[0]?.collapsed && !this.siblings[1]?.collapsed;
477480
}
478481

479482
/**
@@ -560,7 +563,7 @@ export class IgxSplitBarComponent {
560563
* @hidden @internal
561564
*/
562565
public get nextButtonHidden() {
563-
return this.siblings[1].collapsed && !this.siblings[0].collapsed;
566+
return this.siblings[1]?.collapsed && !this.siblings[0]?.collapsed;
564567
}
565568

566569
/**
@@ -600,7 +603,7 @@ export class IgxSplitBarComponent {
600603

601604
protected get resizeDisallowed() {
602605
const relatedTabs = this.siblings;
603-
return !!relatedTabs.find(x => x.resizable === false || x.collapsed === true);
606+
return !!relatedTabs.find(x => x?.resizable === false || x?.collapsed === true);
604607
}
605608

606609
/**

0 commit comments

Comments
 (0)