From 6bde53735b695d5c260d0ec630952a92c68ebd92 Mon Sep 17 00:00:00 2001 From: Ivan Kitanov Date: Thu, 27 Feb 2025 18:24:18 +0200 Subject: [PATCH 1/2] fix(splitter): Sizing panes corectly with minSize and the browser is shrinked --- .../lib/splitter/splitter.component.spec.ts | 72 ++++++++++++++++++- .../src/lib/splitter/splitter.component.ts | 12 +++- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts b/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts index 07e6dabb7b5..f62cdf35cbd 100644 --- a/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts +++ b/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts @@ -21,7 +21,7 @@ describe('IgxSplitter', () => { }).compileComponents())); let fixture: ComponentFixture; let splitter: IgxSplitterComponent; - + beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(SplitterTestComponent); fixture.detectChanges(); @@ -462,6 +462,76 @@ describe('IgxSplitter pane collapse', () => { }); }); +describe('IgxSplitter resizing with minSize and browser window is shrinked', () => { + configureTestSuite(); + beforeAll(waitForAsync(() => TestBed.configureTestingModule({ + imports: [ + SplitterMinSiezComponent + ] + }).compileComponents())); + + let fixture; let splitter; + beforeEach(waitForAsync(() => { + fixture = TestBed.createComponent(SplitterMinSiezComponent); + fixture.detectChanges(); + splitter = fixture.componentInstance.splitter; + })); + + it('should set the correct sizes when the user drags one pane to the end of another', () => { + const pane1 = splitter.panes.toArray()[0]; + const pane2 = splitter.panes.toArray()[1]; + const splitterBarComponent = fixture.debugElement.query(By.css(SPLITTERBAR_CLASS)).context; + const minSize = parseInt(pane1.minSize); + spyOn(splitter, 'onMoveEnd').and.callThrough(); + + pane1.size = (splitter.getTotalSize() - parseInt(pane2.size)) + 'px'; + fixture.detectChanges(); + + splitterBarComponent.moveStart.emit(pane1); + fixture.detectChanges(); + splitterBarComponent.movingEnd.emit(splitter.getTotalSize() -minSize); + fixture.detectChanges(); + + spyOnProperty(window, 'innerWidth', 'get').and.returnValue(500); + window.dispatchEvent(new Event('resize')); + splitter.elementRef.nativeElement.style.width = '500px'; + pane2.size = (splitter.getTotalSize() - minSize) + 'px'; + fixture.detectChanges(); + + splitterBarComponent.moveStart.emit(pane1); + fixture.detectChanges(); + splitterBarComponent.movingEnd.emit(-400); + fixture.detectChanges(); + + const isFullSize = pane1.size === '100%' || pane1.size === (splitter.getTotalSize() + 'px'); + + expect(splitter.onMoveEnd).toHaveBeenCalled(); + expect(isFullSize).toBeTruthy(); + }); +}); + +@Component({ + template: ` + + +
+ Pane 1 +
+
+ +
+ Pane 2 +
+
+
+ `, + imports: [IgxSplitterComponent, IgxSplitterPaneComponent] +}) +export class SplitterMinSiezComponent { + @ViewChild(IgxSplitterComponent, { static: true }) + public splitter: IgxSplitterComponent; +} + @Component({ template: ` diff --git a/projects/igniteui-angular/src/lib/splitter/splitter.component.ts b/projects/igniteui-angular/src/lib/splitter/splitter.component.ts index f0b16f6143d..3360828dd74 100644 --- a/projects/igniteui-angular/src/lib/splitter/splitter.component.ts +++ b/projects/igniteui-angular/src/lib/splitter/splitter.component.ts @@ -177,7 +177,7 @@ export class IgxSplitterComponent implements AfterContentInit { /** * Sets the visibility of the handle and expanders in the splitter bar. * False by default - * + * * @example * ```html * @@ -239,7 +239,15 @@ export class IgxSplitterComponent implements AfterContentInit { } public onMoveEnd(delta: number) { - const [ paneSize, siblingSize ] = this.calcNewSizes(delta); + let [ paneSize, siblingSize ] = this.calcNewSizes(delta); + + if (paneSize + siblingSize > this.getTotalSize() && delta < 0) { + paneSize = this.getTotalSize(); + siblingSize = 0; + } else if(paneSize + siblingSize > this.getTotalSize() && delta > 0) { + paneSize = 0; + siblingSize = this.getTotalSize(); + } if (this.pane.isPercentageSize) { // handle % resizes From d315f87907a7fbd1d4f15aaf56856b997bfcd5e5 Mon Sep 17 00:00:00 2001 From: IvanKitanov17 Date: Fri, 28 Feb 2025 11:06:23 +0200 Subject: [PATCH 2/2] chore(splitter): Removing unnecessary code from test --- .../src/lib/splitter/splitter.component.spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts b/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts index f62cdf35cbd..5bfb346d615 100644 --- a/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts +++ b/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts @@ -492,8 +492,6 @@ describe('IgxSplitter resizing with minSize and browser window is shrinked', () splitterBarComponent.movingEnd.emit(splitter.getTotalSize() -minSize); fixture.detectChanges(); - spyOnProperty(window, 'innerWidth', 'get').and.returnValue(500); - window.dispatchEvent(new Event('resize')); splitter.elementRef.nativeElement.style.width = '500px'; pane2.size = (splitter.getTotalSize() - minSize) + 'px'; fixture.detectChanges();