Skip to content

Commit 5f6da39

Browse files
committed
fix: add logic to fit pane in splitter
1 parent d6e61c4 commit 5f6da39

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

src/components/splitter/splitter.ts

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,14 @@ export default class IgcSplitterComponent extends EventEmitterMixin<
412412
}
413413

414414
private _resizing(delta: number) {
415-
const [paneSize, siblingSize] = this._calcNewSizes(delta);
415+
let [paneSize, siblingSize] = this._calcNewSizes(delta);
416+
const totalSize = this.getTotalSize();
417+
[paneSize, siblingSize] = this._fitInSplitter(
418+
totalSize,
419+
paneSize,
420+
siblingSize,
421+
delta
422+
);
416423

417424
this.startSize = `${paneSize}px`;
418425
this.endSize = `${siblingSize}px`;
@@ -424,11 +431,18 @@ export default class IgcSplitterComponent extends EventEmitterMixin<
424431

425432
private _resizeEnd(delta: number) {
426433
if (!this._resizeState) return;
434+
let [paneSize, siblingSize] = this._calcNewSizes(delta);
435+
const totalSize = this.getTotalSize();
436+
437+
[paneSize, siblingSize] = this._fitInSplitter(
438+
totalSize,
439+
paneSize,
440+
siblingSize,
441+
delta
442+
);
427443

428-
const [paneSize, siblingSize] = this._calcNewSizes(delta);
429444
if (this._resizeState.startPane.isPercentageBased) {
430445
// handle % resizes
431-
const totalSize = this.getTotalSize();
432446
const percentPaneSize = (paneSize / totalSize) * 100;
433447
this.startSize = `${percentPaneSize}%`;
434448
} else {
@@ -438,7 +452,6 @@ export default class IgcSplitterComponent extends EventEmitterMixin<
438452

439453
if (this._resizeState.endPane.isPercentageBased) {
440454
// handle % resizes
441-
const totalSize = this.getTotalSize();
442455
const percentSiblingSize = (siblingSize / totalSize) * 100;
443456
this.endSize = `${percentSiblingSize}%`;
444457
} else {
@@ -459,6 +472,22 @@ export default class IgcSplitterComponent extends EventEmitterMixin<
459472
return [startPaneRect[relevantDimension], endPaneRect[relevantDimension]];
460473
}
461474

475+
private _fitInSplitter(
476+
total: number,
477+
startSize: number,
478+
endSize: number,
479+
delta: number
480+
): [number, number] {
481+
let newStartSize = startSize;
482+
let newEndSize = endSize;
483+
if (startSize + endSize > total && delta > 0) {
484+
newEndSize = total - newStartSize;
485+
} else if (newStartSize + newEndSize > total && delta < 0) {
486+
newStartSize = total - newEndSize;
487+
}
488+
return [newStartSize, newEndSize];
489+
}
490+
462491
// TODO: handle RTL
463492
private _calcNewSizes(delta: number): [number, number] {
464493
if (!this._resizeState) return [0, 0];

0 commit comments

Comments
 (0)